From 507dd11479a96318de7cb9e0030b7b43c5c650db Mon Sep 17 00:00:00 2001 From: Tu Puta Madre Date: Wed, 5 Aug 2026 10:33:05 -0600 Subject: [PATCH] 226H5.43964-Starfire --- .config/vim/.netrwhist | 5 + .config/vim/autoload/pathogen.vim | 264 + .../taskwiki/after/ftplugin/vimwiki.vim | 5 + .../bundle/taskwiki/after/syntax/vimwiki.vim | 58 + .../vim/bundle/taskwiki/autoload/taskwiki.vim | 68 + .../vim/bundle/taskwiki/doc/TaskWiki-demo.gif | Bin 0 -> 539570 bytes .config/vim/bundle/taskwiki/doc/taskwiki.txt | 848 ++ .config/vim/bundle/taskwiki/extra/vwtags.py | 73 + .../taskwiki/ftplugin/vimwiki/taskwiki.vim | 160 + .../vim/bundle/taskwiki/taskwiki/.gitignore | 1 + .../vim/bundle/taskwiki/taskwiki/__init__.py | 1 + .config/vim/bundle/taskwiki/taskwiki/cache.py | 326 + .../bundle/taskwiki/taskwiki/completion.py | 142 + .../vim/bundle/taskwiki/taskwiki/constants.py | 64 + .../bundle/taskwiki/taskwiki/decorators.py | 12 + .../vim/bundle/taskwiki/taskwiki/errors.py | 30 + .config/vim/bundle/taskwiki/taskwiki/main.py | 709 + .../vim/bundle/taskwiki/taskwiki/preset.py | 114 + .../vim/bundle/taskwiki/taskwiki/regexp.py | 156 + .config/vim/bundle/taskwiki/taskwiki/short.py | 44 + .config/vim/bundle/taskwiki/taskwiki/sort.py | 193 + .config/vim/bundle/taskwiki/taskwiki/store.py | 211 + .config/vim/bundle/taskwiki/taskwiki/util.py | 444 + .../vim/bundle/taskwiki/taskwiki/viewport.py | 431 + .../vim/bundle/taskwiki/taskwiki/vwtask.py | 398 + .config/vim/bundle/taskwiki/tests/__init__.py | 5 + .config/vim/bundle/taskwiki/tests/base.py | 394 + .config/vim/bundle/taskwiki/tests/conftest.py | 46 + .../vim/bundle/taskwiki/tests/test_choose.py | 250 + .../bundle/taskwiki/tests/test_completion.py | 115 + .../vim/bundle/taskwiki/tests/test_config.py | 14 + .../bundle/taskwiki/tests/test_ftplugin.py | 18 + .../bundle/taskwiki/tests/test_mappings.py | 169 + .../vim/bundle/taskwiki/tests/test_preset.py | 301 + .../taskwiki/tests/test_preset_parsing.py | 54 + .../bundle/taskwiki/tests/test_selected.py | 1372 ++ .../vim/bundle/taskwiki/tests/test_splits.py | 287 + .../taskwiki/tests/test_syntax_parsing.py | 37 + .../vim/bundle/taskwiki/tests/test_util.py | 67 + .../bundle/taskwiki/tests/test_viewport.py | 715 + .../taskwiki/tests/test_viewport_parsing.py | 171 + .../vim/bundle/taskwiki/tests/test_vwtags.py | 95 + .../vim/bundle/taskwiki/tests/test_vwtask.py | 580 + .../taskwiki/tests/test_vwtask_parsing.py | 136 + .../vim-asciidoc/UltiSnips/asciidoc.snippets | 22 + .../ftdetect/asciidoc_filetype.vim | 54 + .../bundle/vim-asciidoc/ftplugin/asciidoc.vim | 31 + .../bundle/vim-css-color/after/syntax/c.vim | 1 + .../bundle/vim-css-color/after/syntax/cfg.vim | 1 + .../vim-css-color/after/syntax/clojure.vim | 2 + .../bundle/vim-css-color/after/syntax/csh.vim | 4 + .../bundle/vim-css-color/after/syntax/css.vim | 1 + .../vim-css-color/after/syntax/dosini.vim | 1 + .../bundle/vim-css-color/after/syntax/elm.vim | 1 + .../vim-css-color/after/syntax/fish.vim | 3 + .../bundle/vim-css-color/after/syntax/go.vim | 1 + .../vim-css-color/after/syntax/html.vim | 2 + .../bundle/vim-css-color/after/syntax/i3.vim | 4 + .../vim-css-color/after/syntax/i3config.vim | 3 + .../vim-css-color/after/syntax/javascript.vim | 14 + .../vim-css-color/after/syntax/json.vim | 1 + .../bundle/vim-css-color/after/syntax/jsx.vim | 3 + .../vim-css-color/after/syntax/kitty.vim | 1 + .../vim-css-color/after/syntax/less.vim | 8 + .../vim-css-color/after/syntax/moon.vim | 1 + .../bundle/vim-css-color/after/syntax/nix.vim | 2 + .../vim-css-color/after/syntax/perl.vim | 1 + .../bundle/vim-css-color/after/syntax/php.vim | 1 + .../vim-css-color/after/syntax/python.vim | 1 + .../bundle/vim-css-color/after/syntax/qml.vim | 1 + .../bundle/vim-css-color/after/syntax/r.vim | 1 + .../vim-css-color/after/syntax/rasi.vim | 4 + .../vim-css-color/after/syntax/ruby.vim | 1 + .../vim-css-color/after/syntax/sass.vim | 1 + .../vim-css-color/after/syntax/scss.vim | 1 + .../bundle/vim-css-color/after/syntax/sh.vim | 6 + .../vim-css-color/after/syntax/stylus.vim | 1 + .../vim-css-color/after/syntax/tcsh.vim | 4 + .../vim-css-color/after/syntax/tmux.vim | 1 + .../vim-css-color/after/syntax/typescript.vim | 6 + .../after/syntax/typescriptreact.vim | 1 + .../vim-css-color/after/syntax/vala.vim | 1 + .../bundle/vim-css-color/after/syntax/vim.vim | 1 + .../vim-css-color/after/syntax/xdefaults.vim | 1 + .../bundle/vim-css-color/after/syntax/xml.vim | 1 + .../vim-css-color/after/syntax/yaml.vim | 1 + .../bundle/vim-css-color/after/syntax/zsh.vim | 4 + .../vim-css-color/autoload/css_color.vim | 336 + .../vim-css-color/syntax/colornames/basic.vim | 47 + .../syntax/colornames/extended.vim | 290 + .config/vim/bundle/vim-css-color/tests/bench | 6 + .../bundle/vim-css-color/tests/example.csh | 13 + .../bundle/vim-css-color/tests/example.css | 24 + .../bundle/vim-css-color/tests/example.fish | 10 + .../bundle/vim-css-color/tests/example.jsx | 11 + .../bundle/vim-css-color/tests/example.less | 24 + .../bundle/vim-css-color/tests/example.nix | 69 + .../bundle/vim-css-color/tests/example.sass | 25 + .../bundle/vim-css-color/tests/example.scss | 24 + .../vim/bundle/vim-css-color/tests/example.sh | 26 + .../bundle/vim-css-color/tests/example.stylus | 28 + .../bundle/vim-css-color/tests/example.tcsh | 13 + .../vim/bundle/vim-css-color/tests/example.ts | 21 + .../bundle/vim-css-color/tests/example.tsx | 53 + .../bundle/vim-css-color/tests/example.zsh | 23 + .../bundle/vim-css-color/tests/torture.css | 256 + .../bundle/vimwiki/autoload/vimwiki/base.vim | 2395 ++++ .../autoload/vimwiki/customwiki2html.sh | 62 + .../vimwiki/autoload/vimwiki/default.tpl | 12 + .../bundle/vimwiki/autoload/vimwiki/diary.vim | 436 + .../bundle/vimwiki/autoload/vimwiki/html.vim | 1744 +++ .../bundle/vimwiki/autoload/vimwiki/lst.vim | 1713 +++ .../autoload/vimwiki/markdown_base.vim | 162 + .../bundle/vimwiki/autoload/vimwiki/path.vim | 210 + .../bundle/vimwiki/autoload/vimwiki/style.css | 187 + .../bundle/vimwiki/autoload/vimwiki/tags.vim | 405 + .../bundle/vimwiki/autoload/vimwiki/tbl.vim | 861 ++ .../vim/bundle/vimwiki/autoload/vimwiki/u.vim | 157 + .../bundle/vimwiki/autoload/vimwiki/vars.vim | 984 ++ .config/vim/bundle/vimwiki/doc/entries.png | Bin 0 -> 341380 bytes .config/vim/bundle/vimwiki/doc/lists.png | Bin 0 -> 430499 bytes .config/vim/bundle/vimwiki/doc/logo.svg | 10 + .../vim/bundle/vimwiki/doc/screenshot_1.png | Bin 0 -> 29362 bytes .../vim/bundle/vimwiki/doc/screenshot_2.png | Bin 0 -> 49959 bytes .config/vim/bundle/vimwiki/doc/splash.png | Bin 0 -> 9699 bytes .config/vim/bundle/vimwiki/doc/tags | 248 + .config/vim/bundle/vimwiki/doc/todos.png | Bin 0 -> 369021 bytes .config/vim/bundle/vimwiki/doc/vimwiki.txt | 3988 ++++++ .config/vim/bundle/vimwiki/doc/wiki.png | Bin 0 -> 476675 bytes .../vim/bundle/vimwiki/ftplugin/vimwiki.vim | 701 + .config/vim/bundle/vimwiki/plugin/vimwiki.vim | 469 + .config/vim/bundle/vimwiki/syntax/vimwiki.vim | 490 + .../bundle/vimwiki/syntax/vimwiki_default.vim | 110 + .../vimwiki/syntax/vimwiki_markdown.vim | 104 + .../syntax/vimwiki_markdown_custom.vim | 206 + .../bundle/vimwiki/syntax/vimwiki_media.vim | 85 + .config/vim/bundle/vimwiki/test/README.md | 75 + .../vimwiki/test/command_generate_links.vader | 103 + .../vimwiki/test/command_generate_tags.vader | 96 + .../bundle/vimwiki/test/command_goto.vader | 64 + .../vimwiki/test/command_rename_link.vader | 189 + .../vim/bundle/vimwiki/test/command_toc.vader | 149 + .../vimwiki/test/convert_default_html.vader | 59 + .../vimwiki/test/independent_runs/map.vader | 461 + .../test/independent_runs/search.vader | 66 + .../vimwiki/test/independent_runs/vader_setup | 1 + .../test/independent_runs/vader_teardown | 1 + .../bundle/vimwiki/test/link_creation.vader | 125 + .../link_markdown_multiple_per_file.vader | 225 + .../vimwiki/test/list_VimwikiReturn.vader | 282 + .../vim/bundle/vimwiki/test/list_margin.vader | 108 + .../vim/bundle/vimwiki/test/list_update.vader | 191 + .../bundle/vimwiki/test/resources/delay.wiki | 10923 ++++++++++++++++ .../test/resources/testmarkdown/buzz_bozz.md | 3 + .../test/resources/testmarkdown/index.md | 59 + .../resources/testwiki space/buzz bozz.wiki | 3 + .../test/resources/testwiki space/index.wiki | 30 + .../test/resources/testwiki/buzz_bozz.wiki | 3 + .../test/resources/testwiki/index.wiki | 35 + .config/vim/bundle/vimwiki/test/run_tests.sh | 248 + .config/vim/bundle/vimwiki/test/syntax.vader | 318 + .../vimwiki/test/table_autoformat.vader | 157 + .../bundle/vimwiki/test/tabnext_delay.vader | 32 + .../test/vader_includes/vader_setup.vader | 89 + .../test/vader_includes/vader_teardown.vader | 6 + .config/vim/bundle/vimwiki/test/vimrc | 67 + .config/vim/colors/ale.vim | 84 + .config/vim/ftplugin/markdown.vim | 1 + .config/vim/ftplugin/vimwiki.vim | 2 + .../pack/dist/opt/cfilter/plugin/cfilter.vim | 72 + .../dist/opt/comment/autoload/comment.vim | 166 + .../vim/pack/dist/opt/comment/doc/comment.txt | 131 + .config/vim/pack/dist/opt/comment/doc/tags | 17 + .../pack/dist/opt/comment/plugin/comment.vim | 29 + .../pack/dist/opt/dvorak/dvorak/disable.vim | 72 + .../pack/dist/opt/dvorak/dvorak/enable.vim | 77 + .../pack/dist/opt/dvorak/plugin/dvorak.vim | 16 + .../opt/editexisting/plugin/editexisting.vim | 118 + .../pack/dist/opt/editorconfig/.editorconfig | 27 + .../pack/dist/opt/editorconfig/CONTRIBUTORS | 6 + .../vim/pack/dist/opt/editorconfig/LICENSE | 26 + .../pack/dist/opt/editorconfig/LICENSE.PSF | 53 + .../vim/pack/dist/opt/editorconfig/README.md | 148 + .../editorconfig/autoload/editorconfig.vim | 60 + .../autoload/editorconfig_core.vim | 147 + .../autoload/editorconfig_core/fnmatch.vim | 467 + .../autoload/editorconfig_core/handler.vim | 183 + .../autoload/editorconfig_core/ini.vim | 264 + .../autoload/editorconfig_core/util.vim | 84 + .../opt/editorconfig/doc/editorconfig.txt | 238 + .../vim/pack/dist/opt/editorconfig/doc/tags | 21 + .../editorconfig/ftdetect/editorconfig.vim | 1 + .../opt/editorconfig/plugin/editorconfig.vim | 614 + .../dist/opt/helptoc/autoload/helptoc.vim | 1341 ++ .../vim/pack/dist/opt/helptoc/doc/helptoc.txt | 351 + .config/vim/pack/dist/opt/helptoc/doc/tags | 16 + .../pack/dist/opt/helptoc/plugin/helptoc.vim | 5 + .../pack/dist/opt/hlyank/plugin/hlyank.vim | 39 + .../pack/dist/opt/justify/plugin/justify.vim | 316 + .../dist/opt/matchit/autoload/matchit.vim | 784 ++ .../vim/pack/dist/opt/matchit/doc/matchit.txt | 412 + .config/vim/pack/dist/opt/matchit/doc/tags | 53 + .../pack/dist/opt/matchit/plugin/matchit.vim | 127 + .config/vim/pack/dist/opt/netrw/LICENSE.txt | 16 + .config/vim/pack/dist/opt/netrw/README.md | 544 + .../pack/dist/opt/netrw/autoload/netrw.vim | 9663 ++++++++++++++ .../pack/dist/opt/netrw/autoload/netrw/fs.vim | 188 + .../dist/opt/netrw/autoload/netrw/msg.vim | 70 + .../pack/dist/opt/netrw/autoload/netrw/os.vim | 48 + .../opt/netrw/autoload/netrw_gitignore.vim | 28 + .config/vim/pack/dist/opt/netrw/doc/netrw.txt | 3608 +++++ .../dist/opt/netrw/plugin/netrwPlugin.vim | 165 + .../vim/pack/dist/opt/netrw/syntax/netrw.vim | 150 + .../dist/opt/nohlsearch/plugin/nohlsearch.vim | 24 + .../dist/opt/shellmenu/plugin/shellmenu.vim | 104 + .../dist/opt/swapmouse/plugin/swapmouse.vim | 22 + .../dist/opt/termdebug/plugin/termdebug.vim | 2358 ++++ .config/vim/spell/check_locales.vim | 21 + .config/vim/spell/cleanadd.vim | 32 + .config/vim/spell/es.utf-8.spl | Bin 0 -> 601018 bytes .config/vim/spell/es.utf-8.sug | Bin 0 -> 1912377 bytes .config/vim/spell/fixdup.vim | 30 + .config/vim/spell/he.vim | 10 + .config/vim/spell/spell.vim | 4 + .config/vim/spell/yi.vim | 10 + .config/vim/syntax/2html.vim | 2072 +++ .config/vim/syntax/8th.vim | 499 + .config/vim/syntax/a2ps.vim | 71 + .config/vim/syntax/a65.vim | 153 + .config/vim/syntax/aap.vim | 159 + .config/vim/syntax/abap.vim | 196 + .config/vim/syntax/abaqus.vim | 34 + .config/vim/syntax/abc.vim | 51 + .config/vim/syntax/abel.vim | 161 + .config/vim/syntax/abnf.vim | 33 + .config/vim/syntax/acedb.vim | 110 + .config/vim/syntax/ada.vim | 368 + .config/vim/syntax/aflex.vim | 82 + .config/vim/syntax/ahdl.vim | 81 + .config/vim/syntax/aidl.vim | 23 + .config/vim/syntax/alsaconf.vim | 49 + .config/vim/syntax/amiga.vim | 89 + .config/vim/syntax/aml.vim | 144 + .config/vim/syntax/ampl.vim | 140 + .config/vim/syntax/ant.vim | 97 + .config/vim/syntax/antlr.vim | 54 + .config/vim/syntax/antlr4.vim | 30 + .config/vim/syntax/apache.vim | 205 + .config/vim/syntax/apachestyle.vim | 54 + .config/vim/syntax/apkbuild.vim | 17 + .config/vim/syntax/aptconf.vim | 577 + .config/vim/syntax/arch.vim | 41 + .config/vim/syntax/arduino.vim | 83 + .config/vim/syntax/art.vim | 50 + .config/vim/syntax/asciidoc.vim | 185 + .config/vim/syntax/asm.vim | 167 + .config/vim/syntax/asm68k.vim | 378 + .config/vim/syntax/asmh8300.vim | 58 + .config/vim/syntax/asn.vim | 73 + .config/vim/syntax/aspperl.vim | 25 + .config/vim/syntax/aspvbs.vim | 182 + .config/vim/syntax/asterisk.vim | 88 + .config/vim/syntax/asteriskvm.vim | 51 + .config/vim/syntax/astro.vim | 190 + .config/vim/syntax/asy.vim | 249 + .config/vim/syntax/atlas.vim | 85 + .config/vim/syntax/autodoc.vim | 101 + .config/vim/syntax/autohotkey.vim | 325 + .config/vim/syntax/autoit.vim | 1125 ++ .config/vim/syntax/automake.vim | 77 + .config/vim/syntax/autopkgtest.vim | 95 + .config/vim/syntax/ave.vim | 79 + .config/vim/syntax/avra.vim | 71 + .config/vim/syntax/awk.vim | 217 + .config/vim/syntax/ayacc.vim | 75 + .config/vim/syntax/b.vim | 114 + .config/vim/syntax/baan.vim | 1917 +++ .config/vim/syntax/bash.vim | 20 + .config/vim/syntax/basic.vim | 380 + .config/vim/syntax/bc.vim | 66 + .config/vim/syntax/bdf.vim | 97 + .config/vim/syntax/bib.vim | 121 + .config/vim/syntax/bindzone.vim | 97 + .config/vim/syntax/bitbake.vim | 128 + .config/vim/syntax/blank.vim | 39 + .config/vim/syntax/bsdl.vim | 17 + .config/vim/syntax/bst.vim | 70 + .config/vim/syntax/btm.vim | 216 + .config/vim/syntax/bzl.vim | 16 + .config/vim/syntax/bzr.vim | 50 + .config/vim/syntax/c.vim | 637 + .config/vim/syntax/cabal.vim | 278 + .config/vim/syntax/cabalconfig.vim | 30 + .config/vim/syntax/cabalproject.vim | 28 + .config/vim/syntax/calendar.vim | 110 + .config/vim/syntax/cangjie.vim | 193 + .config/vim/syntax/catalog.vim | 30 + .config/vim/syntax/cdl.vim | 78 + .config/vim/syntax/cdrdaoconf.vim | 139 + .config/vim/syntax/cdrtoc.vim | 537 + .config/vim/syntax/cf.vim | 1018 ++ .config/vim/syntax/cfg.vim | 49 + .config/vim/syntax/cgdbrc.vim | 16 + .config/vim/syntax/ch.vim | 38 + .config/vim/syntax/chaiscript.vim | 94 + .config/vim/syntax/change.vim | 29 + .config/vim/syntax/changelog.vim | 58 + .config/vim/syntax/chaskell.vim | 14 + .config/vim/syntax/chatito.vim | 62 + .config/vim/syntax/cheetah.vim | 47 + .config/vim/syntax/chicken.vim | 94 + .config/vim/syntax/chill.vim | 178 + .config/vim/syntax/chordpro.vim | 174 + .config/vim/syntax/chuck.vim | 187 + .config/vim/syntax/cl.vim | 98 + .config/vim/syntax/clean.vim | 90 + .config/vim/syntax/clipper.vim | 135 + .config/vim/syntax/clojure.vim | 218 + .config/vim/syntax/cmacro.vim | 77 + .config/vim/syntax/cmake.vim | 4980 +++++++ .config/vim/syntax/cmakecache.vim | 60 + .config/vim/syntax/cmod.vim | 144 + .config/vim/syntax/cmusrc.vim | 309 + .config/vim/syntax/cobol.vim | 260 + .config/vim/syntax/coco.vim | 33 + .config/vim/syntax/codeowners.vim | 23 + .config/vim/syntax/colortest.vim | 82 + .config/vim/syntax/conaryrecipe.vim | 137 + .config/vim/syntax/conf.vim | 27 + .config/vim/syntax/config.vim | 60 + .config/vim/syntax/confini.vim | 18 + .config/vim/syntax/context.vim | 144 + .config/vim/syntax/cpp.vim | 131 + .config/vim/syntax/crm.vim | 41 + .config/vim/syntax/crontab.vim | 67 + .config/vim/syntax/cs.vim | 360 + .config/vim/syntax/csc.vim | 191 + .config/vim/syntax/csdl.vim | 536 + .config/vim/syntax/csh.vim | 144 + .config/vim/syntax/csp.vim | 182 + .config/vim/syntax/css.vim | 671 + .config/vim/syntax/csv.vim | 39 + .config/vim/syntax/cterm.vim | 177 + .config/vim/syntax/ctrlh.vim | 24 + .config/vim/syntax/cucumber.vim | 170 + .config/vim/syntax/cuda.vim | 53 + .config/vim/syntax/cupl.vim | 124 + .config/vim/syntax/cuplsim.vim | 63 + .config/vim/syntax/cvs.vim | 29 + .config/vim/syntax/cvsrc.vim | 39 + .config/vim/syntax/cweb.vim | 68 + .config/vim/syntax/cynlib.vim | 74 + .config/vim/syntax/cynpp.vim | 50 + .config/vim/syntax/d.vim | 573 + .config/vim/syntax/dart.vim | 90 + .config/vim/syntax/datascript.vim | 102 + .config/vim/syntax/dax.vim | 151 + .config/vim/syntax/dcd.vim | 51 + .config/vim/syntax/dcl.vim | 153 + .config/vim/syntax/deb822sources.vim | 63 + .config/vim/syntax/debchangelog.vim | 62 + .config/vim/syntax/debcontrol.vim | 132 + .config/vim/syntax/debcopyright.vim | 33 + .config/vim/syntax/debsources.vim | 46 + .config/vim/syntax/def.vim | 44 + .config/vim/syntax/denyhosts.vim | 289 + .config/vim/syntax/dep3patch.vim | 57 + .config/vim/syntax/desc.vim | 88 + .config/vim/syntax/desktop.vim | 267 + .config/vim/syntax/dictconf.vim | 80 + .config/vim/syntax/dictdconf.vim | 146 + .config/vim/syntax/diff.vim | 390 + .config/vim/syntax/dircolors.vim | 222 + .config/vim/syntax/dirpager.vim | 56 + .config/vim/syntax/diva.vim | 96 + .config/vim/syntax/django.vim | 84 + .config/vim/syntax/dns.vim | 5 + .config/vim/syntax/dnsmasq.vim | 242 + .config/vim/syntax/docbk.vim | 186 + .config/vim/syntax/docbksgml.vim | 7 + .config/vim/syntax/docbkxml.vim | 7 + .config/vim/syntax/dockerfile.vim | 44 + .config/vim/syntax/dosbatch.vim | 164 + .config/vim/syntax/dosini.vim | 49 + .config/vim/syntax/dot.vim | 121 + .config/vim/syntax/doxygen.vim | 633 + .config/vim/syntax/dracula.vim | 72 + .config/vim/syntax/dsl.vim | 38 + .config/vim/syntax/dtd.vim | 161 + .config/vim/syntax/dtml.vim | 208 + .config/vim/syntax/dtrace.vim | 145 + .config/vim/syntax/dts.vim | 80 + .config/vim/syntax/dune.vim | 50 + .config/vim/syntax/dylan.vim | 92 + .config/vim/syntax/dylanintr.vim | 39 + .config/vim/syntax/dylanlid.vim | 29 + .config/vim/syntax/ecd.vim | 44 + .config/vim/syntax/edif.vim | 45 + .config/vim/syntax/editorconfig.vim | 21 + .config/vim/syntax/eiffel.vim | 199 + .config/vim/syntax/elf.vim | 82 + .config/vim/syntax/elinks.vim | 188 + .config/vim/syntax/elm.vim | 105 + .config/vim/syntax/elmfilt.vim | 59 + .config/vim/syntax/erlang.vim | 408 + .config/vim/syntax/eruby.vim | 79 + .config/vim/syntax/esmtprc.vim | 31 + .config/vim/syntax/esqlc.vim | 58 + .config/vim/syntax/esterel.vim | 78 + .config/vim/syntax/eterm.vim | 429 + .config/vim/syntax/euphoria3.vim | 133 + .config/vim/syntax/euphoria4.vim | 245 + .config/vim/syntax/eviews.vim | 87 + .config/vim/syntax/exim.vim | 105 + .config/vim/syntax/expect.vim | 103 + .config/vim/syntax/exports.vim | 59 + .config/vim/syntax/falcon.vim | 197 + .config/vim/syntax/fan.vim | 132 + .config/vim/syntax/fasm.vim | 151 + .config/vim/syntax/fdcc.vim | 101 + .config/vim/syntax/fetchmail.vim | 83 + .config/vim/syntax/fgl.vim | 134 + .config/vim/syntax/fish.vim | 225 + .config/vim/syntax/flexwiki.vim | 133 + .config/vim/syntax/focexec.vim | 88 + .config/vim/syntax/form.vim | 145 + .config/vim/syntax/forth.vim | 455 + .config/vim/syntax/fortran.vim | 490 + .config/vim/syntax/foxpro.vim | 716 + .config/vim/syntax/fpcmake.vim | 58 + .config/vim/syntax/framescript.vim | 491 + .config/vim/syntax/freebasic.vim | 674 + .config/vim/syntax/fstab.vim | 529 + .config/vim/syntax/fvwm.vim | 642 + .config/vim/syntax/fvwm2m4.vim | 32 + .config/vim/syntax/gdb.vim | 104 + .config/vim/syntax/gdmo.vim | 83 + .config/vim/syntax/gdresource.vim | 65 + .config/vim/syntax/gdscript.vim | 103 + .config/vim/syntax/gdshader.vim | 57 + .config/vim/syntax/gedcom.vim | 53 + .config/vim/syntax/gel.vim | 19 + .config/vim/syntax/gemtext.vim | 24 + .config/vim/syntax/gift.vim | 216 + .config/vim/syntax/git.vim | 111 + .config/vim/syntax/gitattributes.vim | 63 + .config/vim/syntax/gitcommit.vim | 111 + .config/vim/syntax/gitconfig.vim | 36 + .config/vim/syntax/gitignore.vim | 29 + .config/vim/syntax/gitolite.vim | 94 + .config/vim/syntax/gitrebase.vim | 62 + .config/vim/syntax/gitsendemail.vim | 23 + .config/vim/syntax/gkrellmrc.vim | 75 + .config/vim/syntax/gleam.vim | 98 + .config/vim/syntax/glsl.vim | 752 ++ .config/vim/syntax/gnash.vim | 96 + .config/vim/syntax/gnuplot.vim | 549 + .config/vim/syntax/go.vim | 561 + .config/vim/syntax/goaccess.vim | 34 + .config/vim/syntax/godoc.vim | 19 + .config/vim/syntax/gp.vim | 88 + .config/vim/syntax/gpg.vim | 191 + .config/vim/syntax/gprof.vim | 70 + .config/vim/syntax/grads.vim | 73 + .config/vim/syntax/graphql.vim | 90 + .config/vim/syntax/gretl.vim | 85 + .config/vim/syntax/groff.vim | 10 + .config/vim/syntax/groovy.vim | 452 + .config/vim/syntax/group.vim | 52 + .config/vim/syntax/grub.vim | 93 + .config/vim/syntax/gsp.vim | 54 + .config/vim/syntax/gtkrc.vim | 126 + .config/vim/syntax/gvpr.vim | 85 + .config/vim/syntax/gyp.vim | 49 + .config/vim/syntax/haml.vim | 109 + .config/vim/syntax/hamster.vim | 370 + .config/vim/syntax/hare.vim | 268 + .config/vim/syntax/haredoc.vim | 43 + .config/vim/syntax/haskell.vim | 194 + .config/vim/syntax/haste.vim | 142 + .config/vim/syntax/hastepreproc.vim | 38 + .config/vim/syntax/hb.vim | 89 + .config/vim/syntax/hcl.vim | 81 + .config/vim/syntax/help.vim | 314 + .config/vim/syntax/help_it.vim | 17 + .config/vim/syntax/help_ru.vim | 67 + .config/vim/syntax/hercules.vim | 119 + .config/vim/syntax/hex.vim | 89 + .config/vim/syntax/hgcommit.vim | 30 + .config/vim/syntax/hitest.vim | 10 + .config/vim/syntax/hlsplaylist.vim | 120 + .config/vim/syntax/hog.vim | 208 + .config/vim/syntax/hollywood.vim | 186 + .config/vim/syntax/hostconf.vim | 147 + .config/vim/syntax/hostsaccess.vim | 23 + .config/vim/syntax/html.vim | 414 + .config/vim/syntax/htmlangular.vim | 18 + .config/vim/syntax/htmlcheetah.vim | 24 + .config/vim/syntax/htmldjango.vim | 26 + .config/vim/syntax/htmlm4.vim | 31 + .config/vim/syntax/htmlos.vim | 149 + .config/vim/syntax/hyprlang.vim | 65 + .config/vim/syntax/i3config.vim | 346 + .config/vim/syntax/ia64.vim | 293 + .config/vim/syntax/ibasic.vim | 176 + .config/vim/syntax/icemenu.vim | 34 + .config/vim/syntax/icon.vim | 211 + .config/vim/syntax/idl.vim | 324 + .config/vim/syntax/idlang.vim | 241 + .config/vim/syntax/idris2.vim | 86 + .config/vim/syntax/indent.vim | 153 + .config/vim/syntax/inform.vim | 392 + .config/vim/syntax/initex.vim | 376 + .config/vim/syntax/initng.vim | 90 + .config/vim/syntax/inittab.vim | 62 + .config/vim/syntax/ipfilter.vim | 55 + .config/vim/syntax/ipkg.vim | 66 + .config/vim/syntax/ishd.vim | 409 + .config/vim/syntax/iss.vim | 138 + .config/vim/syntax/ist.vim | 58 + .config/vim/syntax/j.vim | 146 + .config/vim/syntax/jal.vim | 236 + .config/vim/syntax/jam.vim | 240 + .config/vim/syntax/jargon.vim | 24 + .config/vim/syntax/java.vim | 1008 ++ .config/vim/syntax/javacc.vim | 65 + .config/vim/syntax/javascript.vim | 147 + .config/vim/syntax/javascriptreact.vim | 3 + .config/vim/syntax/jess.vim | 144 + .config/vim/syntax/jgraph.vim | 45 + .config/vim/syntax/jinja.vim | 87 + .config/vim/syntax/jjdescription.vim | 25 + .config/vim/syntax/jovial.vim | 110 + .config/vim/syntax/jproperties.vim | 135 + .config/vim/syntax/jq.vim | 137 + .config/vim/syntax/json.vim | 136 + .config/vim/syntax/json5.vim | 76 + .config/vim/syntax/jsonc.vim | 44 + .config/vim/syntax/jsp.vim | 68 + .config/vim/syntax/julia.vim | 550 + .config/vim/syntax/just.vim | 406 + .config/vim/syntax/karel.vim | 112 + .config/vim/syntax/kconfig.vim | 737 ++ .config/vim/syntax/kdl.vim | 48 + .config/vim/syntax/kitty.vim | 118 + .config/vim/syntax/kivy.vim | 36 + .config/vim/syntax/kix.vim | 170 + .config/vim/syntax/kotlin.vim | 157 + .config/vim/syntax/krl.vim | 461 + .config/vim/syntax/kscript.vim | 57 + .config/vim/syntax/kwt.vim | 70 + .config/vim/syntax/lace.vim | 122 + .config/vim/syntax/latte.vim | 81 + .config/vim/syntax/lc.vim | 31 + .config/vim/syntax/ld.vim | 82 + .config/vim/syntax/ldapconf.vim | 338 + .config/vim/syntax/ldif.vim | 33 + .config/vim/syntax/less.vim | 78 + .config/vim/syntax/lex.vim | 190 + .config/vim/syntax/lf.vim | 250 + .config/vim/syntax/lftp.vim | 152 + .config/vim/syntax/lhaskell.vim | 134 + .config/vim/syntax/libao.vim | 27 + .config/vim/syntax/lidris2.vim | 25 + .config/vim/syntax/lifelines.vim | 154 + .config/vim/syntax/lilo.vim | 174 + .config/vim/syntax/limits.vim | 44 + .config/vim/syntax/liquid.vim | 138 + .config/vim/syntax/lisp.vim | 624 + .config/vim/syntax/lite.vim | 168 + .config/vim/syntax/litestep.vim | 269 + .config/vim/syntax/livebook.vim | 8 + .config/vim/syntax/lnk.vim | 40 + .config/vim/syntax/lnkmap.vim | 35 + .config/vim/syntax/log.vim | 222 + .config/vim/syntax/loginaccess.vim | 96 + .config/vim/syntax/logindefs.vim | 195 + .config/vim/syntax/logtalk.vim | 455 + .config/vim/syntax/lotos.vim | 69 + .config/vim/syntax/lout.vim | 135 + .config/vim/syntax/lpc.vim | 447 + .config/vim/syntax/lprolog.vim | 124 + .config/vim/syntax/lscript.vim | 200 + .config/vim/syntax/lsl.vim | 277 + .config/vim/syntax/lss.vim | 123 + .config/vim/syntax/lua.vim | 443 + .config/vim/syntax/luau.vim | 15 + .config/vim/syntax/lynx.vim | 151 + .config/vim/syntax/lyrics.vim | 43 + .config/vim/syntax/m17ndb.vim | 28 + .config/vim/syntax/m3build.vim | 177 + .config/vim/syntax/m3quake.vim | 74 + .config/vim/syntax/m4.vim | 105 + .config/vim/syntax/mail.vim | 117 + .config/vim/syntax/mailaliases.vim | 71 + .config/vim/syntax/mailcap.vim | 35 + .config/vim/syntax/make.vim | 193 + .config/vim/syntax/mallard.vim | 37 + .config/vim/syntax/man.vim | 58 + .config/vim/syntax/manconf.vim | 117 + .config/vim/syntax/manual.vim | 30 + .config/vim/syntax/maple.vim | 624 + .config/vim/syntax/markdown.vim | 200 + .config/vim/syntax/masm.vim | 560 + .config/vim/syntax/mason.vim | 85 + .config/vim/syntax/master.vim | 37 + .config/vim/syntax/matlab.vim | 119 + .config/vim/syntax/maxima.vim | 261 + .config/vim/syntax/mbsync.vim | 220 + .config/vim/syntax/mediawiki.vim | 292 + .config/vim/syntax/mel.vim | 108 + .config/vim/syntax/mermaid.vim | 131 + .config/vim/syntax/meson.vim | 162 + .config/vim/syntax/messages.vim | 74 + .config/vim/syntax/mf.vim | 308 + .config/vim/syntax/mgl.vim | 117 + .config/vim/syntax/mgp.vim | 69 + .config/vim/syntax/mib.vim | 57 + .config/vim/syntax/mix.vim | 84 + .config/vim/syntax/mma.vim | 321 + .config/vim/syntax/mmix.vim | 152 + .config/vim/syntax/mmp.vim | 49 + .config/vim/syntax/modconf.vim | 44 + .config/vim/syntax/model.vim | 45 + .config/vim/syntax/modsim3.vim | 97 + .config/vim/syntax/modula2.vim | 23 + .config/vim/syntax/modula3.vim | 145 + .config/vim/syntax/mojo.vim | 316 + .config/vim/syntax/monk.vim | 217 + .config/vim/syntax/moo.vim | 173 + .config/vim/syntax/mp.vim | 273 + .config/vim/syntax/mplayerconf.vim | 128 + .config/vim/syntax/mrxvtrc.vim | 282 + .config/vim/syntax/msidl.vim | 84 + .config/vim/syntax/msmessages.vim | 132 + .config/vim/syntax/msql.vim | 83 + .config/vim/syntax/mss.vim | 23 + .config/vim/syntax/mupad.vim | 284 + .config/vim/syntax/murphi.vim | 126 + .config/vim/syntax/mush.vim | 215 + .config/vim/syntax/muttrc.vim | 847 ++ .config/vim/syntax/mysql.vim | 312 + .config/vim/syntax/n1ql.vim | 434 + .config/vim/syntax/named.vim | 229 + .config/vim/syntax/nanorc.vim | 243 + .config/vim/syntax/nasm.vim | 1192 ++ .config/vim/syntax/nastran.vim | 181 + .config/vim/syntax/natural.vim | 201 + .config/vim/syntax/ncf.vim | 247 + .config/vim/syntax/neomuttlog.vim | 69 + .config/vim/syntax/neomuttrc.vim | 911 ++ .config/vim/syntax/netrc.vim | 56 + .config/vim/syntax/nginx.vim | 2342 ++++ .config/vim/syntax/ninja.vim | 87 + .config/vim/syntax/nix.vim | 212 + .config/vim/syntax/nosyntax.vim | 31 + .config/vim/syntax/nqc.vim | 365 + .config/vim/syntax/nroff.vim | 237 + .config/vim/syntax/nsis.vim | 730 ++ .config/vim/syntax/nu.vim | 720 + .config/vim/syntax/obj.vim | 83 + .config/vim/syntax/objc.vim | 534 + .config/vim/syntax/objcpp.vim | 20 + .config/vim/syntax/obse.vim | 3360 +++++ .config/vim/syntax/ocaml.vim | 668 + .config/vim/syntax/occam.vim | 116 + .config/vim/syntax/odin.vim | 104 + .config/vim/syntax/omnimark.vim | 833 ++ .config/vim/syntax/ondir.vim | 35 + .config/vim/syntax/opam.vim | 74 + .config/vim/syntax/opencl.vim | 13 + .config/vim/syntax/openroad.vim | 252 + .config/vim/syntax/openscad.vim | 129 + .config/vim/syntax/openvpn.vim | 72 + .config/vim/syntax/opl.vim | 89 + .config/vim/syntax/ora.vim | 464 + .config/vim/syntax/org.vim | 72 + .config/vim/syntax/pacmanlog.vim | 48 + .config/vim/syntax/pamconf.vim | 140 + .config/vim/syntax/pamenv.vim | 28 + .config/vim/syntax/pandoc.vim | 714 + .config/vim/syntax/papp.vim | 76 + .config/vim/syntax/pascal.vim | 384 + .config/vim/syntax/passwd.vim | 71 + .config/vim/syntax/pbtxt.vim | 44 + .config/vim/syntax/pcap.vim | 48 + .config/vim/syntax/pccts.vim | 89 + .config/vim/syntax/pdf.vim | 73 + .config/vim/syntax/perl.vim | 662 + .config/vim/syntax/pf.vim | 333 + .config/vim/syntax/pfmain.vim | 1835 +++ .config/vim/syntax/php.vim | 978 ++ .config/vim/syntax/phtml.vim | 6 + .config/vim/syntax/pic.vim | 114 + .config/vim/syntax/pike.vim | 386 + .config/vim/syntax/pilrc.vim | 136 + .config/vim/syntax/pine.vim | 355 + .config/vim/syntax/pinfo.vim | 110 + .config/vim/syntax/pkl.vim | 169 + .config/vim/syntax/plaintex.vim | 170 + .config/vim/syntax/pli.vim | 266 + .config/vim/syntax/plm.vim | 134 + .config/vim/syntax/plp.vim | 37 + .config/vim/syntax/plsql.vim | 862 ++ .config/vim/syntax/po.vim | 163 + .config/vim/syntax/pod.vim | 222 + .config/vim/syntax/poefilter.vim | 167 + .config/vim/syntax/poke.vim | 151 + .config/vim/syntax/postscr.vim | 780 ++ .config/vim/syntax/pov.vim | 146 + .config/vim/syntax/povini.vim | 56 + .config/vim/syntax/ppd.vim | 35 + .config/vim/syntax/ppwiz.vim | 84 + .config/vim/syntax/pq.vim | 337 + .config/vim/syntax/prescribe.vim | 56 + .config/vim/syntax/privoxy.vim | 71 + .config/vim/syntax/procmail.vim | 54 + .config/vim/syntax/progress.vim | 316 + .config/vim/syntax/prolog.vim | 118 + .config/vim/syntax/promela.vim | 53 + .config/vim/syntax/proto.vim | 83 + .config/vim/syntax/protocols.vim | 44 + .config/vim/syntax/prql.vim | 178 + .config/vim/syntax/ps1.vim | 182 + .config/vim/syntax/ps1xml.vim | 51 + .config/vim/syntax/psf.vim | 91 + .config/vim/syntax/psl.vim | 83 + .config/vim/syntax/ptcap.vim | 95 + .config/vim/syntax/ptx.vim | 52 + .config/vim/syntax/purifylog.vim | 106 + .config/vim/syntax/pymanifest.vim | 44 + .config/vim/syntax/pyrex.vim | 51 + .config/vim/syntax/python.vim | 440 + .config/vim/syntax/python2.vim | 378 + .config/vim/syntax/qb64.vim | 409 + .config/vim/syntax/qf.vim | 32 + .config/vim/syntax/qml.vim | 1130 ++ .config/vim/syntax/quake.vim | 170 + .config/vim/syntax/quarto.vim | 19 + .config/vim/syntax/r.vim | 388 + .config/vim/syntax/racc.vim | 142 + .config/vim/syntax/racket.vim | 657 + .config/vim/syntax/radiance.vim | 142 + .config/vim/syntax/raku.vim | 1971 +++ .config/vim/syntax/raml.vim | 106 + .config/vim/syntax/rapid.vim | 687 + .config/vim/syntax/rasi.vim | 304 + .config/vim/syntax/ratpoison.vim | 275 + .config/vim/syntax/rc.vim | 191 + .config/vim/syntax/rcs.vim | 63 + .config/vim/syntax/rcslog.vim | 25 + .config/vim/syntax/readline.vim | 411 + .config/vim/syntax/rebol.vim | 199 + .config/vim/syntax/redif.vim | 970 ++ .config/vim/syntax/registry.vim | 103 + .config/vim/syntax/rego.vim | 120 + .config/vim/syntax/remind.vim | 73 + .config/vim/syntax/requirements.vim | 67 + .config/vim/syntax/resolv.vim | 119 + .config/vim/syntax/reva.vim | 191 + .config/vim/syntax/rexx.vim | 318 + .config/vim/syntax/rhelp.vim | 276 + .config/vim/syntax/rib.vim | 62 + .config/vim/syntax/rmd.vim | 268 + .config/vim/syntax/rnc.vim | 68 + .config/vim/syntax/rng.vim | 25 + .config/vim/syntax/rnoweb.vim | 52 + .config/vim/syntax/robots.vim | 57 + .config/vim/syntax/routeros.vim | 91 + .config/vim/syntax/rpcgen.vim | 48 + .config/vim/syntax/rpl.vim | 483 + .config/vim/syntax/rrst.vim | 43 + .config/vim/syntax/rst.vim | 316 + .config/vim/syntax/rtf.vim | 75 + .config/vim/syntax/ruby.vim | 606 + .config/vim/syntax/rust.vim | 387 + .config/vim/syntax/salt.vim | 16 + .config/vim/syntax/samba.vim | 118 + .config/vim/syntax/sas.vim | 265 + .config/vim/syntax/sass.vim | 106 + .config/vim/syntax/sather.vim | 92 + .config/vim/syntax/sbt.vim | 32 + .config/vim/syntax/scala.vim | 233 + .config/vim/syntax/scdoc.vim | 63 + .config/vim/syntax/scheme.vim | 470 + .config/vim/syntax/scilab.vim | 102 + .config/vim/syntax/screen.vim | 260 + .config/vim/syntax/scss.vim | 25 + .config/vim/syntax/sd.vim | 71 + .config/vim/syntax/sdc.vim | 77 + .config/vim/syntax/sdl.vim | 153 + .config/vim/syntax/sed.vim | 123 + .config/vim/syntax/sendpr.vim | 37 + .config/vim/syntax/sensors.vim | 52 + .config/vim/syntax/services.vim | 54 + .config/vim/syntax/setserial.vim | 120 + .config/vim/syntax/sexplib.vim | 88 + .config/vim/syntax/sgml.vim | 334 + .config/vim/syntax/sgmldecl.vim | 72 + .config/vim/syntax/sgmllnx.vim | 54 + .config/vim/syntax/sh.vim | 995 ++ .config/vim/syntax/shaderslang.vim | 360 + .config/vim/syntax/sicad.vim | 390 + .config/vim/syntax/sieve.vim | 55 + .config/vim/syntax/sil.vim | 179 + .config/vim/syntax/simula.vim | 87 + .config/vim/syntax/sinda.vim | 129 + .config/vim/syntax/sindacmp.vim | 61 + .config/vim/syntax/sindaout.vim | 83 + .config/vim/syntax/sisu.vim | 275 + .config/vim/syntax/skill.vim | 550 + .config/vim/syntax/sl.vim | 107 + .config/vim/syntax/slang.vim | 89 + .config/vim/syntax/slice.vim | 78 + .config/vim/syntax/slpconf.vim | 273 + .config/vim/syntax/slpreg.vim | 122 + .config/vim/syntax/slpspi.vim | 39 + .config/vim/syntax/slrnrc.vim | 181 + .config/vim/syntax/slrnsc.vim | 68 + .config/vim/syntax/sm.vim | 82 + .config/vim/syntax/smarty.vim | 76 + .config/vim/syntax/smcl.vim | 307 + .config/vim/syntax/smil.vim | 146 + .config/vim/syntax/smith.vim | 39 + .config/vim/syntax/sml.vim | 223 + .config/vim/syntax/snnsnet.vim | 67 + .config/vim/syntax/snnspat.vim | 62 + .config/vim/syntax/snnsres.vim | 50 + .config/vim/syntax/snobol4.vim | 113 + .config/vim/syntax/solidity.vim | 183 + .config/vim/syntax/spajson.vim | 50 + .config/vim/syntax/spec.vim | 229 + .config/vim/syntax/specman.vim | 169 + .config/vim/syntax/spice.vim | 75 + .config/vim/syntax/splint.vim | 243 + .config/vim/syntax/spup.vim | 269 + .config/vim/syntax/spyce.vim | 104 + .config/vim/syntax/sql.vim | 36 + .config/vim/syntax/sqlanywhere.vim | 905 ++ .config/vim/syntax/sqlforms.vim | 152 + .config/vim/syntax/sqlhana.vim | 290 + .config/vim/syntax/sqlinformix.vim | 183 + .config/vim/syntax/sqlj.vim | 91 + .config/vim/syntax/sqloracle.vim | 150 + .config/vim/syntax/sqr.vim | 262 + .config/vim/syntax/squid.vim | 140 + .config/vim/syntax/squirrel.vim | 51 + .config/vim/syntax/srec.vim | 83 + .config/vim/syntax/srt.vim | 62 + .config/vim/syntax/ssa.vim | 67 + .config/vim/syntax/sshconfig.vim | 300 + .config/vim/syntax/sshdconfig.vim | 305 + .config/vim/syntax/st.vim | 95 + .config/vim/syntax/stata.vim | 450 + .config/vim/syntax/stp.vim | 154 + .config/vim/syntax/strace.vim | 52 + .config/vim/syntax/structurizr.vim | 113 + .config/vim/syntax/stylus.vim | 51 + .config/vim/syntax/sudoers.vim | 393 + .config/vim/syntax/svg.vim | 15 + .config/vim/syntax/svn.vim | 56 + .config/vim/syntax/swayconfig.vim | 174 + .config/vim/syntax/swift.vim | 286 + .config/vim/syntax/swiftgyb.vim | 24 + .config/vim/syntax/swig.vim | 99 + .config/vim/syntax/syncolor.vim | 97 + .config/vim/syntax/synload.vim | 84 + .config/vim/syntax/syntax.vim | 45 + .config/vim/syntax/sysctl.vim | 39 + .config/vim/syntax/systemd.vim | 8 + .config/vim/syntax/systemverilog.vim | 90 + .config/vim/syntax/tads.vim | 171 + .config/vim/syntax/tags.vim | 33 + .config/vim/syntax/tak.vim | 119 + .config/vim/syntax/takcmp.vim | 69 + .config/vim/syntax/takout.vim | 85 + .config/vim/syntax/tap.vim | 86 + .config/vim/syntax/tar.vim | 19 + .config/vim/syntax/taskdata.vim | 45 + .config/vim/syntax/taskedit.vim | 37 + .config/vim/syntax/tasm.vim | 115 + .config/vim/syntax/tcl.vim | 274 + .config/vim/syntax/tcsh.vim | 255 + .config/vim/syntax/template.vim | 16 + .config/vim/syntax/tera.vim | 94 + .config/vim/syntax/teraterm.vim | 140 + .config/vim/syntax/terminfo.vim | 93 + .config/vim/syntax/terraform.vim | 32 + .config/vim/syntax/tex.vim | 1395 ++ .config/vim/syntax/texinfo.vim | 46 + .config/vim/syntax/texmf.vim | 74 + .config/vim/syntax/tf.vim | 196 + .config/vim/syntax/thrift.vim | 74 + .config/vim/syntax/tiasm.vim | 102 + .config/vim/syntax/tidy.vim | 276 + .config/vim/syntax/tilde.vim | 41 + .config/vim/syntax/tli.vim | 58 + .config/vim/syntax/tmux.vim | 172 + .config/vim/syntax/toml.vim | 81 + .config/vim/syntax/tpp.vim | 83 + .config/vim/syntax/trasys.vim | 160 + .config/vim/syntax/treetop.vim | 110 + .config/vim/syntax/trustees.vim | 44 + .config/vim/syntax/tsalt.vim | 206 + .config/vim/syntax/tsscl.vim | 204 + .config/vim/syntax/tssgm.vim | 98 + .config/vim/syntax/tssop.vim | 74 + .config/vim/syntax/tsv.vim | 12 + .config/vim/syntax/tt2.vim | 209 + .config/vim/syntax/tt2html.vim | 22 + .config/vim/syntax/tt2js.vim | 22 + .config/vim/syntax/tutor.vim | 86 + .config/vim/syntax/typescript.vim | 47 + .config/vim/syntax/typescriptreact.vim | 161 + .config/vim/syntax/typst.vim | 479 + .config/vim/syntax/uc.vim | 165 + .config/vim/syntax/uci.vim | 33 + .config/vim/syntax/udevconf.vim | 39 + .config/vim/syntax/udevperm.vim | 69 + .config/vim/syntax/udevrules.vim | 171 + .config/vim/syntax/uil.vim | 75 + .config/vim/syntax/unison.vim | 105 + .config/vim/syntax/updatedb.vim | 41 + .config/vim/syntax/upstart.vim | 111 + .config/vim/syntax/upstreamdat.vim | 305 + .config/vim/syntax/upstreaminstalllog.vim | 27 + .config/vim/syntax/upstreamlog.vim | 54 + .config/vim/syntax/upstreamrpt.vim | 310 + .config/vim/syntax/urlshortcut.vim | 14 + .config/vim/syntax/usserverlog.vim | 60 + .config/vim/syntax/usw2kagtlog.vim | 54 + .config/vim/syntax/valgrind.vim | 110 + .config/vim/syntax/vb.vim | 375 + .config/vim/syntax/vdf.vim | 54 + .config/vim/syntax/vera.vim | 348 + .config/vim/syntax/verilog.vim | 119 + .config/vim/syntax/verilogams.vim | 132 + .config/vim/syntax/vgrindefs.vim | 46 + .config/vim/syntax/vhdl.vim | 268 + .config/vim/syntax/vim.vim | 2808 ++++ .config/vim/syntax/viminfo.vim | 49 + .config/vim/syntax/vimnormal.vim | 16 + .config/vim/syntax/virata.vim | 207 + .config/vim/syntax/vmasm.vim | 238 + .config/vim/syntax/voscm.vim | 94 + .config/vim/syntax/vrml.vim | 222 + .config/vim/syntax/vroom.vim | 110 + .config/vim/syntax/vsejcl.vim | 36 + .config/vim/syntax/vue.vim | 14 + .config/vim/syntax/wat.vim | 97 + .config/vim/syntax/wdiff.vim | 29 + .config/vim/syntax/wdl.vim | 41 + .config/vim/syntax/web.vim | 32 + .config/vim/syntax/webmacro.vim | 67 + .config/vim/syntax/wget.vim | 241 + .config/vim/syntax/wget2.vim | 250 + .config/vim/syntax/whitespace.vim | 13 + .config/vim/syntax/winbatch.vim | 174 + .config/vim/syntax/wml.vim | 150 + .config/vim/syntax/wsh.vim | 45 + .config/vim/syntax/wsml.vim | 113 + .config/vim/syntax/wvdial.vim | 28 + .config/vim/syntax/xbl.vim | 29 + .config/vim/syntax/xcompose.vim | 37 + .config/vim/syntax/xdefaults.vim | 132 + .config/vim/syntax/xf86conf.vim | 207 + .config/vim/syntax/xhtml.vim | 11 + .config/vim/syntax/xinetd.vim | 347 + .config/vim/syntax/xkb.vim | 79 + .config/vim/syntax/xmath.vim | 227 + .config/vim/syntax/xml.vim | 361 + .config/vim/syntax/xmodmap.vim | 677 + .config/vim/syntax/xpm.vim | 154 + .config/vim/syntax/xpm2.vim | 153 + .config/vim/syntax/xquery.vim | 82 + .config/vim/syntax/xs.vim | 3680 ++++++ .config/vim/syntax/xsd.vim | 61 + .config/vim/syntax/xslt.vim | 71 + .config/vim/syntax/xxd.vim | 32 + .config/vim/syntax/yacc.vim | 121 + .config/vim/syntax/yaml.vim | 275 + .config/vim/syntax/z8a.vim | 101 + .config/vim/syntax/zathurarc.vim | 37 + .config/vim/syntax/zig.vim | 297 + .config/vim/syntax/zimbu.vim | 161 + .config/vim/syntax/zir.vim | 49 + .config/vim/syntax/zserio.vim | 112 + .config/vim/syntax/zsh.vim | 362 + .config/vim/view/=+git=+vimwiki=+index.wiki= | 20 + .config/vim/view/~=+vimwiki=+Blossom.wiki= | 19 + .../view/~=+vimwiki=+diary=+2025-11-23.wiki= | 20 + .../view/~=+vimwiki=+diary=+2025-11-24.wiki= | 24 + .../view/~=+vimwiki=+diary=+2025-12-03.wiki= | 19 + .../view/~=+vimwiki=+diary=+2025-12-12.wiki= | 22 + .../view/~=+vimwiki=+diary=+2026-01-01.wiki= | 21 + .../vim/view/~=+vimwiki=+diary=+Blossom.wiki= | 19 + .config/vim/view/~=+vimwiki=+index.wiki= | 28 + .config/vim/view/~=+vimwiki=+linux.wiki= | 19 + .config/vim/view/~=+vimwiki=+test.wiki= | 19 + .config/vim/view/~=+vimwiki=+vimwiki.wiki= | 19 + .../vim/view/~=+vimwiki=+weeby-neety.wiki= | 20 + .config/vim/vimrc | 128 + rc | 9 + vimwiki/Astrallazgo.wiki | 1 + vimwiki/Blossom.wiki | 1 + vimwiki/FirstRule.wiki | 3 + vimwiki/Hallasenderos.wiki | 4 + vimwiki/TTRPGStats.wiki | 3 + vimwiki/Time4.wiki | 3 + vimwiki/YAZNIG.wiki | 3 + vimwiki/diary/2025-11-23.wiki | 12 + vimwiki/diary/2025-11-24.wiki | 37 + vimwiki/diary/2025-12-03.wiki | 6 + vimwiki/diary/2025-12-12.wiki | 26 + vimwiki/diary/2026-01-01.wiki | 16 + vimwiki/diary/diary.wiki | 1 + vimwiki/index.wiki | 41 + vimwiki/linux.wiki | 81 + vimwiki/vimwiki.wiki | 2 + 1019 files changed, 216715 insertions(+) create mode 100644 .config/vim/.netrwhist create mode 100644 .config/vim/autoload/pathogen.vim create mode 100644 .config/vim/bundle/taskwiki/after/ftplugin/vimwiki.vim create mode 100644 .config/vim/bundle/taskwiki/after/syntax/vimwiki.vim create mode 100644 .config/vim/bundle/taskwiki/autoload/taskwiki.vim create mode 100644 .config/vim/bundle/taskwiki/doc/TaskWiki-demo.gif create mode 100644 .config/vim/bundle/taskwiki/doc/taskwiki.txt create mode 100755 .config/vim/bundle/taskwiki/extra/vwtags.py create mode 100644 .config/vim/bundle/taskwiki/ftplugin/vimwiki/taskwiki.vim create mode 100644 .config/vim/bundle/taskwiki/taskwiki/.gitignore create mode 100644 .config/vim/bundle/taskwiki/taskwiki/__init__.py create mode 100644 .config/vim/bundle/taskwiki/taskwiki/cache.py create mode 100644 .config/vim/bundle/taskwiki/taskwiki/completion.py create mode 100644 .config/vim/bundle/taskwiki/taskwiki/constants.py create mode 100644 .config/vim/bundle/taskwiki/taskwiki/decorators.py create mode 100644 .config/vim/bundle/taskwiki/taskwiki/errors.py create mode 100644 .config/vim/bundle/taskwiki/taskwiki/main.py create mode 100644 .config/vim/bundle/taskwiki/taskwiki/preset.py create mode 100644 .config/vim/bundle/taskwiki/taskwiki/regexp.py create mode 100644 .config/vim/bundle/taskwiki/taskwiki/short.py create mode 100644 .config/vim/bundle/taskwiki/taskwiki/sort.py create mode 100644 .config/vim/bundle/taskwiki/taskwiki/store.py create mode 100644 .config/vim/bundle/taskwiki/taskwiki/util.py create mode 100644 .config/vim/bundle/taskwiki/taskwiki/viewport.py create mode 100644 .config/vim/bundle/taskwiki/taskwiki/vwtask.py create mode 100644 .config/vim/bundle/taskwiki/tests/__init__.py create mode 100644 .config/vim/bundle/taskwiki/tests/base.py create mode 100644 .config/vim/bundle/taskwiki/tests/conftest.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_choose.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_completion.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_config.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_ftplugin.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_mappings.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_preset.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_preset_parsing.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_selected.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_splits.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_syntax_parsing.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_util.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_viewport.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_viewport_parsing.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_vwtags.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_vwtask.py create mode 100644 .config/vim/bundle/taskwiki/tests/test_vwtask_parsing.py create mode 100644 .config/vim/bundle/vim-asciidoc/UltiSnips/asciidoc.snippets create mode 100644 .config/vim/bundle/vim-asciidoc/ftdetect/asciidoc_filetype.vim create mode 100644 .config/vim/bundle/vim-asciidoc/ftplugin/asciidoc.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/c.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/cfg.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/clojure.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/csh.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/css.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/dosini.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/elm.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/fish.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/go.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/html.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/i3.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/i3config.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/javascript.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/json.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/jsx.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/kitty.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/less.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/moon.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/nix.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/perl.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/php.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/python.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/qml.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/r.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/rasi.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/ruby.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/sass.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/scss.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/sh.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/stylus.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/tcsh.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/tmux.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/typescript.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/typescriptreact.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/vala.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/vim.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/xdefaults.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/xml.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/yaml.vim create mode 100644 .config/vim/bundle/vim-css-color/after/syntax/zsh.vim create mode 100644 .config/vim/bundle/vim-css-color/autoload/css_color.vim create mode 100644 .config/vim/bundle/vim-css-color/syntax/colornames/basic.vim create mode 100644 .config/vim/bundle/vim-css-color/syntax/colornames/extended.vim create mode 100755 .config/vim/bundle/vim-css-color/tests/bench create mode 100644 .config/vim/bundle/vim-css-color/tests/example.csh create mode 100644 .config/vim/bundle/vim-css-color/tests/example.css create mode 100644 .config/vim/bundle/vim-css-color/tests/example.fish create mode 100644 .config/vim/bundle/vim-css-color/tests/example.jsx create mode 100644 .config/vim/bundle/vim-css-color/tests/example.less create mode 100644 .config/vim/bundle/vim-css-color/tests/example.nix create mode 100644 .config/vim/bundle/vim-css-color/tests/example.sass create mode 100644 .config/vim/bundle/vim-css-color/tests/example.scss create mode 100644 .config/vim/bundle/vim-css-color/tests/example.sh create mode 100644 .config/vim/bundle/vim-css-color/tests/example.stylus create mode 100644 .config/vim/bundle/vim-css-color/tests/example.tcsh create mode 100644 .config/vim/bundle/vim-css-color/tests/example.ts create mode 100644 .config/vim/bundle/vim-css-color/tests/example.tsx create mode 100644 .config/vim/bundle/vim-css-color/tests/example.zsh create mode 100644 .config/vim/bundle/vim-css-color/tests/torture.css create mode 100644 .config/vim/bundle/vimwiki/autoload/vimwiki/base.vim create mode 100755 .config/vim/bundle/vimwiki/autoload/vimwiki/customwiki2html.sh create mode 100644 .config/vim/bundle/vimwiki/autoload/vimwiki/default.tpl create mode 100644 .config/vim/bundle/vimwiki/autoload/vimwiki/diary.vim create mode 100644 .config/vim/bundle/vimwiki/autoload/vimwiki/html.vim create mode 100644 .config/vim/bundle/vimwiki/autoload/vimwiki/lst.vim create mode 100644 .config/vim/bundle/vimwiki/autoload/vimwiki/markdown_base.vim create mode 100644 .config/vim/bundle/vimwiki/autoload/vimwiki/path.vim create mode 100644 .config/vim/bundle/vimwiki/autoload/vimwiki/style.css create mode 100644 .config/vim/bundle/vimwiki/autoload/vimwiki/tags.vim create mode 100644 .config/vim/bundle/vimwiki/autoload/vimwiki/tbl.vim create mode 100644 .config/vim/bundle/vimwiki/autoload/vimwiki/u.vim create mode 100644 .config/vim/bundle/vimwiki/autoload/vimwiki/vars.vim create mode 100644 .config/vim/bundle/vimwiki/doc/entries.png create mode 100644 .config/vim/bundle/vimwiki/doc/lists.png create mode 100644 .config/vim/bundle/vimwiki/doc/logo.svg create mode 100644 .config/vim/bundle/vimwiki/doc/screenshot_1.png create mode 100644 .config/vim/bundle/vimwiki/doc/screenshot_2.png create mode 100644 .config/vim/bundle/vimwiki/doc/splash.png create mode 100644 .config/vim/bundle/vimwiki/doc/tags create mode 100644 .config/vim/bundle/vimwiki/doc/todos.png create mode 100644 .config/vim/bundle/vimwiki/doc/vimwiki.txt create mode 100644 .config/vim/bundle/vimwiki/doc/wiki.png create mode 100644 .config/vim/bundle/vimwiki/ftplugin/vimwiki.vim create mode 100644 .config/vim/bundle/vimwiki/plugin/vimwiki.vim create mode 100644 .config/vim/bundle/vimwiki/syntax/vimwiki.vim create mode 100644 .config/vim/bundle/vimwiki/syntax/vimwiki_default.vim create mode 100644 .config/vim/bundle/vimwiki/syntax/vimwiki_markdown.vim create mode 100644 .config/vim/bundle/vimwiki/syntax/vimwiki_markdown_custom.vim create mode 100644 .config/vim/bundle/vimwiki/syntax/vimwiki_media.vim create mode 100644 .config/vim/bundle/vimwiki/test/README.md create mode 100644 .config/vim/bundle/vimwiki/test/command_generate_links.vader create mode 100644 .config/vim/bundle/vimwiki/test/command_generate_tags.vader create mode 100644 .config/vim/bundle/vimwiki/test/command_goto.vader create mode 100644 .config/vim/bundle/vimwiki/test/command_rename_link.vader create mode 100644 .config/vim/bundle/vimwiki/test/command_toc.vader create mode 100644 .config/vim/bundle/vimwiki/test/convert_default_html.vader create mode 100644 .config/vim/bundle/vimwiki/test/independent_runs/map.vader create mode 100644 .config/vim/bundle/vimwiki/test/independent_runs/search.vader create mode 120000 .config/vim/bundle/vimwiki/test/independent_runs/vader_setup create mode 120000 .config/vim/bundle/vimwiki/test/independent_runs/vader_teardown create mode 100644 .config/vim/bundle/vimwiki/test/link_creation.vader create mode 100644 .config/vim/bundle/vimwiki/test/link_markdown_multiple_per_file.vader create mode 100644 .config/vim/bundle/vimwiki/test/list_VimwikiReturn.vader create mode 100644 .config/vim/bundle/vimwiki/test/list_margin.vader create mode 100644 .config/vim/bundle/vimwiki/test/list_update.vader create mode 100755 .config/vim/bundle/vimwiki/test/resources/delay.wiki create mode 100644 .config/vim/bundle/vimwiki/test/resources/testmarkdown/buzz_bozz.md create mode 100644 .config/vim/bundle/vimwiki/test/resources/testmarkdown/index.md create mode 100644 .config/vim/bundle/vimwiki/test/resources/testwiki space/buzz bozz.wiki create mode 100644 .config/vim/bundle/vimwiki/test/resources/testwiki space/index.wiki create mode 100644 .config/vim/bundle/vimwiki/test/resources/testwiki/buzz_bozz.wiki create mode 100644 .config/vim/bundle/vimwiki/test/resources/testwiki/index.wiki create mode 100755 .config/vim/bundle/vimwiki/test/run_tests.sh create mode 100644 .config/vim/bundle/vimwiki/test/syntax.vader create mode 100644 .config/vim/bundle/vimwiki/test/table_autoformat.vader create mode 100644 .config/vim/bundle/vimwiki/test/tabnext_delay.vader create mode 100644 .config/vim/bundle/vimwiki/test/vader_includes/vader_setup.vader create mode 100644 .config/vim/bundle/vimwiki/test/vader_includes/vader_teardown.vader create mode 100644 .config/vim/bundle/vimwiki/test/vimrc create mode 100644 .config/vim/colors/ale.vim create mode 100644 .config/vim/ftplugin/markdown.vim create mode 100644 .config/vim/ftplugin/vimwiki.vim create mode 100644 .config/vim/pack/dist/opt/cfilter/plugin/cfilter.vim create mode 100644 .config/vim/pack/dist/opt/comment/autoload/comment.vim create mode 100644 .config/vim/pack/dist/opt/comment/doc/comment.txt create mode 100644 .config/vim/pack/dist/opt/comment/doc/tags create mode 100644 .config/vim/pack/dist/opt/comment/plugin/comment.vim create mode 100644 .config/vim/pack/dist/opt/dvorak/dvorak/disable.vim create mode 100644 .config/vim/pack/dist/opt/dvorak/dvorak/enable.vim create mode 100644 .config/vim/pack/dist/opt/dvorak/plugin/dvorak.vim create mode 100644 .config/vim/pack/dist/opt/editexisting/plugin/editexisting.vim create mode 100644 .config/vim/pack/dist/opt/editorconfig/.editorconfig create mode 100644 .config/vim/pack/dist/opt/editorconfig/CONTRIBUTORS create mode 100644 .config/vim/pack/dist/opt/editorconfig/LICENSE create mode 100644 .config/vim/pack/dist/opt/editorconfig/LICENSE.PSF create mode 100644 .config/vim/pack/dist/opt/editorconfig/README.md create mode 100644 .config/vim/pack/dist/opt/editorconfig/autoload/editorconfig.vim create mode 100644 .config/vim/pack/dist/opt/editorconfig/autoload/editorconfig_core.vim create mode 100644 .config/vim/pack/dist/opt/editorconfig/autoload/editorconfig_core/fnmatch.vim create mode 100644 .config/vim/pack/dist/opt/editorconfig/autoload/editorconfig_core/handler.vim create mode 100644 .config/vim/pack/dist/opt/editorconfig/autoload/editorconfig_core/ini.vim create mode 100644 .config/vim/pack/dist/opt/editorconfig/autoload/editorconfig_core/util.vim create mode 100644 .config/vim/pack/dist/opt/editorconfig/doc/editorconfig.txt create mode 100644 .config/vim/pack/dist/opt/editorconfig/doc/tags create mode 100644 .config/vim/pack/dist/opt/editorconfig/ftdetect/editorconfig.vim create mode 100644 .config/vim/pack/dist/opt/editorconfig/plugin/editorconfig.vim create mode 100644 .config/vim/pack/dist/opt/helptoc/autoload/helptoc.vim create mode 100644 .config/vim/pack/dist/opt/helptoc/doc/helptoc.txt create mode 100644 .config/vim/pack/dist/opt/helptoc/doc/tags create mode 100644 .config/vim/pack/dist/opt/helptoc/plugin/helptoc.vim create mode 100644 .config/vim/pack/dist/opt/hlyank/plugin/hlyank.vim create mode 100644 .config/vim/pack/dist/opt/justify/plugin/justify.vim create mode 100644 .config/vim/pack/dist/opt/matchit/autoload/matchit.vim create mode 100644 .config/vim/pack/dist/opt/matchit/doc/matchit.txt create mode 100644 .config/vim/pack/dist/opt/matchit/doc/tags create mode 100644 .config/vim/pack/dist/opt/matchit/plugin/matchit.vim create mode 100644 .config/vim/pack/dist/opt/netrw/LICENSE.txt create mode 100644 .config/vim/pack/dist/opt/netrw/README.md create mode 100644 .config/vim/pack/dist/opt/netrw/autoload/netrw.vim create mode 100644 .config/vim/pack/dist/opt/netrw/autoload/netrw/fs.vim create mode 100644 .config/vim/pack/dist/opt/netrw/autoload/netrw/msg.vim create mode 100644 .config/vim/pack/dist/opt/netrw/autoload/netrw/os.vim create mode 100644 .config/vim/pack/dist/opt/netrw/autoload/netrw_gitignore.vim create mode 100644 .config/vim/pack/dist/opt/netrw/doc/netrw.txt create mode 100644 .config/vim/pack/dist/opt/netrw/plugin/netrwPlugin.vim create mode 100644 .config/vim/pack/dist/opt/netrw/syntax/netrw.vim create mode 100644 .config/vim/pack/dist/opt/nohlsearch/plugin/nohlsearch.vim create mode 100644 .config/vim/pack/dist/opt/shellmenu/plugin/shellmenu.vim create mode 100644 .config/vim/pack/dist/opt/swapmouse/plugin/swapmouse.vim create mode 100644 .config/vim/pack/dist/opt/termdebug/plugin/termdebug.vim create mode 100644 .config/vim/spell/check_locales.vim create mode 100644 .config/vim/spell/cleanadd.vim create mode 100644 .config/vim/spell/es.utf-8.spl create mode 100644 .config/vim/spell/es.utf-8.sug create mode 100644 .config/vim/spell/fixdup.vim create mode 100644 .config/vim/spell/he.vim create mode 100644 .config/vim/spell/spell.vim create mode 100644 .config/vim/spell/yi.vim create mode 100644 .config/vim/syntax/2html.vim create mode 100644 .config/vim/syntax/8th.vim create mode 100644 .config/vim/syntax/a2ps.vim create mode 100644 .config/vim/syntax/a65.vim create mode 100644 .config/vim/syntax/aap.vim create mode 100644 .config/vim/syntax/abap.vim create mode 100644 .config/vim/syntax/abaqus.vim create mode 100644 .config/vim/syntax/abc.vim create mode 100644 .config/vim/syntax/abel.vim create mode 100644 .config/vim/syntax/abnf.vim create mode 100644 .config/vim/syntax/acedb.vim create mode 100644 .config/vim/syntax/ada.vim create mode 100644 .config/vim/syntax/aflex.vim create mode 100644 .config/vim/syntax/ahdl.vim create mode 100644 .config/vim/syntax/aidl.vim create mode 100644 .config/vim/syntax/alsaconf.vim create mode 100644 .config/vim/syntax/amiga.vim create mode 100644 .config/vim/syntax/aml.vim create mode 100644 .config/vim/syntax/ampl.vim create mode 100644 .config/vim/syntax/ant.vim create mode 100644 .config/vim/syntax/antlr.vim create mode 100644 .config/vim/syntax/antlr4.vim create mode 100644 .config/vim/syntax/apache.vim create mode 100644 .config/vim/syntax/apachestyle.vim create mode 100644 .config/vim/syntax/apkbuild.vim create mode 100644 .config/vim/syntax/aptconf.vim create mode 100644 .config/vim/syntax/arch.vim create mode 100644 .config/vim/syntax/arduino.vim create mode 100644 .config/vim/syntax/art.vim create mode 100644 .config/vim/syntax/asciidoc.vim create mode 100644 .config/vim/syntax/asm.vim create mode 100644 .config/vim/syntax/asm68k.vim create mode 100644 .config/vim/syntax/asmh8300.vim create mode 100644 .config/vim/syntax/asn.vim create mode 100644 .config/vim/syntax/aspperl.vim create mode 100644 .config/vim/syntax/aspvbs.vim create mode 100644 .config/vim/syntax/asterisk.vim create mode 100644 .config/vim/syntax/asteriskvm.vim create mode 100644 .config/vim/syntax/astro.vim create mode 100644 .config/vim/syntax/asy.vim create mode 100644 .config/vim/syntax/atlas.vim create mode 100644 .config/vim/syntax/autodoc.vim create mode 100644 .config/vim/syntax/autohotkey.vim create mode 100644 .config/vim/syntax/autoit.vim create mode 100644 .config/vim/syntax/automake.vim create mode 100644 .config/vim/syntax/autopkgtest.vim create mode 100644 .config/vim/syntax/ave.vim create mode 100644 .config/vim/syntax/avra.vim create mode 100644 .config/vim/syntax/awk.vim create mode 100644 .config/vim/syntax/ayacc.vim create mode 100644 .config/vim/syntax/b.vim create mode 100644 .config/vim/syntax/baan.vim create mode 100644 .config/vim/syntax/bash.vim create mode 100644 .config/vim/syntax/basic.vim create mode 100644 .config/vim/syntax/bc.vim create mode 100644 .config/vim/syntax/bdf.vim create mode 100644 .config/vim/syntax/bib.vim create mode 100644 .config/vim/syntax/bindzone.vim create mode 100644 .config/vim/syntax/bitbake.vim create mode 100644 .config/vim/syntax/blank.vim create mode 100644 .config/vim/syntax/bsdl.vim create mode 100644 .config/vim/syntax/bst.vim create mode 100644 .config/vim/syntax/btm.vim create mode 100644 .config/vim/syntax/bzl.vim create mode 100644 .config/vim/syntax/bzr.vim create mode 100644 .config/vim/syntax/c.vim create mode 100644 .config/vim/syntax/cabal.vim create mode 100644 .config/vim/syntax/cabalconfig.vim create mode 100644 .config/vim/syntax/cabalproject.vim create mode 100644 .config/vim/syntax/calendar.vim create mode 100644 .config/vim/syntax/cangjie.vim create mode 100644 .config/vim/syntax/catalog.vim create mode 100644 .config/vim/syntax/cdl.vim create mode 100644 .config/vim/syntax/cdrdaoconf.vim create mode 100644 .config/vim/syntax/cdrtoc.vim create mode 100644 .config/vim/syntax/cf.vim create mode 100644 .config/vim/syntax/cfg.vim create mode 100644 .config/vim/syntax/cgdbrc.vim create mode 100644 .config/vim/syntax/ch.vim create mode 100644 .config/vim/syntax/chaiscript.vim create mode 100644 .config/vim/syntax/change.vim create mode 100644 .config/vim/syntax/changelog.vim create mode 100644 .config/vim/syntax/chaskell.vim create mode 100644 .config/vim/syntax/chatito.vim create mode 100644 .config/vim/syntax/cheetah.vim create mode 100644 .config/vim/syntax/chicken.vim create mode 100644 .config/vim/syntax/chill.vim create mode 100644 .config/vim/syntax/chordpro.vim create mode 100644 .config/vim/syntax/chuck.vim create mode 100644 .config/vim/syntax/cl.vim create mode 100644 .config/vim/syntax/clean.vim create mode 100644 .config/vim/syntax/clipper.vim create mode 100644 .config/vim/syntax/clojure.vim create mode 100644 .config/vim/syntax/cmacro.vim create mode 100644 .config/vim/syntax/cmake.vim create mode 100644 .config/vim/syntax/cmakecache.vim create mode 100644 .config/vim/syntax/cmod.vim create mode 100644 .config/vim/syntax/cmusrc.vim create mode 100644 .config/vim/syntax/cobol.vim create mode 100644 .config/vim/syntax/coco.vim create mode 100644 .config/vim/syntax/codeowners.vim create mode 100644 .config/vim/syntax/colortest.vim create mode 100644 .config/vim/syntax/conaryrecipe.vim create mode 100644 .config/vim/syntax/conf.vim create mode 100644 .config/vim/syntax/config.vim create mode 100644 .config/vim/syntax/confini.vim create mode 100644 .config/vim/syntax/context.vim create mode 100644 .config/vim/syntax/cpp.vim create mode 100644 .config/vim/syntax/crm.vim create mode 100644 .config/vim/syntax/crontab.vim create mode 100644 .config/vim/syntax/cs.vim create mode 100644 .config/vim/syntax/csc.vim create mode 100644 .config/vim/syntax/csdl.vim create mode 100644 .config/vim/syntax/csh.vim create mode 100644 .config/vim/syntax/csp.vim create mode 100644 .config/vim/syntax/css.vim create mode 100644 .config/vim/syntax/csv.vim create mode 100644 .config/vim/syntax/cterm.vim create mode 100644 .config/vim/syntax/ctrlh.vim create mode 100644 .config/vim/syntax/cucumber.vim create mode 100644 .config/vim/syntax/cuda.vim create mode 100644 .config/vim/syntax/cupl.vim create mode 100644 .config/vim/syntax/cuplsim.vim create mode 100644 .config/vim/syntax/cvs.vim create mode 100644 .config/vim/syntax/cvsrc.vim create mode 100644 .config/vim/syntax/cweb.vim create mode 100644 .config/vim/syntax/cynlib.vim create mode 100644 .config/vim/syntax/cynpp.vim create mode 100644 .config/vim/syntax/d.vim create mode 100644 .config/vim/syntax/dart.vim create mode 100644 .config/vim/syntax/datascript.vim create mode 100644 .config/vim/syntax/dax.vim create mode 100644 .config/vim/syntax/dcd.vim create mode 100644 .config/vim/syntax/dcl.vim create mode 100644 .config/vim/syntax/deb822sources.vim create mode 100644 .config/vim/syntax/debchangelog.vim create mode 100644 .config/vim/syntax/debcontrol.vim create mode 100644 .config/vim/syntax/debcopyright.vim create mode 100644 .config/vim/syntax/debsources.vim create mode 100644 .config/vim/syntax/def.vim create mode 100644 .config/vim/syntax/denyhosts.vim create mode 100644 .config/vim/syntax/dep3patch.vim create mode 100644 .config/vim/syntax/desc.vim create mode 100644 .config/vim/syntax/desktop.vim create mode 100644 .config/vim/syntax/dictconf.vim create mode 100644 .config/vim/syntax/dictdconf.vim create mode 100644 .config/vim/syntax/diff.vim create mode 100644 .config/vim/syntax/dircolors.vim create mode 100644 .config/vim/syntax/dirpager.vim create mode 100644 .config/vim/syntax/diva.vim create mode 100644 .config/vim/syntax/django.vim create mode 100644 .config/vim/syntax/dns.vim create mode 100644 .config/vim/syntax/dnsmasq.vim create mode 100644 .config/vim/syntax/docbk.vim create mode 100644 .config/vim/syntax/docbksgml.vim create mode 100644 .config/vim/syntax/docbkxml.vim create mode 100644 .config/vim/syntax/dockerfile.vim create mode 100644 .config/vim/syntax/dosbatch.vim create mode 100644 .config/vim/syntax/dosini.vim create mode 100644 .config/vim/syntax/dot.vim create mode 100644 .config/vim/syntax/doxygen.vim create mode 100644 .config/vim/syntax/dracula.vim create mode 100644 .config/vim/syntax/dsl.vim create mode 100644 .config/vim/syntax/dtd.vim create mode 100644 .config/vim/syntax/dtml.vim create mode 100644 .config/vim/syntax/dtrace.vim create mode 100644 .config/vim/syntax/dts.vim create mode 100644 .config/vim/syntax/dune.vim create mode 100644 .config/vim/syntax/dylan.vim create mode 100644 .config/vim/syntax/dylanintr.vim create mode 100644 .config/vim/syntax/dylanlid.vim create mode 100644 .config/vim/syntax/ecd.vim create mode 100644 .config/vim/syntax/edif.vim create mode 100644 .config/vim/syntax/editorconfig.vim create mode 100644 .config/vim/syntax/eiffel.vim create mode 100644 .config/vim/syntax/elf.vim create mode 100644 .config/vim/syntax/elinks.vim create mode 100644 .config/vim/syntax/elm.vim create mode 100644 .config/vim/syntax/elmfilt.vim create mode 100644 .config/vim/syntax/erlang.vim create mode 100644 .config/vim/syntax/eruby.vim create mode 100644 .config/vim/syntax/esmtprc.vim create mode 100644 .config/vim/syntax/esqlc.vim create mode 100644 .config/vim/syntax/esterel.vim create mode 100644 .config/vim/syntax/eterm.vim create mode 100644 .config/vim/syntax/euphoria3.vim create mode 100644 .config/vim/syntax/euphoria4.vim create mode 100644 .config/vim/syntax/eviews.vim create mode 100644 .config/vim/syntax/exim.vim create mode 100644 .config/vim/syntax/expect.vim create mode 100644 .config/vim/syntax/exports.vim create mode 100644 .config/vim/syntax/falcon.vim create mode 100644 .config/vim/syntax/fan.vim create mode 100644 .config/vim/syntax/fasm.vim create mode 100644 .config/vim/syntax/fdcc.vim create mode 100644 .config/vim/syntax/fetchmail.vim create mode 100644 .config/vim/syntax/fgl.vim create mode 100644 .config/vim/syntax/fish.vim create mode 100644 .config/vim/syntax/flexwiki.vim create mode 100644 .config/vim/syntax/focexec.vim create mode 100644 .config/vim/syntax/form.vim create mode 100644 .config/vim/syntax/forth.vim create mode 100644 .config/vim/syntax/fortran.vim create mode 100644 .config/vim/syntax/foxpro.vim create mode 100644 .config/vim/syntax/fpcmake.vim create mode 100644 .config/vim/syntax/framescript.vim create mode 100644 .config/vim/syntax/freebasic.vim create mode 100644 .config/vim/syntax/fstab.vim create mode 100644 .config/vim/syntax/fvwm.vim create mode 100644 .config/vim/syntax/fvwm2m4.vim create mode 100644 .config/vim/syntax/gdb.vim create mode 100644 .config/vim/syntax/gdmo.vim create mode 100644 .config/vim/syntax/gdresource.vim create mode 100644 .config/vim/syntax/gdscript.vim create mode 100644 .config/vim/syntax/gdshader.vim create mode 100644 .config/vim/syntax/gedcom.vim create mode 100644 .config/vim/syntax/gel.vim create mode 100644 .config/vim/syntax/gemtext.vim create mode 100644 .config/vim/syntax/gift.vim create mode 100644 .config/vim/syntax/git.vim create mode 100644 .config/vim/syntax/gitattributes.vim create mode 100644 .config/vim/syntax/gitcommit.vim create mode 100644 .config/vim/syntax/gitconfig.vim create mode 100644 .config/vim/syntax/gitignore.vim create mode 100644 .config/vim/syntax/gitolite.vim create mode 100644 .config/vim/syntax/gitrebase.vim create mode 100644 .config/vim/syntax/gitsendemail.vim create mode 100644 .config/vim/syntax/gkrellmrc.vim create mode 100644 .config/vim/syntax/gleam.vim create mode 100644 .config/vim/syntax/glsl.vim create mode 100644 .config/vim/syntax/gnash.vim create mode 100644 .config/vim/syntax/gnuplot.vim create mode 100644 .config/vim/syntax/go.vim create mode 100644 .config/vim/syntax/goaccess.vim create mode 100644 .config/vim/syntax/godoc.vim create mode 100644 .config/vim/syntax/gp.vim create mode 100644 .config/vim/syntax/gpg.vim create mode 100644 .config/vim/syntax/gprof.vim create mode 100644 .config/vim/syntax/grads.vim create mode 100644 .config/vim/syntax/graphql.vim create mode 100644 .config/vim/syntax/gretl.vim create mode 100644 .config/vim/syntax/groff.vim create mode 100644 .config/vim/syntax/groovy.vim create mode 100644 .config/vim/syntax/group.vim create mode 100644 .config/vim/syntax/grub.vim create mode 100644 .config/vim/syntax/gsp.vim create mode 100644 .config/vim/syntax/gtkrc.vim create mode 100644 .config/vim/syntax/gvpr.vim create mode 100644 .config/vim/syntax/gyp.vim create mode 100644 .config/vim/syntax/haml.vim create mode 100644 .config/vim/syntax/hamster.vim create mode 100644 .config/vim/syntax/hare.vim create mode 100644 .config/vim/syntax/haredoc.vim create mode 100644 .config/vim/syntax/haskell.vim create mode 100644 .config/vim/syntax/haste.vim create mode 100644 .config/vim/syntax/hastepreproc.vim create mode 100644 .config/vim/syntax/hb.vim create mode 100644 .config/vim/syntax/hcl.vim create mode 100644 .config/vim/syntax/help.vim create mode 100644 .config/vim/syntax/help_it.vim create mode 100644 .config/vim/syntax/help_ru.vim create mode 100644 .config/vim/syntax/hercules.vim create mode 100644 .config/vim/syntax/hex.vim create mode 100644 .config/vim/syntax/hgcommit.vim create mode 100644 .config/vim/syntax/hitest.vim create mode 100644 .config/vim/syntax/hlsplaylist.vim create mode 100644 .config/vim/syntax/hog.vim create mode 100644 .config/vim/syntax/hollywood.vim create mode 100644 .config/vim/syntax/hostconf.vim create mode 100644 .config/vim/syntax/hostsaccess.vim create mode 100644 .config/vim/syntax/html.vim create mode 100644 .config/vim/syntax/htmlangular.vim create mode 100644 .config/vim/syntax/htmlcheetah.vim create mode 100644 .config/vim/syntax/htmldjango.vim create mode 100644 .config/vim/syntax/htmlm4.vim create mode 100644 .config/vim/syntax/htmlos.vim create mode 100644 .config/vim/syntax/hyprlang.vim create mode 100644 .config/vim/syntax/i3config.vim create mode 100644 .config/vim/syntax/ia64.vim create mode 100644 .config/vim/syntax/ibasic.vim create mode 100644 .config/vim/syntax/icemenu.vim create mode 100644 .config/vim/syntax/icon.vim create mode 100644 .config/vim/syntax/idl.vim create mode 100644 .config/vim/syntax/idlang.vim create mode 100644 .config/vim/syntax/idris2.vim create mode 100644 .config/vim/syntax/indent.vim create mode 100644 .config/vim/syntax/inform.vim create mode 100644 .config/vim/syntax/initex.vim create mode 100644 .config/vim/syntax/initng.vim create mode 100644 .config/vim/syntax/inittab.vim create mode 100644 .config/vim/syntax/ipfilter.vim create mode 100644 .config/vim/syntax/ipkg.vim create mode 100644 .config/vim/syntax/ishd.vim create mode 100644 .config/vim/syntax/iss.vim create mode 100644 .config/vim/syntax/ist.vim create mode 100644 .config/vim/syntax/j.vim create mode 100644 .config/vim/syntax/jal.vim create mode 100644 .config/vim/syntax/jam.vim create mode 100644 .config/vim/syntax/jargon.vim create mode 100644 .config/vim/syntax/java.vim create mode 100644 .config/vim/syntax/javacc.vim create mode 100644 .config/vim/syntax/javascript.vim create mode 100644 .config/vim/syntax/javascriptreact.vim create mode 100644 .config/vim/syntax/jess.vim create mode 100644 .config/vim/syntax/jgraph.vim create mode 100644 .config/vim/syntax/jinja.vim create mode 100644 .config/vim/syntax/jjdescription.vim create mode 100644 .config/vim/syntax/jovial.vim create mode 100644 .config/vim/syntax/jproperties.vim create mode 100644 .config/vim/syntax/jq.vim create mode 100644 .config/vim/syntax/json.vim create mode 100644 .config/vim/syntax/json5.vim create mode 100644 .config/vim/syntax/jsonc.vim create mode 100644 .config/vim/syntax/jsp.vim create mode 100644 .config/vim/syntax/julia.vim create mode 100644 .config/vim/syntax/just.vim create mode 100644 .config/vim/syntax/karel.vim create mode 100644 .config/vim/syntax/kconfig.vim create mode 100644 .config/vim/syntax/kdl.vim create mode 100644 .config/vim/syntax/kitty.vim create mode 100644 .config/vim/syntax/kivy.vim create mode 100644 .config/vim/syntax/kix.vim create mode 100644 .config/vim/syntax/kotlin.vim create mode 100644 .config/vim/syntax/krl.vim create mode 100644 .config/vim/syntax/kscript.vim create mode 100644 .config/vim/syntax/kwt.vim create mode 100644 .config/vim/syntax/lace.vim create mode 100644 .config/vim/syntax/latte.vim create mode 100644 .config/vim/syntax/lc.vim create mode 100644 .config/vim/syntax/ld.vim create mode 100644 .config/vim/syntax/ldapconf.vim create mode 100644 .config/vim/syntax/ldif.vim create mode 100644 .config/vim/syntax/less.vim create mode 100644 .config/vim/syntax/lex.vim create mode 100644 .config/vim/syntax/lf.vim create mode 100644 .config/vim/syntax/lftp.vim create mode 100644 .config/vim/syntax/lhaskell.vim create mode 100644 .config/vim/syntax/libao.vim create mode 100644 .config/vim/syntax/lidris2.vim create mode 100644 .config/vim/syntax/lifelines.vim create mode 100644 .config/vim/syntax/lilo.vim create mode 100644 .config/vim/syntax/limits.vim create mode 100644 .config/vim/syntax/liquid.vim create mode 100644 .config/vim/syntax/lisp.vim create mode 100644 .config/vim/syntax/lite.vim create mode 100644 .config/vim/syntax/litestep.vim create mode 100644 .config/vim/syntax/livebook.vim create mode 100644 .config/vim/syntax/lnk.vim create mode 100644 .config/vim/syntax/lnkmap.vim create mode 100644 .config/vim/syntax/log.vim create mode 100644 .config/vim/syntax/loginaccess.vim create mode 100644 .config/vim/syntax/logindefs.vim create mode 100644 .config/vim/syntax/logtalk.vim create mode 100644 .config/vim/syntax/lotos.vim create mode 100644 .config/vim/syntax/lout.vim create mode 100644 .config/vim/syntax/lpc.vim create mode 100644 .config/vim/syntax/lprolog.vim create mode 100644 .config/vim/syntax/lscript.vim create mode 100644 .config/vim/syntax/lsl.vim create mode 100644 .config/vim/syntax/lss.vim create mode 100644 .config/vim/syntax/lua.vim create mode 100644 .config/vim/syntax/luau.vim create mode 100644 .config/vim/syntax/lynx.vim create mode 100644 .config/vim/syntax/lyrics.vim create mode 100644 .config/vim/syntax/m17ndb.vim create mode 100644 .config/vim/syntax/m3build.vim create mode 100644 .config/vim/syntax/m3quake.vim create mode 100644 .config/vim/syntax/m4.vim create mode 100644 .config/vim/syntax/mail.vim create mode 100644 .config/vim/syntax/mailaliases.vim create mode 100644 .config/vim/syntax/mailcap.vim create mode 100644 .config/vim/syntax/make.vim create mode 100644 .config/vim/syntax/mallard.vim create mode 100644 .config/vim/syntax/man.vim create mode 100644 .config/vim/syntax/manconf.vim create mode 100644 .config/vim/syntax/manual.vim create mode 100644 .config/vim/syntax/maple.vim create mode 100644 .config/vim/syntax/markdown.vim create mode 100644 .config/vim/syntax/masm.vim create mode 100644 .config/vim/syntax/mason.vim create mode 100644 .config/vim/syntax/master.vim create mode 100644 .config/vim/syntax/matlab.vim create mode 100644 .config/vim/syntax/maxima.vim create mode 100644 .config/vim/syntax/mbsync.vim create mode 100644 .config/vim/syntax/mediawiki.vim create mode 100644 .config/vim/syntax/mel.vim create mode 100644 .config/vim/syntax/mermaid.vim create mode 100644 .config/vim/syntax/meson.vim create mode 100644 .config/vim/syntax/messages.vim create mode 100644 .config/vim/syntax/mf.vim create mode 100644 .config/vim/syntax/mgl.vim create mode 100644 .config/vim/syntax/mgp.vim create mode 100644 .config/vim/syntax/mib.vim create mode 100644 .config/vim/syntax/mix.vim create mode 100644 .config/vim/syntax/mma.vim create mode 100644 .config/vim/syntax/mmix.vim create mode 100644 .config/vim/syntax/mmp.vim create mode 100644 .config/vim/syntax/modconf.vim create mode 100644 .config/vim/syntax/model.vim create mode 100644 .config/vim/syntax/modsim3.vim create mode 100644 .config/vim/syntax/modula2.vim create mode 100644 .config/vim/syntax/modula3.vim create mode 100644 .config/vim/syntax/mojo.vim create mode 100644 .config/vim/syntax/monk.vim create mode 100644 .config/vim/syntax/moo.vim create mode 100644 .config/vim/syntax/mp.vim create mode 100644 .config/vim/syntax/mplayerconf.vim create mode 100644 .config/vim/syntax/mrxvtrc.vim create mode 100644 .config/vim/syntax/msidl.vim create mode 100644 .config/vim/syntax/msmessages.vim create mode 100644 .config/vim/syntax/msql.vim create mode 100644 .config/vim/syntax/mss.vim create mode 100644 .config/vim/syntax/mupad.vim create mode 100644 .config/vim/syntax/murphi.vim create mode 100644 .config/vim/syntax/mush.vim create mode 100644 .config/vim/syntax/muttrc.vim create mode 100644 .config/vim/syntax/mysql.vim create mode 100644 .config/vim/syntax/n1ql.vim create mode 100644 .config/vim/syntax/named.vim create mode 100644 .config/vim/syntax/nanorc.vim create mode 100644 .config/vim/syntax/nasm.vim create mode 100644 .config/vim/syntax/nastran.vim create mode 100644 .config/vim/syntax/natural.vim create mode 100644 .config/vim/syntax/ncf.vim create mode 100644 .config/vim/syntax/neomuttlog.vim create mode 100644 .config/vim/syntax/neomuttrc.vim create mode 100644 .config/vim/syntax/netrc.vim create mode 100644 .config/vim/syntax/nginx.vim create mode 100644 .config/vim/syntax/ninja.vim create mode 100644 .config/vim/syntax/nix.vim create mode 100644 .config/vim/syntax/nosyntax.vim create mode 100644 .config/vim/syntax/nqc.vim create mode 100644 .config/vim/syntax/nroff.vim create mode 100644 .config/vim/syntax/nsis.vim create mode 100644 .config/vim/syntax/nu.vim create mode 100644 .config/vim/syntax/obj.vim create mode 100644 .config/vim/syntax/objc.vim create mode 100644 .config/vim/syntax/objcpp.vim create mode 100644 .config/vim/syntax/obse.vim create mode 100644 .config/vim/syntax/ocaml.vim create mode 100644 .config/vim/syntax/occam.vim create mode 100644 .config/vim/syntax/odin.vim create mode 100644 .config/vim/syntax/omnimark.vim create mode 100644 .config/vim/syntax/ondir.vim create mode 100644 .config/vim/syntax/opam.vim create mode 100644 .config/vim/syntax/opencl.vim create mode 100644 .config/vim/syntax/openroad.vim create mode 100644 .config/vim/syntax/openscad.vim create mode 100644 .config/vim/syntax/openvpn.vim create mode 100644 .config/vim/syntax/opl.vim create mode 100644 .config/vim/syntax/ora.vim create mode 100644 .config/vim/syntax/org.vim create mode 100644 .config/vim/syntax/pacmanlog.vim create mode 100644 .config/vim/syntax/pamconf.vim create mode 100644 .config/vim/syntax/pamenv.vim create mode 100644 .config/vim/syntax/pandoc.vim create mode 100644 .config/vim/syntax/papp.vim create mode 100644 .config/vim/syntax/pascal.vim create mode 100644 .config/vim/syntax/passwd.vim create mode 100644 .config/vim/syntax/pbtxt.vim create mode 100644 .config/vim/syntax/pcap.vim create mode 100644 .config/vim/syntax/pccts.vim create mode 100644 .config/vim/syntax/pdf.vim create mode 100644 .config/vim/syntax/perl.vim create mode 100644 .config/vim/syntax/pf.vim create mode 100644 .config/vim/syntax/pfmain.vim create mode 100644 .config/vim/syntax/php.vim create mode 100644 .config/vim/syntax/phtml.vim create mode 100644 .config/vim/syntax/pic.vim create mode 100644 .config/vim/syntax/pike.vim create mode 100644 .config/vim/syntax/pilrc.vim create mode 100644 .config/vim/syntax/pine.vim create mode 100644 .config/vim/syntax/pinfo.vim create mode 100644 .config/vim/syntax/pkl.vim create mode 100644 .config/vim/syntax/plaintex.vim create mode 100644 .config/vim/syntax/pli.vim create mode 100644 .config/vim/syntax/plm.vim create mode 100644 .config/vim/syntax/plp.vim create mode 100644 .config/vim/syntax/plsql.vim create mode 100644 .config/vim/syntax/po.vim create mode 100644 .config/vim/syntax/pod.vim create mode 100644 .config/vim/syntax/poefilter.vim create mode 100644 .config/vim/syntax/poke.vim create mode 100644 .config/vim/syntax/postscr.vim create mode 100644 .config/vim/syntax/pov.vim create mode 100644 .config/vim/syntax/povini.vim create mode 100644 .config/vim/syntax/ppd.vim create mode 100644 .config/vim/syntax/ppwiz.vim create mode 100644 .config/vim/syntax/pq.vim create mode 100644 .config/vim/syntax/prescribe.vim create mode 100644 .config/vim/syntax/privoxy.vim create mode 100644 .config/vim/syntax/procmail.vim create mode 100644 .config/vim/syntax/progress.vim create mode 100644 .config/vim/syntax/prolog.vim create mode 100644 .config/vim/syntax/promela.vim create mode 100644 .config/vim/syntax/proto.vim create mode 100644 .config/vim/syntax/protocols.vim create mode 100644 .config/vim/syntax/prql.vim create mode 100644 .config/vim/syntax/ps1.vim create mode 100644 .config/vim/syntax/ps1xml.vim create mode 100644 .config/vim/syntax/psf.vim create mode 100644 .config/vim/syntax/psl.vim create mode 100644 .config/vim/syntax/ptcap.vim create mode 100644 .config/vim/syntax/ptx.vim create mode 100644 .config/vim/syntax/purifylog.vim create mode 100644 .config/vim/syntax/pymanifest.vim create mode 100644 .config/vim/syntax/pyrex.vim create mode 100644 .config/vim/syntax/python.vim create mode 100644 .config/vim/syntax/python2.vim create mode 100644 .config/vim/syntax/qb64.vim create mode 100644 .config/vim/syntax/qf.vim create mode 100644 .config/vim/syntax/qml.vim create mode 100644 .config/vim/syntax/quake.vim create mode 100644 .config/vim/syntax/quarto.vim create mode 100644 .config/vim/syntax/r.vim create mode 100644 .config/vim/syntax/racc.vim create mode 100644 .config/vim/syntax/racket.vim create mode 100644 .config/vim/syntax/radiance.vim create mode 100644 .config/vim/syntax/raku.vim create mode 100644 .config/vim/syntax/raml.vim create mode 100644 .config/vim/syntax/rapid.vim create mode 100644 .config/vim/syntax/rasi.vim create mode 100644 .config/vim/syntax/ratpoison.vim create mode 100644 .config/vim/syntax/rc.vim create mode 100644 .config/vim/syntax/rcs.vim create mode 100644 .config/vim/syntax/rcslog.vim create mode 100644 .config/vim/syntax/readline.vim create mode 100644 .config/vim/syntax/rebol.vim create mode 100644 .config/vim/syntax/redif.vim create mode 100644 .config/vim/syntax/registry.vim create mode 100644 .config/vim/syntax/rego.vim create mode 100644 .config/vim/syntax/remind.vim create mode 100644 .config/vim/syntax/requirements.vim create mode 100644 .config/vim/syntax/resolv.vim create mode 100644 .config/vim/syntax/reva.vim create mode 100644 .config/vim/syntax/rexx.vim create mode 100644 .config/vim/syntax/rhelp.vim create mode 100644 .config/vim/syntax/rib.vim create mode 100644 .config/vim/syntax/rmd.vim create mode 100644 .config/vim/syntax/rnc.vim create mode 100644 .config/vim/syntax/rng.vim create mode 100644 .config/vim/syntax/rnoweb.vim create mode 100644 .config/vim/syntax/robots.vim create mode 100644 .config/vim/syntax/routeros.vim create mode 100644 .config/vim/syntax/rpcgen.vim create mode 100644 .config/vim/syntax/rpl.vim create mode 100644 .config/vim/syntax/rrst.vim create mode 100644 .config/vim/syntax/rst.vim create mode 100644 .config/vim/syntax/rtf.vim create mode 100644 .config/vim/syntax/ruby.vim create mode 100644 .config/vim/syntax/rust.vim create mode 100644 .config/vim/syntax/salt.vim create mode 100644 .config/vim/syntax/samba.vim create mode 100644 .config/vim/syntax/sas.vim create mode 100644 .config/vim/syntax/sass.vim create mode 100644 .config/vim/syntax/sather.vim create mode 100644 .config/vim/syntax/sbt.vim create mode 100644 .config/vim/syntax/scala.vim create mode 100644 .config/vim/syntax/scdoc.vim create mode 100644 .config/vim/syntax/scheme.vim create mode 100644 .config/vim/syntax/scilab.vim create mode 100644 .config/vim/syntax/screen.vim create mode 100644 .config/vim/syntax/scss.vim create mode 100644 .config/vim/syntax/sd.vim create mode 100644 .config/vim/syntax/sdc.vim create mode 100644 .config/vim/syntax/sdl.vim create mode 100644 .config/vim/syntax/sed.vim create mode 100644 .config/vim/syntax/sendpr.vim create mode 100644 .config/vim/syntax/sensors.vim create mode 100644 .config/vim/syntax/services.vim create mode 100644 .config/vim/syntax/setserial.vim create mode 100644 .config/vim/syntax/sexplib.vim create mode 100644 .config/vim/syntax/sgml.vim create mode 100644 .config/vim/syntax/sgmldecl.vim create mode 100644 .config/vim/syntax/sgmllnx.vim create mode 100644 .config/vim/syntax/sh.vim create mode 100644 .config/vim/syntax/shaderslang.vim create mode 100644 .config/vim/syntax/sicad.vim create mode 100644 .config/vim/syntax/sieve.vim create mode 100644 .config/vim/syntax/sil.vim create mode 100644 .config/vim/syntax/simula.vim create mode 100644 .config/vim/syntax/sinda.vim create mode 100644 .config/vim/syntax/sindacmp.vim create mode 100644 .config/vim/syntax/sindaout.vim create mode 100644 .config/vim/syntax/sisu.vim create mode 100644 .config/vim/syntax/skill.vim create mode 100644 .config/vim/syntax/sl.vim create mode 100644 .config/vim/syntax/slang.vim create mode 100644 .config/vim/syntax/slice.vim create mode 100644 .config/vim/syntax/slpconf.vim create mode 100644 .config/vim/syntax/slpreg.vim create mode 100644 .config/vim/syntax/slpspi.vim create mode 100644 .config/vim/syntax/slrnrc.vim create mode 100644 .config/vim/syntax/slrnsc.vim create mode 100644 .config/vim/syntax/sm.vim create mode 100644 .config/vim/syntax/smarty.vim create mode 100644 .config/vim/syntax/smcl.vim create mode 100644 .config/vim/syntax/smil.vim create mode 100644 .config/vim/syntax/smith.vim create mode 100644 .config/vim/syntax/sml.vim create mode 100644 .config/vim/syntax/snnsnet.vim create mode 100644 .config/vim/syntax/snnspat.vim create mode 100644 .config/vim/syntax/snnsres.vim create mode 100644 .config/vim/syntax/snobol4.vim create mode 100644 .config/vim/syntax/solidity.vim create mode 100644 .config/vim/syntax/spajson.vim create mode 100644 .config/vim/syntax/spec.vim create mode 100644 .config/vim/syntax/specman.vim create mode 100644 .config/vim/syntax/spice.vim create mode 100644 .config/vim/syntax/splint.vim create mode 100644 .config/vim/syntax/spup.vim create mode 100644 .config/vim/syntax/spyce.vim create mode 100644 .config/vim/syntax/sql.vim create mode 100644 .config/vim/syntax/sqlanywhere.vim create mode 100644 .config/vim/syntax/sqlforms.vim create mode 100644 .config/vim/syntax/sqlhana.vim create mode 100644 .config/vim/syntax/sqlinformix.vim create mode 100644 .config/vim/syntax/sqlj.vim create mode 100644 .config/vim/syntax/sqloracle.vim create mode 100644 .config/vim/syntax/sqr.vim create mode 100644 .config/vim/syntax/squid.vim create mode 100644 .config/vim/syntax/squirrel.vim create mode 100644 .config/vim/syntax/srec.vim create mode 100644 .config/vim/syntax/srt.vim create mode 100644 .config/vim/syntax/ssa.vim create mode 100644 .config/vim/syntax/sshconfig.vim create mode 100644 .config/vim/syntax/sshdconfig.vim create mode 100644 .config/vim/syntax/st.vim create mode 100644 .config/vim/syntax/stata.vim create mode 100644 .config/vim/syntax/stp.vim create mode 100644 .config/vim/syntax/strace.vim create mode 100644 .config/vim/syntax/structurizr.vim create mode 100644 .config/vim/syntax/stylus.vim create mode 100644 .config/vim/syntax/sudoers.vim create mode 100644 .config/vim/syntax/svg.vim create mode 100644 .config/vim/syntax/svn.vim create mode 100644 .config/vim/syntax/swayconfig.vim create mode 100644 .config/vim/syntax/swift.vim create mode 100644 .config/vim/syntax/swiftgyb.vim create mode 100644 .config/vim/syntax/swig.vim create mode 100644 .config/vim/syntax/syncolor.vim create mode 100644 .config/vim/syntax/synload.vim create mode 100644 .config/vim/syntax/syntax.vim create mode 100644 .config/vim/syntax/sysctl.vim create mode 100644 .config/vim/syntax/systemd.vim create mode 100644 .config/vim/syntax/systemverilog.vim create mode 100644 .config/vim/syntax/tads.vim create mode 100644 .config/vim/syntax/tags.vim create mode 100644 .config/vim/syntax/tak.vim create mode 100644 .config/vim/syntax/takcmp.vim create mode 100644 .config/vim/syntax/takout.vim create mode 100644 .config/vim/syntax/tap.vim create mode 100644 .config/vim/syntax/tar.vim create mode 100644 .config/vim/syntax/taskdata.vim create mode 100644 .config/vim/syntax/taskedit.vim create mode 100644 .config/vim/syntax/tasm.vim create mode 100644 .config/vim/syntax/tcl.vim create mode 100644 .config/vim/syntax/tcsh.vim create mode 100644 .config/vim/syntax/template.vim create mode 100644 .config/vim/syntax/tera.vim create mode 100644 .config/vim/syntax/teraterm.vim create mode 100644 .config/vim/syntax/terminfo.vim create mode 100644 .config/vim/syntax/terraform.vim create mode 100644 .config/vim/syntax/tex.vim create mode 100644 .config/vim/syntax/texinfo.vim create mode 100644 .config/vim/syntax/texmf.vim create mode 100644 .config/vim/syntax/tf.vim create mode 100644 .config/vim/syntax/thrift.vim create mode 100644 .config/vim/syntax/tiasm.vim create mode 100644 .config/vim/syntax/tidy.vim create mode 100644 .config/vim/syntax/tilde.vim create mode 100644 .config/vim/syntax/tli.vim create mode 100644 .config/vim/syntax/tmux.vim create mode 100644 .config/vim/syntax/toml.vim create mode 100644 .config/vim/syntax/tpp.vim create mode 100644 .config/vim/syntax/trasys.vim create mode 100644 .config/vim/syntax/treetop.vim create mode 100644 .config/vim/syntax/trustees.vim create mode 100644 .config/vim/syntax/tsalt.vim create mode 100644 .config/vim/syntax/tsscl.vim create mode 100644 .config/vim/syntax/tssgm.vim create mode 100644 .config/vim/syntax/tssop.vim create mode 100644 .config/vim/syntax/tsv.vim create mode 100644 .config/vim/syntax/tt2.vim create mode 100644 .config/vim/syntax/tt2html.vim create mode 100644 .config/vim/syntax/tt2js.vim create mode 100644 .config/vim/syntax/tutor.vim create mode 100644 .config/vim/syntax/typescript.vim create mode 100644 .config/vim/syntax/typescriptreact.vim create mode 100644 .config/vim/syntax/typst.vim create mode 100644 .config/vim/syntax/uc.vim create mode 100644 .config/vim/syntax/uci.vim create mode 100644 .config/vim/syntax/udevconf.vim create mode 100644 .config/vim/syntax/udevperm.vim create mode 100644 .config/vim/syntax/udevrules.vim create mode 100644 .config/vim/syntax/uil.vim create mode 100644 .config/vim/syntax/unison.vim create mode 100644 .config/vim/syntax/updatedb.vim create mode 100644 .config/vim/syntax/upstart.vim create mode 100644 .config/vim/syntax/upstreamdat.vim create mode 100644 .config/vim/syntax/upstreaminstalllog.vim create mode 100644 .config/vim/syntax/upstreamlog.vim create mode 100644 .config/vim/syntax/upstreamrpt.vim create mode 100644 .config/vim/syntax/urlshortcut.vim create mode 100644 .config/vim/syntax/usserverlog.vim create mode 100644 .config/vim/syntax/usw2kagtlog.vim create mode 100644 .config/vim/syntax/valgrind.vim create mode 100644 .config/vim/syntax/vb.vim create mode 100644 .config/vim/syntax/vdf.vim create mode 100644 .config/vim/syntax/vera.vim create mode 100644 .config/vim/syntax/verilog.vim create mode 100644 .config/vim/syntax/verilogams.vim create mode 100644 .config/vim/syntax/vgrindefs.vim create mode 100644 .config/vim/syntax/vhdl.vim create mode 100644 .config/vim/syntax/vim.vim create mode 100644 .config/vim/syntax/viminfo.vim create mode 100644 .config/vim/syntax/vimnormal.vim create mode 100644 .config/vim/syntax/virata.vim create mode 100644 .config/vim/syntax/vmasm.vim create mode 100644 .config/vim/syntax/voscm.vim create mode 100644 .config/vim/syntax/vrml.vim create mode 100644 .config/vim/syntax/vroom.vim create mode 100644 .config/vim/syntax/vsejcl.vim create mode 100644 .config/vim/syntax/vue.vim create mode 100644 .config/vim/syntax/wat.vim create mode 100644 .config/vim/syntax/wdiff.vim create mode 100644 .config/vim/syntax/wdl.vim create mode 100644 .config/vim/syntax/web.vim create mode 100644 .config/vim/syntax/webmacro.vim create mode 100644 .config/vim/syntax/wget.vim create mode 100644 .config/vim/syntax/wget2.vim create mode 100644 .config/vim/syntax/whitespace.vim create mode 100644 .config/vim/syntax/winbatch.vim create mode 100644 .config/vim/syntax/wml.vim create mode 100644 .config/vim/syntax/wsh.vim create mode 100644 .config/vim/syntax/wsml.vim create mode 100644 .config/vim/syntax/wvdial.vim create mode 100644 .config/vim/syntax/xbl.vim create mode 100644 .config/vim/syntax/xcompose.vim create mode 100644 .config/vim/syntax/xdefaults.vim create mode 100644 .config/vim/syntax/xf86conf.vim create mode 100644 .config/vim/syntax/xhtml.vim create mode 100644 .config/vim/syntax/xinetd.vim create mode 100644 .config/vim/syntax/xkb.vim create mode 100644 .config/vim/syntax/xmath.vim create mode 100644 .config/vim/syntax/xml.vim create mode 100644 .config/vim/syntax/xmodmap.vim create mode 100644 .config/vim/syntax/xpm.vim create mode 100644 .config/vim/syntax/xpm2.vim create mode 100644 .config/vim/syntax/xquery.vim create mode 100644 .config/vim/syntax/xs.vim create mode 100644 .config/vim/syntax/xsd.vim create mode 100644 .config/vim/syntax/xslt.vim create mode 100644 .config/vim/syntax/xxd.vim create mode 100644 .config/vim/syntax/yacc.vim create mode 100644 .config/vim/syntax/yaml.vim create mode 100644 .config/vim/syntax/z8a.vim create mode 100644 .config/vim/syntax/zathurarc.vim create mode 100644 .config/vim/syntax/zig.vim create mode 100644 .config/vim/syntax/zimbu.vim create mode 100644 .config/vim/syntax/zir.vim create mode 100644 .config/vim/syntax/zserio.vim create mode 100644 .config/vim/syntax/zsh.vim create mode 100644 .config/vim/view/=+git=+vimwiki=+index.wiki= create mode 100644 .config/vim/view/~=+vimwiki=+Blossom.wiki= create mode 100644 .config/vim/view/~=+vimwiki=+diary=+2025-11-23.wiki= create mode 100644 .config/vim/view/~=+vimwiki=+diary=+2025-11-24.wiki= create mode 100644 .config/vim/view/~=+vimwiki=+diary=+2025-12-03.wiki= create mode 100644 .config/vim/view/~=+vimwiki=+diary=+2025-12-12.wiki= create mode 100644 .config/vim/view/~=+vimwiki=+diary=+2026-01-01.wiki= create mode 100644 .config/vim/view/~=+vimwiki=+diary=+Blossom.wiki= create mode 100644 .config/vim/view/~=+vimwiki=+index.wiki= create mode 100644 .config/vim/view/~=+vimwiki=+linux.wiki= create mode 100644 .config/vim/view/~=+vimwiki=+test.wiki= create mode 100644 .config/vim/view/~=+vimwiki=+vimwiki.wiki= create mode 100644 .config/vim/view/~=+vimwiki=+weeby-neety.wiki= create mode 100644 .config/vim/vimrc create mode 100644 rc create mode 100644 vimwiki/Astrallazgo.wiki create mode 100644 vimwiki/Blossom.wiki create mode 100644 vimwiki/FirstRule.wiki create mode 100644 vimwiki/Hallasenderos.wiki create mode 100644 vimwiki/TTRPGStats.wiki create mode 100644 vimwiki/Time4.wiki create mode 100644 vimwiki/YAZNIG.wiki create mode 100644 vimwiki/diary/2025-11-23.wiki create mode 100644 vimwiki/diary/2025-11-24.wiki create mode 100644 vimwiki/diary/2025-12-03.wiki create mode 100644 vimwiki/diary/2025-12-12.wiki create mode 100644 vimwiki/diary/2026-01-01.wiki create mode 100644 vimwiki/diary/diary.wiki create mode 100644 vimwiki/index.wiki create mode 100644 vimwiki/linux.wiki create mode 100644 vimwiki/vimwiki.wiki diff --git a/.config/vim/.netrwhist b/.config/vim/.netrwhist new file mode 100644 index 0000000..df4f8b8 --- /dev/null +++ b/.config/vim/.netrwhist @@ -0,0 +1,5 @@ +let g:netrw_dirhistmax =10 +let g:netrw_dirhistcnt =3 +let g:netrw_dirhist_3='/git/dotAle/.config/vim' +let g:netrw_dirhist_2='/home/ale/.config/mpv' +let g:netrw_dirhist_1='/home/ale' diff --git a/.config/vim/autoload/pathogen.vim b/.config/vim/autoload/pathogen.vim new file mode 100644 index 0000000..3582fbf --- /dev/null +++ b/.config/vim/autoload/pathogen.vim @@ -0,0 +1,264 @@ +" pathogen.vim - path option manipulation +" Maintainer: Tim Pope +" Version: 2.4 + +" Install in ~/.vim/autoload (or ~\vimfiles\autoload). +" +" For management of individually installed plugins in ~/.vim/bundle (or +" ~\vimfiles\bundle), adding `execute pathogen#infect()` to the top of your +" .vimrc is the only other setup necessary. +" +" The API is documented inline below. + +if exists("g:loaded_pathogen") || &cp + finish +endif +let g:loaded_pathogen = 1 + +" Point of entry for basic default usage. Give a relative path to invoke +" pathogen#interpose() or an absolute path to invoke pathogen#surround(). +" Curly braces are expanded with pathogen#expand(): "bundle/{}" finds all +" subdirectories inside "bundle" inside all directories in the runtime path. +" If no arguments are given, defaults "bundle/{}", and also "pack/{}/start/{}" +" on versions of Vim without native package support. +function! pathogen#infect(...) abort + if a:0 + let paths = filter(reverse(copy(a:000)), 'type(v:val) == type("")') + else + let paths = ['bundle/{}', 'pack/{}/start/{}'] + endif + if has('packages') + call filter(paths, 'v:val !~# "^pack/[^/]*/start/[^/]*$"') + endif + let static = '^\%([$~\\/]\|\w:[\\/]\)[^{}*]*$' + for path in filter(copy(paths), 'v:val =~# static') + call pathogen#surround(path) + endfor + for path in filter(copy(paths), 'v:val !~# static') + if path =~# '^\%([$~\\/]\|\w:[\\/]\)' + call pathogen#surround(path) + else + call pathogen#interpose(path) + endif + endfor + call pathogen#cycle_filetype() + if pathogen#is_disabled($MYVIMRC) + return 'finish' + endif + return '' +endfunction + +" Split a path into a list. +function! pathogen#split(path) abort + if type(a:path) == type([]) | return a:path | endif + if empty(a:path) | return [] | endif + let split = split(a:path,'\\\@]','\\&','') + endif +endfunction + +" Like findfile(), but hardcoded to use the runtimepath. +function! pathogen#runtime_findfile(file,count) abort + let rtp = pathogen#join(1,pathogen#split(&rtp)) + let file = findfile(a:file,rtp,a:count) + if file ==# '' + return '' + else + return fnamemodify(file,':p') + endif +endfunction + +" vim:set et sw=2 foldmethod=expr foldexpr=getline(v\:lnum)=~'^\"\ Section\:'?'>1'\:getline(v\:lnum)=~#'^fu'?'a1'\:getline(v\:lnum)=~#'^endf'?'s1'\:'=': diff --git a/.config/vim/bundle/taskwiki/after/ftplugin/vimwiki.vim b/.config/vim/bundle/taskwiki/after/ftplugin/vimwiki.vim new file mode 100644 index 0000000..c66ccdf --- /dev/null +++ b/.config/vim/bundle/taskwiki/after/ftplugin/vimwiki.vim @@ -0,0 +1,5 @@ +if exists('b:did_ftplugin_taskwiki_after') | finish | endif +let b:did_ftplugin_taskwiki_after = 1 + +let b:taskwiki_omnifunc_fallback = len(&omnifunc) ? function(&omnifunc) : '' +setlocal omnifunc=taskwiki#CompleteOmni diff --git a/.config/vim/bundle/taskwiki/after/syntax/vimwiki.vim b/.config/vim/bundle/taskwiki/after/syntax/vimwiki.vim new file mode 100644 index 0000000..8cd690c --- /dev/null +++ b/.config/vim/bundle/taskwiki/after/syntax/vimwiki.vim @@ -0,0 +1,58 @@ +" Disable taskwiki if taskwiki_disable variable set +if exists("g:taskwiki_disable") + finish +endif + +" Detect if conceal feature is available +let s:conceal = exists("+conceallevel") ? ' conceal': '' + +syntax match TaskWikiTask /\s*\* \[.\]\s.*$/ contains=@TaskWikiTaskContains +syntax cluster TaskWikiTaskContains + \ contains=VimwikiListTodo, + \ VimwikiTag, + \ VimwikiEmoticons, + \ VimwikiTodo, + \ VimwikiBoldT, + \ VimwikiItalicT, + \ VimwikiBoldItalicT, + \ VimwikiItalicBoldT, + \ VimwikiDelTextT, + \ VimwikiSuperScriptT, + \ VimwikiSubScriptT, + \ VimwikiCodeT, + \ VimwikiEqInT, + \ VimwikiLink, + \ VimwikiNoExistsLink, + \ VimwikiNoExistsLinkT, + \ VimwikiWikiLink, + \ VimwikiWikiLinkT, + \ VimwikiWeblink1, + \ VimwikiWikilink1, + \ @Spell + +" Conceal the UUID +execute 'syn match TaskWikiTaskUuid containedin=TaskWikiTask /\v#([A-Z]:)?[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/'.s:conceal +execute 'syn match TaskWikiTaskUuid containedin=TaskWikiTask /\v#([A-Z]:)?[0-9a-fA-F]{8}$/'.s:conceal +highlight link TaskWikiTaskUuid Comment + +" Conceal header definitions +for s:i in range(1,6) + execute 'syn match TaskWikiHeaderDef containedin=VimwikiHeader'.s:i.' contained /|[^=]*/'.s:conceal +endfor + +" Define active and deleted task regions +" Will be colored dynamically by Meta().source_tw_colors() +syntax match TaskWikiTaskActive containedin=TaskWikiTask contained contains=@TaskWikiTaskContains /\s*\*\s\[S\]\s[^#]*/ +syntax match TaskWikiTaskCompleted containedin=TaskWikiTask contained contains=@TaskWikiTaskContains /\s*\*\s\[[Xx]\]\s[^#]*/ +syntax match TaskWikiTaskDeleted containedin=TaskWikiTask contained contains=@TaskWikiTaskContains /\s*\*\s*\[D\]\s[^#]*/ +syntax match TaskWikiTaskRecurring containedin=TaskWikiTask contained contains=@TaskWikiTaskContains /\s*\*\s\[R\]\s[^#]*/ +syntax match TaskWikiTaskWaiting containedin=TaskWikiTask contained contains=@TaskWikiTaskContains /\s*\*\s\[W\]\s[^#]*/ +syntax match TaskWikiTaskPriority contained /\( \)\@<=\(!\|!!\|!!!\)\( \)\@=/ +syntax cluster TaskWikiTaskContains add=TaskWikiTaskPriority + +" Set concealed parts as really concealed in normal mode, and with cursor over +" (unless disabled by user) +if !exists('g:taskwiki_disable_concealcursor') + setlocal conceallevel=3 + setlocal concealcursor=nc +endif diff --git a/.config/vim/bundle/taskwiki/autoload/taskwiki.vim b/.config/vim/bundle/taskwiki/autoload/taskwiki.vim new file mode 100644 index 0000000..7f9e78f --- /dev/null +++ b/.config/vim/bundle/taskwiki/autoload/taskwiki.vim @@ -0,0 +1,68 @@ +if exists('g:loaded_taskwiki_auto') | finish | endif +let g:loaded_taskwiki_auto = 1 + +function! taskwiki#MkView() abort + let viewoptions = &viewoptions + set viewoptions-=options + mkview + let &viewoptions = viewoptions +endfunction + +function! taskwiki#LoadView() abort + silent! loadview + silent! doautocmd SessionLoadPost +endfunction + +function! taskwiki#FoldInit() abort + " Unless vimwiki is configured to use its folding, set our own + if &foldtext !~? 'VimwikiFold' + setlocal foldmethod=syntax + setlocal foldtext=taskwiki#FoldText() + endif +endfunction + +" Altered version of the VimwikiFoldText, strips viewport params +function! taskwiki#FoldText() + let line = getline(v:foldstart) + let main_text = substitute(line, '^\s*', repeat(' ',indent(v:foldstart)), '') + let short_text = substitute(main_text, '|[^=]* =', '=', '') + let short_text = substitute(short_text, '@[^=]* =', '=', '') + let short_text = substitute(short_text, ' @[A-Za-z0-9]\+', '', '') + let fold_len = v:foldend - v:foldstart + 1 + let len_text = ' ['.fold_len.'] ' + return short_text.len_text.repeat(' ', 500) +endfunction + +function! taskwiki#CompleteMod(arglead, line, pos) abort + return py3eval('cache().get_relevant_completion().modify(vim.eval("a:arglead"))') +endfunction + +function! taskwiki#CompleteOmni(findstart, base) abort + if a:findstart == 1 + let line = getline('.')[:col('.')-2] + + " Complete modstring after -- in new tasks + let modstring = py3eval('cache().get_relevant_completion().omni_modstring_findstart(vim.eval("l:line"))') + if modstring >= 0 + let s:omni_method = 'modstring' + return modstring + endif + + " Fallback to vimwiki's omnifunc + if type(b:taskwiki_omnifunc_fallback) is v:t_func + let s:omni_method = 'fallback' + return b:taskwiki_omnifunc_fallback(a:findstart, a:base) + else + let s:omni_method = '' + return -1 + endif + else + if s:omni_method is 'modstring' + return py3eval('cache().get_relevant_completion().omni_modstring(vim.eval("a:base"))') + elseif s:omni_method is 'fallback' + return b:taskwiki_omnifunc_fallback(a:findstart, a:base) + else + return [] + endif + endif +endfunction diff --git a/.config/vim/bundle/taskwiki/doc/TaskWiki-demo.gif b/.config/vim/bundle/taskwiki/doc/TaskWiki-demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..736a56bb5bb7d2fede9dcfe78821af61a1a1b45c GIT binary patch literal 539570 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

O8r-EER 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

0K)}^ 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

wM?P98(cD`!rV6Zq2s}9Ri%R=__W94a7 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�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 z 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 literal 0 HcmV?d00001 diff --git a/.config/vim/bundle/taskwiki/doc/taskwiki.txt b/.config/vim/bundle/taskwiki/doc/taskwiki.txt new file mode 100644 index 0000000..666fcee --- /dev/null +++ b/.config/vim/bundle/taskwiki/doc/taskwiki.txt @@ -0,0 +1,848 @@ +*taskwiki.txt* Taskwarrior tasks in Vimwiki v0.4 ~ + _____ _ __ ___ _ _ ~ + a |_ _|_ _ ___| | _\ \ / (_) | _(_) a ~ + command-line | |/ _` / __| |/ /\ \ /\ / /| | |/ / | personal wiki ~ + todo list | | (_| \__ \ < \ V V / | | <| | for vim ~ + manager |_|\__,_|___/_|\_\ \_/\_/ |_|_|\_\_| ~ + ~ +============================================================================== +QUICK-REFERENCE -- use "t" and one of: -- *taskwiki-quickref* + +| a annotate | C calendar | Ga ghistory annual | p projects | +| bd burndown daily | d done | hm history month | s summary | +| bw burndown weekly | D delete | ha history annual | S stats | +| bm burndown monthly | e edit | i (or ) info | t tags | +| cp choose project | g grid | l back-link | + start | +| ct choose tag | Gm ghistory month | m modify | - stop | + +============================================================================== +CONTENTS *taskwiki-contents* + + 1. Introduction |taskwiki| + 2. Requirements |taskwiki-requires| + 3. Installing |taskwiki-install| + 4. Optional enhancements |taskwiki-optional| + 5. More details about features |taskwiki-features| + 5.1. Tasks |taskwiki-features-task| + 5.2. Viewports |taskwiki-features-viewport| + 5.3. Extra data sources |taskwiki-features-warriors| + 6. Mapping |taskwiki-mapping| + 7. Commands |taskwiki-commands| + 8. Settings |taskwiki-settings| + 9. Troubleshooting |taskwiki-trouble| + 10. Contributing |taskwiki-contribute| + 11. Credits |taskwiki-credits| + 12. License |taskwiki-license| + +============================================================================= +1. INTRODUCTION *taskwiki* + +Taskwiki enhances simple vimwiki task lists by storing the task metadata in +Taskwarrior. Taskwarrior uses plaintext data files as a back end, and taskwiki +uses Taskwarrior as a back end. This allows taskwiki to leverage its powerful +features, such as filtering, recurrent tasks, user defined attributes or hooks. + +NOTE: Taskwiki only handles check lists that use the asterisk "*". All +other lists, i.e. those written with a hyphen "-" or a pound sign "#" as +well as ordered lists, are left alone. This allows you to define plain +lists and even vimwiki check lists that are unrelated to Taskwarrior. + +---------------------------------------------------------------------------- +Individual tasks + +~ * [ ] Install Taskwiki + +Such tasks get synced to TaskWarrior when the file is saved. Additional +metadata, as project, tags, priority, can be stored with this task. + +Some of that metadata gets visually represented in vim, and is updated +if the representation changes in vim. + +~ * [ ] Install Taskwiki !!! (2015-08-23 19:00) + +---------------------------------------------------------------------------- +Task lists + +Tasks can be grouped - simply written in one block. This has the advantage +of any child tasks being marked as dependencies of the parent tasks. + +~ * [ ] Get married +~ * [ ] Find a girlfriend +~ * [ ] Buy a ring +~ * [ ] Propose + +---------------------------------------------------------------------------- +Viewports + +A viewport is a header with a task query (filter) embedded, generating the +corresponding task list. These tasks can be modified and changes will be +synced back to task data. A simple viewport can look as follows: + +~ == Home tasks | project:Home == + +Filter query is concealed. + +Upon saving, this will generate the list of matching tasks, in a tree-like +fashion (respecting dependencies). + +~ == Home tasks | project:Home == +~ * [ ] Feed the dog (2015-08-08) +~ * [ ] Tidy up the house !! +~ * [ ] Wash the dishes +~ * [ ] Declare war on the cobwebs + +Tasks added (written) to the task list under the viewport inherit the defaults +from its filter. + +~ == Home tasks | project:Home == +~ * [ ] Feed the dog +~ * [ ] Tidy up the house !! +~ * [ ] Wash the dishes +~ * [ ] Declare war on the cobwebs +~ * [ ] Call the landlord about rent payment (2015-08-23) +~ ^ the task above will have project:Home set automatically + +For some more complex filters, defaults cannot be automatically derived. +In such case, you can specify the defaults explicitly: + +~ == Urgent tasks | +OVERDUE or +urgent | +urgent == +~ ^ defaults definition + +Viewports can be inspected by hitting [CR] with cursor above them. + +---------------------------------------------------------------------------- +Preset headers + +A preset header has a similar syntax to a viewport: + +~ == Home tasks || project:Home == + +In contrast to viewports it does not generate a list of associated tasks. +Instead it sets a filter for all viewports and default attributes for all new +tasks in the corresponding section. + +Like with viewports for complex filters the default attributes can be given +manually. + +~ == Home tasks || project:house or project:garden || project:house == + +Multiple levels of preset headers are chained. So you can do this: + +~ == Taskwiki development || project:Taskwiki == +~ * Non-task notes +~ === Bugs || +bugs === +~ * [ ] Bug #42 +~ === Features || +features === +~ * [ ] Some Feature + +Here both tasks are assigned the Taskwiki project, as well the respective tag. + +---------------------------------------------------------------------------- +Report splits + +Taskwiki can provide additional information reports on a task list (selected, +or part of a viewport) and on individual tasks as well. These reports are shown +in dynamic temporary splits. + +~ * [ ] Tidy up the house !! (2015-08-23) + +For example, hitting [CR] on the above task runs :TaskWikiInfo and displays: + + Name Value + ------------- --------------------------------------------------------- + ID 6 + Description Tidy up the house + 2015-08-22 21:29:35 Tip: Use roomba for vacuum-cleaning + Status Pending + Project Home + Entered 2015-08-22 21:27:26 (2 minutes) + Due 2015-08-23 00:00:00 + Last modified 2015-08-22 21:30:21 (1 second) + Virtual tags ANNOTATED MONTH PENDING READY UNBLOCKED YEAR + UUID 448c2fa9-6a06-454e-a2bc-b0c8ae91994f + Urgency 9.895 + Priority H + + Date Modification + ------------------- ------------------------------------------------------------ + 2015-08-14 21:29:35 Annotation of 'Tip: Use roomba for vacuum-cleaning' added. + 2015-08-14 21:30:11 Due set to '2015-08-23 00:00:00'. + +Running the :TaskWikiSummary can produce side-split like this: + + Project Remaining Avg age Complete 0% 100% + ------------------ --------- -------- -------- ------------------------------ + Work 18 4 weeks 74% ====================== + Designs + Feature X 3 4 weeks 89% ========================== + Feature Y 7 2 weeks 47% ========= + Tickets 5 3 weeks 79% ====================== + Blog 1 4 months 50% =============== + + +There are many more reports (burndown, calendar, history, projects, stats, +summary, tags,..), but for the sake of brevity, they will not be described here. +They work in a similar fashion. + + +============================================================================= +2. REQUIREMENTS *taskwiki-requires* + +* Vim 7.4 or newer, with +python or +python3 (NeoVim is also supported) +* [Vimwiki](https://github.com/vimwiki/vimwiki/tree/dev) (the dev branch) + + git clone https://github.com/vimwiki/vimwiki ~/.vim/bundle/ --branch dev + +* [Taskwarrior](http://taskwarrior.org) (version 2.4.0 or newer) +- install either from [sources](http://taskwarrior.org/download/) +or using your [package manager](http://taskwarrior.org/download/#dist) + + sudo dnf install task + +* [tasklib](https://github.com/tbabej/tasklib/tree/develop) (the develop branch) +- Python library for Taskwarrior. + + sudo pip install --upgrade git+git://github.com/tbabej/tasklib@develop + +Taskwiki will automatically check whether the Vim and tasklib versions are +sufficient, and raise error if not. + +============================================================================= +3. INSTALLING *taskwiki-install* + +Using pathogen (or similar vim plugin manager), the taskwiki install is +as simple as: + + git clone https://github.com/tbabej/taskwiki ~/.vim/bundle/taskwiki + +However, make sure your box satisfies the requirements stated above. + +To access documentation, run :helptags and then :help taskwiki. + +============================================================================= +4. OPTIONAL ENHANCEMENTS *taskwiki-optional* + +The following optional plugins enhance and integrate with TaskWiki. +At very least,I'd recommend the AnsiEsc plugin - Taskwarrior +charts are much more fun when they're colorful! + +* [vim-plugin-AnsiEsc](https://github.com/powerman/vim-plugin-AnsiEsc) +adds color support in charts. + + git clone https://github.com/powerman/vim-plugin-AnsiEsc ~/.vim/bundle/ + +* [tagbar](https://github.com/majutsushi/tagbar) +provides taskwiki file navigation. + + git clone https://github.com/majutsushi/tagbar ~/.vim/bundle/ + +* [vim-taskwarrior](https://github.com/linuxcaffe/taskwarrior.vim) +enables grid view. + + git clone https://github.com/linuxcaffe/taskwarrior.vim ~/.vim/bundle/ + +============================================================================= +5. FEATURES IN DETAIL *taskwiki-features* + +---------------------------------------------------------------------------- +5.1. Tasks *taskwiki-features-task* + +Any task in the taskwiki file will be saved to Taskwarrior. Task is identified +by an concealed UUID. + +~ * [ ] Install Taskwiki #2a4f52 +~ ^ this part is concealed + +---------------------- +5.1.1 Represented data + +Currently, following task metadata is represented in the buffer: + +* Status. Tasks are highlighted differently depending on their status. + +~ * [ ] Install Taskwiki | pending task +~ * [X] Install Taskwiki | completed task +~ * [D] Install Taskwiki | deleted task +~ * [S] Install Taskwiki | started task +~ * [W] Install Taskwiki | waiting task + +* Description. All the text that is not part of the other metadata. +* Due date. Either a date, or date with time inside parentheses. + +~ * [X] Install Taskwiki (2015-08-08) | task with due date +~ * [X] Install Taskwiki (2015-08-08 14:00) | task with due date and time + +* Priority. This is denoted by 1,2, or 3 exclamation marks for L, M and H + priority levels, respectively. + +~ * [X] Install Taskwiki !! | task with medium priority + +* Dependency. If any task is indented right below other, the indented + task will be marked as dependency for the non-indented one. + +~ * [ ] Make sandwich | will be marked as dependant on tasks below +~ * [ ] Buy bread +~ * [ ] Find butter + +The actual indentation (number of spaces) does not matter. Task will be +marked as dependency only for its direct parent. + +Any changes to the buffer representation of the task will be saved to the +Taskwarrior data files. You can hence conveniently change description, or +add due dates, directly from your taskwiki files. + +------------------------------ +5.1.2 Assigning other metadata + +Tasks can be assigned any other metadata that Taskwarrior supports, such +as tags or custom user-defined attributes. To simplify parsing, however, +not all of them are represented in the buffer. Nevertheless they can be used +for filtering, etc. + +To add arbitrary metadata to the tasks, see |taskwiki-commands|, especially +|:TaskWikiMod|, |:TaskWikiAnnotate| and friends. + +To assign metadata when creating a task, you can use put it into the +description, separating it from the real description using the '--' divider. + +Note that the spaces around the divider are required. + +~ * [ ] This has project home -- project:Home + +Upon saving, the metadata string will disappear, saving the metadata into +Taskwarrior: + +~ * [ ] This has project home #431f42 + +Typing additional metadata can be simplified by using omni completion (see +|compl-omni|), like so: + +~ * [ ] This has project home -- project: + +---------------------------------------------------------------------------- +5.2. Viewports *taskwiki-features-viewport* + +--------------- +5.2.1 Filtering + +Viewport is a enhanced header, which generates a list of tasks under itself. + +As noted in the |taskwiki| introduction, each viewport has an embedded filter +query. When the taskwiki file is loaded or saved, the viewport will re-generate +the list of tasks matching the embedded filter. + +~ == Home tasks | project:Home == +~ * [ ] Feed the dog (2015-08-08) +~ * [ ] Tidy up the house !! +~ * [ ] Wash the dishes +~ * [ ] Declare war on the cobwebs + +Filter strings can be arbitrary taskwarrior filter strings; usage of +attribute modifiers or virtual tags is allowed: + +~ == Overdue tasks | +OVERDUE == +~ == Today tasks | +TODAY == +~ == Today tasks | due:today == +~ == Tomorrow-morning tasks | due.after:tomorrow due.before:tomorrow+12h == + +-------------- +5.2.2 Defaults + +Any task added to the viewport will be assigned default values, which are +derived from the filter definition. This only makes sense, since otherwise +a task added below the viewport would be removed (it would not match the +filter). + +~ == Home tasks | project:Home == +~ * [ ] This task I just wrote here will have project home + +However, for more complex filters, defaults cannot be derived directly. For +example when attribute modifiers are being used: + +~ == Any documentation tasks | project.has:docs == +~ * [ ] Should I have project taskwiki.docs or tasklib.docs? + +In such a case, no default attributes are derived. Nevertheless the user can +specify the defaults directly: + +~ == Any documentation tasks | project.has:docs | project:taskwiki.docs == + +------------- +5.2.3 Sorting + +Tasks within the viewport are sorted in the form of a dependency tree - all +the tasks that are blocking a particular task are displayed below that task, +indented. + +The ordering of the tasks within the same level (and parent) is determined by +the default sort order, see |taskwiki_sort_order|. Sort order can be +customized per-viewport, in which case you need to set an alternative sort +order in the |taskwiki_sort_orders| option, along with its identifier. + + Example: + let g:taskwiki_sort_orders={"T": "project+,due-"} + +Using this sort order is as simple as using $[IDENTIFIER] at the end of +viewport definition: + +~ == Differently ordered home tasks | project:Home $T == + +------------------ +5.2.4 Limiting number of tasks displayed + +By default, taskwiki will present the full list of tasks that match the +viewport definition. + +You can limit the number of tasks listed by using the limit filter: + +~ == List only the 5 first tasks | project:Home limit:5 == + +This will instruct taskwiki to limit the list of tasks to 5. + +The limit must always come last. For instance, if you are also using a sorting +identifier: + +~ == List only the 5 first tasks | project:Home $T limit:5 == + +The limit keyword will not be passed over to taskwarrior and is consumed only +by taskwiki. + +------------------------ +5.2.4 Expiring viewports + +Every time you view or save a vimwiki file that contains taskwiki compatible +tasks, the task lists will get updated. However, if you want to archive +a file, this is undesirable as it will be updated every time you open it. In +such a case, you can add an expiration date to the viewport you want taskwiki +to ignore, using an exclamation mark and a date: + +~ == Will expire on 1st January 2021 | project:my !2021-01-01 + +After January 1st, 2021, taskwiki will ignore the viewport and will not update +the task list it contains. + +An expiry date can also be set in a preset header. A viewport can override the +expiry date by specifying a new one: + +~ == Whole document is expired.. || !2020-01-01 == +~ === ...(expired) | +tag1 === +~ === ...except this viewport | +tag2 !2500-01-01 === + +-------------------- +5.2.5 Default filter + +By default, every viewport filter is extended with the -DELETED and -PARENT +virtual tags. + +This is quite sensible, however, there might be a case where you wish to +override this behaviour. To do so, use the following virtual tag syntax, which +forces the virtual tag, no matter its presence in the defaults. + + !?TAG - any presence in the defaults will not be considered + !+TAG - +TAG will be forced, even if -TAG is present in the defaults + !-TAG - -TAG will be forced, even if +TAG is present in the defaults + +Examples: + +~ == Home tasks, even deleted | project:Home !?DELETED == +~ == Home tasks, only deleted | project:Home !+DELETED == +~ == Home tasks, excluding deleted | project:Home !-DELETED == + +----------------------- +5.2.6 Meta virtual tags + +Currently there is one meta virtual tag: -VISIBLE. This tag can be used to +filter out tasks that are displayed elsewhere in the same taskwiki file. + +Example: + +~ == Work tasks not belonging to any subproject | project:Work -VISIBLE == +~ == Work coding tasks | project:Work.Coding == +~ == Work review tasks | project:Work.Review == + +---------------- +5.2.7 Inspection + +You can inspect a given viewport (see what filter and defaults are being used, +as well as other pieces of information) by using the |:TaskWikiInspect| +command (or hitting ) over a viewport definition. + +------------------------------------------- +5.2.8 Usage of existing context definitions + +If you use the context feature in Taskwarrior, you can easily reference +definition of any context using the @[context_name] syntax in the viewport's +filter. + +For example, if you define the following context in the Taskwarrior, + + $ task context define worktoday project:Work due:today + +you can leverage this definition in the filter: + +~ == Work tasks today | @worktoday == + +Which is equivalent to (context gets expanded): + +~ == Work tasks today | project:Work due:today == + +You can also verify the expansion by inspecting the viewport. + +---------------------------------------------------------------------------- +5.3. Extra data sources *taskwiki-features-warriors* + +Taskwiki can work with multiple instances of the taskwarrior databases at +the same time. This is handy if you keep different taskwarrior databases +for various reasons, i.e. one for tasks (stored in ~/.task) and one for +habits (stored in ~/.habit). + +To utilize both in taskwiki, you will need to define any non-default +taskwarriors using the |taskwiki_extra_warriors| setting. + +Example: +let g:taskwiki_extra_warriors={'H': {'data_location': '/home/tbabej/.habit/', 'taskrc_location': '/home/tbabej/.habitrc'}} + +Any extra taskwarrior instance is defined by its identifier, along with the +alternative data and taskrc locations. + +Having done so, you simply need to mark a viewport so that it knows to use +the alternative data source: + +~ === Home habits | project:Home #H === + +To mark a newly entered task as belonging to the alternative database, use +the following syntax: + +~ * [ ] This is a habit task #H: + +where you explicitly write '#[KEY]:' manually. When saved, UUID will be filled +in: + +~ * [ ] This is a habit task #H:2f45ae + +============================================================================= +6. MAPPING *taskwiki-mapping* + +n is mapped to show task info, VP details or follow vimwiki link + After editing a task in insert mode, starts a new task + + Normal mode key mappings (those with "v" also work in visual mode) + t + +vn a |:TaskWikiAnnotate| + n bd |:TaskWikiBurndownDaily| + n bw |:TaskWikiBurndownWeekly| + n bm |:TaskWikiBurndownMonthly| +vn cp |:TaskWikiChooseProject| +vn ct |:TaskWikiChooseTag| + n C |:TaskWikiCalendar| +vn d |:TaskWikiDone| +vn D |:TaskWikiDelete| +vn e |:TaskWikiEdit| +vn g |:TaskWikiGrid| + n Gm |:TaskWikiGhistoryMonthly| + n Ga |:TaskWikiGhistoryAnnual| + n hm |:TaskWikiHistoryMonthly| + n ha |:TaskWikiHistoryAnnual| +vn i |:TaskWikiInfo| +vn l |:TaskWikiLink| +vn m |:TaskWikiMod| + n p |:TaskWikiProjects| + n s |:TaskWikiProjectsSummary| + n S |:TaskWikiStats| + n t |:TaskWikiTags| +vn + |:TaskWikiStart| +vn - |:TaskWikiStop| + +============================================================================= +7. COMMANDS *taskwiki-commands* + +----------------------------------------------------------------------------- +Split reports commands. + +This family of commands displays TaskWarrior reports in a read-only +vertical/horizontal split. Size of these splits can be limited, +see |taskwiki_max_split_height| and |taskwiki_max_split_width| options. + +These commands will by default use filter from the nearest viewport. If you +want to display report window using global, non-filtered data, explicitly +pass the 'global' argument, i.e: + + :TaskWikiStats global + +To specify an explicit filter, you can use the filter as the argument, i.e: + + :TaskWikiStats project:Home + +To close the split windows, just hit or "q". + +NOTE: To allow color output in the split windows, make sure you have AnsiEsc +vim plugin installed, see |taskwiki-optional|. + +List of split report commands: + +*:TaskWikiBurndownDaily* [args] +*:TaskWikiBurndownWeekly* [args] +*:TaskWikiBurndownMonthly* [args] + Opens a horizontal split window with the burndown report. + +*:TaskWikiCalendar* [args] + Opens a horizontal split window with the calendar report. + +*:TaskWikiGhistoryMonthly* [args] +*:TaskWikiGhistoryAnnual* [args] + Opens a horizontal split window with the ghistory report. + +*:TaskWikiHistoryMonthly* [args] +*:TaskWikiHistoryAnnual* [args] + Opens a horizontal split window with the history report. + +*:TaskWikiProjects* [args] + Opens a vertical split window with the projects report. + +*:TaskWikiProjectsSummary* [args] + Opens a vertical split window with the summary report. + +*:TaskWikiStats* [args] + Opens a vertical split window with the stats report. + +*:TaskWikiTags* [args] + Opens a vertical split window with the tags report. + +----------------------------------------------------------------------------- +Commands operating on selected tasks. + +This group of commands operates on a selected tasks. Selected tasks can be +either the task which is currently under cursor, or any group of visually +selected tasks. + +*:TaskWikiAnnotate* + Opens a prompt to add annotation to selected task(s). + +*:TaskWikiDone* + Marks the selected task(s) as completed. + +*:TaskWikiDelete* + Deletes the selected task(s). Removes them from the file. + +*:TaskWikiEdit* + Opens the task in a separate vim instance using 'task edit'. + +*:TaskWikiGrid* + Opens a new buffer with the selected ViewPort displayed as a grid. + Requires vim-taskwarrior plugin, see |taskwiki-optional|. + +*:TaskWikiInfo* (or over a task) + Opens a split window with the info report of task under the cursor. To + close the split, use "q" or . + + NOTE: This split can have very big height for tasks with many past + modifications. See |taskwiki_split_max_height|. + +*:TaskWikiLink* + Adds an annotation to selected task(s) with ~/path/to/file.wiki. + +*:TaskWikiStart* + "Starts" the selected task(s). + +*:TaskWikiStop* + "Stops" the selected task(s). + +*:TaskWikiToggle* + "Starts" or "stops" the selected task(s), depending on their state. + +*:TaskWikiMod* [mods] + Opens a prompt for task modification, for selected task(s). + + Supports |cmdline-completion|. + +---------------------------------------------------------------------------- +Interactive commands. + +Following commands work similarly as the previous group, they can operate +on selected tasks. The modification is done via choosing the particular +modification (project, tag) in a split window. + +*:TaskWikiChooseProject* + Interactively choose project for selected task(s) by hitting over the + desired value in the split window. Use "q" to close the split, without + performing any modifications. + +*:TaskWikiChooseTag* + Interactively choose tag for selected task(s) by hitting over the + desired value in the split window. Use "q" to close the split, without + performing any modifications. + +---------------------------------------------------------------------------- +Meta commands + +This group of commands is directly related to taskwiki or taskwiki specific +constructs. + +*:TaskWikiBufferLoad* + Updates the tasks from the Taskwarrior database. This command is run + automatically when the taskwiki file is opened. + +*:TaskWikiBufferSave* + Saves the changes to the Taskwarrior database. This parses and saves all + the buffer-only changes (such as changing the description, or due date). + This command is run automatically when the taskwiki file is saved. + + NOTE: Using commands such as |:TaskWikiDone| or |:TaskWikiMod| will save + the modifications both in the buffer and the Taskwarrior database. + +*:TaskWikiInspect* (or over a viewport) + Opens a split window with details of viewport under the cursor. To + close the split, use "q" or . + +============================================================================= +8. SETTINGS *taskwiki-settings* + +*taskwiki_taskrc_location* + The location of the taskrc file used by taskwiki. Defaults to ~/.taskrc. + +*taskwiki_data_location* + The location of the data directory for taskwarrior data used by taskwiki. + Defaults to ~/.task. + +*taskwiki_extra_warriors* + A dictionary containing alternative taskwarrior instance definitions. + + A key for any alternative taskwarrior definition must be a single, + uppercase letter. Value is dictionary containing respective + data_location and taskrc_location overrides. + + Example: + let g:taskwiki_extra_warriors={'H': {'data_location': '/home/tbabej/.habit/', 'taskrc_location': '/home/tbabej/.habitrc'} + + Specifying particular extra warrior in the viewport can be done using + #[KEY] at the end of the viewport definition, in this case: + +~ === Home habits | project:Home #H === + +*taskwiki_sort_order* + The default sort order used to sort the tasks within viewports. Defaults + to 'status+,end+,due+,priority-,project+'. Expects a comma-separated list + of attributes, optionally followed by + or - to denote the increasing or + decreasing order, respectively. + +*taskwiki_sort_orders* + The sort order can also be customized per viewport. This configuration + variable stores a dictionary with the alternative sort order definitions, + each indexed by a uppercase letter. + + Example: + let g:taskwiki_sort_orders={"T": "project+,due-"} + + Specifying a particular sort order in the viewport can be achieved + using $[KEY] at the end of the viewport definition, in this case: + +~ === Work tasks by decreased due, grouped by project | project:Work $T === + +*taskwiki_split_max_width* + Use to limit the width of any vertical split created by taskwiki. + +*taskwiki_split_max_height* + Use to limit the height of any vertical split created by taskwiki. + +*taskwiki_source_tw_colors* + If set to a non-empty value (such as "yes"), taskwiki will try to + use the same colors for task highlighting as those defined in + taskwarrior. + +*taskwiki_dont_preserve_folds* + If set to a non-empty value (such as "yes"), taskwiki will not + preserve folding when entering or leaving a vimwiki buffer. + +*taskwiki_dont_fold* + If set to a non-empty value (such as "yes"), taskwiki will not + set up custom folding logic for vimwiki buffers. + +*taskwiki_disable_concealcursor* + If set to any non-empty value (such as "yes"), taskwiki will not conceal + characters on the cursor line in normal mode via `concealcursor=nc`. + +*taskwiki_disable* + Setting any non-empty value for this variable will disable taskwiki. + +*taskwiki_disable_cr_mapping* + Setting any non-empty value for this variable will prevent taskwiki + from remapping . + +*taskwiki_use_python2* + Setting this variable to non-empty value (such as "yes") will force + taskwiki to use python2. + + Example: + let g:taskwiki_use_python2="yes" + +*taskwiki_suppress_mappings* + Setting this variable to a non-empty value (such as "yes") will + prevent taskwiki from setting up any ||-mappings. This is + useful if you would rather specify your own mappings or have + conflicting mappings. + + Example: + let g:taskwiki_suppress_mappings="yes" + +*taskwiki_maplocalleader* + This variable sets the |maplocalleader| to the leader which will be + used for all function mappings (unless |taskwiki_suppress_mappings| is + set). If this variable is not set, t will be used. + + Example: + let g:taskwiki_maplocalleader=",t" + +============================================================================= +9. TROUBLESHOOTING *taskwiki-trouble* + +Make sure both your taskwiki and tasklib versions are updated. If this does +not resolve your issue, feel free to submit a bug report, or seek support +on #taskwarrior IRC channel on Freenode. + +============================================================================= +10. CONTRIBUTIONS *taskwiki-contribute* + +Code and issue tracker is hosted at: https://github.com/tbabej/taskwiki + +Feel free to submit pull requests and/or file issues for bugs and suggestions. + +============================================================================= +11. CREDITS *taskwiki-credits* + +Created by: Tomas Babej. + +Design suggestions contributed by: David J Patrick. + +Inspired by: [vimwiki-tasks plugin](https://github.com/teranex/vimwiki-tasks). + +Taskwiki wouldn't be possible without all the work and support from the +Taskwarrior community. Come hang out at #taskwarrior on Freenode. + +============================================================================= +12. LICENSE *taskwiki-license* + +Copyright 2014-2015 Tomas Babej +http://github.com/tbabej/taskwiki + +This software is released under MIT licence. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + vim:tw=78:ts=8:ft=help diff --git a/.config/vim/bundle/taskwiki/extra/vwtags.py b/.config/vim/bundle/taskwiki/extra/vwtags.py new file mode 100755 index 0000000..ae03f63 --- /dev/null +++ b/.config/vim/bundle/taskwiki/extra/vwtags.py @@ -0,0 +1,73 @@ +#! /usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +import re +import sys + +if __name__ == '__main__': + path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) + sys.path.insert(0, path) + +from taskwiki import regexp + + +def match_header(line, syntax): + m = re.search(regexp.VIEWPORT[syntax], line) + if m: + return 'viewport', m + + m = re.search(regexp.PRESET[syntax], line) + if m: + return 'preset', m + + m = re.search(regexp.HEADER[syntax], line) + if m: + return 'header', m + + return None, None + + +def process(file_content, filename, syntax): + parents = [None] * 6 + for lnum, line in enumerate(file_content): + cur_kind_long, m = match_header(line, syntax) + if not m: + continue + + cur_lvl = len(m.group('header_start')) - 1 + cur_tag = m.group('name').strip() + cur_searchterm = "^" + m.group(0).rstrip("\r\n") + "$" + cur_kind = cur_kind_long[0] + + assert cur_lvl < len(parents) + parents[cur_lvl] = cur_kind_long, cur_tag + for i in range(cur_lvl + 1, len(parents)): + parents[i] = None + + parent_scopes = [p for p in parents[0:cur_lvl] if p] + scope = "&&&".join([tag for _, tag in parent_scopes]) + if scope: + parent_kind, _ = parent_scopes[-1] + scope = "\t" + parent_kind + ":" + scope + + yield('{0}\t{1}\t/{2}/;"\t{3}\tline:{4}{5}'.format( + cur_tag, filename, cur_searchterm, cur_kind, str(lnum+1), scope)) + + +if __name__ == '__main__': + if len(sys.argv) < 3: + exit() + + syntax = sys.argv[1] + filename = sys.argv[2] + + file_content = [] + try: + with open(filename, "r") as vim_buffer: + file_content = vim_buffer.readlines() + except: + exit() + + for output in process(file_content, filename, syntax): + print(output) diff --git a/.config/vim/bundle/taskwiki/ftplugin/vimwiki/taskwiki.vim b/.config/vim/bundle/taskwiki/ftplugin/vimwiki/taskwiki.vim new file mode 100644 index 0000000..10aa2e9 --- /dev/null +++ b/.config/vim/bundle/taskwiki/ftplugin/vimwiki/taskwiki.vim @@ -0,0 +1,160 @@ +" Check VIM version +if version < 704 + echoerr "Taskwiki requires at least Vim 7.4. Please upgrade your environment." + finish +endif + +" Python version detection. +if has("python3") && ! exists("g:taskwiki_use_python2") + let g:taskwiki_py='py3 ' + let g:taskwiki_pyfile='py3file ' +elseif has("python") + let g:taskwiki_py='py ' + let g:taskwiki_pyfile='pyfile ' +else + echoerr "Taskwiki requires Vim compiled with the Python support." + finish +endif + +" Disable taskwiki if taskwiki_disable variable set +if exists("g:taskwiki_disable") + finish +endif + +if !exists("g:did_python_taskwiki") + " Determine the plugin path + let s:plugin_path = escape(expand(':p:h:h:h'), '\') + + " Execute the main body of taskwiki source + execute g:taskwiki_pyfile . s:plugin_path . '/taskwiki/main.py' + + let g:did_python_taskwiki = 1 +endif + +" Global update commands +execute "command! -buffer -nargs=* TaskWikiBufferSave :" . g:taskwiki_py . "WholeBuffer.update_to_tw()" +execute "command! -buffer -nargs=* TaskWikiBufferLoad :" . g:taskwiki_py . "WholeBuffer.update_from_tw()" + +augroup taskwiki + autocmd! * + " Update to TW upon saving + autocmd BufWrite TaskWikiBufferSave + " Save and load the view to preserve folding, if desired + if !exists('g:taskwiki_dont_preserve_folds') + autocmd BufWinLeave call taskwiki#MkView() + autocmd BufWinEnter call taskwiki#LoadView() + endif + " Reset cache when switching buffers + execute "autocmd BufEnter :" . g:taskwiki_py . "cache.load_current().reset()" + " Update window-local fold options + if !exists('g:taskwiki_dont_fold') + autocmd BufWinEnter call taskwiki#FoldInit() + endif + + " Refresh on load (if possible, after loadview to preserve folds) + if has('patch-8.1.1113') || has('nvim-0.4.0') + autocmd BufWinEnter ++once TaskWikiBufferLoad + else + TaskWikiBufferLoad + endif +augroup END + +" Split reports commands +execute "command! -buffer -nargs=* TaskWikiProjects :" . g:taskwiki_py . "SplitProjects().execute()" +execute "command! -buffer -nargs=* TaskWikiProjectsSummary :" . g:taskwiki_py . "SplitSummary().execute()" +execute "command! -buffer -nargs=* TaskWikiBurndownDaily :" . g:taskwiki_py . "SplitBurndownDaily().execute()" +execute "command! -buffer -nargs=* TaskWikiBurndownMonthly :" . g:taskwiki_py . "SplitBurndownMonthly().execute()" +execute "command! -buffer -nargs=* TaskWikiBurndownWeekly :" . g:taskwiki_py . "SplitBurndownWeekly().execute()" +execute "command! -buffer -nargs=* TaskWikiCalendar :" . g:taskwiki_py . "SplitCalendar().execute()" +execute "command! -buffer -nargs=* TaskWikiGhistoryAnnual :" . g:taskwiki_py . "SplitGhistoryAnnual().execute()" +execute "command! -buffer -nargs=* TaskWikiGhistoryMonthly :" . g:taskwiki_py . "SplitGhistoryMonthly().execute()" +execute "command! -buffer -nargs=* TaskWikiHistoryAnnual :" . g:taskwiki_py . "SplitHistoryAnnual().execute()" +execute "command! -buffer -nargs=* TaskWikiHistoryMonthly :" . g:taskwiki_py . "SplitHistoryMonthly().execute()" +execute "command! -buffer -nargs=* TaskWikiStats :" . g:taskwiki_py . "SplitStats().execute()" +execute "command! -buffer -nargs=* TaskWikiTags :" . g:taskwiki_py . "SplitTags().execute()" + +" Commands that operate on tasks in the buffer +execute "command! -buffer -range TaskWikiInfo :," . g:taskwiki_py . "SelectedTasks().info()" +execute "command! -buffer -range TaskWikiEdit :," . g:taskwiki_py . "SelectedTasks().edit()" +execute "command! -buffer -range TaskWikiLink :," . g:taskwiki_py . "SelectedTasks().link()" +execute "command! -buffer -range TaskWikiGrid :," . g:taskwiki_py . "SelectedTasks().grid()" +execute "command! -buffer -range TaskWikiDelete :," . g:taskwiki_py . "SelectedTasks().delete()" +execute "command! -buffer -range TaskWikiStart :," . g:taskwiki_py . "SelectedTasks().start()" +execute "command! -buffer -range TaskWikiStop :," . g:taskwiki_py . "SelectedTasks().stop()" +execute "command! -buffer -range TaskWikiToggle :," . g:taskwiki_py . "SelectedTasks().toggle()" +execute "command! -buffer -range TaskWikiDone :," . g:taskwiki_py . "SelectedTasks().done()" +execute "command! -buffer -range TaskWikiRedo :," . g:taskwiki_py . "SelectedTasks().redo()" + +execute "command! -buffer -range -nargs=* TaskWikiSort :," . g:taskwiki_py . "SelectedTasks().sort()" +execute "command! -buffer -range -nargs=* TaskWikiAnnotate :," . g:taskwiki_py . "SelectedTasks().annotate()" +execute "command! -buffer -range -nargs=* -complete=customlist,taskwiki#CompleteMod TaskWikiMod :," . g:taskwiki_py . "SelectedTasks().modify()" + +" Interactive commands +execute "command! -buffer -range TaskWikiChooseProject :," . g:taskwiki_py . "ChooseSplitProjects('global').execute()" +execute "command! -buffer -range TaskWikiChooseTag :," . g:taskwiki_py . "ChooseSplitTags('global').execute()" + +" Meta commands +execute "command! -buffer TaskWikiInspect :" . g:taskwiki_py . "Meta().inspect_viewport()" + +if !exists('g:taskwiki_suppress_mappings') + " Disable as VimwikiFollowLink + if !hasmapto('VimwikiFollowLink') + nmap NoVimwikiFollowLink VimwikiFollowLink + endif + + if !exists("g:taskwiki_disable_cr_mapping") + execute "nnoremap :" . g:taskwiki_py . "Mappings.task_info_or_vimwiki_follow_link()" + endif + + " Leader-related mappings. Mostly t + + if exists('g:taskwiki_maplocalleader') + let maplocalleader = g:taskwiki_maplocalleader + else + if exists('g:mapleader') + let maplocalleader = g:mapleader.'t' + else + let maplocalleader = '\t' + endif + endif + + nnoremap a :TaskWikiAnnotate + nnoremap bd :TaskWikiBurndownDaily + nnoremap bw :TaskWikiBurndownWeekly + nnoremap bm :TaskWikiBurndownMonthly + nnoremap cp :TaskWikiChooseProject + nnoremap ct :TaskWikiChooseTag + nnoremap C :TaskWikiCalendar + nnoremap d :TaskWikiDone + nnoremap D :TaskWikiDelete + nnoremap e :TaskWikiEdit + nnoremap g :TaskWikiGrid + nnoremap Gm :TaskWikiGhistoryMonthly + nnoremap Ga :TaskWikiGhistoryAnnual + nnoremap hm :TaskWikiHistoryMonthly + nnoremap ha :TaskWikiHistoryAnnual + nnoremap i :TaskWikiInfo + nnoremap l :TaskWikiLink + nnoremap m :TaskWikiMod + nnoremap p :TaskWikiProjects + nnoremap s :TaskWikiProjectsSummary + nnoremap S :TaskWikiStats + nnoremap t :TaskWikiTags + nnoremap . :TaskWikiRedo + nnoremap + :TaskWikiStart + nnoremap - :TaskWikiStop + + " Mappings for visual mode. + vnoremap a :TaskWikiAnnotate + vnoremap cp :TaskWikiChooseProject + vnoremap ct :TaskWikiChooseTag + vnoremap d :TaskWikiDone + vnoremap D :TaskWikiDelete + vnoremap e :TaskWikiEdit + vnoremap g :TaskWikiGrid + vnoremap i :TaskWikiInfo + vnoremap l :TaskWikiLink + vnoremap m :TaskWikiMod + vnoremap . :TaskWikiRedo + vnoremap + :TaskWikiStart + vnoremap - :TaskWikiStop +endif diff --git a/.config/vim/bundle/taskwiki/taskwiki/.gitignore b/.config/vim/bundle/taskwiki/taskwiki/.gitignore new file mode 100644 index 0000000..0d20b64 --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/.config/vim/bundle/taskwiki/taskwiki/__init__.py b/.config/vim/bundle/taskwiki/taskwiki/__init__.py new file mode 100644 index 0000000..ecb49bb --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/__init__.py @@ -0,0 +1 @@ +# (c) 2014-2015, Tomas Babej diff --git a/.config/vim/bundle/taskwiki/taskwiki/cache.py b/.config/vim/bundle/taskwiki/taskwiki/cache.py new file mode 100644 index 0000000..f02bf9a --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/cache.py @@ -0,0 +1,326 @@ +import vim # pylint: disable=F0401 +import re +import six + +from taskwiki import preset +from taskwiki import viewport +from taskwiki import regexp +from taskwiki import store +from taskwiki import short +from taskwiki import util +from taskwiki import errors + + +class BufferProxy(object): + + def __init__(self, number): + self.data = [] + self.buffer_number = number + + def obtain(self): + self.data = util.get_buffer(self.buffer_number)[:] + + def push(self): + with util.current_line_preserved(): + buffer = util.get_buffer(self.buffer_number) + # Only set the buffer contents if the data is changed. + # Avoids extra undo events with empty diff. + if buffer[:] != self.data: + buffer[:] = self.data + buffer.options['modified'] = True + + def __getitem__(self, index): + try: + return self.data[index] + except IndexError: + return '' + + def __setitem__(self, index, lines): + self.data[index] = lines + + def __delitem__(self, index): + del self.data[index] + + def __iter__(self): + for line in self.data: + yield line + + def __len__(self): + return len(self.data) + + def append(self, data, position=None): + if position is None: + self.data.append(data) + else: + self.data.insert(position, data) + + +class CacheRegistry(object): + """ + Provide a registry for TaskCache instances related to vim buffers. + """ + + def __init__(self): + # Store caches indexed by buffer number + self.caches = {} + + # Remember current cache + self.current_buffer = None + + def __call__(self, buffer_number = None): + """ + Get cache for given buffer_number or the one which was accessed most recently. + """ + + if buffer_number is None: + buffer_number = self.current_buffer + else: + self.current_buffer = buffer_number + + try: + # Use existing cache if it was loaded before + cache = self.caches[buffer_number] + except KeyError: + cache = self._load_cache(buffer_number) + + return cache + + def _load_cache(self, buffer_number): + # Initialize the cache + cache = TaskCache(buffer_number) + self.caches[buffer_number] = cache + + # Check the necessary dependencies + util.enforce_dependencies(cache) + + return cache + + def load_current(self): + return self(vim.current.buffer.number) + + +class TaskCache(object): + """ + A cache that holds all the tasks in the given buffer and prevents + multiple redundant taskwarrior calls. + """ + + def __init__(self, buffer_number): + # Determine defaults + default_rc = util.get_var('taskwiki_taskrc_location') or '~/.taskrc' + default_data = util.get_var('taskwiki_data_location') or None + extra_warrior_defs = util.get_var('taskwiki_extra_warriors', {}) + markup_syntax = vim.eval("vimwiki#vars#get_wikilocal('syntax')") or 'default' + + # Validate markup choice and set it + if markup_syntax in ["default", "markdown"]: + self.markup_syntax = markup_syntax + else: + msg = "Unknown markup given: {}".format(markup_syntax) + raise errors.TaskWikiException(msg) + + # Initialize all the subcomponents + self.buffer = BufferProxy(buffer_number) + self.completion = store.CompletionStore(self) + self.task = store.TaskStore(self) + self.presets = store.PresetStore(self) + self.vwtask = store.VwtaskStore(self) + self.viewport = store.ViewportStore(self) + self.line = store.LineStore(self) + self.warriors = store.WarriorStore(default_rc, default_data, extra_warrior_defs) + self.buffer_has_authority = True + + @property + def vimwikitask_dependency_order(self): + iterated_cache = { + k:v for k,v in self.vwtask.items() + if v is not None + } + + while iterated_cache.keys(): + for key in list(iterated_cache.keys()): + task = iterated_cache[key] + if all([t['line_number'] not in iterated_cache.keys() + for t in task.add_dependencies]): + del iterated_cache[key] + yield task + + def reset(self): + self.buffer.obtain() + self.completion.store = dict() + self.task.store = dict() + self.presets.store = dict() + self.vwtask.store = dict() + self.viewport.store = dict() + self.line.store = dict() + + def load_presets(self): + stack = [] + + for i in range(len(self.buffer)): + header = preset.PresetHeader.from_line(i, self, stack[-1] if stack else None) + + if header is None: + continue + + # Save the preset header in the cache + self.presets[i] = header + + while stack and stack[-1].level >= header.level: + stack.pop() + + stack.append(header) + + def load_vwtasks(self, buffer_has_authority=True): + # Set the authority flag, which determines which data (Buffer or TW) + # will be considered authoritative + old_authority = self.buffer_has_authority + self.buffer_has_authority = buffer_has_authority + + for i in range(len(self.buffer)): + self.vwtask[i] # Loads the line into the cache + + # Restore the old authority flag value + self.buffer_has_authority = old_authority + + def load_viewports(self): + for i in range(len(self.buffer)): + port = viewport.ViewPort.from_line(i, self) + + if port is None: + continue + + port.load_tasks() + + # Save the viewport in the cache + self.viewport[i] = port + + def update_vwtasks_in_buffer(self): + for vwtask in self.vwtask.values(): + port = self.get_viewport_by_task(vwtask.task) + if port and port.expired: + continue + vwtask.update_in_buffer() + + def save_tasks(self): + for vwtask in self.vimwikitask_dependency_order: + port = self.get_viewport_by_task(vwtask.task) + if port and port.expired: + continue + vwtask.save_to_tw() + + def load_tasks(self): + raw_task_info = [] + + # Load the tasks in batch, all in given TaskWarrior instance + for line in self.buffer: + match = re.search(regexp.GENERIC_TASK, line) + if not match: + continue + + tw = self.warriors[match.group('source') or 'default'] + uuid = match.group('uuid') + + if not uuid: + continue + + raw_task_info.append((uuid, tw)) + + for tw in self.warriors.values(): + # Select all tasks in the files that have UUIDs + uuids = [uuid for uuid, task_tw in raw_task_info if task_tw == tw] + + # If no task in the file contains UUID, we have no job here + if not uuids: + continue + + # Get them out of TaskWarrior at once + tasks = tw.tasks.filter() + for uuid in uuids: + tasks = tasks.filter(uuid=uuid) + + # Update each task in the cache + for task in tasks: + key = short.ShortUUID(task['uuid'], tw) + self.task[key] = task + + def update_vwtasks_from_tasks(self): + for vwtask in self.vwtask.values(): + port = self.get_viewport_by_task(vwtask.task) + if port and port.expired: + continue + vwtask.update_from_task() + + def evaluate_viewports(self): + for port in self.viewport.values(): + if port.expired: + continue + port.sync_with_taskwarrior() + + def get_viewport_by_task(self, task): + """ + Looks for a viewport containing the given task by iterating over the cached + items. + + Returns the viewport, or None if not found. + """ + + for port in self.viewport.values(): + if task in port.viewport_tasks: + return port + + def insert_line(self, line, position): + # Insert the line + if position == len(self.buffer): + # Workaround: Necessary since neovim cannot append + # after the last line of the buffer when mentioning + # the position explicitly + self.buffer.append(line) + else: + self.buffer.append(line, position) + + # Update the position of all the things shifted by the insertion + self.vwtask.shift(position, 1) + self.viewport.shift(position, 1) + + # Shift lines in the line cache + self.line.shift(position, 1) + + def remove_line(self, position): + # Remove the line + del self.buffer[position] + + # Remove the vimwikitask from cache + del self.vwtask[position] + del self.viewport[position] + + # Delete the line from the line cache + del self.line[position] + + # Update the position of all the things shifted by the removal + self.vwtask.shift(position, -1) + self.viewport.shift(position, -1) + + # Shift lines in the line cache + self.line.shift(position, -1) + + def swap_lines(self, position1, position2): + buffer_size = len(self.buffer) + if position1 >= buffer_size or position2 >= buffer_size: + raise ValueError("Tring to swap %d with %d" % (position1, position2)) + + # Swap lines in the line cache + self.line.swap(position1, position2) + + # Swap both the viewport and vimwikitasks indexes + self.vwtask.swap(position1, position2) + self.viewport.swap(position1, position2) + + def get_relevant_tw(self): + # Find closest task + from taskwiki import vwtask + task = vwtask.VimwikiTask.find_closest(self) + return task.tw if task else self.warriors['default'] + + def get_relevant_completion(self): + return self.completion[self.get_relevant_tw()] diff --git a/.config/vim/bundle/taskwiki/taskwiki/completion.py b/.config/vim/bundle/taskwiki/taskwiki/completion.py new file mode 100644 index 0000000..9d6b662 --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/completion.py @@ -0,0 +1,142 @@ +from functools import reduce, wraps +import re + +from tasklib import TaskWarrior + +from taskwiki import constants +from taskwiki import regexp + + +def complete_last_word(f): + @wraps(f) + def wrapper(self, arglead): + before, sep, after = arglead.rpartition(' ') + comps = f(self, after) + if comps: + return [before + sep + comp for comp in comps] + else: + return [] + return wrapper + + +# TODO(2023-06-27): use functools once python 3.7 is EOL +def cached_property(f): + @wraps(f) + def wrapper(self): + k = '_cache_' + f.__name__ + if k in self.__dict__: + return self.__dict__[k] + else: + v = f(self) + self.__dict__[k] = v + return v + return wrapper + + +# "must*opt" -> "must(o(p(t)?)?)?" +def prefix_regex(s): + must, _, opt = s.partition('*') + return must + reduce(lambda y, x: f"({x}{y})?", reversed(opt), '') + + +RE_PROJECT = re.compile(prefix_regex('pro*ject')) +RE_DATE = re.compile('|'.join( + [prefix_regex(r) + for r in "du*e un*til wa*it ent*ry end st*art sc*heduled".split()])) +RE_RECUR = re.compile(prefix_regex('re*cur')) + + +class Completion(): + def __init__(self, tw): + self.tw = tw + + @cached_property + def _attributes(self): + return sorted(self.tw.execute_command(['_columns'])) + + @cached_property + def _tags(self): + if self.tw.version < TaskWarrior.VERSION_2_4_5: + return sorted(self.tw.execute_command(['_tags'])) + else: + return sorted(set( + tag + for tags in self.tw.execute_command(['_unique', 'tag']) + for tag in tags.split(','))) + + @cached_property + def _projects(self): + if self.tw.version < TaskWarrior.VERSION_2_4_5: + return sorted(self.tw.execute_command(['_projects'])) + else: + return sorted(self.tw.execute_command(['_unique', 'project'])) + + def _complete_any(self, w): + if w: + return [] + + return ['+', '-'] + [attr + ':' for attr in self._attributes()] + + def _complete_attributes(self, w): + if not w.isalpha(): + return [] + + return [attr + ':' + for attr in self._attributes() + if attr.startswith(w)] + + def _complete_tags(self, w): + if not w or w[0] not in ['+', '-']: + return [] + + t = w[1:] + return [w[0] + tag + for tag in self._tags() + if tag.startswith(t)] + + def _comp_words(self, w, pattern, words): + before, sep, after = w.partition(':') + if not sep or not re.fullmatch(pattern, before): + return [] + + return [before + sep + word + for word in words() + if word.startswith(after)] + + def _complete_projects(self, w): + return self._comp_words(w, RE_PROJECT, self._projects) + + def _complete_dates(self, w): + return self._comp_words(w, RE_DATE, lambda: constants.COMPLETION_DATE) + + def _complete_recur(self, w): + return self._comp_words(w, RE_RECUR, lambda: constants.COMPLETION_RECUR) + + @complete_last_word + def modify(self, w): + return \ + self._complete_any(w) or \ + self._complete_attributes(w) or \ + self._complete_projects(w) or \ + self._complete_tags(w) or \ + self._complete_dates(w) or \ + self._complete_recur(w) or \ + [] + + def omni_modstring_findstart(self, line): + m = re.search(regexp.GENERIC_TASK, line) + bline = line.encode("utf-8") # omni findstart needs byte offset + if m and not m.group('uuid') and b' -- ' in bline: + return bline.rfind(b' ') + 1 + else: + return -1 + + def omni_modstring(self, w): + return \ + self._complete_any(w) or \ + self._complete_attributes(w) or \ + self._complete_projects(w) or \ + self._complete_tags(w) or \ + self._complete_dates(w) or \ + self._complete_recur(w) or \ + [] diff --git a/.config/vim/bundle/taskwiki/taskwiki/constants.py b/.config/vim/bundle/taskwiki/taskwiki/constants.py new file mode 100644 index 0000000..95a543a --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/constants.py @@ -0,0 +1,64 @@ +DEFAULT_VIEWPORT_VIRTUAL_TAGS = ("-DELETED", "-PARENT") +DEFAULT_SORT_ORDER = "status+,end+,due+,priority-,project+" + +COMPLETION_DATE = """ + now + yesterday today tomorrow + later someday + + monday tuesday wednesday thursday friday saturday sunday + + january february march april may june july + august september october november december + + sopd sod sond eopd eod eond + sopw sow sonw eopw eow eonw + sopww soww sonww eopww eoww eonww + sopm som sonm eopm eom eonm + sopq soq sonq eopq eoq eonq + sopy soy sony eopy eoy eony + + goodfriday easter eastermonday ascension pentecost + midsommar midsommarafton juhannus +""".split() + +COMPLETION_RECUR = """ + daily day weekdays weekly biweekly fortnight monthly + quarterly semiannual annual yearly biannual biyearly +""".split() + +# Produced by: $ task _tags | grep -P '[A-Z]+' +VIRTUAL_TAGS = set(""" + ACTIVE + ANNOTATED + BLOCKED + BLOCKING + CHILD + COMPLETED + DELETED + DUE + DUETODAY + INSTANCE + LATEST + MONTH + ORPHAN + OVERDUE + PARENT + PENDING + PRIORITY + PROJECT + QUARTER + READY + SCHEDULED + TAGGED + TEMPLATE + TODAY + TOMORROW + UDA + UNBLOCKED + UNTIL + WAITING + WEEK + YEAR + YESTERDAY +""".split()) diff --git a/.config/vim/bundle/taskwiki/taskwiki/decorators.py b/.config/vim/bundle/taskwiki/taskwiki/decorators.py new file mode 100644 index 0000000..70acd15 --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/decorators.py @@ -0,0 +1,12 @@ +import vim # pylint: disable=F0401 + +def hold_vim_cursor(original_function): + """ + Decorator that wrap around to save cursor position and restore it + """ + + def wrapped_function(*args, **kwargs): + vim.command('let save_pos = getpos(".")') + original_function(*args, **kwargs) + vim.command('call setpos(".", save_pos)') + return wrapped_function diff --git a/.config/vim/bundle/taskwiki/taskwiki/errors.py b/.config/vim/bundle/taskwiki/taskwiki/errors.py new file mode 100644 index 0000000..9dff5f4 --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/errors.py @@ -0,0 +1,30 @@ +""" +Contains TaskWiki-specific exceptions. +""" + +from __future__ import print_function +import six +import sys + + +class VimPrettyException(Exception): + pass + + +class TaskWikiException(VimPrettyException): + """Used to interrupt a TaskWiki command/event and notify the user.""" + pass + + +def pretty_exception_handler(original_function): + """ + Wraps a given function object to catch and process all the + VimPrettyExceptions encountered. + """ + def wrapped_function(*args, **kwargs): + try: + original_function(*args, **kwargs) + except VimPrettyException as e: + print(six.text_type(e), file=sys.stderr) + + return wrapped_function diff --git a/.config/vim/bundle/taskwiki/taskwiki/main.py b/.config/vim/bundle/taskwiki/taskwiki/main.py new file mode 100644 index 0000000..b37b3dc --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/main.py @@ -0,0 +1,709 @@ +from __future__ import print_function +import base64 +import re +import os +import pickle +import six +import sys +import vim # pylint: disable=F0401 + +# Insert the taskwiki on the python path +BASE_DIR = vim.eval("s:plugin_path") +sys.path.insert(0, BASE_DIR) + +from taskwiki import errors +from taskwiki import cache as cache_module +from taskwiki import sort +from taskwiki import util +from taskwiki import viewport +from taskwiki import decorators +from taskwiki import completion +from taskwiki import preset + + +cache = cache_module.CacheRegistry() +cache.load_current() + + +class WholeBuffer(object): + @staticmethod + @errors.pretty_exception_handler + @decorators.hold_vim_cursor + def update_from_tw(): + """ + Updates all the incomplete tasks in the vimwiki file if the info from TW is different. + """ + + c = cache.load_current() + c.reset() + c.load_tasks() + c.load_presets() + c.load_vwtasks(buffer_has_authority=False) + c.load_viewports() + c.update_vwtasks_from_tasks() + c.update_vwtasks_in_buffer() + c.evaluate_viewports() + c.buffer.push() + + @staticmethod + @errors.pretty_exception_handler + @decorators.hold_vim_cursor + def update_to_tw(): + """ + Updates all tasks that differ from their TaskWarrior representation. + """ + + c = cache.load_current() + c.reset() + c.load_tasks() + c.load_presets() + c.load_vwtasks() + c.load_viewports() + c.save_tasks() + c.update_vwtasks_in_buffer() + c.evaluate_viewports() + c.buffer.push() + + +class SelectedTasks(object): + + # Keeps track of the last action performed on any selected tasks + last_action = {} + + @errors.pretty_exception_handler + def __init__(self): + # Reset cache(), otherwise old line content may be used + cache().reset() + + # Find relevant TaskWarrior instance + self.tw = cache().get_relevant_tw() + + # Load the current tasks + range_tasks = [cache().vwtask[i] for i in util.selected_line_numbers()] + self.tasks = [t for t in range_tasks if t is not None] + + if not self.tasks: + print("No tasks selected.") + + @classmethod + def save_action(cls, method, *args): + cls.last_action = {'method': method, 'args': args} + + @errors.pretty_exception_handler + def annotate(self, annotation): + if not annotation: + with util.current_line_highlighted(): + annotation = util.get_input("Enter annotation: ") + + for vimwikitask in self.tasks: + vimwikitask.task.add_annotation(annotation) + print(u"Task \"{0}\" annotated.".format(vimwikitask['description'])) + + self.save_action('annotate', annotation) + + @errors.pretty_exception_handler + def done(self): + # Multiple VimwikiTasks might refer to the same task, so make sure + # we do not complete one task twice + for task in set(vimwikitask.task for vimwikitask in self.tasks): + task.done() + + # Update the lines in the buffer + for vimwikitask in self.tasks: + vimwikitask.update_from_task() + vimwikitask.update_in_buffer() + print(u"Task \"{0}\" completed.".format(vimwikitask['description'])) + + cache().buffer.push() + self.save_action('done') + + @errors.pretty_exception_handler + def info(self): + for vimwikitask in self.tasks: + out = util.tw_execute_safely(self.tw, [vimwikitask.uuid, 'info']) + if out: + util.show_in_split(out, name='info', activate_cursorline=True) + break # Show only one task + + @errors.pretty_exception_handler + def edit(self): + for vimwikitask in self.tasks: + alternate_data_location = self.tw.overrides.get('data.location') + location_override = ('rc.data.location=' + alternate_data_location + if alternate_data_location else '') + + # Build command template, it is different for neovim and vim + command = ( + ('terminal' if util.HAS_TERMINAL else '!') + + ' task {0} {1} edit' + ) + vim.command(command.format(location_override, vimwikitask.uuid)) + + self.save_action('edit') + + @errors.pretty_exception_handler + def link(self): + path = util.get_absolute_filepath() + for vimwikitask in self.tasks: + vimwikitask.task.add_annotation(u"wiki: {0}".format(path)) + print(u"Task \"{0}\" linked.".format(vimwikitask['description'])) + self.save_action('link') + + @errors.pretty_exception_handler + def grid(self): + port = viewport.ViewPort.find_closest(cache()) + if port: + vim.command("TW rc:{0} rc.context: {1}" + .format(port.tw.taskrc_location, port.raw_filter)) + else: + print("No viewport detected.", file=sys.stderr) + + @errors.pretty_exception_handler + def delete(self): + # Delete the tasks in TaskWarrior + # Multiple VimwikiTasks might refer to the same task, so make sure + # we do not delete one task twice + for task in set(vimwikitask.task for vimwikitask in self.tasks): + task.delete() + + # Remove the lines in the buffer + for vimwikitask in self.tasks: + cache().remove_line(vimwikitask['line_number']) + print(u"Task \"{0}\" deleted.".format(vimwikitask['description'])) + + cache().buffer.push() + self.save_action('delete') + + @errors.pretty_exception_handler + def modify(self, modstring): + # If no modstring was passed as argument, ask the user interactively + if not modstring: + with util.current_line_highlighted(): + modstring = util.get_input( + "Enter modifications: ", + completion="customlist,taskwiki#CompleteMod") + + # We might have two same tasks in the range, make sure we do not pass the + # same uuid twice + unique_tasks = set(vimwikitask.task['uuid'] for vimwikitask in self.tasks) + uuids = list(unique_tasks) + + # Generate the arguments from the modstring + args = util.tw_modstring_to_args(modstring) + + # Modify all tasks at once + output = util.tw_execute_safely(self.tw, uuids + ['mod'] + args) + + # Update the touched tasks in buffer, if needed + cache().load_tasks() + cache().update_vwtasks_from_tasks() + cache().update_vwtasks_in_buffer() + + # Output the feedback from TW + if output: + print(output[-1]) + + cache().buffer.push() + self.save_action('modify', modstring) + + def redo(self): + """ + Performs the last modification applied to any selected tasks once again. + """ + + if self.__class__.last_action: + method = getattr(self, self.__class__.last_action['method']) + method(*self.__class__.last_action.get('args', tuple())) + + + @errors.pretty_exception_handler + def start(self): + # Multiple VimwikiTasks might refer to the same task, so make sure + # we do not start one task twice + for task in set(vimwikitask.task for vimwikitask in self.tasks): + task.start() + + # Update the lines in the buffer + for vimwikitask in self.tasks: + vimwikitask.update_from_task() + vimwikitask.update_in_buffer() + print(u"Task \"{0}\" started.".format(vimwikitask['description'])) + + cache().buffer.push() + self.save_action('start') + + @errors.pretty_exception_handler + def stop(self): + # Multiple VimwikiTasks might refer to the same task, so make sure + # we do not stop one task twice + for task in set(vimwikitask.task for vimwikitask in self.tasks): + task.stop() + + # Update the lines in the buffer + for vimwikitask in self.tasks: + vimwikitask.update_from_task() + vimwikitask.update_in_buffer() + print(u"Task \"{0}\" stopped.".format(vimwikitask['description'])) + + cache().buffer.push() + self.save_action('stop') + + @errors.pretty_exception_handler + def toggle(self): + # Multiple VimwikiTasks might refer to the same task, so make sure + # we do not start one task twice + started = set() + for task in set(vimwikitask.task for vimwikitask in self.tasks): + if task['start']: + task.stop() + else: + task.start() + started.add(task) + + # Update the lines in the buffer + for vimwikitask in self.tasks: + vimwikitask.update_from_task() + vimwikitask.update_in_buffer() + if task in started: + print(u"Task \"{0}\" started.".format(vimwikitask['description'])) + else: + print(u"Task \"{0}\" stopped.".format(vimwikitask['description'])) + + cache().buffer.push() + self.save_action('toggle') + + @errors.pretty_exception_handler + def sort(self, sortstring): + sort.TaskSorter(cache(), self.tasks, sortstring).execute() + cache().buffer.push() + + +class Mappings(object): + + @staticmethod + @errors.pretty_exception_handler + def task_info_or_vimwiki_follow_link(): + # Reset the cache() to use up-to-date buffer content + cache().reset() + + # If the line under cursor contains task, toggle info + # otherwise do the default VimwikiFollowLink + row = util.get_current_line_number() + column = util.get_current_column_number() + line = cache().buffer[row] + + # Detect if the cursor stands on a vimwiki link, + # if so, trigger it + inside_vimwiki_link = all([ + '[[' in line, + ']]' in line, + column >= line.find('[['), + column <= line.find(']]') + 1 + ]) or all([ + '[' in line, + '](' in line, + ')' in line, + column >= line.find('['), + column <= line.find(')') + 1 + ]) + + if inside_vimwiki_link: + vim.command('VimwikiFollowLink') + return + + # No link detected, check for viewport or a task + if cache().vwtask[row] is not None: + SelectedTasks().info() + return + else: + port = viewport.ViewPort.from_line(row, cache()) + if port is not None: + Meta().inspect_viewport() + return + + header = preset.PresetHeader.from_line(row, cache()) + if header is not None: + Meta().inspect_presetheader() + return + + # No link detected, not a viewport or a task, so delegate to + # VimwikiFollowLink for link creation + vim.command('VimwikiFollowLink') + + + +class Meta(object): + + @errors.pretty_exception_handler + def inspect_viewport(self): + position = util.get_current_line_number() + port = viewport.ViewPort.from_line(position, cache()) + + if port.meta.get('visible') is False: + cache().reset() + cache().load_vwtasks() + cache().load_tasks() + + template = ( + "ViewPort inspection:\n" + "--------------------\n" + "Name: {0}\n" + "Filter used: {1}\n" + "Defaults used: {2}\n" + "Ordering used: {3}\n" + "Matching taskwarrior tasks: {4}\n" + "Displayed tasks: {5}\n" + "Tasks to be added: {6}\n" + "Tasks to be deleted: {7}\n" + "{8}\n" + ) + + if port is not None: + # Load the tasks under the viewport + port.load_tasks() + + to_add, to_del = port.get_tasks_to_add_and_del() + + # Fill in the interesting info in the template + template_formatted = template.format( + port.name if six.PY3 else port.name.encode('utf-8'), + port.raw_filter if six.PY3 else port.raw_filter.encode('utf-8'), + port.raw_defaults if six.PY3 else port.raw_defaults.encode('utf-8'), + port.sort, + len(port.matching_tasks), + len(port.tasks), + ', '.join(map(six.text_type, to_add)), + ', '.join(map(six.text_type, to_del)), + "Expired: " + port.expires + if port.expired + else 'Expires: ' + (port.expires if port.expires else 'never'), + ) + + # Show in the split + lines = template_formatted.splitlines() + util.show_in_split(lines, activate_cursorline=True) + + + @errors.pretty_exception_handler + def inspect_presetheader(self): + position = util.get_current_line_number() + header = preset.PresetHeader.from_line(position, cache()) + + template = ( + "ViewPort inspection:\n" + "--------------------\n" + "Filter used: {0}\n" + "Defaults used: {1}\n" + ) + + if header is not None: + + # Fill in the interesting info in the template + template_formatted = template.format( + header.raw_filter if six.PY3 else header.raw_filter.encode('utf-8'), + header.raw_defaults if six.PY3 else header.raw_defaults.encode('utf-8'), + ) + + # Show in the split + lines = template_formatted.splitlines() + util.show_in_split(lines, activate_cursorline=True) + + @errors.pretty_exception_handler + def integrate_tagbar(self): + tagbar_available = vim.eval('exists(":Tagbar")') == '2' + if tagbar_available: + vim.vars['tagbar_type_vimwiki'] = { + 'ctagstype': 'default', + 'kinds': ['h:header', 'p:preset', 'v:viewport'], + 'sro': '&&&', + 'kind2scope': {'h': 'header', 'p': 'preset', 'v': 'viewport'}, + 'sort': 0, + 'ctagsbin': os.path.join(BASE_DIR, 'extra/vwtags.py'), + 'ctagsargs': cache().markup_syntax + } + + @errors.pretty_exception_handler + def set_proper_colors(self): + tw_color_counterparts = { + 'TaskWikiTaskActive': 'color.active', + 'TaskWikiTaskCompleted': 'color.completed', + 'TaskWikiTaskDeleted': 'color.deleted', + 'TaskWikiTaskRecurring': 'color.recurring', + 'TaskWikiTaskWaiting': 'color.completed', + } + + taskwiki_native_colors = { + 'TaskWikiTaskActive': 'Type', + 'TaskWikiTaskCompleted': 'Comment', + 'TaskWikiTaskRecurring': 'Comment', + 'TaskWikiTaskWaiting': 'Comment', + 'TaskWikiTaskDeleted': 'Error', + 'TaskWikiTaskPriority': 'Error', + } + + # If tw support is enabled, try to find definition in TW first + if util.get_var('taskwiki_source_tw_colors'): + + tw = cache().get_relevant_tw() + + for syntax in tw_color_counterparts.keys(): + tw_def = tw.config.get(tw_color_counterparts[syntax]) + + if tw_def: + vim_def = util.convert_colorstring_for_vim(tw_def) + vim.command('hi def {0} {1}'.format(syntax, vim_def)) + + # Define taskwiki (native) color. This can be overriden by user + # by using :hi command. + for syntax in taskwiki_native_colors.keys(): + vim.command('hi def link {0} {1}' + .format(syntax, taskwiki_native_colors[syntax])) + + +class Split(object): + command = None + split_name = None + colorful = False + maxwidth = False + maxheight = False + vertical = False + cursorline = True + size = None + tw_extra_args = [] + + @errors.pretty_exception_handler + def __init__(self, args): + self.args = self._process_args(args) + self.split_name = self.split_name or self.command + self.tw = cache().get_relevant_tw() + + def _process_args(self, args): + tw_args = util.tw_modstring_to_args(args) + + # If only 'global' argument has been passed, then no + # filter should be applied + if tw_args == ['global']: + return [] + # If unempty filter has been passed, then use that + elif tw_args != []: + return tw_args + # If no argument has been passed, locate the closest viewport, + # if any exists, and use its filter. + else: + port = viewport.ViewPort.find_closest(cache()) + return port.taskfilter if port is not None else [] + + @property + def full_args(self): + return self.args + [self.command] + self.tw_extra_args + + @errors.pretty_exception_handler + def execute(self): + if self.colorful: + output = util.tw_execute_colorful(self.tw, self.full_args, + allow_failure=False, + maxwidth=self.maxwidth, + maxheight=self.maxheight) + else: + output = util.tw_execute_safely(self.tw, self.full_args) + + util.show_in_split( + output, + size=self.size, + name=self.split_name, + vertical=self.vertical, + activate_cursorline=self.cursorline, + ) + + +class CallbackSplitMixin(object): + + split_cursorline = False + + @errors.pretty_exception_handler + def __init__(self, args): + super(CallbackSplitMixin, self).__init__(args) + self.selected = SelectedTasks() + + @errors.pretty_exception_handler + def execute(self): + super(CallbackSplitMixin, self).execute() + + # Close the split if the user leaves it + vim.command('au BufLeave :bwipe') + + # SREMatch objecets cannot be pickled + cache().line.clear() + + # We can't save the current instance in vim variable + # so save the pickled version + dump = pickle.dumps(( + {k:v for k,v in self.__dict__.items() if k != 'selected'}, + self.selected.__dict__) + ) + + vim.current.buffer.vars['taskwiki_callback'] = base64.encodebytes( + bytes(dump) + ) + + # Remap to calling the callback and wiping the buffer + vim.command( + "nnoremap :" + + util.get_var('taskwiki_py') + + "callback = {0}('');".format(self.__class__.__name__) + + "orig_dict, selected_dict = pickle.loads(" + "base64.decodebytes(" + "six.b(util.get_var('taskwiki_callback', " + "vars_obj=vim.current.buffer.vars)))); " + "callback.__dict__.update(orig_dict);" + "callback.selected.__dict__ = selected_dict;" + "callback.callback(); " + "vim.command('bwipe') " + ) + + # Show cursorline in split if required + if self.split_cursorline: + vim.current.window.options['cursorline'] = True + + def callback(self): + raise NotImplementedError("No callback defined.") + + +class SplitProjects(Split): + command = 'projects' + vertical = True + + +class ChooseSplitProjects(CallbackSplitMixin, SplitProjects): + split_cursorline = True + + def _get_selected_project(self): + project_re = re.compile(r'^(?P\s*)(?P[^\s]+)\s+[0-9]+$', + re.UNICODE) + + project_parts = [] + current_indent = None + indented_less = lambda s: (current_indent is None or + len(s) < current_indent) + + for line in util.get_lines_above(): + match = project_re.match(line) + + if match and indented_less(match.group('indent')): + current_indent = len(match.group('indent')) + project_parts.append(match.group('name')) + + # Properly handle selected (none) + if project_parts == ['(none)']: + project_parts = [] + + project_parts.reverse() + if six.PY2: + return u'.'.join([p.decode('utf-8') for p in project_parts]) + else: + return u'.'.join(project_parts) + + @errors.pretty_exception_handler + def callback(self): + project = self._get_selected_project() + self.selected.modify(u"project:{0}".format(project)) + + +class SplitSummary(Split): + command = 'summary' + vertical = True + colorful = True + + +class SplitBurndownDaily(Split): + command = 'burndown.daily' + colorful = True + maxwidth = True + + +class SplitBurndownWeekly(Split): + command = 'burndown.weekly' + colorful = True + maxwidth = True + + +class SplitBurndownMonthly(Split): + command = 'burndown.monthly' + colorful = True + maxwidth = True + + +class SplitCalendar(Split): + command = 'calendar' + colorful = True + maxwidth = True + + # Task calendar does not take filter and in general uses + # command-suffix syntax + @errors.pretty_exception_handler + def __init__(self, args): + self.args = [] + self.tw_extra_args = util.tw_modstring_to_args(args) + self.split_name = self.split_name or self.command + self.tw = cache().get_relevant_tw() + + +class SplitGhistoryMonthly(Split): + command = 'ghistory.monthly' + colorful = True + maxwidth = True + + +class SplitGhistoryAnnual(Split): + command = 'ghistory.annual' + colorful = True + maxwidth = True + + +class SplitHistoryMonthly(Split): + command = 'history.monthly' + colorful = True + vertical = True + + +class SplitHistoryAnnual(Split): + command = 'history.annual' + colorful = True + vertical = True + + +class SplitStats(Split): + command = 'stats' + colorful = True + vertical = True + + +class SplitTags(Split): + command = 'tags' + colorful = True + vertical = True + + +class ChooseSplitTags(CallbackSplitMixin, SplitTags): + split_cursorline = True + + def _get_selected_tag(self): + tag_re = re.compile(r'^(?P[^\s]+)\s+[0-9]+$', re.UNICODE) + match = tag_re.match(vim.current.line) + + if match: + tag = match.group('name') + tag = tag.decode('utf-8') if six.PY2 else tag + return tag + else: + raise errors.TaskWikiException("No tag selected.") + + @errors.pretty_exception_handler + def callback(self): + tag = self._get_selected_tag() + self.selected.modify(u"+{0}".format(tag)) + + +if __name__ == '__main__': + Meta().integrate_tagbar() + Meta().set_proper_colors() diff --git a/.config/vim/bundle/taskwiki/taskwiki/preset.py b/.config/vim/bundle/taskwiki/taskwiki/preset.py new file mode 100644 index 0000000..2571875 --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/preset.py @@ -0,0 +1,114 @@ +import re +import six + +from taskwiki import regexp +from taskwiki import util + +class PresetHeader(object): + """ + == Taskwiki tasks || project:taskwiki == + """ + + def __init__(self, cache, parent, level, filterstring, defaultstring, expires=None): + + self.level = level + self.parent = parent + + if parent: + taskfilter = list(parent.taskfilter) + else: + taskfilter = [] + + if filterstring: + taskfilter += '(' + taskfilter += util.tw_modstring_to_args(filterstring) + taskfilter += ')' + + self.taskfilter = taskfilter + + + if parent: + defaults = dict(parent.defaults) + else: + defaults = dict() + + if defaultstring: + defaults.update(util.tw_modstring_to_kwargs(defaultstring)) + else: + defaults.update(util.tw_args_to_kwargs(taskfilter)) + + self.defaults = defaults + + self.expires = expires + + @classmethod + def parse_line(cls, cache, number): + header = re.search(regexp.HEADER[cache.markup_syntax], + cache.buffer[number]) + + if header: + preset = re.search(regexp.PRESET[cache.markup_syntax], + cache.buffer[number]) + if preset: + return preset + + return header + + @classmethod + def from_line(cls, number, cache, previous=None): + match = cache.line[(cls, number)] + + if not match: + return None + + level = len(match.group('header_start')) + + if level == 1: + parent = None + else: + # Manually get previous header + if not previous: + for i in reversed(range(0, number)): + previous = cls.from_line(i, cache) + if previous: + break + + # find parent + parent = previous + while parent and parent.level >= level: + parent = parent.parent + + if parent is None: + # Create an empty root stub + parent = cls(cache, None, 0, None, None) + + + # use parent object, if no additional filters / defaults are applied + try: + filterstring = match.group('filter') + except IndexError: + return parent + + + defaults = match.group('defaults') + expires = match.group('expires') + + if six.PY2: + filterstring = filterstring.decode('utf-8') + defaults = defaults.decode('utf-8') if defaults is not None else defaults + + self = cls(cache, parent, level, filterstring, defaults, expires) + return self + + @property + def raw_filter(self): + return u' '.join(self.taskfilter) + + @property + def raw_defaults(self): + value = u', '.join( + u'{0}:{1}'.format(key, value) + for key, value in self.defaults.items() + ) + # Strip u'' literal symbols from the output + return value.replace("u'", "'") if six.PY2 else value diff --git a/.config/vim/bundle/taskwiki/taskwiki/regexp.py b/.config/vim/bundle/taskwiki/taskwiki/regexp.py new file mode 100644 index 0000000..66b1bc6 --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/regexp.py @@ -0,0 +1,156 @@ +import re + +# Unnamed building blocks +UUID_UNNAMED = r'[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' +UUID_UNNAMED_SHORT = r'[0-9a-fA-F]{8}' +DUE_UNNAMED = r'\(\d{4}-\d\d-\d\d( \d\d:\d\d)?\)' +EXPIRES_UNNAMED = r'\d{4}-\d\d-\d\d( \d\d:\d\d)?' +SPACE_UNNAMED = r'\s*' +NONEMPTY_SPACE_UNNAMED = r'\s+' +FINAL_SEGMENT_SEPARATOR_UNNAMED = r'(\s+|$)' +SOURCE_INDICATOR = r'(?P[A-Z]):' + +# Building blocks +BRACKET_OPENING = re.escape('* [') +BRACKET_CLOSING = re.escape('] ') +EMPTY_SPACE = r'(?P\s*)' +UUID = r'(?P{0}|{1})'.format(UUID_UNNAMED, UUID_UNNAMED_SHORT) +DUE = r'(?P{0})'.format(DUE_UNNAMED) +EXPIRES = r'(\!(?P{0}))?'.format(EXPIRES_UNNAMED) +TEXT = r'(?P.+?)' +COMPLETION_MARK = r'(?P.)' +PRIORITY = r'(?P!{1,3})' + +GENERIC_TASK = re.compile(''.join([ + '^', + EMPTY_SPACE, + BRACKET_OPENING, + COMPLETION_MARK, + BRACKET_CLOSING, + TEXT, + FINAL_SEGMENT_SEPARATOR_UNNAMED, + '(', PRIORITY, FINAL_SEGMENT_SEPARATOR_UNNAMED, ')?', + '(', DUE, FINAL_SEGMENT_SEPARATOR_UNNAMED, ')?', + '(', + '#', + '(', SOURCE_INDICATOR, ')?', + '(', UUID, ')?', + ')?', # UUID is not there for new tasks + SPACE_UNNAMED, + '$' # Enforce match on the whole line +])) + +DATETIME_FORMAT = "%Y-%m-%d %H:%M" +DATE_FORMAT = "%Y-%m-%d" + +VIEWPORT = { + 'default': + re.compile( + r'^' # Starts at the begging of the line + r'(?P[=]+)' # Heading begging + r'(?P[^=\|\[\{]*)' # Name of the viewport, all before the | sign + # Cannot include '[', '=', '|', and '{' + r'\|' # Bar + r'(?!\|)' # (But not two, that would be a preset) + r'(?P[^=\|]*?)' # Filter + r'(' # Optional defaults + r'\|' # Bar + r'(?P[^=\|]+?)' # Default attrs + r')?' + r'\s*' # Any whitespace + r'(#(?P[A-Z]))?' # Optional source indicator + r'\s*' # Any whitespace + r'(\$(?P[A-Z]))?' # Optional sort indicator + r'\s*' # Any whitespace + r'(limit:(?P[0-9]+))?' # Optional count indicator + r'\s*' # Any whitespace + + EXPIRES + # Expiration indicator + r'\s*' # Any whitespace + r'[=]+' # Header ending + ), + 'markdown': + re.compile( + r'^' # Starts at the begging of the line + r'(?P[#]+)' # Heading begging + r'(?P[^#\|\[\{]*)' # Name of the viewport, all before the | sign + # Cannot include '[', '#', '|', and '{' + r'\|' # Bar + r'(?!\|)' # (But not two, that would be a preset) + r'(?P[^#\|]*?)' # Filter + r'(' # Optional defaults + r'\|' # Bar + r'(?P[^#\|]+?)' # Default attrs + r')?' + r'\s*' # Any whitespace + r'(#(?P[A-Z]))?' # Optional source indicator + r'\s*' # Any whitespace + r'(\$(?P[A-Z]))?' # Optional sort indicator + r'\s*' # Any whitespace + r'(limit:(?P[0-9]+))?' # Optional count indicator + r'\s*' # Any whitespace + + EXPIRES + # Expiration indicator + r'\s*' # Any whitespace + r'$' # End of line + ) +} + +HEADER = { + 'default': + re.compile( + r'^' # Starts at the beginning of the line + r'(?P[=]+)' # With a positive number of = + r'(?P[^=]+)' # Character other than = + r'[=]+' # Positive number of =, closing the header + r'\s*' # Allow trailing whitespace + ), + 'markdown': + re.compile( + r'^' # Starts at the beginning of the line + r'(?P[#]+)' # With a positive number of # + r'(?P[^#]+)' # Character other than # + ) +} + +PRESET = { + 'default': + re.compile( + r'^' # Starts at the beginning of the line + r'(?P[=]+)' # With a positive number of = + r'(?P[^=\|\[\{]*)' # Heading caption, everything up to || + # Cannot include '[', '=', '|, and '{' + r'\|\|' # Delimiter + r'(?P[^=\|]+?)' # Filter preset + r'(' # Optional defaults + r'\|\|' # Delimiter + r'(?P[^=\|]+?)' # Default attrs preset + r')?' + r'\s*' # Any whitespace + + EXPIRES + # Expiration indicator + r'\s*' # Any whitespace + r'[=]+' # Header ending + ), + 'markdown': + re.compile( + r'^' # Starts at the beginning of the line + r'(?P[#]+)' # With a positive number of # + r'(?P[^#\|\[\{]*)' # Heading caption, everything up to || + # Cannot include '[', '#', '|, and '{' + r'\|\|' # Delimiter + r'(?P[^#\|]+?)' # Filter preset + r'(' # Optional defaults + r'\|\|' # Delimiter + r'(?P[^#\|]+?)' # Default attrs preset + r')?' + r'\s*' # Any whitespace + + EXPIRES + # Expiration indicator + r'\s*' # Any whitespace + r'$' # End of line + ) +} + +ANSI_ESCAPE_SEQ = re.compile( + r'\x1b' # literal ESC + r'\[' # literal [ + r'[;\d]*' # zero or more digits or semicolons + r'[A-Za-z]' # a letter + ) diff --git a/.config/vim/bundle/taskwiki/taskwiki/short.py b/.config/vim/bundle/taskwiki/taskwiki/short.py new file mode 100644 index 0000000..5038821 --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/short.py @@ -0,0 +1,44 @@ +import six + +class ShortUUID(object): + def __init__(self, value, tw): + # Extract the UUID from the given object. Support both + # strings and ShortUUID instances. + if isinstance(value, six.string_types): + # Use str reprentation of the value, first 8 chars + self.value = str(value)[:8] + elif type(value) is ShortUUID: + self.value = value.value + else: + raise ValueError("Incorrect type for ShortUUID: {0}" + .format(type(value))) + + self.tw = tw + + def __eq__(self, other): + # For full UUIDs, our value is shorter + # For short, the lengths are the same + if not isinstance(other, ShortUUID): + return False + + return other.value == self.value and self.tw == other.tw + + def __hash__(self): + return self.value.__hash__() * 17 + self.tw.__hash__() * 7 + + def __str__(self): + return self.value + + def vim_representation(self, cache): + """ + Return 'H:' for TW with indicator 'H', + '' for default instance. + """ + + # Determine the key of the TW instance + [key] = [key for key, value in cache.warriors.items() + if value == self.tw] + prefix = '{0}:'.format(key) if key != 'default' else '' + + # Return the H: or value + return '{0}{1}'.format(prefix, self.value) diff --git a/.config/vim/bundle/taskwiki/taskwiki/sort.py b/.config/vim/bundle/taskwiki/taskwiki/sort.py new file mode 100644 index 0000000..1a2e8f1 --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/sort.py @@ -0,0 +1,193 @@ +from taskwiki import constants +from taskwiki import util + +class TaskSorter(object): + def __init__(self, cache, tasks, sortstring=None): + self.cache = cache + self.tasks = tasks + self.sortstring = ( + sortstring or + util.get_var('taskwiki_sort_default') or + constants.DEFAULT_SORT_ORDER + ) + ',line_number+' + + def execute(self): + # If there's nothing to sort, we have nothing to do + if not self.tasks: + return + + base_offset = min([task['line_number'] for task in self.tasks]) + + task_list = list(self.tasks) + + # Create comparator object which will be used to sort the viewport + comparator = CustomNodeComparator(self.sortstring) + + # Generate the empty nodes + node_list = [TaskCollectionNode(vwtask, comparator) for vwtask in task_list] + + # Set parents and children for every node + for node in node_list: + # Find all children of this node + node.children = [child for child in node_list + if child.vwtask.task in node.vwtask.task['depends']] + + # Set the parent link in the children + for child in node.children: + child.parent = node + + root_node_list = [node for node in node_list + if node.parent is None] + + root_node_list.sort() + + for node in root_node_list: + node.sort() + + for node in root_node_list: + node.build_indentation(0) + + vwtasks_sorted = [] + for node in root_node_list: + vwtasks_sorted += node.full_list + + for offset in range(len(vwtasks_sorted)): + self.cache.swap_lines( + base_offset + offset, + vwtasks_sorted[offset].vwtask['line_number'] + ) + + +class CustomNodeComparator(object): + """ + Defines ordering on the TaskCollectionNodes according to the user + preferences. + """ + + def __init__(self, sortformat): + self.sort_attrs = [] + + for attr_spec in sortformat.split(','): + # Remove whitespace + attr_spec = attr_spec.strip() + + # Parse the entry into attr name and reverse flag + if attr_spec.endswith('+'): + attr = attr_spec[:-1] + reverse = False + elif attr_spec.endswith('-'): + attr = attr_spec[:-1] + reverse = True + else: + attr = attr_spec + reverse = False + + self.sort_attrs.append((attr, reverse)) + + def generic_compare(self, first, second, method): + for sort_attr, reverse in self.sort_attrs: + # Pick the values we are supposed to sort on + first_value = first.vwtask[sort_attr] + second_value = second.vwtask[sort_attr] + + # Swap the method of the sort if reversed is True + if method == 'gt' and reverse == True: + loop_method = 'lt' + elif method == 'lt' and reverse == True: + loop_method = 'gt' + else: + loop_method = method + + # Equality on values, continue loop + if first_value is None and second_value is None: + continue + + # None values do not respect reverse flags, use method + if first_value is not None and second_value is None: + return True if method == 'lt' else False + + if first_value is None and second_value is not None: + return True if method == 'gt' else False + + # Non-None values should respect reverse flags, use loop_method + if first_value < second_value: + return True if loop_method == 'lt' else False + elif first_value > second_value: + return True if loop_method == 'gt' else False + else: + # Values are equal, move to next distinguisher + continue + + return True if method == 'eq' else False + + def lt(self, first, second): + return self.generic_compare(first, second, 'lt') + + def gt(self, first, second): + return self.generic_compare(first, second, 'gt') + + def eq(self, first, second): + return self.generic_compare(first, second, 'eq') + + +class TaskCollectionNode(object): + """ + Stores a collection of VimwikiTasks as tree, where links are defined + by dependencies. + """ + + def __init__(self, vwtask, comparator): + self.vwtask = vwtask + self._parent = None + self.children = [] + self.comparator = comparator + + @property + def parent(self): + return self._parent + + @parent.setter + def parent(self, parent): + if self.parent is None: + self._parent = parent + else: + raise ValueError("TaskCollectionNode %s cannot have multiple parents" % repr(self)) + + def __iter__(self): + # First return itself + yield self + + # Then recursilvely iterate in all the children + for child in self.children: + for yielded in child: + yield yielded + + def build_indentation(self, indent): + self.vwtask['indent'] = ' ' * indent + self.vwtask.update_in_buffer() + + for child in self.children: + child.build_indentation(indent + 4) + + def sort(self): + self.children.sort() + + for child in self.children: + child.sort() + + @property + def full_list(self): + full_list = [node for node in self] + return full_list + + def __repr__(self): + return u"Node for with ID: {0}".format(self.vwtask.task['id'] or self.vwtask.task['uuid']) + + def __lt__(self, other): + return self.comparator.lt(self, other) + + def __gt__(self, other): + return self.comparator.lt(self, other) + + def __eq__(self, other): + return self.comparator.lt(self, other) diff --git a/.config/vim/bundle/taskwiki/taskwiki/store.py b/.config/vim/bundle/taskwiki/taskwiki/store.py new file mode 100644 index 0000000..2b46d55 --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/store.py @@ -0,0 +1,211 @@ +from tasklib import TaskWarrior + +from taskwiki import errors + + +class WarriorStore(object): + """ + Stores all instances of TaskWarrior objects. + """ + + def __init__(self, default_rc, default_data, extra_warrior_defs): + default_kwargs = dict( + data_location=default_data, + taskrc_location=default_rc, + ) + + # Setup the store of TaskWarrior objects + self.warriors = {'default': TaskWarrior(**default_kwargs)} + + for key in extra_warrior_defs.keys(): + current_kwargs = default_kwargs.copy() + current_kwargs.update(extra_warrior_defs[key]) + self.warriors[key] = TaskWarrior(**current_kwargs) + + # Make sure context is not respected in any TaskWarrior + for tw in self.warriors.values(): + tw.overrides.update({'context':''}) + + def __getitem__(self, key): + try: + return self.warriors[key] + except KeyError: + raise errors.TaskWikiException( + "Taskwarrior with key '{0}' not available." + .format(key)) + + + def __setitem__(self, key, value): + self.warriors[key] = value + + def values(self): + return self.warriors.values() + + def items(self): + return self.warriors.items() + + +class NoNoneStore(object): + + def __init__(self, cache): + self.cache = cache + self.store = dict() + + def __getitem__(self, key): + item = self.store.get(key) + + if item is None: + item = self.get_method(key) + + # If we successfully obtained an item, save it to the cache + if item is not None: + self.store[key] = item + + return item # May return None if the line has no task + + def __setitem__(self, key, value): + # Never store None in the cache, treat it as deletion + if value is None: + del self[key] + return + + # Otherwise store the given value + self.store[key] = value + + def __delitem__(self, key): + if key in self.store: + del self.store[key] + + def __contains__(self, key): + return key in self.store + + def values(self): + return self.store.values() + + def items(self): + return self.store.items() + + def clear(self): + return self.store.clear() + +class LineNumberedKeyedStoreMixin(object): + + def shift(self, position, offset): + self.store = { + (i + offset if i >= position else i): self.store[i] + for i in self.store.keys() + } + + def swap(self, position1, position2): + temp = self.store.get(position1) + self[position1] = self.store.get(position2) + self[position2] = temp + +class TaskStore(NoNoneStore): + + def get_method(self, key): + return key.tw.tasks.get(uuid=key.value) + + +class VwtaskStore(LineNumberedKeyedStoreMixin, NoNoneStore): + + def shift(self, position, offset): + for line, vwtask in self.store.items(): + if line >= position: + vwtask['line_number'] += offset + + super(VwtaskStore, self).shift(position, offset) + + def swap(self, position1, position2): + super(VwtaskStore, self).swap(position1, position2) + + for index in (position1, position2): + if self.store.get(index) is not None: + self[index]['line_number'] = index + + def get_method(self, line): + from taskwiki import vwtask + return vwtask.VimwikiTask.from_line(self.cache, line) + + +class ViewportStore(LineNumberedKeyedStoreMixin, NoNoneStore): + + def shift(self, position, offset): + for line, viewport in self.store.items(): + if line >= position: + viewport.line_number += offset + + super(ViewportStore, self).shift(position, offset) + + def swap(self, position1, position2): + super(ViewportStore, self).swap(position1, position2) + + for index in (position1, position2): + if self.store.get(index) is not None: + self[index].line_number = index + + def get_method(self, line): + import viewport + return viewport.ViewPort.from_line(line, self.cache) + + +class PresetStore(LineNumberedKeyedStoreMixin, NoNoneStore): + + def get_method(self, line): + import preset + return preset.PresetHeader.from_line(line, self.cache) + + +class LineStore(NoNoneStore): + + def __delitem__(self, number): + for cls, i in list(self.store.keys()): + if i == number: + del self.store[(cls, i)] + + def get_method(self, key): + cls, line = key + return cls.parse_line(self.cache, line) + + def shift(self, position, offset): + new_store = { + (cls, i + offset if i >= position else i): self.store[(cls, i)] + for cls, i in self.store.keys() + } + + self.store = new_store + + def swap(self, position1, position2): + temp_store1 = { + (cls, i): self.store[(cls, i)] + for cls, i in self.store.keys() + if i == position1 + } + + temp_store2 = { + (cls, i): self.store[(cls, i)] + for cls, i in self.store.keys() + if i == position2 + } + + for cls, i in list(self.store.keys()): + if i == position1 or i == position2: + del self.store[(cls, i)] + + for cls, i in temp_store1.keys(): + self.store[(cls, position2)] = temp_store1[(cls, i)] + + for cls, i in temp_store2.keys(): + self.store[(cls, position1)] = temp_store2[(cls, i)] + + # Also change the actual line content + temp = self.cache.buffer[position1] + self.cache.buffer[position1] = self.cache.buffer[position2] + self.cache.buffer[position2] = temp + + +class CompletionStore(NoNoneStore): + + def get_method(self, key): + from taskwiki import completion + return completion.Completion(key) diff --git a/.config/vim/bundle/taskwiki/taskwiki/util.py b/.config/vim/bundle/taskwiki/taskwiki/util.py new file mode 100644 index 0000000..45cd5b9 --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/util.py @@ -0,0 +1,444 @@ +# Various utility functions +from __future__ import print_function +from packaging import version + +import contextlib +import os +import random +import sys +import vim # pylint: disable=F0401 + +import tasklib + +from taskwiki.constants import VIRTUAL_TAGS +from taskwiki.errors import TaskWikiException +from taskwiki import regexp + +# Detect if command AnsiEsc is available +ANSI_ESC_AVAILABLE = vim.eval('exists(":AnsiEsc")') == '2' +NEOVIM = (vim.eval('has("nvim")') == "1") +HAS_TERMINAL = (NEOVIM or (int(vim.eval("v:version")) >= 800)) + +def tw_modstring_to_args(line): + output = [] + escape_global_chars = ('"', "'") + line = line.strip() + + current_escape = None + current_part = '' + local_escape_pos = None + + for i in range(len(line)): + char = line[i] + ignored = False + process_next_part = False + + # If previous char was \, add to current part no matter what + if local_escape_pos == i - 1: + local_escape_pos = None + # If current char is \, use it as escape mark and ignore it + elif char == '\\': + local_escape_pos = i + ignored = True + # If current char is ' or ", open or close an escaped seq + elif char in escape_global_chars: + # First test if we're finishing an escaped sequence + if current_escape == char: + current_escape = None + ignored = True + # Do we have ' inside "" or " inside ''? + elif current_escape is not None: + pass + # Opening ' or " + else: + current_escape = char + ignored = True + elif current_escape is not None: + pass + elif char == ' ': + ignored = True + process_next_part = True + + if not ignored: + current_part += char + + if process_next_part and current_part: + output.append(current_part) + current_part = '' + + if current_part: + output.append(current_part) + + return output + +def tw_modstring_to_kwargs(line): + args = tw_modstring_to_args(line) + return tw_args_to_kwargs(args) + +def tw_args_to_kwargs(args): + output = dict() + + for arg in args: + # If the argument contains :, then it's a key/value pair + if ':' in arg: + key, value = arg.split(':', 1) + # Ignore anything which is not one-word string of alpha chars + # This will skip over constructs with attribute modifiers + if key.isalpha(): + output[key] = value if value != "" else None + # Tag addition + elif arg.startswith('+'): + value = arg[1:] + # Ignore virtual tags + if value not in VIRTUAL_TAGS: + output.setdefault('tags', []).append(value) + # Ignore tag removal + + return output + +def get_input(prompt="Enter: ", allow_empty=False, completion=None): + if completion is not None: + value = vim.eval('input("%s", "", "%s")' % (prompt, completion)) + else: + value = vim.eval('input("%s")' % prompt) + vim.command('redraw') + + # Check for empty value and bail out if not allowed + if not value and not allow_empty: + raise TaskWikiException("Input must be provided.") + + return value + +def get_current_window(): + """ + Returns a current window number. Provides a workaround for Neovim. + """ + + try: + return vim.current.window.number - 1 + except AttributeError: + return int(vim.eval('winnr()')) - 1 + +def get_buffer(number): + """ + Returns a buffer with specfied number. Provides a workaround for Neovim. + + Note that vim.buffers may not contain all buffers with sequential numbers. + """ + + buffers = [buffer for buffer in vim.buffers if buffer.number == number] + assert len(buffers) == 1 + return buffers[0] + +def convert_colorstring_for_vim(string): + BASIC_COLORS = [ + "blue", "yellow", "green", "red", + "magneta", "yellow", "white", "black" + ] + + EFFECTS = ['bold'] + + def is_color(c): + return any([ + c.startswith('color'), + c.startswith('rgb'), + c in BASIC_COLORS + ]) + + def parse_color(c): + if c.startswith('color'): + return c[5:] + elif c.startswith('rgb'): + # TaskWarrior color cube notation, see 'task color' + red = int(c[3]) + green = int(c[4]) + blue = int(c[5]) + index = 16 + red * 36 + green * 6 + blue; + return str(index) + else: + return c + + foreground = None + background = None + effect = None + + for part in string.split(): + if is_color(part) and foreground is None: + foreground = parse_color(part) + elif is_color(part) and background is None: + background = parse_color(part) + elif part in EFFECTS: + effect = part + + result = ''.join([ + 'cterm={0} '.format(effect) if effect else '', + 'ctermfg={0} '.format(foreground) if foreground else '', + 'ctermbg={0}'.format(background) if background else '', + ]) + + return result + +def get_buffer_shortname(): + return vim.eval('expand("%")') + +def get_absolute_filepath(): + return vim.eval('expand("%:p")') + +def get_current_line_number(): + row, column = vim.current.window.cursor + return row - 1 + +def get_current_column_number(): + row, column = vim.current.window.cursor + return column + +def get_valid_tabpage_buffers(tabpage): + return [win.buffer for win in tabpage.windows if win.buffer.valid] + +def buffer_shortname(buffer): + return os.path.basename(buffer.name) + +def selected_line_numbers(): + return range(vim.current.range.start, vim.current.range.end + 1) + +def get_lines_above(including_current=True): + # Add 1 to the current line number if we want to include this line + bonus = 1 if including_current else 0 + + for line in reversed(range(0, get_current_line_number() + bonus)): + yield vim.current.buffer[line] + +def strip_ansi_escape_sequence(string): + return regexp.ANSI_ESCAPE_SEQ.sub("", string) + +def show_in_split(lines, size=None, position="belowright", vertical=False, + name="taskwiki", replace_opened=True, + activate_cursorline=False): + + # If there is no output, bail + if not lines: + print("No output.", file=sys.stderr) + return + + # Sanitaze the output + lines = [l.rstrip() for l in lines] + + # If the multiple buffers with this name are not desired + # cloase all the old ones in this tabpage + if replace_opened: + for buf in get_valid_tabpage_buffers(vim.current.tabpage): + shortname = buffer_shortname(buf) + if shortname.startswith(name): + vim.command('bwipe {0}'.format(shortname)) + + # Generate a random suffix for the buffer name + # This is needed since AnsiEsc saves the buffer name inside + # s: scoped variables. Also lowers the probability of clash with + # a real file. + random_suffix = random.randint(1,100000) + name = '{0}.{1}'.format(name, random_suffix) + + # Compute the size of the split + if size is None: + if vertical: + # Maximum number of columns used + small offset + # Strip the color codes, since they do not show up in the split + size = max([len(strip_ansi_escape_sequence(l)) for l in lines]) + 1 + + # If absolute maximum width was set, do not exceed it + if get_var('taskwiki_split_max_width'): + size = min(size, get_var('taskwiki_split_max_width')) + + else: + # Number of lines + size = len(lines) + + # If absolute maximum height was set, do not exceed it + if get_var('taskwiki_split_max_height'): + size = min(size, get_var('taskwiki_split_max_height')) + + # Set cursorline in the window + cursorline_activated_in_window = None + + if activate_cursorline and not vim.current.window.options['cursorline']: + vim.current.window.options['cursorline'] = True + cursorline_activated_in_window = get_current_window() + + # Call 'vsplit' for vertical, otherwise 'split' + vertical_prefix = 'v' if vertical else '' + + vim.command("{0} {1}{2}split".format(position, size, vertical_prefix)) + vim.command("edit {0}".format(name)) + + # For some weird reason, edit does not work for some users, but + # enew + file does. Use as fallback. + if get_buffer_shortname() != name: + vim.command("enew") + vim.command("file {0}".format(name)) + + # If we were still unable to open the buffer, bail out + if get_buffer_shortname() != name: + print("Unable to open a new buffer with name: {0}".format(name)) + return + + # We're good to go! + vim.command("setlocal noswapfile") + vim.command("setlocal modifiable") + vim.current.buffer.append(lines, 0) + + vim.command("setlocal readonly") + vim.command("setlocal nomodifiable") + vim.command("setlocal buftype=nofile") + vim.command("setlocal nowrap") + vim.command("setlocal nonumber") + + # Keep window size fixed despite resizing + vim.command("setlocal winfixheight") + vim.command("setlocal winfixwidth") + + # Make the split easily closable + vim.command("nnoremap q :bwipe") + vim.command("nnoremap :bwipe") + + # Remove cursorline in original window if it was this split which set it + if cursorline_activated_in_window is not None: + vim.command("au BufLeave,BufDelete,BufWipeout " + + get_var('taskwiki_py') + + " vim.windows[{0}].options['cursorline']=False" + .format(cursorline_activated_in_window)) + + if ANSI_ESC_AVAILABLE: + vim.command("AnsiEsc") + +def tw_execute_colorful(tw, *args, **kwargs): + override = kwargs.setdefault('config_override', {}) + maxwidth = kwargs.pop('maxwidth', False) + maxheight = kwargs.pop('maxheight', False) + + if ANSI_ESC_AVAILABLE: + override['_forcecolor'] = "yes" + + if maxheight: + override['defaultheight'] = vim.current.window.height + + if maxwidth: + override['defaultwidth'] = vim.current.window.width + + return tw_execute_safely(tw, *args, **kwargs) + +def tw_execute_safely(tw, *args, **kwargs): + kwargs['allow_failure'] = False + kwargs['return_all'] = True + + out, err, rc = tw.execute_command(*args, **kwargs) + + if rc == 0: + return out + else: + # In case of failure, print everything as os output + # Left for debug mode + # for line in itertools.chain(out, err[:-1]): + # print(line) + # Display the last line as failure + if err: + print(err[-1], file=sys.stderr) + +@contextlib.contextmanager +def current_line_highlighted(): + original_value = vim.current.window.options['cursorline'] + original_window_number = get_current_window() + vim.current.window.options['cursorline'] = True + + vim.command('redraw') + + try: + yield + finally: + original_window = vim.windows[original_window_number] + original_window.options['cursorline'] = original_value + +@contextlib.contextmanager +def current_line_preserved(): + """ + Make sure the current line is preserved during the operation by marking it + first and later restoring it with the :number command, i.e. :42. + """ + + current_line = get_current_line_number() + 1 + yield + vim.command('{0}'.format(current_line)) + +def enforce_dependencies(cache): + # Vim version is already checked in vimscript file + # This is done so that we avoid problems with +python + + TASKLIB_VERSION = '2.2.1' + TASKWARRIOR_VERSION = '2.4.0' + + # Check tasklib version + tasklib_module_version = getattr(tasklib, '__version__', '2.2.0') + tasklib_installed_version = version.parse(tasklib_module_version) + tasklib_required_version = version.parse(TASKLIB_VERSION) + + if tasklib_required_version > tasklib_installed_version: + raise TaskWikiException("Tasklib version at least %s is required." + % TASKLIB_VERSION) + + # Check taskwarrior version + tw = cache.warriors['default'] + taskwarrior_installed_version = version.parse(tw.version) + taskwarrior_required_version = version.parse(TASKWARRIOR_VERSION) + + if taskwarrior_required_version > taskwarrior_installed_version: + raise TaskWikiException("Taskwarrior version at least %s is required." + % TASKWARRIOR_VERSION) + +def decode_bytes(var): + """ + Data structures obtained from vim under python3 will return bytestrings. + Neovim under python3 will return str. + Make sure we can handle that. + """ + + if NEOVIM: + return var + + if isinstance(var, bytes): + return var.decode() + + if isinstance(var, list): + return list([decode_bytes(element) for element in var]) + + if isinstance(var, dict) or 'vim.dictionary' in str(type(var)): + return { + decode_bytes(key): decode_bytes(value) + for key, value in var.items() + } + + return var + +def get_var(name, default=None, vars_obj=None): + """ + Provide a layer for getting a variable value out of vim, consistent over + vim+py22/vim+py3/neovim combinations. + + Params: + default - default value, returned when variable is not found + vars - used vars object, defaults to vim.vars + """ + + vars_obj = vars_obj or vim.vars + value = vars_obj.get(name) + + if value is None: + return default + else: + return decode_bytes(value) + + +def is_midnight(dt): + """ + Determines if given datetime object is set to midnight. + """ + + return dt.hour == 0 and dt.minute == 0 and dt.second == 0 diff --git a/.config/vim/bundle/taskwiki/taskwiki/viewport.py b/.config/vim/bundle/taskwiki/taskwiki/viewport.py new file mode 100644 index 0000000..61d6f86 --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/viewport.py @@ -0,0 +1,431 @@ +import itertools +import re +import six +import sys +import vim +from datetime import datetime + +from taskwiki import vwtask +from taskwiki import regexp +from taskwiki import errors +from taskwiki import util +from taskwiki import sort +from taskwiki import short +from taskwiki import constants +from taskwiki import preset + + +class ViewPort(object): + """ + Represents viewport with a given filter. + + A ViewPort is a vimwiki heading which contains (albeit usually hidden + by the vim's concealing feature) the definition of TaskWarrior filter. + + ViewPort then displays all the tasks that match the given filter below it. + + === Work related tasks | pro:Work === + * [ ] Talk with the boss + * [ ] Publish a new blogpost + * [ ] Pick a topic + * [ ] Make sure the hosting is working + """ + + meta_tokens = ('-VISIBLE',) + + def __init__( + self, + line_number, + cache, + tw, + name, + filterstring, + defaultstring, + sort=None, + count=-1, + expires=None, + ): + """ + Constructs a ViewPort out of given line. + """ + + self.cache = cache + self.tw = tw + + self.presets = preset.PresetHeader.from_line(line_number, cache) + + self.name = name + self.line_number = line_number + self.taskfilter, self.meta = self.process_filterstring(filterstring, use_presets=True) + + if defaultstring: + self.defaults = util.tw_modstring_to_kwargs(defaultstring) + else: + pure_filter, _ = self.process_filterstring(filterstring, use_presets=False) + self.defaults = util.tw_args_to_kwargs(pure_filter) + + + self.tasks = set() + self.sort = ( + sort or + util.get_var('taskwiki_sort_order') or + constants.DEFAULT_SORT_ORDER + ) + + self.count = count and int(count) or None + + self.expires = expires or self.presets and self.presets.expires + self.expired = False + + parsed_expires = None + if self.expires is not None: + try: + parsed_expires = datetime.strptime(self.expires, regexp.DATETIME_FORMAT) + except ValueError: + try: + parsed_expires = datetime.strptime(self.expires, regexp.DATE_FORMAT) + except ValueError: + vim.command('echom "Taskwiki: Invalid timestamp ' + 'on line %s, ignored."' + % line_number) + + if parsed_expires is not None and parsed_expires < datetime.now(): + self.expired = True + + def process_filterstring(self, filterstring, use_presets=True): + """ + This method processes taskfilter in the form or filter string, + parses it into list of filter args, processing any syntax sugar + as part of the process. + + Following syntax sugar in filter expressions is currently supported: + + * Expand @name with the definition of 'context.name' TW config + variable + + * Interpret !+DELETED as forcing the +DELETED token. + * Interpret !-DELETED as forcing the -DELETED token. + * Interpret !?DELETED as removing both +DELETED and -DELETED. + """ + + # Get the initial version of the taskfilter args + taskfilter_args = list(constants.DEFAULT_VIEWPORT_VIRTUAL_TAGS) + if use_presets: + taskfilter_args += list(self.presets.taskfilter) + taskfilter_args += "(" + taskfilter_args += util.tw_modstring_to_args(filterstring) + taskfilter_args += ")" + + # Process syntactic sugar: Context expansion + detected_contexts = [] + for token in filter(lambda x: x.startswith('@'), taskfilter_args): + # Try the old context definition first. + context_variable_name = 'context.{0}'.format(token[1:]) + context_definition = self.tw.config.get(context_variable_name) + + # Use the new definition if the old one fails + if context_definition == None: + context_variable_name = 'context.{0}.read'.format(token[1:]) + context_definition = self.tw.config.get(context_variable_name) + + if context_definition: + context_args = util.tw_modstring_to_args(context_definition) + detected_contexts.append((token, context_args)) + else: + raise errors.TaskWikiException("Context definition for '{0}' " + "could not be found.".format(token[1:])) + + for context_token, context_args in detected_contexts: + # Find the position of the context token + token_index = taskfilter_args.index(context_token) + + # Replace the token at token_index by context_args list + taskfilter_args = ( + taskfilter_args[:token_index] + + context_args + + taskfilter_args[(token_index+1):] + ) + + # Process syntactic sugar: Forcing virtual tags + tokens_to_remove = set() + tokens_to_add = set() + + is_forced_virtual_tag = lambda x: x.isupper() and ( + x.startswith('!+') or + x.startswith('!-') or + x.startswith('!?') + ) + + for token in filter(is_forced_virtual_tag, taskfilter_args): + # In any case, remove the forced tag and the forcing + # flag from the taskfilter + tokens_to_remove.add(token) + tokens_to_remove.add('+' + token[2:]) + tokens_to_remove.add('-' + token[2:]) + + # Add forced tag versions + if token.startswith('!+'): + tokens_to_add.add('+' + token[2:]) + elif token.startswith('!-'): + tokens_to_add.add('-' + token[2:]) + elif token.startswith('!?'): + pass + + for token in tokens_to_remove: + if token in taskfilter_args: + taskfilter_args.remove(token) + + taskfilter_args = list(tokens_to_add) + taskfilter_args + + # Deal with the situation when both +TAG and -TAG appear in the + # taskfilter_args. If one of them is from the defaults, the explicit + # version wins. + + def detect_virtual_tag(tag): + return tag.isupper() and tag[0] in ('+', '-') + + def get_complement_tag(tag): + return ('+' if tag.startswith('-') else '-') + tag[1:] + + virtual_tags = list(filter(detect_virtual_tag, taskfilter_args)) + tokens_to_remove = set() + # For each virtual tag, check if its complement is in the + # taskfilter_args too. If so, remove the tag that came from defaults. + for token in virtual_tags: + complement = get_complement_tag(token) + if complement in virtual_tags: + # Both tag and its complement are in the taskfilter_args. + # Remove the one from defaults. + if token in constants.DEFAULT_VIEWPORT_VIRTUAL_TAGS: + tokens_to_remove.add(token) + if complement in constants.DEFAULT_VIEWPORT_VIRTUAL_TAGS: + tokens_to_remove.add(complement) + + for token in tokens_to_remove: + if token in taskfilter_args: + taskfilter_args.remove(token) + + # Process meta tags, remove them from filter + meta = dict() + + for token in taskfilter_args: + if token == '-VISIBLE': + meta['visible'] = False + + taskfilter_args = [x for x in taskfilter_args + if x not in self.meta_tokens] + + # If, after all processing, any empty parens appear in the + # seqeunce of taskfilter_args, remove them + def deempty_parenthesize(tokens): + empty_paren_index = None + + # Detect any empty parenthesis pair + for index, token in enumerate(tokens): + if token == '(' and tokens[index+1] == ')': + empty_paren_index = index + + # Delete empty pair, if found + if empty_paren_index is not None: + del tokens[empty_paren_index] + del tokens[empty_paren_index] + + # Attempt to delete next one, if it exists + deempty_parenthesize(tokens) + + deempty_parenthesize(taskfilter_args) + + # All syntactic processing done, return the resulting filter args + return taskfilter_args, meta + + @classmethod + def parse_line(cls, cache, number): + return re.search(regexp.VIEWPORT[cache.markup_syntax], cache.buffer[number]) + + @classmethod + def from_line(cls, number, cache): + match = cache.line[(cls, number)] + + if not match: + return None + + filterstring = match.group('filter') + defaults = match.group('defaults') + name = match.group('name').strip() + + if six.PY2: + filterstring = filterstring.decode('utf-8') + defaults = defaults.decode('utf-8') if defaults is not None else defaults + name = name.decode('utf-8') + + tw = cache.warriors[match.group('source') or 'default'] + + sort_id = match.group('sort') + sorts_configured = util.get_var('taskwiki_sort_orders', {}) + + sortstring = None + + # Perform the detection only if specific sort was set + if sort_id: + sortstring = sorts_configured.get(sort_id) + + # If we failed to fetch the sortstring, warn the user + if sortstring is None and sort_id is not None: + print(u"Sort indicator '{0}' for viewport '{1}' is not defined," + " using default.".format(sort_id, name), sys.stderr) + + count = match.group('count') + expires = match.group('expires') + + self = cls(number, cache, tw, name, filterstring, + defaults, sortstring, count, expires) + + return self + + @classmethod + def find_closest(cls, cache): + current_line = util.get_current_line_number() + + # Search lines in order: first all above, than all below + line_numbers = itertools.chain( + reversed(range(0, current_line + 1)), + range(current_line + 1, len(cache.buffer)) + ) + + for i in line_numbers: + port = cls.from_line(i, cache) + if port: + return port + + @property + def raw_filter(self): + return u' '.join(self.taskfilter) + + @property + def raw_defaults(self): + value = u', '.join( + u'{0}:{1}'.format(key, value) + for key, value in self.defaults.items() + ) + # Strip u'' literal symbols from the output + return value.replace("u'", "'") if six.PY2 else value + + @property + def viewport_tasks(self): + return set(t.task for t in self.tasks) + + @property + def matching_tasks(self): + # Split the filter into CLI tokens and filter by the expression + # By default, do not list deleted tasks + args = self.taskfilter + # Visibility tag not set + if self.meta.get('visible') is None: + return set( + task for task in self.tw.tasks.filter(*args) + ) + # -VISIBLE virtual tag used + elif self.meta.get('visible') is False: + # Determine which tasks are outside the viewport + all_vwtasks = set(self.cache.vwtask.values()) + vwtasks_outside_viewport = all_vwtasks - set(self.tasks) + tasks_outside_viewport = set( + t.task for t in vwtasks_outside_viewport + if t is not None + ) + + # Return only those that are not duplicated outside + # of the viewport + return set( + task for task in self.tw.tasks.filter(*args) + if task not in tasks_outside_viewport + ) + + def get_tasks_to_add_and_del(self): + # Find the tasks that are new and tasks that are no longer + # supposed to show up in the viewport + matching_tasks = self.matching_tasks + + to_add = matching_tasks - self.viewport_tasks + to_del = self.viewport_tasks - matching_tasks + + return to_add, to_del + + def load_tasks(self): + # Load all tasks below the viewport + for i in range(self.line_number + 1, len(self.cache.buffer)): + line = self.cache.buffer[i] + match = re.search(regexp.GENERIC_TASK, line) + + if match: + self.tasks.add(self.cache.vwtask[i]) + else: + # If we didn't found a valid task, terminate the viewport + break + + def sync_with_taskwarrior(self): + # This is called at the point where all the tasks in the vim + # are already synced. This should load the tasks from TW matching + # the filter, and add the tasks that are new. Optionally remove the + # tasks that are not longer belonging there. + + # Get sets of tasks to add and to delete + to_add, to_del = self.get_tasks_to_add_and_del() + + # Remove tasks that no longer match the filter + for task in to_del: + # Find matching vimwikitasks in the self.tasks set + + # There might be more if the viewport contained multiple + # representations of the same task + if task.saved: + matching_vimwikitasks = [ + t for t in self.tasks + if t.uuid == short.ShortUUID(task['uuid'], task.backend) + ] + else: + # For the tasks that are not saved yet, only one + # representation can exist, so use object-comparison + matching_vimwikitasks = [ + t for t in self.tasks + if t.task == task + ] + + # Remove the tasks from viewport's set and from buffer + for vimwikitask in matching_vimwikitasks: + self.tasks.remove(vimwikitask) + self.cache.remove_line(vimwikitask['line_number']) + + # Add the tasks that match the filter and are not listed + added_tasks = 0 + existing_tasks = len(self.tasks) + + sorted_to_add = list(to_add) + sorted_to_add.sort(key=lambda x: x['entry']) + + for task in sorted_to_add: + added_tasks += 1 + added_at = self.line_number + existing_tasks + added_tasks + + # Add the task object to cache + self.cache.task[short.ShortUUID(task['uuid'], self.tw)] = task + + # Create the VimwikiTask + vimwikitask = vwtask.VimwikiTask.from_task(self.cache, task) + vimwikitask['line_number'] = added_at + self.tasks.add(vimwikitask) + + # Update the buffer + self.cache.insert_line(str(vimwikitask), added_at) + + # Save it to cache + self.cache.vwtask[added_at] = vimwikitask + + sort.TaskSorter(self.cache, self.tasks, self.sort).execute() + + if self.count is not None: + for i in range( + self.line_number + self.count, + self.line_number + existing_tasks + added_tasks, + ): + self.cache.remove_line(self.line_number + self.count + 1) diff --git a/.config/vim/bundle/taskwiki/taskwiki/vwtask.py b/.config/vim/bundle/taskwiki/taskwiki/vwtask.py new file mode 100644 index 0000000..48465d3 --- /dev/null +++ b/.config/vim/bundle/taskwiki/taskwiki/vwtask.py @@ -0,0 +1,398 @@ +import re +import six +import itertools +import vim # pylint: disable=F0401 +from datetime import datetime + +from tasklib import Task + +from taskwiki import regexp +from taskwiki import util +from taskwiki.short import ShortUUID + + +def convert_priority_from_tw_format(priority): + return {None: None, 'L': 1, 'M': 2, 'H': 3}[priority] + + +def convert_priority_to_tw_format(priority): + return {0: None, 1: 'L', 2: 'M', 3: 'H'}[priority] + + +class VimwikiTask(object): + # Lists all data keys that are reflected in Vim representation + buffer_keys = ('indent', 'description', 'uuid', 'completed_mark', + 'line_number', 'priority', 'due') + + def __init__(self, cache, uuid, tw): + """ + Constructs a Vimwiki task from line at given position at the buffer + """ + self.cache = cache + self.tw = tw + self.vim_data = dict(indent='', completed_mark=' ', line_number=None) + self._buffer_data = None + self.__unsaved_task = None + self.uuid = ShortUUID(uuid, self.tw) if uuid is not None else None + + def __getitem__(self, key): + if key in self.vim_data.keys(): + return self.vim_data[key] + else: + return self.task[key] + + def __setitem__(self, key, value): + if key in self.vim_data.keys(): + self.vim_data[key] = value + else: + # Tags require special handling, since we do not want to override, + # but rather append + if key == 'tags': + self.task[key] = self.task[key].union(value) + else: + self.task[key] = value + + + @classmethod + def find_closest(cls, cache): + current_line = util.get_current_line_number() + + # Search lines in order: first all above, than all below + line_numbers = itertools.chain( + reversed(range(0, current_line + 1)), + range(current_line + 1, len(cache.buffer)) + ) + + for i in line_numbers: + vwtask = cls.from_line(cache, i) + if vwtask: + return vwtask + + @classmethod + def parse_line(cls, cache, number): + return re.search(regexp.GENERIC_TASK, cache.buffer[number]) + + @classmethod + def from_line(cls, cache, number): + """ + Creates a Vimwiki object from given line in the buffer. + - If line does not contain a Vimwiki task, returns None. + """ + # Protected access is ok here + # pylint: disable=W0212 + + match = cache.line[(cls, number)] + + if not match: + return None + + tw = cache.warriors[match.group('source') or 'default'] + self = cls(cache, match.group('uuid'), tw) + + # Save vim-only related data + self.vim_data.update({ + 'indent': match.group('space'), + 'completed_mark': match.group('completed'), + 'line_number': number, + }) + + # Save task related data into Task object directly + # Use data from the buffer to update the task only if we + # explicitly stated that buffer has authority or if the task + # being loaded is not saved in TW + if cache.buffer_has_authority or not self.task.saved: + if six.PY2: + self.task['description'] = match.group('text').decode('utf-8') + else: + self.task['description'] = match.group('text') + + self.task['priority'] = convert_priority_to_tw_format( + len(match.group('priority') or [])) # This is either 0,1,2 or 3 + + # Also make sure changes in the progress field are reflected + if self['completed_mark'] in ['X', 'x']: + self.task['status'] = 'completed' + self.task['start'] = None + self.task['end'] = self.task['end'] or datetime.now() + elif self['completed_mark'] == 'S': + self.task['status'] = 'pending' + self.task['start'] = self.task['start'] or datetime.now() + self.task['end'] = None + elif self['completed_mark'] == 'D': + self.task['status'] = 'deleted' + self.task['start'] = None + self.task['end'] = self.task['end'] or datetime.now() + elif self['completed_mark'] == ' ': + self.task['status'] = "pending" + self.task['start'] = None + self.task['end'] = None + self.task['wait'] = None + + # To get local time aware timestamp, we need to convert to + # from local datetime to UTC time, since that is what + # tasklib (correctly) uses + due = match.group('due') + if due: + # With strptime, we get a native datetime object + parsed_due = None + + try: + parsed_due = datetime.strptime(due, "({0})".format(regexp.DATETIME_FORMAT)) + except ValueError: + try: + parsed_due = datetime.strptime(due, "({0})".format(regexp.DATE_FORMAT)) + except ValueError: + vim.command('echom "Taskwiki: Invalid timestamp ' + 'on line %s, ignored."' + % self['line_number']) + + # We need to interpret it as timezone aware object in user's + # timezone, This properly handles DST and timezone offset. + if parsed_due: + self.task['due'] = parsed_due + + # After all line-data parsing, save the data in the buffer + self._buffer_data = {key:self[key] for key in self.buffer_keys} + + # We need to track depedency set in a extra attribute, since + # this may be a new task, and hence it need not to be saved yet. + # We circumvent this problem by iteration order in the TaskCache + self.add_dependencies = set() + + self.parent = self.find_parent_task() + + # Make parent task dependant on this task + if self.parent: + self.parent.add_dependencies |= set([self]) + + # For new tasks, apply defaults from above viewport + if not self.uuid: + self.apply_defaults() + + # If -- is in description, assume it's separator for metadata + # * [ ] this is new task -- project:home + # should turn into + # * [ ] this is new task + # with project:home applied + + if ' -- ' in self['description']: + first_part, second_part = self['description'].split(' -- ', 1) + + new_description = first_part.strip() + modstring = second_part.strip() + + # Convert the modstring + modifications = util.tw_modstring_to_kwargs(modstring) + for key in modifications.keys(): + self[key] = modifications[key] + + # Apply the new description + self['description'] = new_description + + return self + + @classmethod + def from_task(cls, cache, task): + self = cls(cache, task['uuid'], task.backend) + self.update_from_task() + + return self + + @property + def task(self): + # New task object accessed second or later time + if self.__unsaved_task is not None: + return self.__unsaved_task + + # Return the corresponding task if alrady set + # Else try to load it or create a new one + if self.uuid: + try: + return self.cache.task[self.uuid] + except Task.DoesNotExist: + # Task with stale uuid, recreate + self.__unsaved_task = Task(self.tw) + # If task cannot be loaded, we need to remove the UUID + vim.command( + 'echom "UUID \'{0}\' not found, Task on line {1} will be ' + 're-created in TaskWarrior."'.format( + self.uuid, + self['line_number'] + 1 + )) + self.uuid = None + else: + # New task object accessed first time + self.__unsaved_task = Task(self.tw) + + return self.__unsaved_task + + @task.setter + def task(self, task): + # Make sure we're updating by a correct task + if task['uuid'] != self.uuid: + raise ValueError("Task '%s' with '%s' cannot be updated by " + "task with uuid '%s'." + % (self['description'], + self.uuid, + task['uuid'])) + + + self.uuid = ShortUUID(task['uuid'], self.tw) + + @property + def priority_from_tw_format(self): + return convert_priority_from_tw_format(self.task['priority']) + + @property + def priority_to_tw_format(self): + return convert_priority_to_tw_format(self['priority']) + + def save_to_tw(self): + # This method persumes all the dependencies have been created at the + # point it was called, hence move set the dependencies for the underlying + # task. Remove dependencies for all other tasks within the viewport. + + # This happens so that the dependencies are rebuilt from the tree after + # each save, since tasks may have been moved within the tree and dependencies + # added / removed in this implicit manner. + port = self.cache.get_viewport_by_task(self.task) + if port is not None: + self.task['depends'] -= set(port.viewport_tasks) + + self.task['depends'] |= set(s.task for s in self.add_dependencies) + + # Push the values to the Task only if the Vimwiki representation + # somehow differs + if self.task.modified or not self.uuid: + self.task.save() + + # If task was first time saved now, add it to the cache and remove + # the temporary reference + if self.__unsaved_task is not None: + self.uuid = ShortUUID(self.__unsaved_task['uuid'], self.tw) + self.cache.task[self.uuid] = self.__unsaved_task + self.__unsaved_task = None + + # If we saved the task, we need to update. Hooks may have changed data. + self.update_from_task() + + def get_completed_mark(self): + mark = self['completed_mark'] + + if self.task.completed: + mark = 'X' + elif mark == 'X': + mark = ' ' + + if self.task.active: + mark = 'S' + elif mark == 'S': + mark = ' ' + + if self.task.deleted: + mark = 'D' + elif mark == 'D': + mark = ' ' + + if self.task.recurring: + mark = 'R' + elif mark == 'R': + mark = ' ' + + if self.task.waiting: + mark = 'W' + elif mark == 'W': + mark = ' ' + + return mark + + def update_from_task(self): + if not self.task.saved: + return + + self.uuid = ShortUUID(self.task['uuid'], self.tw) + self['completed_mark'] = self.get_completed_mark() + + def update_in_buffer(self): + # Look if any of the data that show up in Vim has changed + buffer_data = {key:self[key] for key in self.buffer_keys} + if self._buffer_data != buffer_data: + # If so, update the line in vim and saved buffer data + self.cache.buffer[self['line_number']] = str(self) + self._buffer_data = buffer_data + + def __str__(self): + due_str = ' ' + ( + self['due'].strftime("(" + regexp.DATETIME_FORMAT + ")") + if not util.is_midnight(self['due']) else + self['due'].strftime("(" + regexp.DATE_FORMAT + ")") + ) if self['due'] else '' + + return ''.join([ + self['indent'], + '* [', + self['completed_mark'], + '] ', + (self['description'].encode('utf-8') if six.PY2 else self['description']) + if self['description'] else 'TEXT MISSING?', + ' ' + '!' * self.priority_from_tw_format if self['priority'] else '', + due_str, + ' #' + self.uuid.vim_representation(self.cache) if self.uuid else '', + ]) + + def find_parent_task(self): + # If this task is not indented, we have nothing to do here + if not self['indent']: + return None + + for i in reversed(range(0, self['line_number'])): + # Tab is equal to four spaces + # TODO: Source this from tabstop setting, but this would be only + # useful for mixed tab/space indentations + indentation = len(self.cache.buffer[i].replace('\t', ' ')) - len(self.cache.buffer[i].lstrip()) + indent = self['indent'].replace('\t', ' ') + + if indentation < len(indent): + # The from_line constructor returns None if line doesn't match a task + line = self.cache.line[(VimwikiTask, i)] + if line: + # Stop looking, we found a less-indented task + return self.cache.vwtask[i] + else: + return None + + def apply_defaults(self): + from taskwiki import viewport, preset + + # Find first parent header or viewport + header, port = None, None + for i in reversed(range(0, self['line_number'])): + header = preset.PresetHeader.from_line(i, self.cache) + port = viewport.ViewPort.from_line(i, self.cache) + if header or port: + break + + if header: + # Use defaults from the preset header hierarchy + self.update(header.defaults) + + if port: + # The task should have the same source as the viewport has + self.tw = port.tw + self.task.backend = port.tw + + # Any defaults specified should be inherited + self.update(port.defaults) + + + def update(self, defaults): + """ + Apply all defaults from a dict + + Similar to the dict.update method. + Does nothing if the argument is None. + """ + + if defaults: + for key in defaults.keys(): + self[key] = defaults[key] diff --git a/.config/vim/bundle/taskwiki/tests/__init__.py b/.config/vim/bundle/taskwiki/tests/__init__.py new file mode 100644 index 0000000..d7fba85 --- /dev/null +++ b/.config/vim/bundle/taskwiki/tests/__init__.py @@ -0,0 +1,5 @@ +import os +import sys + +path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) +sys.path.insert(0, path) diff --git a/.config/vim/bundle/taskwiki/tests/base.py b/.config/vim/bundle/taskwiki/tests/base.py new file mode 100644 index 0000000..8f14dc3 --- /dev/null +++ b/.config/vim/bundle/taskwiki/tests/base.py @@ -0,0 +1,394 @@ +# -*- coding: utf-8 -*- + +import os +import re +import six +import subprocess +import tempfile +import vimrunner + +from tasklib import TaskWarrior, Task +from time import sleep + +server_name = "TaskWikiTestServer-{}".format(os.getpid()) +server = vimrunner.Server(name=server_name) + + +class IntegrationTest(object): + + client = None + viminput = None + vimoutput = None + tasks = [] + markup = 'default' + + def add_plugin(self, name, *args): + plugin_base = os.path.expanduser('~/.vim/bundle/') + plugin_path = os.path.join(plugin_base, name) + self.client.add_plugin(plugin_path, *args) + + def write_buffer(self, lines, position=0): + result = self.client.write_buffer(position + 1, lines) + assert result == u"0" + + def read_buffer(self, start=0, end=1000): + return self.client.read_buffer( + six.text_type(start+1), + six.text_type(end+1) + ).splitlines() + + def generate_data(self): + self.dir = tempfile.mkdtemp(dir='/tmp/') + + # Create an actual taskrc file where we can write later + self.taskrc_path = os.path.join(self.dir, "taskrc") + with open(self.taskrc_path, 'w') as f: + f.write("#testing taskrc\n") + + self.tw = TaskWarrior( + data_location=self.dir, + taskrc_location=self.taskrc_path + ) + + self.tasks = [Task(self.tw, **task_kwargs) + for task_kwargs in self.__class__.tasks] + + for task in self.tasks: + task.save() + + def start_client(self, retry=3): + try: + self.client = server.start_gvim() + except RuntimeError: + if retry > 0: + sleep(2) + self.start_client(retry=retry-1) + else: + raise + + def configure_global_variables(self): + self.command('set foldlevel=99') + self.command('let g:taskwiki_data_location="{0}"'.format(self.dir)) + self.command('let g:taskwiki_taskrc_location="{0}"'.format(self.taskrc_path)) + self.command('let g:vimwiki_list = [{"syntax": "%s", "ext": ".txt","path": "%s"}]' % (self.markup, self.dir)) + + def setup_method(self): + assert not self.client + + self.generate_data() + self.start_client() # Start client with 3 chances + + # Force vim into python3 mode if testing under python3 + if six.PY3: + self.client.command('exec has("python3")') + + self.configure_global_variables() + self.add_plugin('taskwiki') + self.add_plugin('vimwiki', 'plugin/vimwiki.vim') + self.add_plugin('taskwiki/after') + self.filepath = os.path.join(self.dir, 'testwiki.txt') + self.client.edit(self.filepath) + + def teardown_method(self): + if not self.client: + return + + self.client.quit() + self.client = None + subprocess.call(['pkill', '-f', 'gvim.*--servername ' + server_name]) + sleep(0.2) # Killing takes some time + + def py(self, command, silent=True, regex=None, lines=None, direct=False): + py_command = 'py ' if six.PY2 else 'py3 ' + + # Direct command communicate directly with the client + if direct: + return self.client.command(py_command + command) + else: + return self.command(py_command + command, + silent=silent, regex=regex, lines=lines) + + def command(self, command, silent=True, regex=None, lines=None): + result = self.client.command(command) + + # Specifying regex or lines cancels expectations of silence + if regex or lines: + silent = False + + # For silent commands, there should be no output + if silent is not None: + if silent: + assert not result + else: + assert result + + # Multiline-evaluate the regex + if regex: + details = u"Regex not found in: {0}".format(result) + assert re.search(regex, result, re.MULTILINE), details + + if lines: + assert lines == len(result.splitlines()) + + return result + + def check_sanity(self, soft=True): + """ + Makes sanity checks upon the vim instance. + """ + + if not soft: + assert self.client + elif not self.client: + return False + + # Assert all the important files were loaded + scriptnames = self.client.command('scriptnames').splitlines() + expected_loaded_files = [ + 'vimwiki/autoload/vimwiki/base.vim', + 'vimwiki/autoload/vimwiki/path.vim', + 'vimwiki/ftplugin/vimwiki.vim', + 'vimwiki/autoload/vimwiki/u.vim', + 'vimwiki/autoload/vimwiki/vars.vim', + 'vimwiki/syntax/vimwiki.vim', + 'taskwiki/ftplugin/vimwiki/taskwiki.vim' + ] + + # Do a partial match for each line from scriptnames + for scriptfile in expected_loaded_files: + if not soft: + if not any([scriptfile in line for line in scriptnames]): + raise Exception( + "Could not find scriptfile '{0}' in " + "the list of loaded scripts: {1}" + .format(scriptfile, scriptnames)) + elif not any([scriptfile in line for line in scriptnames]): + return False + + # Assert only note about Bram or Mike being maintainer is in messages + acceptable_default_messages = { + 'Messages maintainer: Bram Moolenaar ', + 'Messages maintainer: Mike Williams ', + 'Messages maintainer: The Vim Project' + } + if not soft: + assert self.client.command('messages') in acceptable_default_messages + elif self.client.command('messages') not in acceptable_default_messages: + return False + + # Assert that TW and cache objects exist + cache_class = self.py('print(cache().__class__.__name__)', direct=True) + tw_class = self.py( + 'print(cache().warriors["default"].__class__.__name__)', direct=True) + + if not soft: + assert tw_class == 'TaskWarrior', "not {}".format(tw_class) + assert cache_class == 'TaskCache', "not {}".format(cache_class) + elif tw_class != 'TaskWarrior' or cache_class != 'TaskCache': + return False + + # Success in the sanity check + return True + + # Helper function that fills in {uuid} placeholders with correct UUIDs + def fill_uuid(self, line): + # Tasks in testing can have only alphanumerical descriptions + match = re.match(u'\\s*\\* \\[.\\] (?P[äéôa-zA-Z0-9 \\[\\]]*)(?') + self.client.feedkeys('\\') + + def fill_uuid(self, line): + # Tasks in testing can have only alphanumerical descriptions + match = re.match(r'\s*\* \[.\] (?P[a-zA-Z0-9 ]*)(? 1 or len(extra_tasks) > 1: + raise RuntimeError( + "Description '{0}' matches multiple tasks. " + "Aborting fill_uuid operation.".format(match.group('desc'))) + + if tasks: + # Return {uuid} replaced by short form UUID + return line.format(uuid=tasks[0]['uuid'].split('-')[0]) + elif extra_tasks: + return line.format(uuid=tasks[0]['uuid'].split('-')[0]) + else: + return line + + +# Mock vim to test vim-nonrelated functions +class MockVim(object): + + class current(object): + buffer = [''] + + vars = dict() + warriors = dict() + + def eval(*args, **kwargs): + return 42 + + def reset(self): + self.current.buffer = [''] + self.vars.clear() + self.warriors.clear() + + +class MockBuffer(object): + + def __init__(self): + self.data = [''] + + def obtain(self): + pass + + def push(self): + pass + + def __getitem__(self, index): + try: + return self.data[index] + except IndexError: + return '' + + def __setitem__(self, index, lines): + self.data[index] = lines + + def __delitem__(self, index): + del self.data[index] + + def __iter__(self): + for line in self.data: + yield line + + def __len__(self): + return len(self.data) + + def append(self, data, position=None): + if position is None: + self.data.append(data) + else: + self.data.insert(position, data) + + +# Mock Cache object +class MockCache(object): + warriors = {'default': 'default'} + buffer_has_authority = True + + def __init__(self): + from taskwiki import store + self.buffer = MockBuffer() + self.line = store.LineStore(self) + self.vwtask = dict() + self.task = dict() + self.viewport = dict() + + def reset(self): + self.warriors.clear() + self.warriors.update({'default': 'default'}) + self.buffer_has_authority = True diff --git a/.config/vim/bundle/taskwiki/tests/conftest.py b/.config/vim/bundle/taskwiki/tests/conftest.py new file mode 100644 index 0000000..41a7b1a --- /dev/null +++ b/.config/vim/bundle/taskwiki/tests/conftest.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +import pytest +import re + + +# enable assertion introspection for the common code in tests.base +pytest.register_assert_rewrite('tests.base') + + +markup_headers = { + 'default': { + 'HEADER1': "= %s =", + 'HEADER2': "== %s ==", + 'HEADER3': "=== %s ===", + }, + 'markdown': { + 'HEADER1': "# %s", + 'HEADER2': "## %s", + 'HEADER3': "### %s", + } +} + + +@pytest.fixture(params=sorted(markup_headers.keys())) +def test_syntax(request): + markup = request.param + format_header_dict = markup_headers[markup] + + def header_expand(string): + """ + The function perform string replacement of 'HEADER1(.+)' with a header + syntax for a markup containing the string found in '.+'. This function + is constructed with a dict of three header levels containing their regex + and actual syntax. + When a markup is selected and this function is executed, the function + will find instance of 'HEADER1' with 1 being any number between 1 and 3 + inclusive. + """ + for header_level, format_header in format_header_dict.items(): + regex = header_level + '\((.*?)\)' + string = re.sub(regex, + lambda match: format_header % match.group(1), + string) + return string + + return (markup, header_expand) diff --git a/.config/vim/bundle/taskwiki/tests/test_choose.py b/.config/vim/bundle/taskwiki/tests/test_choose.py new file mode 100644 index 0000000..be9e185 --- /dev/null +++ b/.config/vim/bundle/taskwiki/tests/test_choose.py @@ -0,0 +1,250 @@ +# -*- coding: utf-8 -*- +from tests.base import IntegrationTest + + +class TestChooseProject(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1", project="Home"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.normal('2gg') + self.command("TaskWikiChooseProject") + self.client.normal('5gg') + self.client.feedkeys("\\") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['project'] == "Home" + assert self.tasks[1]['project'] == "Home" + + +class TestChooseProjectUnset(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1", project="Home"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.normal('1gg') + self.command("TaskWikiChooseProject") + self.client.normal('4gg') + self.client.feedkeys("\\") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['project'] == None + assert self.tasks[1]['project'] == None + + +class TestChooseProjectCanceled(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1", project="Home"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.normal('1gg') + self.command("TaskWikiChooseProject") + self.client.normal('4gg') + self.client.feedkeys("q") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['project'] == "Home" + assert self.tasks[1]['project'] == None + + +class TestChooseTag(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1", tags=["home"]), + dict(description="test task 2"), + ] + + def execute(self): + self.client.normal('2gg') + self.command("TaskWikiChooseTag") + self.client.normal('4gg') + self.client.feedkeys("\\") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['tags'] == set(["home"]) + assert self.tasks[1]['tags'] == set(["home"]) + + +class TestChooseTagCancelled(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1", tags=["home"]), + dict(description="test task 2"), + ] + + def execute(self): + self.client.normal('1gg') + self.command("TaskWikiChooseTag") + self.client.normal('4gg') + self.client.feedkeys("q") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['tags'] == set(["home"]) + assert self.tasks[1]['tags'] == set() + + +class TestChooseTagNoSelected(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1", tags=["home"]), + dict(description="test task 2"), + ] + + def execute(self): + self.client.normal('1gg') + self.command("TaskWikiChooseTag") + self.client.normal('5gg') # No task on the 5th row + self.client.feedkeys("\\") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['tags'] == set(["home"]) + assert self.tasks[1]['tags'] == set() + + +class TestChooseProjectUnicode(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1", project=u"Hôme"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.normal('2gg') + self.command("TaskWikiChooseProject") + self.client.normal('5gg') + self.client.feedkeys("\\") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['project'] == u"Hôme" + assert self.tasks[1]['project'] == u"Hôme" + + +class TestChooseTagUnicode(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1", tags=[u"hôme"]), + dict(description="test task 2"), + ] + + def execute(self): + self.client.normal('2gg') + self.command("TaskWikiChooseTag") + self.client.normal('4gg') + self.client.feedkeys("\\") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['tags'] == set([u"hôme"]) + assert self.tasks[1]['tags'] == set([u"hôme"]) diff --git a/.config/vim/bundle/taskwiki/tests/test_completion.py b/.config/vim/bundle/taskwiki/tests/test_completion.py new file mode 100644 index 0000000..b11ebc6 --- /dev/null +++ b/.config/vim/bundle/taskwiki/tests/test_completion.py @@ -0,0 +1,115 @@ +# -*- coding: utf-8 -*- +from taskwiki.completion import Completion +from tests.base import IntegrationTest + + +class FakeTW(): + def __init__(self, projects=[], tags=[]): + self.version = '2.5.1' + self.projects = projects + self.tags = tags + + def execute_command(self, args): + if args == ["_unique", "project"]: + return self.projects + elif args == ["_unique", "tag"]: + return self.tags + elif args == ["_columns"]: + return ["priority", "project", "due", "end"] + else: + assert False + + +class TestCompletionUnit(): + def test_attributes(self): + c = Completion(FakeTW()) + assert c.modify("") == ["+", "-", "due:", "end:", "priority:", "project:"] + assert c.modify("pr") == ["priority:", "project:"] + assert c.modify("pri") == ["priority:"] + + def test_projects(self): + c = Completion(FakeTW(projects=["aa", "ab", "c"])) + assert c.modify("proj:") == ["proj:aa", "proj:ab", "proj:c"] + assert c.modify("proj:a") == ["proj:aa", "proj:ab"] + assert c.modify("proj:ab") == ["proj:ab"] + assert c.modify("proj:abc") == [] + assert c.modify("pr:") == [] + assert c.modify("project:ab") == ["project:ab"] + + def test_tags(self): + c = Completion(FakeTW(tags=["aa", "aa,ab", "c"])) + assert c.modify("+") == ["+aa", "+ab", "+c"] + assert c.modify("+a") == ["+aa", "+ab"] + assert c.modify("+ab") == ["+ab"] + assert c.modify("+abc") == [] + + def test_dates(self): + c = Completion(FakeTW()) + assert c.modify("end:no") == ["end:now", "end:november"] + assert c.modify("sch:jan") == ["sch:january"] + + def test_recur(self): + c = Completion(FakeTW()) + assert c.modify("re:da") == ["re:daily", "re:day"] + assert c.modify("recur:q") == ["recur:quarterly"] + + def test_omni(self): + c = Completion(FakeTW()) + assert c.omni_modstring_findstart("* [ ] x") == -1 + assert c.omni_modstring_findstart("* [ ] x --") == -1 + assert c.omni_modstring_findstart("* [ ] x #12345678 --") == -1 + assert c.omni_modstring_findstart("* [ ] x -- #12345678") == -1 + assert c.omni_modstring_findstart("* [ ] x -- ") == 11 + assert c.omni_modstring_findstart("* [ ] x -- x") == 11 + assert c.omni_modstring_findstart("* [ ] x -- xy") == 11 + assert c.omni_modstring_findstart("* [ ] x -- x y") == 13 + + +class TestCompletionIntegMod(IntegrationTest): + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1", project="ABC"), + dict(description="test task 2", project="DEF"), + ] + + def execute(self): + self.client.feedkeys(":TaskWikiMod\\") + self.client.eval('feedkeys("pro\\D\\\\", "t")') + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['project'] == "DEF" + + +class TestCompletionIntegOmni(IntegrationTest): + viminput = """ + * [ ] test task 1 #{uuid} + """ + + tasks = [ + dict(description="test task 1", project="ABC"), + ] + + def execute(self): + self.client.feedkeys('1gg') + self.client.feedkeys('otest task 2 -- pro\\\\A\\\\\\') + self.client.eval('0') # wait for command completion + self.command("w", regex="written$", lines=1) + + self.client.feedkeys('otest task ☺ -- pro\\\\A\\\\\\') + self.client.eval('0') # wait for command completion + self.command("w", regex="written$", lines=1) + + task = self.tw.tasks.pending()[1] + assert task['description'] == 'test task 2' + assert task['project'] == 'ABC' + + task = self.tw.tasks.pending()[2] + assert task['description'] == 'test task ☺' + assert task['project'] == 'ABC' diff --git a/.config/vim/bundle/taskwiki/tests/test_config.py b/.config/vim/bundle/taskwiki/tests/test_config.py new file mode 100644 index 0000000..513c7bf --- /dev/null +++ b/.config/vim/bundle/taskwiki/tests/test_config.py @@ -0,0 +1,14 @@ +from tests.base import IntegrationTest + + +class TestSimpleColorAssigment(IntegrationTest): + + def configure_global_variables(self): + super(TestSimpleColorAssigment, self).configure_global_variables() + self.command('let g:taskwiki_source_tw_colors="yes"') + + # Also setup TW config at this point + self.tw.execute_command(['config', 'color.active', 'color2']) + + def execute(self): + assert "ctermfg=2" in self.command("hi TaskWikiTaskActive", silent=False) diff --git a/.config/vim/bundle/taskwiki/tests/test_ftplugin.py b/.config/vim/bundle/taskwiki/tests/test_ftplugin.py new file mode 100644 index 0000000..02ad9eb --- /dev/null +++ b/.config/vim/bundle/taskwiki/tests/test_ftplugin.py @@ -0,0 +1,18 @@ +import os +from tests.base import IntegrationTest + + +class TestCachePreserved(IntegrationTest): + + def execute(self): + testfile2 = os.path.join(self.dir, "testwiki2.txt") + + self.command("w", regex="written$", lines=1) + self.command("w {}".format(testfile2), regex="written$", lines=1) + + self.client.edit(testfile2) + + # check that all buffers have a cache entry + cache_keys = self.client.eval('py3eval("sorted(cache.caches.keys())")') + buffers = self.client.eval('py3eval("sorted(b.number for b in vim.buffers)")') + assert cache_keys == buffers diff --git a/.config/vim/bundle/taskwiki/tests/test_mappings.py b/.config/vim/bundle/taskwiki/tests/test_mappings.py new file mode 100644 index 0000000..401b94d --- /dev/null +++ b/.config/vim/bundle/taskwiki/tests/test_mappings.py @@ -0,0 +1,169 @@ +# -*- coding: utf-8 -*- +from tests.base import IntegrationTest + + +class TestDefaultMapping(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [X] test task 1 #{uuid} + * [X] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.normal('1gg') + self.client.feedkeys(r'\\td') + self.client.normal('2gg') + self.client.normal('V') + self.client.feedkeys(r'\\td') + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + +class TestSuppressedMapping(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def configure_global_variables(self): + super(TestSuppressedMapping, self).configure_global_variables() + self.command('let g:taskwiki_suppress_mappings="yes"') + + def execute(self): + self.client.normal('1gg') + self.client.feedkeys(r'\\td') + self.client.normal('2gg') + self.client.normal('V') + self.client.feedkeys(r'\\td') + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + +class TestCustomMapping(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [X] test task 1 #{uuid} + * [X] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def configure_global_variables(self): + super(TestCustomMapping, self).configure_global_variables() + self.command('let g:taskwiki_maplocalleader=",t"') + + def execute(self): + self.client.normal('1gg') + self.client.feedkeys(',td') + self.client.normal('2gg') + self.client.normal('V') + self.client.feedkeys(',td') + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + +class TestColonRemap(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [X] test task 1 #{uuid} + * [X] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.command('nnoremap ; :') + self.command('nnoremap : ;') + self.command('vnoremap ; :') + self.command('vnoremap : ;') + + self.client.normal('1gg') + self.client.feedkeys(r'\\td') + self.client.normal('2gg') + self.client.normal('V') + self.client.feedkeys(r'\\td') + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + +class TestColonRemapWithCustomMap(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [X] test task 1 #{uuid} + * [X] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def configure_global_variables(self): + super(TestColonRemapWithCustomMap, self).configure_global_variables() + self.command('let g:taskwiki_maplocalleader=",t"') + + def execute(self): + self.command('nnoremap ; :') + self.command('nnoremap : ;') + self.command('vnoremap ; :') + self.command('vnoremap : ;') + + self.client.normal('1gg') + self.client.feedkeys(',td') + self.client.normal('2gg') + self.client.normal('V') + self.client.feedkeys(',td') + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() diff --git a/.config/vim/bundle/taskwiki/tests/test_preset.py b/.config/vim/bundle/taskwiki/tests/test_preset.py new file mode 100644 index 0000000..1f3eb02 --- /dev/null +++ b/.config/vim/bundle/taskwiki/tests/test_preset.py @@ -0,0 +1,301 @@ +from tests.base import MultiSyntaxIntegrationTest + + +class TestPresetDefaults(MultiSyntaxIntegrationTest): + + viminput = """ + HEADER3(Work tasks || +work) + * [ ] This is a test task + """ + + vimoutput = """ + HEADER3(Work tasks || +work) + * [ ] This is a test task #{uuid} + """ + + def execute(self): + self.command('w', regex='written$', lines=1) + + # Check that only one task with this description exists + assert len(self.tw.tasks.pending()) == 1 + + task = self.tw.tasks.pending()[0] + assert task['tags'] == set(['work']) + + +class TestPresetHierarchy(MultiSyntaxIntegrationTest): + + viminput = """ + HEADER2(Work tasks || +work) + HEADER3(Hard work tasks || +hard) + HEADER3(Easy work tasks || +easy) + * [ ] This is a test task + """ + + vimoutput = """ + HEADER2(Work tasks || +work) + HEADER3(Hard work tasks || +hard) + HEADER3(Easy work tasks || +easy) + * [ ] This is a test task #{uuid} + """ + + def execute(self): + self.command('w', regex='written$', lines=1) + + # Check that only one tasks with this description exists + assert len(self.tw.tasks.pending()) == 1 + + task = self.tw.tasks.pending()[0] + assert task['tags'] == set(['work', 'easy']) + + +class TestPresetSeparateDefaults(MultiSyntaxIntegrationTest): + + viminput = """ + HEADER1(Work tasks || +work or +play || +work) + * [ ] This is a test task + """ + + vimoutput = """ + HEADER1(Work tasks || +work or +play || +work) + * [ ] This is a test task #{uuid} + """ + + def execute(self): + self.command('w', regex='written$', lines=1) + + # Check that only one tasks with this description exists + assert len(self.tw.tasks.pending()) == 1 + + task = self.tw.tasks.pending()[0] + assert task['tags'] == set(['work']) + + +class TestPresetNestedDefaults(MultiSyntaxIntegrationTest): + + viminput = """ + HEADER2(Work tasks || +work) + HEADER3(Hard work || +hard) + * [ ] This is a test task + """ + + vimoutput = """ + HEADER2(Work tasks || +work) + HEADER3(Hard work || +hard) + * [ ] This is a test task #{uuid} + """ + + def execute(self): + self.command('w', regex='written$', lines=1) + + # Check that only one tasks with this description exists + assert len(self.tw.tasks.pending()) == 1 + + task = self.tw.tasks.pending()[0] + assert task['tags'] == set(['work', 'hard']) + + +class TestPresetViewport(MultiSyntaxIntegrationTest): + + viminput = """ + HEADER2(Work tasks || +work) + HEADER3(Hard work | +hard) + """ + + vimoutput = """ + HEADER2(Work tasks || +work) + HEADER3(Hard work | +hard) + * [ ] tag hard work task #{uuid} + """ + + tasks = [ + dict(description="tag hard work task", tags=['work', 'hard']), + dict(description="tag easy work task", tags=['work', 'easy']), + dict(description="tag any work task", tags=['work']), + dict(description="tag no work task", tags=['play', 'hard']) + ] + + def execute(self): + self.command("w", regex="written$", lines=1) + + +class TestPresetIgnoreViewport(MultiSyntaxIntegrationTest): + + viminput = """ + HEADER2(Work tasks | +work) + HEADER3(Hard work || +hard) + * [ ] This is a test task + """ + + vimoutput = """ + HEADER2(Work tasks | +work) + HEADER3(Hard work || +hard) + * [ ] This is a test task #{uuid} + """ + + def execute(self): + self.command('w', regex='written$', lines=1) + + # Check that only one tasks with this description exists + assert len(self.tw.tasks.pending()) == 1 + + task = self.tw.tasks.pending()[0] + assert task['tags'] == set(['hard']) + + +class TestPresetViewportDefaultsYesNo(MultiSyntaxIntegrationTest): + + viminput = """ + HEADER2(Work tasks || project:Work or project:Play || project:Work) + HEADER3(Hard work | +hard) + * [ ] This is a test task + """ + + vimoutput = """ + HEADER2(Work tasks || project:Work or project:Play || project:Work) + HEADER3(Hard work | +hard) + * [ ] This is a test task #{uuid} + """ + + def execute(self): + self.command('w', regex='written$', lines=1) + + # Check that only one tasks with this description exists + assert len(self.tw.tasks.pending()) == 1 + + task = self.tw.tasks.pending()[0] + assert task['tags'] == set(['hard']) + assert task['project'] == 'Work' + + +class TestPresetViewportDefaultsNoYes(MultiSyntaxIntegrationTest): + + viminput = """ + HEADER2(Work tasks || project:Work) + HEADER3(Hard work | +hard or +easy | +hard) + * [ ] This is a test task + """ + + vimoutput = """ + HEADER2(Work tasks || project:Work) + HEADER3(Hard work | +hard or +easy | +hard) + * [ ] This is a test task #{uuid} + """ + + def execute(self): + self.command('w', regex='written$', lines=1) + + # Check that only one tasks with this description exists + assert len(self.tw.tasks.pending()) == 1 + + task = self.tw.tasks.pending()[0] + assert task['tags'] == set(['hard']) + assert task['project'] == 'Work' + + +class TestPresetViewportDefaultsYesYes(MultiSyntaxIntegrationTest): + + viminput = """ + HEADER2(Work tasks || project:Work or project:Play || project:Work) + HEADER3(Hard work | +hard or +easy | +hard) + * [ ] This is a test task + """ + + vimoutput = """ + HEADER2(Work tasks || project:Work or project:Play || project:Work) + HEADER3(Hard work | +hard or +easy | +hard) + * [ ] This is a test task #{uuid} + """ + + def execute(self): + self.command('w', regex='written$', lines=1) + + # Check that only one tasks with this description exists + assert len(self.tw.tasks.pending()) == 1 + + task = self.tw.tasks.pending()[0] + assert task['tags'] == set(['hard']) + assert task['project'] == 'Work' + + +class TestPresetDefaultPreservesTags(MultiSyntaxIntegrationTest): + + viminput = """ + HEADER2(Work tasks || +work) + HEADER3(Work tasks | +hard) + * [ ] hard task + """ + + vimoutput = """ + HEADER2(Work tasks || +work) + HEADER3(Work tasks | +hard) + * [ ] hard task #{uuid} + """ + + def execute(self): + self.command("w", regex="written$", lines=1) + + # Make sure both tags were preserved + task = self.tw.tasks.pending()[0] + assert task['description'] == 'hard task' + assert task['status'] == 'pending' + assert task['tags'] == set(['work', 'hard']) + + +class TestPresetExpires(MultiSyntaxIntegrationTest): + + viminput = """ + HEADER2(Work tasks || !2020-01-01) + HEADER3(Work tasks |) + * [ ] old task + """ + + vimoutput = """ + HEADER2(Work tasks || !2020-01-01) + HEADER3(Work tasks |) + * [ ] old task + """ + + tasks = [ + dict(description="task 1"), + dict(description="task 2"), + dict(description="task 3"), + dict(description="task 4"), + ] + + def execute(self): + # Generate the tasks + self.command("w", regex="written$", lines=1) + + +class TestPresetExpiresWithOverridingViewport(MultiSyntaxIntegrationTest): + + viminput = """ + HEADER2(Work tasks || !2020-01-01) + HEADER3(Work tasks | $T !2500-01-01) + * [ ] old task + """ + + vimoutput = """ + HEADER2(Work tasks || !2020-01-01) + HEADER3(Work tasks | $T !2500-01-01) + * [ ] old task #{uuid} + * [ ] task 1 #{uuid} + * [ ] task 2 #{uuid} + * [ ] task 3 #{uuid} + * [ ] task 4 #{uuid} + """ + + tasks = [ + dict(description="task 1"), + dict(description="task 2"), + dict(description="task 3"), + dict(description="task 4"), + ] + + def execute(self): + # Define the ordering T + self.command('let g:taskwiki_sort_orders={"T": "description"}') + + # Generate the tasks + self.command("w", regex="written$", lines=1) diff --git a/.config/vim/bundle/taskwiki/tests/test_preset_parsing.py b/.config/vim/bundle/taskwiki/tests/test_preset_parsing.py new file mode 100644 index 0000000..d208612 --- /dev/null +++ b/.config/vim/bundle/taskwiki/tests/test_preset_parsing.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +from tests.base import MockVim, MockCache +import sys + + +class TestParsingPresetHeader(object): + def setup_method(self): + self.mockvim = MockVim() + self.cache = MockCache() + + sys.modules['vim'] = self.mockvim + from taskwiki.preset import PresetHeader + self.PresetHeader = PresetHeader + + def teardown_method(self): + self.mockvim.reset() + self.cache.reset() + + def process_preset_header(self, preset_header, test_syntax): + """ + Expands the example preset_header to a syntax of a markup and pass on to + MockVim to be processed. + The result of the processed preset_header is collected. + """ + markup, header_expand = test_syntax + formatted_preset_header = header_expand(preset_header) + print(formatted_preset_header) + + self.cache.markup_syntax = markup + self.cache.buffer[0] = formatted_preset_header + header = self.PresetHeader.from_line(0, self.cache) + return header + + def test_simple(self, test_syntax): + preset_header = "HEADER2(Test || project:Home)" + header = self.process_preset_header(preset_header, test_syntax) + + assert header.taskfilter == ["(", "project:Home", ")"] + assert header.defaults == {'project': 'Home'} + + def test_defaults(self, test_syntax): + preset_header = "HEADER2(Test || project:Home || +home)" + header = self.process_preset_header(preset_header, test_syntax) + + assert header.taskfilter == ["(", "project:Home", ")"] + assert header.defaults == {'tags': ['home']} + + def test_expires(self, test_syntax): + preset_header = "HEADER2(Test || project:Home !2020-01-01)" + header = self.process_preset_header(preset_header, test_syntax) + + assert header.taskfilter == ["(", "project:Home", ")"] + assert header.defaults == {"project": "Home"} + assert header.expires == "2020-01-01" diff --git a/.config/vim/bundle/taskwiki/tests/test_selected.py b/.config/vim/bundle/taskwiki/tests/test_selected.py new file mode 100644 index 0000000..09436b1 --- /dev/null +++ b/.config/vim/bundle/taskwiki/tests/test_selected.py @@ -0,0 +1,1372 @@ +import re + +from datetime import datetime +from tests.base import IntegrationTest + + +class TestAnnotateAction(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.command( + "TaskWikiAnnotate This is annotation.", + regex="Task \"test task 1\" annotated.$", + lines=1) + + self.tasks[0].refresh() + annotation = self.tasks[0]['annotations'] + assert annotation != [] + assert annotation[0]['description'] == "This is annotation." + + +class TestAnnotateActionManually(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.feedkeys(":TaskWikiAnnotate\\") + self.client.feedkeys("This is typed annotation.\\") + self.client.eval('0') # wait for command completion + + self.tasks[0].refresh() + annotation = self.tasks[0]['annotations'] + assert annotation != [] + assert annotation[0]['description'] == "This is typed annotation." + + +class TestAnnotateActionManuallyAbort(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + # Start entering the annotation but bail out + self.client.feedkeys(":TaskWikiAnnotate\\") + self.client.type("") + self.client.eval('0') # wait for command completion + + # Refresh and check no annotation has been added + self.tasks[0].refresh() + annotation = self.tasks[0]['annotations'] + assert annotation == [] + + # Assert that proper feedback has been shown + self.command('messages', regex="Input must be provided.") + + +class TestAnnotateActionMoved(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.type('2gg') # Go to the second line + self.command( + "TaskWikiAnnotate This is annotation.", + regex="Task \"test task 2\" annotated.$", + lines=1) + + self.tasks[1].refresh() + annotation = self.tasks[1]['annotations'] + assert annotation != [] + assert annotation[0]['description'] == "This is annotation." + + +class TestAnnotateActionRange(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.type('V2gg') # Go to the second line + self.client.feedkeys(":TaskWikiAnnotate This is annotation.\\") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + annotation = self.tasks[0]['annotations'] + assert annotation != [] + assert annotation[0]['description'] == "This is annotation." + + annotation = self.tasks[1]['annotations'] + assert annotation != [] + assert annotation[0]['description'] == "This is annotation." + + +class TestAnnotateActionRedo(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + # Annotate the first task + self.command( + "TaskWikiAnnotate This is annotation.", + regex="Task \"test task 1\" annotated.$", + lines=1) + + self.tasks[0].refresh() + annotation = self.tasks[0]['annotations'] + assert annotation != [] + assert annotation[0]['description'] == "This is annotation." + + # Now also annotate the second task + self.client.type('j') + self.command("TaskWikiRedo", regex="Task \"test task 2\" annotated.$", + lines=1) + + +class TestDeleteAction(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.command( + "TaskWikiDelete", + regex="Task \"test task 1\" deleted.$", + lines=1) + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['status'] == "deleted" + assert self.tasks[1]['status'] == "pending" + + +class TestDeleteActionMoved(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.type('2gg') + self.command( + "TaskWikiDelete", + regex="Task \"test task 2\" deleted.$", + lines=1) + + for task in self.tasks: + task.refresh() + + assert self.tasks[1]['status'] == "deleted" + assert self.tasks[0]['status'] == "pending" + + +class TestDeleteActionRange(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.normal('1gg') + self.client.normal('VG') + self.client.feedkeys(":TaskWikiDelete\\") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + assert self.tasks[1]['status'] == "deleted" + assert self.tasks[0]['status'] == "deleted" + + +class TestDeleteActionRedo(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + # Delete the first task + self.command( + "TaskWikiDelete", + regex="Task \"test task 1\" deleted.$", + lines=1 + ) + + # Now also delete the second task + self.command( + "TaskWikiRedo", + regex="Task \"test task 2\" deleted.$", + lines=1 + ) + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['status'] == "deleted" + assert self.tasks[1]['status'] == "deleted" + + +class TestInfoAction(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.command("TaskWikiInfo") + + assert self.py("print(vim.current.buffer)", silent=False).startswith("") + self.client.eval('0') # wait for command completion + + assert self.py("print(vim.current.buffer)", silent=False).startswith("") + self.client.eval('0') # wait for command completion + + # Make sure we have been sent to a new buffer + output = '\n'.join(self.read_buffer()) + + assert not self.py("print(vim.current.buffer)", silent=False).startswith("") + self.client.eval('0') # wait for command completion + + assert self.py("print(vim.current.buffer)", silent=False).startswith("") + self.client.eval('0') # wait for command completion + + backlink = "wiki: {0}".format(self.filepath) + + for task in self.tasks: + task.refresh() + + annotation = self.tasks[0]['annotations'] + assert annotation != [] + assert annotation[0]['description'] == backlink + + annotation = self.tasks[1]['annotations'] + assert annotation != [] + assert annotation[0]['description'] == backlink + + +class TestLinkActionRedo(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + # Link the first task + self.command( + "TaskWikiLink", + regex="Task \"test task 1\" linked.$", + lines=1 + ) + + # Now also link the second task + self.client.type('j') + self.command( + "TaskWikiRedo", + regex="Task \"test task 2\" linked.$", + lines=1 + ) + + backlink = "wiki: {0}".format(self.filepath) + + # Assert the backlink on the first task + self.tasks[0].refresh() + annotation = self.tasks[0]['annotations'] + assert annotation != [] + assert annotation[0]['description'] == backlink + + # Assert the backlink on the second task + self.tasks[1].refresh() + annotation = self.tasks[1]['annotations'] + assert annotation != [] + assert annotation[0]['description'] == backlink + + +class TestStartAction(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [S] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.command( + "TaskWikiStart", + regex="Task \"test task 1\" started.$", + lines=1) + + for task in self.tasks: + task.refresh() + + now = datetime.now().astimezone() + + assert self.tasks[0]['status'] == "pending" + assert self.tasks[1]['status'] == "pending" + + assert (now - self.tasks[0]['start']).total_seconds() < 5 + assert (self.tasks[0]['start'] - now).total_seconds() < 5 + + assert self.tasks[1]['start'] == None + + +class TestToggleAction(IntegrationTest): + + viminput = """ + * [S] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [S] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1", start="now"), + dict(description="test task 2"), + ] + + def execute(self): + self.command( + "TaskWikiToggle", + regex="Task \"test task 1\" stopped.$", + lines=1) + + self.client.type('j') + self.command( + "TaskWikiToggle", + regex="Task \"test task 2\" started.$", + lines=1) + + for task in self.tasks: + task.refresh() + + now = datetime.now().astimezone() + + assert self.tasks[0]['status'] == "pending" + assert self.tasks[1]['status'] == "pending" + + assert self.tasks[0]['start'] == None + assert self.tasks[1]['start'] != None + + assert abs((now - self.tasks[1]['start']).total_seconds()) < 5 + + +class TestStartActionMoved(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [S] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.type('2gg') + self.command( + "TaskWikiStart", + regex="Task \"test task 2\" started.$", + lines=1) + + for task in self.tasks: + task.refresh() + + now = datetime.now().astimezone() + + assert self.tasks[0]['status'] == "pending" + assert self.tasks[1]['status'] == "pending" + + assert (now - self.tasks[1]['start']).total_seconds() < 5 + assert (self.tasks[1]['start'] - now).total_seconds() < 5 + + assert self.tasks[0]['start'] == None + + +class TestStartActionRange(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [S] test task 1 #{uuid} + * [S] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.normal('1gg') + self.client.normal('VG') + self.client.feedkeys(":TaskWikiStart\\") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + now = datetime.now().astimezone() + + assert self.tasks[0]['status'] == "pending" + assert self.tasks[1]['status'] == "pending" + + assert (now - self.tasks[0]['start']).total_seconds() < 5 + assert (self.tasks[0]['start'] - now).total_seconds() < 5 + + assert (now - self.tasks[1]['start']).total_seconds() < 5 + assert (self.tasks[1]['start'] - now).total_seconds() < 5 + + +class TestStartActionRedo(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [S] test task 1 #{uuid} + * [S] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + # Start the first task + self.command( + "TaskWikiStart", + regex="Task \"test task 1\" started.$", + lines=1 + ) + + # Now also start the second task + self.client.type('j') + self.command( + "TaskWikiRedo", + regex="Task \"test task 2\" started.$", + lines=1 + ) + + for task in self.tasks: + task.refresh() + + now = datetime.now().astimezone() + + assert self.tasks[0]['status'] == "pending" + assert self.tasks[1]['status'] == "pending" + + assert (now - self.tasks[0]['start']).total_seconds() < 5 + assert (self.tasks[0]['start'] - now).total_seconds() < 5 + + assert (now - self.tasks[1]['start']).total_seconds() < 5 + assert (self.tasks[1]['start'] - now).total_seconds() < 5 + + +class TestStopAction(IntegrationTest): + + viminput = """ + * [S] test task 1 #{uuid} + * [S] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [S] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1", start="now"), + dict(description="test task 2", start="now"), + ] + + def execute(self): + self.command( + "TaskWikiStop", + regex="Task \"test task 1\" stopped.$", + lines=1) + + for task in self.tasks: + task.refresh() + + now = datetime.now().astimezone() + + assert self.tasks[0]['status'] == "pending" + assert self.tasks[1]['status'] == "pending" + + assert (now - self.tasks[1]['start']).total_seconds() < 30 + assert (self.tasks[1]['start'] - now).total_seconds() < 30 + + assert self.tasks[0]['start'] == None + + +class TestStopActionMoved(IntegrationTest): + + viminput = """ + * [S] test task 1 #{uuid} + * [S] test task 2 #{uuid} + """ + + vimoutput = """ + * [S] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1", start="now"), + dict(description="test task 2", start="now"), + ] + + def execute(self): + self.client.type('2gg') + self.command( + "TaskWikiStop", + regex="Task \"test task 2\" stopped.$", + lines=1) + + for task in self.tasks: + task.refresh() + + now = datetime.now().astimezone() + + assert self.tasks[0]['status'] == "pending" + assert self.tasks[1]['status'] == "pending" + + assert (now - self.tasks[0]['start']).total_seconds() < 30 + assert (self.tasks[0]['start'] - now).total_seconds() < 30 + + assert self.tasks[1]['start'] == None + + +class TestStopActionRange(IntegrationTest): + + viminput = """ + * [S] test task 1 #{uuid} + * [S] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1", start="now"), + dict(description="test task 2", start="now"), + ] + + def execute(self): + self.client.normal('1gg') + self.client.normal('VG') + self.client.feedkeys(":TaskWikiStop\\") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['status'] == "pending" + assert self.tasks[1]['status'] == "pending" + + assert self.tasks[0]['start'] == None + assert self.tasks[1]['start'] == None + + +class TestStopActionRedo(IntegrationTest): + + viminput = """ + * [S] test task 1 #{uuid} + * [S] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1", start="now"), + dict(description="test task 2", start="now"), + ] + + def execute(self): + self.command( + "TaskWikiStop", + regex="Task \"test task 1\" stopped.$", + lines=1 + ) + + # Now also stop the second task + self.client.type('j') + self.command( + "TaskWikiRedo", + regex="Task \"test task 2\" stopped.$", + lines=1 + ) + + for task in self.tasks: + task.refresh() + + now = datetime.now().astimezone() + + assert self.tasks[0]['status'] == "pending" + assert self.tasks[1]['status'] == "pending" + + assert self.tasks[0]['start'] == None + assert self.tasks[1]['start'] == None + + +class TestModAction(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.command( + "TaskWikiMod project:Home", + regex="Modified 1 task.$", + lines=1) + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['project'] == "Home" + assert self.tasks[1]['project'] == None + + +class TestModActionRedo(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.command( + "TaskWikiMod project:Home", + regex="Modified 1 task.$", + lines=1 + ) + + # Now also modify the second task + self.client.type('j') + self.command( + "TaskWikiRedo", + regex="Modified 1 task.$", + lines=1 + ) + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['project'] == "Home" + assert self.tasks[1]['project'] == "Home" + + +class TestModInteractiveAction(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.feedkeys(":TaskWikiMod\\") + self.client.feedkeys("+work\\") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['tags'] == set(["work"]) + assert self.tasks[1]['tags'] == set() + + +class TestModInteractiveActionRedo(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.feedkeys(":TaskWikiMod\\") + self.client.feedkeys("+work\\") + self.client.eval('0') # wait for command completion + + # Now also modify the second task + self.client.type('j') + self.command( + "TaskWikiRedo", + regex="Modified 1 task.$", + lines=1 + ) + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['tags'] == set(["work"]) + assert self.tasks[1]['tags'] == set(["work"]) + + +class TestModVisibleAction(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + today = datetime.now().astimezone().replace(hour=0,minute=0,second=0,microsecond=0) + + self.command( + "TaskWikiMod due:today", + regex="Modified 1 task.$", + lines=1) + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['due'] == today + assert self.tasks[1]['due'] == None + + assert self.tasks[0]['status'] == "pending" + assert self.tasks[1]['status'] == "pending" + + +class TestModActionMoved(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.type('2gg') + self.command( + "TaskWikiMod project:Home", + regex="Modified 1 task.$", + lines=1) + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['project'] == None + assert self.tasks[1]['project'] == "Home" + + +class TestModActionRange(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.normal('1gg') + self.client.normal('VG') + self.client.feedkeys(":TaskWikiMod project:Home\\") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + assert self.tasks[0]['status'] == "pending" + assert self.tasks[1]['status'] == "pending" + + assert self.tasks[0]['project'] == "Home" + assert self.tasks[1]['project'] == "Home" + + +class TestDoneAction(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [X] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.command( + "TaskWikiDone", + regex="Task \"test task 1\" completed.$", + lines=1) + + for task in self.tasks: + task.refresh() + + now = datetime.now().astimezone() + + assert self.tasks[0]['status'] == "completed" + assert self.tasks[1]['status'] == "pending" + + assert (now - self.tasks[0]['end']).total_seconds() < 5 + assert (self.tasks[0]['end'] - now).total_seconds() < 5 + + assert self.tasks[1]['end'] == None + +class TestDoneNoSelected(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + + * [ ] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.type('2gg') + self.command( + "TaskWikiDone", + regex="No tasks selected.", + lines=1) + + assert self.tasks[0]['status'] == "pending" + assert self.tasks[1]['status'] == "pending" + + +class TestDoneActionMoved(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 1 #{uuid} + * [X] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.type('2gg') + self.command( + "TaskWikiDone", + regex="Task \"test task 2\" completed.$", + lines=1) + + for task in self.tasks: + task.refresh() + + now = datetime.now().astimezone() + + assert self.tasks[0]['status'] == "pending" + assert self.tasks[1]['status'] == "completed" + + assert (now - self.tasks[1]['end']).total_seconds() < 5 + assert (self.tasks[1]['end'] - now).total_seconds() < 5 + + assert self.tasks[0]['end'] == None + + +class TestDoneActionRange(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [X] test task 1 #{uuid} + * [X] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.normal('1gg') + self.client.normal('VG') + self.client.feedkeys(":TaskWikiDone\\") + self.client.eval('0') # wait for command completion + + for task in self.tasks: + task.refresh() + + now = datetime.now().astimezone() + + assert self.tasks[0]['status'] == "completed" + assert self.tasks[1]['status'] == "completed" + + assert (now - self.tasks[0]['end']).total_seconds() < 5 + assert (self.tasks[0]['end'] - now).total_seconds() < 5 + + assert (now - self.tasks[1]['end']).total_seconds() < 5 + assert (self.tasks[1]['end'] - now).total_seconds() < 5 + + +class TestDoneActionRedo(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [X] test task 1 #{uuid} + * [X] test task 2 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.command( + "TaskWikiDone", + regex="Task \"test task 1\" completed.$", + lines=1 + ) + + # Now also finish the second task + self.client.type('j') + self.command( + "TaskWikiRedo", + regex="Task \"test task 2\" completed.$", + lines=1 + ) + + for task in self.tasks: + task.refresh() + + now = datetime.now().astimezone() + + assert self.tasks[0]['status'] == "completed" + assert self.tasks[1]['status'] == "completed" + + assert (now - self.tasks[0]['end']).total_seconds() < 5 + assert (self.tasks[0]['end'] - now).total_seconds() < 5 + + assert (now - self.tasks[1]['end']).total_seconds() < 5 + assert (self.tasks[1]['end'] - now).total_seconds() < 5 + + +class TestSortManually(IntegrationTest): + + viminput = """ + * [ ] test task 1 #{uuid} + * [ ] test task 2 #{uuid} + """ + + vimoutput = """ + * [ ] test task 2 #{uuid} + * [ ] test task 1 #{uuid} + """ + + tasks = [ + dict(description="test task 1"), + dict(description="test task 2"), + ] + + def execute(self): + self.client.normal('1gg') + self.client.normal('VG') + self.client.feedkeys(":TaskWikiSort description-\\") + +class TestSelectAfterBufferSwitch(IntegrationTest): + + viminput = """ + * [ ] test task #{uuid} + """ + + vimoutput = """ + * [ ] test task #{uuid} + """ + + tasks = [ + dict(description="test task"), + ] + + def execute(self): + self.command('w', silent=False) + self.command('split testwiki2.txt', silent=False) + self.command('q!') + self.client.normal('1gg') + self.command("TaskWikiMod project:Home", regex="Modified 1 task.") + + self.tasks[0].refresh() + assert self.tasks[0]['project'] == "Home" diff --git a/.config/vim/bundle/taskwiki/tests/test_splits.py b/.config/vim/bundle/taskwiki/tests/test_splits.py new file mode 100644 index 0000000..05b0f96 --- /dev/null +++ b/.config/vim/bundle/taskwiki/tests/test_splits.py @@ -0,0 +1,287 @@ +import re + +from tests.base import IntegrationTest +from datetime import datetime + + +def current_year(): + return datetime.now().astimezone().year + + +def current_month(): + current_month_number = datetime.now().astimezone().month + months = ["January", "February", "March", "April", + "May", "June", "July", "August", + "September", "October", "November", "December"] + + return months[current_month_number - 1] + + +class TestBurndownDailySimple(IntegrationTest): + + def execute(self): + self.command("TaskWikiBurndownDaily") + assert self.py("print(vim.current.buffer)", silent=False).startswith("= '2.4.2' else '1']) + chores = r'\s*'.join(['Chores', '2']) + work = r'\s*'.join(['Work', '2']) + + assert re.search(header, output, re.MULTILINE) + assert re.search(home, output, re.MULTILINE) + assert re.search(chores, output, re.MULTILINE) + assert re.search(work, output, re.MULTILINE) + + +class TestSummarySimple(IntegrationTest): + + tasks = [ + dict(description="home task", project="Home"), + dict(description="home chore task 1", project="Home.Chores"), + dict(description="home chore task 2", project="Home.Chores"), + dict(description="work task 1", project="Work"), + dict(description="work task 2", project="Work"), + ] + + def execute(self): + self.command("TaskWikiProjectsSummary") + assert self.py("print(vim.current.buffer)", silent=False).startswith("= '2.4.2' else '1']) + chores = r'\s*'.join(['Chores', '2']) + work = r'\s*'.join(['Work', '2']) + + assert re.search(header, output, re.MULTILINE) + assert re.search(home, output, re.MULTILINE) + assert re.search(chores, output, re.MULTILINE) + assert re.search(work, output, re.MULTILINE) + + +class TestStatsSimple(IntegrationTest): + + tasks = [ + dict(description="home task"), + dict(description="home chore task 1", tags=['chore']), + dict(description="home chore task 2", tags=['chore']), + dict(description="work task 1", tags=['work']), + dict(description="work task 2", tags=['work']), + ] + + def execute(self): + self.command("TaskWikiStats") + assert self.py("print(vim.current.buffer)", silent=False).startswith("p") + + self.command("TaskWikiBurndownDaily") + assert self.py("print(vim.current.buffer)", silent=False).startswith("') + self.client.eval('0') # wait for command completion + + assert self.py("print(vim.current.buffer)", regex="') + self.client.eval('0') # wait for command completion + + assert self.py("print(vim.current.buffer)", regex="} +:icons: font +:toc: + +$0 +endsnippet + +snippet source "Add a source code block" b +[source,${1:language}] +---- +$0 +---- +endsnippet + +snippet quote "Add a quote block" b +[quote, ${1:Name}${2:, ${3:Occasion}}] +____ +$0 +____ +endsnippet diff --git a/.config/vim/bundle/vim-asciidoc/ftdetect/asciidoc_filetype.vim b/.config/vim/bundle/vim-asciidoc/ftdetect/asciidoc_filetype.vim new file mode 100644 index 0000000..bf1f379 --- /dev/null +++ b/.config/vim/bundle/vim-asciidoc/ftdetect/asciidoc_filetype.vim @@ -0,0 +1,54 @@ +" Vim filetype detection file +" Language: AsciiDoc +" Author: Stuart Rackham +" Last Change: AsciiDoc 8.2.0 +" URL: http://www.methods.co.nz/asciidoc/ +" Licence: GPL (http://www.gnu.org) +" Remarks: Vim 6 or greater + +" COMMENT OUT ONE OF THE TWO FOLLOWING COMMANDS +" The first sets asciidoc syntax highlighting on all .txt files, the second +" only existing files *.txt that appear to be AsciiDoc files. + +au BufNewFile,BufRead *.asciidoc,*.adoc setfiletype asciidoc +"au BufNewFile,BufRead *.asciidoc,*.txt,README,TODO,CHANGELOG,NOTES setfiletype asciidoc +"au BufRead *.txt,README,TODO,CHANGELOG,NOTES call s:FTasciidoc() + +" This function checks for a valid AsciiDoc document title after first +" skipping any leading comments. +function! s:FTasciidoc() + let in_comment_block = 0 + let n = 1 + while n < 50 + let line = getline(n) + let n = n + 1 + if line =~ '^/\{4,}$' + if ! in_comment_block + let in_comment_block = 1 + else + let in_comment_block = 0 + endif + continue + endif + if in_comment_block + continue + endif + if line !~ '\(^//\)\|\(^\s*$\)' + break + endif + endwhile + if line !~ '.\{3,}' + return + endif + let len = len(line) + let line = getline(n) + if line !~ '[-=]\{3,}' + return + endif + if len < len(line) - 3 || len > len(line) + 3 + return + endif + setfiletype asciidoc +endfunction + +" vim: et sw=2 ts=2 sts=2: diff --git a/.config/vim/bundle/vim-asciidoc/ftplugin/asciidoc.vim b/.config/vim/bundle/vim-asciidoc/ftplugin/asciidoc.vim new file mode 100644 index 0000000..d4fc0aa --- /dev/null +++ b/.config/vim/bundle/vim-asciidoc/ftplugin/asciidoc.vim @@ -0,0 +1,31 @@ +" The fold-detection is based on the vim-markdown script +" from https://github.com/plasticboy/vim-markdown +" +" Comments are supported as well + +func! Foldexpr_asciidoc(lnum) + let l0 = getline(a:lnum) + + if l0 =~ '^=' + " current line starts with = + return '>'.matchend(l0, '^=\+') + else + " keep previous foldlevel + return '=' + endif +endfunc + +if !get(g:, "vim_asciidoc_folding_disabled", 0) + setlocal foldexpr=Foldexpr_asciidoc(v:lnum) + setlocal foldmethod=expr + + " allow the initial foldlevel to be configured in .vimrc + if !exists("g:vim_asciidoc_initial_foldlevel") + let g:vim_asciidoc_initial_foldlevel=0 + endif + let &l:foldlevel=g:vim_asciidoc_initial_foldlevel +endif + +setlocal commentstring=//\ %s +setlocal comments=fl:////,:// + diff --git a/.config/vim/bundle/vim-css-color/after/syntax/c.vim b/.config/vim/bundle/vim-css-color/after/syntax/c.vim new file mode 100644 index 0000000..d87f75d --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/c.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'none', 'cComment,cCommentL,cString,cCppString') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/cfg.vim b/.config/vim/bundle/vim-css-color/after/syntax/cfg.vim new file mode 100644 index 0000000..9261fc0 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/cfg.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'none', 'CfgComment,CfgString') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/clojure.vim b/.config/vim/bundle/vim-css-color/after/syntax/clojure.vim new file mode 100644 index 0000000..c708985 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/clojure.vim @@ -0,0 +1,2 @@ +let [type, keywords] = expand('%:e') ==? 'cljs' ? ['css', 'extended'] : ['hex', 'none'] +call css_color#init(type, keywords, 'clojureComment,clojureString') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/csh.vim b/.config/vim/bundle/vim-css-color/after/syntax/csh.vim new file mode 100644 index 0000000..2ce84d0 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/csh.vim @@ -0,0 +1,4 @@ +syn match cshCommentColor contained '\(#[^#]*\)\@<=\zs#\x\{3}\%(\x\{3}\)\?\>' containedin=cshComment +call css_color#init( 'hex', 'none' + \, 'cshDblQuote,cshSnglQuote,cshHereDoc,' + \. 'cshCommentColor' ) diff --git a/.config/vim/bundle/vim-css-color/after/syntax/css.vim b/.config/vim/bundle/vim-css-color/after/syntax/css.vim new file mode 100644 index 0000000..1b45f23 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/css.vim @@ -0,0 +1 @@ +call css_color#init('css', 'extended', 'cssMediaBlock,cssFunction,cssDefinition,cssAttrRegion,cssComment') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/dosini.vim b/.config/vim/bundle/vim-css-color/after/syntax/dosini.vim new file mode 100644 index 0000000..102bc91 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/dosini.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'none', 'dosiniValue') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/elm.vim b/.config/vim/bundle/vim-css-color/after/syntax/elm.vim new file mode 100644 index 0000000..9e60d62 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/elm.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'none', 'elmLineComment,elmString') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/fish.vim b/.config/vim/bundle/vim-css-color/after/syntax/fish.vim new file mode 100644 index 0000000..f0e7db9 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/fish.vim @@ -0,0 +1,3 @@ +" https://github.com/dag/vim-fish (and presumably its various forks) +syn match fishCommentColor contained '\(#[^#]*\)\@<=\zs#\x\{3}\%(\x\{3}\)\?\>' containedin=fishComment +call css_color#init( 'hex', 'none', 'fishString,fishCommentColor' ) diff --git a/.config/vim/bundle/vim-css-color/after/syntax/go.vim b/.config/vim/bundle/vim-css-color/after/syntax/go.vim new file mode 100644 index 0000000..24a8c45 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/go.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'none', 'goComment,goString,goRawString') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/html.vim b/.config/vim/bundle/vim-css-color/after/syntax/html.vim new file mode 100644 index 0000000..5452276 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/html.vim @@ -0,0 +1,2 @@ +" default html syntax should already be including the css syntax +call css_color#init('none', 'none', 'htmlString,htmlCommentPart') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/i3.vim b/.config/vim/bundle/vim-css-color/after/syntax/i3.vim new file mode 100644 index 0000000..e56050f --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/i3.vim @@ -0,0 +1,4 @@ +" see also: i3config.vim for the stock Vim 8.2+ syntax +" Colour => https://github.com/moon-musick/vim-i3-config-syntax +" i3* => https://github.com/PotatoesMaster/i3-vim-syntax +call css_color#init('hex', 'none', 'Colour,i3SimpleString,i3Color1st,i3Color2nd,i3ColorLast') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/i3config.vim b/.config/vim/bundle/vim-css-color/after/syntax/i3config.vim new file mode 100644 index 0000000..5043952 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/i3config.vim @@ -0,0 +1,3 @@ +" i3ConfigColor => stock Vim syntax and recent https://github.com/mboughaba/i3config.vim +" Color => https://github.com/mboughaba/i3config.vim prior to dff3b177ebaf6aae35591cd4c9c734fff9ed7145 +call css_color#init('hex', 'none', 'i3ConfigColor,Color') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/javascript.vim b/.config/vim/bundle/vim-css-color/after/syntax/javascript.vim new file mode 100644 index 0000000..84558ac --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/javascript.vim @@ -0,0 +1,14 @@ +" ft=coffee includes javascript, but mostly sets up own syntax groups +" so until it has specific support there's no point in loading anyway +" and for some reason the W3C syntax color keywords break its highlighting +" (this refers to the https://github.com/kchmck/vim-coffee-script plugin) +if &syntax =~# '\(^\|\.\)coffee\($\|\.\)' | finish | endif + +" javaScriptX = default Vim syntax +" jsX = https://github.com/pangloss/vim-javascript +" javascriptX = https://github.com/othree/yajs.vim +call css_color#init('hex', 'extended' + \, 'javaScriptComment,javaScriptLineComment,javaScriptStringS,javaScriptStringD,javaScriptStringT' + \. ',jsComment,jsString,jsTemplateString,jsObjectKeyString,jsObjectStringKey,jsClassStringKey' + \. ',javascriptComment,javascriptLineComment,javascriptLineComment,javascriptString,javascriptTemplate' + \) diff --git a/.config/vim/bundle/vim-css-color/after/syntax/json.vim b/.config/vim/bundle/vim-css-color/after/syntax/json.vim new file mode 100644 index 0000000..f7b5fad --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/json.vim @@ -0,0 +1 @@ +call css_color#init('css', 'none', 'jsonString') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/jsx.vim b/.config/vim/bundle/vim-css-color/after/syntax/jsx.vim new file mode 100644 index 0000000..322bc49 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/jsx.vim @@ -0,0 +1,3 @@ +" jsx syntax should already be including the javascript and xml syntaxes +" but those only use `hex` parsing; JSX needs `css` for inline CSS styles +call css_color#init('css', 'none', '') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/kitty.vim b/.config/vim/bundle/vim-css-color/after/syntax/kitty.vim new file mode 100644 index 0000000..8acaed0 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/kitty.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'none', 'kittyColor') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/less.vim b/.config/vim/bundle/vim-css-color/after/syntax/less.vim new file mode 100644 index 0000000..0f39b91 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/less.vim @@ -0,0 +1,8 @@ +" variable | property | multiline | end-of-line | plugin +" -----------------------+----------------+----------------+-------------+--------- +" lessCssAttribute | lessCssComment | lessComment | https://github.com/genoma/vim-less +" lessAttribute | lessCssComment | lessComment | https://github.com/KohPoll/vim-less +" lessVariableValue | lessDefinition | cssComment | lessComment | https://github.com/groenewege/vim-less +" lessVariableDefinition | cssDefinition | cssComment | lessComment | https://github.com/lunaru/vim-less + +call css_color#init('css', 'extended', 'lessVariableValue,lessVariableDefinition,lessDefinition,lessCssAttribute,lessAttribute,cssDefinition,cssComment,lessCssComment,lessComment') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/moon.vim b/.config/vim/bundle/vim-css-color/after/syntax/moon.vim new file mode 100644 index 0000000..cb32815 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/moon.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'extended', 'moonComment,moonString') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/nix.vim b/.config/vim/bundle/vim-css-color/after/syntax/nix.vim new file mode 100644 index 0000000..d2ffdbb --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/nix.vim @@ -0,0 +1,2 @@ +" https://github.com/LnL7/vim-nix +call css_color#init('hex', 'none', 'nixComment,nixString,nixSimpleString') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/perl.vim b/.config/vim/bundle/vim-css-color/after/syntax/perl.vim new file mode 100644 index 0000000..09f57e8 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/perl.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'none', 'perlComment,perlDATA,perlString,perlStringUnexpanded,perlQQ,perlHereDoc') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/php.vim b/.config/vim/bundle/vim-css-color/after/syntax/php.vim new file mode 100644 index 0000000..7c86eb3 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/php.vim @@ -0,0 +1 @@ +call css_color#init('css', 'basic', 'phpComment,phpStringSingle,phpStringDouble') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/python.vim b/.config/vim/bundle/vim-css-color/after/syntax/python.vim new file mode 100644 index 0000000..08104d7 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/python.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'none', 'pythonComment,pythonString') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/qml.vim b/.config/vim/bundle/vim-css-color/after/syntax/qml.vim new file mode 100644 index 0000000..5503f20 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/qml.vim @@ -0,0 +1 @@ +call css_color#init('css', 'extended', 'qmlStringD') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/r.vim b/.config/vim/bundle/vim-css-color/after/syntax/r.vim new file mode 100644 index 0000000..32ae58b --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/r.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'extended', 'rComment,rString') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/rasi.vim b/.config/vim/bundle/vim-css-color/after/syntax/rasi.vim new file mode 100644 index 0000000..103a9ea --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/rasi.vim @@ -0,0 +1,4 @@ +" https://github.com/Fymyte/rasi.vim +call css_color#init('css', 'extended' + \, 'rasiHexColor,rasiRGBColor,rasiRGBAColor,rasiHSLColor,rasiHSLAColor,rasiNamedColor' + \. ',rasiPropertyVal,rasiComment,rasiCommentL,rasiEnvVar,rasiVarReference') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/ruby.vim b/.config/vim/bundle/vim-css-color/after/syntax/ruby.vim new file mode 100644 index 0000000..5a930a6 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/ruby.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'none', 'rubyComment,rubyData,rubyString') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/sass.vim b/.config/vim/bundle/vim-css-color/after/syntax/sass.vim new file mode 100644 index 0000000..79f8bc0 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/sass.vim @@ -0,0 +1 @@ +call css_color#init('css', 'extended', 'sassCssAttribute,sassComment,sassCssComment') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/scss.vim b/.config/vim/bundle/vim-css-color/after/syntax/scss.vim new file mode 100644 index 0000000..57569b1 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/scss.vim @@ -0,0 +1 @@ +call css_color#init('css', 'extended', 'scssAttribute,scssComment,scssVariableValue,scssMap,scssMapValue,sassCssAttribute,cssComment') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/sh.vim b/.config/vim/bundle/vim-css-color/after/syntax/sh.vim new file mode 100644 index 0000000..8d7d618 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/sh.vim @@ -0,0 +1,6 @@ +syn match shCommentColor contained '\(#[^#]*\)\@<=\zs#\x\{3}\%(\x\{3}\)\?\>' containedin=shQuickComment,shBQComment,shComment +call css_color#init( 'hex', 'none' + \, 'shSingleQuote,shDoubleQuote,shHereDoc,' + \. 'shTestSingleQuote,shTestDoubleQuote,' + \. 'shEchoQuote,shEmbeddedEcho,shEcho,' + \. 'shCommentColor' ) diff --git a/.config/vim/bundle/vim-css-color/after/syntax/stylus.vim b/.config/vim/bundle/vim-css-color/after/syntax/stylus.vim new file mode 100644 index 0000000..0aca85e --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/stylus.vim @@ -0,0 +1 @@ +call css_color#init('css', 'extended', 'stylusCssAttribute,stylusComment,cssComment') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/tcsh.vim b/.config/vim/bundle/vim-css-color/after/syntax/tcsh.vim new file mode 100644 index 0000000..ce7db7d --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/tcsh.vim @@ -0,0 +1,4 @@ +syn match tcshCommentColor contained '\(#[^#]*\)\@<=\zs#\x\{3}\%(\x\{3}\)\?\>' containedin=tcshComment +call css_color#init( 'hex', 'none' + \, 'tcshSQuote,tcshDQuote,tcshHereDoc,' + \. 'tcshCommentColor' ) diff --git a/.config/vim/bundle/vim-css-color/after/syntax/tmux.vim b/.config/vim/bundle/vim-css-color/after/syntax/tmux.vim new file mode 100644 index 0000000..666f16c --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/tmux.vim @@ -0,0 +1 @@ +call css_color#init('css', 'none', 'tmuxString,tmuxComment') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/typescript.vim b/.config/vim/bundle/vim-css-color/after/syntax/typescript.vim new file mode 100644 index 0000000..301425d --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/typescript.vim @@ -0,0 +1,6 @@ +" https://github.com/HerringtonDarkholme/yats.vim (stock Vim syntax) +" https://github.com/leafgarland/typescript-vim +call css_color#init('css', 'extended' + \, 'typescriptString,typescriptStringProperty,typescriptStringS,typescriptStringD,typescriptStringB,' + \. 'typescriptComment,typescriptLineComment,typescriptCommentSkip,typescriptDocComment' + \) diff --git a/.config/vim/bundle/vim-css-color/after/syntax/typescriptreact.vim b/.config/vim/bundle/vim-css-color/after/syntax/typescriptreact.vim new file mode 100644 index 0000000..da45708 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/typescriptreact.vim @@ -0,0 +1 @@ +runtime after/syntax/typescript.vim diff --git a/.config/vim/bundle/vim-css-color/after/syntax/vala.vim b/.config/vim/bundle/vim-css-color/after/syntax/vala.vim new file mode 100644 index 0000000..8b7b104 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/vala.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'extended', 'valaString') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/vim.vim b/.config/vim/bundle/vim-css-color/after/syntax/vim.vim new file mode 100644 index 0000000..bcb1986 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/vim.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'none', 'vimHiGuiRgb,vimString,vimComment,vimLineComment') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/xdefaults.vim b/.config/vim/bundle/vim-css-color/after/syntax/xdefaults.vim new file mode 100644 index 0000000..e15ceb5 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/xdefaults.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'extended', 'xdefaultsValue') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/xml.vim b/.config/vim/bundle/vim-css-color/after/syntax/xml.vim new file mode 100644 index 0000000..a6e11fa --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/xml.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'none', 'xmlComment,xmlCommentPart,xmlString') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/yaml.vim b/.config/vim/bundle/vim-css-color/after/syntax/yaml.vim new file mode 100644 index 0000000..2193fa2 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/yaml.vim @@ -0,0 +1 @@ +call css_color#init('hex', 'extended', 'yamlComment,yamlFlowString,yamlPlainScalar') diff --git a/.config/vim/bundle/vim-css-color/after/syntax/zsh.vim b/.config/vim/bundle/vim-css-color/after/syntax/zsh.vim new file mode 100644 index 0000000..8f89ebb --- /dev/null +++ b/.config/vim/bundle/vim-css-color/after/syntax/zsh.vim @@ -0,0 +1,4 @@ +syn match zshCommentColor contained '\(#[^#]*\)\@<=\zs#\x\{3}\%(\x\{3}\)\?\>' containedin=zshComment +call css_color#init( 'hex', 'none' + \, 'zshString,zshPOSIXString,zshHereDoc,' + \. 'zshCommentColor' ) diff --git a/.config/vim/bundle/vim-css-color/autoload/css_color.vim b/.config/vim/bundle/vim-css-color/autoload/css_color.vim new file mode 100644 index 0000000..b5a0dc4 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/autoload/css_color.vim @@ -0,0 +1,336 @@ +" Language: Colorful CSS Color Preview +" Author: Aristotle Pagaltzis +" Commit: $Format:%H$ +" Licence: The MIT License (MIT) + +if ! ( v:version >= 700 && has('syntax') && ( has('gui_running') || has('nvim') || &t_Co == 256 ) ) + function! css_color#init(type, keywords, groups) + endfunction + function! css_color#extend(groups) + endfunction + finish +endif + +function! s:rgb2color(r,g,b) + " Convert 80% -> 204, 100% -> 255, etc. + let rgb = map( [a:r,a:g,a:b], 'v:val =~ "%$" ? ( 255 * v:val ) / 100 : v:val' ) + return printf( '%02x%02x%02x', rgb[0], rgb[1], rgb[2] ) +endfunction + +function! s:hsl2color(h,s,l) + " Convert 80% -> 0.8, 100% -> 1.0, etc. + let [s,l] = map( [a:s, a:l], 'v:val =~ "%$" ? v:val / 100.0 : v:val + 0.0' ) + " algorithm transcoded to vim from http://www.w3.org/TR/css3-color/#hsl-color + let hh = ( a:h % 360 ) / 360.0 + let m2 = l <= 0.5 ? l * ( s + 1 ) : l + s - l * s + let m1 = l * 2 - m2 + let rgb = [] + for h in [ hh + (1/3.0), hh, hh - (1/3.0) ] + let h = h < 0 ? h + 1 : h > 1 ? h - 1 : h + let v = + \ h * 6 < 1 ? m1 + ( m2 - m1 ) * h * 6 : + \ h * 2 < 1 ? m2 : + \ h * 3 < 2 ? m1 + ( m2 - m1 ) * ( 2/3.0 - h ) * 6 : + \ m1 + if v > 1.0 | return '' | endif + let rgb += [ float2nr( 255 * v ) ] + endfor + return printf( '%02x%02x%02x', rgb[0], rgb[1], rgb[2] ) +endfunction + +let s:_1_3 = 1.0/3 +let s:_16_116 = 16.0/116.0 +let s:cos16 = cos(16*(180/atan2(0,-1))) +let s:sin16 = sin(16*(180/atan2(0,-1))) + +function s:rgb2din99(rgb) + let [r,g,b] = map( copy(a:rgb), 'v:val > 0.04045 ? pow((v:val + 0.055) / 1.055, 2.4) : v:val / 12.92' ) + + let x = r * 0.4124 + g * 0.3576 + b * 0.1805 + let y = r * 0.2126 + g * 0.7152 + b * 0.0722 + let z = r * 0.0193 + g * 0.1192 + b * 0.9505 + + " Observer 2°, Illuminant D65 + let x = ( x * 100 ) / 95.0489 + let z = ( z * 100 ) / 108.8840 + + let [x,y,z] = map( [x,y,z], 'v:val > 0.008856 ? pow(v:val, s:_1_3) : 7.787 * v:val + s:_16_116' ) + + let [L,a,b] = [ (116 * y) - 16, 500 * (x - y), 200 * (y - z) ] + + let L99 = 105.51 * log(1 + 0.0158 * L) + + let e = a * s:cos16 + b * s:sin16 + let f = 0.7 * (b * s:cos16 - a * s:sin16) + + let g = 0.045 * sqrt(e*e + f*f) + if g == 0 + let [a99, b99] = [0.0, 0.0] + else + let k = log(1 + g) / g + let a99 = k * e + let b99 = k * f + endif + + return [L99, a99, b99] +endfunction + +let s:hex={} +for i in range(0, 255) + let s:hex[ printf( '%02x', i ) ] = i +endfor + +let s:exe=[] +function! s:flush_exe() + if len(s:exe) | exe join( remove( s:exe, 0, -1 ), ' | ' ) | endif +endfunction + +if has('gui_running') + function! s:create_highlight(color, is_bright) + call add( s:exe, 'hi BG'.a:color.' guibg=#'.a:color.' guifg=#'.( a:is_bright ? '000000' : 'ffffff' ) ) + endfunction +else + " preset 16 vt100 colors + let s:xtermcolor = [ + \ [ 0x00, 0x00, 0x00 ], + \ [ 0xCD, 0x00, 0x00 ], + \ [ 0x00, 0xCD, 0x00 ], + \ [ 0xCD, 0xCD, 0x00 ], + \ [ 0x00, 0x00, 0xEE ], + \ [ 0xCD, 0x00, 0xCD ], + \ [ 0x00, 0xCD, 0xCD ], + \ [ 0xE5, 0xE5, 0xE5 ], + \ [ 0x7F, 0x7F, 0x7F ], + \ [ 0xFF, 0x00, 0x00 ], + \ [ 0x00, 0xFF, 0x00 ], + \ [ 0xFF, 0xFF, 0x00 ], + \ [ 0x5C, 0x5C, 0xFF ], + \ [ 0xFF, 0x00, 0xFF ], + \ [ 0x00, 0xFF, 0xFF ], + \ [ 0xFF, 0xFF, 0xFF ]] + + " the 6 values used in the xterm color cube + " 0 95 135 175 215 255 + let s:cubergb = [ 0x00, 0x5F, 0x87, 0xAF, 0xD7, 0xFF ] + for s:rrr in s:cubergb + for s:ggg in s:cubergb + for s:bbb in s:cubergb + call add( s:xtermcolor, [ s:rrr, s:ggg, s:bbb ] ) + endfor + endfor + endfor + + " grayscale ramp + let s:xtermcolor += map( range(24), 'repeat( [10 * v:val + 8], 3 )' ) + + for idx in range(len(s:xtermcolor)) + let s:xtermcolor[idx] = s:rgb2din99( map(s:xtermcolor[idx], 'v:val / 255.0') ) + endfor + + " selects the nearest xterm color for a rgb value like #FF0000 + function! s:rgb2xterm(color) + let best_match=0 + let smallest_distance = 10000000000 + let color = tolower(a:color) + let r = s:hex[color[0:1]] + let g = s:hex[color[2:3]] + let b = s:hex[color[4:5]] + + let [L1,a1,b1] = s:rgb2din99([ r/255.0, g/255.0, b/255.0 ]) + + for idx in range(len(s:xtermcolor)) + let [L2,a2,b2] = s:xtermcolor[idx] + let dL = L1 - L2 + let da = a1 - a2 + let db = b1 - b2 + let distance = dL*dL + da*da + db*db + if distance == 0 | return idx | endif + if distance > smallest_distance | continue | endif + let smallest_distance = distance + let best_match = idx + endfor + return best_match + endfunction + + let s:color_idx = {} + function! s:create_highlight(color, is_bright) + let color_idx = get( s:color_idx, a:color, -1 ) + if color_idx == -1 + let color_idx = s:rgb2xterm(a:color) + let s:color_idx[a:color] = color_idx + endif + call add( s:exe, + \ 'hi BG'.a:color + \ . ' guibg=#' .a:color .' guifg=#' .( a:is_bright ? '000000' : 'ffffff' ) + \ . ' ctermbg='.color_idx.' ctermfg='.( a:is_bright ? 0 : 15 ) + \ ) + endfunction +endif + +function! s:recreate_highlights() + call filter( copy( b:css_color_hi ), 's:create_highlight( v:key, v:val )' ) +endfunction + +let s:pattern_color = {} +let s:color_bright = {} +function! s:create_syn_match() + + let pattern = submatch(0) + + if has_key( b:css_color_syn, pattern ) | return | endif + let b:css_color_syn[pattern] = 1 + + let rgb_color = get( s:pattern_color, pattern, '' ) + + if ! strlen( rgb_color ) + let hex = submatch(1) + let funcname = submatch(2) + + let rgb_color + \ = funcname == 'rgb' ? s:rgb2color(submatch(3),submatch(4),submatch(5)) + \ : funcname == 'hsl' ? s:hsl2color(submatch(3),submatch(4),submatch(5)) + \ : strlen(hex) >= 6 ? tolower(hex[0:5]) + \ : strlen(hex) >= 3 ? tolower(hex[0].hex[0].hex[1].hex[1].hex[2].hex[2]) + \ : '' + + if rgb_color == '' | throw 'css_color: create_syn_match invoked on bad match data' | endif + let s:pattern_color[pattern] = rgb_color + endif + + if ! has_key( b:css_color_hi, rgb_color ) + let is_bright = get( s:color_bright, rgb_color, -1 ) + if is_bright == -1 + let r = s:hex[rgb_color[0:1]] + let g = s:hex[rgb_color[2:3]] + let b = s:hex[rgb_color[4:5]] + let is_bright = r*30 + g*59 + b*11 > 12000 + let s:color_bright[rgb_color] = is_bright + endif + + call s:create_highlight( rgb_color, is_bright ) + let b:css_color_hi[rgb_color] = is_bright + endif + + " iff pattern ends on word character, require word break to match + if pattern =~ '\>$' | let pattern .= '\>' | endif + call add( s:exe, 'syn match BG'.rgb_color.' /'.escape(pattern, '/').'/ contained containedin=@colorableGroup' ) + + return '' +endfunction + +function! s:clear_matches() + call map(get(w:, 'css_color_match_id', []), 'matchdelete(v:val)') + let w:css_color_match_id = [] +endfunction + +function! s:create_matches() + call s:clear_matches() + if ! &l:cursorline | return | endif + " adds matches based that duplicate the highlighted colors on the current line + let lnr = line('.') + let group = '' + let groupstart = 0 + let endcol = &l:synmaxcol ? &l:synmaxcol : col('$') + for col in range( 1, endcol ) + let nextgroup = col < endcol ? synIDattr( synID( lnr, col, 1 ), 'name' ) : '' + if group == nextgroup | continue | endif + if group =~ '^BG\x\{6}$' + let regex = '\%'.lnr.'l\%'.groupstart.'c'.repeat( '.', col - groupstart ) + let w:css_color_match_id += [ matchadd( group, regex, -1 ) ] + endif + let group = nextgroup + let groupstart = col + endfor +endfunction + +let s:_hexcolor = '#\(\x\{3}\%(\>\|\x\{3}\>\)\)' " submatch 1 +let s:_rgbacolor = '#\(\x\{3}\%(\>\|\x\%(\>\|\x\{2}\%(\>\|\x\{2}\>\)\)\)\)' " submatch 1 +let s:_funcname = '\(rgb\|hsl\)a\?' " submatch 2 +let s:_ws_ = '\s*' +let s:_numval = s:_ws_ . '\(\d\{1,3}%\?\)' " submatch 3,4,5 +let s:_listsep = s:_ws_ . ',' +let s:_otherargs_ = '\%(,[^)]*\)\?' +let s:_funcexpr = s:_funcname . '[(]' . s:_numval . s:_listsep . s:_numval . s:_listsep . s:_numval . s:_ws_ . s:_otherargs_ . '[)]' +let s:_csscolor = s:_rgbacolor . '\|' . s:_funcexpr +" N.B. sloppy heuristic constants for performance reasons: +" a) start somewhere left of screen in case of partially visible colorref +" b) take some multiple of &columns to handle multibyte chars etc +" N.B. these substitute() calls are here just for the side effect +" of invoking s:create_syn_match during substitution -- because +" match() and friends do not allow finding all matches in a single +" scan without examining the start of the string over and over +function! s:parse_screen() + let leftcol = winsaveview().leftcol + let left = max([ leftcol - 15, 0 ]) + let width = &columns * 4 + call filter( range( line('w0'), line('w$') ), 'substitute( strpart( getline(v:val), col([v:val, left]), width ), b:css_color_pat, ''\=s:create_syn_match()'', ''g'' )' ) + call s:flush_exe() +endfunction + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +function! css_color#reinit() + call s:recreate_highlights() + call s:flush_exe() +endfunction + +function! css_color#enable() + if ! b:css_color_off | return | endif + if len( b:css_color_grp ) | exe 'syn cluster colorableGroup add=' . join( b:css_color_grp, ',' ) | endif + augroup CSSColor + autocmd! * + if has('nvim-0.3.1') + autocmd CursorMoved,CursorMovedI call s:parse_screen() + else + autocmd CursorMoved,CursorMovedI call s:parse_screen() | call s:create_matches() + autocmd BufWinEnter call s:create_matches() + autocmd BufWinLeave call s:clear_matches() + endif + autocmd ColorScheme call css_color#reinit() + augroup END + let b:css_color_off = 0 + doautocmd CSSColor CursorMoved +endfunction + +function! css_color#disable() + if b:css_color_off | return | endif + if len( b:css_color_grp ) | exe 'syn cluster colorableGroup remove=' . join( b:css_color_grp, ',' ) | endif + autocmd! CSSColor * + let b:css_color_off = 1 +endfunction + +function! css_color#toggle() + if b:css_color_off | call css_color#enable() + else | call css_color#disable() + endif +endfunction + +let s:type = [ 'none', 'hex', 'rgba', 'css', 'none' ] " with wraparound for index() == -1 +let s:pat_for_type = [ '^$', s:_hexcolor, s:_rgbacolor, s:_csscolor, '^$' ] + +function! css_color#init(type, keywords, groups) + let new_type = index( s:type, a:type ) + let old_type = index( s:pat_for_type, get( b:, 'css_color_pat', '$^' ) ) + + let b:css_color_pat = s:pat_for_type[ max( [ old_type, new_type ] ) ] + let b:css_color_grp = extend( get( b:, 'css_color_grp', [] ), split( a:groups, ',' ), 0 ) + let b:css_color_hi = {} + let b:css_color_syn = {} + let b:css_color_off = 1 + + call css_color#enable() + + if a:keywords != 'none' + exe 'syntax include syntax/colornames/'.a:keywords.'.vim' + call extend( s:color_bright, b:css_color_hi ) + endif +endfunction + +" utility function for development use +function! css_color#dump_highlights() + call s:recreate_highlights() + let cmd = join( sort( remove( s:exe, 0, -1 ) ), "\n" ) + let cmd = substitute( cmd, '#......', '\U&', 'g' ) + let cmd = substitute( cmd, 'ctermbg=\zs\d\+', '\=printf("%-3d",submatch(0))', 'g' ) + return cmd +endfunction diff --git a/.config/vim/bundle/vim-css-color/syntax/colornames/basic.vim b/.config/vim/bundle/vim-css-color/syntax/colornames/basic.vim new file mode 100644 index 0000000..37730ce --- /dev/null +++ b/.config/vim/bundle/vim-css-color/syntax/colornames/basic.vim @@ -0,0 +1,47 @@ +" Language: Colorful CSS Color Preview +" Author: Aristotle Pagaltzis +" Commit: $Format:%H$ +" Licence: The MIT License (MIT) + +" W3C basic colors + +hi BG000000 guibg=#000000 guifg=#FFFFFF ctermbg=16 ctermfg=15 +hi BGc0c0c0 guibg=#C0C0C0 guifg=#000000 ctermbg=250 ctermfg=0 +hi BG808080 guibg=#808080 guifg=#000000 ctermbg=244 ctermfg=0 +hi BGffffff guibg=#FFFFFF guifg=#000000 ctermbg=231 ctermfg=0 +hi BG800000 guibg=#800000 guifg=#FFFFFF ctermbg=88 ctermfg=15 +hi BGff0000 guibg=#FF0000 guifg=#FFFFFF ctermbg=196 ctermfg=15 +hi BG800080 guibg=#800080 guifg=#FFFFFF ctermbg=90 ctermfg=15 +hi BGff00ff guibg=#FF00FF guifg=#FFFFFF ctermbg=201 ctermfg=15 +hi BG008000 guibg=#008000 guifg=#FFFFFF ctermbg=28 ctermfg=15 +hi BG00ff00 guibg=#00FF00 guifg=#000000 ctermbg=46 ctermfg=0 +hi BG808000 guibg=#808000 guifg=#FFFFFF ctermbg=100 ctermfg=15 +hi BGffff00 guibg=#FFFF00 guifg=#000000 ctermbg=226 ctermfg=0 +hi BG000080 guibg=#000080 guifg=#FFFFFF ctermbg=18 ctermfg=15 +hi BG0000ff guibg=#0000FF guifg=#FFFFFF ctermbg=21 ctermfg=15 +hi BG008080 guibg=#008080 guifg=#FFFFFF ctermbg=30 ctermfg=15 +hi BG00ffff guibg=#00FFFF guifg=#000000 ctermbg=51 ctermfg=0 + +call extend( b:css_color_hi, + \{'000000':0,'c0c0c0':1,'808080':1,'ffffff':1,'800000':0,'ff0000':0 + \,'800080':0,'ff00ff':0,'008000':0,'00ff00':1,'808000':0,'ffff00':1 + \,'000080':0,'0000ff':0,'008080':0,'00ffff':1} ) + +syn case ignore + +syn keyword BG000000 black contained containedin=@colorableGroup +syn keyword BGc0c0c0 silver contained containedin=@colorableGroup +syn keyword BG808080 gray contained containedin=@colorableGroup +syn match BGffffff "\c\" contained containedin=@colorableGroup +syn keyword BG800000 maroon contained containedin=@colorableGroup +syn keyword BGff0000 red contained containedin=@colorableGroup +syn keyword BG800080 purple contained containedin=@colorableGroup +syn keyword BGff00ff fuchsia contained containedin=@colorableGroup +syn keyword BG008000 green contained containedin=@colorableGroup +syn keyword BG00ff00 lime contained containedin=@colorableGroup +syn keyword BG808000 olive contained containedin=@colorableGroup +syn keyword BGffff00 yellow contained containedin=@colorableGroup +syn keyword BG000080 navy contained containedin=@colorableGroup +syn keyword BG0000ff blue contained containedin=@colorableGroup +syn keyword BG008080 teal contained containedin=@colorableGroup +syn keyword BG00ffff aqua contained containedin=@colorableGroup diff --git a/.config/vim/bundle/vim-css-color/syntax/colornames/extended.vim b/.config/vim/bundle/vim-css-color/syntax/colornames/extended.vim new file mode 100644 index 0000000..13230ed --- /dev/null +++ b/.config/vim/bundle/vim-css-color/syntax/colornames/extended.vim @@ -0,0 +1,290 @@ +" Language: Colorful CSS Color Preview +" Author: Aristotle Pagaltzis +" Commit: $Format:%H$ +" Licence: The MIT License (MIT) + +" W3C extended colors + +syntax include syntax/colornames/basic.vim + +hi BG00008b guibg=#00008B guifg=#FFFFFF ctermbg=18 ctermfg=15 +hi BG0000cd guibg=#0000CD guifg=#FFFFFF ctermbg=20 ctermfg=15 +hi BG006400 guibg=#006400 guifg=#FFFFFF ctermbg=22 ctermfg=15 +hi BG008b8b guibg=#008B8B guifg=#FFFFFF ctermbg=30 ctermfg=15 +hi BG00bfff guibg=#00BFFF guifg=#000000 ctermbg=74 ctermfg=0 +hi BG00ced1 guibg=#00CED1 guifg=#000000 ctermbg=6 ctermfg=0 +hi BG00fa9a guibg=#00FA9A guifg=#000000 ctermbg=49 ctermfg=0 +hi BG00ff7f guibg=#00FF7F guifg=#000000 ctermbg=48 ctermfg=0 +hi BG191970 guibg=#191970 guifg=#FFFFFF ctermbg=18 ctermfg=15 +hi BG1e90ff guibg=#1E90FF guifg=#000000 ctermbg=33 ctermfg=0 +hi BG20b2aa guibg=#20B2AA guifg=#000000 ctermbg=37 ctermfg=0 +hi BG228b22 guibg=#228B22 guifg=#FFFFFF ctermbg=28 ctermfg=15 +hi BG2e8b57 guibg=#2E8B57 guifg=#FFFFFF ctermbg=29 ctermfg=15 +hi BG2f4f4f guibg=#2F4F4F guifg=#FFFFFF ctermbg=23 ctermfg=15 +hi BG32cd32 guibg=#32CD32 guifg=#000000 ctermbg=2 ctermfg=0 +hi BG3cb371 guibg=#3CB371 guifg=#000000 ctermbg=35 ctermfg=0 +hi BG40e0d0 guibg=#40E0D0 guifg=#000000 ctermbg=44 ctermfg=0 +hi BG4169e1 guibg=#4169E1 guifg=#FFFFFF ctermbg=62 ctermfg=15 +hi BG4682b4 guibg=#4682B4 guifg=#FFFFFF ctermbg=67 ctermfg=15 +hi BG483d8b guibg=#483D8B guifg=#FFFFFF ctermbg=90 ctermfg=15 +hi BG48d1cc guibg=#48D1CC guifg=#000000 ctermbg=44 ctermfg=0 +hi BG4b0082 guibg=#4B0082 guifg=#FFFFFF ctermbg=54 ctermfg=15 +hi BG556b2f guibg=#556B2F guifg=#FFFFFF ctermbg=58 ctermfg=15 +hi BG5f9ea0 guibg=#5F9EA0 guifg=#000000 ctermbg=73 ctermfg=0 +hi BG6495ed guibg=#6495ED guifg=#000000 ctermbg=68 ctermfg=0 +hi BG663399 guibg=#663399 guifg=#FFFFFF ctermbg=91 ctermfg=15 +hi BG66cdaa guibg=#66CDAA guifg=#000000 ctermbg=79 ctermfg=0 +hi BG696969 guibg=#696969 guifg=#FFFFFF ctermbg=242 ctermfg=15 +hi BG6a5acd guibg=#6A5ACD guifg=#FFFFFF ctermbg=62 ctermfg=15 +hi BG6b8e23 guibg=#6B8E23 guifg=#FFFFFF ctermbg=64 ctermfg=15 +hi BG708090 guibg=#708090 guifg=#000000 ctermbg=8 ctermfg=0 +hi BG778899 guibg=#778899 guifg=#000000 ctermbg=67 ctermfg=0 +hi BG7b68ee guibg=#7B68EE guifg=#000000 ctermbg=98 ctermfg=0 +hi BG7cfc00 guibg=#7CFC00 guifg=#000000 ctermbg=118 ctermfg=0 +hi BG7fff00 guibg=#7FFF00 guifg=#000000 ctermbg=118 ctermfg=0 +hi BG7fffd4 guibg=#7FFFD4 guifg=#000000 ctermbg=122 ctermfg=0 +hi BG87ceeb guibg=#87CEEB guifg=#000000 ctermbg=117 ctermfg=0 +hi BG87cefa guibg=#87CEFA guifg=#000000 ctermbg=117 ctermfg=0 +hi BG8a2be2 guibg=#8A2BE2 guifg=#FFFFFF ctermbg=93 ctermfg=15 +hi BG8b0000 guibg=#8B0000 guifg=#FFFFFF ctermbg=88 ctermfg=15 +hi BG8b008b guibg=#8B008B guifg=#FFFFFF ctermbg=90 ctermfg=15 +hi BG8b4513 guibg=#8B4513 guifg=#FFFFFF ctermbg=130 ctermfg=15 +hi BG8fbc8f guibg=#8FBC8F guifg=#000000 ctermbg=108 ctermfg=0 +hi BG90ee90 guibg=#90EE90 guifg=#000000 ctermbg=120 ctermfg=0 +hi BG9370d8 guibg=#9370D8 guifg=#000000 ctermbg=134 ctermfg=0 +hi BG9400d3 guibg=#9400D3 guifg=#FFFFFF ctermbg=92 ctermfg=15 +hi BG98fb98 guibg=#98FB98 guifg=#000000 ctermbg=120 ctermfg=0 +hi BG9932cc guibg=#9932CC guifg=#FFFFFF ctermbg=128 ctermfg=15 +hi BG9acd32 guibg=#9ACD32 guifg=#000000 ctermbg=112 ctermfg=0 +hi BGa0522d guibg=#A0522D guifg=#FFFFFF ctermbg=130 ctermfg=15 +hi BGa52a2a guibg=#A52A2A guifg=#FFFFFF ctermbg=124 ctermfg=15 +hi BGa9a9a9 guibg=#A9A9A9 guifg=#000000 ctermbg=248 ctermfg=0 +hi BGadd8e6 guibg=#ADD8E6 guifg=#000000 ctermbg=152 ctermfg=0 +hi BGadff2f guibg=#ADFF2F guifg=#000000 ctermbg=154 ctermfg=0 +hi BGafeeee guibg=#AFEEEE guifg=#000000 ctermbg=159 ctermfg=0 +hi BGb0c4de guibg=#B0C4DE guifg=#000000 ctermbg=153 ctermfg=0 +hi BGb0e0e6 guibg=#B0E0E6 guifg=#000000 ctermbg=152 ctermfg=0 +hi BGb22222 guibg=#B22222 guifg=#FFFFFF ctermbg=124 ctermfg=15 +hi BGb8860b guibg=#B8860B guifg=#000000 ctermbg=136 ctermfg=0 +hi BGba55d3 guibg=#BA55D3 guifg=#000000 ctermbg=134 ctermfg=0 +hi BGbc8f8f guibg=#BC8F8F guifg=#000000 ctermbg=138 ctermfg=0 +hi BGbdb76b guibg=#BDB76B guifg=#000000 ctermbg=143 ctermfg=0 +hi BGc71585 guibg=#C71585 guifg=#FFFFFF ctermbg=162 ctermfg=15 +hi BGcd5c5c guibg=#CD5C5C guifg=#000000 ctermbg=167 ctermfg=0 +hi BGcd853f guibg=#CD853F guifg=#000000 ctermbg=172 ctermfg=0 +hi BGd2691e guibg=#D2691E guifg=#000000 ctermbg=166 ctermfg=0 +hi BGd2b48c guibg=#D2B48C guifg=#000000 ctermbg=180 ctermfg=0 +hi BGd3d3d3 guibg=#D3D3D3 guifg=#000000 ctermbg=252 ctermfg=0 +hi BGd87093 guibg=#D87093 guifg=#000000 ctermbg=168 ctermfg=0 +hi BGd8bfd8 guibg=#D8BFD8 guifg=#000000 ctermbg=182 ctermfg=0 +hi BGda70d6 guibg=#DA70D6 guifg=#000000 ctermbg=170 ctermfg=0 +hi BGdaa520 guibg=#DAA520 guifg=#000000 ctermbg=178 ctermfg=0 +hi BGdc143c guibg=#DC143C guifg=#FFFFFF ctermbg=197 ctermfg=15 +hi BGdcdcdc guibg=#DCDCDC guifg=#000000 ctermbg=253 ctermfg=0 +hi BGdda0dd guibg=#DDA0DD guifg=#000000 ctermbg=183 ctermfg=0 +hi BGdeb887 guibg=#DEB887 guifg=#000000 ctermbg=180 ctermfg=0 +hi BGe0ffff guibg=#E0FFFF guifg=#000000 ctermbg=195 ctermfg=0 +hi BGe6e6fa guibg=#E6E6FA guifg=#000000 ctermbg=189 ctermfg=0 +hi BGe9967a guibg=#E9967A guifg=#000000 ctermbg=209 ctermfg=0 +hi BGee82ee guibg=#EE82EE guifg=#000000 ctermbg=213 ctermfg=0 +hi BGeee8aa guibg=#EEE8AA guifg=#000000 ctermbg=229 ctermfg=0 +hi BGf08080 guibg=#F08080 guifg=#000000 ctermbg=210 ctermfg=0 +hi BGf0e68c guibg=#F0E68C guifg=#000000 ctermbg=186 ctermfg=0 +hi BGf0f8ff guibg=#F0F8FF guifg=#000000 ctermbg=231 ctermfg=0 +hi BGf0fff0 guibg=#F0FFF0 guifg=#000000 ctermbg=195 ctermfg=0 +hi BGf0ffff guibg=#F0FFFF guifg=#000000 ctermbg=231 ctermfg=0 +hi BGf4a460 guibg=#F4A460 guifg=#000000 ctermbg=215 ctermfg=0 +hi BGf5deb3 guibg=#F5DEB3 guifg=#000000 ctermbg=223 ctermfg=0 +hi BGf5f5dc guibg=#F5F5DC guifg=#000000 ctermbg=230 ctermfg=0 +hi BGf5f5f5 guibg=#F5F5F5 guifg=#000000 ctermbg=255 ctermfg=0 +hi BGf5fffa guibg=#F5FFFA guifg=#000000 ctermbg=231 ctermfg=0 +hi BGf8f8ff guibg=#F8F8FF guifg=#000000 ctermbg=231 ctermfg=0 +hi BGfa8072 guibg=#FA8072 guifg=#000000 ctermbg=210 ctermfg=0 +hi BGfaebd7 guibg=#FAEBD7 guifg=#000000 ctermbg=255 ctermfg=0 +hi BGfaf0e6 guibg=#FAF0E6 guifg=#000000 ctermbg=255 ctermfg=0 +hi BGfafad2 guibg=#FAFAD2 guifg=#000000 ctermbg=230 ctermfg=0 +hi BGfdf5e6 guibg=#FDF5E6 guifg=#000000 ctermbg=255 ctermfg=0 +hi BGff1493 guibg=#FF1493 guifg=#FFFFFF ctermbg=198 ctermfg=15 +hi BGff4500 guibg=#FF4500 guifg=#FFFFFF ctermbg=202 ctermfg=15 +hi BGff6347 guibg=#FF6347 guifg=#000000 ctermbg=203 ctermfg=0 +hi BGff69b4 guibg=#FF69B4 guifg=#000000 ctermbg=205 ctermfg=0 +hi BGff7f50 guibg=#FF7F50 guifg=#000000 ctermbg=209 ctermfg=0 +hi BGff8c00 guibg=#FF8C00 guifg=#000000 ctermbg=208 ctermfg=0 +hi BGffa07a guibg=#FFA07A guifg=#000000 ctermbg=216 ctermfg=0 +hi BGffa500 guibg=#FFA500 guifg=#000000 ctermbg=214 ctermfg=0 +hi BGffb6c1 guibg=#FFB6C1 guifg=#000000 ctermbg=217 ctermfg=0 +hi BGffc0cb guibg=#FFC0CB guifg=#000000 ctermbg=217 ctermfg=0 +hi BGffd700 guibg=#FFD700 guifg=#000000 ctermbg=220 ctermfg=0 +hi BGffdab9 guibg=#FFDAB9 guifg=#000000 ctermbg=223 ctermfg=0 +hi BGffdead guibg=#FFDEAD guifg=#000000 ctermbg=223 ctermfg=0 +hi BGffe4b5 guibg=#FFE4B5 guifg=#000000 ctermbg=223 ctermfg=0 +hi BGffe4c4 guibg=#FFE4C4 guifg=#000000 ctermbg=223 ctermfg=0 +hi BGffe4e1 guibg=#FFE4E1 guifg=#000000 ctermbg=224 ctermfg=0 +hi BGffebcd guibg=#FFEBCD guifg=#000000 ctermbg=223 ctermfg=0 +hi BGffefd5 guibg=#FFEFD5 guifg=#000000 ctermbg=230 ctermfg=0 +hi BGfff0f5 guibg=#FFF0F5 guifg=#000000 ctermbg=255 ctermfg=0 +hi BGfff5ee guibg=#FFF5EE guifg=#000000 ctermbg=231 ctermfg=0 +hi BGfff8dc guibg=#FFF8DC guifg=#000000 ctermbg=230 ctermfg=0 +hi BGfffacd guibg=#FFFACD guifg=#000000 ctermbg=230 ctermfg=0 +hi BGfffaf0 guibg=#FFFAF0 guifg=#000000 ctermbg=231 ctermfg=0 +hi BGfffafa guibg=#FFFAFA guifg=#000000 ctermbg=231 ctermfg=0 +hi BGffffe0 guibg=#FFFFE0 guifg=#000000 ctermbg=230 ctermfg=0 +hi BGfffff0 guibg=#FFFFF0 guifg=#000000 ctermbg=231 ctermfg=0 + +call extend( b:css_color_hi, + \{'00008b':0,'0000cd':0,'006400':0,'008b8b':0,'00bfff':1,'00ced1':1 + \,'00fa9a':1,'00ff7f':1,'191970':0,'1e90ff':1,'20b2aa':1,'228b22':0 + \,'2e8b57':0,'2f4f4f':0,'32cd32':1,'3cb371':1,'40e0d0':1,'4169e1':0 + \,'4682b4':0,'483d8b':0,'48d1cc':1,'4b0082':0,'556b2f':0,'5f9ea0':1 + \,'6495ed':1,'66cdaa':1,'696969':0,'6a5acd':0,'6b8e23':0,'708090':1 + \,'778899':1,'7b68ee':1,'7cfc00':1,'7fff00':1,'7fffd4':1,'87ceeb':1 + \,'87cefa':1,'8a2be2':0,'8b0000':0,'8b008b':0,'8b4513':0,'8fbc8f':1 + \,'90ee90':1,'9370d8':1,'9400d3':0,'98fb98':1,'9932cc':0,'9acd32':1 + \,'a0522d':0,'a52a2a':0,'a9a9a9':1,'add8e6':1,'adff2f':1,'afeeee':1 + \,'b0c4de':1,'b0e0e6':1,'b22222':0,'b8860b':1,'ba55d3':1,'bc8f8f':1 + \,'bdb76b':1,'c71585':0,'cd5c5c':1,'cd853f':1,'d2691e':1,'d2b48c':1 + \,'d3d3d3':1,'d87093':1,'d8bfd8':1,'da70d6':1,'daa520':1,'dc143c':0 + \,'dcdcdc':1,'dda0dd':1,'deb887':1,'e0ffff':1,'e6e6fa':1,'e9967a':1 + \,'ee82ee':1,'eee8aa':1,'f08080':1,'f0e68c':1,'f0f8ff':1,'f0fff0':1 + \,'f0ffff':1,'f4a460':1,'f5deb3':1,'f5f5dc':1,'f5f5f5':1,'f5fffa':1 + \,'f8f8ff':1,'fa8072':1,'faebd7':1,'faf0e6':1,'fafad2':1,'fdf5e6':1 + \,'ff1493':0,'ff4500':0,'ff6347':1,'ff69b4':1,'ff7f50':1,'ff8c00':1 + \,'ffa07a':1,'ffa500':1,'ffb6c1':1,'ffc0cb':1,'ffd700':1,'ffdab9':1 + \,'ffdead':1,'ffe4b5':1,'ffe4c4':1,'ffe4e1':1,'ffebcd':1,'ffefd5':1 + \,'fff0f5':1,'fff5ee':1,'fff8dc':1,'fffacd':1,'fffaf0':1,'fffafa':1 + \,'ffffe0':1,'fffff0':1} ) + +syn case ignore + +syn keyword BGf0f8ff AliceBlue contained containedin=@colorableGroup +syn keyword BGfaebd7 AntiqueWhite contained containedin=@colorableGroup +syn keyword BG7fffd4 Aquamarine contained containedin=@colorableGroup +syn keyword BGf0ffff Azure contained containedin=@colorableGroup +syn keyword BGf5f5dc Beige contained containedin=@colorableGroup +syn keyword BGffe4c4 Bisque contained containedin=@colorableGroup +syn keyword BGffebcd BlanchedAlmond contained containedin=@colorableGroup +syn keyword BG8a2be2 BlueViolet contained containedin=@colorableGroup +syn keyword BGa52a2a Brown contained containedin=@colorableGroup +syn keyword BGdeb887 BurlyWood contained containedin=@colorableGroup +syn keyword BG5f9ea0 CadetBlue contained containedin=@colorableGroup +syn keyword BG7fff00 Chartreuse contained containedin=@colorableGroup +syn keyword BGd2691e Chocolate contained containedin=@colorableGroup +syn keyword BGff7f50 Coral contained containedin=@colorableGroup +syn keyword BG6495ed CornflowerBlue contained containedin=@colorableGroup +syn keyword BGfff8dc Cornsilk contained containedin=@colorableGroup +syn keyword BGdc143c Crimson contained containedin=@colorableGroup +syn keyword BG00ffff Cyan contained containedin=@colorableGroup +syn keyword BG00008b DarkBlue contained containedin=@colorableGroup +syn keyword BG008b8b DarkCyan contained containedin=@colorableGroup +syn keyword BGb8860b DarkGoldenRod contained containedin=@colorableGroup +syn keyword BGa9a9a9 DarkGray contained containedin=@colorableGroup +syn keyword BG006400 DarkGreen contained containedin=@colorableGroup +syn keyword BGa9a9a9 DarkGrey contained containedin=@colorableGroup +syn keyword BGbdb76b DarkKhaki contained containedin=@colorableGroup +syn keyword BG8b008b DarkMagenta contained containedin=@colorableGroup +syn keyword BG556b2f DarkOliveGreen contained containedin=@colorableGroup +syn keyword BG9932cc DarkOrchid contained containedin=@colorableGroup +syn keyword BG8b0000 DarkRed contained containedin=@colorableGroup +syn keyword BGe9967a DarkSalmon contained containedin=@colorableGroup +syn keyword BG8fbc8f DarkSeaGreen contained containedin=@colorableGroup +syn keyword BG483d8b DarkSlateBlue contained containedin=@colorableGroup +syn keyword BG2f4f4f DarkSlateGray contained containedin=@colorableGroup +syn keyword BG2f4f4f DarkSlateGrey contained containedin=@colorableGroup +syn keyword BG00ced1 DarkTurquoise contained containedin=@colorableGroup +syn keyword BG9400d3 DarkViolet contained containedin=@colorableGroup +syn keyword BGff8c00 Darkorange contained containedin=@colorableGroup +syn keyword BGff1493 DeepPink contained containedin=@colorableGroup +syn keyword BG00bfff DeepSkyBlue contained containedin=@colorableGroup +syn keyword BG696969 DimGray contained containedin=@colorableGroup +syn keyword BG696969 DimGrey contained containedin=@colorableGroup +syn keyword BG1e90ff DodgerBlue contained containedin=@colorableGroup +syn keyword BGb22222 FireBrick contained containedin=@colorableGroup +syn keyword BGfffaf0 FloralWhite contained containedin=@colorableGroup +syn keyword BG228b22 ForestGreen contained containedin=@colorableGroup +syn keyword BGdcdcdc Gainsboro contained containedin=@colorableGroup +syn keyword BGf8f8ff GhostWhite contained containedin=@colorableGroup +syn keyword BGffd700 Gold contained containedin=@colorableGroup +syn keyword BGdaa520 GoldenRod contained containedin=@colorableGroup +syn keyword BGadff2f GreenYellow contained containedin=@colorableGroup +syn keyword BG808080 Grey contained containedin=@colorableGroup +syn keyword BGf0fff0 HoneyDew contained containedin=@colorableGroup +syn keyword BGff69b4 HotPink contained containedin=@colorableGroup +syn keyword BGcd5c5c IndianRed contained containedin=@colorableGroup +syn keyword BG4b0082 Indigo contained containedin=@colorableGroup +syn keyword BGfffff0 Ivory contained containedin=@colorableGroup +syn keyword BGf0e68c Khaki contained containedin=@colorableGroup +syn keyword BGe6e6fa Lavender contained containedin=@colorableGroup +syn keyword BGfff0f5 LavenderBlush contained containedin=@colorableGroup +syn keyword BG7cfc00 LawnGreen contained containedin=@colorableGroup +syn keyword BGfffacd LemonChiffon contained containedin=@colorableGroup +syn keyword BGadd8e6 LightBlue contained containedin=@colorableGroup +syn keyword BGf08080 LightCoral contained containedin=@colorableGroup +syn keyword BGe0ffff LightCyan contained containedin=@colorableGroup +syn keyword BGfafad2 LightGoldenRodYellow contained containedin=@colorableGroup +syn keyword BGd3d3d3 LightGray contained containedin=@colorableGroup +syn keyword BG90ee90 LightGreen contained containedin=@colorableGroup +syn keyword BGd3d3d3 LightGrey contained containedin=@colorableGroup +syn keyword BGffb6c1 LightPink contained containedin=@colorableGroup +syn keyword BGffa07a LightSalmon contained containedin=@colorableGroup +syn keyword BG20b2aa LightSeaGreen contained containedin=@colorableGroup +syn keyword BG87cefa LightSkyBlue contained containedin=@colorableGroup +syn keyword BG778899 LightSlateGray contained containedin=@colorableGroup +syn keyword BG778899 LightSlateGrey contained containedin=@colorableGroup +syn keyword BGb0c4de LightSteelBlue contained containedin=@colorableGroup +syn keyword BGffffe0 LightYellow contained containedin=@colorableGroup +syn keyword BG32cd32 LimeGreen contained containedin=@colorableGroup +syn keyword BGfaf0e6 Linen contained containedin=@colorableGroup +syn keyword BGff00ff Magenta contained containedin=@colorableGroup +syn keyword BG66cdaa MediumAquaMarine contained containedin=@colorableGroup +syn keyword BG0000cd MediumBlue contained containedin=@colorableGroup +syn keyword BGba55d3 MediumOrchid contained containedin=@colorableGroup +syn keyword BG9370d8 MediumPurple contained containedin=@colorableGroup +syn keyword BG3cb371 MediumSeaGreen contained containedin=@colorableGroup +syn keyword BG7b68ee MediumSlateBlue contained containedin=@colorableGroup +syn keyword BG00fa9a MediumSpringGreen contained containedin=@colorableGroup +syn keyword BG48d1cc MediumTurquoise contained containedin=@colorableGroup +syn keyword BGc71585 MediumVioletRed contained containedin=@colorableGroup +syn keyword BG191970 MidnightBlue contained containedin=@colorableGroup +syn keyword BGf5fffa MintCream contained containedin=@colorableGroup +syn keyword BGffe4e1 MistyRose contained containedin=@colorableGroup +syn keyword BGffe4b5 Moccasin contained containedin=@colorableGroup +syn keyword BGffdead NavajoWhite contained containedin=@colorableGroup +syn keyword BGfdf5e6 OldLace contained containedin=@colorableGroup +syn keyword BG6b8e23 OliveDrab contained containedin=@colorableGroup +syn keyword BGffa500 Orange contained containedin=@colorableGroup +syn keyword BGff4500 OrangeRed contained containedin=@colorableGroup +syn keyword BGda70d6 Orchid contained containedin=@colorableGroup +syn keyword BGeee8aa PaleGoldenRod contained containedin=@colorableGroup +syn keyword BG98fb98 PaleGreen contained containedin=@colorableGroup +syn keyword BGafeeee PaleTurquoise contained containedin=@colorableGroup +syn keyword BGd87093 PaleVioletRed contained containedin=@colorableGroup +syn keyword BGffefd5 PapayaWhip contained containedin=@colorableGroup +syn keyword BGffdab9 PeachPuff contained containedin=@colorableGroup +syn keyword BGcd853f Peru contained containedin=@colorableGroup +syn keyword BGffc0cb Pink contained containedin=@colorableGroup +syn keyword BGdda0dd Plum contained containedin=@colorableGroup +syn keyword BGb0e0e6 PowderBlue contained containedin=@colorableGroup +syn keyword BGbc8f8f RosyBrown contained containedin=@colorableGroup +syn keyword BG4169e1 RoyalBlue contained containedin=@colorableGroup +syn keyword BG663399 RebeccaPurple contained containedin=@colorableGroup +syn keyword BG8b4513 SaddleBrown contained containedin=@colorableGroup +syn keyword BGfa8072 Salmon contained containedin=@colorableGroup +syn keyword BGf4a460 SandyBrown contained containedin=@colorableGroup +syn keyword BG2e8b57 SeaGreen contained containedin=@colorableGroup +syn keyword BGfff5ee SeaShell contained containedin=@colorableGroup +syn keyword BGa0522d Sienna contained containedin=@colorableGroup +syn keyword BG87ceeb SkyBlue contained containedin=@colorableGroup +syn keyword BG6a5acd SlateBlue contained containedin=@colorableGroup +syn keyword BG708090 SlateGray contained containedin=@colorableGroup +syn keyword BG708090 SlateGrey contained containedin=@colorableGroup +syn keyword BGfffafa Snow contained containedin=@colorableGroup +syn keyword BG00ff7f SpringGreen contained containedin=@colorableGroup +syn keyword BG4682b4 SteelBlue contained containedin=@colorableGroup +syn keyword BGd2b48c Tan contained containedin=@colorableGroup +syn keyword BGd8bfd8 Thistle contained containedin=@colorableGroup +syn keyword BGff6347 Tomato contained containedin=@colorableGroup +syn keyword BG40e0d0 Turquoise contained containedin=@colorableGroup +syn keyword BGee82ee Violet contained containedin=@colorableGroup +syn keyword BGf5deb3 Wheat contained containedin=@colorableGroup +syn keyword BGf5f5f5 WhiteSmoke contained containedin=@colorableGroup +syn keyword BG9acd32 YellowGreen contained containedin=@colorableGroup diff --git a/.config/vim/bundle/vim-css-color/tests/bench b/.config/vim/bundle/vim-css-color/tests/bench new file mode 100755 index 0000000..21e6eea --- /dev/null +++ b/.config/vim/bundle/vim-css-color/tests/bench @@ -0,0 +1,6 @@ +#!/bin/sh +set -e +s=startuptime.txt +vim --startuptime $s -o -c qa "$@" +perl -lane'$sum += $F[1] if m!/\.vim/after/syntax/css\.vim$!; END {print $sum}' $s +rm $s diff --git a/.config/vim/bundle/vim-css-color/tests/example.csh b/.config/vim/bundle/vim-css-color/tests/example.csh new file mode 100644 index 0000000..b5b1af4 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/tests/example.csh @@ -0,0 +1,13 @@ +# TODO #0f0 should show up green +# TODO f00 should not show up red + +set word = '#0f0' +echo "#0f0" +echo #f00 +#f00 +##0f0 +# TODO #0f0 +# TODO #0f0 TODO +cat < Hi! ; + } +}); diff --git a/.config/vim/bundle/vim-css-color/tests/example.less b/.config/vim/bundle/vim-css-color/tests/example.less new file mode 100644 index 0000000..ffadbad --- /dev/null +++ b/.config/vim/bundle/vim-css-color/tests/example.less @@ -0,0 +1,24 @@ +i { background: #359 } +b { background: #335599 } +u { background: rgba(144, 0, 0, .5) } +s { background: hsl(0, 100%, 50%) } + +@color1: #359; +@color1: #335599; +@color3: rgba(144, 0, 0, .5); +@color4: hsl(0, 100%, 50%); + +/* + * #123, #456 + */ + +// #123456 + +ul { + color: white; + + li { + color: yellow; + background: black; + } +} diff --git a/.config/vim/bundle/vim-css-color/tests/example.nix b/.config/vim/bundle/vim-css-color/tests/example.nix new file mode 100644 index 0000000..05f3438 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/tests/example.nix @@ -0,0 +1,69 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.colorscheme.nord; + hexColor = types.str // { + check = (x: hasPrefix "#" x && builtins.stringLength x == 7); + description = "hexadecimal color"; + }; + mkHexColorOption = name: default: + mkOption { + type = hexColor; + default = default; + description = name; + }; +in { + ## POLAR NIGHT + # The origin color or the Polar Night palette. + nord0 = mkHexColorOption "nord0" "#2E3440"; + + # A brighter shade color based on nord0. + nord1 = mkHexColorOption "nord1" "#3B4252"; + + # An even more brighter shade color of nord0. + nord2 = mkHexColorOption "nord2" "#434C5E"; + + # The brightest shade color based on nord0. + nord3 = mkHexColorOption "nord3" "#4C566A"; + + ## SNOW STORM + # The origin color or the Snow Storm palette. + nord4 = mkHexColorOption "nord4" "#D8DEE9"; + + # A brighter shade color of nord4. + nord5 = mkHexColorOption "nord5" "#E5E9F0"; + + # The brightest shade color based on nord4. + nord6 = mkHexColorOption "nord6" "#ECEFF4"; + + ## FROST + # A calm and highly contrasted color reminiscent of frozen polar water. + nord7 = mkHexColorOption "nord7" "#8FBCBB"; + + # The bright and shiny primary accent color reminiscent of pure and clear ice. + nord8 = mkHexColorOption "nord8" "#88C0D0"; + + # A more darkened and less saturated color reminiscent of arctic waters. + nord9 = mkHexColorOption "nord9" "#81A1C1"; + + # A dark and intensive color reminiscent of the deep arctic ocean. + nord10 = mkHexColorOption "nord10" "#5E81AC"; + + ## AURORA + # RED + nord11 = mkHexColorOption "nord11" "#BF616A"; + + # ORANGE + nord12 = mkHexColorOption "nord12" "#D08770"; + + # YELLOW + nord13 = mkHexColorOption "nord13" "#EBCB8B"; + + # GREEN + nord14 = mkHexColorOption "nord14" "#A3BE8C"; + + # PURPLE + nord15 = mkHexColorOption "nord15" "#B48EAD"; +} diff --git a/.config/vim/bundle/vim-css-color/tests/example.sass b/.config/vim/bundle/vim-css-color/tests/example.sass new file mode 100644 index 0000000..e1c8cd0 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/tests/example.sass @@ -0,0 +1,25 @@ +i + background: #359 +b + background: #335599 +u + background: rgba(144, 0, 0, .5) +s + background: hsl(0, 100%, 50%) + +!color1 = #359 +!color2 = #335599 +!color3 = rgba(144, 0, 0, .5) +!color4 = hsl(0, 100%, 50%) + +/* + * #123, #456 + */ + +// #123456 + +ul + color = white + li + color = yellow + background = black diff --git a/.config/vim/bundle/vim-css-color/tests/example.scss b/.config/vim/bundle/vim-css-color/tests/example.scss new file mode 100644 index 0000000..a93f4da --- /dev/null +++ b/.config/vim/bundle/vim-css-color/tests/example.scss @@ -0,0 +1,24 @@ +i { background: #359 } +b { background: #335599 } +u { background: rgba(144, 0, 0, .5) } +s { background: hsl(0, 100%, 50%) } + +$color1: #359; +$color2: #335599; +$color3: rgba(144, 0, 0, .5); +$color4: hsl(0, 100%, 50%); + +/* + * #123, #456 + */ + +// #123456 + +ul { + color: white; + + li { + color: yellow; + background: black; + } +} diff --git a/.config/vim/bundle/vim-css-color/tests/example.sh b/.config/vim/bundle/vim-css-color/tests/example.sh new file mode 100644 index 0000000..676da41 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/tests/example.sh @@ -0,0 +1,26 @@ +# XXX #0f0 should show up green +# XXX f00 should not show up red +# FIXME ff0 should show up yellow but are known not to + +echo '#0f0' +echo ##0f0 +echo \#ff0 +echo #f00 +echo ##0f0 +echo # #0f0 +cmd '#0f0' +cmd "#0f0" +cmd \#ff0 +cmd #f00 +cmd ##0f0 +cmd # #0f0 +echo `foo # #0f0` +for (( x = '#0f0' )) ; do : ; done +for (( x = "#0f0" )) ; do : ; done +#f00 +##0f0 XXX +# #0f0 XXX +# XXX #0f0 XXX +cat << '' +#0f0 + diff --git a/.config/vim/bundle/vim-css-color/tests/example.stylus b/.config/vim/bundle/vim-css-color/tests/example.stylus new file mode 100644 index 0000000..9789507 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/tests/example.stylus @@ -0,0 +1,28 @@ +i + background #359 +b + background #335599 +u + background rgba(144, 0, 0, .5) +s + background hsl(0, 100%, 50%) + +color1 = #359 +color2 = #335599 +color3 = rgba(144, 0, 0, .5) +color4 = hsl(0, 100%, 50%) + +/* + * #123, #456 + */ + +// #123456 + +ul { + color: white; + + li { + color: yellow; + background: black; + } +} diff --git a/.config/vim/bundle/vim-css-color/tests/example.tcsh b/.config/vim/bundle/vim-css-color/tests/example.tcsh new file mode 100644 index 0000000..b5b1af4 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/tests/example.tcsh @@ -0,0 +1,13 @@ +# TODO #0f0 should show up green +# TODO f00 should not show up red + +set word = '#0f0' +echo "#0f0" +echo #f00 +#f00 +##0f0 +# TODO #0f0 +# TODO #0f0 TODO +cat < { + static id: string = "search-result-row"; + + render(): b.INode { + return ( + + {this.data.name} + {this.data.pH} + + ); + } + + private rowColorStyle(ph: number): b.IStyle { + let backgroundColor = "#00000000"; + let color = "whitesmoke"; + if (ph >= 9) { + backgroundColor = "#ac39ac"; + } else if (ph >= 8.5) { + backgroundColor = "#d279d2"; + } else if (ph >= 8.25) { + backgroundColor = "#e6b3e6"; + } else if (ph >= 8) { + backgroundColor = "#80bfff"; + } else if (ph >= 7.75) { + backgroundColor = "#77b300"; + } else if (ph >= 7.5) { + backgroundColor = "#5cd65c"; + } else if (ph >= 7.25) { + backgroundColor = "#00e600"; + } else if (ph >= 7) { + backgroundColor = "#ffff33"; + } else if (ph >= 6.5) { + backgroundColor = "#ffcc00"; + } else if (ph >= 6.25) { + backgroundColor = "#ff8000"; + } else if (ph >= 6) { + backgroundColor = "#ff6600"; + } else if (ph >= 5.5) { + backgroundColor = "#ff1a1a"; + } else if (ph >= 5) { + backgroundColor = "#cc0000"; + color = "#ffffff"; + } else if (ph >= 4.5) { + backgroundColor = "#990000"; + color = "#ffffff"; + } else { + backgroundColor = "#660000"; + color = "#ffffff"; + } + + return { backgroundColor, color }; + } +} diff --git a/.config/vim/bundle/vim-css-color/tests/example.zsh b/.config/vim/bundle/vim-css-color/tests/example.zsh new file mode 100644 index 0000000..412a949 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/tests/example.zsh @@ -0,0 +1,23 @@ +# XXX #0f0 should show up green +# XXX f00 should not show up red +# FIXME ff0 should show up yellow but are known not to + +echo '#0f0' +echo ##0f0 +echo \#ff0 +echo #f00 +echo ##0f0 +echo # #0f0 +cmd '#0f0' +cmd "#0f0" +cmd \#ff0 +cmd #f00 +cmd ##0f0 +cmd # #0f0 +#f00 +##0f0 XXX +# #0f0 XXX +# XXX #0f0 XXX +cat << '' +#0f0 + diff --git a/.config/vim/bundle/vim-css-color/tests/torture.css b/.config/vim/bundle/vim-css-color/tests/torture.css new file mode 100644 index 0000000..5705f84 --- /dev/null +++ b/.config/vim/bundle/vim-css-color/tests/torture.css @@ -0,0 +1,256 @@ +p { color: #300000; color: #300001; color: #300002; color: #300003; color: #300004; color: #300005; color: #300006; color: #300007; color: #300008; color: #300009; color: #30000a; color: #30000b; color: #30000c; color: #30000d; color: #30000e; color: #30000f; +color: #300100; color: #300101; color: #300102; color: #300103; color: #300104; color: #300105; color: #300106; color: #300107; color: #300108; color: #300109; color: #30010a; color: #30010b; color: #30010c; color: #30010d; color: #30010e; color: #30010f; +color: #300200; color: #300201; color: #300202; color: #300203; color: #300204; color: #300205; color: #300206; color: #300207; color: #300208; color: #300209; color: #30020a; color: #30020b; color: #30020c; color: #30020d; color: #30020e; color: #30020f; +color: #300300; color: #300301; color: #300302; color: #300303; color: #300304; color: #300305; color: #300306; color: #300307; color: #300308; color: #300309; color: #30030a; color: #30030b; color: #30030c; color: #30030d; color: #30030e; color: #30030f; +color: #300400; color: #300401; color: #300402; color: #300403; color: #300404; color: #300405; color: #300406; color: #300407; color: #300408; color: #300409; color: #30040a; color: #30040b; color: #30040c; color: #30040d; color: #30040e; color: #30040f; +color: #300500; color: #300501; color: #300502; color: #300503; color: #300504; color: #300505; color: #300506; color: #300507; color: #300508; color: #300509; color: #30050a; color: #30050b; color: #30050c; color: #30050d; color: #30050e; color: #30050f; +color: #300600; color: #300601; color: #300602; color: #300603; color: #300604; color: #300605; color: #300606; color: #300607; color: #300608; color: #300609; color: #30060a; color: #30060b; color: #30060c; color: #30060d; color: #30060e; color: #30060f; +color: #300700; color: #300701; color: #300702; color: #300703; color: #300704; color: #300705; color: #300706; color: #300707; color: #300708; color: #300709; color: #30070a; color: #30070b; color: #30070c; color: #30070d; color: #30070e; color: #30070f; +color: #300800; color: #300801; color: #300802; color: #300803; color: #300804; color: #300805; color: #300806; color: #300807; color: #300808; color: #300809; color: #30080a; color: #30080b; color: #30080c; color: #30080d; color: #30080e; color: #30080f; +color: #300900; color: #300901; color: #300902; color: #300903; color: #300904; color: #300905; color: #300906; color: #300907; color: #300908; color: #300909; color: #30090a; color: #30090b; color: #30090c; color: #30090d; color: #30090e; color: #30090f; +color: #300a00; color: #300a01; color: #300a02; color: #300a03; color: #300a04; color: #300a05; color: #300a06; color: #300a07; color: #300a08; color: #300a09; color: #300a0a; color: #300a0b; color: #300a0c; color: #300a0d; color: #300a0e; color: #300a0f; +color: #300b00; color: #300b01; color: #300b02; color: #300b03; color: #300b04; color: #300b05; color: #300b06; color: #300b07; color: #300b08; color: #300b09; color: #300b0a; color: #300b0b; color: #300b0c; color: #300b0d; color: #300b0e; color: #300b0f; +color: #300c00; color: #300c01; color: #300c02; color: #300c03; color: #300c04; color: #300c05; color: #300c06; color: #300c07; color: #300c08; color: #300c09; color: #300c0a; color: #300c0b; color: #300c0c; color: #300c0d; color: #300c0e; color: #300c0f; +color: #300d00; color: #300d01; color: #300d02; color: #300d03; color: #300d04; color: #300d05; color: #300d06; color: #300d07; color: #300d08; color: #300d09; color: #300d0a; color: #300d0b; color: #300d0c; color: #300d0d; color: #300d0e; color: #300d0f; +color: #300e00; color: #300e01; color: #300e02; color: #300e03; color: #300e04; color: #300e05; color: #300e06; color: #300e07; color: #300e08; color: #300e09; color: #300e0a; color: #300e0b; color: #300e0c; color: #300e0d; color: #300e0e; color: #300e0f; +color: #300f00; color: #300f01; color: #300f02; color: #300f03; color: #300f04; color: #300f05; color: #300f06; color: #300f07; color: #300f08; color: #300f09; color: #300f0a; color: #300f0b; color: #300f0c; color: #300f0d; color: #300f0e; color: #300f0f; +color: #301000; color: #301001; color: #301002; color: #301003; color: #301004; color: #301005; color: #301006; color: #301007; color: #301008; color: #301009; color: #30100a; color: #30100b; color: #30100c; color: #30100d; color: #30100e; color: #30100f; +color: #301100; color: #301101; color: #301102; color: #301103; color: #301104; color: #301105; color: #301106; color: #301107; color: #301108; color: #301109; color: #30110a; color: #30110b; color: #30110c; color: #30110d; color: #30110e; color: #30110f; +color: #301200; color: #301201; color: #301202; color: #301203; color: #301204; color: #301205; color: #301206; color: #301207; color: #301208; color: #301209; color: #30120a; color: #30120b; color: #30120c; color: #30120d; color: #30120e; color: #30120f; +color: #301300; color: #301301; color: #301302; color: #301303; color: #301304; color: #301305; color: #301306; color: #301307; color: #301308; color: #301309; color: #30130a; color: #30130b; color: #30130c; color: #30130d; color: #30130e; color: #30130f; +color: #301400; color: #301401; color: #301402; color: #301403; color: #301404; color: #301405; color: #301406; color: #301407; color: #301408; color: #301409; color: #30140a; color: #30140b; color: #30140c; color: #30140d; color: #30140e; color: #30140f; +color: #301500; color: #301501; color: #301502; color: #301503; color: #301504; color: #301505; color: #301506; color: #301507; color: #301508; color: #301509; color: #30150a; color: #30150b; color: #30150c; color: #30150d; color: #30150e; color: #30150f; +color: #301600; color: #301601; color: #301602; color: #301603; color: #301604; color: #301605; color: #301606; color: #301607; color: #301608; color: #301609; color: #30160a; color: #30160b; color: #30160c; color: #30160d; color: #30160e; color: #30160f; +color: #301700; color: #301701; color: #301702; color: #301703; color: #301704; color: #301705; color: #301706; color: #301707; color: #301708; color: #301709; color: #30170a; color: #30170b; color: #30170c; color: #30170d; color: #30170e; color: #30170f; +color: #301800; color: #301801; color: #301802; color: #301803; color: #301804; color: #301805; color: #301806; color: #301807; color: #301808; color: #301809; color: #30180a; color: #30180b; color: #30180c; color: #30180d; color: #30180e; color: #30180f; +color: #301900; color: #301901; color: #301902; color: #301903; color: #301904; color: #301905; color: #301906; color: #301907; color: #301908; color: #301909; color: #30190a; color: #30190b; color: #30190c; color: #30190d; color: #30190e; color: #30190f; +color: #301a00; color: #301a01; color: #301a02; color: #301a03; color: #301a04; color: #301a05; color: #301a06; color: #301a07; color: #301a08; color: #301a09; color: #301a0a; color: #301a0b; color: #301a0c; color: #301a0d; color: #301a0e; color: #301a0f; +color: #301b00; color: #301b01; color: #301b02; color: #301b03; color: #301b04; color: #301b05; color: #301b06; color: #301b07; color: #301b08; color: #301b09; color: #301b0a; color: #301b0b; color: #301b0c; color: #301b0d; color: #301b0e; color: #301b0f; +color: #301c00; color: #301c01; color: #301c02; color: #301c03; color: #301c04; color: #301c05; color: #301c06; color: #301c07; color: #301c08; color: #301c09; color: #301c0a; color: #301c0b; color: #301c0c; color: #301c0d; color: #301c0e; color: #301c0f; +color: #301d00; color: #301d01; color: #301d02; color: #301d03; color: #301d04; color: #301d05; color: #301d06; color: #301d07; color: #301d08; color: #301d09; color: #301d0a; color: #301d0b; color: #301d0c; color: #301d0d; color: #301d0e; color: #301d0f; +color: #301e00; color: #301e01; color: #301e02; color: #301e03; color: #301e04; color: #301e05; color: #301e06; color: #301e07; color: #301e08; color: #301e09; color: #301e0a; color: #301e0b; color: #301e0c; color: #301e0d; color: #301e0e; color: #301e0f; +color: #301f00; color: #301f01; color: #301f02; color: #301f03; color: #301f04; color: #301f05; color: #301f06; color: #301f07; color: #301f08; color: #301f09; color: #301f0a; color: #301f0b; color: #301f0c; color: #301f0d; color: #301f0e; color: #301f0f; +color: #302000; color: #302001; color: #302002; color: #302003; color: #302004; color: #302005; color: #302006; color: #302007; color: #302008; color: #302009; color: #30200a; color: #30200b; color: #30200c; color: #30200d; color: #30200e; color: #30200f; +color: #302100; color: #302101; color: #302102; color: #302103; color: #302104; color: #302105; color: #302106; color: #302107; color: #302108; color: #302109; color: #30210a; color: #30210b; color: #30210c; color: #30210d; color: #30210e; color: #30210f; +color: #302200; color: #302201; color: #302202; color: #302203; color: #302204; color: #302205; color: #302206; color: #302207; color: #302208; color: #302209; color: #30220a; color: #30220b; color: #30220c; color: #30220d; color: #30220e; color: #30220f; +color: #302300; color: #302301; color: #302302; color: #302303; color: #302304; color: #302305; color: #302306; color: #302307; color: #302308; color: #302309; color: #30230a; color: #30230b; color: #30230c; color: #30230d; color: #30230e; color: #30230f; +color: #302400; color: #302401; color: #302402; color: #302403; color: #302404; color: #302405; color: #302406; color: #302407; color: #302408; color: #302409; color: #30240a; color: #30240b; color: #30240c; color: #30240d; color: #30240e; color: #30240f; +color: #302500; color: #302501; color: #302502; color: #302503; color: #302504; color: #302505; color: #302506; color: #302507; color: #302508; color: #302509; color: #30250a; color: #30250b; color: #30250c; color: #30250d; color: #30250e; color: #30250f; +color: #302600; color: #302601; color: #302602; color: #302603; color: #302604; color: #302605; color: #302606; color: #302607; color: #302608; color: #302609; color: #30260a; color: #30260b; color: #30260c; color: #30260d; color: #30260e; color: #30260f; +color: #302700; color: #302701; color: #302702; color: #302703; color: #302704; color: #302705; color: #302706; color: #302707; color: #302708; color: #302709; color: #30270a; color: #30270b; color: #30270c; color: #30270d; color: #30270e; color: #30270f; +color: #302800; color: #302801; color: #302802; color: #302803; color: #302804; color: #302805; color: #302806; color: #302807; color: #302808; color: #302809; color: #30280a; color: #30280b; color: #30280c; color: #30280d; color: #30280e; color: #30280f; +color: #302900; color: #302901; color: #302902; color: #302903; color: #302904; color: #302905; color: #302906; color: #302907; color: #302908; color: #302909; color: #30290a; color: #30290b; color: #30290c; color: #30290d; color: #30290e; color: #30290f; +color: #302a00; color: #302a01; color: #302a02; color: #302a03; color: #302a04; color: #302a05; color: #302a06; color: #302a07; color: #302a08; color: #302a09; color: #302a0a; color: #302a0b; color: #302a0c; color: #302a0d; color: #302a0e; color: #302a0f; +color: #302b00; color: #302b01; color: #302b02; color: #302b03; color: #302b04; color: #302b05; color: #302b06; color: #302b07; color: #302b08; color: #302b09; color: #302b0a; color: #302b0b; color: #302b0c; color: #302b0d; color: #302b0e; color: #302b0f; +color: #302c00; color: #302c01; color: #302c02; color: #302c03; color: #302c04; color: #302c05; color: #302c06; color: #302c07; color: #302c08; color: #302c09; color: #302c0a; color: #302c0b; color: #302c0c; color: #302c0d; color: #302c0e; color: #302c0f; +color: #302d00; color: #302d01; color: #302d02; color: #302d03; color: #302d04; color: #302d05; color: #302d06; color: #302d07; color: #302d08; color: #302d09; color: #302d0a; color: #302d0b; color: #302d0c; color: #302d0d; color: #302d0e; color: #302d0f; +color: #302e00; color: #302e01; color: #302e02; color: #302e03; color: #302e04; color: #302e05; color: #302e06; color: #302e07; color: #302e08; color: #302e09; color: #302e0a; color: #302e0b; color: #302e0c; color: #302e0d; color: #302e0e; color: #302e0f; +color: #302f00; color: #302f01; color: #302f02; color: #302f03; color: #302f04; color: #302f05; color: #302f06; color: #302f07; color: #302f08; color: #302f09; color: #302f0a; color: #302f0b; color: #302f0c; color: #302f0d; color: #302f0e; color: #302f0f; +color: #303000; color: #303001; color: #303002; color: #303003; color: #303004; color: #303005; color: #303006; color: #303007; color: #303008; color: #303009; color: #30300a; color: #30300b; color: #30300c; color: #30300d; color: #30300e; color: #30300f; +color: #303100; color: #303101; color: #303102; color: #303103; color: #303104; color: #303105; color: #303106; color: #303107; color: #303108; color: #303109; color: #30310a; color: #30310b; color: #30310c; color: #30310d; color: #30310e; color: #30310f; +color: #303200; color: #303201; color: #303202; color: #303203; color: #303204; color: #303205; color: #303206; color: #303207; color: #303208; color: #303209; color: #30320a; color: #30320b; color: #30320c; color: #30320d; color: #30320e; color: #30320f; +color: #303300; color: #303301; color: #303302; color: #303303; color: #303304; color: #303305; color: #303306; color: #303307; color: #303308; color: #303309; color: #30330a; color: #30330b; color: #30330c; color: #30330d; color: #30330e; color: #30330f; +color: #303400; color: #303401; color: #303402; color: #303403; color: #303404; color: #303405; color: #303406; color: #303407; color: #303408; color: #303409; color: #30340a; color: #30340b; color: #30340c; color: #30340d; color: #30340e; color: #30340f; +color: #303500; color: #303501; color: #303502; color: #303503; color: #303504; color: #303505; color: #303506; color: #303507; color: #303508; color: #303509; color: #30350a; color: #30350b; color: #30350c; color: #30350d; color: #30350e; color: #30350f; +color: #303600; color: #303601; color: #303602; color: #303603; color: #303604; color: #303605; color: #303606; color: #303607; color: #303608; color: #303609; color: #30360a; color: #30360b; color: #30360c; color: #30360d; color: #30360e; color: #30360f; +color: #303700; color: #303701; color: #303702; color: #303703; color: #303704; color: #303705; color: #303706; color: #303707; color: #303708; color: #303709; color: #30370a; color: #30370b; color: #30370c; color: #30370d; color: #30370e; color: #30370f; +color: #303800; color: #303801; color: #303802; color: #303803; color: #303804; color: #303805; color: #303806; color: #303807; color: #303808; color: #303809; color: #30380a; color: #30380b; color: #30380c; color: #30380d; color: #30380e; color: #30380f; +color: #303900; color: #303901; color: #303902; color: #303903; color: #303904; color: #303905; color: #303906; color: #303907; color: #303908; color: #303909; color: #30390a; color: #30390b; color: #30390c; color: #30390d; color: #30390e; color: #30390f; +color: #303a00; color: #303a01; color: #303a02; color: #303a03; color: #303a04; color: #303a05; color: #303a06; color: #303a07; color: #303a08; color: #303a09; color: #303a0a; color: #303a0b; color: #303a0c; color: #303a0d; color: #303a0e; color: #303a0f; +color: #303b00; color: #303b01; color: #303b02; color: #303b03; color: #303b04; color: #303b05; color: #303b06; color: #303b07; color: #303b08; color: #303b09; color: #303b0a; color: #303b0b; color: #303b0c; color: #303b0d; color: #303b0e; color: #303b0f; +color: #303c00; color: #303c01; color: #303c02; color: #303c03; color: #303c04; color: #303c05; color: #303c06; color: #303c07; color: #303c08; color: #303c09; color: #303c0a; color: #303c0b; color: #303c0c; color: #303c0d; color: #303c0e; color: #303c0f; +color: #303d00; color: #303d01; color: #303d02; color: #303d03; color: #303d04; color: #303d05; color: #303d06; color: #303d07; color: #303d08; color: #303d09; color: #303d0a; color: #303d0b; color: #303d0c; color: #303d0d; color: #303d0e; color: #303d0f; +color: #303e00; color: #303e01; color: #303e02; color: #303e03; color: #303e04; color: #303e05; color: #303e06; color: #303e07; color: #303e08; color: #303e09; color: #303e0a; color: #303e0b; color: #303e0c; color: #303e0d; color: #303e0e; color: #303e0f; +color: #303f00; color: #303f01; color: #303f02; color: #303f03; color: #303f04; color: #303f05; color: #303f06; color: #303f07; color: #303f08; color: #303f09; color: #303f0a; color: #303f0b; color: #303f0c; color: #303f0d; color: #303f0e; color: #303f0f; +color: #304000; color: #304001; color: #304002; color: #304003; color: #304004; color: #304005; color: #304006; color: #304007; color: #304008; color: #304009; color: #30400a; color: #30400b; color: #30400c; color: #30400d; color: #30400e; color: #30400f; +color: #304100; color: #304101; color: #304102; color: #304103; color: #304104; color: #304105; color: #304106; color: #304107; color: #304108; color: #304109; color: #30410a; color: #30410b; color: #30410c; color: #30410d; color: #30410e; color: #30410f; +color: #304200; color: #304201; color: #304202; color: #304203; color: #304204; color: #304205; color: #304206; color: #304207; color: #304208; color: #304209; color: #30420a; color: #30420b; color: #30420c; color: #30420d; color: #30420e; color: #30420f; +color: #304300; color: #304301; color: #304302; color: #304303; color: #304304; color: #304305; color: #304306; color: #304307; color: #304308; color: #304309; color: #30430a; color: #30430b; color: #30430c; color: #30430d; color: #30430e; color: #30430f; +color: #304400; color: #304401; color: #304402; color: #304403; color: #304404; color: #304405; color: #304406; color: #304407; color: #304408; color: #304409; color: #30440a; color: #30440b; color: #30440c; color: #30440d; color: #30440e; color: #30440f; +color: #304500; color: #304501; color: #304502; color: #304503; color: #304504; color: #304505; color: #304506; color: #304507; color: #304508; color: #304509; color: #30450a; color: #30450b; color: #30450c; color: #30450d; color: #30450e; color: #30450f; +color: #304600; color: #304601; color: #304602; color: #304603; color: #304604; color: #304605; color: #304606; color: #304607; color: #304608; color: #304609; color: #30460a; color: #30460b; color: #30460c; color: #30460d; color: #30460e; color: #30460f; +color: #304700; color: #304701; color: #304702; color: #304703; color: #304704; color: #304705; color: #304706; color: #304707; color: #304708; color: #304709; color: #30470a; color: #30470b; color: #30470c; color: #30470d; color: #30470e; color: #30470f; +color: #304800; color: #304801; color: #304802; color: #304803; color: #304804; color: #304805; color: #304806; color: #304807; color: #304808; color: #304809; color: #30480a; color: #30480b; color: #30480c; color: #30480d; color: #30480e; color: #30480f; +color: #304900; color: #304901; color: #304902; color: #304903; color: #304904; color: #304905; color: #304906; color: #304907; color: #304908; color: #304909; color: #30490a; color: #30490b; color: #30490c; color: #30490d; color: #30490e; color: #30490f; +color: #304a00; color: #304a01; color: #304a02; color: #304a03; color: #304a04; color: #304a05; color: #304a06; color: #304a07; color: #304a08; color: #304a09; color: #304a0a; color: #304a0b; color: #304a0c; color: #304a0d; color: #304a0e; color: #304a0f; +color: #304b00; color: #304b01; color: #304b02; color: #304b03; color: #304b04; color: #304b05; color: #304b06; color: #304b07; color: #304b08; color: #304b09; color: #304b0a; color: #304b0b; color: #304b0c; color: #304b0d; color: #304b0e; color: #304b0f; +color: #304c00; color: #304c01; color: #304c02; color: #304c03; color: #304c04; color: #304c05; color: #304c06; color: #304c07; color: #304c08; color: #304c09; color: #304c0a; color: #304c0b; color: #304c0c; color: #304c0d; color: #304c0e; color: #304c0f; +color: #304d00; color: #304d01; color: #304d02; color: #304d03; color: #304d04; color: #304d05; color: #304d06; color: #304d07; color: #304d08; color: #304d09; color: #304d0a; color: #304d0b; color: #304d0c; color: #304d0d; color: #304d0e; color: #304d0f; +color: #304e00; color: #304e01; color: #304e02; color: #304e03; color: #304e04; color: #304e05; color: #304e06; color: #304e07; color: #304e08; color: #304e09; color: #304e0a; color: #304e0b; color: #304e0c; color: #304e0d; color: #304e0e; color: #304e0f; +color: #304f00; color: #304f01; color: #304f02; color: #304f03; color: #304f04; color: #304f05; color: #304f06; color: #304f07; color: #304f08; color: #304f09; color: #304f0a; color: #304f0b; color: #304f0c; color: #304f0d; color: #304f0e; color: #304f0f; +color: #305000; color: #305001; color: #305002; color: #305003; color: #305004; color: #305005; color: #305006; color: #305007; color: #305008; color: #305009; color: #30500a; color: #30500b; color: #30500c; color: #30500d; color: #30500e; color: #30500f; +color: #305100; color: #305101; color: #305102; color: #305103; color: #305104; color: #305105; color: #305106; color: #305107; color: #305108; color: #305109; color: #30510a; color: #30510b; color: #30510c; color: #30510d; color: #30510e; color: #30510f; +color: #305200; color: #305201; color: #305202; color: #305203; color: #305204; color: #305205; color: #305206; color: #305207; color: #305208; color: #305209; color: #30520a; color: #30520b; color: #30520c; color: #30520d; color: #30520e; color: #30520f; +color: #305300; color: #305301; color: #305302; color: #305303; color: #305304; color: #305305; color: #305306; color: #305307; color: #305308; color: #305309; color: #30530a; color: #30530b; color: #30530c; color: #30530d; color: #30530e; color: #30530f; +color: #305400; color: #305401; color: #305402; color: #305403; color: #305404; color: #305405; color: #305406; color: #305407; color: #305408; color: #305409; color: #30540a; color: #30540b; color: #30540c; color: #30540d; color: #30540e; color: #30540f; +color: #305500; color: #305501; color: #305502; color: #305503; color: #305504; color: #305505; color: #305506; color: #305507; color: #305508; color: #305509; color: #30550a; color: #30550b; color: #30550c; color: #30550d; color: #30550e; color: #30550f; +color: #305600; color: #305601; color: #305602; color: #305603; color: #305604; color: #305605; color: #305606; color: #305607; color: #305608; color: #305609; color: #30560a; color: #30560b; color: #30560c; color: #30560d; color: #30560e; color: #30560f; +color: #305700; color: #305701; color: #305702; color: #305703; color: #305704; color: #305705; color: #305706; color: #305707; color: #305708; color: #305709; color: #30570a; color: #30570b; color: #30570c; color: #30570d; color: #30570e; color: #30570f; +color: #305800; color: #305801; color: #305802; color: #305803; color: #305804; color: #305805; color: #305806; color: #305807; color: #305808; color: #305809; color: #30580a; color: #30580b; color: #30580c; color: #30580d; color: #30580e; color: #30580f; +color: #305900; color: #305901; color: #305902; color: #305903; color: #305904; color: #305905; color: #305906; color: #305907; color: #305908; color: #305909; color: #30590a; color: #30590b; color: #30590c; color: #30590d; color: #30590e; color: #30590f; +color: #305a00; color: #305a01; color: #305a02; color: #305a03; color: #305a04; color: #305a05; color: #305a06; color: #305a07; color: #305a08; color: #305a09; color: #305a0a; color: #305a0b; color: #305a0c; color: #305a0d; color: #305a0e; color: #305a0f; +color: #305b00; color: #305b01; color: #305b02; color: #305b03; color: #305b04; color: #305b05; color: #305b06; color: #305b07; color: #305b08; color: #305b09; color: #305b0a; color: #305b0b; color: #305b0c; color: #305b0d; color: #305b0e; color: #305b0f; +color: #305c00; color: #305c01; color: #305c02; color: #305c03; color: #305c04; color: #305c05; color: #305c06; color: #305c07; color: #305c08; color: #305c09; color: #305c0a; color: #305c0b; color: #305c0c; color: #305c0d; color: #305c0e; color: #305c0f; +color: #305d00; color: #305d01; color: #305d02; color: #305d03; color: #305d04; color: #305d05; color: #305d06; color: #305d07; color: #305d08; color: #305d09; color: #305d0a; color: #305d0b; color: #305d0c; color: #305d0d; color: #305d0e; color: #305d0f; +color: #305e00; color: #305e01; color: #305e02; color: #305e03; color: #305e04; color: #305e05; color: #305e06; color: #305e07; color: #305e08; color: #305e09; color: #305e0a; color: #305e0b; color: #305e0c; color: #305e0d; color: #305e0e; color: #305e0f; +color: #305f00; color: #305f01; color: #305f02; color: #305f03; color: #305f04; color: #305f05; color: #305f06; color: #305f07; color: #305f08; color: #305f09; color: #305f0a; color: #305f0b; color: #305f0c; color: #305f0d; color: #305f0e; color: #305f0f; +color: #306000; color: #306001; color: #306002; color: #306003; color: #306004; color: #306005; color: #306006; color: #306007; color: #306008; color: #306009; color: #30600a; color: #30600b; color: #30600c; color: #30600d; color: #30600e; color: #30600f; +color: #306100; color: #306101; color: #306102; color: #306103; color: #306104; color: #306105; color: #306106; color: #306107; color: #306108; color: #306109; color: #30610a; color: #30610b; color: #30610c; color: #30610d; color: #30610e; color: #30610f; +color: #306200; color: #306201; color: #306202; color: #306203; color: #306204; color: #306205; color: #306206; color: #306207; color: #306208; color: #306209; color: #30620a; color: #30620b; color: #30620c; color: #30620d; color: #30620e; color: #30620f; +color: #306300; color: #306301; color: #306302; color: #306303; color: #306304; color: #306305; color: #306306; color: #306307; color: #306308; color: #306309; color: #30630a; color: #30630b; color: #30630c; color: #30630d; color: #30630e; color: #30630f; +color: #306400; color: #306401; color: #306402; color: #306403; color: #306404; color: #306405; color: #306406; color: #306407; color: #306408; color: #306409; color: #30640a; color: #30640b; color: #30640c; color: #30640d; color: #30640e; color: #30640f; +color: #306500; color: #306501; color: #306502; color: #306503; color: #306504; color: #306505; color: #306506; color: #306507; color: #306508; color: #306509; color: #30650a; color: #30650b; color: #30650c; color: #30650d; color: #30650e; color: #30650f; +color: #306600; color: #306601; color: #306602; color: #306603; color: #306604; color: #306605; color: #306606; color: #306607; color: #306608; color: #306609; color: #30660a; color: #30660b; color: #30660c; color: #30660d; color: #30660e; color: #30660f; +color: #306700; color: #306701; color: #306702; color: #306703; color: #306704; color: #306705; color: #306706; color: #306707; color: #306708; color: #306709; color: #30670a; color: #30670b; color: #30670c; color: #30670d; color: #30670e; color: #30670f; +color: #306800; color: #306801; color: #306802; color: #306803; color: #306804; color: #306805; color: #306806; color: #306807; color: #306808; color: #306809; color: #30680a; color: #30680b; color: #30680c; color: #30680d; color: #30680e; color: #30680f; +color: #306900; color: #306901; color: #306902; color: #306903; color: #306904; color: #306905; color: #306906; color: #306907; color: #306908; color: #306909; color: #30690a; color: #30690b; color: #30690c; color: #30690d; color: #30690e; color: #30690f; +color: #306a00; color: #306a01; color: #306a02; color: #306a03; color: #306a04; color: #306a05; color: #306a06; color: #306a07; color: #306a08; color: #306a09; color: #306a0a; color: #306a0b; color: #306a0c; color: #306a0d; color: #306a0e; color: #306a0f; +color: #306b00; color: #306b01; color: #306b02; color: #306b03; color: #306b04; color: #306b05; color: #306b06; color: #306b07; color: #306b08; color: #306b09; color: #306b0a; color: #306b0b; color: #306b0c; color: #306b0d; color: #306b0e; color: #306b0f; +color: #306c00; color: #306c01; color: #306c02; color: #306c03; color: #306c04; color: #306c05; color: #306c06; color: #306c07; color: #306c08; color: #306c09; color: #306c0a; color: #306c0b; color: #306c0c; color: #306c0d; color: #306c0e; color: #306c0f; +color: #306d00; color: #306d01; color: #306d02; color: #306d03; color: #306d04; color: #306d05; color: #306d06; color: #306d07; color: #306d08; color: #306d09; color: #306d0a; color: #306d0b; color: #306d0c; color: #306d0d; color: #306d0e; color: #306d0f; +color: #306e00; color: #306e01; color: #306e02; color: #306e03; color: #306e04; color: #306e05; color: #306e06; color: #306e07; color: #306e08; color: #306e09; color: #306e0a; color: #306e0b; color: #306e0c; color: #306e0d; color: #306e0e; color: #306e0f; +color: #306f00; color: #306f01; color: #306f02; color: #306f03; color: #306f04; color: #306f05; color: #306f06; color: #306f07; color: #306f08; color: #306f09; color: #306f0a; color: #306f0b; color: #306f0c; color: #306f0d; color: #306f0e; color: #306f0f; +color: #307000; color: #307001; color: #307002; color: #307003; color: #307004; color: #307005; color: #307006; color: #307007; color: #307008; color: #307009; color: #30700a; color: #30700b; color: #30700c; color: #30700d; color: #30700e; color: #30700f; +color: #307100; color: #307101; color: #307102; color: #307103; color: #307104; color: #307105; color: #307106; color: #307107; color: #307108; color: #307109; color: #30710a; color: #30710b; color: #30710c; color: #30710d; color: #30710e; color: #30710f; +color: #307200; color: #307201; color: #307202; color: #307203; color: #307204; color: #307205; color: #307206; color: #307207; color: #307208; color: #307209; color: #30720a; color: #30720b; color: #30720c; color: #30720d; color: #30720e; color: #30720f; +color: #307300; color: #307301; color: #307302; color: #307303; color: #307304; color: #307305; color: #307306; color: #307307; color: #307308; color: #307309; color: #30730a; color: #30730b; color: #30730c; color: #30730d; color: #30730e; color: #30730f; +color: #307400; color: #307401; color: #307402; color: #307403; color: #307404; color: #307405; color: #307406; color: #307407; color: #307408; color: #307409; color: #30740a; color: #30740b; color: #30740c; color: #30740d; color: #30740e; color: #30740f; +color: #307500; color: #307501; color: #307502; color: #307503; color: #307504; color: #307505; color: #307506; color: #307507; color: #307508; color: #307509; color: #30750a; color: #30750b; color: #30750c; color: #30750d; color: #30750e; color: #30750f; +color: #307600; color: #307601; color: #307602; color: #307603; color: #307604; color: #307605; color: #307606; color: #307607; color: #307608; color: #307609; color: #30760a; color: #30760b; color: #30760c; color: #30760d; color: #30760e; color: #30760f; +color: #307700; color: #307701; color: #307702; color: #307703; color: #307704; color: #307705; color: #307706; color: #307707; color: #307708; color: #307709; color: #30770a; color: #30770b; color: #30770c; color: #30770d; color: #30770e; color: #30770f; +color: #307800; color: #307801; color: #307802; color: #307803; color: #307804; color: #307805; color: #307806; color: #307807; color: #307808; color: #307809; color: #30780a; color: #30780b; color: #30780c; color: #30780d; color: #30780e; color: #30780f; +color: #307900; color: #307901; color: #307902; color: #307903; color: #307904; color: #307905; color: #307906; color: #307907; color: #307908; color: #307909; color: #30790a; color: #30790b; color: #30790c; color: #30790d; color: #30790e; color: #30790f; +color: #307a00; color: #307a01; color: #307a02; color: #307a03; color: #307a04; color: #307a05; color: #307a06; color: #307a07; color: #307a08; color: #307a09; color: #307a0a; color: #307a0b; color: #307a0c; color: #307a0d; color: #307a0e; color: #307a0f; +color: #307b00; color: #307b01; color: #307b02; color: #307b03; color: #307b04; color: #307b05; color: #307b06; color: #307b07; color: #307b08; color: #307b09; color: #307b0a; color: #307b0b; color: #307b0c; color: #307b0d; color: #307b0e; color: #307b0f; +color: #307c00; color: #307c01; color: #307c02; color: #307c03; color: #307c04; color: #307c05; color: #307c06; color: #307c07; color: #307c08; color: #307c09; color: #307c0a; color: #307c0b; color: #307c0c; color: #307c0d; color: #307c0e; color: #307c0f; +color: #307d00; color: #307d01; color: #307d02; color: #307d03; color: #307d04; color: #307d05; color: #307d06; color: #307d07; color: #307d08; color: #307d09; color: #307d0a; color: #307d0b; color: #307d0c; color: #307d0d; color: #307d0e; color: #307d0f; +color: #307e00; color: #307e01; color: #307e02; color: #307e03; color: #307e04; color: #307e05; color: #307e06; color: #307e07; color: #307e08; color: #307e09; color: #307e0a; color: #307e0b; color: #307e0c; color: #307e0d; color: #307e0e; color: #307e0f; +color: #307f00; color: #307f01; color: #307f02; color: #307f03; color: #307f04; color: #307f05; color: #307f06; color: #307f07; color: #307f08; color: #307f09; color: #307f0a; color: #307f0b; color: #307f0c; color: #307f0d; color: #307f0e; color: #307f0f; +color: #308000; color: #308001; color: #308002; color: #308003; color: #308004; color: #308005; color: #308006; color: #308007; color: #308008; color: #308009; color: #30800a; color: #30800b; color: #30800c; color: #30800d; color: #30800e; color: #30800f; +color: #308100; color: #308101; color: #308102; color: #308103; color: #308104; color: #308105; color: #308106; color: #308107; color: #308108; color: #308109; color: #30810a; color: #30810b; color: #30810c; color: #30810d; color: #30810e; color: #30810f; +color: #308200; color: #308201; color: #308202; color: #308203; color: #308204; color: #308205; color: #308206; color: #308207; color: #308208; color: #308209; color: #30820a; color: #30820b; color: #30820c; color: #30820d; color: #30820e; color: #30820f; +color: #308300; color: #308301; color: #308302; color: #308303; color: #308304; color: #308305; color: #308306; color: #308307; color: #308308; color: #308309; color: #30830a; color: #30830b; color: #30830c; color: #30830d; color: #30830e; color: #30830f; +color: #308400; color: #308401; color: #308402; color: #308403; color: #308404; color: #308405; color: #308406; color: #308407; color: #308408; color: #308409; color: #30840a; color: #30840b; color: #30840c; color: #30840d; color: #30840e; color: #30840f; +color: #308500; color: #308501; color: #308502; color: #308503; color: #308504; color: #308505; color: #308506; color: #308507; color: #308508; color: #308509; color: #30850a; color: #30850b; color: #30850c; color: #30850d; color: #30850e; color: #30850f; +color: #308600; color: #308601; color: #308602; color: #308603; color: #308604; color: #308605; color: #308606; color: #308607; color: #308608; color: #308609; color: #30860a; color: #30860b; color: #30860c; color: #30860d; color: #30860e; color: #30860f; +color: #308700; color: #308701; color: #308702; color: #308703; color: #308704; color: #308705; color: #308706; color: #308707; color: #308708; color: #308709; color: #30870a; color: #30870b; color: #30870c; color: #30870d; color: #30870e; color: #30870f; +color: #308800; color: #308801; color: #308802; color: #308803; color: #308804; color: #308805; color: #308806; color: #308807; color: #308808; color: #308809; color: #30880a; color: #30880b; color: #30880c; color: #30880d; color: #30880e; color: #30880f; +color: #308900; color: #308901; color: #308902; color: #308903; color: #308904; color: #308905; color: #308906; color: #308907; color: #308908; color: #308909; color: #30890a; color: #30890b; color: #30890c; color: #30890d; color: #30890e; color: #30890f; +color: #308a00; color: #308a01; color: #308a02; color: #308a03; color: #308a04; color: #308a05; color: #308a06; color: #308a07; color: #308a08; color: #308a09; color: #308a0a; color: #308a0b; color: #308a0c; color: #308a0d; color: #308a0e; color: #308a0f; +color: #308b00; color: #308b01; color: #308b02; color: #308b03; color: #308b04; color: #308b05; color: #308b06; color: #308b07; color: #308b08; color: #308b09; color: #308b0a; color: #308b0b; color: #308b0c; color: #308b0d; color: #308b0e; color: #308b0f; +color: #308c00; color: #308c01; color: #308c02; color: #308c03; color: #308c04; color: #308c05; color: #308c06; color: #308c07; color: #308c08; color: #308c09; color: #308c0a; color: #308c0b; color: #308c0c; color: #308c0d; color: #308c0e; color: #308c0f; +color: #308d00; color: #308d01; color: #308d02; color: #308d03; color: #308d04; color: #308d05; color: #308d06; color: #308d07; color: #308d08; color: #308d09; color: #308d0a; color: #308d0b; color: #308d0c; color: #308d0d; color: #308d0e; color: #308d0f; +color: #308e00; color: #308e01; color: #308e02; color: #308e03; color: #308e04; color: #308e05; color: #308e06; color: #308e07; color: #308e08; color: #308e09; color: #308e0a; color: #308e0b; color: #308e0c; color: #308e0d; color: #308e0e; color: #308e0f; +color: #308f00; color: #308f01; color: #308f02; color: #308f03; color: #308f04; color: #308f05; color: #308f06; color: #308f07; color: #308f08; color: #308f09; color: #308f0a; color: #308f0b; color: #308f0c; color: #308f0d; color: #308f0e; color: #308f0f; +color: #309000; color: #309001; color: #309002; color: #309003; color: #309004; color: #309005; color: #309006; color: #309007; color: #309008; color: #309009; color: #30900a; color: #30900b; color: #30900c; color: #30900d; color: #30900e; color: #30900f; +color: #309100; color: #309101; color: #309102; color: #309103; color: #309104; color: #309105; color: #309106; color: #309107; color: #309108; color: #309109; color: #30910a; color: #30910b; color: #30910c; color: #30910d; color: #30910e; color: #30910f; +color: #309200; color: #309201; color: #309202; color: #309203; color: #309204; color: #309205; color: #309206; color: #309207; color: #309208; color: #309209; color: #30920a; color: #30920b; color: #30920c; color: #30920d; color: #30920e; color: #30920f; +color: #309300; color: #309301; color: #309302; color: #309303; color: #309304; color: #309305; color: #309306; color: #309307; color: #309308; color: #309309; color: #30930a; color: #30930b; color: #30930c; color: #30930d; color: #30930e; color: #30930f; +color: #309400; color: #309401; color: #309402; color: #309403; color: #309404; color: #309405; color: #309406; color: #309407; color: #309408; color: #309409; color: #30940a; color: #30940b; color: #30940c; color: #30940d; color: #30940e; color: #30940f; +color: #309500; color: #309501; color: #309502; color: #309503; color: #309504; color: #309505; color: #309506; color: #309507; color: #309508; color: #309509; color: #30950a; color: #30950b; color: #30950c; color: #30950d; color: #30950e; color: #30950f; +color: #309600; color: #309601; color: #309602; color: #309603; color: #309604; color: #309605; color: #309606; color: #309607; color: #309608; color: #309609; color: #30960a; color: #30960b; color: #30960c; color: #30960d; color: #30960e; color: #30960f; +color: #309700; color: #309701; color: #309702; color: #309703; color: #309704; color: #309705; color: #309706; color: #309707; color: #309708; color: #309709; color: #30970a; color: #30970b; color: #30970c; color: #30970d; color: #30970e; color: #30970f; +color: #309800; color: #309801; color: #309802; color: #309803; color: #309804; color: #309805; color: #309806; color: #309807; color: #309808; color: #309809; color: #30980a; color: #30980b; color: #30980c; color: #30980d; color: #30980e; color: #30980f; +color: #309900; color: #309901; color: #309902; color: #309903; color: #309904; color: #309905; color: #309906; color: #309907; color: #309908; color: #309909; color: #30990a; color: #30990b; color: #30990c; color: #30990d; color: #30990e; color: #30990f; +color: #309a00; color: #309a01; color: #309a02; color: #309a03; color: #309a04; color: #309a05; color: #309a06; color: #309a07; color: #309a08; color: #309a09; color: #309a0a; color: #309a0b; color: #309a0c; color: #309a0d; color: #309a0e; color: #309a0f; +color: #309b00; color: #309b01; color: #309b02; color: #309b03; color: #309b04; color: #309b05; color: #309b06; color: #309b07; color: #309b08; color: #309b09; color: #309b0a; color: #309b0b; color: #309b0c; color: #309b0d; color: #309b0e; color: #309b0f; +color: #309c00; color: #309c01; color: #309c02; color: #309c03; color: #309c04; color: #309c05; color: #309c06; color: #309c07; color: #309c08; color: #309c09; color: #309c0a; color: #309c0b; color: #309c0c; color: #309c0d; color: #309c0e; color: #309c0f; +color: #309d00; color: #309d01; color: #309d02; color: #309d03; color: #309d04; color: #309d05; color: #309d06; color: #309d07; color: #309d08; color: #309d09; color: #309d0a; color: #309d0b; color: #309d0c; color: #309d0d; color: #309d0e; color: #309d0f; +color: #309e00; color: #309e01; color: #309e02; color: #309e03; color: #309e04; color: #309e05; color: #309e06; color: #309e07; color: #309e08; color: #309e09; color: #309e0a; color: #309e0b; color: #309e0c; color: #309e0d; color: #309e0e; color: #309e0f; +color: #309f00; color: #309f01; color: #309f02; color: #309f03; color: #309f04; color: #309f05; color: #309f06; color: #309f07; color: #309f08; color: #309f09; color: #309f0a; color: #309f0b; color: #309f0c; color: #309f0d; color: #309f0e; color: #309f0f; +color: #30a000; color: #30a001; color: #30a002; color: #30a003; color: #30a004; color: #30a005; color: #30a006; color: #30a007; color: #30a008; color: #30a009; color: #30a00a; color: #30a00b; color: #30a00c; color: #30a00d; color: #30a00e; color: #30a00f; +color: #30a100; color: #30a101; color: #30a102; color: #30a103; color: #30a104; color: #30a105; color: #30a106; color: #30a107; color: #30a108; color: #30a109; color: #30a10a; color: #30a10b; color: #30a10c; color: #30a10d; color: #30a10e; color: #30a10f; +color: #30a200; color: #30a201; color: #30a202; color: #30a203; color: #30a204; color: #30a205; color: #30a206; color: #30a207; color: #30a208; color: #30a209; color: #30a20a; color: #30a20b; color: #30a20c; color: #30a20d; color: #30a20e; color: #30a20f; +color: #30a300; color: #30a301; color: #30a302; color: #30a303; color: #30a304; color: #30a305; color: #30a306; color: #30a307; color: #30a308; color: #30a309; color: #30a30a; color: #30a30b; color: #30a30c; color: #30a30d; color: #30a30e; color: #30a30f; +color: #30a400; color: #30a401; color: #30a402; color: #30a403; color: #30a404; color: #30a405; color: #30a406; color: #30a407; color: #30a408; color: #30a409; color: #30a40a; color: #30a40b; color: #30a40c; color: #30a40d; color: #30a40e; color: #30a40f; +color: #30a500; color: #30a501; color: #30a502; color: #30a503; color: #30a504; color: #30a505; color: #30a506; color: #30a507; color: #30a508; color: #30a509; color: #30a50a; color: #30a50b; color: #30a50c; color: #30a50d; color: #30a50e; color: #30a50f; +color: #30a600; color: #30a601; color: #30a602; color: #30a603; color: #30a604; color: #30a605; color: #30a606; color: #30a607; color: #30a608; color: #30a609; color: #30a60a; color: #30a60b; color: #30a60c; color: #30a60d; color: #30a60e; color: #30a60f; +color: #30a700; color: #30a701; color: #30a702; color: #30a703; color: #30a704; color: #30a705; color: #30a706; color: #30a707; color: #30a708; color: #30a709; color: #30a70a; color: #30a70b; color: #30a70c; color: #30a70d; color: #30a70e; color: #30a70f; +color: #30a800; color: #30a801; color: #30a802; color: #30a803; color: #30a804; color: #30a805; color: #30a806; color: #30a807; color: #30a808; color: #30a809; color: #30a80a; color: #30a80b; color: #30a80c; color: #30a80d; color: #30a80e; color: #30a80f; +color: #30a900; color: #30a901; color: #30a902; color: #30a903; color: #30a904; color: #30a905; color: #30a906; color: #30a907; color: #30a908; color: #30a909; color: #30a90a; color: #30a90b; color: #30a90c; color: #30a90d; color: #30a90e; color: #30a90f; +color: #30aa00; color: #30aa01; color: #30aa02; color: #30aa03; color: #30aa04; color: #30aa05; color: #30aa06; color: #30aa07; color: #30aa08; color: #30aa09; color: #30aa0a; color: #30aa0b; color: #30aa0c; color: #30aa0d; color: #30aa0e; color: #30aa0f; +color: #30ab00; color: #30ab01; color: #30ab02; color: #30ab03; color: #30ab04; color: #30ab05; color: #30ab06; color: #30ab07; color: #30ab08; color: #30ab09; color: #30ab0a; color: #30ab0b; color: #30ab0c; color: #30ab0d; color: #30ab0e; color: #30ab0f; +color: #30ac00; color: #30ac01; color: #30ac02; color: #30ac03; color: #30ac04; color: #30ac05; color: #30ac06; color: #30ac07; color: #30ac08; color: #30ac09; color: #30ac0a; color: #30ac0b; color: #30ac0c; color: #30ac0d; color: #30ac0e; color: #30ac0f; +color: #30ad00; color: #30ad01; color: #30ad02; color: #30ad03; color: #30ad04; color: #30ad05; color: #30ad06; color: #30ad07; color: #30ad08; color: #30ad09; color: #30ad0a; color: #30ad0b; color: #30ad0c; color: #30ad0d; color: #30ad0e; color: #30ad0f; +color: #30ae00; color: #30ae01; color: #30ae02; color: #30ae03; color: #30ae04; color: #30ae05; color: #30ae06; color: #30ae07; color: #30ae08; color: #30ae09; color: #30ae0a; color: #30ae0b; color: #30ae0c; color: #30ae0d; color: #30ae0e; color: #30ae0f; +color: #30af00; color: #30af01; color: #30af02; color: #30af03; color: #30af04; color: #30af05; color: #30af06; color: #30af07; color: #30af08; color: #30af09; color: #30af0a; color: #30af0b; color: #30af0c; color: #30af0d; color: #30af0e; color: #30af0f; +color: #30b000; color: #30b001; color: #30b002; color: #30b003; color: #30b004; color: #30b005; color: #30b006; color: #30b007; color: #30b008; color: #30b009; color: #30b00a; color: #30b00b; color: #30b00c; color: #30b00d; color: #30b00e; color: #30b00f; +color: #30b100; color: #30b101; color: #30b102; color: #30b103; color: #30b104; color: #30b105; color: #30b106; color: #30b107; color: #30b108; color: #30b109; color: #30b10a; color: #30b10b; color: #30b10c; color: #30b10d; color: #30b10e; color: #30b10f; +color: #30b200; color: #30b201; color: #30b202; color: #30b203; color: #30b204; color: #30b205; color: #30b206; color: #30b207; color: #30b208; color: #30b209; color: #30b20a; color: #30b20b; color: #30b20c; color: #30b20d; color: #30b20e; color: #30b20f; +color: #30b300; color: #30b301; color: #30b302; color: #30b303; color: #30b304; color: #30b305; color: #30b306; color: #30b307; color: #30b308; color: #30b309; color: #30b30a; color: #30b30b; color: #30b30c; color: #30b30d; color: #30b30e; color: #30b30f; +color: #30b400; color: #30b401; color: #30b402; color: #30b403; color: #30b404; color: #30b405; color: #30b406; color: #30b407; color: #30b408; color: #30b409; color: #30b40a; color: #30b40b; color: #30b40c; color: #30b40d; color: #30b40e; color: #30b40f; +color: #30b500; color: #30b501; color: #30b502; color: #30b503; color: #30b504; color: #30b505; color: #30b506; color: #30b507; color: #30b508; color: #30b509; color: #30b50a; color: #30b50b; color: #30b50c; color: #30b50d; color: #30b50e; color: #30b50f; +color: #30b600; color: #30b601; color: #30b602; color: #30b603; color: #30b604; color: #30b605; color: #30b606; color: #30b607; color: #30b608; color: #30b609; color: #30b60a; color: #30b60b; color: #30b60c; color: #30b60d; color: #30b60e; color: #30b60f; +color: #30b700; color: #30b701; color: #30b702; color: #30b703; color: #30b704; color: #30b705; color: #30b706; color: #30b707; color: #30b708; color: #30b709; color: #30b70a; color: #30b70b; color: #30b70c; color: #30b70d; color: #30b70e; color: #30b70f; +color: #30b800; color: #30b801; color: #30b802; color: #30b803; color: #30b804; color: #30b805; color: #30b806; color: #30b807; color: #30b808; color: #30b809; color: #30b80a; color: #30b80b; color: #30b80c; color: #30b80d; color: #30b80e; color: #30b80f; +color: #30b900; color: #30b901; color: #30b902; color: #30b903; color: #30b904; color: #30b905; color: #30b906; color: #30b907; color: #30b908; color: #30b909; color: #30b90a; color: #30b90b; color: #30b90c; color: #30b90d; color: #30b90e; color: #30b90f; +color: #30ba00; color: #30ba01; color: #30ba02; color: #30ba03; color: #30ba04; color: #30ba05; color: #30ba06; color: #30ba07; color: #30ba08; color: #30ba09; color: #30ba0a; color: #30ba0b; color: #30ba0c; color: #30ba0d; color: #30ba0e; color: #30ba0f; +color: #30bb00; color: #30bb01; color: #30bb02; color: #30bb03; color: #30bb04; color: #30bb05; color: #30bb06; color: #30bb07; color: #30bb08; color: #30bb09; color: #30bb0a; color: #30bb0b; color: #30bb0c; color: #30bb0d; color: #30bb0e; color: #30bb0f; +color: #30bc00; color: #30bc01; color: #30bc02; color: #30bc03; color: #30bc04; color: #30bc05; color: #30bc06; color: #30bc07; color: #30bc08; color: #30bc09; color: #30bc0a; color: #30bc0b; color: #30bc0c; color: #30bc0d; color: #30bc0e; color: #30bc0f; +color: #30bd00; color: #30bd01; color: #30bd02; color: #30bd03; color: #30bd04; color: #30bd05; color: #30bd06; color: #30bd07; color: #30bd08; color: #30bd09; color: #30bd0a; color: #30bd0b; color: #30bd0c; color: #30bd0d; color: #30bd0e; color: #30bd0f; +color: #30be00; color: #30be01; color: #30be02; color: #30be03; color: #30be04; color: #30be05; color: #30be06; color: #30be07; color: #30be08; color: #30be09; color: #30be0a; color: #30be0b; color: #30be0c; color: #30be0d; color: #30be0e; color: #30be0f; +color: #30bf00; color: #30bf01; color: #30bf02; color: #30bf03; color: #30bf04; color: #30bf05; color: #30bf06; color: #30bf07; color: #30bf08; color: #30bf09; color: #30bf0a; color: #30bf0b; color: #30bf0c; color: #30bf0d; color: #30bf0e; color: #30bf0f; +color: #30c000; color: #30c001; color: #30c002; color: #30c003; color: #30c004; color: #30c005; color: #30c006; color: #30c007; color: #30c008; color: #30c009; color: #30c00a; color: #30c00b; color: #30c00c; color: #30c00d; color: #30c00e; color: #30c00f; +color: #30c100; color: #30c101; color: #30c102; color: #30c103; color: #30c104; color: #30c105; color: #30c106; color: #30c107; color: #30c108; color: #30c109; color: #30c10a; color: #30c10b; color: #30c10c; color: #30c10d; color: #30c10e; color: #30c10f; +color: #30c200; color: #30c201; color: #30c202; color: #30c203; color: #30c204; color: #30c205; color: #30c206; color: #30c207; color: #30c208; color: #30c209; color: #30c20a; color: #30c20b; color: #30c20c; color: #30c20d; color: #30c20e; color: #30c20f; +color: #30c300; color: #30c301; color: #30c302; color: #30c303; color: #30c304; color: #30c305; color: #30c306; color: #30c307; color: #30c308; color: #30c309; color: #30c30a; color: #30c30b; color: #30c30c; color: #30c30d; color: #30c30e; color: #30c30f; +color: #30c400; color: #30c401; color: #30c402; color: #30c403; color: #30c404; color: #30c405; color: #30c406; color: #30c407; color: #30c408; color: #30c409; color: #30c40a; color: #30c40b; color: #30c40c; color: #30c40d; color: #30c40e; color: #30c40f; +color: #30c500; color: #30c501; color: #30c502; color: #30c503; color: #30c504; color: #30c505; color: #30c506; color: #30c507; color: #30c508; color: #30c509; color: #30c50a; color: #30c50b; color: #30c50c; color: #30c50d; color: #30c50e; color: #30c50f; +color: #30c600; color: #30c601; color: #30c602; color: #30c603; color: #30c604; color: #30c605; color: #30c606; color: #30c607; color: #30c608; color: #30c609; color: #30c60a; color: #30c60b; color: #30c60c; color: #30c60d; color: #30c60e; color: #30c60f; +color: #30c700; color: #30c701; color: #30c702; color: #30c703; color: #30c704; color: #30c705; color: #30c706; color: #30c707; color: #30c708; color: #30c709; color: #30c70a; color: #30c70b; color: #30c70c; color: #30c70d; color: #30c70e; color: #30c70f; +color: #30c800; color: #30c801; color: #30c802; color: #30c803; color: #30c804; color: #30c805; color: #30c806; color: #30c807; color: #30c808; color: #30c809; color: #30c80a; color: #30c80b; color: #30c80c; color: #30c80d; color: #30c80e; color: #30c80f; +color: #30c900; color: #30c901; color: #30c902; color: #30c903; color: #30c904; color: #30c905; color: #30c906; color: #30c907; color: #30c908; color: #30c909; color: #30c90a; color: #30c90b; color: #30c90c; color: #30c90d; color: #30c90e; color: #30c90f; +color: #30ca00; color: #30ca01; color: #30ca02; color: #30ca03; color: #30ca04; color: #30ca05; color: #30ca06; color: #30ca07; color: #30ca08; color: #30ca09; color: #30ca0a; color: #30ca0b; color: #30ca0c; color: #30ca0d; color: #30ca0e; color: #30ca0f; +color: #30cb00; color: #30cb01; color: #30cb02; color: #30cb03; color: #30cb04; color: #30cb05; color: #30cb06; color: #30cb07; color: #30cb08; color: #30cb09; color: #30cb0a; color: #30cb0b; color: #30cb0c; color: #30cb0d; color: #30cb0e; color: #30cb0f; +color: #30cc00; color: #30cc01; color: #30cc02; color: #30cc03; color: #30cc04; color: #30cc05; color: #30cc06; color: #30cc07; color: #30cc08; color: #30cc09; color: #30cc0a; color: #30cc0b; color: #30cc0c; color: #30cc0d; color: #30cc0e; color: #30cc0f; +color: #30cd00; color: #30cd01; color: #30cd02; color: #30cd03; color: #30cd04; color: #30cd05; color: #30cd06; color: #30cd07; color: #30cd08; color: #30cd09; color: #30cd0a; color: #30cd0b; color: #30cd0c; color: #30cd0d; color: #30cd0e; color: #30cd0f; +color: #30ce00; color: #30ce01; color: #30ce02; color: #30ce03; color: #30ce04; color: #30ce05; color: #30ce06; color: #30ce07; color: #30ce08; color: #30ce09; color: #30ce0a; color: #30ce0b; color: #30ce0c; color: #30ce0d; color: #30ce0e; color: #30ce0f; +color: #30cf00; color: #30cf01; color: #30cf02; color: #30cf03; color: #30cf04; color: #30cf05; color: #30cf06; color: #30cf07; color: #30cf08; color: #30cf09; color: #30cf0a; color: #30cf0b; color: #30cf0c; color: #30cf0d; color: #30cf0e; color: #30cf0f; +color: #30d000; color: #30d001; color: #30d002; color: #30d003; color: #30d004; color: #30d005; color: #30d006; color: #30d007; color: #30d008; color: #30d009; color: #30d00a; color: #30d00b; color: #30d00c; color: #30d00d; color: #30d00e; color: #30d00f; +color: #30d100; color: #30d101; color: #30d102; color: #30d103; color: #30d104; color: #30d105; color: #30d106; color: #30d107; color: #30d108; color: #30d109; color: #30d10a; color: #30d10b; color: #30d10c; color: #30d10d; color: #30d10e; color: #30d10f; +color: #30d200; color: #30d201; color: #30d202; color: #30d203; color: #30d204; color: #30d205; color: #30d206; color: #30d207; color: #30d208; color: #30d209; color: #30d20a; color: #30d20b; color: #30d20c; color: #30d20d; color: #30d20e; color: #30d20f; +color: #30d300; color: #30d301; color: #30d302; color: #30d303; color: #30d304; color: #30d305; color: #30d306; color: #30d307; color: #30d308; color: #30d309; color: #30d30a; color: #30d30b; color: #30d30c; color: #30d30d; color: #30d30e; color: #30d30f; +color: #30d400; color: #30d401; color: #30d402; color: #30d403; color: #30d404; color: #30d405; color: #30d406; color: #30d407; color: #30d408; color: #30d409; color: #30d40a; color: #30d40b; color: #30d40c; color: #30d40d; color: #30d40e; color: #30d40f; +color: #30d500; color: #30d501; color: #30d502; color: #30d503; color: #30d504; color: #30d505; color: #30d506; color: #30d507; color: #30d508; color: #30d509; color: #30d50a; color: #30d50b; color: #30d50c; color: #30d50d; color: #30d50e; color: #30d50f; +color: #30d600; color: #30d601; color: #30d602; color: #30d603; color: #30d604; color: #30d605; color: #30d606; color: #30d607; color: #30d608; color: #30d609; color: #30d60a; color: #30d60b; color: #30d60c; color: #30d60d; color: #30d60e; color: #30d60f; +color: #30d700; color: #30d701; color: #30d702; color: #30d703; color: #30d704; color: #30d705; color: #30d706; color: #30d707; color: #30d708; color: #30d709; color: #30d70a; color: #30d70b; color: #30d70c; color: #30d70d; color: #30d70e; color: #30d70f; +color: #30d800; color: #30d801; color: #30d802; color: #30d803; color: #30d804; color: #30d805; color: #30d806; color: #30d807; color: #30d808; color: #30d809; color: #30d80a; color: #30d80b; color: #30d80c; color: #30d80d; color: #30d80e; color: #30d80f; +color: #30d900; color: #30d901; color: #30d902; color: #30d903; color: #30d904; color: #30d905; color: #30d906; color: #30d907; color: #30d908; color: #30d909; color: #30d90a; color: #30d90b; color: #30d90c; color: #30d90d; color: #30d90e; color: #30d90f; +color: #30da00; color: #30da01; color: #30da02; color: #30da03; color: #30da04; color: #30da05; color: #30da06; color: #30da07; color: #30da08; color: #30da09; color: #30da0a; color: #30da0b; color: #30da0c; color: #30da0d; color: #30da0e; color: #30da0f; +color: #30db00; color: #30db01; color: #30db02; color: #30db03; color: #30db04; color: #30db05; color: #30db06; color: #30db07; color: #30db08; color: #30db09; color: #30db0a; color: #30db0b; color: #30db0c; color: #30db0d; color: #30db0e; color: #30db0f; +color: #30dc00; color: #30dc01; color: #30dc02; color: #30dc03; color: #30dc04; color: #30dc05; color: #30dc06; color: #30dc07; color: #30dc08; color: #30dc09; color: #30dc0a; color: #30dc0b; color: #30dc0c; color: #30dc0d; color: #30dc0e; color: #30dc0f; +color: #30dd00; color: #30dd01; color: #30dd02; color: #30dd03; color: #30dd04; color: #30dd05; color: #30dd06; color: #30dd07; color: #30dd08; color: #30dd09; color: #30dd0a; color: #30dd0b; color: #30dd0c; color: #30dd0d; color: #30dd0e; color: #30dd0f; +color: #30de00; color: #30de01; color: #30de02; color: #30de03; color: #30de04; color: #30de05; color: #30de06; color: #30de07; color: #30de08; color: #30de09; color: #30de0a; color: #30de0b; color: #30de0c; color: #30de0d; color: #30de0e; color: #30de0f; +color: #30df00; color: #30df01; color: #30df02; color: #30df03; color: #30df04; color: #30df05; color: #30df06; color: #30df07; color: #30df08; color: #30df09; color: #30df0a; color: #30df0b; color: #30df0c; color: #30df0d; color: #30df0e; color: #30df0f; +color: #30e000; color: #30e001; color: #30e002; color: #30e003; color: #30e004; color: #30e005; color: #30e006; color: #30e007; color: #30e008; color: #30e009; color: #30e00a; color: #30e00b; color: #30e00c; color: #30e00d; color: #30e00e; color: #30e00f; +color: #30e100; color: #30e101; color: #30e102; color: #30e103; color: #30e104; color: #30e105; color: #30e106; color: #30e107; color: #30e108; color: #30e109; color: #30e10a; color: #30e10b; color: #30e10c; color: #30e10d; color: #30e10e; color: #30e10f; +color: #30e200; color: #30e201; color: #30e202; color: #30e203; color: #30e204; color: #30e205; color: #30e206; color: #30e207; color: #30e208; color: #30e209; color: #30e20a; color: #30e20b; color: #30e20c; color: #30e20d; color: #30e20e; color: #30e20f; +color: #30e300; color: #30e301; color: #30e302; color: #30e303; color: #30e304; color: #30e305; color: #30e306; color: #30e307; color: #30e308; color: #30e309; color: #30e30a; color: #30e30b; color: #30e30c; color: #30e30d; color: #30e30e; color: #30e30f; +color: #30e400; color: #30e401; color: #30e402; color: #30e403; color: #30e404; color: #30e405; color: #30e406; color: #30e407; color: #30e408; color: #30e409; color: #30e40a; color: #30e40b; color: #30e40c; color: #30e40d; color: #30e40e; color: #30e40f; +color: #30e500; color: #30e501; color: #30e502; color: #30e503; color: #30e504; color: #30e505; color: #30e506; color: #30e507; color: #30e508; color: #30e509; color: #30e50a; color: #30e50b; color: #30e50c; color: #30e50d; color: #30e50e; color: #30e50f; +color: #30e600; color: #30e601; color: #30e602; color: #30e603; color: #30e604; color: #30e605; color: #30e606; color: #30e607; color: #30e608; color: #30e609; color: #30e60a; color: #30e60b; color: #30e60c; color: #30e60d; color: #30e60e; color: #30e60f; +color: #30e700; color: #30e701; color: #30e702; color: #30e703; color: #30e704; color: #30e705; color: #30e706; color: #30e707; color: #30e708; color: #30e709; color: #30e70a; color: #30e70b; color: #30e70c; color: #30e70d; color: #30e70e; color: #30e70f; +color: #30e800; color: #30e801; color: #30e802; color: #30e803; color: #30e804; color: #30e805; color: #30e806; color: #30e807; color: #30e808; color: #30e809; color: #30e80a; color: #30e80b; color: #30e80c; color: #30e80d; color: #30e80e; color: #30e80f; +color: #30e900; color: #30e901; color: #30e902; color: #30e903; color: #30e904; color: #30e905; color: #30e906; color: #30e907; color: #30e908; color: #30e909; color: #30e90a; color: #30e90b; color: #30e90c; color: #30e90d; color: #30e90e; color: #30e90f; +color: #30ea00; color: #30ea01; color: #30ea02; color: #30ea03; color: #30ea04; color: #30ea05; color: #30ea06; color: #30ea07; color: #30ea08; color: #30ea09; color: #30ea0a; color: #30ea0b; color: #30ea0c; color: #30ea0d; color: #30ea0e; color: #30ea0f; +color: #30eb00; color: #30eb01; color: #30eb02; color: #30eb03; color: #30eb04; color: #30eb05; color: #30eb06; color: #30eb07; color: #30eb08; color: #30eb09; color: #30eb0a; color: #30eb0b; color: #30eb0c; color: #30eb0d; color: #30eb0e; color: #30eb0f; +color: #30ec00; color: #30ec01; color: #30ec02; color: #30ec03; color: #30ec04; color: #30ec05; color: #30ec06; color: #30ec07; color: #30ec08; color: #30ec09; color: #30ec0a; color: #30ec0b; color: #30ec0c; color: #30ec0d; color: #30ec0e; color: #30ec0f; +color: #30ed00; color: #30ed01; color: #30ed02; color: #30ed03; color: #30ed04; color: #30ed05; color: #30ed06; color: #30ed07; color: #30ed08; color: #30ed09; color: #30ed0a; color: #30ed0b; color: #30ed0c; color: #30ed0d; color: #30ed0e; color: #30ed0f; +color: #30ee00; color: #30ee01; color: #30ee02; color: #30ee03; color: #30ee04; color: #30ee05; color: #30ee06; color: #30ee07; color: #30ee08; color: #30ee09; color: #30ee0a; color: #30ee0b; color: #30ee0c; color: #30ee0d; color: #30ee0e; color: #30ee0f; +color: #30ef00; color: #30ef01; color: #30ef02; color: #30ef03; color: #30ef04; color: #30ef05; color: #30ef06; color: #30ef07; color: #30ef08; color: #30ef09; color: #30ef0a; color: #30ef0b; color: #30ef0c; color: #30ef0d; color: #30ef0e; color: #30ef0f; +color: #30f000; color: #30f001; color: #30f002; color: #30f003; color: #30f004; color: #30f005; color: #30f006; color: #30f007; color: #30f008; color: #30f009; color: #30f00a; color: #30f00b; color: #30f00c; color: #30f00d; color: #30f00e; color: #30f00f; +color: #30f100; color: #30f101; color: #30f102; color: #30f103; color: #30f104; color: #30f105; color: #30f106; color: #30f107; color: #30f108; color: #30f109; color: #30f10a; color: #30f10b; color: #30f10c; color: #30f10d; color: #30f10e; color: #30f10f; +color: #30f200; color: #30f201; color: #30f202; color: #30f203; color: #30f204; color: #30f205; color: #30f206; color: #30f207; color: #30f208; color: #30f209; color: #30f20a; color: #30f20b; color: #30f20c; color: #30f20d; color: #30f20e; color: #30f20f; +color: #30f300; color: #30f301; color: #30f302; color: #30f303; color: #30f304; color: #30f305; color: #30f306; color: #30f307; color: #30f308; color: #30f309; color: #30f30a; color: #30f30b; color: #30f30c; color: #30f30d; color: #30f30e; color: #30f30f; +color: #30f400; color: #30f401; color: #30f402; color: #30f403; color: #30f404; color: #30f405; color: #30f406; color: #30f407; color: #30f408; color: #30f409; color: #30f40a; color: #30f40b; color: #30f40c; color: #30f40d; color: #30f40e; color: #30f40f; +color: #30f500; color: #30f501; color: #30f502; color: #30f503; color: #30f504; color: #30f505; color: #30f506; color: #30f507; color: #30f508; color: #30f509; color: #30f50a; color: #30f50b; color: #30f50c; color: #30f50d; color: #30f50e; color: #30f50f; +color: #30f600; color: #30f601; color: #30f602; color: #30f603; color: #30f604; color: #30f605; color: #30f606; color: #30f607; color: #30f608; color: #30f609; color: #30f60a; color: #30f60b; color: #30f60c; color: #30f60d; color: #30f60e; color: #30f60f; +color: #30f700; color: #30f701; color: #30f702; color: #30f703; color: #30f704; color: #30f705; color: #30f706; color: #30f707; color: #30f708; color: #30f709; color: #30f70a; color: #30f70b; color: #30f70c; color: #30f70d; color: #30f70e; color: #30f70f; +color: #30f800; color: #30f801; color: #30f802; color: #30f803; color: #30f804; color: #30f805; color: #30f806; color: #30f807; color: #30f808; color: #30f809; color: #30f80a; color: #30f80b; color: #30f80c; color: #30f80d; color: #30f80e; color: #30f80f; +color: #30f900; color: #30f901; color: #30f902; color: #30f903; color: #30f904; color: #30f905; color: #30f906; color: #30f907; color: #30f908; color: #30f909; color: #30f90a; color: #30f90b; color: #30f90c; color: #30f90d; color: #30f90e; color: #30f90f; +color: #30fa00; color: #30fa01; color: #30fa02; color: #30fa03; color: #30fa04; color: #30fa05; color: #30fa06; color: #30fa07; color: #30fa08; color: #30fa09; color: #30fa0a; color: #30fa0b; color: #30fa0c; color: #30fa0d; color: #30fa0e; color: #30fa0f; +color: #30fb00; color: #30fb01; color: #30fb02; color: #30fb03; color: #30fb04; color: #30fb05; color: #30fb06; color: #30fb07; color: #30fb08; color: #30fb09; color: #30fb0a; color: #30fb0b; color: #30fb0c; color: #30fb0d; color: #30fb0e; color: #30fb0f; +color: #30fc00; color: #30fc01; color: #30fc02; color: #30fc03; color: #30fc04; color: #30fc05; color: #30fc06; color: #30fc07; color: #30fc08; color: #30fc09; color: #30fc0a; color: #30fc0b; color: #30fc0c; color: #30fc0d; color: #30fc0e; color: #30fc0f; +color: #30fd00; color: #30fd01; color: #30fd02; color: #30fd03; color: #30fd04; color: #30fd05; color: #30fd06; color: #30fd07; color: #30fd08; color: #30fd09; color: #30fd0a; color: #30fd0b; color: #30fd0c; color: #30fd0d; color: #30fd0e; color: #30fd0f; +color: #30fe00; color: #30fe01; color: #30fe02; color: #30fe03; color: #30fe04; color: #30fe05; color: #30fe06; color: #30fe07; color: #30fe08; color: #30fe09; color: #30fe0a; color: #30fe0b; color: #30fe0c; color: #30fe0d; color: #30fe0e; color: #30fe0f; +color: #30ff00; color: #30ff01; color: #30ff02; color: #30ff03; color: #30ff04; color: #30ff05; color: #30ff06; color: #30ff07; color: #30ff08; color: #30ff09; color: #30ff0a; color: #30ff0b; color: #30ff0c; color: #30ff0d; color: #30ff0e; color: #30ff0f; } diff --git a/.config/vim/bundle/vimwiki/autoload/vimwiki/base.vim b/.config/vim/bundle/vimwiki/autoload/vimwiki/base.vim new file mode 100644 index 0000000..4a13da8 --- /dev/null +++ b/.config/vim/bundle/vimwiki/autoload/vimwiki/base.vim @@ -0,0 +1,2395 @@ +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 +" Vimwiki autoload plugin file +" Desc: Basic functionality +" Home: https://github.com/vimwiki/vimwiki/ + +if exists('g:loaded_vimwiki_auto') || &compatible + finish +endif +let g:loaded_vimwiki_auto = 1 + + +let g:vimwiki_max_scan_for_caption = 5 + + +function! s:safesubstitute(text, search, replace, mode) abort + " Substitute regexp but do not interpret replace + let escaped = escape(a:replace, '\&') + return substitute(a:text, a:search, escaped, a:mode) +endfunction + + +function! s:vimwiki_get_known_syntaxes() abort + " Getting all syntaxes that different wikis could have + let syntaxes = {} + let syntaxes['default'] = 1 + for wiki_nr in range(vimwiki#vars#number_of_wikis()) + let wiki_syntax = vimwiki#vars#get_wikilocal('syntax', wiki_nr) + let syntaxes[wiki_syntax] = 1 + endfor + " also consider the syntaxes from g:vimwiki_ext2syntax + for syn in values(vimwiki#vars#get_global('ext2syntax')) + let syntaxes[syn] = 1 + endfor + return keys(syntaxes) +endfunction + + +function! vimwiki#base#file_pattern(files) abort + " Get search regex from glob() + " string. Aim to support *all* special characters, forcing the user to choose + " names that are compatible with any external restrictions that they + " encounter (e.g. filesystem, wiki conventions, other syntaxes, ...). + " See: https://github.com/vimwiki-backup/vimwiki/issues/316 + " Change / to [/\\] to allow "Windows paths" + return '\V\%('.join(a:files, '\|').'\)\m' +endfunction + + +"FIXME TODO slow and faulty +function! vimwiki#base#subdir(path, filename) abort + let path = a:path + " ensure that we are not fooled by a symbolic link + "FIXME if we are not "fooled", we end up in a completely different wiki? + if a:filename !~# '^scp:' + let filename = resolve(a:filename) + else + let filename = a:filename + endif + let idx = 0 + "FIXME this can terminate in the middle of a path component! + while path[idx] ==? filename[idx] + let idx = idx + 1 + endwhile + + let p = split(strpart(filename, idx), '[/\\]') + let res = join(p[:-2], '/') + if len(res) > 0 + let res = res.'/' + endif + return res +endfunction + + +function! vimwiki#base#current_subdir() abort + return vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path'), expand('%:p')) +endfunction + + +function! vimwiki#base#invsubdir(subdir) abort + return substitute(a:subdir, '[^/\.]\+/', '../', 'g') +endfunction + + +" Returns: the number of the wiki a file belongs to or -1 if it doesn't belong +" to any registered wiki. +" The path can be the full path or just the directory of the file +function! vimwiki#base#find_wiki(path) abort + let bestmatch = -1 + let bestlen = 0 + let path = vimwiki#path#path_norm(vimwiki#path#chomp_slash(a:path)) + for idx in range(vimwiki#vars#number_of_wikis()) + let idx_path = expand(vimwiki#vars#get_wikilocal('path', idx)) + let idx_path = vimwiki#path#path_norm(vimwiki#path#chomp_slash(idx_path)) + let common_pfx = vimwiki#path#path_common_pfx(idx_path, path) + if vimwiki#path#is_equal(common_pfx, idx_path) + if len(common_pfx) > bestlen + let bestlen = len(common_pfx) + let bestmatch = idx + endif + endif + endfor + + return bestmatch +endfunction + + +" helper: check if a link is a well formed wiki link +function! s:is_wiki_link(link_infos) abort + return a:link_infos.scheme =~# '\mwiki\d\+' || a:link_infos.scheme ==# 'diary' +endfunction + + +" THE central function of Vimwiki. Extract infos about the target from a link. +" If the second parameter is present, which should be an absolute file path, it +" is assumed that the link appears in that file. Without it, the current file +" is used. +function! vimwiki#base#resolve_link(link_text, ...) abort + if a:0 + let source_wiki = vimwiki#base#find_wiki(a:1) + let source_file = a:1 + else + let source_wiki = vimwiki#vars#get_bufferlocal('wiki_nr') + let source_file = vimwiki#path#current_wiki_file() + endif + + " get rid of '\' in escaped characters in []() style markdown links + " other style links don't allow '\' + let link_text = substitute(a:link_text, '\(\\\)\(\W\)\@=', '', 'g') + + let link_infos = { + \ 'index': -1, + \ 'scheme': '', + \ 'filename': '', + \ 'anchor': '', + \ } + + if link_text ==? '' + return link_infos + endif + + let scheme = matchstr(link_text, '^\zs'.vimwiki#vars#get_global('rxSchemes').'\ze:') + if scheme ==? '' + " interwiki link scheme is default + let link_infos.scheme = 'wiki'.source_wiki + else + let link_infos.scheme = scheme + + if link_infos.scheme !~# '\mwiki\d\+\|diary\|local\|file' + let link_infos.filename = link_text " unknown scheme, may be a weblink + return link_infos + endif + + let link_text = matchstr(link_text, '^'.vimwiki#vars#get_global('rxSchemes').':\zs.*\ze') + endif + + let is_wiki_link = s:is_wiki_link(link_infos) + + " extract anchor + if is_wiki_link + let split_lnk = split(link_text, '#', 1) + let link_text = split_lnk[0] + if len(split_lnk) > 1 && split_lnk[-1] !=? '' + let link_infos.anchor = join(split_lnk[1:], '#') + endif + if link_text ==? '' " because the link was of the form '#anchor' + let expected_ext = vimwiki#u#escape(vimwiki#vars#get_wikilocal('ext')).'$' + if source_file =~# expected_ext + " Source file has expected extension. Remove it, it will be added later on + let ext_len = strlen(vimwiki#vars#get_wikilocal('ext')) + let link_text = fnamemodify(source_file, ':p:t')[:-ext_len-1] + endif + + endif + endif + + " check if absolute or relative path + if is_wiki_link && link_text[0] ==# '/' + if link_text !=# '/' + let link_text = link_text[1:] + endif + let is_relative = 0 + elseif !is_wiki_link && vimwiki#path#is_absolute(link_text) + let is_relative = 0 + else + let is_relative = 1 + let root_dir = fnamemodify(source_file, ':p:h') . '/' + endif + + + " extract the other items depending on the scheme + if link_infos.scheme =~# '\mwiki\d\+' + + " interwiki link named wiki 'wn.name:link' format + let wnmatch = matchlist(link_text, '\m^wn\.\([a-zA-Z0-9\-_ ]\+\):\(.*\)') + if len(wnmatch) >= 2 && wnmatch[1] !=? '' && wnmatch[2] !=? '' + let wname = wnmatch[1] + for idx in range(vimwiki#vars#number_of_wikis()) + if vimwiki#vars#get_wikilocal('name', idx) ==# wname + " name matches! + let link_infos.index = idx + let link_text = wnmatch[2] + break + endif + endfor + if link_text !=# wnmatch[2] + " error: invalid wiki name + let link_infos.index = -2 + let link_infos.filename = '' + " use scheme field to return invalid wiki name + let link_infos.scheme = wname + return link_infos + endif + else + " interwiki link numbered wiki format + let link_infos.index = eval(matchstr(link_infos.scheme, '\D\+\zs\d\+\ze')) + if link_infos.index < 0 || link_infos.index >= vimwiki#vars#number_of_wikis() + let link_infos.index = -1 + let link_infos.filename = '' + return link_infos + endif + endif + + if !is_relative || link_infos.index != source_wiki + let root_dir = vimwiki#vars#get_wikilocal('path', link_infos.index) + endif + + let link_infos.filename = root_dir . link_text + + if vimwiki#path#is_link_to_dir(link_text) + if vimwiki#vars#get_global('dir_link') !=? '' + let link_infos.filename .= vimwiki#vars#get_global('dir_link') . + \ vimwiki#vars#get_wikilocal('ext', link_infos.index) + endif + else + let ext = fnamemodify(link_text, ':e') + if ext ==? '' " append ext iff one not already present + let link_infos.filename .= vimwiki#vars#get_wikilocal('ext', link_infos.index) + endif + endif + + elseif link_infos.scheme ==# 'diary' + let link_infos.index = source_wiki + + let link_infos.filename = + \ vimwiki#vars#get_wikilocal('path', link_infos.index) . + \ vimwiki#vars#get_wikilocal('diary_rel_path', link_infos.index) . + \ link_text . + \ vimwiki#vars#get_wikilocal('ext', link_infos.index) + elseif (link_infos.scheme ==# 'file' || link_infos.scheme ==# 'local') && is_relative + let link_infos.filename = simplify(root_dir . link_text) + else " absolute file link + " collapse repeated leading "/"'s within a link + let link_text = substitute(link_text, '\m^/\+', '/', '') + " expand ~/ + let link_text = fnamemodify(link_text, ':p') + let link_infos.filename = simplify(link_text) + endif + + let link_infos.filename = vimwiki#path#normalize(link_infos.filename) + return link_infos +endfunction + + +function! vimwiki#base#system_open_link(url) abort + " handlers + function! s:win32_handler(url) abort + "Disable shellslash for cmd and command.com, but enable for all other shells + "See Issue #560 + if (&shell =~? 'cmd') || (&shell =~? 'command.com') + + if exists('+shellslash') + let old_ssl = &shellslash + set noshellslash + let url = shellescape(a:url, 1) + let &shellslash = old_ssl + else + let url = shellescape(a:url, 1) + endif + execute 'silent ! start "Title" /B ' . url + + else + + if exists('+shellslash') + let old_ssl = &shellslash + set shellslash + let url = shellescape(a:url, 1) + let &shellslash = old_ssl + else + let url = shellescape(a:url, 1) + endif + execute 'silent ! start ' . url + + endif + endfunction + function! s:macunix_handler(url) abort + call system('open ' . shellescape(a:url).' &') + endfunction + function! s:linux_handler(url) abort + call system('xdg-open ' . shellescape(a:url).' &') + endfunction + try + if vimwiki#u#is_windows() + call s:win32_handler(a:url) + return + elseif vimwiki#u#is_macos() + call s:macunix_handler(a:url) + return + else + call s:linux_handler(a:url) + return + endif + endtry + echomsg 'Vimwiki Error: Default Vimwiki link handler was unable to open the HTML file!' +endfunction + + +function! vimwiki#base#open_link(cmd, link, ...) abort + let link_infos = {} + if a:0 + let link_infos = vimwiki#base#resolve_link(a:link, a:1) + else + let link_infos = vimwiki#base#resolve_link(a:link) + endif + + if link_infos.filename ==? '' + if link_infos.index == -1 + echomsg 'Vimwiki Error: No registered wiki ''' . link_infos.scheme . '''.' + elseif link_infos.index == -2 + " scheme field stores wiki name for this error case + echom 'Vimwiki Error: No wiki found with name "' . link_infos.scheme . '"' + else + echomsg 'Vimwiki Error: Unable to resolve link!' + endif + return + endif + + let is_wiki_link = s:is_wiki_link(link_infos) + + let vimwiki_prev_link = [] + " update previous link for wiki pages + if is_wiki_link + if a:0 + let vimwiki_prev_link = [a:1, []] + elseif vimwiki#u#ft_is_vw() + let vimwiki_prev_link = [vimwiki#path#current_wiki_file(), getpos('.')] + endif + endif + + " open/edit + if is_wiki_link + call vimwiki#base#edit_file(a:cmd, link_infos.filename, link_infos.anchor, + \ vimwiki_prev_link, is_wiki_link) + else + call vimwiki#base#system_open_link(link_infos.filename) + endif +endfunction + + +function! vimwiki#base#get_globlinks_escaped(...) abort + let s_arg_lead = a:0 > 0 ? a:1 : '' + " only get links from the current dir + " change to the directory of the current file + let orig_pwd = getcwd() + lcd! %:h + " all path are relative to the current file's location + let globlinks = glob('**/*'.vimwiki#vars#get_wikilocal('ext'), 1)."\n" + " remove extensions + let globlinks = substitute(globlinks, '\'.vimwiki#vars#get_wikilocal('ext').'\ze\n', '', 'g') + " restore the original working directory + exe 'lcd! '.orig_pwd + " convert to a List + let lst = split(globlinks, '\n') + " Filter files whose path matches the user's argument leader + " " use smart case matching + let r_arg = substitute(s_arg_lead, '\u', '[\0\l\0]', 'g') + call filter(lst, '-1 != match(v:val, r_arg)') + " Apply fnameescape() to each item + call map(lst, 'fnameescape(v:val)') + " Return list (for customlist completion) + return lst +endfunction + + +" Optional pattern argument +function! vimwiki#base#generate_links(create, ...) abort + " Get pattern if present + " Globlal to script to be passed to closure + if a:0 + let s:pattern = a:1 + else + let s:pattern = '' + endif + + " Define link generator closure + let GeneratorLinks = copy(l:) + function! GeneratorLinks.f() abort + let lines = [] + + let links = vimwiki#base#get_wikilinks(vimwiki#vars#get_bufferlocal('wiki_nr'), 0, s:pattern) + call sort(links) + + let bullet = repeat(' ', vimwiki#lst#get_list_margin()) . vimwiki#lst#default_symbol().' ' + let l:diary_file_paths = vimwiki#diary#get_diary_files() + + for link in links + let link_infos = vimwiki#base#resolve_link(link) + if !vimwiki#base#is_diary_file(link_infos.filename, copy(l:diary_file_paths)) + if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' + let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink1Template') + else + let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate1') + endif + + let link_caption = vimwiki#base#read_caption(link_infos.filename) + if link_caption ==? '' " default to link if caption not found + let link_caption = link + endif + + let entry = s:safesubstitute(link_tpl, '__LinkUrl__', link, '') + let entry = s:safesubstitute(entry, '__LinkDescription__', link_caption, '') + call add(lines, bullet. entry) + endif + endfor + + return lines + endfunction + + let links_rx = '\%(^\s*$\)\|\%('.vimwiki#vars#get_syntaxlocal('rxListBullet').'\)' + + call vimwiki#base#update_listing_in_buffer( + \ GeneratorLinks, + \ vimwiki#vars#get_global('links_header'), + \ links_rx, + \ line('$')+1, + \ vimwiki#vars#get_global('links_header_level'), + \ a:create) +endfunction + + +function! vimwiki#base#goto(...) abort + let key = a:0 > 0 ? a:1 : input('Enter name: ') + let anchor = a:0 > 1 ? a:2 : '' + + " Save current file pos + let vimwiki_prev_link = [vimwiki#path#current_wiki_file(), getpos('.')] + + call vimwiki#base#edit_file(':e', + \ vimwiki#vars#get_wikilocal('path') . key . vimwiki#vars#get_wikilocal('ext'), + \ anchor, + \ vimwiki_prev_link, + \ vimwiki#u#ft_is_vw()) +endfunction + + +function! vimwiki#base#backlinks() abort + let current_filename = expand('%:p') + let locations = [] + for idx in range(vimwiki#vars#number_of_wikis()) + let syntax = vimwiki#vars#get_wikilocal('syntax', idx) + let wikifiles = vimwiki#base#find_files(idx, 0) + for source_file in wikifiles + let links = s:get_links(source_file, idx) + for [target_file, _, lnum, col] in links + if vimwiki#u#is_windows() + " TODO this is a temporary fix - see issue #478 + let target_file = substitute(target_file, '/', '\', 'g') + let current_filename = substitute(current_filename, '/', '\', 'g') + endif + " don't include links from the current file to itself + if vimwiki#path#is_equal(target_file, current_filename) && + \ !vimwiki#path#is_equal(target_file, source_file) + call add(locations, {'filename':source_file, 'lnum':lnum, 'col':col}) + endif + endfor + endfor + endfor + + if empty(locations) + echomsg 'Vimwiki: No other file links to this file' + else + call setloclist(0, locations, 'r') + lopen + endif +endfunction + + +" Returns: a list containing all files of the given wiki as absolute file path. +" If the given wiki number is negative, the diary of the current wiki is used +" If the second argument is not zero, only directories are found +" If third argument: pattern to search for +function! vimwiki#base#find_files(wiki_nr, directories_only, ...) abort + let wiki_nr = a:wiki_nr + if wiki_nr >= 0 + let root_directory = vimwiki#vars#get_wikilocal('path', wiki_nr) + else + let root_directory = vimwiki#vars#get_wikilocal('path') . + \ vimwiki#vars#get_wikilocal('diary_rel_path') + let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr') + endif + if a:directories_only + let ext = '/' + else + let ext = vimwiki#vars#get_wikilocal('ext', wiki_nr) + endif + " If pattern is given, use it + " if current wiki is temporary -- was added by an arbitrary wiki file then do + " not search wiki files in subdirectories. Or it would hang the system if + " wiki file was created in $HOME or C:/ dirs. + if a:0 && a:1 !=# '' + let pattern = a:1 + elseif vimwiki#vars#get_wikilocal('is_temporary_wiki', wiki_nr) + let pattern = '*'.ext + else + let pattern = '**/*'.ext + endif + let files = split(globpath(root_directory, pattern), '\n') + + " filter excluded files before returning + for pattern in vimwiki#vars#get_wikilocal('exclude_files') + let efiles = split(globpath(root_directory, pattern), '\n') + let files = filter(files, 'index(efiles, v:val) == -1') + endfor + + return files +endfunction + + +" Returns: a list containing the links to get from the current file to all wiki +" files in the given wiki. +" If the given wiki number is negative, the diary of the current wiki is used. +" If also_absolute_links is nonzero, also return links of the form /file +" If pattern is not '', only filepaths matching pattern will be considered +function! vimwiki#base#get_wikilinks(wiki_nr, also_absolute_links, pattern) abort + let files = vimwiki#base#find_files(a:wiki_nr, 0, a:pattern) + if a:wiki_nr == vimwiki#vars#get_bufferlocal('wiki_nr') + let cwd = vimwiki#path#wikify_path(expand('%:p:h')) + elseif a:wiki_nr < 0 + let cwd = vimwiki#vars#get_wikilocal('path') . vimwiki#vars#get_wikilocal('diary_rel_path') + else + let cwd = vimwiki#vars#get_wikilocal('path', a:wiki_nr) + endif + let result = [] + for wikifile in files + let wikifile = fnamemodify(wikifile, ':r') " strip extension + if vimwiki#u#is_windows() + " TODO temporary fix see #478 + let wikifile = substitute(wikifile , '/', '\', 'g') + endif + let wikifile = vimwiki#path#relpath(cwd, wikifile) + call add(result, wikifile) + endfor + if a:also_absolute_links + for wikifile in files + if a:wiki_nr == vimwiki#vars#get_bufferlocal('wiki_nr') + let cwd = vimwiki#vars#get_wikilocal('path') + elseif a:wiki_nr < 0 + let cwd = vimwiki#vars#get_wikilocal('path') . vimwiki#vars#get_wikilocal('diary_rel_path') + endif + let wikifile = fnamemodify(wikifile, ':r') " strip extension + if vimwiki#u#is_windows() + " TODO temporary fix see #478 + let wikifile = substitute(wikifile , '/', '\', 'g') + endif + let wikifile = '/'.vimwiki#path#relpath(cwd, wikifile) + call add(result, wikifile) + endfor + endif + return result +endfunction + + +" Returns: a list containing the links to all directories from the current file +function! vimwiki#base#get_wiki_directories(wiki_nr) abort + let dirs = vimwiki#base#find_files(a:wiki_nr, 1) + if a:wiki_nr == vimwiki#vars#get_bufferlocal('wiki_nr') + let cwd = vimwiki#path#wikify_path(expand('%:p:h')) + let root_dir = vimwiki#vars#get_wikilocal('path') + else + let cwd = vimwiki#vars#get_wikilocal('path', a:wiki_nr) + endif + let result = ['./'] + for wikidir in dirs + let wikidir_relative = vimwiki#path#relpath(cwd, wikidir) + call add(result, wikidir_relative) + if a:wiki_nr == vimwiki#vars#get_bufferlocal('wiki_nr') + let wikidir_absolute = '/'.vimwiki#path#relpath(root_dir, wikidir) + call add(result, wikidir_absolute) + endif + endfor + return result +endfunction + + +function! vimwiki#base#get_anchors(filename, syntax) abort + if !filereadable(a:filename) + return [] + endif + + let rxheader = vimwiki#vars#get_syntaxlocal('header_search', a:syntax) + let rxbold = vimwiki#vars#get_syntaxlocal('bold_search', a:syntax) + let rxtag = vimwiki#vars#get_syntaxlocal('tag_search', a:syntax) + + let anchor_level = ['', '', '', '', '', '', ''] + let anchors = [] + let current_complete_anchor = '' + for line in readfile(a:filename) + + " collect headers + let h_match = matchlist(line, rxheader) + if !empty(h_match) + let header = vimwiki#u#trim(h_match[2]) + let level = len(h_match[1]) + call add(anchors, header) + let anchor_level[level-1] = header + for l in range(level, 6) + let anchor_level[l] = '' + endfor + if level == 1 + let current_complete_anchor = header + else + let current_complete_anchor = '' + for l in range(level-1) + if anchor_level[l] !=? '' + let current_complete_anchor .= anchor_level[l].'#' + endif + endfor + let current_complete_anchor .= header + call add(anchors, current_complete_anchor) + endif + endif + + " collect bold text (there can be several in one line) + let bold_count = 1 + while 1 + let bold_text = matchstr(line, rxbold, 0, bold_count) + if bold_text ==? '' + break + endif + call add(anchors, bold_text) + if current_complete_anchor !=? '' + call add(anchors, current_complete_anchor.'#'.bold_text) + endif + let bold_count += 1 + endwhile + + " collect tags text (there can be several in one line) + let tag_count = 1 + while 1 + let tag_group_text = matchstr(line, rxtag, 0, tag_count) + if tag_group_text ==? '' + break + endif + for tag_text in split(tag_group_text, ':') + call add(anchors, tag_text) + if current_complete_anchor !=? '' + call add(anchors, current_complete_anchor.'#'.tag_text) + endif + endfor + let tag_count += 1 + endwhile + + endfor + + return anchors +endfunction + + +function! s:jump_to_anchor(anchor) abort + let oldpos = getpos('.') + call cursor(1, 1) + + let anchor = vimwiki#u#escape(a:anchor) + + let segments = split(anchor, '#', 0) + + for segment in segments + + let anchor_header = s:safesubstitute( + \ vimwiki#vars#get_syntaxlocal('header_match'), + \ '__Header__', segment, '') + let anchor_bold = s:safesubstitute( + \ vimwiki#vars#get_syntaxlocal('bold_match'), + \ '__Text__', segment, '') + let anchor_tag = s:safesubstitute( + \ vimwiki#vars#get_syntaxlocal('tag_match'), + \ '__Tag__', segment, '') + + if !search(anchor_tag, 'Wc') && !search(anchor_header, 'Wc') && !search(anchor_bold, 'Wc') + call setpos('.', oldpos) + break + endif + let oldpos = getpos('.') + endfor +endfunction + + +" Params: full path to a wiki file and its wiki number +" Returns: a list of all links inside the wiki file +" Every list item has the form +" [target file, anchor, line number of the link in source file, column number] +function! s:get_links(wikifile, idx) abort + if !filereadable(a:wikifile) + return [] + endif + + let syntax = vimwiki#vars#get_wikilocal('syntax', a:idx) + if syntax ==# 'markdown' + let rx_link = vimwiki#vars#get_syntaxlocal('rxWeblink1MatchUrl', syntax) + else + let rx_link = vimwiki#vars#get_syntaxlocal('wikilink', syntax) + endif + + let links = [] + let lnum = 0 + + for line in readfile(a:wikifile) + let lnum += 1 + + let link_count = 1 + while 1 + let col = match(line, rx_link, 0, link_count)+1 + let link_text = matchstr(line, rx_link, 0, link_count) + if link_text ==? '' + break + endif + let link_count += 1 + let target = vimwiki#base#resolve_link(link_text, a:wikifile) + if target.filename !=? '' && target.scheme =~# '\mwiki\d\+\|diary\|file\|local' + call add(links, [target.filename, target.anchor, lnum, col]) + endif + endwhile + endfor + + return links +endfunction + + +function! vimwiki#base#check_links() abort + let anchors_of_files = {} + let links_of_files = {} + let errors = [] + for idx in range(vimwiki#vars#number_of_wikis()) + let syntax = vimwiki#vars#get_wikilocal('syntax', idx) + let wikifiles = vimwiki#base#find_files(idx, 0) + for wikifile in wikifiles + let links_of_files[wikifile] = s:get_links(wikifile, idx) + let anchors_of_files[wikifile] = vimwiki#base#get_anchors(wikifile, syntax) + endfor + endfor + + for wikifile in keys(links_of_files) + for [target_file, target_anchor, lnum, col] in links_of_files[wikifile] + if target_file ==? '' && target_anchor ==? '' + call add(errors, {'filename':wikifile, 'lnum':lnum, 'col':col, + \ 'text': 'numbered scheme refers to a non-existent wiki'}) + elseif has_key(anchors_of_files, target_file) + if target_anchor !=? '' && index(anchors_of_files[target_file], target_anchor) < 0 + call add(errors, {'filename':wikifile, 'lnum':lnum, 'col':col, + \'text': 'there is no such anchor: '.target_anchor}) + endif + else + if target_file =~? '\m/$' " maybe it's a link to a directory + if !isdirectory(target_file) + call add(errors, {'filename':wikifile, 'lnum':lnum, 'col':col, + \'text': 'there is no such directory: '.target_file}) + endif + else " maybe it's a non-wiki file + if filereadable(target_file) + let anchors_of_files[target_file] = [] + else + call add(errors, {'filename':wikifile, 'lnum':lnum, 'col':col, + \'text': 'there is no such file: '.target_file}) + endif + endif + endif + endfor + endfor + + + " Check which wiki files are reachable from at least one of the index files. + " First, all index files are marked as reachable. Then, pick a reachable file + " and mark all files to which it links as reachable, too. Repeat until the + " links of all reachable files have been checked. + + " Map every wiki file to a number. 0 means not reachable from any index file, + " 1 means reachable, but the outgoing links are not checked yet, 2 means + " reachable and done. + let reachable_wikifiles = {} + + " first, all files are considered not reachable + for wikifile in keys(links_of_files) + let reachable_wikifiles[wikifile] = 0 + endfor + + " mark every index file as reachable + for idx in range(vimwiki#vars#number_of_wikis()) + let index_file = vimwiki#vars#get_wikilocal('path', idx) . + \ vimwiki#vars#get_wikilocal('index', idx) . vimwiki#vars#get_wikilocal('ext', idx) + if filereadable(index_file) + let reachable_wikifiles[index_file] = 1 + endif + endfor + + while 1 + let next_unvisited_wikifile = '' + for wf in keys(reachable_wikifiles) + if reachable_wikifiles[wf] == 1 + let next_unvisited_wikifile = wf + let reachable_wikifiles[wf] = 2 + break + endif + endfor + if next_unvisited_wikifile ==? '' + break + endif + for [target_file, target_anchor, lnum, col] in links_of_files[next_unvisited_wikifile] + if has_key(reachable_wikifiles, target_file) && reachable_wikifiles[target_file] == 0 + let reachable_wikifiles[target_file] = 1 + endif + endfor + endwhile + + for wf in keys(reachable_wikifiles) + if reachable_wikifiles[wf] == 0 + call add(errors, {'text':wf.' is not reachable from the index file'}) + endif + endfor + + if empty(errors) + echomsg 'Vimwiki: All links are OK' + else + call setqflist(errors, 'r') + copen + endif +endfunction + + +function! vimwiki#base#edit_file(command, filename, anchor, ...) abort + let fname = escape(a:filename, '% *|#`') + let dir = fnamemodify(a:filename, ':p:h') + + let ok = vimwiki#path#mkdir(dir, 1) + + if !ok + echomsg ' ' + echomsg 'Vimwiki Error: Unable to edit file in non-existent directory: '.dir + return + endif + + " Check if the file we want to open is already the current file + " which happens if we jump to an achor in the current file. + " This hack is necessary because apparently Vim messes up the result of + " getpos() directly after this command. Strange. + if !(a:command ==# ':e ' && vimwiki#path#is_equal(a:filename, expand('%:p'))) + try + execute a:command fname + catch /E37:/ + echomsg 'Vimwiki: Can''t leave the current buffer, because it is modified. Hint: Take a look at' + \ ''':h g:vimwiki_autowriteall'' to see how to save automatically.' + return + catch /E325:/ + echom 'Vimwiki: Vim couldn''t open the file, probably because a swapfile already exists. See :h E325.' + return + endtry + + " If the opened file was not already loaded by Vim, an autocommand is + " triggered at this point + + " Make sure no other plugin takes ownership over the new file. Vimwiki + " rules them all! Well, except for directories, which may be opened with + " Netrw + if !vimwiki#u#ft_is_vw() && fname !~? '\m/$' + call vimwiki#u#ft_set() + endif + endif + if a:anchor !=? '' + call s:jump_to_anchor(a:anchor) + endif + + " save previous link + " a:1 -- previous vimwiki link to save + " a:2 -- should we update previous link + if a:0 && a:2 && len(a:1) > 0 + let prev_links = vimwiki#vars#get_bufferlocal('prev_links') + call insert(prev_links, a:1) + call vimwiki#vars#set_bufferlocal('prev_links', prev_links) + endif +endfunction + + +function! vimwiki#base#search_word(wikiRx, cmd) abort + let match_line = search(a:wikiRx, 's'.a:cmd) + if match_line == 0 + echomsg 'Vimwiki: Wiki link not found' + endif +endfunction + + +" Returns part of the line that matches wikiRX at cursor +function! vimwiki#base#matchstr_at_cursor(wikiRX) abort + let col = col('.') - 1 + let line = getline('.') + let ebeg = -1 + let cont = match(line, a:wikiRX, 0) + while (ebeg >= 0 || (0 <= cont) && (cont <= col)) + let contn = matchend(line, a:wikiRX, cont) + if (cont <= col) && (col < contn) + let ebeg = match(line, a:wikiRX, cont) + let elen = contn - ebeg + break + else + let cont = match(line, a:wikiRX, contn) + endif + endwh + if ebeg >= 0 + return strpart(line, ebeg, elen) + else + return '' + endif +endfunction + + +function! vimwiki#base#replacestr_at_cursor(wikiRX, sub) abort + let col = col('.') - 1 + let line = getline('.') + let ebeg = -1 + let cont = match(line, a:wikiRX, 0) + while (ebeg >= 0 || (0 <= cont) && (cont <= col)) + let contn = matchend(line, a:wikiRX, cont) + if (cont <= col) && (col < contn) + let ebeg = match(line, a:wikiRX, cont) + let elen = contn - ebeg + break + else + let cont = match(line, a:wikiRX, contn) + endif + endwh + if ebeg >= 0 + " TODO: There might be problems with Unicode chars... + let newline = strpart(line, 0, ebeg).a:sub.strpart(line, ebeg+elen) + call setline(line('.'), newline) + endif +endfunction + + +function! s:print_wiki_list() abort + " find the max name length for prettier formatting + let max_len = 0 + for idx in range(vimwiki#vars#number_of_wikis()) + let wname = vimwiki#vars#get_wikilocal('name', idx) + if len(wname) > max_len + let max_len = len(wname) + endif + endfor + + " print each wiki, active wiki highlighted and marked with '*' + for idx in range(vimwiki#vars#number_of_wikis()) + if idx == vimwiki#vars#get_bufferlocal('wiki_nr') + let sep = '*' + echohl PmenuSel + else + let sep = ' ' + echohl None + endif + let wname = vimwiki#vars#get_wikilocal('name', idx) + let wpath = vimwiki#vars#get_wikilocal('path', idx) + if wname ==? '' + let wname = '----' + if max_len < 4 + let max_len = 4 + endif + endif + let wname = '"' . wname . '"' + echo printf('%2d %s %-*s %s', idx+1, sep, max_len+2, wname, wpath) + endfor + echohl None +endfunction + + +" Update link: in fname.ext +" Param: fname: the source file where to change links +" Param: old: url regex of old path relative to wiki root +" Param: new: url string of new path +function! s:update_wiki_link(fname, old, new) abort + echo 'Updating links in '.a:fname + let has_updates = 0 + let dest = [] + for line in readfile(a:fname) + if !has_updates && match(line, a:old) != -1 + let has_updates = 1 + endif + " XXX: any other characters to escape!? + call add(dest, substitute(line, a:old, escape(a:new, '&'), 'g')) + endfor + " add exception handling... + if has_updates + call rename(a:fname, a:fname.'#vimwiki_upd#') + call writefile(dest, a:fname) + call delete(a:fname.'#vimwiki_upd#') + endif +endfunction + + +" Update link for all files in dir +" Param: old_url, new_url: path of the old, new url relative to ... +" Param: dir: directory of the files, relative to wiki_root +function! s:update_wiki_links(wiki_nr, dir, old_url, new_url) abort + " Get list of wiki files + let wiki_root = vimwiki#vars#get_wikilocal('path', a:wiki_nr) + let fsources = vimwiki#base#find_files(a:wiki_nr, 0) + + " Shorten dirname + let dir_rel_root = vimwiki#path#relpath(wiki_root, a:dir) + + " Cache relative url, because they are often the same, like `../dir1/vim-vimwiki.md` + let cache_dict = {} + + " Regex from path + function! s:compute_old_url_r(wiki_nr, dir_rel_fsource, old_url) abort + " Old url + let old_url_r = a:dir_rel_fsource . a:old_url + " Add potential ./ + let old_url_r = '\%(\.[/\\]\)\?' . old_url_r + " Compute old url regex with filename between \zs and \ze + let old_url_r = vimwiki#base#apply_template( + \ vimwiki#vars#get_syntaxlocal('WikiLinkMatchUrlTemplate', + \ vimwiki#vars#get_wikilocal('syntax', a:wiki_nr)), old_url_r, '', '') + + return old_url_r + endfunction + + " For each wikifile + for fsource in fsources + " Shorten fname directory + let fsource_rel_root = vimwiki#path#relpath(wiki_root, fsource) + let fsource_rel_root = fnamemodify(fsource_rel_root, ':h') + + " Compute old_url relative to fname + let dir_rel_fsource = vimwiki#path#relpath(fsource_rel_root, dir_rel_root) + " TODO get relpath coherent (and remove next 2 stuff) + " Remove the trailing ./ + if dir_rel_fsource =~# '.[/\\]$' + let dir_rel_fsource = dir_rel_fsource[:-3] + endif + " Append a / if needed + if !empty(dir_rel_fsource) && dir_rel_fsource !~# '[/\\]$' + let dir_rel_fsource .= '/' + endif + + " New url + let new_url = dir_rel_fsource . a:new_url + + " Old url + " Avoid E713 + let key = empty(dir_rel_fsource) ? 'NaF' : dir_rel_fsource + if index(keys(cache_dict), key) == -1 + let cache_dict[key] = s:compute_old_url_r( + \ a:wiki_nr, dir_rel_fsource, a:old_url) + endif + let old_url_r = cache_dict[key] + + " Update url in source file + call s:update_wiki_link(fsource, old_url_r, new_url) + endfor +endfunction + + +function! s:tail_name(fname) abort + let result = substitute(a:fname, ':', '__colon__', 'g') + let result = fnamemodify(result, ':t:r') + let result = substitute(result, '__colon__', ':', 'g') + return result +endfunction + + +function! s:get_wiki_buffers() abort + let blist = [] + let bcount = 1 + while bcount<=bufnr('$') + if bufexists(bcount) + let bname = fnamemodify(bufname(bcount), ':p') + " this may find buffers that are not part of the current wiki, but that + " doesn't hurt + if bname =~# vimwiki#vars#get_wikilocal('ext').'$' + let bitem = [bname, vimwiki#vars#get_bufferlocal('prev_links', bcount)] + call add(blist, bitem) + endif + endif + let bcount = bcount + 1 + endwhile + return blist +endfunction + + +function! s:open_wiki_buffer(item) abort + call vimwiki#base#edit_file(':e', a:item[0], '') + if !empty(a:item[1]) + call vimwiki#vars#set_bufferlocal('prev_links', a:item[1], a:item[0]) + endif +endfunction + + +function! vimwiki#base#nested_syntax(filetype, start, end, textSnipHl) abort +" From http://vim.wikia.com/wiki/VimTip857 + let ft=toupper(a:filetype) + let group='textGroup'.ft + if exists('b:current_syntax') + let s:current_syntax=b:current_syntax + " Remove current syntax definition, as some syntax files (e.g. cpp.vim) + " do nothing if b:current_syntax is defined. + unlet b:current_syntax + endif + + " Some syntax files set up iskeyword which might scratch vimwiki a bit. + " Let us save and restore it later. + " let b:skip_set_iskeyword = 1 + let is_keyword = &iskeyword + + " Check for the existence of syntax files in the runtime path before + " attempting to include them. + " https://vi.stackexchange.com/a/10354 + " Previously, this used a try/catch block to intercept any errors thrown + " when attempting to include files. The error(s) interferred with running + " with Vader tests (specifically, testing VimwikiSearch). + if !empty(globpath(&runtimepath, 'syntax/'.a:filetype.'.vim')) + execute 'syntax include @'.group.' syntax/'.a:filetype.'.vim' + endif + if !empty(globpath(&runtimepath, 'after/syntax/'.a:filetype.'.vim')) + execute 'syntax include @'.group.' after/syntax/'.a:filetype.'.vim' + endif + + let &iskeyword = is_keyword + + if exists('s:current_syntax') + let b:current_syntax=s:current_syntax + else + unlet b:current_syntax + endif + + " Fix issue #236: tell Vimwiki to think in maths when encountering maths + " blocks like {{$ }}$. Here, we don't want the tex highlight group, but the + " group for tex math. + if a:textSnipHl ==# 'VimwikiMath' + let group='texMathZoneGroup' + endif + + let concealpre = vimwiki#vars#get_global('conceal_pre') ? ' concealends' : '' + execute 'syntax region textSnip'.ft. + \ ' matchgroup='.a:textSnipHl. + \ ' start="'.a:start.'" end="'.a:end.'"'. + \ ' contains=@'.group.' keepend'.concealpre + + " A workaround to Issue 115: Nested Perl syntax highlighting differs from + " regular one. + " Perl syntax file has perlFunctionName which is usually has no effect due to + " 'contained' flag. Now we have 'syntax include' that makes all the groups + " included as 'contained' into specific group. + " Here perlFunctionName (with quite an angry regexp "\h\w*[^:]") clashes with + " the rest syntax rules as now it has effect being really 'contained'. + " Clear it! + if ft =~? 'perl' + syntax clear perlFunctionName + endif +endfunction + + +" creates or updates auto-generated listings in a wiki file, like TOC, diary +" links, tags list etc. +" - the listing consists of a header and a list of strings provided by a funcref +" - a:content_regex is used to determine how long a potentially existing list is +" - a:default_lnum is the line number where the new listing should be placed if +" it's not already present +" - if a:create is true, it will be created if it doesn't exist, otherwise it +" will only be updated if it already exists +function! vimwiki#base#update_listing_in_buffer(Generator, start_header, + \ content_regex, default_lnum, header_level, create) abort + " Vim behaves strangely when files change while in diff mode + if &diff || &readonly + return + endif + + " check if the listing is already there + let already_there = 0 + + let header_level = 'rxH' . a:header_level . '_Template' + let header_rx = '\m^\s*'.substitute(vimwiki#vars#get_syntaxlocal(header_level), + \ '__Header__', a:start_header, '') .'\s*$' + + let start_lnum = 1 + while start_lnum <= line('$') + if getline(start_lnum) =~# header_rx + let already_there = 1 + break + endif + let start_lnum += 1 + endwhile + + if !already_there && !a:create + return + endif + + let winview_save = winsaveview() + let cursor_line = winview_save.lnum + let is_cursor_after_listing = 0 + + let is_fold_closed = 1 + + let lines_diff = 0 + + if already_there + let is_fold_closed = ( foldclosed(start_lnum) > -1 ) + " delete the old listing + let whitespaces_in_first_line = matchstr(getline(start_lnum), '\m^\s*') + let end_lnum = start_lnum + 1 + while end_lnum <= line('$') && getline(end_lnum) =~# a:content_regex + let end_lnum += 1 + endwhile + let is_cursor_after_listing = ( cursor_line >= end_lnum ) + " We'll be removing a range. But, apparently, if folds are enabled, Vim + " won't let you remove a range that overlaps with closed fold -- the entire + " fold gets deleted. So we temporarily disable folds, and then reenable + " them right back. + let foldenable_save = &l:foldenable + setlocal nofoldenable + silent exe 'keepjumps ' . start_lnum.','.string(end_lnum - 1).'delete _' + let &l:foldenable = foldenable_save + let lines_diff = 0 - (end_lnum - start_lnum) + else + let start_lnum = a:default_lnum + let is_cursor_after_listing = ( cursor_line > a:default_lnum ) + let whitespaces_in_first_line = '' + " append newline if not replacing first line + if start_lnum > 1 + keepjumps call append(start_lnum -1, '') + let start_lnum += 1 + endif + endif + + let start_of_listing = start_lnum + + " write new listing + let new_header = whitespaces_in_first_line + \ . s:safesubstitute(vimwiki#vars#get_syntaxlocal(header_level), + \ '__Header__', a:start_header, '') + keepjumps call append(start_lnum - 1, new_header) + let start_lnum += 1 + let lines_diff += 1 + if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' + for _ in range(vimwiki#vars#get_global('markdown_header_style')) + keepjumps call append(start_lnum - 1, '') + let start_lnum += 1 + let lines_diff += 1 + endfor + endif + for string in a:Generator.f() + keepjumps call append(start_lnum - 1, string) + let start_lnum += 1 + let lines_diff += 1 + endfor + + " remove empty line if end of file, otherwise append if needed + if start_lnum == line('$') + silent exe 'keepjumps ' . start_lnum.'delete _' + elseif start_lnum < line('$') && getline(start_lnum) !~# '\m^\s*$' + keepjumps call append(start_lnum - 1, '') + let lines_diff += 1 + endif + + " Open fold, if needed + if !is_fold_closed && ( foldclosed(start_of_listing) > -1 ) + exe start_of_listing + norm! zo + endif + + if is_cursor_after_listing + let winview_save.lnum += lines_diff + endif + call winrestview(winview_save) +endfunction + +function! vimwiki#base#find_next_task() abort + let taskRegex = vimwiki#vars#get_syntaxlocal('rxListItemWithoutCB') + \ . '\+\(\[ \]\s\+\)\zs' + call vimwiki#base#search_word(taskRegex, '') +endfunction + +function! vimwiki#base#find_next_link() abort + call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), '') +endfunction + + +function! vimwiki#base#find_prev_link() abort + "Jump 2 times if the cursor is in the middle of a link + if synIDattr(synID(line('.'), col('.'), 0), 'name') =~# 'VimwikiLink.*' && + \ synIDattr(synID(line('.'), col('.')-1, 0), 'name') =~# 'VimwikiLink.*' + call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), 'b') + endif + call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), 'b') +endfunction + + +function! vimwiki#base#follow_link(split, ...) abort + let reuse_other_split_window = a:0 >= 1 ? a:1 : 0 + let move_cursor_to_new_window = a:0 >= 2 ? a:2 : 1 + + " Parse link at cursor and pass to VimwikiLinkHandler, or failing that, the + " default open_link handler + + " try WikiLink + let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink')), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl')) + " try WikiIncl + if lnk ==? '' + let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiIncl')), + \ vimwiki#vars#get_global('rxWikiInclMatchUrl')) + endif + " try Weblink + if lnk ==? '' + let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink')), + \ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl')) + endif + + if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' + " markdown image ![]() + if lnk ==# '' + let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxImage')), + \ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl')) + if lnk !=# '' + if lnk !~# '\%(\%('.vimwiki#vars#get_global('web_schemes1').'\):\%(\/\/\)\?\)\S\{-1,}' + " prepend file: scheme so link is opened by sytem handler if it isn't a web url + let lnk = 'file:'.lnk + endif + endif + endif + endif + + if lnk !=? '' " cursor is indeed on a link + let processed_by_user_defined_handler = VimwikiLinkHandler(lnk) + if processed_by_user_defined_handler + return + endif + + if a:split ==# 'hsplit' + let cmd = ':split ' + elseif a:split ==# 'vsplit' + let cmd = ':vsplit ' + elseif a:split ==# 'tab' + let cmd = ':tabnew ' + else + let cmd = ':e ' + endif + + " if we want to and can reuse a split window, jump to that window and open + " the new file there + if (a:split ==# 'hsplit' || a:split ==# 'vsplit') && reuse_other_split_window + let previous_window_nr = winnr('#') + if previous_window_nr > 0 && previous_window_nr != winnr() + execute previous_window_nr . 'wincmd w' + let cmd = ':e' + endif + endif + + + if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' + let processed_by_markdown_reflink = vimwiki#markdown_base#open_reflink(lnk) + if processed_by_markdown_reflink + return + endif + + " remove the extension from the filename if exists, because non-vimwiki + " markdown files usually include the extension in links + let lnk = substitute(lnk, '\'.vimwiki#vars#get_wikilocal('ext').'$', '', '') + endif + + let current_tab_page = tabpagenr() + + call vimwiki#base#open_link(cmd, lnk) + + if !move_cursor_to_new_window + if (a:split ==# 'hsplit' || a:split ==# 'vsplit') + execute 'wincmd p' + elseif a:split ==# 'tab' + execute 'tabnext ' . current_tab_page + endif + endif + + else " cursor is not on a link + if a:0 >= 3 + execute 'normal! '.a:3 + elseif vimwiki#vars#get_global('create_link') + call vimwiki#base#normalize_link(0) + endif + endif +endfunction + + +function! vimwiki#base#go_back_link() abort + " try pop previous link from buffer list + let prev_links = vimwiki#vars#get_bufferlocal('prev_links') + if !empty(prev_links) + let prev_link = remove(prev_links, 0) + call vimwiki#vars#set_bufferlocal('prev_links', prev_links) + else + let prev_link = [] + endif + + if !empty(prev_link) + " go back to saved wiki link + call vimwiki#base#edit_file(':e ', prev_link[0], '') + call setpos('.', prev_link[1]) + else + " maybe we came here by jumping to a tag -> pop from the tag stack + silent! pop! + endif +endfunction + + +function! vimwiki#base#goto_index(wnum, ...) abort + + " if wnum = 0 the current wiki is used + if a:wnum == 0 + let idx = vimwiki#vars#get_bufferlocal('wiki_nr') + if idx < 0 " not in a wiki + let idx = 0 + endif + else + let idx = a:wnum - 1 " convert to 0 based counting + endif + + if a:wnum > vimwiki#vars#number_of_wikis() + echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in your Vimwiki settings!' + return + endif + + if a:0 + if a:1 == 1 + let cmd = 'tabedit' + elseif a:1 == 2 + let cmd = 'split' + elseif a:1 == 3 + let cmd = 'vsplit' + endif + else + let cmd = 'edit' + endif + + let index_file = vimwiki#vars#get_wikilocal('path', idx). + \ vimwiki#vars#get_wikilocal('index', idx). + \ vimwiki#vars#get_wikilocal('ext', idx) + + call vimwiki#base#edit_file(cmd, index_file, '') +endfunction + + +function! vimwiki#base#delete_link() abort + " Delete wiki file you are in from filesystem + let val = input('Delete "'.expand('%').'" [y]es/[N]o? ') + if val !~? '^y' + return + endif + let fname = expand('%:p') + try + call delete(fname) + catch /.*/ + echomsg 'Vimwiki Error: Cannot delete "'.expand('%:t:r').'"!' + return + endtry + + call vimwiki#base#go_back_link() + execute 'bdelete! '.escape(fname, ' ') + + " reread buffer => deleted wiki link should appear as non-existent + if expand('%:p') !=? '' + execute 'e' + endif +endfunction + + +" Rename current file, update all links to it +function! vimwiki#base#rename_link() abort + " Get filename relative to wiki root + let subdir = vimwiki#vars#get_bufferlocal('subdir') + let old_fname = subdir.expand('%:t') + + " Get current path + let old_dir = expand('%:p:h') + + " there is no file (new one maybe) + if glob(expand('%:p')) ==? '' + echomsg 'Vimwiki Error: Cannot rename "'.expand('%:p'). + \'". It does not exist! (New file? Save it before renaming.)' + return + endif + + let val = input('Rename "'.expand('%:t:r').'" [y]es/[N]o? ') + if val !~? '^y' + return + endif + + let new_link = input('Enter new name: ') + + if new_link =~# '[/\\]' + echomsg 'Vimwiki Error: Cannot rename to a filename with path!' + return + endif + + if substitute(new_link, '\s', '', 'g') ==? '' + echomsg 'Vimwiki Error: Cannot rename to an empty filename!' + return + endif + + let url = matchstr(new_link, vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl')) + if url !=? '' + let new_link = url + endif + + let new_link = subdir.new_link + let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr') + let new_fname = vimwiki#vars#get_wikilocal('path') . new_link . vimwiki#vars#get_wikilocal('ext') + + " do not rename if file with such name exists + let fname = glob(new_fname) + if fname !=? '' + echomsg 'Vimwiki Error: Cannot rename to "'.new_fname.'". File with that name exist!' + return + endif + " rename wiki link file + try + echomsg 'Vimwiki: Renaming '.vimwiki#vars#get_wikilocal('path').old_fname.' to '.new_fname + let res = rename(expand('%:p'), expand(new_fname)) + if res != 0 + throw 'Cannot rename!' + end + catch /.*/ + echomsg 'Vimwiki Error: Cannot rename "'.expand('%:t:r').'" to "'.new_fname.'"' + return + endtry + + let &buftype='nofile' + + let cur_buffer = [expand('%:p'), vimwiki#vars#get_bufferlocal('prev_links')] + + let blist = s:get_wiki_buffers() + + " save wiki buffers + for bitem in blist + execute ':b '.escape(bitem[0], ' ') + execute ':update' + endfor + + execute ':b '.escape(cur_buffer[0], ' ') + + " remove wiki buffers + for bitem in blist + execute 'bwipeout '.escape(bitem[0], ' ') + endfor + + let setting_more = &more + setlocal nomore + + " update links + call s:update_wiki_links(wiki_nr, old_dir, s:tail_name(old_fname), s:tail_name(new_fname)) + + " restore wiki buffers + for bitem in blist + if !vimwiki#path#is_equal(bitem[0], cur_buffer[0]) + call s:open_wiki_buffer(bitem) + endif + endfor + + call s:open_wiki_buffer([new_fname, cur_buffer[1]]) + " execute 'bwipeout '.escape(cur_buffer[0], ' ') + + echomsg 'Vimwiki: '.old_fname.' is renamed to '.new_fname + + let &more = setting_more +endfunction + + +function! vimwiki#base#ui_select() abort + call s:print_wiki_list() + let idx = input('Select Wiki by number and press (empty cancels): ') + if idx ==# '' + return + elseif idx !~# '\m[0-9]\+' + echo "\n" + echom 'Invalid wiki selection.' + return + endif + call vimwiki#base#goto_index(idx) +endfunction + + +function! vimwiki#base#TO_header(inner, including_subheaders, count) abort + let headers = s:collect_headers() + if empty(headers) + return + endif + + let current_line = line('.') + + let current_header_index = s:current_header(headers, current_line) + + if current_header_index < 0 + return + endif + + " from which to which header + if !a:including_subheaders && a:count <= 1 + let first_line = headers[current_header_index][0] + let last_line = current_header_index == len(headers)-1 ? line('$') : + \ headers[current_header_index + 1][0] - 1 + else + let first_header_index = current_header_index + for _ in range(a:count - 1) + let parent = s:get_another_header(headers, first_header_index, -1, '<') + if parent < 0 + break + else + let first_header_index = parent + endif + endfor + + let next_sibling_or_higher = s:get_another_header(headers, first_header_index, +1, '<=') + + let first_line = headers[first_header_index][0] + let last_line = + \ next_sibling_or_higher >= 0 ? headers[next_sibling_or_higher][0] - 1 : line('$') + endif + + if a:inner + let first_line += 1 + let last_line = prevnonblank(last_line) + endif + + if first_line > last_line + " this can happen e.g. when doing vih on a header with another header in the very next line + return + endif + + call cursor(first_line, 1) + normal! V + call cursor(last_line, 1) +endfunction + + +function! vimwiki#base#TO_table_cell(inner, visual) abort + if col('.') == col('$')-1 + return + endif + + if a:visual + normal! `> + let sel_end = getpos('.') + normal! `< + let sel_start = getpos('.') + + let firsttime = sel_start == sel_end + + if firsttime + if !search('|\|\(-+-\)', 'cb', line('.')) + return + endif + if getline('.')[virtcol('.')] ==# '+' + normal! l + endif + if a:inner + normal! 2l + endif + let sel_start = getpos('.') + endif + + normal! `> + call search('|\|\(-+-\)', '', line('.')) + if getline('.')[virtcol('.')] ==# '+' + normal! l + endif + if a:inner + if firsttime || abs(sel_end[2] - getpos('.')[2]) != 2 + normal! 2h + endif + endif + let sel_end = getpos('.') + + call setpos('.', sel_start) + exe "normal! \" + call setpos('.', sel_end) + + " XXX: WORKAROUND. + " if blockwise selection is ended at | character then pressing j to extend + " selection further fails. But if we shake the cursor left and right then + " it works. + normal! hl + else + if !search('|\|\(-+-\)', 'cb', line('.')) + return + endif + if a:inner + normal! 2l + endif + normal! v + call search('|\|\(-+-\)', '', line('.')) + if !a:inner && getline('.')[virtcol('.')-1] ==# '|' + normal! h + elseif a:inner + normal! 2h + endif + endif +endfunction + + +function! vimwiki#base#TO_table_col(inner, visual) abort + let t_rows = vimwiki#tbl#get_rows(line('.')) + if empty(t_rows) + return + endif + + " TODO: refactor it! + if a:visual + normal! `> + let sel_end = getpos('.') + normal! `< + let sel_start = getpos('.') + + let firsttime = sel_start == sel_end + + if firsttime + " place cursor to the top row of the table + call vimwiki#u#cursor(t_rows[0][0], virtcol('.')) + " do not accept the match at cursor position if cursor is next to column + " separator of the table separator (^ is a cursor): + " |-----^-+-------| + " | bla | bla | + " |-------+-------| + " or it will select wrong column. + if strpart(getline('.'), virtcol('.')-1) =~# '^-+' + let s_flag = 'b' + else + let s_flag = 'cb' + endif + " search the column separator backwards + if !search('|\|\(-+-\)', s_flag, line('.')) + return + endif + " -+- column separator is matched --> move cursor to the + sign + if getline('.')[virtcol('.')] ==# '+' + normal! l + endif + " inner selection --> reduce selection + if a:inner + normal! 2l + endif + let sel_start = getpos('.') + endif + + normal! `> + if !firsttime && getline('.')[virtcol('.')] ==# '|' + normal! l + elseif a:inner && getline('.')[virtcol('.')+1] =~# '[|+]' + normal! 2l + endif + " search for the next column separator + call search('|\|\(-+-\)', '', line('.')) + " Outer selection selects a column without border on the right. So we move + " our cursor left if the previous search finds | border, not -+-. + if getline('.')[virtcol('.')] !=# '+' + normal! h + endif + if a:inner + " reduce selection a bit more if inner. + normal! h + endif + " expand selection to the bottom line of the table + call vimwiki#u#cursor(t_rows[-1][0], virtcol('.')) + let sel_end = getpos('.') + + call setpos('.', sel_start) + exe "normal! \" + call setpos('.', sel_end) + + else + " place cursor to the top row of the table + call vimwiki#u#cursor(t_rows[0][0], virtcol('.')) + " do not accept the match at cursor position if cursor is next to column + " separator of the table separator (^ is a cursor): + " |-----^-+-------| + " | bla | bla | + " |-------+-------| + " or it will select wrong column. + if strpart(getline('.'), virtcol('.')-1) =~# '^-+' + let s_flag = 'b' + else + let s_flag = 'cb' + endif + " search the column separator backwards + if !search('|\|\(-+-\)', s_flag, line('.')) + return + endif + " -+- column separator is matched --> move cursor to the + sign + if getline('.')[virtcol('.')] ==# '+' + normal! l + endif + " inner selection --> reduce selection + if a:inner + normal! 2l + endif + + exe "normal! \" + + " search for the next column separator + call search('|\|\(-+-\)', '', line('.')) + " Outer selection selects a column without border on the right. So we move + " our cursor left if the previous search finds | border, not -+-. + if getline('.')[virtcol('.')] !=# '+' + normal! h + endif + " reduce selection a bit more if inner. + if a:inner + normal! h + endif + " expand selection to the bottom line of the table + call vimwiki#u#cursor(t_rows[-1][0], virtcol('.')) + endif +endfunction + + +function! vimwiki#base#AddHeaderLevel(...) abort + if a:1 > 1 + call vimwiki#base#AddHeaderLevel(a:1 - 1) + endif + let lnum = line('.') + let line = getline(lnum) + let rxHdr = vimwiki#vars#get_syntaxlocal('rxH') + if line =~# '^\s*$' + return + endif + + if line =~# vimwiki#vars#get_syntaxlocal('rxHeader') + let level = vimwiki#u#count_first_sym(line) + if level < 6 + if vimwiki#vars#get_syntaxlocal('symH') + let line = substitute(line, '\('.rxHdr.'\+\).\+\1', rxHdr.'&'.rxHdr, '') + else + let line = substitute(line, '\('.rxHdr.'\+\).\+', rxHdr.'&', '') + endif + call setline(lnum, line) + endif + else + let line = substitute(line, '^\s*', '&'.rxHdr.' ', '') + if vimwiki#vars#get_syntaxlocal('symH') + let line = substitute(line, '\s*$', ' '.rxHdr.'&', '') + endif + call setline(lnum, line) + endif +endfunction + + +function! vimwiki#base#RemoveHeaderLevel(...) abort + if a:1 > 1 + call vimwiki#base#RemoveHeaderLevel(a:1 - 1) + endif + let lnum = line('.') + let line = getline(lnum) + let rxHdr = vimwiki#vars#get_syntaxlocal('rxH') + if line =~# '^\s*$' + return + endif + + if line =~# vimwiki#vars#get_syntaxlocal('rxHeader') + let level = vimwiki#u#count_first_sym(line) + let old = repeat(rxHdr, level) + let new = repeat(rxHdr, level - 1) + + let chomp = line =~# rxHdr.'\s' + + if vimwiki#vars#get_syntaxlocal('symH') + let line = substitute(line, old, new, 'g') + else + let line = substitute(line, old, new, '') + endif + + if level == 1 && chomp + let line = substitute(line, '^\s', '', 'g') + let line = substitute(line, '\s$', '', 'g') + endif + + let line = substitute(line, '\s*$', '', '') + + call setline(lnum, line) + endif +endfunction + + + +" Returns all the headers in the current buffer as a list of the form +" [[line_number, header_level, header_text], [...], [...], ...] +function! s:collect_headers() abort + let is_inside_pre_or_math = 0 " 1: inside pre, 2: inside math, 0: outside + let headers = [] + for lnum in range(1, line('$')) + let line_content = getline(lnum) + if (is_inside_pre_or_math == 1 && line_content =~# vimwiki#vars#get_syntaxlocal('rxPreEnd')) || + \ (is_inside_pre_or_math == 2 && line_content =~# vimwiki#vars#get_syntaxlocal('rxMathEnd')) + let is_inside_pre_or_math = 0 + continue + endif + if is_inside_pre_or_math > 0 + continue + endif + if line_content =~# vimwiki#vars#get_syntaxlocal('rxPreStart') + let is_inside_pre_or_math = 1 + continue + endif + if line_content =~# vimwiki#vars#get_syntaxlocal('rxMathStart') + let is_inside_pre_or_math = 2 + continue + endif + if line_content !~# vimwiki#vars#get_syntaxlocal('rxHeader') + continue + endif + if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' + if stridx(line_content, vimwiki#vars#get_syntaxlocal('rxH')) > 0 + continue " markdown headers must start in the first column + endif + endif + let header_level = vimwiki#u#count_first_sym(line_content) + let header_text = + \ vimwiki#u#trim(matchstr(line_content, vimwiki#vars#get_syntaxlocal('rxHeader'))) + call add(headers, [lnum, header_level, header_text]) + endfor + + return headers +endfunction + + +function! s:current_header(headers, line_number) abort + if empty(a:headers) + return -1 + endif + + if a:line_number >= a:headers[-1][0] + return len(a:headers) - 1 + endif + + let current_header_index = -1 + while a:headers[current_header_index+1][0] <= a:line_number + let current_header_index += 1 + endwhile + return current_header_index +endfunction + + +function! s:get_another_header(headers, current_index, direction, operation) abort + if empty(a:headers) || a:current_index < 0 + return -1 + endif + let current_level = a:headers[a:current_index][1] + let index = a:current_index + a:direction + + while 1 + if index < 0 || index >= len(a:headers) + return -1 + endif + if eval('a:headers[index][1] ' . a:operation . ' current_level') + return index + endif + let index += a:direction + endwhile +endfunction + + +function! vimwiki#base#goto_parent_header() abort + let headers = s:collect_headers() + let current_header_index = s:current_header(headers, line('.')) + let parent_header = s:get_another_header(headers, current_header_index, -1, '<') + if parent_header >= 0 + call cursor(headers[parent_header][0], 1) + else + echo 'Vimwiki: no parent header found' + endif +endfunction + + +function! vimwiki#base#goto_next_header() abort + let headers = s:collect_headers() + let current_header_index = s:current_header(headers, line('.')) + if current_header_index >= 0 && current_header_index < len(headers) - 1 + call cursor(headers[current_header_index + 1][0], 1) + elseif current_header_index < 0 && !empty(headers) " we're above the first header + call cursor(headers[0][0], 1) + else + echo 'Vimwiki: no next header found' + endif +endfunction + + +function! vimwiki#base#goto_prev_header() abort + let headers = s:collect_headers() + let current_header_index = s:current_header(headers, line('.')) + " if the cursor already was on a header, jump to the previous one + if current_header_index >= 1 && headers[current_header_index][0] == line('.') + let current_header_index -= 1 + endif + if current_header_index >= 0 + call cursor(headers[current_header_index][0], 1) + else + echo 'Vimwiki: no previous header found' + endif +endfunction + + +function! vimwiki#base#goto_sibling(direction) abort + let headers = s:collect_headers() + let current_header_index = s:current_header(headers, line('.')) + let next_potential_sibling = + \ s:get_another_header(headers, current_header_index, a:direction, '<=') + if next_potential_sibling >= 0 && headers[next_potential_sibling][1] == + \ headers[current_header_index][1] + call cursor(headers[next_potential_sibling][0], 1) + else + echo 'Vimwiki: no sibling header found' + endif +endfunction + + +" a:create == 1: creates or updates TOC in current file +" a:create == 0: update if TOC exists +function! vimwiki#base#table_of_contents(create) abort + let headers = s:collect_headers() + let toc_header_text = vimwiki#vars#get_global('toc_header') + + if !a:create + " Do nothing if there is no TOC to update. (This is a small performance optimization -- if + " auto_toc == 1, but the current buffer has no TOC but is long, saving the buffer could + " otherwise take a few seconds for nothing.) + let toc_already_present = 0 + for entry in headers + if entry[2] ==# toc_header_text + let toc_already_present = 1 + break + endif + endfor + if !toc_already_present + return + endif + endif + + " use a dictionary function for closure like capability + " copy all local variables into dict (add a: if arguments are needed) + let GeneratorTOC = copy(l:) + function! GeneratorTOC.f() abort + let numbering = vimwiki#vars#get_global('html_header_numbering') + let headers_levels = [['', 0], ['', 0], ['', 0], ['', 0], ['', 0], ['', 0]] + let complete_header_infos = [] + for header in self.headers + let h_text = header[2] + let h_level = header[1] + " don't include the TOC's header itself + if h_text ==# self.toc_header_text + continue + endif + let headers_levels[h_level-1] = [h_text, headers_levels[h_level-1][1]+1] + for idx in range(h_level, 5) | let headers_levels[idx] = ['', 0] | endfor + + let h_complete_id = '' + if vimwiki#vars#get_global('toc_link_format') == 0 + for l in range(h_level-1) + if headers_levels[l][0] !=? '' + let h_complete_id .= headers_levels[l][0].'#' + endif + endfor + endif + let h_complete_id .= headers_levels[h_level-1][0] + + call add(complete_header_infos, [h_level, h_complete_id, h_text]) + endfor + + let lines = [] + let startindent = repeat(' ', vimwiki#lst#get_list_margin()) + let indentstring = repeat(' ', vimwiki#u#sw()) + let bullet = vimwiki#lst#default_symbol().' ' + for [lvl, link, desc] in complete_header_infos + if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' + let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink2Template') + elseif vimwiki#vars#get_global('toc_link_format') == 0 + let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate2') + else + let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate1') + endif + let link = s:safesubstitute(link_tpl, '__LinkUrl__', + \ '#'.link, '') + let link = s:safesubstitute(link, '__LinkDescription__', desc, '') + call add(lines, startindent.repeat(indentstring, lvl-1).bullet.link) + endfor + + return lines + endfunction + + let links_rx = '\%(^\s*$\)\|\%('.vimwiki#vars#get_syntaxlocal('rxListBullet').'\)' + + call vimwiki#base#update_listing_in_buffer( + \ GeneratorTOC, + \ toc_header_text, + \ links_rx, + \ 1, + \ vimwiki#vars#get_global('toc_header_level'), + \ a:create) +endfunction + + +" Construct a regular expression matching from template (with special +" characters properly escaped), by substituting rxUrl for __LinkUrl__, rxDesc +" for __LinkDescription__, and rxStyle for __LinkStyle__. The three +" arguments rxUrl, rxDesc, and rxStyle are copied verbatim, without any +" special character escapes or substitutions. +function! vimwiki#base#apply_template(template, rxUrl, rxDesc, rxStyle) abort + let lnk = a:template + if a:rxUrl !=? '' + let lnk = s:safesubstitute(lnk, '__LinkUrl__', a:rxUrl, 'g') + endif + if a:rxDesc !=? '' + let lnk = s:safesubstitute(lnk, '__LinkDescription__', a:rxDesc, 'g') + endif + if a:rxStyle !=? '' + let lnk = s:safesubstitute(lnk, '__LinkStyle__', a:rxStyle, 'g') + endif + return lnk +endfunction + + +function! s:clean_url(url) abort + " don't use an extension as part of the description + let url = substitute(a:url, '\'.vimwiki#vars#get_wikilocal('ext').'$', '', '') + " remove protocol and tld + let url = substitute(url, '^\a\+\d*:', '', '') + " remove absolute path prefix + let url = substitute(url, '^//', '', '') + let url = substitute(url, '^\([^/]\+\)\.\a\{2,4}/', '\1/', '') + let url_l = split(url, '/\|=\|-\|&\|?\|\.') + " case only a '-' + if url_l == [] + return '' + endif + let url_l = filter(url_l, 'v:val !=# ""') + if url_l[0] ==# 'www' + let url_l = url_l[1:] + endif + if url_l[-1] =~# '^\(htm\|html\|php\)$' + let url_l = url_l[0:-2] + endif + " remove words with black listed codepoints + " TODO mutualize blacklist in a variable + let url_l = filter(url_l, 'v:val !~? "[!\"$%&''()*+,:;<=>?\[\]\\^`{}]"') + " remove words consisting of only hexadecimal digits + let url_l = filter(url_l, 'v:val !~? "^\\x\\{4,}$" || v:val !~? "\\d"') + return join(url_l, ' ') +endfunction + +" An optional second argument allows you to pass in a list of diary files rather +" than generating a list on each call to the function. +function! vimwiki#base#is_diary_file(filename, ...) abort + let l:diary_file_paths = a:0 > 0 ? a:1 : vimwiki#diary#get_diary_files() + let l:normalised_file_paths = + \ map(l:diary_file_paths, 'vimwiki#path#normalize(v:val)') + let l:matching_files = + \ filter(l:normalised_file_paths, 'v:val =~# a:filename') + return len(l:matching_files) > 0 " filename is a diary file if match is found +endfunction + + +function! vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) abort + let url = matchstr(a:str, a:rxUrl) + if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' && vimwiki#vars#get_global('markdown_link_ext') + " strip the extension if it exists so it doesn't get added multiple times + let url = substitute(url, '\'.vimwiki#vars#get_wikilocal('ext').'$', '', '') + endif + let descr = matchstr(a:str, a:rxDesc) + " Try to clean, do not work if bad link + if descr ==# '' + let descr = s:clean_url(url) + if descr ==# '' | return url | endif + endif + let lnk = s:safesubstitute(a:template, '__LinkDescription__', descr, '') + let lnk = s:safesubstitute(lnk, '__LinkUrl__', url, '') + return lnk +endfunction + + +function! vimwiki#base#normalize_imagelink_helper(str, rxUrl, rxDesc, rxStyle, template) abort + let lnk = vimwiki#base#normalize_link_helper(a:str, a:rxUrl, a:rxDesc, a:template) + let style = matchstr(a:str, a:rxStyle) + let lnk = s:safesubstitute(lnk, '__LinkStyle__', style, '') + return lnk +endfunction + +function! vimwiki#base#normalize_link_in_diary(lnk) abort + let sc = vimwiki#vars#get_wikilocal('links_space_char') + let link = a:lnk . vimwiki#vars#get_wikilocal('ext') + let link_wiki = substitute(vimwiki#vars#get_wikilocal('path') . '/' . link, '\s', sc, 'g') + let link_diary = substitute(vimwiki#vars#get_wikilocal('path') . '/' + \ . vimwiki#vars#get_wikilocal('diary_rel_path') . '/' . link, '\s', sc, 'g') + let link_exists_in_diary = filereadable(link_diary) + let link_exists_in_wiki = filereadable(link_wiki) + let link_is_date = a:lnk =~# '\d\d\d\d-\d\d-\d\d' + + if link_is_date + let str = a:lnk + let rxUrl = vimwiki#vars#get_global('rxWord') + let rxDesc = '\d\d\d\d-\d\d-\d\d' + let template = vimwiki#vars#get_global('WikiLinkTemplate1') + elseif link_exists_in_wiki + let depth = len(split(vimwiki#vars#get_wikilocal('diary_rel_path'), '/')) + let str = repeat('../', depth) . a:lnk + let rxUrl = '.*' + let rxDesc = '[^/]*$' + let template = vimwiki#vars#get_global('WikiLinkTemplate2') + else + let str = a:lnk + let rxUrl = '.*' + let rxDesc = '' + let template = vimwiki#vars#get_global('WikiLinkTemplate1') + endif + + if vimwiki#vars#get_wikilocal('syntax') ==? 'markdown' + let template = vimwiki#vars#get_syntaxlocal('Weblink1Template') + endif + + return vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) +endfunction + + +function! s:normalize_link_syntax_n() abort + + " try WikiLink + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink')) + if !empty(lnk) + let sub = vimwiki#base#normalize_link_helper(lnk, + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), + \ vimwiki#vars#get_global('WikiLinkTemplate2')) + call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink'), sub) + return + endif + + " try WikiIncl + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiIncl')) + if !empty(lnk) + " NO-OP !! + return + endif + + " try Weblink + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink')) + if !empty(lnk) + let sub = vimwiki#base#normalize_link_helper(lnk, + \ lnk, '', vimwiki#vars#get_global('WikiLinkTemplate2')) + call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink'), sub) + return + endif + + " try Word (any characters except separators) + " rxWord is less permissive than rxWikiLinkUrl which is used in + " normalize_link_syntax_v + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWord')) + if !empty(lnk) + if vimwiki#base#is_diary_file(expand('%:p')) + let sub = vimwiki#base#normalize_link_in_diary(lnk) + else + let sub = s:safesubstitute( + \ vimwiki#vars#get_global('WikiLinkTemplate1'), '__LinkUrl__', lnk, '') + endif + call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub) + return + endif + +endfunction + + +function! s:normalize_link_syntax_v() abort + let sel_save = &selection + let &selection = 'old' + let default_register_save = @" + let registertype_save = getregtype('"') + + try + " Save selected text to register " + normal! gv""y + + " Set substitution + if vimwiki#base#is_diary_file(expand('%:p')) + let sub = vimwiki#base#normalize_link_in_diary(@") + else + let sub = s:safesubstitute(vimwiki#vars#get_global('WikiLinkTemplate1'), + \ '__LinkUrl__', @", '') + endif + + " Put substitution in register " and change text + let sc = vimwiki#vars#get_wikilocal('links_space_char') + call setreg('"', substitute(substitute(sub, '\n', '', ''), '\s', sc, 'g'), visualmode()) + normal! `>""pgvd + finally + call setreg('"', default_register_save, registertype_save) + let &selection = sel_save + endtry +endfunction + + +function! vimwiki#base#normalize_link(is_visual_mode) abort + if exists('*vimwiki#'.vimwiki#vars#get_wikilocal('syntax').'_base#normalize_link') + " Syntax-specific links + call vimwiki#{vimwiki#vars#get_wikilocal('syntax')}_base#normalize_link(a:is_visual_mode) + else + if !a:is_visual_mode + call s:normalize_link_syntax_n() + elseif line("'<") == line("'>") + " action undefined for multi-line visual mode selections + call s:normalize_link_syntax_v() + endif + endif +endfunction + + +function! vimwiki#base#detect_nested_syntax() abort + let last_word = '\v.*<(\w+)\s*$' + let lines = map(filter(getline(1, '$'), 'v:val =~# "\\%({{{\\|`\\{3,\}\\|\\~\\{3,\}\\)" && v:val =~# last_word'), + \ 'substitute(v:val, last_word, "\\=submatch(1)", "")') + let dict = {} + for elem in lines + let dict[elem] = elem + endfor + return dict +endfunction + + +function! vimwiki#base#complete_links_escaped(ArgLead, CmdLine, CursorPos) abort abort + return vimwiki#base#get_globlinks_escaped(a:ArgLead) +endfunction + + +function! vimwiki#base#read_caption(file) abort + let rx_header = vimwiki#vars#get_syntaxlocal('rxHeader') + + if filereadable(a:file) + for line in readfile(a:file, '', g:vimwiki_max_scan_for_caption) + if line =~# rx_header + return vimwiki#u#trim(matchstr(line, rx_header)) + endif + endfor + endif + + return '' +endfunction + + +" For commands VimwikiSearch and VWS +function! vimwiki#base#search(search_pattern) abort + if empty(a:search_pattern) + echomsg 'Vimwiki Error: No search pattern given.' + return + endif + + let pattern = a:search_pattern + + " If the pattern does not start with a '/', then we'll assume that a + " literal search is intended and enclose and escape it: + if match(pattern, '^/') == -1 + let pattern = '/'.escape(pattern, '\').'/' + endif + + let path = fnameescape(vimwiki#vars#get_wikilocal('path')) + let ext = vimwiki#vars#get_wikilocal('ext') + let cmd = 'lvimgrep '.pattern.' '.path.'**/*'.ext + + " Catch E480 error from lvimgrep if there's no match and present + " a friendlier error message. + try + execute cmd + catch + echomsg 'VimwikiSearch: No match found.' + endtry +endfunction + +function! vimwiki#base#deprecate(old, new) abort + echohl WarningMsg + echo a:old 'is deprecated and will be removed in future versions, use' a:new 'instead.' + echohl None +endfunction + +" ------------------------------------------------------------------------- +" Load syntax-specific Wiki functionality +for s:syn in s:vimwiki_get_known_syntaxes() + execute 'runtime! autoload/vimwiki/'.s:syn.'_base.vim' +endfor +" ------------------------------------------------------------------------- + diff --git a/.config/vim/bundle/vimwiki/autoload/vimwiki/customwiki2html.sh b/.config/vim/bundle/vimwiki/autoload/vimwiki/customwiki2html.sh new file mode 100755 index 0000000..4818d02 --- /dev/null +++ b/.config/vim/bundle/vimwiki/autoload/vimwiki/customwiki2html.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +# +# This script converts markdown into html, to be used with vimwiki's +# "customwiki2html" option. Experiment with the two proposed methods by +# commenting / uncommenting the relevant lines below. +# +# NEW! An alternative converter was developed by Jason6Anderson, and can +# be located at https://github.com/vimwiki-backup/vimwiki/issues/384 +# +# +# To use this script, you must have the Discount converter installed. +# +# http://www.pell.portland.or.us/~orc/Code/discount/ +# +# To verify your installation, check that the commands markdown and mkd2text, +# are on your path. +# +# Also verify that this file is executable. +# +# Then, in your .vimrc file, set: +# +# g:vimwiki_customwiki2html=$HOME.'/.vim/autoload/vimwiki/customwiki2html.sh' +# +# On your next restart, Vimwiki will run this script instead of using the +# internal wiki2html converter. +# + +MARKDOWN=markdown +MKD2HTML=mkd2html + + +FORCE="$1" +SYNTAX="$2" +EXTENSION="$3" +OUTPUTDIR="$4" +INPUT="$5" +CSSFILE="$6" + +FORCEFLAG= + +[ $FORCE -eq 0 ] || { FORCEFLAG="-f"; }; +[ $SYNTAX = "markdown" ] || { echo "Error: Unsupported syntax"; exit -2; }; + +OUTPUT="$OUTPUTDIR"/$(basename "$INPUT" .$EXTENSION).html + +# # Method 1: +# # markdown [-d] [-T] [-V] [-b url-base] [-C prefix] [-F bitmap] [-f flags] [-o file] [-s text] [-t text] [textfile] +# +# URLBASE=http://example.com +# $MARKDOWN -T -b $URLBASE -o $OUTPUT $INPUT + + +# Method 2: +# mkd2html [-css file] [-header string] [-footer string] [file] + +$MKD2HTML -css "$CSSFILE" "$INPUT" +OUTPUTTMP=$(dirname "$INPUT")/$(basename "$INPUT" ."$EXTENSION").html +mv -f "$OUTPUTTMP" "$OUTPUT" + + + diff --git a/.config/vim/bundle/vimwiki/autoload/vimwiki/default.tpl b/.config/vim/bundle/vimwiki/autoload/vimwiki/default.tpl new file mode 100644 index 0000000..35371d5 --- /dev/null +++ b/.config/vim/bundle/vimwiki/autoload/vimwiki/default.tpl @@ -0,0 +1,12 @@ + + + + +%title% + + + + +%content% + + diff --git a/.config/vim/bundle/vimwiki/autoload/vimwiki/diary.vim b/.config/vim/bundle/vimwiki/autoload/vimwiki/diary.vim new file mode 100644 index 0000000..46d14ce --- /dev/null +++ b/.config/vim/bundle/vimwiki/autoload/vimwiki/diary.vim @@ -0,0 +1,436 @@ +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 +" Vimwiki autoload plugin file +" Description: Handle diary notes +" Home: https://github.com/vimwiki/vimwiki/ + + +if exists('g:loaded_vimwiki_diary_auto') || &compatible + finish +endif +let g:loaded_vimwiki_diary_auto = 1 + + +function! s:prefix_zero(num) abort + if a:num < 10 + return '0'.a:num + endif + return a:num +endfunction + + +function! s:diary_path(...) abort + let idx = a:0 == 0 ? vimwiki#vars#get_bufferlocal('wiki_nr') : a:1 + return vimwiki#vars#get_wikilocal('path', idx).vimwiki#vars#get_wikilocal('diary_rel_path', idx) +endfunction + + +function! s:diary_index(...) abort + let idx = a:0 == 0 ? vimwiki#vars#get_bufferlocal('wiki_nr') : a:1 + return s:diary_path(idx).vimwiki#vars#get_wikilocal('diary_index', idx). + \ vimwiki#vars#get_wikilocal('ext', idx) +endfunction + + +function! vimwiki#diary#diary_date_link(...) abort + if a:0 + return strftime('%Y-%m-%d', a:1) + else + return strftime('%Y-%m-%d') + endif +endfunction + + +function! s:get_position_links(link) abort + let idx = -1 + let links = [] + if a:link =~# '^\d\{4}-\d\d-\d\d' + let links = map(vimwiki#diary#get_diary_files(), 'fnamemodify(v:val, ":t:r")') + " include 'today' into links + if index(links, vimwiki#diary#diary_date_link()) == -1 + call add(links, vimwiki#diary#diary_date_link()) + endif + call sort(links) + let idx = index(links, a:link) + endif + return [idx, links] +endfunction + + +function! s:get_month_name(month) abort + return vimwiki#vars#get_global('diary_months')[str2nr(a:month)] +endfunction + +function! s:get_first_header(fl) abort + " Get the first header in the file within the first s:vimwiki_max_scan_for_caption lines. + let header_rx = vimwiki#vars#get_syntaxlocal('rxHeader') + + for line in readfile(a:fl, '', g:vimwiki_max_scan_for_caption) + if line =~# header_rx + return vimwiki#u#trim(matchstr(line, header_rx)) + endif + endfor + return '' +endfunction + +function! s:get_all_headers(fl, maxlevel) abort + " Get a list of all headers in a file up to a given level. + " Returns a list whose elements are pairs [level, title] + let headers_rx = {} + for i in range(1, a:maxlevel) + let headers_rx[i] = vimwiki#vars#get_syntaxlocal('rxH'.i.'_Text') + endfor + + let headers = [] + for line in readfile(a:fl, '') + for [i, header_rx] in items(headers_rx) + if line =~# header_rx + call add(headers, [i, vimwiki#u#trim(matchstr(line, header_rx))]) + break + endif + endfor + endfor + return headers +endfunction + +function! s:count_headers_level_less_equal(headers, maxlevel) abort + " Count headers with level <= maxlevel in a list of [level, title] pairs. + let l:count = 0 + for [header_level, _] in a:headers + if header_level <= a:maxlevel + let l:count += 1 + endif + endfor + return l:count +endfunction + +function! s:get_min_header_level(headers) abort + " The minimum level of any header in a list of [level, title] pairs. + if len(a:headers) == 0 + return 0 + endif + let minlevel = a:headers[0][0] + for [level, _] in a:headers + let minlevel = min([minlevel, level]) + endfor + return minlevel +endfunction + + +function! s:read_captions(files) abort + let result = {} + let caption_level = vimwiki#vars#get_wikilocal('diary_caption_level') + + for fl in a:files + " remove paths and extensions + let fl_captions = {} + + " Default; no captions from the file. + let fl_captions['top'] = '' + let fl_captions['rest'] = [] + + if caption_level >= 0 && filereadable(fl) + if caption_level == 0 + " Take first header of any level as the top caption. + let fl_captions['top'] = s:get_first_header(fl) + else + let headers = s:get_all_headers(fl, caption_level) + if len(headers) > 0 + " If first header is the only one at its level or less, then make it the top caption. + let [first_level, first_header] = headers[0] + if s:count_headers_level_less_equal(headers, first_level) == 1 + let fl_captions['top'] = first_header + call remove(headers, 0) + endif + + let min_header_level = s:get_min_header_level(headers) + for [level, header] in headers + call add(fl_captions['rest'], [level - min_header_level, header]) + endfor + endif + endif + endif + + let fl_key = substitute(fnamemodify(fl, ':t'), vimwiki#vars#get_wikilocal('ext').'$', '', '') + let result[fl_key] = fl_captions + endfor + return result +endfunction + + +function! vimwiki#diary#get_diary_files() abort + let rx = '^\d\{4}-\d\d-\d\d' + let s_files = glob(vimwiki#vars#get_wikilocal('path'). + \ vimwiki#vars#get_wikilocal('diary_rel_path').'*'.vimwiki#vars#get_wikilocal('ext')) + let files = split(s_files, '\n') + call filter(files, 'fnamemodify(v:val, ":t") =~# "'.escape(rx, '\').'"') + + " remove backup files (.wiki~) + call filter(files, 'v:val !~# ''.*\~$''') + + return files +endfunction + + +function! s:group_links(links) abort + let result = {} + let p_year = 0 + let p_month = 0 + for fl in sort(keys(a:links)) + let year = strpart(fl, 0, 4) + let month = strpart(fl, 5, 2) + if p_year != year + let result[year] = {} + let p_month = 0 + endif + if p_month != month + let result[year][month] = {} + endif + let result[year][month][fl] = a:links[fl] + let p_year = year + let p_month = month + endfor + return result +endfunction + + +function! s:sort(lst) abort + if vimwiki#vars#get_wikilocal('diary_sort') ==? 'desc' + return reverse(sort(a:lst)) + else + return sort(a:lst) + endif +endfunction + +" The given wiki number a:wnum is 1 for the first wiki, 2 for the second and so on. This is in +" contrast to most other places, where counting starts with 0. When a:wnum is 0, the current wiki +" is used. +function! vimwiki#diary#make_note(wnum, ...) abort + if a:wnum == 0 + let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr') + if wiki_nr < 0 " this happens when e.g. VimwikiMakeDiaryNote was called outside a wiki buffer + let wiki_nr = 0 + endif + else + let wiki_nr = a:wnum - 1 + endif + + if wiki_nr >= vimwiki#vars#number_of_wikis() + echomsg 'Vimwiki Error: Wiki '.wiki_nr.' is not registered in g:vimwiki_list!' + return + endif + + call vimwiki#path#mkdir(vimwiki#vars#get_wikilocal('path', wiki_nr). + \ vimwiki#vars#get_wikilocal('diary_rel_path', wiki_nr)) + + let cmd = 'edit' + if a:0 + if a:1 == 1 + let cmd = 'tabedit' + elseif a:1 == 2 + let cmd = 'split' + elseif a:1 == 3 + let cmd = 'vsplit' + endif + endif + if a:0>1 + let link = 'diary:'.a:2 + else + let link = 'diary:'.vimwiki#diary#diary_date_link() + endif + + call vimwiki#base#open_link(cmd, link, s:diary_index(wiki_nr)) +endfunction + +function! vimwiki#diary#goto_diary_index(wnum) abort + + " if wnum = 0 the current wiki is used + if a:wnum == 0 + let idx = vimwiki#vars#get_bufferlocal('wiki_nr') + if idx < 0 " not in a wiki + let idx = 0 + endif + else + let idx = a:wnum - 1 " convert to 0 based counting + endif + + if a:wnum > vimwiki#vars#number_of_wikis() + echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in g:vimwiki_list!' + return + endif + + call vimwiki#base#edit_file('e', s:diary_index(idx), '') + + if vimwiki#vars#get_wikilocal('auto_diary_index') + call vimwiki#diary#generate_diary_section() + write! " save changes + endif +endfunction + + +function! vimwiki#diary#goto_next_day() abort + let link = '' + let [idx, links] = s:get_position_links(expand('%:t:r')) + + if idx == (len(links) - 1) + return + endif + + if idx != -1 && idx < len(links) - 1 + let link = 'diary:'.links[idx+1] + else + " goto today + let link = 'diary:'.vimwiki#diary#diary_date_link() + endif + + if len(link) + call vimwiki#base#open_link(':e ', link) + endif +endfunction + + +function! vimwiki#diary#goto_prev_day() abort + let link = '' + let [idx, links] = s:get_position_links(expand('%:t:r')) + + if idx == 0 + return + endif + + if idx > 0 + let link = 'diary:'.links[idx-1] + else + " goto today + let link = 'diary:'.vimwiki#diary#diary_date_link() + endif + + if len(link) + call vimwiki#base#open_link(':e ', link) + endif +endfunction + + +function! vimwiki#diary#generate_diary_section() abort + + let GeneratorDiary = copy(l:) + function! GeneratorDiary.f() abort + let lines = [] + + let links_with_captions = s:read_captions(vimwiki#diary#get_diary_files()) + let g_files = s:group_links(links_with_captions) + let g_keys = s:sort(keys(g_files)) + + for year in g_keys + if len(lines) > 0 + call add(lines, '') + endif + + call add(lines, substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', year , '')) + + for month in s:sort(keys(g_files[year])) + call add(lines, '') + call add(lines, substitute(vimwiki#vars#get_syntaxlocal('rxH3_Template'), + \ '__Header__', s:get_month_name(month), '')) + + if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' + for _ in range(vimwiki#vars#get_global('markdown_header_style')) + call add(lines, '') + endfor + endif + + for [fl, captions] in s:sort(items(g_files[year][month])) + let topcap = captions['top'] + let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate2') + + if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' + let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink1Template') + + if empty(topcap) " When using markdown syntax, we should ensure we always have a link description. + let topcap = fl + endif + endif + + if empty(topcap) + let top_link_tpl = vimwiki#vars#get_global('WikiLinkTemplate1') + else + let top_link_tpl = link_tpl + endif + + let bullet = vimwiki#lst#default_symbol().' ' + let entry = substitute(top_link_tpl, '__LinkUrl__', fl, '') + let entry = substitute(entry, '__LinkDescription__', topcap, '') + " If single H1 then that will be used as the description for the link to the file + " if multple H1 then the filename will be used as the description for the link to the + " file and multiple H1 headers will be indented by shiftwidth + call add(lines, repeat(' ', vimwiki#lst#get_list_margin()).bullet.entry) + + let startindent = repeat(' ', vimwiki#lst#get_list_margin()) + let indentstring = repeat(' ', vimwiki#u#sw()) + + for [depth, subcap] in captions['rest'] + if empty(subcap) + continue + endif + let entry = substitute(link_tpl, '__LinkUrl__', fl.'#'.subcap, '') + let entry = substitute(entry, '__LinkDescription__', subcap, '') + " if single H1 then depth H2=0, H3=1, H4=2, H5=3, H6=4 + " if multiple H1 then depth H1= 0, H2=1, H3=2, H4=3, H5=4, H6=5 + " indent subsequent headers levels by shiftwidth + call add(lines, startindent.repeat(indentstring, depth+1).bullet.entry) + endfor + endfor + + endfor + endfor + + return lines + endfunction + + let current_file = vimwiki#path#path_norm(expand('%:p')) + let diary_file = vimwiki#path#path_norm(s:diary_index()) + if vimwiki#path#is_equal(current_file, diary_file) + let content_rx = '^\%('.vimwiki#vars#get_syntaxlocal('rxHeader').'\)\|'. + \ '\%(^\s*$\)\|\%('.vimwiki#vars#get_syntaxlocal('rxListBullet').'\)' + + call vimwiki#base#update_listing_in_buffer( + \ GeneratorDiary, + \ vimwiki#vars#get_wikilocal('diary_header'), + \ content_rx, + \ 1, + \ 1, + \ 1) + else + echomsg 'Vimwiki Error: You can generate diary links only in a diary index page!' + endif +endfunction + + +" Callback function for Calendar.vim +function! vimwiki#diary#calendar_action(day, month, year, week, dir) abort + let day = s:prefix_zero(a:day) + let month = s:prefix_zero(a:month) + + let link = a:year.'-'.month.'-'.day + if winnr('#') == 0 + if a:dir ==? 'V' + vsplit + else + split + endif + else + wincmd p + if !&hidden && &modified + new + endif + endif + + call vimwiki#diary#make_note(0, 0, link) +endfunction + + +function! vimwiki#diary#calendar_sign(day, month, year) abort + let day = s:prefix_zero(a:day) + let month = s:prefix_zero(a:month) + let sfile = vimwiki#vars#get_wikilocal('path').vimwiki#vars#get_wikilocal('diary_rel_path'). + \ a:year.'-'.month.'-'.day.vimwiki#vars#get_wikilocal('ext') + return filereadable(expand(sfile)) +endfunction diff --git a/.config/vim/bundle/vimwiki/autoload/vimwiki/html.vim b/.config/vim/bundle/vimwiki/autoload/vimwiki/html.vim new file mode 100644 index 0000000..0da3d81 --- /dev/null +++ b/.config/vim/bundle/vimwiki/autoload/vimwiki/html.vim @@ -0,0 +1,1744 @@ +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 +" Vimwiki autoload plugin file +" Description: HTML export +" Home: https://github.com/vimwiki/vimwiki/ + + +if exists('g:loaded_vimwiki_html_auto') || &compatible + finish +endif +let g:loaded_vimwiki_html_auto = 1 + + +function! s:root_path(subdir) abort + return repeat('../', len(split(a:subdir, '[/\\]'))) +endfunction + + +function! s:syntax_supported() abort + return vimwiki#vars#get_wikilocal('syntax') ==? 'default' +endfunction + + +function! s:remove_blank_lines(lines) abort + while !empty(a:lines) && a:lines[-1] =~# '^\s*$' + call remove(a:lines, -1) + endwhile +endfunction + + +function! s:is_web_link(lnk) abort + if a:lnk =~# '^\%(https://\|http://\|www.\|ftp://\|file://\|mailto:\)' + return 1 + endif + return 0 +endfunction + + +function! s:is_img_link(lnk) abort + if tolower(a:lnk) =~# '\.\%(png\|jpg\|gif\|jpeg\)$' + return 1 + endif + return 0 +endfunction + + +function! s:has_abs_path(fname) abort + if a:fname =~# '\(^.:\)\|\(^/\)' + return 1 + endif + return 0 +endfunction + + +function! s:find_autoload_file(name) abort + for path in split(&runtimepath, ',') + let fname = path.'/autoload/vimwiki/'.a:name + if glob(fname) !=? '' + return fname + endif + endfor + return '' +endfunction + + +function! s:default_CSS_full_name(path) abort + let path = expand(a:path) + let css_full_name = path . vimwiki#vars#get_wikilocal('css_name') + return css_full_name +endfunction + + +function! s:create_default_CSS(path) abort + let css_full_name = s:default_CSS_full_name(a:path) + if glob(css_full_name) ==? '' + call vimwiki#path#mkdir(fnamemodify(css_full_name, ':p:h')) + let default_css = s:find_autoload_file('style.css') + if default_css !=? '' + let lines = readfile(default_css) + call writefile(lines, css_full_name) + return 1 + endif + endif + return 0 +endfunction + + +function! s:template_full_name(name) abort + if a:name ==? '' + let name = vimwiki#vars#get_wikilocal('template_default') + else + let name = a:name + endif + + let fname = expand(vimwiki#vars#get_wikilocal('template_path'). + \ name . vimwiki#vars#get_wikilocal('template_ext')) + + if filereadable(fname) + return fname + else + return '' + endif +endfunction + + +function! s:get_html_template(template) abort + " TODO: refactor it!!! + let lines=[] + + if a:template !=? '' + let template_name = s:template_full_name(a:template) + try + let lines = readfile(template_name) + return lines + catch /E484/ + echomsg 'Vimwiki: HTML template '.template_name. ' does not exist!' + endtry + endif + + let default_tpl = s:template_full_name('') + + if default_tpl ==? '' + let default_tpl = s:find_autoload_file('default.tpl') + endif + + let lines = readfile(default_tpl) + return lines +endfunction + + +function! s:safe_html_preformatted(line) abort + let line = substitute(a:line,'<','\<', 'g') + let line = substitute(line,'>','\>', 'g') + return line +endfunction + + +function! s:escape_html_attribute(string) abort + return substitute(a:string, '"', '\"', 'g') +endfunction + + +function! s:safe_html_line(line) abort + " escape & < > when producing HTML text + " s:lt_pattern, s:gt_pattern depend on g:vimwiki_valid_html_tags + " and are set in vimwiki#html#Wiki2HTML() + let line = substitute(a:line, '&', '\&', 'g') + let line = substitute(line,s:lt_pattern,'\<', 'g') + let line = substitute(line,s:gt_pattern,'\>', 'g') + + return line +endfunction + + +function! s:delete_html_files(path) abort + let htmlfiles = split(glob(a:path.'**/*.html'), '\n') + for fname in htmlfiles + " ignore user html files, e.g. search.html,404.html + if stridx(vimwiki#vars#get_global('user_htmls'), fnamemodify(fname, ':t')) >= 0 + continue + endif + + " delete if there is no corresponding wiki file + let subdir = vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path_html'), fname) + let wikifile = vimwiki#vars#get_wikilocal('path').subdir. + \fnamemodify(fname, ':t:r').vimwiki#vars#get_wikilocal('ext') + if filereadable(wikifile) + continue + endif + + try + call delete(fname) + catch + echomsg 'Vimwiki Error: Cannot delete '.fname + endtry + endfor +endfunction + + +function! s:mid(value, cnt) abort + return strpart(a:value, a:cnt, len(a:value) - 2 * a:cnt) +endfunction + + +function! s:subst_func(line, regexp, func, ...) abort + " Substitute text found by regexp with result of + " func(matched) function. + + let pos = 0 + let lines = split(a:line, a:regexp, 1) + let res_line = '' + for line in lines + let res_line = res_line.line + let matched = matchstr(a:line, a:regexp, pos) + if matched !=? '' + if a:0 + let res_line = res_line.{a:func}(matched, a:1) + else + let res_line = res_line.{a:func}(matched) + endif + endif + let pos = matchend(a:line, a:regexp, pos) + endfor + return res_line +endfunction + + +function! s:process_date(placeholders, default_date) abort + if !empty(a:placeholders) + for [placeholder, row, idx] in a:placeholders + let [type, param] = placeholder + if type ==# 'date' && !empty(param) + return param + endif + endfor + endif + return a:default_date +endfunction + + +function! s:process_title(placeholders, default_title) abort + if !empty(a:placeholders) + for [placeholder, row, idx] in a:placeholders + let [type, param] = placeholder + if type ==# 'title' && !empty(param) + return param + endif + endfor + endif + return a:default_title +endfunction + + +function! s:is_html_uptodate(wikifile) abort + let tpl_time = -1 + + let tpl_file = s:template_full_name('') + if tpl_file !=? '' + let tpl_time = getftime(tpl_file) + endif + + let wikifile = fnamemodify(a:wikifile, ':p') + + if vimwiki#vars#get_wikilocal('html_filename_parameterization') + let parameterized_wikiname = s:parameterized_wikiname(wikifile) + let htmlfile = expand(vimwiki#vars#get_wikilocal('path_html') . + \ vimwiki#vars#get_bufferlocal('subdir') . parameterized_wikiname) + else + let htmlfile = expand(vimwiki#vars#get_wikilocal('path_html') . + \ vimwiki#vars#get_bufferlocal('subdir') . fnamemodify(wikifile, ':t:r').'.html') + endif + + if getftime(wikifile) <= getftime(htmlfile) && tpl_time <= getftime(htmlfile) + return 1 + endif + return 0 +endfunction + +function! s:parameterized_wikiname(wikifile) abort + let initial = fnamemodify(a:wikifile, ':t:r') + let lower_sanitized = tolower(initial) + let substituted = substitute(lower_sanitized, '[^a-z0-9_-]\+','-', 'g') + let substituted = substitute(substituted, '\-\+','-', 'g') + let substituted = substitute(substituted, '^-', '', 'g') + let substituted = substitute(substituted, '-$', '', 'g') + return substitute(substituted, '\-\+','-', 'g') . '.html' +endfunction + +function! s:html_insert_contents(html_lines, content) abort + let lines = [] + for line in a:html_lines + if line =~# '%content%' + let parts = split(line, '%content%', 1) + if empty(parts) + call extend(lines, a:content) + else + for idx in range(len(parts)) + call add(lines, parts[idx]) + if idx < len(parts) - 1 + call extend(lines, a:content) + endif + endfor + endif + else + call add(lines, line) + endif + endfor + return lines +endfunction + + +function! s:tag_eqin(value) abort + " mathJAX wants \( \) for inline maths + return '\('.s:mid(a:value, 1).'\)' +endfunction + + +function! s:tag_em(value) abort + return ''.s:mid(a:value, 1).'' +endfunction + + +function! s:tag_strong(value, header_ids) abort + let text = s:mid(a:value, 1) + let id = s:escape_html_attribute(text) + let complete_id = '' + for l in range(6) + if a:header_ids[l][0] !=? '' + let complete_id .= a:header_ids[l][0].'-' + endif + endfor + if a:header_ids[5][0] ==? '' + let complete_id = complete_id[:-2] + endif + let complete_id .= '-'.id + return ''.text.'' +endfunction + + +function! s:tag_tags(value, header_ids) abort + let complete_id = '' + for level in range(6) + if a:header_ids[level][0] !=? '' + let complete_id .= a:header_ids[level][0].'-' + endif + endfor + if a:header_ids[5][0] ==? '' + let complete_id = complete_id[:-2] + endif + let complete_id = s:escape_html_attribute(complete_id) + + let result = [] + for tag in split(a:value, ':') + let id = s:escape_html_attribute(tag) + call add(result, ''.tag.'') + endfor + return join(result) +endfunction + + +function! s:tag_todo(value) abort + return ''.a:value.'' +endfunction + + +function! s:tag_strike(value) abort + return ''.s:mid(a:value, 2).'' +endfunction + + +function! s:tag_super(value) abort + return ''.s:mid(a:value, 1).'' +endfunction + + +function! s:tag_sub(value) abort + return ''.s:mid(a:value, 2).'' +endfunction + + +function! s:tag_code(value) abort + let l:retstr = ' 0.5) + \ ? 'black' : 'white' + + let l:retstr .= + \ " style='background-color:" . l:str . + \ ';color:' . l:fg_color . ";'" + endif + + let l:retstr .= '>'.s:safe_html_preformatted(l:str).'' + return l:retstr +endfunction + + +" match n-th ARG within {{URL[|ARG1|ARG2|...]}} +" *c,d,e),... +function! s:incl_match_arg(nn_index) abort + let rx = vimwiki#vars#get_global('rxWikiInclPrefix'). vimwiki#vars#get_global('rxWikiInclUrl') + let rx = rx . repeat(vimwiki#vars#get_global('rxWikiInclSeparator') . + \ vimwiki#vars#get_global('rxWikiInclArg'), a:nn_index-1) + if a:nn_index > 0 + let rx = rx. vimwiki#vars#get_global('rxWikiInclSeparator'). '\zs' . + \ vimwiki#vars#get_global('rxWikiInclArg') . '\ze' + endif + let rx = rx . vimwiki#vars#get_global('rxWikiInclArgs') . + \ vimwiki#vars#get_global('rxWikiInclSuffix') + return rx +endfunction + + +function! s:linkify_link(src, descr) abort + let src_str = ' href="'.s:escape_html_attribute(a:src).'"' + let descr = vimwiki#u#trim(a:descr) + let descr = (descr ==? '' ? a:src : descr) + let descr_str = (descr =~# vimwiki#vars#get_global('rxWikiIncl') + \ ? s:tag_wikiincl(descr) + \ : descr) + return ''.descr_str.'' +endfunction + + +function! s:linkify_image(src, descr, verbatim_str) abort + let src_str = ' src="'.a:src.'"' + let descr_str = (a:descr !=? '' ? ' alt="'.a:descr.'"' : '') + let verbatim_str = (a:verbatim_str !=? '' ? ' '.a:verbatim_str : '') + return '' +endfunction + + +function! s:tag_weblink(value) abort + " Weblink Template -> descr + let str = a:value + let url = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl')) + let descr = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWeblinkMatchDescr')) + let line = s:linkify_link(url, descr) + return line +endfunction + + +function! s:tag_wikiincl(value) abort + " {{imgurl|arg1|arg2}} -> ??? + " {{imgurl}} -> + " {{imgurl|descr|style="A"}} -> descr + " {{imgurl|descr|class="B"}} -> descr + let str = a:value + " custom transclusions + let line = VimwikiWikiIncludeHandler(str) + " otherwise, assume image transclusion + if line ==? '' + let url_0 = matchstr(str, vimwiki#vars#get_global('rxWikiInclMatchUrl')) + let descr = matchstr(str, s:incl_match_arg(1)) + let verbatim_str = matchstr(str, s:incl_match_arg(2)) + + let link_infos = vimwiki#base#resolve_link(url_0) + + if link_infos.scheme =~# '\mlocal\|wiki\d\+\|diary' + let url = vimwiki#path#relpath(fnamemodify(s:current_html_file, ':h'), link_infos.filename) + " strip the .html extension when we have wiki links, so that the user can + " simply write {{image.png}} to include an image from the wiki directory + if link_infos.scheme =~# '\mwiki\d\+\|diary' + let url = fnamemodify(url, ':r') + endif + else + let url = link_infos.filename + endif + + let url = escape(url, '#') + let line = s:linkify_image(url, descr, verbatim_str) + endif + return line +endfunction + + +function! s:tag_wikilink(value) abort + " [[url]] -> url + " [[url|descr]] -> descr + " [[url|{{...}}]] -> ... + " [[fileurl.ext|descr]] -> descr + " [[dirurl/|descr]] -> descr + " [[url#a1#a2]] -> url#a1#a2 + " [[#a1#a2]] -> #a1#a2 + let str = a:value + let url = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl')) + let descr = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr')) + let descr = vimwiki#u#trim(descr) + let descr = (descr !=? '' ? descr : url) + + let line = VimwikiLinkConverter(url, s:current_wiki_file, s:current_html_file) + if line ==? '' + let link_infos = vimwiki#base#resolve_link(url, s:current_wiki_file) + + if link_infos.scheme ==# 'file' + " external file links are always absolute + let html_link = link_infos.filename + elseif link_infos.scheme ==# 'local' + let html_link = vimwiki#path#relpath(fnamemodify(s:current_html_file, ':h'), + \ link_infos.filename) + elseif link_infos.scheme =~# '\mwiki\d\+\|diary' + " wiki links are always relative to the current file + let html_link = vimwiki#path#relpath( + \ fnamemodify(s:current_wiki_file, ':h'), + \ fnamemodify(link_infos.filename, ':r')) + if html_link !~? '\m/$' + let html_link .= '.html' + endif + else " other schemes, like http, are left untouched + let html_link = link_infos.filename + endif + + if link_infos.anchor !=? '' + let anchor = substitute(link_infos.anchor, '#', '-', 'g') + let html_link .= '#'.anchor + endif + let line = html_link + endif + + let line = s:linkify_link(line, descr) + return line +endfunction + + +function! s:tag_remove_internal_link(value) abort + let value = s:mid(a:value, 2) + + let line = '' + if value =~# '|' + let link_parts = split(value, '|', 1) + else + let link_parts = split(value, '][', 1) + endif + + if len(link_parts) > 1 + if len(link_parts) < 3 + let style = '' + else + let style = link_parts[2] + endif + let line = link_parts[1] + else + let line = value + endif + return line +endfunction + + +function! s:tag_remove_external_link(value) abort + let value = s:mid(a:value, 1) + + let line = '' + if s:is_web_link(value) + let lnkElements = split(value) + let head = lnkElements[0] + let rest = join(lnkElements[1:]) + if rest ==? '' + let rest = head + endif + let line = rest + elseif s:is_img_link(value) + let line = '' + else + " [alskfj sfsf] shouldn't be a link. So return it as it was -- + " enclosed in [...] + let line = '['.value.']' + endif + return line +endfunction + + +function! s:make_tag(line, regexp, func, ...) abort + " Make tags for a given matched regexp. + " Exclude preformatted text and href links. + " FIXME + let patt_splitter = '\(`[^`]\+`\)\|'. + \ '\('.vimwiki#vars#get_syntaxlocal('rxPreStart').'.\+'. + \ vimwiki#vars#get_syntaxlocal('rxPreEnd').'\)\|'. + \ '\(\)\|'. + \ '\(\)\|'. + \ '\(\)\|'. + \ '\('.vimwiki#vars#get_syntaxlocal('rxEqIn').'\)' + + "FIXME FIXME !!! these can easily occur on the same line! + "XXX {{{ }}} ??? obsolete + if '`[^`]\+`' ==# a:regexp || '{{{.\+}}}' ==# a:regexp || + \ vimwiki#vars#get_syntaxlocal('rxEqIn') ==# a:regexp + let res_line = s:subst_func(a:line, a:regexp, a:func) + else + let pos = 0 + " split line with patt_splitter to have parts of line before and after + " href links, preformatted text + " ie: + " hello world `is just a` simple type of prg. + " result: + " ['hello world ', ' simple ', 'type of', ' prg'] + let lines = split(a:line, patt_splitter, 1) + let res_line = '' + for line in lines + if a:0 + let res_line = res_line.s:subst_func(line, a:regexp, a:func, a:1) + else + let res_line = res_line.s:subst_func(line, a:regexp, a:func) + endif + let res_line = res_line.matchstr(a:line, patt_splitter, pos) + let pos = matchend(a:line, patt_splitter, pos) + endfor + endif + return res_line +endfunction + + +function! s:process_tags_remove_links(line) abort + let line = a:line + let line = s:make_tag(line, '\[\[.\{-}\]\]', 's:tag_remove_internal_link') + let line = s:make_tag(line, '\[.\{-}\]', 's:tag_remove_external_link') + return line +endfunction + + +function! s:process_tags_typefaces(line, header_ids) abort + let line = a:line + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxItalic'), 's:tag_em') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxBold'), 's:tag_strong', a:header_ids) + let line = s:make_tag(line, vimwiki#vars#get_global('rxTodo'), 's:tag_todo') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxDelText'), 's:tag_strike') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxSuperScript'), 's:tag_super') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxSubScript'), 's:tag_sub') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxCode'), 's:tag_code') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxEqIn'), 's:tag_eqin') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxTags'), 's:tag_tags', a:header_ids) + return line +endfunction + + +function! s:process_tags_links(line) abort + let line = a:line + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxWikiLink'), 's:tag_wikilink') + let line = s:make_tag(line, vimwiki#vars#get_global('rxWikiIncl'), 's:tag_wikiincl') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxWeblink'), 's:tag_weblink') + return line +endfunction + + +function! s:process_inline_tags(line, header_ids) abort + let line = s:process_tags_links(a:line) + let line = s:process_tags_typefaces(line, a:header_ids) + return line +endfunction + + +function! s:close_tag_pre(pre, ldest) abort + if a:pre[0] + call insert(a:ldest, '') + return 0 + endif + return a:pre +endfunction + + +function! s:close_tag_math(math, ldest) abort + if a:math[0] + call insert(a:ldest, "\\\]") + return 0 + endif + return a:math +endfunction + + +function! s:close_tag_quote(quote, ldest) abort + if a:quote + call insert(a:ldest, '') + return 0 + endif + return a:quote +endfunction + + +function! s:close_tag_para(para, ldest) abort + if a:para + call insert(a:ldest, '

') + return 0 + endif + return a:para +endfunction + + +function! s:close_tag_table(table, ldest, header_ids) abort + " The first element of table list is a string which tells us if table should be centered. + " The rest elements are rows which are lists of columns: + " ['center', + " [ CELL1, CELL2, CELL3 ], + " [ CELL1, CELL2, CELL3 ], + " [ CELL1, CELL2, CELL3 ], + " ] + " And CELLx is: { 'body': 'col_x', 'rowspan': r, 'colspan': c } + + function! s:sum_rowspan(table) abort + let table = a:table + + " Get max cells + let max_cells = 0 + for row in table[1:] + let n_cells = len(row) + if n_cells > max_cells + let max_cells = n_cells + end + endfor + + " Sum rowspan + for cell_idx in range(max_cells) + let rows = 1 + + for row_idx in range(len(table)-1, 1, -1) + if cell_idx >= len(table[row_idx]) + let rows = 1 + continue + endif + + if table[row_idx][cell_idx].rowspan == 0 + let rows += 1 + else " table[row_idx][cell_idx].rowspan == 1 + let table[row_idx][cell_idx].rowspan = rows + let rows = 1 + endif + endfor + endfor + endfunction + + function! s:sum_colspan(table) abort + for row in a:table[1:] + let cols = 1 + + for cell_idx in range(len(row)-1, 0, -1) + if row[cell_idx].colspan == 0 + let cols += 1 + else "row[cell_idx].colspan == 1 + let row[cell_idx].colspan = cols + let cols = 1 + endif + endfor + endfor + endfunction + + function! s:close_tag_row(row, header, ldest, header_ids) abort + call add(a:ldest, '') + + " Set tag element of columns + if a:header + let tag_name = 'th' + else + let tag_name = 'td' + end + + " Close tag of columns + for cell in a:row + if cell.rowspan == 0 || cell.colspan == 0 + continue + endif + + if cell.rowspan > 1 + let rowspan_attr = ' rowspan="' . cell.rowspan . '"' + else "cell.rowspan == 1 + let rowspan_attr = '' + endif + if cell.colspan > 1 + let colspan_attr = ' colspan="' . cell.colspan . '"' + else "cell.colspan == 1 + let colspan_attr = '' + endif + + call add(a:ldest, '<' . tag_name . rowspan_attr . colspan_attr .'>') + call add(a:ldest, s:process_inline_tags(cell.body, a:header_ids)) + call add(a:ldest, '') + endfor + + call add(a:ldest, '') + endfunction + + let table = a:table + let ldest = a:ldest + if len(table) + call s:sum_rowspan(table) + call s:sum_colspan(table) + + if table[0] ==# 'center' + call add(ldest, "") + else + call add(ldest, '
') + endif + + " Empty lists are table separators. + " Search for the last empty list. All the above rows would be a table header. + " We should exclude the first element of the table list as it is a text tag + " that shows if table should be centered or not. + let head = 0 + for idx in range(len(table)-1, 1, -1) + if empty(table[idx]) + let head = idx + break + endif + endfor + if head > 0 + for row in table[1 : head-1] + if !empty(filter(row, '!empty(v:val)')) + call s:close_tag_row(row, 1, ldest, a:header_ids) + endif + endfor + for row in table[head+1 :] + call s:close_tag_row(row, 0, ldest, a:header_ids) + endfor + else + for row in table[1 :] + call s:close_tag_row(row, 0, ldest, a:header_ids) + endfor + endif + call add(ldest, '
') + let table = [] + endif + return table +endfunction + + +function! s:close_tag_list(lists, ldest) abort + while len(a:lists) + let item = remove(a:lists, 0) + call insert(a:ldest, item[0]) + endwhile +endfunction + + +function! s:close_tag_def_list(deflist, ldest) abort + if a:deflist + call insert(a:ldest, '') + return 0 + endif + return a:deflist +endfunction + + +function! s:process_tag_pre(line, pre) abort + " pre is the list of [is_in_pre, indent_of_pre] + "XXX always outputs a single line or empty list! + let lines = [] + let pre = a:pre + let processed = 0 + "XXX huh? + "if !pre[0] && a:line =~# '^\s*{{{[^\(}}}\)]*\s*$' + if !pre[0] && a:line =~# '^\s*{{{' + let class = matchstr(a:line, '{{{\zs.*$') + "FIXME class cannot contain arbitrary strings + let class = substitute(class, '\s\+$', '', 'g') + if class !=? '' + call add(lines, '
')
+    else
+      call add(lines, '
')
+    endif
+    let pre = [1, len(matchstr(a:line, '^\s*\ze{{{'))]
+    let processed = 1
+  elseif pre[0] && a:line =~# '^\s*}}}\s*$'
+    let pre = [0, 0]
+    call add(lines, '
') + let processed = 1 + elseif pre[0] + let processed = 1 + "XXX destroys indent in general! + "call add(lines, substitute(a:line, '^\s\{'.pre[1].'}', '', '')) + call add(lines, s:safe_html_preformatted(a:line)) + endif + return [processed, lines, pre] +endfunction + + +function! s:process_tag_math(line, math) abort + " math is the list of [is_in_math, indent_of_math] + let lines = [] + let math = a:math + let processed = 0 + if !math[0] && a:line =~# '^\s*{{\$[^\(}}$\)]*\s*$' + let class = matchstr(a:line, '{{$\zs.*$') + "FIXME class cannot be any string! + let class = substitute(class, '\s\+$', '', 'g') + " store the environment name in a global variable in order to close the + " environment properly + let s:current_math_env = matchstr(class, '^%\zs\S\+\ze%') + if s:current_math_env !=? '' + call add(lines, substitute(class, '^%\(\S\+\)%', '\\begin{\1}', '')) + elseif class !=? '' + call add(lines, "\\\[".class) + else + call add(lines, "\\\[") + endif + let math = [1, len(matchstr(a:line, '^\s*\ze{{\$'))] + let processed = 1 + elseif math[0] && a:line =~# '^\s*}}\$\s*$' + let math = [0, 0] + if s:current_math_env !=? '' + call add(lines, "\\end{".s:current_math_env.'}') + else + call add(lines, "\\\]") + endif + let processed = 1 + elseif math[0] + let processed = 1 + call add(lines, substitute(a:line, '^\s\{'.math[1].'}', '', '')) + endif + return [processed, lines, math] +endfunction + + +function! s:process_tag_quote(line, quote) abort + let lines = [] + let quote = a:quote + let processed = 0 + if a:line =~# '^\s\{4,}\S' + if !quote + call add(lines, '
') + let quote = 1 + endif + let processed = 1 + call add(lines, substitute(a:line, '^\s*', '', '')) + elseif quote + call add(lines, '
') + let quote = 0 + endif + return [processed, lines, quote] +endfunction + + +function! s:process_tag_list(line, lists) abort + + function! s:add_checkbox(line, rx_list) abort + let st_tag = '
  • ' + let chk = matchlist(a:line, a:rx_list) + if !empty(chk) && len(chk[1]) > 0 + let completion = index(vimwiki#vars#get_syntaxlocal('listsyms_list'), chk[1]) + let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) + if completion == 0 + let st_tag = '
  • ' + elseif completion == -1 && chk[1] == vimwiki#vars#get_global('listsym_rejected') + let st_tag = '
  • ' + elseif completion > 0 && completion < n + let completion = float2nr(round(completion / (n-1.0) * 3.0 + 0.5 )) + let st_tag = '
  • ' + endif + endif + return [st_tag, ''] + endfunction + + + let in_list = (len(a:lists) > 0) + + " If it is not list yet then do not process line that starts from *bold* + " text. + " XXX necessary? in *bold* text, no space must follow the first * + if !in_list + let pos = match(a:line, '^\s*'.vimwiki#vars#get_syntaxlocal('rxBold')) + if pos != -1 + return [0, []] + endif + endif + + let lines = [] + let processed = 0 + + if a:line =~# '^\s*'.s:bullets.'\s' + let lstSym = matchstr(a:line, s:bullets) + let lstTagOpen = '
      ' + let lstTagClose = '
    ' + let lstRegExp = '^\s*'.s:bullets.'\s' + elseif a:line =~# '^\s*'.s:numbers.'\s' + let lstSym = matchstr(a:line, s:numbers) + let lstTagOpen = '
      ' + let lstTagClose = '
    ' + let lstRegExp = '^\s*'.s:numbers.'\s' + else + let lstSym = '' + let lstTagOpen = '' + let lstTagClose = '' + let lstRegExp = '' + endif + + if lstSym !=? '' + " To get proper indent level 'retab' the line -- change all tabs + " to spaces*tabstop + let line = substitute(a:line, '\t', repeat(' ', &tabstop), 'g') + let indent = stridx(line, lstSym) + + let checkbox = '\s*\[\(.\)\]\s*' + let [st_tag, en_tag] = s:add_checkbox(line, lstRegExp.checkbox) + + if !in_list + call add(a:lists, [lstTagClose, indent]) + call add(lines, lstTagOpen) + elseif (in_list && indent > a:lists[-1][1]) + let item = remove(a:lists, -1) + call add(lines, item[0]) + + call add(a:lists, [lstTagClose, indent]) + call add(lines, lstTagOpen) + elseif (in_list && indent < a:lists[-1][1]) + while len(a:lists) && indent < a:lists[-1][1] + let item = remove(a:lists, -1) + call add(lines, item[0]) + endwhile + elseif in_list + let item = remove(a:lists, -1) + call add(lines, item[0]) + endif + + call add(a:lists, [en_tag, indent]) + call add(lines, st_tag) + call add(lines, substitute(a:line, lstRegExp.'\%('.checkbox.'\)\?', '', '')) + let processed = 1 + elseif in_list && a:line =~# '^\s\+\S\+' + if vimwiki#vars#get_global('list_ignore_newline') + call add(lines, a:line) + else + call add(lines, '
    '.a:line) + endif + let processed = 1 + else + call s:close_tag_list(a:lists, lines) + endif + return [processed, lines] +endfunction + + +function! s:process_tag_def_list(line, deflist) abort + let lines = [] + let deflist = a:deflist + let processed = 0 + let matches = matchlist(a:line, '\(^.*\)::\%(\s\|$\)\(.*\)') + if !deflist && len(matches) > 0 + call add(lines, '
    ') + let deflist = 1 + endif + if deflist && len(matches) > 0 + if matches[1] !=? '' + call add(lines, '
    '.matches[1].'
    ') + endif + if matches[2] !=? '' + call add(lines, '
    '.matches[2].'
    ') + endif + let processed = 1 + elseif deflist + let deflist = 0 + call add(lines, '
    ') + endif + return [processed, lines, deflist] +endfunction + + +function! s:process_tag_para(line, para) abort + let lines = [] + let para = a:para + let processed = 0 + if a:line =~# '^\s\{,3}\S' + if !para + call add(lines, '

    ') + let para = 1 + endif + let processed = 1 + if vimwiki#vars#get_global('text_ignore_newline') + call add(lines, a:line) + else + call add(lines, a:line.'
    ') + endif + elseif para && a:line =~# '^\s*$' + call add(lines, '

    ') + let para = 0 + endif + return [processed, lines, para] +endfunction + + +function! s:process_tag_h(line, id) abort + let line = a:line + let processed = 0 + let h_level = 0 + let h_text = '' + let h_id = '' + + if a:line =~# vimwiki#vars#get_syntaxlocal('rxHeader') + let h_level = vimwiki#u#count_first_sym(a:line) + endif + if h_level > 0 + + let h_text = vimwiki#u#trim(matchstr(line, vimwiki#vars#get_syntaxlocal('rxHeader'))) + let h_number = '' + let h_complete_id = '' + let h_id = s:escape_html_attribute(h_text) + let centered = (a:line =~# '^\s') + + if h_text !=# vimwiki#vars#get_global('toc_header') + + let a:id[h_level-1] = [h_text, a:id[h_level-1][1]+1] + + " reset higher level ids + for level in range(h_level, 5) + let a:id[level] = ['', 0] + endfor + + for l in range(h_level-1) + let h_number .= a:id[l][1].'.' + if a:id[l][0] !=? '' + let h_complete_id .= a:id[l][0].'-' + endif + endfor + let h_number .= a:id[h_level-1][1] + let h_complete_id .= a:id[h_level-1][0] + + if vimwiki#vars#get_global('html_header_numbering') + let num = matchstr(h_number, + \ '^\(\d.\)\{'.(vimwiki#vars#get_global('html_header_numbering')-1).'}\zs.*') + if !empty(num) + let num .= vimwiki#vars#get_global('html_header_numbering_sym') + endif + let h_text = num.' '.h_text + endif + let h_complete_id = s:escape_html_attribute(h_complete_id) + let h_part = '
    ' + let h_part .= '' + let h_part .= '
    ' + + let processed = 1 + endif + return [processed, line] +endfunction + + +function! s:process_tag_hr(line) abort + let line = a:line + let processed = 0 + if a:line =~# '^-----*$' + let line = '
    ' + let processed = 1 + endif + return [processed, line] +endfunction + + +function! s:process_tag_table(line, table, header_ids) abort + function! s:table_empty_cell(value) abort + let cell = {} + + if a:value =~# '^\s*\\/\s*$' + let cell.body = '' + let cell.rowspan = 0 + let cell.colspan = 1 + elseif a:value =~# '^\s*>\s*$' + let cell.body = '' + let cell.rowspan = 1 + let cell.colspan = 0 + elseif a:value =~# '^\s*$' + let cell.body = ' ' + let cell.rowspan = 1 + let cell.colspan = 1 + else + let cell.body = a:value + let cell.rowspan = 1 + let cell.colspan = 1 + endif + + return cell + endfunction + + function! s:table_add_row(table, line) abort + if empty(a:table) + if a:line =~# '^\s\+' + let row = ['center', []] + else + let row = ['normal', []] + endif + else + let row = [[]] + endif + return row + endfunction + + let table = a:table + let lines = [] + let processed = 0 + + if vimwiki#tbl#is_separator(a:line) + call extend(table, s:table_add_row(a:table, a:line)) + let processed = 1 + elseif vimwiki#tbl#is_table(a:line) + call extend(table, s:table_add_row(a:table, a:line)) + + let processed = 1 + " let cells = split(a:line, vimwiki#tbl#cell_splitter(), 1)[1: -2] + let cells = vimwiki#tbl#get_cells(a:line) + call map(cells, 's:table_empty_cell(v:val)') + call extend(table[-1], cells) + else + let table = s:close_tag_table(table, lines, a:header_ids) + endif + return [processed, lines, table] +endfunction + + +function! s:parse_line(line, state) abort + let state = {} + let state.para = a:state.para + let state.quote = a:state.quote + let state.pre = a:state.pre[:] + let state.math = a:state.math[:] + let state.table = a:state.table[:] + let state.lists = a:state.lists[:] + let state.deflist = a:state.deflist + let state.placeholder = a:state.placeholder + let state.header_ids = a:state.header_ids + + let res_lines = [] + let processed = 0 + let line = a:line + + if !processed + " allows insertion of plain text to the final html conversion + " for example: + " %plainhtml
    + " inserts the line above to the final html file (without %plainhtml prefix) + let trigger = '%plainhtml' + if line =~# '^\s*' . trigger + let lines = [] + let processed = 1 + + " if something precedes the plain text line, + " make sure everything gets closed properly + " before inserting plain text. this ensures that + " the plain text is not considered as + " part of the preceding structure + if processed && len(state.table) + let state.table = s:close_tag_table(state.table, lines, state.header_ids) + endif + if processed && state.deflist + let state.deflist = s:close_tag_def_list(state.deflist, lines) + endif + if processed && state.quote + let state.quote = s:close_tag_quote(state.quote, lines) + endif + if processed && state.para + let state.para = s:close_tag_para(state.para, lines) + endif + + " remove the trigger prefix + let pp = split(line, trigger)[0] + + call add(lines, pp) + call extend(res_lines, lines) + endif + endif + + let line = s:safe_html_line(a:line) + + " pres + if !processed + let [processed, lines, state.pre] = s:process_tag_pre(line, state.pre) + " pre is just fine to be in the list -- do not close list item here. + " if processed && len(state.lists) + " call s:close_tag_list(state.lists, lines) + " endif + if !processed + let [processed, lines, state.math] = s:process_tag_math(line, state.math) + endif + if processed && len(state.table) + let state.table = s:close_tag_table(state.table, lines, state.header_ids) + endif + if processed && state.deflist + let state.deflist = s:close_tag_def_list(state.deflist, lines) + endif + if processed && state.quote + let state.quote = s:close_tag_quote(state.quote, lines) + endif + if processed && state.para + let state.para = s:close_tag_para(state.para, lines) + endif + call extend(res_lines, lines) + endif + + + if !processed + if line =~# vimwiki#vars#get_syntaxlocal('rxComment') + let processed = 1 + endif + endif + + " nohtml -- placeholder + if !processed + if line =~# '\m^\s*%nohtml\s*$' + let processed = 1 + let state.placeholder = ['nohtml'] + endif + endif + + " title -- placeholder + if !processed + if line =~# '\m^\s*%title\%(\s.*\)\?$' + let processed = 1 + let param = matchstr(line, '\m^\s*%title\s\+\zs.*') + let state.placeholder = ['title', param] + endif + endif + + " date -- placeholder + if !processed + if line =~# '\m^\s*%date\%(\s.*\)\?$' + let processed = 1 + let param = matchstr(line, '\m^\s*%date\s\+\zs.*') + let state.placeholder = ['date', param] + endif + endif + + " html template -- placeholder + if !processed + if line =~# '\m^\s*%template\%(\s.*\)\?$' + let processed = 1 + let param = matchstr(line, '\m^\s*%template\s\+\zs.*') + let state.placeholder = ['template', param] + endif + endif + + + " tables + if !processed + let [processed, lines, state.table] = s:process_tag_table(line, state.table, state.header_ids) + call extend(res_lines, lines) + endif + + + " lists + if !processed + let [processed, lines] = s:process_tag_list(line, state.lists) + if processed && state.quote + let state.quote = s:close_tag_quote(state.quote, lines) + endif + if processed && state.pre[0] + let state.pre = s:close_tag_pre(state.pre, lines) + endif + if processed && state.math[0] + let state.math = s:close_tag_math(state.math, lines) + endif + if processed && len(state.table) + let state.table = s:close_tag_table(state.table, lines, state.header_ids) + endif + if processed && state.deflist + let state.deflist = s:close_tag_def_list(state.deflist, lines) + endif + if processed && state.para + let state.para = s:close_tag_para(state.para, lines) + endif + + call map(lines, 's:process_inline_tags(v:val, state.header_ids)') + + call extend(res_lines, lines) + endif + + + " headers + if !processed + let [processed, line] = s:process_tag_h(line, state.header_ids) + if processed + call s:close_tag_list(state.lists, res_lines) + let state.table = s:close_tag_table(state.table, res_lines, state.header_ids) + let state.pre = s:close_tag_pre(state.pre, res_lines) + let state.math = s:close_tag_math(state.math, res_lines) + let state.quote = s:close_tag_quote(state.quote, res_lines) + let state.para = s:close_tag_para(state.para, res_lines) + + call add(res_lines, line) + endif + endif + + + " quotes + if !processed + let [processed, lines, state.quote] = s:process_tag_quote(line, state.quote) + if processed && len(state.lists) + call s:close_tag_list(state.lists, lines) + endif + if processed && state.deflist + let state.deflist = s:close_tag_def_list(state.deflist, lines) + endif + if processed && len(state.table) + let state.table = s:close_tag_table(state.table, lines, state.header_ids) + endif + if processed && state.pre[0] + let state.pre = s:close_tag_pre(state.pre, lines) + endif + if processed && state.math[0] + let state.math = s:close_tag_math(state.math, lines) + endif + if processed && state.para + let state.para = s:close_tag_para(state.para, lines) + endif + + call map(lines, 's:process_inline_tags(v:val, state.header_ids)') + + call extend(res_lines, lines) + endif + + + " horizontal rules + if !processed + let [processed, line] = s:process_tag_hr(line) + if processed + call s:close_tag_list(state.lists, res_lines) + let state.table = s:close_tag_table(state.table, res_lines, state.header_ids) + let state.pre = s:close_tag_pre(state.pre, res_lines) + let state.math = s:close_tag_math(state.math, res_lines) + call add(res_lines, line) + endif + endif + + + " definition lists + if !processed + let [processed, lines, state.deflist] = s:process_tag_def_list(line, state.deflist) + + call map(lines, 's:process_inline_tags(v:val, state.header_ids)') + + call extend(res_lines, lines) + endif + + + "" P + if !processed + let [processed, lines, state.para] = s:process_tag_para(line, state.para) + if processed && len(state.lists) + call s:close_tag_list(state.lists, lines) + endif + if processed && state.quote + let state.quote = s:close_tag_quote(state.quote, res_lines) + endif + if processed && state.pre[0] + let state.pre = s:close_tag_pre(state.pre, res_lines) + endif + if processed && state.math[0] + let state.math = s:close_tag_math(state.math, res_lines) + endif + if processed && len(state.table) + let state.table = s:close_tag_table(state.table, res_lines, state.header_ids) + endif + + call map(lines, 's:process_inline_tags(v:val, state.header_ids)') + + call extend(res_lines, lines) + endif + + + "" add the rest + if !processed + call add(res_lines, line) + endif + + return [res_lines, state] + +endfunction + + +function! s:use_custom_wiki2html() abort + let custom_wiki2html = vimwiki#vars#get_wikilocal('custom_wiki2html') + return !empty(custom_wiki2html) && + \ (s:file_exists(custom_wiki2html) || s:binary_exists(custom_wiki2html)) +endfunction + + +function! vimwiki#html#CustomWiki2HTML(path, wikifile, force) abort + call vimwiki#path#mkdir(a:path) + let output = system(vimwiki#vars#get_wikilocal('custom_wiki2html'). ' '. + \ a:force. ' '. + \ vimwiki#vars#get_wikilocal('syntax'). ' '. + \ strpart(vimwiki#vars#get_wikilocal('ext'), 1). ' '. + \ shellescape(a:path). ' '. + \ shellescape(a:wikifile). ' '. + \ shellescape(s:default_CSS_full_name(a:path)). ' '. + \ (len(vimwiki#vars#get_wikilocal('template_path')) > 1 ? + \ shellescape(expand(vimwiki#vars#get_wikilocal('template_path'))) : '-'). ' '. + \ (len(vimwiki#vars#get_wikilocal('template_default')) > 0 ? + \ vimwiki#vars#get_wikilocal('template_default') : '-'). ' '. + \ (len(vimwiki#vars#get_wikilocal('template_ext')) > 0 ? + \ vimwiki#vars#get_wikilocal('template_ext') : '-'). ' '. + \ (len(vimwiki#vars#get_bufferlocal('subdir')) > 0 ? + \ shellescape(s:root_path(vimwiki#vars#get_bufferlocal('subdir'))) : '-'). ' '. + \ (len(vimwiki#vars#get_wikilocal('custom_wiki2html_args')) > 0 ? + \ vimwiki#vars#get_wikilocal('custom_wiki2html_args') : '-')) + " Echo if non void + if output !~? '^\s*$' + echomsg output + endif +endfunction + + +function! s:convert_file(path_html, wikifile) abort + let done = 0 + + let wikifile = fnamemodify(a:wikifile, ':p') + + let path_html = expand(a:path_html).vimwiki#vars#get_bufferlocal('subdir') + let htmlfile = fnamemodify(wikifile, ':t:r').'.html' + + " the currently processed file name is needed when processing links + " yeah yeah, shame on me for using (quasi-) global variables + let s:current_wiki_file = wikifile + let s:current_html_file = path_html . htmlfile + + if s:use_custom_wiki2html() + let force = 1 + call vimwiki#html#CustomWiki2HTML(path_html, wikifile, force) + let done = 1 + endif + + if s:syntax_supported() && done == 0 + let lsource = readfile(wikifile) + let ldest = [] + + call vimwiki#path#mkdir(path_html) + + " nohtml placeholder -- to skip html generation. + let nohtml = 0 + + " template placeholder + let template_name = '' + + " for table of contents placeholders. + let placeholders = [] + + " current state of converter + let state = {} + let state.para = 0 + let state.quote = 0 + let state.pre = [0, 0] " [in_pre, indent_pre] + let state.math = [0, 0] " [in_math, indent_math] + let state.table = [] + let state.deflist = 0 + let state.lists = [] + let state.placeholder = [] + let state.header_ids = [['', 0], ['', 0], ['', 0], ['', 0], ['', 0], ['', 0]] + " [last seen header text in this level, number] + + " prepare constants for s:safe_html_line() + let s:lt_pattern = '<' + let s:gt_pattern = '>' + if vimwiki#vars#get_global('valid_html_tags') !=? '' + let tags = join(split(vimwiki#vars#get_global('valid_html_tags'), '\s*,\s*'), '\|') + let s:lt_pattern = '\c<\%(/\?\%('.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?>\)\@!' + let s:gt_pattern = '\c\%(' + endif + + " prepare regexps for lists + let s:bullets = '[*-]' + let s:numbers = '\C\%(#\|\d\+)\|\d\+\.\|[ivxlcdm]\+)\|[IVXLCDM]\+)\|\l\{1,2})\|\u\{1,2})\)' + + for line in lsource + let oldquote = state.quote + let [lines, state] = s:parse_line(line, state) + + " Hack: There could be a lot of empty strings before s:process_tag_quote + " find out `quote` is over. So we should delete them all. Think of the way + " to refactor it out. + if oldquote != state.quote + call s:remove_blank_lines(ldest) + endif + + if !empty(state.placeholder) + if state.placeholder[0] ==# 'nohtml' + let nohtml = 1 + break + elseif state.placeholder[0] ==# 'template' + let template_name = state.placeholder[1] + else + call add(placeholders, [state.placeholder, len(ldest), len(placeholders)]) + endif + let state.placeholder = [] + endif + + call extend(ldest, lines) + endfor + + + if nohtml + echon "\r".'%nohtml placeholder found' + return '' + endif + + call s:remove_blank_lines(ldest) + + " process end of file + " close opened tags if any + let lines = [] + call s:close_tag_quote(state.quote, lines) + call s:close_tag_para(state.para, lines) + call s:close_tag_pre(state.pre, lines) + call s:close_tag_math(state.math, lines) + call s:close_tag_list(state.lists, lines) + call s:close_tag_def_list(state.deflist, lines) + call s:close_tag_table(state.table, lines, state.header_ids) + call extend(ldest, lines) + + let title = s:process_title(placeholders, fnamemodify(a:wikifile, ':t:r')) + let date = s:process_date(placeholders, strftime('%Y-%m-%d')) + let wiki_path = strpart(s:current_wiki_file, strlen(vimwiki#vars#get_wikilocal('path'))) + + let html_lines = s:get_html_template(template_name) + + " processing template variables (refactor to a function) + call map(html_lines, 'substitute(v:val, "%title%", "'. title .'", "g")') + call map(html_lines, 'substitute(v:val, "%date%", "'. date .'", "g")') + call map(html_lines, 'substitute(v:val, "%root_path%", "'. + \ s:root_path(vimwiki#vars#get_bufferlocal('subdir')) .'", "g")') + call map(html_lines, 'substitute(v:val, "%wiki_path%", "'. wiki_path .'", "g")') + + let css_name = expand(vimwiki#vars#get_wikilocal('css_name')) + let css_name = substitute(css_name, '\', '/', 'g') + call map(html_lines, 'substitute(v:val, "%css%", "'. css_name .'", "g")') + + let enc = &fileencoding + if enc ==? '' + let enc = &encoding + endif + call map(html_lines, 'substitute(v:val, "%encoding%", "'. enc .'", "g")') + + let html_lines = s:html_insert_contents(html_lines, ldest) " %contents% + + call writefile(html_lines, path_html.htmlfile) + let done = 1 + + endif + + if done == 0 + echomsg 'Vimwiki Error: Conversion to HTML is not supported for this syntax' + return '' + endif + + return path_html.htmlfile +endfunction + + +function! vimwiki#html#Wiki2HTML(path_html, wikifile) abort + let result = s:convert_file(a:path_html, a:wikifile) + if result !=? '' + call s:create_default_CSS(a:path_html) + endif + return result +endfunction + + +function! vimwiki#html#WikiAll2HTML(path_html, force) abort + if !s:syntax_supported() && !s:use_custom_wiki2html() + echomsg 'Vimwiki Error: Conversion to HTML is not supported for this syntax' + return + endif + + echomsg 'Vimwiki: Saving Vimwiki files ...' + let save_eventignore = &eventignore + let &eventignore = 'all' + try + wall + catch + " just ignore errors + endtry + let &eventignore = save_eventignore + + let path_html = expand(a:path_html) + call vimwiki#path#mkdir(path_html) + + if !vimwiki#vars#get_wikilocal('html_filename_parameterization') + echomsg 'Vimwiki: Deleting non-wiki html files ...' + call s:delete_html_files(path_html) + endif + + echomsg 'Vimwiki: Converting wiki to html files ...' + let setting_more = &more + setlocal nomore + + " temporarily adjust current_subdir global state variable + let current_subdir = vimwiki#vars#get_bufferlocal('subdir') + let current_invsubdir = vimwiki#vars#get_bufferlocal('invsubdir') + + let wikifiles = split(glob(vimwiki#vars#get_wikilocal('path').'**/*'. + \ vimwiki#vars#get_wikilocal('ext')), '\n') + for wikifile in wikifiles + let wikifile = fnamemodify(wikifile, ':p') + + " temporarily adjust 'subdir' and 'invsubdir' state variables + let subdir = vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path'), wikifile) + call vimwiki#vars#set_bufferlocal('subdir', subdir) + call vimwiki#vars#set_bufferlocal('invsubdir', vimwiki#base#invsubdir(subdir)) + + if a:force || !s:is_html_uptodate(wikifile) + echomsg 'Vimwiki: Processing '.wikifile + + call s:convert_file(path_html, wikifile) + else + echomsg 'Vimwiki: Skipping '.wikifile + endif + endfor + " reset 'subdir' state variable + call vimwiki#vars#set_bufferlocal('subdir', current_subdir) + call vimwiki#vars#set_bufferlocal('invsubdir', current_invsubdir) + + let created = s:create_default_CSS(path_html) + if created + echomsg 'Vimwiki: Default style.css has been created' + endif + echomsg 'Vimwiki: HTML exported to '.path_html + echomsg 'Vimwiki: Done!' + + let &more = setting_more +endfunction + + +function! s:file_exists(fname) abort + return !empty(getftype(expand(a:fname))) +endfunction + + +function! s:binary_exists(fname) abort + return executable(expand(a:fname)) +endfunction + + +function! s:get_wikifile_url(wikifile) abort + return vimwiki#vars#get_wikilocal('path_html') . + \ vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path'), a:wikifile). + \ fnamemodify(a:wikifile, ':t:r').'.html' +endfunction + + +function! vimwiki#html#PasteUrl(wikifile) abort + execute 'r !echo file://'.s:get_wikifile_url(a:wikifile) +endfunction + + +function! vimwiki#html#CatUrl(wikifile) abort + execute '!echo file://'.s:get_wikifile_url(a:wikifile) +endfunction + diff --git a/.config/vim/bundle/vimwiki/autoload/vimwiki/lst.vim b/.config/vim/bundle/vimwiki/autoload/vimwiki/lst.vim new file mode 100644 index 0000000..bebd89b --- /dev/null +++ b/.config/vim/bundle/vimwiki/autoload/vimwiki/lst.vim @@ -0,0 +1,1713 @@ +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 +" Vimwiki autoload plugin file +" Description: Everything concerning lists and checkboxes +" Home: https://github.com/vimwiki/vimwiki/ + + +if exists('g:loaded_vimwiki_list_auto') || &compatible + finish +endif +let g:loaded_vimwiki_list_auto = 1 + + +" --------------------------------------------------------- +" incrementation functions for the various kinds of numbers +" --------------------------------------------------------- + +function! s:increment_1(value) abort + return eval(a:value) + 1 +endfunction + + +function! s:increment_A(value) abort + let list_of_chars = split(a:value, '.\zs') + let done = 0 + for idx in reverse(range(len(list_of_chars))) + let cur_num = char2nr(list_of_chars[idx]) + if cur_num < 90 + let list_of_chars[idx] = nr2char(cur_num + 1) + let done = 1 + break + else + let list_of_chars[idx] = 'A' + endif + endfor + if !done + call insert(list_of_chars, 'A') + endif + return join(list_of_chars, '') +endfunction + + +function! s:increment_a(value) abort + let list_of_chars = split(a:value, '.\zs') + let done = 0 + for idx in reverse(range(len(list_of_chars))) + let cur_num = char2nr(list_of_chars[idx]) + if cur_num < 122 + let list_of_chars[idx] = nr2char(cur_num + 1) + let done = 1 + break + else + let list_of_chars[idx] = 'a' + endif + endfor + if !done + call insert(list_of_chars, 'a') + endif + return join(list_of_chars, '') +endfunction + + +function! s:increment_I(value) abort + let subst_list = [ ['XLVIII$', 'IL'], ['VIII$', 'IX'], ['III$', 'IV'], + \ ['DCCCXCIX$', 'CM'], ['CCCXCIX$', 'CD'], ['LXXXIX$', 'XC'], + \ ['XXXIX$', 'XL'], ['\(I\{1,2\}\)$', '\1I'], ['CDXCIX$', 'D'], + \ ['CMXCIX$', 'M'], ['XCIX$', 'C'], ['I\([VXLCDM]\)$', '\1'], + \ ['\([VXLCDM]\)$', '\1I'] ] + for [regex, subst] in subst_list + if a:value =~# regex + return substitute(a:value, regex, subst, '') + endif + endfor + return '' +endfunction + + +function! s:increment_i(value) abort + let subst_list = [ ['xlviii$', 'il'], ['viii$', 'ix'], ['iii$', 'iv'], + \ ['dcccxcix$', 'cm'], ['cccxcix$', 'cd'], ['lxxxix$', 'xc'], + \ ['xxxix$', 'xl'], ['\(i\{1,2\}\)$', '\1i'], ['cdxcix$', 'd'], + \ ['cmxcix$', 'm'], ['xcix$', 'c'], ['i\([vxlcdm]\)$', '\1'], + \ ['\([vxlcdm]\)$', '\1i'] ] + for [regex, subst] in subst_list + if a:value =~# regex + return substitute(a:value, regex, subst, '') + endif + endfor + return '' +endfunction + + +" --------------------------------------------------------- +" utility functions +" --------------------------------------------------------- + +function! s:substitute_rx_in_line(lnum, pattern, new_string) abort + call setline(a:lnum, substitute(getline(a:lnum), a:pattern, a:new_string, '')) +endfunction + + +function! s:substitute_string_in_line(lnum, old_string, new_string) abort + call s:substitute_rx_in_line(a:lnum, vimwiki#u#escape(a:old_string), a:new_string) +endfunction + + +function! s:first_char(string) abort + return matchstr(a:string, '^.') +endfunction + + +if exists('*strdisplaywidth') + function! s:string_length(str) abort + return strdisplaywidth(a:str) + endfunction +else + function! s:string_length(str) abort + return strlen(substitute(a:str, '.', 'x', 'g')) + endfunction +endif + + +function! vimwiki#lst#default_symbol() abort + return vimwiki#vars#get_syntaxlocal('list_markers')[0] +endfunction + + +function! vimwiki#lst#get_list_margin() abort + let list_margin = vimwiki#vars#get_wikilocal('list_margin') + if list_margin < 0 + return &shiftwidth + else + return list_margin + endif +endfunction + + +"Returns: the column where the text of a line starts (possible list item +"markers and checkboxes are skipped) +function! s:text_begin(lnum) abort + return s:string_length(matchstr(getline(a:lnum), vimwiki#vars#get_syntaxlocal('rxListItem'))) +endfunction + + +"Returns: 2 if there is a marker and text +" 1 for a marker and no text +" 0 for no marker at all (empty line or only text) +function! s:line_has_marker(lnum) abort + if getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxListItem').'\s*$' + return 1 + elseif getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxListItem').'\s*\S' + return 2 + else + return 0 + endif +endfunction + + +" --------------------------------------------------------- +" get properties of a list item +" --------------------------------------------------------- + +"Returns: the mainly used data structure in this file +"An item represents a single list item and is a dictionary with the keys +"lnum - the line number of the list item +"type - 1 for bulleted item, 2 for numbered item, 0 for a regular line +"mrkr - the concrete marker, e.g. '**' or 'b)' +"cb - the char in the checkbox or '' if there is no checkbox +function! s:get_item(lnum) abort + let item = {'lnum': a:lnum} + if a:lnum == 0 || a:lnum > line('$') + let item.type = 0 + return item + endif + + let matches = matchlist(getline(a:lnum), vimwiki#vars#get_syntaxlocal('rxListItem')) + if matches == [] || + \ (matches[1] ==? '' && matches[2] ==? '') || + \ (matches[1] !=? '' && matches[2] !=? '') + let item.type = 0 + return item + endif + + let item.cb = matches[3] + + if matches[1] !=? '' + let item.type = 1 + let item.mrkr = matches[1] + else + let item.type = 2 + let item.mrkr = matches[2] + endif + + return item +endfunction + + +function! s:empty_item() abort + return {'type': 0} +endfunction + + +"Returns: level of the line +"0 is the 'highest' level +function! s:get_level(lnum) abort + if getline(a:lnum) =~# '^\s*$' + return 0 + endif + if !vimwiki#vars#get_syntaxlocal('recurring_bullets') + let level = indent(a:lnum) + else + let level = s:string_length(matchstr(getline(a:lnum), + \ vimwiki#vars#get_syntaxlocal('rx_bullet_chars')))-1 + if level < 0 + let level = (indent(a:lnum) == 0) ? 0 : 9999 + endif + endif + return level +endfunction + + +"Returns: 1, a, i, A, I or '' +"If in doubt if alphanumeric character or romanian +"numeral, peek in the previous line +function! s:guess_kind_of_numbered_item(item) abort + if a:item.type != 2 | return '' | endif + let number_chars = a:item.mrkr[:-2] + let divisor = a:item.mrkr[-1:] + + let number_kinds = vimwiki#vars#get_syntaxlocal('number_kinds') + + if number_chars =~# '\d\+' + return '1' + endif + if number_chars =~# '\l\+' + if number_chars !~# '^[ivxlcdm]\+' || index(number_kinds, 'i') == -1 + return 'a' + else + + let item_above = s:get_prev_list_item(a:item, 0) + if item_above.type != 0 + if index(number_kinds, 'a') == -1 || + \ (item_above.mrkr[-1:] !=# divisor && number_chars =~# 'i\+') || + \ s:increment_i(item_above.mrkr[:-2]) ==# number_chars + return 'i' + else + return 'a' + endif + else + if number_chars =~# 'i\+' || index(number_kinds, 'a') == -1 + return 'i' + else + return 'a' + endif + endif + + endif + endif + if number_chars =~# '\u\+' + if number_chars !~# '^[IVXLCDM]\+' || index(number_kinds, 'I') == -1 + return 'A' + else + + let item_above = s:get_prev_list_item(a:item, 0) + if item_above.type != 0 + if index(number_kinds, 'A') == -1 || + \ (item_above.mrkr[-1:] !=# divisor && number_chars =~# 'I\+') || + \ s:increment_I(item_above.mrkr[:-2]) ==# number_chars + return 'I' + else + return 'A' + endif + else + if number_chars =~# 'I\+' || index(number_kinds, 'A') == -1 + return 'I' + else + return 'A' + endif + endif + + endif + endif +endfunction + + +function! s:regexp_of_marker(item) abort + if a:item.type == 1 + return vimwiki#u#escape(a:item.mrkr) + elseif a:item.type == 2 + let number_divisors = vimwiki#vars#get_syntaxlocal('number_divisors') + for ki in ['d', 'u', 'l'] + let match = matchstr(a:item.mrkr, '\'.ki.'\+['.number_divisors.']') + if match !=? '' + return '\'.ki.'\+'.vimwiki#u#escape(match[-1:]) + endif + endfor + else + return '' + endif +endfunction + + +" Returns: Whether or not the checkbox of a list item is [X] or [-] +function! s:is_closed(item) abort + let state = a:item.cb + return state ==# vimwiki#vars#get_syntaxlocal('listsyms_list')[-1] + \ || state ==# vimwiki#vars#get_global('listsym_rejected') +endfunction + +" --------------------------------------------------------- +" functions for navigating between items +" --------------------------------------------------------- + +"Returns: the list item after a:item or an empty item +"If a:ignore_kind is 1, the markers can differ +function! s:get_next_list_item(item, ignore_kind) abort + let org_lvl = s:get_level(a:item.lnum) + if !a:ignore_kind + let org_regex = s:regexp_of_marker(a:item) + endif + + let cur_ln = s:get_next_line(a:item.lnum) + while cur_ln <= line('$') + let cur_lvl = s:get_level(cur_ln) + if cur_lvl <= org_lvl + if a:ignore_kind + return s:get_any_item_of_level(cur_ln, cur_lvl, org_lvl) + else + return s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex) + endif + endif + let cur_ln = s:get_next_line(cur_ln) + endwhile + return s:empty_item() +endfunction + + +"Returns: the list item before a:item or an empty item +"If a:ignore_kind is 1, the markers can differ +function! s:get_prev_list_item(item, ignore_kind) abort + let org_lvl = s:get_level(a:item.lnum) + if !a:ignore_kind + let org_regex = s:regexp_of_marker(a:item) + endif + + let cur_ln = s:get_prev_line(a:item.lnum) + while cur_ln >= 1 + let cur_lvl = s:get_level(cur_ln) + if cur_lvl <= org_lvl + if a:ignore_kind + return s:get_any_item_of_level(cur_ln, cur_lvl, org_lvl) + else + return s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex) + endif + endif + let cur_ln = s:get_prev_line(cur_ln) + endwhile + return s:empty_item() +endfunction + + +function! s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex) abort + let cur_linecontent = getline(a:cur_ln) + if a:cur_lvl == a:org_lvl + if cur_linecontent =~# '^\s*'.a:org_regex.'\s' + return s:get_item(a:cur_ln) + else + return s:empty_item() + endif + elseif a:cur_lvl < a:org_lvl + return s:empty_item() + endif +endfunction + + +function! s:get_any_item_of_level(cur_ln, cur_lvl, org_lvl) abort + if a:cur_lvl == a:org_lvl + return s:get_item(a:cur_ln) + elseif a:cur_lvl < a:org_lvl + return s:empty_item() + endif +endfunction + + +function! s:get_first_item_in_list(item, ignore_kind) abort + let cur_item = a:item + while 1 + let prev_item = s:get_prev_list_item(cur_item, a:ignore_kind) + if prev_item.type == 0 + break + else + let cur_item = prev_item + endif + endwhile + return cur_item +endfunction + + +function! s:get_last_item_in_list(item, ignore_kind) abort + let cur_item = a:item + while 1 + let next_item = s:get_next_list_item(cur_item, a:ignore_kind) + if next_item.type == 0 + break + else + let cur_item = next_item + endif + endwhile + return cur_item +endfunction + + +"Returns: lnum+1 in most cases, but skips blank lines and preformatted text, +"0 in case of nonvalid line. +"If there is no second argument, 0 is returned at a header, otherwise the +"header is skipped +function! s:get_next_line(lnum, ...) abort + if getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxPreStart') + let cur_ln = a:lnum + 1 + while cur_ln <= line('$') && getline(cur_ln) !~# vimwiki#vars#get_syntaxlocal('rxPreEnd') + let cur_ln += 1 + endwhile + let next_line = cur_ln + 1 + else + let next_line = a:lnum + 1 + endif + + let next_line = nextnonblank(next_line) + + if a:0 > 0 && getline(next_line) =~# vimwiki#vars#get_syntaxlocal('rxHeader') + let next_line = s:get_next_line(next_line, 1) + endif + + if next_line < 0 || next_line > line('$') || + \ (getline(next_line) =~# vimwiki#vars#get_syntaxlocal('rxHeader') && a:0 == 0) + return 0 + endif + + return next_line +endfunction + + +"Returns: lnum-1 in most cases, but skips blank lines and preformatted text +"0 in case of nonvalid line and a header, because a header ends every list +function! s:get_prev_line(lnum) abort + let cur_ln = a:lnum - 1 + + if getline(cur_ln) =~# vimwiki#vars#get_syntaxlocal('rxPreEnd') + while 1 + if cur_ln == 0 || getline(cur_ln) =~# vimwiki#vars#get_syntaxlocal('rxPreStart') + break + endif + let cur_ln -= 1 + endwhile + endif + + let prev_line = prevnonblank(cur_ln) + + if prev_line < 0 || prev_line > line('$') || + \ getline(prev_line) =~# vimwiki#vars#get_syntaxlocal('rxHeader') + return 0 + endif + + return prev_line +endfunction + + +function! s:get_first_child(item) abort + if a:item.lnum >= line('$') + return s:empty_item() + endif + let org_lvl = s:get_level(a:item.lnum) + let cur_item = s:get_item(s:get_next_line(a:item.lnum)) + while 1 + if cur_item.type != 0 && s:get_level(cur_item.lnum) > org_lvl + return cur_item + endif + if cur_item.lnum > line('$') || cur_item.lnum <= 0 || s:get_level(cur_item.lnum) <= org_lvl + return s:empty_item() + endif + let cur_item = s:get_item(s:get_next_line(cur_item.lnum)) + endwhile +endfunction + + +"Returns: the next sibling of a:child, given the parent item +"Used for iterating over children +"Note: child items do not necessarily have the same indent, i.e. level +function! s:get_next_child_item(parent, child) abort + if a:parent.type == 0 | return s:empty_item() | endif + let parent_lvl = s:get_level(a:parent.lnum) + let cur_ln = s:get_last_line_of_item_incl_children(a:child) + while 1 + let next_line = s:get_next_line(cur_ln) + if next_line == 0 || s:get_level(next_line) <= parent_lvl + break + endif + let cur_ln = next_line + let cur_item = s:get_item(cur_ln) + if cur_item.type > 0 + return cur_item + endif + endwhile + return s:empty_item() +endfunction + + +function! s:get_parent(item) abort + let parent_line = 0 + + let cur_ln = prevnonblank(a:item.lnum) + let child_lvl = s:get_level(cur_ln) + if child_lvl == 0 + return s:empty_item() + endif + + while 1 + let cur_ln = s:get_prev_line(cur_ln) + if cur_ln == 0 | break | endif + let cur_lvl = s:get_level(cur_ln) + if cur_lvl < child_lvl + let cur_item = s:get_item(cur_ln) + if cur_item.type == 0 + let child_lvl = cur_lvl + continue + endif + let parent_line = cur_ln + break + endif + endwhile + return s:get_item(parent_line) +endfunction + + +"Returns: the item above or the item below or an empty item +function! s:get_a_neighbor_item(item) abort + let prev_item = s:get_prev_list_item(a:item, 1) + if prev_item.type != 0 + return prev_item + else + let next_item = s:get_next_list_item(a:item, 1) + if next_item.type != 0 + return next_item + endif + endif + return s:empty_item() +endfunction + + +function! s:get_a_neighbor_item_in_column(lnum, column) abort + let cur_ln = s:get_prev_line(a:lnum) + while cur_ln >= 1 + if s:get_level(cur_ln) <= a:column + return s:get_corresponding_item(cur_ln) + endif + let cur_ln = s:get_prev_line(cur_ln) + endwhile + return s:empty_item() +endfunction + + +"Returns: the item if there is one in a:lnum +"else the multiline item a:lnum belongs to +function! s:get_corresponding_item(lnum) abort + let item = s:get_item(a:lnum) + if item.type != 0 + return item + endif + let org_lvl = s:get_level(a:lnum) + let cur_ln = a:lnum + while cur_ln > 0 + let cur_lvl = s:get_level(cur_ln) + let cur_item = s:get_item(cur_ln) + if cur_lvl < org_lvl && cur_item.type != 0 + return cur_item + endif + if cur_lvl < org_lvl + let org_lvl = cur_lvl + endif + let cur_ln = s:get_prev_line(cur_ln) + endwhile + return s:empty_item() +endfunction + + +"Returns: the last line of a (possibly multiline) item, including all children +function! s:get_last_line_of_item_incl_children(item) abort + let cur_ln = a:item.lnum + let org_lvl = s:get_level(a:item.lnum) + while 1 + let next_line = s:get_next_line(cur_ln) + if next_line == 0 || s:get_level(next_line) <= org_lvl + return cur_ln + endif + let cur_ln = next_line + endwhile +endfunction + + +"Returns: the last line of a (possibly multiline) item +"Note: there can be other list items between the first and last line +function! s:get_last_line_of_item(item) abort + if a:item.type == 0 | return 0 | endif + let org_lvl = s:get_level(a:item.lnum) + let last_corresponding_line = a:item.lnum + + let cur_ln = s:get_next_line(a:item.lnum) + while 1 + if cur_ln == 0 || s:get_level(cur_ln) <= org_lvl + break + endif + let cur_item = s:get_item(cur_ln) + if cur_item.type == 0 + let last_corresponding_line = cur_ln + let cur_ln = s:get_next_line(cur_ln) + else + let cur_ln = s:get_next_line(s:get_last_line_of_item_incl_children(cur_item)) + endif + endwhile + + return last_corresponding_line +endfunction + + +" --------------------------------------------------------- +" renumber list items +" --------------------------------------------------------- + +"Renumbers the current list from a:item on downwards +"Returns: the last item that was adjusted +function! s:adjust_numbered_list_below(item, recursive) abort + if !(a:item.type == 2 || (a:item.type == 1 && a:recursive)) + return a:item + endif + + let kind = s:guess_kind_of_numbered_item(a:item) + + let cur_item = a:item + while 1 + if a:recursive + call s:adjust_items_recursively(cur_item) + endif + + let next_item = s:get_next_list_item(cur_item, 0) + if next_item.type == 0 + break + endif + + if cur_item.type == 2 + let new_val = s:increment_{kind}(cur_item.mrkr[:-2]) . cur_item.mrkr[-1:] + call s:substitute_string_in_line(next_item.lnum, next_item.mrkr, new_val) + let next_item.mrkr = new_val + endif + + let cur_item = next_item + endwhile + return cur_item +endfunction + + +function! s:adjust_items_recursively(parent) abort + if a:parent.type == 0 + return s:empty_item() + end + + let child_item = s:get_first_child(a:parent) + if child_item.type == 0 + return child_item + endif + while 1 + let last_item = s:adjust_numbered_list(child_item, 1, 1) + + let child_item = s:get_next_child_item(a:parent, last_item) + if child_item.type == 0 + return last_item + endif + endwhile +endfunction + + +"Renumbers the list a:item is in. +"If a:ignore_kind == 0, only the items which have the same kind of marker as +"a:item are considered, otherwise all items. +"Returns: the last item that was adjusted +function! s:adjust_numbered_list(item, ignore_kind, recursive) abort + if !(a:item.type == 2 || (a:item.type == 1 && (a:ignore_kind || a:recursive))) + return s:empty_item() + end + + let first_item = s:get_first_item_in_list(a:item, a:ignore_kind) + + while 1 + if first_item.type == 2 + let new_mrkr = s:guess_kind_of_numbered_item(first_item) . first_item.mrkr[-1:] + call s:substitute_string_in_line(first_item.lnum, first_item.mrkr, new_mrkr) + let first_item.mrkr = new_mrkr + endif + + let last_item = s:adjust_numbered_list_below(first_item, a:recursive) + + let next_first_item = s:get_next_list_item(last_item, 1) + if a:ignore_kind == 0 || next_first_item.type == 0 + return last_item + endif + let first_item = next_first_item + endwhile +endfunction + + +"Renumbers the list the cursor is in +"also update its parents checkbox state +function! vimwiki#lst#adjust_numbered_list() abort + let cur_item = s:get_corresponding_item(line('.')) + if cur_item.type == 0 | return | endif + call s:adjust_numbered_list(cur_item, 1, 0) + call s:update_state(s:get_parent(cur_item)) +endfunction + + +"Renumbers all lists of the buffer +"of course, this might take some seconds +function! vimwiki#lst#adjust_whole_buffer() abort + let cur_ln = 1 + while 1 + let cur_item = s:get_item(cur_ln) + if cur_item.type != 0 + let cur_item = s:adjust_numbered_list(cur_item, 0, 1) + endif + let cur_ln = s:get_next_line(cur_item.lnum, 1) + if cur_ln <= 0 || cur_ln > line('$') + return + endif + endwhile +endfunction + + +" --------------------------------------------------------- +" checkbox stuff +" --------------------------------------------------------- + +"Returns: the rate of checkboxed list item in percent +function! s:get_rate(item) abort + if a:item.type == 0 || a:item.cb ==? '' + return -1 + endif + let state = a:item.cb + if state == vimwiki#vars#get_global('listsym_rejected') + return -1 + endif + let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) + return index(vimwiki#vars#get_syntaxlocal('listsyms_list'), state) * 100/(n-1) +endfunction + + +"Set state of the list item to [ ] or [o] or whatever +"Returns: 1 if the state changed, 0 otherwise +function! s:set_state(item, new_rate) abort + let new_state = s:rate_to_state(a:new_rate) + let old_state = s:rate_to_state(s:get_rate(a:item)) + if new_state !=# old_state + call s:substitute_rx_in_line(a:item.lnum, '\[.]', '['.new_state.']') + return 1 + else + return 0 + endif +endfunction + + +" Sets the state of the list item to [ ] or [o] or whatever. Updates the states of its child items. +" If the new state should be [X] or [-], the state of the current list item is changed to this +" state, but if a child item already has [X] or [-] it is left alone. +function! s:set_state_plus_children(item, new_rate, ...) abort + let retain_state_if_closed = a:0 > 0 && a:1 > 0 + + if !(retain_state_if_closed && (a:new_rate == 100 || a:new_rate == -1) && s:is_closed(a:item)) + call s:set_state(a:item, a:new_rate) + endif + + let all_children_are_done = 1 + let all_children_are_rejected = 1 + + let child_item = s:get_first_child(a:item) + while 1 + if child_item.type == 0 + break + endif + if child_item.cb != vimwiki#vars#get_global('listsym_rejected') + let all_children_are_rejected = 0 + endif + if child_item.cb != vimwiki#vars#get_syntaxlocal('listsyms_list')[-1] + let all_children_are_done = 0 + endif + if !all_children_are_done && !all_children_are_rejected + break + endif + let child_item = s:get_next_child_item(a:item, child_item) + endwhile + + if (a:new_rate == 100 && all_children_are_done) || + \ (a:new_rate == -1) && all_children_are_rejected + return + endif + + if (a:new_rate == -1 && all_children_are_done) || + \ (a:new_rate == 100 && all_children_are_rejected) + let retain_closed_children = 0 + else + let retain_closed_children = 1 + endif + + let child_item = s:get_first_child(a:item) + while 1 + if child_item.type == 0 + break + endif + if child_item.cb !=? '' + call s:set_state_plus_children(child_item, a:new_rate, retain_closed_children) + endif + let child_item = s:get_next_child_item(a:item, child_item) + endwhile +endfunction + + +"Returns: the appropriate symbol for a given percent rate +function! s:rate_to_state(rate) abort + let listsyms_list = vimwiki#vars#get_syntaxlocal('listsyms_list') + let state = '' + let n = len(listsyms_list) + if a:rate == 100 + let state = listsyms_list[n-1] + elseif a:rate == 0 + let state = listsyms_list[0] + elseif a:rate == -1 + let state = vimwiki#vars#get_global('listsym_rejected') + else + let index = float2nr(ceil(a:rate/100.0*(n-2))) + let state = listsyms_list[index] + endif + return state +endfunction + + +"updates the symbol of a checkboxed item according to the symbols of its +"children +function! s:update_state(item) abort + if a:item.type == 0 || a:item.cb ==? '' + return + endif + + let sum_children_rate = 0 + let count_children_with_cb = 0 + let count_rejected_children = 0 + + let child_item = s:get_first_child(a:item) + + while 1 + if child_item.type == 0 + break + endif + if child_item.cb !=? '' + let rate = s:get_rate(child_item) + if rate == -1 + " for calculating the parent rate, a [-] item counts as much as a [X] item ... + let rate = 100 + " ... with the exception that a parent with *only* [-] items will be [-] too + let count_rejected_children += 1 + endif + let count_children_with_cb += 1 + let sum_children_rate += rate + endif + let child_item = s:get_next_child_item(a:item, child_item) + endwhile + + if count_children_with_cb > 0 + if count_rejected_children == count_children_with_cb + let new_rate = -1 + else + let new_rate = sum_children_rate / count_children_with_cb + endif + call s:set_state_recursively(a:item, new_rate) + else + let rate = s:get_rate(a:item) + if rate > 0 && rate < 100 + call s:set_state_recursively(a:item, 0) + endif + endif +endfunction + + +function! s:set_state_recursively(item, new_rate) abort + let state_changed = s:set_state(a:item, a:new_rate) + if state_changed + call s:update_state(s:get_parent(a:item)) + endif +endfunction + + +"Creates checkbox in a list item. +"Returns: 1 if successful +function! s:create_cb(item, start_rate) abort + if a:item.type == 0 || a:item.cb !=? '' + return 0 + endif + + let new_item = a:item + let new_item.cb = s:rate_to_state(a:start_rate) + call s:substitute_rx_in_line(new_item.lnum, + \ vimwiki#u#escape(new_item.mrkr) . '\zs\ze', ' [' . new_item.cb . ']') + + call s:update_state(new_item) + return 1 +endfunction + + +function! s:remove_cb(item) abort + let item = a:item + if item.type != 0 && item.cb !=? '' + let item.cb = '' + call s:substitute_rx_in_line(item.lnum, '\s\+\[.\]', '') + endif + return item +endfunction + + +" Change state of the checkboxes in the lines of the given range +function! s:change_cb(from_line, to_line, new_rate) abort + let from_item = s:get_corresponding_item(a:from_line) + if from_item.type == 0 + return + endif + + let parent_items_of_lines = [] + + for cur_ln in range(from_item.lnum, a:to_line) + let cur_item = s:get_item(cur_ln) + if cur_item.type != 0 && cur_item.cb !=? '' + call s:set_state_plus_children(cur_item, a:new_rate) + let cur_parent_item = s:get_parent(cur_item) + if index(parent_items_of_lines, cur_parent_item) == -1 + call insert(parent_items_of_lines, cur_parent_item) + endif + endif + endfor + + for parent_item in parent_items_of_lines + call s:update_state(parent_item) + endfor + +endfunction + + +" Toggles checkbox between two states in the lines of the given range, creates checkboxes (with +" a:start_rate as state) if there aren't any. +function! s:toggle_create_cb(from_line, to_line, state1, state2, start_rate) abort + let from_item = s:get_corresponding_item(a:from_line) + if from_item.type == 0 + return + endif + + if from_item.cb ==? '' + + "if from_line has no CB, make a CB in every selected line + let parent_items_of_lines = [] + for cur_ln in range(from_item.lnum, a:to_line) + let cur_item = s:get_item(cur_ln) + let success = s:create_cb(cur_item, a:start_rate) + + if success + let cur_parent_item = s:get_parent(cur_item) + if index(parent_items_of_lines, cur_parent_item) == -1 + call insert(parent_items_of_lines, cur_parent_item) + endif + endif + endfor + + for parent_item in parent_items_of_lines + call s:update_state(parent_item) + endfor + + else + + "if from_line has CB, toggle it and set all siblings to the same new state + let rate_first_line = s:get_rate(from_item) + let new_rate = rate_first_line == a:state1 ? a:state2 : a:state1 + + call s:change_cb(a:from_line, a:to_line, new_rate) + + endif + +endfunction + + +"Decrement checkbox between [ ] and [X] +"in the lines of the given range +function! vimwiki#lst#decrement_cb(from_line, to_line) abort + let from_item = s:get_corresponding_item(a:from_line) + if from_item.type == 0 + return + endif + + "if from_line has CB, decrement it and set all siblings to the same new state + let rate_first_line = s:get_rate(from_item) + let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) + let new_rate = max([rate_first_line - 100/(n-1)-1, 0]) + + call s:change_cb(a:from_line, a:to_line, new_rate) + +endfunction + + +"Increment checkbox between [ ] and [X] +"in the lines of the given range +function! vimwiki#lst#increment_cb(from_line, to_line) abort + let from_item = s:get_corresponding_item(a:from_line) + if from_item.type == 0 + return + endif + + "if from_line has CB, increment it and set all siblings to the same new state + let rate_first_line = s:get_rate(from_item) + let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) + let new_rate = min([rate_first_line + 100/(n-1)+1, 100]) + + call s:change_cb(a:from_line, a:to_line, new_rate) + +endfunction + + +"Toggles checkbox between [ ] and [X] or creates one +"in the lines of the given range +function! vimwiki#lst#toggle_cb(from_line, to_line) abort + return s:toggle_create_cb(a:from_line, a:to_line, 100, 0, 0) +endfunction + + +"Toggles checkbox between [ ] and [-] or creates one +"in the lines of the given range +function! vimwiki#lst#toggle_rejected_cb(from_line, to_line) abort + return s:toggle_create_cb(a:from_line, a:to_line, -1, 0, -1) +endfunction + + +function! vimwiki#lst#remove_cb(first_line, last_line) abort + let first_item = s:get_corresponding_item(a:first_line) + let last_item = s:get_corresponding_item(a:last_line) + + if first_item.type == 0 || last_item.type == 0 + return + endif + + let parent_items_of_lines = [] + let cur_ln = first_item.lnum + while 1 + if cur_ln <= 0 || cur_ln > last_item.lnum | break | endif + let cur_item = s:get_item(cur_ln) + if cur_item.type != 0 + let cur_item = s:remove_cb(cur_item) + let cur_parent_item = s:get_parent(cur_item) + if index(parent_items_of_lines, cur_parent_item) == -1 + call insert(parent_items_of_lines, cur_parent_item) + endif + endif + let cur_ln = s:get_next_line(cur_ln) + endwhile + for parent_item in parent_items_of_lines + call s:update_state(parent_item) + endfor +endfunction + + +function! vimwiki#lst#remove_cb_in_list() abort + let first_item = s:get_first_item_in_list(s:get_corresponding_item(line('.')), 0) + + let cur_item = first_item + while 1 + let next_item = s:get_next_list_item(cur_item, 0) + let cur_item = s:remove_cb(cur_item) + if next_item.type == 0 + break + else + let cur_item = next_item + endif + endwhile + + call s:update_state(s:get_parent(first_item)) +endfunction + + + +" --------------------------------------------------------- +" change the level of list items +" --------------------------------------------------------- + +function! s:set_indent(lnum, new_indent) abort + if &expandtab + let indentstring = repeat(' ', a:new_indent) + else + let indentstring = repeat('\t', a:new_indent / &tabstop) . repeat(' ', a:new_indent % &tabstop) + endif + call s:substitute_rx_in_line(a:lnum, '^\s*', indentstring) +endfunction + + +function! s:decrease_level(item) abort + let removed_indent = 0 + if vimwiki#vars#get_syntaxlocal('recurring_bullets') && a:item.type == 1 && + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), + \ s:first_char(a:item.mrkr)) > -1 + if s:string_length(a:item.mrkr) >= 2 + call s:substitute_string_in_line(a:item.lnum, s:first_char(a:item.mrkr), '') + let removed_indent = -1 + endif + else + let old_indent = indent(a:item.lnum) + if &shiftround + let new_indent = (old_indent - 1) / vimwiki#u#sw() * vimwiki#u#sw() + else + let new_indent = old_indent - vimwiki#u#sw() + endif + call s:set_indent(a:item.lnum, new_indent) + let removed_indent = new_indent - old_indent + endif + return removed_indent +endfunction + + +function! s:increase_level(item) abort + let additional_indent = 0 + if vimwiki#vars#get_syntaxlocal('recurring_bullets') && a:item.type == 1 && + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), + \ s:first_char(a:item.mrkr)) > -1 + call s:substitute_string_in_line(a:item.lnum, a:item.mrkr, a:item.mrkr . + \ s:first_char(a:item.mrkr)) + let additional_indent = 1 + else + let old_indent = indent(a:item.lnum) + if &shiftround + let new_indent = (old_indent / vimwiki#u#sw() + 1) * vimwiki#u#sw() + else + let new_indent = old_indent + vimwiki#u#sw() + endif + call s:set_indent(a:item.lnum, new_indent) + let additional_indent = new_indent - old_indent + endif + return additional_indent +endfunction + + +"adds a:indent_by to the current indent +"a:indent_by can be negative +function! s:indent_line_by(lnum, indent_by) abort + let item = s:get_item(a:lnum) + if vimwiki#vars#get_syntaxlocal('recurring_bullets') && item.type == 1 && + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), + \ s:first_char(item.mrkr)) > -1 + if a:indent_by > 0 + call s:substitute_string_in_line(a:lnum, item.mrkr, item.mrkr . s:first_char(item.mrkr)) + elseif a:indent_by < 0 + call s:substitute_string_in_line(a:lnum, s:first_char(item.mrkr), '') + endif + else + call s:set_indent(a:lnum, indent(a:lnum) + a:indent_by) + endif +endfunction + + +"changes lvl of lines in selection +function! s:change_level(from_line, to_line, direction, plus_children) abort + let from_item = s:get_corresponding_item(a:from_line) + if from_item.type == 0 + if a:direction ==# 'increase' && a:from_line == a:to_line && empty(getline(a:from_line)) + "that's because :> doesn't work on an empty line + exe 'normal!' "gi\" + else + execute a:from_line.','.a:to_line.(a:direction ==# 'increase' ? '>' : '<') + endif + return + endif + + if a:direction ==# 'decrease' && s:get_level(from_item.lnum) == 0 + return + endif + + if a:from_line == a:to_line + if a:plus_children + let to_line = s:get_last_line_of_item_incl_children(from_item) + else + let to_line = s:get_last_line_of_item(from_item) + endif + else + let to_item = s:get_corresponding_item(a:to_line) + if to_item.type == 0 + let to_line = a:to_line + else + if a:plus_children + let to_line = s:get_last_line_of_item_incl_children(to_item) + else + let to_line = s:get_last_line_of_item(to_item) + endif + endif + endif + + if to_line == 0 + return + endif + + let to_be_adjusted = s:get_a_neighbor_item(from_item) + let old_parent = s:get_parent(from_item) + let first_line_level = s:get_level(from_item.lnum) + let more_than_one_level_concerned = 0 + + let first_line_indented_by = (a:direction ==# 'increase') ? + \ s:increase_level(from_item) : s:decrease_level(from_item) + + let cur_ln = s:get_next_line(from_item.lnum) + while cur_ln > 0 && cur_ln <= to_line + if !more_than_one_level_concerned && + \ s:get_level(cur_ln) != first_line_level && + \ s:get_item(cur_ln).type != 0 + let more_than_one_level_concerned = 1 + endif + call s:indent_line_by(cur_ln, first_line_indented_by) + let cur_ln = s:get_next_line(cur_ln, 1) + endwhile + + if a:from_line == a:to_line + call s:adjust_mrkr(from_item) + endif + call s:update_state(old_parent) + let from_item = s:get_item(from_item.lnum) + if from_item.cb !=? '' + call s:update_state(from_item) + call s:update_state(s:get_parent(from_item)) + endif + + if more_than_one_level_concerned + call vimwiki#lst#adjust_whole_buffer() + else + call s:adjust_numbered_list(from_item, 0, 0) + call s:adjust_numbered_list(to_be_adjusted, 0, 0) + endif +endfunction + + +function! vimwiki#lst#change_level(from_line, to_line, direction, plus_children) abort + let cur_col = col('$') - col('.') + call s:change_level(a:from_line, a:to_line, a:direction, a:plus_children) + call cursor('.', col('$') - cur_col) +endfunction + + +"indent line a:lnum to be the continuation of a:prev_item +function! s:indent_multiline(prev_item, lnum) abort + if a:prev_item.type != 0 + call s:set_indent(a:lnum, s:text_begin(a:prev_item.lnum)) + endif +endfunction + + +" --------------------------------------------------------- +" change markers of list items +" --------------------------------------------------------- + +"Returns: the position of a marker in g:vimwiki_list_markers +function! s:get_idx_list_markers(item) abort + if a:item.type == 1 + let m = s:first_char(a:item.mrkr) + else + let m = s:guess_kind_of_numbered_item(a:item) . a:item.mrkr[-1:] + endif + return index(vimwiki#vars#get_syntaxlocal('list_markers'), m) +endfunction + + +"changes the marker of the given item to the next in g:vimwiki_list_markers +function! s:get_next_mrkr(item) abort + let markers = vimwiki#vars#get_syntaxlocal('list_markers') + if a:item.type == 0 + let new_mrkr = markers[0] + else + let idx = s:get_idx_list_markers(a:item) + let new_mrkr = markers[(idx+1) % len(markers)] + endif + return new_mrkr +endfunction + + +"changes the marker of the given item to the previous in g:vimwiki_list_markers +function! s:get_prev_mrkr(item) abort + let markers = vimwiki#vars#get_syntaxlocal('list_markers') + if a:item.type == 0 + return markers[-1] + endif + let idx = s:get_idx_list_markers(a:item) + if idx == -1 + return markers[-1] + else + return markers[(idx - 1 + len(markers)) % len(markers)] + endif +endfunction + + +function! s:set_new_mrkr(item, new_mrkr) abort + if a:item.type == 0 + call s:substitute_rx_in_line(a:item.lnum, '^\s*\zs\ze', a:new_mrkr.' ') + if indent(a:item.lnum) == 0 && !vimwiki#vars#get_syntaxlocal('recurring_bullets') + call s:set_indent(a:item.lnum, vimwiki#lst#get_list_margin()) + endif + else + call s:substitute_string_in_line(a:item.lnum, a:item.mrkr, a:new_mrkr) + endif +endfunction + + +function! vimwiki#lst#change_marker(from_line, to_line, new_mrkr, mode) abort + let cur_col_from_eol = col('$') - (a:mode ==# 'i' ? col("'^") : col('.')) + let new_mrkr = a:new_mrkr + let cur_ln = a:from_line + while 1 + let cur_item = s:get_item(cur_ln) + + if new_mrkr ==# 'next' + let new_mrkr = s:get_next_mrkr(cur_item) + elseif new_mrkr ==# 'prev' + let new_mrkr = s:get_prev_mrkr(cur_item) + endif + + "handle markers like *** + if index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), s:first_char(new_mrkr)) > -1 + "use *** if the item above has *** too + let item_above = s:get_prev_list_item(cur_item, 1) + if item_above.type == 1 && s:first_char(item_above.mrkr) ==# s:first_char(new_mrkr) + let new_mrkr = item_above.mrkr + else + "use *** if the item below has *** too + let item_below = s:get_next_list_item(cur_item, 1) + if item_below.type == 1 && s:first_char(item_below.mrkr) ==# s:first_char(new_mrkr) + let new_mrkr = item_below.mrkr + else + "if the old is ### and the new is * use *** + if cur_item.type == 1 && + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), + \ s:first_char(cur_item.mrkr))>-1 + let new_mrkr = repeat(new_mrkr, s:string_length(cur_item.mrkr)) + else + "use *** if the parent item has ** + let parent_item = s:get_parent(cur_item) + if parent_item.type == 1 && s:first_char(parent_item.mrkr) ==# s:first_char(new_mrkr) + let new_mrkr = repeat(s:first_char(parent_item.mrkr), + \ s:string_length(parent_item.mrkr)+1) + endif + endif + endif + endif + + endif + + call s:set_new_mrkr(cur_item, new_mrkr) + call s:adjust_numbered_list(s:get_item(cur_ln), 1, 0) + + if cur_ln >= a:to_line | break | endif + let cur_ln = s:get_next_line(cur_ln, 1) + endwhile + + call cursor('.', col('$') - cur_col_from_eol) +endfunction + + +function! vimwiki#lst#change_marker_in_list(new_mrkr) abort + let cur_item = s:get_corresponding_item(line('.')) + let first_item = s:get_first_item_in_list(cur_item, 0) + let last_item = s:get_last_item_in_list(cur_item, 0) + if first_item.type == 0 || last_item.type == 0 | return | endif + let first_item_line = first_item.lnum + + let cur_item = first_item + while cur_item.type != 0 && cur_item.lnum <= last_item.lnum + call s:set_new_mrkr(cur_item, a:new_mrkr) + let cur_item = s:get_next_list_item(cur_item, 1) + endwhile + + call s:adjust_numbered_list(s:get_item(first_item_line), 0, 0) +endfunction + + +"sets kind of the item depending on neighbor items and the parent item +function! s:adjust_mrkr(item) abort + if a:item.type == 0 || vimwiki#vars#get_syntaxlocal('recurring_bullets') + return + endif + + let new_mrkr = a:item.mrkr + let neighbor_item = s:get_a_neighbor_item(a:item) + if neighbor_item.type != 0 + let new_mrkr = neighbor_item.mrkr + endif + + "if possible, set e.g. *** if parent has ** as marker + if neighbor_item.type == 0 && a:item.type == 1 && + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), + \ s:first_char(a:item.mrkr)) > -1 + let parent_item = s:get_parent(a:item) + if parent_item.type == 1 && s:first_char(parent_item.mrkr) ==# s:first_char(a:item.mrkr) + let new_mrkr = repeat(s:first_char(parent_item.mrkr), s:string_length(parent_item.mrkr)+1) + endif + endif + + call s:substitute_string_in_line(a:item.lnum, a:item.mrkr, new_mrkr) + call s:adjust_numbered_list(a:item, 0, 1) +endfunction + + +function! s:clone_marker_from_to(from, to) abort + let item_from = s:get_item(a:from) + if item_from.type == 0 | return | endif + let new_mrkr = item_from.mrkr . ' ' + call s:substitute_rx_in_line(a:to, '^\s*', new_mrkr) + let new_indent = ( vimwiki#vars#get_syntaxlocal('recurring_bullets') ? 0 : indent(a:from) ) + call s:set_indent(a:to, new_indent) + if item_from.cb !=? '' + call s:create_cb(s:get_item(a:to), 0) + call s:update_state(s:get_parent(s:get_item(a:to))) + endif + if item_from.type == 2 + let adjust_from = ( a:from < a:to ? a:from : a:to ) + call s:adjust_numbered_list_below(s:get_item(adjust_from), 0) + endif +endfunction + + +function! s:remove_mrkr(item) abort + let item = a:item + if item.cb !=? '' + let item = s:remove_cb(item) + let parent_item = s:get_parent(item) + else + let parent_item = s:empty_item() + endif + call s:substitute_rx_in_line(item.lnum, vimwiki#u#escape(item.mrkr).'\s*', '') + call remove(item, 'mrkr') + call remove(item, 'cb') + let item.type = 0 + call s:update_state(parent_item) + return item +endfunction + + +function! s:create_marker(lnum) abort + let new_sibling = s:get_corresponding_item(a:lnum) + if new_sibling.type == 0 + let new_sibling = s:get_a_neighbor_item_in_column(a:lnum, virtcol('.')) + endif + if new_sibling.type != 0 + call s:clone_marker_from_to(new_sibling.lnum, a:lnum) + else + let cur_item = s:get_item(a:lnum) + call s:set_new_mrkr(cur_item, vimwiki#vars#get_syntaxlocal('list_markers')[0]) + call s:adjust_numbered_list(cur_item, 0, 0) + endif +endfunction + + +" --------------------------------------------------------- +" handle keys +" --------------------------------------------------------- + +function! vimwiki#lst#kbd_o() abort + let fold_end = foldclosedend('.') + let lnum = (fold_end == -1) ? line('.') : fold_end + let cur_item = s:get_item(lnum) + let parent = s:get_corresponding_item(lnum) + "inserting and deleting the x is necessary + "because otherwise the indent is lost + exe 'normal!' "ox\" + if !vimwiki#u#is_codeblock(lnum) + if parent.type != 0 + call s:clone_marker_from_to(parent.lnum, cur_item.lnum+1) + else + call s:indent_multiline(cur_item, cur_item.lnum+1) + endif + endif + startinsert! +endfunction + + +function! vimwiki#lst#kbd_O() abort + exe 'normal!' "Ox\" + let cur_ln = line('.') + if !vimwiki#u#is_codeblock(cur_ln) + if getline(cur_ln+1) !~# '^\s*$' + call s:clone_marker_from_to(cur_ln+1, cur_ln) + else + call s:clone_marker_from_to(cur_ln-1, cur_ln) + endif + endif + startinsert! +endfunction + + +function! s:cr_on_empty_list_item(lnum, behavior) abort + if a:behavior == 1 + "just make a new list item + exe 'normal!' "gi\\" + call s:clone_marker_from_to(a:lnum, a:lnum+1) + startinsert! + return + elseif a:behavior == 2 + "insert new marker but remove marker in old line + call append(a:lnum-1, '') + startinsert! + return + elseif a:behavior == 3 + "list is finished, but cursor stays in current line + let item = s:get_item(a:lnum) + let neighbor_item = s:get_a_neighbor_item(item) + let child_item = s:get_first_child(item) + let parent_item = (item.cb !=? '') ? s:get_parent(item) : s:empty_item() + normal! "_cc + call s:adjust_numbered_list(neighbor_item, 0, 0) + call s:adjust_numbered_list(child_item, 0, 0) + call s:update_state(parent_item) + startinsert + return + elseif a:behavior == 4 + "list is finished, but cursor goes to next line + let item = s:get_item(a:lnum) + let neighbor_item = s:get_a_neighbor_item(item) + let child_item = s:get_first_child(item) + let parent_item = (item.cb !=? '') ? s:get_parent(item) : s:empty_item() + exe 'normal!' "_cc\" + call s:adjust_numbered_list(neighbor_item, 0, 0) + call s:adjust_numbered_list(child_item, 0, 0) + call s:update_state(parent_item) + startinsert + return + elseif a:behavior == 5 + "successively decrease level + if s:get_level(a:lnum) > 0 + call s:change_level(a:lnum, a:lnum, 'decrease', 0) + startinsert! + else + let item = s:get_item(a:lnum) + let neighbor_item = s:get_a_neighbor_item(item) + let child_item = s:get_first_child(item) + let parent_item = (item.cb !=? '') ? s:get_parent(item) : s:empty_item() + normal! "_cc + call s:adjust_numbered_list(neighbor_item, 0, 0) + call s:adjust_numbered_list(child_item, 0, 0) + call s:update_state(parent_item) + startinsert + endif + return + endif +endfunction + +function! s:cr_on_empty_line(lnum, behavior) abort + let lst = s:get_corresponding_item(a:lnum) + + "inserting and deleting the x is necessary + "because otherwise the indent is lost + exe 'normal!' "gi\x\\" + + if a:behavior == 2 || a:behavior == 3 + if lst.type == 0 || vimwiki#u#is_codeblock(a:lnum) + " don't insert new bullet if not part of a list + return + else + call s:create_marker(a:lnum+1) + endif + endif +endfunction + + +function! s:cr_on_list_item(lnum, insert_new_marker, not_at_eol) abort + if a:insert_new_marker + "the ultimate feature of this script: make new marker on + exe 'normal!' "gi\\" + call s:clone_marker_from_to(a:lnum, a:lnum+1) + "tiny sweet extra feature: indent next line if current line ends with : + if !a:not_at_eol && getline(a:lnum) =~# ':$' + call s:change_level(a:lnum+1, a:lnum+1, 'increase', 0) + endif + else + " || (cur_item.lnum < s:get_last_line_of_item(cur_item)) + "indent this line so that it becomes the continuation of the line above + exe 'normal!' "gi\\" + let prev_line = s:get_corresponding_item(s:get_prev_line(a:lnum+1)) + call s:indent_multiline(prev_line, a:lnum+1) + endif +endfunction + + +function! vimwiki#lst#kbd_cr(normal, just_mrkr) abort + let lnum = line('.') + let has_bp = s:line_has_marker(lnum) + + if has_bp != 0 && virtcol('.') < s:text_begin(lnum) + call append(lnum-1, '') + startinsert! + return + endif + + if has_bp == 1 + call s:cr_on_empty_list_item(lnum, a:just_mrkr) + return + endif + + let insert_new_marker = (a:normal == 1 || a:normal == 3) + if getline('.')[col("'^")-1:] =~# '^\s\+$' + let cur_col = 0 + else + let cur_col = col('$') - col("'^") + if getline('.')[col("'^")-1] =~# '\s' && exists('*strdisplaywidth') + let ws_behind_cursor = + \ strdisplaywidth(matchstr(getline('.')[col("'^")-1:], '\s\+'), + \ virtcol("'^")-1) + let cur_col -= ws_behind_cursor + endif + if insert_new_marker && cur_col == 0 && getline(lnum) =~# '\s$' + let insert_new_marker = 0 + endif + endif + + if has_bp == 0 + call s:cr_on_empty_line(lnum, a:normal) + endif + + if has_bp == 2 + call s:cr_on_list_item(lnum, insert_new_marker, cur_col) + endif + + call cursor(lnum+1, col('$') - cur_col) + if cur_col == 0 + startinsert! + else + startinsert + endif + +endfunction + + +"creates a list item in the current line or removes it +function! vimwiki#lst#toggle_list_item() abort + let cur_col_from_eol = col('$') - col("'^") + let cur_item = s:get_item(line('.')) + + if cur_item.type == 0 + call s:create_marker(cur_item.lnum) + else + let prev_item = s:get_prev_list_item(cur_item, 1) + if prev_item.type == 0 + let prev_item = s:get_corresponding_item(s:get_prev_line(cur_item.lnum)) + endif + let cur_item = s:remove_mrkr(cur_item) + let adjust_prev_item = (prev_item.type == 2 && + \ s:get_level(cur_item.lnum) <= s:get_level(prev_item.lnum)) ? 1 : 0 + call s:indent_multiline(prev_item, cur_item.lnum) + if adjust_prev_item + call s:adjust_numbered_list_below(prev_item, 0) + endif + endif + + "set cursor position s.t. it's on the same char as before + let new_cur_col = col('$') - cur_col_from_eol + call cursor(cur_item.lnum, new_cur_col >= 1 ? new_cur_col : 1) + + if cur_col_from_eol == 0 || getline(cur_item.lnum) =~# '^\s*$' + startinsert! + else + startinsert + endif +endfunction + + +" --------------------------------------------------------- +" misc stuff +" --------------------------------------------------------- + +function! vimwiki#lst#TO_list_item(inner, visual) abort + let lnum = prevnonblank('.') + let item = s:get_corresponding_item(lnum) + if item.type == 0 + return + endif + let from_line = item.lnum + if a:inner + let to_line = s:get_last_line_of_item(item) + else + let to_line = s:get_last_line_of_item_incl_children(item) + endif + normal! V + call cursor(to_line, 0) + normal! o + call cursor(from_line, 0) +endfunction + + +function! vimwiki#lst#fold_level(lnum) abort + let cur_item = s:get_item(a:lnum) + if cur_item.type != 0 + let parent_item = s:get_parent(cur_item) + let child_item = s:get_first_child(cur_item) + let next_item = s:get_next_child_item(parent_item, cur_item) + if child_item.type != 0 + return 'a1' + elseif next_item.type == 0 + let c_indent = indent(a:lnum) / &shiftwidth + let n_indent = indent(a:lnum+1) / &shiftwidth + return 's' . (c_indent - n_indent) + endif + endif + return '=' +endfunction + diff --git a/.config/vim/bundle/vimwiki/autoload/vimwiki/markdown_base.vim b/.config/vim/bundle/vimwiki/autoload/vimwiki/markdown_base.vim new file mode 100644 index 0000000..bfbd140 --- /dev/null +++ b/.config/vim/bundle/vimwiki/autoload/vimwiki/markdown_base.vim @@ -0,0 +1,162 @@ +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 +" Vimwiki autoload plugin file +" Description: Link functions for markdown syntax +" Home: https://github.com/vimwiki/vimwiki/ + + +function! s:safesubstitute(text, search, replace, mode) abort + " Substitute regexp but do not interpret replace + let escaped = escape(a:replace, '\&') + return substitute(a:text, a:search, escaped, a:mode) +endfunction + + +function! vimwiki#markdown_base#scan_reflinks() abort + let mkd_refs = {} + " construct list of references using vimgrep + try + " Why noautocmd? Because https://github.com/vimwiki/vimwiki/issues/121 + noautocmd execute 'vimgrep #'.vimwiki#vars#get_syntaxlocal('rxMkdRef').'#j %' + catch /^Vim\%((\a\+)\)\=:E480/ " No Match + "Ignore it, and move on to the next file + endtry + + for d in getqflist() + let matchline = join(getline(d.lnum, min([d.lnum+1, line('$')])), ' ') + let descr = matchstr(matchline, vimwiki#vars#get_syntaxlocal('rxMkdRefMatchDescr')) + let url = matchstr(matchline, vimwiki#vars#get_syntaxlocal('rxMkdRefMatchUrl')) + if descr !=? '' && url !=? '' + let mkd_refs[descr] = url + endif + endfor + call vimwiki#vars#set_bufferlocal('markdown_refs', mkd_refs) + return mkd_refs +endfunction + + +" try markdown reference links +function! vimwiki#markdown_base#open_reflink(link) abort + " echom "vimwiki#markdown_base#open_reflink" + let link = a:link + let mkd_refs = vimwiki#vars#get_bufferlocal('markdown_refs') + if has_key(mkd_refs, link) + let url = mkd_refs[link] + call vimwiki#base#system_open_link(url) + return 1 + else + return 0 + endif +endfunction + + +function! s:normalize_link_syntax_n() abort + let lnum = line('.') + + " try WikiIncl + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiIncl')) + if !empty(lnk) + " NO-OP !! + return + endif + + " try WikiLink0: replace with WikiLink1 + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0')) + if !empty(lnk) + let sub = vimwiki#base#normalize_link_helper(lnk, + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), + \ vimwiki#vars#get_syntaxlocal('WikiLink1Template2')) + call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0'), sub) + return + endif + + " try WikiLink1: replace with WikiLink0 + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1')) + if !empty(lnk) + let sub = vimwiki#base#normalize_link_helper(lnk, + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), + \ vimwiki#vars#get_global('WikiLinkTemplate2')) + call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), sub) + return + endif + + " try Weblink + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink')) + if !empty(lnk) + let sub = vimwiki#base#normalize_link_helper(lnk, + \ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl'), + \ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchDescr'), + \ vimwiki#vars#get_syntaxlocal('Weblink1Template')) + call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink'), sub) + return + endif + + " try Word (any characters except separators) + " rxWord is less permissive than rxWikiLinkUrl which is used in + " normalize_link_syntax_v + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWord')) + if !empty(lnk) + if vimwiki#base#is_diary_file(expand('%:p')) + let sub = vimwiki#base#normalize_link_in_diary(lnk) + else + let sub = vimwiki#base#normalize_link_helper(lnk, + \ vimwiki#vars#get_global('rxWord'), '', + \ vimwiki#vars#get_syntaxlocal('Weblink1Template')) + endif + call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub) + return + endif + +endfunction + + +function! s:normalize_link_syntax_v() abort + let lnum = line('.') + let sel_save = &selection + let &selection = 'old' + let rv = @" + let rt = getregtype('"') + let done = 0 + + try + norm! gvy + let visual_selection = @" + + if vimwiki#base#is_diary_file(expand('%:p')) + let link = vimwiki#base#normalize_link_in_diary(visual_selection) + else + let link = s:safesubstitute(vimwiki#vars#get_syntaxlocal('Weblink1Template'), + \ '__LinkUrl__', visual_selection, '') + endif + + " replace spaces with new character if option is set + let link = substitute(link, '\s', vimwiki#vars#get_wikilocal('links_space_char'), 'g') + + let link = s:safesubstitute(link, '__LinkDescription__', visual_selection, '') + call setreg('"', substitute(link, '\n', '', ''), visualmode()) + + " paste result + norm! `>""pgvd + + finally + call setreg('"', rv, rt) + let &selection = sel_save + endtry + +endfunction + + +function! vimwiki#markdown_base#normalize_link(is_visual_mode) abort + if 0 + " Syntax-specific links + else + if !a:is_visual_mode + call s:normalize_link_syntax_n() + elseif line("'<") == line("'>") + " action undefined for multi-line visual mode selections + call s:normalize_link_syntax_v() + endif + endif +endfunction + diff --git a/.config/vim/bundle/vimwiki/autoload/vimwiki/path.vim b/.config/vim/bundle/vimwiki/autoload/vimwiki/path.vim new file mode 100644 index 0000000..c0ce8eb --- /dev/null +++ b/.config/vim/bundle/vimwiki/autoload/vimwiki/path.vim @@ -0,0 +1,210 @@ +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 +" Vimwiki autoload plugin file +" Description: Path manipulation functions +" Home: https://github.com/vimwiki/vimwiki/ + + +function! vimwiki#path#chomp_slash(str) abort + return substitute(a:str, '[/\\]\+$', '', '') +endfunction + + +" Define path-compare function, either case-sensitive or not, depending on OS. +if vimwiki#u#is_windows() + function! vimwiki#path#is_equal(p1, p2) abort + return a:p1 ==? a:p2 + endfunction +else + function! vimwiki#path#is_equal(p1, p2) abort + return a:p1 ==# a:p2 + endfunction +endif + +" collapse sections like /a/b/../c to /a/c and /a/b/./c to /a/b/c +function! vimwiki#path#normalize(path) abort + let path = a:path + while 1 + let intermediateResult = substitute(path, '/[^/]\+/\.\.', '', '') + let result = substitute(intermediateResult, '/\./', '/', '') + if result ==# path + break + endif + let path = result + endwhile + return result +endfunction + + +function! vimwiki#path#path_norm(path) abort + " /-slashes + if a:path !~# '^scp:' + let path = substitute(a:path, '\', '/', 'g') + " treat multiple consecutive slashes as one path separator + let path = substitute(path, '/\+', '/', 'g') + " ensure that we are not fooled by a symbolic link + return resolve(path) + else + return a:path + endif +endfunction + + +function! vimwiki#path#is_link_to_dir(link) abort + " Check if link is to a directory. + " It should be ended with \ or /. + return a:link =~# '\m[/\\]$' +endfunction + + +function! vimwiki#path#abs_path_of_link(link) abort + return vimwiki#path#normalize(expand('%:p:h').'/'.a:link) +endfunction + + +" return longest common path prefix of 2 given paths. +" '~/home/usrname/wiki', '~/home/usrname/wiki/shmiki' => '~/home/usrname/wiki' +function! vimwiki#path#path_common_pfx(path1, path2) abort + let p1 = split(a:path1, '[/\\]', 1) + let p2 = split(a:path2, '[/\\]', 1) + + let idx = 0 + let minlen = min([len(p1), len(p2)]) + while (idx < minlen) && vimwiki#path#is_equal(p1[idx], p2[idx]) + let idx = idx + 1 + endwhile + if idx == 0 + return '' + else + return join(p1[: idx-1], '/') + endif +endfunction + + +function! vimwiki#path#wikify_path(path) abort + let result = resolve(fnamemodify(a:path, ':p')) + if vimwiki#u#is_windows() + let result = substitute(result, '\\', '/', 'g') + endif + let result = vimwiki#path#chomp_slash(result) + return result +endfunction + + +function! vimwiki#path#current_wiki_file() abort + return vimwiki#path#wikify_path(expand('%:p')) +endfunction + + +" Returns: the relative path from a:dir to a:file +function! vimwiki#path#relpath(dir, file) abort + " Check if dir here ('.') -> return file + if empty(a:dir) || a:dir =~# '^\.[/\\]\?$' + return a:file + endif + let result = [] + if vimwiki#u#is_windows() + " TODO temporary fix see #478 + " not sure why paths get converted back to using forward slash + " when passed to the function in the form C:\path\to\file + let dir = substitute(a:dir, '/', '\', 'g') + let file = substitute(a:file, '/', '\', 'g') + let dir = split(dir, '\') + let file = split(file, '\') + else + let dir = split(a:dir, '/') + let file = split(a:file, '/') + endif + while (len(dir) > 0 && len(file) > 0) && vimwiki#path#is_equal(dir[0], file[0]) + call remove(dir, 0) + call remove(file, 0) + endwhile + if empty(dir) && empty(file) + if vimwiki#u#is_windows() + " TODO temporary fix see #478 + return '.\' + else + return './' + endif + endif + for segment in dir + let result += ['..'] + endfor + for segment in file + let result += [segment] + endfor + if vimwiki#u#is_windows() + " TODO temporary fix see #478 + let result_path = join(result, '\') + if a:file =~? '\m\\$' + let result_path .= '\' + endif + else + let result_path = join(result, '/') + if a:file =~? '\m/$' + let result_path .= '/' + endif + endif + return result_path +endfunction + + +" If the optional argument provided and nonzero, +" it will ask before creating a directory +" Returns: 1 iff directory exists or successfully created +function! vimwiki#path#mkdir(path, ...) abort + let path = expand(a:path) + + if path =~# '^scp:' + " we can not do much, so let's pretend everything is ok + return 1 + endif + + if isdirectory(path) + return 1 + else + if !exists('*mkdir') + return 0 + endif + + let path = vimwiki#path#chomp_slash(path) + if vimwiki#u#is_windows() && !empty(vimwiki#vars#get_global('w32_dir_enc')) + let path = iconv(path, &encoding, vimwiki#vars#get_global('w32_dir_enc')) + endif + + if a:0 && a:1 && input('Vimwiki: Make new directory: '.path."\n [y]es/[N]o? ") !~? '^y' + return 0 + endif + + call mkdir(path, 'p') + return 1 + endif +endfunction + + +function! vimwiki#path#is_absolute(path) abort + if vimwiki#u#is_windows() + return a:path =~? '\m^\a:' + else + return a:path =~# '\m^/\|\~/' + endif +endfunction + + +" Combine a directory and a file into one path, doesn't generate duplicate +" path separator in case the directory is also having an ending / or \. This +" is because on windows ~\vimwiki//.tags is invalid but ~\vimwiki/.tags is a +" valid path. +if vimwiki#u#is_windows() + function! vimwiki#path#join_path(directory, file) abort + let directory = vimwiki#path#chomp_slash(a:directory) + let file = substitute(a:file, '\m^[\\/]\+', '', '') + return directory . '/' . file + endfunction +else + function! vimwiki#path#join_path(directory, file) abort + let directory = substitute(a:directory, '\m/\+$', '', '') + let file = substitute(a:file, '\m^/\+', '', '') + return directory . '/' . file + endfunction +endif + diff --git a/.config/vim/bundle/vimwiki/autoload/vimwiki/style.css b/.config/vim/bundle/vimwiki/autoload/vimwiki/style.css new file mode 100644 index 0000000..43d6b57 --- /dev/null +++ b/.config/vim/bundle/vimwiki/autoload/vimwiki/style.css @@ -0,0 +1,187 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;; + margin: 2em 4em 2em 4em; + font-size: 120%; + line-height: 130%; +} + +h1, h2, h3, h4, h5, h6 { + font-weight: bold; + line-height:100%; + margin-top: 1.5em; + margin-bottom: 0.5em; +} + +h1 {font-size: 2em; color: #000000;} +h2 {font-size: 1.8em; color: #404040;} +h3 {font-size: 1.6em; color: #707070;} +h4 {font-size: 1.4em; color: #909090;} +h5 {font-size: 1.2em; color: #989898;} +h6 {font-size: 1em; color: #9c9c9c;} + +p, pre, blockquote, table, ul, ol, dl { + margin-top: 1em; + margin-bottom: 1em; +} + +ul ul, ul ol, ol ol, ol ul { + margin-top: 0.5em; + margin-bottom: 0.5em; +} + +li { margin: 0.3em auto; } + +ul { + margin-left: 2em; + padding-left: 0; +} + +dt { font-weight: bold; } + +img { border: none; } + +pre { + border-left: 5px solid #dcdcdc; + background-color: #f5f5f5; + padding-left: 1em; + font-family: Monaco, "Courier New", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", monospace; + font-size: 0.8em; + border-radius: 6px; +} + +p > a { + color: white; + text-decoration: none; + font-size: 0.7em; + padding: 3px 6px; + border-radius: 3px; + background-color: #1e90ff; + text-transform: uppercase; + font-weight: bold; +} + +p > a:hover { + color: #dcdcdc; + background-color: #484848; +} + +li > a { + color: #1e90ff; + font-weight: bold; + text-decoration: none; +} + +li > a:hover { color: #ff4500; } + +blockquote { + color: #686868; + font-size: 0.8em; + line-height: 120%; + padding: 0.8em; + border-left: 5px solid #dcdcdc; +} + +th, td { + border: 1px solid #ccc; + padding: 0.3em; +} + +th { background-color: #f0f0f0; } + +hr { + border: none; + border-top: 1px solid #ccc; + width: 100%; +} + +del { + text-decoration: line-through; + color: #777777; +} + +.toc li { list-style-type: none; } + +.todo { + font-weight: bold; + background-color: #ff4500 ; + color: white; + font-size: 0.8em; + padding: 3px 6px; + border-radius: 3px; +} + +.justleft { text-align: left; } +.justright { text-align: right; } +.justcenter { text-align: center; } + +.center { + margin-left: auto; + margin-right: auto; +} + +.tag { + background-color: #eeeeee; + font-family: monospace; + padding: 2px; +} + +.header a { + text-decoration: none; + color: inherit; +} + +/* classes for items of todo lists */ + +.rejected { + /* list-style: none; */ + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAACXBIWXMAAADFAAAAxQEdzbqoAAAAB3RJTUUH4QgEFhAtuWgv9wAAAPZQTFRFmpqam5iYnJaWnJeXnpSUn5OTopCQpoqKpouLp4iIqIiIrYCAt3V1vW1tv2xsmZmZmpeXnpKS/x4e/x8f/yAg/yIi/yQk/yUl/yYm/ygo/ykp/yws/zAw/zIy/zMz/zQ0/zU1/zY2/zw8/0BA/0ZG/0pK/1FR/1JS/1NT/1RU/1VV/1ZW/1dX/1pa/15e/19f/2Zm/2lp/21t/25u/3R0/3p6/4CA/4GB/4SE/4iI/46O/4+P/52d/6am/6ur/66u/7Oz/7S0/7e3/87O/9fX/9zc/93d/+Dg/+vr/+3t/+/v//Dw//Ly//X1//f3//n5//z8////gzaKowAAAA90Uk5T/Pz8/Pz8/Pz8/Pz8/f39ppQKWQAAAAFiS0dEEnu8bAAAAACuSURBVAhbPY9ZF4FQFEZPSKbIMmWep4gMGTKLkIv6/3/GPbfF97b3w17rA0kQOPgvAeHW6uJ6+5h7HqLdwowgOzejXRXBdx6UdSru216xuOMBHHNU0clTzeSUA6EhF8V8kqroluMiU6HKcuf4phGPr1o2q9kYZWwNq1qfRRmTaXpqsyjj17KkWCxKBUBgXWueHIyiAIg18gsse4KHkLF5IKIY10WQgv7fOy4ST34BRiopZ8WLNrgAAAAASUVORK5CYII=); + background-repeat: no-repeat; + background-position: 0 .2em; + padding-left: 1.5em; +} +.done0 { + /* list-style: none; */ + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAA7SURBVCiR7dMxEgAgCANBI3yVRzF5KxNbW6wsuH7LQ2YKQK1mkswBVERYF5Os3UV3gwd/jF2SkXy66gAZkxS6BniubAAAAABJRU5ErkJggg==); + background-repeat: no-repeat; + background-position: 0 .2em; + padding-left: 1.5em; +} +.done1 { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABtSURBVCiR1ZO7DYAwDER9BDmTeZQMFXmUbGYpOjrEryA0wOvO8itOslFrJYAug5BMM4BeSkmjsrv3aVTa8p48Xw1JSkSsWVUFwD05IqS1tmYzk5zzae9jnVVVzGyXb8sALjse+euRkEzu/uirFomVIdDGOLjuAAAAAElFTkSuQmCC); + background-repeat: no-repeat; + background-position: 0 .15em; + padding-left: 1.5em; +} +.done2 { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAB1SURBVCiRzdO5DcAgDAVQGxjAYgTvxlDIu1FTIRYAp8qlFISkSH7l5kk+ZIwxKiI2mIyqWoeILYRgZ7GINDOLjnmF3VqklKCUMgTee2DmM661Qs55iI3Zm/1u5h9sm4ig9z4ERHTFzLyd4G4+nFlVrYg8+qoF/c0kdpeMsmcAAAAASUVORK5CYII=); + background-repeat: no-repeat; + background-position: 0 .15em; + padding-left: 1.5em; +} +.done3 { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABoSURBVCiR7dOxDcAgDATA/0DtUdiKoZC3YhLkHjkVKF3idJHiztKfvrHZWnOSE8Fx95RJzlprimJVnXktvXeY2S0SEZRSAAAbmxnGGKH2I5T+8VfxPhIReQSuuY3XyYWa3T2p6quvOgGrvSFGlewuUAAAAABJRU5ErkJggg==); + background-repeat: no-repeat; + background-position: 0 .15em; + padding-left: 1.5em; +} +.done4 { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAQCAYAAAAbBi9cAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAzgAAAM4BlP6ToAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIISURBVDiNnZQ9SFtRFMd/773kpTaGJoQk1im4VDpWQcTNODhkFBcVTCNCF0NWyeDiIIiCm82QoIMIUkHUxcFBg1SEQoZszSat6cdTn1qNue92CMbEr9Sey+XC/Z/zu+f8h6ukUil3sVg0+M+4cFxk42/jH2wAqqqKSCSiPQdwcHHAnDHH9s/tN1h8V28ETdP+eU8fT9Nt62ancYdIPvJNtsu87bmjrJlrTDVM4RROJs1JrHPrD4Bar7A6cpc54iKOaTdJXCUI2UMVrQZ0Js7YPN18ECKkYNQcJe/OE/4dZsw7VqNXQMvHy3QZXQypQ6ycrtwDjf8aJ+PNEDSCzLpn7+m2pD8ZKHlKarYhy6XjEoCYGcN95qansQeA3fNdki+SaJZGTMQIOoL3W/Z89rxv+tokubNajlvk/vm+LFpF2XnUKZHI0I+QrI7Dw0OZTqdzUkpsM7mZTyfy5OPGyw1tK7AFSvmB/Ks8w8YwbUYbe6/3QEKv0vugfxWPnMLJun+d/kI/WLdizpNjMbAIKrhMF4OuwadBALqqs+RfInwUvuNi+fBd+wjogfogAFVRmffO02q01mZZ0HHdgXIzdz0QQLPezIQygX6llxNKKgOFARYCC49CqhoHIUTlss/Vx2phlYwjw8j1CAlfAiwQiJpiy7o1VHnsG5FISkoJu7Q/2YmmaV+i0ei7v38L2CBguSi5AAAAAElFTkSuQmCC); + background-repeat: no-repeat; + background-position: 0 .15em; + padding-left: 1.5em; +} + +code { + font-family: Monaco, "Courier New", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", monospace; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + padding: 0px 3px; + display: inline-block; + color: #52595d; + border: 1px solid #ccc; + background-color: #f9f9f9; +} diff --git a/.config/vim/bundle/vimwiki/autoload/vimwiki/tags.vim b/.config/vim/bundle/vimwiki/autoload/vimwiki/tags.vim new file mode 100644 index 0000000..b3ac93f --- /dev/null +++ b/.config/vim/bundle/vimwiki/autoload/vimwiki/tags.vim @@ -0,0 +1,405 @@ +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 +" Vimwiki autoload plugin file + + +let s:TAGS_METADATA_FILE_NAME = '.vimwiki_tags' + + + +" Tags metadata in-memory format: +" metadata := { 'pagename': [entries, ...] } +" entry := { 'tagname':..., 'lineno':..., 'link':... } + +" Tags metadata in-file format: +" +" Is based on CTags format (see |tags-file-format|). +" +" {tagaddress} is set to lineno. We'll let vim search by exact line number; we +" can afford that, we assume metadata file is always updated before use. +" +" Pagename and link are not saved in standard ctags fields, so we'll add +" an optional field, "vimwiki:". In this field, we encode tab-separated values +" of missing parameters -- "pagename" and "link". + + + +" Update tags metadata. +" a:full_rebuild == 1: re-scan entire wiki +" a:full_rebuild == 0: only re-scan current page +" a:all_files == '': only if the file is newer than .tags +function! vimwiki#tags#update_tags(full_rebuild, all_files) abort + let all_files = a:all_files !=? '' + if !a:full_rebuild + " Updating for one page (current) + let page_name = vimwiki#vars#get_bufferlocal('subdir') . expand('%:t:r') + " Collect tags in current file + let tags = s:scan_tags(getline(1, '$'), page_name) + " Load metadata file + let metadata = s:load_tags_metadata() + " Drop old tags + let metadata = s:remove_page_from_tags(metadata, page_name) + " Merge in the new ones + let metadata = s:merge_tags(metadata, page_name, tags) + " Save + call s:write_tags_metadata(metadata) + else " full rebuild + let files = vimwiki#base#find_files(vimwiki#vars#get_bufferlocal('wiki_nr'), 0) + let wiki_base_dir = vimwiki#vars#get_wikilocal('path') + let tags_file_last_modification = getftime(vimwiki#tags#metadata_file_path()) + let metadata = s:load_tags_metadata() + for file in files + if all_files || getftime(file) >= tags_file_last_modification + let subdir = vimwiki#base#subdir(wiki_base_dir, file) + let page_name = subdir . fnamemodify(file, ':t:r') + let tags = s:scan_tags(readfile(file), page_name) + let metadata = s:remove_page_from_tags(metadata, page_name) + let metadata = s:merge_tags(metadata, page_name, tags) + endif + endfor + call s:write_tags_metadata(metadata) + endif +endfunction + + +function! s:safesubstitute(text, search, replace, mode) abort + " Substitute regexp but do not interpret replace + let escaped = escape(a:replace, '\&') + return substitute(a:text, a:search, escaped, a:mode) +endfunction + + +" Scans the list of text lines (argument) and produces tags metadata as a list of tag entries. +function! s:scan_tags(lines, page_name) abort + + let entries = [] + + " Code wireframe to scan for headers -- borrowed from + " vimwiki#base#get_anchors(), with minor modifications. + + let rxheader = vimwiki#vars#get_syntaxlocal('header_search') + let rxtag = vimwiki#vars#get_syntaxlocal('tag_search') + + let anchor_level = ['', '', '', '', '', '', ''] + let current_complete_anchor = '' + + let PROXIMITY_LINES_NR = 2 + let header_line_nr = - (2 * PROXIMITY_LINES_NR) + + for line_nr in range(1, len(a:lines)) + let line = a:lines[line_nr - 1] + + " ignore verbatim blocks + if vimwiki#u#is_codeblock(line_nr) + continue + endif + + " process headers + let h_match = matchlist(line, rxheader) + if !empty(h_match) " got a header + let header_line_nr = line_nr + let header = vimwiki#u#trim(h_match[2]) + let level = len(h_match[1]) + let anchor_level[level-1] = header + for l in range(level, 6) + let anchor_level[l] = '' + endfor + if level == 1 + let current_complete_anchor = header + else + let current_complete_anchor = '' + for l in range(level-1) + if anchor_level[l] !=? '' + let current_complete_anchor .= anchor_level[l].'#' + endif + endfor + let current_complete_anchor .= header + endif + continue " tags are not allowed in headers + endif + + " Scan line for tags. There can be many of them. + let str = line + while 1 + let tag_group = matchstr(str, rxtag) + if tag_group ==? '' + break + endif + let tagend = matchend(str, rxtag) + let str = str[(tagend):] + for tag in split(tag_group, ':') + " Create metadata entry + let entry = {} + let entry.tagname = tag + let entry.lineno = line_nr + if line_nr <= PROXIMITY_LINES_NR && header_line_nr < 0 + " Tag appeared at the top of the file + let entry.link = a:page_name + elseif line_nr <= (header_line_nr + PROXIMITY_LINES_NR) + " Tag appeared right below a header + let entry.link = a:page_name . '#' . current_complete_anchor + else + " Tag stands on its own + let entry.link = a:page_name . '#' . tag + endif + call add(entries, entry) + endfor + endwhile + + endfor " loop over lines + return entries +endfunction + + +" Returns tags metadata file path +function! vimwiki#tags#metadata_file_path() abort + return fnamemodify(vimwiki#path#join_path(vimwiki#vars#get_wikilocal('path'), + \ s:TAGS_METADATA_FILE_NAME), ':p') +endfunction + + +" Loads tags metadata from file, returns a dictionary +function! s:load_tags_metadata() abort + let metadata_path = vimwiki#tags#metadata_file_path() + if !filereadable(metadata_path) + return {} + endif + let metadata = {} + for line in readfile(metadata_path) + if line =~# '^!_TAG_.*$' + continue + endif + let parts = matchlist(line, '^\(.\{-}\);"\(.*\)$') + if parts[0] ==? '' || parts[1] ==? '' || parts[2] ==? '' + throw 'VimwikiTags1: Metadata file corrupted' + endif + let std_fields = split(parts[1], '\t') + if len(std_fields) != 3 + throw 'VimwikiTags2: Metadata file corrupted' + endif + let vw_part = parts[2] + if vw_part[0] !=? "\t" + throw 'VimwikiTags3: Metadata file corrupted' + endif + let vw_fields = split(vw_part[1:], "\t") + if len(vw_fields) != 1 || vw_fields[0] !~# '^vimwiki:' + throw 'VimwikiTags4: Metadata file corrupted' + endif + let vw_data = substitute(vw_fields[0], '^vimwiki:', '', '') + let vw_data = substitute(vw_data, '\\n', "\n", 'g') + let vw_data = substitute(vw_data, '\\r', "\r", 'g') + let vw_data = substitute(vw_data, '\\t', "\t", 'g') + let vw_data = substitute(vw_data, '\\\\', "\\", 'g') + let vw_fields = split(vw_data, "\t") + if len(vw_fields) != 2 + throw 'VimwikiTags5: Metadata file corrupted' + endif + let pagename = vw_fields[0] + let entry = {} + let entry.tagname = std_fields[0] + let entry.lineno = std_fields[2] + let entry.link = vw_fields[1] + if has_key(metadata, pagename) + call add(metadata[pagename], entry) + else + let metadata[pagename] = [entry] + endif + endfor + return metadata +endfunction + + +" Removes all entries for given page from metadata in-place. Returns updated +" metadata (just in case). +function! s:remove_page_from_tags(metadata, page_name) abort + if has_key(a:metadata, a:page_name) + call remove(a:metadata, a:page_name) + return a:metadata + else + return a:metadata + endif +endfunction + + +" Merges metadata of one file into a:metadata +function! s:merge_tags(metadata, pagename, file_metadata) abort + let metadata = a:metadata + let metadata[a:pagename] = a:file_metadata + return metadata +endfunction + + +" Compares two actual lines from tags file. Return value is in strcmp style. +" See help on sort() -- that's what this function is going to be used for. +" See also s:write_tags_metadata below -- that's where we compose these tags +" file lines. +" +" This function is needed for tags sorting, since plain sort() compares line +" numbers as strings, not integers, and so, for example, tag at line 14 +" preceeds the same tag on the same page at line 9. (Because string "14" is +" alphabetically 'less than' string "9".) +function! s:tags_entry_cmp(i1, i2) abort + let items = [] + for orig_item in [a:i1, a:i2] + let fields = split(orig_item, "\t") + let item = {} + let item.text = fields[0]."\t".fields[1] + let item.lineno = 0 + matchstr(fields[2], '\m\d\+') + call add(items, item) + endfor + if items[0].text ># items[1].text + return 1 + elseif items[0].text <# items[1].text + return -1 + elseif items[0].lineno > items[1].lineno + return 1 + elseif items[0].lineno < items[1].lineno + return -1 + else + return 0 + endif +endfunction + + +" Saves metadata object into a file. Throws exceptions in case of problems. +function! s:write_tags_metadata(metadata) abort + let metadata_path = vimwiki#tags#metadata_file_path() + let tags = [] + for pagename in keys(a:metadata) + for entry in a:metadata[pagename] + let entry_data = pagename . "\t" . entry.link + let entry_data = substitute(entry_data, "\\", '\\\\', 'g') + let entry_data = substitute(entry_data, "\t", '\\t', 'g') + let entry_data = substitute(entry_data, "\r", '\\r', 'g') + let entry_data = substitute(entry_data, "\n", '\\n', 'g') + call add(tags, + \ entry.tagname . "\t" + \ . pagename . vimwiki#vars#get_wikilocal('ext') . "\t" + \ . entry.lineno + \ . ';"' + \ . "\t" . 'vimwiki:' . entry_data + \) + endfor + endfor + call sort(tags, 's:tags_entry_cmp') + let tag_comments = [ + \ "!_TAG_PROGRAM_VERSION\t2.5", + \ "!_TAG_PROGRAM_URL\thttps://github.com/vimwiki/vimwiki", + \ "!_TAG_PROGRAM_NAME\tVimwiki Tags", + \ "!_TAG_PROGRAM_AUTHOR\tVimwiki", + \ "!_TAG_OUTPUT_MODE\tvimwiki-tags", + \ "!_TAG_FILE_SORTED\t1", + \ "!_TAG_FILE_FORMAT\t2", + \ ] + for c in tag_comments + call insert(tags, c) + endfor + call writefile(tags, metadata_path) +endfunction + + +" Returns list of unique tags found in the .tags file +function! vimwiki#tags#get_tags() abort + let metadata = s:load_tags_metadata() + let tags = {} + for entries in values(metadata) + for entry in entries + let tags[entry.tagname] = 1 + endfor + endfor + return keys(tags) +endfunction + + +" Similar to vimwiki#base#generate_links. In the current buffer, appends +" tags and references to all their instances. If no arguments (tags) are +" specified, outputs all tags. +function! vimwiki#tags#generate_tags(create, ...) abort + let specific_tags = a:000 + let header_level = vimwiki#vars#get_global('tags_header_level') + + " use a dictionary function for closure like capability + " copy all local variables into dict (add a: if arguments are needed) + let GeneratorTags = copy(l:) + function! GeneratorTags.f() abort + let need_all_tags = empty(self.specific_tags) + let metadata = s:load_tags_metadata() + + " make a dictionary { tag_name: [tag_links, ...] } + let tags_entries = {} + for entries in values(metadata) + for entry in entries + if has_key(tags_entries, entry.tagname) + call add(tags_entries[entry.tagname], entry.link) + else + let tags_entries[entry.tagname] = [entry.link] + endif + endfor + unlet entry " needed for older vims with sticky type checking since name is reused + endfor + + let lines = [] + let bullet = repeat(' ', vimwiki#lst#get_list_margin()).vimwiki#lst#default_symbol().' ' + for tagname in sort(keys(tags_entries)) + if need_all_tags || index(self.specific_tags, tagname) != -1 + if len(lines) > 0 + call add(lines, '') + endif + + let tag_tpl = printf('rxH%d_Template', self.header_level + 1) + call add(lines, s:safesubstitute(vimwiki#vars#get_syntaxlocal(tag_tpl), '__Header__', tagname, '')) + + if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' + for _ in range(vimwiki#vars#get_global('markdown_header_style')) + call add(lines, '') + endfor + endif + + for taglink in sort(tags_entries[tagname]) + if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' + let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink3Template') + let link_infos = vimwiki#base#resolve_link(taglink) + if empty(link_infos.anchor) + let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink1Template') + let entry = s:safesubstitute(link_tpl, '__LinkUrl__', taglink, '') + let entry = s:safesubstitute(entry, '__LinkDescription__', taglink, '') + else + let link_caption = split(link_infos.anchor, '#', 0)[-1] + let link_text = split(taglink, '#', 1)[0] + let entry = s:safesubstitute(link_tpl, '__LinkUrl__', link_text, '') + let entry = s:safesubstitute(entry, '__LinkAnchor__', link_infos.anchor, '') + let entry = s:safesubstitute(entry, '__LinkDescription__', link_caption, '') + endif + + call add(lines, bullet . entry) + else + let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate1') + call add(lines, bullet . substitute(link_tpl, '__LinkUrl__', taglink, '')) + endif + endfor + endif + endfor + + return lines + endfunction + + let tag_match = printf('rxH%d', header_level + 1) + let links_rx = '^\%('.vimwiki#vars#get_syntaxlocal(tag_match).'\)\|'. + \ '\%(^\s*$\)\|\%('.vimwiki#vars#get_syntaxlocal('rxListBullet').'\)' + + call vimwiki#base#update_listing_in_buffer( + \ GeneratorTags, + \ vimwiki#vars#get_global('tags_header'), + \ links_rx, + \ line('$')+1, + \ header_level, + \ a:create) +endfunction + + +function! vimwiki#tags#complete_tags(ArgLead, CmdLine, CursorPos) abort + " We can safely ignore args if we use -custom=complete option, Vim engine + " will do the job of filtering. + let taglist = vimwiki#tags#get_tags() + return join(taglist, "\n") +endfunction + diff --git a/.config/vim/bundle/vimwiki/autoload/vimwiki/tbl.vim b/.config/vim/bundle/vimwiki/autoload/vimwiki/tbl.vim new file mode 100644 index 0000000..b26a89d --- /dev/null +++ b/.config/vim/bundle/vimwiki/autoload/vimwiki/tbl.vim @@ -0,0 +1,861 @@ +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 +" Vimwiki autoload plugin file +" Description: Tables +" | Easily | manageable | text | tables | ! | +" |--------|------------|-------|--------|---------| +" | Have | fun! | Drink | tea | Period. | +" +" Home: https://github.com/vimwiki/vimwiki/ + + + +if exists('g:loaded_vimwiki_tbl_auto') || &compatible + finish +endif +let g:loaded_vimwiki_tbl_auto = 1 + + +let s:textwidth = &textwidth + + +function! s:rxSep() abort + return vimwiki#vars#get_syntaxlocal('rxTableSep') +endfunction + + +function! s:wide_len(str) abort + " vim73 has new function that gives correct string width. + if exists('*strdisplaywidth') + return strdisplaywidth(a:str) + endif + + " get str display width in vim ver < 7.2 + if !vimwiki#vars#get_global('CJK_length') + let ret = strlen(substitute(a:str, '.', 'x', 'g')) + else + let savemodified = &modified + let save_cursor = getpos('.') + exe "norm! o\" + call setline(line('.'), a:str) + let ret = virtcol('$') - 1 + d + call setpos('.', save_cursor) + let &modified = savemodified + endif + return ret +endfunction + + +function! s:cell_splitter() abort + return '\s*'.s:rxSep().'\s*' +endfunction + + +function! s:sep_splitter() abort + return '-'.s:rxSep().'-' +endfunction + + +function! s:is_table(line) abort + return s:is_separator(a:line) || + \ (a:line !~# s:rxSep().s:rxSep() && a:line =~# '^\s*'.s:rxSep().'.\+'.s:rxSep().'\s*$') +endfunction + + +function! s:is_separator(line) abort + return a:line =~# '^\s*'.s:rxSep().'\(:\=--\+:\='.s:rxSep().'\)\+\s*$' +endfunction + + +function! s:is_separator_tail(line) abort + return a:line =~# '^\{-1}\%(\s*\|-*\)\%('.s:rxSep().'-\+\)\+'.s:rxSep().'\s*$' +endfunction + + +function! s:is_last_column(lnum, cnum) abort + let line = strpart(getline(a:lnum), a:cnum - 1) + return line =~# s:rxSep().'\s*$' && line !~# s:rxSep().'.*'.s:rxSep().'\s*$' +endfunction + + +function! s:is_first_column(lnum, cnum) abort + let line = strpart(getline(a:lnum), 0, a:cnum - 1) + return line =~# '^\s*$' || + \ (line =~# '^\s*'.s:rxSep() && line !~# '^\s*'.s:rxSep().'.*'.s:rxSep()) +endfunction + + +function! s:count_separators_up(lnum) abort + let lnum = a:lnum - 1 + while lnum > 1 + if !s:is_separator(getline(lnum)) + break + endif + let lnum -= 1 + endwhile + + return (a:lnum-lnum) +endfunction + + +function! s:count_separators_down(lnum) abort + let lnum = a:lnum + 1 + while lnum < line('$') + if !s:is_separator(getline(lnum)) + break + endif + let lnum += 1 + endwhile + + return (lnum-a:lnum) +endfunction + + +function! s:create_empty_row(cols) abort + let row = s:rxSep() + let cell = ' '.s:rxSep() + + for c in range(a:cols) + let row .= cell + endfor + + return row +endfunction + + +function! s:create_row_sep(cols) abort + let row = s:rxSep() + let cell = '---'.s:rxSep() + + for c in range(a:cols) + let row .= cell + endfor + + return row +endfunction + + +function! vimwiki#tbl#get_cells(line, ...) abort + let result = [] + let state = 'NONE' + let cell_start = 0 + let quote_start = 0 + let len = strlen(a:line) - 1 + + " 'Simple' FSM + while state !=# 'CELL' + if quote_start != 0 && state !=# 'CELL' + let state = 'CELL' + endif + for idx in range(quote_start, len) + " The only way I know Vim can do Unicode... + let ch = a:line[idx] + if state ==# 'NONE' + if ch ==# '|' + let cell_start = idx + 1 + let state = 'CELL' + endif + elseif state ==# 'CELL' + if ch ==# '[' || ch ==# '{' + let state = 'BEFORE_QUOTE_START' + let quote_start = idx + elseif ch ==# '|' + let cell = strpart(a:line, cell_start, idx - cell_start) + if a:0 && a:1 + let cell = substitute(cell, '^ \(.*\) $', '\1', '') + else + let cell = vimwiki#u#trim(cell) + endif + call add(result, cell) + let cell_start = idx + 1 + endif + elseif state ==# 'BEFORE_QUOTE_START' + if ch ==# '[' || ch ==# '{' + let state = 'QUOTE' + let quote_start = idx + else + let state = 'CELL' + endif + elseif state ==# 'QUOTE' + if ch ==# ']' || ch ==# '}' + let state = 'BEFORE_QUOTE_END' + endif + elseif state ==# 'BEFORE_QUOTE_END' + if ch ==# ']' || ch ==# '}' + let state = 'CELL' + endif + endif + endfor + if state ==# 'NONE' + break + endif + endwhile + + return result +endfunction + + +function! s:col_count(lnum) abort + return len(vimwiki#tbl#get_cells(getline(a:lnum))) +endfunction + + +function! s:get_indent(lnum, depth) abort + if !s:is_table(getline(a:lnum)) + return + endif + + let indent = 0 + + let lnum = a:lnum - 1 + while lnum > 1 + let line = getline(lnum) + if !s:is_table(line) + let indent = indent(lnum+1) + break + endif + let lnum -= 1 + if a:depth > 0 && lnum < a:lnum - a:depth + break + endif + endwhile + + return indent +endfunction + + +function! s:get_rows(lnum, ...) abort + if !s:is_table(getline(a:lnum)) + return + endif + + let rows = [] + + let lnum = a:lnum - 1 + let depth = a:0 > 0 ? a:1 : 0 + let ldepth = 0 + while lnum >= 1 && (depth == 0 || ldepth < depth) + let line = getline(lnum) + if s:is_table(line) + call insert(rows, [lnum, line]) + else + break + endif + let lnum -= 1 + let ldepth += 1 + endwhile + + let lnum = a:lnum + while lnum <= line('$') + let line = getline(lnum) + if s:is_table(line) + call add(rows, [lnum, line]) + else + break + endif + if depth > 0 + break + endif + let lnum += 1 + endwhile + + return rows +endfunction + + +function! s:get_cell_aligns(lnum, ...) abort + let aligns = {} + let depth = a:0 > 0 ? a:1 : 0 + for [lnum, row] in s:get_rows(a:lnum, depth) + if s:is_separator(row) + let cells = vimwiki#tbl#get_cells(row) + for idx in range(len(cells)) + let cell = cells[idx] + if cell =~# '^--\+:' + let aligns[idx] = 'right' + elseif cell =~# '^:--\+:' + let aligns[idx] = 'center' + else + let aligns[idx] = 'left' + endif + endfor + else + let cells = vimwiki#tbl#get_cells(row) + for idx in range(len(cells)) + if !has_key(aligns, idx) + let aligns[idx] = 'left' + endif + endfor + endif + endfor + return aligns +endfunction + + +function! s:get_cell_aligns_fast(rows) abort + let aligns = {} + let clen = 0 + for [lnum, row] in a:rows + if s:is_separator(row) + return s:get_cell_aligns(lnum, 1) + endif + let cells = vimwiki#tbl#get_cells(row, 1) + let clen = len(cells) + for idx in range(clen) + let cell = cells[idx] + if !has_key(aligns, idx) + let cs = matchlist(cell, '^\(\s*\)[^[:space:]].\{-}\(\s*\)$') + if !empty(cs) + let lstart = len(cs[1]) + let lend = len(cs[2]) + if lstart > 0 && lend > 0 + let aligns[idx] = 'center' + elseif lend > 0 + let aligns[idx] = 'left' + elseif lstart > 0 + let aligns[idx] = 'right' + endif + endif + endif + endfor + endfor + for idx in range(clen) + if !has_key(aligns, idx) + return {} + endif + endfor + return aligns +endfunction + + +function! s:get_cell_max_lens(lnum, ...) abort + let max_lens = {} + let rows = a:0 > 2 ? a:3 : s:get_rows(a:lnum) + for [lnum, row] in rows + if s:is_separator(row) + continue + endif + let cells = a:0 > 1 ? a:1[lnum - a:2] : vimwiki#tbl#get_cells(row) + for idx in range(len(cells)) + let value = cells[idx] + if has_key(max_lens, idx) + let max_lens[idx] = max([s:wide_len(value), max_lens[idx]]) + else + let max_lens[idx] = s:wide_len(value) + endif + endfor + endfor + return max_lens +endfunction + + +function! s:get_aligned_rows(lnum, col1, col2, depth) abort + let rows = [] + let aligns = {} + let startlnum = 0 + let cells = [] + let max_lens = {} + let check_all = 1 + if a:depth > 0 + let rows = s:get_rows(a:lnum, a:depth) + let startlnum = rows[0][0] + let lrows = len(rows) + if lrows == a:depth + 1 + let line = rows[-1][1] + if !s:is_separator(line) + let lcells = vimwiki#tbl#get_cells(line) + let lclen = len(lcells) + let lmax_lens = repeat([0], lclen) + let laligns = repeat(['left'], lclen) + let rows[-1][1] = s:fmt_row(lcells, lmax_lens, laligns, 0, 0) + endif + let i = 1 + for [lnum, row] in rows + call add(cells, vimwiki#tbl#get_cells(row, i != lrows - 1)) + let i += 1 + endfor + let max_lens = s:get_cell_max_lens(a:lnum, cells, startlnum, rows) + " user option not to expand last call + if vimwiki#vars#get_global('table_reduce_last_col') + let last_index = keys(max_lens)[-1] + let max_lens[last_index] = 1 + endif + let fst_lens = s:get_cell_max_lens(a:lnum, cells, startlnum, rows[0:0]) + let check_all = max_lens != fst_lens + let aligns = s:get_cell_aligns_fast(rows[0:-2]) + let rows[-1][1] = line + endif + endif + if check_all + " all the table must be re-formatted + let rows = s:get_rows(a:lnum) + let startlnum = rows[0][0] + let cells = [] + for [lnum, row] in rows + call add(cells, vimwiki#tbl#get_cells(row)) + endfor + let max_lens = s:get_cell_max_lens(a:lnum, cells, startlnum, rows) + " user option not to expand last call + if vimwiki#vars#get_global('table_reduce_last_col') + let last_index = keys(max_lens)[-1] + let max_lens[last_index] = 1 + endif + endif + if empty(aligns) + let aligns = s:get_cell_aligns(a:lnum) + endif + let result = [] + for [lnum, row] in rows + if s:is_separator(row) + let new_row = s:fmt_sep(max_lens, aligns, a:col1, a:col2) + else + let new_row = s:fmt_row(cells[lnum - startlnum], max_lens, aligns, a:col1, a:col2) + endif + call add(result, [lnum, new_row]) + endfor + return result +endfunction + + +" Number of the current column. Starts from 0. +function! s:cur_column() abort + let line = getline('.') + if !s:is_table(line) + return -1 + endif + " TODO: do we need conditional: if s:is_separator(line) + + let curs_pos = col('.') + let mpos = match(line, s:rxSep(), 0) + let col = -1 + while mpos < curs_pos && mpos != -1 + let mpos = match(line, s:rxSep(), mpos+1) + if mpos != -1 + let col += 1 + endif + endwhile + return col +endfunction + + +function! s:fmt_cell(cell, max_len, align) abort + let cell = ' '.a:cell.' ' + + let diff = a:max_len - s:wide_len(a:cell) + if diff == 0 && empty(a:cell) + let diff = 1 + endif + if a:align ==# 'left' + let cell .= repeat(' ', diff) + elseif a:align ==# 'right' + let cell = repeat(' ',diff).cell + else + let cell = repeat(' ',diff/2).cell.repeat(' ',diff-diff/2) + endif + return cell +endfunction + + +function! s:fmt_row(cells, max_lens, aligns, col1, col2) abort + let new_line = s:rxSep() + for idx in range(len(a:cells)) + if idx == a:col1 + let idx = a:col2 + elseif idx == a:col2 + let idx = a:col1 + endif + let value = a:cells[idx] + let new_line .= s:fmt_cell(value, a:max_lens[idx], a:aligns[idx]).s:rxSep() + endfor + + let idx = len(a:cells) + while idx < len(a:max_lens) + let new_line .= s:fmt_cell('', a:max_lens[idx], a:aligns[idx]).s:rxSep() + let idx += 1 + endwhile + return new_line +endfunction + + +function! s:fmt_cell_sep(max_len, align) abort + let cell = '' + if a:max_len == 0 + let cell .= '-' + else + let cell .= repeat('-', a:max_len) + endif + if a:align ==# 'right' + return cell.'-:' + elseif a:align ==# 'left' + return cell.'--' + else + return ':'.cell.':' + endif +endfunction + + +function! s:fmt_sep(max_lens, aligns, col1, col2) abort + let new_line = s:rxSep() + for idx in range(len(a:max_lens)) + if idx == a:col1 + let idx = a:col2 + elseif idx == a:col2 + let idx = a:col1 + endif + let new_line .= s:fmt_cell_sep(a:max_lens[idx], a:aligns[idx]).s:rxSep() + endfor + return new_line +endfunction + + +function! s:kbd_create_new_row(cols, goto_first) abort + let cmd = "\o".s:create_empty_row(a:cols) + let cmd .= "\:call vimwiki#tbl#format(line('.'), 2)\" + let cmd .= "\0" + if a:goto_first + let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'c', line('.'))\" + else + let cmd .= (col('.')-1).'l' + let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'bc', line('.'))\" + endif + let cmd .= 'a' + + return cmd +endfunction + + +function! s:kbd_goto_next_row() abort + let cmd = "\j" + let cmd .= ":call search('.\\(".s:rxSep()."\\)', 'c', line('.'))\" + let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'bc', line('.'))\" + let cmd .= 'a' + return cmd +endfunction + + +function! s:kbd_goto_prev_row() abort + let cmd = "\k" + let cmd .= ":call search('.\\(".s:rxSep()."\\)', 'c', line('.'))\" + let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'bc', line('.'))\" + let cmd .= 'a' + return cmd +endfunction + + +" Used in s:kbd_goto_next_col +function! vimwiki#tbl#goto_next_col() abort + let curcol = virtcol('.') + let lnum = line('.') + let depth = 2 + let newcol = s:get_indent(lnum, depth) + let rows = s:get_rows(lnum, depth) + let startlnum = rows[0][0] + let cells = [] + for [lnum, row] in rows + call add(cells, vimwiki#tbl#get_cells(row, 1)) + endfor + let max_lens = s:get_cell_max_lens(lnum, cells, startlnum, rows) + for cell_len in values(max_lens) + if newcol >= curcol-1 + break + endif + let newcol += cell_len + 3 " +3 == 2 spaces + 1 separator |... + endfor + let newcol += 2 " +2 == 1 separator + 1 space |... + if newcol + delta > curcol-1 + let newcol -= (prev_cell_len + 3) " +3 == 2 spaces + 1 separator |... + break + elseif newcol + delta == curcol-1 + break + endif + let prev_cell_len = cell_len + let newcol += delta + endfor + let newcol += 2 " +2 == 1 separator + 1 space |" + " let cmd .= "a" + "echomsg "DEBUG kbd_goto_prev_col> ".cmd + return cmd +endfunction + + +function! vimwiki#tbl#kbd_cr() abort + let lnum = line('.') + if !s:is_table(getline(lnum)) + return '' + endif + + if s:is_separator(getline(lnum+1)) || !s:is_table(getline(lnum+1)) + let cols = len(vimwiki#tbl#get_cells(getline(lnum))) + return s:kbd_create_new_row(cols, 0) + else + return s:kbd_goto_next_row() + endif +endfunction + + +function! vimwiki#tbl#kbd_tab() abort + let lnum = line('.') + if !s:is_table(getline(lnum)) + return "\" + endif + + let last = s:is_last_column(lnum, col('.')) + let is_sep = s:is_separator_tail(getline(lnum)) + "echomsg "DEBUG kbd_tab> last=".last.", is_sep=".is_sep + if (is_sep || last) && !s:is_table(getline(lnum+1)) + let cols = len(vimwiki#tbl#get_cells(getline(lnum))) + return s:kbd_create_new_row(cols, 1) + endif + return s:kbd_goto_next_col(is_sep || last) +endfunction + + +function! vimwiki#tbl#kbd_shift_tab() abort + let lnum = line('.') + if !s:is_table(getline(lnum)) + return "\" + endif + + let first = s:is_first_column(lnum, col('.')) + let is_sep = s:is_separator_tail(getline(lnum)) + "echomsg "DEBUG kbd_tab> ".first + if (is_sep || first) && !s:is_table(getline(lnum-1)) + return '' + endif + return s:kbd_goto_prev_col(is_sep || first) +endfunction + + +function! vimwiki#tbl#format(lnum, ...) abort + if !vimwiki#u#ft_is_vw() + return + endif + let line = getline(a:lnum) + if !s:is_table(line) + return + endif + + let depth = a:0 == 1 ? a:1 : 0 + + if a:0 == 2 + let col1 = a:1 + let col2 = a:2 + else + let col1 = 0 + let col2 = 0 + endif + + let indent = s:get_indent(a:lnum, depth) + if &expandtab + let indentstring = repeat(' ', indent) + else + execute "let indentstring = repeat('\', indent / &tabstop) . repeat(' ', indent % &tabstop)" + endif + + " getting N = depth last rows is enough for having been formatted tables + for [lnum, row] in s:get_aligned_rows(a:lnum, col1, col2, depth) + let row = indentstring.row + if getline(lnum) != row + call setline(lnum, row) + endif + endfor + + let &textwidth = s:textwidth +endfunction + + +function! vimwiki#tbl#create(...) abort + if a:0 > 1 + let cols = a:1 + let rows = a:2 + elseif a:0 == 1 + let cols = a:1 + let rows = 2 + elseif a:0 == 0 + let cols = 5 + let rows = 2 + endif + + if cols < 1 + let cols = 5 + endif + + if rows < 1 + let rows = 2 + endif + + let lines = [] + let row = s:create_empty_row(cols) + + call add(lines, row) + if rows > 1 + call add(lines, s:create_row_sep(cols)) + endif + + for r in range(rows - 1) + call add(lines, row) + endfor + + call append(line('.'), lines) +endfunction + + +function! vimwiki#tbl#align_or_cmd(cmd, ...) abort + if s:is_table(getline('.')) + call call('vimwiki#tbl#format', [line('.')] + a:000) + else + exe 'normal! '.a:cmd + endif +endfunction + + +function! vimwiki#tbl#reset_tw(lnum) abort + if !vimwiki#u#ft_is_vw() + return + endif + let line = getline(a:lnum) + if !s:is_table(line) + return + endif + + let s:textwidth = &textwidth + let &textwidth = 0 +endfunction + + +" TODO: move_column_left and move_column_right are good candidates to be refactored. +function! vimwiki#tbl#move_column_left() abort + + "echomsg "DEBUG move_column_left: " + + let line = getline('.') + + if !s:is_table(line) + return + endif + + let cur_col = s:cur_column() + if cur_col == -1 + return + endif + + if cur_col > 0 + call vimwiki#tbl#format(line('.'), cur_col-1, cur_col) + call cursor(line('.'), 1) + + let sep = '\('.s:rxSep().'\).\zs' + let mpos = -1 + let col = -1 + while col < cur_col-1 + let mpos = match(line, sep, mpos+1) + if mpos != -1 + let col += 1 + else + break + endif + endwhile + + endif +endfunction + + +function! vimwiki#tbl#move_column_right() abort + + let line = getline('.') + + if !s:is_table(line) + return + endif + + let cur_col = s:cur_column() + if cur_col == -1 + return + endif + + if cur_col < s:col_count(line('.'))-1 + call vimwiki#tbl#format(line('.'), cur_col, cur_col+1) + call cursor(line('.'), 1) + + let sep = '\('.s:rxSep().'\).\zs' + let mpos = -1 + let col = -1 + while col < cur_col+1 + let mpos = match(line, sep, mpos+1) + if mpos != -1 + let col += 1 + else + break + endif + endwhile + endif +endfunction + + +function! vimwiki#tbl#get_rows(lnum) abort + return s:get_rows(a:lnum) +endfunction + + +function! vimwiki#tbl#is_table(line) abort + return s:is_table(a:line) +endfunction + + +function! vimwiki#tbl#is_separator(line) abort + return s:is_separator(a:line) +endfunction + + +function! vimwiki#tbl#cell_splitter() abort + return s:cell_splitter() +endfunction + + +function! vimwiki#tbl#sep_splitter() abort + return s:sep_splitter() +endfunction + diff --git a/.config/vim/bundle/vimwiki/autoload/vimwiki/u.vim b/.config/vim/bundle/vimwiki/autoload/vimwiki/u.vim new file mode 100644 index 0000000..08bc896 --- /dev/null +++ b/.config/vim/bundle/vimwiki/autoload/vimwiki/u.vim @@ -0,0 +1,157 @@ +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 +" Vimwiki autoload plugin file +" Description: Utility functions +" Home: https://github.com/vimwiki/vimwiki/ + + +" Execute: string v:count times +function! vimwiki#u#count_exe(cmd) abort + for i in range( max([1, v:count]) ) + exe a:cmd + endfor +endfunction + + +function! vimwiki#u#trim(string, ...) abort + let chars = '' + if a:0 > 0 + let chars = a:1 + endif + let res = substitute(a:string, '^[[:space:]'.chars.']\+', '', '') + let res = substitute(res, '[[:space:]'.chars.']\+$', '', '') + return res +endfunction + + +" Builtin cursor doesn't work right with unicode characters. +function! vimwiki#u#cursor(lnum, cnum) abort + exe a:lnum + exe 'normal! 0'.a:cnum.'|' +endfunction + + +" Returns: OS name, human readable +function! vimwiki#u#os_name() abort + if vimwiki#u#is_windows() + return 'Windows' + elseif vimwiki#u#is_macos() + return 'Mac' + else + return 'Linux' + endif +endfunction + + +function! vimwiki#u#is_windows() abort + return has('win32') || has('win64') || has('win95') || has('win16') +endfunction + + +function! vimwiki#u#is_macos() abort + if has('mac') || has('macunix') || has('gui_mac') + return 1 + endif + " that still doesn't mean we are not on Mac OS + let os = substitute(system('uname'), '\n', '', '') + return os ==? 'Darwin' || os ==? 'Mac' +endfunction + + +function! vimwiki#u#count_first_sym(line) abort + let first_sym = matchstr(a:line, '\S') + return len(matchstr(a:line, first_sym.'\+')) +endfunction + + +function! vimwiki#u#escape(string) abort + return escape(a:string, '~.*[]\^$') +endfunction + + +" Load concrete Wiki syntax: sets regexes and templates for headers and links +function! vimwiki#u#reload_regexes() abort + execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'.vim' +endfunction + + +" Load syntax-specific functionality +function! vimwiki#u#reload_regexes_custom() abort + execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'_custom.vim' +endfunction + + +" Backward compatible version of the built-in function shiftwidth() +if exists('*shiftwidth') + function! vimwiki#u#sw() abort + return shiftwidth() + endfunc +else + function! vimwiki#u#sw() abort + return &shiftwidth + endfunc +endif + +" a:mode single character indicating the mode as defined by :h maparg +" a:key the key sequence to map +" a:plug the plug command the key sequence should be mapped to +" a:1 optional argument with the following functionality: +" if a:1==1 then the hasmapto() check is skipped. +" this can be used to map different keys to the same definition +" if a:1==2 then the mapping is not specific i.e. it is global +function! vimwiki#u#map_key(mode, key, plug, ...) abort + if a:0 && a:1 == 2 + " global mappings + if !hasmapto(a:plug) && maparg(a:key, a:mode) ==# '' + exe a:mode . 'map ' . a:key . ' ' . a:plug + endif + elseif a:0 && a:1 == 1 + " vimwiki buffer mappings, repeat mapping to the same definition + exe a:mode . 'map ' . a:key . ' ' . a:plug + else + " vimwiki buffer mappings + if !hasmapto(a:plug) + exe a:mode . 'map ' . a:key . ' ' . a:plug + endif + endif +endfunction + + +" returns 1 if line is a code block or math block +" +" The last two conditions are needed for this to correctly +" detect nested syntaxes within code blocks +function! vimwiki#u#is_codeblock(lnum) abort + let syn_g = synIDattr(synID(a:lnum,1,1),'name') + if syn_g =~# 'Vimwiki\(Pre.*\|IndentedCodeBlock\|Math.*\)' + \ || (syn_g !~# 'Vimwiki.*' && syn_g !=? '') + return 1 + else + return 0 + endif +endfunction + +" Sets the filetype to vimwiki +" If g:vimwiki_filetypes variable is set +" the filetype will be vimwiki.. etc. +function! vimwiki#u#ft_set() abort + let ftypelist = vimwiki#vars#get_global('filetypes') + let ftype = 'vimwiki' + for ftypeadd in ftypelist + let ftype = ftype . '.' . ftypeadd + endfor + let &filetype = ftype +endfunction + +" Returns: 1 if filetype is vimwiki, 0 else +" If multiple fileytpes are in use 1 is returned only if the +" first ft is vimwiki which should always be the case unless +" the user manually changes it to something else +function! vimwiki#u#ft_is_vw() abort + " Clause: is filetype defined + if &filetype ==# '' | return 0 | endif + if split(&filetype, '\.')[0] ==? 'vimwiki' + return 1 + else + return 0 + endif +endfunction diff --git a/.config/vim/bundle/vimwiki/autoload/vimwiki/vars.vim b/.config/vim/bundle/vimwiki/autoload/vimwiki/vars.vim new file mode 100644 index 0000000..f98ddef --- /dev/null +++ b/.config/vim/bundle/vimwiki/autoload/vimwiki/vars.vim @@ -0,0 +1,984 @@ +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 +" Vimwiki autoload plugin file +" Home: https://github.com/vimwiki/vimwiki/ + + + +" ------------------------------------------------------------------------------------------------ +" This file provides functions to manage the various state variables which are needed during a +" Vimwiki session. +" They consist of: +" +" - global variables. These are stored in the dict g:vimwiki_global_vars. They consist mainly of +" global user variables and syntax stuff which is the same for every syntax. +" +" - wiki-local variables. They are stored in g:vimwiki_wikilocal_vars which is a list of +" dictionaries, one dict for every registered wiki. The last dictionary contains default values +" (used for temporary wikis). +" +" - syntax variables. Stored in the dict g:vimwiki_syntax_variables which holds all the regexes and +" other stuff which is needed for highlighting. +" +" - buffer-local variables. They are stored as buffer variables directly (b:foo) + +" As a developer, you should, if possible, only use the get_ and set_ functions for these types of +" variables, not the underlying dicts! +" ------------------------------------------------------------------------------------------------ + + +function! s:populate_global_variables() abort + + let g:vimwiki_global_vars = {} + + call s:read_global_settings_from_user() + call s:normalize_global_settings() + + " non-configurable global variables: + + " Scheme regexes must be defined even if syntax file is not loaded yet cause users should be + " able to ww without opening any vimwiki file first + let g:vimwiki_global_vars.schemes = join(['wiki\d\+', 'diary', 'local'], '\|') + let g:vimwiki_global_vars.web_schemes1 = join(['http', 'https', 'file', 'ftp', 'gopher', + \ 'telnet', 'nntp', 'ldap', 'rsync', 'imap', 'pop', 'irc', 'ircs', 'cvs', 'svn', 'svn+ssh', + \ 'git', 'ssh', 'fish', 'sftp'], '\|') + let web_schemes2 = + \ join(['mailto', 'news', 'xmpp', 'sip', 'sips', 'doi', 'urn', 'tel', 'data'], '\|') + + let g:vimwiki_global_vars.rxSchemes = '\%('. + \ g:vimwiki_global_vars.schemes . '\|'. + \ g:vimwiki_global_vars.web_schemes1 . '\|'. + \ web_schemes2 . + \ '\)' + + " match URL for common protocols; see http://en.wikipedia.org/wiki/URI_scheme + " http://tools.ietf.org/html/rfc3986 + let rxWebProtocols = + \ '\%('. + \ '\%('. + \ '\%('.g:vimwiki_global_vars.web_schemes1 . '\):'. + \ '\%(//\)'. + \ '\)'. + \ '\|'. + \ '\%('.web_schemes2.'\):'. + \ '\)' + + let g:vimwiki_global_vars.rxWeblinkUrl = rxWebProtocols . '\S\{-1,}'. '\%(([^ \t()]*)\)\=' + + let wikilink_prefix = '[[' + let wikilink_suffix = ']]' + let wikilink_separator = '|' + let g:vimwiki_global_vars.rx_wikilink_prefix = vimwiki#u#escape(wikilink_prefix) + let g:vimwiki_global_vars.rx_wikilink_suffix = vimwiki#u#escape(wikilink_suffix) + let g:vimwiki_global_vars.rx_wikilink_separator = vimwiki#u#escape(wikilink_separator) + + " templates for the creation of wiki links + " [[URL]] + let g:vimwiki_global_vars.WikiLinkTemplate1 = wikilink_prefix . '__LinkUrl__'. wikilink_suffix + " [[URL|DESCRIPTION]] + let g:vimwiki_global_vars.WikiLinkTemplate2 = wikilink_prefix . '__LinkUrl__'. wikilink_separator + \ . '__LinkDescription__' . wikilink_suffix + + let valid_chars = '[^\\\]]' + let g:vimwiki_global_vars.rxWikiLinkUrl = valid_chars.'\{-}' + let g:vimwiki_global_vars.rxWikiLinkDescr = valid_chars.'\{-}' + + " this regexp defines what can form a link when the user presses in the + " buffer (and not on a link) to create a link + " basically, it's Ascii alphanumeric characters plus #|./@-_~ plus all + " non-Ascii characters, except that . is not accepted as the last character + " TODO look behind for . reduces the second part of the regex that is the same with '.' added + let g:vimwiki_global_vars.rxWord = '[^[:blank:]!"$%&''()*+,:;<=>?\[\]\\^`{}]*[^[:blank:]!"$%&''()*+.,:;<=>?\[\]\\^`{}]' + + let g:vimwiki_global_vars.rx_wikilink_prefix1 = g:vimwiki_global_vars.rx_wikilink_prefix . + \ g:vimwiki_global_vars.rxWikiLinkUrl . g:vimwiki_global_vars.rx_wikilink_separator + let g:vimwiki_global_vars.rx_wikilink_suffix1 = g:vimwiki_global_vars.rx_wikilink_suffix + + let g:vimwiki_global_vars.rxWikiInclPrefix = '{{' + let g:vimwiki_global_vars.rxWikiInclSuffix = '}}' + let g:vimwiki_global_vars.rxWikiInclSeparator = '|' + " '{{__LinkUrl__}}' + let g:vimwiki_global_vars.WikiInclTemplate1 = g:vimwiki_global_vars.rxWikiInclPrefix + \ .'__LinkUrl__'. g:vimwiki_global_vars.rxWikiInclSuffix + " '{{__LinkUrl____LinkDescription__}}' + let g:vimwiki_global_vars.WikiInclTemplate2 = g:vimwiki_global_vars.rxWikiInclPrefix + \ . '__LinkUrl__' . g:vimwiki_global_vars.rxWikiInclSeparator . '__LinkDescription__' + \ . g:vimwiki_global_vars.rxWikiInclSuffix + + let valid_chars = '[^\\\}]' + let g:vimwiki_global_vars.rxWikiInclUrl = valid_chars.'\{-}' + let g:vimwiki_global_vars.rxWikiInclArg = valid_chars.'\{-}' + let g:vimwiki_global_vars.rxWikiInclArgs = '\%('. g:vimwiki_global_vars.rxWikiInclSeparator. + \ g:vimwiki_global_vars.rxWikiInclArg. '\)'.'\{-}' + + " *. {{URL}[{...}]} - i.e. {{URL}}, {{URL|ARG1}}, {{URL|ARG1|ARG2}}, etc. + " *a) match {{URL}[{...}]} + let g:vimwiki_global_vars.rxWikiIncl = g:vimwiki_global_vars.rxWikiInclPrefix. + \ g:vimwiki_global_vars.rxWikiInclUrl. + \ g:vimwiki_global_vars.rxWikiInclArgs. g:vimwiki_global_vars.rxWikiInclSuffix + " *b) match URL within {{URL}[{...}]} + let g:vimwiki_global_vars.rxWikiInclMatchUrl = g:vimwiki_global_vars.rxWikiInclPrefix. + \ '\zs'. g:vimwiki_global_vars.rxWikiInclUrl . '\ze'. + \ g:vimwiki_global_vars.rxWikiInclArgs . g:vimwiki_global_vars.rxWikiInclSuffix + + let g:vimwiki_global_vars.rxWikiInclPrefix1 = g:vimwiki_global_vars.rxWikiInclPrefix. + \ g:vimwiki_global_vars.rxWikiInclUrl . g:vimwiki_global_vars.rxWikiInclSeparator + let g:vimwiki_global_vars.rxWikiInclSuffix1 = g:vimwiki_global_vars.rxWikiInclArgs. + \ g:vimwiki_global_vars.rxWikiInclSuffix + + let g:vimwiki_global_vars.rxTodo = '\C\<\%(TODO\|DONE\|STARTED\|FIXME\|FIXED\|XXX\)\>' + + " default colors when headers of different levels are highlighted differently + " not making it yet another option; needed by ColorScheme autocommand + let g:vimwiki_global_vars.hcolor_guifg_light = ['#aa5858', '#507030', '#1030a0', '#103040' + \ , '#505050', '#636363'] + let g:vimwiki_global_vars.hcolor_ctermfg_light = ['DarkRed', 'DarkGreen', 'DarkBlue', 'Black' + \ , 'Black', 'Black'] + let g:vimwiki_global_vars.hcolor_guifg_dark = ['#e08090', '#80e090', '#6090e0', '#c0c0f0' + \ , '#e0e0f0', '#f0f0f0'] + let g:vimwiki_global_vars.hcolor_ctermfg_dark = ['Red', 'Green', 'Blue', 'White', 'White' + \ , 'White'] +endfunction + + +function! s:read_global_settings_from_user() abort + let global_settings = { + \ 'CJK_length': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, + \ 'auto_chdir': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, + \ 'auto_header': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, + \ 'autowriteall': {'type': type(0), 'default': 1, 'min': 0, 'max': 1}, + \ 'conceallevel': {'type': type(0), 'default': 2, 'min': 0, 'max': 3}, + \ 'conceal_onechar_markers': {'type': type(0), 'default': 1, 'min': 0, 'max': 1}, + \ 'conceal_pre': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, + \ 'create_link': {'type': type(0), 'default': 1, 'min':0, 'max': 1}, + \ 'diary_months': {'type': type({}), 'default': + \ { + \ 1: 'January', 2: 'February', 3: 'March', + \ 4: 'April', 5: 'May', 6: 'June', + \ 7: 'July', 8: 'August', 9: 'September', + \ 10: 'October', 11: 'November', 12: 'December' + \ }}, + \ 'dir_link': {'type': type(''), 'default': ''}, + \ 'ext2syntax': {'type': type({}), 'default': {'.md': 'markdown', '.mkdn': 'markdown', + \ '.mdwn': 'markdown', '.mdown': 'markdown', '.markdown': 'markdown', '.mw': 'media'}}, + \ 'folding': {'type': type(''), 'default': '', 'possible_values': ['', 'expr', 'syntax', + \ 'list', 'custom', ':quick', 'expr:quick', 'syntax:quick', 'list:quick', + \ 'custom:quick']}, + \ 'filetypes': {'type': type([]), 'default': []}, + \ 'global_ext': {'type': type(0), 'default': 1, 'min': 0, 'max': 1}, + \ 'hl_cb_checked': {'type': type(0), 'default': 0, 'min': 0, 'max': 2}, + \ 'hl_headers': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, + \ 'html_header_numbering': {'type': type(0), 'default': 0, 'min': 0, 'max': 6}, + \ 'html_header_numbering_sym': {'type': type(''), 'default': ''}, + \ 'key_mappings': {'type': type({}), 'default': + \ { + \ 'all_maps': 1, 'global': 1, 'headers': 1, 'text_objs': 1, + \ 'table_format': 1, 'table_mappings': 1, 'lists': 1, 'links': 1, + \ 'html': 1, 'mouse': 0, + \ }}, + \ 'list_ignore_newline': {'type': type(0), 'default': 1, 'min': 0, 'max': 1}, + \ 'text_ignore_newline': {'type': type(0), 'default': 1, 'min': 0, 'max': 1}, + \ 'links_header': {'type': type(''), 'default': 'Generated Links', 'min_length': 1}, + \ 'links_header_level': {'type': type(0), 'default': 1, 'min': 1, 'max': 6}, + \ 'listsyms': {'type': type(''), 'default': ' .oOX', 'min_length': 2}, + \ 'listsym_rejected': {'type': type(''), 'default': '-', 'length': 1}, + \ 'map_prefix': {'type': type(''), 'default': 'w'}, + \ 'markdown_header_style': {'type': type(0), 'default': 1, 'min':0, 'max': 2}, + \ 'markdown_link_ext': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, + \ 'menu': {'type': type(''), 'default': 'Vimwiki'}, + \ 'table_auto_fmt': {'type': type(0), 'default': 1, 'min': 0, 'max': 1}, + \ 'table_reduce_last_col': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, + \ 'table_mappings': {'type': type(0), 'default': 1, 'min': 0, 'max': 1}, + \ 'tags_header': {'type': type(''), 'default': 'Generated Tags', 'min_length': 1}, + \ 'tags_header_level': {'type': type(0), 'default': 1, 'min': 1, 'max': 5}, + \ 'toc_header': {'type': type(''), 'default': 'Contents', 'min_length': 1}, + \ 'toc_header_level': {'type': type(0), 'default': 1, 'min': 1, 'max': 6}, + \ 'toc_link_format': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, + \ 'url_maxsave': {'type': type(0), 'default': 15, 'min': 0}, + \ 'use_calendar': {'type': type(0), 'default': 1, 'min': 0, 'max': 1}, + \ 'use_mouse': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, + \ 'user_htmls': {'type': type(''), 'default': ''}, + \ 'valid_html_tags': {'type': type(''), 'default': + \ 'b,i,s,u,sub,sup,kbd,br,hr,div,center,strong,em'}, + \ 'w32_dir_enc': {'type': type(''), 'default': ''}, + \ } + + " copy the user's settings from variables of the form g:vimwiki_

    >^6-h_(Gy>+`P~Ol}(MSnGr0 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

    #e=G=-n)*i+3)0g3U96 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 literal 0 HcmV?d00001 diff --git a/.config/vim/bundle/vimwiki/doc/lists.png b/.config/vim/bundle/vimwiki/doc/lists.png new file mode 100644 index 0000000000000000000000000000000000000000..f83234f3771124f80c268268073858cfcdc6ffdc GIT binary patch literal 430499 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.QVu=oD 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 literal 0 HcmV?d00001 diff --git a/.config/vim/bundle/vimwiki/doc/logo.svg b/.config/vim/bundle/vimwiki/doc/logo.svg new file mode 100644 index 0000000..0e92051 --- /dev/null +++ b/.config/vim/bundle/vimwiki/doc/logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.config/vim/bundle/vimwiki/doc/screenshot_1.png b/.config/vim/bundle/vimwiki/doc/screenshot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8c875c2c02f1c078656e80dd676badf727d7ffc3 GIT binary patch literal 29362 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 literal 0 HcmV?d00001 diff --git a/.config/vim/bundle/vimwiki/doc/screenshot_2.png b/.config/vim/bundle/vimwiki/doc/screenshot_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a4a1fc290792cf3b3a0b3137b6cdf827e1bb29c5 GIT binary patch literal 49959 zcmb@uWmH^C*ENc}gy7o2-Q9x+f=h6B5AF~G!6m^Rg1ZEFcWKcP=BeV+TB zaqo|N_m3W}^dMos1n#P3@d4?43`b+g~lb zgOC;%QFTu{T=8&Mol9STI%%!7UK>XfeJd(@_zngyATsjIuF~PdVeZP_h{=&}GrJ)B zNsBa4zyq9o%q?i&P!KytA-@<}?cNJxY+T9OcNik~!D8*EOtqwVfA!&+)KxW4 z6gm9XCqpWFh|gtAaG25C&*fMUKJbkw0_p$5OMNWc*joPs5;HnM4;a1;RshM0wwSTo1|eX`TG<=5Cn$IsQ>-7IROti2R`cxr+{;<1fEkyf)Ok z2A4Gu5&hQ~Hto#KIR;oEMapHtI&DvKX5Rl;;fK$G1YU_m`<}IvkKPvIu2KK<2?u;m zwcs4QAeE%O522GozyxZ=-zjD1-D@pJNL*J6S`S4ejW*j&G5$CN%ZUY=4;#X-@Xo z53f1j4FFz%G`aJ=Jx_01<}o75@p@%bbUU|_7Z(x#wjnt6=GJ1GD`O+r$83^4?9L`k zM8X&~^EQB^p{7VU?e9rN7;8ag27#R(1*vdoJiNJj*A0&FpI3|YWz`2qb;pDmQWYAZ zJs+&^08;ex8?*1LsvQR5o_&1@Xtln7M{E!PVUlM4ZA$#}aOPPR1;cuQbvP~eRdq=% zJh_XIu!g!!6_P{sr_*+D!H=!u^++`8W15SjHS3FQDDHfGtjJrE=k0OG=h^h3HFF!IrG~q) zix;$@)GMVB`bDgKRKVv&YuPN+e|#p_)6uWn9Nb=(KGa=A(Z2|RYu=jEDU&z_-^0FS zMYd`O8Dxp515lM1DuCL60vHo4zWY0bmc%p8lIuh51(FhW$4t{d0giRZnwHKDG=g@?lt^gN$foOWYFgGjFT4;*fm z{Gb0bn^8u6f_E%By@}{^pLL{n_Li}}KGiaEw1zM3dn{}P}Srx<_va>V`Z z?cZC8nE>KH&n|n0 z;}b0RjQMq`sf}joJ>H?V!kB=xHH6<9FkJBRf zoQmu@?fyxqA*O*Hetyl3vP)@X;yU>&C2QiO4fn~K?FwQ3QEYZkrA4<4Tk7hLSFjgi z(oqkcoAtnF+~~63i_n9YFLXNbkl!-kfcD{}NcZuGw$fy|pPT!j<$m9Akx9>&0Ae?TqLI z=8}frhMeyw;kQ4@s3sHb!FhS18gf+5>Vyy1BwH4KSk+Kq4ib-NiMpO71T?O*=L`j2 zt~XsNwFwo12@2UOVS4qcCr5itRxn-lz}SZG!VACBTJYEfYSUo}ECP0J@1oc*B@fxz z@$;d83~Rt*m34=kE(Mkz^MxT)fe&Tg#?f)=gQBQjVRYo_da8HWHn0(-Lqwc z8Yw0sYA8DCoQKb+JUchn(0;Tph=%4!Cr z&S^t;u5U3XMPRoHF_m2*)&_jj?2y7s5lOi9|$c$t1S zq`DR9=I%TpjH^MET(R&tsk{y?sT5uzkU;l(S<6e+mfma|;mNnOUj?^rPT3Y~@1b$OrfQ@Z<`q+Z(3!P)3ukR{ zCS_M= zue@Antze%v{dAx@_g>5S0nR5uKfrJ-!8~^-R}y)IZ7vrIMcjE;z`}I<1A(wLfVBKl z`q{`Ix_X)Hx5GpDKLmD|UxrCYdxo`?X;(p^w2Dkc4Z_fvjcA%`q@A!&AN8?xcs&b3 zQKD~rKBQVtE+3Gh&V_DD4DzH-$P49(V}inE9=bF*J+~I)hWK`y)|iX->3mpTxCt`S z95_+!4(Vh(rnGiKO~o6u)%bC~ayhVlRxD;zD%h)~qhHi)k1j(eMy$B^J$tX=O^<;} z2lpy$Hi^LiW)};}VoC9?rjkqsh-2mWtb)PbMxUc^zuIp4Q0FZ?&?%eyiy;k zDsjHVvB`rB13_lCujDXQKM5e0MX*yXvuzba(E00r2%~o{drt<@dE|9RM}2j0E8qT| z)@mhl0`7SwXgCuy7AbcT8g!iw9iLaZDbT>Jyl|wu}Njq2`fEK*Hr)VCp$6SXj^^L*MS2eS$-y?uPD)c@QMc zev$`Sy+Y28H+I0146SrgHb<{SuP<=4;=MUu;(@@zGg0%AiYkzG*_}x)1H*A@mhW{wbn5xCBLZsa$+2h~2W-|)M5Rkdo5P^uXFCfX{z&@CaNMl9DiVW!G^CrqX zk-txw@0eK?_d6$>1@o{Jp&=zO86{MQQdNkIFGTXYux@)Y29Hf=$1_n4FO7EaMDNoS zBgVh8^Fs(oeK31D|CUeC-C`P^#5w&T=SJC=xScwXlQv!)GpTfTmt=Jk8U?=0B){JX zZiH)z=dS#6IH+YpK)qiJRI5N(zLRrJLE=#v!7GMa=qRz^J0qi9iZ4+Wqpc;=R1$BN z$=diFF@B9W=Op_Bm^V17bJbE?k@9>XB*eWI^ud_02$ipV3{9YjvNXw5q*GicO@a#n z^LI`lHYdR04jK7;{1c>zlziitn61ICbpqKW{Ah5WagzMbwlYTjrvLo0&(@n-zIRD? zc&QmURRY~6v?$2|H&(;8^@(S?F-8jh0sn-Li$k$@tlCoG>JeEWA1~`m#TC>d&mGFB zR0Z`9b3M;c#@z;f=F`4ox_hRZWdG`)U&AI*AMezM5H2%8=JrGdJ}sP>&ba1Lv%gG0 zpW2)<{o79jnA<(lq8#qG)gKORv|otUJeC80!tYgF<={`$*at4=?3}e#20puKlL@r= z5p(*VQw#S?28aIehg)58O0YvsGVqhMda%fptIRMI7f8$>9jzywoR_o_TeI}_awY}} zUO}O2yLgkE$;ykFeff>W9Hj6M%5jj9hx@ftY#+aZxL9|Jj6C(*lYP9)@mBf^f)d<> z43>QqdUZu9N&Oi0wYImpE7Zrad#`zAMg-ci=ZAGySo~Nl z9BIUAEe@3mUrB!F>Sd*T+rGa~1*CSNG-lpg_$Gg0`2RX){KwH@G^s<%Ve53ho6y~L z#VSKfS0;log^>)K2tQB2cg-q8uiYP5Hb%*`m`*t=9k^Ya6Vxvzz0cYzVGE9aXT9Mz(E2wXt525*C!em_9ob7L56CaCt|oYiOor-= zLsj$lv$AU9CU5x-2B^keC2C`N=^^{^{PVK;2ILhe%m`A3V)t= z66axVme!fC0di@sWhR<-41%Lby%#F@rGoN6_f)SashbH!T~11uh;mtW>A}z>{_OOa z6v?THYfB>-sZ)3tsCxd>#{V(K0fGiZU}#w_(da3CsLEExvof?-Fi>tDN{t0qdkiud zF_=XhPqp~ig$z5yQGQdSml+6WHB`ou)Jabh(3T1ZY=TR-&PL>2iLLvMzZea#|Kx0} zAr_QwEu*nXwvuHcR39@C>Ooo$TJ> zHAWg9SVC+Jb4Xb6(>dV7mNE@d%oJzik*1~39F~yatxWaCyzObsUw5$rE7S|lfbD`k?Up2=t1Jj~wo7GxA6Rty2snz`s94Z5<2 z8NMMZ-fmUV)mc1Hy}9|EPvSl292B~>&|8|E8X?B|eqy)0czudy4Edus&M+8A$~+h) zJ$H)ES$U%hZzo2{YLAFM653f>jQ8w2rZ%g1Fx!XUeg@?J6OpVQ7*GIMDr}NvUS|dP zf_uk>Bzr}#7R)({RBVD`!?}JJ3haclEYKo{MAi4LQ-{qdBm(G9X3PvZHhKW!9k{b= z7ZB6HyWv@pbig64CdFM7?qGGb$e-dS)k48efLf{iHYSHGF!{HzO-3uT}SDJa=w!R{uYp<)Q* zI$kK(P^Q(_`%<<|jsES6m zsLr(jc#rXr-%_#dS4h{G%Jgl1zAe&^%mo(bfQi(82;;!n1Vfzdyx3h;nqU09EBuaP z%)#^*j=XadI+2IGv#g;I`%Rvbn&7J|RV-K(!QyI3^gTR7ZGuL1>ZiB}jI7ps9)6?P z!Ql}TQxC}1dlm1=Omnu%o_`z$kU}#l~lZ;nF;TbiWnDg6!iz`=600 z83QY)SX(|9bv4hLytXd9yaIKBmrWc_zCo&UCtN26s*?>7D_xAREU8eup#@R;!BrgWIN?w~(qHb^l)Vgr5BhOEk&JV%llQqx1kh|8+?Ch=(L=m?(IcNv|yM+72y zegDjB^HcIhI3Z1s`A+PSJ*YJtsCHRfvq7Kv(RT!5W_1w84Q@4qioglyw5JbB^!U>? zv9-bH78_D(HCxCG8U%;S%d7h3NL}z3G(6uF!lon@t-fnAgr>#YQ+H_SRW7tN&gx!j$1PcYCgRhYGwIq$&b)1#`l8!leqPsnTgQ6gl+7gdrY~PLuyx_dc}BkN3-zVK za6tJG6;=N7eum0OG4D3ng;_rGcFy*PRN(K|2GMHQMwx~|BEj7Amyf*rMkuVg{QggN zNx(bcw|fN=(Df};vAH~s^EwGVdkXY>DIM7Dyr!fIK&M|j8idFAYzr<2v`K0RdvG+L z96zf65-r(6pXr`@k&XXDoiwT@&LAT3P~$kiSH^Ri=}3G9h~YhBu@=w%o@5P(^QU z3SUtG)dg0|pKp4F2-yEhz_j33H~4Q3Y)m{LIowK7wKRy>WcjB{Q8yN+^8V=UwY;32 z)~}ZW=3P<@%`s5bR)4)Y$kB0JjOi+-#COgp%C;?Kqwd5?9Nm|28vI3{b!W-v7KRxB znzPEj`!lA%24XYWb!Y>adtT?;#qCl?+FpSw#qHe+k5>joY9 z%Ye`+4Ee*cV0YBLp(qt{orP#sDEK!7e#QM<$!GOVu<)roM>1xwD1eGHYV)oLWtM9a zGsR}mEG7mslzqj7Bm2RkuzXYXWT1i2OP;@1CPpr&VomG~OU=7yi_OIUFs8&VWXvXM zQDmFrE{tIGw zX-X+}1t&0>R!#P_4cQ4`6hx|SvLS2gCdn7enf5G5^xk=DdEcYj4zRxCP#w--7rZ5N zme2L}^+Jm-mj@kE7g(bElY7A`fSpf+LAtji7>l?+kMaXO1R9q+LluCNBru#@(fvbj zc^~%hwa8bm3*IIwb?j%$DwolPVRS8Mj<)SXLKRYg88`fSS(DVTyVrn?Lj+bUe5}cN zHgwW`rLYcOoJ3VzHJzS9#fM#G^gSa(1uZNACaH*&ySa5uDNfKLD6$klCbQ9H6QVH4 zFiAHx*i89zoxc`F#TX1P^yPSOT~(in@B-B;+HEssE57j9*7!t(ntqn4OUENFM@&7R z9}8ksqIUynU$S&WvnA$NmmVK|FaqjKh?BqNgFb z&?3Y)hN{;XI+FHYdJhVGf3ToE73`MgwLLwrbIdHAdvU3BjVj`~p*+hxXu7L`+>Now zQdAd=QRRa%DVjmTS0gbZ$1=5AVW=R}yRnz+mxj;JNfqpZ9J43n6X+8_O0+QSLDnB8 z4T(Z*enIQX0iE=LR%5WwV~`_rzu%|3UoiY$!~#tUWk9a_5^{mQe=-wIBouCu|!C$uGww z%=wLIr9SL6@FW*8t9u}Z^IH83yXS2&yxN;QAs zS$k2Vrng?+7nCpkwRLSRJNQQ*Tbj+Sf@v9)NSVAyE-rDd(>ZALHN_2gXsyWfd8K;a zoio6HA(>=Vv~ypJ^lL1)S!t;AHV!Oj0xT@tjhqPfdzf2@RwJsk3UzU!Ktp4H#8QY_ z8E>n!a2)|v7oUKF5R*)?@}RF zmiqjw%|2l>f*O_CcSYb*fRz=Uk!E4WdV5evMrzK)5$i0t#SeXrlz+~QqRVu~J^))o zLyz@@Ig=PHDYVq#7@nuS+J{?lYi9s}+AB)V5n6>66^p1EeDS#xA(P13h^DwhuCrA1 z1NZw^!lo$(TZ_`KkR*XP_)k=ur3~dPK>*fUZ$XXwwdkk7LVQ4P%FrTb31W~=nxLA* z#Xy6?*YyF7j(~4xNpf5^kUNY;1tAHdva@6)wDLV$2cYSN1eyR6MTVld#KiB$kmF}) zbxyf`lp=pBhdqK;eIx(WQjV3BMs7zQdr|+&yKip(v$g^w^d}v@5_k5cW#+QEuXPq} zy;y1GO|Bm|oAn=3-2l=O5*B6Dh&t^LTd1ldclw6c-N4vimrl93_ju)&cz)f|f0tG! zI@cM!we%deDlL6TJFm-G6LafK%Qk@eEzu)U$g0f+R-;z1UVUVB!WS&svkcp9%kScA zeIlCU$3`3Eo;;*jcB(x$;HEoM_O#8sMHzB&{ZfxKiB+#rbZ(ME;{McK9SAS$UeFLA zJ6U~2-&;tQ?FYSJrQ5$C*t0C6@crxqOf4f=U2_jGhchJ_$s72Jz=;K8ug{kG91Sq! z3ADzBv2^;Ae4bp^P`En9l0;A7;Ih>Vba01XE4#`nL6XE$Z%U}46sVsDW}sW+;q5%t zmk6K0gwaOw?%nZNceRMf<<(r$8m0J+I;gYU*9Nv=KFtf=keE4l6bz1*r?KWpz&tq-k>lanQIt$05jzS3bz)j;8kO^nR1dho+(p zn%-)pNa@r1!m7Nul>{0dP-j-$CTc9=_`Q#W@Xw5-oHfReSPGm!hTDX)Vi4JEJ_%+z z+Pn))Q5>492O6$1yQ!32n)m&q1;ADeVfKizXDS6h*iUa{)~47C5d+86g|e(*WCuUq zP3^GF-yGcV?hx*{=fi-_c|ULn4sh=*IRrM%*Lw+PUcxDXb}lBXO}F|qs;&SVC;Aml zX6=M3vQ*Zy4CXV3Fhn@;QSXVFU%;3IWQkNDH;PzUW;=kOQn_P{8+nL9zt7XAOOo2LME31-NsKf{Vbl@sIVaOU6#x=uV6m? zU1jswm=|*!<}VQAtFqkf~>f{F4*{2s&Y zqhV1m(%WhF!O{<;@lI{{Tx+Q-83@E?RFp3z0vti^J*A8S0``>n zuI#=$hC;mc0b2G543stuUO(=tTxG)?M{gza4I=eNn_{GrGSecY(boyRgSq8NdMpF^ zNqS75lmf3Koj&}A#3a=IK=Hk9A}=>;z!mLQse7F8LQ6=(T4px4Xu|rx6=b6QcsRLY zJ!b7(+Zuy&0+5_$Z8!2}G}Go6z5>;{hudx5y=>UpT)8@3fds>hxwPw66o$SjBfj&==ha+33dGC58)J6ttt!?;ay6XBSbSG%`wfm6;gP|YpHki2g4l=jd z7g>CvQS>n@+VaoyaB&^4-S~O;!yK<^W&N%x8MeN`vlXpe!3iIHZQPDNyX(i9yjsM+ zmqla4)H(Dv#l`l8N9GpnW-m!CddiAboP-i;X38)=Y3XB5<2$=MxV!H&oo@3?`a~HJ zJTzIjbjQDXgy?V8S032cIye?5P}LN{&zxO*HrRRMWJi&ao%fOq4^|uZF3-r?Az$TD z1m3&ocX?hn9}+jwDMxZkGJ2G%ML(h9qw0k2) zhva=ryNR^}Yc2Jdaa}>S+hdYCU&2{(F9E+WZ+{o(5^X4Nr;^*Pw{L5Ju~b_(t89+>_N zrZ#NbjXVo1>8sw^)ol6F$ZEdV+=Tk4W(VFzoR4RUTNX9z?~iRU zC5(o6B~|i$V;GRio+0I@tp#3o$$5&cc$8MetG!x~=z0_inbIR7mQV>uyCIB|>W)c9 zJoe_}Jo|K0$;pg4zE1^PSS|M(jPW^^0a&-@AR~V!WS)j6R5@vFsOkv9tYZ$dQ0HQ2XO@D;MeI&?woBAt`;>LFs|1yhkeDx6ny848= z|DIH=FOM9mkL74(CF#Q4P{oQoDwFqT+QL1?s-0bfJAa`F4F{hJKJK+Uyk+>j(C_>s z?${42)Hg1lqPObNT;kw_1-rfZE#Gh#uTZ03iy1vK<3bI^jy{hfFKiME7yCg_sWi-# zwE7)}x(Yf8w4yN$U6^@g(aX8b*Ub+F9miW!&m~L*Ga5+d+7^P-9<2IAcYAP=J1gQB zE0wfd0lWz!*J!#|b|2X&L+!@uB4)KC2Tj_Hze7JIc9CEfIVn#xm*6Gs5+JKz?Q9F{ zUePU6X8hd43;XJLhT7SN`FLBqKa5+Tep|Tug5#H%HoCb$s>0O0TnSqxvGpC)=(9-E8B)vc0R)TvO)vdk@^6{Vk(M_cd?y+=Q(pAtkB^ z3Q|##s=+^}#B>#-zvJ-gQ&=6skuYYAegmz67z@y~?=#PpH)>BPOU8PF{f%Y!0w~bnGgDf zg{1`QEv#mX>y2^r4iz!6CtTaxL1T$)9D&T{G7CwhWE3QBfKF*y`&H3 zfK56Gy&n9IlN9llh5R@Y&$&yUM~n8>h6}4#MDiF;`7z#EFN2Ts2ggpy;~=!YvE_&h zMiXr?Y&BNOVt>=9?IFkL(iiS$Lma|j-W5j}!5hO#C{&)S&;p6#g6t$E{7zgH1BiRP zVU+!6&>_FuX^Qy@*-mw=%B6>l_sOYuxYTa`?C1($fBy)7Zzk zUQ&T{>_>0)ncDiVE3$sCGK2kRjf}O1$djI;-|8B#8xKzxGT)MN)bt(o6KxN(BapXs z4z>j0&(=-BXJ8eiXoBhxx1E7R7``t1_){y(^K#`zL)VY zi*rL-Gc`LT*ShnrzA^|Hc)g9e0y_M&!=06jL4jYp6}Lev5kQY5bcGXhmSP7$Gpgh| zgO@^2b@>+Zqmt5FGcn_y+RXasqg?94Gu4#W~t#u~7msmU&MZE9kB$K+X=+$Jd8xlMc`^ak7M zIdM>v6?Y~kXb{&9cd#hyyJAadMH#T;(8}z_%RC#|^AL6&U{1Tsn*2fk5`wub>D$UU z0$fm$U~8tERzITWG|wl&3lxQXLT7d2t#}ed&tv?29h_Wzj`U+Z5LZ2d<)1U4n?F7~ zh`eWI7s&O}eN_H6iS&8zsl8=I?Ke?um+58KCl%5hp;P*&guP7gtN8y#c>1rj^1q)w z75-KG`X5E<|IoAke>R(1*C7?UB)*FK65qAc{_#1X0t0|K`t$eMmePL7ZSZBeoy~8U zieU&#wJ)W&n)wOiWo{p9L`8AgmRGNV&6d|@rO98ppRqLjF9zK$d9M}cIy3v?2(W=F znJPj(eQTUTC^GsCcW0_(rh=)_{=~~g4TnF$l)&NbuixU3cKs&H!@|z0a|tBXe)mb| zqeG?50T)+IOLw$9&jdsq&rrRs;X)(#-JBJ3pDM{o42vlp6+FJ>83#R*fq42~oJ5G% z;7BqI3)J+HZ=^m4yq)Y+5bxdDGcDg30%Ii8+nxLkp1mGhh*_*KOaYzU^XMQF6_1vW zR9ax?X^GzixM)c8$Oxi$SEX6mwsrJ&tVMnH+!5HztEmBtKyxbLJg>l9rPi4H;Q^H` zLAVb9v|E2UEX@`^ybKxpY)xOj?O~#MP(%!AZAGFhLVt)$S)gGZDdny|nla^(3%k!Qw$$m2!VxZqb_=}oqV?atA&qH{lV#P`&?a*W6Ocy6zI z-9lJ=2Kh-I=f12O8caDCN4u@!p+I_-8%1?cwtFYiEZ6aNPI*V|Fp+rS-+_Pgb;-FT z760Jt%lppjb_&{!PXcDSpqs!-s=OErsMr}kf-_oInOWh1nAPaJ#5v(?svX}toL=!6 z+RkS_t2l42SHg5z=i?lwgF+HWH@9)$!+Nc@ei}A?r9lN(rF_nDSC&z0&*)dn3QAx$ z%@p3x?P;Osn>G;~;WHX^Q;nSR{~gCoL^LH%EF;d0Gd-Hwx=mr$*SuGiQQJU$Jrikn z>D$Eipn|DXk0S$qJAL>Qzj@Kwrdo!uNF!GYj`tGPLtj12ii_bZnn!I*K@v>zH&+u} z*%P1h<4N6+gZVfG(x2R!6;>kD^P@`k5SUNgl&*W=68hYlFe|0@6Q(~?~j z_Z;(U-sViEptQsEVD=5K@woY+sv0=!8Pm})+*$N0H0nAG&ZIWo+xftJ$*ME;ev1-M z6|6~O(4Ldz-TDn3_^i7+JrnbYucvY0ah&>s zMQ?n-J0-{>;Sw73?Q+w;TCgNwC}U5kJb*X+ISd!+h{JUn)O=JhFIOixaw{j(z{W@^ zP;<^2*H(>Ug;_RSMzq8lC3Lh?`;~D|iEE5?Vqy(gtIf5hZEW3C_7W6f$ak-TKzhv8 zdejar`u=l7=9@Pun*2?-3KMtNqYRm4m{yOhqmhXTz$hjKvBIz$#uE3Dlu`62$Tq{M zPE5WrduQST3?@b_QrovL!>X8?HzOc{IJ3$)b6Pr}c2lL8#vwd+S` z3M&#{W8P1EE%OJxz(-8o>9A|x&a|DDjiC(2B+kG($H!h}o zOUW4?MZ>C5M=Q^RQS{=#C%!t@$?f2$u#guS|rcjFY3Dv0e#Y3o}@u`VhOz z^PH^k(b+rirDBKnO|Voa2^=I<3fz}(GqWy_)e;+wFCx#9$Ps{dyYgslSA(${&&xnt(7{a z!(7yvKuoR0ns-CeZ*?r2*xH8dY`UehwH8)@16m*FgwtevjIztMdxWVy76dEPz` zMAuJ_+-i{DZeytLz+F~tFOtMeuM#9bSZ#IO7-C~d;=PUWXK3$vaP+NQ4yQGvz86EL zcr$jZ9rxPOluMrNzwwR)JNe!7@C#bkcne(grMGBzd@#X!J2wULZ$I3lEG06LkL`Et z-kbaS<}(f1Z^-rJ36F_MnC33o&~!?UsXnLVKqt0IbN&~Hm>SAf_Im6TKYG9xOw0!{ zyhisvGFJbh(!?nWF*w%gL~#chk}AegcsT!2*=)hqU>62nAH+=^y}>m?VP?Cr;XyxG znR>>LelgfcJnhL09)2JI;+PnJ8krvnAmY0fly|RjSS zzl6&yIT`jTP%<4vd$c(VnT?KCa(}R~A^Yi1+~QLgGZMd+U2|9AQPS^r*5G=c;FpR` z{1Th)Po2$AJ*^ss>yyqoWVb5dMWk=Uu``Kh9G)EaSaB|^M`bn>u^|kcU~k_p<^Qrj z-*Nqb<6!b4JcXwmGJ1#H_Wgmjf=Doo*+^fC;N}C_HnP4#WlYKgJ{K+{buUp5VU5wX zuKsl^Pu-8e7Xg~8AAMXp9#a#UQh2jc!}9viJo@wjPZjOM&;IK zH|p#txKgO@I{qXpkzPoX9itV{JC&)bXmBgBD4q}>;n3srlaI!~Zk3;>*afPak{8kWLNA|+kMBab(Wa|?R}w2To|wFX%lE4gSHrUVN_VO@ zImXg&30>Veji&TX9}gUW1TOVu_f@IysvZ)uMY2s)xh=72ehv`w@_JGN1?N68RGhIJ+?G zX!%mWEr6-^&@`h=qIHLI4bD6t3Y8RS`nph>jc*{nZ|x*hvNQT~yT@+_(;Nbe@Dt_d zqjnPR8r|+0udf>(rXy88L%hO0xn)$NZgH(bky+f!x3oz|MZ3hp;P@z0Z?metF@>?J z&!es~Mq`s;!cK5Vrwx5B190fB32w6tGL2m1s~9K~Gt2{R821^2@|n0r&j+qv-uZXL zAd|uo`1K4&LU2v)JW*Ze(BchUjlO-9>cP|DE8R zEs*R7D^s+elP2wZ||Q38bRzyxbFoCYF|%%IC3NJ%au8q(o{1bw2#Yyn>(c^V9Jr ze9F=qSGKcI2A%nJZ|#+LCsE!T7j9EOW^XU1h1CW=sC#F?*7*{oJa_!K7BNc{_)-Bz zC4kO}tn8^UDpwwT=$;F9>f0@l17sID00MXq25NnKzWZ^gq2D#u$OjwZeUY&lQjS@E z@Gu__uzT-yA%!y1mPvFFjB?-YV=x_ZbP&yKUgsNFpGtVTn{$QqE&KM=@+j>D>2zSS z!oXTsR_(!(uiUH9qO|UyZ7S_TKy5e1+p*IR7$ zuPkRyQnE@lt^SpZD6#NH?P5?W-%THhHlbyswnnD9XpFR!ib`b^g^^OydLltA-c86I zgW-OWk(}O#vFH3yyTnSoeeWNA3wc&&yNK!%Ouao%elp`M4MaW zE1A=ew_CGU*?fZNc>oU5!wC=2nLQ;5g{}o%JZPUCmrMn7UrTQLg7;I z&ExKtx_Yj^ZQioM!NonBzK-WXKLO8NbX#CdI*awc@8z3K@q1r+0we5Omhv-H6$lYG za8pN^67`cN$38Vi}#|GBRh<0|?ZwvQ{HV#K{)Eu0*e&ilc zoT!dd^IAuO$U9lvjl`SZ$HUlJ?wTWA)Y(`x7lG}@D;SO^3+yQD`u9!vwv69&)av_9g)fP{^t8m@jKD}gJY>t znk<@6Am?fk!&w1m&q8E9zeXX+672Aq3e3fBQMD&Kq$O_+ z#wOpcQa8E@>z&xE_+c6ZVOn#;{5%e=Y&*t zX#$*;3#{ntAvOX>vuYa|G*W1m$J~O;7*e0Wj|?`L17qaFQ1owjM!Az4o%{IC3KGBD z5hS(6*&Wn3_ZYK2TIPIs$YPLhutXlU9M<6ZmGlJ?Ped8|+3ulcfa!@Wvvt!xDc#fC zo@C-azC~;1y}1oQyY5BU_iA7GZ2CA|JgPmiR7sYeg{ETPuqon)s2NL$VXmTvBX46> z`ZNVG*cp-AHjna2hG}H5gM*z0--(j^H2nb;}rYn?&gK67sO{R97E?papmaxRK0`ax8?eyq%YXsMqs1T zlo=vkL&STNIrQauD!rvM9LAO6L-C;y6P;cLd*~&))lSC7ut#_NGCSexJ&8iv7i_;p zrS2_WbXH;h>2?jzqD;eEmOYA;-4yVaCjf4L!G)vwo9xi={+(Duztc+Q!KzBLe4Flx zLz6RyT@Ix!BJTE%f#Kn&}I}Xi}^6Q$-k<2h*cM-MWDEjuM@G)^mo5anSiFm2$EOm&4 zY4Z0jOOMjSn!>jo^XQ4y*E_6!gWDscR~vjJcBL8hvn0nUBp4r*6ADdd7TJ!Q9=Y0F z;{A81ES3S?XC0Ocy|E=w%Ps4CZEX}^Hk_4fw@sffR`Pv&4konfzA;WQ?|js6NOA|E z`PMpO&J;NE#yIX3KG1u~9B*fo*i%eA!zr|15V;(m{Zc!`_d&nW^O*`Z-QaAgWc)^{ z@*D*OBKQ;LACChyJSz9+&)4Dd<7LL}*A?z`uq^$$(Rg zlliWtlXiJy0Q<=DDS=+>65#dE1OED7fW`Rk$>g)TYuFfgU=d^-F$WU z@)Dx_V51Mc+VsY?OHX*;F0raHJKc*)(%tssjI?cG!NHBu`GfH$_B55vBHBr=pxLk5 zJ2)H{Rafn?<{d7jmrfF*t}FVx;p2zf=`=4(?H792{$;)T5+|>UOiaE0lrZJ;hAn*! z6KB{r);eofW$n6sOU-qkpKAOze={rXgO}JKhUfH__l!1Hvrcy z*J-Av;$oZ#;Le(2EfjG9^0bZ3I1pMzZ`ISrjqz7|<<8l)n+LKTfiD&}W0W)&OL;I@XZ& z6Z+)5hL5NsWLEk%f7>h0zC?&Uo!SXz%G}pKyn3>#1qTiAcmi&tu&V;L>iwhg$&UGm4-;=#d zQrUD0Yayk*z)RQc224&hR`bPLb=2_PE);UD7BYb?^;MWvW(AO@4(@==Gcm4=C-ffj{IecWDx2(hlGOTynuEqa-?fL{ z%D3#8eK&O_i;NG2;VzihnAb_hF!$4@n|T`17nsY%M4w`}ynHvxv#k~OdoU=3GTw0A z$mf0~AKh!JW4%;tOMlXI_m|j0%CL1spgVsKX70hn031sPA2Vh;2m+S)p8~yT)k!FR zdl+E;+Icirz%B;l=GmZR_1QG?hs~^(?W2<~q5o$bLWLnuKATuoKWcK6(^MvZJJY)K zv34#K#j_t6WC5;A6f*$o_TZyG^AJLdyG_eBA*Y3AyjXtMZdsiKMnBcJg*2kJRU#Y& z^J?8){9nAibyS;Qw>1idLMc|HxD_qM-9sr9mr`2X-QC@a6o=vxTCB9VySt^hYk=So z9D;m-p5Hm|J?9=-aj%%GVcP0(pi%J_0@xC^2`?FME1YB+Q%o-1udPR6qX)=i}@aAool=U58r>L=i2O z$Cj=a{kH{80)4#l->!r4U$#LnNR&rf*(_+;wpNmqHtwoZ8CXPoe7VpMbDaByy}y6r zKlK@y+Pmrt`UG<6{Eqd|B~EAVHLhpn4dvd@7^h1Z`72zc#hE?h*&j&WZ!Q-0LmI1F zb8ZSt9gMxmDLp85JPi3KR{5Q}xFtosvFVI%&4lpbO^Q27lJp+o?liSF5GsU$T&X(W zzbQ=i&Qw;B*Hjag)N$#Z#WLSY**4a7p?k0L@hEV!jO6pf4+X}*U1F#|kv<=8lxp9S zZQ-sB2xnwfH4_Bc5`hk_Zc;R)t_~_>O>^t)&j<+WP{OCETgokILoD$SmvceVbm+TGQ^)F4c=)g6G*y9Ez=0g?C9rSxB`~HK!F9PV-`e;Lg6*YEk)K% zX`;&YuH@mq7%Lhc)eAm3y%9?IqbaAJl%<{wnJ_+;mXd@buM(Px7=?%7&V88TL$aDX zgGC#09vr&bBI$ND#OvRZpqCwQctyC9M2g?vbPiy&lzCGY?wX#s>xi0>pqQ!D?O_#V zispJx`dat49cj7Sg0KyDD1LwDC-*y3Vw^8S?M1=}Qb~iEnBokXXWMogRdrWLx2|d7 zk1Wc&?;qq|{K-{d0k>FnFyu!@}X^52%$2B2kUxlmL~f#o!eK)4O!eOrcEH3~_-#s_oBJ!v`OYA&qxaoba!0yk5 zYV7%K!RTq=s}QjAtnva_#MAECp*vJFENNPQ=uH>5tDk!$Mes!=#LNrD=|!kR0@LMM zm8#@5rgddPm2?I^(wqnaVZk}ijuoofmxSFv7jGj&%|abyI*+JlYQ9*|DT%5SkgXm3 z?!06Pjio%ePDja*ASo3Qh;Eii06Z)*;y3WoDAHn>-W9<7$``fyn=LZCBw3;jX=vSN zBLU08A9BV|vbyTOx?6c7Vy~-~EqQ$F8I2w?+S`Yht02-PA}6Fs29?RJymspsx^F4c zyo0W>+ZCnt=U@WHWZh17(HmMjx=0)Z1aeq9g!C9lcC%h!HDTQf0$q{HucLFrb=~5c z!Iv9LV)8C{4@>M-PM6sq3_)rFMmn71A$dy{R2qZPPYJzo5x+0@f}MSx*%R5ZX2pW0 zX3D)j3P(uJ8>s4%`Pn>s!YjETCEOpk&~qm71p5QK50jJ|dHN2)Gcn=7X$|oOM*1B7 z(DRDTS4F@GylBH{iYU;6ct`S>OOx0EOOqK{D^XWij6s9CdX=+go&Rp;w^;S}#%wLg z3-WzO=O6BLKi3kWDu?=JD3uzCRNFn7>I+blewfZ9&*6}0`bV83UX39c8sWth#!Gmz z6_GPLt=i=_B`EAYYMZ6GrC$d)-%lB!(NbxQC*|uS)jF;>9EII%7zWv^;4HgaaKjR! z5W1GYTfgL=vt9`su?@7JT4&@>erm1?R5uho+vVdt9_vkUPDRv>bk~@FF=Xyk&Xkp7 zvjZXWx+kwwU{ks3_{!B%q5dN;7I=Vl^5^UjnvF>GM^z*c+Z0ofMdG&=bPSWax|o5E zC+KIVg%EH>Qf0Ot&+s-YZ;Qrd+ffoE-TC}-rACP>&sJ!oby>DRGV-B&D7gh!!oH?M zO1ucK9-+bUVCMhoeUU(~_$zv1{ce-{2l%g!=VxHPZ@cr4Pwu`0AAhjO2*1D)Yy4aQWS8n3-n0nPSInq}M- z;xAs|^^CCWpR^YtnGmyLUz7D@l8tW-rXGv3(M;Zt+C(;?rykXN1bf!el-BNZDx?!W zL9->^dH&G8jDo7V_75j6oNmsjJn5c{Zb*B-hQ2qqOI=8nckT2XcZ()*+8$ut(cQ`; z3!W~_Ei2zms35al^U^`=$*&{FZRkCXnH0t6V=1P)HgNm`<#a?rS=w7Obv0Z^kf&!A zI_bOMLEDV`ivrlM zp~Pj#YT7Ws^g-J2G*dJX5E>y01=LbzbmzGEmj;E}Ep{a{$JiSoifV9$xEKV%hvm*k zhQ>n-wHA)6rNgvSrAD6kktOSLPNXR*YlbfQCwn2#o0gvCUcLhq(*qNHZAT>HFCIjS zWCiCSGL2h7*PY34tUx$T*(xQq(8jk-8ku=4xWU%+W&i4#{2j)ZN>-|G1W!QS#Xf9bbJ+vVRIml4X4h+d)p)L&+7*M63Cuq1+=E-fYqUUvdKUAqP1%*QREy$U@ z^J+gjk3I=x6pI`Q;%>c_Be9wbC}FhK)wpj^D>}yIpw`OmHU+ZeVv+ky3 zEZsu(djp`EyKtpscb_VEpMkKyq@2GlY8LA_J4&S>?&fHkv+hvz8+f!4J`a%hqkNH? zXZTg@+(7`tO<3A@y_G-5b>ZiHNK|3yp>bFBN% zAOZ^Hh}(&b%(xv__e>>cw)f^V-wp*;6`Cx#DWu@p+JzTD2kd$)8HDTD6BL8wKBBUn zypbHC6dU{{Wp3qkln9XCUfT!;`Ua+83gi#EgNzmIAb)Hbyf4@F*XnFzSAKfm@J!O; z;s6}$z2-{Ne_B-#rl+D<@9tjHeVlC?Ue6Lb=Y*P5`1vq?c^e|$wAi7bI@N3Y5K4_a zeRy2i<+DnXt{K#|X+mb6!PrkA+=HBGov`&(v%g7;t8lA?-rpr@wWrW)PMKYKYPdK({1=RCWJBI3j<`{ zW|*3iP~;Icjl~#k=zbXdIfv_eYv|9&N4XMBDnc!E9Ol_Sfb!|p1FlzYYU?;$W)Rqc zvgr!ab{C&y&Fc7z)Tg19V_05K67xKhlK)uIv97gpBD5%YfI^NF@vZ2Y$0n3BC_ha& z+W0ec77b?%qs_h#tKNqelhqdNNgXiwIt4%sG(n)3q^h=R93fd#4715%6UqzlFEYuG||6={R)cGIl+P!k@f@mpN}I%zEIujWYRiJ?ZQY7zeU^U=aQfT&j1XE zg9qo2K5~_z9F?%}>hyS;E{`u9v9n-zLi7d1TuX)-G7e(Hh}~rdA8i3PJT^jRNa|Ut z>mOa5od^}V`{)&nsx@wYsK)ju`@122sXQwfazO^?t%q{hqD_J0pQrxIy8tj-F|7$% zkyEso^C_`7vujhrT;(_7iVM3E$lsh(NU528wC{%ydnse(n}NBD^LO%IcHzPb^;+ZN zk^w!rgBVAKU4wHW`jY7pI#4nj717=q*kPNEXX*f<>Zub>=#ob`!pnKdkLATF-}aCd z*SNd4ofGM>MCEqZK^*5T^Y-a_`Nvo5E=QVbDrb^!zMN1Pto^{Z7YehvZzY>`M8*zl zAW*`C3?_94MT_}48q-vM!*Ls85Wy6d51SfqvP2*Com%A7rl=NHoh9J$X_?FQRY4Q7 z{k498y0hi%P3FOrT%P=i!)2M@m4R`7vLy5=9Q*p}OA9C>fW#*W=LPSLS1RPwTQ7C8 z6p=5#&)-*5!{M9Q?>F$*y=Stzs9MDdF>A~<-jLJnf>AogK3@3aL+23UTSAct=qm@> z*DmM0m8SuW`ArcWm)>(~5Hs+Rl6oy;|D5?$Qm7fPWc)T9O1uBqPyVBznM+9K9~bSq^5OXyOkczmA#u zJn<43pESDg;YC%EaY_SIg??h==eQ##P-reVF_cZKkCcs%mUztbKy@~8Zb1<5HOQ9geIJwR4vI;6c-e!akYVZVWXlSh zPjd-3^fP1|0hu;#+2!!*X91_hNAQGn@Zc3+mh&}TF7r;D zxV><*h`M|xe~X(Z2as{zz`OO${{;FGtOrB=^(IIBr3KK_R<0mt|N7ZTni8}l9GOd@ z2k=Q2#>A#v%`hg#Oik_Bzz7vklF&)unOU&x@VdP-+U^uR!1~JC68YilQ{CXpcD;{R z=Za+i)|=v}NK$s(cl`J*-q5& zDF2SAAdT;OqNB3VVn}kMwYHwyOO+xTZbhiq_OyHZk}Tc+j2hl+!Koc){La6Koh8*|DkAE8hhP(Qi^9wQ72XtZptUGq zoJzAc2BJ6H7kz#}IJlzGyJi6F{N!y-+IG~e-!l1@fL)2)A6aAB_@`9v@G z>!6#$diAdsJdM)*7u8k*NfTt)B8ibo+F{jaCYH+__6K^BqwCM3$##e8t6|$KvK5k- zVV_(MabRdVRVm8olB--I?6|@A*JO!aIr_Dux>I7;RjIl7q;-??79umQ9nyv|<)_N` zKgy*pce>By(L9K<-oKwkZfOBTxFRs6e^c%zqR)M4V(`gr#b6Z(1x1p#CLKfcXjTym z(TRO_KMH2u5^Aa(9^~nyU(yRpZ0C)$XSm|ppm}S|y7Tz`aNOs8H+{pTAw>DTV$D62 z?@QJ1`@{^S^qBWy?eBoRg@2iN6rdS{IBVrTh zl&(xDC}q|6GsRXj3#P}s0;Lpm4A+q9PTJ!=!=(z8n1S9M$qsIiIPv3Y0Vtkhef7Ck z4fEi9xvy4Zz(bj+qP$3L?x4OMzwBdkWUJ$x$jpo=1OGUOmo$)=Y?Dcvs%n8tS;|~z zsAGqcs92H9ODWa8oRz82@}(OTDJvKs?@c1@)pNg}F@ItYV+rD_*9Izp7F8c*{aV5Aneh2m^EGk|e$#}7(iW}U$ z`jutZq42izSEqd4-Mf$2EsJL?SLKZ2Ii{P2s*^r5#MqJ9`VNTXex6_FNJ!;H^F4}$ zGR)xc4d6Y&2JX7LcNsKku1Aqi4GxOIA5Bp4*2&JnRkq|6b6$B zCXLH;k8z|b+u0a4A_kmr@D!a#ski+>Ph90Cy0Pm`D$Swwfv3Ms#fADu0@YRLn@Q0; z>&~na9G*@DP*8sI&spKDF{K5CwajN8=-#d-TZ-n|@IS$C84}HN!dGyXT>#ubfv!IXov26vgapEPl?HkoLL+ zAxmw5OAG1a!j9tF%Moj=;KUe-3@#;|2qZ1DBz)B=HM)Njpl7qjlqHqz^73;vxeg7A zZf!+eGOjEe)%{#=A1eDzim8Bat5}hr$X@%&e-e1-hNn1k@DO3P6TXp2pp1Og#mVk| zb(IhTMYxgp$J_0-#&BdPSmoEktD;KM?|b@8Edr^*ktBjjb1tOpv4G#C=r6)kdIckO zBEPwo)a|o#jRldp*QV6ET@qL325ikKlSS4U6EK8L1xq9Uz(;w~H1BI!+uoQ+DsY+` zN`82Ek8+MG{-n16LqX7C;KPsbq($BwTaA#jJAmers6;L-`3|b8sV5|Tf*3U7zQm|_ z3+-dE%+0M1vzxxQ_m9z4{mU*Y%~kl|u@v*gevX%$*Odlx#*ZwvZbA5tDYD3W=rB7Y z^ydlkH}v_cjZ7gcls+Q$T(|rt3YS4P&LJ=ksUZ@DB^SL;p(Fm6=@%CtV%nj5TcNOP zs&O}IvdfoJQr_vxYFFld`#^JSx8HSs%rv$>8Q!2Civ@{AE715h?YtQ!kS!BIxuf*n z=(y09!A}ui$G_Bt$0kbo2xBjL>&0y%$yyERzYV~+n`o#VYb?4T!niI9OKqD8^wtNU z#0n=6SG@#}sp6Y_+>C>TIOA?W#&lyEU^S{XmF~Bo8@x8bwZFYY;cNBW# z>nUoW!i3lfZ3uQL2g$xuAg;)gWS0mKx3DaSy9q+5Q`(8gxj@jtZT_D=-Y4_)(7{dz zQ`TRbC2T$6d(0c#Kjr!>e3*fgGE}~?_Z;)|EXMJ$Hr;bk(Qq{w$7C_&IbB(!64SBu zUIM3bt*huhvw*`uEMcC{HDcj8GN5}LtHDpTt}XG=upb$x=O+jP5P2+eBnoPm+S}J4 z>QMt+5)rK3J{aYK+4~oB17qo}lh}`XXq6}^P3cFAYoB1>Q=mYT9S06IW zjksoK#ymHoZ@1^Sc({^qTInSI=B4tO)4_JyfvZWYs+&`}m74*?J8-B8pUOXxL~ts= zzT9f*RhA3Q6`qt!F@;HR*}KIg`eW*uaQwh40U{!zfGS&y*#C_2hyo_?1{S0-xU4V$ zgKb9z=N#8#Zp>#{GDG&M?qf;N5G1na@@r}6&-=>|FmBor0BsS~9}kVWe$!$`eBYyK zkPyN}u5jvSZ-0)A;+&&hzRfws1rr&@6#gi;TYq!xDH#H|nI7uR82l#}V5?oZXpSPc zk|k)EO<|KzG^HP})D-tz{*4~x@Ldi5)Qv5PpEmFvYy^4(0To~Xwzo?qXo^i@Ik*lx zu?e`O%c!1~md9^aTm95tmbu=GyHvdLbYCB01fS>$_hn>&8OE~TPerCsX@aWc?n8z`?sM0! zfVhlz%jOK;*Kz;8YrP)pK6yf#K8MN9H_p~C6-hZ>!S*jHW0=%3iPD&$vK zpT>iq%+;uk=grE+K0DEC)tnFcIeV<}HAzIVWw|{Z#xb{0A{IXdr?ul`SDU0#>Rvxx zz%rb_XOpTS+m`iMM478?df&5l$ZnApF@O3zk*$bo^Q{^KRA4UOH@f^{Ibi<3Et;$P1Rx+aLJ$@SWAuA-8Qi2wj8^)n}R#0Mtpuo5X{+f-0jgt>UQ)y zG5zO3Z&K3g@z0I&ftsJhZ8+jj_aiCoK0-I2{WA1%lNzpi_B6MQYcEd6aNL*uXw(Zs z5j}k-n#TTw_TAlF38Q#`uwzMU{GK-@KZR~?bkFAv8A)Oo2!lWP9mSn(jwdu<`R1_L z#Cw0|q7G#Dhr$h7OH3J!An-4Iy>D{@|J(5c)t-^?4=~Ga8NJ)ni4ve(J|LAo0mI73~Lmop@T}-EukGO!qOHbdjIPC?R3v{W#+;oqJc+%G47M517VP*akq6 zS5PjB@Y96BRupRtp|%_!S6T0rq=?-*eba=NOCWLFB}eE~a;6*DLnD7!?}k;0;mOS( zk^3GRpOC?vJLD5>(Tf>+vlTREv(VPqH4sa?yY17-L^JwD!8obDz!W2YVzc%incf^6 z;cT|jqRoS$gI9K8^CfX^ufTR^Drb6!S!-j<)YM~a|0DQ^WR`5(igN3G)Jc%8NDeVo zb_YYGv5DQg%41r3Mx!<$I%5cbcCIfYGgtTk>27O)B>{3&=tlWzQr^&@u!rJTxxtdj zo8Ax<6j)v{b_`Z8$Y+FI(Q_q;QJjwJgq_I>RzGq4hvOZK_eMyNHtybaP4k`ktC-ew z-kSspD~zjYztp101ko{@Js;6*!||)D7SWuLx_!^l9PZ}n>VaH1+fT~9MgvJih+VlM zg~ItWoVamm8UW|QYZ}6b5AA;hxgOP(e@z-uSwwlo{UgIqZ%kVEPdf{6;MR&Ofpyxu zh2y^|;{ss5!pB?{47#XGjCV!0%z8IqvO8ZX^OfJ;shP}L&i+apS&fCkS}>sj;5CU< z&2%PV#IqEde2(i?uh+z0Z?L5w_3%|Vkz$r+z*SS0IRV$mV-4Em8BTsNF{Z@_5^{%5 z{!D-1LNHk90OBJ#`p$HEY4dGe_=LZ?GR^oRAs0NpLq$2>ZW?r4AGPZ|(b2VoB&=|j z)p_DOWq=K~`kT6v?R0#x$|<3%T@IG_LvfR(Mg_VG+s6XjcUNA{U6|epE$uUmr7CwF zS~FQOZR?;9{JT%yS-d*ZUYKLxzZuY)2_hdr8_7OOL+$UA?PkYZ2;nQ#I>Fy3zx8?t zOjH|OoUggDM%dT~Vh-C_lDXiq;tEU$O|-LQpw;`a0fZ zM7LfSe6yJe0wabvSYo$xR6aB1{!qKdF=wces|RIy4zZrj+ZgC~L-D$k;~jxjQR!>UtB%;Ue?ge-oK=6$QE$)k2|KSg%AE z&iF9-!?|_69Lc;MwdW94=Epgh04D)n>Vg?8g3>L;9@MFF%OL_(IdA{AoR*8|y;*(clQb&STVM5);_>e!kQ^LV#&JGW! zKjc7Dy`(QcHbnCUOYyTlh`)cr9uuxIBvoVXc?~B-fl%oYA(Zkk;0^Sp_gTEGEn~n1 zmZ>tOoS8~Q=MVJ3tH!Iu1+L#&skXeOlxO2Sa>GA(<5#|Vn85W)OIs4ObZpbnZ_GJm zF}Nk+xM@&}=Y$I~cYC{i6ec)~^IvTE@OJy?cH{5GR^Ri*so>HoS7uFpg=@u^z1r^^ zZn0Pc~Hfv9P=uk7ADE8ctPvmiZHVkJY~oZ|l1+x*rlNs2y9B z*PIBRa%ri5nh9?$c;DUlSDLMF)?wjmD;Xf;<-2Uidg(0xFE;I2R_bFGp5xuvFWb%l zJj2NlG&7;+j}zJ{2^S~^eNCj(pS;P-&e7eyBM+Iy1Yh|?QL@bpbPf*GQIFH>zw?3% zoLXEVe4QvOoTkUG?hI`4jJ)ZGGqKv)-v%<3_yDckhBtR#_OgX{b_3mk^VlP6qk?VI z?VYu@YjR0ab>;rRBI3@5GBI-rf%}%+xTfqNEkGh{+7wr)Td=MGlKYr8mBEv?!~3jd zNRuL!5F9ma=5(Rrbd^2~NMb26tiWc+iyVA*T$y-McNIQ+lbaLXnmModd<9gvNlMu3 z?sTSY>v{aHrSkp~pF5(*HDZE0^sOb=1;{4%k0TKdXJL4n4mMu(_+^Y4tKk)1<&{P* z{08G@m;?DaL6HXL5;jgg(JXz9D-?*^1bgJ4b30*KKp_*k@?M?h>_v0b(h4y7j-)V zky2-{Ejv#jj3+;niBlnKcE8+STc`%dP^SR#4o}Z!o}Oqa90v8AvpcR>+M#-w9-Is2 zzvlgkxhK~hXn(_PMp&#VLWsC)-@XWxzedMMf%UTn&jQCAMFi}edH7D(7@Cg1>X%qn zQWu}jB>YZ&F__)6?Gv+jK^~owYy73ZwhiLeup#?jT2w{*l-L8+zkZX80~9Np|9Uy1 z85+tqH>`qAjxpWaLayRrY-KqHv)+T}Z=EC!-#0juDiwITm%N{RC5ncfp-$ojrk8Rv zQ=vS+l-tLluvW-v*302Q!F-wHZsJHR+6s9#x@kz^BeD5>cA8rLLP58wJw3u>Sd zFW42j&ir?p2zg!yF2lX69oW|geC@k3fb`7!zkVTbj(2eGg&$_|>k)VVw-Zq}ics6x zbG$2m#zip4m@|i#a_6dmGc{8mZXT8ac+jgr3aj&zbj+m#5c{8rRz6FN$&XFx+s^5N z;JatZdLta+*lW_Xe7hA+X8rfh7y@UF z@I=?iVzEv9Psb9r4BuZdK7cMx-1q!0$hR5ogvI`;Yup2y=eVTte{%0m-dEvd!8;oROqz)00XtRHsweD>u*Yh0u^iK(O2ZIP9D}1-e%w>3JWR2m|cgLK&U}AYPp}_oF%r>F< z_CUN%dyl7a4MYdC(Hq>-6Ly;rCM+Clt86fHmThNp|2p(bl{G)t^x{#b(S8x1DSh&y z0}Yt3XoW8n3>S-nB1)RzO31RYLeNQ^A*j3@59|EJr~4)WASG&l2~6Ws7(I!3^}bQC z9Z#tQY`=y<{z*bY@zG2A*n0NY}5fw2JezqStTKU6F*$Vzu51~tdWd)bD=aD?*!nEAe~!hW8~V}G)CW+p|L zh5e&!{nbGKH;LcwZdy!|lDq*aQRwQaD)qb9v)?3t%~a8dZJ(kocq^d7t6AQ$yy{UT zma@nfmlG#vK}(3m$roAuqgoy`ooU@OoY66pkTaCp-aMGEGNS<+LBh(zD{$;R3MGs@J4O&mbrLuulbj?}Ka;5fK3 zG;(f4Lb1;SyWHJPpBdexE!G=T56n?-x#48(I|p-N{&0c0-z7%vnIF<5<;G8czW`^> z3aZPLcnyXb1ImWKsHgWfBV{Uv6Oben&ZD&%)bM8RZaA8@OE6U>w;P8JeWscPDDS5@r*x z%pE^8FnzT&mm?v}E{_C4V%m0X4#g?e0Ac$!$Ni8?K6%?C^X2Xxz`+54nstxIHaV+* z{fyXEw4_daF)8`-jsSr&XLET730<<{_Uh|8xyyLyGVdK*uD9DHBO0}fCtU#D<~ zzcaM<+&0N73>dq#@%Fu@WgS`^u?qTHNx8tgI-l(wV!_Ze$UT=u2t~45kzlLWO`&}>+6L@*~iyI=8)Ot=C-7fPx-8M zAwnhL_NT42;~4^VCl>0A_$DnB6c672^S2oq|~K2!LWB)RssQL>jW0_IXj-MpX~$l(%(()pjhhV{)R z(n3cIZdU4NSXU%p3(b7>b0uJuWRdJgmNYYtt-Rq)dO}3->UW%VD^!f3LxDDoQs^ve z7ZHV6rj~Twr6PUC`_JmRRZ@I~7iIdzH>bLs!{Iii(Nm8F`}WtzHx$u{imx+d|M;87 ze`q>-m8He^Rf#2|>sX84!AMSkt<*Oi^NiJE_7zp%!iF2yMGyOJNh)0dmD_sL(rrGYLlzxb$hoUfy)?X2LB=94O8pC|K3DeW| z?T#)>K1nKNw7VpOR<3`i@gEgrN(im_w;%A7me)XMMn%$VHe2!!5$b5Q+fEH!e%n_y z<4Nbe9uC9`+6(+dC8;vh&4oMjR#x)G2~G7r%gFljPrqOTeX?{aum>vzJ>u`sPA2jy6<^-(wpbiaU;_%nABe<=luS~k>KIp*@Ep^id0*;q1*1SPM%z(B z)|j}RyL64v2pvHUnlU8KB;e&UXOl+LSR4;V{^8F}jRq`AHV4KXr-oy&t@p(FUt|KK z)u)|fOGX1*G-kOj7j*dSFE%PuG-4&&R@5C={?z%2N};jaj6Nwz<4N_XWYzCqe*wLd zFLe~MFqe5dAd#fkoFY`B(--+EIm8E6NcZJxT6;KiFv$Tl@q&BbOsg_zQMXr_w8E5i zGn#3WGiSakbqTx|V^qqelIp%H|6CKx;q}^Tw`QSRMe67HkoOmWbSWc2_WK-ad?By+g7HI(sPPVxO380M-2t6dC^x%03}ZoR^k7gb zkzGCSR!QYS?5Os-JlP?i5cF5+Mz=aosCUO5FIe{{|DNAaZ}m$zo{zRj8yV#8q~K`0*Wzm=i+gTbi~mtHTvwwBHw7zT<&`&rRdg&;{3}z+rV5_~j1WHerMeWfw3wut#p0DVI=Q2d^V&X?BM*SJ_Xu{<=q0{XB06}yxnaD#B z_3Cq#pU5AqDwo?T*TzLGcQ~Kyh)1lvEnMY`R`NuD0(0ZR4>9p#vb_!A3 z*NdG2ELyX=gj-I{RZlODs{7+~T5FF-h32osjqIOUC1$0R<9T@RW2}J=SHIl4I4@Mm zo@(R5TZ$%Sfa_giQLxpg!Rq2(Xt@nSGmHHViK(m}m2p1CKN#8r@nWpevq2is4f$(q z&<`ix_K;s3PwuHMEgrqHk)v1{%@x)Ay%$vLzQ`AGSS-8RQQ|iH!Gd$+0OoEy^j_B! zO!YEaKFiyg)o8%=q}0n2s%r+ab2AN&;80AM2{tD~aaQMR{ILX-i>~`bfWP@MB}=+% zBj&PJgvTBAZyV!QaZTHM#WgG#rRJ`^rmRObo#MoKP|$ji4~CpE9ARQRvR^NM&PiHZ zVsZ7nHIYFhoV%Uids;>(vDT%y8H}7!&6`i3sxOIafZ8Nqo;Em3FFeFyHtyoy)g;qu$A~2 z7WzcGlLAg5mgv_=f+TWRx92q9JiHDYi4)q92GRQ!BD)Z)rh#U=l+ljACdHNpVCuky zw*2M8&D>sU%NxTi4c_R8#^sF-N4D}pkD^SW@I7}1@+d-&`_4|XmK{`@K(ujFdo@>1 z3szK=7uL;PA#N8cdmO}xB0;ETN>n^!{%=Y1qyTGYD#ekRm1%aHQf{vK#ld&YK>Z1mPUvok_x^HZml7NhsG;DcU&NwpwLWJ?RksiGYya z==1a+1nsY=6PYJ!5^F;$m1n(mEnQ+(j_(1XTR=eQ)I@O?|V-ht9JB9S;4 zgbwFR@&LM8yEGNwDAtTj8aoMTR7TO6VMB$7u?HZ5EQ(A-D?kVkcjeKPQ zZ7qTL$SQv8{D^QFM|c1wE8<1&E2 z-xt)a5dsLXeCvQT2LZls7mQE4n0rRsIB?)zVLuqM)s@>KF!UH-~cHUuVFNX+F0X8*{heVcVKh8JEi25Nc7PQ z>;}m-wW|w4CxCV6<&gQ0*liiwA zYW)t1gwh`EZ*R-P&jD4in$Fjfn=L!z|Gem0x>{wxhu9kWD}s)!)B;vDmBa*@Q6V4f zfa3K#yB_Ln^|F1UoI`rsHry^s(ao`xed^4WvHV*5pIm?-a+jwfPk~a~nyu)|8tMaeC@I$7HnVk|Rt8*rxB6W*nPH@+&^LD7-^Q-c zCiQvtX|$?%=N9|`O_7jttiQJ2)&brrv=2V+O!w}WlGTK{#og!62O zXNzXwWUo3tea{mcr#Ta|Vx;dj)8=0zhk6;~$PUi8=i{YD72Y4|n4gM{QKpTGX!p&7 zg@Mja7dskUlM&U6@sqhLESHdzK%C)NpDK$xg1!V4OrjHIEM9O>`Ux5mv@K3dr?vuj z;9CS<#J?V6kT=~3BvWN+k=+(D`-%M|>C5sHc_H9No7n01UCGnB@F68We!pMe96|aN zPUye_C%qU2d&5t#@UK;3e`3_siXK$8`i(`yc8DbUN58u#JmdMCu#s+wsky$9NdMpO z$qr8>ZY8%Lnt&-d8PityTaZl%sXt~lvVf>7wRj^ z^olwakju#-?oOgFsM}H<60Qc0o#(7b%}?L2u_JU|GUur4?xf$wrt~*QC|E{PnVpm8 zySMouShH>}a3lz6$J$LEx5jW|S~jGYu2P%aaXW4@uf?q+q+0OaB${YbtZ=`7uv)|b z13!nLw<;W^hXTEHMi@_1!;vlJJWhfPE$uocXw!#-4=BIz$;-==nbyMAIMvltde=IH z2|#_XDoYtXmNaYZmU~+Ucn!xnQv^JosPr^Q+ouKXG)}svHYeY_WeSY|z}}5M-2OoD zeYsFzxQ511ABoftt|w-Cm1lwE6D|^*9A3C51-W>TmLXKiWY_3(gq56|K8~+xEIp>i z@pxvPwj@DbH%};7bzJcvZ&pIVlMDsgxN#PZ-7=V|)YONp7Kd{cY zvPuQNv7T>wAW|C|hSp~URK#&xyg-p-~r8t07Cu<+2G~57ib|~W z5}XtA{Z-qP|4;cx|K}Vn?9ZK&d(Sy3uAZDH2?n+}?kvHc9@OYlTBXiZw!EJ!LQ9F} z;GgsB{Zi|;R#{>s&YAr%i;2dIX=s)BEYR+46=Nkb4EYcK?z7UkD6g zzC>6N7)Y%3l}#^gWkQDPT?%Xvw#nb3S8QS!=b%JiIv=ZO%@`m|6Q_k}XD1$4L{v?> zZ!w`PCCxt)?)6VGZI0qZ3C%Z;vKChxAKY732;JxUiw=;%cx5!r7r zy!P(7ieWkGO_eU7??h|l&kOEwP+E7;Nu^9wjgjj_ncGFE_lMQ`4U|8Brw|QuV2qFR zs~9%fm6`d{@X)Hg_XAltZ8I`gga9<;dsNX`W8G>tTgl6)$g_u*L@rhw-X-zuF00Pk<-6_ zdwRlLQiT?2%WQb~61zP+6rDlwBOb6n*gQwCSgQrgJ0&G4nE)sgjCsUopFJa|>Wix^ zi43mPnRuy}zafbkiagJ+Hy14ODq0%p$*>8Td8C=EDMmiAxUSffNrnM)3=*URpp!LL z!VR6ZkaCm|g8u3WN?BN2V%D&`+MC}~#SpvJ>(@$b3N&LlQh_;sF!_fuT8D3K6Bgs* z!ezo{OA)P!GE{-kNjqUtKe|74meHbhNATvC;E}hj^Xs?6h2z{MAhUs=}}xir&5$WEZ?=o_RM46-)wU^wqsdxGH($`mNf)r$i07cwL#~wU9OH;m2k$ ztmYO5wBzsmJZ$rrp2BWF7`3b|itc7Yd={>vkwzSp2?B!kv})K{o~ILccWtW>&wrBC z(7GSlLOS@!+w2!|Eh@tku=(-sLu%VV<7TYG8FRtntpdDAzSuVdEhoG-V0e44*IOLj zZPsB#V*TXLv9NVF!|OBemc!{Gs9=-$n@^uGmly-%=2ln+y5{(_G129n?Zribea;NwFR4ODCHq zz1@Fg9*&$;SjdS?m%LbVyZ2nuHG#e7ZNcjnkxM$heabOYOqJE3(p0rgm8hl!J;q|d zW^M{?)!XcP=KR6KSg2Jv`w;OV?u(mOQ93Cm!yh_1x4%E*A!`hbtgfGEaS&MspQMf) zLK!#Lgr@JG=680|vRb{;1J3tY*^zyJ1Bc_sHER45e_s!~3du%Cw0P0B7AfmHIW#;& zY@p#@@{gM0qE~C%;?y*IM7YSVR_<_`|29!jakIPhASqE$-NH+6GZ|c0H-Y&YO0}&A zqlN?DFJks@DoR*i*;a3u5|Q@8L*1B!1TFXfuTl5^GgL8n>Ah#PdDP4{Of&3T$wW+L z_8i;ijOpg=MtPx(72|!n<9y?OOd?=m=k~#-HtNBsMcuDu?hX_C`9m!lYp;FbeJ7Ts zx!wS!3Ihw^o3%Ar_?M=R{pf7+step)QF!zEkF3Y+`#DQtZ8fy~h*`H``t!@sy^{Y` z+gFE0`L$cqAl)IQq)2y{l2R%v-BQvWL#RlXfHVv!E#1w~9nuU9L-&BhFavy}{(kTE zzURE>T-W!V^F9B;%(b6A_r0HIuf5jV_r_aH5mA(}BsQr?I^N1y4YYrpL-61o)5`Tr znNSn|vxZS#F`WP4Zp!T<6C+~*dJ zP_3qNIi4aXJ;1u{C2Kj^dhz|b-WEAlNbD4_8M_!X>;WVo@0&-_(As zdIt=gtF*u``EITm{#2&$#MF#E&zV1V_*svoKK0e3r5hd)r$b-o19NpkJ4&jTDWs9o zs|Dw$^1v0>kdW+w9fYK=tYGFBU2I*-WljKWcgxK?p6WDHSg%`I;vR6JH+H$W6HwX^ zCdA<9%rQwuml6^Tf5yKcBi28#g;Mtkt*y?HEp^;e7f$ViiX#Nv&~aki-fJLsFt>O$ zYRCYTjr*xf>oCn~zvS_rYy>q-#bT+6m7GniA|2~cxW_)gNtS)-zF<7?=dGat<@|ElJ$qc_5}S?4!~fBg!>n`)sR8+;vWF z%VeuSZJ_Wyt<eHLH~U3D<*rUfmlvfKUp(nm zr1{c^6qzLr>AbDcd4(}uEVcrYeMu_TSrbTy8YSJ(Cu{O z)nMneR8v#*cTvsfUbSJ{CS_a8eaU2%cFa!3yPhv8zG)bkqiQXtst+VZw>-xr+bUgC zv%@W%cg~P7ARlmX6uI-nQI|3uDV(^UdpNb~({Z5x3+ofU0|oK> zV(L5FFa7%|pVASjEzN^Q%%1_(c)3x?B0s3Au5c2;K6>^ z4;SCpdsP*km1#5n^EEO&``N3LWO#K^cGP=V&+Kqn2pQ6$>dsW6E1%jLFX< z^a>UtXn0ed5aBs`u-qL>rk$FU-ZkH6HCf|CTMm4O)wH!h^i!exo7-qWKd7>TZ|7Dg z@EQ=fAk?(9=itvt+$|6_%I5x&wRLB=@vWXbmwHCszWwmt4Ry0#)*6vV$xn9#nDorY zew;c6bVJEIr_H*9shg+4n0q|2MIT>A?)J9esDJpW zof9o~E7E7g5*vvmubG*e9LftsxEB*Gr`R$*pUY2-N`TpXeHvXMuFm_lpT)`jXQ&PzAG}cscgsdoSgUA z`Lw+ga0R#2jFQ7nRIWQ4LMOPQ&q=Mf=crZ!-^1ei2-LrAD9EtFE4hfY_hXL$BynxR z@ysg>kDjMXve)Sz5|sJoas86kI(7=dt05vRqTha+A{ zjCZf7z|9aF^Q=XBF>t6lHnq#7Oay$=d~<_CQ%}U~OS*Dv&I30AcalW+_Y)A8^$iNI zErUKxAm`J#ivK78$UpgwBsz_C|K|E}a!LMB`6NbvZC6)9`3KDSr%ByG!6erp*J&-F zlqwbr9-Kz;xG1}N&3H8%Pxmqg%xwVNCd*J)O*o{7`E8U84E-TE%ikNl7n42 zr;Bb0R(?Z9sk2v%8TprHvViqrPVimrmI=CP*k` zPw_91i$UXe>8Sr+YiO-#YWVPrjSGvCyJ=|X2y4jja0@Gox(zFZ*v_fc<=A$BB0SN4;D z6>%T%q1a(enKz~Q&)S>E2KFB{$${QLjln}&0kv5hnET!n!U`TsC{N#Pqg>FSC<$pN zkFqt|W6RF#M9wm(My(wKz{KIyg2Bo&qbv<>=;dz=@pQ3Xa0E;FUJ6xNWH+8-IJJ0X zRK=wG^5OTNBSY!W7$Jg8Bn!EQN5a0f(&sM{F)w0(Jh+df@9)S6=BPwK-HKY`2-{Bq zHc&l(-sbUP-F)uW*yB>}2R$(MJCO|461~LG%LEO?2~6YQbQ?PNjfE*BKmIHKk6VJ8 zQwgQlGuATcQNh~V`AIkR85v35$d!oiCMw_*qVoEEK9|=B)V>owC+fv zJ$wtrl$|5+VJuI-c?PqbS}1)eTtA%+iaZ~~IY6Xn+;ceQ{>9PlXQIba53x+u*V$Kk z>XY(Ue*$c5a95v2^_sZ6r}9erK}{E-udcMc(s7--o7*kXUUl*-jG|dN;3|H{t;cN= z(hLP7Nw+tsHH*W6zNmoFx;nLvJ}H#b{jH zfb!ibbTeE$xqPgYfOf6@%^)ezCO*N#OT9u%bjyDS%J3`4_RRka%;NyfGI4r_(()Pr zgU#SQOl}Nif@4S)wmFAwUwZLDz6!H=7;MlCjb3+f<9Yyt_`T-J!B~uVb9qo^BJ{%%sJH>22U7F8oGKuc!`|6)F#%M zAq5(X1jXxIx)jaosjyw7=zi>x^gdFj)GEa}UC`kXxQtUAR!5#yX7}hFzYA*tsSXrX zc3xXC9W%t%R1XF9U5x!^pEAlp?g-#LJ5|1``I+K;IVBV^G`$GFa%J*#*cjo=@_1+J zk8RTBGkX1oPkLZrH&Vu2yO(TMcUVztr*AAweY*p`P3-1QHP)&fEor*yoOTuTl@Szj zwVXVS1wWsHxyAfvG>7rzp!)gKvad7DQ&kVwa<*Pl%#q&Ohck=B;An|={FH?8dZpSg zzf>%?KywjUtrLI2sC&2fuhBFx=oE*uw25%vOD1SXYB{K@&(hm>dYJ>sJM|OMc>)kV*3#*w|F9T{Jq6(-l=s17v^yoN-H`2l5AeNr z@Ohgs8M?;=C;fYg3Yk1xKT-t-4X|dW4hK4CUk!|#2T5eL_Bkmb%N_2m$iZdE9gr4d z6(=S46I49>py$>UO7#Y_js}#bDXnE&#gg4)q8V#@D5GDw1Mw(c(|h|;`%stZ+lRxX z>TK})Rstfa-nA%b8g{J=A3a{xSJ`{h<>4^)%`GcX^L?6jfvsWI*q0Xt1B{zn{YP)E z8T|Mq7VyUFffss#N#};vIBz7aJ)PG3!i&_0M$8T^s%_`%qjj`|-5k)2wBW;4A9YjQ zHxC!$%kxrW`n{PJ0pMGHu>>j-h@I7QL2RdoU#~@fv=J$$|DuNH!`d1?xDB&ZwXoXD zE<1E*cSSNf>mzfH$$c-j&LSn|x2C;B0b(-iBwBDDhrNiya}2&X{WxBjYRR-^guA>3}ICv-YP& z)(x!6ZsDMH)HszSik4n6yD}afesMDYm9XkeJFNA>`)9*g`>D_iS`|}$Uwn}=Uc05o zE$7>hLusoE#0Rj7zNg6?Y*EE3hd4I?{gG zi@_xZQt6w5ZmGm2t8<$d#LU!e;~e6{VTGoFJ_g$>sc~;Nt<6BrN$c114-0!(9&%<$ z-TBBg{)Ekc1Qt(;_g1f$!AequqZPs9HM7R6rn}Rl$2FBLh7OV6oX5?NO!zV}AsVAd zp0B9%xD8++-K_;2yJoG{`(pdt^}==5f+D+e`EBn<_cFhl%8tDZF&D7STNkOSO+?{PQ#VTp9s!Lo4bU%j0$;-a2!}>HQqS9 zYRXA%eT$sSQ#v~Fv7;07=$d{k!dwUi(=v+m=6Ex<)Q7UjiQnllmR;(iO46v!Ky^6t zU8FnuLH(ymyIC}fR!6UnfCtqTvGW_+xJ}L-XB-N;Ay0OH}QwQQlb74re%XGihTHx3!AR6w!iiyMB)F#Gt&9) z`@%?*`HO!=Rf7-2l{D7YUJLez*P6kW=oTsyN0R;hdGN5;0zAr{k5}YuLCE2&Liwg+ zdyCJxyC5NJzLPNMXhrdHSBE=4ybRpUaQAu1W7b7nj5)1H%{sxbE{O54xW_J*rT65r z)jrpiMZj(iElGnxt)=T*V^x^wisTd9W=v{@Jo3|>rOE!74_kv|Ezo6`K?%p4AhY%x zTAP*7ZyHF3>Yk$Z(#D0=KcLccWLh4@n3gGxj?Ya&I>V6({{d= z781gAW>tcei?v5es@dQ-n*4j1b$=(IGT~)Iin3MSx&Sx6-v5xP2X$xAh$~Z2e>K!z|1@D-;tFdxXR+Q!Mtq8yU z;Lk&g%;NB?`{J(OD)*DEc!YgZw`=VxhgDDZHk0gBK5{s)DXdWh{ zGrcRrulO5@ihK)-B}p9(x*U7BwZj7h6x{bh&f-E)?2aVeb}}zE?J7%V-d7!;eC)0! z($Kz(&=v4ke(s}Ubv`(poioC-b(=Yjjv5tlxaZ@yMo5Ld3~pD`kT-m+n2Ytd7eG(V z+ZT-g%y_9UkGMMTNvT&OLMr;KDwW(V1l`d&dhB5ljE>ge;~XijuTgm?rJ`#_`Uq&L zlSGRglapcf18nolLCX{6V*n;VovUM=UdoFtvfvE{?2wZx72eNe#g<`RKMfBkB1mh9 z*A6efde3-R^lb#KOQ@pc!!Z?|Dp!_Zh+DdewOur$x@24kBOZ<+_c|=OxbYIYsc8v`R2WfMcrYKo9hTW(%BoB$*QT1BnD&Vn)p3L7z-A3w!BNDo%XR-+$nAK+Br8 z5K|qgkz!NG>ds2j^n-8^PWx7J1+mp9kMfhF>-dU5jCe?AORZVon=wzk(fZi68V{;} z7$h@e#{-eGcvvlHA?A*Iic4B3Q<>hIE$>gcFhShIdWR^j^`~OQ7gox_a@J7 zJ+Fov$-LXSO?`}KqRpxtNwDX4!2qIx&4~Wf>gA^ulJ4b0R^}vLZ&}#!+@E(CLc_0~ zO&~E@dKl2QhOblZ_U_g3e(iJjmY7XJc7d|Nw{67{^p*~~Mif8mfFw7tmC|484&Sv8 z3D(fc6UEoqKnAPc^BR+Df$SUeS~sgpwt$S3!J0+785xoEeE$XS^H+kinrfvC?;sM)zSHd%8zCDpkc+OFBz<}(WbaW0MP0`W&T6uYm|Y};b&G!}8O zCO{u9{2%?5te-suEgstqtHWj{hihSUG87Nt-Ik3^ZT|164fc$`zheYIPa zm&!l)RZs<~e3gl58Lhj&*<>TNMF|O-D{LEWgX@oV8hK_2lE9>Dq=*cl_nt`yfsOAl z7W3?V@9@vFu(F=RSzo2mC}jRSf~x%REE{RbP1tbBj187%LX$N0Nh>5^;p3LZqFrKS zrXd!L@fpgukgN&P*w)_(AUrCSRj!O1STE5%sM9^Qw(9J8`Q5R=RuBEaB=Fi%E2CF? z1%azIriu8Oncq>zft+M!ofKlPbPuV(SDNIPTzdb(U@1Zg-8-UY(5nMlTWHLGSM#=8 z;CL4#XF#Y6k|deINLLaoT3jllXeBCVRUB_CrEhoU?8 z?}3HqA?pO|a)mbnDYxgn{AoTzNdk6XGELi=c8WG*0fV+}N!1@6V~%;hI)j6xn)^Go zy&|Yqq*U_C)93-CXWbL$Qh<7BW1mV{7KwOF5rj#Fu{H^mzTlHJ?F(FSoKtJ8Pjise zJe!LM_4dRRdY!R)-a7qIM%in@<#v-f#Gkz?oI0>jgPmk2v4(qpJLkc(Q_HX^LNh zSlohgKL%Mke`I1~4&VEGkm^*(1?hg(3w@Jk1AG*Ze!~j^-G@P1uWA&ZZkl;g`t2t=qR4mIHp8wV&!|>C_yZrwIcC4iH5at16!0R);xqFT zaa%MtHxhZauf{=>kM^rLE^-?o=i8I;h&r1>so_y3A{rmeVFpHJyG?$=8F*;1%%5iD z1$`UF=49=JM%RGoQ$$LK}Q@8Ksdb1VNiNY2&W)-ubRx+ey>(9a3^(y-} zTi0(Ij4$(IoRT0h6s))Lkh%Ol7y_{=mFn&Ay>p)as~H<5qD%2dDckfH&whtU0qdL1 zoo_b1&HlCRp=UGw$<8{~?;HMqbt?ZCL)n@!|Mah3@xJ{SK9bTixcGv){Sy>C>;ee) z06!|_&3l`Ii=1AO7fs3M4)(|M-@cymNk&S&-JswD_|cUn_KE2pGnQTd)y&Awn#?aw zxXbv@;O>|ER}GrM=r7Uu|Ep*FYfvn54YADiW)#?&D~26Hqd4=$&~^Qw>lN@%=2nB% z`6_9ubyFpA(Np+j(#0KlD|u-1&hx(DYk&Bi4yGUqfhz??1EE(8R@QN$Q7vdzv9UR| zr_|W{H(jr@{xp+KBfYqtZ3^_7$peaNBUnqyyZ{+d`Vv5f8*h8{cO_z%TN5|= zpGE?y8qaf zjW`AQC*OIS+q??{@?{+_N&@GAZRbTgvyCQ96R?ZBb1KBpUZq&ml7oWv>Bw=3ndb0$ zsc50TBh@H*+sQ^UOqMF@dNJcQvp}LUqw(NW;l6=W_bdmKYr0F+;3lV*)M((%1r@BX zd}-`yQ7edaS?DPgWLVBAAcr2Xm@{cH*E-s(RxW(zbZ#0MzM80fh!{&Y0B;BVR2@eQ z(QD=_$hl=E-?ddomyQsp(v27pDSfurd*1`ABD^)L4`pWHW6Es#i7XAWY`?|$-E4kB z%$R<5v`VyPNmX@=m3m~|kG3z+ zBnUgKza=5iTOgKS1YM%cbv>aKaUCRZAMI&1EC%oREGw`fJxbVQ{g^D&91n}cf{l-N zXvA)|dVc#NGIM|^F!(c|!1n7g z{{5p(``+I$^c$Vmm`a6#W0y-&OqS|gR8h+pdSm-EF$!BeX=4$Kl`IlmWp6UpFC}B1 zFUs^=>|r6ZAYlH<*PriOs>?Rr%OTH`uGU)jIp%O-guifqp{kp=`M5$nvpPa!)85C4 z5&M4V4hv?;Rv^sbq{%!|!(wX#<3Jt{AJ1g}_2A(5!pjSY@U(OMm())=`SB5T9Xjt| zX=0vNIE#H+oN_yX!pG=1nGtvJ)I>sesM8p5?l#6FfS4cfoU7EdVP>+_7udhLzMmr==5L$?MF zy!mv07K7nt@c!*+UEG~DfM7Y@aNqeF5m32yj=^`pmL;=EK-RogFtTz^)E=0)(%t3ow#8b$;G5yM0j!Mk=3*+TESUzwis5y2k zYDb-+ku!L`UgYGs7HjwH7*f>C=Ip7>G4k}h4f-6x3!*pHQKzko(T~ac{&fVItIUz^ zFKqXR7On}6LZWSS@GqKZUqzx?84||I#t+(*okA~UE6#_#+XR^z(z(+zZ1Dy_%t>LU zWbnGyv5R&5HY4iLQafbTM_Um(d!`96=zlG*%;PDNAHrRVg}j_8k}3>JC2Ez7dW5zusma~UGs>9gb~8bn(nsrgIu{k?V_r7CU}Jxj zinxI7AjILs3x&Bu3|ig_Xsyvf$*CC);lwsKq9AG8H74LhTTW&0zTs1rf~-gXNRHoRRKE)Z-i>mA-q@+I z>&aCuc2jC3fib1x9L|jsPkbs7ky9oU(^_ZL5Ck4;U2)iRNbWb2{%-no@4eFK2Nuv<+>>)chL-J(z>_mTX73Y+PE_Iwmii8iH3n7`S zD~+XmMQhBrb^UoPYE1%wRIm@!2-K*e=Iq>0yYsy#g!3Wg`|L4gfJ3#H>LkISvyt5ygYl2UUD<-Kr&@Biqj2O0x9G1j;t60W1 zu8w`Po@|za)JxrXcKO+?A=c30E?YVPl=ZfVF2BS#%URTpCupI|W?SCN$g<2oc_9%m{FrAD-!o6fiiP*e^_mD>!Pz+>vBVTBM z0qp!Bo5@QU>Za@hue^l*4Yh^3A?y;WwI76lYsFZI`U!dHx=)=;8;wP&ueT}BR^&pN zZ`Tgprm)}Ns-NxmS-3OLk)B=+l2QRye1q<6aM#lsQmm84R);y^k3@SbeUGRkR$$Uj zI`EDfGF$iCGdv+m=rO3se2FTV47Qw(I2x?2q>vmRk@;pwB4!@1_reB}fG*6U1S@hP z_~By7dv}uzS2b#gaccH08wjKBGVJ;Su+lGM6E*t=Sc zR?QN)(1_=XB%Vro5j$x+-3<}Y@mFGuwe`tnjjjVY(OXVVSt+IJK7;Qii&3$ab1H4< z=4;SK?^c+33b{6YJ@XqtN(oeZ|wil3pB>nF~;KuIq~!`J@X zE(rglGmU;`7KLo7S3M`DpR-@_Nrgp}t)hRKDVluQ3tsY^J*<;#J{%sMIdm-W%y29y z_N;F{YIDC~{;^QE7Z>-Kpl|~(B_9czbz%wsXeL^~` z16&ZhQm=JPv%U;LHLUKfh!qjBsL3f`N5UQ?INBJgbRAkAO8Nd^LCb{^(B=26xhAk5 z@n5YuMoKyaxl@@+=)p15Go8}A)q{+z*T7&+KVhidY0ylZR8YCBCoktqbU)pO*jZWJ z_{;VuXvgHP4W-o~Cz`2G+j1fT#YMxkZ6#Gew^(emRMo8lpKPD*wwaG|k636v<7b== zQ5glw%`7f>I|oO`Fw3)DOBUk)tl67Gc_W$E$Gd8rs#%qj<_ua1{cxe9pwT|^a{+g* z!5&MTA-zE`F?Z&zUkLggm35q+*QZXm7xoLQPuy|~^h9Rb0e$8O*eoLx?D@TBqC^*o zAAqssoL;OK3r%d5w+8!R3;~ght=ev{wWP}S=m=8f z_iA_rm|25|J@y+J+nv|FgyPot#mL@mnKlmOTrNc;PdFvgdi7%3GtVIn<9^qbU_yU} zhhXt(=BGiz&uauw+l2?$=8}SXt&YN#3CE{HHy-!_DKQ_MPW>1R0O;Fz^;PhQph+dp zES(|L`y4Dxfe$iL@vipEm!62U2X`S3rXf=X@7LJ;Kgt`u78b5l&u?NE2()?(Pv^mJ zlxze0hM zxf-deM+6CCo>e5AtOS9DaTBIGLk9lL^x)LoMp_)B>SYd*xL)m+rs{|i-lc(fck40b zkl04AGFH)v;Whu`Gg3XN1q7&+bznI%*EwniAkr8HN*o0 zueL5!L+>a;eIro;tdJ}Gu3XCefji37ma6_}Gj~nhAI=?Y9%*EZY-a7w;;DzVb1PO| z7-4lGFi7&#nqgo&=NTQ9VBCf%ALNH?ekSV}IuDhX>E}Hxr}*?u4$XK*bqn-WXYmwr z55Xat?d}SbDJ-)5vChEN*KOLs!NF-vgty1zQbo{qQ6#8oX;@c?3^FD19jie_nylb6 zMe}DqvC>PuW5f{CbJ}+CKwPzI^}1Fkw*_wPaM}^NgNlv?Kzfqx2eY5c@dVWVMlbvi zi467dt|Ds_V5_nwTLsf3@mqnZ)^E=3hxwvL1KVosk(CCWVBCSJ(wVFwUh~R2JB_w(3IKhdai9R!?rHqkHV=N{5T!=g zkzdLmc6L3$rCvV=nA+N+b>oYE6BBaS9k>slEA`aOBoy${l)+4t^r;t-C=_tB9$l-% zcKnv-Oq)K0Jx=8F<<#e#{AXA{^;-j7F=$gZs2_3)?@COiiaD(gl=cO~ff<;K={`x@ zUKzQ)pS}scXuDe-85Vn^0)C!Fr0+l{Ip5z3tL`sys}QPI@G1L9t|a9 z*a$E_;?(JgnVg?{BE*Ra%BdWK?#@amLz7&M{V&O0I++a2r{2mGczAjX_NS+h0R7Kv zbj2Hr?QC~(Dq$n<@E3BW$$OStlcNAh+Mm}BEbx{LHx_GB`W(^1URHWxgWR@0i$9Mi z5#XBC6U`#1o;=>dGpc?BgtH8S?HOY=MVzUz@Tjg*R!A+C?T+1R3naWdPENbPgc0Mw?|N+bHO!ek^E;;0bw7B;b8uGwJxlFE=sfX*mJZt&e|3CL5vK@v5W&kCiO=5PXS~?k4i}{3 zG3>TE46{H@vNT$J-c z#uR$_6yQ+qch~RVhaP2#h0@|oBt0MZsOdeiw2s?FOP*b5bV89F-tDZ1HP5E$R@u_i z<^xC{hoMdotkV$?rO)g=+Y_X!U=z(b3lCXi>sb+&>0M*B{>E4hqk~@_Z{~f&soviF zJdvrz`Ru{gT2l#&p*uqmUKr-yJ9aftLILu7sez-Q}Rn(kdI0yT%?o^zGA ztkaBD#k&p`sjN-vkb#qo#zxh#1-tu7Ewf{Px}qgb-`!NrSeSO zTCc_B!Kj57tf7=iq1#T5~Tjb&a1Lk1D?bg*U>OojP_gczeK~kVH=MaO9YeQL!t2+#nL%Jcez|&)7=Z(qm zq`}Lp>T{mTnF zXJ_nqIJ1<{jq(fVfE>J7b}$moR=o?AU3-CTDpzq}u`btg%Lke}*ft!u2ITEQtfvo$afweSsX5B8w0_iUHcYf~~u zuFXc#h(bbPXA$!W_uRB3ksxW|Nbl^%@QY8pD%tBep<6rI{Zg9-ozJ3RvksoS1xtLv&+zjGeMQtIrcnyy&=jBX3}!G zasJIQE=Phh#hx`WMtx5Zt7ua{ zlK5;(q=~yQh6G~L=dFW`HuHH4Xdj2&z@pnFPJGjMhQjab_S!)rp&%tI`3DvA|Hb401j~v^}9RCpR7Qm*azZ9`a_nE)`mx}hs1x|BG{#Oy0hJyA#RbP6g zG5@OJd&KeAj%63E4}U3u0CWr)VBApfAD&)VNN$ykzR~daUtxw%_x9L+w+{jS-!(rr zJ)2(2ctE}D_opR%)ptmnTbLI&o2du4=j_LEWeKWPOuzTCW=l8ov*(TQd8=Q(C8RSd z!dwmm$BX-G8EZyG%un$8Q|ni6$7#5Gnnkv9*`HT6FC(`eATJsX7YXz%9O67dPgQ$Z z<=5jf$E6YZH#%t6I_urpeFyBNe}0h4o?~J71Py}46VN=jR0>+nYp(6fJw)8%WR%xe1xq)sEz{M{QR6R*XIR{WwKcK#hzx-*E}-%)EjqFHRR zNbEj;U3=vY@|=*|*|k#=``xp+xGDN_7A(2&eN+QKd*3mD!;eX{FAaa<5XA*HC*(a9i`z|KUX(-4`RZ&x+?1|~e{{xmg-ckSn literal 0 HcmV?d00001 diff --git a/.config/vim/bundle/vimwiki/doc/splash.png b/.config/vim/bundle/vimwiki/doc/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..85c853349d21d1983f0ba614d99cb4a6b7e0e894 GIT binary patch literal 9699 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 P>#E< vimwiki.txt /*vimwiki_* +vimwiki_ vimwiki.txt /*vimwiki_* +vimwiki_ vimwiki.txt /*vimwiki_* +vimwiki_ vimwiki.txt /*vimwiki_* +vimwiki_ vimwiki.txt /*vimwiki_* +vimwiki_ vimwiki.txt /*vimwiki_* +vimwiki_ vimwiki.txt /*vimwiki_* +vimwiki_ vimwiki.txt /*vimwiki_* +vimwiki_ vimwiki.txt /*vimwiki_* +vimwiki_ vimwiki.txt /*vimwiki_* +vimwiki_wi vimwiki.txt /*vimwiki_wi* +vimwiki_wm vimwiki.txt /*vimwiki_wm* +vimwiki_wt vimwiki.txt /*vimwiki_wt* +vimwiki_ww vimwiki.txt /*vimwiki_ww* +vimwiki_wy vimwiki.txt /*vimwiki_wy* +vimwiki_wd vimwiki.txt /*vimwiki_wd* +vimwiki_wh vimwiki.txt /*vimwiki_wh* +vimwiki_whh vimwiki.txt /*vimwiki_whh* +vimwiki_wi vimwiki.txt /*vimwiki_wi* +vimwiki_wn vimwiki.txt /*vimwiki_wn* +vimwiki_wr vimwiki.txt /*vimwiki_wr* +vimwiki_ws vimwiki.txt /*vimwiki_ws* +vimwiki_wt vimwiki.txt /*vimwiki_wt* +vimwiki_ww vimwiki.txt /*vimwiki_ww* +vimwiki_ vimwiki.txt /*vimwiki_* +vimwiki_ vimwiki.txt /*vimwiki_* +vimwiki_ vimwiki.txt /*vimwiki_* +vimwiki_= vimwiki.txt /*vimwiki_=* +vimwiki_[= vimwiki.txt /*vimwiki_[=* +vimwiki_[[ vimwiki.txt /*vimwiki_[[* +vimwiki_[u vimwiki.txt /*vimwiki_[u* +vimwiki_]= vimwiki.txt /*vimwiki_]=* +vimwiki_]] vimwiki.txt /*vimwiki_]]* +vimwiki_]u vimwiki.txt /*vimwiki_]u* +vimwiki_gL# vimwiki.txt /*vimwiki_gL#* +vimwiki_gL- vimwiki.txt /*vimwiki_gL-* +vimwiki_gL1 vimwiki.txt /*vimwiki_gL1* +vimwiki_gL vimwiki.txt /*vimwiki_gL* +vimwiki_gLA vimwiki.txt /*vimwiki_gLA* +vimwiki_gLI vimwiki.txt /*vimwiki_gLI* +vimwiki_gLa vimwiki.txt /*vimwiki_gLa* +vimwiki_gLh vimwiki.txt /*vimwiki_gLh* +vimwiki_gLi vimwiki.txt /*vimwiki_gLi* +vimwiki_gLl vimwiki.txt /*vimwiki_gLl* +vimwiki_gLr vimwiki.txt /*vimwiki_gLr* +vimwiki_gLstar vimwiki.txt /*vimwiki_gLstar* +vimwiki_gl# vimwiki.txt /*vimwiki_gl#* +vimwiki_gl- vimwiki.txt /*vimwiki_gl-* +vimwiki_gl1 vimwiki.txt /*vimwiki_gl1* +vimwiki_gl vimwiki.txt /*vimwiki_gl* +vimwiki_glA vimwiki.txt /*vimwiki_glA* +vimwiki_glI vimwiki.txt /*vimwiki_glI* +vimwiki_gla vimwiki.txt /*vimwiki_gla* +vimwiki_glh vimwiki.txt /*vimwiki_glh* +vimwiki_gli vimwiki.txt /*vimwiki_gli* +vimwiki_gll vimwiki.txt /*vimwiki_gll* +vimwiki_gln vimwiki.txt /*vimwiki_gln* +vimwiki_glp vimwiki.txt /*vimwiki_glp* +vimwiki_glr vimwiki.txt /*vimwiki_glr* +vimwiki_glstar vimwiki.txt /*vimwiki_glstar* +vimwiki_glx vimwiki.txt /*vimwiki_glx* +vimwiki_gnt vimwiki.txt /*vimwiki_gnt* +vimwiki_gq1 vimwiki.txt /*vimwiki_gq1* +vimwiki_gqq vimwiki.txt /*vimwiki_gqq* +vimwiki_gw1 vimwiki.txt /*vimwiki_gw1* +vimwiki_gww vimwiki.txt /*vimwiki_gww* +vimwiki_i_ vimwiki.txt /*vimwiki_i_* +vimwiki_i__ vimwiki.txt /*vimwiki_i__* +vimwiki_i__ vimwiki.txt /*vimwiki_i__* +vimwiki_i__ vimwiki.txt /*vimwiki_i__* +vimwiki_i_ vimwiki.txt /*vimwiki_i_* +vimwiki_i_ vimwiki.txt /*vimwiki_i_* +vimwiki_i__table vimwiki.txt /*vimwiki_i__table* +vimwiki_i_ vimwiki.txt /*vimwiki_i_* +vimwiki_i__table vimwiki.txt /*vimwiki_i__table* +vimwiki_mouse vimwiki.txt /*vimwiki_mouse* diff --git a/.config/vim/bundle/vimwiki/doc/todos.png b/.config/vim/bundle/vimwiki/doc/todos.png new file mode 100644 index 0000000000000000000000000000000000000000..f895de2db07ac06c5f559bfdf191a75416bb45c6 GIT binary patch literal 369021 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

    dueS^?1Prvw?gmTO9nKp$*X@25m zji6En==T*4z)ZjdyXgk?4RG5k+zk=;PXXK`C4_QS@_LUI2zX5g;TD#hbpAZwf@6QK z{oBIF)nb@{N2si<*dp!s2Y`~V*ngiPUcX%Rh;k;RQk#_w0vt0S{u zac5ePeQN=dX!+aSAfPl-7tM)lIsto@T3dUbN;;OO0eiUt-L z^sT3}(_FU_lV7*lX^kEQ;iGl2HJAH(NqiP_Kw3q^0f$b_UqaQYauL82`4;3Jz6taurO$Kmyaj-SYM@wc` z^_7-wJUyr=&-m(I*-=rMx3N-HMQV|+XJw9{az{Ku1XP?r5~l|#a2kdq7_d~}-mywY zAoKFtBuHK>DM-WM`AVgbVDqy46HEHf>g$6b%gxp(q1RW{dNX7dvFsN+crWR#Uq&A*u4#qnc3wY#@ISxu580IAWc-m<%s0S=SR$_n zbpcKK*J_&VZou5Lfa74batld|)n9?Tqh}m2-!2D!tJe6942hUD3qTf=Y?fC|tT<8< zNR!DH^S<3dJrs@|BhMS1;&NipM~k+i&bPU^sUFR;tR9>0cDC-$bWVfF!di~AxayRV zigSd3ZVtQ%0Dh(FDRYWyMTrW4N0Wtx?3|9AkRusfyIyLQT46coF|vH_-8&t?TMpXa zM-|Y-Be44?Hs5eUggZU}@!glu)lOZ`b4_jN%XWq-c5ybpS6ej6J}V;c+nkhU6{}Il z!n80TT%~i)3uJU2&04NZUfEVclcqvrUM@{13tn)u`4!dQ)oXvN4$O^GFgJ|+2EB?y z!5M6H1$=;B;*KHYr84S|WDNGJ=(nv1LamZcrV}$A1$%3}JK0}3n*GVeYd9B~ZtHPp z$5j{fQ^m>@J(yGY6OlN~#?$$d-!qPek0ZS7CxpdRpjJV|_uL*#d)Y|%F)@745}Tvp z0xd@2gfq;i$o}AZ6Vbkkksc!-AoTj6@Lc*6lhxp${@DJUwj~8P)aj>*ut07vV)A~p z7kswxT2+7)-~j!Bm?X3Z1f%Eh!^kP%-^RxF@|V#aB9*akc+W^7p2ip*q(~4KfEQ#L zO3wMO|3nEiO~I!G3fSSl=u}HtynSj8+FRKlD<=;t15zN)zD=mE>eVE){buh%bFlPr z*jVNKlxGV~G-pT5dbiJ!@qRw#vKZPVy9S|GqBWKR>O?v*Ij=VAZ+n~QK{MHtl=TbZ z_)Y1er+l@6gGs^!hU84y0_G44l$hC{7pFh#I3oKN`rEGxESzJ<9oNLGP2EQSPy+T5 zgpV8pSbZlUW%<)P7Jd#RNe|M-aIR{z(er+*^^?dzrYXOtB|Dq7Qddh`OC`2Uxw#=< zsyoaXDZIuU%99I~B@@q~5@*>wXSeNo6)}lN2c(6Nd~0jB(j8%R-Q#aHIjXzG=1zTc z@_a+TR9ggx2??LP>O?JY>??QJkuyMC-c^$(Qkrna@80DhDm44XZR@Wq4!V;j`Mg|@8hUK!7= zfGYJ-Ru4sHS=&Kh*>kwL_;Hjk)EQy58*P%^h+MuWWh;Jagztu_I`htJ_k%^}{xe>U zv0tv_8bQ_^=80=m6VGWsYZnqKx3fYHZBksY=sT*_v1y9F*tN+ zH=yz+`~`V9iX1-j{BU8%0kTD5vQi&%dV%NVZo%-oHkPync)%A=iO)Hb*4Y3!dM*w!+wN`V=VLq%9J z9ZSP8(rR zufhcUk11oV@DHq}az&A})fdOMy*cbR{mX!z>n-8URy~OT)cM~Wo%%-FRr-QE8r|er zXX9DC+-vl!=l#QX|IDs!%0nqpZ8ATQ6x?Ya@-{VE&atJ(ahpy2)bI(~P{o*i;o+}q z8(KDQdGjfQ?81GvH^^T1I&NVhsW)+vC3uzW5fgiQU^SUM%@Z$cN%5$X33mSO*JRH@ zHH-?%oW_v&%MF6a^$}j$FahN1boE~8+$=>~uCUl#P#Nb*uc`03wOlq|^83~jnd{{9 znCahnRvS|>XtoA_yWEQ;c=HuE!W*j0aa1iaDcZr9&5GYoJg;VUoN9S+)g#qGM6*Br*6>jNJJwSl%hl0 zaO>V?vm+Ce50I&=3p{G;YDFotbUXHj!tIjMD1+lh@VO1G$H}oVgvBAU+v5PMJ|5a`mbW`*y*> zRvbU*b*5vf)Z>t?2vd1f(GEWH6chNXLaQ zWo)SId|#IGIgy+VtJ(0ri4wpM6L^WIke4$b4dcwmd*2K~`A7g?^7i(y!Q`+lLZl_3 zsb~l7Z%*Jz8UA(bGrMiZ>%)d$e=aoyF`IuF^?7CcecEhArael(^-U-m!1eShI-z*K zNzwScjdQKhqge*;DXIA|Sy>+Y$E`g=Zy1uLNq9Nx;K1Aa%SEe6(Ccbd3X7AaaPY&^ zK{f>y$`qkUNY?fO&`(wk4pzKZF;5Ia6oTw(fXL4}lCyH1v<_Az$miu= zb|xaH-3PcI7yt4rjF5@WQl9TApI%j2^}b=nHa?8VckzJj(gZ4`vDE*uMm&aa9y_3v z3H8JFmk@fmZ%Mi#wE)zEHGhZ?`R-TS6+iF-MZEve0y|dsTq{Wb$!8J=oFw{FE;_Au z&T;{sm-Rv>8E_1|mTt2+YssW8J~aO@eD1z#!lEsgm8aDr4a>{h6~+Y2D?x0UU?O)z zpepyCJ%_$VTp{~k9FG*-#87Ym*410;oXdAn$MK`0lNQt}640yDS|bI)JSjVr%&+WL z2r`OOX&WE6H?B%M2YHj?8Ln;(q^V^vd?q75u5qen0ouB%lNB$_U*)W*YOS(dOoqX< z`pn8fI>CHq-Iraa!NbD8)M#~Y_IBJDf$#qi&!aGzCs{P+dny*Wp&q@oP}g^iAf z*vaq8TEW1j8|TwypnoSEfW)>N6z)TjXFM>~3yJem@v*Hkjc2;8uG;b?P6Bh5rp8Y0 z#zWcNg=D`*0QKQ5H+aG?Sxr+M05`Q3Oo&wASsZNEm-oIxmOUy#b9pZccvR2EQq$Vq zNFqw;;J3N`(b_V=Ou+ZAz zQd?8I7@eElhX;uTJ=z8T04*=}`cb=OClz&Sk@4D5(yyshMI7?E)?4%9Q}VY@YW&!D zNl`O+!#);yej3e88N2j%zlfLTi`(4P{~AxBRL2!Yp&O%#b>ts+#ViHX5Aq+?h83*k zW8wTN9?gQav%L+KTUi&mV%NDgS;f)FX+B9@IocMAOkfEI_yrsA?c#E)XIxfuWD?_# z32GcJg#JQ>F47Ebos(oO1aYRlXDjFzJrK(O8_J)rqm`%xHL9jib8;IcF7DEwe$Mg8Tjtq4){;d~8g zfVJs1ihz55F{UWncUi%^n{g6jZtQBCUK#6&iqPniwJmRh-% z39S)1FOVTulgiAHknnBP zXciK28IN*S;n&Fy5jTF*yujNb6l(6;w;`y!vPlj-Aa z4kqw!{>3Gvalt!$+~zNL;vwJq^Rqg@?{CbRDPRfhU0i;F;~v|HV%t#xFj{@N~` zBs-A;J7PmrOrnaH%o6%^@pxBbvxjEHr=BH1slg*c*QXaZbDZWR8Ul@j^T&X5?}((l zoX+pXITe4&Xh|>ZqO9s<*{!Imnx5gjg%m6 zL~sC2-~J+FrKLBVt_cdo1A3lY`nJQ|wUqyioOMn|{jl`46b^6$1wGhwj#S`!1f^bU zw|^S<09rNOATV0jhR|nx>qwdDOpM#dz})yR&T>l3(eG6kz##+e4|ZmkZSPf;dlX;> ziXUYw9M%Be@O>VAS`^xP90GQDOMWh~e-Dv#`F5R1+hlaL{rh~ufRH0(7xyt{atzl( z&9n~@Kao{9h*+v23_N`VsWi^<=`}iX=v8Mg_@yiKTt0t*7J4n>(Nd>2WbO0?ae8>q zI%3M}#re9a#ueE`Gc>ew*p|Q6pZ_LFc<(U#N{NAMJcm;(v@V|++&16uoFS+t4mSp- zmq;(#AF@WWc#b?zG4(Z6+dW;bc4N)x?XtyjHETi4&lmgHK<}x=k3EIq;c)PXi0H=3 z!I#L8g1{a+%i0CmVxwQ}NH08fJPdbC^?Z~D0r&c(cYdG;zof6*K)*LK{@2T(_EP8c z##*fw=ihbXuM&v#qQrB1)jE(p|&%nu&NaVP5^f3K0$ zhzy(PG+ph@{St=#O3N_ZYl(}sOB&^@*Cv4oGsS6q)dz1)?!p~k;FPj!U-H>V( zxgGNMACz+FedZ3On1^>+OHuE1G!K)8!vto-MfEd!-? z4@&s43)JVFO;uS;_j~t*vaEXX20FKk97EPL80Nl_lJpH~cw66{Sv1D!eW-+=bZuw= zq1T1?;$@|lA3;N8E<||j`W?MuW}{aUL%!9>@c9%0JZVXzK_qj@|TadQN;8U)Qow(9oBctKhJVH6xg2GH;D?S`7K3a3YzTb;0e>)W z(*KESxn9u~Vlxy8&-ms3%yGl#0cUMFBv1pQIjoG{B z$1BQ!yvR2pr-wB+Z6YXZVLiLu2QlJ3+Fmy}9XNy1v^d2=861!ORI`tB^-i5Qv;gPx z4G$dbZ1#0`VJg)UW9z`*=ud-NC5Kd}Y*h#2nap%0RciIHB4I>6w{a#G&wI(h;V-gR z+xX*k(+$7z#))<|?kNf9$c`#0bDP6K>y+H4^Pgcke6r2Ke+|8M!GZ?2UBfW*a8|` zOr75Mu2?8`Q>MhHC;vVTd+~?O4NpDlY{OHjFiNjHS0F4tx|GSHx}xm|B$sos5esxs zh+^fdRr5oBolh&kejqKc#wt^|3nM2mfal3kvg6AirD|KoktY*=}?hK&vGW|)M zKQn}%B*ZBXU4CDitg@Mq$Oj1RkX(}K4z($fVtVn3Wt;q6mx}bbk$2*@?sqJNF-mC| z&QXi1)%SMjPF7pgL zxP!Vn+B@&3*DJ11xfZ{5`|4Q5cN5`HbZn$%T+X5VZA!4`S=#Ps*hiGH@wYp52Y&tl zF%Y)`P)ATVQX!Iiwx4;|a~*$)7!DLuqgebnMasQk)VQ**wU;JtdYbeQes!ax`r|#A z2|z_sp(C`+za7t}C=&30*-fVQe*UNxB+>VAdZ|0L-0fmLv?r^y5d64u3F=^r`05U% zS!|Y7JZ}#TR0Ad_WFV}{>&65k0%dYhe|n&gpXDJh`*-Ze;uZPXE!QU(7t4X}-$HRP zrXgN%x3;##xJ;EF&E-o^th6a9FCqYwny^L_C6?F#p=4-wk^J;fENZO_w=NyT=X9_G z_BhCNi~J=-6hxCLL7l;DCTFzfLJ9CT9DJy8zgDmDdNZsSm2cA5k8ujyjW61G(WDd0 zio1B`H5M2|@Z-__Hcbu9&{Su)v2H)!!^1aQF%94@0)FW}FK-BY(*O92+&ce-+|bDX3%RA8thml&w8`Sj zu_Vu$oVP;UK+*Z*V9K}8NW}&&avJ8*k2J?m{cKdQg&)q0m4(}LE#vy)7o&ZlLnfO% zvY-gDIfD#Aj1MPX0$`{&zy^>nV6DOwMQczV$hrGPO%%3dfOz$!r4lBx^F7|E9D+Gz zT|RlR;cHw&{m=xMRlQ^f!|E7p!2ERf_JK|I#_j{%j`U-XN0X;H_a6t*k7^H{ z@W+th?%Rb-(--5zNwtI(1s4`AhvD5G`A)UdVyPyrawB=i4aw_Zh8@mfJ6V1K9Zm<$ zj85;TxHw(%nK)e&L3Ax((&o=2693_Wt$+H&nv>0lWcsma{z{7KvYR1o3+vP&v(bX;X9FY2fGcds z=TC>8O55+S5IXIicag3Pax|^eIiI1Yw_?EjTN87~-MqG1iQcPNkH*-?O4m$u9Xzo2 z)IFLhiV=tiVHm5Ay~7wFVl)}XNagXU*#cM~2vkZ#=ud@HIa=E(jm*Y+hZLwDU>C^L zi`7`&L8fxLhC`53zg{{25@-Qt0QO;fSBaV$1o6$XSoS@Eh4z|3t=W`1FXycn#`9&G z-_yDzXUX~A=;^+J`6bWXvmx4iF+g~PV599?8C~oOE(L$L2Ob?MY7GgK6d-)I$^K1v zSWA8j9Nd5t*`$U)B4FqUvvLK4U?5?om^WL(F}f!PWiz4uvoLP&5lNPNM6Y*; zB0)87jr2P5{~XsINfOrw@*Y$dG_;3(86JL1gZ|3GP_5C|oPCo_KZ4@rI+F01?3vjp zz6(Fa=J=T_cr7mOQvnLKEv252r)sHb_^0v1^b2s{>VB1*FjccBBn-9PvxZGKJTAc{ z%6YTP1aC|Z){;FcX>ZJQ98lxaWNw(-!q+8%>Xnl~iPhU_=h^GI6TnY|+yUtx--CW2fBFtwrHxC$2Qu@U+BGK@|tn*cv&yG)`(#0XKUJ6ySp+h)$ttT zKm<6vJ&K9e2nHa}d}+GiWwUIy=G@hsJO-;NUT!8rjjoS-T|Vsu9ddI*=zBU`H|T`!B1 zOGP&ro`l9(GzMN4lNgPh$+EW1Wu{D`V#>^gvgxMgDx-UmDa+9Q_UAz}xi}Id+I8lN zJ-w&<>2?h)>Wh3%`!ZiyYc=O9yq2ns!m5F;6#cU4Y&ei|=8ZX9fs5#r@o|5gz|x<7 zH`wJCI%t1#Qkh!V-B`!^G|2)nn*y1;&=NRS-QrL{QO?d*i*S&N;Kz6Ei9q@CD;*LrI{~D zaCtrJst?=B6@Cd_9~EWet}qD!;7IU#zZb6k<`h#`_Co`RiHLm0*3lV614F=ik@$*! zn~IT4?#4)bPNuken%QGKc3YO~;hit_ZWnqdQJl3|rNz2{aC&ra##Fmy&g8}ju4*Lg z=AD5UZtNYVe^%|TqC&|)04)gs%1WT`*Lwv{OO99vpE1v9xjlqLJrzUEEA!VIt+bk| zpq6#uI@YUoeb*W%N_K1uqdIh6JnwMDxXpI@{H7e#^J6-YfXse|MMY6&V~lbj!-{JZu$udx=mUU#1E|IKZ`A+!_lIi)=W{rG_cHjod7s&HzAYHM6&MJNyeKY zn)*~N6;?Hn2HG7$Up6og438S{!D32Xese2c;lQQRM2fyw<{9mu$346+CRtRq)LqNN zc4ZFGeYS{~WuRbqHz^^X=`p8^Ri*!drw(pU4xJ!PrL^Rq(D8&^{1YE(tv!vCEY zN?_SfKIJgU?_|ZAzKYQWxW9UrIS_v7Yr;XLlhgEA)N$r^!2YnH7{4j_~t zLf%8o=erZL{9D$M6=?rfR_$(Z+Ti2a7?{>YS`c_8{F~3{aPS5iR^D zvfbJwt>i%wemt8{4|4%$p5SWQBUM_)(mZ?-kq1VJz{?3e-6N{h7yGRMB+3koc6hi4 zdqH>vsk92f9sM!hlEhaYpJ!)kliE^OFewYCaW)<}zDMHShn4pQ2;`*nDq*k{c){08m4x;MnMTnWG5)t=Hdh~zcz-j8e5vhueO76 zL%h!q!qe!btzp6Ij%q2d0)}V-tP#inr)>LV%_b!1UHJ8z$nE2qY}Ct|L`o%YR`;YG zC5iM0ENuJprWl#TV?=3sDHc2gavbfBrmr=cuYXc^U7^;2(pYP@F=``>XMeH(7hoM< zaKKiGgTX(o87Sh=DG`cF^t-sPPgO~t0J6kD^%iY%``iXfUu7>1$v&tjYOyD>VHvTQ zth2wFrl(JPTmCqjWXO7pJifEbt=^;lMC0~go$?!)9~lxp@ev$`K*u)@w=}p^ta#mRPT6CD!LZB<>89nXC1ZEM-e8W0*htY>obW5m69Zw?_an| zkiGIqq+DrUc7T6D?yW5eW<*F+Z!MV2{n~dnG#KoM5_O~n6b%fCx>i;v{JG$_xLISX zRZ)is(5-L1>f&q$)soTaQlIUC->3XP73(iVFQ!%<_U3Xf+hwE=>~tpOK`$i1vFpL$ zsR#6ZGARajc5Gd5Ln8CDaFGtMT0}2-f3dN#7)Fupt+d==lWy!Mvmk=MVAuIJ zzwE1v0C3v<_|r@8S>i`RvGM8Q_Yd60C)0i=2ggsJFjIY#4zcE(QzYd8DOt$=92R1c zpAB{&`YXVpv=FX-hJfia@LLE8@eON*Iz-M8L_^7@v0m`l-Mxh=n9BVaDzrRG;wx!a zh>Xvn0RHF`nbzD4>PF+=?cGJ$xdo&{OHiKDl`}y5pAS0l{m17r@iAm4(cnz=!ho&GRlwXdpLlua;K(V`D~giCSVe6_d!VR<#b> zk;dom@B(G{Tr97Xi_U2A0>}JbMGQI=wFA()-eJ&MUp`EdigZ=cSME+=h9ay4Ow+(|G1NqgN{hy|+?< zL^I_m_B~7|YK$mY{d2Mtg1)*@$jPD&5lw&4f__yAC)BHmYF7Bk;~^DZ zWy>B^NM*T~&dN~%bi}|uGPu*LB7miGmtnpd``v0y5%ZxuS)=G=byqzNSMKMxm%9vJ z$c3)kXm9{?==aFay;qyc&5PWp4MB|iho8CQSV>;14^itEl6i$~28Feugj?nlSbGE( zVNTausS9$=gMU6YvG)IP_7*^SHOc<)1A#zr2n4qfAV9F-5G=U6ySrO(m!KhNaCZsr z65QS0-Q6DePTsrw-eqt0zg1rqb?V{BoSB~Pp6;IR-?98swKUP=b~&k3uKf$LbT6xN z1W2+Z1#)NdxLmIe_z=n^4#}n8oVzMk1sN?w9$C`V4nTy_f zmCS>59Z2BPgCbU6Ul%(IsH=#hnX*hKeK~sb;uD*fqP9V=s1yp`#ZW1|$=Y*3%Bxc< zR^4n=1rp_a{HXq1I@U_+9SwJ-&YVLfH>N3xu`OXaIVXC^!9RXXGctgdvNnZAx*22o zD%{&?_=iR9=U9haiN>V| zx^5Ob%Hz>`f3ctd_e~V7k)(5)IJQdeZm3c+JE_t|x=MWT)ZPXy5%mR^T1=yJn9N$_ z$r}u|$MpL;6==I7$hLajI$N>xxBl5;{=or2s>qRst?)QQ;3fiNxCRpSc%}8{d1ETk zagkzH=P}{&Mmhh4!Hf9HDfAgfGMJMT&WLgv3G#-K!x7W1)#!n(&ub4U}Id>0ciuI0gm{H0n}fFk1)(apUu;ZiY|yC|2u zkVsaPX3_RhU?Q_M}mT8Mrlp4NU zedGQYGQWZ-ZZ(=fCuimvuPB{sDa$e!(J&B77}2H;DyJfB7Mh@IiVq}@l>LJqE|-&l z==SBF+gSuEIe|X~NL=!F%3wz^c?)B@D<4(Udnny&w*)rHU=7t-5f+MMg@}fGcZ!UCKpWWZ&NJm>es_WIzjPY5m%TQT!d`!3rUu8Mi47Nro`D= zEmOcwrEol7QLz1#b&{W1dc%nTD2SPTf`$yphwU~+GAWMRHzKV&ae^R9y5_pwc-_tl zf0tCORzp@JMpHuqO=JJb`qQ$TyYfgAdB$khuizPCC6BM6Ih3ys#%CnD|uGxLI zH91xS_LKGZYx`{~M? zl0k77&D40zL?F{4~%pe!=W>;9Q}NGwo!1jFxw(cT7it~TjF8y6dx zMyuRy)aBux4^9Z5U+}bZw;dO=ejOSX*+%);{{w-l(w}h@g*3sWATq_pJ}Re6ndsf8 z!h5q|R2hPOvceH$q*#PVOX^6n zDKWk^q*@t&(46FImW64(u$S2{u(V*aW8+GN&$W!Is<=+zvtgsoGl?NQnqHV=-aOy5 zH8%1w{#jwkw`br7tU`t_oUZa{vkO_1V!{tO$fLL%58s%@=7L7vt+vQ9gfT7Pt?tE7 zwgCkpESoELQ%d7^FLec9NZJ@pgiXjHIH%Ryo9!cmZ&N> zJ2U@M_;P&;Z@b+c5>@*qVf|bI1Uo%uGfa9=TC-aVY}LUMI4#%&e!5xlwUzg@L&jqr zF+#=V_sfH65*8gl&3K{%J7GYEdsvU3qx-@jzhUhqHXKT#_`MmOyEerfO5gH$Zw(|{ zQ8?~3?B*nfB78T@%)MCthBdr<6IVEJ*(|>7ac{v3r_C?;_5ETPEeVttKD+%lAWvA0 z4~xzE`1)BpP(qYQ?g2M_B>8-uxV3+gfZF4BBnQ{>&A0fn)+U z*?UmpC1hSKLiQyRzd#q>*5aKJ%r9u`D=0nmgbB)yH`+o!pmyn$5shHlvWM`8Jl+qkG^6V zGJ}x^T5TGFkv$c?^Xw8#vtm6O)!Fj14p$$1S*_bjk|BAQ^)~y|N?2zid@0#G%e;p6 zJsiyVou$0X-YIp-xocIYm!@7FMW$XIh?GY(S4J%vNEmSgnXtVv=Z=j-`4)0i{B5_B z1#(RJO9RAxU#A$OtkD-LZ?wz#3dZvMDqSmcWRCV?%+4fQW^F0DzzoF!HL-DBH41cn zshl1%WJoIU=7jkaBfq!W)%#AZZ+(KHyATs{*95Pr6|EFSRk`ICDNh_yRnW{{mjTI| z138c>ixoaHP1X6n~|KCt|%ScL(WDwmez{E4*MhvQS#a@Tg7AE#ADLe-%&uZ+@D zO8bwxb{4`5ZJiYu8*PQv%;ZuDS$Z}w0*efk7_RIy&8|{nV7RsR3gWA10&_+PN|4ko z%+Q&pIyIZ$0=b*iD1F&v{}Va90_w>ZT`c&cDbPQ7HczSBZrgtfY(lY{McL)O*`Rbo z1#QXKjFbARs!3WhD0E!<1lJwNXbO0}PUiRWC9{f!xMufwYTLAGfP*)j+($Jd6P|@KPHr~CE8mp#u@aXVcsK#bIGgr0d0U#zg zK1~oA*Iims(2|+47PuzRsm$i_i_6)l?~Pf5dzTV~c1`u>M%6t2(19^beytN;leX2^ zrrYmq_I-%;BHO#;0E;_a41|bAhZEl$d9O%)dZ^V2EnbdJ~pNbyVLTKNmHe34% z(_~v|g0IoKf^0~dAMeb5aCA0Hv}8;oF07Ag(Dhh+H4{dmK-0_-?W%AdQ{Cd)!*oW7fA4(dF()<|##LEmaXJz3yG zW)~X4u{F#!SM3e)UOvdoI=MbT8ji-ss^G>diamu*h(&_RwKTW{g)@#?L5NYvR6EN6 z{B9`>Wi8iAp)m%d9Ua6~ZSCD^LaXX;cC)O(!w-{AM3BFxiJzk!SRdI(FH1PX8nU=h zwQ1`9lYoJB^w66_%gx&-p`a!f?ppL^Vc|DRUp@l7ofT^sBaYD3d(H-G-eqb^`41@^ z$~pL-h;kK_s}}mQ=if}>=hQQb(8tSVIO@(q4PnV^V1{l2qkxDL?Md}+73D=xCfnX zukO5W$2duf4Uz3`d0XcbdL_DVM4rnoXrR=WTY2CCMo5;w=7U9`+G$T$3yz~3@_lq^ zA=r&#;1EyOatUi!(pk~q+!y<@`MJwFV}jT0fe4(G-G*AIIxai5wF)(gixa@H9C1wj zoni0g4n-3F`PA?-?YXA|c!l$w7LD`9;1*gQjX+ScSw!DJ*(>Bz&daDV3nsOI{y}8c z4oc&8xdMGwB1ezRI;ig4*PlEoRcFaOY7as{KW8;!vNY$*r$(A=5VAlcZJRX=I?#6g z>n|+7uT$FJZITSHRXx*d4Yub?^(vwpPM_4~f$G-+Vj(vc z&(cN?hr+^)sd^(-A>mYx0_FZK1V3LClpIDtvw1=gT^+6(u713E^xLoCR46@fzJCj{ zm%KO4xpAZ>E^Og+~1Rgi5 z?*tBp>_nK^i{EQCH|o5^$a)gw>(~j=7B<+oOp=^jq?ubpAP(?-e5d+!7_AbC3b@So zf)Hus>?-z&x9JkY=&d}yA)`Ws?$Lf@&P_kOqgyE)!Wv|ty+E&ETEp=bGtU$dn!|#GEpy<5NqdDm7@Sj*B_X)iYo)nQ!Bp)$|&2_2PKO2Ik{ z5~tdr;vw5ar9w9zvbBiSF?`k&_6ypP;l_Kg2uQj7vq#-_r(g7D2xIYK!mO*De{H}kb+5(v3Hi~~BFl*!S@BBt5>EtOK`x$hF;wi*G3Gk73Gvw_==y9>kuH zK8(Qsqajam$#xviF?roCh@}M#KX3#)f;mSDlwI087NA$_o+1#yv zmz%BU*!icT5}F!0S0=HKP_+hA2lu7*QslGI`q1iNaU&sfe${1<1lv2^B0a5;O~mhn zOa}J(km1MH(at*|2IZzwZQFSJV^qNKM~&RUVW)hPu4o$&qt#`C=MYz z+o(QU9D6a}?r~x&7g$DfD$a?f>OzX%f;w)9A^jTglR&76%ob?+gA4Tzg`@|3*sxDH zES4W83pt>AQCbmknFlEKO+RZWLPGZYwNP*ZjH^Km%@1c{zL9kYrf~EmvUl|%FA;HI%QF&A zfpVAI15x8CiNgHk$+2uPgN`6n3e$Si$%3;kTq`Vx>wR$8?~>#~M*tcEPHu`4%79+J z=?WR;YQ?A7Kj?M4IDFC@S0?RNP`)(rYWMrOhwW6)4&1;tpc3WlkB>84u|O)~ei)2f zS_E4*tas2s)AbUA{I9$~uwN^JjpQ=O1E?wubAEU=#X>64FSc#re<2|@llXQda1m!h z+4%+dSJ@8Gtqe}V=F1I8lWYx&w&WK55u|WZ+lY166|BI(K()bkvNwANO|I9f`vcf; zAPKaj?|;It_~vB=CC-~h@gQRRYCgFu7toHquo}G8M~!&# zh_^5~;AJ-((jSK%Zb8Um{GN$140T~-NwYz5D#hm5SXM$~lFMRd#P}tR>H6d@aQ6Y=J`F0_sO+Ir{d~!0nzWc7Bfj{U~doS#&!&7QPatsFVv6W7I-2CM}pQkGxx3#1P zSpNr6aT(_UBu@~QUM7AUT6Awd4KKuA#|EY0Q>_d$?WyF5Mzx?$T~i^6Msi_w?GQIC z;IpzKrSH9bsq<}@z>pxhiJYbn0vx)DFhH|8DNrKa=$ljr-X?{~ddiXjl9P6ScAEhS z_`&3}kN>Dv5t*7-LPzK|Va@yz?t5jiH01Qf)B8YNuy)@^f zkY~mr4(`g4Ev%mg#LuRlIY8$xvsLcSt~`Dxsa(6Z>V?E?EpV ziFd(#x`Cg8Bw^^oRMdy_q2z{5Z#fy;>F$swNvEV3D6bW-%KG1kFFH3+$-%i^j=FP| zCIGJA0D3mq!4em;As7Rnw&lnCw^P(zhse4z{oe12b6VzswIy0D9<~oRHWjt=Cc`P5 z*&^@xn9N9;nn-#YaKTwW<8kwc)>{(2Q%qAKn0 zi1-0+DJ!}P&NZGwsW52aN_>%@w4_5LhVaoUGKpg~xu;At6HO3Drva8u#<$vEV?Vst z^EFG)<`*O4`5gPi&Kt}6mV%8?DUF@{%yA*wo=~f)zS(t=aYDfROPQmq5zuOUNA|)2xX0KHNa^WpICY1lgODu6*j{ zWXi7D^i%~Yi0N|Z7pkt5-w&!?<&A4jS8nzDvn#z=AbBbmfjs)#i!yda7F>lawl8h97LXkcXocj{VbipK?bT3x)E0srbDF&bK})_3kwpZJ0LgFw(+}A!;)>S2ePwA>LP=6(eO*>aN)|&)SZg}J z$ZiGY#Wrz@DH-HQZ#!%?-NTI=t}@6D4=P3^FnqIrX*#k&T|VDw1?e-zaR_M=u0iN`w1}7_5hOb)yV%=s4Z8Kds#auTuGc`W#YlklA zKcmH+*!>eNuHn{hEBd}aI`S#zJ%!Gxq}z}Mzo}u+@37PI<>QFK;DgS~G1#Z#YaAt) z$ZSXl+kMXF>B8x6IsWisj){dUEpuH#7HWt}ycHIbzwrsvz^|*aGIB=wTk9;7>Yp@3 zGGR^}<^_ch6Z?fN9R_^N0N4pNsLz~Q8PdJdCLT%#6q+=t8$HkR3u%v|ar=KduABP~f(t z;Hw4bhytpqE`Jz>o%nBXvvr^1L{?mgy;A9gVIGXn$G&q*=?Y2M5nktcZGpLK`idmT z2NX0VTq~)_BP!pMSX1~G&Nj%^LRj-q_3GG>OH_X^1`Y54upD$>$5V=h z3yfCxYV4(P@%5P7!-@tQ&Nsj1&^lnW6Uec2)W5O}8uq9V-LjO_zTGw(%o6?DG0b#$ zs6Jx0z}tk>{=>!>4wn4GLfkunf~Lko=O7Sy9_-KfU{K^^RlibUsNPz^hiNug{SIf? zz%Hkw(wzL{_IFC!UXiK|$5ObPMINd5Xx3B@8>6aYd2YPxNtM%KW5WcpFWT!~n`AP4 zyjxTdNNHwk+c}#yfXQAS#?^4t%I41#_sGtN>hj#ONm;(%MJqg@W(w))$=y@wA7ZeE z`s6|*h_qstvAk)Gs@}XGYFDNor?o3B-OCVW4ng1Z zgYr-9?=rmH5Tk_U&Tl1t(n74~R$I*DV6*D!=@|fUU;wOQ8{29=b=JLqNze327NWNY z6gwK!$Moj2J}SkRGFtZ{{b!Cf9RRvvFJPHPWo$)?x{Rdp3NGSvIAYB*HkrU~gFa?$ zO}NrqJ0DCHC-P{;phij@Vli9=$D+D+ashkf>S$goXm5&cB9R*uv#`425P-^}KjN+u zxx;2Do@}dgXJ;ZzAfQ^GQ=vtRwb`=Emf(kkNAk&FZVKC1cI<*PD&c~V#CG7@jbB^( zU^46&I;n=G9s*l%>fBI}j2cF!0{*k*Mhs(*Zxo4rmek`y5(G~sR^id`oqK6{cpsE_ zWwor;%5pZ^L&mit@O93FD=&^}i zl-Hfc^>dti@9F`JLpDd6sod%$c$nQw3g$5W;UNpVSyxB{MvJ?3>i!;b21n_KZO&>0 zim$_j9kuxwJF69n4fb65xRJxcY=~vsTYQmwtUnx|9(z%U4&L>ndfCWgyJI8IGU^0D z^O40nXDcGSTrcjwLnHKsO8N~A`yV6ue}dlikRWP;_VQ>t$HV*IoS_-OxH9(rrSfMb z^EdeEfBMlw34j9)PznXF{~77vPdS3m+rou_16k0q{s-vTKl|nXGCCE10LNBkQ`jcy zzux-i8?;GyAkq+D8vWLM|3ChS3IVucxXhjyo)}20Rar#ELO=sUH{_T!21;k>Fcfk&U~$;z!eSMRnh-W(%MI0 z_+P;Ia!07oIjA*E0+<-w`y0FCe{cT(@VO-sK!PP6n8b#EEA_VK1K9f{fOTL&%v)WU=n@KmZEnOc3*Nbyi=ndh z*zTIB>3#Em=lJh4f1zl5cm}cZ{GV5S1^U3XDtg~GTW%1yB5Oceq^|IaT1&!qi|Tz@ zu9Wb=*LGXo&QD+2Jl-F247O2!hQd^5TsS09Z$ir*Kq{0z3ZDO{V!=1`;GcC!TUews z>{%bC{^@7G>QK=SuN9Qum=^1T`UrMMo|4Ya?1He+k|b)L;a|E(!@S$4D@mbTF0IZE zIkbVXg=Ex%PX=LnSM6b>R~s^BKmJ3k^DlXrCI|Sgba=h5>FsmDt+jczfCAZSzGtlf z)HJ_BMpmjQH18VKY;Y`2;`Zc{i*WmON1g3>EJd2+3a-6Ni><&!(#=l|k|J(qGOO8!+F3WeRaUNuwmaEa>^2HV53{xX%JZkR61B8|f` z&h9wumc6BEkc)dk^pO852TSD4YoQ{8q5oBT|3@#Xr~c+st_Z5@;OBh0 z(nV^$2oC~m^K8{BQ#3TR?>p}S)KgWUvOUUJLy)?)v&1&8S@x>gDD)z+_tKT^tf=VA z`YW~?2Mb$)aW~iWmn zayp(EAVp7;yy&AF;R5O6rxOLXi{a9IQ<6+7Oe^=mVClg7iNhqJM6rP~U#>}!<2H0q z4vS9pe<))E^xh*NH9SwBXz(!pT`IGpTOFuC11X#h(Ns#3qH#19b&s>e205Ug3w)gN zpqXwiyt;xTmq^!|-t2Ruckdb-H)vETN3Uu_B0pZ2y@90H78G11v&jC%p%+F&U#)UI z+1qmzb+P#Y1jWDrY5P*7q>c2QtG1+F4AWrnX9l~IM@mr9!vQX(?x8Lc!zj9m?V*jt z_)2|n)iD>X5azqAbO(j5h z2K09Fc)3PFJd{`N&32)z5GCiL8r+nLp#`7l%B@sYb!^30XbT*OlivKUQ=SvaA?&Sd zZfFcO35+vk%4Us0Cpa5K*PrUR@LbaVRr3j>0^^bM3yb+%;r!!AtJN!YC&eOYrV2vK4`t*Ls(`=qi?k1R z;YE9&Ld-~c45`r3Cp3o(uO!t5e#w#~+HEIu>yq!rbsN;zujc4Tiat9~jAbR)z2_kJ zFdUpWq9Iry2{e)@D;14%c7@Z9L-MND6kEJYn{Z?LMQ@`seT7zMR9MVEHv5URUvxCl zQtl;cLO`9Lx?J3^yv)FjHSgqlPdRtVUwCLTBEgK{RKGn&#*7T84W!6;x$bv+CtSYM z`Ai}FB^qMvDDyZ#mWQ{_t%CZTM!5kpooROx`&(B}aMzS<*I-Tz5sl|yfNYxLYtFbr zto*V_NtV465AV!%?-q~m#+)@^V%ho@*5x)1F4F_Zp|TeY9?^Keh|iu57Gd1bC+E6P z$fuc?i$Pb9p z(wYx^7%2|JTl84dFtNH&?K!>|@bnPFK4grZ!w~9V~R6xo4Jo zlD(qQ(k`v=0ztwO{oh0SD-;mIU|1#!4+sM4p9gPajG%eY3gEWt0}zw80K)ZrbJ`0p zoQ=AZ7S9<7>f|e@!NB!{t6SCg^F_&(I9$C;O#8nqbpyH%sL9`a|NcGuZn8$i7x;{z zw5UyK6S>l~+gW|lm&tg`8Ccm{%EK-RW*=Te_d~c^315GP@>k_>E zxoL;`B`Sx8OXe5qY?Kd8I@jOXJ|6dK+L~V@c`Ce%2c=0;EV^{KhFiz$>R0;ki^`{7`dq>s{`Ar_}5?KR+Rni!x1@UTUj-NLap+-5qKKd~m`k z4V0#K9Ov@%P&3hV%XOdN>3$#i!Q~3Vb+K+lcZZ*1Im5S(f`dcMqoF0_K$Edw#oyrX ziTK|s0e->qdV#cIjq!Y*%_M&r&jK{)cgFmWA3w?g#67$NXnfFwv{YbC&ir8l(+b%v zn^Qp3kr}VAi9@K&Vo~|k_$yoUV@b2gNAm@%+AJ-%%q9Y3o%zz`{ske|yCO6xh*m-O zK;g?4Aterv9WOU4afkz|oA@MIaaA0h%#RYP_l&1YwKsJTTf!Dg^U3>0oLrKWRSi9L zy~pL@FIh9E1-?6Pd>dx3g9b5eOpd{RO>t3`yT4%~Y@+Pf!q+Voav`4JNvf`}HchB> zwFpM1)gsL^+&?cO?mJlT_AMX`7foL(WdPMKW3AHaJ!!79nPdF?s?r_acQMc27iod( zJ|)(YRmk{wO_zF~gzEq$n``qwG|u|$zj-j4+DCynRGIkEjK^u6^CqgP1YUtdi`?jf z(8Nm30xDYx%i9F*kD>s(p#>255s~f1v&$$FkT#eg1V6PAh*n$bIb7a~nnSY3iOeWK ze!&A)6n27UCY)z{_l!7>YC540)kddyqcUTXY)$!$J8V3`DY9K94EK?0`rSoOv-?v% zDTT_neNzR|mJ59V5}$r4E#B0$rXvmBQZ>cfOgm@>$TUgsL=O`sJ*dhkh*~DX7P9_s zaB4;GmF*?fBSn}Ca`iN_g{D>b&uZ6RbrN|;amwn38CWI9G9k-P8xX{YOwW_8k$G|uE@yO&g@N_;cW zORb!S*Zpg9s&tN@qHvTJ%vtX9=-Jm&kHaEg>?>irfBTS)TTPe4{uuWTlfrab#n2Cb z8YjKmhw`r}+c9qlKdAxN5N_n5UP%1dXk zWAM5YgZ#QoZ@1_zb8=Sa%Bw8`{B+B{&D{Guj5>*>05Q!k9nD`>E9C}J2m6?~l|9J%|j3jrFFKTCklo67&jI5~i1Ea-a5P?vuE$0bBRCw&uXJ zzo@TFKpc?3K})*SR+_c&qfZtPsxv!(Aa`uib9L&S*iZbbZ^TjfqaUCaPMRtGh6IJ{ z*6bDieslbLF|ALtlCDC2n4b|lVv1C>=9=z`IT0%)LpbhN)i!5R@Cls0DFUeb2I9`@ z6Y-SF{gL=;`geneaORXN(#O*rpgg%n8Z5UO^IMbhZtxqyr%%(F z;UyDCj-`yX#Vt+l{h~^ML3)J@CSwE4)MyL@Vr7 zkkgmL#E`vsk_)y(>Dmp7p-H^{ZsenL*smC(6g0^#jBWISc|!f=N-z88q%?LV z<`E~IEcz3_6eQZw?Pf)Bj9#Dk_Dk+`3o z)>)If>hTE?!5r2g*-@bC_jPHIIk661mL> zs?7m!+L`^3R9tP^dsX9yW1TC*W4l=nJor%pkosvCY(tfQaF(#>ESzlPX9YV|b;KYQ zg9!TatK0ZY6RXyZz(ZFaRe^S}V== zXn$F(7w2+-vTzBTnraybBhO{#%HO4BXj>pR@A2yFrAKaoq(mvnA^C&$a(m^Gg`K#< z;_W%9Y|j_Xst@@0Sw;8eJ{rre>Gqj#wiqX-9JL@?ty{Djhpnne&qp9`Plw>`7E-HH zrT&8Lw)V92^LqdDclt|n(Ougs z=Hn5~$)V|9Y_QPW{dxHcZO7IpAx0Qb#mDd;5FAFX#hcL|F|w8{z@*>|+#-qc!|7v# zqfBzaxC)lXrZke|A z^>0#wRz?>&HUe=I?k#l7f+w@qIT#MXTra%3>{tAQW9arbuEfz9e9H03!RD#MN+7z0 zW6Y*n$y>GC#{L7xownm)E+X6(aE~4?)t}6MSfZ715Co4C9vl2~V}}|N3PdvV+8`l? zq*$oYNXsUGzHRc63CQ`-f@eQd-=>Y7Yk&o5TKK(BW#NQ`237e;md!srbRvbFC2p@ZW@#+cHSz1pfq74A&~XaYo{J&JyjD=f!r0&r$w#9 zMQ99Ako^~=W#`HSfCvDHBnSztNZBA)%xZLmJ^)DzD36vdY~)qm=Hzgepj?R=9~ ziGQy}A(I`TGHeAJ!Ls?;3ntGY9b$LkZ*D5`o{av+?G9MZ2eCFMUW_|7w!sTLBzOUC zrzptwB%s=@^=bXv+9&uKpQ&Nb4+c0@jQc2{3k1+3*P6#H>!x0dhY1s|aKp6ZODH>d zP{2C)yKKq#O3y=%_3hGVAr52?mZOe#m_UR9}KQVEVA*WM*S9 z2uh5v(Snq#Z|k})m&%Y6O~rQ;mSt`mUwBQ~Wy)dHcpQ;XES_vsmW2pj#kDlwjx>Al zQv2b6%-MV5k*eDb3@dzJF{V77eiEVooTM7tc#~K3q?=KPxBCQt>9LpsdGmn0B`o^m zZ0qppc1i54+t27hR^HqxlF`*IscHEyfr^W5Uy8LIoS(O_rYX8#vrxHPBibg5MSZ?H z{)33E&;WgCh-~4Wu^&+|6f8)vmSIlnhF5lcKVFH`L%Z~0A5~$kw@ioO_p1*Uq>(h;fNAoq@Xnv`CjG%jJ>|WfW z{_z=Lz--@V-)$~t%cK%tT{?8M!C5>K#|$;ybTDTwR=l)#x^y?x3Wa_~<$s1Q(3F9N z0n&-9Cj4Jl1{(^%jBHy}-4D>Tox?|-SJJqj#VtSBBzF(64_3%C6^~#OfQxx=GR0kQ z*6=X0$zR*e&MTYVX8X&iMGUa=wsPDH-}DbVX<6!flowH6Ec*G`w+dL06ps~xx1UE=Q@rwJ5nTM$&fTJ~VwIAImS7Q8rR^`VPc;d(< zf}XSA+YZp7a%B|AAqV{9^3*-n0&w?KYTjDPWW^6DN=z@DO`srJHciBuXSz3&2(@A&vwIN-7(m^vJNUDsYk04&#lff!1Ws8yYKx!s_* z5y2uUo^NjT;F`X9;*_OcVRtwv7k08mPtu`+LOOBpzyX@s@HWbx^PirFf)9LBV|IVa z|Lvw-wBV#nY)?`)Lwc>cv_$90%FUTrUmm9p9#%Y&+YvMi1jo{lA9hP&B;Tp`uO24y z^EI$zusqkUe+$Y2DiLTWoWzLtpELEB&}0Yz)8*&-w$3=1?Xx=I1RhXXrC$1eaNiYS zt28ODlgM=}o>)a=E1u4jEixBqSeldS#?|?id*EP}-b~-7fv=avQD_`*INAfVxieHu z&P+-wl3yRT844p5{L-`1c*J}!toR|k#Bq%$@@=+gKR1_(c5$DMo?m_EFmg1$U8u~_ zL+A%XC8YMxKmeg0gIbL@SSjzV!ca>e!e7}Wiw zSIF(6pol}vgD7H3VJnKww(gC(Wo)zca{Y-}>R$HEC->4SoF%FC?OwPARZLTcJ-$)Y zS5-w%cbqC*M^8l>Z&g%)NX$sDL-+T2h*mjVrnrh!ZtR=!QTC@VW?4nx4Ts)7Rx)-( z=T1A??_Jl3ReX+$c5cuhht%uyq~+_7>R(CqcgK-%gECZBEj-~^I^5I>w6#-Tl)^s7 zT|PY~oRxj}C3w6`DARt`jzTZztSeEJc?f2b_8Bs=X+> z&xi^}U;^cZ6)l{?nXsQgM>J22Vqa=rY-i}ZXoyg{*>12OmhN)0_mwS1VuMRR&%t zQ?pE46-tpJ#gOAt-M2Ox(GyU*RHisM{DyBS`mC6JZhq_2lw9@GSyR&xQj-HT>drn75N2?mPI;~%^~cnrbrWBPv6=`i&xL}ifn0z=@Iygxx6~zrRk-vN_)>Z%{nn0^S z^R>z2hM8b|MS1D?>^x&@-ml)@w!+d@6N)%UI)dKU4!Omcu-R(!?QPw#0#`0!HI=^! zF*gK{h3qAjWvpNme&)`tNp66&C*i1+<52QyZoqwFa(a{YFjujw8e92gDc)rAHoGYl zmS=6cb2$6d%jC8Oz*H|*ICYXlJg9Op{LZ$Qt1)ZF`y!)-dwf{$LJXJz&WYmd5XpY` zp_$Tmb=IgA0vwo+Z!7Mc22W|mQ0(ugTR7Ojbvl`HCPoMIhYsXLZ~vzJzseeqCNwN) zOCj{`xrEun|CTV|`%JRAlF8pDFA3e0icSbC;cq**kUpq1l`!tHh>NB=#_mkyE(zo! zg3rNa*`5N)g$0 zH7xWJR?Cf&NwQ5@7=^%gimw>`iz_re;_PtUC0;lPIhxZ8&2vCIl=Th(bQ z@`W2A;aNak<0Ot}CBR@oh~PU&9$R$ow`a}1UOzA~!bCbGN%Xk+wBlUFz312>MOnQY zO#+*DxbQfSeAazq1o@KV5)x-;?_yQmZi0jJ$de^?pFupw!GT>bd1{8z?&YGPX18j@ zgi#^tF^*1e_15O2n^h?N+(ytREmgi~2dh15jL>bB+%SjOOjpOADePq&@JD(3jRE1< zGr+>2ei?y$_Z?WCKNg$evelcZh3h44kDXyOMr8*j+fY93gL@oD1{M;n z8k+uLG$n&?wBVdhe|gJZN|mfE(NfgFc*N1MR5K8-=v+K%`JaN*Qov&Q_`r(u+$v}G zu7w8);#$)k(&sW2%V>?6rjiLrQs}+ZMZ(FP#Gk93Lb!vnLpo;v?G}jE1q&J%1>r3= z3m{o)lH)wuWEul?9bYG2^S;x&n-kZo*Gbl8BnXy#rCx66ZWp``=nfZ2Y;*Bf=Fp>z zUNLbQB&pfarTPS(U;1BGSUK!zi5@|+ciMjy-Q6;_?(Ldrfnh0ng(cq)4*e>}Cp1ST zQ+k}S_k{tF#gw20D>hu%@jt@H4B_9Fm~QOJBvSB zeg81PiF|&$u0ey@&%7FMSXdNLDClF{->-Of`5(Q=_`S8lcmZkg{H}%9KyOm+^;Ita zi3LDv^!b_2`?tn2RDpKnosh%$p51l!0nnGj`gng7ACbfs|49)L%cFWY|<-fG4vqNzUy7 zhy?q$8X{6s!^ae?1kdhzJ_Bgt06~2mSZhN5Nv7W#(1sT1+h+}6A^kj}{__9v_yZi^ z9E-IhJ>wf9GC*$%=FR_;4*%NnGga!P1q{~1WXAj19UWP}<4g{?z=78ez@dEJ;eYw} zgo+0=LW{`pFQ<4w-tp)}Agpvt5)c-#F^%uDmj6|`gCISCUfyNvz&u-mQKEh``Gf^< zfEqM-*79>Qw3dP(cv=__p7&1ow;=h|hXIGQI)rB}Kj+OG41nw60`Q;FgGU@7XQ*@y zDkv0%G48o7|GX+a8w^M+_5;P`{&XB*BZvVXGbSY=;REUjh<|@$ zlT<8L*wN8ZysdW87}x>|vE}-IP`9TLn1;q+8N%o9u=M`+!b?O%#1{C>b{_z1M3bMN z&vk4IV11l*yq4+#-s*lNl@$i{|FQSx@ldzl|M(yhDT$OK+H6USCA+jJMV9P)8xbn| zGRBgn6lqi0sq9;_8$*($OtSA(wi%2th8e@}yxi~i_uKUSbpIZY?_a+^et+G!X_o7C zu5+F1dCqyBb5NTzO3IA?{{1NiASt(b&K$<`uEEDHj!GZGL5YnPl>a;;x>HC4(!p$8 zhc(xHF1oeD7&f;)zA;CHQJlZ+Ecb4Z&83&A_WKyb&;3&UG*h)?UZwsNmSRQYfn@GX zqcko&wAW2*5NhqtKq7vU4g=C;iJ~(=RY6VG2ma4a@IN~tCX5`^HTWwG2Q~2Ex}OTD zXHTE*Lq`3)eEIU3Hqw7ld3oW-8;3TDiaRjg_X!MIZ{Rbwuyvt9os*zGY{4`D2uN0!zS`Sos*++R(0!9Y=2@eSUtV-l}BF!$*&X z>-eo7L(|sS*kb2CiM|TY5)aW{QKstK#9Pi=8NTLsH4aSQ3{rNt)Cgu!x zv7{e!Wc-mO4)_tTFR~pUVScxZ6{W)(^Q1Xdljc)kwrZj4a{vRlu6mGD@boGUUB{R7ZRY+{5=6#3ER4LsD0Nv zTz~w1l_&1QD$~a~1Q^)|rMtMFqHJ#6db4fbu{Axq>va5biE*CQo2y?0j0FTEL`6_r zBe17p|3z)2L2Z7uCH8VL9*3u>K}*lRy&V>=_j72_Tl*6nhUT-0*_U9v;T<8%Mha857?1s!E}e-~*AB2qW<+8jo^HzPUdfXat9O4;TBK=d-SrNSKGtE+2XZi^0FqRQ85co-g$@w(u>2Zt@_=4d8^ ztkg@_XmFtBVI+HQ>35C_ZD`>4v|h;f+~LEAC!DIb%ujUfHZ?V^@~ETBF$dfnsOuH} z`%ma02#Qb<&c^6kdh>jAMIm*ihi$3@lr7(9Dqnoh{v0Ng7QN6-gd>t!QD*vgiKHOt z;(`a~{Xg!^E%2q&P;LGghE9dL)xgNmhMx_Ojw{NwZ`_62N>n*bV~`+&(uJcz$OQvo zy-W-bGsug4XJ%IJL*J>gdhf`jm_&c-wdZn9W?#uaGIlXldl9s!{t}Etta~Sd!eZ&C zvKW6E!|c5QMOE6=!vfHF{Y0(R-yfEn9S55bU!*_Wut}84t^E#^e8! z&=fJjT~0EL-p+4}MxN$l1?+fb?9DX{s>uBXc09Gr(|$X{%Zw*lcrXRUq|Sdxfsf%$ z+^ooFlQ!G`CD8T{ZsbO|O3}I_0*vP1Ct}>2UP%5OYr+~>CDc**>WgJZ8Gd)L99GkD zMnQz()jyWZ9gi%o(AxfwHD`hpbcc^_U^u6Lh${RLBG7hQ8GeR$eMBPu2h=D2er182 zzawv|oZCZT^tlpk2Ny>xhEW!wr1SknZfboIR)RhrlQ<$aYn!N#*m-oFKDX# z2Ig(xM#aqDroT)}I}4*9U-^&;`sunNUHP`b`z^~a%irF%%YIMw}D<)KgqXwx%_jZP{-k3|B;i z3GVTJQ~iDCo;@HDo%$SuKa>TsD~6w%zXWsqFfK0c63+Q64UnzNFbtxc-}b%b zk}sJsJZs|k1Mue;;p9*b<6H}IWXR^_t5?k`=>Fx+syI&#EKN8wFJzQl?`hgT104&s~QOE6$%vFZchr&lokOlY(@dRc}yefJ8h z!3aK4TDo#N2qp}EO{KE(TL>d+4o_20qq{e>Ae#AleB&7- zqoKXqIv`DpxWqu_w{xzb-e zs7e^?H2m=Ffpz1HKHzg+hK_0T1<7nE@|v)XJLNR@%_SIheVOm#y7Cv2+bVF;;DPIi zXZu>ljnI?i_GGHgG|c*REiHb8smihAfNAmd=g5RPeFK9p=;#e7!pZHj4toH^{IZYD zwSeAB`gv9=QIjpNwI4y7|GG=Dxf6XA#xVcsl5-x^2q;r}UEvJaM)`zo5PS#?=Crp! zXMS;U@moy_qo<(<=NHt=!W11*KbTB)CvXx_G#P%FX8nkPI4g$3FntlIrcfv_N!l;VxV-Om%>}g|| zI$Ib6kmdx-b!clL*U{iV8{UOm!Ics;9PNtP#cA-D|v zF-ESI^o&+MbuDuzwjaJRs9xbBf4$Qt*ReX9(bxISiHEg|0;o)QYx4(5Vr^h47s|P( zSlcMuLNRRaOtyxWN79$12as{nwh<*pDJ@5{RHz(l#2`g zzDV^HKr!d$L<4A=zn!o^ug&2VD4SPWPdLZzot+S2uEf2hXqrg~2t zG%9x|?lZP@e^Nh^VUYHz^yZJxPTuQK4oTB61wQ7}6G`8=^O{nv&74K0eX3EMbZp9Q zRp=QeSAT%Z-^!!w%ES2h_)9yt{~eW|z5o}*o$lFQ`QOdx`z%BYKuVRYC{dj_F$j9h zmJYAo>8IPCYe_8lV)lz~+Pu=MK$+ZXaFx%RhSp}f9#8rtnfEx>xxB$lR*nCFg%~(8 zhhqAi6YE2ktsul0vu^XgpPlXt)3(j?n^2#R)w2CfF$33tQ}e7k9-p)OH|12fK%!nj z&e+ie-nLYY3-BGhBT=vV$OIpJo|wSCmh z)pUk+RYK{;y&xejU>ZO`2S!BUn|%bMrFZY%UGLHNHC=DF_tLL=m3bta>O+}wa&B}) z>81@7ouU=$WOhvTV=Lg!`9_{M?U-I})kD$d#&;uexyO%rpR4#5E6}H5@s(L`7^oDC z07L^(ud%7ok>5eI@CI1ysbgs$9Dr-m2iEDrh8pL-@-x4_*X`bddMls{ckCJPj$pm! zu?viG{@))O#T15OQeVp!!T6gykZ^vGj@uE?SQ0cu_&jP^rouc35rPBfRTp2@7r|r^ zX%*jjUd(RZkucij85Lp-3T*hv!VFUUs+2yIzcssosKki8E73mNX{h?8gTzyMOpu zqsdRs#T{+#9r2(kA9(+ljMl0>{b>r9eL}<0-wYHW#&8F)4tifz;2x!siK0&3Z-12r zhj8+Lf^MtI#p7DhyH5UuX*5rvO_KLS%XDHWst5=-of!tA&EuiiMle^Gp`A!x=zcT(PrH@Tb za%ppx`8I*|^UxE~Y7WzXWqPpYjeYYjSJ!-|Y6w_aAXZe7BdKtrt56e(>neCmJS*#( zoL9&jws3CCd@|Nr4?%Akc}LXrP}t6=PCdm6Sq1kPwc&SD^bR?33z{g@?+*}uWK~$n zAgq>e-!6ZCc1XX{>tt~ zHy}!<$mN*m=%Jh8v6Hh$e+@{I32l!GF4d28zDngrZWfQyLz=8|jCb+xD*PY-`Q7}M zGKNhKcSQ1}APG}|QzL~fZjVb}zTD$FFjN~>rm<_q92-w4YR9<@}R)R@4Nz-JS9*GQQzF?~^KLBR?mq4RlZZ z>Z(Hfx(ZlF-H+rGJaiM5Ho|^KQ7a{Kq2zJ{k0#ejg!5bcK$kmjHQYLPb=Jl`e7LL7 z4*zu1?o%J(l_kM<9>1^ee~T0OKOQ9Rq~W0?&yYF2xgSB#N2juqT(mWN9l@7Tkjjtz zT;eflcI54-j4hDbq_umOz0213)HFQHfqw;}+ z4Uzi4ehmKMG&gMdx^Kafgh57d+FNT?m8oVYdb6A8%*)Q%oJC z%o>h=#kl5!02tP@NTmH6(pZzC2V$0)=Wt^5IW_oU&EHbXjz8Yb@Ta;Tf@Y%pe;!~I3Zxp6_Wo;tL700K%-oO4;4+oprGNS;qG=t& zy$63+7e;+$--85jPE2}FZU0?<-wi4A&hqXx9bP~!3!|w9J4Lo@1NujzX`v3 zs6SAKF&E3YhurK&@B{h!t&G%&i^t*B>vNlP{&jz5q(H_4x8oS~G+ZL^HUMK$(X$Q? znTxpW?EMP2euhJeQQhtN-@PKl=-ovmFn(={F-~++IF}^=8n4Dc^VHK2_1+^c-jI4e zYNy%(1j~bKwrS1W1KWSYlmD|2??`Z$FjY$!Wjyy zz5jhX5xM}Pg0q$%xfnN5i23F=6y$+kLT>{7?CC@ua)ncmoPyif10=DxW0P*$n&MB( zblR1v-m=>$DQ;DUL&30n>cR&Av46Nya?9X%<$O?${KRztDKB5Wdfw+VSk2^m8&?~) zv8OM)g{dQ5?>Jlymt4%N{K~HPmNr}ct%&cRrwf+{75UYk+Pm?0#oSYl+&_MEtJZd}>fH0A{8pP%P&ol$ZAklJ?*&?5`C-SUh7-vty9 z!0{g{>wIe!q9AH3OD!(vV-8rFy^wXhI)w}o2P{_WV(G!ScMM;GVlF_)lhIW4FwKdS@TcjkU%!?mith@WX&ky1W&yUz`Fj(2wc^p5Y2NQlEhOF^bS{XyZ-DzILyaEz6kub`(pTFkeQM}*m?df6& z8Hu4kqyPTMu-wJ zLj6})ka+&n1C|0LbOW6+zWe(Vfy|h|472^TWeiVqyCQbroVNB8h@NXDYlKWR9feB{ zyTjfVA}Wx@=vO!F4Ewh$`+YVXxM!1!0*sNI1zv~(CQ({(s-$lG2UgB4AAw^+pSW^_ z;hg`WdE7mSHKeV8PL4(~sl%dq!2xp)j--9N|U#Q5?bi?9F`JjT2$jS(BAoQBWxy0dBjJq8HJ z;vIs5kRMC2a4yBc0mltgB+?);99~;W> zXSg|H#e0f+xBkAkJ?Zd;YbL#%83o9=6+8&d`a4;{lOYQ83&EdNw3v#2#UR(=SLIka z8IHBO1p@ISoPX~7LlYSO4D5xoKjM6Xi(wOmpCYG2-=*2;pO-J{3WKYCmsflj@Br`E zw6|P_-MPxtFWua$^cDmX$6T2gC$N8XU-j(6SZ>~;<|C?X?V6vhJkcJT zg&4m(;4S|jq@_SF#3#*DA-+TRbuK!O-yA;9gqK;$p9Pk;GTZ=L-VT zFjIYDmuEgxSlVsv{5V@7LZPp(ztsOS@^mpc_Ba~WvlOjLnl1F#5C*gZAV-u6R7!DZ zY#sC(#md1au?JW<51%}Fl4fK-MnbYL??O0x>e0{#eTGWR>mlw3V)RAM+tjL2`om5< zmuFN!Ec4JZErIeR7R#qJ`ki7vF~=u`oFg8@V@jD{)CM4$gN6`?Cq43kQhG6_31+91@W<9+1|I1FGwO99CBfXl$&MlT8kSstYz&5 z67UqnNT5BIm*xlD8yWg#Qytn5T8nYCZYL}%reYh}U=&*8=xc}y6APj*c@ z?s&|8(_JiUH+(MI1ToX-n&7p*tuzP_xn7@5uhu%p&MReh0Y*PuVRI)NU}ADC%Jh*u z)poh-2NR#D%co#s4Pkz_3!lmWw0@e|p;)AYWEPOD0DR~SWGqf%r7bvk8LUOWv}-_6+Hm#CMnRE?tf2Jlh1iXW6%wQa?#2KqzsRgGrq(J?Xwioc^$_VuzZ)g`7+O^~fc6Xgo#g%ihim#qjfeu|Es1ZN62ybd==S zRqT5yax%K}fmL$kTjyK;k!Rg2N~0d{xBAp;#l0H^2*pYWJ=eTrlH+Z%d5JU96-nLj z;>EOdCOe&-V0S67-J>jvIeTs zUIiOY*)ezEb*{}$RgzU+fZ3_1f$nHYf%`q$#y@g`#UxyU35_4PQOk7;259-*n;5(P z6GB#(ThsNBv@?`A4MS$^Q|(5ziGnY_Cy)D3LvFLptFA1$nwGm|cs|)dRQygX>acRu zQL;=qac2k3J$RXG0S5ClKyW?UQMY+?-AutDi^+%&1Gt*QA=Ik#FDYmDQ(W@#frVBn zeR;F}n{5>YX!6f+XJ=-1uJ@)~+J()lB&kGqEYhET#Nx4t@C!uX+{sbz82yfXP|P(P z0DW{d5k!V>JEqAT2a(P(nIzuxOm?Un?cXyFj|~eY@TIs-zGAXIgPq%VmB;~%t#j!$ zvAMpKsW!_+RhmfHz_!B@BuTFYDhCt%r$G>rK=WF6b>g3XhjO*mZ@2bN@rKL+&i((j+XKZMEQErdqDIP zZSPZ>eCKGjsdV#Hhd1d?{*L?f?RRjb&BN#??D!k`l#iqmn^)76t5+NYty;gC{R3%zi#H++~+o z6#Fy=m4tq9sb+FkK_@;xVsY`^e%oe?QaJ4x3uHQY!kOS-P-t;P^JYs1Mx1?YHVOA5 z?&L}_6-bU>aCvT-6}wK}J?h!`^30>3U*reoI$ulnGgU+Qx!ZltMOIL%fo5T53)5l_ z!vwmDT-Rh|ip8%wekJ+mwr!9pe{R6*xL`iep-6pf2+(vNjEXBTs-prvbL_S zB%w3BoFj&p$(4@=+j%DagAMK^niYJ*EunX+;Vq8!t-}p){8xT!kXy<`oWO{W3q$}` zs>ff|T_I96LO7nQBpu6wbjh=pXfw+c>!tQg!^TUupFzN;zK;ERyGr@52KE4Fv4o>x zk*D3ducbYgOhnH=zbB~Fj(w!r{G5l(sZu5Ewj%PA^9V&dSRs|IDAOp%!Kf|6cfg03 zW3wSuhnYR@=7(*EVG;pNhpd*n^~lwGesprjyiB=3XN%tB+{ziPihj_}VIamog?TjH zJ#I*Keulqv*-xG*I<@4*a{okgYFK@E4wbdesibd2&)8VPICuYMQJuFX!~qPXC@)7| z3nur?bY6-&1N|i@%A=HL!au)|ZM520uTk2=FNwpTyJo5=ufCT_J*9Qb>I9jeeM{rg z+3W96r?oOeK`$x0vbu{d`Adp<=dQXQ+z7t^uUh^u{PjK*fzVJ@Aq5`h5wd%^Mtr|E z&Sc)ONs+kURYtw91bnY%JsYuqcnlv&JP4XA_pR))9xFqudXnVi@E`cEvbMM=s^l#T zwH@}Fwpj$-;(RS)Axl^T^9QA1aFI;UtKAxe(;0pNd8qvDvR!>a7ud(^RQ z>9Z8d-td4$X@2GOJ5Gd|;`qn{O>Vmdu_Rwhenq!2VW^yVQ=&3m&GP2PkOp+bdytTD zAg_v=IaXE#q==R17%QI!(>n6-jS^`iX4xtm?*W?ruih<Rk_P>nnq5ag_JON{F`F9xAl`XSdUaE(cGx-rEyF8 zP{y*!tycDPvdDVDb!XC=+Be0|DFaDYF0IZASohVg*OcN?#oBVrjpxp)WR0<3th&3* z`5NdI)b8N|ZIZR-T&v>+xPRBrIzzwFIe+p37)IaLjUIKAi0!n_r$n1$m#87Li!I9t zk>_OMa{*b0XS>74m1wZ$CtZbhv7}#+fvT&jgN*xggR-9OyYh7luWBpMCJIlgkugYY zGhWH_Mc_^JGO)E=qWrd;bA^=BF2%bqmJ_}Ws43D*LhXfx@M0z4dOx( z4)I&MMI+3N`617K@3d^w!Vgv*A;44a#s{d{8C%>8srM)Gjk90HYNkxaQ@s{ zD&C!1;-18#jd59UNL%LGs*Qe+f9HxQ?WYp2!cU@(Ip27c(M{nM3%1944jC`{n4 z{O%C-BEG&21j*^rAIY3{be>M@n`|iA*61GGIf`e3SDy~*D>i{k7S&mBNz;2_DC|q9 zednd>0H&1DTcJ~NIjwdu#49ldssohdM@`zLncP0rLQT?er=8Q+8xM7$fr>9_kxOAb zT*qjzUGc!P^Vk@Kf#qW81faH0bTr;GVT?bo>Tc-G4^ca%6<^)5I_qEcb=F;~1V2g? z@a`IUYF(P3M!#4Ir5W=T-L(F>MlHenj&S+R=bnazR=(W*Y+N>H)4Pe#qg&j3yyGuk zsJ$Ghm7)I%=pUpW>*fbtaKV0#ZjuQnW|j8sgrXd*{R4@|-$`~0unN6sH_@=66(1{qUdU%m1Xq#}7k6DXkGk`e{qsYYLKjOi^H@@Tk+|%XQpu#7 zS@)Z%v@eUZ#CDw8SG&3#T)mXqKiP$p?`xU zGEP#6$b)jrGwx$YIf!X#Mt;*%VTM*BW||Vsn_m0z(fJq7tB@bppGH>^OnVTpybUhn zBEqk2k(cc27>PLCL-xmHwD*-3}VkEyVQ6A!fG48kPTF zgp@_KY#*)Lc5l}FP@+<9IYFWfsAHcC?M)0Zkt`v^x8H%zd6lg_=PU(kIb^c0@zK9q z9G^4;(&J}WGg_q@FoGSULVd@+iX0IhN29rx#$~fpm^|#lTe_`u6P-)&lLNRWO2l?1 zQ+E#3wPVfqty7pp;5kXSV4P zWOfsF=#FT@1BiNe6PrTpmwaoxs_f~$7Cl?PtePWd`fO}0m?zq^Rq91x5TqhZrqSx0 z451Dtc~%}dRC-IioI~r!x1SLb4fh;H`dicESzcj#+{{d{)`Cu2IJY*Nr=geJZgWa0Iy{PG zd&Tt7<{#6wc4smZDsMW4vXdspvkrHr;_WXN1DhyE5whDzZT!PG8( zxH7J6M+V9Uk_4YonQbU8B{VQIM%-|U?_TRjrW<@wti6ixXcc&3-S5pBu$<`@HEOoG zAG!XmKiy|`Tl=+A@@V4=GhHGU=3k|Z&K+>3gz1P(35xkcWMVQ=3LQ0e`bgDXT;dQU zCx1R;UYKh+FP~=DHao`OQ4t*3t)!wjSrt?-uRf%LB299>Uuy zqh`Hd**HnJ_k4C0GD)RS?CE;fLy%7^US_Q9VjTzZ#;n0W2DA--TQcrzoYrp%BufQ8 zm}R=O?OXIKx7!&vws0w$87vU6N7L@kds@a%Ed*~=&G+;Tvk8JchVSyXv(mDf>x*<= zszp&Py!hkynU*+y?2{P4tY8%$IytvEnv-i6$N#Znez?+2sP*-<{x6h>`Jz~oT}h%~ z2~8fHu1QK^Rge2^r>rqwv$Q0NVI1i!I?U0e(U-&9x_;O*HWpvlLkhm3j9(;kj4UiI zp-CgO%-4rlbC>J)7;RJWdFw}RGj7kUPg|Bs!O0hmrB_hpU+1l)!wlU1eCK^HR)nJF z2V9yGts4#0j?+iwOICzDi|_ousp~G3Nw&$MSx#H}u1|}1w*9vkfT^bD*RR1xDwD0N zE9e_5ojvrA#Ydo$d}o}2$egW+0A`>iDhs69a>sAz;0Up|pGsU=O4Af{Jc(of7QN@~ zSj>_c-goXWmoq|^OYqm%eE3!Pr1LAN7rRP(n~*RI6~Oq(2Rmrwvxanit%%6n6oczN z=dl^PgT_y01piQj$Jw1?U-C`vsK zJrQqx&(TXW@eC~pj&{{yZ8NpQdv4yYVoNe z!+TNbMm~6>=E0cxDA%9z@j^P9SIfszBC;Ju?DjAR2=U7p3HeSOQULU-B1cp@huKHJ zU-d(;%fx$eIA&6hg>1t0&?~G%Ml8$VGSSzpaVKWUHmb?anZ0&pTr60TD{l*z3o-pz z86SEI;h%R88F7tX+i6w@PM8x?dQf!s+qZ9@^^QO~c52g`I7RnNWq`g4{&LwY@sn?h z$I}F^+56W7vA%JGlxn?F)VlgxM|)xh{$oz7Ph&~P(YR8&|AzY6@5*-mt2%ittF-gKTQYoawAH~?T6*|x-l}~+l7vj#rxR^NI8^P75(kZdCqsA(;G`x%Rii$J& z&_CI(W|6^piU`ErA|kh^@-fDhgE-!!A#}4r5lB{k9whKeuR!&~$VUTJ$vq3Fm;TDyu8@)6356Ovo}WnLnm?e}eTPr1Rj(vy zn@G!j={Xq2ab>NlOzWtM#?xYh<7$dCA+m=}tb(1D2HdvU-sG09YgxZi>S2srj==HIe9O* z>l9>;dJP7yy*%_Tq^ae(?NK^UlSE)Q{{*dCF^0TN8|;=WR1)`He-Zi23lJpLFYVe# zYt5&v(d29%F1W)F>8FLw%L`Vt84(RMv#D@aCacGwfPPn^-^`t&o*yl~FVCa>=jb4~`3-=`*3l1uOTs**0>=Si;ToCnn^0q@N?kqOAxao)1V=>#v?DXATR7nAy4sPu7 z($Bp|r$~O@T|!Os!xT#1EShu*bx@x~(`Au$#wE_q?6|EjkE6%hQ;1FzeqrNPl~sx4 zt@NnPGI4n)SE||vaTJ;ArcpiOwbN&7&4$35=k<_SNHjcYb^={>Bd3B+!OkvzY{YOU zQ%2+3&7#^?k{W4hV!slWO8^AFfr%44l$)0*p>lHF|I28RKamSuKCzj9hhzEz&Fm7Ri!O8 zblgGjIEVVWRx3QVmjgxR*k-Cdv;1xJb*%HuHs$6`nR5}kS$^|fb|YhfO?sW#Xm9$x zpZq?G8p*Qs*E-jfVH`$MEODOS$2n1YYwjnayLHH{U3)>dJ^|kv9zNL*Tk4$iS!L#V zX6iZ=PmewTw;B3ziA9rNJ8NyT>qq+ic(dXOgi`zi{3J?+#+$yy%N1nJL(B8Q)64&OEymc{9u)?-C*7fT3Qx;l{DbY-Irv%wWszK?V z#i6Q_ywJoJY>y;CTvz4XNY4_7V3U^4{*U z4437NWBq=iqFBm|)vO`T0*48v#E3Bmgp>~$%j#|>)4Lo8{IDb4Rl^=t4U^oJVb?5+ zDRz^o{VT1UNyhK|eG|YxeXU-6clmzC!1r;D#{Pm^==i`o}}*_%UBx@ zQH`>sMAecP#&mLK*!KR>qZ1<6%Y9DK)ujnPUS;{p5pR(>Rn_l)r}{!E){>mT*8^K^ zv{a?Z>KV2kSbbneO#6|mtyBmvsg>SjElOsBIHku$t)v0BLU)npy`!9e4S3!jG7-!O<)hTd$SG&uFS0SQR}v}H$o`H^TTy> zyvx+ov|L+`W5eaOIwtxEXJ;FCE4mX(@z&5vKwE{m*uMFln*R-rjmo^;rodyrakD=y zHP<>9(gC!yyiC;^eWWab^gGn$I1=Z+j(Mq)S#9U2L6vL?iXF*|YMC-1DzSOrxqKuU zlqIo#B@0zr)xoKk;yjQ}THC-@W`%F4Z|v}E#gVdna5GILJZ8C&Jk{6pW#2}YIOV0h zcbQbFZANz&DWQbzmCJX3QM?K;I9B>CIz>a(KPt@f(f-w>XgbpWqsqA%^nkdA}sfe|( zSdQqaZ+DW%IYx6?fF*kvkl64HFy*AO29-Hod5g<(G_Rhkz8mM}8|MrID_Axve|54lb$Qx<$erX5n3Uds zm)E|v(l{vj3!uBQ>YS1T3z=3+t;@KDI_af4LfQG_(^m{yePetkTZ@{LkB8m1Tv?{z zMAwXMHrispuY)>FrEe$0JQWHplg%NeN^O*OxSDyVy{}X(Ds2N{{#t>gU-(MC*Qd@ps!7ve%rXJnSuRp4@VF zWdFjuDoaXj@az2^S>ImIp-lD`e~rHj^=MiWsGD$z&A>-KPRtJR37CTh8|5pndd2d0 z-CgUWw%BmKw^oYW`TSag+!7C&1)ClfGwvPc#Q)0r@x})iItEz^iMbU`A-T0p$Bi^L^&yh(Ys^JAj-$n)1CcMK16)$hZEx|9yFZHMRtX5={=swlW>W9w`* z|ARKqN1+Rr5MRPno)evmB|*U7eQ1ZvPF63r4LioZ7!e%}i7`ZqOGZB_I1x=Aqt7O; zD5uUxz%g!)9m&_roiukIjXfv09%VGVJRx{~#p8mm74~uF8VrUlY$aa7_4PHAevK#T zJ@N$Fu{XyVZ-B~K1AIaGa;s$d-DUJ5K%vK0TW5Y(bm#mSEbq{8$zPO}f zm5#w*Ap6{znT_3ny7!&p^>J^*E`)Fp=m1R;OztmK$}+%<2Wtc0Y(RZ-?XdK8uZ?gp zt9?aKduHH|(7XGd=-z{l`4e+H=Y8iV#zSQcq|KmR$BfZp9@LuV+=o<5;(6IWbwAd#8`TmeyD))?LB?lkMxT)a>*_&h45RA&Fe25cr;Y-DD0O}UT%%h zl|t}_@AEltn5PDHbis09(3ikQ()p3G17m;?Ev_bO22+>WJwnir2D z0|<2-zqkRlFY#57v}nBBL-DwwC+EVM;#LQv% zqCBzc65B?hiIEmArisZ17GZ-2zXRFzR_zC0?5**_3thqYf;T9BbQ7{_7`+i6lK$Td z`9Ir=T*woanu|VP{$r*^I%uxbUNxk(XrnoL>Od2RWyYBANtMSVGc=I}|L5m4`>ON? zHa^6QbPyF5y%t|ce?TQIo19&l();C8+qUydFC;0QyWrsT$v!{u)#@`&-i@bWfFj_a z6oWTtO^mv@;?L>t@5+T50U%eQyQsE$hEq1BPYitNGI}f$P{?=5myus&7TC#(BC8v3 zG&4jvCXlw#ku08VQmP1(>$V5-iX0&Pw>>c}T0j6R@(^c5VGE50UjzBb*#jmtuB+Ya z)3XQ1wsUMeIo(IM2LRH{Rq;_i<)uj%46!|p7-$bCw8SnE-LAHQsd}f_fA)Rr#LyIA zqkKrq45(DjZ9jbQkp0)B+d>P70z^HGQd=&yj_7f&_yWbXTo~1($|^>JVl(iVlq;aeX#hTlJmtXC<$FxfQ7yl6{J0A z`3!`QN&T&PoMOw%}XgUzT#Pf2f+{BxOAeSv(u2j**jpGQww9mg^-Vw(Gozg1sZULP6} zOdD}jB+TEZ`akgN|1XR?1f2&|(nuwck}q#T%H(^=lt%02Z(pK>RJxrje|>nn2eAiy z(*LmsWE_9WvP#1I_se?`E3aMyM6@k&aq^5T#u*82Ad4WZO2&$S03x&uuk_7?4y`7zYN@-5O&q5FcswbO^CA18}Qv_%{<(IaUQhEJSKOobv= zvFnAmuT)IDiRg31t1Q3C=YE7ceEIwB%{uulI!a%1^zg<&Vp>1RboRJjrsw`VZq(AT zT@JYPoxjgdI#Mf-!uUDcu-P!MU2#!LT(Rq2R zGi}7Ucm6Tf{$(Z4eYrSMQ*T>zoWpOr)Ly{q5~wty^@;=a{@@cg+hZ=V7A*V9m**ZB z4kBeaMn2_KO z4O+CO&`qpAbvs%uS{tQ1B!DjQO4LTHEfI`yT4ObO19s5u!qp|YI){*NQxi03PHnj_ zAo~W0Edx7e{QE1tmp!9!dha(cuDSzy7*!5;T%H4TcA~kyk2xDsJN%D78Bo@r_$bP= zhLyk6_rX&P1g58=8Y+h{d@>j~4Uaqe;0563Xf4X859!16EEnZxYB3J~gOb`a_ z3D@e0$Ec77J49BD&*i0&?q6I{v6>ig(OdBqAq@N&&(&^UC2sH{*~g(T-kOY7CXu;- z6Gf2zK-R61I7kp|#T0LxRUv zhAdS4GAbb)4%hb$mnWPDk#c~otmQLw!#qBg*}u2%)TSkCXbWv|P~JX=#Aew-7&?D4c~i(1q?HUVwVNQ1 zTfDy)gMS4ZR-tM80y@9MRz>mdFp~DMf^)b0Lp260@FQRL3sLtssxBnm-*#l*5KS}i z5P3RXC+P&NSW zwK2VqEZo%EZ@dZ-s#5vKoJ~9?lH>d;{l4%!q7Et~jmP8Ok*K-9{4e=5)>=g%o@lHE z?jrSfCA96>-METmG7$nVxoftGFKe;G%|5l2jH&J@c;vgT z`LIfUYcOBP(Q=PTLg>S9xA<5KWp-rweEj@UOgBB@Xzc*< zNsvDclXcU{9K)IN=h4M{)7l%19bzwlOHy6=BT}i?*Fh;yY=KB_O}Rq2cGjJ93l}}J zzcgqs0q~$;om;E_V(D_w@w2|8*#X7xQXFDzKGvJ(bwFtfS=X#KjNtoDvRn?yhr&=H zXhyKPeOx4q*)PK<_DS-)z?!d*gP4%Qd?Hr6zQui*&yqx7HAv3*`7mn!w11QZG}u$! z37O!Vwkjm-yQ#gliSlU8EKyZf{KJUeVCM!RT%Fygj#oL1b=X9gO`Yd(ARKv_GO(T+ zKlmgcl~inK)0Gt_#O_PWqI>{0%(tFCtWK<)RPx$)x1X%Yrw(T2s)fX3Q-~*V=Xs}F z=n7t#R=EtH!*ladGwx6}pF3Lh^HQeDoaH7D3{2Sp2VbXuZ}M98oO4xc*Qy<yy9bd*rheV>B%opP7;@6su!4y_2qxE#XZPSQyseoI35 zp8{95ufnc(!1~^Q?+A&p43Sq$*n>&EW<0sT=c=xW*dzTe-J0h+c1QMbqq5Di*j7?~ zUu&{+#@G)G7Vxs`=k3b4`%V%`gX0w2pk4S;@LDZ4Ud>?M(tnKiqi%rCMwug00-;(P zPqr!i znW&_9t^~dVmOT@T9oomU|yBFL$W%<_nOJNdDPZo)$3hATATpue}p`>!)Q(=U1&4bO1`#u z-2nraGv#=(IMeWlq}7ng@aXXby?)Z{O^lvkYPlNGWbr^*aUQ|=z-Vk9%{Bi%x#FiM zj%Ily+7em|IG-N89l{!S=gn$V^~i~vDxy0JGiUV%tU+9z-h$pgqn*=fgXIWteSJPr z$l|d_`7?}5`u94juZ6qh2&u$xY4t`t{BpGzjTg$as=wQ>bzmespV-R{9MP~;t8Kgj zr`u9nfuwGkchy!!%DY}{w8I8G7uWS9PX@+`>!$fM!@!>$0wcQY#ivDVz<&(0sG>h+h(Bc!2aqtDRCP75E zc1j}KAUy^DNW=Q@=?xdh&6cKXH%>x3jA8}Xk;@nMS~emsB_MA+?lo4h&Ab;FJ;Yq1 ztYf=ZgkQbhd z_v&m+dA~gWeiIwQUj3n8pY8_nQ=MtU(wK1{KCT|Cj>xL*m(yuFB4?{s13?!OH{xY7 zY3Qmc=}bFbh~4_l0{4jav~h7{c6p+xz=zi`D#uC>UqDUBi}ZbCycT=PTSXJC#@=qw zqGtg?-0V+&t(2JbD1Hx}hK_|w@7Z3;tz;bKGwT^=ZC7|J-Qo0+;~44nWS&+d2^{g^1zyOqPEHhpV~V{ym@|i-lcPJ zjU7pz?O^HAVB0R4XM58{M4l@-ZRiGHKP703K)Z1*U#6ID2Fm2h$z_g4xIZe?ow87x z1$=!hZ9g&ySje2Is-gTnr6PT z3AJC@QMvzD$BO$?x_`CdweurQY0EZw*p=(uPBTSsI*BoPvm>R5f2P2m9##gO&|2aN z(B;PBJjQl3=W8`!t{fobJG;xNOoj+XUHJ$5T-XOi3Gyb8Md-Uq{lQB9hJ_YlpFA!h z#e2H?%u7Pj86zogkZ)~=L}KB-OKTZdmX7#>?z0zMhGp(Kw|tOlF}nCme%5K$vw4m; zX8yj0(H392M&{>#f`#i@=c@H;2Q$+tUlF!kzu&Aju0u`ASUSco?q(<*9GY+0tCyJy zG#l^VpZCuaPwe{&nIQT13s8|kzZALc$Om5bRpWVc^B~2m*X;2u5|HA7h3xY=$XMq1 z7^x4_cR5D*r?g4^|KaSd!>UTZ_u&nK5+aBoh)Sp+B_JxLgdzr#(k&=mDgx4>fGtW$ zr*s{q8$m@uLOP^GI;9THySC1JhRt`z_qu+6&2T(>pS_=0&sz7o*S&TUYi60~qask^ zO}TQ4749I;G$dd@sogl81SEjx`_FZpcA=PX1f@Hg8mfHV;=8{{!t9m=^ZYBoHEwso z6V;uUi~!BGB>{jhdkx~D;>kmuWZLP>-kMLBQIpOA4-)@cpBMv(Dxi|DSKhWKp8Wms zPdcF=zLMiHk9ls3uBq7N01*E+C8MMxUN%& zsIU-OHK-vGlDwC4@9Do~dbt+W&rgIt47eE5D;N@$$5l|`P_Ih6*!8O@i|RqX1gbQQ zdhfO)4IdzVA5ecdO3nos0Smy)X@9W$umuEO$6I^nemlvM5|Ce?O@V-9SM)~QVF}L?&OTd4^{pd3mepvkdEle`=uN!&z z!{jM7;ILKU?3W>##oBJ6{AWE_G~Qh>8pj^*G^nPRfz`p$KUO!MN84+hli7t;+o17) zYY&+aCI64dkA0=zgH3Y|ewW4HffBo2Z^E098`qrv6^sAdb?9f!s2;55l7kKATISpE zzAyZ4OJF|5aEPfSqJ&U;U|guch51%gGW>1|XQk_3E8$-sUE(1Khj72y9$SFbpZQ-r3qoCLSfQ>hS1Pc-~cGZWwA)&t^Hnx3*30{*xIl3{>T zL-zmLvj5!m1E<1X0tv?ru9oWOj(=Df5-jN4UJb=#1#o6~;qo%Oi4G0W1`QvCRt=Uw zXqsDpwPF6){-3G%KmX@(2sIivD9+hp_MXQ9Vgn`wNcQpbQ$0PPAJU%)M$u??sIKnC z)4xpF|GC$%UF*?+-q6wV!c)v3c-$d;Ly15=K#N_sgR!y1l-mdo@ozBd-!}jh#Xw1I zv6t{Kbo_6Fz%J;az5{7q0Rrz@Dv%7)bw<`QzVTSsV%3YWkA}7zy2l`cO?SufQjHJuA8GY@BMQU;(^?N& zW7P++FWJoOyIORll`{)!l3FEk7_BStPIeK#*@_TKfk`j1#(#u4P#Fl&C_*Pphwf@rEfeXf_no3jaado@x<{J@YH9 z3OyAsnn2Nl!7Fz$i&usl9VC$8Q24_%M}z=3C5rV1O@66Cr*QLBCw7txNFt`Qg!q zR=~?D-9EJWmEGOOJZ|t8(xgLkLFKyT_2oUeUC=K=A2LyPjZl`1gF-`<0`dLW z<$}2nLKw#eM_QBSlVz;^9w7$APsXi4JiQBwP|~2Yjn%vRq&*6p3IMhSid2QY7$mbFC@% zSvS9t!XSERtrGUmZ8mkxc7%qoaiOL#6)Mlt&w^Z?H4NM%o&MYBHeZcBW?=IufUlr% z&lEFrQFFvq0*LyuY~>c0Y0I73;Y|5b`#5d$gCHITD6fC~*!i_TtaHTU0j!w|M4$CB zU-CGF4$TpYv!^g0Z(YC6paSmI9zwpA9eN>EMfFgo<;~_CFW-i zfxE?nM!!Vs9mg?3FIz^6#NQW|47C||@}td5hU5k_{O-0R z0%#QTpRfEK{nDzCi+j@*CuHzFXa zQi7G?kaOA?D_;PB0DVu+z?c7gTKESKA{Z#r17EPu%L+Y3a6dwQ_x!sZ_-g?8_kiaU zyhjV`jKsnG;FL8VIsW&)fR!zbYU=Iw#d-?=;cILeZ|DvM*S_Me#9FFkl=m>7H;XaH z|7Q>VS5g$FEu-kbfh|9U`SU-il<>PWj}Blvq-_~Eb^;h?*7{4zyD_)?bPlfFtDbMA z31mQX5b3O{u;|G847i^WI32S2vW8r!G#eB~X74&E0?M}&sol6AdE@atQ{D=8qdBpCX04Agx< z#oBhCb)EOtwZCZ@_@W_^BU1}@8spdi@w^7+DisvNG_pTH`gpM1USq<4;G@rh+YiER zTQp4ZSKH(^7FA8GKR(&F0I*^^pe?WLn9`J|r<#=HPZj%kI_nz(6&{MTGTI?)OvgY3 zif#!yw?5F47Ct*5+<+=R+&Ao&0k~rVXdw$mU1MldAKkwGZepPiLC(36 z(Ruovg`K|EAGX#dP|xI}*p-6W2OiWk4-9`b$cgXO5HN%?*_^vSzgyUScI=E?8#j)3 z*A|dsDRY`CZiQny=(gbeoS;cPbL*^L)l)()5Olu*WTfY58kuakCX3Rwh0JQ6LT>$F zN7kk{z^MtrX`cW>lKq$`7pi`zROg~Q@-07;Vjute(3(+|zDnp*WSC94AM0^qCPM<% zO-`~@$HpH1F%sO{+|l-GDBhOs<5+h^a6GNm1o&W|ohaQ^NRedMQCfwwdH8Opx|H+{ zRJ?$W$^z12rQCiGp&Ywvej(Sedav6oBzjbzF`TOMrevD59+Cwmo+Ed$8*1}#MV&R4||J9HG0|!9AEUz}R1Z6sCA-!p4bhu6BbPU68=$ zvV{D%J&AScS`M*OeziIq<$iA{-g!TjStn)=j;tWXKuX_Z7?!De`;DHBH9aTDov+y* z)6Bx51+HeT=@Yz-??G*0BHD+Mf8I_%Ivp1E!~=&*dc%w{>T&w>K_V&A+3Cvid9@oq{&-p)Fx^zf;)~ zVqjjjYy-^NkE>Y2@%>kVfzX<)iKA@+EjcpLuA^r-XQy(50k42 zTJW8lLMw^jAVn(xm_FLUPLEesCW!AH5Wm83PyP^IRH4GW`FaFlm|*3-ESlgW-k?F0 zQHkiD!tg;@<0IbHP=Oh1M6L@2a84ZlRq5(4h)$tSu={QW#Z-#dXmJK;)R2zd6J2Ia zU349UR+U+?&&5Raest6gg`j#ssBi-5(CdBKKOw!M zpM2s^(xfOs^HTu!XnTJJ9=8k{-{eP(G|7NiL^g*~ygKj$Qi0%Z^+4SV5d%&T z1}*0(=(G}j)ddJ7nl}<-pS|^y6S?f?3N%XjaVQwMJu83a=lv1qdjr5W&4tVj5#3Uw z{uFQIeyhB9mP#6k!hW>O*n8)`?>W5Q$Ti4MPoU(NdD8VBQ0@!Ui|!Cu?Eb@2S4ag< z=W(`SBHdreroV;%e4)2yif|D7M%4uT4wAwh$T2M z76)TqnWtmHzA_yP!oo)1nc;PMgI$_FJ2bQ>*J@ATE604xn*aQqP?#*j1rr_-e<+Um;?v;dmf|> zGFeK)GE!%8um$4AN#$51tcTm+QQN@ahrY!Zu`>vFBE39?2Gr6<4w!3&DP(8lwaZjsQyLVo%u0i>b^>O!YyDq5*UZ!-1bB&UMcRS_l9H)&n{JqCP*a!<_=>g~iJv)+5 zlh_e{K?)-rlx7WFL=sOK>xf^;XMaWo6x08D+Wk$(O}SqX3EWZYhSw6sf2UT{&8JgBsC> zwhTIVzDj*Ap|%Q1k?*c-^;z zp}-CdgK4oHq$k0t_v$nP7a9^@-?BP~-tvbcy(~Tl3>az!^LH|deS>v6uopckTL7NB zFAFsIJt%FBI?(h&#eof|8_9-&zv#FEK+Z_t08*0! zXGYP&cY4PLZY)uB^D2lskGg-CBo#5}y9Bc&YO!ezX3tqQCdlVjt+RkKgPt3`4uwx4 zv}oHo^0tS&5$T1)!Srav-Iyf0vTGV|47|c2Etdl&_qlg_%RKDB4cj63CQU21fW-yW zzxwYFplr?&x6cF6XEF;qlN5dkCPMHX=DdZly!(nkHIH)I$kA9vD)>4g>5!WvGKEbiW>L{9t-S3VWx^k(Zs(!>)qhle*}dSYgEdQT?62I zODG%o*$OPVkCd%TjLQnSy2Y?0vl1Lt@zrA{Jqe;5fJ+6gq^KpqCn0MEn*6x214weY<1Dg%g9Yg z!YzQSbGPudGg>2Z+Q)ytb7{<94vwD`4s~wAwQlZf#OzFrQTH#DFg$ql#+W3+r*%9B zi^0UuqU-Kf|3~!bTb3UEY7L=ge7y$Fq)pF@7^1t0y}a6a^QQ1=`-wKXrszvAaxOQ5VEE!n` z{-F)}f5G1HSk328nKj*v#-Z6ESj}8nA&$hWz@*d3a0DD79Vf;_?mFWanWyipbWlr_ zibow+1`P4B^#sNZ{)2()(Uss?fg1E$DjffltM{g2XT!l45QWMs0n>)py_{~EqRUCf z;u$89HnqY>4TWZ)0ssffOpc+QXtx^FU2}oxZJob)07$&43QTVIPVPY!EP(NIvSzP% z>Q!EMv@yFEHEcw42wrl*J?jD_L}jGJ0(0ukP8 zD!dL*lKeW}y#wOD>!;78)`ChQltK}v43&Z3n#KE96Gr9X%P=p1o=w> zPvsxZXab@~sO<3WQ`=Rr=;R@Y6zB;K`TYCS{sl!zL-zF=M;5g$*8cMYHXM{stA)jX zFfWD>vI3BfdmZ|`3X5dW!Z4^Z>tjpHt@Kfxa_g<-13Z=Kg%c~_Q~VRVxZTp_ql=gXm&cWfSrd&Xv3`Ixw~xtC`Eh-JY0GfHXp2C{zw9y z@RNip*jr-Wi-3p>v_f%IRYlm&p$ceg5wFa_@GalQ{OMr^@UeQ@YLPHz%~IvV`+mAC z%#8VT%hW1_p#ff|P9iPlTM8=hyD9&Osxj#dGb_vOOsgKzm+b~FKI*iava>FeYFR6>Io0dLtFL^iUZ^0Z(()F5YA zf>UPL*cQf)c{}VF_~*i-%vibAVvPy{+9*lt^YJv zsl_HNwmc>Y z7k=;H>gH*W`bJcB2+4!qw4HG9Umqn_Fog231>kT8YH8VE%^LQO|C#H8tUh#n?EJgF z=xHtp7NHfQ7GTTYn9Ioh@r5rPg^d%wYi#o~BETSkO7xrH{AB`CUJ%$06eXwvs0DtK zn&UAkEU(~y!}R;W{_k)`1Ze~D+fMM=TxI|}fj=IvI{aDc`@d*T?;#_XAa`)AG2yu- z#CqumQRXO+(Hw-cIEEfz#|^t|?t`)4X{e8F=B)6R@C^mB-De$?&eCdvPgKGJx&h@Z zX{PMgptQ6bQG=84?bC}NFbBuh7q@_YWfc1%2VR-asm({Yhn)0r%(x8j8$W@c`hoXaTte zTz8{&yHV000I4SA^=j% zO|)9k0AYUA5Uj$TFX!9kQ;8J4l5_TZLPviVN~ZiRM;m*k7Vt81SuU%)IJgm5<*im?D+ z3Nri=heN=hc7Zm7ruiX))>f#O-f0Bs`Si-NtkXE^&9}vDW%vhnMKHar9XFM+TK<<< zP~gdRWx^OWlc&4>+LBkpmMI_4zcK|(%jU#mI^G-z5EHs00=7IH=1++v*j3!kfwA4# zkMn-Zs)W`Y#VbQpe>+GJY}tC zj#w|K4+VRG@zntZ33T>3kkQMAaH}1>_5F^}{JXSxe!RU=4-ZAnZP15u?f=Kv2%%1j zlKE{O%#XWkK-3Dg%x@v3(u3~Z4tp4y_-J>q2?6!pfLYu_%brvro001bD^|dD^{$f1 z|NEkPn#AIMiUy}fGpbbQsw?k~PR>ML|Fdp0y5%daN>QaOf8G(K;G}W)eT*H&yoJOA zG_564hnA#68|O4wxGV{4{V~w5u@kZ!mLM!8&h!69^Z?FPlqNdvE!pO3_>gZ^qqH}n zUyXoe$4MX|NzRyITHbDr>O9)eQP=UqGBe<;d$S91wA2FD5t?ZLA>dYEG8v#;mkI*& zkUwr&f7D62ZE9MJ$&pk^MR60l4>SaYVVlNaj|XO7)Ygg|+`@~CgHsYW*YSh_yZ$gk zj1a0&gG0wEV7J*+K;)nbcl;_q0m+j;?9v#NOOST-BKAwk&|vkNZ7wpk1xvv`Gz}V? zctkn;DyRD2Z$wFek4R2b)49c>VgGDKArg1WZzc`3W;j?+}vLdmtu~^ReCf_0110@dP#ciN}Sp-GY13c2wHi|9B3FG@lnqu+~N zJglfqJHP*#8TR8X&(Mwrr>ajTHvcN(@g1;O^=}iB6TfGKJrAXdTZUTZyn$nlX0_O% z;t^riMX5c3%)O-3OVe8u&;K5I#(@`)qtQ$X8Epe{*%(CZ9rhcb7lg9mO>;lDR)OvT znAolcMppo`79hoxL&e58ANRhd9;nEof8R*RL-!K!%CVU=70Hqb+y^(vful&gZ$NLLpgeVT}ma<1q=pFRM8m&9wAt6Sb zxBj-V3lw3-!O4eCE*&W3mJ0COBtk}z4t3v6T4Mofx*8*Ap-=gBNSj_Sw*y_RbR4(- zy|ORRC}VdJdE{z)o$KBb&p2A5+m_GCc0i+D4x(K`y~s*q6Ou@OtTX2fcu=4$+g0N;oS_@5*qAXePyfoufHF7M1$uBFL4$)82>_j-fEI>h< zn$Q(uNmTAo-+^Us79NO=R~iyIJdM^WHUvKE3qn z*^=?M)ttpWsOCZ~lmbc1U+#OC5aC#52B~IiCls$_JIgrX``L~Nap{mg3WFit<4!@f zDDKf~9fbO2z^I7Glr5Rs;VgFB>d-EXsX|40yLt00 zQ8G3}6zefElTX(_%Bb^95HJx2ll?f1s6SXCh$Vo%(%qy zpdke4eV}nEMQO6PGNn5a;#TyU6j?WU@fmd3Wc=TDvI!OSK!<4y$WgQ(bWgjY3LC~q z)*h;HJD}m`lt4F7m{A0I0dhpajx5IlW3H_qwExzp=7U7Zzat`)I_&!#xz_gimNkTU!ef>(+*c-(*o;oo+AQkoxh~&oH}C-h{Ly!u#;n- zGKz|19wg7BB`6~_m{lcFM#B@@zBX)&umAM;70|TtdMo6RQuInoVo}NRn()(t#7Yi4 z&kiAXKe70z1G&n%3;^+tlC=dbP?Y%!QZ@VeuDO>Ehue3*frgVyv%zv_fJ}k9d$~)n z*9`$k{&J@^ET04YhUPxYWu-2nw&r%-hU+tH@aKv5WE8bw(ipw_-PtG{RTp$rRQ zvsPsfq?wLE0tGmDL!)Sx4cE15$iSey;waVn?3}x&kT>h$N63 z+`xOUU%P-;(m4!GhoXy@2199|y%=4)S8bEebbe`xq~&tsL6JK*H+bq())U;AhV5H{ z1N9C68EVqWM6w*;Y=}Krc9gTCT>FTs+sKwScjQ=_LkY+&%jhY77q_uoErB?C;9oRF zT5j@yKKX$2=$v?428&=W69H2@aYq8=80}}~*6CacF6>5DYph-S8AY6?qM~Y1>rum2 zv4s||Ab4xdBOuZlpbfcmyZW;`f<5W=rQW>Os=48b*9wNLj|=m_x+ zZ0AsA&$9=c9(u&-dfectMA%?nbYAFT!gP5 zgLJ2Cv^ep-m(_=#pD}O)sV_ge!llHub3L!g$e*8{6gmxkky3C8`8UnmjDJ8?HM|280>$o0;6Vy9&5EUYC<*s#(Xw&A(nN-d{iree~$lzrltJRgrGYs!Ou??XUI$u18r}U^Lp))C$fryrtl-9H6ojq%zuIR9&dLdXdZcfCYmu;d3cR?)$=jvC3PFns4J0F za*?s1iQ!P&3?D|vL{tl5onQ2m8>*?dWWn~G0a2b(9xav;jegBV*75mnl|M&x=t0-T zK09a#<&#d%qipT=ZpTIvtehr}qNHw3eh#v%q@&5Wml;Se>nm*opM!SlZCa}8@e#4$ z0fmrN&%TjhDaI)Tc3&wrT$t=S9lfLGhsbNN2@WNSpwGb6JWsciinZ|WZ1pQ%dr>2A zFA*BM22q~W$}j9|MFr=7YNivEv3E+o%K&;AOSJLVJC?I(oh#t5udMtowMy-~Nw)nx z&8VtG(c6`*b>?#(8uNT1buXXSWf0EjKKEHJQD){*$;d=O8*(+Lp}PP=b)xL8n!$ln z^g)llqozV}2SOYbp?ptN$R}EP!RfF?qyagCmg(jI!O%w~yPSW1``s1|<92`$xl$iH zp8dV^1NFdp>$2YHwXVC9zFZtH?)Y_xBb8=lO)Rzcw^ZtHKO@Q)PT9YUZ2vh@m+06* z9fD99rJpo5S5&{bUb#25GGkTH^v)EO6rzy*02F##iFp-GFE;zoDNe;n0F2Xte-@8n$c zIUcCLv#)IM&4R_BTiP9Z3A93ZEy!%{e%NoIQamsmoywTX<($x)_UN3(sLLhMovd^e z_`S~4DZbux!}U42-)>)-;jz+fRZi|cWGh1vFh;9mKe{GMaC!a^N^ovN1D$Iz5m8Nt zl}jF%+cLDYa*awUR&XaLQWQt0p33MB0W}l()1%qa(VC)*5r90ZuCR{IJ_Q+$qV<>C z&VwRF#2V;k<)Esn>tm(s)%g1N!(U@%-*FN@y(c+5D&}|QhEKDgf57LU-|I(?FttZ}7NxjFDm%&K%I1?eo zBBPFr5a-BLc$f>Rx`+WX|07MVy)d!#Y{PjTSlHrB$${Q4TABFnN|ll}#in|%s9e(S zdAEElm64`+2Ex~Z2+!gr=i8cXQ}m~-ym4Hed*o=T z8hSs#ptQ%QIruM0fL~!e%~f!)Sh5{>H`xuK+inmV(jm$uNp2hKs*s3CNSXE_RPcX9 zs7Q?1-k_*U!aY@62ZB(3bm2+2F5A|8fv;JF*E_7hs)VFneP{zZ*@~P*c%bgHwz22M zFh21t-j;mv!;k1Cn(yShe3rrR7xWX~qZ~ahB`L`DnvNSa7aHuZV`I7lPrkOCsrLlU zw=5uDcZ!EG&VY7M4QPdaO^|02d>_@q^}q%^u=tLX1Gl~8i*=tUixZ2Z6nk7T5W#2E z^_6M6=sa7^%Rf4VEkU&BPo>bPl~l{GT6WBjdVc9bdx@g1+q{c~vB&%Me9!2N4mmsZXA!ucBg?Wo@yz6r#-+fn^_2o9DeAmbwoq|k2u$9MO zT6-ab8(z7JXYe8@re1KW(0a8Ras}aAQV+=(9g8tQ}uW|TX3<1^Pu&J`cXP=9mCBOkIeJW;99o+@(}cQd4mq|%jL zE$TTM#(m-+14Qxz%`iuJ2xB|@DqQn;3&6B_YweWE4{QJ4*ZmSicX$|IK+uX^b*`H9WHrc4)TG@zMA{K|v{EH$JDGDt>wEOPJ-Q*m9Hcoq+ z`{>z=`btwCGe8y^N9pa!3eiXKcM|H8pO9(1WSUOdafm`NXyj(tl28wOr(o3>FFo^B z38@MpM^<`GKeFB?a~W2ln_ zWEdYj%^5N|8{Gq9vJYqvt%Ejckq-HcrbQ`bOi6@oT|VR+T&{E-zPc8DX@-e*q-PJ> z?w~Y7Q1KDoDPyu|6Y)ZU1majPg+Wm)TvJZ!uL7E`amjdb>tS}{fS7e3tAhBIt{1N~ zN*TrFb1%n@ML5p$F4W#vwGf2qCg>_&rCo9?p1D77Ml(Kf!J`O#&Ug|3{W^P=9qG>2!wk2p?0DrW{c^}Azt4kp_RWhfg>Skeuc&um+_*!HH`p(HrV z+P_tgPvSKwc3RF=fwa_=_lFkenF3HX?*xA1cLCX5h-yNl8s0*${{ZskqLT@UiA!x! zOkI&$Nt{P{w`t2#$weDX4FNRJ9)!kNC)IKmJ{eY9Bb5BK4Xjq0V}B zG5|NlFh7}$yr@E{Vndn_y1&8h3~;GbUiiy`(~8Nr?$0EgN0mpP>6Z$Ad*r*p6^LA$ zS!3-Ql5{(d0}r84oUJ}P=32hkV=wLx(Cck4JRQhA4l)J>^IW=cXuaXJW3Wf{#rvuuhL(C_fmvZo+Xo{9`2(o&M^#qfi~ zF7Eh*9?Hx$ycl<54r$k9G@aF3;~r&0$|>py_1;eLAze{*8)o zLLO}6dJW0mc=BZS*C>J`l0&+OEvQ`X-3+)?8W1^rJ0wiJ&HCNM$uvgX$?K zETjALNoSpc1-bMqC3S+W3r}a3$+thCxuFu(%th9+lb)}vhAl(MS`T$ZwO+wg=0>WO zvi~)y!;G(WC1{y{Rsnz9;`{rD3#j06@56H~OXF*`PCYVuvCvNJu8fP@eG0!MN0Y_H zi;NEMGhTYT%QIGW>Fs-mp47V8bH#B}ya7L^&JyQ)R%|3!>Jz7tE5Z@YUQ#!^5Bc)i zl_5gKR^hUp+>i!0L0ME}t(s_k+_LlQ(~;-WxN>@SDC*UX?sJ6tEt@d1S&pVx>BBai zkl@XI=vcUGyIb*^^iS8R=J3r~>i_o2K`vUq)Nx~$aoJowX=!$dPHuU{{t&XbE!TTh zbU5lB_4rg?|1NMkTd4z8Y}wL5w&kqD_?yajL*f1>C%*Xxc9=B0zHA3k{85XHKG`uS zybsiITbo~if4d0OD;t@LX>2%t4K^>?>I4X@rjybP!ik`h z4`jwvVDeh|-8tKRwXi4QwDIQ57F9OH(TP&Rj9Bojn9y(!0@TUw`o!k1E0H1j8h$M; z20ksq*^6PsdTqI5u6KRI8$I~jgqcK3$&SZA+EV^%`<#xXXDbpLa51hlSK~QQZGU&KAa9F~hvNV+e zN49?tvh!lfIAbG}B?$g-hVqpP%IUSM^JEKuso^IgT%OU{$-4-&+wm76;G`xL{M;j@ z7-@t~!NF5ug<^Ew(^2otS%g-nz676;t$4OK8KTvQIuMm;ef))UrT9fvHvKktayp(Y zB{^YMm4L?v4!^yJT|hnMUIFQ#hJvx@>Ja1%!vX<3`G$U3x?3&|#zvO1_*RzLcRHzGnzZ`*sjWaz1<6IqRb3OSg{vk2cjd9zodG~v($y>nS|^tDs>W6yCURiOgxIbWBn z2;Ct)UWm4ONZK{P7?hk=M7~+Q!5iby+p5o-SKjKec}8)|$7csai}J3`0!VzI z`*aso_q*++5bpMw`uS`e6tD=|ze^-fPb?vJU5s)&qL!+z4-9tgs!?P9_cl56Q1|1T zlq(g0>)D^gsRUL?Z}mGJ4^gV)==%5YE6I*(_?g~QIy*}#-xlj~uDCGlM8y8qx&QGl zx`c}yaooY_wNk96rn~9f*ecre8{n4cL+M+IeO#T{=0nP~hZ^p!-eE~D|4D~GJ#ZMg zTYW4y4=2?Y3>{Fb?I0HOPOCE0umxIm#U(yI`y;2x!V zwxT)-@8WjA(?TaeV$kXYZ;d6M#`cr-c1 zBIFFm=)sE-lU0T#kwf|fQOoQZ6{BilUJmTywH4R1TnZ>l0AI`-wFo)?4ce<^t=yX0 z-!7L*LlAYp)bXfoyu#OkFv`gSFDtHzHD(dL@7=pAT&nS|obnAQNkcTw_mtY9vul^m z#=D&!?xFgi$(oM;u;4L6<&F?BBLpN82qD!aNZntfb_^r`{pa8R5;a58RD_^aP6FqZ zp;VQ7?ctuInsqk<1Ze_V5A_gAJk0n(@IF|KvAP0HVHx`!sUHPungdX-bzZ#8nP)|s zw4G)?m)<9XlC_YpJ31|Lz%|wKP=hjWix)rpD?=gEBOH5oZd=NG3lvRf@85;8d?bZL zrXJlQEX7s&gVKB30Z931e8A~Xi4|P-zb=@Ftp zxWi#s1DcX3$d`meCa`_yegSTF)M~Is=$$p>7(cRBHdR+{;jnzr=?8kK&L1aEsu41uxCDB#!I9d)TX=i&k~kt*NwylYF3q4pEPgz(xUO? zTJcpP_nAx1u$75qjwm<*JnGp${miu}%GucQ)hE_xcLto%sVu`g@AC0)p){a*snH$V zZ;_VW!avhHG7gnwftK;576>K*xW0VHcv173#YF{4LJf; zG}fwGmZu);GQB)fRlcI9f8uKbqQIm{Tblwt)*s_x{xBx-P75&sba|)x8k3N0^)numv)HY__BuzQ`o>MzS_s(=h&HUmJytFxn*$H z`uEmE2nSdd8es?4#mUS^L*LRzN@=mnLw!(8BS3QXszA-CB!U1GF6m_4P zKU;5BJQTlAi``57viNk$WwF1O0uC8~O5D%WB^)mjLT$blIWxX@p1Gp`s43}fAhCPN zQ08c3M}E6esKztUHS(k78Sx?Lt4~7noG*NM@sm*se$=?uS1bs(?5{%4{R}5XtTcOQ zCr`-k<@ zW5*34n4d2F_MCtP*Ip;FE51p1#Wi}#cqa4DHgiBgVSK=U>iN7Rp#!Bo8;f<@p7<-R zISj2UH&@zy{xRzA5*=U*;$?%DH!mkxS^lpiWXX~FpK6R(Z`|GBay3|@Mn?OSh|FqZ zJP*W;-5cAhWzqMjtv;XH(BEL518LfUN82QQn!V9B$D(AghjcQgTqK}zhn&Odhnir! z&vVN8A0mjmzcZv?zfLS!vU{bxJpX2KpMo)u&N-=vV@KrtqxfpS6S*%7@nlHyjN@wk z=zF0cEvH<>!SzlzzT6hHq??3ixU;}*_m&q#`>4}SKTJ8taiu9iq+h0pwcMZnYw&$) zzoYUwW91<35&qRR;Pc?+&*4+%T&~m#1wZ{HD9`9 zYqyoq`Ew}?Yru9;oeNA$qwWF<%b8El_BdBp}Z zTeu%`RoKW(nJ>S4Jg5ik_IY?=K)`Z88`+96wW=c zV7b)KqhP{*HF9lUw4`KEFNE+=970w_}x@bJS47o@C>x*-{VtmU6a!y7JIrc0LfPIUOK1oE!dXn|^HfgCb$W%$s?# z4nGx!JHaXVu(tjYX!y1Mi64`J>wFj>N3-N5{UcEqMgsq zZ-Xur#|=up@K+OkxRZf4I=-#;N&MmCBi;T!67xs39*94j`;jfh)DWI{!SZG6UaxAu zyi8!}pKTNHGIWBY=-$|1=ZhVTHI^@=`2`GmwKUd=t#E&PqKtQ$RSJ?JjWnDwv4a!W*s^r7 zYBuT2m*kBCw;#KYAG@-$ZablC8W)gyv-@E69$knfs&YOSj+uoH&aOgY`2@8y=M%HG zxihVW{yEeuX3q@w>pAEL3K|7RbTPz2pMy&FBRNG3g$3j;zgHOD;Oiw`#n+R;iBt+} z%}(#YJ2OJD3$bI(YtnAwm(0b;q5p?% zAwA9hp~rff6XquK%Z!v>M^(f5(}*<-vvRIA%U`=kA%J7l(UCtg6X=^FmI}S@A7-;U z`twQaX3RU!>N^gO>YR>)B=a>#r6mejF~9dYRirgg?ov)_+| z)P=Y?>II3|nzb;+(1-}CPm!}q3I8)#9^Qb+UX!FZTqfDHTM0-`9w8(__BWW&wYQ?J z!sbSsxrQ{zo-aay_7849RU;U*i={R$*X9+)ZP8E-96+-G2_V>ffs~SE;nBYQB4*Aa zOBedO+2yF(Q;mnpoaG*K&!7AK)n5T#lr#7NfzMB=d2TZB@V_7_NrF_L&6mz#soOvE zGO&8IQR!-2E-zi~x!J`sO?Hl|v%l}Mexx31NHSp)cPQYWeTHD@#u1WK-hKyNy&w5j z3`9Y7rV4R#|GX>eV!*(`$FNE_gHbws#?M8Yb&iI8$cPU0hC+mXmJ?nnY!xBq2_V2 z?n_|;`lA>>Y8myT>ViO9aPu!yu^$D`eBgCWHnYMJ58$H)Gm1L4WugS7?K|leZcspP zhhGu)$(@AMKmwft#iXZ2>##A6joNVfMu1Jv?{Xh#D9q0em$G0yeoD0r)Cy3hX85WQ)R8s&(pLuWp_v zcq1=J{iu_$R&9B?e*%r)Q|Q3}d12i4?Jq!_26J-~0FUTB-|_qpOxSwm@8zCo2#d|! z;m*i@%oppaz|XLF5GxnC>23aoB{tp3#1|f4;FEqrBW6WOP{8!7SKPbO`Y+dPy4+nN z2o@wC1tzkBb)qZ|Q`ju-J%@d#%~$@OLmGfGubmBIC&FxAi6}F4jzXeiqA`#4`wp0)-Vq|SLJ!>YBuJUnqWT5@7<|aCG*{3SLiU@gQECgpH7^fl7gIUscNn(W>9c8km!3q7J<*q(w=>wD~xR6h9>RPV(@FNO;SA5bh4oYXRO z0t_uLOm!E_LPGgOdVYslN-&gnZa4jK7n#%1t0$p6O@fF@ye5lvxKl>3qwSOpDDDjc zYdyC+#f(C>VV;KInql38*Zo@U#ns&fS0{Tw0q*lS1Ox3{$C!t}ofHJ;*Mfl6Jomx6 zY*U7w_+j}cOBN8hE)?rA5*)`IO;G}HG^Eztic`a`u?kiNKY-DhJMZ>C-S#uGXpLj; zRnd!){?@Bkjv4;&djD`6E1^GK4nQpe--4+cZHU~DE6f~`B6cSe6a|4(CsjaCYanfX z@Jr!M72cw0&wYH?B!rSU@fCe*KQuCdEv(Z1eA#MlW36W+7`OvFYS=Fz^kFm|KXvpH zM`P@EBYV9bms5mE{C-{es9&!;+gSib2Zk<@^@S>Jb8<|^ue5JJbb#*E-`_IGbf7iw z&p?DIs?>lrqY|xuj>ybyGa%3W{)lV)lK94I<}q=@Du3pu2eCt7haNBCZ(bk83;{xP zK8lUlec7G$MWhTN_rsMil4`c~pBGsSSgBFdY}wGN=Vl2iLsM_t*U!Si^|O(g6B+*+ z>$8R%H8X2?{qTi-E?U=lscGPRVwE^#iN65NaqN-mz}~a>BK2pFwax12B^94X)H#J~ z%^wiK>L)?CoLY_??5Ud6S<(bBt2G$7MQ!9_GoKD$(2aUiKr}ZM1IDRxSX3ER5DP*z zBb}k?=~?}?&`Y}aEBXQf$~CnCdsK>cM(&|(i5zNWmiAn(v>{odq-3XQE$&=8(CDfo2qIRA#(S6(|xB=wg&Bw zMuUnI)u1@!fx>XG1^bRSucXQ_Hc>(&_g6Joe=HGd>Jf7jzLBjqU!0^V48eh>xDk}< zXWmPxSA}GjTjs7TvD;{2tB3kD5RFfvjSVzQq74_R5NY@Nbe%$^3#~1XJidc8`XDJk z9vG+013;8NiQ-x}wTGV-m8L?8cg`XtI7}}*p;sJEdRR?+7-{+d^!FPA?Kk!~>3Btn z^}27nopaW+`Kdt1r&OTR#zTR^AY?#Kpc{LcNnkYLjK(1Ut#(lPH+al`vKz``z8E|{ zW(3l?yqVBRHW!(>q$|WOvp(NAwAulY8r+Cz3SJGDc;KjOIg_UB(38# z1oBU^vUU~NPgy|$R7kGl{7*P2YPEQ@C0u%->xB#|jV_rPEAJH%XN%pYDH^N!hoe!$KShK>w4OTd>!!tE`;Ng*kOOyc-Ya zvN78A_r&cVmk!^uiym}3qpD-85-X6R>m`M1x*gP;mz`C!VS6>=+;xS&G8W3jT2_WY ziqR@-@L0ici~z8^(DuEZcx_wnSvcZF4-cC4NOPs#0Jflsavc;i1e&aSWhj1Gha99) zlX&n)-pGqe52LaJKQ~SOe{_9ySXFzs^#)Nw1w=qaQo2MXq)|Y+yAh;AO2v(|qJm0y zgHn>xEfON#T_Pzh8>B?PxxDXrzXSKV&vX7c=Ky={^@};@m}87-nTYaND zw&A@^;x3~d9|1TRM|1^<8QX_n-$=s79p)|uF|58?cIf4qnz?MR+`IGC%0o2JW8!1Q z=r?&(^n==6_m6TjzZb#Ta}UursJ0#;LW@FEk=?IP-w5lpZ6#I!t!B)A@cfsfS?v2z zIA!lC`6$jFJ!LRuDE2&R>1{2Jzzu)8t!dFXxGF(6SBf2EH+NaDk_hW7Xu<9?5I8YS zH$lNPVeem`6ejY9s&52Wj1HDrGd@HxNq(&_ejWOptNG8EocJs| zDP5rNvfzIIyKsrJ9od>_oNTcZboYj@_qfHDTAyLqcyy0-y$S|AYYnz7?Pc#V_S7m+ zKjwn1C^(0i__(xiziL%$q1vh*pE;iRSqb<~<8~l6E=>;8&J;BMzZu-$j0V$5aI{%f zcHM(5q=Cx((T%xnvN)rFQC|Ky>E|31bimp1W22|m;E;>AYiGCe(XN}A<%a7icMh8{#~VR&+36i19hF_!+@wIurPMC8B|fWZK5tFG&MuSG`wS z%AYM>)-1&dU!R9E?-?D!1}~TSbTGhxdi_(MT6Z>v(GH|}WgPJZOz{`W@`>h^pnweiJ@NBcEW>RSsz@X zjtqcNSh9zz&hib{1-uyN#XWQJF6dHDx>}V%bDd-s&ACFy^LFD8AwzLr><^d*+-N?= zlQctjJEQT-RbltRSHHO=e6un$BwUqrP%K2Qn-`<=CyhP#nh3g6m%X#qO(Vcj)BN%1 z1GLjvGxd{p1L(0i=}z{|8p@?w#5_aCa&6jCSZ-D`6J>Vp|6H{-LeG)8UbOSTe_8Jv zo4om@6ON5T)8J;n1z!J|Ed`Fx^ybBZ?#;C)O(DUYZ3$cb<+3h3GJ1t8isTmCiX|V$ z>0_DzwdiP6?z(KRM^OIgH_Rce>{MaG^78Kvt&hE71SpS=3rXwR){`_9I+fMjo%{`p zhZ>Px`pH5sIFHmJDjo<1FcsZndL+w0VOQYwzeA~*=#Wusrf+zIfwodYckR9v8&*Bo zlHPCoK2u)LWa@QpgAS!(Pw@(*wAVMn(}Vnhf=eJg!P=N3Y|ToVsc_E;W=2M=y!j9d zrB0A5Fn2~hp!$+$4SPMkb7?RNVk?UU6<8~W&tTL`aO1(k=ysA zlk{G^xN<+%E@q`COOy!dWp9T1R~ihWDlM_8N9tZ>lQ z?^#4tDpCQPk5$AdmM=XK28E`>+b5kdr?G^<{et~H#7+C$UG<$rh1Ba44bbu-Cr3TU z%*JTZIWq>TN8k0+w*!X=6-i+bA8dZ*ucpUJ5swq<^LPN(ps@(k!EFul>9=zW)n{ys zY(2W8-`PV2+d_O_{#R~6p;LN^v{Aa*=2j-(XaC5VHDlMH@8fF1s3l?lv%FER!zQ>G z;GP@G`m~%#d?rs)$3j}kEfUozz=^3ze16hpuXZiy zqWi#>0P-))$MM^l9 z<1E`4J#Yop->ivGKcsW->??C1InIM*;?c_$Enf=%y>WvG8D*p0R3lEvK5S1)5S(NQ zvr?YcoWbEOt^4!a090g`urDyS$;Ui1a+)l!U--Q0P%@y!XO_K5K-S+hpq^J;a4oO< zr%ikOkl=^VYpc*Q>9pE}BF5o<`SdAzr)-7Pl#O3qER-(9_oE73N6e$5)%=(lvy@HD z5~3BZ)Ihka>h$9kYnb*b!XJjMR@2hs2jzS1r>D4i)N zYXKID+XWSVg#>m7FHnVA)ydt<`!S&N{RK9`kCj2=jsdm7CcDEgQHc*k-oU44fH8Wx z(#t9HNZro?G84br=6st?@)U?6gp(;s!M zV=r{}kS+J1;d)!?z$nLuqyv+egRduRo{Z7Vn+d&maO5URc0)?ONjL(>>YZ=ik5a^Qr3bu zoFv3yeVIIYQ6jxMD!gshL#>|65>fL&CHC;eC#}@;_^)Q|+jZlkB9Kl*ymKpS-plQu z=b3rbd@{eNxkG$1?;+|ZaLEd)A@L43l|6Yj&49Z_z{JFW4no{+$m4-r)|(R#!q9N( znZ^-sGi3a5x-vU_Ufh5B5o-lJ97(jS0$ZOT>$*FMtRE-GqKX^e2O|yC#hVL;H9dli zR#i~P8|H0hJx70>Q(VrOoPGnvG$ z9hNVsJvJP456!sacQ!B&aK-)k_kO1`$*4=e`v>Nm zKK!5~JFiLU;;ciQ?C7(Q;A*6hRUbARqB^-^kZJ7KsexzVnxhhl^nFd0Uq>(ib>S|) zg861n?|V&lcDV@tcE2pG#Cn(3>>;RyvK#8^Y3?yAMBfDyhIh1FmGr8iIMi3|^z$5Z z*Txrdm)>Ewzw>UAYLU7K`kU_Z%)CqJhQxI&f2K$Ni;W_ARM<@oMZfIM7}a` zoBp(%PA=kC&8@yH_m!oOat(~*Ry-)lP;z#$ZDScYk4w2 zG$_e$UEa1^!g$Kx6Lv3ER_HB#*VR@G?d2seII(%9;cO^{C$$V{q{R5rq=E+R0w2je zp}r!ybxtR27wzZA@`(u~pV-;$aXWH~QP`^3ysRjVT^T>e2S$~%O;U8KjD>1?AlrW3 z%D=9-N&8O4&-xXLYj;S|V(g7;P~dIV<}zV`OYY8k1qf#J*Vmr(wrK_jZ_>-+8uwiK zRiy{;OLXPN*kw^VRtGbZHw3j4oA{>OUGzJkM{X~HnSZa2EqX!iF-$?YRG(Xpsi(=D zQ&gC&48`*gC7}2=8f~GcW2OBPbxqIlgBS_@68VEd*e7m;SszvNZAyK`e#;OGn|&d6wIUSR>K@)!844eg#rI6;ND`Z> z2J+}U!crh1khh{(5b2Ikev*ByNdJCCT8#qF8AqO9`Hg9M*#RH^uCU^RnusrV5>K1= z2&0R}!A;iQi1#!KvHwFV_GQD~M@*Z{Y+I|q!-@e55-HZC9eoPq#9pFO{!aTHb7OVq zX?Uf*Tm{qvX&P8}M=^{o2bvT+(pR6yzCwnN9Hs=cBDQ31@qu|*6-%Hi`S%r^DGDG* zwnMws^?!$WS`_%wA{foO1muKH8|Rkc4HlZ>dHf=b6YgR)SOz;@t1!mMU~h4nn%)~Y z-d>@aU#38fe*FaIKdra05Ur)#y!fcOld5!2i|`xjQ&>-*Yc&AmS&B}LJWF(U2KELCBx16yxZ-)LUYPOo>6ra1A3`(Gi~?f8p*2K8C#? z8%fSwk=?z^KT#|`70dDl9&Y4*evTtJ-h$fH-x;oI;p;5?985l~5){oPST+Az*bel&gF^SCk zJE4i$1XMx)ZWW@iOB4a-vk&5`IaZi=HSu~kz%W52kThqh|VEWFpKEE9G9QW1$a0Cf1QSkZef)Dmn zN41s%xLU(A6(-L%q@$U9`k`vcT~swqup|FnmwzpZAUCFM_EQ?f)>4@d*mVm@UX#EX zyr#X4#=vRZG^%s)Dd;A|y8Eb{z>?#7%xNwv@@l_^KS=s5Wx`sdtAmPGCe9Efy`lZ> zx^4xIx6Rx71RP#U&ZG zt^Hz~s(?-9#~cNJ)~18#NlWobf?f3h@634LSnNs_m5_JKS_85L4Kze~##Rb?S~>{*(je{C-WsTF~kXC9`MbFFU&^}HK)bS#Gf;0 zE|Wt594$mJau-=TZ}@e4g0eH1*}=P&_!S)0d_vi*WuU_5KV0)-=|&H+v+W7UTyAsu6;<8uWB7QoqvxnEmNsU~*ea zCx?om@F;H4&jHO|UZLU#XO7%$R>?Rva(~4pfYXlQNMsef@9F+{d;ZTOkU&`gy>^*a z*N6+5sY!WrHh~An8_Lcsvg}5uh!-p#?g};~a2A+v`1OS&;*xoAdg}6*zH*y6k9Ah! zK5}=7Av`F7<*uk0jqc!lB=6hk^{)Z1x!#=BvTb!C2IX_f4^Q7m1do7Y&wt|=w% z&5Foexf&z>!KUL2V~riV5gG>cTBB4ucOEb9^^`eG zeWj>O%)4w^Y0N+yHIRY2Hp=(Lzg+IuTuyLFL&ShqR}-{6W1*`W2Z^(Ayyix26cwzyHFpL1-7zs0U2>iqM9B@Zy6$y3P^%yuTg;s(mhmtu&NEaf=fbu7mjF zoUxJ}e@pZgF^p6^@9M`MzVMkrOCEXwcp4pZU}V$oM)PW>Xi(4g68f&oBe-P7h=i48ajNUVQs9Yb!ZLopQp)hKAGj<%V+kI9Pv$0JECT zP=S>yKKzE|w-t%ZY={Q{?UC46QYPwJoTJhLJHs@1pX6RtY<9xd1oGGPIC$!$w8hYP z{pz6v;O&vvzGaMge2LQ{p{%Y$qyqCS?{j>HD@J}9H zExC(%smii{Q+Cpc6l`S{2rrrsv#{%m7vw{CvU%2snjJqhk#p}~55#!pZ6T1B)tk>p zI`cly!4Lgz1BHXzQGrOms81{j%BFmlQ&F63Y=T}5vLq2jb4};c=?f*DGg#-YU{^FP@?;OAQW|tEjr-*Z2_gt9L6BNP6ngi z_)c?KQI+NaumD;f4R*eoPkb(wU7u#GpgWHk>n_s9L!4eBbxiTc#+Ahm`zgU5_Cu

    M*8T-Pj$(F6RAwnOr23w7KU|HB-iG}08c9(L&(vR4z=Jq3@x)f1g@}~K3&vFxw-6`oj3!7c4q`eZyd~1X}Dsx#j^8-i-M&xZf<--3?nchS<`)(!sf1+jF5_0b$Fg_3zuCKk{-!U}Ie%{d`?F_N zOz~r?U0FF&Fj5)C&^gmx_j3PA@?`=Q478z9*Zt=iV&6NQhJ>FC)haX!R&3S` zr(Dv11V7fXeIuzcy)A7HZ6RuIsIibgPYE;m>|${Iy;hLcpB$Lb!1St&km&W$WkSNy?RxtA}Oz8%qB?ykRm!6@x zsmz;?%uf?^xu!2Ny@iOIzVzu1!vs=Q7s!&Hg_-UYby%VUA0|F|XlgK(x+AT#OX6`# z^F8jZZO#_A*yqr*`Ja7|G#u3s`Z|Af0drXA>g6#Bt-wf0)S}COT7h`^xD}5-&wZB` zaO=ExB$nPnyu)<#XJj3Y+~!zF7OEma!HnI`+fSm5)S>7a?YZ}F$uaJDC`QQ;T4fqv zbGTi(39>GdapwXl1|dT6LUmX)$6yo|bqk;SRf*nt)cZe(8_?O0u|a;4kM>pKIKxYx znU9D+|2$x5wb;E;L4e8Pdv;QA+I{sS(5~l;`;=ZWMIDxtVkJ|suBX5l)0?qndv=X4 z&kdfic+j~l?B7BStR#2M#(DN9jQYF$&(z zx!ykj?CnIyR_hu8j4e>pv`0b2`wpz`=0VBTPK+gWnIBrjLLW7?w3MJWdc zvO=IgD-0kYHC0P|AJ1x*Ca!H!boS9bt-_f`_f~Xu$@}?xRC%BFwu_NcHVsC0zF?`-}ao7f1>E(V0TL1*4IPaTcUYSluPMGzW~CJ&%iR23i?$_5GPa zFKmQ?-!d~aj^(j76&b78qlh=CQ!>!ep4x8Wm6%kY!|I6?}JNi)u70J z=JD`@-{3D}y2sjh?>ZBgx892Z*A8a%a(HqX>GjgQ%Z4tbo4V9;r>`erbX^oDt;~_3 zLL^Rt>QCbNuf|>=|7O+RR5Gr$rnJ`{HKnD^L}!udrEi{w@w|23f{Lm2v8Hqv20TlfcKd{y#e4o9H=SBZ+@#`A=A<ve*NL;J!p6yz!$zF&1Yq_Srqpoq56sgN7WZuqUIOQ6#BfLvxWhM` z88d~U$|Gxkz?`N(Les*wYBkqZ>V?i&i*l3!dEW%hJQ>y{m-6gB(?&R|Fc2A084D14L!y! z|NpFM4RG}L9^la{COfugJ>jomxKnZdkEi(OmH)&0{(kHSeZ1i*Q746tM4==7n!kS` zxfJQjt^P=JJ@SLM8W6tv^cw+@qioiHKJ}mFPxb*t+VCyh#QT3082|nIyz)>~b`Ww> z9fd59|2hgg2D%Iun_uycefbguWm~0}IXD(A|GTaKvl_R2;P=V#0!)uQJqqVNvbotV zvBcv4ciH~;XCuE83eO)MPP=gQ@rg4z;O(>93R|5;UjJVKh6Pec1DlgulFb`6ql)$P z)_Gc$D_Cn&B%hopjxW;x4M%~}q1%V+-57Yb^FZSGs52Et)7=EFZig;YZaWBMqG6uJ zLXKzsGkhT03kb9Y*H&j-o!5Rm4G4nh<)MrjR!;Q7uo*zE((`{4d(xq|Cku&mLG`~G4?GFey}Bs z(S=UK>a}0cE=GusQs3}7gy5`=jF845+P=$vwBblC=?>XWlU7KXJ1_}4fZa+NE(Ab$ z2T&0&P+q8-sj4;2pHgW<*aPX{jCg5+M#SwwLh);CR%&6eTtVATnMWCJM#^U28ePpU z{t=w~9VpX8jz1TB8Wa))dHF3eD)HZmBxOe^Wp%xktMbZ@5L-QdrhG<`)AsXoIQ3EB z|7;v0=8ggk_W^4*Pml+OC@1j~EnnO^c-p~n$nB-XHAbKWHzySPwIR5w6ib_b7ng>#9{w>9V|E!XL zW21#CN2uwD<_d;0EKpwZ$3rG`VxV@L^9%d!uGckSsQls$TKS4!?y#|u6dYfd<~Ks9;hZtsHey| zbb|jhlFDttWN;ps@AB3nHy@l>&h##+qjUm)YW60PCP68|?J!vl$wWX8(P2N^seg>e#gUGlk<1UU!e%&a@>d}dg8`Qw+7u~*=S9x$){hPi*! z{pthZ$JAtU0nW!R2WbD*13#VP_4%}87pKN)r0sMSPPx<-AAoX)uSdh&&P(8Ij@(F} zqa{UfT2Fihs3Ji%J%xrAr677D(#XwvxrTGee-nr%*MO&`;OV1sw)P}R?eb~fhzT}k zmG8dq;4wp|rBTCE-y~4cX5^Yv6~aO9|94jsvOL5zBSJ*9nDFQezx4q@Jjy>)*baAp z#Qp({9tyv_2)t{Zh=!;LV8&CrY(k)W`dXf{{`avUr_y%$e95v=tN*Pu5jT)}hpW{{ zJWeyX4{6IK@n_t?*Ql%myQ(NNjdQ3gs2rZ4IN5oZl!Z-Uws6w9W3L4wlOIx&Uu2d$ zdWeZL$q~eD9Mq`oNY8Z73lRx|I!2(`6l{lYZuT<8@mPn(+%ONASO`iYt^=`)3+)$D zb-&sUrb0V}5)U>S*jrq+yQzDSx;&i`cl`}y^EgmmjFEqYo2&yox(GxDo>V~Yq#qRi zeiw?|vV)}zI~b2W51OG52Y$bLswaVo%At&JNH)3;o!lFUIoVm0iBfxg7ibop)TDC$ zLN^bqb~f;>Q0?-o!S$KPHQR&Su@WT9dBweQQqz?WgO(;e;Yx1@rHop?IY`ANih86j z$M6mr^dU+fL}6k9y*sHt4f2>-c>P!3*Mc568n~pRR@r|LD3=>rl==%0UfSVH-fL#n zP6J=_o8YR}p(lww592<}JGvr1fN@eRqT$)>d&~t>V}GjFtCu*y4PK$t6|4OnyNY2I zBS8J_BTS>v4K)4TudWtFy=Y;NbATox@dyr7Ld|H(i{8N8H?rGBg zM<}N+*2sUSy4~ecbG{nb-i$R4&&JwBk0uyCatshKNTmJvj_oy;gj*f>D8|nrb>itk znIKBJrzA*1Dx<)N2>0bl;^(Swky-9~4F6;;kXAn)ydt z4E`?=`kV{c5#l1mT@CBKVZ769`Zlyb!7d9K0u1%Wn6?xuCH zz~d8ID}SpCd4B51Pnbc2Fu8?6wen%Fg2V$q)Y*_;)+qGn9%T?>^E?kO^dAg+4kv*; z;{xTB`ODGz!*G5Wyq(WSB4$|xwG}V`v_v zNMzKua~u0CA9lgC)FGdlZc~;y!3>!LQv}_AZS;cJ zbZiJ>J+JMqF|LGB9hhcOJz;UMMvS%FY&P_P$^FJplopzdqF-6hy>5&#dG)*%aTM*~ zEE^}esVvTUj1TQ-4Y!D*17z&hfx^UGUA=(I&ZZ0|1vc3 zBlC3zS_QKDi`LRKGY8Pgoc_+PJ%CI)uYk<4h}?Rzx*|c|girVMpAfn(DH7fpgzt-zA?%vUqtE0W1E6hh`is%Wp6|`k^wVASLTL!`g z`D72=1EqDYF^1&faPNJ-lUNrBniIHOry9StFr&hU5r4OIi5G;Q_K>OKWO+ECzkv%N zbE&b)8V}W{Lqy`rqkK|!zNqW(K|er_IpX1AKXr2ROoazmu(qV-964%fkC~{!O}f*Z zBy>4p4epVbobxWfzhhf(2tn!G0kRnCvENpylSJ_{H)5NQ(`k^QSOud}uYVpZ#J?ya zoO_Zvej@5kxlpe7R7qeBG4(Zff(`2|)1bGr2Oi2#o+j9#`p4(H1`KxJ2ePBcnpll} z$wEE^F`1$3#^|^~?x{nWJD5Amg=?-Ix_%W= zv}#?!nV`kISo<3RU%ZM_9xW%_17QsQq>0AWsAfgPFVIu(US9dPfaEH-px_J*e2Q&5 z*RF3HLeZYX*DczkzfwLreu~+VQ!MCQeEHZZ7Di6-{mSp@kQPRMsOex{>}zh%EgfYe zp86uu2SZ1`$@11|7-Qc`L8i9kW_FplL-e!D)TG*39UB61C?B6ZHlzO^kiBth7cbgF zuapr+UbN#^&4$>5p0$+A#3WhtH@k){U)W3K$-4L&xRk?<^XU=>-*@8qA@AbXe?|yWt9}aqY%G2k z-=?0)$zQTt$t=|}YThFryk2cODxmY16Q$}p3B<|!5`?SjTfqw0h&3PJ_>~wT8@9 zi!v+QrbG3+F@~&Sy2O%t$nnWQhY~zZwegy}^V)i?LMFo_6zYGx01oa;2~h3Eds%Pv z1*sckJ`mx8D^Ldm^Jgu$BvPAUdc~)J{D>49`b814V@0mYDnh_K!0SD34j1z`&4n7t z{8`)pZp$TZ3$vg5UecSSZ#R(@n=B|0!`~$ZA~0RPHHlU0mdPGMn5NM%j5bJX>qBN0 zXH10VlHhp5Fs(upvjKdMaWRk-=3JC--Vf&LiB_O&6d0>M{putFiy^YVn&%^75?+nk zhmU9qBgmK$wQwf>>b+$FK+l#ASsWlO{aa9FPUZ~Bn8ok9C46KbqdV&G#2zoVvtU`4>Oy; z075hpoGWBxILBa~-Dg?(pC#AG+q=T$4HWN!i^UdJYpo|V`@g{jnj>>@VNg5a?GKPp z+F}BfJSH7_O7}&T*ic(F)VpiOrTd}(Iobw!3#w`3A4&G|phfT~dd}x(=G(x4n&#~W zEc9xG1aki4Q5*qnhMMzqvk{S_p7kZ2R5$rzNfF^*{I;Dd+ZWD5jk@M zv-0I&0-z2DdDiMOVRm!wTq+W)3YEG|gDu!@mZaKNQXO2D6_Oq#WGv%(r6g{(P^p~E z=Sm~cGN>XLX?>b{o`7w36DeH;IwEDS$gu5R!6(?iZ=5xAj!a=LmJ6wJpAVRc)S@K*Rdsv zG<-)_3{2XJ5@?jVZvN^0dch;HP2QnjsKEB^r26*NZyYq2wF8e*rNP~U2||0Q^o!Et z>3AZNj{DuB^JYwUG!hACqI*{TaFIT>`tcpbE1wulEZ=T7Q5kRK$F-MUUZ;-IbR6Xj zGBBmSxR>PH#>~2?4~&QvXsylzOCzr@2ly+x4*UTB3!e6pjGkc7^+7zfn}2>_LwSgqAs!P>WTfuAE8w+dBx! zhopod!OE%6_}8s^9szw4k=BMW283pEMYWumLrfQ5eTfUHrU0FT zcTen??>kqSO;t`Vcr-G%Jd`mCBG4w)$A~Y#|SDa6yN<6Jt#*Nf=sZmSB*~(|i9b7}Fz%mfz+$ zrgQ7jU-G*vm=Ms)rSxycJd@n)EV=v1*Zt0U@Jjx5K1uvHG8gI+2QH8mU>s-6>tZ#c zB}f&{9B4n3*Y*C8+Z7y}FogL83ApQfZP+nena`LUcya&KXb z8YZrkQ)jWk$8I41S(w@Vjie>r1UYp2vm=YpROfr&jE)6;qdtzelg4j3_J_jtzF9!i z_(XvD{hrsw0Yv=mcqzKTc`J$(3);*j>v3_PaOiRKpkXFM?Hduf?{MjRASZ6{#1y8& z05HvRueUp8!oTMByHjcKtPCG%-N*V0R^uJW0KBU-RjUKp+6C!z`*cr(_M%RG1Ofa& zywm4PA3WNkbXK^zjXh?MWA8-R6~7JjRXyi57QM6hTCJrvitj9338nU zzHA+$#Dyxo{B^0!$~I7L&E7@0sQ?qpFJ=O;`2d^Wb5X|kNyWKrOnfA#YCUpQc=bM0 zu{Ul4&uo>@ezy*Q89x5O!1etbY&-7VkpEmJsf02^*ETXL6%dZT-xsu5ICfPpPD8zX zGfyX&X<7q%?ki5BSYHuF9U*YbzZxV7!SeK<@^cEeOfSIgceiKPY7f>34$l{n#dwtE z_y5@7j3$Z7#I57kB3YM-r|&UInV<1w-_lEq#IT~aK2V2`2AOur-$?Sv`~UZz)JZ!8 zT7k}2n;==ey;cew4h(+e0FxijI_S$E<=$-ISN;s1h!nqwQKKm{L`MLIZg0f7sqU%r z(2@R&Pb>rY($X!Cc z)3d(6J#B16HrJzW6hhj`XLG^maS9r=*l%0-X7e#9far-R{O)y{6QtxUe}V81^GU>V zSXB22-st3Xt1pn5n*3;n<*@+SW|_DWH>Y0lHCUOmYh36kN?x0A!k%mXjNz+0UX4An0Ks)MJs}RRtc4{5}JW!Ou|}fH#zw=2dEQ&jSW{bI8!u&_GMo8hl<~KVN+Ugltoo93-)6$87RK zVLF5CJ|N5JpTmbC1=7AWBQQ$#9vCcrD_lb2y*@o%e9_;UaJ;0o!hWK%zkha622pVyLi^eD+oD*t!pkiUiAAv2A5N6J z;tf&Tb3xCd2nxk91`*4xYW%n^^g*t{$OSJ`o%G4zu#xC>X-`we|o>1E$DjZ7M6i;;A-huC)4*6b`X== z0Z?5H2rtf6#`^l9nc5b)`p543O(U~Li`=^X15W-&!S453^o2;TbuB`Y(p`S_oI3E} z@p@J5>(7yUw=m5UUFzuyALx|dD&oCh>3_^(mR~*9G@@slYmU@~wCtS{VZ!qh;7f4( z5ez7>f6*ePK%0USYfA%fRBy$~paONQaK@VA%rb`yXLzD@9Qx}XOoWjjn&BQ~Q$ zol$9A3m2rWJ*jSE05Lh=>*}*Zh?O=q27K1NjXx!Pzr76 z^*J1h*CLS1GrVp>v4WY=HbTa>75ct52)z z|HxGj!ioR->mT@J^jrgsu3;f2v%3F9UL)QR25F{)T87W|*Y1ybKrHjr?VwrLg_p~b z?+R_tCkf7S#QJC)XQm(Nk`GMI8>5|^F}vU#R%{geO;U!$D2p&=v+BWjwdRI<$oUocmeBfwCBVj{7l(hInFlt4xSoThaf7vG_m89BJ45c zQ0W=_j}JRvxn#V|%`dM)V;x!5cs0n@GRYsjmlKG($UCVJKGeMetaohFgzFsb?h19>P8U((;t z)xi6P$Xqx|hfPaYvN95FU>4tEW!F)E9q(J3h@)*pgVft2fd&iDjIsMJSm~285qaP6 z)As;ZS5q+?3&sHyH&BupZ>Utw zcnn7^2>GKDtd!}zfNJS_-Ey;$CFr#iG9BdYlZFw*hX=T|B#(E(_*JGaBZfoTjfnIH z$?pjRF{|NhI;!RO`~)8U1nH5UQ_^Wp&U{4(<3!aOmCkr5D*s*kteI*3YiWaXz|d6K zrSAQ(c6Nf^iTrBZmglSNDa%o~|LuoFwKH(!^k^P>HTgd>5GYf;C*t@pqvFWD8Ghgj zE+#xAhXQ@vGSrKt=?5U{y$0K^8ZkRt#oX!oSupSdr81NRttmrgQ7GBRDA5-N4#ps5 zy3C_2Hr(xU$LLYR{FC2lpSbpghl12e1wFv(rj(uH1vE%?Z(GEPd0Nr+VKmlJBh~n0 z;=hjiLeZ+6MBt52v^|nX?pPG|9b)L<*MYof0`Wq^B1cO)e=DL5Nf5+AR{nV}?mbJe zH+h2w2bYPI3AtM(03qO5BNlmN9w+hdtn^2ruKl9Z{Z9P$F^`KH=MUPIT7ub+G@)uN_ABf);ksoBXxebEHXMG)8cf}p7!;HpzC zOI=7}c)+C`-#MnL@--;I4*KM)ebp|$HUsosvZ`2G1_$*+TOZb|JVurvd50j{m;5*F&HG3;ZQ9LA3Y+|_T`zN-uwIcTt_Fz0LL>LLY{6Rr7OsyZKdh9RW1z5Fqex3P zkMl~Kbb#8K2axXtRX$HpV96DD!eNUAHPK+q6*r~K!;u_O09Pi2LTV;swkfrue^?34 zdFY7Ay^LLlSSohtC=Rx|GYQ`h??NJ@^)+MXY*}FCuX4xct3k)hWE*hvDu|VOReBr& zS5BTsLMXF?=^A~y_#p z2aSey0I4ZnzGtWnwQ>ZvK|dol7Hwk)N)b>y4A=?5jtrar&TM61CM|y5gWuJiA+{2n z|8B@x6S6BBSrx|MTw^;={nietw9IYQv%Zro0sqfr@Trkb@dfQ995Isa7F)BcVcKcu zmH6qj&&4sH3&CLpG`vGsD;4EOJ6PReZj z)*8jcS8oDUnf;oEt}Y+eU5eGyW%S=`*MIKiah?67L5F?I>8!DSGf4>BRuRTMi$|AY zXDo>~1EX!5v!?1#SrjAr8$obN?Uv0u7Tkij#qU_am0MX2jSAt6t=9v&?D5P5If@wsg+3Np(+V^}vHQ84{m3R<*fx2j50 znL}VE*LMdW$HK&M1B<+Z2)3f>=a)}SyG#g-E=g2W-)bqukF!f}7E`4&j*n`vi$W$O zjhKZg+LhL?Qh99kJPeR)A4rqGKrgkAT2pXw14{(H>IHxl&5+U7>`eWXQ4390GNP{F z6=zT*TDH0Q5N6%!O~0+*daju0Pimx#9R|%!j`)a&#;G+h+%5*Z#myg|=*LI0C8R3P z#nYTVbNV{|2L>C}#joJA{SD=B;ZU{8#|`d&IRhiT5PuS^-G(+!M0j4b%!=V7vaw^}u~7qk_)FUxE4xSb}Wi zhzz)gTC(~N@P0&u|I0saxcTC!uZa#t%W+(0&gn&y;Iy@6a#I0kI%fTVbB&_5w|H`C zuNbmieFvMKgN)$dF$m~19vG272667WxYq5KB|Sr!FE>9H?`Q8-LDP2lTIE&Y8vaEp zS!!>XcyqrGEEF#58GSF@Cq^O6QmH==*Tw}JY*PlQ4x^>IroeyraHNjX%cDcg)t_hA z`fwmNd*{T5pjhEu$TDgk9cuhJ>hB1mqj#GGAqyY{u5`T}9IrwGLO0v{L#hG{Ma=sIK)D#M%7B zI_I5Oj15Un=K?KZaO~Z_7!Wsd#9Q1SR=A@p!|_y1h5W`M_*46TRtS37k@>2Q&(f*2 zlM)Wcj4n0$$j%362idO@Z=gS>DcCp24TZ2L?8W5w+ABZJ11r z-%bnGYiyD~e(ho2RI>>>jR2r=7fF4TLv9(G?iO=W5*mQmOzlA_w2;RN*4-i(Ya~`V z2YaItxSv~{T8fv3Y+q-ca{t50qonOy$%BaZW68NRu_LsbTN2E0L8f$hQyywR{s@+n zb1WuyELF!?%Kv0anOCt1GOB=qF(TD=xkUJ|DW)-J^U64QZO7#XZ-MQ-Kl>6dXB4V? z*-tJfr*|)6m{aL^kHG;cF)zDaJ#&;MNlOL=koqUR%Mq>Iq1DN=g$#+q&I9@~MrmdF z!J;bvaLs*2nQ5`&>f2jqbJeKBr6Hexe5hVoJ^TH|1=tm3gt@H!Ysh?hLiI7NrvQ-d zrSV*@-)jHT`Tq_8C6LW;qfC0|kJo^&k$6kHMpb8t%vdwbb)orEsPz|2^+BEUXX~z z8i*;l!6B~@OZ^FHx(-vqrCE69|&NoeqnBUx&IaQHMt7pm(Z#hA+ND5F8dhr zE`!j}i}BUPj{e>M_4%2^$b*{ETAe!fgUayk+^}VNkAL7X(syz%!k^wcm+Eos2Lq5V zz;6_Ooa=e~2{aL=^Z+5%*`x23mKgc(9ONYb+W!Auu74im)+$0edvZ@M=*a)|d5(BS zG*ElF5&68Q>jvgi(Xi>O7{qSeW>i7K_5}))|LAjQ;x2RD;dBx!FS2|ax4pMVaPKU6 z-!j1|pCXu%Wc~Z@GbxcbWXWNLf9wq*@YH^?&fAB@b|bw=t}gK8CRn8*J2c+Bx7DsE z)z2D0)6ONtg$MHFu%a_D5z2RAHz7X7ys=^bWis#mSxLa()$H4EHfFQ#zAGo2=1gC9 zKdhYO{@R?JOxpb`;S4d&;&O(HH;5uq*!_rQMXof_Kk#o4=uM{X;9-YJfCGjHA3J}q zdOWWg617Znsa?nPCk_Ims7vojuHo{NNmtDL?uB?p4m|7?uaiBmb0j5kc0DC=B1b|| z_`$biuql%yuxD2pg0Zk_9WK?Gs*%uQkt zzm|>vgaV0yDR&&i;pV_nlkJmyc`bE2n^@cAG}HPctyX~y<&Y^;{xse6R5Y}0n0|I7ltw@0V3qIz^^Zq$-H!W ztk^m%$FNFk6_YR}s`Z~cFAv~py)U%6GcYUhAFHHzfdy#t`( zwF1l#r=_{;`OeSZUxs!8XZJ7^!-Qwxt(GR&0&8$}_j5}lzo?}+yQ}rn&W|H(PUCHs zaT0lxH$9U^@5|0hV>8^sW(dBDMS$vKY(T`0a`~sPe zw$~#rz`=OZ`_tEa0uQ9_}zm)c^mh`Wl#;RqdN z%>N_pEuf-Y*Z9#H9AqdNkWi@sL|RIbZY&T)M6hTO6$GRPX&6F5QKTD`R>A;-kPxH| zy1S9?y3eO4_I96p@A|L*TCTIU+p}@zd*AP=Up$%%Ft7bm8!iw(lqX|1>1jMwzNwbN zmb(xxN*sWK-SI&mZ~!~5S?I-P#^VjzCkygJ_|DW9%NAB0gF>$75z|2aZg$8mI)xm2s7;P5OD z+!r(*_N*6hZifl%f4?p$^2(=*f}~zJt(KhYS7GWea_aOlOiF4agszIE1iI}kr7L89 z-d`9XhRrM4-EkFQ`zpqNk&Rn|)N86OHxlurP@UkYyi$1Q`u)WYN$(vy0QMpX$Og*i zaFHh63gl3&xrT-(L)fmTX#CvY{~pLN(XuYDAYbwPtb4+WjGo0nJ{GQIDOl)S9yAJut8vN*8QaH&KYSjDGJ$Pp@N96$=t7)M>plSQAZ<;#<>u!# z-?w*$*W&0+t&Z-E_k6AEEg43$o9@fL^=WPoG@AvNGd<#v8+YaA1q2vsz z@-ML2JK)@pTdgnnV9S7=rr$g&P~-ehXbSjFg0Hh4TOZ!2zQ7JG*Hx*bAbbmrKZ}dp ziHzB+^PKbX!+Cz)gM$RQdJ=`c5Xl1GI#rVU$XoY?>(MFPj?!bZPB0G(Kfs)l4hut0 zx!VBCRT1o-jgKt$jIB)v9g$!vuP^P$P-UrYgSuwf#=LnIq+el2uYVxs-0Mc3lK-6x z7QbIY++*Y^mCZ~1<0i82cmi7}a|JQz+i3V$y1fISeC3c;S6Gbf~A z5*=@Q_T5QZJa5=B3Y5Co8OJIilxoIN)}MtJGcWK{z17=ASifdKXUu#>Q@UVF|aX`2)W+hQlb!K?ckcoo;6jgV6sH@q@H7r42_9Iy~Q@Pd{$1>W0a8CCfr zn=N_jp89$(%xUu0^^h8o{j!7@q)cOqmBk~2W z_bMeI>zQi-T+g}_FKL$&%&s7RTB3-j30vvD^H60y1&11~*sPlUA?q4_`5JO?Uv%I* zjoz%tZ~t3tg(L1)!H4{ctbOC;NPW{Y-h#m)!+N;p|Nbt9Cpj zcNg+mavU0{aNp-K@62lGE<;ke9Gubzeld$jAD=~8j*f#_8NARkz3cT3603Z$UHU2I z_`sT)-3d}J?eju8vhP2gMH|^I6Iu%nkVA0XdAS3wH!{6b0aOP$0e-&knS8nYD`pU% zr+(?aWSB4o+UVEuoNE<#dHCx%J~2X~uzq4D|K~Ts(U3?nq1fyyY5AvxZKpfmsxt~3 z2xjZ$UUHaAERLo?fux?DLH>;ErA@%8%|HQ>@aA@NMzSo;;2L$sS}_J~)#! z7jl%qr5C*VMqZ%oc@}bMRYh_W@Zv9^rZ_unJUUj$Zc#P}()2Jyuq%9fIY%A{p(Slk zuUkTdO41taQ5b%#Vg~EG&#ocE{4#y-d7fw&p`=IwJw`V-FD*ua^^K;ttFDlPI26ESr?lz!#~?uqZIL6*6%EF){4@mQ^GEd?Qqo|2n~XsWp7c2nY_ zHgUZ;)8iY#uKU_%`rlG_?bgda>krr{yw!4c`FK6Y0mH9H=G@{Mw{AxW=WG&e0G2Ba zeh@JG2!vDOBXWLQ+k?6;OJ$M`rwXcX1iwG<^qdS-81WSVHP)o41;v@#ll5IYz}{_P z?se+jpbMw)GVX`&5ASMLn} z*tBS^YhBHpSwAuDX4d*-^Y?4=o<|XF^s~#0`*(`_%m2n=Ot?@W*N+F!^b_R91Yay_ zo;?oBLse1Er@Xmw5Tl5by;;F2$!KuX72A$OInDN7zyJN1P9QZbH%O(~UjS&DJw^jt z=LUd#9h0HklgCHmeck9#%8wm@E+W|?4f_yA0B^nfXm_Qsv<5ieDUUc%)7|f1+cy;Z zlCszvccQ2+;4VC=?m-C=}JFzq*SBQ&`cj~;E z(6*(?S+oYj*{mXujZ~!)Y~c!k92*bfx=B6(AbFXM(2r(l?GP{wybheB-WLSB_rMPu z0cWNQpS|*4g7f0pV9SVX!%~m4OU}sZu=JK4z}YVLs9#$f!l?2Cg!7(G`rh?wsX$Gr z5Hksi`V;0Bp8n(L5v5&mruF*GPf(Hm+>fQ-7Gy=^RdbLXtv&}1&IC(;Z1{DXe=c-N z`j5YYFGey?v9di4XnH76K~zK-xy7$;b9aba8BmHFB(oeaM9BJ5aLf0Xe~2}&T>Y|N zOO^uwSy3&X=~FF+B6qGkw&-TXk<)DTp(_iZp2)j*YRORnZPeXIv$eKoaafJ%`fyj| zd<6+{hgsh3T~3ao74B{HqA;-m@xbYZWzu(H6nRhnkdJne4bX_A#~j_iU)oji(1t{{ zW_Jo!{9qI=&b@}S(?;~t+=8p>`&SonFL^f6zIy8%9@BlLrET1fIR{D%>uakWf7%8v8QMLns%{W%1YJlq+hlZB_j=}}$&b_(mAL9uYyJ24|>rc&gO?zrL>qY(;MfN7t+TW3ODQ7lHiPtbwBz6!DSgGv-^=oNQAe#LB5Qc>GW~Wc)Vz1WOaGqS(E*kc_j+g9E)vD7 zLuD|)Is*Dbjf~hfbd_n~=v(uvsK9wzwgUrajz_1)cv`P0gmF=L0JS4N4qO#$vL>!o zY>7f`KPK7dWJQUZw+S;@^APQl%2|9eGcU!CIinp+W^py3r%-CAhQp%2S{KDT|tB?bw8lV3OXu6iwi^iV#8xqqTYwJSF4bWwWtlGgcn0MaR8WD3g(VIcw7@JVSS+&HUAS|`CKBf7H9~WG+Z4YNWBp9BZafe z_cJ^-AS+!Z-T;e&Q|FIh&o|&42(#TBW8Ld1?B%Y#4;Tb4N?s>=ljMq-*Ge{dG4TXW zcU!F7SUe=V<;`Ah#6`ti^iB8Wm6kI;JLEJT1`!&lKo5+tVOqK#!KmWEzzvB_L;B@q z0q3uaSkOVlN?;cTl;{RLI4IO49hYwC2!?AY-h5p;E~ZvYEpAXYb!74db;{AD8w7RY zmnq_Y&GUmitoIIaUJG77FxzACvD8S@FI~o7P+8I>Fm8SiIU(UT2(FP*_d5Lu_4g?< zT00K~T<3ul^wyjrb0>O;tVBknS7pviex?8}Ov6~|Vx!FDDO%nWotOkKj%%$ERy%Jy zc2oMvytjbp_A)zVRF`1znTA57b^LwL^s~9vptGv6kR zvCVfYwLD;#5MmY51m0@4C0ULeb%i<>lTD z^G!~hCq;L!D2|%Zs;ygj>>B?R@eG?AQ`o({&3sw!(^7wSlkwE*oyu)@@hPL90qgQ_ z<#s#cLh7aOCjM>+Rxwt&zRj?HZ8hA4{BJD*gr=lGa{4$FZdW_2B2x&;=l++cnKArp zO<(zSv&MC9(HcjH)tuW@JGNs}kk{v~8K%xTe-7qqb`+FJ*=5XQXxrD7FenmHET92^8`O_URF zzX&BGIq7;In$e?QiZTMIOjNI_{Po=ezBC;R`~nV|e5amMgxCRtQS51kdm#$9h3GpY zvGYNqdpT8vZhi8hFOoTVbF>^mkW%4iKVT@@MpPP_J^hX}Y_HBcVHxm&KN8M=W5TmE z?|nj2>9!$F#v-J`6bf-*hyPKo}-y3$2I zr$sRZG+wp>8La!1WXu2|Uz;Of+3rJE(zft}jkK$y4nN91K4W~Q7`7Mf)78bZL9Q%1 z<$$}Td^mVToVv|=g-LvtceNr|4|ihVBZqL5Kh(gz2Tbv_tb$iW)IbL=5fa>_@ zs)_QTtimUn*#2)?O_`aPiO&n$DY3^Jk%)M?t)shq^Zm~Jo+>ZkE!GvWSSpOKv3w@r zGDyzcd4&YYKB(c&%pEQ^`{<_axobRKS;}OzcA^_R@1oy$Ok4~8u{o;OE7F%m&b>yG~p?VJ7&{+&HRzyEJ#F@gx1Qtf+PadfZ8SHe!w!8hD0$C zho|>mrLY#as6Rb-F<|j`#LT@hxeyiPFG=Rz4P=w0k>_1-^$ZTin%7)JS+1C3hoqf< z3StGOBnbC^_=po8`h2OezJoRrQ;J@{w&YAmxJxNrcW&a*@+5I?c3*dx)ZB|}nU+{aRo-|Pn9ZOg(yGG|7=wlCc`*?B9)PC8Rq6!QDh9D>IGWJUOUWDxz=Uy3tm};^7oMi*g8wHhhKLaeR$XH=?`Udh544v;hFUxDkD#RHjH{MamtQ? z5mUs^mkATNTC(2cr9mELj-SA4YZNWNd>sh5+(lbJm=ZoGsQwCWd@XHPyLJ?Pnq;#CM^B*%%(OJapyd)Vf?6GDo9Qr>H%M=3Xx&FXc6G>(Gd5?%Gr z+uIw<`4dC2)7Zc!R=in;Gm=8G9T zKsZn2Q7e2;>NWmj?wJM6YT{TW}TjNGM2hCaWj*te-B&wh;5G4399fw@g;BfG%`p$9XD@%LDtto8RYz*lrPss3g;H>yJ?JVoN3Qj z!Q=e}$m33pYQOwrAbQaYTPNyEjW-PGx4QdW!AjBQ zf(9amw`XO$HdY@!#4@(IPxd+-RZZ5R@u?{1p5)fzNqxaS;SAUAF|OBc#?=D31y%3g zVNuTx&}>awO}RzQ)0pS=lyt;+`Yyb_UXoF|%Zuv%@qNN0TU8V(n|xNT_Wp)+aMUoV zdp1ye?H}Eo9)>~_h0VPx{eoFlULW^$13s=V_n4UwGIe>l*EZ8%bS0`K4@25Y;nmho1 zdcK?Y+`mO6og8Dj=#@Gf(7tDo1bA$(pfjo|a#?I1y!}e_6a7OFm@45SzBl#HFF*>m zJ396Z3MkfTCZF$_{p>P;Jf!0fGgBoOabS-%IC-Azy@O6#mo4@Le&ZKpvP&c0yLSef zv=c++JnzevHvHFVQ)We=Y$o!lA6fNh&F#NA0`B`d%G!i`=gcRtDC^)=Y-yGpXZk&| zZl4hN>=mtrSKi(t=eRpCAl#vR^4ZCUVK|*a-48*N((aF6@}b^H?RJiPYR~!Ru_zbf zM^_(VY6RL=`(-E-ZoW;W8=7>uca;hb>~{CqGpqVBJ6hC9QMU0NE7#kmTPo33g*FAF zeMz#`k;0R+3NQqHaE`>np3Bn~!-Px%#(E@$3IU z6W=DCo#_yHj?zgc7Agp3~rbNCSDVh9Vo+c}ESe zZZ`?7<(CQbqm`v!42AAhIIGO-Dn#W0vomv8%zlt5_iL#ks*)a6W%ny-JNmqXX?5`L zq}{p}aJT(e`KNTS^Qd8SpC>))=gkR+Qr(m|PwV{;CR?(n)EkjegqZWsYh(Je^siBfzC;XWI}gk4gK#PR6m_XE zOgZ_^xyZA#*K^k$7UX)#*IV9x;0GpBC#1mmo6a`_|9fYss85N z$zYc=yOJDCB%i?MTOIt&CW1&QKR_BB`G}hHXTI|o76HbbbS2S#Uf{sg;<$nD z(irQ5rPOB|z7ZnYkYfLRH9PZ`2AZTQQlkhxNJb}7LgxGC=}T997OUL7H%akEV1&r< zhEE^!R(ab49rCW}R7X_P5I^dTC>v&G(POoPWp|FMYvwk^G@Rr1+H+}}|I}n^P?ObE zZ82NOpKVcaiT_=beZ*|Fs{2Ivu%UcIhur@>Vxs`XGIG>B%{k(7%L<^l6w1u^IzU~| zg*YM%y(bG=nWIgRog$a&3J3s-Ljmyaqa#Fgf37-@()?>XtI*8uaXq8T2DQ;q zz2>f@q42A!{`0g$&m%clBr!^PR^%uS;^$4YEBG0i11tAd-;}T$rPA69p+1Zk1OLUx zh>0ze;RW)e{T+;KciyIc%*gpc*70Gi?_w};#rVMXM>k{vnP`>rt{uPKs^L|n4vM4=eAW^L_{JR2AnO3TIT2I;8d4{sp5=h^C8TxR&t!Gv&I;4Ab zA?o*m7b2aTkf;3b^Z(0i(`rAjB)T64$=S;1CvCwhZq`$sXw-rmcu2|S)8=guPg+r-J-B%ed2 zZoU+GTMLWQHV;^7Qx0;N_FMw~vN+~gKx6tpdbf+e>ZkK-O&5qUeq~)%<$jbcCF@K@DsL^nDc_H?WgDo%B?PVP zVyq}o`FR0zAS^4F-7lx$<T|4z7;^ zN!+Oogo~(p_YbJiu7J9t25h@@I4?sG>G26S<2)aDx!+Eixm;I;-aKZ8^wMxV3@xYb z49vrZpQAXQBb4qBH#I0bcT+NQFCQi3gS~sGxX0vegb87C%YC{~NH;5NAttSQ1PDb2 zE^3QcF8bMC2*6h_19BU2-~`;1(z{*q><&efpg!GiaY%s^wO^R#h6S%)nA}wo#U*?3 zYi|?#sTRp9KaSIME@-2$IoPS38So|#2h?ps?X&JLmEVB7syp{DV> zP}?$E1OsW?te^$N&aKhzalB-)jmHSh#xKl7j(xo)a_o0meOCp+Ol-$={!wM~laTVE zi0LUnS&^y7kHUq2XdldqmCozO`rl>3C2JADgIZceQ2vxEbhrVMhp9B>41^s-u+v(lW^K)j=cJFC;_1&@XqqCNOvO<4&2?TB;zmN6qF|jNEc=yXdKC_< zg+>K`>y+oIo^y46P)ixUGP{2$(P8`!LE!VMHc)Hg2M5S#$4~uSZ*$rW@=0`cD+^J; zJz!Ok_ey4+Y|G8XL_6-_Qp)Fck{)gqHDsyoZq_YH`{_ijid2u(;xCkKzVr-6qxq`> z9jZ)n#bWLCI6O9^+@DoUnLxJLM8?8r)o@p(S^Lb>44!_xV7%^CwnOG z96~!G@@8Isopz%*5C4+sWg=DVDonHF32Un9Ea@o-s2h5&3#*bmyY1e*l(W$igdIEK zulQ!(qCL^0k?gW+w{jCsmlEbp7A4-!hO-}iSA3zL1+$khMtcOunFYNoOM19*ocAhQ z?hX1_6izXZ_W|y;MWPpu!G~cf5?LceD}$HYpe;IUQsfwmM88A`t?p#KsSc9ou*3KV z%_+>+A^pHCeDakE{xgsm&0@*+Hc$qg8JZ!yINfT_|u8P0z?w~^r zMqBVoT;EGh`@UZq(8clY?8qwuj=UhwrmMoATjMBjYyX$m;8B!0=LT zOR=x-i;C=DZo95YxIwi10pl!~C(N-vnkO~Uw~kWicVr%-A2nRuRyw4hRlVV1f185N zb_cOeRSb+3Q0Zu}VQ8iuvJ^v10>iP*0_On68UIl20v(dUgmi3|h|l4!A$$5E@5^m@ zn+4USyq#^M2#VOY{d*GS@w^%Obz)Y(E88wxm9xOkHpLU>lKk)aNKBly`8uo9+_$oI z+g|=`x_gxW?~=)tTLkq&=$BuhZHV=OXh`g zffyMM#z_v$-Jqx46A$Lw{ZY6XN~HvYuP5KJ5m@XO{cUHUyL49N#nC7oduLu35&VrQ z1`4wwWDTy*yC!PVl>Nkd6=~~C;Da?Odm)>BC$7pC&W%cdN~?M(HX1t^0m<~UZ1_q^ zWI9{dda?*^5ZNbO>l@8yvdGW7!Hs!1r#xZ)nHPm2BQ*E~lwI^!lN99T#Jr4D%l{Mu zH^*Ew@u4YJmNtf=91mxaxULa=6V`3EhVbY6MKL9FzI7=s-H3Uw7HAvjud%rJ$udoJ zm7`n4_O3GGYK&-6|2aRtxvMT`+s7gZa>`{EQ1r`l`@_Ri^L)7@fq0$TAao{*^3GLb8lY9`pT2 zvZO-@2Aso8JN9B31MFGS4w*7E#AgTrbR)!M##}Akd)%}oOEsAOhBK zn&gLZc4Z%96Qc*z29`%a9=lBK+nIA+X2j*(SUA7N4G1h4AHhOn4t4{Sk%uzns$9V% z4r#A+(JdY+#yk#L->*ksC}G+QZ49|hluIS72g?2UpYs*qhRUApm!;&86_V|a-YXn5 zSAg|h6%P~~;G^QO1!)>y+9r&3@Cr86qA9`J;z?e}4W-k`ExS%xV}rpwiGkL*h?%>Z?rWT{F3TPVqa4=!Fe6ys27U)X()vaWP$ z+_>FG7u5g(Cqr=+vS)Yt`_1*kX2GI?1uO)}dr?oE!24qXED8B(h0Ap} z4whq7uq3_#?|=4u+~n3x*+vx)_XvB<>EB-|+uSqDqmOU6C`--3y}?^M%}C-SASnmM>MOVPyUw(-A=XPw zO~ER0!MEJXQjQgwr8HhKqp~<)N}I56(5dLEw1z}c1hOQI`xc$9XW7=beA815jE8*o zSz>*tbvxGZ;<8_LE%eD*A|IsPq$Y!H9>2FA%lbNvEbS6! z8oY88<8>p>&cDA20p{jZq8!Ey!C*+4=R;#NJd?um<=0n|%AwzETEd=vcR*t%X zgX|JOuW$j~LPOn|RqK$Z4P!f2Eys1Mho0JRb6>9OwY9BCJXla$-wxOb+)cFXe3Kb- zqGxxf@&r>!^{*JHU0m941XLPP_S7Hp8Y;i}^l||FScDu;RQ)@hUXi2&k1#AG_{q`a zs+{_Q#K#yDhQN#8ubb7MJUFyQrGpyRE3u-SuD@GZ>}GMEnv8OuEZp` z+C)Tk8z(cCCD@UrP{l{&t#aEd9JlciBn_J1!Kh1@%5A?g3)|c1fyI6_j#I`OD13DF z>f)7J*kaMwdZza#-FwiGBa>`Zh3i+YJFJIbS-jk9_bKD{rnaZ{1}# zxDtB#s9gHzVz-)i^N0S85qimySY+4}_V@&t5S7~ucIOTg?w8XrH%d}9)_@nTtg4NaYSpNEXy|EXwFP%H05!Fw;a`FhaqR4hY`EtIA-^HA3mvIt| z9FO0EpyDhv0{eL}FB`dfth-6Q?8e4MWi9FtWFn~d!@L^l=dWd0Lm=Rb@jSK}QW`xz z%=*{A0-m@fNLi^yFeZ%qEABOy>IYwt7uGhlZ z#`9-}PuVe{QbO%U$L1##g^`vCKAp5L;7&5ASq}BEHx9FKQx>azuJ`PJUrDud zkdRXDcwG98@&BhzNkRcZO5f{YE&uNUJu;D36s60!{;|LT2$)dj3j=tqHHXEr$v92p z0;_?LbhxX~rs)u87@6^L<2emUhw-m35C!uGot7-sS0)KsS&omsBxNvRLg5fsqBQP!0CT~@$*FF4wj$15&lOarig*R zoV2It1WCk?{OFMjF!pdu@I{I>lz>{fZG;{H-MV3jz4Q7yMuU(mM*# zr5&LzGx_tGcyYr=yh2iA1>YuxI}gUb>fkFs3^SZZD@vp>GV2VM6|b)3AO5r|6wy$w z{O4!*^+~oukf=oQ*H;kv=l@2f*eu=bT3CJh4f^wvC}cz zKBSapz{)@KW6orY9B#SN2ZssH@u!Av^L|upvicG>y)3&v)z68;Oi%rdL?8H|`U+Dl zEiQ%r*$KdxSU|3uOOKnN?4OS|4B~oU(i|RYUOdnls;5w7) z;pII8OnrXf=v((H)l{#G&Ej8w`txbxeBgU=^v_@V^Kb(>;GHpT=e6Ub1MS?E6yR|C zsJSY1y|a6UEHd$ke$;sUi$RQUg{q0W~Q} zKVRzSr)*7Vd0yb`MyAH#=fce_VTB{``<-Y(D7{IOSA)aJH%b_|1X?>1QN#^IUq|OK z)2aKAq4Bv1V#e<+LYLQn6K*%x=Cmzc_N!(x!FKkdBXea-Uw?NujQ$> z$ZyY1Me;t~#1M{NEzmfkl^}?)9X9WpRr4eeQm77yD2~v~Yr`c~Q4qL=?gu*iVc7Z< z28DPR-_(~UT-@fqdF}4~iy7z3UY|vt5%`Poh81cw1yhb6mMpJeqaqp28|bkf3%E<_-e)WP z5Od7?-tuG($mf=lf63=&{jILFuX3@E)mbf!y#6yB;oBfQ)H_nnt^ebpMk-EYyg>Gn zh#)+)wiA;cfH9CX-HeWz*%EX2kWU9`54+o(cQ;t!xoF3O@=4XNQN{SR5Q^xW3zI@g zE=`>FK4u9)frRg%Oj`Nbb9DuHpG4`l7ngNlYu{iTdMG)XZnb2M5VpmcIdsrTGh6kq=Tt&UJAJgRNw#mGZ z`W&RM3EP_>PY6v`39#7tL{c`H*adxb(o^k6&JWIf{hF;OJkg&2 zjK^-t{0B@U^cKH%Ae7l(<=vwoyD<gtE+SJn2?X0IE`oUmc*heO4vUiGfcasW$UlKLE#V0{v+v0UOvN;BAxw#hx?_@1Z>xLIwQvfz8(g(=r%z%kHJ@Lb%?~ou*Mf&*5Z6W2i6lf${%3xO$#^A(F zZt_oiW`H#&K$tbgM#|gvE3SiLCcYAMBO#xH(hlBP2V<A zAv$k=nfpgJ8s_niqeO*B4q_QrnAVVhiNp=400m<7$33^^?VIuIw(1$tBZaoxJrrY}Se&a&Yc{NVSdnpW?OW02NHWk3C@% z0diFCFtkrA{EeCRh`<_By*!KzP{O8&BNkp(K-N+-N<;~#*?deGZS?s811X0q^YL4U z!5HVw2Tza&E&N@^b_6r$$7H|@i$`(|TVI)0?{k62>z2#&@oS#3ic;bW?PvZhuqg&9 zB`@!s$^gfmNPc6+szfv3dkX61#MQor4JiC!x8ct6gj%J!x;!$w5QF$f!(l97A z@#qU7G`=$#0Du0iO;COvHF|H+aA<^lzw-NwGv2F3fC_)mC%;N$Gk~?nZ~;#itAJy0 z1TY)w5Fs)^k2x2lf5+WhKHy91Px?Kuf4V8CTwd;iL)F@VEidu@J5$Kv+K(&uhQ z{^Xzb+p}%p%B_Z&_YYCFr+6B%oVL&|AglEi#khZfqg?=6Vs<{pv!d-*N~jbf9`w3U~PhVV+aQW9KUeOP=`lIpyfIl0Swr*_a3d>hFM2uyu+C@%z`F@@QjimuN zuLKc~O|T3V|3c4 zb_?5S9bvp6aQ)hsS_-4I zF*Q(JNBmzLDF(|B%4ktso+m7l`U05hv&Q6IB@~v!MxwrTGr8_owmaB8WE0Oz_c;{e z9vMK%#vR(#NJEpiUJ^YdH|e$G@7zGI6cb*)b{BM?7c;|-bs z4~KUv0$4Y7@8dv_J+sP{wf?UHs4RZ4Ov30m1cL zXX!S^Yjm-}otT~rs95@A3KPNL=sUTwquVtrwEI|w(1PKGpUl?H?lp{VCMQ~FyIWI+ zT8#y4bh`D`&$Drg5Hfskw3_YJ@;G2v?^2=R2}r>iILii|gv|qqc+R#_9#n8j>G+M# zcIETI?E9Y&rX`Yki^vLrx@+be?7nypyyarHNZWmVm1!aheWYFzW9rO9L3}6;lno1p zb=EqpiFdE_Ki*R@3S4HfmGRS9+&)(dyMrWl9;DYPU~FN+}} zs~=26ir*qDj>9~%^LTn8D$36wq|_bQXueOiTg!vSm!B%vVW;}H$|?=TL4i*4XhcwC z>@{MW8t)~75a8z9OXds@TC^-j4vRUJ1Hi=S7=V&T6!kZn5+=!`@1ck|OmfoOvg~2l ztZ@{~I4&d%K%JN}nO$tfvBfPb9+Pljxi}4VKCuERBy~BSp0MtG4$Q3{rPJrEapVtK zq%N?Z{P4D+DLW5XemD)zr5p)c|5aJ62FKnuYwHEy)hYz^zZxf0DUY4XrZyk@WCPQ!|tK^k_l$#duRemd4BF}cB9Iof~q07!P}cq z0%Io1unJLL_y#vE2WbU(>2^{QZ`^i;bxWDfm&Xe4E#LY~vwZT)Dp(0B-48*yzTp^7 z;rg;DPf&5m%{|?__Pbez=fq1@`2-WUyWQtU606aBwLPUN)y`&hFoy*5Z>!`vZz zZiq}s1f#wRm|{KqGs*uga>A-pKS{iaOGf1Ik4`(n4pFh&t%BnBJDn*HeVPRX()m8F zR5$CQHt3v|yxRBnvf7&)uepRv1q1$S;2KX15XY)RAM$kW0M-~svVVreH=~h7fsT%u z41j!BA3ROu92IsS$GEyh8r}@Bcb~c9@!L?8L?A28Cz!v`u(f<$0W#Wo4%Gn$YJX?G z7W-~WI0>OYUnJd0K<}wP`A0_?D z_rgo0&8slc{dPH9sEPr5a(Rv933Ju)!m!4lBe46<( z5%tx{^9&)wZ%@$_&bVwYhg0=k*Cv0jp?%Khk0Byo?!4|{!_7wzRB*5a1hy<4dXSH? z&h$KxR2K#z+asda-(4XkO4$0Lu=c~%g4*;hudDw!@lZH%?eFHj|2T1XIB|Jg$;8G9Q1+r zGJ_dzY8?puaQsh0Au&qrYP|`K$(oh1_x%0{+084Y_#VJMkET82B0&h4IC({ zcRRWvBWtbHA44hLC8mQ;)pPNsKn>*63>peWF^gLS7eUcr5ORKYuj-*rJm<+xZgJq@ z8@q6%`J%+bqkV8#6Y$*~?>2ex06*vZRV()3B}S8kj@LJ))Nfjg?o+hNn1K<%1x{&q zmgUyzbm$Z_x=y^n*ED>0@{r#BeN?$-LzG3o8Xh^i*<)2qgs;b_Im@6K%hUlEhsUtA z>5b~4Ys6|@LYnUl4Qme)#n^2%g}TuK=#3ufoe$gqicBnBhv`ndy!(ftgR~~Ah{L_A zbk__bw3PzHtHpjUr)*DNo2>6VZJ+2BURW%m1hH8mcDvT5k z(o}e>p@45DUk>`}igaQ2!H*w88C<+@Z#Y^hh6kZmFSC6fXJXyvHq-jGM%BD`Lbt z)vGss(-n!!=PW>CcEra-2S=jKUX*(CKuiRLT}T+ zGaiK0cVQ!-R3x0@0jK{QVB(Lt?!N*yNI~R{g}(Iw$2E`~{&BQY$V8GcxzD5KfK>9t zL~_E~|F>?2=Wf8Hz!Q;&`+@PDrhP3Oqm06mbpI}u2F%Gwo|`F4iW7&y{g2cn-9b>3 zLNht3mfYOG1_|(Hg+%UwwSN=YU43V-hsS+#} z_Deu?0u}|4Z5lqrg?gy9E^ydC!4A>}o(7ng9Hng#coly{B~V^iC8Hhj3W4=t!s-!% z^Jh~UqdB9gnI*90ws1QQNzKH}nv#DM6QK|)(&3P4)H9B_hb57=M9ZG9uGl(kI#_xA5Zl#4)J}e zdSg6z{sk|_i;RtsB)igXdLiHBGm)Qj+8m4|NPXVtG4h}hZLQfzZMb)~83hW;>BHa+ zm}6s*sjNJB60XkI46GjM|t9Utu;KaRTZSnc7Z|^(_8$; zdjw<*DKz#a)QcWbBvC*D`yH0&HAH*hF&;tM^^!1$+mBW=F`aj4JYf`762;-w(`Ew| z$2tUjx5Pe>(tGosyULGF(qu|29hbGTMqnc?`Ss_E?%sJnVR{n*M6J_)tta(ugE_G1 zkXa1zX21w&W&Sl-cF*4D&0P}yMjI6c14|hs(VmjqnJD=L{$hW}Alo?=(Mdv~^#OmM zgLq*El>pKuyipNUr}abG!tRN)ZX>$Jfkt?L^4os=C}LDH2+&BB?nfdsB>opkC8LbQ z{vx1-+riw(42+7}myZR~BMnbZF^qx5V8-3#@bjr1C3^a3q6^i)VM)dA^cirUcb4Uz zv~RzFdKYl=JlY8Il^N8({QI$59EyIADG=bNvMOrOtwsE_^gIlj_@=Qu6i6wA{I>fLGk7F|85FrF zk^+L#0wN*Z-Cf^#yjTDCdcSwQ-?tXar8qG2{PLWA_Sri$PUZ;eBuMfK-kZ35$S2~B zy5UUQ>kyrq<39 zx?toAt-q^*GSUg!IKYpkhZs?EICt--Y40>*~3uKz^?joXhHvz7twk zPyvHxj6y|Vw`oSI1vDCg_SyAHF5DEc6|lY$tVB~$wz0C=8dFIad{SIjIf6I+=_@wW z4j@1T#*aLN=8aOyV zuHOasgJ+87dM%fS@F?QYrvYnGg9QwAlV_ZOVBS4F4clFdw|wWWIt7VLATt4bwL=zk zORG`y>c3gr-FuV_$=d>mEne*txnI=(V48;x#1$<{??>C%*p@SB6wZU z_tZUiJy_P`1aAE{#7&GgvXKt9NVMG$Bcjf5UN2x5ENQ-N#`IvH*}u*)+oy zN3*<*M12vHZLh7{t<=ts$2zoUZy&4dU}@)T*u7+y>pF$E6Zq#+XGUhN+A~W0KeHAE z`IpYYc=eE6&^x$=O5#I!rkZX6jTkG8iDaanE5E~->d}nLH%Jz)L(dP>1c=W>v&{Is z8AR|oC`)q+8WCr@Yd2)Tz~ZOh6GIL8LH+1$R$9O7^5YNXAn%E9@BJW*o}ZvT^yky3vt$C=% zuz-;CVn^8AL5S2r*c64?T%GB<%3pBHhjs%fg46*T#uII@U9WqyqK%Dcg>E-P+eUkK zzu_G!RJ07`GZ%pK>#h!hc<9dCq^2sLD8u*jFGb9;U&pq+6coD3U~^pYHn<^=$beu3WhGfkvP%WpVFMc{6(aS6u(0ZTYj-d)WN=~oqbb_6e-G6c}Wdv+f zig5l9*tSLlU|T?_4)mq1q=`~Xt-d&eV=(Z32%OqF;J?RiLxIaoA9n#-Gm!RIZ^_3k zrHPN0k#1y=L%zbHfln8Z=dBG>uCd=&>Y@U+Z$~amg&z7yRr1m@^AYCS$$Kr*Y9F8} z16`bku-@&heP0a)M*;)!)OLc!4kl82vLIxDe|guRh{!$2sCI8 zkZDOwur{S9l+3*AOMx=cPvAH9mI_KHt?WSJE-!}e1I*XjcEk){%vTkkoFet9xL8h( zY2neyscyJf2Ik!aA<<)>I0=}{Jp>Y-H%Z96ks&#e-{mTKSu19CTGI*JYXz=il_^Nw zT*juY@ z9Lx~;9n3tE$If7xJNgtFEzAJ5vWQL!yHAHPpfS;Eh=EV~?KNcqZ0r{(<34hSogQdK zsgO-h80;DS*(5IerU*%RwC6hkFr%H`y(p3YZ0rQ7CP;Yu zusmw71BU?Pzy5+Ot`8uFev==7d%qB8{M;tvgS4*>NPprvST!_{V4(}e_Up~D;03`EB#lZ zRNnzX!(#W&k$4TJ1;5X#F$vIc2`HzfY0pa~O1g8mjl9tLlwdIt@NX%hS`26wGWXbzKDO_HhNS4iZW9&a!b{7X! zhZ$wWOtQKE;(?!9%8D~=xqGzI?G^SWtSdo8F#4N!0C8XMP6J8AK|Vu7Kl$}_njigt z^S;kQH?%aTmL!Oah8cNv*U0(GAX8||`4;6Z!!fK~(tLILlF z>S5hXS8gNsk+nr`w8EKrT;M6PlFFIxre<#Z62Cam=~KoIl0}dhAo62x`DF68bbe95 z1%Fb&JNZ%%e<8VZtebdKHZ--$V7rfMN#@y3!;2_`w4IXWsL9ebraoB)#C&EHv>AEB z2uwJo zDQ&JsWq5N#;NMD{|4YFzMzaF-X=a4CPY{T@0JU#fhii@GyvG{9xE zA*Z|BpF=)?o=kKE(^ckHeAxDu3iN;MAv~$0NB8k?Sv|g1Xmyfoei9jaoZ-sS?Kejj zGCva~@(hF#@6zwm+2RY3@Q4uDKpa#6f@!qHS)VSDXwVZ}m2Px&m#(My=4Rv@Iz`(* zXnEbGLoU)87vs<5DqP(<89lrAWX|Dgimam1ia55tik4ixsGE@lIN4}U2V>fK{&5*@ zKL#Bs*Z6liFZK4%!2ksFP2N=s=bal>(Q-8SgJ;2M16Lol<93eY{|4k|%Kr(`cpS1` z&a?henUnDtK-ZHEO8-o1P}6`&#i8)^80kST-I!VG1#<*}p6=0z*9 z)ay%Z!!_1_zYxQQCv@*@2}`9ZpNyV$rUzEIWJG$x1IjF-^3oIQi^H`SYX1Y<{bYu6 ziXqQz5R-H9kN5n9uzZK?JUV`}e1YHlo7wz9{wT#kC+PeD)&9ds3I7ZfS^B73Lyz6lGa=O!Q7$Zft43nFsXCr*Wh@`up|2RKP$*$yD4wS zp&5Gw>3#(m>b&Na|B!-yKF?n!*hox3*?*247*OvfPU%iN^ygiOB-T<0`IX(PO6AXY3jGONS6ws>``>#p zUd2cH|AF781W5xTd+Z%rj@T&eKSM=E@o004S! z?~CR~|M#T-{RDq~2L&%Rll&j433;=MY^Cq0zqJ4WN3KNP#yFqD`mcVFe{X_62B-{v z-HLn_@gLu24UIr*2KDBqN&okc#E2{w^QIuDKX8&zsaWK$9q%yi`oE8F1v3mIPoS4>1A}0e4 zyiwZ@z~Ytu-zlJjoD3b8m!5OV}E=iUnN+ul{VM8^0&U1@3DaxscQ81 zf4YDKUIZ5=rRZJgrei^b`l4S&@>cp70EDFZ9NBnKj6&boJ%4{n5gd`-mc44rAb{L9 zP`{7&q8v=0EVd$~&IZ`d(9PuSvL^atn4cwg63VyAF-&kwr3y-)J8E7k^oIrB* zHxC5I1_Q6{UGkTx=08^UkbEM5lW3l6K*3ubhrH}5z_q6{Z+E`lq)bG$BwWhjI&0OA z3831sfzH?^VD4_-2wri8SZowN#r5V50INp8vJbsmBGQLtxp@-tYQFMnQRViJJGEaz znPiXfHb)7)t}en6P@IUpTX(88(@^sHHYgaq1gMxo{M51yIb64=Kw{v7z*C6=pjIm( zRwHg0Ux;}^h{zS1TYtxFq6W?$1O`v~y5F0(u6Ini5 zTW$?j5UK8RU>YC}huWhp1AVBYA>d37Fv^3tXkPCjP46m2cSo#KEMCQwJw5>4|I}qgqlhrRbPUH z=hgFZ5E5th*zW1Sri- z50=)@j=xAb;V_eX)=>AfE^AlyefPkZInL3Rv9)cSVleS5ZAEd548r+=tRzc%$KsJ+ z$((QDJ0Mc)`#xL#V9+oQ^mYi?8IcOF!2lK{w6498q7nx5L~?gheF;x`@X zh~!c=^r(mxfx8e6ZUZ7o6AMR79+j>z>&UzyA^V?0Nd!U#O>qh)$x**x8B2J?yxg$p zZpsQsOWiCTFeYcdh86TG1+v=`bThSe$aH|L;Aac%&DLIEupI5(B6$C zkIRc7;r#__Y?O7A5}qQrgQBva^Ro_W7rjbpCw-pIGTheTVHElu(0A35tG__crtc}@ zc{aSKu<+O)-&z|ME0@1&I%f4$D!Y*Z26?&P>qBNm4}XdLaLj@D&Uc#cUh$>QLTvY~ z@Wh^N+$G|klW>jZ=5KKSI*Yu{Q7EqN`$dHxl|=uiF9}675-i0Hj@xgqg(32Cn3^l} z)mV(OCAm8cCRBe?0y<3+TA#7LmfVZ6zbC~1&w0jhr2)-Oc~$`82lKL>du#e}rxnBkD77<{QqCe6Y# z-cBZV%mvF1^m~Zi0tw&MJRHvv}j25`h+V_dE;kP@-=wVO!M4Y0HpImdj`HH8;?W!lx z^&f~cK1a1QjJ97@*Tm;^n?p)Tl@}%*3JPI>SdKY)5ddipzY_61EP_Myi59IfHh(=F z>0$k7ZJI-GON0UpVoR~U$@2i; zRfZP7U_2T0+-gdF4f;WeR}OadP~vgWR+BfB`GXmlj^S6Z1fQ#W-Rl)<6w zEuoWqk@VwsIq>3-*4Y4Dz61(1sf!#s2MzEaB8{D5dU>~!s_$u|eE&m>H<0Z##Nqof zQO$$(>buH3XK@0i@4z&j);|W~d{VgRU=Rj*!83RtlazDG$4OeO%C?IdL*@k31YZCpogg( z0auL6r9y}*8KY6G9%Aou{F7Sy^3Be*+uucP_5-(f%!|wBcKF$MRx>@0+AJO#78;v} zkRWyafaH-SVx5qZh2Ac3fORUE+JLfs7#!7#(An57a$*az%x~bfP~rsfCMEXEjT|$j z%3a~wt0n6YLcgkGSd9iFv}QPgm(t-Sx<_MP8}<7F|3^0?y*%rE_spFQ%CvH{xj&K58f+L=o( zGRQ#$clJa#Og(Dg51=gBSTA30FAFbV324n@TNVVfCw{Mh!+!D| z2npX=pl$tCaU-yMOROvE{R*H_M-TW+9B!N*+mdTd2j()Ec87BxaLC;w`dXRuV$Lux zKm4d1QMTDPOlje*ca#)t;YaU3=d3^d^#yC%1lt2SnnmfAV>#M;WmU%=#>Lmm)=Mp# z(#yw}mDCc1mg7W)#>nQ{n=ll*jJ0VIx50hPNMZ-b%E? z=r%%=0^xWODZ95iXqu7vvo|rLN`ScVWALVZ``lZ%Bnq@87KpddaZc1Qi~E~qi}+zHFeLjS)h|a3yOqegoj-|foFDiAQxp)*`lAU;%(fA zPctAw$&a&p#q)~J`%<;fiLa8A4)Q*ZLRmefR|+(guX!1tG(i`$Q`Eq5n(o&Rpz=dWQA$*42=eWnL$!Hv+;8s+$TjiY3LNn$`wbMRrwG?U{hkGaQG`Tk;9 zEyNJ^Am0^^m06#!KVK#ztW`>$MB`tD+P6(on z40WF3%yKzenK&fd*qeJYy$S{*3wJAtIH<77T+cTlPl*QIRFPFGL&ineVckS`#R{GY z%H79~5r2wI$@p@&VZGaX0fT1|t#NT(zYmB|W6!RtDP7>XZ>WXG7(`KQg2Z0ZoHk;t zOe-;9(l@)PXII2VaX?EJMVnjNiNCYLkQ6D>eT$_~=dR9aD(no=eCMP_RwU()`@TP# zMEbD76J@&i9c0l6sWKomvSwt;<{d!g^9-1|v?5_Wz5_(r$DO?OPO z1k41wjdnQ9P(+vJ_nhBA=G?CL-N-*D9RA*@1an?-MSGbFCHSSxnr%I~dC3^33yLsWt8RnC4suvYY zU`h3~B;hdkYhI26Hu1weL#3LC_t}}7QZrO))XmTt-qFUi%jl<=#bR(c_b_TPHekY= z$h3rKNT;5NmFV$CVfk+37;%USPE9V)SM%qB3AG@2fpfffF%DVcT9*Sidh>0|O9#@I z5L_pMRi$;w7r%UW*8VAGFm}WxO@(*M(pMtFkwJH6MNx8Wd3xQ$y>D@$cG>T}C%+4J zzA`yeNQ`YzNAQeHJ@YZC$hjclnoa&89|8hPUR=oq|C<7MMl)+e{X#Y8ihz08?8KN~5w6dyt}1>kg-L=^w$l8_~1oKOit+rj0$ zg`x@<0XGM&z^-`H?+VF8s2exT=tA_5=|1vA2mJiX6UHM#=@sv3KKT2D`ssc4*)wGMLl(;ZiP+jMFo>L+3CvMJhFM9Q|R|0VgmY%BN@s z0*=0x*#wR!AaG$$n^g9;6zw$&h2wW{N8i1-4M$%h+V>wEJoM4%bM;B?CFICDxrn(Y znu*0m-x+*I!NR;(gRwhuvf1}b2GB&!U6M$|hH>UK3r7C_Z@|y5$9A2enVw0_(w}zd z+SbQ461Ao(mes<^S1|=nN?(Sv+Z;sRt!%DtOSTRf&i_wEJZ9=c5qmC+ywz!n)$C=85LsxM}XlFw(DQY&;PZU^ZLc{~E zpnZ<(&TL6l`xjocK&Mh4Oy6E09~59vYB{M)C*w#kTee8jdT^srBUQ6I!4F?*sd?EE3aHd( zgiL4VJ<6Oa?)L4Q1Tkb!7bY5oiR6Swtl=V?-2%K?o(Mc5S8^R*Kke<<=gTjb?0Sa6 zy>rm;>3#7TVhr!H*X5I1mM&z=Px2*P@fgb=R`$ye?qcm7;TB%f2(;hBb}5$k?+D(y zK_Dmf^DFTzS`pQGY&Gr5?}hjG@+0#Kr$RC3R7^)mPI?y->M(ghDN%d)=1nN^7l;@S zEr!aHWqZ?<+z_o2qGwLv?m**9$+4paBCk0JTeZKzSHC~g?1F!4Hl9~<@8$7r%x4ON zg5&Qv@DlrjU#mu$fEYr=={5Ot;{M7;J4Q=bJszY~rle`9W+U z?FIxi4jAy3lLGoJsmlrF4siKlH|Q8 z;REN^#CN@pHE#vZ>L$B1I`FM48uX*TqTwI^5p&65|4R7%$_uI&93SwymGeyocz&PX zSL90PDRvnk1pUytkIQ}{eEk?A-VYNm9BEAV0K4glt&$cC9f~4r)^B=5gfcClamtKT ziFX)(PNHErVI1Tla1tTdKD3almc$W~^EkR42g2Y%jUyNJUXv?MJ2|`4evbB{}8~M9{Rv?|FC-8AEd2phtlNnDw*koi3 z{JBsnKp28v!ckGkon_PDnp>EA_vTEXfO~aXzsY7$zNEEt)x!8E-1iZYoq$LE>cH=? zNqdo}!~tug+J888xw~&{$k4Inbs@)-(RSq?2W)@Z>L54-eUo>ivX(f zuD7-?qi;McBo?uhd-IXbJd&x4U2YUQxb-`58dIe1T{`LzX?e!Ie})N!l1H|ICT4r1 zPZLdChg*W9N&E5{!`os0hltpdRh;$Yvf4{soMK*^7@s8;+^N4PPK4SG%`uyQ6=Rpv zSLw=k)$*od4~^QR@WX-BYKg9JL zneYf>((PV{+rSs@<_~D1jIy@J?#a;N{<;G(OJRGT=?s!(<|XE6cbRS5=;HAg(bwv7 z)Uf`RwQ9{NhLZ&4{rh2Br@l5SbERKnH2*mKiZ4(4+M~~nk9V>9$hmxjx`%sF)&FyY z4%~1JYeRFIfo%Bp98}fI>_gryCLMA9qz^Qoxc?V6iSXT%m@C;4Lo|zX2<>WjEzrO`aj% z_J*q3gJ`wlQ?vVF3MZ8=T+7OAUDFT!tWK{po&1%+^V{(dnT~Gi-?0=g#8Sf7-QJ%0 zBbH)rxq>f6zz2%>Z&&AJzfm?#0A8=UdN5p}ZKEfnsxewzr0&^@yhxl)27{aNt21?_ z=L%4v+Zn*3^b38N#N=5;f0Z_xUo10r_Q4TU_*26s=?za5Gb{xPJ=AAbVJ2A>qQRZe zC`8p1U09b5FKQC3=hj*n!%2=LSTGFELo96(iIu-~^nr*H*K5gBj}BdsnWUz~<9SJbZ=yr!8Ss$e==R_q z<~UF3N~_;(Ct4GuDGQ*DD_3${{~0IYcH@XmZv>rXR%ECGTOqH@4os%ed=Lnj``4@{?v4^cNHE2Op(G)!6VE zpER)_UJSAzNn&7-&APOwQyG0f?KqSdw+19w6oOUfzPz6$HWHoF<2;uN_U0jrg4S*o z9Om20J+7s}_5$_O>wN9@HhiUJD2)BBAg7eR!ksk(tJ2oJb{bT8TRh$C?>ZJIVxIqX z*9c4(QdQB`=7iIzzuRH|gjr^q;<|}e1dzZ=old|+?&J2&)alcrW9x+a42MxwPCI!n z&z8xm?msUWUx?S4uA)ILd38hk?TNk@MlspX$gQ%hTu|KOo9Qd-deTh!Ouv$^9p!e+c2OySaJt_J%)_4!mS zH2U(Bs164@szFX)Ua{khENUIfZ}jY_xXZk=VjfpkKwCo)cY?Q zE*ULNYxNqbVlWj@CKNwAoK-4UciKaIt~D>h!F-8*=c>)KOXQ z1ZbA?8angjhSPlPKg^Y8lsjIYe6)TZHm41mDR^|3cVwOLM+l}mKs#0sOLTZpT~Vy0!{{+Ligh2Vin#`(;X3AY!dFQ@c0u>2<$g-sfcm43 zTvTWY1K_ykRiqwdqI-2*nVlBF3%&qPmqr1eW4qV{x2gjO7QH^2KT?*4FC~UKB12(% z#2HCg-}gheQaILnxyPvQX`eg0NgfRm%7a}u)rie}pXM;ChjL`g`4v?Pf#>m%uLg=7 z1z*R9zXV#8>%a3wwaintF3}x+`;G?{bQVdM6RrlWeODaT3tHO3uYkZe1`y*ug=ptq z8WiN2rDJgGHpa3OZMadETl_fJZ!qLszJK#*_2y=XM!EX~=QInROg>Zz$c8k4z>S_@ zOu)?%|MWTKoj4+x0P4K6%a_>W|8TlE>JKKwiPz zMq#~=jf)%kP>ZA|aL`GI*(#pNQ7JZlsr>vqO$E}}A*^qmz1&0W_2vE^!I7j1bm|u& zjfS;;4-fjW@Zrb2sCzeG@@YGdJ_q^M#U=T34K1<$A8vcFfJE*$QF5Mkfxg41-Vw{z zmjOSJu3J-q=N0O9dVYr>nk_ag6JRzDw|nUXp1hJe-GO|l5$EXu5h?bbo@w&j!x(+K zUO@;2dzA^f-1j5yH9M#JQQ2ZukH`?7&p}h z(U~sne2ENH;OM4h`bsB4q!;{61{Kgb0-SVS-FpPmB^S=UgLAnCOIIv$oY*5OW%q3B z##mi!N(t^PTf5lBUAvqw?7Ur^Du$?l_rzh>N#5m2&Q5FtL15ORpW=&y=)8w>5QEN? z$ie9=mS)Io?tnm(Eic?#R|zVreVOa`eas^(1vZYUR!6V>itzr<0p!tVN>R5{Q^Ez&$+1vW`l#kwY|9f!`B@fq z4%&mb%9M+_;#n}%H}lP*2-Jr_JRgTuq6g^+$eEhDml;1gqthie1`aqW#jw2~5%V%4 z7hCWY9mG*~$387c?vp{i9{oC-?BRJ}=#T}_>)(iuMVkIF&#__kss_0g`^anYH^X&o z_WVid&Eb~a{U>bK}8sX=Fo&T-~3A)15oRY723yCGPuEjp*LfsoLzNye1 zSj^rbNF~tf(H8QWZm@1K$6pgj+5x`&1GGsMi0NW+{91psb%rIz`~u8j=(hO@KGX01 zrW#i8*2t#J7Ib=9;)<@gkSbJj5m%Gl0QaBk?sCF@(35*9yQzFAR+d?DSy?|40U*}o zIrEP1@?|bo`FDhEt!CDnid#D`HhciR)6TS`F5@f9joYy<>O&_Q)(gfHXiQIpWP<{p z|KKhO(o~!lS#qtrp0_w{P`ph?^o4X&dY*Xk_WPS1TknzbnIc}cEJ~zxUZnP_$}gnA ztAmLV&uF?mU-|T}-TN1)*>a2^S{DUwG}m*hkEpPoMfw?{AkyOM>QJ`C&xX-AT;Loc zxkE=Oj73#pJ~Qqh0!lwl9p#BpLcNC%6Ma=plx;ASeahhwNDHdxj)v=fxb)P~?i`-J z>Vz~icDdp}0A=WXGyLK(0#C9?K1Wu$WxL|pF*3ILiOv zLhD$Xy#I*`b=SU|$3)Zyh~#4rIpVXXcdpyxOGRYg?IteC1hYk_he%hM(7L^niDdc) zWuGel@W&~@>etmLTOQ1;{AlEg8wfdtV&%(o8Yi8H-V|QUv!ap@Df6}u-JTyt-FPsX zN8@Cd#^#-mfbHzp>kfPcozPA^fV^l{hK5CM`6dSYlP&LiRdnM#bdubXR8-n zL$>buD+PDE4U-?+r_>p$IWJiimFySo<%oOn(u|*Vr!t#~czkzCWcC9Rf`9iYM4F#%(N-nduXKQ7*a*z4 zr?RuoS(nrrvb-64O8MO3LMdqG3752^d^FazH}X`yyHPr2{*ZB{&NNE_Doewo+*d!J z=hp>$VU-gzyeKaOYJK&iIFC^(k)Sg#$?Ja5^`x(sR`1zNM_+_tK4`=;Xx0WgoU z$-rzds(}OfQ_?`cP7;%_d;fHIDqj|+4%pGEj$Ys07f7s5uhOVOxBle<-k>icBJ2YWmHXk4S%azjBtK+8I;(`#Xr zOzY@7kH#;O%m-o9cy1z4DKtQ--Bs4okeXT1uQ?5ifajcS=fzHYi%()yOlucrvZ{Vq zI!3Xhf_e=O+tC{PWc9Di)5dc^A8*W*S1bAIm!fY+P^|_cKW@v~S*AxaK3pVSByN71 ztBXeE21jI1vp8zK}l_yU|Mz#bxDUxaVTh3%XCAQp>gw5*>W~JZ)HEW@~jhy!JuIlHa^VibRfA`L?2W zP75`~{c%fd^@=1;TB>=Tq>n*%x-})x&EpOO3Db@&N;_C{%N_G7E?>fg7)8IjuJ>89 z=l6-;s17IkSf=Uo%YU5c`RFq#sN3<*V*=>VNYzS2U1k|r9R*sA7ddUY@fcTc1K*g< zTb2D1#VX@kl}t9FG2P;vM(Ww8sL%yHI1sFvXG~wLK{6-={E!^1Q9UcOi8#%%hC5se zsLw@6+cD|YE#Ob}s4Q-Hi+m&%?yO+Dxv-brrXK%t;mVcZZ-Ed-fj4xj`EyOJ?5=o_ zMIzl?2jT-2?uvnZ>1vu&0j#;2c!f7-3Em}rE0$tz;Hx}XCkS$&)W=_BEEZ@6f31o2 zY>W$$LWi88H6C)+!oBfxxP?fj>lphUotXpeoF;^)FnB7p2O{++UXioDD+ftvjV4s$ znB4scO_)i_uy5sWcg%7mQC?*DayF%8_I4kDGRA}%X{PA&3vbt8OTAKS-FMYm+&6ta zK6h=Bz{3V_;KOu=HD*^-_Op+F4b->V{PuoAyy8{y4;FbYp*}Bm&VDMl=(u00a>Tr~ z3)l_zpWM{m<03LoIQ{r)ll_T$j;c5<9CaH3kY~U3#%@)x(7%`kExD!+yp!G(ro|xy zKZ+o&zdO%8d~;@tQBt7CkR=GxHRAFtkFml^h`?j9>!u{~pR2c@32l8xm2O$;a>o+0R7$z*P6$(4F}&XP z%`Fa@(bAJiXZmJifg0sT82_<%ud^QTmycs1cfQiazuY8Uf|#ZIMu|{cCKK&wVPP(~ zWqo}_*z1^j6FG6B|9_u2jc{=*>SG6eucitOPO}eE$nY~A?}iiGzI3~2SM?U9W9>TC zQ}&B@#<%Nf46sSPM7;Yu=7u3`D3U4}kQ!(}EB5&US$nS}pYAkc>+v;c~l;WnW zI`@ohs6S-mvg4%(rP++9VxP01%qqW%o4$OwF2KI~Ln4COKr*t0_%Tri$YXX}@0bDt z;PlaqF}_(QlL^;NEZah@LarXR$7&WW(ww*Q`Rc??UpKT-j}QG$+i>g5!f+(h+%hcj6tfLzmrNFZz1O&@S!f7 zd-9XJyD1R1xLP83fE#0bnejd2{-?A^6hBgu-B(@{5^f3KS(BHPgto|@+Tkb>s`a}G zRz#?x2!^_+wn4W$0(9sUWEPj2E!x=$Zg(sSI{p)q_P-Ud*X7J>%COqtFNP8%eE)H))o2!7j(y# z=0V`RD5|V)1Ru;#KZd0Cp7Pr#9DP zOkbt^$|gMlr+y>+@6s$%sgp;lvp5mUr;DQ|>}E7iZ#7l6l-qfT)+6+Z$G1{qr=wS6 zY4N3|Xr$v~DjqLT#XkC;^fU+X~|`4m~F3E6I}jK_g>) zB{VcCc05fSzNtfi1(ja^V%GZ)3&WUX{bUsf!m4G*{UN+cX1j8bO82h%KQ7lZo&$7z4hUGie2Z@`UH}n!eIW|^48(Gt z#vhUuLJDU69kQ(eM*l2WHb9sg$#iSzBsCemhY5d!xm#{aN#5YD+@5`VOS9xJhm zSuqAImg+s30~HS&v{rb)V&u!JTw;UHh1=uw2GolM0fWW_VWZ|Tw&rNB;+0kv4$G%b z1SV*!njpGi4vnm)QcT^sKEgviU5doH^cTb>iLpvOPy$GAVI_$m;ge~-(g)1*s`50W z-gQ5P{#=l4pgF!S^8SzsYASGrg0(2?`<}CNW}73LYh3OoU#HW{ELrl*jRIif9q$5@-yIXgOjZFnby6QA!YIu6rmw6Yk4mq%K? zj@`Ux%uZD03kDX@+lLSW|TYg@4HcyJwO#?sagN_9Xry_YVWbD-mib z^_{~h^$KZQwo-nQDfT4^(&N*QvOSh6ospX)>&K?{%B%PA+ziesVa=EERvKFMEUb1zjJx z3~)JaS)fY>6#FY2Xr_1hYJQf>qn5SJdH9Ch`sODMC&&@>Ic7&8T((01axDZTh#QG;I=9dY^N zsa!myKPS!W0rO>Ll(zcjHG@CE%(n_~E=^^3#QpJoxx{10Cp$QLu=G$o=fV}uI;%<1 z^uFcmk79x!{;cy~i$Fm&pWhU_Qt2~0@imz;(_^NVi@tJQ!fh+d@^MxhE+HIwrBw2f zP)Pc$)i!_ETo6Wp*A85akqmk%+`kgRUw33a$o3fVyqS*wy|y&j_@N0k3UqJ;iSE}o z68T&(t|XwZ2@Un*O3!;jDm^WDF`x>%eS~xa%p)?wk)OMatWd3|1#@iw`t^^c;c;u; zaExC0bG+-=;9ZMe-i!ZraZAZkZVWT*-$I%brYAE?yHGn35BY>dRAewT;zU#U>GE0e71QYXUpWwmG6<|+I-ahu>AIS92 z7Zf42asAcQ*1t;P|M-)@)9S$QVdYUWf^6z6*bj&xS?eb7*GQQ>BsWJWmtidxu#zAB zkQ2+{~C+GpZuQ#;YG~>qa7%MI%@duc}Sc@KKeb)xA=c8vVVN^ zU-R;dXA&TF9^S64=vL;R|8wRv{0Dvh*fab8+vmWem|%q0UO=n94*dOl|N4tm93?E< zCN9OU->2UH%Y*#&P+r=wSAyiPKtcZBpGC?I1HVLKO1kL(__M!<#p?$Vtc(jLy?@N6 z6v10%ShR14IvW4nqyKrOT%segYfrfJ>im0L;XFZh)yZqmU;X@qQdcP=fo|A=lFBZA_O7)bpn!zCi>d1xQ zAwm@~Vn1W(wyOEX;oi^8Uzws4;Z+Lv*qBaG0?^~^0A#{Q#OI)$?L0d^0Kd%&_1E$b z|A7X={%(5tXl2T4Zt_K-|uc0zsT7 zVuEq~ptA=WFhZH2=(l`SQ08Iu=H_LOV@Y0|5B*p#zuOC0 zr-?5%@jKK9k_6Nj(sp6{iDKSpdW6bq=$=+uea)lUdpZr76fX{rKSSPO{f^1HT2lczmZvdEH#-#3Dvn+7isKA*8s?e-by9nWaJ8bek57r zc@RvN$BW0_HJ0Gvo(l;>40zGSG{s$rfxgU2#29-lyY{3I6 zOO_sWLA6FDKGSEGaswQ=?bU!y>`e&_`5tq_k3`+Ku=rv=&^#l3CD^vGw_~mM3t750 ze&deo8%a$TdrkcOseS07jCTy%2Tv2L_2Y3cZI}?L^erDO+pWfD?FqjFh|9=n$(8iq zN?W2kQF{ssL!k|_G?k8!6xlm;fiIXn0u)Uv$(W=GV`s<= zQP3X95Did3cH={|F=QV;!rSk%eb%y}JX%(_e@81wFgBFHbpl>qy`cl!CYef19e%rMq8&$*3wyY5j#z*YX@b`nEqgL;Q$K@oa%mkWY>b zzCZ$b-#XU53d@J+7$3IR8cn}Atv>zO@cBEg<=N`_>o^$0I=bs1DwQ9f*Kv;ESdm96 ztQ?D3;k$0n>g9JW|94^i>tz4?h;Pv+m{LOpXxoE^_9X&+vh}O#;y01D#=@?-yHGaC z!LM9XtEObMq|{Q@QmlX^!)*rPyND&J6@sOWM`z1pvrH(E0wu4TwpR^%({0EJMxVoy{l4mLSSLf%h*{D5f{HZ$8&-09Rxy`$a&JB5e!0*k>Izd%oY= zwJcqHrzLpL5`gdjw|HMH8S&`W{G$aE$G zc*i4m<>;|<(lZJH9k7gh{0JO5RHFnxA;!d7KL*zqTvdafa=6FMjIM~8(~2jTpmD-?9Cx06dvI`iMOe+eWzv-r~%(_9&fDA ze0;wT=Zyv8?m0wlh?}UAmYN!cEeiV4n2a8bQ<(or!QB*Bf-NNDPGi_fl;Smb!sP zjYnJawk0c&3&BcfWyQQ_#NIKcsXvOkE75l=_VZ!94gkMx&xuByo8&F%G+9gNS%;yI zgpJp4Yqd#<+@O6Vu6P5$`L}ii-ln(Qtq5Z7EYB{;R4zfg-C?n^6QH{^1`s^oIYau! zOGY0iUkOFraEyuq8o?9qJ`mpSaA5PkX~C72(u&my`Wy7oJjTj}ezi`)5rFeXopM!!G!sylq-*2rE;{FaY4Ph!|K z3-N)~*E$oEx=1K+OF{P7Gt}Q&00s!}$G-P19J~Jt5z~KisC}t*KXd0c2okPP%p#RV zKi6omd7sU`OXvwq0zoA1Ed2?E84CvbT7lBc>(zswzXasJe?4;@e(_%2iy!%G1fK5a zJvOQs8i0rtHM0epgQj31Fk+_1)u?V1$Wy?N92!?z0B!3+yokOOlzWf2LL(R}QOF)F zpJUxUQ2mIH?YQOroOM{2!t4Cc5xDR7{*vRAtxVb1t+ofl-(Pu8yZUeJ>PoM+?<-|3 zS(n~Qze9B9?*0|^UFkIHmd~qUzFu2x+$;CekxK^bNQh7|;N~It@7TzzgY`1lzaS`L z)t)y)QXjZ%SRtpX9{tXpf@EL|Y*Q%Hvc$pN_ci17ZsBLZ~m>>~Hud-7rRAF1oW; z*Sfx&i)XVy&8!?qBz=8rjUxSL4jdxmjv|!#xHk2zzTi&x7D6-xGbtP7?5D4Z9)BH~ z4xI9z2)+M2v@;9AVM`~I$`t7a#|`u*o2D62^Z8n*W&7z^r{_0-{j6;Q%hZeG!OsZo z?~gnlp9WH1){yRAV)g1s{xe%Zz8-R1j#sGDtP}1u@~M704m=Ff(bG3|Hl8aNwwgkZ zx)4&wEZr&J-_7iTvLHzkUtkx+=XM~tFh6p8;;i7MEE#%Z$@?L%rAx@lz}jRC&P+k* zDvsF%^y%qJ<{OKj(>{-J3aP-mgoh6lJ$k!usOEHNEn*RVvbjcsO{Q9)2b{X?J;N z5N{n=A7}E2ES#TzPf4hKvNRkPF&c}a{QRZX`UDDw4Au602zll86wg~O7d+b|iFNKta?gf)eyx#-K;(}EJ z?l^#Rv$wB(khFK#*&0`_Zx5S3?I!UIz0~Y!xT3&3fJ38 z`u9yDL>#wG8$JuVkMx$~nw7$5#rphnI_ziqeVo55bnLOEm3K}St(d|AQEM2%!1GuA zamvS&z;jiDyw3OEvAid`n)$K_zEm|cwA|m7e$%H6;tU6Ga2n&x1I|8*;zOBTc`u%= zk$o@vz6S~30NI5ZBYB?S|A({pj;Ff+|Hq|)kW~oTqKsoja*T{rl%`pPknAXqnGv$1 z?2#0%A~W-FvSo+N?7jDPj^E?eb-l08`|A4sZr{)C`(M{pH_kb)$9X&-&->#(Xh!@2 z%P(&79EamAhO~p)ha1gUP&`6tjAMMz)x z_fSgyd?18fQsBpuxAegN!?N38gKI`!&Bw8(;G)+N?eBxl(u;G8`LhV>T?Cqx-Z@hU z#c4E<>EVdtGx3X|eupTzH0o#*R8G?P!9T`sP``T(5EmLP*mL@)q~}Me$+-3f=cRIz zCXhrVvTSM^F0Hl)d_lzF%nEOf{30LRu8$hxewdXDw1fu#cR!!;X?d`jUC0iRZV{a3 zx?%*Fq?KklVw5QkauU;W*@BC*jtNDqwzp!2hiOIbJ`(9w)tlc2U-8X#HLy((?7 zxxGg%*)E5NLPAjoZ8NkdAXH(m2Su-!qY$Sw+7?otra>2mEJ-UCkvsdR zjC`FZ`!+A0Il>aWPd0kFtpKKsnmJgSJ!2SISUP#>-b_LdY(HBNCya07fv7d*&u|JS z!n+!CY@8g0(eJWs_hqXaHAgMWH{+P}Dhl)G^ZRtZo1CxN{v{O)K8cPsqc4%WR-zK& zidhc$E@yg1)49vURrcNvX4(7;0i}VtU+UeE?)gS*UMh1rO>aX1<@zcerIjRCS;>UI zcczk`*;8HLVxpN!@puVdAUaMLTvW-?E<3f_>Oez%jKX}Gj3VaM7pA^V#Q5Y{-y1Y; zp;t@w&_lnXWxZR$FE};!nG)IFp?mF|r{Omh_JeQy?13+s5ln!*1!jqp z;N~}I)lR~76_RxxKS58dzUuPcgNv4VCu}>oTRvzk9r2?cL?uhh!49G==u4xQemX%) z<7B11A(~C73BC12XP+S#`&qBz!(gHCvdPa%z(~03?ruI52W3 zE+0DAXOY`u>8hF=}zIhj`UL|o1alZa2RyZ8A2o}CsBR#A#PEiLA z9^p<{I#0ED6Id99B~?O-<;M++kbQMJv=|d;JgD;wAvUBk)F#C@!s6sh5%t*NNuOzu z4c#7kebWcbF#E*fU=WzI=HcT1TVP!Lgoa33O5+#jK(a{oG&PpN!^7 z&lHO)+3;r&Vt5=oN=mvcu>sW{jhTq9^>?Fj8tM5_pf%5<2JF~N=`22w6vsH8Mnd&` zj7tM^g+FB-mPI!tn@K+fsK{b7mR&d-6&lqBpL6I`^%>~6FOm!0a}u}`ve6h7q^X82 zeLB-|2CPMs%Qj^lo{Jo5c>|iTJYmiY-Zo(Mlh2XqyfHT|bR_~xkkf|SzEtc`8O&eV z^9~qmZQJS-lt~l!r|x;1uen;G$1hY>zkc~mCorp&v|m`^3KakzpI6xy68?1Nm86d`5& z+U}od&SM0X?#=Fs|BVu)#7;#l2$HYHa;5X02g^P$K$2zo7>f8!x18f@TKePEld43Q z%g7`H92=wA7LK=ALRdhKFSVZyYlYXQVT83mL zFGvIw*sdp_i-yF#`MuMX)LwG5tzvRp61C*#E;^#B)Esw902H9}IKBCmpQD00fkDCk z0>_mp;}9|?Z@Pu^?}WWANSj;~=X}^n7H>0hW&`O}_HNc>7n?zmYfGq5lkgrYVU3hB z#w2^|!-sfd{i$;5n*w^xIa+*LNypSLOuv`la3hlrOsgYHqV8B*9K`kO?$2Ah^HY02 zIWT|N>vh8bQzUnH&y6{oJ88@{IpjlT zwM(Wn@cvZV7VxW;>sJ#)gip!tymb?)51gzBW*T@jZ7QtvAu!u-+|}rwqRV2l;${D| zu#Iuu0sJ5CnT)gA+vQvvj;zV|+?cWxsN}8{B)nmp&ik|bu~ry=@O;z#cSVV(AI#4! z+kbUwZl%V`U8I((epWY-P_2%dbwc{ztmMYx#YFAS9lw5D)%6zCC!C&{`&A}PFwTwj zi_ouY-VImc>`6s>J;&i01_g(|Wz>J;vzHN0X()9b7;9VIdf+||mopIr5nA6HUF_Ov zIb;ZX=et91NEQ_t>E?Y|p7@iTQQhUNK`+JjeO#r1?hLa{5JlkQ_rWq0u34SB(rm^GF z9qYJn93M(m`7!b_Dv4LgI|NI$6XD=KGss`#q~RvAJIOeHMU|^_^;N_(4Y&6_a4Be9 zN%=vxd-gg8OFf_3KbOLhgU5TRVKOAU^NQr-#cjeVH`!dhL(j)*7(R2HEkBq*x4J!!Sf{7AwhY!@7(RL? zMC_1{Ta1;QYT-ym3nJ{Qn`~rIpE0$}gOx9<6Ee&?ztT?hRBW3bqFPTac?E&!$2k+#v7sOw?|I=ow=Ms%x^9lxOwW#RyYHxq|plzZ5Y2AJNbphii z;9diLV{VymE;9!^$Y8`^=ia%A(}^gE+hCYL&2G`;v_M-e>c-SlwF^4LW+Ogk>eoZ? zvd32fz9$$FSk;aa8m>m{u)platIn-etQ60~arwE$Ztv-K`=86kw-U&1hSH(`?(YEq z3TNvY2nZcY92Tv3G1|N=!o!0mu&nn!6JF+xQ+)d>6>r%!Y|@m#Y+PLZe^i`J_;Ce4 z3V#8vrM*tgooA*&@qB2C9YTO?vUn#|=h9StZvG6y;igz|Wr{y$SIHD;@1* zx+Q@7^cfj24#BZz7OD|bJr)_^7U7!o;7mS=e1$$D5U^Ad6lx(CDtvHY|H;ClI?-r6 z@Lx~SoUXP&Ve(9CPv6rxYqN6rAW+_i#dM}unIptDBv_wPM{}$h{WOlvj^wfUdH!B7 z5p}sNhd}`5k9!YaDK|m}Sat-+a70`9c7B*VC7j${yS$Rsz%U+|@Rtcl&e|-` z_x@O_<3Qs)^9!m^I#;pKT9PE)B}i5heB-z?aCg#EucMD#7?yN3frOWIO})vCh)ph~ zUM#<@I{Jr?f$jYrLQdOcrMlO8I^7CkRpYZ}yD$|YA4SxdEVsUR!bpZ67lpSAT=@lG zUsjdo#|bxS%qMH4+di!k`s3v0?b-o-6W9HQ60CL~uuw#5s1i@jYVR;4 zx<*+Q^_8XSe}0LVeXWVF*^yy{fYml1{9-5q(yOWvN=9O*n`YE@EZ&I>v1}U z!12cC(#Npvn#Mr9>$A64*M6D>2MAD8F z?Ts4yhu&vQN}xHE(gVAvaL2fZoX3))>85rnq=M(ODvv44bRiGEMPS!yW6lf-ljXk1 zci;Phb|XVNvVZc)N~@*_i4zjwo3y_}blFj}_l}ByiSxH)83umU55&Cg3Po?AuXrX| zd&QF5=>-bzR+iPrGl#R8(O&Nl+OB1D$6}xv_Gk18l-N%jeuj#C=ni%=KSL)OMI<@a z+bD(sUX!x|#!B(KQIem4CY$i*kCh$~5q51x_6gw+SuPRz-3W6#uKw9ORSu~C^R^Ya zbSb4QAhjoLZ@$2>=q$4bKf|)Hc!~8?PjiXf{AIm*Dal`tR|-Ucaf~f0y`{M;c4ql7 zl6=Aj>ldcq$)YWhsbvkB*~TLSi7Sl`4=7&VNNVf`$hdh^Dz}HStl4y`vmG>Cfy}1tU|uDCqAMki@U+Ev;tL*BCwgNc zpNUT7W>Iu-kKW3omg@SOe|$ZY^5AXExL{3E93HH#@=q*|D1S!8V@rjj!MX4D4KWml za}YLkD!6(^gG8_!0pF{09=&k(ULVzu*=}JTHYdY0&?+wZ61Bb{C_f6G`cBrYy52He z3P50mea`i|UE*Uk`V}#z+1TB70gP&i1iu`vw2GyreI@3pe&8fmqasWO2wd2>;ovgM(4zmtit(-g^%OXqcwY6_0ZeRjrOFGu(ez9VyGEKs|E65|j;u1^>=jWumEy zvpX;3k5^V*7(Odfk-D)sIOqZxEWzwsv0PF`(e=1jaW@Rd0YDcRiuQe8mzc$#_nurz zTR_*lgFEkZXTsO9w_e9Y)#?nq%akbSeD-;`SAhC$&~jxLbsCqqmOE#3YZfl{xx*4y zY8j*=u103XfpcfP%wZ}Mx2SgPVSd6PVMF!aC;#{g>kBV|_kJ|M-NoI47Kt~`dRv}r z&=n7#XJM}r;Ao=hGV=c86y#50!0wb1&tZ@}JxYdBmAl6HIGvvOE11^yBRJ>=!E9fo z{F~M|=rQFT^iSh8^)SYL*2rn|ZP#DAc?F_{&w-m+7OvqlApV~_ozF7!#@TqT3;2=Z z!I><3WDUewl|IZ9=M5juw0!x#ap=Ik(RAqG_ZK6ydB>31vd`9YjS;o%6ji;lpq@J> zINzJTXSmT~w%uT)9|7f|uHlx^xnC`0t;J?la;yC6+{RqUq_)h?t$dgrpU&ZpVIb%p z59&uIM_K94+zph0lXd|JQv)}Xy1^9!RkL_ePNp-rQ{`7d7-0IJfuO2nKpzkoy#4=N zKY*8%ShT?RkEIjT2Zr|11#lFxpeCbfYi6i9?&ZhunI}T4g7uR3iyId=#5~Xtenvu- zZ|EalQ}FXiz=?|=PR-VpInfi{IyTsFsITjuUC{Cixj8#}pOSu9yk%sSpIWRFr8@8( zW=%`d7VqKG=1r@p2uUSRwO)gHvH|K6c8Ute1hWvoC)cIt#Y+|uX7>pFVDbx@Av{BP zVx&dh-5J)K0zNnVCzD?{0l!M){B-lh8yLXKO0MxQofLl*+TSdFNO;(5f4jx~^rnz0 z&tJV=5qi76@N>q`4vPa5uxzi2h~TrI^>J|`Zd5zd*$JR;*+gZxlOxmbyn6rohY0PO!CTWaQGfDm2r%-6Uf}c?9OWc;Q(e{eU}0m4S*oRs*6P?!J`-2ye*JD zY!O6%(o(>4aIAJ&p{CwuO`&e3eL}OSXVwW;6k;x0OJl7ZzAT1d{@VjW{&HPTV<6*f z&nE$UyGsBzz9tCUxzDIJ_#DFYcGNC^rsj5-Or@9cf_<8S=n+Nsd{DK}`;}GnrNb%- z8AdNZyPb;gBXZzK;F&#S^XrOmUH%CFo1<~0BJOZ+imGErcyS{Y`mD% z$i)g#ox0DdW@pf%ib2Pje=cfV@6u1?))zeRcF|)E)XpLxb_+Sdz;v;a-+0Q8bhF*<2|=lOHFNDQOD25GfoT|I2(2K3bH-jmUt<~AGWVAp|V zHaV8?X62~oq%2zLJXZ%dXVNVn_G28!Yrr_If}EH2(6WTzjxdd0CW&nVr1X+CQmKJ^zJt6=})9C7~jhsU<(xP;YX{0t4qAZ&JJz zj^^<5KC6-pI6v=O*piilRqf!NkPoEgW+lxZA(6};3$8iEeL5&d$4c^`9r^S*+0#Ra ztAW~+L7Pg-E2PE>7NZ|{o0jNbc3loETYi4<*k$RaqeStMHywzLNEfBGfVM!<5@x-o z=x8m_g^U<$&TCT!&9E?g=-|w`JXWQzk(LSIkQAncy+b5?#tc6VZad*NwJfO_oHd(* zi-ZoGX5jj-BSxg2F6CA2>hK^JKMpPlhLK&Fpn7w8_)plrTTTteeGqBX&7w6TKCgjXEu`~@b8dOiajxoGm!6~9;P8j# z!fGR+a&v-dx~K7c0pvmR3;ljD4SUelG@djtrrDG-_yOC8$EEkI{+7XoijZbXHc!bt z3h{&Yy&$dVI`oQOB%ba=iQOj-qA|VH1gDSMKwFx#JV`}rw);yV7+gcg$2yx5ZNlWt zn)HLFJN2YNAlc!$K#4*?j(J@t5q1Tmn5*JtH()|-mt6gb!E_Y=d6umMK~>9jqB!~Y#rPOPnUPnh z8T!HB6!qLxfmN}t>X7TBMclrdN0)3fIN7Zd*KGqqKI25JNOZHe)ChkCuIQUx^F?mI zp-UV59$J8Y^wI1|f$?ut5o}d|rra03i0gg)iDx(Jk;2-Im*+g8JIw>R@vs3sjSc%4 zY0%^l!gcU7jpG=3Te@Z!2#XWuBGRB=Cm@6dZFnXbSMr^qXs7~1UjHSaJ-hf zXM|@CMo#10`;}a;Q8VMjSTx7`v$clH{F8cb;uK3#@xDhCD;|iR5&xy<1SgV^jMPTq zDvU+>QNxpm?vwTipQeasP{&FliEM|r6|hszSpM@{4VTgp2rMPe+c*JOm`8JhQ*R9h z#H=PvBr2ud#6I=O2ar@ZB$42jaA1adIDPabdyMTjZLXt4XUJVc2H9?EV3*tE*dN5h zmgzoCxG{3YZKb+4A^O$Mr#p~}xWcq4{W2)H^#d*(G zCw45(W{7OQ8r0~KZ#|L&!;X5?QL7f5XWurx zKN-Fg7>S*f8oi*v(ylMcx?M}{!FfY{mHt$T+|%uEcF}K;g=D5^jhk$Ri^(u@ahhA9 zpVgm=jGr``Ay@B4x0jt@b~nm5ZL6@8s@XNix#9N&j;D*|hcJq8_AmrbF38K^5^v$M zfr$|TOpN5~hQVx~gYm`@0NC?(I>FT#oSigk(s3k};xIMC(h^&(h6*8wFD^@_vswPh z$i5Q-nClOt4C&vwYx3tvK{-{Yl)s4onEc{&74ti~L29O7oUMVJz0qMO=OoX{Rb69g zAEMA5<UN;NXt7hDJ#u8x&@q&p_wp*WS`qsFi&yrwdpw-SPRD^$`Q)Nd(e<<&3O+me zfW=2e>bvy}-hCo-1Q#Y*=SWR;9|k!a51Wr#Vcr`&YBn+Qy!j7ayxcV8xZJ+N;2+S| zY@i>A6wjr&XTYL3-tg=j-Y@iuTo*W`%Nj*72vC{zb^7L#a3E zLh~R>*1&=0&J!UGFdL=o0MCYOz1x*8MV5z5<3^puK+7At8HsqW1RpL->m6^>Z>#0f zsy4S0(FGxLdaV|GU3A&?HsX8-Af}_-BEQGvkAX+4u+b~~8AheR$mLR=Aw3b%BC{Dc zkLrI`sB~Q2@1gz;=7dU#y+_W#S2OK3paZ%?>6Ni~k*(^fL@oyYD?%HquekRbuKwAK z1g!P&s_F0>h(b*?GZ#}arTf(a){PsJJDysjzN#(yCiD7xd4}ne%d*FF-6}KhfcAF*(+_g_F_x`oD@jxRYy6*YZ&<}grg||k1AB%8M zC+LB!B8D`*!g+`i+_J`LVYGsJ z3WjrpG29jzNwkfE&Z$KT-S58p;GP5U(P9v*rJ$`4I+{Bplt*FKZ>Qj7F?Af{vJ^m1 zOfCcdAx0&$7Fv@2;M;p`pe9=q6o!uujIg>aUF2Vh6E(hC{&e0__@eUptGt}9a0SR9 zDc|@^9%4Gqkiy{1oLvu*1&@?(LRWK*9b3NhVp0*STNL_n_zJ8(MLTFN4f;iXGxQ-k zVavvPga*%k-p-(?{~U*N0j`_YU=o<#{-=bx6Tg&>eNUhn9e_xHEBiM?ho4EbdEZ^2 zt+Mg9xg<|yJ$PCz>Oo~ej*`n|)-5Z@}cd?$gYCogoEnaBesL0^l zNQp1b8uC6-0^@eyL$6WNL=ki$f)rXd+e$l@EzA0u4vM=ipd&g|fOt)56bvaZlm1R` zg)o^m_+zZZ)6!%zdV-bY1CYUG`NH48@lm~sT%hlnn&?|K+`@RDRY!^z8-dNzI}uC; zD^9W%d#fBoi)@Hf37cQx^3QlpfrpvW&0!nziILP6oxpGZ*d+Snvxm3P&Lhyc8^ZqNp z4t6TdAefRcu+UDLiCa5&nhMww* z-w3rONAQ``M+00JH`)}_MIc&G*E)DCge>OqQPbWAw%XZfHe!*g2GV3QXJ6koux{19 z$j15AB=^!IRCd%VT3EYjwfwwNzt6h{t<8_V_N3oyb8ECz{qCbrT~K74s`4Q1eQeNC zt3WRJu$sZ|Ck^h$S=5JmbvYuHz%tf|rf!CA;v@SU_a1sC@EAW!`tH?!)oSD=BMtj} zkm<3O?<1PD+E21*b|%q@Ap-NrrN{||3M!`Q6?1hhEgR%LrC9YwYrN?beq74!;j})d zhR3zDnVU&k>&zusvuWdukYBiHTYcP9{e)5LPVDrb-mxAl$iyMbAOGi+`(JnHAo;gE zhn@%BpjnTq1>dA-u&~T{*hwmf{< zToKWl?Cb}jC)JUYj!AsRU)GfFEN=5xU#tCHaPs@lq(>h6;ivt#e}C*N2>Hg%;!V!) z^V9FLA&`}wfL1sA@xtqqzu*1p)ZkLsNc!eqT=swe5b-1MLzt5jUjOZ{^B=JhUnCr= z<6&)>-*L(R`iTGftJWcSI~Gev?`-`3S+XOFA|j>O|HaQpM}9_U%-y2jK0BQ^@H#Sd zR?imv-#!xg1{!!E;~(!G{)dVXINeVW9yjLjC&&N$>lgxY+0^An|Ei{@i}0CFq^Z17 z`2CUn_Ilwzdl8*riJ!ga@2^<=IPz(KEPk#1`y>0CTk!WE(&FHKzsYTX^ZRSQ5rPy? ztd7yI20TjiyAtHi}!tUw(g$|E`fc;mCOPKEwH6-+=!?t|%`) z0L6s}95JQapmge^-oASpieZK8ErDGw|0+n$*o6+PYuaMYe(9yX;rv<9z5j2YUim{h zFOg?_r|;~if4&-deq`fu;&D-h=rh101d7JOcrsb#+^`TZarK+s%7yc=>5hSgU-82g zP%6FK2BP`Zgk-N83%H+xBt2iGV;e|z*4NJuA6kVq26+%@P049*xVL(~`OFz0?*)JS z@%BWjMJl|e>(%e#|NFC+f@%`x&AO`b`vZTh1f{^_VeQ>V7)QB_fTKBI^pA2cl32(z ze~mO2wXk_mgYbmQtu~4^!KLzQLi-E}4gNl0FD9UBP`&Zr60u;qttM+Xqr-Uu`(S_; zjkxHKz7%gg@k?$AjN2vzjgl|Y&`=~^?_{%|?QCj1KN@Ht5pIc&xE^<2q^Gk!^U%^% zF{rlsPJskAC|caCEtBMnM%N*6x7V67+PnPgsBv4Xjog`WOha!%Y-z$BS)}~xuFB&y zb7|5emqm5Y*h3x2UxxP;>X-lfm-uZq)Jk{vdZhUR50L=dB60wzU)o!PoAn#_VU#In z8DJdSbDc04nIb}}W2rZ%4+9N;@z-Q*vklP@eRKThFEY>5$~)SXA7K0L5N(HfU19kW8Rpn46GZ}h?29Fb`9{5;>~Mgd_TuN#jb8A%3(h8?L9H$HOXI6f_s7<* z-W0sEF6=f|4NT>W_kVr(cRne1ZMx13V;b5Lfb*~4o~oXx7OD=b1Tm+zDK#_k%IY=e zz2H8;xWlP*E1r~s{lf%|yPsZe8dN3hC4429)pKi~gGZas#tvL#BQsySeoYX!e_5iT zYcbyoimLXxe0E~@lH&2gqtQ^xIY*TpSqs+rW z4^w&W0w}la9j^`5R>DcZ!AdOE3DJm~3&QaXzfVhan(wHF&V8b&uGO1FQmH{sjB+bO z40d}qQ@LxJGx{vmoqC;>s}qmkhHW5Gh_T4+h3Dq?70~ud!q?V8xl5u!*-rxLlU}?v z8-bg8ZVaO|Svo$23y4n^_TU#&7d0P;P1p|U>FZN1T6hC=@A3_S*G z-EsGT`RiyWCX~7N+y1_pZA*q%*V7ac(9z%npXz^iR^-p29`gO*q9%LkGFioy6_Tx1 z@H{VhI%~4!bpp}%M5(Z1-cJnMR)}`?<-;7(RR`o0N;)=14hA#*QzA-U-hS28LzGP7 zXT@d%+J@CNu-GdK54nGgtgS3^cS5WMuDi@7H3X=#toQ+4Wd}K{15J-cSLBYGl zJ{O|NzJ0=`oV%DdXyC(}4pN~*Eeb~J5&IKRnkK%V${N{ZVSBo4F!K0Qh6(K0%f`+x zevOl}9jSV#pTLg<1!x0RFidypJLOYE85E7kE1aqqfu;I{g=Ppy=B7(^_bESZ?%nme znC?6#La3?NO@7}_y2u<<(bi&`91`iKy`s~#8q1*lA(j{BiPiU?@_w)Iw>yVs6o}5l zzAqXG)!f8qg_l$uyq^mRn9(12i`~E5nZ->ckjOmjynOHFeQ3L#UV7V_%%l6Sb|7_! zkMvaEEBnW;p9w?T=9I{Xi7J^B&23d6@A0I)fHpLi&a(%|&_Sm!XZj*kUY?1qo9}x}2QmmeVii8BZ{dT)zD0Byl89LL8UgegqK;Q0 zzwpQ(@`N=`4RWq+AW@4C++(4^n1B1`SXg78#%8q*vJ`P}N4xaox*k7h;-ZRRRS-S~ z;^wEZI9SZc^{5Phiyo>S+S)@l<6;n!htFd*W@LbHA)RTz%ILmYZ(f?x2cO}3{pUMn zF&M1C-GyM5_SHTboeKqeF!E`k&Lz40KKjVB5T66vJ8oM#y3d!rkMSs>I0(quR3aTf zM4jmgx5oF^Okwvf!O{#w^(m`VV;U%T`UBxPyI&7dshz%eDTv8fkt#J#!=B;YMeH3z zHExll4!;yRM}m%d(+Qqz<<{b>0GeD_Q*h4T8U||7;vh=lJHCk)qw&1{hh8cM?L;B z2L<&0@cJ_Nq*>Y_r$uudZ1BEW*Mm0b+Z=Qi%jSU6{5$AF&Pzvx4|bj)Q5E zCgWqN(X|av>h+tYoZK3c-rLOt!8y0C!Brpf&yfu@>Rg}_WUoLUa_UAVg31o+`Xi$u zykIE3msF;isppfqAwr-gz%%WBir0*h2O$*b{ZxLLc1i+!=TjqS>EBrF@_P&R8U_f4 z-G?WP%gB7F63y>eVB?9zytK2|HT2a<>M>*?j=U_O8$DdW&4$FZ%*ztkUBQHdw|3bc z1K(L5%hxZNde2;v+OtvrrYx61y)lij8<9D+=VAD@Mji7EV|uLz2gHE(6N@z9p;BTI z4n0nnK2X3Ri?XrBvs%1L8z(gH-OS4DK9VE}YWDIm;ipY@vlLXeW;JY4z_$&5miBW+bron*=|mBh&rhp-#W&LzmsAjfPdui*2=Ezk2fLnPh8%(j>A1*29dS*tf|^ z(5S@}M2=0o(#Tl}xR1ju1@y3achj8PAKb?$#`~GXPj14$&JXX*!@<#3{I2zT_Mr>w zKXG40&39Glh-ho5-5O9hthQCrI0b8%+|Cr&DljObkrW06rU>)**%e3myUQ@Il<7s} z_LjUdbQ4@_?(f9hy0pz$lBF((&wD?456z4yBPDQ-eq~UCePicBCX??Fa#_Tqfj3HUdo+L?HAy%bDp%3uss9p$hLFX6b;8jLz=+q=|rIUAa8?q8+r5weL) zWxJ5({ik;;tq)aQV@dvrC=cgL?v=jLnOMfYDb_El{RnhQGQ`AEWYCv-HY2D0EWOy` z&%KnS`1HKCt4BgyvHIwpspMx^Edbi)oaYdAr{efZpXj{9Fk&R}3@p}TPva7IHW&5t zm_UN5n+xL2?$JPJ5HGztwePP-J^U51I9OG`<#HSY4~F5|o5AFTO>v`QX43%pTlvyS zlz`zJL405xrIIV$bJOv4R#x3U$j79(uqj>{534!UCZ$cpm|+`%_Fi0LFjVwh!sfsuD5ue-%M zsw;gSrKaA;8F~q(8u7Eee@WK=hawWB`qt{u^Sx|5h-4*Pek=$8sC~t3^Gz9cUn*x@ z(1?`C0sLd6%@!Bx*oHtCJ|jUM0UN5vqDf!|iO{M1r;lDgYm`h+ERVg5h~p$2_L52w zZp3w(sUT1^9bNB!>CgbYagn>Ob(&b% z*Ltl?eAkx>w$ir7ljF;gR6US&o{OxOP#y393eywjio9OdW}|iFYp{FJlXHjP`=D7( ztrF}b@-MdDtv8gj{;=@lyU~wFEzn7`YZ{^!6C`g-|U=z|B1l)FBT0$B#Kush%F>baeQ|T)F%{Oqbna@O)t+`V7 z!GOl%w%vG0e`1Z3tYHYw&7El!U+HKyLKx5qX5mgPL7Dl4O`Aml=c} zkgPLL-~1GX*Vm)CA_1c-hB}^{ZV-5H3Ld7$a+$*y*kTbS;_$-Hd?TdCK8I9-E6$4|F5*64148QB1U6P7 zI!0g@S}G)_83iFN)x|?sgpla6^76#udspx0j;{v`7aX**#r@|eH_zg9vp2AZ=~cNh z@s0+S4d{0m3Tt1-q)diS#)OqAbt4(J>{@-CT#z8qnCr2SO+Q&xZRf@C51;3!vY}cG z%k-<~_Ak_@{9IjSM8Q9HG_6+UuOXpwd9(`vO)5R5dRA)uGo2@Me=R+35E0cR62J_Zab%PJ}nv1oD zq(o=9+}ULT6{q7k9nRy(g#@Ds5-W6$ybNsh?uJp_3hDw3jtzTK_Zxls9u*??ID{hs<(&B=jKYR4sG0@ykm z^~qL{qs@1G7{kdJ2jQk`fSC6>Jgqv&KFsFIL29TX*U>Rl?uGB;p3OU;z>|8?jJCM@ z3@3$xE;oI^%pDSSr3xfR+}G+SxqKaw>emaqKG{F-I&2{(4UHn?WYU3_~WL zTJQyxk1>?Etqw8d$~`YZJu-Mt8$U3F#k9kD-fX2N~jYMQAj zbfWDZ?mt#e$r8uG?gkpTpC;ELzclN^`9AU2`3~$l9L@Lqt+a3|*=X0wb^U3eGo3fztTeHK@=P~<6ZPnMJI3AqYIANyx z#pi8S_Mzw80kzVnb>sTs%##pj?{kUn`=p6-_LFPH%Q;UTuu`@q?7u7xDCN)hW1{ru z$xl3zeEL~6tyk%D!3|H!<5iwY$=MHrIP<$329GjjSNZrKPJh0oMeSToyV_!EFJZT_ zuy97&c_G0Wx48PV#P!*R*!rBy=BegbVFOR;FAK)bWJD*QKNO}{+=5gzz7ko-r6Gyi z1tNE2V>cMG*-?!m-pBp=+tS_l2`3I}#rZ}aKV*j~v)U*<-pNH2SWEX^==Nnp3MFeG zlr7)>XvIbURPUpsgg2k#rL~}oM^d_#(f%TSlar|ZpP{pUTYJ-0Q5rsZ8>N0j2A+Rp z()`$t;3irN$z|nq{YH-Us~M_2-nRUQsPp=aF%qodd~DzGTcB@;4uyK8)e=6h{W`Kj zy&)LMlR(Fb<318+Wcq4P;eF=*Bjx3W+iXKYfgVg0H_v!}FO-zRG6_FTmJZoqpi#}Z ztvNw6^}5K-L%VK|fq|$Za$^HP*-4F8Hxq9~&>Xz5syt)GHvJ+h#qEUYLWhFhL4q;LaNH1f&UOg4&G+D>9&56 z@Sbt>48xJn%Pw9VvTv;~4%SQVT&(n^3X#nzUu^>P1AqIdE|s?a_WA*ul(KhnCmB%7 z2aXU6Y;qi7llsbImDHe%-g}p?I5~+X{>s_cfW~v^GkO#}P3amdARizA&X=Di&`Oem zQ`LJnXgixxaA}^w(x4O<>saudz01{4xzJH~qVkIgbBlj#$VOC1aRgi+cXvanzQ*+f z9Zo}dEy9uTw>2(^7a~Iv)HjhPhB&HXpy$wR+ zgWm0GVrFohHYdL8`3SKQc4cJW@#t3vU5K%FzVFw8KIUmPfOGlfRA)x)c<30O3U#hImx)+jFS!0JnKz7U^5uE&!7@Kfa=3aK znXL}rbF{YeF{L{quoAWJ8S24=6%((de#>EBg&4O=vp3j@4OM-mOVEwD|4e(=7>!wg ztIwCoio==OjI+y;(;Ht~_D4{G%W2g^bOW6$T4@Jru_*Mm0;_ErT@(dk;SDp_%Mkia z^r(7Coa4pk@oMJ+(~cOm+5+x$`8XAw`$`g>=o2?C;;)z59Ds@IKO>>!YD*Pb^}<7{ zEUwn*phie2s^z(VY4j$_+HKkMXub|Nu64YC&n>8v1SaTD23ghGonOf=hXtY4(!UBVvWt7uVeT9rhr9@5Ze3tUd>fi$VxtG*|a zM)hj8UZkrB2(e-M^l`F+5HC~rGtuNni<}F^w6pQLoYPthzmtr*d-4?FZo*C`sZ~;6 z182RjoY9eaS?A>c{M z;DzNXI=beMt_-)UM`ZlWE(xcw#)HHEJIg~)0H%DnQ0~7$OC;J)+8+GCZwtc3wiK&; zhL=O8&1uSn*Evz5C$p3u4OgZ4ZRcRwYV;X>snuu;ZX688=sSwa@J&xrWIkAqELmXO zCbj(_hCV#<>f`0r(pZkSMn_}BjbiSnj6CV|BND!|Q+$3)Rc`PH*Xt&+w)34` zRz0x-=3$27J^Jd*?>p>zZn;XXdF^VTZM=B?;5x-rhhflB`;ldSUHq+v+!DLT-;lcb zvhgC{UxHjUMx&iUE)cS35WbVp1R#0&!#rG z?47C-lS$n;`luKNFU|5hxVmVk?7TRmY9<-?eX@Kve(`DdDgM=*h+mZxk-ottTQ>-R zoCI5iw~%$y2=fIw$+JWP#ifnyY%37PvIAy`DSQ~0%$a2){LZ=i3S8R8$^n@am=>AYfu^3=*m@gn0@vREG@tGlR;U0zHi%plftV}TwPnLL@vnq691?cX0~GFnuXoQiV#f=n z_B7WI*ej%RQ?sGIksAPn)WYoj`R_R8zt^&L7vCx#C30PKrwAK9#V#c92#mb04Apl5*TKM4?2DM35CPSl|KoLJ4m&)5yNT!ej$An@>q%mn! zbOf~`Q3wO$;NBjs;qzXq*!6eyDtoeDtbG4G`=tDbB2DFGS>+1)AGwZy4nZ~C!L?o* zJ$&+FhL|jSdB7S>@eim+R)!US?#4?OL^oj9-{`ZoTHVn9@P*CR_B-hLdM7p&r&c-z zB9d0^l8L{*`}5EvVr1}OR~tFVFW?qE>jCzs!)H?C4BbE3E(2z0)^xWVRg-dU*4D5HK4zM53$sj$z?(ndFFi4^| zZDaybW+Gd(>at6cP&`x4?~P_Oj=cRzZga$x<{)7u5*MgM=ctS5J>H#(Lw1$OPNK1P zL!VKsl>guj4uOv6Mgt596pbSCU4B2f49&S+J{vfVXq!Y=>oq?Zf`x1hQwO*hJxU#X z!rQ@5)EHjog2BPUNVg>zOPy)5p4A}smNrCXV2_px)$!~mQZetg&grmi>7ft+QIYwU z_qktZ)QHxLdUwKe!P}k-!0cL}e~I8mE!Rcr%fVN*8HtZQF}Z!4zf&|z0#dl7KZtnz zgdyX|#kc>fzLURmIKs{tzS;~HR#CrdF z#2#rKO_wWtuep#0d_A!$bI{HLo`)ntVx}ql_}2mSQTF-usn@{Kn0x*0v+r+Il&P=3 z9<{nAHodkDyKkE=bLcsFV{V%EqXFe2*Gh@${;tNzL6?E0_4RvNuZdbW{U=8%hbB}} zrDGCyf_u+mw%Do%m8C#yC68;%? zM)IUu?J5mlk1Ub>%X8+Ki;p;f7BAjj-$k1opwu_ zXo*J5Xi=VETb6pws-Cf81KCQZjZx7GDKMg0iU$uMu|9nliK(bBJJ+I=Ty@qKe_-dW zr*_2c-9_akJ~AmK5H5Yke`>{%e5y!$qVVg>D+2z2Jt3!}eh?+QmVi=eu2>F_T0D-| z=A0wDwio$pw21LjD0s|)+|zCtp85FOXu)~opvN&@qOlhN&S$(e1A(<6OmmP^&|v_C z4^4Sy?Q*ksfYX=qPC3BjjO<>TfV%Q{DPoejoo{`D9@GOnly*mqEznBg_ZuC zB``SQ;!GZn}+ z6e0_Th;9>8#3w3}5(PX$t*-gTz=sJ(W+P@Y-gIeVzL6oe(AD_<3iAi&%>@Z3HM-`G zI^!JCDwO(Pl>j#vpDFzxeTnF?P(_QxaC9Wn&wu~2*R9xA(Wo%Wp05NSn8UjzVzT%} zfHI8`r3dGYAID7wR&?zNpQbtNZ>1uny;RjFGFks@?D8bMt;3)vq7(t!4)Hh(zXO

    l%rB`#Suh~H@-qO>JRgsTjhp`;V{ZXf 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%0Dl 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

    6gk|Q<0+@R}`)4{e)M$Ka`!C1<{hD z8{B$`+c@GP=P0zUm|cGb|J{ZEg+Y{F44y8(3DGiazp_-Ne~~fi=!5z3-$5PUHGRR} z)AncRMg6io*wKAKy@HA?vk2NsFF{P=ZZQOO%!(Vf7kcxJ{fl*{*^p%9_5>-LX0}CM zhJJS0B&%ws#--S?9I1daj@A9)M~O8cA!sImL;_iJgT1xrfjG_&4~H? zj`mHwX{On+y-kmfG!KV^4 z&{N`i+ArnfeztLT$BU4t*x}s@$|vit&=5T;^lY5JGu^e7dZac45*i^*9tL2enxW%- zOQ~5$-N4bVV)JLf;T$mnHYg-r1AV#I*cZf7N_Wxz7WON{^U#yMG}qr7(RB$9ygaw8 z!#t2L(YpKDc>|W!OeK@%o7={cPYmhI-`3+SzS#(~F?=VHqQgsUJmS0IPszy_lUg=z zFyeacBI+30!WCI zJaMkocNwL)==4VJ!=IaSf_GIylnPfFNn{#Zez57{=e#fw48!F%^C7R>Y zf}D}mL@%$?2q9};I@#fJWVSorCMVD!io7-zC%_TdIwzr7_zcHDL7er;Cg zeXHnfoznIM)?xwSJ)kb#)eNV2cwetck~0#(h6+$&=@FX?=ZuQ6@1iF*_PE4mly6n5 zCf|QWU~{H=Q#dKuRH5}XMt4fWZBw4^dVK#G-P%mW`p3hP)%p-o3bqX>(rp4)>=s^1 zrea$cTTVs0hs}R2qY%%QftY z5>2~qE!mCIVXF;*Nqvcr+%B>(a~yEc)NCe>1vAo%i3BG$FXZg$G^|)dIatH%=V~6$ z3j`?&{{Ep3;mqoROF*$%B>HM0UXC>iNT7m4KQqb#8#j#>L_Y}YZOg0Mhdb!i16VoF&(L384s^evD5we-J$&-|kfgR`Vn%dDQDPd9iyAPp6 z_k7TSgT8PJ@p*ZtxYQy#sLq%`_EKo5y7^vJdO{-E%T=>hvnovYn2z?!arNF?lz<*G zSUJ+&iO(5-u5*+(Xq&cJy81!4Cwn7u*Oj@sXr>wSk;vnVT1Kib*33S; zI-6M~H$#C)9VxP%f4!Ydah~Lf4-@+Hr*Q7hH2vx-hX-M4^m@!KBVf`ce&YV@aT<{d zALd4VXK-x*b`2*8!u( zf;SC939?h+%xWy%JCB-j$vQZMw~+2#xgQ+$S@FdvmfIXGW#`|hO&RW>JDrag$#=<< zr>7(!>5TZIQ45@{6Q8MG(VJ@r)m5 z#N0@`Z0m}MMs;nh)5B_Pqg89kp1Anh<=InV!Gx_x$Svh6K>Rb=~l?9$^Qg&6~emGd!Nc$Uan~+8fB$t3Idut*09R4VM%oKT^ z-VG0ZtgDBqhj{{kxFR2uzUiv|OaZk@O~q2H(9Odpv*(JN9jnqsIiMoKhQCz4km0fN zG@j>B+sBgBU#seDBRHtuXIo-Fg@e&4>EpmvDneU9Ek5B?4Wm z8lshDvCGh$!9O=SX=^!a@@s0)jQ(1)?cvdT{9p{W)gMA;!*afS)a zoUN5dXXt?LFLQalM8B(7?r8Z-0Nu|TP(orkC1^-m=e$~cY5L52_sLLjh(F>~aG<~7 zZw?CLqIwS%pn6~(jc|KkrbI;?Ia}H`aigHWoSy#6Qx78fW$w6Vitjj4&owjH2^_O8 zZ48QZwJzqW3HE;sINO(kF-^12QYJEDkO>pJDci|Hn>J?1nq(hr9(nFZ2V;vaCA#No zQUJkCiJSNvt%_~;h~6?VhBRp1`TB6WDQ*1e$HH^$4ttn@Oo3D<74jD?4^`dhsl%`2 z_?TlV->l-!T*v#qP){=#&&pkO)tn>qrRU}Z)0`IV8<~e399kuIg# zmo+7JBkx%yeYf-1u}z173;55}4(Ke9iAND&yx}2KyqX#Q{#5uI^3O0jINx!Ev9f>t zqQ4&Y*6jYS%D-RjEe^WZU|JRc!Lz($Bukz$UIJOAZYQ!b5EdNja;{f3I*DpitRaI`Z_#XUah`lQA zQMCX6D5U)N2YKfs_PNtrUZ)Pc@L33aFteEo<$q7+fiFSc(qIJhvs7YddS?F%y^ldD zt{HVE^}y%;HS+)b)q4@4WV=lB_8#;Z5`kZ^(DQ)cU(x%2KR+HJIXS%UaA$n~vHcH# z_ZSs?eg8}U`O<#|)z1fhCEbLn71_RTVMg2r{8KVZ57IpjOya@0|8q_*D48O(zS}{z zqQ75%Qox&-f;9>g&KeDTG=askbS`)NW$Df4tB3HT(FRq_ zdl$}svOF+?>&Rms^DQCR-R!DHx?a``XCDG`5;us$WwaPIkFF?h0(_*XwF8ab?f{D| zCimFU4@BD&ik|uSN|z8BIns&Bhw`p4RCG3CwPj-Q1Uh5^x3th*V1d2*kU4d!brJz#IBjcS-k$)TcgUML`((lp9T_ ziJnh>dvjkA$=z=iTj^pbIx;oeuD%$6-a{&asXWBImc1SQ;QT*`b6uOYtOE0G>)7x` z`NYp##l}q$h@l%F(C~PGl#w?_wh|@b<(k@1iFDzR>%~5$c1@##&`Yi~`ieK*k z;sq#kZ5GvN1__Ks%^#Y+bp1l#F0(SNP&?hp73aXRszR$LH8+X4hC=9)_no_NBHJP^ z(4{kiXAT@97sAB!h)|ho>33AifL79~adOmp0m!w@2ro>x;W7n >_?`fiA6d7|+ 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 (the key is `\` +by default) to create or open the index wiki file, the "top" page in your +hierarchical collection of wiki pages. By default, this page will be located +at ~/vimwiki/index.wiki. + +Now add the following example lines to the document: + += My knowledge base = + * Tasks -- things to be done _yesterday_!!! + * Project Gutenberg -- good books are power. + * Scratchpad -- various temporary stuff. + +Next, move your cursor to the word 'Tasks' and press `Enter`. This will create +a Vimwiki link by surrounding 'Tasks' with double square brackets: +'[[Tasks]]'. Pressing `Enter` a second time will generate a new blank buffer +in Vim where you can input your tasks. After you add some tasks and save the +new file, you can hit `Backspace` to jump back to the index document. + +A Vimwiki link can contain multiple words by entering Vim's "visual" mode (the +"v" key, by default) and selecting the words to be linked. Once selected, +press `Enter`. + +Try this now by selecting 'Project Gutenberg' in visual mode and hitting +`Enter`. The sample text should now look something like this: + += My knowledge base = + * [[Tasks]] -- things to be done _yesterday_!!! + * [[Project Gutenberg]] -- good books are power. + * Scratchpad -- various temporary stuff. + +By continuing this way and creating sub pages with links to even more sub +pages, you can create an unlimited number of neatly structured, interconnected +documents to help you organize your notes, documenation, and tasks. + +============================================================================== +2. Prerequisites *vimwiki-prerequisites* + +Make sure you have these settings in your vimrc file: > + set nocompatible + filetype plugin on + syntax on + +Without them Vimwiki will not work properly. + + +============================================================================== +3. Mappings *vimwiki-mappings* + +There are global and local mappings in Vimwiki. + +------------------------------------------------------------------------------ +3.1. Global mappings *vimwiki-global-mappings* + +Below is a list of all default global key mappings provided by Vimwiki. As +global settings, they work in all vim sessions no matter what filetype you +have open. Vimwiki respects pre-existing global mappings created by you or +other plugins and will not overwrite them. + +If a conflict exists between Vimwiki and pre-existing maps or if you wish to +customize these default mappings, you can remap them with: > + + :nmap {map} {command} + +where + `{map}` is the new key sequence of your choosing + `{command}` is the Vimwiki command you are remapping + +So, for example, to remap the |:VimwikiIndex| mapping, you'd do something +like: > + :nmap wx VimwikiIndex + +Note that the recursive version of "map" command is needed to expand the right +hand side to retrieve the definition. "noremap" will not work. is +required and considered to be part of the command. + +You can also place remappings in your vimrc file, without the leading colon, of +course. + + + *vimwiki_ww* +[count]ww + Open index file of the [count]'s wiki. + + ww opens the first wiki from |g:vimwiki_list| if no wiki is + open. Otherwise the index of the currently active wiki is opened. + 1ww opens the first wiki from |g:vimwiki_list|. + 2ww opens the second wiki from |g:vimwiki_list|. + 3ww opens the third wiki from |g:vimwiki_list|. + etc. + + Remap command: `VimwikiIndex` + +See also |:VimwikiIndex| + + + *vimwiki_wt* +[count]wt + Open index file of the [count]'s wiki in a new tab. + + wt tabopens the first wiki from |g:vimwiki_list|. + 1wt as above tabopens the first wiki from |g:vimwiki_list|. + 2wt tabopens the second wiki from |g:vimwiki_list|. + 3wt tabopens the third wiki from |g:vimwiki_list|. + etc. + + Remap command: `VimwikiTabIndex` + +See also |:VimwikiTabIndex| + + *vimwiki_ws* +ws + List and select available wikis. + + Remap command: `VimwikiUISelect` + +See also |:VimwikiUISelect| + + *vimwiki_wi* +[count]wi + Open diary index file of the [count]'s wiki. + + wi opens diary index file of the current wiki. + 1wi opens diary index file of the first wiki from + |g:vimwiki_list|. + 2wi opens diary index file of the second wiki from + |g:vimwiki_list|. + etc. + + Remap command: `VimwikiDiaryIndex` + +See also |:VimwikiDiaryIndex| + + *vimwiki_ww* +[count]ww + Open diary wiki-file for today of the [count]'s wiki. + + ww opens diary wiki-file for today in the current wiki + 1ww opens diary wiki-file for today in the first wiki + from |g:vimwiki_list|. + 2ww opens diary wiki-file for today in the second wiki + from |g:vimwiki_list|. + 3ww opens diary wiki-file for today in the third wiki + from |g:vimwiki_list|. + etc. + + Remap command: `VimwikiMakeDiaryNote` + +See also |:VimwikiMakeDiaryNote| + + + *vimwiki_wt* +[count]wt + Open diary wiki-file for today of the [count]'s wiki in a new tab. + + wt tabopens diary wiki-file for today in the current + wiki + 1wt tabopens diary wiki-file for today in the + first wiki from |g:vimwiki_list|. + 2wt tabopens diary wiki-file for today in the second + wiki from |g:vimwiki_list|. + 3wt tabopens diary wiki-file for today in the third + wiki from |g:vimwiki_list|. + etc. + + Remap command: `VimwikiTabMakeDiaryNote` + +See also |:VimwikiTabMakeDiaryNote| + + + *vimwiki_wy* +[count]wy + Open diary wiki-file for yesterday of the [count]'s wiki. + + wy opens diary wiki-file for yesterday in the current + wiki + 1wy opens diary wiki-file for yesterday in the first + wiki from |g:vimwiki_list|. + 2wy opens diary wiki-file for yesterday in the second + wiki from |g:vimwiki_list|. + 3wy opens diary wiki-file for yesterday in the third + wiki from |g:vimwiki_list|. + etc. + + Remap command: `VimwikiMakeYesterdayDiaryNote` + +See also |:VimwikiMakeYesterdayDiaryNote| + + *vimwiki_wm* +[count]wm + Open diary wiki-file for tomorrow of the [count]'s wiki. + + wm opens diary wiki-file for tomorrow in the current + wiki + 1wm opens diary wiki-file for tomorrow in the first + wiki from |g:vimwiki_list|. + 2wm opens diary wiki-file for tomorrow in the second + wiki from |g:vimwiki_list|. + 3wm opens diary wiki-file for tomorrow in the third + wiki from |g:vimwiki_list|. + etc. + + Remap command: `VimwikiMakeTomorrowDiaryNote` + +See also |:VimwikiMakeTomorrowDiaryNote| + +------------------------------------------------------------------------------ +3.2. Local mappings *vimwiki-local-mappings* + +Below is a listing of all local key mappings provided by Vimwiki. As local +settings, they are available when |FileType| is set to "vimwiki". These +mappings may overwrite pre-existing mappings, but they can be remapped or +disabled (see |g:vimwiki_key_mappings|). + +To remap commands that begin with , you should do the following: + + :{mode}map {map} {command} + +For commands that do not begin with , do: + + :{mode}noremap {map} {command} + +where + `{mode}` is set to `n` for "normal" mode, `v` for "visual", and `i` for "insert" + `{map}` is the new key sequence of your choosing + `{command}` is the Vimwiki command you are remapping + +Examples: > + :nmap tl VimwikiToggleListItem + :vmap tl VimwikiToggleListItem + :nnoremap glo :VimwikiChangeSymbolTo a) + +The first two lines remap "\tl" to the |:VimwikiToggleListItem| command in both +normal and visual modes. || is set to "\" by default. Use `:echo mapleader` +to determine if it is set to another value. The third map listed +above, which does not contain , maps directly to an |Ex| mode command. + +Note that |map| is needed for commands beginning with . This recursive +version of the "map" command is needed to expand the right hand side to retrieve +the definition. "noremap" will not work. is required and +considered to be part of the command. + +It is recommended that you place your local mappings into a file at +ftplugin/vimwiki.vim within your .vim configuration directory. Create this file +if it doesn't already exist. Or, if you prefer, you can set up a FileType +|autocmd| in your vimrc. + +Note: it may be desirable to add ` ` to mapped commands but +this should only be done if the mappings are placed in ftplugin or in +a Filetype based autocommand. See the Vim help for a description of these +options. + +MAP MODE + *vimwiki_wh* +wh n Convert current wiki page to HTML. + Maps to |:Vimwiki2HTML| + Remap command: `Vimwiki2HTML` + + *vimwiki_whh* +whh n Convert current wiki page to HTML and open it in the + webbrowser. + Maps to |:Vimwiki2HTMLBrowse| + Remap command: `Vimwiki2HTMLBrowse` + + *vimwiki_wi* +wi n Update diary section (delete old, insert new) + Only works from the diary index. + Maps to |:VimwikiDiaryGenerateLinks| + Remap command: `VimwikiDiaryGenerateLinks` + + *vimwiki_* + n Follow/create wiki link (create target wiki page if + needed). + Maps to |:VimwikiFollowLink|. + Remap command: `VimwikiFollowLink` + + *vimwiki_* + n Split and follow (create target wiki page if needed). + May not work in some terminals. Remapping could help. + Maps to |:VimwikiSplitLink|. + Remap command: `VimwikiSplitLink` + + *vimwiki_* + n Vertical split and follow (create target wiki page if + needed). May not work in some terminals. Remapping + could help. + Maps to |:VimwikiVSplitLink|. + Remap command: `VimwikiVSplitLink` + + *vimwiki_* *vimwiki_* +, n Follow wiki link (create target wiki page if needed), + opening in a new tab. + May not work in some terminals. Remapping could help. + Maps to |:VimwikiTabnewLink|. + Remap command: `VimwikiTabnewLink` + + *vimwiki_* + n Go back to previously visited wiki page. + Maps to |:VimwikiGoBackLink|. + Remap command: `VimwikiGoBackLink` + + *vimwiki_* + n Find next link in the current page. + Maps to |:VimwikiNextLink|. + Remap command: `VimwikiNextLink` + + *vimwiki_* + n Find previous link in the current page. + Maps to |:VimwikiPrevLink|. + Remap command: `VimwikiPrevLink` + + *vimwiki_wn* +wn n Goto or create new wiki page. + Maps to |:VimwikiGoto|. + Remap command: `VimwikiGoto` + + *vimwiki_wd* +wd n Delete wiki page you are in. + Maps to |:VimwikiDeleteFile|. + Remap command: `VimwikiDeleteFile` + + *vimwiki_wr* +wr n Rename wiki page you are in. + Maps to |:VimwikiRenameFile|. + Remap command: `VimwikiRenameFile` + + *vimwiki_=* += n Add header level. Create if needed. + There is nothing to indent with '==' command in + Vimwiki, so it should be ok to use '=' here. + Remap command: `VimwikiAddHeaderLevel` + + *vimwiki_-* +- n Remove header level. + Remap command: `VimwikiRemoveHeaderLevel` + + *vimwiki_[[* +[[ n Go to the previous header in the buffer. + Remap command: `VimwikiGoToPrevHeader` + + *vimwiki_]]* +]] n Go to the next header in the buffer. + Remap command: `VimwikiGoToNextHeader` + + *vimwiki_[=* +[= n Go to the previous header which has the same level as + the header the cursor is currently under. + Remap command: `VimwikiGoToPrevSiblingHeader` + + *vimwiki_]=* +]= n Go to the next header which has the same level as the + header the cursor is currently under. + Remap command: `VimwikiGoToNextSiblingHeader` + + *vimwiki_]u* *vimwiki_[u* +]u [u n Go one level up -- that is, to the parent header of + the header the cursor is currently under. + Remap command: `VimwikiGoToParentHeader` + + *vimwiki_+* ++ n v Create and/or decorate links. Depending on the + context, this command will: convert words into + wikilinks; convert raw URLs into wikilinks; and add + placeholder description text to wiki- or weblinks that + are missing descriptions. Can be activated in normal + mode with the cursor over a word or link, or in visual + mode with the selected text. + Remap commands: + `VimwikiNormalizeLink` (normal mode) + `VimwikiNormalizeLinkVisual` (visual mode) + + *vimwiki_* + n Toggle checkbox of a list item on/off. + Maps to |:VimwikiToggleListItem|. + See |vimwiki-todo-lists|. + Remap command: `VimwikiToggleListItem` + + *vimwiki_gnt* +gnt n Find next unfinished task in the current page. + Maps to |:VimwikiNextTask| + Remap command: `VimwikiNextTask` + + *vimwiki_gl* *vimwiki_gL* +gl n Remove checkbox from list item. + Remap command: `VimwikiRemoveSingleCB` +gL Remove checkboxes from all sibling list items. + Remap command: `VimwikiRemoveCBInList` + + *vimwiki_gln* *vimwiki_glp* +gln n v Increase the "done" status of a list checkbox, i.e. + from [ ] to [.] to [o] etc. See |vimwiki-todo-lists|. +glp Decrease the "done" status. + Remap command: `VimwikiIncrementListItem` + + *vimwiki_gll* *vimwiki_gLl* +gll n Increase the level of a list item. + Remap commnad: `VimwikiIncreaseLvlSingleItem` +gLl Increase the level of a list item and all child items. + Remap command: `VimwikiIncreaseLvlWholeItem` + + *vimwiki_glh* *vimwiki_gLh* +glh n Decrease the level of a list item. + Remap command: `VimwikiDecreaseLvlSingleItem` +gLh Decrease the level of a list item and all child items. + Remap command: `VimwikiDecreaseLvlWholeItem` + + *vimwiki_glr* *vimwiki_gLr* +glr n Renumber list items if the cursor is on a numbered + list item. + Remap command: `VimwikiRenumberList` +gLr Renumber list items in all numbered lists in the whole + file. Also readjust checkboxes. + Remap command: `VimwikiRenumberAllLists` + + *vimwiki_glstar* *vimwiki_gLstar* +gl* n Make a list item out of a normal line or change the + symbol of the current item to *. +gL* Change the symbol of the current list to *. + Remap command: `:VimwikiChangeSymbolTo *` + noremap glO :VimwikiChangeSymbolInListTo * + + *vimwiki_gl#* *vimwiki_gL#* +gl# n Make a list item out of a normal line or change the + symbol of the current item to #. +gL# Change the symbol of the current list to #. + Remap command: `:VimwikiChangeSymbolTo #` + Remap command: `:VimwikiChangeSymbolInListTo #` + + *vimwiki_gl-* *vimwiki_gL-* +gl- n Make a list item out of a normal line or change the + symbol of the current item to -. + Remap command: `:VimwikiChangeSymbolTo -` +gL- Change the symbol of the current list to -. + Remap command: `:VimwikiChangeSymbolInListTo -` + + *vimwiki_gl1* *vimwiki_gL1* +gl1 n Make a list item out of a normal line or change the + symbol of the current item to 1., the numbering is + adjusted according to the surrounding list items. + Remap command: `:VimwikiChangeSymbolTo 1.` +gL1 Change the symbol of the current list to 1. 2. 3. ... + Remap command: `:VimwikiChangeSymbolInListTo 1.` + + *vimwiki_gla* *vimwiki_gLa* +gla n Make a list item out of a normal line or change the + symbol of the current item to a), the numbering is + adjusted according to the surrounding list items. + Remap command: `:VimwikiChangeSymbolTo a)` +gLa Change the symbol of the current list to a) b) c) ... + Remap command: `:VimwikiChangeSymbolInListTo a)` + + *vimwiki_glA* *vimwiki_gLA* +glA n Make a list item out of a normal line or change the + symbol of the current item to A), the numbering is + adjusted according to the surrounding list items. + Remap command: `:VimwikiChangeSymbolTo A)` +gLA Change the symbol of the current list to A) B) C) ... + Remap command: `:VimwikiChangeSymbolInListTo A)` + + *vimwiki_gli* *vimwiki_gLi* +gli n Make a list item out of a normal line or change the + symbol of the current item to i), the numbering is + adjusted according to the surrounding list items. + Remap command: `:VimwikiChangeSymbolTo i)` +gLi Change the symbol of the current list to + i) ii) iii) ... + Remap command: `:VimwikiChangeSymbolInListTo i)` + + *vimwiki_glI* *vimwiki_gLI* +glI n Make a list item out of a normal line or change the + symbol of the current item to I), the numbering is + adjusted according to the surrounding list items. + Remap command: `:VimwikiChangeSymbolTo I)` +gLI Change the symbol of the current list to + I) II) III) ... + Remap command: `:VimwikiChangeSymbolInListTo I)` + + *vimwiki_glx* +glx n Toggle checkbox of a list item disabled/off. + Maps to |:VimwikiToggleRejectedListItem|. + See |vimwiki-todo-lists|. + Remap command: `VimwikiToggleRejectedListItem` + + *vimwiki_gqq* *vimwiki_gww* +gqq n Reformats table after making changes. + or Remap command: `VimwikiTableAlignQ` +gww Remap command: `VimwikiTableAlignW` + + *vimwiki_gq1* *vimwiki_gw1* +gq1 n Fast format table. The same as the previous, except + or that only a few lines above the current line are + tested. If the alignment of the current line differs, + then the whole table gets reformatted. + Remap command: `VimwikiTableAlignQ1` +gw1 Remap command:`VimwikiTableAlignW1` + + *vimwiki_* + n Move current table column to the left. + See |:VimwikiTableMoveColumnLeft| + Remap command: `VimwikiTableMoveColumnLeft` + + *vimwiki_* + n Move current table column to the right. + See |:VimwikiTableMoveColumnRight| + Remap command: `VimwikiTableMoveColumnRight` + + *vimwiki_* + n Open the previous day's diary link if available. + See |:VimwikiDiaryPrevDay| + Remap command: `VimwikiDiaryPrevDay` + + *vimwiki_* + n Open the next day's diary link if available. + See |:VimwikiDiaryNextDay| + Remap command: `VimwikiDiaryNextDay` + +Mouse mappings *vimwiki_mouse* + +These mappings are disabled by default. +See |g:vimwiki_key_mappings| to enable. + +<2-LeftMouse> Follow wiki link (create target wiki page if needed). + + Split and follow wiki link (create target wiki page if + needed). + + Vertical split and follow wiki link (create target + wiki page if needed). + + Go back to previous wiki page. + +Note: <2-LeftMouse> is just left double click. + + + +TABLE MAPPINGS, INSERT MODE *vimwiki-table-mappings* + *vimwiki_i__table* + Go to the table cell beneath the current one, create + a new row if on the last one. + + *vimwiki_i__table* + Go to the next table cell, create a new row if on the + last cell. + +LIST MAPPINGS, INSERT MODE *vimwiki-list-mappings* + *vimwiki_i_* + In a list item, insert a new bullet or number in the + next line, numbers are incremented. + In an empty list item, delete the item symbol. This is + useful to end a list, simply press twice. + See |vimwiki-lists| for details and for how to + configure the behavior. + + *vimwiki_i_* + Does not insert a new list item, useful to create + multilined list items. See |vimwiki-lists| for + details and for how to configure the behavior. The + default map may not work in all terminals and may + need to be remapped. + + *vimwiki_i_* + Increase the level of a list item. + Remap command: `VimwikiIncreaseLvlSingleItem` + + *vimwiki_i_* + Decrease the level of a list item. + Remap command: `VimwikiDecreaseLvlSingleItem` + + *vimwiki_i__* + Change the symbol of the current list item to the next + available. From - to 1. to * to I) to a). + Remap command: `VimwikiListNextSymbol` + + *vimwiki_i__* + Change the symbol of the current list item to the prev + available. From - to a) to I) to * to 1. + Remap command: `VimwikiListPrevSymbol` + + *vimwiki_i__* + Create/remove a symbol from a list item. + Remap command: `VimwikiListToggle` + + +------------------------------------------------------------------------------ +3.3. Text objects *vimwiki-text-objects* + +ah A header including its content up to the next header. +ih The content under a header (like 'ah', but excluding + the header itself and trailing empty lines). + +aH A header including all of its subheaders. When [count] + is 2, include the parent header, when [count] is 3, + the grandparent and so on. +iH Like 'aH', but excluding the header itself and + trailing empty lines. + +Examples: +- type 'cih' to change the content under the current header +- 'daH' deletes an entire header plus its content including the content of all + of its subheaders +- 'v2aH' selects the parent header of the header the cursor is under plus all + of the content of all of its subheaders + +a\ A cell in a table. +i\ An inner cell in a table. +ac A column in a table. +ic An inner column in a table. + +al A list item plus its children. +il A single list item. + +These key mappings can be modified by replacing the default keys: > + + omap ah VimwikiTextObjHeader + vmap ah VimwikiTextObjHeaderV + omap ih VimwikiTextObjHeaderContent + vmap ih VimwikiTextObjHeaderContentV + omap aH VimwikiTextObjHeaderSub + vmap aH VimwikiTextObjHeaderSubV + omap iH VimwikiTextObjHeaderSubContent + vmap iH VimwikiTextObjHeaderSubContentV + omap a\ VimwikiTextObjTableCell + vmap a\ VimwikiTextObjTableCellV + omap i\ VimwikiTextObjTableCellInner + vmap i\ VimwikiTextObjTableCellInnerV + omap ac VimwikiTextObjColumn + vmap ac VimwikiTextObjColumnV + omap ic VimwikiTextObjColumnInner + vmap ic VimwikiTextObjColumnInnerV + omap al VimwikiTextObjListChildren + vmap al VimwikiTextObjListChildrenV + omap il VimwikiTextObjListSingle + vmap il VimwikiTextObjListSingleV + + +============================================================================== +4. Commands *vimwiki-commands* + +------------------------------------------------------------------------------ +4.1. Global Commands *vimwiki-global-commands* + +*:VimwikiIndex* [count] + Open index file of the current wiki. If a [count] is given the + corresponding wiki from |g:vimwiki_list| is opened instead. + +*:VimwikiTabIndex* [count] + Open index file of the current wiki in a new tab. If a [count] is given + the corresponding wiki from |g:vimwiki_list| is opened instead. + +*:VimwikiUISelect* + Displays a list of registered wikis and opens the index file of the + selected wiki. + +*:VimwikiDiaryIndex* [count] + Open diary index file of the current wiki. If a [count] is given the + corresponding wiki from |g:vimwiki_list| is opened instead. + +*:VimwikiMakeDiaryNote* [count] + Open diary wiki-file for today of the current wiki. If a [count] is given + a diary wiki-file for the corresponding wiki from |g:vimwiki_list| is + opened instead. + +*:VimwikiTabMakeDiaryNote* [count] + Open diary wiki-file for today of the current wiki in a new tab. If + a [count] is given a diary wiki-file for the corresponding wiki from + |g:vimwiki_list| is opened instead. + +*:VimwikiMakeYesterdayDiaryNote* [count] + Open diary wiki-file for yesterday of the current wiki. If a [count] is + given a diary wiki-file for the corresponding wiki from |g:vimwiki_list| + is opened instead. + +*:VimwikiMakeTomorrowDiaryNote* [count] + Open diary wiki-file for tomorrow of the current wiki. If a [count] is + given a diary wiki-file for the corresponding wiki from |g:vimwiki_list| + is opened instead. + +------------------------------------------------------------------------------ +4.2. Local commands *vimwiki-local-commands* + +These commands are only available (and meaningful) when you are currently in a +Vimwiki file. + +*:VimwikiFollowLink* + Follow wiki link (or create target wiki page if needed). + +*:VimwikiGoBackLink* + Go back to the wiki page you came from. + +*:VimwikiSplitLink* [reuse] [move_cursor] + Split and follow wiki link (create target wiki page if needed). + + If the argument 'reuse' is given and nonzero, the link is opened in a + possibly existing split window instead of making a new split. + + If 'move_cursor' is given and nonzero, the cursor moves to the window with + the opened link, otherwise, it stays in the window with the link. + +*:VimwikiVSplitLink* [reuse] [move_cursor] + Vertical split and follow wiki link (create target wiki page if needed). + + If the argument 'reuse' is given and nonzero, the link is opened in a + possibly existing split window instead of making a new split. + + If 'move_cursor' is given and nonzero, the cursor moves to the window with + the opened link, otherwise, it stays in the window with the link. + +*:VimwikiTabnewLink* + Follow wiki link in a new tab (create target wiki page if needed). + +*:VimwikiNextLink* + Find next link on the current page. + +*:VimwikiPrevLink* + Find previous link on the current page. + +*:VimwikiGoto* + Goto link provided by an argument. For example: > + :VimwikiGoto HelloWorld +< opens/creates HelloWorld wiki page. + + Supports |cmdline-completion| for link name. If name is not specified, a + prompt will be shown. + +*:VimwikiDeleteFile* + Delete the wiki page you are in. + +*:VimwikiRenameFile* + Rename the wiki page you are in. + +*:VimwikiNextTask* + Jump to the next unfinished task in the current wiki page. + +*:Vimwiki2HTML* + Convert current wiki page to HTML using Vimwiki's own converter or a + user-supplied script (see |vimwiki-option-custom_wiki2html|). + +*:Vimwiki2HTMLBrowse* + Convert current wiki page to HTML and open it in the webbrowser. + +*:VimwikiAll2HTML[!]* + Convert all wiki pages to HTML. + Default CSS file (style.css) is created if there is no one. + + By default, only converts wiki pages which have not already been + converted or have been modified since their last conversion. With !, + convert all pages, regardless of whether or not they are out-of-date. + +*:VimwikiToggleListItem* + Toggle checkbox of a list item on/off. + See |vimwiki-todo-lists|. + +*:VimwikiToggleRejectedListItem* + Toggle checkbox of a list item disabled/off. + See |vimwiki-todo-lists|. + +*:VimwikiListChangeLevel* CMD + Change the nesting level, or symbol, for a single-line list item. + CMD may be ">>" or "<<" to change the indentation of the item, or + one of the syntax-specific bullets: "*", "#", "1.", "-". + See |vimwiki-todo-lists|. + +*:VimwikiSearch* /pattern/ +*:VWS* /pattern/ + Search for /pattern/ in all files of current wiki. + To display all matches use |:lopen| command. + To display next match use |:lnext| command. + To display previous match use |:lprevious| command. + + Hint: this feature is simply a wrapper around |:lvimgrep|. For a + complete description of the search pattern format, see |:vimgrep|. + For example, to perform a case-insensitive search, use > + :VWS /\cpattern/ + +*:VimwikiBacklinks* +*:VWB* + Search for wikilinks to the current wiki page in all files of current + wiki. + To display all matches use |:lopen| command. + To display next match use |:lnext| command. + To display previous match use |:lprevious| command. + + +*:VimwikiTable* + Create a table with 5 cols and 2 rows. + + :VimwikiTable cols rows + Create a table with the given cols and rows + + :VimwikiTable cols + Create a table with the given cols and 2 rows + + +*:VimwikiTableMoveColumnLeft* , *:VimwikiTableMoveColumnRight* + Move current column to the left or to the right: + Example: > + + | head1 | head2 | head3 | head4 | head5 | + |--------|--------|--------|--------|--------| + | value1 | value2 | value3 | value4 | value5 | + + + Cursor is on 'head1'. + :VimwikiTableMoveColumnRight + + | head2 | head1 | head3 | head4 | head5 | + |--------|--------|--------|--------|--------| + | value2 | value1 | value3 | value4 | value5 | + + Cursor is on 'head3'. + :VimwikiTableMoveColumnLeft + + | head2 | head3 | head1 | head4 | head5 | + |--------|--------|--------|--------|--------| + | value2 | value3 | value1 | value4 | value5 | +< + + Commands are mapped to and respectively. + + +*:VimwikiGenerateLinks* [pattern] + Insert a list of links to all available wiki files into the current buffer. + If an optional 'pattern' is given as argument, the files will be searched + in the wiki root folder according to the 'pattern' as |globpath| + +*:VimwikiDiaryGenerateLinks* + Delete old, insert new diary section into diary index file. + +*:VimwikiDiaryNextDay* + Open next day diary link if available. + Mapped to . + +*:VimwikiDiaryPrevDay* + Open previous day diary link if available. + Mapped to . + +*:VimwikiTOC* + Create or update the Table of Contents for the current wiki file. + See |vimwiki-toc|. + +*:VimwikiCheckLinks* + Search through all wiki files and check if the targets of all wiki links + and links to external files actually exist. Check also if all wiki files + are reachable from the index file. The results are shown in the quickfix + window. + +*:VimwikiRebuildTags* + Rebuilds the tags metadata file for all wiki files newer than the metadata + file. + Necessary for all tags related commands: |vimwiki-syntax-tags|. + + :VimwikiRebuildTags! does the same for all files. + +*:VimwikiSearchTags* + Searches over the pages in current wiki and finds all locations of a given + tag. Supports |cmdline-completion|. + +*:VimwikiGenerateTagLinks* tagname1 tagname2 ... + Creates or updates an overview on all tags of the wiki with links to all + their instances. Supports |cmdline-completion|. If no arguments (tags) + are specified, outputs all tags. To make this command work properly, make + sure the tags have been built (see |vimwiki-build-tags|). + + +============================================================================== +5. Wiki syntax *vimwiki-syntax* + + +There are a lot of different wikis out there. Most of them have their own +syntax and Vimwiki is not an exception here. + +Vimwiki has evolved its own syntax that closely resembles Google's wiki +markup. This syntax is described in detail below. + +Vimwiki also supports alternative syntaxes, like Markdown and MediaWiki, to +varying degrees; see |vimwiki-option-syntax|. Static elements like headers, +quotations, and lists are customized in syntax/vimwiki_xxx.vim, where xxx +stands for the chosen syntax. + +Interactive elements such as links and Vimwiki commands are supported by +definitions and routines in syntax/vimwiki_xxx_custom.vim and +autoload/vimwiki/xxx_base.vim. Currently, only Markdown includes this level +of support. + +Vimwiki2HTML is currently functional only for the default syntax. + +------------------------------------------------------------------------------ +5.1. Typefaces *vimwiki-syntax-typefaces* + +There are a few typefaces that give you a bit of control over how your text +is decorated: > + + *bold text* + _italic text_ + _*bold italic text*_ + *_bold italic text _* + ~~strikeout text~~ + `code (no syntax) text` + super^script^ + sub,,script,, + +For Markdown syntax these variations are used: > + + **bold text** or __bold text__ + *italic text* or _italic text_ + ***bold_italic text*** or ___italic_bold text___ + +Furthermore, there are a number of words which are highlighted extra flashy: +TODO, DONE, STARTED, FIXME, FIXED, XXX. + +When rendered as HTML, code blocks containing only a hash prefixed 6 digit hex +number will be colored as themselves. For example > + `#ffe119` +Becomes > + #ffe119 + +------------------------------------------------------------------------------ +5.2. Links *vimwiki-syntax-links* + +Wikilinks~ + +Plain link: > + [[This is a link]] +With description: > + [[This is a link source|Description of the link]] + +Wiki files don't need to be in the root directory of your wiki, you can put +them in subdirectories as well: > + [[projects/Important Project 1]] +To jump from that file back to the index file, use this link: > + [[../index]] +or: > + [[/index]] +The latter works because wiki links starting with "/" are considered to be +absolute to the wiki root directory, that is, the link [[/index]] always opens +the file /path/to/your/wiki/index.wiki, no matter in which subdirectory you +are currently in. + +Links to subdirectories inside the wiki directory are also supported. They +end with a "/": > + [[a subdirectory/|Other files]] +Use |g:vimwiki_dir_link| to control the behavior when opening directories. + +Typing wikilinks can be simplified by using Vim's omni completion (see +|compl-omni|) like so: > + [[ind +which opens up a popup menu with all the wiki files starting with "ind". + +When |vimwiki-option-maxhi| equals 1, a distinct highlighting style is used to +identify wikilinks whose targets are not found. + +Interwiki~ + +If you maintain more than one wiki, you can create interwiki links between +them by adding a numbered prefix "wikiX:" in front of a link: > + [[wiki1:This is a link]] +or: > + [[wiki1:This is a link source|Description of the link]] + +The number behind "wiki" is in the range 0..N-1 and identifies the destination +wiki in |g:vimwiki_list|. + +Named interwiki links are also supported in the format "wn.name:link" > + [[wn.My Name:This is a link]] +or: > + [[wn.MyWiki:This is a link source|Description of the link]] + +See |vimwiki-option-name| to set a per wiki name. + +Diary~ + +The "diary:" scheme is used to link to diary entries: > + [[diary:2012-03-05]] + +Anchors~ + +A wikilink, interwiki link or diary link can be followed by a '#' and the name +of an anchor. When opening a link, the cursor jumps to the anchor. > + [[Todo List#Tomorrow|Tasks for tomorrow]] + +To jump inside the current wiki file you can omit the file: > + [[#Tomorrow]] + +See |vimwiki-anchors| for how to set an anchor. + +Raw URLs~ + +Raw URLs are also supported: > + https://github.com/vimwiki/vimwiki.git + mailto:habamax@gmail.com + ftp://vim.org + +External files~ + +The "file:" and "local:" schemes allow you to directly link to arbitrary +resources using absolute or relative paths: > + [[file:/home/somebody/a/b/c/music.mp3]] + [[file:C:/Users/somebody/d/e/f/music.mp3]] + [[file:~/a/b/c/music.mp3]] + [[file:../assets/data.csv|Important Data]] + [[local:C:/Users/somebody/d/e/f/music.mp3]] + [[file:/home/user/documents/|Link to a directory]] + +These links are opened with the system command, i.e. !xdg-open (Linux), !open +(Mac), or !start (Windows). To customize this behavior, see +|VimwikiLinkHandler|. + +In Vim, "file:" and "local:" behave the same, i.e. you can use them with both +relative and absolute links. When converted to HTML, however, "file:" links +will become absolute links, while "local:" links become relative to the HTML +output directory. The latter can be useful if you copy your HTML files to +another computer. +To customize the HTML conversion of links, see |VimwikiLinkConverter|. + +Transclusion (Wiki-Include) Links~ + +Links that use "{{" and "}}" delimiters signify content that is to be +included into the HTML output, rather than referenced via hyperlink. + +Wiki-include URLs may use any of the supported schemes, may be absolute or +relative, and need not end with an extension. + +The primary purpose for wiki-include links is to include images. + +Transclude from a local URL: > + {{file:../../images/vimwiki_logo.png}} +or from a universal URL: > + {{http://vimwiki.googlecode.com/hg/images/vimwiki_logo.png}} + +Transclude image with alternate text: > + {{http://vimwiki.googlecode.com/hg/images/vimwiki_logo.png|Vimwiki}} +in HTML: > + Vimwiki + +Transclude image with alternate text and some style: > + {{http://.../vimwiki_logo.png|cool stuff|style="width:150px;height:120px;"}} +in HTML: > + cool stuff + +Transclude image _without_ alternate text and with a CSS class: > + {{http://.../vimwiki_logo.png||class="center flow blabla"}} +in HTML: > + + +A trial feature allows you to supply your own handler for wiki-include links. +See |VimwikiWikiIncludeHandler|. + +Thumbnail links~ +> +Thumbnail links are constructed like this: > + [[http://someaddr.com/bigpicture.jpg|{{http://someaddr.com/thumbnail.jpg}}]] + +in HTML: > + + + [Id]: URL + +then the URL is opened with the system default handler. Otherwise, Vimwiki +treats the reference-style link as a Wikilink, interpreting the Id field as a +wiki page name. + +Highlighting of existing links when |vimwiki-option-maxhi| is activated +identifies links whose Id field is not defined, either as a reference-link or +as a wiki page. + +To scan the page for new or changed definitions for reference-links, simply +re-open the page ":e". + +------------------------------------------------------------------------------ +5.3. Headers *vimwiki-syntax-headers* + += Header level 1 =~ +By default all headers are highlighted using |hl-Title| highlight group. + +== Header level 2 ==~ +You can set up different colors for each header level: > + :hi VimwikiHeader1 guifg=#FF0000 + :hi VimwikiHeader2 guifg=#00FF00 + :hi VimwikiHeader3 guifg=#0000FF + :hi VimwikiHeader4 guifg=#FF00FF + :hi VimwikiHeader5 guifg=#00FFFF + :hi VimwikiHeader6 guifg=#FFFF00 +Set up colors for all 6 header levels or none at all. + +=== Header level 3 ===~ +==== Header level 4 ====~ +===== Header level 5 =====~ +====== Header level 6 ======~ + + +You can center your headers in HTML by placing spaces before the first '=': + = Centered Header L1 =~ + + +------------------------------------------------------------------------------ +5.4. Paragraphs *vimwiki-syntax-paragraphs* + +A paragraph is a group of lines starting in column 1 (no indentation). +Paragraphs are separated by a blank line: + +This is first paragraph +with two lines. + +This is a second paragraph with +two lines. + + +------------------------------------------------------------------------------ +5.5. Lists *vimwiki-syntax-lists* + +Unordered lists: > + - Bulleted list item 1 + - Bulleted list item 2 +or: > + * Bulleted list item 1 + * Bulleted list item 2 + + +Ordered lists: > + 1. Numbered list item 1 + 2. Numbered list item 2 + 3. Numbered list item 3 +or: > + 1) Numbered list item 1 + 2) Numbered list item 2 + 3) Numbered list item 3 +or: > + a) Numbered list item 1 + b) Numbered list item 2 + c) Numbered list item 3 +or: > + A) Numbered list item 1 + B) Numbered list item 2 + C) Numbered list item 3 +or: > + i) Numbered list item 1 + ii) Numbered list item 2 + iii) Numbered list item 3 +or: > + I) Numbered list item 1 + II) Numbered list item 2 + III) Numbered list item 3 +or: > + # Bulleted list item 1 + # the # become numbers when converted to HTML + +Note that a space after the list item symbols (-, *, 1. etc.) is essential. + +You can nest and mix the various types: > + - Bulleted list item 1 + - Bulleted list item 2 + a) Numbered list sub item 1 + b) more ... + * and more ... + * ... + c) Numbered list sub item 3 + 1. Numbered list sub sub item 1 + 2. Numbered list sub sub item 2 + d) etc. + - Bulleted list item 3 + +List items can span multiple lines: > + * Item 1 + Item 1 continued line. + Item 1 next continued line. + * Item 2 + - Sub item 1 + Sub item 1 continued line. + Sub item 1 next continued line. + - Sub item 2 + - etc. + Continuation of Item 2 + Next continuation of Item 2 + + +Definition lists: > + Term 1:: Definition 1 + Term 2:: + :: Definition 2 + :: Definition 3 + + +------------------------------------------------------------------------------ +5.6. Tables *vimwiki-syntax-tables* + +Tables are created by entering the content of each cell separated by | +delimiters. You can insert other inline wiki syntax in table cells, including +typeface formatting and links. +For example: > + + | Year | Temperature (low) | Temperature (high) | + |------|-------------------|--------------------| + | 1900 | -10 | 25 | + | 1910 | -15 | 30 | + | 1920 | -10 | 32 | + | 1930 | _N/A_ | _N/A_ | + | 1940 | -2 | 40 | +> + +In HTML the following part > + | Year | Temperature (low) | Temperature (high) | + |------|-------------------|--------------------| +> +is highlighted as a table header. + +If you indent a table then it will be centered in HTML. + +If you put > in a cell, the cell spans the left column. +If you put \/ in a cell, the cell spans the above row. +For example: > + + | a | b | c | d | + | \/ | e | > | f | + | \/ | \/ | > | g | + | h | > | > | > | +> + +See |vimwiki-tables| for more details on how to manage tables. + + +------------------------------------------------------------------------------ +5.7. Preformatted text *vimwiki-syntax-preformatted* + +Use {{{ and }}} to define a block of preformatted text: +{{{ > + Tyger! Tyger! burning bright + In the forests of the night, + What immortal hand or eye + Could frame thy fearful symmetry? + In what distant deeps or skies + Burnt the fire of thine eyes? + On what wings dare he aspire? + What the hand dare sieze the fire? +}}} + + +You can add optional information after the {{{: > +{{{class="brush: python" > + def hello(world): + for x in range(10): + print("Hello {0} number {1}".format(world, x)) +}}} + +Result of HTML export: > +

    + def hello(world):
    +     for x in range(10):
    +         print("Hello {0} number {1}".format(world, x))
    + 
    + +This might be useful for coloring program code with external JS tools +such as Google's syntax highlighter. + +You can setup Vimwiki to highlight code snippets in preformatted text. +See |vimwiki-option-nested_syntaxes| and +|vimwiki-option-automatic_nested_syntaxes|. + + +------------------------------------------------------------------------------ +5.8. Mathematical formulae *vimwiki-syntax-math* + +Mathematical formulae are highlighted, and can be rendered in HTML using the +powerful open source display engine MathJax (http://www.mathjax.org/). + +There are three supported syntaxes, which are inline, block display and +block environment. + +Inline math is for short formulae within text. It is enclosed by single +dollar signs, e.g.: + $ \sum_i a_i^2 = 1 $ + +Block display creates a centered formula with some spacing before and after +it. It must start with a line including only {{$, then an arbitrary number +of mathematical text are allowed, and it must end with a line including only +}}$. +E.g.: + {{$ + \sum_i a_i^2 + = + 1 + }}$ + +Note: no matter how many lines are used in the text file, the HTML will +compress it to one line only. + +Block environment is similar to block display, but is able to use specific +LaTeX environments, such as 'align'. The syntax is the same as for block +display, except for the first line which is {{$%environment%. +E.g.: + {{$%align% + \sum_i a_i^2 &= 1 + 1 \\ + &= 2. + }}$ + +Similar compression rules for the HTML page hold (as MathJax interprets the +LaTeX code). + +Note: the highlighting in Vim is automatic. For the rendering in HTML, you +have two alternative options: + +1. installing MathJax locally (Recommended: faster, no internet required). +Choose a folder on your hard drive and save MathJax in it. Then add to your +HTML template the following line: + + + +where is the folder on your HD, as a relative path to the +template folder. For instance, a sensible folder structure could be: + +- wiki + - text + - html + - templates + - mathjax + +In this case, would be "../mathjax" (without quotes). + +2. Loading MathJax from a CDN-server (needs internet connection). +Add to your HTML template the following lines: + + + + + +------------------------------------------------------------------------------ +5.9. Blockquotes *vimwiki-syntax-blockquotes* + +Text which starts with 4 or more spaces is a blockquote. + + This would be a blockquote in Vimwiki. It is not highlighted in Vim but + could be styled by CSS in HTML. Blockquotes are usually used to quote a + long piece of text from another source. + + +------------------------------------------------------------------------------ +5.10. Comments *vimwiki-syntax-comments* + +A line that starts with %% is a comment. +E.g.: > + %% this text would not be in HTML +< + +------------------------------------------------------------------------------ +5.11. Horizontal line *vimwiki-syntax-hr* + +4 or more dashes at the start of the line is a horizontal line (
    ): > + ---- +< + +------------------------------------------------------------------------------ +5.12. Tags *vimwiki-syntax-tags* + +You can tag a wiki file, a header or an arbitrary place in a wiki file. Then, +you can use Vim's built-in tag search functionality (see |tagsrch.txt|) or +Vimwiki's tag related commands to quickly jump to all occurrences of the tag. + +A tag is a sequence of non-space characters between two colons: > + :tag-example: +< +It is allowed to concatenate multiple tags in one line: > + :tag-one:tag-two: +< +If placed in the first two lines of a file, the whole file is tagged. If +placed under a header, within the 2 lines below it, the header is then tagged +with this tag, and the tag search commands will jump to this specific header. +Otherwise, the tag stands of its own and the search command jumps directly to +it. + +Typing tags can be simplified by using Vim's omni completion (see +|compl-omni|) like so: > + :ind +which opens up a popup menu with all tags defined in the wiki starting with +"ind". + +Tags are also treated as |vimwiki-anchors| (similar to bold text). + + *vimwiki-build-tags* +Note that the tag search/jump/completion commands need certain metadata saved +in the wiki folder. This metadata file can be manually updated by running +|:VimwikiRebuildTags|. When the option |vimwiki-option-auto_tags| is enabled, +the tags metadata will be auto-updated on each page save. + + +Tags-related commands and options: + * |:VimwikiRebuildTags| + * |:VimwikiGenerateTagLinks| + * |:VimwikiSearchTags| + * |vimwiki-option-auto_tags| + + +============================================================================== +6. Folding/Outline *vimwiki-folding* + +Vimwiki allows you to use Vim's folding methods and options so you can fold +your outline to make it less distracting and easier to navigate. You can use +Vimwiki's built-in folding methods or supply custom methods for folding. You +control how folds behave with by setting the |g:vimwiki_folding| variable to +the desired value in your configuration file: > + + let g:vimwiki_folding = 'value' + +Here's an example of how folds work with |g:vimwiki_folding| set to 'list': + += My current task = +* [ ] Do stuff 1 + * [ ] Do substuff 1.1 + * [ ] Do substuff 1.2 + * [ ] Do substuff 1.2.1 + * [ ] Do substuff 1.2.2 + * [ ] Do substuff 1.3 +* [ ] Do stuff 2 +* [ ] Do stuff 3 + +Hit |zM| : += My current task = +* [ ] Do stuff 1 [6] --------------------------------------~ +* [ ] Do stuff 2 +* [ ] Do stuff 3 + +Hit |zr| : += My current task = +* [ ] Do stuff 1 + * [ ] Do substuff 1.1 + * [ ] Do substuff 1.2 [3] -------------------------------~ + * [ ] Do substuff 1.3 +* [ ] Do stuff 2 +* [ ] Do stuff 3 + +Hit |zr| one more time : += My current task = +* [ ] Do stuff 1 + * [ ] Do substuff 1.1 + * [ ] Do substuff 1.2 + * [ ] Do substuff 1.2.1 + * [ ] Do substuff 1.2.2 + * [ ] Do substuff 1.3 +* [ ] Do stuff 2 +* [ ] Do stuff 3 + +Note: If you use the default Vimwiki syntax, folding on list items will work +properly only if all of them are indented using the current 'shiftwidth'. +For Markdown and MediaWiki syntax, * or # should be in the first column. + +For maximum control over folds, set |g:vimwiki_folding| to 'custom' so you can +allow other plugins or your vim configuration file to control how folding is +performed. For example, let's say you are using markdown syntax and prefer to +fold so that the last blank line before a header is not folded, you can add +this function to your configuration file: > + + function! VimwikiFoldLevelCustom(lnum) + let pounds = strlen(matchstr(getline(a:lnum), '^#\+')) + if (pounds) + return '>' . pounds " start a fold level + endif + if getline(a:lnum) =~? '\v^\s*$' + if (strlen(matchstr(getline(a:lnum + 1), '^#\+'))) + return '-1' " don't fold last blank line before header + endif + endif + return '=' " return previous fold level + endfunction + +Note that you will also need to add the following vim options to your configuration: > + + augroup VimrcAuGroup + autocmd! + autocmd FileType vimwiki setlocal foldmethod=expr | + \ setlocal foldenable | set foldexpr=VimwikiFoldLevelCustom(v:lnum) + augroup END + +See the |g:vimwiki_folding| documentation for more details. + +============================================================================== +7. Placeholders *vimwiki-placeholders* + +------------------------------------------------------------------------------ +%title Title of the page *vimwiki-title* + +When you htmlize your wiki page, the default title is the filename of the +page. Place > + +%title My books + +into your wiki page if you want another title. + + +------------------------------------------------------------------------------ +%nohtml *vimwiki-nohtml* + +If you do not want a wiki page to be converted to HTML, place: + +%nohtml + +into it. + + +------------------------------------------------------------------------------ +%template *vimwiki-template* + +To apply a concrete HTML template to a wiki page, place: + +%template name + +into it. + +See |vimwiki-option-template_path| for details. + +------------------------------------------------------------------------------ +%date *vimwiki-date* + +The date of the wiki page. The value can be used in the HTML template, see +|vimwiki-option-template_path| for details. + +%date 2017-07-08 +%date + +If you omit the date after the placeholder, the date of the HTML conversion is +used. + + +============================================================================== +8. Lists *vimwiki-lists* + +While writing lists, the keys , o and O insert new bullets or numbers as +you would expect it. A new bullet/number is inserted if and only if the cursor +is in a list item. If you use hard line wraps within your lists then you will +need to remap `` to `VimwikiReturn 3 5`, use , or press and +. + +Note that the mapping is not available in all terminals. + +Furthermore, and behave differently when the cursor is behind an +empty list item. See the table below. + +To customize the behavior you should use an autocmd or place the mappings in +`~/.vim/after/ftplugin/vimwiki.vim`. This is necessary to avoid an error that +the command `VimwikiReturn` doesn't exist when editing non Vimwiki files.: > + + autocmd FileType vimwiki inoremap + \ :VimwikiReturn 3 5 + autocmd FileType vimwiki inoremap + \ :VimwikiReturn 2 2 + +Note: Prefixing the mapping with `` expands iabbrev definitions and +requires Vim > 7.3.489. + +The first argument of the command :VimwikiReturn is a number that specifies +when to insert a new bullet/number and when not, depending on whether the +cursor is in a list item or in a normal line: > + + Number │ Before │ After + ====================================== + 1 │ 1. item| │ 1. item + │ │ 2. | + │–––––––––––––––––––––––––––––– ← default for + │ 1. item │ 1. item + │ continue| │ continue + │ │ | + ====================================== + 2 │ 1. item| │ 1. item + │ │ | + │–––––––––––––––––––––––––––––– ← default for + │ 1. item │ 1. item + │ continue| │ continue + │ │ 2. | + ====================================== + 3 │ 1. item| │ 1. item + │ │ 2. | + │–––––––––––––––––––––––––––––– + │ 1. item │ 1. item + │ continue| │ continue + │ │ 2. | + ====================================== + 4 │ 1. item| │ 1. item + │ │ | + │–––––––––––––––––––––––––––––– + │ 1. item │ 1. item + │ continue| │ continue + │ │ | +< + +The second argument is a number that specifies what should happen when you +press or behind an empty list item. There are no less than five +possibilities: +> + Number │ Before │ After + ====================================== + 1 │ 1. | │ 1. + │ │ 2. | + ====================================== + 2 │ 1. | │ ← default for + │ │ 1. | + ====================================== + 3 │ 1. | │ | + │ │ + ====================================== + 4 │ 1. | │ + │ │ | + ====================================== + 5 │ 1. | │ 1. | + │ │ + │–––––––––––––––––––––––––––––– ← default for + │ 1. | │ | + │ │ +< + + + *vimwiki-list-manipulation* +The level of a list item is determined by its indentation (default and +Markdown syntax) or by the number of list symbols (MediaWiki syntax). + +Use gll and glh in normal mode to increase or decrease the level of a list +item. The symbols are adjusted automatically to the list items around it. +Use gLl and gLh to increase or decrease the level of a list item plus all +list items of lower level below it, that is, all child items. + +Use and to change the level of a list item in insert mode. + +See |vimwiki_gll|, |vimwiki_gLl|, |vimwiki_glh|, |vimwiki_gLh|, +|vimwiki_i_|, |vimwiki_i_| + + +Use gl followed by the desired symbol to change the symbol of a list item or +create one. Type gL and the symbol to change all items of the current list. +For default syntax, the following types are available: > + - hyphen + * asterisk + # hash + 1. number with period + 1) number with parenthesis + a) lower-case letter with parenthesis + A) upper-case letter with parenthesis + i) lower-case Roman numerals with parenthesis + I) upper-case Roman numerals with parenthesis + +Markdown syntax has the following types: > + - hyphen + * asterisk + + plus + 1. number with period + +MediaWiki syntax only has: > + * asterisk + # hash + +In insert mode, use the keys and to switch between +symbols. For convenience, only the commonly used symbols can be reached +through these keys for default syntax. + +Note that such a list: a) b) c) … only goes up to zz), to avoid confusion with +normal text followed by a parenthesis. +Roman numerals go up to MMMM) and numbers up to 2147483647. or +9223372036854775807. depending if your Vim is 32 or 64 bit. + +Also, note that you can, of course, mix different list symbols in one list, but +if you have the strange idea of putting a list with Roman numerals right after +a list using letters or vice versa, Vimwiki will get confused because it +cannot distinguish which is which (at least if the types are both upper case +or both lower case). + +See |vimwiki_glstar|, |vimwiki_gl#| |vimwiki_gl-|, |vimwiki_gl-|, +|vimwiki_gl1|, |vimwiki_gla|, |vimwiki_glA|, |vimwiki_gli|, |vimwiki_glI| + + +Use glr and gLr if the numbers of a numbered list are mixed up. See +|vimwiki_glr| and |vimwiki_gLr|. + + +------------------------------------------------------------------------------ +Todo lists *vimwiki-todo-lists* + +You can have todo lists -- lists of items you can check/uncheck. + +Consider the following example: > + = Toggleable list of todo items = + * [X] Toggle list item on/off. + * [X] Simple toggling between [ ] and [X]. + * [X] All list's subitems should be toggled on/off appropriately. + * [X] Toggle child subitems only if current line is list item + * [X] Parent list item should be toggled depending on its child items. + * [X] Make numbered list items toggleable too + * [X] Add highlighting to list item boxes + * [X] Add [ ] to the next list item created with o, O and . + +Pressing on the first list item will toggle it and all of its child +items: > + = Toggleable list of todo items = + * [ ] Toggle list item on/off. + * [ ] Simple toggling between [ ] and [X]. + * [ ] All of a list's subitems should be toggled on/off appropriately. + * [ ] Toggle child subitems only if the current line is a list item. + * [ ] Parent list item should be toggled depending on their child items. + * [X] Make numbered list items toggleable too. + * [X] Add highlighting to list item boxes. + * [X] Add [ ] to the next list item created using o, O or . + +Pressing on the third list item will toggle it and adjust all of its +parent items: > + = Toggleable list of todo items = + * [.] Toggle list item on/off. + * [ ] Simple toggling between [ ] and [X]. + * [X] All of a list's subitems should be toggled on/off appropriately. + * [ ] Toggle child subitems only if current line is list item. + * [ ] Parent list item should be toggled depending on its child items. + * [ ] Make numbered list items toggleable too. + * [ ] Add highlighting to list item boxes. + * [ ] Add [ ] to the next list item created using o, O or . + +Parent items should change when their child items change. If not, use +|vimwiki_glr|. The symbol between [ ] depends on the percentage of toggled +child items (see also |g:vimwiki_listsyms|): > + [ ] -- 0% + [.] -- 1-33% + [o] -- 34-66% + [O] -- 67-99% + [X] -- 100% + +You can use |vimwiki_gln| and |vimwiki_glp| to change the "done" status of a +checkbox without a childitem. + +It is possible to toggle several list items using visual mode. But note that +instead of toggling every item individually, all items get checked if the +first item was unchecked and all items get unchecked if the first item was +checked. + +Use gl (see |vimwiki_gl|) to remove a single checkbox and +gL (see |vimwiki_gL|) to remove all checkboxes of the list the +cursor is in. + +You can mark an item as rejected ("won't do") with +|vimwiki_glx|. A rejected item will not influence the status of its parents. + + +============================================================================== +9. Tables *vimwiki-tables* + +Use the :VimwikiTable command to create a default table with 5 columns and 2 +rows: > + + | | | | | | + |---|---|---|---|---| + | | | | | | +< + +Tables are auto-formattable. Let's add some text into first cell: > + + | First Name | | | | | + |---|---|---|---|---| + | | | | | | +< + +Whenever you press , or leave Insert mode, the table is formatted: > + + | First Name | | | | | + |------------|---|---|---|---| + | | | | | | +< + +You can easily create nice-looking text tables, just press and enter new +values: > + + | First Name | Last Name | Age | City | e-mail | + |------------|------------|-----|----------|----------------------| + | Vladislav | Pokrishkin | 31 | Moscow | vlad_pok@smail.com | + | James | Esfandiary | 27 | Istanbul | esfandiary@tmail.com | +< + +To indent table indent the first row. Then format it with 'gqq'. + +You can specify the type of horizontal alignment for columns in the separator +using the ':' character. The default is left-align. > + + | Date | Item | Price | + |------------|:------:|--------:| + | yest | Coffee | $15.00 | + | 2017-02-13 | Tea | $2.10 | + | 2017-03-14 | Cake | $143.12 | +< + +============================================================================== +10. Diary *vimwiki-diary* + +The diary helps you make daily notes. You can easily add information into +Vimwiki that should be sorted out later. Just hit ww to create +a new note for today with a name based on the current date. + +To generate the diary section with all available links one can use +|:VimwikiDiaryGenerateLinks| or wi . + +Note: it works only for diary index file. + +Example of diary section: > + = Diary = + + == 2011 == + + === December === + * [[2011-12-09]] + * [[2011-12-08]] + + +See |g:vimwiki_diary_months| if you would like to rename months. + + +------------------------------------------------------------------------------ +Calendar integration *vimwiki-calendar* + +If you have Calendar.vim installed you can use it to create diary notes. +Just open calendar with :Calendar and tap on the date. A wiki file +will be created in the default wiki's diary. + +Get it from http://www.vim.org/scripts/script.php?script_id=52 + +See |g:vimwiki_use_calendar| option to turn it off/on. + + +------------------------------------------------------------------------------ +Markdown export + +If you use markdown as the syntax for your wiki, there is a rubygem available +at https://github.com/patrickdavey/vimwiki_markdown which you can use to +convert the wiki markdown files into html. + +Also, See |vimwiki-option-html_filename_parameterization| for supporting +functionality. + +============================================================================== +11. Anchors *vimwiki-anchors* + +Every header, tag, and bold text can be used as an anchor. To jump to it, use +a wikilink of the form > + [[file#anchor]] + +For example, consider the following file "Todo.wiki": > + = My tasks = + :todo-lists: + == Home == + - [ ] bathe my dog + == Work == + - [ ] beg for *pay rise* + == Knitting club == + === Knitting projects === + - [ ] a *funny pig* + - [ ] a *scary dog* + +Then, to jump from your index.wiki directly to your knitting projects, use: > + [[Todo#Knitting projects]] + +Or, to jump to an individual project, use this link: > + [[Todo#funny pig]] + +Or, to jump to a tag, use this link: > + [[Todo#todo-lists]] + +If there are multiple instances of an anchor, you can use the long form which +consists of the complete header hierarchy, separated by '#': > + [[Todo#My tasks#Knitting club#Knitting projects#scary dog]] + +If you don't feel like typing the whole stuff, type just [[Todo# and then +|i_CTRL-X_CTRL-O| to start the omni completion of anchors. + +For jumping inside a single file, you can omit the file in the link: > + [[#pay rise]] + + +------------------------------------------------------------------------------ +Table of Contents *vimwiki-toc* *vimwiki-table-of-contents* + +You can create a "table of contents" at the top of your wiki file. +The commando |:VimwikiTOC| creates the magic header > + = Contents = +in the current file and below it a list of all the headers in this file as +links, so you can directly jump to specific parts of the file. + +For the indentation of the list, the value of |vimwiki-option-list_margin| is +used. + +If you don't want the TOC to sit in the very first line, e.g. because you have +a modeline there, put the magic header in the second or third line and run +:VimwikiTOC to update the TOC. + +If English is not your preferred language, set the option +|g:vimwiki_toc_header| to your favorite translation. + +If you want to keep the TOC up to date automatically, use the option +|vimwiki-option-auto_toc|. + + +------------------------------------------------------------------------------ +Tagbar integration *vimwiki-tagbar* + +As an alternative to the Table of Contents, you can use the Tagbar plugin +(http://majutsushi.github.io/tagbar/) to show the headers of your wiki files +in a side pane. +Download the Python script from +https://raw.githubusercontent.com/vimwiki/utils/master/vwtags.py and follow +the instructions in it. + + +============================================================================== +12. Options *vimwiki-options* + +There are global options and local (per-wiki) options available to tune +Vimwiki. + +Global options are configured via global variables. For a complete list of +them, see |vimwiki-global-options|. + +Local options for multiple independent wikis are stored in a single global +variable |g:vimwiki_list|. The per-wiki options can be registered in advance, +as described in |vimwiki-register-wiki|, or may be registered on the fly as +described in |vimwiki-temporary-wiki|. For a list of per-wiki options, see +|vimwiki-local-options|. + +A note for Vim power users: +If you have an elaborated Vim setup, where you e.g. load plugins +conditionally, make sure the settings are set before Vimwiki loads (that is, +before plugin/vimwiki.vim is sourced). If this is not possible, try this +command after the Vimwiki settings are (re-) set: > + :call vimwiki#vars#init() + +------------------------------------------------------------------------------ +12.1 Registered Wiki *g:vimwiki_list* *vimwiki-register-wiki* + +One or more wikis can be registered using the |g:vimwiki_list| variable. + +Each item in |g:vimwiki_list| is a |Dictionary| that holds all customizations +available for a distinct wiki. The options dictionary has the form: > + {'option1': 'value1', 'option2': 'value2', ...} + +Consider the following: > + let g:vimwiki_list = [{'path': '~/my_site/', 'path_html': '~/public_html/'}] + +This defines one wiki located at ~/my_site/. When converted to HTML, the +produced HTML files go to ~/public_html/ . + +Another example: > + let g:vimwiki_list = [{'path': '~/my_site/', 'path_html': '~/public_html/'}, + \ {'path': '~/my_docs/', 'ext': '.mdox'}] + +defines two wikis: the first as before, and the second one located in +~/my_docs/, with files that have the .mdox extension. + +An empty |Dictionary| in g:vimwiki_list is the wiki with default options: > + let g:vimwiki_list = [{}, + \ {'path': '~/my_docs/', 'ext': '.mdox'}] + +For clarity, in your .vimrc file you can define wiki options using separate +|Dictionary| variables and subsequently compose them into |g:vimwiki_list|. > + let wiki_1 = {} + let wiki_1.path = '~/my_docs/' + let wiki_1.html_template = '~/public_html/template.tpl' + let wiki_1.nested_syntaxes = {'python': 'python', 'c++': 'cpp'} + + let wiki_2 = {} + let wiki_2.path = '~/project_docs/' + let wiki_2.index = 'main' + + let g:vimwiki_list = [wiki_1, wiki_2] +< + + +------------------------------------------------------------------------------ +12.2 Temporary Wiki *vimwiki-temporary-wiki* + + +The creation of temporary wikis allows you to create a wiki on the fly. + +If a file with a registered wiki extension (see |vimwiki-register-extension|) +is opened in a directory that: 1) is not listed in |g:vimwiki_list|, and 2) is +not a subdirectory of any such directory, then a temporary wiki is created and +appended to the list of configured wikis in |g:vimwiki_list|. + +In addition to Vimwiki's editing functionality, the temporary wiki enables: 1) +wiki-linking to other files in the same subtree, 2) highlighting of existing +wiki pages when |vimwiki-option-maxhi| is activated, and 3) HTML generation to +|vimwiki-option-path_html|. + +Temporary wikis are configured using default |vimwiki-local-options|, except +for the path, extension, and syntax options. The path and extension are set +using the file's location and extension. The syntax is set to Vimwiki's +default unless another syntax is registered via |vimwiki-register-extension|. + +Use |g:vimwiki_global_ext| to turn off creation of temporary wikis. + +NOTE: Vimwiki assumes that the locations of distinct wikis do not overlap. + + +------------------------------------------------------------------------------ +12.3 Per-Wiki Options *vimwiki-local-options* + + +*vimwiki-option-path* +------------------------------------------------------------------------------ +Key Default value~ +path ~/vimwiki/ + +Description~ +Wiki files location: > + let g:vimwiki_list = [{'path': '~/my_site/'}] +< + +*vimwiki-option-path_html* +------------------------------------------------------------------------------ +Key Default value~ +path_html '' + +Description~ +Location of HTML files converted from wiki files: > + let g:vimwiki_list = [{'path': '~/my_site/', + \ 'path_html': '~/html_site/'}] + +If path_html is an empty string, the location is derived from +|vimwiki-option-path| by adding '_html'; i.e. for: > + let g:vimwiki_list = [{'path': '~/okidoki/'}] + +path_html will be set to '~/okidoki_html/'. + + +*vimwiki-option-name* +------------------------------------------------------------------------------ +Key Default value~ +name '' + +Description~ +A name that can be used to create interwiki links: > + let g:vimwiki_list = [{'path': '~/my_site/', + \ 'name': 'My Wiki'}] + +Valid names can contain letters, numbers, spaces, underscores, and dashes. +If duplicate names are used the interwiki link will jump to the first wiki +with a matching name in |g:vimwiki_list|. + +The assigned wiki name will also be shown in the menu entries in GVim. +See the option |g:vimwiki_menu|. + + +*vimwiki-option-auto_export* +------------------------------------------------------------------------------ +Key Default value Values~ +auto_export 0 0, 1 + +Description~ +Set this option to 1 to automatically generate the HTML file when the +corresponding wiki page is saved: > + let g:vimwiki_list = [{'path': '~/my_site/', 'auto_export': 1}] + +This will keep your HTML files up to date. + + +*vimwiki-option-auto_toc* +------------------------------------------------------------------------------ +Key Default value Values~ +auto_toc 0 0, 1 + +Description~ +Set this option to 1 to automatically update the table of contents when the +current wiki page is saved: > + let g:vimwiki_list = [{'path': '~/my_site/', 'auto_toc': 1}] + + +*vimwiki-option-index* +------------------------------------------------------------------------------ +Key Default value~ +index index + +Description~ +Name of wiki index file: > + let g:vimwiki_list = [{'path': '~/my_site/', 'index': 'main'}] + +NOTE: Do not include the extension. + + +*vimwiki-option-ext* +------------------------------------------------------------------------------ +Key Default value~ +ext .wiki + +Description~ +Extension of wiki files: > + let g:vimwiki_list = [{'path': '~/my_site/', + \ 'index': 'main', 'ext': '.document'}] + +< +*vimwiki-option-syntax* +------------------------------------------------------------------------------ +Key Default value Values~ +syntax default default, markdown, or media + +Description~ +Wiki syntax. You can use different markup languages (currently: Vimwiki's +default, Markdown, and MediaWiki), but only Vimwiki's default markup will be +converted to HTML at the moment. + +To use Markdown's wiki markup: > + let g:vimwiki_list = [{'path': '~/my_site/', + \ 'syntax': 'markdown', 'ext': '.md'}] + +*vimwiki-option-links_space_char* +------------------------------------------------------------------------------ +Key Default value~ +links_space_char ' ' + +Description~ +Set the character (or string) used to replace spaces when creating a link. For +example, setting '_' would transform the string 'my link' into [[my_link]] and +the created file would be my_link.wiki. The default behavior does not replace +spaces. + +To set the space replacement character: > + let g:vimwiki_list = [{'path': '~/my_site/', + \ 'links_space_char': '_'}] +< + +*vimwiki-option-template_path* +------------------------------------------------------------------------------ +Key Default value~ +template_path ~/vimwiki/templates/ + +Description~ +Setup path for HTML templates: > + let g:vimwiki_list = [{'path': '~/my_site/', + \ 'template_path': '~/public_html/templates/', + \ 'template_default': 'def_template', + \ 'template_ext': '.html'}] + +There could be a bunch of templates: > + def_template.html + index.html + bio.html + person.html +etc. + +Each template could look like: > + + + + %title% + + + +
    + %content% +
    +

    Page created on %date%

    + + + +where + `%title%` is replaced by a wiki page name or by a |vimwiki-title| + `%date%` is replaced with the current date or by |vimwiki-date| + `%root_path%` is replaced by a count of ../ for pages buried in subdirs: + if you have wikilink [[dir1/dir2/dir3/my page in a subdir]] then + `%root_path%` is replaced by '../../../'. + `%wiki_path%` Path to current wiki-file.` The file path to the current wiki + file. For example, if you are on page a/b.wiki %wiki-path% contains + "a/b.wiki". Mostly useful if you want to link the to raw wiki page from + the rendered version. + + `%content%` is replaced by a wiki file content. + + +The default template will be applied to all wiki pages unless a page specifies +a template. Consider you have wiki page named 'Maxim.wiki' and you want apply +'person.html' template to it. Just add: > + %template person +to that page. + + +*vimwiki-option-template_default* +------------------------------------------------------------------------------ +Key Default value~ +template_default default + +Description~ +Setup default template name (without extension). + +See |vimwiki-option-template_path| for details. + + +*vimwiki-option-template_ext* +------------------------------------------------------------------------------ +Key Default value~ +template_ext .tpl + +Description~ +Setup template filename extension. + +See |vimwiki-option-template_path| for details. + + +*vimwiki-option-css_name* +------------------------------------------------------------------------------ +Key Default value~ +css_name style.css + +Description~ +Setup CSS file name: > + let g:vimwiki_list = [{'path': '~/my_pages/', + \ 'css_name': 'main.css'}] +< +or even > + let g:vimwiki_list = [{'path': '~/my_pages/', + \ 'css_name': 'css/main.css'}] +< +Vimwiki comes with a default CSS file "style.css". + + +*vimwiki-option-maxhi* +------------------------------------------------------------------------------ +Key Default value Values~ +maxhi 0 0, 1 + +Description~ +If on, wiki links to non-existent wiki files are highlighted. However, it can +be quite slow. If you still want it, set maxhi to 1: > + let g:vimwiki_list = [{'path': '~/my_site/', 'maxhi': 1}] + + +*vimwiki-option-nested_syntaxes* +------------------------------------------------------------------------------ +Key Default value Values~ +nested_syntaxes {} pairs of highlight keyword and Vim filetype + +Description~ +You can configure preformatted text to be highlighted with any syntax +available for Vim. +For example the following setup in your vimrc: > + let wiki = {} + let wiki.path = '~/my_wiki/' + let wiki.nested_syntaxes = {'python': 'python', 'c++': 'cpp'} + let g:vimwiki_list = [wiki] + +would give you Python and C++ highlighting in: > + {{{class="brush: python" + for i in range(1, 5): + print(i) + }}} + + {{{class="brush: c++" + #include "helloworld.h" + int helloworld() + { + printf("hello world"); + } + }}} + +or in: > + {{{c++ + #include "helloworld.h" + int helloworld() + { + printf("hello world"); + } + }}} + + {{{python + for i in range(1, 5): + print(i) + }}} + + +*vimwiki-option-automatic_nested_syntaxes* +------------------------------------------------------------------------------ +Key Default value~ +automatic_nested_syntaxes 1 + +Description~ +If set, the nested syntaxes (|vimwiki-option-nested_syntaxes|) are +automatically derived when opening a buffer. +Just write your preformatted text in your file like this > + {{{xxx + my preformatted text + }}} + +where xxx is a filetype which is known to Vim. For example, for C++ +highlighting, use "cpp" (not "c++"). For a list of known filetypes, type +":setf " and hit Ctrl+d. + +Note that you may have to reload the file (|:edit|) to see the highlight. + +Since every file is scanned for the markers of preformatted text when it is +opened, it can be slow when you have huge files. In this case, set this option +to 0. + + +*vimwiki-option-diary_rel_path* +------------------------------------------------------------------------------ +Key Default value~ +diary_rel_path diary/ + +Description~ +The path to the diary wiki files, relative to |vimwiki-option-path|. + + +*vimwiki-option-diary_index* +------------------------------------------------------------------------------ +Key Default value~ +diary_index diary + +Description~ +Name of wiki-file that holds all links to dated wiki files. + + +*vimwiki-option-diary_header* +------------------------------------------------------------------------------ +Key Default value~ +diary_header Diary + +Description~ +Name of the header in |vimwiki-option-diary_index| where links to dated +wiki-files are located. + + +*vimwiki-option-diary_sort* +------------------------------------------------------------------------------ +Key Default value Values~ +diary_sort desc desc, asc + +Description~ +Sort links in a diary index page. + + +*vimwiki-option-diary_caption_level* +------------------------------------------------------------------------------ +Key Default value~ +diary_caption_level 0 + +Description~ +Controls the presence of captions in the diary index linking to headers within +the diary pages. + +Possible values: +-1: No headers are read from the diary page. + 0: The first header from the diary page is used as the caption. + There are no sub-captions. + 1: Captions are created for headers of level 1 in the diary page. + 2: Captions are created for headers up to level 2 in the diary page. + etc. + +When the value is >= 1, the primary caption of each diary page is set to the +first header read from that page if it is the unique lowest-level header. + +*vimwiki-option-custom_wiki2html* +------------------------------------------------------------------------------ +Key Default value~ +custom_wiki2html '' + +Description~ +The full path to a user-provided script that converts a wiki page to HTML. +Vimwiki calls the provided |vimwiki-option-custom_wiki2html| script from the +command-line, using |:!| invocation. + +The following arguments, in this order, are passed to the script: + +1. force : [0/1] overwrite an existing file +2. syntax : the syntax chosen for this wiki +3. extension : the file extension for this wiki +4. output_dir : the full path of the output directory +5. input_file : the full path of the wiki page +6. css_file : the full path of the css file for this wiki +7. template_path : the full path to the wiki's templates +8. template_default : the default template name +9. template_ext : the extension of template files +10. root_path : a count of ../ for pages buried in subdirs + For example, if you have wikilink [[dir1/dir2/dir3/my page in a subdir]] + then this argument is '../../../'. +11. custom_args : custom arguments that will be passed to the conversion + (can be defined in g:vimwiki_list as 'custom_wiki2html_args' parameter, + see |vimwiki-option-custom_wiki2html_args|) + script. + +Options 7-11 are experimental and may change in the future. If any of these +parameters is empty, a hyphen "-" is passed to the script in its place. + +For an example and further instructions, refer to the following script: + + $VIMHOME/autoload/vimwiki/customwiki2html.sh + +An alternative converter was developed by Jason6Anderson, and can +be located at https://github.com/vimwiki-backup/vimwiki/issues/384 + +To use the internal wiki2html converter, use an empty string (the default). + + +*vimwiki-option-custom_wiki2html_args* +----------------------------------------------------------------------------- +Key Default value~ +custom_wiki2html_args '' + +Description~ +If a custom script is called with |vimwiki-option-custom_wiki2html|, additional +parameters can be passed using this option: > + let g:vimwiki_list = [{'path': '~/path/', 'custom_wiki2html_args': 'stuff'}] + + +*vimwiki-option-list_margin* +------------------------------------------------------------------------------ +Key Default value~ +list_margin -1 (0 for markdown) + +Description~ +Width of left-hand margin for lists. When negative, the current 'shiftwidth' +is used. This affects the appearance of the generated links (see +|:VimwikiGenerateLinks|), the Table of contents (|vimwiki-toc|) and the +behavior of the list manipulation commands |:VimwikiListChangeLevel| and the +local mappings |vimwiki_glstar|, |vimwiki_gl#| |vimwiki_gl-|, |vimwiki_gl-|, +|vimwiki_gl1|, |vimwiki_gla|, |vimwiki_glA|, |vimwiki_gli|, |vimwiki_glI| and +|vimwiki_i__|. + +Note: if you use Markdown or MediaWiki syntax, you probably would like to set +this option to 0, because every indented line is considered verbatim text. + + +*vimwiki-option-auto_tags* +------------------------------------------------------------------------------ +Key Default value Values~ +auto_tags 0 0, 1 + +Description~ +Set this option to 1 to automatically update the tags metadata when the +current wiki page is saved: > + let g:vimwiki_list = [{'path': '~/my_site/', 'auto_tags': 1}] + + +*vimwiki-option-auto_diary_index* +------------------------------------------------------------------------------ +Key Default value Values~ +auto_diary_index 0 0, 1 + +Description~ +Set this option to 1 to automatically update the diary index when opened. +See |:VimwikiDiaryGenerateLinks|: > + let g:vimwiki_list = [{'path': '~/my_site/', 'auto_diary_index': 1}] + + +*vimwiki-option-auto_generate_links* +------------------------------------------------------------------------------ +Key Default value Values~ +auto_generate_links 0 0, 1 + +Description~ +Set this option to 1 to automatically update generated links when the +current wiki page is saved: > + let g:vimwiki_list = [{'path': '~/my_site/', 'auto_generate_links': 1}] + + +*vimwiki-option-auto_generate_tags* +------------------------------------------------------------------------------ +Key Default value Values~ +auto_generate_tags 0 0, 1 + +Description~ +Set this option to 1 to automatically update generated tags when the +current wiki page is saved: > + let g:vimwiki_list = [{'path': '~/my_site/', 'auto_generate_tags': 1}] + + +*vimwiki-option-exclude_files* +------------------------------------------------------------------------------ +Key Default value Values~ +exclude_files [] list of file patterns to exclude + +Description~ +Set this option to a list of file patterns to exclude when checking or +generating links: > + let g:vimwiki_list = [{'path': '~/my_site/', 'exclude_files': ['**/README.md']}] + + +*vimwiki-option-html_filename_parameterization* +------------------------------------------------------------------------------ +Key Default value Values~ +html_filename_parameterization 0 0, 1 + +Description~ +This setting is for integration with the vimwiki_markdown gem. If this is set +to 1 it alters the check for generated html filenames to match what +vimwiki_markdown generates. This means that it prevents unnecessary +regeneration of HTML files. + +This setting also turns off the automatic deletion of files +in the site_html directory which don't match existing wiki files. + + +------------------------------------------------------------------------------ +12.4 Global Options *vimwiki-global-options* + + +Global options are configured using the following pattern: > + + let g:option_name = option_value + + +------------------------------------------------------------------------------ +*g:vimwiki_hl_headers* + +Highlight headers with =Reddish=, ==Greenish==, ===Blueish=== colors. + +Value Description~ +1 Use VimwikiHeader1 - VimwikiHeader6 group colors to highlight + different header levels. +0 Use |hl-Title| color for headers. +Default: 0 + + +------------------------------------------------------------------------------ +*g:vimwiki_hl_cb_checked* + +Highlight checked list items with a special color: + + * [X] the whole line can be highlighted with the option set to 1. + * this line is highlighted as well with the option set to 2 + * [ ] this line is never highlighted + +Value Description~ +0 Don't highlight anything. +1 Highlight only the first line of a checked [X] list item. +2 Highlight a complete checked list item and all its child items. + +Default: 0 + +The |group-name| "Comment" is used for highlighting. + +Note: Option 2 does not work perfectly. Specifically, it might break if the +list item contains preformatted text or if you mix tabs and spaces for +indenting. Also, indented headers can be highlighted erroneously. +Furthermore, if your list is long, Vim's highlight can break. To solve this, +consider putting > + au BufEnter *.wiki :syntax sync fromstart +in your .vimrc + +------------------------------------------------------------------------------ +*g:vimwiki_global_ext* + +Control the creation of |vimwiki-temporary-wiki|s. + +If a file with a registered extension (see |vimwiki-register-extension|) is +opened in a directory that is: 1) not listed in |g:vimwiki_list|, and 2) not a +subdirectory of any such directory, then: + +Value Description~ +1 make temporary wiki and append it to |g:vimwiki_list|. +0 don't make temporary wiki in that dir. + +If your preferred wiki extension is .txt then you can > + let g:vimwiki_global_ext = 0 +to restrict Vimwiki's operation to only those paths listed in g:vimwiki_list. +Other text files wouldn't be treated as wiki pages. + +Default: 1 + + +------------------------------------------------------------------------------ +*g:vimwiki_ext2syntax* *vimwiki-register-extension* + +A many-to-one mapping between file extensions and syntaxes whose purpose is to +register the extensions with Vimwiki. + +E.g.: > + let g:vimwiki_ext2syntax = {'.md': 'markdown', + \ '.mkd': 'markdown', + \ '.wiki': 'media'} + +An extension that is registered with Vimwiki can trigger creation of +a |vimwiki-temporary-wiki|. File extensions used in |g:vimwiki_list| are +automatically registered with Vimwiki using the default syntax. Extensions +mapped with this option will instead use the mapped syntax. + +Default: > + {'.md': 'markdown', '.mkdn': 'markdown', + \ '.mdwn': 'markdown', '.mdown': 'markdown', + \ '.markdown': 'markdown', '.mw': 'media'}}, + +Note: setting this option will overwrite the default values so include them if +desired. + +------------------------------------------------------------------------------ +*g:vimwiki_menu* + +Create a menu in the menu bar of GVim, where you can open the available wikis. +If the wiki has an assigned name (see |vimwiki-option-name|), the menu entry +will match the name. Otherwise, the final folder of |vimwiki-option-path| will +be used for the name. If there are duplicate entries the index number from +|g:vimwiki_list| will be appended to the name. + +Value Description~ +'' No menu +'Vimwiki' Top level menu "Vimwiki" +'Plugin.Vimwiki' "Vimwiki" submenu of top level menu "Plugin" +etc. + +Default: 'Vimwiki' + + +------------------------------------------------------------------------------ +*g:vimwiki_listsyms* + +String of at least two symbols to show the progression of todo list items. +Default value is ' .oOX'. + +The first char is for 0% done items. +The last is for 100% done items. + +You can set it to some more fancy symbols like this: +> + let g:vimwiki_listsyms = '✗○◐●✓' + + +------------------------------------------------------------------------------ +*g:vimwiki_listsym_rejected* + +Character that is used to show that an item of a todo list will not be done. +Default value is '-'. + +The character used here must not be part of |g:vimwiki_listsyms|. + +You can set it to a more fancy symbol like this: +> + let g:vimwiki_listsym_rejected = '✗' + + +------------------------------------------------------------------------------ +*g:vimwiki_folding* + +Enable/disable Vimwiki's folding (outline) functionality. Folding in Vimwiki +can use either the 'expr' or the 'syntax' |foldmethod| of Vim. + +Value Description~ +'' Disable folding +'expr' Folding based on expression (folds sections and code blocks) +'syntax' Folding based on syntax (folds sections; slower than 'expr') +'list' Folding based on expression (folds list subitems; much slower) +'custom' Allow folding options to be set by another plugin or a vim + configuration file + +Default: '' + +Limitations: + - Opening very large files may be slow when folding is enabled. + - 'list' folding is particularly slow with larger files. + - 'list' is intended to work with lists nicely indented with 'shiftwidth'. + - 'syntax' is only available for the default syntax so far. + +The options above can be suffixed with ':quick' (e.g.: 'expr:quick') in order +to use some workarounds to make folds work faster. + +------------------------------------------------------------------------------ +*g:vimwiki_list_ignore_newline* + +This is HTML related. +Convert newlines to
    s in multiline list items. + +Value Description~ +0 Newlines in a list item are converted to
    s. +1 Ignore newlines. + +Default: 1 + + +------------------------------------------------------------------------------ +*g:vimwiki_text_ignore_newline* + +This is HTML related. +Convert newlines to
    s in text. + +Value Description~ +0 Newlines in text are converted to
    s. +1 Ignore newlines. + +Default: 1 + + +------------------------------------------------------------------------------ +*g:vimwiki_use_calendar* + +Create new or open existing diary wiki-file for the date selected in Calendar. +See |vimwiki-calendar|. + +Value Description~ +0 Do not use calendar. +1 Use calendar. + +Default: 1 + + +------------------------------------------------------------------------------ +*g:vimwiki_create_link* + +Create target wiki page if it does not exist. See |:VimwikiFollowLink|. + +Value Description~ +0 Do not create target wiki page. +1 Create target wiki page. + +Default: 1 + + +------------------------------------------------------------------------------ +*g:vimwiki_markdown_link_ext* + +Append wiki file extension to links in Markdown. This is needed for +compatibility with other Markdown tools. + +Value Description~ +0 Do not append wiki file extension. +1 Append wiki file extension. + +Default: 0 + + +------------------------------------------------------------------------------ +*VimwikiLinkHandler* + +A customizable link handler can be defined to override Vimwiki's behavior when +opening links. Each recognized link, whether it is a wikilink, wiki-include +link or a weblink, is first passed to |VimwikiLinkHandler| to see if it can be +handled. The return value 1 indicates success. + +If the link is not handled successfully, the behavior of Vimwiki depends on +the scheme. "wiki:", "diary:" or schemeless links are opened in Vim. "file:" +and "local:" links are opened with a system default handler. + +You can redefine the VimwikiLinkHandler function in your .vimrc to do +something else: > + + function! VimwikiLinkHandler(link) + try + let browser = 'C:\Program Files\Firefox\firefox.exe' + execute '!start "'.browser.'" ' . a:link + return 1 + catch + echo "This can happen for a variety of reasons ..." + endtry + return 0 + endfunction + +A second example handles a new scheme, "vfile:", which behaves similar to +"file:", but the files are always opened with Vim in a new tab: > + + function! VimwikiLinkHandler(link) + " Use Vim to open external files with the 'vfile:' scheme. E.g.: + " 1) [[vfile:~/Code/PythonProject/abc123.py]] + " 2) [[vfile:./|Wiki Home]] + let link = a:link + if link =~# '^vfile:' + let link = link[1:] + else + return 0 + endif + let link_infos = vimwiki#base#resolve_link(link) + if link_infos.filename == '' + echomsg 'Vimwiki Error: Unable to resolve link!' + return 0 + else + exe 'tabnew ' . fnameescape(link_infos.filename) + return 1 + endif + endfunction + +------------------------------------------------------------------------------ +*VimwikiLinkConverter* + +This function can be overridden in your .vimrc to specify what a link looks +like when converted to HTML. The parameters of the function are: + - the link as a string + - the full path to the wiki file where the link is in + - the full path to the output HTML file +It should return the HTML link if successful or an empty string '' otherwise. + +This example changes how relative links to external files using the "local:" +scheme look like in HTML. Per default, they would become links relative to +the HTML output directory. This function converts them to links relative to +the wiki file, i.e. a link [[local:../document.pdf]] becomes +
    . Also, this function will copy document.pdf to the +right place. > + + function! VimwikiLinkConverter(link, source_wiki_file, target_html_file) + if a:link =~# '^local:' + let link_infos = vimwiki#base#resolve_link(a:link) + let html_link = vimwiki#path#relpath( + \ fnamemodify(a:source_wiki_file, ':h'), link_infos.filename) + let relative_link = + \ fnamemodify(a:target_html_file, ':h') . '/' . html_link + call system('cp ' . fnameescape(link_infos.filename) . + \ ' ' . fnameescape(relative_link)) + return html_link + endif + return '' + endfunction + +------------------------------------------------------------------------------ +*VimwikiWikiIncludeHandler* + +Vimwiki includes the content of a wiki-include URL as an image by default. + +A trial feature allows you to supply your own handler for wiki-include links. +The handler should return the empty string when it does not recognize or +cannot otherwise convert the link. A customized handler might look like this: > + + " Convert {{URL|#|ID}} -> URL#ID + function! VimwikiWikiIncludeHandler(value) + let str = a:value + + " complete URL + let url_0 = matchstr(str, g:vimwiki_rxWikiInclMatchUrl) + " URL parts + let link_infos = vimwiki#base#resolve_link(url_0) + let arg1 = matchstr(str, VimwikiWikiInclMatchArg(1)) + let arg2 = matchstr(str, VimwikiWikiInclMatchArg(2)) + + if arg1 =~ '#' + return link_infos.filename.'#'.arg2 + endif + + " Return the empty string when unable to process link + return '' + endfunction +< + +------------------------------------------------------------------------------ +*g:vimwiki_table_auto_fmt* + +Enable/disable table auto formatting after leaving INSERT mode. + +Value Description~ +0 Disable table auto formatting. +1 Enable table auto formatting. + +Default: 1 + + +------------------------------------------------------------------------------ +*g:vimwiki_table_reduce_last_col* + +If set, the last column separator will not be expanded to fill the cell. When +`:set wrap` this option improves how a table is displayed, particularly on +small screens. If |g:vimwiki_table_auto_fmt| is set to 0, this option has no +effect. + +Value Description~ +0 Enable table auto formating for all columns. +1 Disable table auto formating for the last column. + +Default: 0 + + +------------------------------------------------------------------------------ +*g:vimwiki_w32_dir_enc* + +Convert directory name from current 'encoding' into 'g:vimwiki_w32_dir_enc' +before it is created. + +If you have 'enc=utf-8' and set up > + let g:vimwiki_w32_dir_enc = 'cp1251' +< +then following the next link with : > + [[привет/мир]] +> +would convert utf-8 'привет' to cp1251 and create directory with that name. + +Default: '' + + +------------------------------------------------------------------------------ +*g:vimwiki_CJK_length* + +Use a special method to calculate the correct length of the strings with +double-wide characters (to align table cells properly). + +Value Description~ +0 Do not use it. +1 Use it. + +Default: 0 + +Note: Vim 7.3 has a new function |strdisplaywidth()|, so for users of an up to +date Vim, this option is obsolete. + + +------------------------------------------------------------------------------ +*g:vimwiki_dir_link* + +This option is about what to do with links to directories, like +[[directory/]], [[papers/]], etc. + +Value Description~ +'' Open 'directory/' using the standard netrw plugin. +'index' Open 'directory/index.wiki', create if needed. +'main' Open 'directory/main.wiki', create if needed. +etc. + +Default: '' (empty string) + + +------------------------------------------------------------------------------ +*g:vimwiki_html_header_numbering* + +Set this option if you want headers to be auto-numbered in HTML. + +E.g.: > + 1 Header1 + 1.1 Header2 + 1.2 Header2 + 1.2.1 Header3 + 1.2.2 Header3 + 1.3 Header2 + 2 Header1 + 3 Header1 +etc. + +Value Description~ +0 Header numbering is off. +1 Header numbering is on. Headers are numbered starting from + header level 1. +2 Header numbering is on. Headers are numbered starting from + header level 2. +etc. + +Example when g:vimwiki_html_header_numbering = 2: > + Header1 + 1 Header2 + 2 Header2 + 2.1 Header3 + 2.1.1 Header4 + 2.1.2 Header4 + 2.2 Header3 + 3 Header2 + 4 Header2 +etc. + +Default: 0 + + +------------------------------------------------------------------------------ +*g:vimwiki_html_header_numbering_sym* + +Ending symbol for |g:vimwiki_html_header_numbering|. + +Value Description~ +'.' Dot will be added after a header's number. +')' Closing bracket will be added after a header's number. +etc. + +With + let g:vimwiki_html_header_numbering_sym = '.' +headers would look like: > + 1. Header1 + 1.1. Header2 + 1.2. Header2 + 1.2.1. Header3 + 1.2.2. Header3 + 1.3. Header2 + 2. Header1 + 3. Header1 + + +Default: '' (empty) + + +------------------------------------------------------------------------------ +*g:vimwiki_valid_html_tags* + +Case-insensitive comma separated list of HTML tags that can be used in +Vimwiki. When converting to HTML, these tags are left as they are, while +every other tag is escaped. + +Default: 'b,i,s,u,sub,sup,kbd,br,hr' + + +------------------------------------------------------------------------------ +*g:vimwiki_user_htmls* + +Comma-separated list of HTML files that have no corresponding wiki files and +should not be deleted after |:VimwikiAll2HTML|. + +Default: '' + +Example: +Consider you have 404.html and search.html in your Vimwiki 'path_html'. +With: > + let g:vimwiki_user_htmls = '404.html,search.html' +they would not be deleted after |:VimwikiAll2HTML|. + + +------------------------------------------------------------------------------ +*g:vimwiki_conceallevel* + +In Vim 7.3 'conceallevel' is local to the current window, thus if you open a +Vimwiki buffer in a new tab or window, it would be set to the default value. + +Vimwiki sets 'conceallevel' to g:vimwiki_conceallevel every time a Vimwiki +buffer is entered. + +With default settings, Vimwiki conceals one-character markers, shortens long +URLs and hides markers and URL for links that have a description. + +Default: 2 + + +------------------------------------------------------------------------------ +*g:vimwiki_conceal_onechar_markers* + +Control the concealment of one-character markers. + +Setting 'conceal_onechar_markers' to 0 will show the markers, overriding +whatever value is set in |g:vimwiki_conceallevel| + +Default: 1 + + +------------------------------------------------------------------------------ +*g:vimwiki_conceal_pre* + +Conceal preformatted text markers. For example, +> + {{{python + def say_hello(): + print("Hello, world!") + }}} +> +would appear as simply +> + def say_hello(): + print("Hello, world!") +> +in your wiki file. + +Default: 0 + + +------------------------------------------------------------------------------ +*g:vimwiki_autowriteall* + +Automatically save a modified wiki buffer when switching wiki pages. Has the +same effect as setting the Vim option 'autowriteall', but it works for wiki +files only, while the Vim option is global. +Hint: if you're just annoyed that you have to save files manually to switch +wiki pages, consider setting the Vim option 'hidden' which makes that modified +files don't need to be saved. + +Value Description~ +0 autowriteall is off +1 autowriteall is on + +Default: 1 + + +------------------------------------------------------------------------------ +*g:vimwiki_url_maxsave* + +Setting the value of |g:vimwiki_url_maxsave| to 0 will prevent any link +shortening: you will see the full URL in all types of links, with no parts +being concealed. This option does not affect the concealing of wiki elements +such as bold, italic, wikilinks, etc. + +When positive, the value determines the maximum number of characters that +are retained at the end after concealing the middle part of a long URL. +It could be less: in case one of the characters /,#,? is found near the end, +the URL will be concealed up to the last occurrence of that character. + +Note: + * The conceal feature works only with Vim >= 7.3. + * When using the default |wrap| option of Vim, the effect of concealed links + is not always pleasing, because the visible text on longer lines with + a lot of concealed parts may appear to be strangely broken across several + lines. This is a limitation of Vim's |conceal| feature. + * Many color schemes do not define an unobtrusive color for the Conceal + highlight group - this might be quite noticeable on shortened URLs. + + +Default: 15 + + +------------------------------------------------------------------------------ +*g:vimwiki_diary_months* + +It is a |Dictionary| with the numbers of months and corresponding names. Diary +uses it. + +Redefine it in your .vimrc to get localized months in your diary: +let g:vimwiki_diary_months = { + \ 1: 'Январь', 2: 'Февраль', 3: 'Март', + \ 4: 'Апрель', 5: 'Май', 6: 'Июнь', + \ 7: 'Июль', 8: 'Август', 9: 'Сентябрь', + \ 10: 'Октябрь', 11: 'Ноябрь', 12: 'Декабрь' + \ } + +Default: +let g:vimwiki_diary_months = { + \ 1: 'January', 2: 'February', 3: 'March', + \ 4: 'April', 5: 'May', 6: 'June', + \ 7: 'July', 8: 'August', 9: 'September', + \ 10: 'October', 11: 'November', 12: 'December' + \ } + + +------------------------------------------------------------------------------ +*g:vimwiki_toc_header* + +A string with the magic header that tells Vimwiki where the Table of Contents +(see |vimwiki-toc|) is located in a file. You can change it to the +appropriate word in your mother tongue like this: > + let g:vimwiki_toc_header = 'Inhalt' + +The default is 'Contents'. + + +------------------------------------------------------------------------------ +*g:vimwiki_toc_header_level* + +The header level of the Table of Contents (see |vimwiki-toc|). Valid values +are from 1 to 6. + +The default is 1. + + +------------------------------------------------------------------------------ +*g:vimwiki_toc_link_format* + +The format of the links in the Table of Contents (see |vimwiki-toc|). + + +Value Description~ +0 Extended: The link contains the description and URL. URL + references all levels. +1 Brief: The link contains only the URL. URL references only + the immediate level. + +Default: 0 + + +------------------------------------------------------------------------------ +*g:vimwiki_map_prefix* + +A string which specifies the prefix for all global mappings (and some local +ones). Use it to avoid conflicts with other plugins. Note that it must be +defined before the plugin loads. > + let g:vimwiki_map_prefix = 'e' + +The default is 'w'. + + +------------------------------------------------------------------------------ +*g:vimwiki_auto_chdir* + +When set to 1, enables auto-cd feature. Whenever Vimwiki page is opened, +Vimwiki performs an |:lcd| to the root Vimwiki folder of the page's wiki. + + +Value Description~ +0 Do not change directory. +1 Change directory to root Vimwiki folder on opening page. + +Default: 0 + + +------------------------------------------------------------------------------ +*g:vimwiki_links_header* + +A string with the magic header that tells Vimwiki where the generated links +are located in a file. You can change it to the appropriate word in your +mother tongue like this: > + let g:vimwiki_links_header = 'Generierte Links' + +The default is 'Generated Links'. + + +------------------------------------------------------------------------------ +*g:vimwiki_links_header_level* + +The header level of generated links. Valid values are from 1 to 6. + +The default is 1. + + +------------------------------------------------------------------------------ +*g:vimwiki_tags_header* + +A string with the magic header that tells Vimwiki where the generated tags +are located in a file. You can change it to the appropriate word in your +mother tongue like this: > + let g:vimwiki_tags_header = 'Generierte Stichworte' + +The default is 'Generated Tags'. + + +------------------------------------------------------------------------------ +*g:vimwiki_tags_header_level* + +The header level of generated tags. Valid values are from 1 to 5. + +The default is 1. + + +------------------------------------------------------------------------------ +*g:vimwiki_markdown_header_style* + +The number of newlines to be inserted after a header is generated. Valid +values are from 0 to 2. + +The default is 1. + + +------------------------------------------------------------------------------ +*g:vimwiki_auto_header* + +Set this option to 1 to automatically generate a level 1 header when creating +a new wiki page. This option is disabled for the wiki index and the diary +index. Spaces replaced with |vimwiki-option-links_space_char| are reverted +back to spaces in the generated header, which will match the filename +except for the characters that were reverted to spaces. + +For example, with `links_space_char` set to `'_'` creating a link from the text +`foo bar link` would result in `[[foo_bar_link]]` and the file +`foo_bar_link.wiki`. The generated header would be `= foo bar link =` + +The default is 0. + + +------------------------------------------------------------------------------ +*g:vimwiki_key_mappings* + +A dictionary that is used to enable/disable various key mapping groups. To +disable a specific group set the value for the associated key to 0. +For example: > + + let g:vimwiki_key_mappings = + \ { + \ 'headers': 0, + \ 'text_objs': 0, + \ } + +To disable ALL Vimwiki key mappings use: > + + let g:vimwiki_key_mappings = { 'all_maps': 0, } + +The valid key groups and their associated mappings are shown below. + +`all_maps`: + Used to disable all Vimwiki key mappings. +`global`: + |vimwiki-global-mappings| that are defined when Vim starts. +`headers`: + Mappings for header navigation and manipulation: + |vimwiki_=|, |vimwiki_-|, |vimwiki_[[|, |vimwiki_]]|, |vimwiki_[=| + |vimwiki_]=|, |vimwiki_]u| , |vimwiki_[u| +`text_objs`: + |vimwiki-text-objects| mappings. +`table_format`: + Mappings used for table formatting. + |vimwiki_gqq|, |vimwiki_gww|, |vimwiki_gq1|, |vimwiki_gw1| + |vimwiki_|, |vimwiki_| +`table_mappings`: + Table mappings for insert mode. + |vimwiki_|, |vimwiki_| +`lists`: + Mappings for list manipulation. + |vimwiki_|, |vimwiki_gl|, |vimwiki_gL| |vimwiki_gln|, |vimwiki_glp| + |vimwiki_gll|, |vimwiki_gLl|, |vimwiki_glh|, |vimwiki_gLh|, |vimwiki_glr|, |vimwiki_gLr| + |vimwiki_glsar|, |vimwiki_gLstar|, |vimwiki_gl#|, |vimwiki_gL#|, |vimwiki_gl-|, |vimwiki_gL-| + |vimwiki_gl1|, |vimwiki_gL1|, |vimwiki_gla|, |vimwiki_gLa|, |vimwiki_glA|, |vimwiki_gLA| + |vimwiki_gli|, |vimwiki_gLi|, |vimwiki_glI|, |vimwiki_gLI|, |vimwiki_glx| +`links`: + Mappings for link creation and navigation. + |vimwiki_wi|, |vimwiki_|, |vimwiki_|, |vimwiki_| + |vimwiki_|, |vimwiki_|, |vimwiki_|, |vimwiki_| + |vimwiki_|, |vimwiki_wd|, |vimwiki_wr|, |vimwiki_| + |vimwiki_|, |vimwiki_+|, |vimwiki_| +`html`: + Mappings for HTML generation. + |vimwiki_wh|, |vimwiki_whh| +`mouse`: + Mouse mappings, see |vimwiki_mouse|. This option is disabled by default. + +The default is to enable all key mappings except the mouse: > + let g:vimwiki_key_mappings = + \ { + \ 'all_maps': 1, + \ 'global': 1, + \ 'headers': 1, + \ 'text_objs': 1, + \ 'table_format': 1, + \ 'table_mappings': 1, + \ 'lists': 1, + \ 'links': 1, + \ 'html': 1, + \ 'mouse': 0, + \ } + + +------------------------------------------------------------------------------ +*g:vimwiki_filetypes* + +A list of additional fileypes that should be registered to vimwiki files: > + + let g:vimwiki_filetypes = ['markdown', 'pandoc'] + +Would result in the filetype being set to `vimwiki.markdown.pandoc`. This can +be used to enable third party plugins such as custom folding. WARNING: this +option can allow other plugins to overwrite vimwiki settings and operation so +take care when using it. Any plugin that uses a set filetype will be enabled. + +The default is `[ ]` + +============================================================================== +13. Getting help *vimwiki-help* + +For questions, discussions, praise or rants there is a mailing list: +https://groups.google.com/forum/#!forum/vimwiki + +Also, there is the IRC channel #vimwiki on Freenode which can be accessed via +webchat: https://webchat.freenode.net/?channels=#vimwiki + +============================================================================== +14. Contributing & Bug reports *vimwiki-contributing* + +Your help in making Vimwiki better is really appreciated! +Any help, whether it is a spelling correction or a code snippet to patch -- +everything is welcomed. + +See CONTRIBUTING.md for info about how to file bugs etc. + +============================================================================== +15. Development *vimwiki-development* + +Homepage: http://vimwiki.github.io/ +Github: https://github.com/vimwiki/vimwiki/ +Vim plugins: http://www.vim.org/scripts/script.php?script_id=2226 +Old homepage: http://code.google.com/p/vimwiki/ + +Contributors and their Github usernames in roughly chronological order: + + - Maxim Kim (@habamax) as original author + - the people here: http://code.google.com/p/vimwiki/people/list + - Stuart Andrews (@tub78) + - Tomas Pospichal + - Daniel Schemala (@EinfachToll) as current maintainer + - Larry Hynes (@larryhynes) + - Hector Arciga (@harciga) + - Alexey Radkov (@lyokha) + - Aaron Franks (@af) + - Dan Bernier (@danbernier) + - Carl Helmertz (@chelmertz) + - Karl Yngve Lervåg (@lervag) + - Patrick Davey (@patrickdavey) + - Ivan Tishchenko (@t7ko) + - 修昊 (@Svtter) + - Marcelo D Montu (@mMontu) + - John Kaul + - Hongbo Liu (@hiberabyss) + - @Tomsod + - @wangzq + - Jinzhou Zhang (@lotabout) + - Michael Riley (@optik-aper) + - Irfan Sharif (@irfansharif) + - John Conroy (@jconroy77) + - Christian Rondeau (@christianrondeau) + - Alex Thorne (@thornecc) + - Shafqat Bhuiyan (@priomsrb) + - Bradley Cicenas (@bcicen) + - Michael Thessel (@MichaelThessel) + - Michael F. Schönitzer (@nudin) + - @sqlwwx + - Guilherme Salazar (@salazar) + - Daniel Trnka (@trnila) + - Yuchen Pei (@ycpei) + - @maqiv + - Dawid Ciężarkiewicz (@dpc) + - Drew Hays (@Dru89) + - Daniel Etrata (@danetrata) + - Keith Haber (@kjhaber) + - @beuerle + - Silvio Ricardo Cordeiro (@silvioricardoc) + - @blyoa + - Jonathan McElroy (@jonathanmcelroy) + - @PetrusZ + - Brian Gianforcaro (@bgianfo) + - Ben Burrill (@benburrill) + - Zhuang Ma (@mzlogin) + - Huy Le (@huynle) + - Nick Borden (@hcwndbyw) + - John Campbell (@johnmarcampbell) + - Petrus (@PetrusZ) + - Steven Stallion (@sstallion) + - Daniel Quomsieh (@DQuomsieh) + - Fredrik Arnerup (@farnerup) + - CUI Hao (@cuihaoleo) + - Benjamin Brandtner (@BenjaminBrandtner) + - @sreejith994 + - Raphael Feng (@raphaelfeng) + - Kasper Socha (@fte10kso) + - Nicolas Brailovsky (@nicolasbrailo) + - @BenMcH + - Stefan Huber (@shuber2) + - Hugo Hörnquist (@HugoNikanor) + - Rane Brown (@ranebrown) + - Patrik Willard (@padowi) + - Steve Dondley (@sdondley) + - Alexander Gude (@agude) + - Jonny Bylsma (@jbylsma) + - Shaedil (@Shaedil) + - Robin Lowe (@defau1t) + - Abhinav Gupta (@abhinav) + - Dave Gauer (@ratfactor) + - Martin Tourneboeuf (@tinmarino) + - Mauro Morales (@mauromorales) + - Valtteri Vallius (@kaphula) + - Patrick Stockwell (@patstockwell) + - Henry Qin (@hq6) + - Hugo Hörnquist + - Greg Anders + - Steven Schmeiser + - Monkin (@monkinco) + - @AresMegaGlobal + - Cesar Tessarin (@tessarin) + - Clément Bœsch (@ubitux) + - Dave Gauer + - Eric Langlois (@edlanglois) + - James Moriarty + - Lionel Flandrin (@simias) + - Michael Brauweiler (@rattletat) + - Michal Cizmazia (@cizmazia) + - Samir Benmendil (@Ram-Z) + - Stefan Lehmann (@stevesteve) + - @graywolf + - flex (@bratekarate) + +============================================================================== +16. Changelog *vimwiki-changelog* + + +Issue numbers starting with '#' are issues from +https://github.com/vimwiki/vimwiki/issues/, all others from +http://code.google.com/p/vimwiki/issues/list. They may be accessible from +https://github.com/vimwiki-backup/vimwiki/issues. + + +2.5 (2020-05-26)~ + +New:~ + * PR #787: |:VimwikiRenameFile| works for all directories: even + wiki_root/diary/2019-12-11.md if current file is wiki_root/dir1/file.md. + * Issue #764: fenced code blocks are properly supported for markdown + syntax i.e. more than 3 backticks, adds tilde support. + * PR #785: |:VimwikiGoto| completion works with part of filename and + nested directories + * Add test framework (vader, vint, vim-testbed) + * Issue #769: Set default values for |g:vimwiki_ext2syntax|. + * PR #735: Make list-toggling work properly even when code blocks are + embedded within the list in Markdown mode. + * PR #711: Allow forcing VimwikiAll2HTML with ! + * PR #702: Make remapping documentation more accessible to newer vim users + * PR #673: Add :VimwikiGoto key mapping. + * PR #689: Allow |vimwiki-option-diary_rel_path| to be an empty string. + * PR #683: Improve layout and format of key binding documentation in + README and include note about key bindings that may not work. + * PR #681: Prevent sticky type checking errors for old vim versions. + * PR #686: New option |g:vimwiki_key_mappings| that allow key mappings to + be enabled/disabled by groups. Key mappings are also no longer + overwritten if they are already defined. + * PR #675: Add option |vimwiki-option-name| to assign a per wiki name. + * PR #661: Add option |g:vimwiki_auto_header| to automatically generate + a level 1 header for new wiki pages. + * PR #665: Integration with vimwiki_markdown gem + https://github.com/patrickdavey/vimwiki_markdown + This provides the |vimwiki-option-html_filename_parameterization| + which alters the filenames vimiwiki checks against when running the + html conversion. It also disables the deleting of html files which + no longer match against a wiki file. + * PR #663: New option |g:vimwiki_conceal_onechar_markers| to control + whether to show or hide single-character format markers. + * PR #636: Wiki local option |vimwiki-option-exclude_files| which is + a list of patterns to exclude when checking or generating links. + * PR #644: Key mapping gnt to jump to the next open task. + * PR #643: Option |g:vimwiki_toc_link_format| to change how links are + formatted in the TOC. + * PR #641: Option |g:vimwiki_conceal_code_blocks| to conceal preformatted + text markers. + * PR #634: New options |g:vimwiki_links_header| and + |g:vimwiki_tags_header| to customize the title string of generated + sections. New option |g:vimwiki_links_header_level| and + |g:vimwiki_tags_header_level| which allow the header level (1-6) of the + generated links to be set. New option |g:vimwiki_markdown_header_style| + which specifies the nuber of newlines after the created header for + generated sections. + * PR #635: Wiki local options |vimwiki-option-auto_generate_links| and + |vimwiki-option-auto_generate_tags|. + * Wiki local option |vimwiki-option-links_space_char| to replace spaces + with a different character when creating a link. + * Allow increase/decrease header level to take a count. + * PR #637: Option |g:vimwiki_table_reduce_last_col| to not autoformat last + column of a table. + * PR #629: New option |g:vimwiki_toc_header_level| to set the desired + header level for the TOC. + * PR #616: Hex color codes are colored in HTML output. + * PR #573: Add HTML template variable %wiki_path% which outputs the path + of the current file being converted to HTML. + * PR #529: Option |g:vimwiki_markdown_link_ext| to include the extension + .md in generated links. + * PR #528: Add option |g:vimwiki_create_link| to prevent link creation + with . + * PR #498: Option |vimwiki-option-diary_caption_level| which adds captions + to the diary index based on headers. + * PR #377: Add horizontal alignment to tables. + * PR #202: Don't override or display errors for existing keymappings. + * PR #47: Optimize table formatting for large tables. + * PR #857: Make default template responsive + * PR #879: Generate links when diary & wiki dir are the same + +Changed:~ + * Issue #796: Rename |:VimwikiGenerateTags| to |:VimwikiGenerateTagLinks| + * Issue #638: Rename |:VimwikiDeleteLink| to |:VimwikiDeleteFile| + * Issue #638: Rename |:VimwikiRenameLink| to |:VimwikiRenameFile| + * For all three above the old commands still works but is deprecated and + * will be removed in later versions. + * Set default |vimwiki-option-list_margin| = 0 for markdown syntax. + * Modify horizontal rule (thematic-breaks) syntax for markdown. + +Removed:~ + * PR #698: Remove awa check triggering silent file edits. + * Options g:vimwiki_use_mouse and g:vimwiki_table_mappings. These are + still present in the code for backwards compatibility but have been + removed from the documentation and will be fully removed at a later + point. + +Fixed:~ + * Issue #90: |:VimwikiRenameFile| doesn't update links in diary. + * Issue #790: Allow tags before a header with markdown syntax. + * Issue #779: Vimwiki tags file meets ctags standard. + * Issue #781: Compatablity fixes for older versions of Vim. + * Issue #691: Allow |:VimwikiGoBackLink| to go back multiple times. + * Update MathJax CDN loading instructions. + * Issue #212: Don't treat comment characters within code blocks as + headers. + * Issue #420: Add error handling to |:VimwikiSearch| + * PR #744: Fix typo in vimwiki_list_manipulation + * Issue #715: s:clean_url is compatible with vim pre 7.4.1546 (sticky type + checking) + * Issue #729: Normalize links uses relative paths in diary pages for + Markdown syntax. This previously only worked for the default syntax. + * Disable spell check in code and math inline/blocks. + * Properly handle markdown image links `![]()` + * Issue #415: Expand iabbrev entries on . + * Issue #619: allow escaped characters in markdown links. + * Issue #240: Fix regex pattern for markdown '[]()' links + * Issue #685: Error message for invalid user options fixed. + * Issue #481: Allow surrounding URLs with '<' '>' + * Issue #237: |:VimwikiRenameFile| now works for Markdown syntax + * Issue #612: GVim menu displayed duplicate names. + * Issue #456: Omnicompletion of wikilinks under Windows. Note: this should + be considered a temporary fix until #478 is closed. + * Issue #654: Fix |:VimwikiShowVersion| command. + * PR #634: Removed extra newlines that were inserted before/after + generated links. + * Issue #543: Allow commands related to opening index files or diary pages + to take a count, modify keymapping behavior, and fix discrepancies in + the documentation. + * Issue #539: The option |g:vimwiki_url_maxsave| now only affects raw + URLs (wiki links are excluded). + * Issue #438: Fix creation of visually selected links on diary pages. + * Issue #404: Don't conceal strikethrough character in tables. + * Issue #318: Markdown syntax bold, italic, and italic/bold are now + rendered correctly. + * Issue #835: Pressing enter on the dash of a markdown list causes an error. + * Issue #876: E684: list index out of range: 0, when creating a link containing a `.`. + * Issue #803: |:VimwikiGenerateLinks| for subdirectory only + * Issue #776: Command [count]o can't repeat in vimwiki + + +2.4.1 (2019-02-20)~ +Fixed: + * Fix VimwikiShowVersion function. + * strikethrough `~` characters were not hidden within tables + * Update and format README.md and update screen shots + +2.4 (2019-03-24)~ + +New:~ + * Add the option |g:vimwiki_text_ignore_newline|. + * |g:vimwiki_listsyms| can have fewer or more than 5 symbols. + * glx on a list item marks a checkbox as won't do, see |vimwiki_glx|. + * Add the option |g:vimwiki_listsym_rejected| to set the character used + for won't-do list items. + * gln and glp change the "done" status of a checkbox, see |vimwiki_gln|. + * |:VimwikiSplitLink| and |:VimwikiVSplitLink| can now reuse an existing + split window and not move the cursor. + * Add 'aH' and 'iH' text objects, see |vimwiki-text-objects|. + * Add the keys |vimwiki_[[|, |vimwiki_]]|, |vimwiki_[=|, |vimwiki_]=| and + |vimwiki_]u| for navigating between headers. + * Add the command |:VimwikiMakeTomorrowDiaryNote|. + * |g:vimwiki_folding| has a new option 'custom'. + * Add the ':quick' option for faster folding, see |g:vimwiki_folding|. + * Add the %date placeholder, see |vimwiki-date|. + * Add the option |vimwiki-option-custom_wiki2html_args|. + * Add support for HTML-style comments when using markdown syntax. + * Made headings link to themselves in HTML output. + * Add |:VimwikiShowVersion| to check the version + +Removed:~ + * Remove the undocumented and buggy command :VimwikiReadLocalOptions + which allowed to store Vimwiki related settings in a local file. + * Remove the undocumented command :VimwikiPrintWikiState. + * For complicated reasons, Vimwiki doesn't clean up its settings anymore + if you change the filetype of a wiki buffer. + +Fixed:~ + * Make |vimwiki-option-automatic_nested_syntaxes| work also for markdown. + * Issue #236: Highlight math blocks as TeX math, not TeX. + * Issue #264: Don't overwrite mappings to i_ from other plugins. + * Fix an error where sometimes didn't work under Windows. + * Issue #302: |:VimwikiDiaryGenerateLinks| had issues with markdown. + * Issue #445: Better handling of |'autowriteall'| and |'hidden'|. + * Improve 'ah' and 'ih' text objects, see |vimwiki-text-objects|. + * Allow opening of links using Powershell. + * Allow any visual mode to be used with |vimwiki_+|. + * Markdown syntax for |vimwiki-toc| is used, when appropriate. + * Wikis can now be in subfolders of other wikis. + * Issue #482: |:VimwikiMakeDiaryNote| now uses the diary of the current wiki. + * Opening the diary and wikis from the menu works correctly now. + * Issue #497: Make |:VimwikiMakeDiaryNote| work outside a wiki buffer. + * Use markdown syntax in the diary when appropriate. + * Improve handling of errors on opening files. + * Update links when renaming a page with |:VimwikiRenameLink|. + * Fix losing the highlighting in various situations. + * Improved link normalisation. + * Various other minor fixes. + + +2.3 (2016-03-31)~ + +New:~ + * Add |:VimwikiMakeYesterdayDiaryNote| command + * Issue #128: add option |vimwiki-option-automatic_nested_syntaxes| + * Issue #192: Sort links in the list generated by |:VimwikiGenerateTags| + +Fixed:~ + * Issue #176: Fix issue when the wiki path contains spaces + * Also look for tags in wiki files in subdirectories + * Locate the .tags file correctly on Windows + * Issue #183: Fix HTML conversion of headers containing links + * Issue #64: create correct Markdown links when pressing CR on a word + * Issue #191: ignore headers inside preformatted text when creating the TOC + * Create the standard CSS file also if only one file is converted to HTML + * Fix #188: |vimwiki_+| on a raw url surrounds it with brackets + * various minor fixes + + +2.2.1 (2015-12-10)~ + +Removed:~ + * Removed the option g:vimwiki_debug, which probably nobody used. If you + want it back, file an issue at Github. + +Fixed:~ + * Issue #175: Don't do random things when the user has remapped the z key + * Don't ask for confirmation when following a URL in MacOS + * Always jump to the first occurrence of a tag in a file + * Don't move the cursor when updating the TOC + * Fix some issues with the TOC when folding is enabled + + +2.2 (2015-11-25)~ + +New:~ + * Support for anchors, see |vimwiki-anchors| + * in this context, add support for TOC, see |vimwiki-toc| + * add omni completion of wiki links (files and anchors) + * new local option |vimwiki-option-auto_toc| + * new global option |g:vimwiki_toc_header| + * Support for tags, see |vimwiki-syntax-tags| + * List editing capabilities, see |vimwiki-lists|: + * support for auto incrementing numbered lists + * more key maps for list manipulation, see |vimwiki-list-manipulation| + * improved automatic adjustment of checkboxes + * text objects for list items, see |vimwiki-text-objects| + * New command |:VimwikiCheckLinks| to check for broken links + * New global option |g:vimwiki_auto_chdir| + * New global option |g:vimwiki_map_prefix| + * Support for wiki links absolute to the wiki root + * Added the |VimwikiLinkConverter| function + * Issue #24: Basic support for remote directories via netrw + * Issue #50: in HTML, tables can now be embedded in lists + * When converting to HTML, show a message with the output directory + * Add auto completion for |:VimwikiGoto| + * Add Chinese Readme file + +Changed:~ + * Wiki files must not contain # anymore, because # is used to separate the + file from an anchor in a link. + * replace the function vimwiki#base#resolve_scheme() by + vimwiki#base#resolve_link() (relevant if you have a custom + |VimwikiLinkHandler| which used this function) + * The semantic of "file:" and "local:" links changed slightly, see + |vimwiki-syntax-links| for what they mean now + * The meaning of a link like [[/some/directory/]] changed. It used to be + a link to the actual directory /some/directory/, now it's relative to + the root of the current wiki. Use [[file:/some/directory/]] for the old + behavior. + +Removed:~ + * the %toc placeholder is now useless, use |vimwiki-toc| instead + * the global option g:vimwiki_auto_checkbox is now useless and removed + +Fixed:~ + * Issue 415: Disable folding if g:vimwiki_folding is set to '' + * Fix slowdown in Vim 7.4 + * Issue #12: Separate diaries from different wikis + * Issue #13: Fix :VimwikiRenameLink on links containing a dot + * Always jump to previous link on , not to beginning of link + * Issue #27: Fix on a visual selection sometimes not working + * |VimwikiBackLinks| now recognizes much more valid links + * Issue 424: make external links with #, % work under Linux + * Issue #39: don't htmlize stuff inside pre tags + * Issue #44: faster formatting of large tables + * Issue #52: Recognize markdown links when renaming wiki file + * Issue #54: Disable 'shellslash' on Windows to avoid problems + * Issue #81: Don't get stuck when converting a read-only file + * Issue #66: Better normalizing of links in diary + * Fix the menu in GVim, which was sometimes not shown correctly + * |VimwikiGenerateLinks| now also generates links for subdirectories + * Issue #93: Don't process placeholders inside preformatted text + * Issue #102: Add default values to some options like the doc says + * Issue #144: Fix bug with folds shortening on multibyte characters + * Issue #158: Detect the OS correctly + * |VimwikiGenerateLinks| now replaces a potentially existing old list + * Fix uneven indentation of list items with checkboxes in HTML + * Various small fixes + * Corrected website links in documentation. code.google is dead, long live + Github! + +2.1~ + + * Concealing of links can be turned off - set |g:vimwiki_url_maxsave| to 0. + The option g:vimwiki_url_mingain was removed + * |g:vimwiki_folding| also accepts value 'list'; with 'expr' both sections + and code blocks folded, g:vimwiki_fold_lists option was removed + * Issue 261: Syntax folding is back. |g:vimwiki_folding| values are + changed to '', 'expr', 'syntax'. + * Issue 372: Ignore case in g:vimwiki_valid_html_tags + * Issue 374: Make autowriteall local to vimwiki. It is not 100% local + though. + * Issue 384: Custom_wiki2html script now receives templating arguments + * Issue 393: Custom_wiki2html script path can contain tilde character + * Issue 392: Custom_wiki2html arguments are quoted, e.g names with spaces + * Various small bug fixes. + +2.0.1 'stu'~ + + * Follow (i.e. open target of) markdown reference-style links. + * Bug fixes. + + +2.0 'stu'~ + +This release is partly incompatible with previous. + +Summary ~ + + * Quick page-link creation. + * Redesign of link syntaxes (!) + * No more CamelCase links. Check the ways to convert them + https://groups.google.com/forum/?fromgroups#!topic/vimwiki/NdS9OBG2dys + * No more [[link][desc]] links. + * No more [http://link description] links. + * No more plain image links. Use transclusions. + * No more image links identified by extension. Use transclusions. + * Interwiki links + * More link schemes + * Transclusions + * Normalize link command. See |vimwiki_+|. + * Improved diary organization and generation. See |vimwiki-diary|. + * List manipulation. See |vimwiki-list-manipulation|. + * Markdown support. + * Mathjax support. See |vimwiki-syntax-math|. + * Improved handling of special characters and punctuation in filenames and + urls. + * Back links command: list links referring to the current page. + * Highlighting nonexisted links are off by default. + * Table syntax change. Row separator uses | instead of +. + * Fold multilined list items. + * Custom wiki to HTML converters. See |vimwiki-option-custom_wiki2html|. + * Conceal long weblinks. See g:vimwiki_url_mingain. + * Option to disable table mappings. See |g:vimwiki_table_mappings|. + +For detailed information see issues list on +http://code.google.com/p/vimwiki/issues/list + + +1.2~ + * Issue 70: Table spanning cell support. + * Issue 72: Do not convert again for unchanged file. |:VimwikiAll2HTML| + converts only changed wiki files. + * Issue 117: |:VimwikiDiaryIndex| command that opens diary index wiki page. + * Issue 120: Links in headers are not highlighted in vimwiki but are + highlighted in HTML. + * Issue 138: Added possibility to remap table-column move bindings. See + |:VimwikiTableMoveColumnLeft| and |:VimwikiTableMoveColumnRight| + commands. For remap instructions see |vimwiki_| + and |vimwiki_|. + * Issue 125: Problem with 'o' command given while at the of the file. + * Issue 131: FileType is not set up when GUIEnter autocommand is used in + vimrc. Use 'nested' in 'au GUIEnter * nested VimwikiIndex' + * Issue 132: Link to perl (or any non-wiki) file in vimwiki subdirectory + doesn't work as intended. + * Issue 135: %title and %toc used together cause TOC to appear in an + unexpected place in HTML. + * Issue 139: |:VimwikiTabnewLink| command is added. + * Fix of g:vimwiki_stripsym = '' (i.e. an empty string) -- it removes bad + symbols from filenames. + * Issue 145: With modeline 'set ft=vimwiki' links are not correctly + highlighted when open wiki files. + * Issue 146: Filetype difficulty with ".txt" as a vimwiki extension. + * Issue 148: There are no mailto links. + * Issue 151: Use location list instead of quickfix list for |:VimwikiSearch| + command result. Use :lopen instead of :copen, :lnext instead of :cnext + etc. + * Issue 152: Add the list of HTML files that would not be deleted after + |:VimwikiAll2HTML|. + * Issue 153: Delete HTML files that has no corresponding wiki ones with + |:VimwikiAll2HTML|. + * Issue 156: Add multiple HTML templates. See + |vimwiki-option-template_path|. Options html_header and html_footer are + no longer exist. + * Issue 173: When virtualedit=all option is enabled the 'o' command behave + strange. + * Issue 178: Problem with alike wikie's paths. + * Issue 182: Browser command does not quote url. + * Issue 183: Spelling error highlighting is not possible with nested + syntaxes. + * Issue 184: Wrong foldlevel in some cases. + * Issue 195: Page renaming issue. + * Issue 196: vim: modeline bug -- syn=vim doesn't work. + * Issue 199: Generated HTML for sublists is invalid. + * Issue 200: Generated HTML for todo lists does not show completion status + the fix relies on CSS, thus your old stylesheets need to be updated!; + may not work in obsolete browsers or font-deficient systems. + * Issue 205: Block code: highlighting differs from processing. Inline code + block {{{ ... }}} is removed. Use `...` instead. + * Issue 208: Default highlight colors are problematic in many + colorschemes. Headers are highlighted as |hl-Title| by default, use + |g:vimwiki_hl_headers| to restore previous default Red, Green, Blue or + custom header colors. Some other changes in highlighting. + * Issue 209: Wild comments slow down html generation. Comments are + changed, use %% to comment out entire line. + * Issue 210: HTML: para enclose header. + * Issue 214: External links containing Chinese characters get trimmed. + * Issue 218: Command to generate HTML file and open it in webbrowser. See + |:Vimwiki2HTMLBrowse|(bind to whh) + * NEW: Added wh mapping to call |:Vimwiki2HTML| + + +... + +39 releases + +... + +0.1~ + * First public version. + +============================================================================== +17. License *vimwiki-license* + +The MIT License +http://www.opensource.org/licenses/mit-license.php + +Copyright (c) 2008-2010 Maxim Kim + 2013-2017 Daniel Schemala + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + + + vim:tw=78:ts=8:ft=help diff --git a/.config/vim/bundle/vimwiki/doc/wiki.png b/.config/vim/bundle/vimwiki/doc/wiki.png new file mode 100644 index 0000000000000000000000000000000000000000..a8bac8d28c801fe7e25dabcceeca7d425d9d43a8 GIT binary patch literal 476675 zcmbTdV|Zj;w>Da_I#$O{I<{@w?%1~3Njgr)PIqjZ9otF8wr!kx-o4L<>pbVru4`7U zS!+#ejQbvA{ZvwrM1;qM2LJ$w(o$k70Kh*{Xdzf=(50~guLl75B4Z^gsw6EcO04AU zU~Xk=1^`I?OxA?aN(ABxd=8TvL6H)Zol%VDu!v}(LYl%eh@eS*WhRG2Z7x*%+a?aF zXQ|$AT#gyfqkQ@Y*8a5Rn|Ps06a+TSqiNuxz~jcD|CGze=Y&Vs<-5e>=jS0HPjxI& z=2l4`a6|E_$t1?`^E1jPB*0)abrc?q_(i1iK1-w&O)-2)2pT<9tE_+7TCc1>-CD1( zPFiM5r~?_m5;K%&29dW8eqTZA&#^bt1y@@xMw|l36Aj~vVBCQtjt%zI^Z&4=2y^ct zxn<2c>vl4ab-wXj&ezh9k{LEKZe@$(eEhT>`b>G_8<6_K%VkNbtrlEozSNxATA!bs z2JO^M&dPyg>=&^a0Y&2zp{aaXYWswNWFsIYy#3ymh(BGPq51{JzG zUo-Nq{TL>qfJ?h-Mg|2c4p6nF9p999qhK(5p-K;iObUNoOP}yvkK=C?c)AIAGDm>n zqd;p3fk{%PAvy=P6Qma3>-p%d929tAFM}zQHA+3`@R?sMm`q zLEaNdG@g_r4696FmGU|N6^*zRW*ZLa#-w2!v24J&;+>E9M9oHanFtZ(epDpDvo>bK z9e`z&wdnu#RpASn1S(lXYzrJ=D9je~6)t!mNd_v@dN&p|J83>AAq@RbdTAJ`Cj0w|G2@9m*c4$Iyf&Pp0T|s78GGgVB@jy$@Z) zTsM6aNvFcRB<3WP$iCE^6@?Xpe7eyb{|yqis`Pxn{pd+woZMUOVyG*^_d<%MFT4@i z0}956wPaeX-;IW9u__37%lh-nk31G=aDS%cjZ$IXfI1Ub{Im3|V6E|Q zg|8s^r0ua@I+w26uyG$}clSl(M~iJ>ZETG=H;Z^xCirXx6@+qq=? zqhMDX!tsd&5UrW(x;VAHTZHoT;7cfw9wspCVL1~Wi{_ABDt#&Z4PAm`9j+kcr_6yHL;0I^+O`2eFDyHgY>BB8 zej%DUop>aEhr1FZAPmDCXk{cfj^^^$ml+8wywF5D?Tci8V$8jX zgA?gwk9G@!-d|-;mdPQ6s~=DB9k`nzoZH3Mv`>D%fKRDBbUC<5$N=zErsR0}G|_Kl zYH04LNT`!N#iglNky7L=KOe-1p4f^|T_SEHXd^OzzW$_&(C;VQA^s`GLdl&7F6~54 zSQ@V;u_Cr2$)nIFcS6xgVv|5We6a`X%%d%0AX7ztNkK$rNGV8)tn5nNgb^TvFD{fW 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

    =mYM zbZP95U)(n%4D~{>fL_l{8VjFHo=ma%eOL|7{*i66D>5;GUEvdWyn@id>iC29>f68rP9o^^?b!PPQ#3)R(p*`x-_=Bnmmweh-hj zlm;E<0A-3DPk);xGGxX&{mk!WQbvnh#oEt8)uG?N{kI(Pn-6^0ZL7|#e}4gui%h$% z_*CfMa29_6?T!Rs!iY!V!U@mrA&`PP=2OKAREn)OU5W-v^A+OQV_S%ug_i&E+e70F z7|b6Kbt=l8WJhS#e#AUwPNblrZ2sFla|QoehU@4|#-Hlk3MNL}cT$pCzc2qkcTRj! z94=|N{q-j=bSgeBB$Jo@0xp%a@waiCo>PNeX$cvzeK-&-ZvP7&!=gXonWsSxP!N_V ze473Jvz{NvjqMYg<_}1D_4`)*W(3hk;K97FNLBpvmV_eETf=3qqs;gN4DMiTh!S#d}J@ z9Dz)wZU1EOOZ4}3A$F||vI{tvqyIht#m}O_6-CkfPV(Ou%!r=|cTDf{xzNA7x6g?b zdB2_zxVVbAOc76m)Hhw?zel(5Z-?2c9|MQ?#xrSKyNOLUy>u(SL@aR0UC{I`n z{po-H^PADQBFMrL@hMyQ(|LXl4{mUyxSGTNpIiC`;*P46xfT59^EiUs5|lmm;~!Ay zKd!BEBetEa)N3r`Uggf>`AK#rFREl=JVe{O4c)b8T%2$mJ&-&w6|e z=fAJ0%@py{^$KKMP(R@wf3Q1c93s!gtLwb3)}FrR`1^ZdT`v|jT)uw($gQ0)+%&$w zJmcXf? zdQ)(yYi+i-RTu_Q{#>digXw@P^6aWQ&;D|+xZn488@4R_{KPdqYM{ujDC;phvLqi- z<6oP1?lM_7rxrKQOVB}wsfu-9l(DwFu zEniepIgHh7QUr#hUI$4>vH_%%t!}`C0iOUejo83|*n~Si_M|C-H?sE`6Bq8|z|Zy< ziiSN<^be7lg&ddltMFGrMlF*SGi=$;l%eYVc;p7ZY~#^ONE`xW{Z=Aoan6zyi$kM$ zst=@i1YXO)tPkAp{UR%l?SKV!iypV5d?nkwH|9FZtT*gV@$dcbpSSoIk!lD^?%a#> z$q`liypijGWkeyC$hMju7^ZEJ3@UaZ32*iy;0&&vA&;H6#}CtWak%8PwRGw<43h4j z)V_&(MwQAP#_+r!%-w_Bka>XsiW&*=d2&M8$&MZLT^RD$j2K5bWEhMfUgG6_`LdBj zse2zux-p@TUw0hMgK94d$;Ae{Nn_KMasLg+m(dcq6VbnbmKP*EZ6$89sZlHWP7^;l z()iRRu=6DE`&;fRE$1$bFO3}R_X5Kqdh*S%Rc`07Y^?go@VoaSnuNa;loPWY6%LZ{ zU`9B~+jsiU;D@$hB2{>l0D9&jVZPw#YuTN9D3&IHD3kdiQ;r`t^T*ZF;wus0pPHYz zJB{Oyvx&HuPLK)lAL*4ij+;-+p+rtZs)$v+8KGDPnQJ7{s_fAH#h7@0p6D>8BXp<1 zcF2{0_d2EQRQ>h&cA^_MI$sj)&S;eLA$Vg37HGW(Js_N!=9%83I@58(D0QQGy2f^`%CNwVN@aGZx z@#Cv)Qe=@}SigM9Tu686$>%X|I+8kvq%&(-aC_7;Erq5P;-=oky0SQ%O!b(W_cz+R zq@}xNT-UI(fmi1*lli~jV2!lGdiScCYt zpnNL0Pq{#WoDz1!^3|QTiGXq9!dD?a1o!$cp~rz8Og+a3PQc&-l)KDgk$_qdfnUak zIXab5(|=zk$Y@RK&{Vw*NK4b_C*yO8Q3wgJVRzqt>zr# zObd9gFy5=5k$JlaB_MK7VE4U%-1NBB-&pBYjgN!Z4`2&W?Zy`RVJ4o_3~b4EgbP@d zQc;zqPZfQ__DVi_#z6*qx(H7`WX}Av9UkuP(?^I@U!dgV-Wi2yvMqm>=^H_&b$fqB zvMSPL#U*it^mC8hRu`cdg>k=;_EF<@hzr8qN@f@o9a0orex}SgFCa9}znL!cb)>j8Tq!PTTQ*SV=z|&@lmp z9k0)6Yv1*w5w>M#TDPy9U_#wE7|2<7%xvlikE_OfzpO$+pK!$rqQ5VP`3S6G>^Vy2b&_v8cZTbin{t@qz>_3x~XI@S#qxFN-a&Bm{*oT!!6a?^aTk`q3xVWb(F5q@*FAU9SQ6pqQ^~Kb1xub`aWb|zqDHgL?;@CXxBE~ci?vyhu5C6 z`@G0UWhc;{j0GT>9C;847>VGN;Y5zd$+HE013jRyNPxHp(p-)Cb|tm*AJ#rx;9M@Z zKD@*K*T?)k2DnhN6+$FlV6Y9N8Nl0kF)spy+`Qt(5GCAo-J|W( z=$s*>9TmJuU!WmlGpRz=AgIe^htq0v?^hvDg{LFVn~~6hRH6l*gJ*{y@ma60_{z#v z$xy0e!Tf(YNW{7S`E15<=`H}_psP+yZ{(j^ZmKE^hRE;6@9=|cDUO|9GQ;7024?BP zUdEVVXg>);9<%W2RiOON#PKYLEkkNmGzg%2zr#=3D2@cXbQ2V)J z0+JL0<~ehS5`M61n3xf~5uh{DhYj&ErLUqDFalPy0DB#S^zsOF2CRGQ>fF0k-%diu zwnW$ICT`blh3YV|flZL+U-ncR-+m!|CglC>$>Y}R$Y%S@2-GV1Ox^W>4yp~PM#Td&b*7o7dZmcSJB7ppl;v_7aVxRf@G)JU2P?ne9!ytX@@*J?SQ~d zQsE`>!Iu33WRjxTT&}VR!g_K|bt>&*d&>pB<0X(H(K@ue2GYlgI}Xkaa~&)Py57YN zb{!t^@m<;(IT(hQSRhPzTGwXBvnF{T&ToGqBle;<9(q2)U_qD4gGkfkjFV*`(2d>cKBvpj{|Xk$Pi$yf8C3 zxr*?~QEt6;w)>yc%r=EPxd1Cv100!VW$+j_XHm-lEDGE=svR zFS2Q&=E{=(@O>S0121X8(DJ_Cw8LmUL0%-av#IhZ1C=d>^DFD*f| z{Sj|O#-g2}Zmpz)E#<+lJWE}Jjox!5V4H15qZ&KJ%FV8CrtOMaKl9rz{hDq$w^HDN zQJJ!JbkPx-?62(#@7wrv(fK9+uxihy76781K6l5tjq+tL?!CW>#NkW~t|7{4M1yh~ zU#C!dNPpMgtAS{Ib8WqoH4Kw9nPD@;64X;Sv#-&A{wIi==KQ|=2_m6!Kd>Nam&T8M z>pnsmKeEr-sP%5uP$m)4B8dCnpcD=qjcjCB76uH*7>4zj)Ci zVp4&Bit&}%-Q zJo7Gcn<7ynXWxHuWPnrvaNsRG@%dl@d$h_daY1nOXr(2R4rCvoNLiH>5BZDr;+FSL z9h}BiRd8)xzThxe-CLgMiH>&*QnQe3y`=dS<$4a_pNe0O*(;6IGvfC z9GOn&#AWFyHrO}wcTQZTzH{*DzHU6v5o7zfr}WZ!JkleK$)dobe3Uo1xfSG)^2ZJ+jK%CJ2p>I691pEmOSH@W+2opi$zxOvNq zW`5m13GOY#mgm%Z=1C2?e0wKm#9#(lH|xD2RgOZUq|B)275F8v2esn#Y+YZJ39WktQ|e4VD(gQib7MdQ`*HZl?&a8QGX42Q*8|7f-LR+h zAlYXET{Lm)M9nodN!92dXb*9i6RPYoZc9WxH9CtL65@SsQo_$>9F}itD-j}u;UaR^odfT76h#6Njs*46`OzE_80g*^NACJV%se2xjn>R zPz!3<72OVhYM)u{p>u8@mG8=F32_~Mx@@ju++!p<)f_J=tyuAGqQq5=Do)`%Adq#o zzB^!P5X0iniO`YolitHwxE1go4RB1)t81ytI*(sjw zKep>0gi)5tggks7QY7NE$8m#*c(#7@vUv$uMlyV)T?lytrH3x7hLNJN%* zUYx!+Z4+?oL7o&+?73_Gf9-@OYOWrRlfh6)eLU9g2&p)Ei#jXST%!(WZ{}j#)CyAc ziw#O$E6*l7pO?}#aIyUGOCq%8uXXK=UE@WLncGK7eIz4R&vr#K@8OMLwl>do=z@8D z=dYcyO-v*C?%;*;z|;q@%#EENglC;u`*0?Hgc;^29G>WH)GPk5FV=2qHSOa(C%5@~ zg(DF;eo{lLK^rc%y)4p~TsXMyg%L>d%p#+bvR`~cQyrL%i&YZ{% z^H7XPQ;~G+D(4AbR>gD7?_~n`?2D{%CA=!V5J6#VZW58Kw*FVwGIULS;PY)#;1uVi zBNSmO%_HhXJ!nc}ivcAG0pfWMiYTFy>&DxY;YCcx;#MT*~^Ua$VwLWyY4KM{iN|$Y9+d&GpEM4D+-tCrOq8=YTr|-jY)B` zCw(S4lv_IX<+530Zpyw$R6n=Y!6)^RARaHwyF1Wn=^Z!gdno)$lHh4Be9WHXN9HS11!2tqXQ6 zgl?YJ@B02D*tqPdMt@w`^8S%=zIg=_=ku$M99geJ*M$y4E`qFsETA;Wzn-YvY;cx6 zXT86O`#Xz_YjbG#2o{NISzFZ;^WOJz2z#O(x=H@b^y_L^5ymJy>oK+?v(<9$A!`=q zt$CKgv_jKzGJ2C{#1fRpymh*uA$k~&D z*Ed#4eZBB<*9pEX;eJMHL4$XJ_AAv|(cD4!#2NwbR;#^_&xUxLPA?-f2}RCW`-3Jz zQ^FahKeM%VK&N2>GNh=3J;p7DOn-V|`)mmYrEZJ1&Hxd`@-JOKGx6iRf5K+}_KkB(g_gwKh`zDauN%rf$hSNUE6o{zYEY1b{ zYoch~cBRlK%k?@jlPC^O)k%G)n5{SXXg?;StIO4E;ugiTnI+#pLMn#5^%@-ugD}WCz zzv=4hOx(b*jmMKV%vdH3aV!=y<5yf5?Bp9R*VF#F!{?28yImHlQP+TtRi=9M7Bx+I z0nlc8g%h@uei^Msr6by!d-FgMQnYSK^L-N|<6?{zly*E)MOqcHdP zI^*3T%t6)}m3bhKm|cv&`7mXF@p%U zR3+=Rf?7^k%TNJ_A5-<0@7!68LK3GrLsBlIftbi!m^!be=&GIuKJq$!3;e} zQ?Y(z(b~RB3PBrZO*+aK7T>3!U&P3&$=PU*1@DdI#Q%K=FB205VV4Sj86LWRFI*+f znn#kYAiK0kzJvwUV;ZzgSIM&yBnf z6n!kBQj%NS^Kb-X6_~iu8k(1GPO`_5X6AxXo3YIQ;n1k1%fpf9q}Ca(pYpvCKFyZAzcblES1`=elYJr}~}9HEH)FPi1>5BdDKp=>CnYrm4fU=Sux>I`YTXdbKz6!D3luzCOG$E#v z4lTej|LjoUzNvTiEyuOkvq3?OELY`OP??1TkNKHQBem1mF`GqyV{kpJftn*x{;t=2 zGq@M%9f%(;Y>0dEOgpY-YB^D!i0 zo=b`#Jnoy(vU>I#Jv%zX8%wiVZ_z&}(Nz*=z8vXK!NF^9r+w()eU4v|xKT08xaCvl zj-WUcdyI`X{(Hv91m;*Az&15+qB7@A*4R^?JIruggGX+fGTGk6!L`dVew*osl+X!7 z9h>VtkkE3S&!5qi|B2;u3vyF$)2B1a{lh8712bq4Ey1g zo}#%GwVS%v_O_q3-nj34e(?Uu?(n|xo21-D0egGu`L3fyvi{4|8p=iB{N;+biq<&L z7Dep0`g3Q9t5H5*qzWdrZIVE_J2&}5 zzrL-sS3d}35W{fQdXiU6yN%~|omd`@NSm8P!os`VbP<}6J8W8Y zJ((QEbV1^71B(f3V#NAQjyq<~Pd2|PT(K!frjSrt+N1S}-|PX@KhTI-urff>`uoDv zzafEEdEkT@)Y4xhvQv}ZZ7W(Quox0~ExaN}XB{|h>>KDX2$&O4sJ@z_KD=7$4T})S z6*gUsaWaF}(=UG~h%BHtOSCD5s)64oMN zN>Wd~O}5@4k<}%hV}_%6i6^Vp0SD&THL0T~qv5FlPDvD*?GOnmL)A$nt^slYNVuYw z;LsBQ7VIg@*J**9!#Ft+c)3hCR-jZ9K=hl&{d;_G}eso?WG&k9=uQz0kvc zcYDkg;lHIK-mAY9Lp3wbB4Iz%J^T2_^(%dLOfYxTu;fvGSkB%W0o@cODDAzOU;QloN^@;s6mPNw8x9))hWBHJGdh9 zOa2+HygM4_vm^WVI`bhWiW=g`Yj;Y0ML6MqlAXcaZRBKmvb&(K92}g!L(sUIzA=b_ zRKA}un?d3AgH5uALT>p=mid~la=Gg_nv*XqvXomHiCQ|$YT0goO6HE;-~F=DlE!T` zn3jmWEs&5V=US}~B2l#C?$^+EbH75LM)vQJ$PiA}{(L%|!V3jBqGvIXl5-e_{qQ4O zE~@0w6+0S*82h3Qi!(?hIxs4K%0xf}bb|s#>u;4LOk|8m#1ZG7)KUw)Yu@fU?7Q>^ zx;=!PW1L9pT6D|~q7GX~8QAwkndd_OY|_(`I&WBG#WdU>*-bU2@) zV;L^wfulE2Y`+f~nG`uW%Qaz3i|^UjT8C(txIT}*U~Li^W?%d=%e4wz9X?^ z;HDPa;KOKh0Y6!K2$XY->OVK6eNO9O_u=QG>+8gKgv&iq$z*TNLQpOa zL23z}g`b=1kb<*q`wtL)byh~}%C5+sc|?R1>M5!)3VgcA|TnV)*q6Jkya z%Dc+6710}MTC}ZN!`Lt#%%@)pDPrZBWso@Azwrse9y~K?4!3vCjuFPdKFIJJ=gy3? z(8?Fl79A7F+TY$rJK*B7uE3q_dy)zTCa}4N7GOv?c*ws4pnh}n)1a5)Jx=mJ$-Wdb zlDQ3`k{bWerMQQXr=G^K0zg*~%^%}`ivLq)@1^h-^X)d)^ejrYV?9oz&Pl%B3*>cZAbYkd?DZH)+NWG>EL) zoU^)?#s_C9=V5@_XSse}UHClSgycx1h5o%_IRKw9!HINE~d}{?uJQdWe7FI?C|fVY#@( z>SUbv<|KHgijPbDs$$tkoIMDVxUy!q^ji9x9zI1EY%X&+npL{w1jj0?nd7MPYBn)4QP7DD({Td> z$?As$rT#oLc191q)EQa&4XyliX|)9wQoz30hF+R!zgcASyD=oe3iPuC3LB7Kn`VUI zzQqTfNcQW5DEb0Ctk)BLBkrebpRrF%$_cDU`AfcLOX3-x?7&}4vlo8a0Tac;Uz-na zRCvrHu3W>DA=r>(VhiY34iI5`L&?jek&&^+MKl660;+YhGcyhqQ2?wrgLWXct3Zbs z*fC@!;cv0oNmi+r*+v84*97B~4H)eho6!PkD=wz&&Y6j2t+%tFXiRNYB!K!m_TyLM zN<8cwR_M3I*tDZIf0Li~;Hk>LOGwT^O#W@%6(`Gt2cVxyzdGuM7c%wAat7{qwt_Bq zmZ-pL36OLyBQG71K-T&fbat(M*twCsAt-J!DQ7Zsiqsq!`0r$uw$g2WLsnAn4aaUd z9i+UZnd}bFomac%{8HqwJ4rmmP@uQf78xph2Aw|A7}Tll3YZn#X$!xCG|{nXzq#7N~RPK8UvVHzub z&f_lCQA2=H2eW=YJ%wWh3@~5NQDoXgr)2IBY-YD#W_ij~;nn@+@BG2y6lTy{l#DAz zU(-Vk8DLeBJ7t5|H$C=rUma@@PdB%eVhQ|u?T#=r6Wvl7Nl%$!mmTxjlY9Y&LNHK| z)sU;#hlIAn>*5)TD>K3VjCR>C28qY)nLhF}I}AR6&7g?s$&g5g9E&P{20i+KZIF3i)3mZO{6r!GeqfRHE(ww@~=Z=ccx=aaI<#QfXt zktK^;_C?^pGYjlnTxH(qaxFw=Q`-QzdiHL+>=4Y%n15m)ke%)MT1t}cZlN;}wnna& zW0P?zO$$Q3FV@DzsH?u8DSA8zfwhW{iV!dEQta!|TfX}jjx{^Ms7xc*)-9vJ99`7| zgSQF6!qDJc*m1DAJCR}8KbaPVd5T@tQvJI@-mrgD-DvK&Cism7{EQp_voki$s&cY_ zcq#J*51XPiJvI3YB3|j>RCYM`${c404nS->dZ3>m@>@OmpMy`_Qv4kSWS(6@i_`2% z*TVP>03^J=Z~f?h4D-qqTw29z;OLJ&omcHfh|lg>f21@Gsd_g)cOIMpjaJxcVp6@T zq*HMxh)re;k#J0V5*y0Pp8H6G^!LdRJ>MKre`f(SaSnGd(p=M*q-lNTshfNzDl`$# zO>?vHaQ)dr_J77QGvO^iwL++)(~i#{ZGQ%AUeTDq_to*4w=$@S0qFECJ4>D-B=%Jp z{rN_vf5L-ZiO37jg;j|OtwQvR{JE>2j;`aSMP2BVG^ftS6pxf3_?20zmfc+8==H6k z%ZVNecX|ZObj^Mp8bzJlPs@Ea5L8jPYQMikL3tD}*Z#zs`PsNhqJnujFOnt638QCU zD18Gl4@K=nO{0rMmKvTR@M4YVk|@lmWm z+yl3(@7Q%e347Tvt6u}5sJn&xq3iorp9M>fvrBL9L1?~F^*JC<6$FHYlg64mg706E zzx%=5WsT%zcngGDE*9B#PF)z-$=}Glv6K93b-Mliac9M;Ax9+ffc4qb)o?6C;Zyg# z_Bw2=$JGCOSCl|q9K_VLh4YmcfpAR}?-$pJs^u|fkyb&C2#rg15S}BNxVlvTf|VJy zR94AM;Y*4!TxW+M`2LYgF0lr4b#3J|lha&*pGpJIJ&bIPu4ekD8H41W+l6JX61d0g zrGuB*e8LB*_FOn1M!%=%FTkeu5m|V6Ij2Du60~w{;nbdeE!j{+uuy#A@nye{+$Niy z#hD07bCNQa9QQw~@ozmG%=7}=lxMd1U2X#0*vmI+fTEka&0fmn9F(%Sj!L9ua*iy5RUWjyMr+A2u$*YKk zEotdq;^w^@D9g^g$r@v_LE=yD4pohwlc@V8}l)iWDD?LYL zcfRmAEj$lHGX^M7Rvnzb+>PFcD(${|{~79gk)IzJC)H(om>W zC?akoLc^*=l##t9Gb4L%8c1ZX5EP2=R~nr2SHo@y74N?$mguXGrs%Z`r>+QI0F@5;cHu5}7W4&m(OMsa>; zm<&DHHnG|sn6+>kMb)$i!zpsTTQ=4n2ZZ7tt9b}N?4u>PK8{Xy9y=wLyvv8%n=K>S zmV3Ut=PdP!tby#q)8Om%#)cfB=dP4oR=oFIH}$K>%jbba?DwC0S1FwDzh1kf`#3lQ zJtPwBg{Ix4CzsNb-dw+py=^`?VLrcQJ~W{+u^YLydpDzQboo}lWxBa4#^6rlj8lcI zc=S$_wXNd>Te{kEhgx6-w!_)6Amqh6dHsHG%=(k^=%MUF{@**h^nGvIJKij;Q8q>7 zj}Ox`{R)vM-npI=`75U^(42RKlgQv2nVXDAH6up;1vD+Gol#+oyfHBlGE5d7$Tih~$~nC&57X!bbuORnkR* z#`9B_g0#y4TBAI(L`U)YeB=-ksyXcin^~p+c6JdIhXq&|SrD3%kKJHtGg*w>q0N!et{QiN}!H%qsz*kp` zs71)M&c%evqT(4++yLTMr18j<6P~qPF&zfmHlMs%ol(y9_|%n)c9Wl6@AM>XJytYB z0$3A>I-8)ZQ($LOqzMpv3mM1lOk;+WhsKOpf0>Hookt{z?luyUT_(N2lc^`8=n-hb zYPS>1z;k3|;8G)LvWF#cc3~H|9ZkHemM!}cc#|#f$>J>dOtr3|)ynKvZ4rVdk zRMZUEnugqEtEH-t>$ClvU|{E_$Md)L(D#`A15 z8$Zw0Snu?07m9g?(i>(92KxXkSs(kuurxI!S>1C$Mp%kAhA$~uZPnGXA@G{Ewh&vM zENfm!(shL{Zgqs34H8;{c`9%EP+3QjGiESCfv}5C#UQ((?(?Gn{Pi&<(b<%{-&PC2 z28GYWC)GT?aD@2EsgI;&X-OH34}6QNUjfZ=y{b?T)0pf$dBr95MzXk}YLd8ikks?U zX+hi8Rr0a5S!f?-^%94a*R@|CJ|^doTTvQf4fyKOI+M=$zR&2JbHD=B33$Rq#6q8v zp7m+hzK&B%AM^mHQ!^uuT3@d@fZmK{b#@K*%(q&f{;4=#-J2CPeN zrzJk>BJGvdA%~D|>)nBsfz{GnN^Xg!PkT6Hw$Aez4!M-n3lZ6NPK_hGmFruS1sQZ{ zCx+%QO#!ODT_3Q&Yn@h}V=P1X`n)49&5WNGKq>GsYu-DsbP18An|hdzD0SuOy~|ug z{B&}gNP9*lM%pKPtN8W6RqMIFnZ-^ALwx47! zG6|$&EBew_XZ{LwY6SC(x#?W2i#kPumL(u)AgC54>XE54yB}QVSFm;&F9%K6N7MS* z!_t=6te53f%s0(!JEld+wq53|)CbpJydfKzCR~WTWo{;=GA_)v9K`Rl$duA&UUs`3xjq70suV#G?`5~EhH z9H#10cXo{167^BVoqFWIrsA{6_i~*oI66by{Jca8d-;YQo8sM@+cCpqE1m*4hTPGB8#FLQ3#RqZF4n%CDtt9g1F1kF}hR z6BmYW3kwB$8E_;BMQpxPei?rQq zr*>X!dYl%&j!1Aq6I3{c;NTeMV%{aH&kG+ow>Cd`=kYco(II<#^3RbN<8<`;PkFVF zqbO$G+H?PTQoBPgvX$8GHRPCSczxjP06eeG8fdt5GrkeYQo==L0*g z;?-`At-eNGzjdeiz{`*%g=d~37-sOFD*;I;F5wZlbUtqiqVWqA2w_!y48*dg*Hp%O zFvII3zPF30#qRbd7Tj*QpeK}p?8wvVZ%$J&&0>R#Ij$aJF%YN{tP-ux>`?pd~W*-a)^zirB@XT)iAHSbOjy$ONgnEYkKj^vy`yB0iI_sZV z>VMz*pH(N&gnZFuSrNPgKX?XtF)r>tPyY!0+LL9Ob4-S-pSJQG{;%)wpC2tCP6Y8q zzsB$21}B2Qe|$8(=%ZCV?VC`Ln}n~;^+yn$z8Z>X{%)CLIk}GoQvTi3mTZT2+GVl& z!S=uwCWWtR=;Cov3ZHBT@t;r7ZVVp&1pPtG0JJ0^R2^8!2fpc8G`yvq=iK(k zWIr!~bOM(&$#pJ;wo3_RG^ zVRx*Jt8VtZWypl-T;U+_IZwo4be7976j8qqYAJfS^hKc=nb1nPj3=`xJR6J;JhXlH zDu9JYtMfjT6xRUJA~(XxB-4CP#odgcv{=Y4nVs;3@$o_Q^08<(yV1=uZxGhP zy~BU^;#;)f?zqm`u^!vM^k`1w7o9|jMiv0P`Gx{JHf@dl5vKFA)HXpjMb1@7pok!U z7{;a@f1nrtz=e#=YNo3x6%717b@JPn2OmYLo=?>ks>% zz^B5me0b{AU#IN9){wxHQ}wS#Q!xHH%dyL-W38F~w6NdLRnzPL&1*^ug*)*2V2XcWtE-&W zGsF8O%ABT!2t!eApfP-@269^gg0sR#P$%9nNX>d^A~G+7u&EEXcBxvcw!@lr+wr=i z-$vJ-qbu>8h3GO0E%5E(Lu4Hg1Z&a$qqhCet^JQxOLGeD)HBnR?7&?NkilKV5IB;p zU2^~~ldHjyW-cgNjdB3GIr2uE_BR~RFHTxQdx3ahce)bMX&{p*VTG^IM14~@ilU-1 z$Q%W}7(1B`1&O9J*tk*LQOQ(y`vI?)t!Ewb;80)=-_8870c^dyCR?S@R}BkhQ9ge$ z;)b@DEkH$0Am>r@dtK7{MVcW8nv_RMVDJzL;-3~OE2l`WcOSf7g(TM-N(ScMpW~=S zy1P2V)vt`n2xp9U%eR-r%t1;`dBK_+nfPK3ABdc9XB7iWf%JF&bDG&TUoJxs(mtGP zehnM0uhT7Ft&lN;;BQ`;i$E~)L?4CZ9(bZM(EbSy_v@IUs_rCI5X9q!2pL;v!spSv+;M9U_*S z@Aa?9uI%G(GclIK~!DEu%^(rMw?p{2^H5~wAkBeW^VUd)>*ZyeK zm8wYU{}9!KdNlh!mB1zYH-lgldNqic%;*w~8GLxTScLTrIz+<4kI*t@7(uyWzf;;!u zcxKcwYgT1j=s_P^Z#Ba(7qlI@WTWxxMNjQDooAQ=lnE5ToM2v_P?oyc>g#l-SfHyJ z#B6u(V$(%tc|iYfO*ykKT<I+SGAGpZ0ldG7p!Tg#1?OXcbGGo1s4EU%Af7>L5SSLy zC*^}_AbWhFGUEcfG|CoU9P!8|1&V^M-0;4U__(Y>riN=T1blbPUBUfPbpNUdcY}zQ z5Yv3~!0ylzj=4(Ua`Cpsbzb{5&TRZ78UthLMDesxVk7{*V%Q)<@gajyfx}DMZYi%t zXaeT#Rji(O?N_JC3(c)Y9}v1A4Co@THyL0YF7A70AoLsNn_a&m{Qj7)0U@3S-f^yf zh46!q^Qb^fGh{2N%ftyb`<}Z%&J{mJP8DFTbZ%`S}Jx!e{4FtgQ;0W񈟥 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 literal 0 HcmV?d00001 diff --git a/.config/vim/bundle/vimwiki/ftplugin/vimwiki.vim b/.config/vim/bundle/vimwiki/ftplugin/vimwiki.vim new file mode 100644 index 0000000..d14201c --- /dev/null +++ b/.config/vim/bundle/vimwiki/ftplugin/vimwiki.vim @@ -0,0 +1,701 @@ +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 +" Vimwiki filetype plugin file +" Home: https://github.com/vimwiki/vimwiki/ + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 " Don't load another plugin for this buffer + + + +setlocal commentstring=%%%s + +if vimwiki#vars#get_global('conceallevel') && exists('+conceallevel') + let &l:conceallevel = vimwiki#vars#get_global('conceallevel') +endif + +" This is for GOTO FILE: gf +execute 'setlocal suffixesadd='.vimwiki#vars#get_wikilocal('ext') +setlocal isfname-=[,] + +exe 'setlocal tags+=' . escape(vimwiki#tags#metadata_file_path(), ' \|"') + + + +function! Complete_wikifiles(findstart, base) abort + if a:findstart == 1 + let column = col('.')-2 + let line = getline('.')[:column] + let startoflink = match(line, '\[\[\zs[^\\[\]]*$') + if startoflink != -1 + let s:line_context = '[' + return startoflink + endif + if vimwiki#vars#get_wikilocal('syntax') ==? 'markdown' + let startofinlinelink = match(line, '\[.*\](\zs[^)]*$') + if startofinlinelink != -1 + let s:line_context = '[' + return startofinlinelink + endif + endif + let startoftag = match(line, ':\zs[^:[:space:]]*$') + if startoftag != -1 + let s:line_context = ':' + return startoftag + endif + let s:line_context = '' + return -1 + else + " Completion works for wikilinks/anchors, and for tags. s:line_content + " tells us which string came before a:base. There seems to be no easier + " solution, because calling col('.') here returns garbage. + if s:line_context ==? '' + return [] + elseif s:line_context ==# ':' + " Tags completion + let tags = vimwiki#tags#get_tags() + if a:base !=? '' + call filter(tags, + \ 'v:val[:' . (len(a:base)-1) . "] == '" . substitute(a:base, "'", "''", '') . "'" ) + endif + return tags + elseif a:base !~# '#' + " we look for wiki files + + if a:base =~# '\m^wiki\d\+:' + let wikinumber = eval(matchstr(a:base, '\m^wiki\zs\d\+')) + if wikinumber >= vimwiki#vars#number_of_wikis() + return [] + endif + let prefix = matchstr(a:base, '\m^wiki\d\+:\zs.*') + let scheme = matchstr(a:base, '\m^wiki\d\+:\ze') + elseif a:base =~# '^diary:' + let wikinumber = -1 + let prefix = matchstr(a:base, '^diary:\zs.*') + let scheme = matchstr(a:base, '^diary:\ze') + else " current wiki + let wikinumber = vimwiki#vars#get_bufferlocal('wiki_nr') + let prefix = a:base + let scheme = '' + endif + + let links = vimwiki#base#get_wikilinks(wikinumber, 1, '') + let result = [] + for wikifile in links + if wikifile =~ '^'.vimwiki#u#escape(prefix) + call add(result, scheme . wikifile) + endif + endfor + return result + + else + " we look for anchors in the given wikifile + + let segments = split(a:base, '#', 1) + let given_wikifile = segments[0] ==? '' ? expand('%:t:r') : segments[0] + let link_infos = vimwiki#base#resolve_link(given_wikifile.'#') + let wikifile = link_infos.filename + let syntax = vimwiki#vars#get_wikilocal('syntax', link_infos.index) + let anchors = vimwiki#base#get_anchors(wikifile, syntax) + + let filtered_anchors = [] + let given_anchor = join(segments[1:], '#') + for anchor in anchors + if anchor =~# '^'.vimwiki#u#escape(given_anchor) + call add(filtered_anchors, segments[0].'#'.anchor) + endif + endfor + return filtered_anchors + + endif + endif +endfunction + +setlocal omnifunc=Complete_wikifiles + + + +" settings necessary for the automatic formatting of lists +setlocal autoindent +setlocal nosmartindent +setlocal nocindent +setlocal comments="" +setlocal formatoptions-=c +setlocal formatoptions-=r +setlocal formatoptions-=o +setlocal formatoptions-=2 +setlocal formatoptions+=n + +let &formatlistpat = vimwiki#vars#get_syntaxlocal('rxListItem') + + +" ------------------------------------------------ +" Folding stuff +" ------------------------------------------------ + +function! VimwikiFoldListLevel(lnum) abort + return vimwiki#lst#fold_level(a:lnum) +endfunction + + +function! VimwikiFoldLevel(lnum) abort + let line = getline(a:lnum) + + " Header/section folding... + if line =~# vimwiki#vars#get_syntaxlocal('rxHeader') && !vimwiki#u#is_codeblock(a:lnum) + return '>'.vimwiki#u#count_first_sym(line) + " Code block folding... + elseif line =~# vimwiki#vars#get_syntaxlocal('rxPreStart') + return 'a1' + elseif line =~# vimwiki#vars#get_syntaxlocal('rxPreEnd') + return 's1' + else + return '=' + endif +endfunction + + +" Constants used by VimwikiFoldText +" use \u2026 and \u21b2 (or \u2424) if enc=utf-8 to save screen space +let s:ellipsis = (&encoding ==? 'utf-8') ? "\u2026" : '...' +let s:ell_len = strlen(s:ellipsis) +let s:newline = (&encoding ==? 'utf-8') ? "\u21b2 " : ' ' +let s:tolerance = 5 + + +" unused +function! s:shorten_text_simple(text, len) abort + let spare_len = a:len - len(a:text) + return (spare_len>=0) ? [a:text,spare_len] : [a:text[0:a:len].s:ellipsis, -1] +endfunction + + +" s:shorten_text(text, len) = [string, spare] with "spare" = len-strlen(string) +" for long enough "text", the string's length is within s:tolerance of "len" +" (so that -s:tolerance <= spare <= s:tolerance, "string" ends with s:ellipsis) +function! s:shorten_text(text, len) abort + " returns [string, spare] + " strlen() returns lenght in bytes, not in characters, so we'll have to do a + " trick here -- replace all non-spaces with dot, calculate lengths and + " indexes on it, then use original string to break at selected index. + let text_pattern = substitute(a:text, '\m\S', '.', 'g') + let spare_len = a:len - strlen(text_pattern) + if (spare_len + s:tolerance >= 0) + return [a:text, spare_len] + endif + " try to break on a space; assumes a:len-s:ell_len >= s:tolerance + let newlen = a:len - s:ell_len + let idx = strridx(text_pattern, ' ', newlen + s:tolerance) + let break_idx = (idx + s:tolerance >= newlen) ? idx : newlen + return [matchstr(a:text, '\m^.\{'.break_idx.'\}').s:ellipsis, newlen - break_idx] +endfunction + + +function! VimwikiFoldText() abort + let line = getline(v:foldstart) + let main_text = substitute(line, '^\s*', repeat(' ',indent(v:foldstart)), '') + let fold_len = v:foldend - v:foldstart + 1 + let len_text = ' ['.fold_len.'] ' + if line !~# vimwiki#vars#get_syntaxlocal('rxPreStart') + let [main_text, spare_len] = s:shorten_text(main_text, 50) + return main_text.len_text + else + " fold-text for code blocks: use one or two of the starting lines + let [main_text, spare_len] = s:shorten_text(main_text, 24) + let line1 = substitute(getline(v:foldstart+1), '^\s*', ' ', '') + let [content_text, spare_len] = s:shorten_text(line1, spare_len+20) + if spare_len > s:tolerance && fold_len > 3 + let line2 = substitute(getline(v:foldstart+2), '^\s*', s:newline, '') + let [more_text, spare_len] = s:shorten_text(line2, spare_len+12) + let content_text .= more_text + endif + return main_text.len_text.content_text + endif +endfunction + + + +" ------------------------------------------------ +" Commands +" ------------------------------------------------ + +command! -buffer Vimwiki2HTML + \ if filewritable(expand('%')) | silent noautocmd w | endif + \ + \ let res = vimwiki#html#Wiki2HTML(expand(vimwiki#vars#get_wikilocal('path_html')), + \ expand('%')) + \ + \ if res != '' | echo 'Vimwiki: HTML conversion is done, output: ' + \ . expand(vimwiki#vars#get_wikilocal('path_html')) | endif +command! -buffer Vimwiki2HTMLBrowse + \ if filewritable(expand('%')) | silent noautocmd w | endif + \ + \ call vimwiki#base#system_open_link(vimwiki#html#Wiki2HTML( + \ expand(vimwiki#vars#get_wikilocal('path_html')), + \ expand('%'))) +command! -buffer -bang VimwikiAll2HTML + \ call vimwiki#html#WikiAll2HTML(expand(vimwiki#vars#get_wikilocal('path_html')), 0) + +command! -buffer VimwikiTOC call vimwiki#base#table_of_contents(1) + +command! -buffer VimwikiNextTask call vimwiki#base#find_next_task() +command! -buffer VimwikiNextLink call vimwiki#base#find_next_link() +command! -buffer VimwikiPrevLink call vimwiki#base#find_prev_link() +command! -buffer VimwikiDeleteFile call vimwiki#base#delete_link() +command! -buffer VimwikiDeleteLink + \ call vimwiki#base#deprecate("VimwikiDeleteLink", "VimwikiDeleteFile") | + \ call vimwiki#base#delete_link() +command! -buffer VimwikiRenameFile call vimwiki#base#rename_link() +command! -buffer VimwikiRenameLink + \ call vimwiki#base#deprecate("VimwikiRenameLink", "VimwikiRenameFile") | + \ call vimwiki#base#rename_link() +command! -buffer VimwikiFollowLink call vimwiki#base#follow_link('nosplit', 0, 1) +command! -buffer VimwikiGoBackLink call vimwiki#base#go_back_link() +command! -buffer -nargs=* VimwikiSplitLink call vimwiki#base#follow_link('hsplit', ) +command! -buffer -nargs=* VimwikiVSplitLink call vimwiki#base#follow_link('vsplit', ) + +command! -buffer -nargs=? VimwikiNormalizeLink call vimwiki#base#normalize_link() + +command! -buffer VimwikiTabnewLink call vimwiki#base#follow_link('tab', 0, 1) + +command! -buffer -nargs=? VimwikiGenerateLinks call vimwiki#base#generate_links(1, ) + +command! -buffer -nargs=0 VimwikiBacklinks call vimwiki#base#backlinks() +command! -buffer -nargs=0 VWB call vimwiki#base#backlinks() + +command! -buffer -nargs=* VimwikiSearch call vimwiki#base#search() +command! -buffer -nargs=* VWS call vimwiki#base#search() + +command! -buffer -nargs=* -complete=customlist,vimwiki#base#complete_links_escaped + \ VimwikiGoto call vimwiki#base#goto() + +command! -buffer VimwikiCheckLinks call vimwiki#base#check_links() + +" list commands +command! -buffer -nargs=+ VimwikiReturn call CR() +command! -buffer -range -nargs=1 VimwikiChangeSymbolTo + \ call vimwiki#lst#change_marker(, , , 'n') +command! -buffer -range -nargs=1 VimwikiListChangeSymbolI + \ call vimwiki#lst#change_marker(, , , 'i') +command! -buffer -nargs=1 VimwikiChangeSymbolInListTo + \ call vimwiki#lst#change_marker_in_list() +command! -buffer -range VimwikiToggleListItem call vimwiki#lst#toggle_cb(, ) +command! -buffer -range VimwikiToggleRejectedListItem + \ call vimwiki#lst#toggle_rejected_cb(, ) +command! -buffer -range VimwikiIncrementListItem call vimwiki#lst#increment_cb(, ) +command! -buffer -range VimwikiDecrementListItem call vimwiki#lst#decrement_cb(, ) +command! -buffer -range -nargs=+ VimwikiListChangeLvl + \ call vimwiki#lst#change_level(, , ) +command! -buffer -range VimwikiRemoveSingleCB call vimwiki#lst#remove_cb(, ) +command! -buffer VimwikiRemoveCBInList call vimwiki#lst#remove_cb_in_list() +command! -buffer VimwikiRenumberList call vimwiki#lst#adjust_numbered_list() +command! -buffer VimwikiRenumberAllLists call vimwiki#lst#adjust_whole_buffer() +command! -buffer VimwikiListToggle call vimwiki#lst#toggle_list_item() + +" table commands +command! -buffer -nargs=* VimwikiTable call vimwiki#tbl#create() +command! -buffer -nargs=? VimwikiTableAlignQ call vimwiki#tbl#align_or_cmd('gqq', ) +command! -buffer -nargs=? VimwikiTableAlignW call vimwiki#tbl#align_or_cmd('gww', ) +command! -buffer VimwikiTableMoveColumnLeft call vimwiki#tbl#move_column_left() +command! -buffer VimwikiTableMoveColumnRight call vimwiki#tbl#move_column_right() + +" diary commands +command! -buffer VimwikiDiaryNextDay call vimwiki#diary#goto_next_day() +command! -buffer VimwikiDiaryPrevDay call vimwiki#diary#goto_prev_day() + +" tags commands +command! -buffer -bang VimwikiRebuildTags call vimwiki#tags#update_tags(1, '') +command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags + \ VimwikiSearchTags VimwikiSearch /::/ +command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags + \ VimwikiGenerateTagLinks call vimwiki#tags#generate_tags(1, ) +command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags + \ VimwikiGenerateTags + \ call vimwiki#base#deprecate("VimwikiGenerateTags", "VimwikiGenerateTagLinks") | + \ call vimwiki#tags#generate_tags(1, ) + +command! -buffer VimwikiPasteUrl call vimwiki#html#PasteUrl(expand('%:p')) +command! -buffer VimwikiCatUrl call vimwiki#html#CatUrl(expand('%:p')) + + +" ------------------------------------------------ +" Keybindings +" ------------------------------------------------ + +" mouse mappings +if str2nr(vimwiki#vars#get_global('key_mappings').mouse) + nmap + nmap + nnoremap <2-LeftMouse> + \ :call vimwiki#base#follow_link('nosplit', 0, 1, "\2-LeftMouse>") + nnoremap :VimwikiSplitLink + nnoremap :VimwikiVSplitLink + nnoremap :VimwikiGoBackLink +endif + +" HTML definitions +nnoremap " + \ ]) + endif + + call extend(s:lines, ["", + \ ""]) +endif + +if s:settings.no_pre + " if we're not using CSS we use a font tag which can't have a div inside + if s:settings.use_css + call extend(s:lines, ["

    "]) + endif +else + call extend(s:lines, ["
    "])
    +endif
    +
    +exe s:orgwin .. "wincmd w"
    +
    +" caches of style data
    +" initialize to include line numbers if using them
    +if s:settings.number_lines
    +  let s:stylelist = { s:LINENR_ID : ".LineNr { " .. s:CSS1( s:LINENR_ID ) .. "}" }
    +else
    +  let s:stylelist = {}
    +endif
    +let s:diffstylelist = {
    +      \   s:DIFF_A_ID : ".DiffAdd { " .. s:CSS1( s:DIFF_A_ID ) .. "}",
    +      \   s:DIFF_C_ID : ".DiffChange { " .. s:CSS1( s:DIFF_C_ID ) .. "}",
    +      \   s:DIFF_D_ID : ".DiffDelete { " .. s:CSS1( s:DIFF_D_ID ) .. "}",
    +      \   s:DIFF_T_ID : ".DiffText { " .. s:CSS1( s:DIFF_T_ID ) .. "}"
    +      \ }
    +
    +" set up progress bar in the status line
    +if !s:settings.no_progress
    +  " ProgressBar Indicator
    +  let s:progressbar={}
    +
    +  " Progressbar specific functions
    +
    +  func! s:SetProgbarColor()
    +    if hlID("TOhtmlProgress") != 0
    +      hi! link TOhtmlProgress_auto TOhtmlProgress
    +    elseif hlID("TOhtmlProgress_auto")==0 ||
    +       \ !exists("s:last_colors_name") || !exists("g:colors_name") ||
    +       \ g:colors_name != s:last_colors_name
    +      let s:last_colors_name = exists("g:colors_name") ? g:colors_name : "none"
    +
    +      let l:diffatr = synIDattr(hlID("DiffDelete")->synIDtrans(), "reverse", s:whatterm) ? "fg#" : "bg#"
    +      let l:stlatr = synIDattr(hlID("StatusLine")->synIDtrans(), "reverse", s:whatterm) ? "fg#" : "bg#"
    +
    +      let l:progbar_color = synIDattr(hlID("DiffDelete")->synIDtrans(), l:diffatr, s:whatterm)
    +      let l:stl_color = synIDattr(hlID("StatusLine")->synIDtrans(), l:stlatr, s:whatterm)
    +
    +      if "" == l:progbar_color
    +	let l:progbar_color = synIDattr(hlID("DiffDelete")->synIDtrans(), "reverse", s:whatterm) ? s:fgc : s:bgc
    +      endif
    +      if "" == l:stl_color
    +	let l:stl_color = synIDattr(hlID("StatusLine")->synIDtrans(), "reverse", s:whatterm) ? s:fgc : s:bgc
    +      endif
    +
    +      if l:progbar_color == l:stl_color
    +	if s:whatterm == 'cterm'
    +	  if l:progbar_color >= (&t_Co/2)
    +	    let l:progbar_color-=1
    +	  else
    +	    let l:progbar_color+=1
    +	  endif
    +	else
    +	  let l:rgb = map(matchlist(l:progbar_color, '#\zs\x\x\ze\(\x\x\)\(\x\x\)')[:2], 'str2nr(v:val, 16)')
    +	  let l:avg = (l:rgb[0] + l:rgb[1] + l:rgb[2])/3
    +	  if l:avg >= 128
    +	    let l:avg_new = l:avg
    +	    while l:avg - l:avg_new < 0x15
    +	      let l:rgb = map(l:rgb, 'v:val * 3 / 4')
    +	      let l:avg_new = (l:rgb[0] + l:rgb[1] + l:rgb[2])/3
    +	    endwhile
    +	  else
    +	    let l:avg_new = l:avg
    +	    while l:avg_new - l:avg < 0x15
    +	      let l:rgb = map(l:rgb, 'min([max([v:val, 4]) * 5 / 4, 255])')
    +	      let l:avg_new = (l:rgb[0] + l:rgb[1] + l:rgb[2])/3
    +	    endwhile
    +	  endif
    +	  let l:progbar_color = printf("#%02x%02x%02x", l:rgb[0], l:rgb[1], l:rgb[2])
    +	endif
    +	echomsg "diff detected progbar color set to" l:progbar_color
    +      endif
    +      exe "hi TOhtmlProgress_auto" s:whatterm.."bg="..l:progbar_color
    +    endif
    +  endfun
    +
    +  func! s:ProgressBar(title, max_value, winnr)
    +    let pgb=copy(s:progressbar)
    +    let pgb.title = a:title..' '
    +    let pgb.max_value = a:max_value
    +    let pgb.winnr = a:winnr
    +    let pgb.cur_value = 0
    +
    +    let pgb.items = { 'title'   : { 'color' : 'Statusline' },
    +	  \'bar'     : { 'color' : 'Statusline' , 'fillcolor' : 'TOhtmlProgress_auto' , 'bg' : 'Statusline' } ,
    +	  \'counter' : { 'color' : 'Statusline' } }
    +    let pgb.last_value = 0
    +    let pgb.needs_redraw = 0
    +    " Note that you must use len(split) instead of len() if you want to use 
    +    " unicode in title.
    +    "
    +    " Subtract 3 for spacing around the title.
    +    " Subtract 4 for the percentage display.
    +    " Subtract 2 for spacing before this.
    +    " Subtract 2 more for the '|' on either side of the progress bar
    +    let pgb.subtractedlen=len(split(pgb.title, '\zs'))+3+4+2+2
    +    let pgb.max_len = 0
    +    set laststatus=2
    +    return pgb
    +  endfun
    +
    +  " Function: progressbar.calculate_ticks() {{{1
    +  func! s:progressbar.calculate_ticks(pb_len)
    +    if a:pb_len<=0
    +      let pb_len = 100
    +    else
    +      let pb_len = a:pb_len
    +    endif
    +    let self.progress_ticks = map(range(pb_len+1), "v:val * self.max_value / pb_len")
    +  endfun
    +
    +  "Function: progressbar.paint()
    +  func! s:progressbar.paint()
    +    " Recalculate widths.
    +    let max_len = winwidth(self.winnr)
    +    let pb_len = 0
    +    " always true on first call because of initial value of self.max_len
    +    if max_len != self.max_len
    +      let self.max_len = max_len
    +
    +      " Progressbar length
    +      let pb_len = max_len - self.subtractedlen
    +
    +      call self.calculate_ticks(pb_len)
    +
    +      let self.needs_redraw = 1
    +      let cur_value = 0
    +      let self.pb_len = pb_len
    +    else
    +      " start searching at the last found index to make the search for the
    +      " appropriate tick value normally take 0 or 1 comparisons
    +      let cur_value = self.last_value
    +      let pb_len = self.pb_len
    +    endif
    +
    +    let cur_val_max = pb_len > 0 ? pb_len : 100
    +
    +    " find the current progress bar position based on precalculated thresholds
    +    while cur_value < cur_val_max && self.cur_value > self.progress_ticks[cur_value]
    +      let cur_value += 1
    +    endwhile
    +
    +    " update progress bar
    +    if self.last_value != cur_value || self.needs_redraw || self.cur_value == self.max_value
    +      let self.needs_redraw = 1
    +      let self.last_value = cur_value
    +
    +      let t_color  = self.items.title.color
    +      let b_fcolor = self.items.bar.fillcolor
    +      let b_color  = self.items.bar.color
    +      let c_color  = self.items.counter.color
    +
    +      let stl =  "%#".t_color."#%-( ".self.title." %)".
    +	    \"%#".b_color."#".
    +	    \(pb_len>0 ?
    +	    \	('|%#'.b_fcolor."#%-(".repeat(" ",cur_value)."%)".
    +	    \	 '%#'.b_color."#".repeat(" ",pb_len-cur_value)."|"):
    +	    \	('')).
    +	    \"%=%#".c_color."#%( ".printf("%3.d ",100*self.cur_value/self.max_value)."%% %)"
    +      call setwinvar(self.winnr, '&stl', stl)
    +    endif
    +  endfun
    +
    +  func! s:progressbar.incr( ... )
    +    let self.cur_value += (a:0 ? a:1 : 1)
    +    " if we were making a general-purpose progress bar, we'd need to limit to a
    +    " lower limit as well, but since we always increment with a positive value
    +    " in this script, we only need limit the upper value
    +    let self.cur_value = (self.cur_value > self.max_value ? self.max_value : self.cur_value)
    +    call self.paint()
    +  endfun
    +  " }}}
    +  if s:settings.dynamic_folds
    +    " to process folds we make two passes through each line
    +    let s:pgb = s:ProgressBar("Processing folds:", line('$')*2, s:orgwin)
    +  endif
    +
    +  call s:SetProgbarColor()
    +endif
    +
    +let s:build_fun_lines = []
    +call add(s:build_fun_lines, [])
    +let s:build_fun_lines[-1] =<< trim ENDLET
    +    func! s:Add_diff_fill(lnum)
    +      let l:filler = diff_filler(a:lnum)
    +      if l:filler > 0
    +	let l:to_insert = l:filler
    +	while l:to_insert > 0
    +	  let l:new = repeat(s:difffillchar, 3)
    +
    +	  if l:to_insert > 2 && l:to_insert < l:filler && !s:settings.whole_filler
    +	    let l:new = l:new .. " " .. l:filler .. " inserted lines "
    +	    let l:to_insert = 2
    +	  endif
    +ENDLET
    +call add(s:build_fun_lines, [])
    +if !s:settings.no_pre
    +  let s:build_fun_lines[-1] =<< trim ENDLET
    +	  " HTML line wrapping is off--go ahead and fill to the margin
    +	  " TODO: what about when CSS wrapping is turned on?
    +	  let l:new = l:new .. repeat(s:difffillchar, &columns - strlen(l:new) - s:margin)
    +  ENDLET
    +else
    +  let s:build_fun_lines[-1] =<< trim ENDLET
    +	  let l:new = l:new .. repeat(s:difffillchar, 3)
    +  ENDLET
    +endif
    +call add(s:build_fun_lines, [])
    +let s:build_fun_lines[-1] =<< trim ENDLET
    +	let l:new = s:HtmlFormat_d(l:new, s:DIFF_D_ID, 0)
    +ENDLET
    +if s:settings.number_lines
    +  call add(s:build_fun_lines, [])
    +  let s:build_fun_lines[-1] =<< trim ENDLET
    +	  " Indent if line numbering is on. Indent gets style of line number
    +	  " column.
    +	  let l:new = s:HtmlFormat_n(repeat(' ', s:margin), s:LINENR_ID, 0, 0) .. l:new
    +  ENDLET
    +endif
    +if s:settings.dynamic_folds && !s:settings.no_foldcolumn 
    +  call add(s:build_fun_lines, [])
    +  let s:build_fun_lines[-1] =<< trim ENDLET
    +	  if s:foldcolumn > 0
    +	    " Indent for foldcolumn if there is one. Assume it's empty, there should
    +	    " not be a fold for deleted lines in diff mode.
    +	    let l:new = s:FoldColumn_fill() .. l:new
    +	  endif
    +  ENDLET
    +endif
    +" Ignore this comment, just bypassing a highlighting issue: if
    +call add(s:build_fun_lines, [])
    +let s:build_fun_lines[-1] =<< trim ENDLET
    +	call add(s:lines, l:new..s:HtmlEndline)
    +	let l:to_insert = l:to_insert - 1
    +      endwhile
    +    endif
    +  endfun
    +ENDLET
    +exec join(flatten(s:build_fun_lines), "\n")
    +
    +" First do some preprocessing for dynamic folding. Do this for the entire file
    +" so we don't accidentally start within a closed fold or something.
    +let s:allfolds = []
    +
    +if s:settings.dynamic_folds
    +  let s:lnum = 1
    +  let s:end = line('$')
    +  " save the fold text and set it to the default so we can find fold levels
    +  let s:foldtext_save = &foldtext
    +  setlocal foldtext&
    +
    +  " we will set the foldcolumn in the html to the greater of the maximum fold
    +  " level and the current foldcolumn setting
    +  let s:foldcolumn = &foldcolumn
    +
    +  " get all info needed to describe currently closed folds
    +  while s:lnum <= s:end
    +    if foldclosed(s:lnum) == s:lnum
    +      " default fold text has '+-' and then a number of dashes equal to fold
    +      " level, so subtract 2 from index of first non-dash after the dashes
    +      " in order to get the fold level of the current fold
    +      let s:level = match(foldtextresult(s:lnum), '+-*\zs[^-]') - 2
    +      " store fold info for later use
    +      let s:newfold = {'firstline': s:lnum, 'lastline': foldclosedend(s:lnum), 'level': s:level,'type': "closed-fold"}
    +      call add(s:allfolds, s:newfold)
    +      " open the fold so we can find any contained folds
    +      execute s:lnum.."foldopen"
    +    else
    +      if !s:settings.no_progress
    +	call s:pgb.incr()
    +	if s:pgb.needs_redraw
    +	  redrawstatus
    +	  let s:pgb.needs_redraw = 0
    +	endif
    +      endif
    +      let s:lnum = s:lnum + 1
    +    endif
    +  endwhile
    +
    +  " close all folds to get info for originally open folds
    +  silent! %foldclose!
    +  let s:lnum = 1
    +
    +  " the originally open folds will be all folds we encounter that aren't
    +  " already in the list of closed folds
    +  while s:lnum <= s:end
    +    if foldclosed(s:lnum) == s:lnum
    +      " default fold text has '+-' and then a number of dashes equal to fold
    +      " level, so subtract 2 from index of first non-dash after the dashes
    +      " in order to get the fold level of the current fold
    +      let s:level = match(foldtextresult(s:lnum), '+-*\zs[^-]') - 2
    +      let s:newfold = {'firstline': s:lnum, 'lastline': foldclosedend(s:lnum), 'level': s:level,'type': "closed-fold"}
    +      " only add the fold if we don't already have it
    +      if empty(s:allfolds) || index(s:allfolds, s:newfold) == -1
    +	let s:newfold.type = "open-fold"
    +	call add(s:allfolds, s:newfold)
    +      endif
    +      " open the fold so we can find any contained folds
    +      execute s:lnum.."foldopen"
    +    else
    +      if !s:settings.no_progress
    +	call s:pgb.incr()
    +	if s:pgb.needs_redraw
    +	  redrawstatus
    +	  let s:pgb.needs_redraw = 0
    +	endif
    +      endif
    +      let s:lnum = s:lnum + 1
    +    endif
    +  endwhile
    +
    +  " sort the folds so that we only ever need to look at the first item in the
    +  " list of folds
    +  call sort(s:allfolds, "s:FoldCompare")
    +
    +  let &l:foldtext = s:foldtext_save
    +  unlet s:foldtext_save
    +
    +  " close all folds again so we can get the fold text as we go
    +  silent! %foldclose!
    +
    +  " Go through and remove folds we don't need to (or cannot) process in the
    +  " current conversion range
    +  "
    +  " If a fold is removed which contains other folds, which are included, we need
    +  " to adjust the level of the included folds as used by the conversion logic
    +  " (avoiding special cases is good)
    +  "
    +  " Note any time we remove a fold, either all of the included folds are in it,
    +  " or none of them, because we only remove a fold if neither its start nor its
    +  " end are within the conversion range.
    +  let leveladjust = 0
    +  for afold in s:allfolds
    +    let removed = 0
    +    if exists("g:html_start_line") && exists("g:html_end_line")
    +      if afold.firstline < g:html_start_line
    +	if afold.lastline <= g:html_end_line && afold.lastline >= g:html_start_line
    +	  " if a fold starts before the range to convert but stops within the
    +	  " range, we need to include it. Make it start on the first converted
    +	  " line.
    +	  let afold.firstline = g:html_start_line
    +	else
    +	  " if the fold lies outside the range or the start and stop enclose
    +	  " the entire range, don't bother parsing it
    +	  call remove(s:allfolds, index(s:allfolds, afold))
    +	  let removed = 1
    +	  if afold.lastline > g:html_end_line
    +	    let leveladjust += 1
    +	  endif
    +	endif
    +      elseif afold.firstline > g:html_end_line
    +	" If the entire fold lies outside the range we need to remove it.
    +	call remove(s:allfolds, index(s:allfolds, afold))
    +	let removed = 1
    +      endif
    +    elseif exists("g:html_start_line")
    +      if afold.firstline < g:html_start_line
    +	" if there is no last line, but there is a first line, the end of the
    +	" fold will always lie within the region of interest, so keep it
    +	let afold.firstline = g:html_start_line
    +      endif
    +    elseif exists("g:html_end_line")
    +      " if there is no first line we default to the first line in the buffer so
    +      " the fold start will always be included if the fold itself is included.
    +      " If however the entire fold lies outside the range we need to remove it.
    +      if afold.firstline > g:html_end_line
    +	call remove(s:allfolds, index(s:allfolds, afold))
    +	let removed = 1
    +      endif
    +    endif
    +    if !removed
    +      let afold.level -= leveladjust
    +      if afold.level+1 > s:foldcolumn
    +	let s:foldcolumn = afold.level+1
    +      endif
    +    endif
    +  endfor
    +
    +  " if we've removed folds containing the conversion range from processing,
    +  " getting foldtext as we go won't know to open the removed folds, so the
    +  " foldtext would be wrong; open them now.
    +  "
    +  " Note that only when a start and an end line is specified will a fold
    +  " containing the current range ever be removed.
    +  while leveladjust > 0
    +    exe g:html_start_line.."foldopen"
    +    let leveladjust -= 1
    +  endwhile
    +endif
    +
    +" Now loop over all lines in the original text to convert to html.
    +" Use html_start_line and html_end_line if they are set.
    +if exists("g:html_start_line")
    +  let s:lnum = html_start_line
    +  if s:lnum < 1 || s:lnum > line("$")
    +    let s:lnum = 1
    +  endif
    +else
    +  let s:lnum = 1
    +endif
    +if exists("g:html_end_line")
    +  let s:end = html_end_line
    +  if s:end < s:lnum || s:end > line("$")
    +    let s:end = line("$")
    +  endif
    +else
    +  let s:end = line("$")
    +endif
    +
    +" stack to keep track of all the folds containing the current line
    +let s:foldstack = []
    +
    +if !s:settings.no_progress
    +  let s:pgb = s:ProgressBar("Processing lines:", s:end - s:lnum + 1, s:orgwin)
    +endif
    +
    +if s:settings.number_lines
    +  let s:margin = strlen(s:end) + 1
    +else
    +  let s:margin = 0
    +endif
    +
    +if has('folding') && !s:settings.ignore_folding
    +  let s:foldfillchar = &fillchars[matchend(&fillchars, 'fold:')]
    +  if s:foldfillchar == ''
    +    let s:foldfillchar = '-'
    +  endif
    +endif
    +let s:difffillchar = &fillchars[matchend(&fillchars, 'diff:')]
    +if s:difffillchar == ''
    +  let s:difffillchar = '-'
    +endif
    +
    +let s:foldId = 0
    +
    +if !s:settings.expand_tabs
    +  " If keeping tabs, add them to printable characters so we keep them when
    +  " formatting text (strtrans() doesn't replace printable chars)
    +  let s:old_isprint = &isprint
    +  setlocal isprint+=9
    +endif
    +
    +while s:lnum <= s:end
    +
    +  " If there are filler lines for diff mode, show these above the line.
    +  call s:Add_diff_fill(s:lnum)
    +
    +  " Start the line with the line number.
    +  if s:settings.number_lines
    +    let s:numcol = repeat(' ', s:margin - 1 - strlen(s:lnum)) .. s:lnum .. ' '
    +  endif
    +
    +  let s:new = ""
    +
    +  if has('folding') && !s:settings.ignore_folding && foldclosed(s:lnum) > -1 && !s:settings.dynamic_folds
    +    "
    +    " This is the beginning of a folded block (with no dynamic folding)
    +    let s:new = foldtextresult(s:lnum)
    +    if !s:settings.no_pre
    +      " HTML line wrapping is off--go ahead and fill to the margin
    +      let s:new = s:new .. repeat(s:foldfillchar, &columns - strlen(s:new))
    +    endif
    +
    +    " put numcol in a separate group for sake of unselectable text
    +    let s:new = (s:settings.number_lines ? s:HtmlFormat_n(s:numcol, s:FOLDED_ID, 0, s:lnum): "") .. s:HtmlFormat_t(s:new, s:FOLDED_ID, 0)
    +
    +    " Skip to the end of the fold
    +    let s:new_lnum = foldclosedend(s:lnum)
    +
    +    if !s:settings.no_progress
    +      call s:pgb.incr(s:new_lnum - s:lnum)
    +    endif
    +
    +    let s:lnum = s:new_lnum
    +
    +  else
    +    "
    +    " A line that is not folded, or doing dynamic folding.
    +    "
    +    let s:line = getline(s:lnum)
    +    let s:len = strlen(s:line)
    +
    +    if s:settings.dynamic_folds
    +      " First insert a closing for any open folds that end on this line
    +      while !empty(s:foldstack) && get(s:foldstack,0).lastline == s:lnum-1
    +	let s:new = s:new..""
    +	call remove(s:foldstack, 0)
    +      endwhile
    +
    +      " Now insert an opening for any new folds that start on this line
    +      let s:firstfold = 1
    +      while !empty(s:allfolds) && get(s:allfolds,0).firstline == s:lnum
    +	let s:foldId = s:foldId + 1
    +	let s:new ..= ""
    +
    +
    +	" Unless disabled, add a fold column for the opening line of a fold.
    +	"
    +	" Note that dynamic folds require using css so we just use css to take
    +	" care of the leading spaces rather than using   in the case of
    +	" html_no_pre to make it easier
    +	if !s:settings.no_foldcolumn
    +	  " add fold column that can open the new fold
    +	  if s:allfolds[0].level > 1 && s:firstfold
    +	    let s:new = s:new .. s:FoldColumn_build('|', s:allfolds[0].level - 1, 0, "",
    +		  \ 'toggle-open FoldColumn','javascript:toggleFold("fold'..s:foldstack[0].id..s:settings.id_suffix..'");')
    +	  endif
    +	  " add the filler spaces separately from the '+' char so that it can be
    +	  " shown/hidden separately during a hover unfold
    +	  let s:new = s:new .. s:FoldColumn_build("+", 1, 0, "",
    +		\ 'toggle-open FoldColumn', 'javascript:toggleFold("fold'..s:foldId..s:settings.id_suffix..'");')
    +	  " If this is not the last fold we're opening on this line, we need
    +	  " to keep the filler spaces hidden if the fold is opened by mouse
    +	  " hover. If it is the last fold to open in the line, we shouldn't hide
    +	  " them, so don't apply the toggle-filler class.
    +	  let s:new = s:new .. s:FoldColumn_build(" ", 1, s:foldcolumn - s:allfolds[0].level - 1, "",
    +		\ 'toggle-open FoldColumn'.. (get(s:allfolds, 1, {'firstline': 0}).firstline == s:lnum ?" toggle-filler" :""),
    +		\ 'javascript:toggleFold("fold'..s:foldId..s:settings.id_suffix..'");')
    +
    +	  " add fold column that can close the new fold
    +	  " only add extra blank space if we aren't opening another fold on the
    +	  " same line
    +	  if get(s:allfolds, 1, {'firstline': 0}).firstline != s:lnum
    +	    let s:extra_space = s:foldcolumn - s:allfolds[0].level
    +	  else
    +	    let s:extra_space = 0
    +	  endif
    +	  if s:firstfold
    +	    " the first fold in a line has '|' characters from folds opened in
    +	    " previous lines, before the '-' for this fold
    +	    let s:new ..= s:FoldColumn_build('|', s:allfolds[0].level - 1, s:extra_space, '-',
    +		  \ 'toggle-closed FoldColumn', 'javascript:toggleFold("fold'..s:foldId..s:settings.id_suffix..'");')
    +	  else
    +	    " any subsequent folds in the line only add a single '-'
    +	    let s:new = s:new .. s:FoldColumn_build("-", 1, s:extra_space, "",
    +		  \ 'toggle-closed FoldColumn', 'javascript:toggleFold("fold'..s:foldId..s:settings.id_suffix..'");')
    +	  endif
    +	  let s:firstfold = 0
    +	endif
    +
    +	" Add fold text, moving the span ending to the next line so collapsing
    +	" of folds works correctly.
    +	" Put numcol in a separate group for sake of unselectable text.
    +	let s:new = s:new .. (s:settings.number_lines ? s:HtmlFormat_n(s:numcol, s:FOLDED_ID, 0, 0) : "") .. substitute(s:HtmlFormat_t(foldtextresult(s:lnum), s:FOLDED_ID, 0), '', s:HtmlEndline..'\n\0', '')
    +	let s:new = s:new .. ""
    +
    +	" open the fold now that we have the fold text to allow retrieval of
    +	" fold text for subsequent folds
    +	execute s:lnum.."foldopen"
    +	call insert(s:foldstack, remove(s:allfolds,0))
    +	let s:foldstack[0].id = s:foldId
    +      endwhile
    +
    +      " Unless disabled, add a fold column for other lines.
    +      "
    +      " Note that dynamic folds require using css so we just use css to take
    +      " care of the leading spaces rather than using   in the case of
    +      " html_no_pre to make it easier
    +      if !s:settings.no_foldcolumn
    +	if empty(s:foldstack)
    +	  " add the empty foldcolumn for unfolded lines if there is a fold
    +	  " column at all
    +	  if s:foldcolumn > 0
    +	    let s:new = s:new .. s:FoldColumn_fill()
    +	  endif
    +	else
    +	  " add the fold column for folds not on the opening line
    +	  if get(s:foldstack, 0).firstline < s:lnum
    +	    let s:new = s:new .. s:FoldColumn_build('|', s:foldstack[0].level, s:foldcolumn - s:foldstack[0].level, "",
    +		  \ 'FoldColumn', 'javascript:toggleFold("fold'..s:foldstack[0].id..s:settings.id_suffix..'");')
    +	  endif
    +	endif
    +      endif
    +    endif
    +
    +    " Now continue with the unfolded line text
    +    if s:settings.number_lines
    +      let s:new = s:new .. s:HtmlFormat_n(s:numcol, s:LINENR_ID, 0, s:lnum)
    +    elseif s:settings.line_ids
    +      let s:new = s:new .. s:HtmlFormat_n("", s:LINENR_ID, 0, s:lnum)
    +    endif
    +
    +    " Get the diff attribute, if any.
    +    let s:diffattr = diff_hlID(s:lnum, 1)
    +
    +    " initialize conceal info to act like not concealed, just in case
    +    let s:concealinfo = [0, '']
    +
    +    " Loop over each character in the line
    +    let s:col = 1
    +
    +    " most of the time we won't use the diff_id, initialize to zero
    +    let s:diff_id = 0
    +
    +    while s:col <= s:len || (s:col == 1 && s:diffattr)
    +      let s:startcol = s:col " The start column for processing text
    +      if !s:settings.ignore_conceal && has('conceal')
    +	let s:concealinfo = synconcealed(s:lnum, s:col)
    +      endif
    +      if !s:settings.ignore_conceal && s:concealinfo[0]
    +	let s:col = s:col + 1
    +	" Speed loop (it's small - that's the trick)
    +	" Go along till we find a change in the match sequence number (ending
    +	" the specific concealed region) or until there are no more concealed
    +	" characters.
    +	while s:col <= s:len && s:concealinfo == synconcealed(s:lnum, s:col) | let s:col = s:col + 1 | endwhile
    +      elseif s:diffattr
    +	let s:diff_id = diff_hlID(s:lnum, s:col)
    +	let s:id = synID(s:lnum, s:col, 1)
    +	let s:col = s:col + 1
    +	" Speed loop (it's small - that's the trick)
    +	" Go along till we find a change in hlID
    +	while s:col <= s:len && s:id == synID(s:lnum, s:col, 1)
    +	      \   && s:diff_id == diff_hlID(s:lnum, s:col) |
    +	      \     let s:col = s:col + 1 |
    +	      \ endwhile
    +	if s:len < &columns && !s:settings.no_pre
    +	  " Add spaces at the end of the raw text line to extend the changed
    +	  " line to the full width.
    +	  let s:line = s:line .. repeat(' ', &columns - virtcol([s:lnum, s:len]) - s:margin)
    +	  let s:len = &columns
    +	endif
    +      else
    +	let s:id = synID(s:lnum, s:col, 1)
    +	let s:col = s:col + 1
    +	" Speed loop (it's small - that's the trick)
    +	" Go along till we find a change in synID
    +	while s:col <= s:len && s:id == synID(s:lnum, s:col, 1) | let s:col = s:col + 1 | endwhile
    +      endif
    +
    +      if s:settings.ignore_conceal || !s:concealinfo[0]
    +	" Expand tabs if needed
    +	let s:expandedtab = strpart(s:line, s:startcol - 1, s:col - s:startcol)
    +	if s:settings.expand_tabs
    +	  let s:offset = 0
    +	  let s:idx = stridx(s:expandedtab, "\t")
    +	  let s:tablist = split(&vts,',')
    +	  if empty(s:tablist)
    +	    let s:tablist = [ &ts ]
    +	  endif
    +	  let s:tabidx = 0
    +	  let s:tabwidth = 0
    +	  while s:idx >= 0
    +	    if s:startcol + s:idx == 1
    +	      let s:i = s:tablist[0]
    +	    else
    +	      " Get the character, which could be multiple bytes, which falls
    +	      " immediately before the found tab. Extract it by matching a
    +	      " character just prior to the column where the tab matches.
    +	      " We'll use this to get the byte index of the character
    +	      " immediately preceding the tab, so we can then look up the
    +	      " virtual column that character appears in, to determine how
    +	      " much of the current tabstop has been used up.
    +	      if s:idx == 0
    +		" if the found tab is the first character in the text being
    +		" processed, we need to get the character prior to the text,
    +		" given by startcol.
    +		let s:prevc = matchstr(s:line, '.\%' .. (s:startcol + s:offset) .. 'c')
    +	      else
    +		" Otherwise, the byte index of the tab into s:expandedtab is
    +		" given by s:idx.
    +		let s:prevc = matchstr(s:expandedtab, '.\%' .. (s:idx + 1) .. 'c')
    +	      endif
    +	      let s:vcol = virtcol([s:lnum, s:startcol + s:idx + s:offset - len(s:prevc)])
    +
    +	      " find the tabstop interval to use for the tab we just found. Keep
    +	      " adding tabstops (which could be variable) until we would exceed
    +	      " the virtual screen position of the start of the found tab.
    +	      while s:vcol >= s:tabwidth + s:tablist[s:tabidx]
    +		let s:tabwidth += s:tablist[s:tabidx]
    +		if s:tabidx < len(s:tablist)-1
    +		  let s:tabidx = s:tabidx+1
    +		endif
    +	      endwhile
    +	      let s:i = s:tablist[s:tabidx] - (s:vcol - s:tabwidth)
    +	    endif
    +	    " update offset to keep the index within the line corresponding to
    +	    " actual tab characters instead of replaced spaces; s:idx reflects
    +	    " replaced spaces in s:expandedtab, s:offset cancels out all but
    +	    " the tab character itself.
    +	    let s:offset -= s:i - 1
    +	    let s:expandedtab = substitute(s:expandedtab, '\t', repeat(' ', s:i), '')
    +	    let s:idx = stridx(s:expandedtab, "\t")
    +	  endwhile
    +	end
    +
    +	" get the highlight group name to use
    +	let s:id = synIDtrans(s:id)
    +      else
    +	" use Conceal highlighting for concealed text
    +	let s:id = s:CONCEAL_ID
    +	let s:expandedtab = s:concealinfo[1]
    +      endif
    +
    +      " Output the text with the same synID, with class set to the highlight ID
    +      " name, unless it has been concealed completely.
    +      if strlen(s:expandedtab) > 0
    +	let s:new = s:new .. s:HtmlFormat(s:expandedtab,  s:id, s:diff_id, "", 0)
    +      endif
    +    endwhile
    +  endif
    +
    +  call extend(s:lines, split(s:new..s:HtmlEndline, '\n', 1))
    +  if !s:settings.no_progress && s:pgb.needs_redraw
    +    redrawstatus
    +    let s:pgb.needs_redraw = 0
    +  endif
    +  let s:lnum = s:lnum + 1
    +
    +  if !s:settings.no_progress
    +    call s:pgb.incr()
    +  endif
    +endwhile
    +
    +" Diff filler is returned based on what needs inserting *before* the given line.
    +" So to get diff filler at the end of the buffer, we need to use last line + 1
    +call s:Add_diff_fill(s:end+1)
    +
    +if s:settings.dynamic_folds
    +  " finish off any open folds
    +  while !empty(s:foldstack)
    +    let s:lines[-1]..=""
    +    call remove(s:foldstack, 0)
    +  endwhile
    +
    +  " add fold column to the style list if not already there
    +  let s:id = s:FOLD_C_ID
    +  if !has_key(s:stylelist, s:id)
    +    let s:stylelist[s:id] = '.FoldColumn { ' .. s:CSS1(s:id) .. '}'
    +  endif
    +endif
    +
    +if s:settings.no_pre
    +  if !s:settings.use_css
    +    " Close off the font tag that encapsulates the whole 
    +    call extend(s:lines, [""])
    +  else
    +    call extend(s:lines, ["
    "]) + endif +else + call extend(s:lines, ["

    &_D=|RRn*`U_-hu6lx?wbnAz;)KJ z+ko^{k5Z=j#RP_Eo8*Ge1+3KK4ZK{>>H5TWzOX*h8X-B(tb>+6mkNDxe-B zCucKd5Y4NM?0vwJ`ukE;U<}N0nPgupw9|97y~p1UU>y_YqZ!|B)!qIMPNV;gYJ~zd z@J0AmKo&IBfZfCJ?%SzO1-da>uTO{hw1$Wgyp%&Sy-PbB6ei%?Q*>HbhC_P;5u z{GU*agDsW=s{xf#Js`=Ae>k4;rma6b z!Va7-D;|4%HptEzcN^)797_5{hZE`30mtD(#mzZ@;GGyzC`J26cHn!){LP-&NArOG zp2H{8V^GZ3cQUybyj?Bp=3Q0SHe>U~07qgA75KBCbNOP`U~O@8DhfPmVN=9h1v81a z$!~h0k4ki^O?(h${aJPPxfDQ*bZ)+*WgAdDmkVz`P7|MmbVWDLPB)!_e0KWjk|6Te zhi&j{JxIu1;yDUy=0dH&&hNBEQFb7wb2n|;AD_$)a6-bzpT|6!h*seJ6(NNLWp8ZX)Ly<#Jf3P(sTX_Gxem+$SmQbY;O;-(8gQXrF6ytIMCHI9T%JXPl6LiSpFk%= z>NLQNErUI;b@4l87RRpwAC@0}RDxwSC<{_`jR3CF<`NJrkP`=kNH;66S<>DYzPJQv zm5!hf;nvCl$?;f$;KJKr3K+~A;QBcmm<*WVX43wUdW6#+nX8m8;1G6>WkX^;8^Dtn zGgcc1-QDjtI4d*mhMPoH;RHI39YTW9P|_Nx9I`tPn#cK&10&f?fzklL^PDYQh1P01 zgH<-Urx0P&#oHre4LjTsQ~B6B=KzovoYoS0r!6K5#*ulL_l{>Bi>N$I*k$dVc~2i_ zjcrTIBf2Gy2P~Mek^&r^K zi+XBlP|$g6v_`!UY3q_QBHp>Zy66dBNV|<2mVYFdI8hQPPFNp6E>#j;q7hU&l-Q20Z3P|^3oZKsuV=40s#lz3F%`VjO|#K;d@K!ML1#xH=%oc#mnDX%EL#I6 z`D^)yfmpFMhI)uHk_a%dp_l;rwrZ*yJ@=#T2JZ*~wdA$zy7|1tVqX3a{xrlswuu#z z02km?;i+h`OoRr>%~>}e^P=AJ1kfecb@-Z=Ghqopz+{_5bU+OMSKLI4!1`C<4w%SS ztDpt;mXf4wA}i}4BqZtG=3vF;F+PD#TR z`=J62Qem1&edosiv3|#`aT}$(-qHgF$`OmCKz zPR0S>$dm}$VY_F1uEpzN*RtZt(|**Ohj`MAD*OC|3fa)`*tUqe173mU!GCEA@90ay zamLjosGcQo_BeV2=~Z|Yq&g$jPM?XT64_SfAp?fLuG>GbF1F5wjjRe6?EPJz{8Q$T z-i9LHh&=u?GZw`m!wk}HOAOoR0+>q^7C{Xa>;1hDT9XU0ihc{6u*@utteP(i;|Yy> z+4o5FSqe&cRAA_-!^Y*tgUaH-@heuxU7jEvaXf6Je#_Bk38s2?*aT^%l^95OfO~c` z`C{`XFa_#>ol%-(1C5(0BP@ZqberIv3qzORQPGT)45(jI97(ZhA##jo58GHoL%jt6 zs-65vTmEW@pC9o1v9xTUx6gsPdb?^oC<0@-r=bR2igra5|>=}1?UgJ%d$fE zsr9%ZT9e_r{I#vse1^HM6g)O=m!*(FY%(L`&vSq-zZa%CtHo_@lyRH3aRLFBh?wV; zBp*Wl*eTg<8R#520?enaYGm`384&o=#y_?l8)fh-(PY$kE~LKbx^Sp9Y_PiLWbTby z4>n++$!seu&bdzoSJC0!X=8f9%*dpHsK$quy$HwB?^OGz^3ble>ZqeHW@)%cnA6wVb zpQyrBoevIiwegu}+6!_MaHky?e%UkaEiP5scbIU;(@y)slWCgc@7xKE8(Z42`lXq;r(N~370;Q79M?(xv37K`?Q7oI4i$gb zG@-q#$II;@9qYi(0n5^4SKx(*`XE01Muf=5C&o?@_3d&d6s27EiGoYYgg7pM zgtY~?|EQx$uVLe;V^O}csCgw-G8Nz__g&_Z2(b*vNHs&ET)ei!3<_#T7KExkb=p$K znvEG15)a!dn%@$j$IXALS;kDhfJ4$(^YM%P)HSAYFoerl0#BQ*y?S|w*g@$OC7 zdT!XK?aGUBCqql-$q|P-m*%breStQ59BHTEi4<6+5A3a5dym(1kRKYZZvc5!Ft1udmjGOK#&gSIQ?-#0p-Y1AQz#Z!!HgDXNPmDX}dYXvG73B3`#IbhHMO^Yo6M6NFJ~(KTiC*%@%r!fN5&B^(R=L(CPb08wjQ z*uV?b5;w0Gom0|C%7tH1(?p;jy*{_O6OL_7ImW?lH?xr-dv{Et%b-9J1G0!A9bPgd z(YR0~4-LLl&8X!l-j&spS1D7E*CWf&s_=wfgE^DQGpz&bp=0_4q|lSR3h#LI%O53K z42OC(H(@J^cb;=tut;I`FAmR8vnj z>Nmx$ZGp^F!r>+~)H+A-dF>#h+V>0Q@G$)9WzgoibMgogt*Hb8vMWzXD7Y5(erbht zhsk%_f1uBf*9*iG{>{=E5{a%nFS8O z_Uj%AP7Ywkkr*948_fpOp6(zOQ1L%pzcPPq3GZ2{MHR727Gtal_vVN~DbOJgRnu5(e6s0#_OBsA0 zu5hF{UVxdT8MgaRKQpocT@}ab(yj1rkyvla>!nFO5rMM8wC8V+Ug^gs+3+xs47K{{ zlpN(7aj%2*AlXf?AIb*o%@ql~N+Aym_Xwd6_-Zt9dzpwjp&26(7Ev?%RhvIxoGn3D z1yIhqm%%dXCA@?^-NBP6JsX*%T{*$ zO<>iDFIJ56iG8+OWv9Sb>U63#vtIYMq#wrF4Hl#mGOj3tFGX<<)on2yvVuj2lq(1K z=`9xylS-DwX`IK|D$=-bGjl95xh_PNYtm(=wL03>P_)a(+RQR4BzMvhd5_XlahmaC7nZ8A*81C) z0&u*xesa8~BiA(zOA3{}bf6I`@5KwAT%N>0pI&9Sn^sQ+C*>wI;wa_El z)1m$0n}|9S(M!wHgXqcyy3THMgzTy5==qBuT6Yj-vueT-7u$|psGKw36ec2%L9TB= zKYlBx35{jRI{y~Puhb1Sepi37Y{EUh{I+pmzWOG{l^8@1&(Nbl^n=gqS=*f`@3Y;p zpf5e!?Wx$id((lQQXPN*_UYXH`Z*(<-CYffk}VZ1JLrpP%WMZJ$8zC{ z$@k2xkj2Z~`*>#eXE{WC1M#@Ie`eSWzS)xH?h-S?+5kk@T>D}ApeRg#+`}cq_Q=y` zf{aKo+L!1fHxHUiH4n7fV*_wA31SMKD14>Po*&A1t_*7+VjWM z_2X818IRO+0}rEunA|?`HvDC12S~@LJ3=L1a8wfCwL)~S9S%OvmVB@upuig(xjVmJFRWU zr`8Bw{9Rem?Xd1w#dN?+-|KbZ!yi1qcv8OMO#vu)f{rT#TKw5o26+*t!6hb`^{NBc zc+%AEwj zz=Wz63VClf@s+ag9F01!0a5w8fvGa3#uvh(`#F!^FCCtq!b#$rC+%341$p>scHTG{M}ajii;yl+m)OndEF$gWUei-e2%C^*1rNujp4YEE^`$%m!_#__V__dF=IlWFxIqZa41 zK{|IpJtJ2W4tlWbX?Kt#bsU>kHT+!BN1j3MZcq!)TfZ&O!uz?FzRKrF=O3pA%4ar> zNe9dTYtnf?yx@FC@;jK2p^a^+8ITlq7gonL`=vljLBN`5625>oW(f2%x50bUPsS@` z9MY{2de&fmPTx8BZ2H7=;wED5pcK?HYP-YHX|l(`tq&;fY}x*!1prw(($-_N_#J$7 zE03X*_!-CkY%j|f2tfn1;@!OyKi_rRdnqR-yF&xR1YSS8^FzF|Ig0@q_Y0-ERc^7V z+Q!!x8GD*?`>g4-6$}#fPhIY!$ZXcm4#DGp)+8I!*6d9Nd>Xz{cd+UE2UIpnA)0k_#6!k13fkuOHcigjI=|D>4tq2LE^bLJ)a z5RMaNKB13RB_?*l12OlBeJ1P&)iefa#6m>OTxWaP&|?bO)WkjQgd8?_9CYT`_Xkm@5J6T8x)ic7be}MPur@`8y9*KS|DGw^G2wF zh8Ty1*M#n6%Vz6ep6u~TBzC!zMfZ|*m6zHt@7;d0@5uI9_1@_kv{r@p5c;}eqSET_ zG5^)G8J49caavE?TTEGCu_VvQZqwCzo^iNVe8SVs`N_RAjY_fLi?CnbuHI(1r-Jpy zwy`L?_)E8mkn z_b8euAunROYww@N5S>fTl+)PJJV;rhPWuxY7h+NzagrU+72uBzQrSm$UWtk4-An!2 zQ7eyG?>G>Cf2J=C%&d4JtN%Zf%kyjBc8PstFGB^#6qk60PhiQVu)wUVCb5||1$~E^ z*fXH!)fX%c3`E|iCIP|QEk&g81x>^p5%EO40@bS5Fy=Lbfdv$b&!0vdk!cuHVH&MYB-Iy&@MkL zrwp>Y#;dS{tC0wX9Fb7la1u~ZQk)fZ`qcE4Lg*L(4aPC(eaF>iY)KoOUa=b09)SLf zM`pUjioyAKDevFfFTIG@L_;#bQfNZ^vc>fi;X2#Z%sdZE-wN`3YJ&-zV+s2yi6vkyS*$$Kt#3>f z^Yvi?`CTqx?-%;On7Bb<0L)Ud`8BVL+Pd}_ct04#ySR!cx4L8c^)|@CCuUoNL<+9m zi3W(t4}GCzT}7pF4MIJ!#HO}7eu2XP>tCi^L9ah<6vPP4URO3GNB1F3B9Y+;f6(%D z?yrd}y1L#KSw?buv_h>Anfqhh45J)xkT(xvRVGGZ5ZPP=GK~bpE3Z=Q8368EMuc+S zxTS^X%n757vOALwGyI$#2R-fQbee_JouJJIa%kcx0zF?J-r*aPE9_qW2&={KuwQfww!7HJK98)<>fem!cKKG7m!Q-7}?W*BlcN1r)%88+dPZ)q)|JO z&hP4P0l^2m&P-{p3r|XBySO;!?@)Ju4)5v|kOZsK zna4v?KNe~(m5{B|2O!33kQLS9(P}o;cQ49mZZ^qo^@(h*wf=n7{CPu?jlyLL$Sf|z z84zJtHvqv;J7{89{Wyr;q(6YfKo>UGL2Gs&>)Z6vSH$%l8~Zn55(W3>^o6*fK~X&@ zV#;%3;2L^LrTR7%yx#FJWA%V;>?JTb`L;!6>sDji7EEOYFn^WPn!K6=*uA5i_<-`YwkOe{;a4iU>CqE-QO=kZn9=Bejo&gWF1e{KJBM}wbD>w3%KC|Fx;GQ_ z(!X}F^2U^O;u&*A-}}7nC(phoS6Gs3XFZAzA14Vr6LdURhZ39N1Z-s|;K~&rd1>u} zO*l_P)^9uicqDj{mV~D9CA~ku7QRh%)B#l)H{a+^?3`zEtaJZqnxi`<7p!0Z`}vl# zLKFj70aYnp2P_Ecx@~}_JP&bKTIb^3&A|r-#6FxSyLp)6$eLNi>fyGgZ|_yaJx|fZ z-q5_`SG|1n$Qzx1`-#TC{RAbSeaNCo{!_S+- z;v>>PhHS2L-NPb+j21(2UuUew}Cj=?tMTgdGHPrh>gBz>6% zR{E*q8cEpA(#72KCw7>rnP&eNUw!X#4d|709WH?*He$$AJJgS|cTya096a+MmnY7;{PBT;q?z-w}9h+L-ni8@5A zLILDjVZ(6a$x6QK*MsFty9KpN@4V6uEvBlCn=c4%U`M@}3Q?9P>B1>h%b4)}w3yO?l~Hn zfyQrAB(=X$RpMuA$}m#jwy+F9c(sRGk2M2TmJR7DAH6jBgg_Wjcx&H#CjnT|s=4IZ z=J{E%v#*v&)M)cM8F39q!&R_M=##TE^)&5o18OtsJOzoz+;n;5%`IqLBl74t8*Ksf z@6Q-wP6ifltjqFjU3V_|@>R<2E#Lvx0_A66h9OJksYN%+v8sZy7AU0zGq5b1uvb|F z&LFLJ6a0S&`|dz2+xLBmtjZ>lk(BWmsZeGlLRR6iSE%fS?2#2BGRmf;vbXFlD{QUnzeaOQ>Gd~i2u^BG%ygNI+yRAHw@8( zreo;|Vo&xU{_p1zDwvr#Q2P;1Q;Y6OqclFx!l5I_#}^tJn!4WHm>F$5KZQ#S8l7!L1hQ^eB_XG1GPp5z7trQmO&C!?7*;)^FS1Wy1q9e zBu?GLM+*H-91sxba?)*o;mVJKPfR;2fdk?qIEI>MWuH%ZA2>7XKsbS){+30rgvRXC z1*K*eX!xD}Ze`+#OVwe_!K>uLE-HYa`akf>zO{#o#bo26-6hg}}7)&Iffn$)lhpq~B z+(P!eCqU^i5?uJ)>mG>-rREfBJpKg$o3EMI1jKyCUu@zn0A9q@g0o1}fgh&2YDY z$0M&e2(1D*TnrCT3Nk2Y`88u~nAQh?`Y@7XANumIi$+@q1$!+<3357yt znIFj#q6ecilZXtJhdYGE4i`gRVDm=Tk%(F4HL1Lo7R0%`*lL`&XhgrLTx9L5@q9g{ zQbz78>$><$#Lky*?}h@dVT0~Z!SetYfo`hp_r;0WS+l~@qa-x;nheBQ1a+a?$OJ@i zO@JeE+9$2Q?68k(wEUjFucn8MtkjkT0lU`JyS@BC|8VX0aT*zwrCm_EVTF&=D3c1$ z^3g^l)m31VanOaLvY!$O7#E8GpVHM+Ee~~E`aO?rPKN3~7{OoYUI5rSzhenumK-&I zclo>T(_pUkK676G$SO4YTblc#EqU#+Bdz^t)uVFQl`{58qa!GU^q^(-PB2ahB85!r zUmG~ot(acsKZRx06_!q`co{r8?y{=DsOC^ApJ6GUSaFVAlTRqyKdVz>U zBc7c)sVh>;Ab8?6ka0gOv7fGbR*ec5!Iy~8RyH81GOoFVuB%O*gXCV9b^vMBXEyS7 zel(2$b?Zf!&yqG7l_5JR`$lq3Q;Hr+Ix4S(V1k~?&-+&9Ao)5G<>?Jq!gYh|IVa}R z45bIgR&s;$=`$%8zOaG?z#4MbtgsN#mlxJ?te4LyZ zuRzKvZ+B2h(MECsL?MHG*kT zbXMa{6=sOPV(=qVm?_t_u&O8|9W;%HDiG7=-R97rMjDw6tnBVD+OCT>UT{rV@yBIe zeBH^2UZ0X)eer8@!oEB*+`Qlcq!5A36~l5?mX+sd0y9_Y51S;37~{kBGL%k|j4$Gt zcKsHc5YkxP3-L4^{E>^UI*UD3I~U^K_G_(K+aK_7R!*&)@YR@zv&XXWbZ>^aCC+{l`(J;0h_7gPd#VM&W(|UgQ?lHQVt^UVzcITYFTCM}Pu>YRIBK3a0U?UPr zJ{iw@lGnnS{=no_WApCRmr5OcLCULK>-9m-?K?b5y(!bhCC?4W1=T&9hlGJQ>ZuhLPn#REJ?>leyTPI3!%k^p3Ww^Fj-H&|@wmbdd1)%T3LW$=ca5H3=zVXI_Z zFeV};G1SD5vgtT(o-x8r=r<-}?uhOsqG`;DKs-?eEhoX5N{wCZt!OF$Qv)qNo5gkB))))R@eo#fd;foF3JBT|Of~0bjUI*HL$oaPOQHu1U z4%%eqQs6JP{Pj;E1xYKy#*M*3CAYTO*`A)smDC%m3lOxY4N8}m+(~d8ayn8c`5lMN z1oW;U7{ZRgVznQ3(sW*`gUW?)_aDHy_+d{nq4-bU7*iGDha^&`Q8I zK&eeR57{W^oR>Y+ti@F$Xj|89Tcp#fb~TF#03qSZE*}+V7W(FSFz?HY`D5m8U6EJ2 z-E+J{aIflntBM(yK|7zSpX#kU+zTvfKeY88sD04v878A`#Z0d(8pzsx)fxv>l#Dk$ z(|%i~95t+;_r2hKsKqmrkQ*EUnnfMmW1zVep$1S*Obyc#QJ6A}o|M4^N31$R&S&q> za8DK^OA+r=6T~w2YYfr%y=7f-& zE>${sK+dtmvu$VF@83`gQYo4t64DGc)zH8`i9QD^|NJ>^!=z8XA`LnbSnnCJzSBDN zRZubbl)dBO2(Y9*=|k>7z%Kto$c zCN4xl=MiVeK?{{4AE&Y<))1L;{h}Q|zKqWPBUlyL{Dy9XVVP$Ed^6x9L29GA_`*H- z*xA}ojk(OUc&(KM2Mg>_27ZobQFxu=w{+wDhEs>4EJ-uA?SLBlwj5m%+O*jRi=g`4 z0d>i zXvO~UBm;>a`_t9v!*u-h+SO8@$Wpl@BH7PXoG$svoY{r1gE9QhMHuwNkcGlGQ60}Q z(I==nB!^y8Vo`AIbCqH`lY!?6nq$Jbn31E;Ha=w;y?g3w6VcXZg3U?{ye1<~(@M*J zKvh5YcF@x0=UZ2ujQKqtu|@sFo-(|ksx^nluJ*&a_+>HVvQ#G3oE2}jimC1t9sV51 zw2IUV*0MY{4Gv9U)rav>pT8)e)%qTq)-DvfAko*4ZT*%toRBVRAN-q*f+jwpbkiP0 zppt$=%Q2-|)Da)v7_oR; z#wC$|C!WHgWy?IQQSq^U;8wroT)yNeq}dtd^xul^%8t*y52 zhH9gZaCgYwsR0_g6|te;8oDGw!q?cD$F4Uy;X2Nto_$jv-rwNBakwhRPP30Re9{0B zRjQw&R^;)5^A6}jEPp{GZ@?$E7rxz6kZTQbmwfZKg6MmVXHpV}w_+t6VFSB#PFTsl zDB5$jk4JHxnXCy+M5RD(N(m1?Q?H{EhdgTaMR<4>V!)8-Hj~i%F(glF(A*(D6~2E8 zNV&?tex-wEztez_GvQRyTK1WIwMU?yoj!njH*s5>5}@#1r=(;5 zx*!{J!Ooj#U%W%4jI&?@@Le5kh+hmgg58>U<1**WKHR4~tzZLv$=L!|YE4Me@@&);uHJS2u5B=urn{b^KMtINI*fe<0`a900d*6{KAsXZ#Nf%Und(L=m zPR4dX@2s|V2({;5go@oO!64Mf0Wc>Sn6kEixc5+r3oy3XjY?IZvY6Jxy}Mf~xIkqG zk3DocY3&_$6Htz|b3K&%XE8JKq_1A4=j{K*AA|VUT>PI>6IGn^p0Anr&)WZT5_&|h zLVxd?E!F<$ZW7UyIH{N3*!#Ww`y9aOiGi=7?9w)s(|%pjGhg_P+2xe|(%?Pw@HcM# zF%}V(#%{j7xu4>u1DYU)5~u8l|5KTIm=F0=1G=p7eI(Hp5g6AsR~jy_|8nJhxcN^d zILXax`vt3BLnlE&In<(*diAdn;oPeRZ87A)+5h~1oy6+{a_ol|(uTi}{pZ!Zr2rAA zn)g=4U-M^$%nKn9SV12FTPU35xInx-NOUId+YlgdjB?50du7c3JkG&b7-<5B9j?`X ze)Rhv6*913R79uAshq?`Am42$m<}Rpkt<5FOtU(6?GuPfhiL_1gHmv4VZ%zT;*n2Z z#!cL8GaGKkU5?AAxJ`-aHaOaEAFHfGGxf6 zm2sVir#}Xt4TzeYIn2x%5QR)WlUrL}d%r4Jm(P10NX7}^szW}<-Q@CBL_CB9dg;{f zE|uO~l^s{tce6*ZloEtR#$7s{Qi*wTJ_3hB3W0@%q49QjDnM9Mt28BVMR4$;&D+*% zntF|@Ej0wB_P_w1QKItV>X)oLGI%j;Ip4fVN)hm2XRQjfxk!gs^R+ZlJEp*^z*@87 z76lMG-37ba18rMM^Z(Y3N_+gF8&z&Y8$Du+IZ8V5`TOTIK{pTH;gaUlu_a7U{T6$K zp!f*3>T>bjeVJf*R1*0n**)9K&jt||J~+Y*Q8anE+wm^WWUpzG zEFG+%vDe!YHWc~nbd!qp*Tk_xCe8pR{nAjUtM1gKC2x}g%=Wl4x!Aokr&{9F$9!T> zdG5jpjh&##V@v!S0NUByc%`t&!?2u1x?%_F-7I0yi-{gW&w=7iG!(BvoTkml38K!5 zd!%wt0BTQ*g=)zl_$5tJ&yH@R*1;QCxfq-_ZxSyRd{(praO?*6;p^<(%D2;SfAvEh z!g62M0olns=mIjxv>bN|s;CtDE|W+n0s7FaOSqtTy%^S*t0YOgt$fT{B!y*EkmwS zFO+Qr9g)^8NTO4=V`+xejfW+NN*)ELzMh5F=#S>1QE2+$TcU>J#B(>9L8LgfC13MW zvgmu7u7m+#{kG7n=a#NQt`P%C%f{sgRTm*<8H7pTSWtV*7u0!iW_)YVn0f1%fSm!n1?Qxq#L+6eaTP01mBj-rIRa7Bo_ z-|y~ylNSvM2hPy~1`X$ZQGs(jf((wv*uQuzu(Y{`=(v$`UNYXZGYa8uJIjgd(K)Y| zL1;QTD3H{l7GM42>VuLpod+YnZe7sJW(GQv4A?far<0`+HH5UbWCcH=!hsMh62DlU zRkx_3<8(26i+ZXCt&_UKAuf*+sc`yLj8=jb&wM;G_FU2I^#-z2OB5qE24>?ozbwMy zeTkKcKnwK}B*OP}zVAbfrtJ|yP=F-UQ+-07MVmS8Qy|v&(FQRl#sq~2YjV7F@oC{I zsIQhG)?3_Fm?bL^rP-G(yFlK-aPTJ>R@Gcj6ss7?&%KF!cN;D{TRl~mXj}qsWxboc z2gaQKb#5pgV+eXx{e$|^HrI=~ROP=YX6DoqLmNb9bbTx3s4!?#%jK_is7(mopH?o0 zrMRoX7N%?Vi5C)Eu=;m}jK%NBowJ2u2^UNjg4&YMhiq8ptri<-9qroA`n!N+0;xzK zvd&At)S`+Gby&_#uNnDKPtZSl*sw3FG6K!Qavc`S%_V^69XFTC5N)BWw$nu9Ak@=l zcc6Xc)>imq1`{X1OjgsbH6hy5VyH4~2zZz90En=2v84F4MTHIQi_qL2kETF!JfjCq zu*Ak9D{ABpe2mc-NKgxTLsD?0zzZELog9~UwYMB>6i!$+0m1Z!OMP+WDmUQd*PKoAs3Uw#m@sXdnmu%rOY>B|G|Os1L&sLS7y^JP{&%n|4Im3L zQtcZiztb9}bMKnJ@EswfN8HE@k3P?Vna+9fY%n3V7yvssF@&zEs6r;wzr^A&a;$+R$#{U@&oH;v`;bBG}!Fy2$4lM?3+EDRZ{S%@wkU zm1l$(XEO53jZ}u*^fy~H2B6W(9Pe2}%wua;)&&8N5d6<*uh45xAzn?rKI zj+4*Lx=|k8gP7(6f#i^axh9fmC>Sxp_j%NDOxl~DcmBnr8~Q=aG?)OH0Y+u95ot}s z6hWo;!@FDAyGz6oPCY>%)YNbaCN-!!@}}OL0njo)BcYAt;6yW0u$qVcJYCo7CC>Zt zMbM*7!+T)zKj{#rWB)}Bv9((c{3g9_GZa3IXp^Q@#CVWGYn{tz(91~o+Ys!;r0)1_ zGkRcb{mpA{C|+cXTatTQ_)y8QPc0$8W3FHOnrD@30(=+8SbZu(z zk4CRcQxvbWlP=X9oJI7Z1Bpo+k0bS|Z0H}ExQ$&@pTj~qz#gF?OkR!O^3CJN3buTA zsx4z}X}hetm=AmdkZ|nW?0-wL)cxCjQGJzFZPzefFa4ew#F19|l9#xb1REZ()OQ%g z^1DZf2kms`xhLKJKoGz_z`DX^Xmv95jOB6T7absd+u>*GKl|#gKe|UhXbF1DU~-;y zTvPMdl(m6X%|6)aD{na1YjlOCU6W`1zOs`E^g*5cw^h;|SzDE1DI(hKGRo>1jnUGW zmV{zP>(rR+{48q|C*NTt#F`i18575_Fm0PQop;S(Y~%wGe7f-WmrrYzu&%^RdEuwW zq3Y)dG1?nlv!;|v`y0FJ(Hj&5U|@9My7+#B1+Sy05&MG7oW{{1#0$iuGrF)^y>@O! zukt2lg4aW{ggqWBs^9q{!pA;01FdvSTgkv=%-q(Zxx=}p?W9|~kBU0WsRZS5d2Onp z9Eo08<(Cp8Jn5+8?#7W!i{6@q!etF=f=@p?1s!G2H&j6teWT?%uk4{r{Ax&$!aa0! z0PNkvUFazvBW)exP1*+N#YHbd8&F4>JG4Va4WR_}a|h(0EwTQhAO$KvtP1UOSN$zJ zj@Gidz=!rBLDvnN^}z-A;*S2@HCis33x5b;SLsd*ejEy=JNN3Rp1FHBu_pn8jVJwC zqbr7(I{ZG$h|Y%wqAXlvmbO{VoxKL1N__&|rBEM7O*b6g*h*CBCA6vNE);@k(ziFx-&)g6|~n-i`IQ ze-OVTb}L@5^{@FOo34f|k?2Y3w;P&k(cKFgt_IX16nsOHD*k6>6I_9#u+s8<x8y?RuA^R*Tt> zstpOMMw+E>61FaykXPkRWj1MZOwP#0nz(Vba_;Er=+T9a6tcRWZ*^s2x_Zb7HfC&- z@5r;oL01rEm4woi-km$U%NX0?>Cb)C$Pm$tf45~SC_=(y^*`MkX z@(8O0-1Wajd+6Epg!~4Aq(O*bF~m))e`Tq`kSs$IyH;Fv#J@0e)#q%BL9Qyv(-lL> zME^#b*t=n%oSaC8oJB}1(qcHAiAN=$SQR4LmmLHYp7@O!WsjcZIJ~+ja?YZa)2E&? zkOftQuBvA{8JL4UcqQy8ZTw|r3TP;=Bb3n(ZlD5jNEkiB16CD4V_dV|RbOvwetJfD zv;auxT{`|YbqI-8N5G6)Qj)nure0KNp4pcE!%G%@B7!@&2E&$?o+e^W4g6@uLf7Jj z#8!oI)Q_$WIzW>FQ!D5vIm|BP;10qW+yv^q5+CTP{w{6KkHGvj%-VpR(!$j^Ebye#tcK_s zB(@$yX(YOJDCj8D?8&yV7ZwabCT=r+JKTycy)eE}Y-z*$khK5_GYW)44({KpBsI54 zh>xNe4T!i3k*b4|kKd!CGIRnGsk{8uM^6!-sVfz)*kCwWUPt1Zj z#MTWPE!)6oG5hJTo?QEC))1kSJr{1xX8Bwa1lCn4ZwQeMARV^R5C(F8fW~icV})#u z2G3p08JBrr>r#F8dqV>oacJ(7?2^xiH-kEle82r`4PG)AsB9ndr_i6(JKlh9kuT@F zrumRsPBxc{182$JIY;tpugQoVh+h|#DvVfod^rT)Bbw|;%^9n$m826GqZw2tJ5Fb` z%Atojd;x{pwS0 z*=~m;r1L7OIXis?RF;P3lj3n1t&DBb)}N&#ZtwXkXiUSd;P55bdU*G z&y9wTyefr7cY9bdd&Jx&zwf+$5fXz>zwj}4dstmuB8IJ+MiJeu-@2qgF^Z8rn+Oh8 z6f#3o*92>2j=AzZFO2FaVUYf4!^D)Z_z8dPQ^tMg-KfXbUyPAS8=bd6KTaDMV<^^e z&po_EJw7ytQJ-cp|B}9axrwO0OlihUEHzh)?y=B@qQC3>1MedN+JffF_S zB2e?r&9a8ipy3X08C19P##e;*VikZBD&QVe1%)U{#{Gt;I_P0@|67C6)ZDiyqfa<| zO;#it2M4-J7if?1BjvesZOIQjb=_M>j%I95NH^cBLGii<{WT+zRwJw#A|qVxsHZFn z1GQr5o_C+aCQnC9UqVMrp){KOz8cT)$=5mJ7A;`G6Gxlo-u9tjY$fNLrfT=o-pO0 zYJHQba7=5-{B&04z{6Fp2m`XEDBe%YOOGoLvb|6G+63$jPxQAEAjg`!wIhkx)Ca#| z{ATwzirY+;_ej@sED5Uefb{LkQuN+fK+VG`tM)g(- zs!semvBaA62H@KcpHGF3f zMO)eME{~X{mq@xYqoLtW!Y%4ibXT($Xn8^()ErI~%kam)2yEbrSiO+^9-H0ErB5n> zs9)KrF(*yo;j42i(&*`RfyF=?mcuAA{<9~vACdHI^?}=xCaht$Ln$OvVUW?6Dbi7p zgtl`AV$S*8+vVPj47$9SZ8Sr}&JYiBh0DU>4(Q522guUVvs>R{R7_%(~-U>0>WW`8|8Tw zIV4G1)y|odjPcWceeyDk%I3)Xj^keU4RaI%bH81XwnQg$Hg7K%)z`7 zx=)HHW%B-5oEjTYf*X#T27;jA7Sj2Ic1l<=Ep(!pb5 zLfmFN0kD*I?dXpDqqMa-16se8p=z^mRA|hKsPLN zAjwDZN5!wMK0(5ZfK&`4uz846`0i%nt}XOeP4PI-WI0lEuorgOK`{QpxTo*NWFiYz zVa$B_b}G&@8R@Bi$~u1+>0F2ov*TAIqFuz|>*$QsdvLZr!E<*h!!fl*71cvVfM+5W zv2~n?vH(FFi}}bYlrrr2SAA^15M^Aw!)4bVqp!z+qHSBMEf&)Fm7vtSbsz%H)|ajU z`VJ{1=C={Jt7Nt~YLlGzS@Hv4eigEaWQPG;84$?&tpz8Q(RRSQ%|yJPWUO#uoOy zcO#q+;RS_+2czo}Q*@DLPi$e3pKuiB@QaCuF?@#JtnP$?F1eBk;&j-$T2`wp#Ms9Q zm>u>!AM@t#)LPfAl?`L9zOH7)o>5BB5k4wB_f6yK0UN~i45_V1ov$#@0iUuQhq%E< z{U@_l0f~GwaWOWFstH-lbbd`kQj&A1rKIVmrsE7ZhI%`Td`q9F-IPG*;%c9pbDLGo zpzq&CRiQ5v%p{jI-t8JT@vv_1D8=SmCFXxuve$9AJQTz9J%3&tRX5|e&eFQ_iqqP* zBx>yW+qobUB&DezcspOr>aMokdUFhaD9B0tY95v|&@gvfpQ`Km)a~fsd*jv^Mm7@% zJ&9!wVOr2Y2Xh_Q7kHXD__6B3(~!LNo0*XPa&K3L<%wvVs7gKd_Z~)o&f9UKtVme48D%t`0eD-sTAYIY z(BQ{f5+4hDVt4-m(4u16tj5pAczpa&Xsi3?Kd-;ZpD-828suH|ha z_A)q8&Exsq@@jt*#Q&hF*q=wPG4)VL|r!6158><1(r?Teu;%O@wBAJkjr!T8DX&2lWVZ9l&3AM_0 zZ`v_2kwZx@n=m47@3qV`CltjtZ!uw@xH?9Sv#CryVJz|;1w{tLl69?z$$6RuagY!f z#xK`?~W|7s1h_*5PRQS2<$hck_&=}EN6 zOZD2(U|Ph=rX6#=n-S^epgQ$ntlAUHG+bs|xn^FymzLf5HV$5=l?;VU>BJu{tKtNI z?^=kqTsZdVX3O7R05ejySwFmQ3Wx+5_uWQi8#N?rf)3G!xnNyWZxMGF6sD@$BCSIj z_bmqXwLl|O+#$`7(GmUYZKt)C?&c6?#}4_UI_alm-n#v<^PrZQ)i9`EpZmah)p-O( z4r|2PgGIobw1j&lC+0|@rAO2R-Jv&2tUtj;!5F_9inwLqY{81Bd$<2OR{IU!B<6kI z&LrM~Ql#7P^f(L>K)D@1T%jDY>Z;qaWm<#c@c?#qs3Xe^yiDp#O;WVeJT8%RBl14|>7kNBZFDP%^4}jP4tT2r$1YA5u@rP$D1%vTXWBR)-5u z1Z&8Zj#U9HZUxLkp2OL}tsU@%`-X8i)xaKd{y%$2y|d&eejvX-Yal*SB3aMIV<{2F zaPK|K4rA7OD$cRmB+D9ZBA)D=yMEg(8A!Xcc@UYkC1l;WU1&wRrRv$N_`0|i--bq# z+PydDEn^e$X)wKuK^pE5KfHBd5kbG_oZ(}QsN&Pq-Bx)Rj~H(vrOqSs8&j!N7^8`D z2x46ycW7)%=YehK#R$|tI?Rd=zpgvji#!QP&yyx^V(-EvU<1Ab5m-l=Q|QcNDRr~*y&mb( z%JW`(xmEt5{jLg|NbCBw&f}q>suiSa*R1v2(TVvC9pK!ES_W9OCLBy}G}og!W@L2K zz3IOJml{gHO}c>mMt#*jnl6VeM0H#d`4CFAe9<-`!b$w=-SkY1jCFnFj!3z%tph zbMgkwtsh-)+zl@>6uSha#v=Aq;%iW=x(AfxJIC-Nyr0!eDC3qu?fA!h=$T+m5hgL$ z5-CGgrJPd%(lyNO?3kPJ)x;fneV|edik|S+)Z3t$YT@)jE3s=$$^_!)qmvKJJIQI; zx(Cw>ekeOJG5{>i$!9(mYPYQ&`Yi>;o#@=PZ}tG3l2Ic1`qBvF=+L|+7bauOFMRc6 z5Nh-x_8+aKj0FU3M;kscJDHFaFC*!C6@J4FDrHR}c@9`L*nhcW4*4p{YU>k6p!;ss zipzR%;=pVyx0?Q#JP$^H4$x^rCqT8yq7`CLy!%=n32L~h6{&;mPZ6Gqp*Marl&#{(?bg0~EH{uJuhSD*MDupTiyriUtHwrN}?u;i+wV`bhO_G-6X!Yzt{@TTy* z%GBB6Ef+D6;@NU^R_@Pi?u#P^;tV1Waq(B2CG+!&{`J~{6TSf_dHEpz$HOJNTi4B|#>!*w+!ofoR9hh+o zR?e<-LvT>;dDFhuE$V&I=9P1pj2BeeI&O$bJJ`JF+&;@+#CTN%{9SSnIYE`ND`oQ` z6Q)`e$N`085yEO4kt#T+xHW+BleuHC$glpS?bQX-_QD-ioLdJ*0NZ%m5bNjz1=G^x zQM3T}n^0tuJh0dD2=S(iI`QNxjWrE8i>>#ARo!q?l_@n&&^&7}V5Y;x>!>1T6RJrJ zsW=v_Q1Y!7#-{T1?Y+eRnkWsHe$v}<6VX3PX1&WVRH=9NDE!WZSEja~!2i)r>sldZ zZ;N=NHe-#-$?Vcg!3GhTEL*U*+X+z><@Wg`Z4?6$rwo9L8YaXgcpe&|E^fzfWIx|B z*Gw>c;w%R0!`oIwpjN!XR=1I-q5qoZ#+o8TND&#LA1%aU1_MB zkl9Z=^G}q~y=;%w9F8&ELOevyF8F;D^}H9%w{wK4DwI*Q&qD|4)g-)itdCA)i*GkP zGGdimZMU0fnOqg8E$Y;X{X{znN6Kk1RAh@n*OrYR?p+3UR~cBW@-wXU3zSv&-Tp*p z!dCh9uy^`Fnr7n>dD+TTU}e9Br7OHTLNQv?0MxZe=_%nz4lGJaAnkU^moSBD4bG(Hz!*VH- z@0XP;RM9M=`a$X1$B0%c>7W=1Jd?4h7W@Gvp61pM-qYq&%Plyxca&5Q+f> zb>%f-uo$0FT=&QQ2Cie@ZG8Rs(WshKCD$zRb!2i0Icj+z{baY+o;@(4vje|_cb0au zG4U=zRG;(aIA~aIFATdZh`OtvvGu6KNA-Vm7lHyw)MI^c00`mQR-@g>UrcZLD`ml` zp7<5Pn8CZPYmKUUyIQy9_Wn}En-*<`tO=xA4V~(2x80x?3Lb)GSy2{4xxezhxC)1Q zav32VmXl7Fl~o2md8IKK+wwrcZ=gB1fjDDxi4c6nOU+J ztVDE8XuNZAD-s=;QJj`#-Hp{wYm-6RI_dtmwoZr$ zM1k+zfyP_Bwb9<7cSg&M(@^rcUVfZM;H@nSqxP0tA!T$a+E=lX@ks3zCyVdAaZ_CN zU^89x>TA=l2*0KHI9$ zrD~$#^MBAmRRwmf$f*bX+-0{l94_+;Cm-1c(OF-->r(Rt^CU!fu3t|W#ZfYa_~`@N zCaq4+OnqYxar{=Qf*8l0d=WZCc+BWngOUE^(I5hl+Q(LrY78NKK>_w`3Dbtq>dZ3( zW{+}eh~(W5eR@M;1Wp&rbJ{}JVik5i9&!i5XQfgv_??&Yo2lPHDIIuXQ;D6kcF{0n zX@i`u2Mg4Ztas_jj~i9FiEX9CR8UvY>~*Qv6YRe_{DcWx(rX&~MbqAkiG~beU@UM3 zKXN<$^P2W_qMNt)W)BmwC-n49*@lIIF-5r_krNK}abxYu@Ods9o)?Mrtwg0$YOnry?Dey+x0e#D%oUEPG0<(-k+t0t`X58rijcb#VpEgIESaB8>y}Q z2R^*iX`%~2kgv_p{_n8r=L5eZc$LQ5{kv>>Xe=Wpb=6D$u0m z8af_2$L~>4D1T-l*rPa0aD70e`wf>lSFW2LrU%W*=hn+5qR`cFODVul;7V&fH|M}CR2uRB|gBlx7 zCbT{JXu)9LQs2~GP@FcVVZ|sndYx&8yI=;c6oR70kl{#G=;#E{eTI4E=IJd9!l3Rs zX8P#HC!#F_)QOKwf~@gfiOW`!nxU=Y3&Nk%l-3tyO5$2MrNSFwvo@q0$|sCo=Ni(e zeODdC570k$7$ni=n!|)&^D6wAh$E8ql9_3T)^lhc=eeLl#dk`|*z=B^&^H#3RVVok z3dETxPn5hCO&unT$_B|;PR?VtY|)9*3sn}3%fXxryxk+3-Jw(qQr+KuJ>=f-BkT#; zw7;s~QoqxLA2Lxa3mWBS4fmj2d$DhEhwN9y`yff{W*pTjZR+X9bMP%#2jnfZZhTyW zkaf-Jg#K7XBB@rccj8}VzuAj3Td|{Vb$KG%#k}2Pt$CYYTNd617pnq2pa(+0^LD%~ zb!h4%;j0OkpC|GeN)E>14^coWIP&vpABeKP;D$J$wu=>?hXNHZqNZ;j@s7-k@mFgH z&7P{vadMu!F}hc**#^p8mIscF56ZYcV{c+J49j`o4ivmE9P1_vCX2DxD1J5L{Knsk z8XJ3J-%3_%__unqDJ^_nd#UwmL5sJhK*r6cc+giK=U!rM@YXE<`tT$p2`&3)0g4RE z5PHF^wFcWYy$Bg7`IB0YFsI9gS42y@Q)Qrk-aSQwAslwDtx$<;)swHuw$NE}Z^FB{ z8LC!!^74Tg7o!;yX<|fMhR^DLsv#RUx$ zj8T{J^T0f0lVAL=2BmVF>^e0lS@1|$vY<*)#tlh*KWgQw^cGukRB$`kbo*ZIOu>#T zVyBFD3y8$Y|DGUZo1!5*p@$Suesw8*jdUsP{q`fI>|KRSZpM3jH{FxsqVIWLnJhfo zmgjO8sryAIGrJfes`x2EYdL>bJRsKoflqHUG$HMjkGXLzaxvI`o1*h}7?LcoxYP9i zt{Xc(zR7fWF{Bu{c0DW&N6syCV_7(UWJ^08MWLqbRKMtpX?&YS4$X(^9Z5S3C{XTl_ThD?&Uy8pWK0)YlyUgu^==LFkA1%5Vv z756gzX%*0Q3Kj!_@qhp! z(t1^(h^OI{l7r#tN~Y*f?6k@W?7ZyH4K8HMzMUk{$1bh%-UG+*OA%t;Nd+=a(s@0j zz5*z-K>(OW%D;XEuo$^^dTv9-qL=cwA{j$d!UZ0IBdMF{IbT(Tdv-rxop0=`FK7} z^u$>sAIF2O-cn>Jwof7a9FOHyXnHnJo*?mx7!;vR87cnx>hR|wUZB&D+_wz6_W|i- z2OP$E$%(4I_QYBA&lkKB`x$A*m2e=d z4uR5(UWhDz5v95G#^Yyo4ENkjFx@%HuD;U8p9k6=wss9dOf;W{8K z>ywZ1RZuESH?ojPzCLrG@D-i{5!-z}KZZ-k_)gpqbC)}x=rBJ!Q~`!zALiYL?B?UM z!Wi$Inwu8P#yDfF5zFn*pY9}Psl}$$uv~Ah1SJ7mLb7mbW%MzguFGfr@6K#Jxdj!Y zFGtHxZfbUWNOyIpC9iywP+5JGV$iHKqFKO1eCC<`1Cs?(%``!q0=>yiQDfbz`a7+$ zRni!}fU#)DiuW6uh0(V9FJ2FmY_Z>9(!>93EnBg!Og|u(@9w@FHTBH*%XZw!MEyb; z=QBzCR2`_~`|Q@M!jsU*>KlW*qouk{i+eIGmgl`I4g~6<0pWpL}!;_}IH$RN-B6FS2@C zkNU2|j=A+_eG#Q#+4!jGME=wl&JGuD&U+ z`)=~?Rk7;Duy35%Z!+G$cw4K1&ERLXHGHA2?k*SFM|_D&xm2~7)yuC$ zv&AQ=c=zeuy018cYwdD51db;WAb?lT@G@zUA3Sp0LopN@7woL4kT zIyoUutNOi1q`!y%?>FJ)ibsYsIo9-r z%v0hKQ5OYHlu+N5Be<5=BoZ!N@C~&XD6t*-tgkM4o-pP6LqzgG>Nxcr#dUb?^517T zKp63~8bRdMfppAtk!XD)Qs;B4G4i6FB|V3uMUxxewKIQwG)IqHZ5qKae_-D{aDp2U z2)*Fwje{4XfOEj$sh3@u-gV}Lx7v&nU`BafJks&!))}EKVh=>|1y=2sYvpd3=);HK zEWq{8bi%=%laaVVx3d&obswrn*H3x?A^8%~X+C7qiLzBMv?frDVNwY1-`n=X$$70R zRr1H7$Un8D;M(RTb{a4>iI7`5z+dcHy-U~zD%p9!0+e3e{bF@}4Dov^Mar%1;MMc1 zL(&aSg4>Wr`1J$J`rdUfhFT+{|2*MGSKOr^u22)-s?>8`2Y0ZRIZ#N=gQDe;WByU( zGvL9+RA!J+o}rda5-hML#34aR;2rtT34VPl_;5c(IG2ijV2F_0v=g$UCB(x;NNYgk z!wI}_K7cjE1_AsEZ+s>F&qb&sho?oPcntXZr_72Ch2u)y@oV*Z?;Ol^5{2;4Ht>NnzNDNh(=uq;PPN zc2)iE+jH>=Rj_Xq*Rm!}yFwS&c`yocL|D+c1C62;tHcSFPyIMi|B461k= zZqIRRO-Jx9Rk%svpdXNr9{S^A$UkG`;DR@7?au94$M)RQuOmKQ!X?DfZb}f|d%tAt z-Z;3`Ctp*X-ungqXGoBD4X0ygIe_QM)<%_rxA#}f1n~2V-)uSlkK=Ejf$R5k6bEqa z{X?&LB4(V~1ah-Km*IckK8{xivnNgtYhKuueSauR$c&?)oP)dfw*Ga7OR?~rA3o@- z?p^U$#Nf7E^b?*M{qON}=77hnI6rnxV9)J;%!QA@!J<3-*B8C-)%@B~{<;z6Yw()b zNQ?gb8H{X!Fr0QS;bA?~e`dkIZXG$M3pqYMN$AMlzmte1lfe0UnojyW%U|yaro_H$ z{2DI_J$TM#igD+Ck2!G?Mpb9?vc-Qp=#NuL7{Y_n_(gf{yH0_RL^c_Y;@Ji&E9jYi zAG^Kos1+>=AD|U{_}pF}uJ8N%eJ{^bf(u@s1-||KAIlT+BuPTJCwOtZuIzs+d< zqj~6kWDkTB2e<9D)h03=b!MZ3|HsKCkdwc^6;8P4=~g(Alk0#%J+`2#r2%NlWk{%9 z0cA+B8yX>o+kwQq1ynb4}f^8pKT1jy34gk|M%@VlOx|Od;T@f zKVKO0M=nAn##7H?!O4*J{}mGa@jmzc6AUHrJmVAUUXtz^=V?p$9M*~$&Q$!5ZyuR% zTFCNZ+5OaJ&#fj&A&cI}U^dPFeYgZOvYo^b_V4?%K4dXl`yg)g$9DQ(zyBYnVbWUN zjNAM6C6c(2uP(^qWca=l?|XU)W^s7@O*#tPJtK(Y#ZNAQgMKx@%=3R7pCkd#PvRs0 zao^u*A=8p1$xeRHu>AY$`$!DOYhR9ck=*+`_7E6=(XSNzd+%%Sgn~oZsp0-pTaKPQ zxc67gg7EWq5f9<-{H{tri7tF5F?z#R)ZDjsrUQ{am-^=T?Ju*#8QD=by$J1#)0=JH&Sft|y4RYjuJUt_Yef^pwt;5$w76zbD#lM`V;l z2_A{>{X;LgU#raRWZ!{muY+7SdLL#Y93_Zd?Lc`2R?I z?|7>F|9||DhDxGP%FG^-?5uXOv&o@huZTG0AeB{Q?{O()?|sl9A)#YsmKi7HaExR9 z9gvx!B`t*93Mhp+5uHN2vnI7=i-f=a2oY+<5`VAtZ$EUl@CFTb zKO@b7>9AtP`Q`bM5pg*r3*T|0|6J#(i^xLUkmGss#~)LgN75?gwde39wTkBd^%qc- zy6`7*gP!jC<1e77`om$1<1vT&l*e~ca>qA!T#^nqe4GIDp?_W)@~Tu|T_!}@!xyUf zfgRu6ktk|L!N+A=N$*(Qslv$9x>3%7vZJ?h*s+W5csEMA@Nqe5-*-GQ-*P0fl)pj| zr<|(tFhRkKTnR9(elKV|afd)>mU*qylUObFDv~&O!Z}VH+3N3wkdtrxc_{|)daTZe ziSD@dNPpxpP3%S<)9Gn@$**^hQ~=+q5==_FURn9n;QpaygO9ko@@JTZoR zEh!pFE)iz^=-u*JS(4X)g~@li`Bz(-nF{q!m?#}kzLFdr%A_a>VsWo`L%VF#xpQ*Z z`ZA3zPLy2=jx*z*_lXqR9A-SIuGUn@{6wlUA6p^5AjKy0Ehq1P`i_Wnx07HUv_V%B zTipdv=vJf~D-U`bSXAY3VT%h|i}H;`?@c@+vBXPy!h}W~ZuR5B?U|Wsl@L?shp~X+ zi9+O^2>VSZZcJ$Vy%A7pD`(I%c#D{nkCxwQ3Yje~7=4Vc?tDf}lu~qnk+sA9DW>|> z%N0}iE?_C!_`vqk&~6{5^?p&&DVKfXSInUO?1BuQkOY1Zndp<3X9>H)_x%Dt>U$cB zo2BP|7QSabkeHKA|08nQ{@WX0MDRxAOBML6S3wV7&WxdS1=h=s;rGDoq%KV8oiT6b~X-&ieyAU_-C4Rf! z^WUKKnk)C3U)oY3&u40S?1^N?%l(6xc*247oLc)RtVk6+ERZ9#9-)f-jy)`Tvs=hZH< zQJ8s7u@ynv<)17515wN4`h{%28(Rzf~P9pS* zEV|>g(Yq(qW`TMi;1+{5p?m{!kDtK|qP~@(7a?l~Z;f+k^(3HEe|rGKN_Kx&z#7&K zfWA2d@-ogG)vc!*k$XNB8KiqQJ_Nn+A=51)lN7ifbD?uLVw6f+?k8{b0g`SIp!xb? z=GiqMb(Z)uC)19Hx8#ecuSHbM(^Gw~4lG7a@mwy_AGAP}F-~0#S+Y)o;nh4FDd_PD zo*VD5H0+It5QyjZx=T@b)w9nFyi+if$K3!?^&zv!K`9lUbuq2xRI|X$y4+HWr~UBq z%LwwtB;rPfcSVmjd1f;yz5>^Egz2-jyf5PBjg|Fm9Ea|(Gb}-ii(vxBnCVyK?7t3X zIca?*D30o%TJ%`pfNjBh@)XK$TaIh@j&0#KCCvepgjxY^%bGbrhya0%ucSFH#zlR_ z4-uRw@B~|rqzr{MfF;iWBr$)y@{$jNmW|jO```>U3L!D?r!YRbvgFcCuWu1|DT;aH zBI?IYdCr{TeW(&*xR(iaDZ%GWsQ1PlM1h8jI{V*G?18Wd4R7oL6==35--jjw0vSvX zaXfy?Z9MF1H88Roug-!L#}Zq_AZUE6qrHoI4qG)X=l$H(mDj91XJkQ%83=Ip zTn9pJ0}DW885$h`W}eg6(?t2UZgbhV0*p^8X%#m_e`Z&IGDc_b`Q&?pt`OSHc{rCF zUgjodNGvK6PR>93wYu4}wHAOX++2KdbjJxAK)qyuk_MPlHDX=tc{VsxJjzFyF|S(? zbrZ>X5u{5`FcU_+xCc$Q$@<_gc`g+7q)$=^je%lE>nSB$=?#-vpxaZk@Vf2FT`3BYaX0P&+{AJhHo@crs_63?Mpne-H zN`+J~p{|7S@+58KVQ0F3z4|IK;Qxdx{cBllY;dA}er&2Jyu^VLI%sdb>ol@qUpIC! zVm<>wf3&{2jSdxW#&vi{4xG->afjj?BB#}3aEB%ZrPiKNun8J9%!={@h*-Rb0P3Wq zT`WHJ2{g}H?;|_|({?hih!1!}7b(8-EC3;E!^|jW)3dvMK#{xFvKk0&)d(WX)1qq= z0ka||HdQMl-t`VwUNO$#5TB2|UTZjt?{XwCs@o)#k&s<2H zWzvsU;fMH>vg9F~XbGRV3OVpzD|0ud=4!CZN{@E-=oz2T#``KC&SP?x8hKday`0_1 zVY`jA>j;z+c*KZzJWF@N9XOXX^7WW8{Yj!&<5BHOi1S_tm;x{J>7r9WV@fEuxo&ms zAnB@eVQLg-Yl$nSIXE?dEEA$VOcbK4ZgCOq?xuI5ir8BtgkQ|9F8s=qoRbFvEG6VU zV7|BP8q|_Mx(Iuxl*IL2dk?t)m))jOz5(MBZgoeU1y@RW@r&-KByv6 zJHD3lISytOLx@(zdtRPa9{pDGJV*l;ncgm z4uTl#3IyQ)hqFTxWxE1N0MCG-phvXudJQAVT8mVxka5E#-S;60zeEvDUIw0MuqSfb zfCAaia*!qtorZJ&<5Gj6%VuKKRnna8hsEd$oIwTK<)xH6!x#cyI+rtfM0!K4KuQ2r zdRj#9nNItY2OBWbae_x-e7OU3VL}MK1t}w$D{|yuHG3?KB{olQKFwVYc~|Y#YOE-g zvt_G;G5`fFV%-n2fFp)q%scq?HnIFFhiR!0*nzKt_)383%UNSBl4;n4h={j|WPI z0?&1>k)H#%bc1zUvd?T+y)h>v=71d&9_1-q5>IJB*;4XZRuJmrC4+K#zBT& z(Uf4)(`W-djk#h)TmOuKVQ@AIzsNk;bF|YCv2?p+_6vqGYu2w)KyEl!yKPxnRSfh! z*peTI0h6KN9P}WEATJKX&{CfYQ6T@wewV%E<8v8P{weg+C9nFk1xgpvl&KS=wrrL` zU}n`Pk9$s*bOMG0MGQh^k zxvj;*{{Yc@RJ?kd`;16`5MO)GL}So-I#S7~g>Et|@P~@~zTlU#^EwxYg|xTk0M)TI zMiVt46d}5f49nxg3k@@{?LZvp@0hhYQ`$13Ci%5t7PhOn1$>i;O=x#Yc%^Ksj`wTU zu*OaOz>|m}*|yV_he>2M`c374#BvC}iJD9G8i*0iJMWrxUbi8&C@iaXgGpC72D9?hV5UKhnHZ>xi)v^WtQ|JAq=w<4t7;2{46zaiD?X&(@0%i!bW| z)Wr0q3z0&OT+jER2x>uc2hhOC+RD)}dAY9Q(|5Y(AVq2&F6Pa3)&`q6+?JKk8sq}` z9{m)1Pk!qG@rdlEv0X%?BbUq;umsYodF;E-%r8_&N^1Ch#zZBogs|l6rP0mWL95O0 zHKGj<^|hRMLFG!nn=0a(606Z|eCc3(^10Z@s-XIPzE8;R_k)fd13hfx9`js( zU%$OMe>$^q7p30BSMZU(wCa71xQ}am?E*$(D)GMFfx6rE$x?xQIe{pNWB0&?N5`Er zXCHf+69`|{06B)YY-QWg=tIHJiOZBd-{^E6az|<=y)Xy!?oiw+?@4@W#vZ9)Nq`BP zpoQ?Jmp1JTlUo(uWaBzeH4Wc~%4|7CxU3?02Q6YrsPIv{xO(!ww0KSJVRvsbK1I*{ zhuYa39+YYdQ#r4C;*Um2qHLn1*F*MDJ8RnNwvQunv&OP4mvrN9ZnM$e zMwlYi+`G40p)7wM2)k~e_159AHofAD`$^S0q*U3yQNw;vIy}0pEjZua0b=2zu4C#?Asas#eLBuyW z!_1b+_9;r#!U>A}D##%|dI5HL_(bZS5Q%hsQ5u0{sL^hf+~%kF4(V0=Pe`lV6LIa= z3b_|DFS$Y`e*dyN@gX;@!DXWjG1Zl3B%tb{1YI>!OA*9Et0N3AeiG#Qq7ndw8lf%T zsP)r?N9NaNP=m)UfuDtnqWA|Ia;TYy)HC8rX-orR)U*?uH`X}uk$%L%qjE9Rm&s_) z*@;ZICElZ}B8)DL6`dvgVQEy)h3v-mjbwBM#$5%7_bcn8 zg;q#UWl5b}KWViEXMFleOOYS{4*ARPoE=_=o@#e-GS&044ea9<(lWiMEeTZcFD7$3 zYACCrk+OUZVS=Yxlu&0J+5D{z?GG9J;;Sv+J$+-&ET3Cv@JIh%1B@h`VKftA`DMV? z{rEe{Th?^#j>FDhf(R!VP)0FKIi=7BS*kk}U8$a7-8usPE%o_XN5-%(9{bXJJOqyK zmitYMrckzdg!)ylxKZLTB1D+7==OfTAJuAvzA*d&!?tW4H?>k{jw$+#tclj;*8!`I zYw>Qi0jq|kj+eW=dmsteULyT#MN}dy;=2DG(zt}_8 zf6yz^EDwVIBSS^+n_{_Fjl&cZMVi`yP0_4}3;EieR&U8WVjtgoSFGjR09Y_>(}kt_GOD*Gr%#(*O(xnIqH`mn^A{I; zARCZL8b-Qj6>R+lmg>p(jO^))Y+h&r-V48&Uc23LDpt;KH{Q%YgTnqvv#0&xft9Wt zi_W!mL}TT`3tolW0w0(UXPYme!W(Gg=dOEEkT8h0$g9(O?k%)Yu9$+3$WMQHX&R^0 zX`CfibS~#HhF%F#ZeY>~75dAEe4^-=QEu0yas#um1VyT=cg1m%^-EGMnK4`2&sx9+ z!=@*5FoVdaQ3?5`df!Bh;if%-Ts8VsMk>f-I2Y>IPq3c{mn&)3RYJzi42 zaUm0U)k+*=4xI{ z7LHG$hZOa$R7j*}&G^!$m{=D8r`qVlTn8t&-E;dTW}3iE{NLU%pSS)utB; zEmpkVx+~je-ggCM@bo78p&hM{pZg-!QGC8HaBaG01J8<+;`dw~XpZMbA#Njydzgw< z(Wr?k4IV6UDU9*(^a0ht)^|ROklG7m%m=<#^R^ZaGg{47RA{%6-xL$FRTA?mNZyaK zT?pPQCT=ExB?cITO30d>c&CT8V!n#ee!;(u2snz2hp#l65tn#;?Mfg5!vj=r7Yjv9 zRrT4XB~L(kuag+hdiZq|8!2)s=*`RLxHY=n6Z$6@uD!}E$>PQ-2P;KwgID1tSpjVP z$6tvAOr)i(nsJgOrg;A&Jq$&7MQf>HQvpj$aKkBj{g$PNt;T7WWQrOmuC9+!w5{SS z@|qT=v))K!Lx`}aEM*Wjj7aC@Nl=QZXI9wl$_*L;tXYbCQN(Kz_gBGVr#suBAr|Sr zhmiH_^dZ4{k7SBhX^T?w?CI8+iK1(4IxdzAs4u%{<-Uc;5kHQHyLT8-DpK=3YQ#Uj z{__C<1D;;QetouKU+R?;@cQkCU*F#+^&gI#5x~T^*i>|xhFfty{Ft^V;ht;ldq*&> ze&89ow3CcxD-r^NEvv8G!FizV#CaKbJ>=F1Uhvod9b+<|6L5sfa*mfHW2BQX1GI## z5?3#q&5aK~`>kt_?Dkm@e+BANfikNFXvvGgf_C zTo-03a2e=~7%|@83f0pOjSReT^z4;^7@LLp-U8FIi$8a?Gf}=ghpo<0r0)5(blcFc zd-iS{J!(c}-Dc(bfkG~4WlxBGQ)X!zo&}Zu6Nb_m)6(NfJh5`STl@^QqOr%LCD`NY z+%$Ik5U>22$tlS2TNr2+Dp7q>sm6MgaD275@%f>?4|JV65zNwbZgCkli5BtJ;r43$ z7*L^<)IFKN=;ErsXSCo|2`(djFBK6`xTZLVFg7Rm=li+FpQ|LN-bK`ES8zxCPZX%U zIz^!qyWb!!EO**^;*73{y5IEi?l;~)x%p2L9IRRDAMl9~w|Jdw3UkjZW4=bRYiCF* zp9%8JK%taS%9qaTxSkihJdJ57F~?AU%8j0uRdn36GfBoz3k{%bWwB-D6LjLLZV9@R zwkEb1p?1`b&b0*A7c+t16j+tQUuz8aK0+{x4v7DA!t|Z@PiYpDon1s#fcO5xA&%Gk zg#Ac$u(n2Mt8o&}2RF$)|JBS8KyKukw$~abvgRdb3u3d_I3o5s zVv=($h^2fMZ;QzTJ*4}UF^$CmQ+WYI`b-JO^;<*U<@p+UDI>8a=knarP@?&cpxf&( zzhHt%3&l+WFKh)2R%O*J^G6Dx)2BFy$Rw2fgq5Jrc!w5;m}(GTCg0B+v;11eptWrnQ}1zXN}jiU zzGA6%abx&~K{RY{-eO6^#dfDqLMrNqX?IlEl2q3LE`+p+Qndj^i0inl?QdgryjCeh z%`cOg&z>oVr{%yxOvmYi`%<8Rf&R!4VlMn%Cwt*Q7XtqQU}F7k*@D&n(!$Hbki?HY zUp*>y_v4Eoei1x=K__uz^8;x1r~Ld9vjGzuwemduFCy=Y_i*7?enNA2_^^ceoqoaF z`_9fL-O&D&o_XWoR7TA6gMAtAJ08e-zmrMvT8>+pyy5upohv4$C{=}$Zy|?Ud>xcC zr!rT2yd>DUoG#kI*>>n0x}qiYu*FMCYD~Wo0N@{r(l07^>9=x8cb5JTqseW&PJjZ|ZZXq2nkaf5-2OX}Z3m2(f2@7Z>82Lpk6P=z$_+K)tPHd^sk=t}Up7E+( zJ6X6jc(28(NdBVmj3t4XsBQzTRQy5$mOQ=5j(d!aN9zr=cndcg5sDu$pcs?t7knb+ zI;>^i8qJz~QiMpnC%hGK`P~{c1N%~v6?o>;Kv6MTu_p=8yU2bPjCU-;LV3k&uEUny zz?S;zz5ZsNhnzt)N^~ft_{Y5DO9lH^bt!Q5xRs?hV=pcqa)NGH{X2^o^Fb#3+uW^k z*Udq0dYK1D7jO((=uxgodvKgAS(UdkNr7_tOw9wM`AZZq&)OB?CN|a-x{~ZPaZ3)@ z+cD3u$r{7tS?kuZz8AyXeN}Bnn;;c*=~tP;t0F5TwG-?0Hf+B*Oy(B+B)6VR$Z@%e zZ1w-y&e9i8&6odoJBx|&mhWZaM*WY}%mJoP`LTw( z!l&I=E}>R|K)yPC1AptWeW2zTzpXI`O6R8d#5}mi(WOnq&_72EH5k_8i|7tii!+SC zh{I^HocJr1-`bq{VGp~D-2&2)33(sVd*ZlKXn_Xw!(IerVn4;x%XqP2+B%M2EjD_0 z)+th2Uz^H2F5|{=DH!*)_JaqF4B=>fyDWD02Ab=Y-a2Q5<_+@)Fn_?FJAJM{tjRWz zw&R=W$;@PRirfL?C?>yGI#hJMYmCStnIG_T<%IbOGn$2n%)_J<9rY!r%Wiru#%RJ8 zX3vYD&m#t?*VB;_d^!aTGCn#kTax{C-K`nJiw?l^6k+aM11a88L=!w49nXj}r$zg`Pw{XGqZg58IM1VlJ$|8dgoahNUtd5I#G z%s}K5=!{b6(PRUcp_m8AwCU^1kvy_|{zx1BTJz!>%tGfs%S@g0-hf2(-d+|LO$$Av z3P(NC{WwCs&Y}s6?i{()Ylry|_xa5S(&$MjqBp9J)F0Hg z0#$?Lh?rm_LkRhiYPSnObaG@NKO?v4QU2U2 z|AqK>+USV8`%r?Wnl|yn;HCGaBx_kC%^wlhV9V!5by4rCOA*l0z5rzL*GBiS?CRS0 zrbSvunO-w4*v1gktXq~i|NJdidz?QQBY&8^s`%2;DDSMu6a2p&Rw9^vB957?HZ5&w4<3~S_po*1L3RdYyXb^Uk#+?56CaarnzYK7;!PcpVU-b4@l z&R#~@Vqy^Qi9GOZR9A_k@}@^U&GIIlRDQ*hoM}^U8Duje1RL5`)?VFj^*BQDMac`PTUox|YBlNnbQ9fI@!lD; zP(isMPUaqNjR$msSIe|9fu;)n);`>6L7Ceu5;l=34pj##dFBhVO^?pXO*G1Wg;QUS z-AoJekmmz@WlyqcjjiJ!&3{o5QR_c|De3Y*5-LXwNO`J(7vN8h$7*P2e}++qLUj^g ztvJ2MWY6EWrxED3y?l^eLeRUF57p)9JK#{0CxE4v>(bx<`&ig=pd(qIB6%61_#BOi z)w*qZXpA{8osuY(PZT62Eh@vy?~OF?452?z9txh4ifnse{2&`8y7h*DC`%-#>xSaC z$OMNb7B?3}i9LLa2osGTmM(oTGkmygP8|~8SvQfDlDD3DIc5xb^&9Z&3B=pra!NAY zz_zAAZjs`ODS|KS7AC)6{Km)q1$-1{8s3il4v%uMP31mgvD{7o?MTMPvj+V7~ zyzPM%uJ>-7Li={U5aPU$xF4qnh@Lxl926#medQnSC_QA0vBP7L(&=LZEx_f%fwg+nk{R*y452 z0J&G*y$lHl~mraZ<0-!463s#Pz+6%&HTM-b^vEsMaX6ZDN;m|G>^#4|3u zuG6heFb5xlClS5khBf<9!N}guhemX38CyPi{T&C8i;A5e@8j=WhgURt@x|eF81?2e z$Ky1V`&fl?9KQr@2vv5w)xHq$> z-H|V0dg9>OPv7<&I{8CkYxT|wlIPP_Jgm{)?c321^U#7Ek5tp=bC;Vb*e?B}(& zhhe~nt^S6HgiZOAzs%QfV=oVj=XeD>_D7JvR(mryy$m2Bp_2IDP)Tw1yvqWG%x(Cx z+*Xa$&EQhYfZ%(Qw}x*FLe(5F;%Kd{aH!HogTy(%e~L zzh(j5qE=p_cblRM1{#EMtz4E|6Dl9#As!Bk!i%)>T}a+`t0cV@W-vnadTM0Cx?lQC|4`$K5D!5 z{;7mS{g+3l1FuT-MVK@Du%5M09eplfiyHAzVi#oXw}iT;59*pxkq_LOLooQkN##rb zEJR%0&tVb|^d#*~xrZ)GZ_)UbAq(>F6);YBk?H;&D_okrK7P39k6atZFxF4Z_!j*f z6qHz;8tAaK-P^gX_w_tx_(cqRC%#(#9WDK%6ncSI5HSXX?~|!v+h6{;j)*&ji~&u4 zm5;ey+JdnA+c-g=i; zLgkb9bAB>Q<3!#(m=*ND+U5?eFH#b_x4$*EY#Cx_*wZYh7*J@ zXW_=9VrVM~@lVmCSb=*!m*h4as9`(pK}Y#UY)NYTFLXWOF7b5sgNuybxvxfE3uJ-> zMus+mxkNIMW^a6Qsk;dGzr5 z*SY#KHQ2mw`WeQT=l>l%ANcZ-!Fm%Jw&*qM=#mWA?k<`5+xEyjc?w~FtEYY9R9mb4 zkrvET(edWqvTxDb$xi_+U}{n)jCqU zTbYGun?}v!P4fy88&ym<_C~~BO-t?*zdQ@jxQK&To1p7~eZ{K7v*Q!$(cB^3Si)-h zdqGb)oXD`I$A))(gBJg3@i|0W5vCp$rjDfgE65FX8c9akf9gzzj}6~ z1pR9Th`)mxOeZtyyWZOP={G;&HnL`-NPRI2xOuEitB=O*vlEuF$yd$I5RkHwL%h5&pQm@>5USAZaz>yqMOvT-X# zA(IaBctBa5T~wb&G;3}xAlnjgOycjqi1fK=$iIgaUNvL*MpEkPo_1^5tCWq1Zgy+r zNY5_HYW?Vm=Fr?<%na9FpYGN%q{p}DNVOb^$%sCf{9b2jy0HQ$MFk$Vl%+yP*3Dx~ zdf3Qt8f~zb*!P|KjKF9#Ef zk}~Ctpiyk;Mq`2_QBtw}Cop;L0Lu~}%YS$8R8bSjw|?=+x?eufM+a+8Y{~YJ z4!HFWGb?}+lJ#!oLD}gcrOy-M-7+1vYwg;iWnngoq)$LM__`7`PG^{$jOR>+!thiD8jwowE=JDFXpEL{?!WiDvXk>zMOIXeWyA3u{pBDo02!rb4E6(F>O=^>ujtND z0Ntr@0yHeHD6;2eG2B6%2{(_PA*a=QZ*L9b4IkbVY2yyEVY20gs#%>oJ3^X07Cl-| zY!SqI+^Bt{U)LBdk!1UD(8k1%pO{<-{C!=jEMFFyc&is2^1pJ9aK8?($SgIiH^WC> zAyQ>JpGc4+HKOSrNj+XogrjxH)AZSjwHKI9{i3WcRGclkv>poT{h3(>kCb1tcj|XW zGrCy+5(sGF(v0l53$U*hZTUv0Ft=m_z9S)qwEGOEu9p4clBG%h9?6LLtV%1X*J>Jd zUd@n^wvvFscbOCOv&b4NG|SMUaX&)D8CbcOJkG`|*q1b_qiW2a}wGlDTSueix= zy|}Kj=mnLgJiCd@(`o~-N&H-7A0AN+vwt{ZGa;g}8UFdmkcb8*a4f-Xs2Z#HPzcUn z^0>qdui~0=BM0?iu2lV`)bjIb9)YMJNz60dfs+-z*^1CL5H=n8SYl_Cm?~YCgVJ=W z_++{e;Um^n&+Ky$?LOh9dwZo1+_7Zbpl1G11Dc0>UgR!T7;T1UdO?>luR;6lQ+5(Z zKtp+utoGt8wH(SY70bADBJhfWI{uQ1_ z!w~Sp-^rY_-S1?scuO#C!*J@VEKZJ6NxojMzTyHdmx!cu93ke$qZEa9G8Z21Nc+c6 zAwi1n0vt&-%?Rl)f7a|@*IxQq#NOH?;u9!;v%A_iWAV7c!^)LaEdoxA1qsc{=5xM} z;{jM;S#bs7K;k-j*LuQ~xZrgRA<_&Ej~J<}HI|0MFn#iFd#uY{7o((Sg$j zG%4G$laAi&2`Q2?iH}jDFA9Z4wiUa!^CzqobJyEB9P~(8?*vEJXcoF|P}+I995ogW z{knj;oZI9T>+xQHWD|j(5SHX7((_L&{o>j@-TREv1hAbfhSA3_mA=025jlx!lm6+Q)PL zC>>0J+kS@=H~Rsj=2NKBjamlYcK9*!CSy~H5Q3u#Khm&+gylnn;AjB(*?t<|Na7NR ze>4Xkl(Wu(=oTAUvrWxjac;v5w)A*`NdRhpl)X9QHAIafHEtsgoA}h2G2%zv*70d2 zMo*^0DW#g+hc0Rd+K3wCIe(%e()}B?KETPHyS0|$MEE1+Kt!BRgK1g@>6hT?8A9+G;I$Jcjv^13f z0M&H-NCB3VvtQ(_09y+!jSnJLqxVR{SN z6OuxU;?%@$%djK>ZK|iWn$frAC~~N<1@BFcyqaBsw}`60+#@nAJ@qv@))he8SR)PU z{zuLCr;+M!T^@n1g}V_C^DQH69O<&wFV*$7S}BZCY}qMLDatEKWIpD9+tt)HFNkT? zOEFDO_d{Btxhe0xPM9#R;rP`d(^R*7iHwhBLLx4EG5=l%w+IzQSVh4)5A3+T{-cdF z#i#pMG(^TMxx9pIYx*5qbML>eyV9ysIqb~eiFi83xIgNhw{6=v41Jo}NlEa2tyig6 zM5JN*D^^(g80Tq6R~f3%(Zm}%Ugo;!pqBsO9}J_XI7cnJ>kt*3D8*LXHUFro zm4u1;JQo~s(y?>1+2x^e6|ladma3%w;4PpiJSpWFQT4~Z@qgQO|u&5t6Vbr0*+@*nLf$`LfxR@oO)q)LgF$ zf4{K8A)7+$apkVZ0|}F~j1AicVnYE-YilTW>1ELLB)3N$luXR$dnJ3VWNmYZHMsnb4w%Eyj1_|kK@1VP`^e6(wTs6YD> z=VkqC9eh`pHxC9E=U851mCGa7nCENgN=;WplP!t286MBl|Dd`RqM+2#L}egJK_JqP zq^r*QkD42%Fp@R|l09NlmvcL@`R}Z*3L0aI?i%Q<>rIlshMVdcM8<4m563iS{O|(s ziQcT1)`2bv<^CSADTPsuTi?*`YX0#2#FYG|`H)81 z3!n$#X+U+9EgztF1do3T&p=~j7STglA7?o8OFy>uoUZvf z3dNHjmo?}^JHfEgu()miA0gKvgD_3i(c$zvCWXJbi4$;z5lZ(HGU%;%&+BWyy;q`2 zIje~tC;j#ZhTFS;nOWR^2Ep^A0i+(ZY4@*&Pm8)4I0Za_feA*eyJ9rQ`VGwX3=wVf zHA%-f^XLU_0sm4&v(N$L8tx(A>udaztNMc-AvN=zRsQpOQNHuPxrS$eNXykRn2|-* zf4-wzhkY=Y#}|gn|IvzZNrWckKeb{&L*W5?A+S)Y!FZwFlT0{W2kt-4S5G=U2B_*( z^|`3AKT>d|1Vm^cd88p)%N2E0uoLuxkk{6A*$k1xfaJPX+fxn_Lp^sY z9TcF&s%qfW`0X7%@V1(Ag6of0^EcVD)$Y`nKdu)=l?@kc!0>z)qNiMr8qokz(xL)e zt1%EJJGZUhCBKj9Z|G{rbxM$ia77&Gkyh;xq>QsLJZlI%V!dt@$3J-Dp9ohqgqImu zSjF&1*dUMucsx`etABGU|Nl@=2gC*f#Q*%`|AS8aLk4b2-tq&(j$3X)RF~rJ`&aJZ zVD3O!q9`sxFwxwiKlT!ew<0rPV;}3VpA>7%f_;dfu z=lez@!E|F|@Z>)q?O`7uJZ)zXo5)rm9++;5{==nQ~oP#ldk(L~B z2|1BPKJW7<{TopcZ+H^yMiJDt6o9p=p&`=30!FNJAiUjjTp;G(f(0GWI+*&K?+vmK zsat~D4u_fk6SkU&eoku)Z^OPn?^B5t{(rGU@NL<@nX;kH|7Ob4H)L1xiJz*a-!yS* zWN?7l!gYG*Ze9H<2wTyw4n5b;ei_IuRh5~D1n_s={SoZCeThS}7rePslu5rf9^CM< ziOgeRQ;q9iU(zufLhDs z)GuF2Jw9y$QtX3JwhM%xdGNFE^tymLpViCb)53f+4*y4Tsv|euH&9slo{S}1yY=1j zXK?j=2Zw|6;U5iC6-fmANyD!>BEs69=u1}yfvPaHXFb?-BW>WmG+@$y$o;+{bVwNI z?;8q!16Ae_2%e{Kc>oi}8PW&z@6EsCBoedl<7)mLL=a!dKdl&j(Hy8QrgVgmLKvy9 z->%lV#|AdHQediW;gs*e)~LqHd>0|=t^=??J2}CXolzX|M|Xg}-zV9;JIfOAx^kW$ zKl=edy}aKaK;>2Cv8O-cz%#x0F!amUdQ|sem{WsLP;Z-hygbrkJ3J-T_Sk-3q_2`; z$_TFAxTYu5obO0mz{TN>wxB!k>T*{nhV(V+sVL0QElC(Jx^`pBaGMbwSC7r!I+=@~ zI8eT^s97!5mu`88dyxaERVt_bmphXS_tnM$5iXNhbzsNRx1jss{`V*%+Tb>|)Y!AL zdZJ!H*cyb^gJw|y!wG~ccS6SbRXqtd#vw*yyUv$ZOOod=mVBw{x5=qO$ev!%f|&#R zWLNLCR@1@p<_OP7DMnr?!CFQqnp@Xac`3B)-~kqS#|efJ#POPFe{^?lC9bjq(G;^n>=XF^6~$I?r3wzR!D9qI%AZ1bt_&?v@h`q*kEOa+2*y17J-~q z=XGdPRv%H9ev8bh)wQ=D#7}r(&pqEeZS75I4g!q|jw|N!B@0!#v-tnwF3i>wxr~Ca!DqBN}`5x*t5~ z4fhCn07Y@YS1Imygq`cjoYl0*9ffPm8||F?4v%T&q@DT(W;p)eOG3$>vh-@%nhQ}2 zM12x#UgaerIyjkwocTL;fNI_jCrTyiP;i#f33FD+6AoXO9i1w)~&+Y**%07YEjSmnr>(suTX!_t^&u-QrCAt=8@Il0J%jiRT()$aj zzRy*?xXMMG#NQHwkipDQS%qeoOfQ{+)JWc6*|Y{Zgip&{miy0+{;$m9Dk6Roe7gE| z%CdfQiX5ic6UOaB2no&l$HeU%pl1fzgM_(?vn8Sf9i%UcQEe65WUmLHMa{_;dT~|2 zg{!Y438NI04b4Pm-T(m|e4g?-$o@_#mRs}?y zL3xnUPj)P`4em3&kvR$Cf@(Yv0ln@_8hM6q!C*Zgk z5wKi!oMrM?`>KiPEuu)>DkokWO*fs#IC5p#HhxxD-=u8x3p8sazp?@*#}n+s!)M*o zjp9Pu!&2Q4t@ZY2Eyc;!QHoKP^0dhA_0Xe&pdwWC*jrL3e=5$B6&beGP#@u`To`NW z)lJSzF->=bWxTSW7r(W&Qt#QGUfm8|Q|0KKB6pvGVGAVHz+gm|WSg8s$Xg5J-#>9WtJ zjajdkZ{EsLGldgz^9EstHcK(xQhl})u~=hOb9IDfUr2HBeiX>wV-&F96uhcX?Eaga zNc);t`AMv`5`?~+r=}3fCL%Og@#VVU8us(;VBtw`4d}ec*I~QMil#BE-38bQx2&5R z;2`b#+u0qlb z@z|tck+F%_(M!|Ci=nCe_E7cq?S+R&4Yw!SMk?i)I!DUBF~tPqrk}qTfbVT0s_oY0 z>W(iLj%5C-S@{nqQS-l?#85R7Qv&vsznhlLsqET_=7?ebjM#UZ0F7JTJU3)K+XmYz z-PM<^)#N4*UhV_!mN5|r-Hr~iPE4~M<2g&+Qthqj;%VKiG4Hta>Geb5%5RVAQgYo& zW<2GARJX-42JmcpJ)mBfAwm=p_IVAn{+GR9bN-r_@-SWxQ&$`~d>GQL$X)-*YyLht zlP;&;+3mxO!@}lM`$OQa;c+S-i1Rw{PKHsP`5PBLfRs^5>$LUx_s}5y?UFG*ai9DM z*zXMps9?y$9N!8tGu(%GVW{s4?*0i>c_;6UF}B)Yuli-8*MqOkL&FYzHi*7E7bdzA z?SZsGL!fdthZsVL34Y>s>>5+(~NAaj$= zd5AEzVyUZa{hyqmQu3G}hJ+oEsx~?8YxJvlcS3Nnuhy6gTw90(jY-BN1mp-p6Ns%g{ z7(6uwobkK?Gd~(R*+5ZXEWSLA$yqi?Q>5nq@&LBK^|}i8z$jDds?J6_uz#PdBc@2b+>9D4 zMO<}Iu?-mXci_ZTxN5gjtfV+#t1r9HN>`&vzAar-HZ6(@mGpu^sJ38!h7J^I@{s6hjcoCs!`OYIcQo zw6n7`%q1$=7&rgAS2Em#ee6>5Scws$*ifhMPmRlesTymFm~cP5<}H&gG~)uK#Y??D zX>u33#V}fU9}ACrqIHu#yAIt0-DC$`&P;Wk5UpRbu7;TG;RDjSUu@;g$^i;c1BL(( z5^gW_rrH7393k}vSmABWIgZglBQadzOF(smr*tpU0S@n&%?RXz zwR;t54ri*}eu%jjBEQDG=oSTS4&}&dPDp39z1)eGH=pRNx|r#ml<0JVE&yVgE`lUN^gh) z9&zOWG{6Pl;bTV0w{cd2oVCPX;mMTJue7G81NSPa*{8+y$4j1$#ZfjNi6LrI>ee3a z?h>{psH2Xhr0{x=-6Q7P2KASk%_2ByFY?mDdBLIS>CkubIZ;3~>HPLklqRipEJ@nt z@Wl%U1GV4Fi(eCQl%g-Uh#N)RF1h`eP9pw^Sex4uO$f{Iv1WYoRi5up<>X!uX10;n zp6|Uh=E+~{fd!PpDaG06I1NN#qM3h`*;_c}cob4ILwDBN-!{)FcSgxOX?A(J~ zrs#Yq$eO!CWpBY16E_3yIm^8PR$tb1Insh35s8#i3RD=M;5U$P{OGj(<^l>DrL~ zN+G;IXHceUy%#s*v&LD&-ti&*OP-Mqy^9+PEeUnNE&LtWDp;ZdzsA@?%~gOs=p)-m*d%-n~($jn$)cQ>{X_YpFT=K(B(LKSaL`5T#7Vhgg+|<(qDac z?E4*#?_qUZ^MQ>b5w1yS$$wA|aXjE*I4D@ zl*xb2BEep=ej8v~zx@7U;AJS(y5v!kcHEn0 zntM<@E5Lg|+0K$Y@n9H2nA}yo0j>RdAejqNskWTxF3P^o?UUUkgiol0R9DTPsr-a} zyK8N~<3zA3=Y8ry{BZxc#N}PH-{q()xCLm@z8j6(U_D;fc*~!Jz#`TH3m!)?l1$|~ zgq@yd;I$RiHcJql{^r17gW65 zQ|q*TviySS)C2H@ac{&x#M-<$SLfTfsCU=POv|)!y3C+ruHHa_t@}$%=2pok$VCP7 z88=OAvC-3c(QKGys zF-(5U-u1p*JOZ)gW~)G|p1H#Jhk_ladb^W9;J16oZ*p53pPmDKjOfi>@9%P-H(a3& z_t~xpuc$4Z2vV~o!JIc@S(Vf0y^AuGz$c%AO71q-Div>h$9Zn5p? zT`VJAyGBgR$`ebY4giQqRl@Y_+*w`XjZ^JjVl=pqM@&47u6b!agtU_9|6}YepsHHC z@8Ls8NTY-xDToRPNGUBLAf=+DlG3RlosxnIA|+Ca0@Bh*haw<(5D=tWICLN4zqa@O z-uGVL@s06~!MKAV7xq4TKhJvBnrqIv@DkImJjyT@b*k*S$7prx2)QHfB8|Rn`skVn3G!cUmhO7TwIYCybr|ePQ}K3OIJzBq+7h>*}qKPGmpD;T_vo5QQYjdTK8tWeXW2f|Z0xMWe3nb@BaiIij126g)knUHDQZ`koW8@_^C;Hk3v>CV zf85@cOYZ5&G}i-<9g8G`C)pdT5vsLxo5qjjF&{r~25dDy{=8H5wtsyK`s#!V@4kQX zjeKtUX>qd{W?nn&tc=%aymR|C94=vIUakFtXobReM{aHWV}}E{CyJJ`n1o+VMRL57 zIY-ie9^=puzyfGFFd@-~Z4l(O?24OBFgerKgZJFyeB#z(#{A+2`^9(z+Kg(IAk%~q zxse->TQpN8ZqZovK>^;s6XaISi~?PpycKmu3wWX>-_Lqg^R!Q;!)Oy=+!=>*?H6t4 z#Gz9k`BWWV2}e@*l>f@g7OSSGNWaAW#(bZ~<8mL`?5{gx9Hm?8WUXi6;%?~ zFgG7~j4)JU9%JrqXWajRy`A^-ua$@1Ar`5sDmi^dm>p6F$%9npkz=gf-MSX3{# zr-&{fM<~Rfc^p}_ARmB-zlV=%xa!|OVs$vwQc*eswZrvUhul5gfcS)D0~K#0wsD=s z-7>wOS(yAX?>5L_ab;lVcPjFrqCr2H5P;|hLEvSV5rLQ$eqes_hzqrtr*YczMeEw9 zlfPGl>TLeza!}P~Oee>rufmpL7)%)XRa>>o7-wOolDi?&Gnz|dAi3$(J^iEnTpwv3 zQ1=TZ`k&sYCtOg=zaxZ*4Y{aN7Xh~3V!l^$kqY5FU^2Y=oqu|0tbx~ABNGH}vBitE z`wzJ&3JMXEEVX$4`uyz;!|M4Y;LId8P1hIta4*QQdGm9ii?jFaK1it+@j4uJ7W&?h zA4KEURUHI4pI$GG>)SV3_V5sOfhmINX+Ux9eCZ+rZsU2&R?<<6M(^nWavKO2OnLWz zF#cZ!EfZoRA6_K9Owy^-l{!D)2X>EH0Uh&n^?MB4P^f0I^8eQSne?F1|J3|perx{1 zbv~*)lw20MWF*pm*QrAKU|vHxGU37s;#^h;iyi&e6qp;lYobgc?4`WNmzMYt>C>+ZSM!c`r4z2SSYXtkqvF0z=I zDPu&{)o_xxT2C$I&*K7OG*K|0@l9Fd+1;jfoA%C2RW3>nQN{$^Yt9uvAGYmAa?HHU z%#T$bD;axCvZpD;e~JQMtFmKlH`gWN+V-sX$b?w`Td9(Zz6!Gr5;Er^PA7!ramiYO z-ns4S-{+ZC=Oeqj(%S0@r1W6+!2?*Tb|oV653Z*?zd5UNKATbVa6fup@5|V?%4@X)vj$3*k-#K+993b&ZuJ zaO#%>@*LEY{Wp^pmi4E04Oym@o@R}vGTN6LtG!9OLyUat%Y!POV|h0jkDOAjfR1r3TW*Zs*spgKTe^^PA)`J4##&%7ibn0! zxB?Jp1jzdS%%KoVaNdr_Dn1F*tBo+(a8}6fmhfw+)?Qj!JFCZn<>hOJG215VCj|_| zdzXLxa68HM@>?$}jg_?uuF}GUo?M)tyF6yJ8OlPPb%wSpD_B9io4~Z%7(Ey0a(T z!C9;l>Uln<>HFdbICg?ylV5V6lv;%APl{VIqHmEng2{u9#3N5~u78({aLzn{#D%uG zG%s?!W`(CR_02^h$;&P9dF+{LPv*NGA1g-js~DXc<*NzVI)mEhW2)wevpDU3HnShd zEf*4T@CeGm7@!Nd6PeZp;N_tyG@sAhhTYer2&KK^XVu=xUgdJ#L2~*-rPBlsgPN)L zbc}Xim3+WOgxw_#yoq&9R{}nL+Q-%lYue6-U+@Bf(5-z*=Ux$|0%0zi@fb#Xy)R>a zrNQNAU*Ayj!l0Yq3JgnqIAm9LkEn3m>?TJ4^qWh^QM^04QY;E2sLB%?+_gf}iB*oR zlqe5UnxnNoZ5sbm4mul#VVQ=7Q9mFhxHqc5{W}*B<>p&k;?6n%7Z7)J>?7}+^X;Fs zHMT!v5OT(pmaZ91#(UMr((Wiy&7)t9*PkRd5XOGrn^btGjiy{^Oh&-qX5Pc<(;7!u z&@Wt3!yCHLHgpue4r8$t-3QJ&gix?71r#9r^LG|WM}mqF`*qIs=wLeoVtj`54f|45 z*IVB~a*QHwA`Q{sdD8~hVE-m+F#wm}uq?;%rs zsxzNc8mGN!DKs1Pw->+(1M&1S6}DgX&)xj4X+BGWAs52=&od6QM8@LDQ51ehoKeh? zt<=u?zY|1e)@Zle0q-OQAW|;KutG3E>2 z?t6TFor)#J!g@!#Afog|iYbrmX~i_`>u#T^^PSJqvj-owD>;;S_7_RhIl;K z5l!46{z}jB^PPMQGDN|su8QJww*oFeZ^S|7_Qxu)%t(|MD@+FYCGM_|9NsKE!e=a1 z#LdiJEA>+<2L*gKueNtfm?`Z(ufGm4q(vtO_7l&yo7}KVkuc4J`5%Xll4iHruaaG8 z?U2IS{vPqWsdq$)I*e171QPY%`#4J)66z>Dg*R=;i*|_o?~Be2oZw1ylqLG2k;K)> z`%JG0%y5CCv-{T$zH_aR;NxWBU+Ta!B^n2(H(gD_v4nf{Cde%GHKSK%Ya16L@{yzM zuay57ZTsD=cSj}%Ubj^&(ts^}_+`36oI;2CEp)igD&Nv_FP*VS8sS*G#@%i$Ju$cS zPNKPAH>ZrfTJlMm#NoWD02GDyW+VyP+D0Lxdr_s>O=y>}w+;01RrE1nX{;UY^OpVW zsYV71OYU=Ds(ye?EtOwpi7o>N!%wxQ@z{ zcN^7fNP4%?{R5E?rtLy=u3`c&$oc1_g>rM@z+bJ4vJw`n8CyBlaCpl+7Z(3;sqdsfBS69EhOA_LzIK1fGB@rTWz-P%X||IoB;huRyJ; zza`)<{pqitG!~OonyFA?d`&NB@pYjGZ}GQc4ZFU<2el(Ud;JVxY6mlc#3z0N8I79! z4pQ7r(hbt$z0LLVVI0?{S==W4MV$Y#M?YNQGOg$7UC4>{qu;FszcNDzN-q^7jE3Dg z$Yx8zQ3WT4+MpC%Mj3Z^>W}ORMUQV3c5mHfHWw~nQGJ{XJSs_BEgnw#@2f_?#H*o| zX^iIM6mqzR)uKfj1c1Gs!jJtLqLJ0CzrocOqGG6!c3AhC|$VEnW$d#2+JO;PK? z7Ne35ve_wb=-5#}q-RUY)#*d~e)N&bdSBGN*9l@HY~|kvHpB2}&ej=jAF$lXSy)@N zG4oh>vW?iH-*#x5!Wd%mcn$~5p(>2#LCoMg?TSryTjBEPiJfk z8k1SfF938MJx(#Ci)amQIM_({Ob6K!-ADK-3PIj~ZuvN5%g+w~pM5n4?Pi!z!!g+Y z=Q9#}l$%5jHqco8s*N6%-?R=dD=rGMghJE*Nav90LS#3&?_0rwcwr0hfvk`kH=`eGx4bjx>qzk~@TP5z*(E^6){u14~_ z+&=BD94QHxMNHk>#BxnQ$p%M4FW{;(7EA^|(E2xZNJV<^luD|~tsIq^?H*hG5_n== zS#*g61)Ku}X58fl7fNzUXt~^@g+f%Us$kgCGjGEHPJR1N^XcnXt*oWVqRhSDeFP}! zEE+psKA6`jh2@d2=gS=`L%fpyFI0dF#dTEHp=vB025AG>!EY<)nLWXox^kWQ-D9&S z_>WZ402++A8yHb{GQXYqVF#~6hNs(nRtKDWsS)_Qo zum}^kBT4V&1U19XA?DvHx|f)bJC<<%@{AoHdbJIUy|pX|#3Kwxg0A;zrrSpfEZH9p z$znNC#Y+^r+Zt^nKKP|PY&VcVpyzz~-{Y=iQV$SgI>{aVcW%pPDB^IAN?Gex51s>!+7a_=*#AGu&Li!7kcyy z_)W|GHV1#Dh8ObsI`f647gk!6NA#vMGMa_zSR?LJ8@36lRZ19JU+8DO-Vfo|Jhi%0>fsq*Lc+r?!v*GyiGIPbz(QY1f2!&KyHWNZTx0U{39yA#72 z6EbQUT=jSOH%H-?3kqKG2z!@3!p7n==SC}_GSBI*K{a3^&;-9RkF34GRQ%I#B3?+j z{7rpoOUa&p16_vXc=%G&cpy=-hd4=0Z&#uj`XZ_on;}SWs3fqQjy?oz$ zETPlhGHSlzy1vF;D52e!;;~KF4QSe|2l`g0`%y&oI;!mL<z zyDi^-$_)&o3cOCjFq6Ck@r5 zqoHz6#eO&8ic>laQqWi|3O}#kB>ukbVuy#={J~M@l-(R%v;=NDNy@GB&V?oC? zRkckNXi@BkY@M&Suz0K87kv|UNggoZTda-L`z5*+1&AtzzPyXr_Nz!duV}u1PrRBs zk4J7z8|(f2vhfWD%o}nhF{P8aE3}$>?ePMQQVvT3RkLh$L3FyKbq4DPu`wg+Nn)o~ z7XvQWy%Zdb%6ng8_;XTkAz`1AD|a@H7Pk(PYqs4?6k6)-Fbnu^T6BEe_u-^I*BvC6s zAW!AcKCAsY#l=lQ!{PmOX2N<;I*m#tGdoq4K0>T3Zv21^yNDunA1NMX!M(BWE*G!2 z8;(<&bH0;vX{m>$$|a&=VQ~IYBYDdx{jyUN8T$iOs^#N3KQFh5jj*`U)lWLaTGfo2 zycgwOa^JRDlRGVx95H|^~|*24FUrvv+;s!^fxHKHVNtCf^D5b{Vs)vp;LJhG=V9fh8RV6Q2_e+RNE; z5RywrBCP&GA;IQC7+|~6!@QQzqp2F zB_Pp8Wp+!2Zr1cp5#n4K6pa_=Xj`cl?08UZYC()LEe=VTKX?&C_)`N{7G6ACJ?Fn; z3yN5Xz(4o|%H+D9^T@35{)#uW+t&<|v0`qK^~D8H>7~=~H!P&s=xVlZVutz?-Dh5H z-EJCQ9(dGPchZ;=&nSVyS=Q8#(m<||G$|YmPD6e`ho>D1?coWb&|^Ra6R|BxA{Z4$EHa;8%p{OY}%?-ox-egn1QKM zxa}X;4yyR?F7jCP^tihlAj;o>+58Q7fQBN8#R2XqhD|K8`t%al5yZ)=e#qO6d0g_i z!C5LpiPtMe@n(aa`6AMom9XTI9Iw_&md-Dbt(YxXxL@PoadY(ql?2A=@jPd?z_Z!1 z1nl$`(dBj8BB}2eeHnJc>qUvgydz9?zp_k87Zzy9mP)P9!8fSxy*3#xI493P_5G?r?cTUVF}S_xo)NjkZ=x9&4&K~LE@?H&*|7esA)ZJ-e=yDG zYh_^@Sw3+_-K+e@Z4z%5VNERSHD>EIIjk9QLR#Sj;`v-~hm+<(|_=eWUahUzO>31QZ{ zt*d0L>$LE{T*W_!B5i06|DTua2tVMt8_O@dsalsLM$YVi@zWf;cuAt$f!yHAog*M~ z+Li)CkmE!A@g-oZUoWkY{e8*5E_{Op|8kun%WjiS6y#Gff>d)o@57UxGi!bfL#C(^ zJeJY3BP#H|!Prqn0zdb`J&BsJXy*Q(y9h<@!X%Gh{gDdbF0lfQAruPLmGrY%+3FdYrH!vP0c)|NM|GkC&@!0>fwZ20BRky$B z_CM$F$rq?&ehS}czC8Kw1Nv8n_K$3h9jO#>Zxbm0W3m5U@^(t_*F^$5_5XYz|M_J9 z`9_8pd3Y*=Rdj!ToF*>#oL*n5@c#V4pDO@GeDX2ebkJ9VYmfiD>0V^j1V`b#_|FCZ zzrKZOYClhPd*QS0AtbtQFu3R?z9Wo_ zd2N$lE%GC8mL}RFdVwdPx$(&fE^{XPkA~t^w4!6rKe2Yzczdpc+BpH~D_optQ!3?! zPhL9RS@}|i6Q7}4a!Sy$bYpKm-~4rLMAnzQv;IF_8|Glw{pCF40{XmDHh*-kaW|;Y60|E61rEDaGt)Ck( zp)s}*{&DEE`_zj~gR`fOw1{$G6qPv`#d2D}e7>yDHBl#iSx$nW$xgVm7HoI*Bo)=W z$Tb?K3kUGE480!}fqh&;-o46%_py4deMg}J@_ufFh>CY6T2uYJ3p;&f0+o^bhf}}O zt8ZqgCw+rPgeCe2R6_~6MdmSPI4_Q10=j9Ze~4kRzSVo=v)@k8Gfm*F_Swt+F|(Wo z%i%8dIfH|SQ3swF1@^9|%cC%*^BWIHyF?f-Se4P9uN@S-*sfzRm~ds8aa&Xs8(j z3_BqpcPsn|6_WKnmF9DvB=;(Xbqw8%VgN1W`}=?%+L=G$j4gO039Rjzr-B{l7}sL; z?XA==kK=oG0Kj91Ob;xa6`icV=0LIQp7mSdq3SiNxzjpPj3&|dF1daZTJ-<*dp=Eb|GKmz?hjzV>ltRD(3pr@OBOOoMmfh|c-y0s5n&X&acnW!{x~b;;^c8FRMJ z2XRUqsy-gRZxMb^Eg!3_CdX1pMgBwvGQy@85u8SNhL|gt-%!^Znahy*q`nxEvw~S_ z|9o<4+}uAEalcb{Wf^8wI}GmbAH-e@!d_sb%$DNqS-(jf(&ZFP&Sb5nXT{0*?O=P< z0cr4cvA+JbXU@&17E?hMuX7y5$glZ|zol1FXjDdzCS-jKKrd%HJRg`=u85!^FqFiL<%=< zf%%8wD>k`c4&&QrP^uRnY85v+J)W^z4@_{TFcseCOIhVsDypXg8Vp zVKjMDiqBey?XVeD^fXqt2tg$v5I1#}6|w4EmBk;=>Y@uKh-d zpNRUL1kRxkw-+r9`{NvqM}_{lGEC1&gYbX(Lzvr)RC#*l&m-x!dMev7KcG3J5*Pl+85VL3ZgqDPEL%_+ml(|f?%>Mgroc5dEs z!OfCl$1WDG^2Nt3>+T&#E}894812*w4)=(kHGe|?Zl zeiC{&%R^dzWjkt43=RusWf1?kL&EhsnjfU6FLynKhU{k5wSksBP6;~UHj?!-64DG; z@XK`$Q&nZu5@i{x8h-O-qk6C#fLE2s%?Y>JZcx zC3`J&^MiWn-`SvyBqSjP%nzSD_@Bz5^*5CCSjw5a5gMi3;w28W&k>iloYFz-Eq)1n z=v^1-W@KTSd*35NBVVo{S!00ubpf}W>w^2NELR@h50|sTyNf7$>kq*lu$c$Acjn3N zGXgLiPlUy5#lHf&knMoIb+aetFokmC$4Gi?@FQ*tR|itO)}A0!dD?-iZ#e>|eU6Ie zHt;NenLiWmD=>aE-}BkXV`_pymk1 z&$t7@LKtxf)CIBMVsvNx%qg^tA+YaffOe-+%`7g5&Q7WgMT5B6g4MSDQuHubcA7C= ztgQ9iUNR3L6XDmHpx6yx^Ov~l9&nCUcJMk`a=*{Pf}#HNbDmB!-#)sBt%a;aQn;&n z)^TaLt(^9#!yz143lfq5lHCko8r-i>ON6+6F*aHOK4`S0^ag7yGTg=@;HuQ&B+C&$ zBALuRvAXyOGx$B0Q&sf&&KV7UHT(CpdtR2(wV81%iIt@Q#Bsf*^n+&AP)liL)SZk^ zvw`XTWF!l2Uu2WZ=r_Yz6x%U|`xA6q_wb*)jml05J(!SR2i8zo3s$bO%5s|UvhtN= zn9K<0u;TSXV^C*bf`D0yh4F7@0n+_9X6WDuuO#X8>JyhL_UZHS85T0Shjm|XbXdRu z`Z(bXbkcZVVDR(4)y_o~%we)=iNAe3V-96L*jH82##yFoXV+L$DZghLTn#_Ko-3C6 zuAYBOgrh!H%07MTe$+~emh7nFIhGyX<1e>-L&%v(*Sv=x^$UX~kn^(ETPiL zz5~GVgMq+>J>dt4WD3LGDE2D^L?ratuhNrhAD-dGF?unm4art1=8OVEJ&m{RIcdaJ z-yNEtcB4dlN;gJCemcrwv9>XHv;=mH2s;_}xY4RbRZWN0?{%fqF3K2+nD*`Lh#q`+>`>qU7P*G1r?3kYtd&K4?vyZMC zANzzf;7)@r>xZjG7ZjbR*t{uUzxx6E${HCoM;lVygKQhRP(a}(J)2(uh)L*@4G-ziSIlQChEyK!B<`1fvUy6N;}4`o)Z zks|e~{_RM^#y7WXdM8fVR7)4Pg=_gNLKQp%tk^WOpn9$&rjUAd_Y6refSUo74)hPJ11JZ ztG337gK0lJz`jO|v!>3-RB*-acprk~kk{$D8)n6^Q)kmk@_-pXgc1!?s_j|kln`9_1d^( z)*2nPZql2f*GagBdfb5|+h0zxtftmpY#S`GvA{C2CO&@SOI`aNtt#$&;28)G(*rdy zPVewOU^kwxZ+i)qK*m%$MYxZTtB1a>-wr4~n#F#;*r~fceRu>#U?ivipBXkoxJ)B4D!T=lSq`Ts zhBMclBlC6S?TJ2brv`9oPZk9lZEbzPhi8y$=v^w-%Jvwc*huE_7$px#ZLw` zf+Erw8ASPmr!r8q4l#!w%N`aAKphL9T9LZ_>2a~vYPPTGKIRDB#0Y@?_9-y=8>0pHU7!-CD7GLt_$VP%3*iE(>jALaO1k0 zUZ?)kJ%x$P68YH!nBH|=Vknjb3(Oq>L=r!9K4F;xv-UQI#ojw`mdYSb{v`1Oy1*?H zq{3seePQQDA4GVCUOoo;!*a^^a&@I`q-&!HFtch6yn{V7sJ9)GFeLQEa?RynmnfSU zB9t&F6m}QV&pY3%M3!SvdS|VHAhIM`6m#t`JD+#F-|41UXJ~V?a3q@BXk7nPGNPDQ zN6cKcqW`93RCy&aaCCM>XZf{@8}BztA3khSdl9t!4##e zV$^ct<1i9BO06=`;D`LqMs1+EhX4gCVd0Zo`Nh~YxMCSH zYLjQxmmx4XIS3N55GM1z&4pQZrF)9Lg7Q@+)4vu6rgbOk%)}tnqAMKv{>(&sx&71O zS!o_O5qKp+p-C+(LpQ|Q@siK)0bgjK{Ea}nZ4zbMaAST}%!0kEpGwDPYC{s!Fe)NO zfk&)jSyL(|rxm%7v4I~48z>c3W4J|Z`gj8J@3B!nj+1iBy)u^?aJ?a*jLYq^iePOT z8B_Jjo)Dnuoq=Bp!(# zBPKH#==wlzJPw+1&WwTg<{l;MbX4+H2j~4bDIBZxDE#6X7#>RsOr5Xs`{Glv#WgynCu$>;VK6MC%$hZGV}Fqyci z^M6)OxSAP8ewRL(&3Ox(^x3LEXwiw#cG!_$QiR|Ie_fze4;yuZ_L#|Z)wq=u%U~y8 zdi@&VZ4I&cckgoQ(=w&+WxczSt^Qq=Z|VJR)#psZz>q%b-3Q$Ybe#3$)sLXfJ@_Gh z{Bxe`@(6*fgz7S0Kmq-xbn*)!w3n}C99`~yUGD;=?Av>|jY7954I26H#0*{Z3ZRvXJ71Z1xPuRC?6Y0yCJT%j}~)jZUp$m7wpVp8xvVvrSm*k6+DTztUW;*!4fp zv5GxC!J^toUAomzI#bU1$uJ3`_{VGXWBw-Ay33&J03t@ z6>e-vk($ejnS{=?uEyTP6XpXgX!zcrS+>ILSRE!mXe)v_o7cRvcD>!18*#@pT#^GIYgh|PIe*|Hv9KN4|o#8IVJe0dTuBheg>-bUdv*)D0 z_Kd*{tIAe241L`JbtR48iLB&cVCE))wNgYN#49p z4Dr7Z>e9p=Q@xYnYxGQAoPNM`@A_yZM-AndxCWCsug}G-F$s`!D7nR#-fmI>^}<_l zcGA@2z?&XUIux~$$^RVWFTRhXKSkFhhba4$zs|)6Da!VXvr1gA+WVEwIct1oX8q0T z{vMT!f{1(7MF^MBIzlsM`#e~_iTNa+#7nTrpZjWA^5pU}C@MGu5?7p8!FQmfoaR?b z{4&K){^F|g7vwDz?=%NF^2#Ve@yKCD$hJryHe4b*Pn*h3D=6enze!&wLudZh`b>JY z<$}F#W2)51%XkKr!JA;d%|qo`3KWzBFUu(h-Zj>DlJ9g4zq99-D=K*mUk>iow!i$b zPi~TKa{K1DJt3j$!QHN>80Gfu7u=4rBdLYV-+$R z!Z*aWsq$@BZh~$NtJct^2W$JuiS#p%u$q8rNjZU&)Ig&p;}$fN^U{3rXU7{Oc+k&N zW{~8S3opw@?PtA zByVcI9dAzu9*tYBkXv)rs&!`s9dh>$&(T!^doJowb=y_%3NzdEXENt`sidsHlxILeb=iXK0$APrkcwN7DWXW;AO3n&fZWNNUOrdE!Wd2tM?ta4Z3C}PP09pdC=))kDqKWoXiUUVxi5I?G(DNamv8>)b^dNHzY5fn z91^78o68Q8X&Gx6^6ouL$YPA||P`Pt>M zO&=krf9Eifx6i>!0Vd2gi`Qas^XgNGj!rpypQ{y17M45-mhs$bR8RCbzD_6V85d@? zyO1-mO!1EQUDb}Q>{?^e)?6^7JwGz%oovMSTEPjEtE-VDS83cAKi_RFM>!TE2^vkiO@w%7fYCiIJkyJ`NSKzP-ko zL#x;ZVa&?Ug5k}`Jz39aDOXhCFmRk zyt&f0RL8m*{`gb<&O@c+3wWFw__KndB*vvrx;;aS=qg?iig4j^JMHR=1(OmGa5hrnp&n!6LM; z61u->p;8+#p!eNpaS}p-0AeZU22~ytD_j}O-u0!=W{>c*+-tarPZd#i|JfPw!ykMu zgC<6;9^*>q_h%&zR&UNZ&u;UA_YI!ZA&O4o82Ha$5&l&(M#z44w1_3$_j7-Z38m<6 z(#waWnq6ZyIs$ITqy24u5IQ*S6w->=|GbRl%sjmw_w@v6c(N<548R<)wTe({&um>CT)oHU6h|hkka0g7aVMH^pLS-goiwz1j5lbjS&j zs`YUjfN1#rII0A_5R!3F^*PJ1r(Ek3g(e4^;pdg-buw3z=krZ#r74>u*VwJ1&6Iq~ zP4Yp6+u$)LUrsq~BIcqx{%rpJ%E$qjV4ES+z&wY>8$*UZ#1^og)b%wrjTE zSE_g+?gEv(^f0eYl=jLNZvLrDkux4a5848ym7aY4;v*%yE-KcQVjo#18Q3PgknN$A z&)6Kf*Gk6K=V7^D?8|cJWrxJ3m8D1a6GP5f5mWn5zLsKlG+qT%uLQvSMh-<> z^PT!jCTBym^CYx;e8*yE&8bi(BF~|X%DYQ{$&SIub#IhHdcSM2_UO>Q^z4F<&&iJm zcYjC2z)Xsfg{J4AuqlH1CyXrL-ump;4`1pU)Fx^CmjI42_>>RUGQQ(J(j znDPf%B)GoSiwW++VR7{%L016nr}Py&uVHyHbmw0I)|Scf0elB^TcXnsogZ^@bq+gL zW9v_JgN4y`b$=A$H)G26tG(JCU2neU>Wg|F52VQJx_}XL^&Gjy|*smKeez$^V~sCwRD$$h8x2rG@GMFW|;^K~5qor-ho zufO!t{J6~x1SE&WSzfJ!s4pcw-fmwIBJ6!5RR8!rk~atO0;V~Xr)3|ER;uakd>myd zw@`9loje`IvU0({{w#gEa{!mVn^Ls@`6>$Sdynoc&=4%!Rn?B`;=Fb5y<+tAYW71} zQ_S9#jot4)Bm4X3221t(bW_6eJJczeP; z1K;&OOVeNCR}&v3Q7G)%u{x4k`(fFi0d1H`x=+Kl7-h`%i=o5DWgZDb-P*EG&hsXD z&^hC11OB~(xPn)qDO5vl_5(|wv<}`LcqyHh^Q~3B{03Q?&CL{s&pQ)@+dPI6E}4Zb zUca~3AF?%DKCO{VKB3?m|3Edv(r8PLAY_t#vAA^-2T3A59kr2r?qG8vf`D< z!nE>0{EpPozEglzU?HhtbX)P`%Uo)x(C56)j?*87ZpMknT&sAlTESAqU>tT_hqK{4 ztTA-wTg`k1IB|WKyY@F5Ut+58gz^;MKvvgamLbP}l}c3{D|vIYlvVHt6E;U#13;KPtuh9@k%grU z3+oJX6icS)_*I;MOO`3A&vn7Y6LZ_KoI>815+zITSFi2XcMlv7+5u=cPg@1q%MYuG z{maJUS_h~1_N}EItgQHYq{?!3mxBQ0p|6TFif5q5?LrhiM%I=(350d9?kx`oL;J^4 zupPNB$BpDQvTL%g-oo(8qPbV$)a7^@-}Za0MZq0w$iY9N_5O-{?|2=1$oaAp1N-&`H-!~i#c7gcW*>tfJ^1QBDJeJ|{NpbqY zwH-$qT&4I0;*-r=(8!||d^B)k_7L4+NUZIt+q8A38nhD|uGedD)`#H*tTW~tC^E^?wP9${|;R^)Lmz~PU6at=9umc0S>D7 zke;YgN1_A2eEj=vpM1AsDUa^%C4Vfb1lwRH7?G zJXOW3?FV!y{)$CII2e~P(>)7SJSJ;;4tWcasvCE#H!q@^id89{zB+%m_xL%FSa;nM zS2KNoSGE)CVEy$>KTqT1T%=NUgLZ~wf5Fh{%Rx%AlfP# zi4$0`&}NOD-Fwecfp)Ncp~EfOY|TN+{<~T6LKX#97y%hUbYH}+uRTC23<85uN*DN1^{@ zp4DtVW9gPh_nm!_ly2Q+X}RWfuIPNHbJrRf>}e3L|+ z$eVPQ0Cg`xeLYat+d+6j+p0dj*F}CEgLAP=j!H8mtUNWUNge3!MhpV|cdz25Uy43Y zKJ4`Kk*oE0o~r?#HQX|O<&*(q-{W084m?9<@>!B?E0e6gyH)+L&d$v_M>x*vJ8pKN ziCqAd}G$^2k;e=RI&XqDj&kHgzITB;Eu4x{0h_>z zv%B8B&8tHU%#RNaX|G&V0Z8KrAdPixL+_YkGtR@M!l?6w!|NZJv!&XxUgfKeAxxCF z8xZz6)@*;?SHNr?nZRzKRhXAl%jvH;cg2hzY0?ta{33dJz*%Y%K zrtr~BlU!ny@Sfq6!Cfujk=FfkTebajDFG`em=4vDeO!$EGeYL;a@RWvWnC}x*jfgQ zzaJ5kfIAEU;vXhn1U-u&w9q|%r1FP8Q@;?8z2n@ckcYxSGmZk~SvMnnsUMDzmwz82 zOkI={iJ$?dewuVB+;k#+^aEjcD`=5o0+;hxefi0RbExqBR&EnV#PAcbj4M+-A``2ZXK3mg_Uc+xbvJ5BqYY>-{Os> zcE<3wZ>aST7s659l*%y3KcP#@lJ!+wPz^EjawLIh& zxSthAlbjLq8LW*kK{6HI=1ZL)0WhnxquPrpj1?`X`zNV{5@#fJss^rd@v7&c~)KHmX_@n zH9Vz${&x{MWypV4^suaLR7oygx9Ci^!=41D(ft3dqJGP?+`r-wdh~;?bff1qoIpv@ zQGnOgNdS+!rL^|(p@7%eStK=4a8Cvo#>L`6YKjf?u-AG!{G}^}+4FHHQ6k<{tf+r4 zFMonFU0t|!2oHfq`>sICCDrC1u>rNp@`*HM0n|*XD_@b*?utdU;dkb-$FAuJ(jzK~ z^xqIy2wUyS2@jzJ5xaz>hqNPOJvngi1kC6rJ?z_)vq9uHY%;VbF8&82uyh*>D3B+` zEr7|(w?$N9DVfL0>029M#a?*rLd-@Xp;_PRU0(}QjMw5z<&DW9zRy@u@`~(Lw;QQtv~=o?TF(xEmbM*wW#;`ho1H8LpN(*vALlJTxaJNz?Zt?WFWr6h1TPCpl1 zVX^}qD*e?dI9+XT5WYzczCmhYIBL@03273bRv9cqluF6q`L8S)BEl+x*v?|DC*)D#^cNavzfWE}s##mzA(0+wuLngQYi3RPgmYvS%q< z%V`5h&Bkr4*M6nFFS*x;r2;p@oDxa0-!0OD8t$F}hquneq>7s*T_cuovk^Q|Y+bJk z1(zCC9G?0es&t|0NamCFB<92>6ZALDL0cKCnN5qDnKzts3y(nk?FFD>Ka*=&k@qxf@9Niz}H)0bdTopY1vOytFkR*mMEUL-mU&cSaXvc8VjYmc? z%q_b<`s_-JCiLNS=HJC zAEI>RK}3f8a?|R6LY-=X)Tr0`4=ZOn-TN=1mxYhdE(HSt8Y)OU}gB|xsUzJ~5hh~Aj(NP2mSpI@Iq zA}vl3v(M|AFVP(Kv*sbz9++b$PT;%2rQEcfi)fwgvCZldtMUOK;*3|iu7FQVrNL5) zmOHUsgiU|vTyp@Iih$Qj7=@vCz`*jmm+BXOB>j$nE<=H#U0@&oQtDe2k;p2+F+a7$ zT~)Dvcf@4ms4bOnSn)5Cpz22U-y`g)6i@6^X=}WL@t#w z!AYP~l;Isd{ASpoNr`_FAa>Q)SI8qe3``551>i!e!^4Z;|=f4Ug3 zN`R5CG;%Xjlx7RCU~gw77T`Q!AzcSuM^>)!>sAs$mI_-f>Wyfc zq|Lu@u3r^iW=qwXfyjj425``}c?_k0;NfYP$XF7smD^ zyj&Qo%tk-$0wF@d-_v{!=t2{d&|@oT#5&O>iMD!~{H0JH*XP5mTJ}~h#wTih%vor+ z^HmFGuQSHW%e*MLb5V1lGPNi-K^0bJaXSzvv*zojl-FcVAZ(b?6$<*iF+YJQlbP_? z)kr8sK760(+emn_C%H}d?EHc^ER*~6CvyHIpi3~L5t1FQY@7xzPMR^A@s@FJ)uG!v zRCi6W*4fEg-kyTCN zH_L1D=4|Wk1DXaN0_>Hz0WAMz?$h+;_)aq&tTU+3JA7u}3JmV1;xq~dbutJ^H}DW8 zj{j&mIgHKd^k4ya&YU|ngQDj^iWq&*>8$h2gd_?s*!L=~20OEDomE^o zVfUo+rP|q@0XS`pqy5q7rf(qSnGAF%N_0b;|2W||QcdT&6oWrL0v^i7Ycxqjbbta^lc_{yJ^d+<-E$^O#SQl$QkaE_gNVV1 zo6zs%>i(Aso{b`ot1$;!KzHIvf^t&}APZOULYR^9;7=CxpSmq~@FVc`hlN;4|KJCK zzEX<$ep~qIO%%`h%${7HjJrcd;+$s?1H=QuPQ8E_N4ReHGvU zEYn-gUlT8~=)EJ2UaLw8Rmm*jbtQhhtkDV#cR40k5-{p6$$9rR*4fy4_61=Toir z(rP)6fblLX(7>Vx^Aqg%oe6S?cSN;XDw-2%q>&<{U;rovd}5=1X5TmJ9=|2Ju#kM$wF7uzf=xYpZ_pl|rXGbh~3DsOuJ3sUUScoql zE9RJ9{mE_mmCAm9rD3nEI|CI%vp(O~2}IEMuWHqw>?n9-hhcg=C1c$6`wJc|-q*(W zeqT-QX%X<`D2tu7^V?SaDT^t?WGAKcT3|7& zF!t0^R%rK>Iosjns^<{2iEjaED}RD!ss`G^{WIMsTU98FfWfF@4|K+;vo-uYZ&WO8 zY|VuI)zNNE(7m4in}_EJ{PS{Q_p28*eyKMraMtxHJ1P>w6l@We12Mjo1(Az8YC( z=-;U*MQiM{+-n)(n-=^Cec|R!83}YyxbD3qt^PH}hCvfKPo2_BrcAT20a{NX5QTFQ1KgE_4ZfxtSh;MyYn|tMxbn?Mi)Vmjt1_T@ z?mR>f-WM@-y>`U&F$8hh$D3K=f~-f^UTIH&wfwLoM&Otg0zCk@V4+eU?qm=&9^lJlsQNo|+||-(zH%hoB$p7(L63-U{vE{d$M&X`!`dKN_bVw}g9jqLec-XR5oJ zE7542lV5rP`S_*?IlL8|jDo^8 zRm0;6h$oLNq#(^q0!9!it!^ z`8A?Z`lvA@vI%@>$Etmn#nbkic%b+Ab(BC?6)@zg5KAInJHM@I1a?FG+uTnM$GX^= z#=`~kdFTJoYdMTtvR{A`l7mSi4PV8gsPrs{;0vue*T30>3H2OyZuvFMWmWM5ktY3C}fjGP|$0Cq2^OwNAzSZPiVUDUk!{z`abXZ4m zE7ULso{i|c_8s1{P1&^{-r#q7W`DAkH*CAah*>225GM$QIN9&D`w6?_FA9R4wqJo! za5$stxx6G2L9a!4b_Em@t#lSeq4i0}yKM5WQ*M5q+$V+x9C zKFU!*zNu7-?5S{fp8G^xBTVpuJI>caWRAuV!?s|gnM#txXmD;5|!ED4}O^Tn2Q>9Au@QzD0Inc&y8jHB0 zZJ(HD34as4luGK3G>z1N+7DORhRffB^-2P)jzNL&R z2M_1w#twX4LQb=b&%Oq})9_PDDy`3Z=j}=&_c?d-hLggXR=cutL*gnQ+`n+sGn%56 zsXmut!{T;&>_X#FOf}U~T0!2B`JN>tp*+)WZw>|U-m7(Vi>2=RG<{8A%5*5()-%hb za=YeTeie^3-L%9i*B>_)6HILlqJQ3;yTdbUwmxSZV!e*}#P`;NAe5wMTw1_mIV>E9 zLm+##9Q3l<9~@+uFo zPcH?lm0%5A3P#(>|CgfTh9>U!q^!(& z@h@G{$D1mTER2AvCKE(}@9C@}x^YYHDX}ZpF(2aiY(?@vPB*8JiwfpTz77}lMFpj% zVC*&ohhA3S6h6|#5F3-T?`=3%%m0fd$d89rbe@KpKK}UM5K$Y;sB$z>>nx?7!?Q$r z?efDh{bk-D3nw_q?Tz=qp27_wL~40@nbDETR~o-`)dn%+`oflx+r2P1DMpU!QPSW^ z{gd#0gA~RtM@?NM(li^b!d*VS1_oF*picfk#uBHq^(O5J@2PW&Y<&jJ#3#S^L|j^u z`OhN@ll56>{M@XT9`yIfmm>Tnya4Z*Nyt;tChG$2R0~2-25(Ml`ZMW63tey39_+); z#EW!y;svZU@^UqRrsDc~rY}FEVhEO_WX0>cnR~s>o@}VB*cZkk{~(I-A|lVv!Dh&N z_hEexHYd-0aqx>$cAcNH4uU;Fvn>EyDbs^b^INii|Oko~`&c%4n z6I}n@t)za0Tx3L~BL3fBFnwwoNOgVSr$*d=qM55$H&|9;Z~^2>Jm?W*J1iPe6vvBx z^gT_MBp>{K`y&yN4xi&}SJOr7ynHs4bsmw~gFl`ibrOi9h?DCT8Q}R{`XzCNAgT64 zi@=uU|Gt>teopy7h2$Y%(y2o{!Y`Fv~GMDL37N>R0_XCnLvMvf-j1W z_~H8Jp!>I|^WQ(*n1a(+)*8{>^*=6Fu9{f_D+S;G`TzbIZExT+th-*Al>T<*KDY_d za2+iPYl?z@zP3LF$`YNV@E&LKUJ(AF3I^#t;I%GzeE$#bg#j*uoJ<$75cuzZB<>*k zC!W=3Z~uhi{;1XwEuIFjB)?x^O8WN$`qvMRGEjb%HeI|H^XF#s$4$e3uELVTEiSD8 z57oB}B1tB-e{>%aQ2IXnC0&mPm0t@Yx_Q_T)eZ*;b0_Sq+=L3;Td`g-vA_Bt1dP>F zT>f;qtpC1VUv79R0V_Yd|9m+&_~8#IxMZp5kukw0CX&Tl*L1fg)b5n9(d}!@>h{X`nHp; zB*_DC1AU;^t!z@h96ruiy?XPqfD3A|JuR?e6q#(0r2B5)I7yol*SOdqWWBtet@XoB zw+!RETDc;-k>P#F#hru&?M>}>z9#sn4Q12;+QqvX5wr1`G?ABm^JYOu!XV_C;r&NH z>5ZswI&|dU%tCc*4cAm6klZ>~`GoA56;iUTq&a8+%A)Jp|2Zp*GW z6npZ@Z_>g5yf5hfez@pdWwmkkvZSyGVJu8U-yTAKH_z@XSV^jg4!z032Ba~Q81J3X z3d7C$KER8L-u{m_~TlyY|fbKa6l85xU&Ay$@ zhtf{d>psnkGil`olDw8~3JaT0>35h!?Rc8(t-ZulY&BIz|1Ew#G2%K!YY$4NDAB+T z1#J-#Ei+uLq=8Gdx>$y+8!7{zHI5cJy>}Hk2%lkB%d@SV{l_9mk4?;h(gnVXQtU-N zofbkDY!7f(Ax?LEh1@Ku7QlI5L3C(_6AuPxeW2d1#UAf|#Ny-IfjHw!$Q^(+Qaqvy z#>4ix_8w7%Z~}tPdL7K&@@Iz1obz(2p%LJ6o#i8$qR)mpRgK$N@0SgAt&=@l-5;9h zn-xqZm;wynN*BHdO?gl(T)iH2p%jq1hAa1fLw8wb(Nv433j8zB_{z zQvZO@-_x`?S?gcD+L43220K)7TU|t6&$y75$IyIQ!DM zEQ5EfpVvYaeI`n5>@)g~`EYvMs2##SLbF)T@%sXfBCKOVU=&4#VC8+FBi}Y%mfD1l z&v#78F{bp>S`daipFHml-L94>cD1{a$TU2Q``suOhZ@5!g0+Bkdtv!F$@>)2yPl_G zc*ZF|hie9s8t$Cow4rnJ6ojKo+EqosZBCQkVT~2+uucKkSD~9fJ~nOmoTV`4yvnoTC0Q z0mn&PmZS}JRC!5kgaMVfKJ7K13Cv@I>Fz=@#Ydmja?D&w$&8w>*;IAC6A`>n_5Nn} zB~2K%-h$JD4<)U6VafXEg#%+NluQo%F>XwW{$mi)A%H?nz5zu3aDD(%{P)K+f)^w8 zVH$mH;>fiQZ+&sOQv}{-{M6?w%a9aYlM*?F_ym9Is*lTY0iN(A$lr@Q$&l1f^&vOl z{s>xSeF)gF4O%~dI#FXVh<+Ur^dgRgytTK1R*fWI-3b>5Pa9L;V-(zRvt$pOpw{Vq zeD-q3@e5;m_Ypkem%bPAUJw$8|MSxR*J|%8J`M;!eUfz55)#h~?jzr2|GKzv&x97= zxsLvlQ4Q|e7v}J&7p34D8xQsY1D;5X^`~SjV5&RwhOLVqu8^#OQR>IQNJkfn>J+k$ z3W&4R;<>PDxH{e#GxhikUxfX^X_t2*qdquap;2c=BKdU}prM_NXzMi2?2kV}oah%< z5Yg}1-eHLyiT=8Kb`I2`pVFifUW%lO6q+(lloY_hG1LU}? z`?r)jQb7ku*?dVKo=zz}HweY$mQ-_e5d=zb_9=m8Y}`xh&SW+QuMKt_GJWqAXDj=6Yme3;4BbnVDkn=%O#*T73dC+ zUyeB!rvqP0JZ#4n3R32Tjn7ZauqS5V+`t!S%GW$N^%Gj}{OGB>eTbz>HBFUl<|Jq8)m*+A$LF{ zhrb&z?p*ciMAbw+q{!NUzQ(4HQ#<{@wELaG>`QTM?%Bf13yoiV!rC^Y_q;mIRq$9? zH*RLHzM$S7OnkY&f3L81t(IiyWcE=9uFo{{C$IJHR25Y(Z$tnv3997Q`A|g#1vc@8 zT?VHeg*)gxOhE_>(I=9 zJ$}B`izqJ%j!fx@vNcw^JaER`7QDtaWPYj4FaHQ)wr;qg;X}pZ*R}vr7aydgkIIp> z6jK;a#bu0^1K>DoGZo>k4}|0FX_6ZL5g?tq(P(;$7cuJl3jKt^%un^PIZt@0yi?b6 zqg&%+oa2+vhroXr+FuFxE|8QQblDyYjKvN8bd`YDNJV7D|1yBckw1gP@phk``wm5g z9T0&c&o&%i-2x?y05DlB9_Tj`+6!`{-9Qf>50vC)@w>&0XFs9X@NOAF#P-9>;PbWM z)-PU%Z(@SDn*{R2`SMb9=9JF9yL#_-izkD%jB5*T*y@YZPQwSlYztdunvuHv9meWc zc)lY)cB1VW9+%!5YKlKsRj_AH{9XRLYfWb0u0%(M`p6Pk=xK~Ij!7Bv!x0w-L=x2M z!9E8-f+*Nn1u~n$xAvS|Cul2DES)T2Ov2P{ArkD>i_h-lUG;q8HYB*Pnzd1Gv9{Kk z{UKZ1;9yd)>iTeri`mNqdzg+fLBm5rX)QY-^=R7VV zaEiGJ!BRIt!4hW+Q)j;W!? z$9A6bjt7QW433&`%oWG%d5k88J1NE(Ee{-2<4Prg<51KKy0r4BL56$GJ$uYfzvjm+ z9he`1uYqQ)moy|)I>)$=R-WH?{Fz`zyQ5lgNc`#!@ErsK&pwb#Vu>#p$sWSsgAvEV{q>QihDI-s zl|7s)!P{%b@9I^`#DdfhJ(OP#=q!Y_xzv>=VOMM2J#+ET?Z1E+*^o5+NRw9YrW~i+ z8YRr32>7-KX&zB7@*K`1U`W=W3!aAY84~L*EdsqP7L6h+892)<_^QO^#HEwRUkn~B z?g9crd?lQLZJ9VxWtlBza_lD}9!3hh1BIK#q*YL;if+X9C_AI@R)&BVPxg$p1D`SV zJHpkgzm-Rfan{tm|7gg6+X6_&+{-EF@O&BS*tScH$fN`HVlpZrbM)Mbg#Uhxk9kaQ zwZY+PY|)y^B4ImIT__LNwZKFTSNQC#De3%jh8BdT3@$DPnT-vGm+{)`mp2>}>Z#s~ zLR$P+BuUMwjACz;c)3lQgv<5wU}V8giBWUuZ39CC3XaQFg(kzxA^P-krG>NZF3zRE z6Uv^}tqCAFLC2}*cRmlvfbTmt#y=cfY0;~RE;J*IXH3@tLJ(PamY42(U}9As2t(%kF;1J?xRfeeBDT5(RmW%ui0Oiu#wDxx_ZR# z<()E8`l2PCui@};Sv=sW75|P!FFst}tJ_v@`-a;>BAtZDQI@AnT>d;GwH4teXrKs| zY~zxSdo?-3% z$Wh5nh-0>lD+pR&91K@n0CsQlt-OyE`kRZO^%bQ08R+*(SCO*x-=fZ`A1Bm^#wA?F zl;7HeUq?}#6h5s+-0Tga8J}VaB2*2>7-BAP^2#)WFzeeFI7?W|hLp|RVR-)0(^-B- zIu{7S4C7|IHy#J9`aa2l$J?4c5G?OY%F+BzC`l-p^vTj`|{u|b=JjM^iB>%Iz?WyiKju^8-g{7g_e8#Pk*}8^9G14&c#+VoJ@gg(92HQ z^Drks-HD22AwA9k1HX_B<2rzmNZ%<3stZz#Fnd{0)Z|j^Jg1nF-#T6Bjk5y&SFdjq zY$Gb`@nWG_E|*HB{J&P*igjcrM8_mYFLqiRlq?Bu9l8!g+EP)^=}h#6g`N}l&!kPF z(F}8J*==30a`=g7H?V!M0ycBnc0SV>Qk6j=63=`;d=e+j^&T*{My7>9#J$(2TQ&o3 zMs@kUMBSie$N7gz(4}7#?jTKu^@pR!4a8GVeLo#*h|=G~w=2=Dmw2lv9x8cJ(SF+P zX>B1|0NfurNkywWn}D?1!=yzdBt^w6bt&lNs5$|ybk4?fd+kZN+A>-qCS1kdiId+; zX{FI+MsD~)?xPD!pgL9l@i6zsm=RHp&~hDl(Ssv?3^&>?NE5Al;$=TDCVpIN<%E=$ z$<<~|@yusm1p5dPl2^Vtj1nYLt{HT>!%eStx(sjWCa+EW+{Ce@z0pst0zvC-&yGpE z@l?D&61ceiN$ojkgmrrOYx&!l@aj`$k#ve5{L9W6M=fLw1s`v?Hh`&xU51PFd$!Ky zEUhq$m?_J}+l?h4m}psjXh!cxWQ^{SZ1bJcB5LImX|#cJHaOL0k`|T>pUXUrViNme zMs-z(%4e+t>!rT$vidi_HoRfs8&liqjjbfNi=^?aS&5v_km5 z3dk-=Dz03`w^lteJl>g+jJ0~gA#2n8AWbHj<7omR>o(#d?5r*xR zfwGnsc0W@F(qkfrrlh4&Y-2!Uc73)i9ZS6wt`imebW?#k4UPo)UhNlKEiCFQ(O!jL zMzUNq^Qzt)&}iQeEH)=y3Uq5Bd22BHTD)dL3j@rhDa)S10nNod;uQiL6^+Okk*R?rqqdrcRm1bKKha7siacfRg2ftY1OvYRFx0#YJpjRr8aU zNJ`knvbNxU<)_G}4%5}4nhAkYE^E7BYxhD|M_Fz%lnwFNLr4PAx}mu=MpV_c1-{0% z8TkH0RO6@YGi-bsik~sdHZgKg`)f(#K7{s)N#lBHW3avEK8AzTV5M{_DWh;vIn4o% zvvEjv1zuuL@S|_8D{%x^s4MA)%j4USFx&6A)0?4^T*pCv)w442{0n?i3X!>>jG_lP zBxo{;EJD9xeu9?_7w)&vO4J?}d{W=q*P44t>y$8|EgY7EIM7I(1p~3GY)BLGdLVwA z^vTP0F=vvGU2R7ojg7148Y~%6{uw8NWa^p-Wj$10podc{H5HrbiN4EIE%LII zGxg#x6QI*78}@MYnN`mjQW1RGJ0a!j5_;P2{1AYodY5kN1@veh67M_Xi|EuybK>2- zAkeaU_9tlLU$(Ro-?ks}6xU$Z+QheR?$%rk#QBInY~o^2mQJhxcW8afw4e}akhR-273VxasrZs>-c8WC)-m2#T0f1JgQ-NOB|k=*m1?-e`elfH|9JmrmKlby*Fef4;3P}@ajH}?=PTNp zqqwT{<$=Mp5JzkZ<>LG2haZ4~P2+IulLtghNchW=^91$of4X})fc@+zDWW9ov3Bkl zBWitz(%K}KAB1x+ap#~l`JRr6hl@WwQ>y%MBiB0~auV?a7gAW$Z$2`*&;*X6{Tr4? zMyOlq;fklo4o$KEt_3 zZ^&CO6VVBbmGCv66dFb4154~&pcNx(ea??lm7eKXJ7s$FXEKvBHFt_Hi^I@; zoa|t^$wu>L(!qY4*Kom3w1VB259QdWysL}OiW`szI={#4gAwHCJ+k4eh?aHyr+j&Rm#fr>lA zdU-ONW2|#G=!_9nLER{;$iPVNiE<@$s(tiy$2X1%fMmCNQv$VtQ28X#71-}eXC`W^mcTa$}rYI7PoXQhovXF zta7WCvJ&a#3|~BW+cV+P!&^|fTI+}}FhkEyvN|J-5I97%MWeOojXYIWemxmnUGn-2oX@?T5U0OpHT zuT-)iAx8nSZ<1lW<6{l7S9`pa_?>&Fk|<&gyj<yXm7d)cUG(emY%SZ(@PH z(MeVy9YDkbQvG|4mGYOQ<~WY%7EuK0-m;0$8VZ{1v!;|fUbO(2pq{vMIER1h>6xi`gAh?EfG@lPjkb-G>K{}qEp;j99oEa z1T_36kux}1;J{z(ZE?PY_Db9}Dz)P1{QPfMnyo*M1#Cu{QlhXQHj{K(88)eM8lm?k zQEX~QQeOx#R!rvWJAI*(hqVl3c&%gcxi_sqMU)rfdpy3fPjn>l5Q(J|h?`8y<}9fF z))L;fn$^Mp$-nT}K$m*bFg93tIs}*{C@KDj7M4;IHPbLl(S`FM%YITvc35*0jByFH(jrkv-KCR(45T(7MI3ILGQ1 zR?6fanVMBv1y*kTdtgU)Rj=`Ug%zvy#av-u(&#}aXRCf&JFebuFPn9B6Y@}sV~fr` zt-l_(iZ;GU1v#72ja6-1ve``v=6kPM+U*6Ul3*hL{)V5LwC@V$b=)KeXU?g^L#_wj z{_nG5A*tr}LPrZp*rqz)36#LL#guH}#LI*=f!V4!Y>BY_Wmo?md@mQ7eNR9;mOF1p z*?@~*#Hq*sBDVaS8ZnJFx5Q#VAO4`Mdf%CEOxsyFK}tH>kM_G~_DjoJ4q~(P&<#Y( z%8i(%RF%D|rBdr{iYnq#-nR%8c6@~~3}w9c0H2dvATDSs@5j_)GI)>ffZyei-t63> z&p7zo5nUPF-CVE|+h3N>2P4?$GL(8<%DszN>auoSJSA73ZP z8Z=!dB|JZPau|j};&<3GOkG!w`7A3FVxqMJ9z5aY)Hs1Ps&U)KM5guQ`B@y7yc0Z1 zUK2l_IagoePz+lR(W0-*SsE+Zf+gzutmatg+b7(Q+zXdN+rZuhqadil@VS9OK_DGe z)5(J3T>bm|%Y{X2#}y0ktqW^IcPd2y;vvF)^&Skbzq`@UH%oB)J~&<*RX`%L?4zf$ zm!X$*;9mD@4WJPx_WCfVCRpj(qxXq?cq$H?ik{2lOu1IGaFqbo=r3_?VP{R|-6or( zQmqM4=nXIY8YiLG_UcWdwp=@b4d0yq{F<{Urb=fbm!`LEBXu3t0pJB7>j0|N?QL$} zYGvU8Y!(Zf239L1qIA2JU6UEK`fSPaIV5k7jE|%4tmi)J!53>qHU`Sl?4e8qVpNMXEiaYFn8O@&SJ{EX~;KlyT4{nJd-bjxOM-*<{JiD+{yK{9JnNmD3d}7`)HF;LHO!>d{|e_D8Ik@@ z^V`*#!3CkFpkp0i0DZ~Vujdw4=SSEycA9VN4{lp5hw3GluC(MY9#6j~>Q(FkSw-=Z zFO@oguJ3+!!MGq?&pw%?;6505SPkSjwmx&*ItcVc`j(khJI2wJ!D`dI>j$cttEuf? z_q8WHhYOJN&U|{iUMq6mnft8nUXhKgAgV0jV!a{jV^-0nsqH$_@3nw5v8-C|_`<9E zC)dK92AlXiYS5umNeNhLTrFUR{Tw(AQLJUqo4ieWTDhjW8`>q!Ne0b+i-vu5!KYe4 zUo`k*bCL2Vn%h`j$t6}HA9|wHE4KFAyD;aFyK z1Zc0{y!tjZo~dDuP@ebEp~mAK=r=uwMWi8Q6QBY<Dl zBLy|5?ugL$PfQ^GwdHA_?z{=Q-5D|MhEu-+mBrW!nbhqMAdq8t4kF}suo@uR9 zei{|zAf_K37NEmA9+oCzg8zHCX-jh2QJvvfyO??sV?O4|Qal zrqp6rirY`&sv+e|a+!Ym3&k;%M3pk=6 z3_+&^y&wfcw5c>(_}dA4e2QRNMc)}8PJGXOU zRSs&^t&m@5B5|*m`^McFULtF@dlMvdAKDK$Mmh;bJT;95>`oZbi`dluETZb41k!GW z^*IHXR3z|w9{+M){tK-e--7>pJZ2s+m9L7~^>2haxyG#TH20qKuD&5!m= zSwiS7YUxd4oQy2huAtk?D;pCfkcxlM8DG*Hn3W7;(=^es=YymN9Du~A$pB{snbHv=kM2i^MV=}DKE+Acq)caV34HXgH*=OL)qRiXL5bh2%S zDZL!~yuW*!B!1t_&-W+&Tz-OWwqkm#OvagXqW}g%9CvOa2IHm@PP>3jme=0P5dm+V z>lg<8G)2dX5pDL2ARqPCrG$IXcbd5faatC|7 zD=n-wBZz3WKHx#P4(C`R8e5ac#o909vSM~vUS9&>;601#3oB4vIl21c-|9WV(!^aZ zB)Z-v?PO_ApvP!lpZ{p;TOka{`{Gq%RD!lIE>FF%CtLD*^PESN2XDRph8K_+$-(xv ze?P*f0@-Qxxf|0pki~I-pE!F-Re5Z|0pRrf{TscK{Kr4gf2GVf?zeK$d{g)9K=u-c zfu|`ynI1w$ll5)9ytZ`)T#udm#gVG_GT42{*+}B@{Il@YemM{me`af46g5U*?fNj9 z9_bxMqN5$+Y!%YrxZ0%suiI3-LM4^t)Fu=$r4fLrsh>DVL6OUpgy=_L)%dzmeW z_o`iLdSP$J}hF$CA-T|E$$W5ydQC(CCD6ISP9L zNto3_84DB4avwXL9!q|o_M5NVy&8W)tuR{)KO(e%p`jNz$>2TYQ(U-k2`HNOUwIl> z=w|L#akjrDxc``A`criu0+CnDKo|q-nH#kNR33h@Phda3`S5)+74~^tq9sK*;t8Uw zf*HL=iGAriLM5eo^F+KqPMK#*TjNRw$1T~A`b7XeBs?AfoN;oTC4Y-f8R>HWk7YAh zb}ngG4<%AA45K5fCv$FHK-CE>2R#&V%%*M+b=Q0B=;GviUb%Ofs79FRs?TVUr1h)I zEpQsw`Odg!jO@zC9H~Wq0w9qlbCa=0Li<}DKV+!V^WK%a-q*0PTt4a6LT(pt`#r9o za#-9`I^*IjPW*9ngX%@@`b+87vVBhBjKgT|3|IT^$=GOpg8KT-b3aa~q*ta0a8>k= zjSW|x&K7ISSvuJ5qs;Kb$9)CqCD+>w8L(4# zLD@h?qREOsWosU5=AXM$zOz#AL{L=#j71YsJJ&gmUu?wc3!8gnbe==umiJU#?myzr z6bMy?GeSU=IO6O^JixerufoYQguC$T5tpBH>i$W|vaO>&;ZyHL)60(NKb*51xz0*< zL5IIbN5M6-F!M%XW@XF|8TQx1Q6Y&Mj_o(fH#=4@xT$lEjo@~tykU)D_=vuJi<6OQ zXHVIEQglm%Z|hQ3Npk$&;fp!9q`uY{YdeXTrv~jS*MwImvk#L-rj|0rnh;E5wmJ503oK@SE|@nswN zjt9niN!dHv1HJFg2ClH2nbkToZ0B!5)C)455J9_xi20?M8PBVIbD3>98gnrRnM}Lh z8arP@&fB>bjc4%dG{i5zN!OW$sMe= z1QIB0v=0hG=&+C<6VJCfLV9YKVWbH2b?a_LbAI)EeD@0;Jn1NgmX|DDP6W=KMi>5+ zb68Js^*5yY`3o(ktk6os&*-4nEEX7w7TS4EL@zcNc7`wAwE7#p!o`UNX}aVH?C0aI z8Ux^qWIFz=ts!>OMpb{l9RFQkzF8TfR=a*9f#TYevoq_bz1gr8lbnIZeHHscVrE+i z>K@o?+(T@ftx~)A^AoTOh$K64-#vbW{o!uuA<(Hl0$6&bM0mJ}t@ZxhYaBA7^gUn% zWY&EK0I9~WB~3Yaqv|mpa;H%8S#F(5f;(zDI+h`Kg9|$zUad;_A#%1_MOekrCyCgV z`|I(T{j4=BS_5i7-X467jSBze)yj9i4v&x+;Ft@76;|pB;R!!rbD$7l zzX&YOt>TavgvPQ)H*9(Gl{L9)QtiMvyLZn7t75D{YqQFVR(FP&l1B5r_j{0!5{i2S z3(38q=?Tw$$cboLr+e$Q24;X-#dZvmDPlG4u44QgsIO}J`xTHhUO+GZT;279msr+M zHGQr*%DGkDt6p3SnIE&HwMXpkPIQ7DTd^1W+Fnpzucr2;Z)GFzywz_VVeAfP^^%K4 zIBYq*#1eZ}c3ik(Vm1s&u_Y$jLkv_mB+c5db$?C!o4z!w5k-JpTcg>%A!y(uKIM1r|;WVq)90045WeSF1L~(&Dgy+^bN@_qIF~f3mO_B}= z7_M99e6F12*Ag8%uB(x${)o_z;kY8q0$13}@Yubs5^A|+5)k*^_T5c!Re&p;4 z^$^Qy4&Al`pYrxwJzj42c%DwR!0EGB4=91{d~B^2Vy_5M>dx|PaRtd$>BGEAax_V~ zyApnzZg>$=6455zH~_nTc+P7g@1i|hdRlyLA0~CoPF@c_#YRP)m)ERZ^bmN2wN=0w z(Sm9a&}&N9rVV_|$5HGI-tUU$#g!4oti%lNzQ$?p*Im2^?>7isY0-|JTD}(3dYdY@ zXJ8`s@%g2qjkWaB>jzlJT-k=eT8=l8t#b7+)60L?Zg%cVnmtw4&l5i{zN=7-xv#YH z?$D6qWzg!`;i{okGd=wp{vF2?ULnn?VjC8DI!$x$mZaaLAc>X89*x zJnUZsl=||nD4*@%$AIEk0)&+nR(`N8v@Zklln3ty3cDHz^Nf1dCUdV}9N@wwZ8rJ+(6~ zRfww`+??DZHOb9QxO9W&yv}-V$ox^^v)AdEMzy2^CC=@gj|Bx!Fpmd}hf)s*z!E-f z%U?eHs&*rZcdf%LZJyXQHSg;Oj1{-r%RXfpe#-r_%b-{+1AO=9GTZKvFVCN(=E$P7 z$hChw`uDQ=Yw)*;4d^@AdI^J&o-TIA`tL-IB*f);U z@}P=ztxkslGGX_ZZ_@kLq%;WqS+6bTGN{;*Va>WemDLD7c1uHtSZ3KufH+aC>iCB5 zZ1uaYE!brh_9)epvXhDn%432JbaqQU4dMryQ=9C~JN4PT)!(ReFCnS{rcQGS)q`*i zKQDUo_v%$<>t#xwer|sK*`IUQ*f9$?IHm+-dN33dC2W=^xg>522iMG}c)Kw&V)RBy zYdNtcBC#dj(XsA)y;EGRJ^NWdtpX%7r?h&!vxm#tchpBICmHSFsW+ABNADJNdoZD_ zqp7B(f7`CmY=XW?XjIGq?yHm7*`x^Ba|oQdsq|RJQp(9Jb_K9;$K$W7$+3exo@aGE z_L>YvRX{X1U0xHaZABfA`8jdyF8qUrB;h|k_t%c-`;JTkrKR5d?9W|t1{aM=w>QGz z%F9Zq>DWQv)VAx5>ivEs)0PFrBq4!Y^R{$Caw$Xnz=A)zcxyMqe!Y7Y3;*mW7=7T| zT$5A_Gk}u7E7If`!43Lb)p9JP|Gf$SYblM2LSa`&PzT(V{QaiQBjNX#KHWcqdqqY< zzaKdj6n|j~?Hatx+O3KW=J+ z4Qqh{j?7dY9J%E`Dj`(TX@Y$4{<$*qN4qJZkFRU|T@d{1T7H!Y65^y1sP8JHC0zfi z7ykNV--iSYC{6;-cB$%+YM|GT0)4sjd?|Fx8;0EGvOPER(~1eLVWKXAnBcL!ynX;zxd=KK zhh8vwxRuis`QT+ny|KWwk@)=a<6ry3V!o>R$7_fyeO_?~j}MbIT>B+&RQc_2A{yua>mEhMv5&HT+4fp?iQ=0-j z*v*K-MvmX!bK42z*AJr`nScBB-%sa1Uyj~}fh!S$_50uQU1ah>y)T=;Zu>tCt^c|o ziE~)EKJn&4e|&CA1bn+jhcyfJ|1?+rYupql!%fb8{fPbh-;;89^U|5e z{yk$-I0)Os7v%FJ*#CON|J!|)nqz}xARnUmh6Z5+ouuC5ch=2Y5=Zu_IGANaFD}~;!YTQ7RU8LH8!KGfJEJeA18KZd*XXPRiD@WU?;~>zRvb?I z2XpD!+V12-;%}bIos>#RCg9)mSXWzhTP*s{oZL7T8*Wgh>HN++#B-n!-TU{W4`GB6 zLzPo^{P%a1QU&)ok6Be3)Wq3B=%*f&075PzhewyP0gZ%~rG?^=VeUDDgIP_Qq)5k_ zzn3I6dzby~70=D?7uDD3u@Ont0N{j!Asji=F(4Nx1|j;jDLGuwX3&>{Mq!W^+L@j? zckppb<53$50$Bsr?zbift%3fwC@a3J8dV3hfl_!|MPD1UpBI@fs5%^_*fL!v@bzM9 zn_p{JX`Cw=Fb?-P7ib{nwV*%r_Kho=BavPC%C+(#8;+LA;%O|e;O?CARe3?fY9Fc< zuydYBD6#X949`Un30n~Vyi*v1H+Ub>9}L+G5%?amFko0$gHjo=x}hYE6~0_?tBU*+ zrWh;XaZ2Cjo5tzgi2|TbHroO?&|ZOP^NRs4Ust%oY1^MAnqZN!=D}e2jPi$%kASaf zG8m?i8C=1dfA;NlU&XRjOw@vF;%u_9!R<2AzvmhQ2Ih_{;RDg%r=ITv(&;l;De3e` zFi&E7omw2fMFip|++-4V)zWR@m}~xyC_?)wi6H9JmPJ20$P!2|q4QfHi~R_Zt$ZS3js#I5)qvm6 zDT^PhvnhdNi9KxJ&#&*gz4l@cNe(8ZzS?2!-o=pMB{~?2U9G%MvfKS;@GLevZs|)< z=W3WZ8-;tM`@tJ^%~`y9M7}rq0p0ue)SHI|roc@8@gGxfH&UXN0ENu1^%`v>WI}+- zCA0I^E0dEIn-4`)ysEbAG00|l{*swKmf=}a4z5!|0Cx|adu~mpw*@xJC4Aq6YKOph z;kEa$&Nntn2T|X9SNL7SXay{9^-lHi`l(OGW{Bq9jXR&CPmW4oN%eku?UCou)fAdp zj`?;a+|`Lkt1rS0`f@*4niQjFer+DU`phu7dO4N782@{r^|d|Ub_%=tg4>bWr@2DP zao5#ml(*}jRQHUGpg0QPy74ZUzc!!$UKyk8MRNz zy^GI9aaK9^tgr2x+za>>$`3!t(h4b^eQ0p%=>?DDo7wMIQQNbbxuxJ^)ji~W zbYT1ay^$^02;A2}+8b9O5a5x40RFa?e#KF z`(%-l>sM1;qK83GDipE=jzMe$ z_BT-|iBM4}WKIJqb48|*%!E{8lQCptBT}Is;q~t_LeX>rIvoEp6$kOcOyHr!>B8v^fgGjU1;( zAWWT~N{M}4T*FXt|JE@oucxKpwj%q1&k!LlxQzI4^+B!7e69-{4%)|J(ACI||3Vld zQfm#WeUN=I8wKCi1sAhE;0YX)V2<6KHSLGpqaVpYLqIQC!pYm)V6m|bV%E_va4#`a zZ%J)@Ig98<${K>X+frJ?0synKN&unL~S>Pg-M*$g0j(03s4Nr}pOO)@@+_xc$5k zYilk@$aEdvZ}cL@z3>XJD&iL(D;j4=Tnr08JAZ1fO=bHI;1G5Qh?Tf}eM+N$3)0}H z3iJ7u;HPzc^YV#b1e4g{myY%clFb%IP0Q@m`U6Yewg*p$3Z>6*-e{A%2Ho$M#65`1 zMZXt~Xx&`S^s&v?FcaIkqjGZPW*$w<7^Bq$R+2v4WLxNl zKJ7B~sI_T-4-24DZ&S*vOsiMR(lC7 z%cUUck*#8ng$$u+fQ#s)3+v-JC#*K*MJG*mEsi}WTM4AnKCY50B`vZK8^<IHN@7!8JIyYzZ&B3dRghd z9qiX3w<>jjBG zh8Vn@y`{HZ55oA=2n$HjOjr6B+=?H>4z_kw)18fmi*IW(tCG6yTk$!+A?}JuztZ?w zK6$do@G6$TaIA?ozxgrDHo<6n9C3d%E8dF-O=^n#*JCkUE=o&W!}8~E+cj{`19)X= zS3KpYvn7PuXts8{aKVkb)!XwTrHBy-zatiFkf1)bru$v{SQR8Nr-mJ-g)*g z3>K~1KUWG>>s(Oce=k#@KeBRI<~t z{Kn)HB@$Qpdy5nB7HTnB>({z|V|twx*d^ke)+Oihg53tav9K(}gR!hI_RsXh|!#*rMQ)P`Fe-EsG1O9)66AGpqfFR~rt zby+^A-65&hxgz^ZT~uJEN~J(9#?oD|hQvBaHb!y0GtcnmCdbJ|&@Y8KN0?yRs6~za z9oP5KJ#_M~G^bfAH^E340s_izTlyS{_Yy?QY#kx!m#!)>$6O?b>7}7*J&*NW1R;kb z(4_Hgre`=`hno%T!-zFg0RiVe(?W59HSKuLVS?s8#VOOLYXbV)Eh!%;+_YLE2@C$Y zo0{tE6p?c!$7H`E8eSZRDGFRU45n1D9Fi`m;sp9(G(TCwY3Q7N31mMlpa zh6UXQe=(WF6(g(cYI)DTajb*Xe#~h3C_X3y6b4`;+=bTX;g_34eI?C_4-@i^SLEKsTk&==| zE@tAYwg2xYs@j=z%wM7(8>lmJk-x5EamidXxyC{mOXC-i|FsIfie1Os?|38=2v-cb zg_V;$%QMkbr&xv91h4psThz}4&2kS9z>J4+RiChiBWp}YJGEyJf4LA9O@sjL;*+u?UKuK5jeIr5m@z z#xJAy@wqiP^%myfQ%nWu4U{@Y$)!bEoITo$XwW7LRZZ+0PSm?f{L>zNy`JvU z4TtnfbN{GE#%@{U9>x(pSU0~R(=}u{t2cM&y7A_aGGDf{T-6%n4RsMeP@KUGS|ZmfQC#WR^)tF=sXvq&R09I||kSSUHCdjpRD4J|?bNkM53BTNHV zq$-w{1#>xWHsTZLtMhciUkFCAXyDE(YS0~|pV{9BYBnyqPVbekbf_(2ch&0(V!ha_ zy$LBQ(M*O+)aT6 zPT?cVpBMF>7*h39TEA*7i5M<3$*S|3f8;tq=V4B~FGv9nmp(Y(RDiO!z}x#iDto{Np)A*ar4P#OaJ*Omw+1b0v_&PofX=iu$I ze;a>?_xK?vu%?Pm9#s1gP+TRoF--G5MJ-9S<@rNF>w^)edIzPN_UkL(wR=b}fr?5I zKk})iy%POhIS{fugW(KfMrGu!Mf5_##LI`Geuuvtw;DbpEY@tfP>YgPvcK|O2ZH(*x3=Uh+zBq*-^3O&OG2Lto4a3I@Q5~Zx1ghaSkNmaP+fT? z&n}12*#E2=u(1gXZ%_4zG;Q#n$si7tO5HyZJE8THsE7`EqZ;#*q2t+PMTpz_vnva< zz-+*;Mn4yC9t4k!VV+EY85xjWG~pThk6pXyc?yWRn}%K2Umm435o=zLEqBAH-lIcJ z%W89ZCJ%HfnUVXvK!%2B{Epun!ns6|GJ|V!P~LxhFE$VhrYv=&i6B5Ooyn<^6z4Ql zbwgL+RK#S_FH~1o8i_MGtoebdf>UbBDd?LTF)8H}A^h>-4sO9{LN5l{Y=`suNdjz8 zD!)4q57h4;0^FFjUu(}dyb!zpD`W2JO5+XL%p*Lg4x!S0C+u(bPX*P8bEYJ=D{TtJ zr)Re<9`e157$1~DXPD#lnd657JbnVi@Y3Jg>nPo6#rvbzE(xUX-G)H`6EtrHYw+5i zQ8qF7+hkHo>&eGzu6_(-v@Rp~jZmcw->QfwiF_9)e0g&L3f%eA$`K)9^rpIlT-E{M zu@0NvY0KOV@l{2^dj^X8?37+T_CIT2{I1H`+2^YCR7Q{|b6GBeI{JgQw#@pL>;4tV@>5a;(L-!k5UvbZoAH0iz`+97`Abx*N9YFc`!AnoPi?_ zNB>&a7|5@Vawi-#TrVl3QqvkZ=$Ec|;S|ojkV>AyjJ^804?`6qSK#PHMrtUN#&eD1 zjQrl2jnktmyCP;vX&N|xCtr#hs`}a^MktciMOy{dQLT*Hz90_bjR2UmXo|kUB}tsX zBMvxDAXjXrAE$Y!^e0tvel?>@{r4`hv8lzDldsu8;xCJHLW^N$!As*2RKOmA``ImD{5x{gRdHUY})=w?>#pOC%F+2%arJj@4Zo$7hd#yAE{}h$#1C548Jg*Sb8;;qIQqO^7it%$lvh@*aaRHx zIQsUJV-&=u_xB>`!|!<^k|B`ksa@dg2SaP-*w`X`#R67vAS(@B=g-P&ostEX@~!C7 z`;?nP(P>4YZUVyJ#}`&^R?B5v@KP;3tTp`qtgW7~{ z0br8~;*G-F1=!I@=4^USR7dwD-m$CE&kU1%8yrOv`V_u$sTozokyHZSE0a>cew}-R zVjo#h0w48k!-dGJ_&4QO5QTi(dtQ*eL7lg%+aq%R=7^CYiTe5>H2mPTXCWaylqv~` zVrTKm%YW-gA^$u?Hz`UIxAz{X4{9cBKb(*Fxv9Fou7paRau$w$Q|<4*aSs`+EjNSS z4idD1c|>%K3U@kG>gncq&S29JD=N7?By=G{RJyjh6C!*kF#A@6e;0|N?nj%PvKyaGC*;VM7at+($0s_j=%XFjBkOHhuLl(>3WvZ?3fGxg*f zKCcn;Nr60&%kkP6*m!tn(`*HCZ z_vrMT9!}F}qnXvrHC-uqIPo9Tq6b+`tlfjx2))LUU5)e~yOs%4@AVi>Xksg2vB$66 zpq-0sNiq7_oa0}YP+9z+$B18Utvg86(NSkiAy@X6gyC5!k0n4Q^{|HrX>IZ<#tkgQ zIp#gx_t7!cmU?H&MIuIOz=aA)5%pQ8&nw@a(g8~x;Bp6*fp8%tsw21KmQo2YBt#{< zcu3+5gOqNcI%kp}4{ZinxBT|t#~xD0tl@p_+5-^PS(Tr?cgwg*hCuK;g){`hf{q?c zHDh8{j@A>D56PISVK{{9IT&~3T-;ssV1ZqrHf-Gxt@>4~tALYMn*EYB)Maq{?Pnx| z)3%U^+Ct_-`0ceTkm5tqK$o#`08_m8bjTL{`~4HaQzQwQ`^xz!FyxVW{FVRpO09l1 zl{_qA?dH6iTXk4vTMUE0pMu^HrS(l!4Yg8Q*IRkcj|-=lp9Mdyd5~;12pQ;@&b(9E zk8+8x%qz$l$@}wkLY5sp9o(`;^M9K5OUa-A>!ss%S&#ghGk9>O)REl71RT(FpPMF| z4B+psxg@_>7WkSW>&Eb0)4k?TR)^PHhOBPMc(OHq9%?{G5WxQ`Bk~iT{6IJan}o~t z2Pvfge|=c#(@(O2WoI)aOG{KF01S7dx%{)kRyh>XHCX7WwPEnn?e+S%%%3XHAJ``i zz7!7;EX>3(?TAg)TC?@Y=qq^T#EV9#e*u5Ne{s$_4@eCkkj4Z0qyCivD#9|{KMQ7;G{x~tXSt1BB^8Q&X( zpl*&x_^j$t4tq2@bQ?^Z`7q>J8va~eLdyWP+Ty;2Lk2~>U9)^ZW!{9p{n^7e35$~+ zXUI*eO~cN02^zaX<`B{gY=%UGhzJEQ;f5)9Va|*Q)vcAP1r`up-8hUi8&nb)S(zwN0z`{wXGzx>q6->rG+tY}5!%mU z?AFw^9V`LwuRt8bRTKIh?GQHLI`*w zt@u_mj$^x8>?e>{v!mn1;@1nR(fr*~9OvRb)60_k_##vjZX$w!&x562LwP6kwnmoj zHpAv|$F5Y4`j^Gf`~HCAW8w&d2SyIvN(_E{m68W}NxIgQmFrW)1opyX?LC2_+&9F8 zxvf|kHwc?+ANA1Ky6|=V8qG^)|}@>vmK4*+>d59DRIrlFX=DQR1tx2_ibAQ$dQ^NAI?yiMhGYSw{8V367&FjPUt;W=xk1)GZg zEjWISkZz`aFZqJKA_e57BT}oMX!=0)vEo$L$x!hfa@@^?CSa`T0QsOFVC?lvM1GPu2e(n?(^~ux z7u*mR?^$dLimcz%C3H1$pbn%IxPlI;4_taqU~+CWt;0mSXz@#H0ZSAbpFKRP!aME2 zhu~34w4>f}gNW1?)((wOgnKb)kDk!`SDLk#HuEXzMe5Whv7Sube9sF#`j*9RlnbX9 z?xnAX0~yq81u+*wR3asSnO^K+0lgFRg$FmB6k=gHki>ZXm3kG(DYR7FJ@vb_0F4WB zq8d~==ww=mQ>+Jb$}#BKH=5a~^rAiY&EVT9UAP4qH}_DAaoXsBaVLWb#|Cb(2&rm& z!SmamE6V0-!GMoDlyqIog%71ZcZgykmAN)Mr^oWJn#L;V;(@00*GZJ9w49(0z22gt z9EY|2O&+x%P@EK!Ec?1Cl{63$OIQr!h|+EiedtcG{Q}hMz;fjRflpyQMhjS}xjk2A zCfJ2f#?C)1b~m>i%v>rg8|-0eupbi;?5Z-&>=gkHYMANY1H!p?xb7+>6}J11+ela7 zM(;sAUMU8%W=5S=NI$ZI9jk-X4PU_rRTs$5YS6~aS5S_@#b9B_EwwZ`=ih>PnY{-lYS~XijzP0 zn{`NTh&$t+4da5jgC06GmtcAPdQWY}gbsCjpKH5}K#W(6EH-|@E4d|jP8fq2#5N0t{MAQ1Tn0RJV(Kic zjsCS5pgr3zwJEjF_jJvY;C-{=24etcxnE$o0OsD!6GEY-1Gs0y!1~BsYo=$pcY^fL zBtK;Q(c{hiyO?G4%5gJf9?hh<{Z^DC^hB^g{s?v>pFc3PY(&Iz8PJ zIrS!Q$vm8gvnQIQW+HesWB7zab63WadEA96+ij{>0i5k)wDIf;apRmg)+kPF1~(&_a*vE61r ztTuyQid-IA@Neo(ntp8bWpit+y%b6c>rX9tTQf2)^v<@lG?e)q)zkg~$A4)tama^! z7)nct@eShezlPt7ct6)FbQH9$W2Y%~#<>qb3Uhe*CNYb+4-&)|$epi>TD`Ibas9$pecS51e{k|m)&}=1-TkHXGe9BuL)&qhZh{O^DnhT%C8+Z< zj3shg5-Xcr)?QKEKew#vmusyDg=BaaYvVot`=U@y&itt+fph%x--*sdNhkuGYl>t+ z`$^3XG0vW353B-@Co7mTAi3YlPoT&q!ty>$duXdf#%mcslkNBKOrWCZ)<(l52JAsF z@xFl1&RMxY2KkUXbcbe*w)!9z|6X)@2t!=P(#^d?-Q0U1<=d~lol8M<;rw95rm}|= zeNqX<9Y2JS6F9ytUa5`+dl5;x)v2V&Sgm^27W{#tkEHuAo!H+Je)JBg%mM>!z<%Gq zf|~fD008*uHzsbvA0573p16cnIKJ0*F~+IDDCSVG;9=M-m+STKIvHrW;t!^MGGdLv z{5)30B#0ZyXR+yM=AUEcs{9xVL+C=KC~uk^A*bd>$9l??GG$WMfN_BC=`?n+ zhy4T$UeIu@22Nix3o#~kE^ze2{f30S~(N;M9@qTW$QP6J-eHN;5 zwBP|~ytAGfHvJ%IS@8lk&RFpc`f!I$(;qCHi|KPVDCORiC_CTafJ&*Wb|3Y}JG;Ho z4{L0vZ4j}NukZ(nRom-TZWjz0p|dv^NGJy=;l%}(Or&?N7D+p62P5V5J6b4L7%B{9 zT<-sCtrPOd$~)sf)WCKwZs9qHKUz!)K&{a086{YV+cWNs-X_@29C<0Imhbrc<-V zx`rWgfMaycMG_W`b^q!+ui^C(-28?ldrykc1m-Tb|5jyPZw+QBE`NgX6W$8;BBCppjQg31_Rjfin3l~>S3h;z z+nH3lX~R5y6fiiRw^7MOIPr73b=sdj63+u{k$h+T5|2OX=G9k!fX*@zF}Mw@liqHL zY--_qb2Yd)uBq)IZCD@c4|7@pwQZ*U5&4Zoo{tVOG@1-3-c813!to#_<&2E;v{atK z69|4|1M+`+yT=@1MVUFoz9HNR$oML7A+yGpW^-%q(pV2~75qu5{KYq1Z-)_LOsp`H3+K5Kka1MAPf5ZEj8k)*#a1zMgTC} zkJ~*A<~Q3j8L4$`#j0XxH!@>HW(HY}*ZJaKN_ODtWC>TfdIwMSz=PNK*XFCsoHI5s zbVUj*og!->XQlsDU`<$NnCQ;%B`LG+nS*|i%EF!?*1c0sN0+VyO4fJoJKOvW%3UEk ziRTk3%^wc2m?C@Iab$11*Brh3fqP1~P@%?kAA+>-)zKyw+|m?I?2}mK^S$Wnub3E= zUE+@vNKPvCDg>Xtteh6lL*z(q*Cyf*edx6+BfJf2F-l1?{5B7KF{{K^7wzC@?VY&w z!gZ#Bn`P_1-aB}{)_v=g&&4reWutXsxQFu(t{im479RSGc8GFb+%mnKr5_jqTX;#O zjEzRIguQozSy1bJXHDdKggCo?qnUIm&oMx&U$Yp1op zc?Uh1>7p~+P4A2_^65K4huRNWQn!5plQ`a_@~t072Sns(#ARXLCWuzkCD+ySbAlm{ zKLHFP#@ij?#wYMp-Nl?r+2;S3kH8GbyN6~ zGdFf2k;jmk`aIX@`|O3_-^ERWFYEHQ^3DCLm(T_{^Ni@<#*HC7^B#K+{)#+dgfL0w z5y)>oqe#CcPTbOrDhFYyt(9J}TnD6L_76uFkwHxroDtMop8UL+?3VcSxMY2B@brmu zv-i34Bn$I$Ox9`h3Ke7h)d{$Zy$?r)s8h%khs@b$q;Jf_g90@$V@*g{Cy=Ajyq?C=!8ac9=GnN zbxW1f3+I+xhT#_PrxCs#enc8`Kx0j7GjSz{_%R!|aEJMH$YHkDL_{Z$I^1w^2Xfb1 zNan1C(qZ&d>`USCSUUd;67yGv$y4Kc1840gTkG$Ij&!36Kbz4VDPj_m^&1J2yQ-|l z-(oB&FEj3~(VSe8x!k`hNE zNYz_vV6{52U+nP@lOripnhZ;yJoeT_Qg>)K2c=8oP^@rEf z>t4wkOA39|bj!#jNtY1Po*MVq$N9*c@sr}BX+G}6Rrv*)#V@$eS(l*RGJ66$0^=Q9 z-W?AC^@QpWh-paJ17-eQhczm*(NppyAxfOcv&L6T4l7UVonni$0++EiVdAeVhHkXp`=j?GFLQ`YSq4A zJG4y-sL<1lqy#e4{-8SE@x<=gwwXEo(8kkfL_2qLFYIMacgWlSPCy10@W&1(g718FIhXC_h(kSjY- z*3a~UDe?$1CMx2_SD5tzzx^LgmIDPcX>cAourHDm7Sr4iej!-D^#NJ&=#SetXJFBc zY~>;x_`b(g>jo=O=6qgHFTIM@1RdHu@1aTIPr5%W+bxzS3CmftYFP13AtPZvz%Y7NUIwn*PkWg^fcw@`LoIkt zj3U!8B-eka36MfZGD!?y&(5yu{_55l>lnZwJY7JN!W^yVGuojYdiJnSCifG=!%?CA zH!95h4Xp+n4OtXeA>y9ofmBTAqF(^Zzr*Zbw{new4fVCoKjS|QTo2}p58p6fvbiHO z0&kiFBt%|{wUqLxRJ7Zm`!<#<#~nZG1gWo_;RtVxaL~3jDeTj>>$Ca(`Y@cT->ykO zdzAKO%GWpN*y&abA2kcBU7lpL>Co=KtAJO#PMWSNM4jO&?uShLFuC!d^N6nG;|mBj_5hhZJLu=qaU8IQg?&E6vFCqM`ncQwqwfmkGkNzV;v-n#9913# zt{7gs<+v@6(ll5{o^ zMVD0dMAwcA14Tx~2K)+Csto1M^Z!fr^S2{5BHurjbv5E|e?$IRpbCFqpZ!4hKiBzR z-$g#B;R~^(_}1_9zr+szK8zW1+-ovXyRPfMj#26b-=EKAFZp|c1lK$SrPC6J&aR{G z`Vi{L87{cYCh8l@|Nh-SpLi03h!`ers66{mIQ_4;aZ(dj8kbJ|81s&+oYaCpmv!ci z?ced|-9Ju3!2v;g17&=8=f|XL5mMj>5(UZs`_UaT3xjKapkT|g^K(zkk)@bgEKqUR zJF@E$vjs%L_xmV(cHLCzG&n8((97}%b{_Y?B7qwg)Q=9=yQ*9sp{E9Z40^;HU8V_n7 zThg6Zw)@;Q0eH@B>|&qWb!Ulm$dMuCodN+^8h0_`vx1DiUjG>-vFoEd;tq}cU;V_c!O8#<{3C*lL^hOUCSk#;GgE-Di=vyH54NK;PAwnH8ThnmdGrt zQDhwA!aYbzcE-@Id%8pg+gQb2G=Aq=wnT*-`wZBYS%K->>sdsiQVLK0D>clg6#(^* z70fPsDdPcF#dffr#<;+z`k*Pr*HGq=i___p$qnj}&n1et^5yo+nmF*hOY34eYqkCx#q=cz*9`pr5=Dc9PVRVkadnjT(I^{l z1}z%|rfW{0a^q5t7)w@;{8^BFwncpL15%p^Ktl8z18tW)WM3b({9kq7f4eT}VnhON z$;c_SG##BtZm`!% z?l{%|inCHAceTnrh1nG^zud`6RZy28>ntT_)M0BJhB?js03Iy4mndg89RBl;*uSa< zOPFax7&`h{_u)V7EAzRSvnM=nk9536A$rpd7Q<6zhjS&ZVWA*-K z!$!=Gi~rm0`PV<=ZXpfQ#@if>J40Uj8mWXJYNKyLasm>pmg{kb&QqK#z?T(y`i1hJ zj_HdWv(5b7?xyR-KY?1cy8Ny^G85Bs z<^R6(Y&VguGQ<3GJN3>*lr37in-bNnZ!Li+hvZ7I(`hNU6It_^tvl-CM_U|%qJ9qoxmxQ;UBK5RT)XMf`uFQ?_66+CLo?ZAUp%$1c(%6i4!Fdqd^ED z-xahhZcCB>65KnPb>KKpBksl#kG}5;$^YKNkd0A9H@JM)>M(hgB<^MD7bc4jpt=(+ zT0oR#%#k>zPV=;cK@(d9!fnA>!D^53wjr~t~DIlG(wyI=*Qu)Sk*FU z+wa+Ta5nf6hTIhfNA{031ouO$lz7~9->$p7`{_(xgdi(xP8i#_CXvgGH88ucs$={a;?hJ0YoAZsebK@kI!=i!Htvc709*S<`rRe1!gCNg~+;_lBB{ zj(q1md_sp5RHyC*(C@yPy8`ki2Ry(3)!Ga0%i`CPe=={F1aC#uI=Pt0u4L`zQ8=!5 zJm=ki`u+cJiU8mLZw>g)RR*4IDg}Iw;T(O#)1B*TD{@`Ro+Cp4^!pCT0%mokoo45u zD5*9pK5n;KeC~JR^(`=hS7ze8++s8#Ma=yUpf4&KCC@}k)Vk)ipU{<7; z1QU{$HY#~c6yGlT#4?_@FRcOIv$K)ZayxDl)QN#enCra~(tiCB)CIHPOC?hL{jOgL zY||alps$(-vR&G3$x_Zw-xKxu6(p~c?iVNs(1*f3(EwCV?;|hS-gWvg*o7G&QcH;Z zd0C&ZoW8ldTs%89Q<&f-;oLkjRvbz3Ya^^F;(OxlWj0{~QiruXPu%rf(-9P>lRr#; z0VbR-JUe)TX>JpAs#As_ocw(3;j##c&lXG#Hy42={<8uyY`q^0*6FSD@q(n$+%1^7 z_zC5yuT=P7mrNQ%GHYfZ3^u|PfP%e*99 zd$>MK=8X!Ab;bKciev251N954l>1YggBxQiFXn6hXv&q_e*1dx!e(8i{`}WP{WD5; z{q25ubqFD=-8uGeyCUf(C&ZhWSr%x$Wm$&seYZ$KB=w+H?T-l$aLxUSV%>=7$CL5T zztojl%I?VpF6qONEX2?P5x%AIp8+Dy@3nuB%-wD6O# z`Px2)@^q!5)k(FD;Ad+$I$0XZNoEcJ4o?MNjvt!}xOTANFg7h`6CYkR3$t%eB&m6Q2OXbg%@Q(u zbsks&Cawc8GqtV2=4>VRgzw(L9AN!?=;J9xMmY#yI2*Ir6HpXM8tb$(vRQh zD^x_dHY&WHg9bl(YuS@I!E&2J0b|GadiQ z0F|LP_g&>MoU*#^ncA!B&3!1E99oe`MUuds>1bI)~`-{&n3s%@0a#9 zZ-q7VZhaBiuur0J(McA(!8bEU`;leN7N?1crEzO1Xo=z5mPOuqP7;@pCYE=}=U@$f zb=GLFSUXbem$Fr7UfcjI!ev!(0E7gxb0KuI?dVj&(G$!I3gX{ z<8p!(XSW))D@WX*`TGT9ef@qRi0%Ifqkjv-`>9=ZBbfj92#jKs|4s$)rkFRS3zLt2b{ zyT>iA8pJgW8hWA5O3K#EdwnjoR|7L+8l1)su}&u)`J%~)`m*<4(wQgeVH1MDM4pd& z^v!4S8S3nHwMj+ICO=Mkj6B3)#vf}2Sr?c>TLO$Sfo_3DjhGA$od)t~zms>Qhd{k# zANep(fj(H${xVEa?E^@2bWFH}KmG4uiQ0E4e2gj_7^KT{NZ*zW96w55xOBzOYref(<3eP77r1=It znsD9g)^yr$r^D|*D~&b^oyL`WM!d7kD1Y@AKvW^kW{s^~cx%YbIfj@lNn>Dz;Lov? zKej969VzT9K-Go$X=_Am4;s@(;VtTAvCrQBh{Y>eG zr>B#u(#MkwWAr2(;T8EZV2PCDh}VHu;^ZT@w~dcN$@s9+d3#7toc>idxcRMtFSYv3 zxqE%E>WW2qektZt-we88`R7qYXx|JjunaAxMQQzTephjXVk|3XRRXs^>8Uu9U2-FK zJL84aJiBbdS`R(}_YyZ?KiMGb{pSZ@pJN5K9#$Zwn9Jo|Vp1X*`uJo|v>`_h@*=}H zAX~aCm0+eh4_2c#?$E0LgAUpohQZvSVi-3fCgq(s5+mx6?g9jF_LJktYHxoVqso63 z#jSc7dX5GmLg$FM*sU?ZHO7RzXMjIF5e7x?n^oFkSQoV0NTPjydPqBy`Dw?Iy-G>eS-Zqd&Oi|d}* zh_?g6`9XN~w$3LXLn~UQ#ZZf>eHn4v@Si6Ap+Jb6mJS_-rgC=Hgorh<@wOp+^~}ng zwYyl1qV_l;P>w~RhG}7ctg4aw=Y3+i38u;|QSI3_ZL&v7fFf~mC3-Q$bY>z;_mi*A zY*DY36|jobwy;^8(;+{c8*9oPzHwX(_Nju zrohU#f~L*OFgwy$W96Q?30J)-M2@rK}*n7LVClnFK^Ih_)9tbO3ndP?ot zVAq`?q)#Ve5r*tW9K?=qmmmE^jF5XIh?9xJ6FSyrzaD{gms$bcbrz5wARe}ll+Kjg zpUx6uBLd;(lDbalanyV6mat{{=8hDx#RK(xDn8+emx+94xC4!k9Wo4XaxE+%$FMbS zoRTYQsLRNG^D9o{ps>Uk807RmJ9Q#sDYT^gE6}C`rKc~%uHE>2!)qQ9S6^65dre=) z8K!eeRPHYGxrO`R?*}XQ0om#3VEbL7k!%>a$4FT>Q)u1K2S#7nb$)?fgspWh(kAKU zoc?d`#+!a_EW`VGxa*967)Ef-i#M2iX7Mwqc zN&<86N6m#?Uu)Rj96;0>=U|&j#!34OhL)9wk;IySLAQ zQ;$B6owG86yfLsft8)g|m^bnr2rd24ckS<(6za?;;)oJsQgli&smn&29`{=pUH)Y- zBhEO;)zbF-3_=G$wyL1##D^J!d@U8eA_9|%uMpokHRcI_Q&4O48d@w5U;Ar?9kL}S6I+O5_fgIyitFIHsUJvUOE+Qf(&^3P~i_b7XG5s+{G{`q}%Vb z5)g3>)5R{TK2#@u*qZ(g)oKk`ihCgtk)cMMu z#6~Z&l7>S-!45T5a^b+u6hlCQk+ElB7GliDYS5n)BjUrIFXQ3-34y7*oxY_V8Ga=) zFzL3|Wb`2B?%T?|@FSEu6>>L!cSM>cd#n(L5K-KkIx2Lx3 z!F9u~VW+C{O>e9WnaB3kdu!$1gxJmn@U)OTbKn_Y*k<9W)ngBYeH-)2b-J~Yz)3~| z=Z`MnE5r@L6i2*M%->j6#Ny;GOWvp>t>XF>JL|6dN@u8*j?(yD?c6fRY`3lSgkOJ+jk|DXJ)+0m)DA}VsCb8 zN=~i}0m2(CuG^H6({m1M_8X{fYw8I}MDx7&G{i~Ssv~1_8dU-dsZGfL7$CKFuqCo1;xP@Z{S0i!gtdbvf!6#qEnyx&3-mFhAJtCp}UGOhJ{{;&d9^w>p^uXFS8&g9iVF46t4 z-7Y$u-rgs6FB;ll-y)m{clBA?uP%7tbylHs-5nMFXJZ!@SzWnq=)y7j@UgTTWR8Jv zR1L4v3vmnNT%enOW(+=rfkPVV+B{|f&d@VeA&_#P8*~TZ-1P~Cr9``krOKpd7aK zK|~um+Gi)5_S|uLZPbF>B3>#eD0=Q+*1rULXyeV40^JQ3{?f{o0|Mc5J&9mHw3c^9 zu%TcaE9twsY0=M0wfImi_StVx+5PM;6`v`t7+Jc)`Ym-k3~`t($m@*44nA@skkM+`5{asg01jrhmMo-_;07m5bve_rTk5(j07H z3yj^XepOXZRBn$Fg0ofmqOxEXF4-Y`BYO*$is^f6_!qjD-d7T+e3~{;KVi09KbYyU z#?a+(Nf^t&TLwRry1FdwAi;Z)n3Fx}s9Y8)3`rlPuZa(*yt7t?#rhwV38Eyf{kVpE zjWN!cUD;f4m!iAVxSl{mhe6;~xBOoww^})A-+sQ2zS3ecDXexi1Ky9kpB-Z;c?lOG z^%#p&G#Bwb>@RrrEFVitUf$I2l74R$ME|65%U>KXf1W3BMPNH>1`}dhD)b~@eAwwq zM)@K6cfkj`rZTQ#+U}Hn4yAIgS-hHB-4U!!hu_lqN z_rhfw1j~PURtf3p)oDM)!eh9hU#Goi3HM5z^dbnDZbS|iWgEGcGd78DWcD^?Zj23^ z>c&1uYB6^=yrO*mL<5N%hQD(OSi9*za-le?GbHDnR&u7$5T~yRv?WT;Z?XyY~>?r#->s%Y+So!8e?$+T^=Q;iSs(pUh3!y4Atyb33p zySP}{w8+=AXkke+vnnoF#h)%7Uds~A>mI|^WR4i!E0+bD?^+Ud|Fql9TG@&r%k3J| z9_SgPZFc$89+#i|ogyV7i0k7!k-P|bs)1ZOlww>m&%5@kw>&rlmD=-TKRm^8DQ*NU zUH>`SwWJwg)rQ!s?8{HMiZ^+9K~P4Y0hR1S@9KsCK}@!h;@lU-Y`)L$mv*-n&@>!3 z_@YY4NUKFO_D=e^wG-g8on{zT?Zn?5?3sPtM0&~yofMkD@s2VqXb&5v>5-P9z%1>T z{&|n`^14}A71cEGGUzq~mamEEnT1RZ>1d&kPZr{^_h=X0kYAbDpyL8m-AGnKc1X zNxv<>BnbclR_RTT;wip^==V*wO@FBy<>jvIMjAJK2vvL%DavtxUV_whmsP}&9t)| z3j-tLpA)|ab9;=EUs2%JGaf=)yd{8%?%s_DFp|@8n*qJ;4?uu*ek_ZPCC1+8s`$Gt z?47W0;?C{f{zn5~P(>zvk1#>X4<3YB@7x`Ib(C7hSRig(Y5OXJk$1Lmu*<>L- zh@{lh3k~hMeUKrgW+*Y_{mq3{T%G@_RLG%^^NNs>T^p$0X6nUK@|AQi>!u%9>7`fh zzF+f_$JHE7_u;x*pMk!4=rSd9ndh1Sw|qa%m!sTvcz$a}0S`fR1#ZQTch2_^Z5Y zOcuH-Fj_)G6M$f~?N&Yl|kjXuq#+a`MaR!*Q+g7FhH;L8wwNuQYVHN*dpW-VxQN7Z3%F&w69^xxG^Xj}^as6p402G9YSP*Skd!^}GW18*wP0aE zoogZGq%k17UzX}|Z|sjPUIjLQF{z-LA?Fu~MvB%f2hWnY!A1r}X+*$!;hA`Q5QFff zG~c%~OL_>HDDtJ{GWFpe(!BzRgr0Dq;(}bp@TQsjs^PKe1nYB1sh*DRn-?kBt%h2$ zp|&z$HO_#b!IV(et3blXVsPL<^2i@w?BP@HOSWb(=M!)sFcW?PZV zH*lwDnXRu`^JKrMX!+>C=Kb?l3t-vf7P>VKmnVNU2miZrHU3^q28!XovZfHcJG%XT zUKo$RRfV8krZ#J-ch}rGemeyK=-Z&HIQ@qB5#<#FP%E7UeOPY7l^br zz$Gcs?f{+0Rd~n~M49|f7{OrU-r-u(%6T;q>huL}siYd|{l>9MNuomu=8thk3zMh6 z{ak1Zo~etm{bOGTP~1p#64SaKkaT1aQWl24_(f(XC_D1@Hsup`K_f1GTA-t0)iiPg zpc(gRz}a)^P=t}o89dwJ$HVjCNCW0j!^3ud4s@bxk#FXpxk)&%(o>JM!5!w7*@lBK z4s8&upuw%bd!Qb~o0HU7!VFf<)UBhuO-T2U&ih*#n2~(bR$1##!YH4V$br=lFViuA ztX5=3cm4zwITR2ku(1Z%hrw;nw60-7KN#T%M>_*Te+dti-{g|Wn@vRe0h)9649JXG zda{irEVUdGG=Z|yS4X2TFf3yfNrI}ot2C(`L)4mlzIqQVomV@|OSH{_740vu+52Tv zWApv%n^Ktz-N}0cjqbi8yMHw+OCyQ;x)WUA&W`NX7A=1nS|A(begrQYXpoO^ZQ?hu zvChCjLg^Lo9(|x}U0W;?15S8%oGR(JMMEY+P+Jp}1X)t=3k%VdJP=)wfLP7LI4iE% z3YrP}BgVWNz%1fi=XdcsLcq~a!yLu90sbY_z>jMD3XrTm5*z3E1#BICHb29+p+x!Q zI(|Yj!L1EsF3v8!t@<@Z0t#);kIpT06v5o8(3(%}Psmv`@}`1)^zvj@P;R3gBX*n? zhG=MJE>U7n>ovAHP+PMpGJ7MCYfUvIdeevm?tTzy8N1Vw4AgD_Y5NrySpEF6is!x6i z5lG~=qdbZ}*7(vG5{%;imnzp^GB0{3je>4AbAB7_J9NG}4=Om{z)NAm zL?moP2MKutLT!T0N|SuC!o%7+J;{GP@xzCOe&C58_nV%|_`Aut{+}j;;NlWt|M}WH z9a^)2n3SM>Tt$Rb7Jmh13EfwYURX3>bK(P<$d8Bxn}o#g04B_@xX}R6ch7(F-Gd-A z*)O1ck@TJlr+4)96b0pz-;F@g&0W7A+1^i&*WX>%4$QFBRUwIUdUjuDjJD8QgwFr& zTuE3U?3pbezKRT*^;g*zU%--91aypi!T7E8qOE++T#k5G66oNOt_)2#rx*W~2vjmW zDlWa!*$ZU>sN?a@vw}ZxI4=p20953DiPX?@k-6nCg4EkbKA3Le7+LMy){#Q=u_6eo zY3tBEwrGgcPW6NbQrI}r2&ayBA(!lxIrcXc?nq%qL_QfK^k9S`Pf^wOJm{;TAhM~5 zIRcss5uN(quBMweazA|RQ+*%_ii02JExB|s>~cV|2jlqx91&^QGQl|E4avTLXx!09 zBhu%A^?OCu0!;RzGp(PsG7_d^ekOToJJmQw_jw4Y$8K~^hZp(i<(0~5^QmcRUA!CQN<1n?* zFXcyxu&pyhM|1IHhil>20ZJnpln?G+-}>_0uj1V^JWl>j9XX=^l{%29h*Qy8eH0U^>JyVg)p3&D^ zB3zAWF%g`G(_1GGW_ZBx;6@tgVl0&*bqK@ZpZNXbJ#_n&@^#fS@|WAQ*PpMh_29nD zS{dDEE9th$T9v{Xz@P)Ut+XR4r(FDSswi|ng7+;X-+*>{1E+>ab1Z%9lk&yXHM%n1 zhsXdz$Oj$ABwNW=C^tGj%76Y61tk|mr6VmV+YC3R-US;T4%UX2@9p?T&lrHDp__I& zWyokKB*ML{Snq2M9Z~}l) z{bwuA{jiPh9&<8ChZ~)lskm|o#>*#EfRgGB!)adytmw%JL==ue-1Aqvvn)Dxcsc={ zreWG#3ih5hjsaEXbo@W_W9jOKNncAO_d;Jde~E;rBr2o{j+r{4cHRiaI{e=We;uO$;X9Nid=vthNLh8_IbwV=J=IFM* zCL^%>=XPrCyamvo?3}2*cxHd4cKq?-gzNqY4OjGGMsP;12uEMWI6O`TEs!EQOS_(f zt&Z~2m%rR?L+$2FiBtn3iXqRpH&{2nW2VHNwmn0)vA6+kGSO{SC}W_%3mQDFLGqO&%NAD$GyyX+tk-4+4*#^YX|koPv< z;+cx&S@683@fwT6rLjO{F;PrE-ZdE#++v4CK2$#emW4wNJWs(G?FtUIgJXBGE?|$C=Fnw_kx<{nfyM0Y#-jq-w+#?d-R##!ek4qRME8t9$JGhfrj0(lAQW z`_H8GPl~Fi=XOIEBaLu+$4EJ)J%!6-*@oOfuUVoWJ z?Mvils7Ur$a_JUH`ZJb2m zKE!0|me(-}X>}(q3j(X3r#APF+AU7l6mxfd2zF=X4|t*e1M~~fAM_asIxmI1nu@F* z_yJ!7YTm!gdP6BS&?nlV3T8jQ8;wl&16EUlL-j^*t*D~?bq~3w-|a7?F2yoGbK__C znAm61qldq5IR3(B6MAHK^l>D~dW7Z6(b+Tqj*8zWMyujL>{ZiNM9Sw^qgSO5ctC}D zV>pgwBTANZ^||E25u)j^&r;(ji^0xmpqKY~8?nHTWKh`aVf%)>7 z5D}K6lB9+<7=VuO&qhS~g5F`SiR%ajoo!;kmW*ASPSsai3i47(*-I+rh=(?N0NAUP zW?YypQuePLzK!jqMn}d{HoN&6*7Q|z)M;A*yvaD9BB?l*b$^6C85x#IGol5aH?P;U z>W)5_4b&lc738`UFF@_<{s0FH`Gt5ID3%xv^Q-Ow$=lKlGY3;ahJB^ z&q+2y$+bWM%~ZY^yOvPcsrAApM=A4iw-9*pNA(1O`sog;qhMe|7FUwjVI4Jz~e``)(S4vXBjH?MG zs&w??N9kYUkiJ-c{g6Q-zx}Q}J4kePpF}}hd;7HGv+j;gdBa=HXpKr>Es3rIiw<=>y8X&c~Y5Y=;8Mw&?wT>{W8+RM^>0Q4`$VJ6E8Y= z9#r~8X4pR%D0$e2H1kGIhDc}Kvf>t0H*bCPV6 z=TUr)4AXOWE2cl2JP@XIQpU_U0mS=Ay%hC4CHs40AsESKq`$z7iLxc|-UKG$cqByT zylodSTK?3dc96NxApAo-ruN``YdX9njAWiD2 z@E~HWgka~`RNocHE_Ejd*AJSkbsdx)99O4s8uCBJ9{s zoMHkHH^}6vEC5&4xUNFz@rVClfM^!)Eh8xU>ySY*uiZCdt6zK)?`^1b^TYq<-KF(l z_)@v#Fc+@R&phdt!MYNSIo9bTpi_GJl+QL%y1l2!vs$btIvYDcaic{SPOoj1llLqA zg9>fxj`C(l`=UfEc0h+lhUVS>qw0nwL1f03hTptinXINholFT+2<{3OtaZjO7K`ah zHC!i3PCiM=m(Y=JT|{COYunlmNhvRvo@p+H&_|nr0d{x;U@kOibnVmhuZj z4$CZTYiIo(SN1G%PZL$*LP{0^-?OrrD(i%crD!g-uUC&}3nbj6%8aXCej|c?L}1a3 z-ZJ_bL_2A$%0XP@Ugkup2f<$^rp}u!li*E#WclU>XNP#ATlD7A^?l4axd;8+mO^jRtMS9^1QoJB^hr81J zmcDYbX+3<0g;Owk_hS9J;RHsC8%Y7Dg@9M@6|lY11ljM-x6cRCx?*?#NWqp74!i&` z(gk3>MtohgUmJDIyT+9YN5KY%yt3NF55S&M6zTc;3-lkXU%hWvPs@`aKCMY4#^eXm z#*UK@6}FbL`sotwru&CUtIjffPkr1!#I}6y{x%8m=*O*!&RC5%{cVFp55KaS*I|+2tT=SOc8y3 z?x2C-9mpFmf96$aGgK7|23B2z8KU!gi%AbFyDM!cI30gdE8q9@fXae&Hwt^aDOpB0 zDx=&W%$FllHEpC#>meir@|~0C=CGV8HaTio0KM^l`~tzoe~hA1kW%_kXWhg(?6v*u zsL4T?S;8E&78n6GN#n_oLyhVB%LO#B+NinDgD=~YN9@|g1@os72Go5b>q4C&oTSy# zz|Ku#kCbeSDQ>`t)_#~8<;hq2v~n4F*aeV_eP(~`p`0U(xf{8058IFI)P<$rN<<Qi^v$JP|89*8mgs57_z8<@r~Bf+YgHFWf1XHPcXK>X0~)ZMA(dz&f~A9#~Y^t z%jOAvQ-HsLa@+Nugd2W#q=VFH!C@GlxEr3U{_2ZHt*B3Up;VJw4fn6?4}X74pKbMF zJz6z{u?_9K(#}JC+E!e5bRRpta(L?QX*jl%<8XyG@KeVHA$&6ch(Z*J|cry!Fn@&j2I94c4I5U-hMG zJC&XeTl?Y;Bl~s;IAuKjY0W-C!216 zX8v0978SqBjm!DrN`dRzcNU37Wt&j3^uB&z=aze0aGh=pj9}<|z=%%ZG4S^?ern5B zSX2>Z^D{H_&3F_E+bE#AR**_}hoj2`{OijmNNjJeNnd#RPaej;c zSRsL+aYc&J^nqpCc4inph1vsyj&K4kWuXJ9w5wV1e_!HXSFDN-+<%PRf%P=2C!%nu z`5IyC4ul@^2}I65HLH7lM2})XP+Rd|qGtVlYvZU#rb_VF1BJL``$=KSS>S{CyxR@>@yF?-g(mZ9>40{5bxn!u@|gJz|5@}K~8 zNCjX*wF#)Ws(?MGiATm6Bk=U5;r-m^ccVz6dZ02`2(S^VSk*2oa&SP>WMQwgs@6=e zOu>q|^S`gnNN5b>h`b#;CWtZ~tILI=Ac`}}iBbcr{&4E0AOPNQ;BohVJw{95u_PbL zU3v}@&Zin6WgNN!AZn$#N@=<;KGGo?fZFLOYhe-5M;KUv6#|7fjG3{j`0C>t>yc;T zcBGd3z5Hg~F|{4=-637?t=CS^l*F26!Q#JOgkJ9JoOfZ#1BysP=xdwrMxKoJGd0CZ zTgWFASe>LP9np+orq_&r*$o(o5jLl(C30dKEw za+ly!&FOqd(*{9?XBCL~d^Z?V$U^I?i z68ARH4XOLy9CXK}@on|72z*o>K0FIVdN+k1?1mKO@NuT=%))>Z<`+;B*7L<*_yEf3 z7x0OQs;d^SUj71@&oRKh%J<^Zt5Ki^`r7YJhkE}`-~-y6n{PbUr&31V!Y;FS5ld}P#KzI4T>5Hcf+USVihK_prOlg)|f zsgMB|!M=*SEcNFTzk%~24YE(xauzxb$j)kn@A(|ly}?~kzZ&m}ovyac10ZM$bYw$Z zSm(NiIpfTRR0FvSgz#+uz|^U)%%tN5PkYq@mVoXzUGM0{Z3f7IuD9!p7cYP``zX-+ z)Bu`2ZdI0psX5-KyTzJC+Hc>#eBpWxY$94TfV9MDQ8JfNiQuc(FgiLI^_~dk&w>3nk4HupxE_Gi)r2RjN?JoDW%nkHR`UY%wDfOekETIRVHPE?kbbq zIRn-+g@9nLzW2rJi{sd|Q6XQjr-TOKzQ(+^XoZo2=gpu$jX6u04i}eB6zxn4`#b&a z91&z*dLGg9KiTDA;MJ@!?{X<3$%8ZaJ`>WYklO|YWEwG!Q{<{SI77sd)xpcdZrF3#&I8c@P^p!)Iz2+OyYtL%XF{ca)_UFha7XZV@@hPK$+X`PA!Czb~z&Z;wu6y5I`?FR@8WV%rUhVpf zvJJuCaguIC&{&|{po|3j;|4W>&r_+|W=yU!^lM47k-tvQ0a!1xF?~bmlc9Wi>5WY9 z?qJ`v#qS56T-`HFLaJQGIk49p1+r|}+#FBd&}V?kY66;lBa$@3eWb6p`_wN`mfWv_ z6oj5~aawMpOtR=xdf=Ec?A+B1cqS58iv+MTf@FJxhp>*fC*Qbyi%n~?&;yXpEGqMK zy$+-KZ#i8-xdZlC8ghP;X;(mLAxGr|hyp(f-N5`=vkF@a2G4}hm zuC8S@y<&lhEjIYqE}c+|YWaJy4yj!kJXIb!?C>M>bDRWQlQF=`w#F*F4g3hkD$M1Z z_5g27<*afCV5)8jg=Y;#G~XL|t6vIuRnN8)Q^!0oM{$AnjiwxS5~j<^*iXi-D?#0ywIy8`b4b zJoh`&5siD`=@`s(J=`eD+{?IlYvOX>>t^5i=3Qs_rP~+Bi0Hi&CVNmkWVf~io)+vMD0CS{~t7Fl+n>}~?; z=LgbDDQdn8y8N!H`X--KP3ThR6p;HX1@K7=j)ADBSQk0{Mx)j3BM>w0A^hLZ)AnpL zUS6m2Ck1EJX|l*SG@Ce)25}^|+~S+%en^h($YZ{X^iu6zws;`bkTOiMWAjm*81r)v zz;5J)4ydmE0$L|v;>9jlt_6iKi%OS%aJFeW|U$#Xz(Z=d6MN9 zu)YV3PO|FU%BTQz%HblInnrW`1ot!q==D83VI_xFV5CAffM{Iaf^Wm+x!oQfr*7M= z4;e3gxKytLy0ot1BzD>S)h-X!(wQzAdiAvYg}skeV1U8y#sf$_1>gv5B>pzglbp7( z6=|#B4!S&yo}Vpk;e_i)tw`u7{A9*)%iRdBh?SlNv&IN$-u%E=ue(z!JIjT1;}Ucq z{5=RjQ@Nu4!4DkNPX~A^J1g---r!Lp8ju(dq+?`|H-!imZTu`yw#8LfdqA=I7(sDH z$Gocp2Ph7eh&>=-L4%ILlV&e+p{2F~SDp7ACHQuVcl{KX?k94*4X1(PH1RyQTAjnr$74mf_~%dD)H&V8>SgiqjRtQJ*`-9nvEumfVJUD_3 zE^If9mN~pg->kM#jg{X)HE?oyepEeq--eEA$vDD7{@{mIJBNogL4XW?%GAn`rH_#v z!Z*Y6D8Xhgr;m1cH_Kn8ZQ0)) zNKtNfoMEp5F~nPl0+G!Rk1H%ox%?rSsZ25dsaG z{VW+ienDkcf)Tg~Slu>Hw%C;gHyDuvDZz`5r~A$*B7)pWj1b~8eA$8~Soo9M^N5ba(1v6LtUbt`P z(C^qzwTi2ww=G20FUiM{hktMc%zg9klg_6T?9prp6t%RtW?F9T3FZwQqD{EMd$?SM8mq8A zI(GjaQJu{@*wEBX;;K?%zsxxN{^%7GXPBUh# z{o9yS(hUP04ZlGI+4!rKC33lp%;{m-z2Ld2!{5Z<2TkM-LUpr_r<7d#*6iARRz;8 zV(6)km4EgGTS{Q7YOk z*ps<08x-Zo10vX}ig(}60d<#ts)F^0_SX!-@&jxK&I+X@|Z2>GBZmSv9yhTDRdyHvoh0m6r_x8BUcKWwZn2RN{#JC^ktGLatP3>xUP1f%{YKu|(s zh-XS$>!9yb=1m11Be3ixZ!prkV}QGxwQomQ^S#Y79wFL=^Ra6&=vCIE@BEU~0DZa2 z+oS-fZ6~FSBYJTGw0yo}e8~vaH>X%8w{z^|S3#+jL|p6PCYyeLSLCQV;c9QhctIJF zk=8;q^vJ^#d%hak63R5w9ukT=9obvYh;CfM)0D!DsFCINjqgj=Kgz94D>PpK#kf$j zIH>frf9Hze2M?SD)82%fIAD!1;#WInU>6`2pqh}pSzaN_#o+87Zg!HG-0!w*#A0}Z zqz|<7mYD>vVcts*N)E|)YaQuBIyGMsZ;?~QRFtie;8%hEGEX&cd@A`#(;|vn1UbD$ z%tKF+s-}h46px<0rWF<092LB%V1+335%|zip&9S{qQv^wEJj}d6*hh-`fDnI3S)%O z#cWw#NQprMrlI@x5o3P_wZo{O5XoKD2bdS!Oq!(Z_Fm6s`@faG&|E}d#zxnCRedV- z0p&!}NyuTA|AN@y{?5keGN#ADy+l4eHv|AI>i~^qJ&eUrzHBThgAP1p*zb5lJqR{e zZHmQUig12ppeOdrn5mI&aeQv;VMbRO-@hw!Xn#iOi6NC#AH?1tyS=(8nH{Do>rzas zY9hDm`Z|NRr6}2Qdl5h%lY?wC2G18$h}Q zkD+!v7xR1$3C7w0huQM)j|kqhEsF@9cRc!B&IrzqH*yb~?(bS`c*7noh9r9!H761f z^~0~}sOHsbn2tdB(EHtRgv#@*$&G)_->R$Oiod$mIRwVAYZOm~LiVOxk~z7C_rkN6 zu`E`~s&+Emu9NN+H$J-tW7L!zp_jP-6+!n^)KSG0w$S!q7OXP(#4@7m(@t6AJEc=R zbj|?v{wyu`)MT0gU+peiGQ}QUjs9C)k``YCquMY1uzx9ao5 z7OQ!-{RYcgk2#p-yO*@(lSEyMYnl3T-+wP`Mv#+*#a>zWKUz{#^3TZ?)}QB|jJ76T z#t$0y*qPqwP=()`GhC><4F+X<)ghYf z=}Rct#ED_WrF6OT|Avd`H&7$5LNQM_o(GWn42%W*)}mB{T6gzxK~~$#@|e<&|*{P`%(2@T)kt%hn>Q zq?)UQ@AEF%?xqGc}k-nxOme&vpn;CwG@NDMmmqRyH4} z=mG@+&0!3+&vvxzqnV0CAmZ`QXTS)`4>yFS z_l7Zn2I_uG`C(HH1PXTg{*)bJH^{*s9|$MvRd9W!u~Vq6`^Fz|3KMg7tnpeZ_h^aG zEOL@ss&@QXtWUg329-1a$~+q$|7R#I>Ok5-8C{2Fb!1f&N-STO4L+G+_RLKOJJpl% zTSG?Bw~}^2A_qX;u|QOl$6TSl`MuLoO*W*=6EI!i6LL*P)AqL;2hD7Dve!xxns)|q9unzb_>OsPqkAhT9kuSY@iO{1R)nv6}rRlu+5U^~NZ_rI1Wf`nbD zfTP0Vme~wblj>sK+{X+6A|5Vpgo^J-pLnI$XJ z%`zu^P|>F_rgY2g{R(Zv?0Ew7I-%$9L@SjuuM&EV?$C0|(nW%isH~f3%)d_!0qBR% zKUts$oE6Z{MGj0{rLe98$x3FQHzxHj@EO`Ufz%2dD6{r-(_aQvfoPJ#4yJ_Kn&8GV zcf3#pYm|a|K!O_}ydOGjP%W$;6<0z%Q*5`CLvOJ)NOd%4#V*!d8 z8CA}X3t=)8lf*_BSGgN~H{{Wx%sbILhO84v3Hj(b6HS_*HkKNW)(k}5hYsK&&2a9N(5B7N* z0Dq_eIq^X7=f?K%9@fZC@IBoYDprSRH$tH2x@=d~P82mWR6+?^%JJO`)|=T0O2ZP5 zMz;{`n^S0pqV$Nzm;^9cv_*ioN+TsoJ?dwHB+8UVer@xcZOi?xt8Ls?g1pQUbyL+1dsw@Z@%8nutRN1R^ z-Y+>=t-PaWlz%Q?68X|vn=FLq#6`=ENAReV`F0V%tfxgZL%}ap=yF})E~9}elgr^T#5B#>y8Xve2OWC zA*(SlgmnjJARGeqW$L4Ck9-sn2qgYhcLuT6fQz9%QlZ^BFWDUi?&9-dKG6%^t`hkP zKA!;0k;Hj0HHuUXT=xbdqa$m-4It~OhSn%_yISOuE8z|6?L(8T2V>!Gn zjbnTpzRn~vGDivQLn51{pw&#xpf&{XjWHnE`nfDbd>@M-z+%(r*mYm^&BmV8FVXC+ z4{qliTAl!caUUYpJSqX>(7(0|{63;AN*&?YvBqSdbt_~|+;fF}Jcr&!JhoE9xF{blAwv-euM_L)yUmO*}0 zH%l8#RQr`*V3iE%MS$8b7ybYk3*tijnnho;%5z=}BM&!Q@tD^&9@qfx@YHKCG5+6M zk5SCPR44=~Mmv3B1XQ8iN;LZ}XgM8Pj2i%C3OSvn&>QBaLoa>V-Nympo#=|zRR|7a ziClz#0#nvim9ob5%;-_1Kb75wcW4AcD$&^GufL=%n0JNe__bLOe7fhKLPVC?&Hwc3 zcmyuMuY_X!83Mf=Sn#A0^|=89;A--TIkM_qwd>6GM;Gntb{)$Ejk*?X!%1uTwHHfd z?!}0cce?X{&lK}%FrvWm1ad3afmdCyy9-Ud;NHB6D(aj4y}#N*Fu$yVa1SV%&d@+~ z%8UaAmm=<&26I^S9jf&kO`nK7i8mK9J}OjRprMI-oqA{hs{3cB|4qsNG=sdN7r}3U zI-jkw-9GW{y#=KE=qMOwWq~oIzd;DMpHMFL6ML0WNR^vk0(-*>el+L|(Unxa;@7Tq zznseJeF~1{qpM))QlWJOB6+RRr^xm7eZ|ylL)eu&$6QBM``H4)h+a-H0gFQzN?Gx|mwf8PfqGijvef4ht-2R-hFMG32 zuo2|#AFB3yyX!c4&UPSV7XIKTvK_2}s4O9CduCrutl!^XX-n`Uy|}PuQbfqOSaUdb@SgZUsGSR955TVXnAe&A z6j%eQlk;+R7r5gt0LXsa5T@I_oBq=K=su)#!GG<08i`P^6ot^!_KvJ_W)!_zx=V)bW%l{IETM+|gxx*4qsoiP6bTxd zyoD7~iBo!R}zR(d!6zA2ee@t;Meakc!Ro@pIS;NC(w# zUYY?w&M|7M(`}0{E%*IesxSoiJzzjwAS@xHmYQ^N(F^~olUed?-vu|C2=W9>DV1>? z{PpIsy!X)wP|E-RMvDFhg4A7j;zYW>#bm9t^C*ToJp`gs-zd{U8~?`W#ruPDF8hlI zX)Pkd-Q0z-pj3|~=P3~WFN_0;CJ?i~lkbhPuvu7IlILqTS@!w+1`>ndtV=uJ)pjBV z2V(JG)Rl!FYsOglv`92=Qu>xJr=Nr-P(SnAs^P~{=R4UL$@{Ln;EaM+*iHAz2M8bx zShNuZKjL@TMk=;u^7noWH=jNZ!}>vQ(Xrr|xEKlt!nSCRci=euJKO~t5NyXdaE7=Q zA0>q33YR)jT2y6#ze)qm@`-~7$T9EP)BSw3&Z(MKM z6-5`LrlsGJpx{V@9sszt3H87n5OqK`Q^d8*sKwuVTB(xS-Qlm$=}7k>q>aE>9m;Ub z)U3%lhQz--j}BVU70qlg2Tv{S11pa8 zSOW_Ha-iFl7Ioj9t*aL;QLecLb)RkBm;|*GoG-c7!zCb|V9-SNOY1i3VeOJ6gc)$V z-~HCzD3zV(GQbc#3qVg7G?AsL1{-BzcQF6lJlf|fnLh`sWpp?$E$%e!0*2`IeAKTR z6Df>dEemIq_>Cc@``C!ykW*mI-6>OptjI@P{7Zdzr1i*_5FshXs=2x*@>lpu2jIp#o%Nc{#QRR?Ytz2(@6-n>2L5)0o?Fk@If&VoEJ@yGQW$H0`vYP z!B=$nUf^J4it%ctS0X~`HvfX<9@H6)6-p>pWSYzIY_^XcV)x@yVEUmQU`r44b2Hs( zu7CZ|Q!i+OX%Z}33%>)WD8W4XYb3x=7YL>t^C%RDB^RhNq#~s-QVehPEWWh|b7A-P znCZ7C7bYKk8=>Clx{X@C`>O#fIkvxH0o^u77n~!E8au-+sV0Fs!Wf`fQ0eq= zuMp%`btlf2ft8}3c$_UL151_-x z8|vLQGJj}Jldilb?E$^5pJGvI&9n`!dX5B@<4hupI_@;pg*MZ84thWdyjb75^xbu; z+r<*=kMbtZjwAkbiY%eH8TC6^3Y|ERau}#@cu|AMH6xM_YYde7wlj*X|%)0&4XjPew46s1t?!5f0Zv8(V>@3$b{7A?e&H= zcry8~BWdlKvnb9as9IIlP5{RCZ*1J5@}~lf0BG6{&^qYzyaC+cQ{qO?7sE9`K0dTm z`?dHwCV>~oQ7!2VP}Fq5|5T6OXb<)UKNy2yjU}(bd;GUpAqgj=(I8#N27Tr0AXT@W z1G~igIvD+Tl=#I>>Uqt2!+}p2?>=D228AU>4!6PzzA{&e-1mqWo)s?4+Y7%sC&B1ReL?5@HUZZJuqgQT zE&^+D~jUyzL4Av&6w7&P-7LN6jY%dJYR4%LJ`1 zY>0D-n~$T2E!MkrIEQzx-g3t3dc2=l`4A;+}Y(x4&rZ z{?YxZ)N+>=un5f4V$t^LJHY2}=1;_)v!w^!ztPNG3X%li;}M{fKbz1#!R$_HUv>`Z zyd-VE?KvBYgri^#VS2u4b(Q8>)t!&33+oi99yLm^Gt$Qp1OoxJl-v>W+>K{bk7yHH zZJ#0#t7e$4G~apruqz4r!D2;T{MZuT9wPKn6gZ^es@q90sBsvxP%c1e-iA z%XbT#>qcYuk8)y>v)V2P`L%y$wd~2JLkY-Pt((13_66ne&?7HqE}+PK=+C^hB2a*D z3OY$;LD=$A&lRKbollS-xoz%$o`HHr0}DtYNMATyquKU~g{vWAGM`PwN`etRaedUG zm(Y*WI$)2-MI25*TOu4h*4pZ!0WPrD ze&tGkGMj=HmHVxaA>yIV%iS!G-aR-m`9x$o0Q&GRAk!2rkYgIqO-2&El+EM&sEMz1 zSM^@5mt?(an3KWGLKT8EA zhY1>Es?i@x&b9Wxow6*!*mJnKToWAx1>XFwI>U5}_<3*u+2Us~;NdDkD-9<9!O=|@ zFbAe6xJsc5sB?IPuuihzyW}r8yFs~?LzdeGij&4Dzh24x@cj|bWNDw*8v?IMfb^aH z-eC214o7R(HBgL@5>HXVIr=##|E`6f1{}OO^}k$!gZFPT2W7uROD%`^D}zqyc-r=k zo(IsKyLhKqPJ1c9!C0J@axQw_YmNFS!FVI986)tfHppiRzzuf{ys3xy!fCv%(nQSD z?g(#Bg3;XAC-LB@+Z3k?p5G-d3}WiWznYe)ZVOb;8G&iOQ)!s-&~XplI`^rgr&(C- zj~Y;&#C}iz!%KlYvxWgJ2x84b#oO1A918nQxVgky^$ zq^t;)QDkKAEfuAVtin;qJ~oHL|MhY2{r>Ll{>K0Re>~iK8`p8p=kxx&->=v6^&EAI zBi6vTtWpRUy3#zRzb&eT3b#{OIW<(~9MMfp+nITIn2chl{1QD;`fcwQU0B^e=k=GS z+y?}oqUGmd$FyRz#Ez(al?r*V9phxhm<8wY(w)N$d*^XHOhC3K`TQ?s+4IMogZV7K zwCulB0h@d}rNoLgD`D#jeAJEU+~j0M)?U1lPW|F@tj9#<852i2hpLreO-}hjjL2A! z>NoUc5@iR_f=PNBe(2d1jay{57uVsOsgazVT}j8%)^gQtqhX< zVmyBK9l4uMY@-kR(p#_aH=S`&X}7)VERQq|wFA?2`lD50(BuQ)eI52F98}pXUjBs` zl5$UU$kSTZLulN!;@9d^+vk5`mTwVV=_?1%^6NxP;Bfkw{faK;ghJ$#tS_9!35;CU zC?dVX`yHY1uBX!8XTQ4xpqAle%B`r{qaGHAWbds^oJWN>65y#h^TxR`UE$oB)1Af` zuxVZ!HgC5ahI?xI&Sj1DL@#hfyr*(&6OQ=1*~h&^yV8l+kzsjhiy znrCeA)*y!6gO}e>$$UsYRa1BNHEA#;_@vdHF<_&ibMfb?W;EamuK0N7d}UmJtz)>Evj9pqFZ`g1G%-bG3=E z@9|?KnFw`7GG}AsDoA}B7b_%t+Xzw>FB|UbW0duMOT;LRit2ecWgjIh9oqCe(mrld zg$(nLbe?4XpJ?)d+e|M_iAD|0oHJ{$@~Dr>%>tt&ij~vg&=8Kf(5(E1_n>GE>eSte zI#7aB2gf8b@9U1l=IVM;hGfU$SQ2sj!viV3o(cCpCzqZRA6=y$BhwghsL4$F!A=@_ zomwnCTQm8ZhoI=<&HZApBv|c?DJiidVE*|WJd*YUSRUE$n$gX{t*G!TJ(y*O9z5rX z#Tdg!fTi@TTgJXCqo`F|y4ITE88^^$t%?O9y+Ys4|v z8}G8cpBq1Vhsu^(LueRGRYHXltXscIVU~7xY+`T_qVr{3OvL=IXVPSvzvZM{)`Dp7 zXe~>3oili`S6NV&muG63h%%)*de6ObkRUrj{{Ddy>4Pd-8gy}J@HlhlnBScbLfO|{ zII|)XE5`ipO-;TDVdr)i&aaKVv7pJ>!Mv{e&FBHv5}6$oo2+Gat__!N3pB>OM5|(} zxgUk6kt&Rg55zs%tkw7L3kl04RR{@ILhK5~aodqQU%-Re?TGl0BLlv=Kk9he>PK@1 zOBB|PV@k!0VxgGvCD=6dO*}3Vojb{P3tLfkW~!Wd^_bAMZFH}xzh)IC(5qRtdw(-0 z+JTl`JbhS?*EE>zdJk3ix-yy>qp|Yw^Q4Lu*;Q6@v05ZL!l~kj%TpQ8uX=&X*RRs1 zW?K0!o<{(_Uv?=_IrVVr+7P98?!?{p4nDW-BH)aW=J=r!>=r6L7KipQ6W;Wl|FLtl zl^%PsM=In;E=H+emp~UHuqyi~dvCqw?yc9j`Xj+7nZx;jR?2x`Uhr?q34~!9=*tZ2 z)!MR%WK7;`xuIP`BP^ovJZ;R?kK!0-peo!h!Py?{W>vYIf)*#dTA(czU@gla)Plu>(r~IFeOC| z6AEQt{OU|LINc;knpSQ;Wl>0@ddm~D=oG>hV?V>ua_3{RR9~>#5r448xWk1lQJ3Zk zKX3l#Tym(A4P{C96GyMQ?qo>|dB3pj7VD!+Y-hE;$$YM3ajY9c3=kX|Gwv~v-s`jS zuN`>(ArtKGOci{UJs+gez%4g<@-%uUpGIM7CGLbQ<+CsT`RD2@Q>JLG+Dq#~o7=}c z4DpV49IeF3j-<-rI_}!(dyz}tt+H(i%#^+SqM)zDUhg|P)JSr9QFnd*I|;A2ym({V z&2dRIbb`DQtH+KmFf_gX@DPo4j4zt|v19gOHR6m^`zqaH!mLY$d?!nD_c*83IGJ-v z%NDQI;w_uEBe9CZ$dGZJ^UC(`Oyu+!fDwQwY;c)0mb}7&_I$4(n-vZquR|B@`io6m z0}!Q!fog-Nk4pqG$`z<#(*O+Rs>N&Qk5g@kcE)M*UWWOTju3I_*Sdyfi7e7EgbY8} zZN=gfK9&z=FbHNm)7F zgZdn1;!?>51A&2f;REa?C%7j@iAXI4?csY%mEk>&0Kwc^Ska3*h^J6j@77nX{I56E zFbR``0_~5X%k44UB39Bx^m}icizk55n|BzZth@-#L|%7hy0fFFK~SQj_;>N%#dJU7 z*Dk9k#tt9?6CEv})yF@QEI9wWpaL1%{z{W5h_ON5UmW(ebq~_@G#n)wnIpV=$Y%hq zJhu;uJNtsEQ*BmQV4oz>$arPh)bUk*ogq?(Jj?(>qpooK5%enP;a1{>4Io|`rD4{R zOd;mLpe>3E5mW>PN!*&y*rUu}c^_+yHi929E!coJRNzb96WWdQ!}U93zif)U*}s2{ zromm^Ij~H9;INJ(iTQy~)E6EgZCMR7?)$KIqPWtj8{dqxv0(mvB=P1q$0l|!O=g@$ zsw1=TK22i&bgCZPts;b&jr1ly_}l{ahUx{Rd6b9DWW3h68$8RDaGjWRDk6}V6-KHV z>cGjXzpt)_eL#Sh3%pvm$x{f~Ge&-P13tcI{{^fZCAJ0v%sjf_F z+g)J7sAIr2v^Q=_gO2KP5^BaQDRB8Fa#0F?AyE_kaHi%;AB{VsM3T-@nwHL~uJvSj>6<_ZNV_{kv}T9~WK62YDa0 zvUc}>Un~Cv4PaF{JcbK$>dB&pdb^rKG)^LBWUvyRd zeR=gFqO$3CDp_X}8z7)4ACUQHPb8glfauKyN@VL&um`~Ail1hFCkV1T-wBS(dn+`P z+1kfS_>J$=wAJm8-rGxYLy^b+aRpeA&mTik4%g@(UpxzNZ99DEkME3;{!M=uf_$z& z^mpdGfu;ft_)EEGI&X(jH7GklZ?ig&jQl|}AmXd`@rIN`&qZ)o&?P{{f2zGf084l9 zqz<41nN3R&@?-=KDDG6Et1bh>*%uNvl&A0yC2L+!x_lk$%hKd1g^j;$;+X8+&O`~m zwbKmmm=xuC6s&3Xi|9bM^Ou=B+X-=N^3k)tElHc$UdnHMV9$)nH)O!%(Q*PRNX})G_=#DRcGwXUBy$Y!1{d- zjN=QJu=2k@!SBQn7$d**tLb2{8XO$cKN-n0CqE`N3bW86^+^*WtmbuQ~vMrdEM9+H7}4sv?g%Ntx5azT-Km z%5Wj1WzQ+hY$j)Jtb+Kk+|Hw{+-X49{nuyS{_{lE0f*dLOZ{~;NtR3;7WSRUyFhPv z*{|Yjxx)v%L&r$Q_N&sB!*9gfme#i4;vH{_e(#F2f`t=Hsf$WH7uNQV%>wog9)Hpt zT@)pQDY#eGHud?5du=6yL(E!MCajmw9@Kpul2b);akq@a<++y&{`~@rVue}W&n6nRs_+lgow;M6MK6Z8@O$F`k3YDQ8dcRxJ9v;H_~1QWm|QW(7U{O8%h*a$NG{S_`VO z*iz$S_V)vPkDJ>6JI&<@^!|y~fD#b6%wooG%;@&8G1f z!#KmHJhTr_%M%ZB=v`-X%%3{8CT$`kmIvG<%4=_R5*A~-*kv8gAF%xVY(B2p_iMD( z_81$rGduf9mtpff<2PrYacYB`=u1G+33W3ZgP##}ttxK>!p&H+!Y)`S`yrW$Rdd>E zdSBZk7B(uE)NPX|jC)YbH8jav;}DRUi@QWT_!E?G=QUGKzj?jhe$rkIPlp$(C>ZpZ zebYvsjBvwXh7cX(?30-&*?!7@4i8ZbJ4Q+(tac#QsFI$q_;GtDz2Gz=SG)tP3C!+y zXq--|mu!NB=Ii(rh1))S%PDg_Gv_SivN%9bk6a7QSJKsP8GaGdm6Gr89Mlv zrBWz0GdWA*IbQm=Cy4c}oA)@cWaCm|-WKtoz5(DJWM@^v>!sC9sDNR% z!*tIpX^hvkX2NxZkL0Y42rUOWWoe%8UP`M3E!GyrC6XntyN!M|6pGx*lP>^r(MRaT z_|2@k+fRPv&jnIZsH5jFU-6wD-f!kjM|_7Be1EE(Cgcz0ZyvQ6X_|Ufy6vu65WQ}6 zSQ}=7eL!rA@6B9UPX2DGD(kWB{324~qP1nFb!ss&Mp1U2VrLW%J9YiDV#Fe%(HCdrvO|V$NF;Ts4*ztD zWv%y=lG80(5(V&ckxC|OhhvVMQ!q?M3?_t5xB2mse`$j3!e@JpeIq#sONyPO zxU~mJmvh0gp?&tgxmxBrl#WIO{AxrEdDaDGd_m>J!DEN-OHTnqurGLK?G2PfABJBS z(?9$KQ4BhE{$2F1R^~yfNbPo4iB{UW0Y&!afF;ZMfw9(z-VtyRXt^0ZVx#lgt}~VT zIq~bZ16i#XcE+w=i&f2(nmTAA4`KnYZcQosXDYAkl}%1VrJ+tR$yvtqFoYW;CY7O6 zgFk3j>AUYi+5J@Dp3aY^qu1&S@Z?OVmT1Ice$XDu0Aivpn7+8 zP8W67Sv_AsDIFLL+LJgMQ%+(97>IZI+Z}woTbNW{BGYW4={Ie$gCeiCOJ~I9O@O$6 z#mQIP+JWXZ@0FAjc3O>_9$vBQRwX3hGgh^Knav#M&%vlP;@V6%{o!ZS$nY7b_Aht z5HO}^QFZ%^+uJa+J>_J1+cL>Hebq7yW)yr~G7_$p zAGYGv&S)>z-#jrckgGm5DOFt?>$QV3@XuUoHo6m^ADK@_Q>S9${tX+KhD1(DILcyFM|r?3yG%D}%4F(?VuUMxd=@AhPZ=R+9^ z=)gZBQkHF)ljn1DdXxn163_Rtxq9Hm!Ujv{(RkvM0wlM zC(){3hf2YDu!T#spMl{jP$CSVba!s_^HCPA^+>#9nvKE*JTImZlL3=&^U*2ssXbCP zQb|72Vv?D7u_sY1FLirf==$@^u=4GQH7Tbqv65zN^^L9YG=7D?l~8||5ivK~)Oe@p z8tn2Li%(ludsZ#hHW~Ro24IaEqTW zsc;#z(FixiPLHUsGt3fg0?B7)l5bf9-G(}gq2y_{b-7h{#V0^Kb7)IsJ?)|8d%R)9 zy4CybxO|t=#QNCrfwrw&Q%5Tu@=Oi<=EoZa{HY4QJyt>YAPGj`0c&+HUP)5!sj!~dw9}E|9(~9*(zh4;}XUtkXMP9(2c#Y}q zX=`fI%j~0pJS3^K0Ow+k#fB74fHU#Q>|X*ck8qs!$?r*KkM@#)cfcImeUI(Y0cJfl zQS%BN?MFl|esJE>X$1;O4EgA|j<&ICJP0Mabot0F9D9&=kdmT!iz1IK|AA^yyq5~9 z6+4RoT`(*;8A#9IDar-T<379VY*XVA*p^G4&|c~D7!E_LE$+91jTp>mu-0@`mr3EM7$5y^Wev# zOF=C#l+Zmh4jQYn^{(w{MW%jUlbsBtv~3Vbs;AVhQV`-&@M=}&<~X4@+*Ez)+}Z{s zIr=izk~a7v{jj3?B6-?*qEV1}r32O0t@lr{iyp54eLo%45fgRx ze|a(Krz#pyqa(R>;pfWcm%V;qKh?N&d^5oET96H4m$c!g%HCQNDjcTF{@-+bI%=&4%b zgOL5sef&!#xn2Sk?jCgbW=Ab~lb9DTolhoW-n4(#cKQtax%NaY$qzK?bi6a;t*89z zHU~tyU#olQhT>tYV1H59j)z zWHVw!ZC#M*TEF>Nm>m&qQ4`MTbAeU8^zcZP`%IRW^i;-Z5n~`?M&IaxIcl;GHD*X@^j;hdfu9aep?$8H`qNo_vgyo#*G z+2Uu{x9e)zH;D=tuO0Sc?J;=0PENAoT`wcr+DzZ^`g_>*=I)Bk%{pA&|x z$cJ+5p99{}4=;9%UN}88x;YCR*51^_LQDE)HgCqsq|*Sv=za(F@xugq|2wn~)0iag z`Ul`fd!3;H`V1Q4B}B+aLy499%r5JUsGhDBe>%Q>mi9SExXW|e)G8;jTQL2-1aSpo zr+baOKb~(AJ3ZP+-`#5)(AL^Te_AcO&+l3IiY%nsQ`;6F31({;uJxHwX5VP;5y#%F zg@$Zeykh|r{3b((ef-YQ5qiBX^uBCyDzUpnKltLf>-Gzi`xi#ZJPjwmJ zt<)d_V?`8))F=7#5hs0D7^p=L)nE^~#{Oq55t(%niW0XLz=?qM11+ud2snzM2lAgO zNZGc8k18{zSkVzH8u^X#*mr?wsA4HkL3Mv44=7fyjwno-^tlO zlpwC0@Lx+MTl4wO-R8&NJdSmSM|9#RK4@3fW48$QgWKsSogzbVk>C63m$HF5tf;17 zmKxy$M5>$)UbaC}vNf-T!fd<^XlD-w8Z4@Vpe%4X4%Jp9iNj7cU41y;uIAu*O_`Y!wc)om$W$=IDvv(l9X^)WHMrlgsrkGy<$)+GT`xvnYwwdH64rMEm1*gR_S0(@$qx0s$4dhUNQ06X z=bX-yC~?DC+WRyfZ~IXDINt>)NvbVdh>#NM_^CLv=+-iH$EHFV+PLVzh^ktmv8K$sm{9-nI#AJWhJ-m@T=jgkRGzqVMc>!bINEgraejKV`92_=YIEnddyST-&UV&-tDL1Xz#UoqA{)B`}TaL&4BUD`y zAI)qXEfceOp6RTvP(J{k0m~|$2zhV&zYu1RNg%!sEN5XF8F-}_q|>%8A`Gz zx^D%3?-TVY0&`eUwpDT(n;}Gk>~%|RkMFC;i+tIFT#?tVS|Bl5aSMMU?(Tf%TmZto zlm^ztiu+=x#tDvD%DfbaOKRlSAV>qwZY|>=z*%>O!d?L+Ju@1Zt5M0B1lTXcG?bq3 zcWeTJmxECL{pGKIU9>o%SyFn24wh-?>G|taUKXTUU7L=5R`-Zb%gEkavu+BZqMk$3qJ#R; zULgZbB-2QPYVA2p7Qnns%zpMLvPqc!xk=b>ReKO(eraFG>=W?A;zr*f3~SS0VN)(| z9^k_Tx@@Pf!S^xlSGIPdMc?G|=(q7c;Y+LcWdWKSys~j%l!6h*bRt1Qx zQSF>|xGpMiKW#0RdaxFybl`1nP z{>Um_U4GKdW zPVTCkzqe6T{IOAF%q>98@uF*nSz#ZyY+lOkE>-EL69b<)BTV;iy}s&~e2O8!=Ao78 zpZh@rcTAg#U*cW4PouoM!0Dr;SD`{>4v|>RLC9YxdA>d-w|A?cVDC71Qm;EcfIFey zw{BEASjX;{k2K{|Yr-k=ukal7Mh-)zvdLb+>COi+14rGTHG>{=CI4^3+rViaxSxt% zn)bsrm7lmMQ-Iu-*DvIP<#mN}fHI3JRmL-aO>z8$BSrzoHxD?2L3YYbHKpS`Wzb>o z=oN}NH2d)yjszU@ix#RMb!RZNCmMx{BkwLfSI&n&qNiTB;r}hfhNjZZ3)hDX~~&UgX`Za-0)&+{EZ}lK5*;2J=q4(jFGJqFZCc` z)+=WaO`!zSu&<5$##8{;&iI_)R7_8QS`}pq(rpmp=sUR!xlTeHIyRKew(>3+2)W-r zSHmb)ZJ$5ilIi!DPu85z+25#2;Xs^a!Uned`U~u9cu?cVH0>ViFq!{*KmpTEV7*|CX&D|dEY84xz>k9}5M-aCiWrYZ|m73x*Xjj$|g zJtMA(u|xUe2iz7-M$9+IO;E;aTW7&NAkW(PUp?_11Q7WKvk>9}UED7UCbL+Zm|jZS zQ8Jv>F5akX>Qmb+5vzuQ*?p-7=+|>$JRvDTpE$UI-rWc@1$Q~>PtE!&u&Ly&udmTa zv@qy>IvcXj4(S)#igU692!kd*$Sj)dOeczbI`_Y8A_ z+D<%iLl;@V;rh`~*0WCG<>f;+WaQ-1&RmN}hBb&W;m54<%-fh^ipL88gS!LVCh(R^ z&o781lDGjr9E0Dzq)RQ0x(f+*DQ*`&PZ*B*nVgGNlW#pg%5R}Ci?0U9M|VKXTC(h5 z2B!zxI(-xx25JtUQqD9=8qVUTw|I!>*t6y&_p_$TS^JE~8RY;d*Og*vM@59f-+X%n zb&~&QJhHi7`>)OQ&+^OVyL+Djpt5E-*$}%LK;mD)j$@&{i-*D0FT3Y3+@2Pyl+YB3 zBvyRztRc8Mdb0dA-8=Piit+0U#XbJuI8w7KET}`^O zSTGZl((x+c6~i@Lf-1_hH!^2P2qg2e7K& z{CTIHzrIeY`w3vP36J8*MR9fC4q|Na8$8~2LKfX#Lg2Oc>#~0&>VIkR)+_WlB}3oE z9+Y1p28d^Zj*muT8| zKSJq915~*e4v`4i*ny6+2gX0aRsat9U&84hv0>cT#Fr)!PKRr{3{-`l>X>}s5Aa)x zK|^NS3WoGgcxd7gIs~^%WO?IDBImTJ^H;j+Mvq*)*m7Zz=n^o##aIMLDRHjHuXQBy zv@*IP*2RrwwLy(KoKkm-4(>0%nB50_Yfz7VnudR9YAO`>By4^6A_&Ph3$_?h&*g%` zE~EwhEJ^A58m*ge7m*1s^$foh)8|95S3`8#ECS%U@jnC`N3rTHUnX&X0Wu9(j2S35+M2pOemvU)NSwvt|;khHZS= zGyAEBE)wm;ICJDu+L`_WD+PC0F3Fm#?x1q9_Sx8mnNiQH?9_upBPF%x55=;e$V~*w z4q5CxKQy7M@PUat|KXaS==ZcpwF32Ro_9OV=$-Un&82t6aJIby0g_aOudWPt%9Xrr zd|$mG%sUv?W zvE}!3P$7mpCgBEy@W8Oq^IdSD@!CCg>dpLd&7G>R<)-acQ!96GeOV>ih7F>S0B@2 z9T)-1+A1=hhWre@Fe&$G{m{mwBVTy4)*4w{At)_JejUWGhEQwzU6B=M44V?bk}<&$ zt-$`FK6t6EmQ*mJ8zw$I%?&-7h!_6Q1mOC{G?*l3B%IX{`UZB9Jc&o%q!+9_iO9k< z+W4W%HDq{%pIU+@zhwbD6KFrYM`+;UzgPv1%Ro;MEX3kg1B`Sei;(PHMzmpN@@q-lAwwj)b?e%LED`$miqV#Fje+e+&yQB zwx-2oFrBEgx;vyAa+T&}A=iF0>$HV6mcAHCwm`kaG)F=|NXk|pryYK92`vEn99|?w zJ-r|t13I+latfmXX|-7_cA z6p-z{V)H^a|3|Zsui{lWDbp@))S)Za7&0h+LQOZdCO<>4o5COdj!yW*&~16~7-q8I z&lAX{BBi3PK324|t{vUwQa;eX1H-dmpOaKhL7-SwENoQ!hR^ z;j8#y(&Ta*+P~%rIFk(YsE_<{Mp-LKy6tfo{=Plk)J~r!4VW7$Hv$qB?eS|MaH1Z5 z(L`JgtTgT_ioHD@TpkEi-xLcO*>d-@jdbWlG7xeE(rdq0>Iyuz(|Jr1=B$ELtzb&ifp z`edRvYwCU`zrK8nU>=?$Ei_R_q9Z`|DvF1j&&KJ&erX0U1g7{a-kB7N&&QzkUwE~r z_IpXeBvkkAE>9DCjeQf1)nm}gaqh&M-FS5&lAUQd51H!J{s^6MM+8EOm=na7`(()@ zzoa%Gqx55MPqm4+euRhKQF33x%2(0R$)X=!&$dZC$VO~8a@b-77sSRb#XE7AmjP=}sTarbx3%Ms%C~vkk9&T%at&IN6iGigB)h8)28VgB z^hPRjSavLav#t4&w2V|+SJLeK=vT8(0S_yh=+66{Cx5`{d&_klxaY^`s^(506>;8p z!ENv6tN%eTc?o3+22Ra-$7H`6HoT6W60Z)vvr4-_-NzhZY*n%jDE z51{&-_3pow=Iui@nQ_+~NwT+pc%JcNBS$(DR2S07X;aR$_5bo~FLGIB8 zxhLWqS7=Fk8PSLG8RZ5R+s?S9I=Rx?9;?wmu|IW(YKs@wq@VK^XN!8CTnNiAFbrNy zCp_?k@3=#a$di#~Gdl7&FEozVGG^N-cABHb6d&{{d$k7{e?gRD=?#1_7}^<13O&!p z?i6QS%5_;~+g*6XoX}rq5~X1}*?c%@Z}(#rYt-54(0|-dVbg{9Vnez}4+PN|y3!sZ zqkKG8V-LR7Zg1$^4uG$1t$M+WR8H?-&sdpS=jyiR9X_WkxsS1wlQ=DA7BX$TeQLL+ z%vcU|t3=J(kWr?372_khUaH|r4kHsU{6dDLr42u*MnTtZmV^Mf#S{$7T@N%mM6Cf0G-E&viBRME`Xe)k1kPR(Ebp~I5ggqm-EkV)6A_#*^^zeCgpM+ zchiWvwTL1&kX>|z!Iu^(;=ATB6`g^yAJleDs_Hf?{4Y*YY^Xn3*mi&AQW{_1HFe%A zcA-FL9wyfdOLjE0OuK)m5v{0bvJJ*IHJ3K|?%z`@7!B z$z2S9*hC|1dj9FrI7`}+R?Pzk-M{0r=vzle5DUQ7ZtrygOr=PiC7OiiBKtYRMBCo| zisuB_uhIuULpVe|SnD)>?_gA397wA)Bee1?a*P@5*IY8b&dCZ%b{uh2{pNygWD#3+ zCUV&L1{x1j)e`}iI9XsC_1uMq~#o- z{tQuq<8BF}7A1XeMt>%E8}?)QF)Eh_9Bp|JTj707xuYclYU0F2A)dN+3a#EL|+P;==<>hss@AkJ#0ZZ3Ja$g_vuq%TMb?SLvpJ zjU1;@u(EaZXV~pKYZg1W9eU14#LAW$yHHS zn2*_Tr8a^At5oTi3mm=zcqDj36Kwl~;!RqTDWhek7Q`!^0ur^fjZGV3NhN2W z6r8BLPtS4iT0LVh3YQ*C-{l|1c{AJr7~QVIA!kO(i8?Y=9|aLqk1|iSwrkM_9BjPY zwdzWH_6c+kEve)#GPo8NqYJkF8$SZ^Spsnv#j?mkby&z5Fo-qk%%xpdIWL*OwhLZ2 z&J6^ql%8(hWRx2{Xv531#5O(;hwP;jeko_G*&khW>2V+BrQ;qIe;2tOv@R2#(KOck zas=ORH>oOtWqZVibp=JUo*#f0YgNOc?RH&{JFtc3WtguFUT0d`{V8ply4`{XkiqW| zo5l}I(c)#ps=8;}+_yR;s%jZ%&=RO6D1ICtN@nSa^%m(`f_Wa3LfZD&n8k>nS8u4N z1-q>DS$&4ijKroYz(T0?BAbNW>wDPNw_U)#72(_Ag@Hn%53TIYoTF+JV&qt@Gvh2| zM1k)~_96K!R@#D50xi4Oe~b-Yx0)jw>&r8f`Ys4AldBp%C4z!2G#DBUUT3^Cj*(Kk z^OD{L3Wfc~4{w0k>As5&Pk9i}%nE&ixJ^|EII|qqGFDp=#I!O5*WsEXWF^-vOWt2E z{*uttb_q8fxkMeD@EqV7(}JO0-`38$3xn=H4(BzL7%sg)oOLIOj5iXGagvg(R6p-9 z+U4$38&W8&b-Vl-4_@e(^?O$3S0s4l8wsd6xm3(3ndB$_Arjz}?ceIWo2idkcHhN4 zL?52hRZrVYE~`r_={4O^%QS*H_j?9_eN{G%AXQ`h1Tq-uTcQBmOL- zuIAmTWu0r**SEyEu9Z%lm{(2=;=Xf#ZD+YtfsJ(yj43J*5W<3zY=_r>k%*X9tmjU> z2z}0#o#%cw;#8}2O{U+5V$Y#lTXp6|S{Sa91}i|j-9-=%*Sj9a$78Z1oN)hxr3p|K z;ttAEJWmU>V_%UNrRrhF$8Q9`p+6}6MO{23%mLk*n@ZDHmB<9;mE*bL)G0**Pw6$pbyQmKWhTWT4BzqP0EvHTfK);1rq=a3s1W2iK^j+>f8WPoEBoUs z{VXYdeW3vC@f9%c9d*P?qX^#itRGhd@Yf|!phP}z!u*be#aO}1Pe?7)w4@L#iWwg` z^7{w;k0DJDY2ZUXl^n!Bv_uQ&rwts|nkef-NH`FPTa*q<-2eTxb%>Fal>h^pY+aNw zO=ZW)-?dNwQCkI|iT|>|3{(Id)S)Gu$xjqwUjj&V!68EYl=M!_Umx?Y&wE@IL_8YT z)W;8%f`aWOGRUSBv8*w+05(Qk1Z{!F@2a2wdV4WPiGljCm!A@~jMRd_$hyVqe<7aK zArMp!r7`UqeE+--ipM~|RTzIW+5Z33dcCxVEBf{J+KI*g`hk1uHUlIDO1MM+@V|6q z|GuTqLAk_!KJ>pkwBTa93`

    p33rdl%jei`8 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 z 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

  • "]) +endif +if !s:settings.no_doc + call extend(s:lines, ["", ""]) +endif + +exe s:newwin .. "wincmd w" +call setline(1, s:lines) +unlet s:lines + +" Mangle modelines so Vim doesn't try to use HTML text as a modeline if editing +" this file in the future; need to do this after generating all the text in case +" the modeline text has different highlight groups which all turn out to be +" stripped from the final output. +%s!\v(%(^|\s+)%([Vv]i%(m%([<=>]?\d+)?)?|ex)):!\1\:!ge + +" The generated HTML is admittedly ugly and takes a LONG time to fold. +" Make sure the user doesn't do syntax folding when loading a generated file, +" using a modeline. +if !s:settings.no_modeline + call append(line('$'), "") +endif + +" Now, when we finally know which, we define the colors and styles +if s:settings.use_css && !s:settings.no_doc + 1;//+1 + + " Normal/global attributes + if s:settings.no_pre + call append('.', "body { color: " .. s:fgc .. "; background-color: " .. s:bgc .. "; font-family: ".. s:htmlfont .."; }") + + + else + call append('.', "pre { " .. s:whitespace .. "font-family: ".. s:htmlfont .."; color: " .. s:fgc .. "; background-color: " .. s:bgc .. "; }") + + + yank + put + execute "normal! ^cwbody\e" + " body should not have the wrap formatting, only the pre section + if s:whitespace != '' + exec 's#'..s:whitespace + endif + endif + " fix browser inconsistencies (sometimes within the same browser) of different + " default font size for different elements + call append('.', '* { font-size: 1em; }') + + + " use color scheme styles for links + " browser-default blue/purple colors for links don't look like the existing theme and are unreadable on dark backgrounds + call append('.', 'a { color: inherit; }') + + + " if we use any input elements for unselectable content, make sure they look + " like normal text + if !empty(s:settings.prevent_copy) + if s:settings.use_input_for_pc !=# "none" + call append('.', 'input { border: none; margin: 0; padding: 0; font-family: '..s:htmlfont..'; }') + + + " ch units for browsers which support them, em units for a somewhat + " reasonable fallback. + for w in range(1, 20, 1) + call append('.', [ + \ "input[size='"..w.."'] { width: "..w.."em; width: "..w.."ch; }" + \ ]) + + + endfor + endif + + if s:settings.use_input_for_pc !=# 'all' + let s:unselectable_styles = [] + if s:settings.prevent_copy =~# 'f' + call add(s:unselectable_styles, 'FoldColumn') + endif + if s:settings.prevent_copy =~# 'n' + call add(s:unselectable_styles, 'LineNr') + endif + if s:settings.prevent_copy =~# 't' && !s:settings.ignore_folding + call add(s:unselectable_styles, 'Folded') + endif + if s:settings.prevent_copy =~# 'd' + call add(s:unselectable_styles, 'DiffDelete') + endif + if s:settings.use_input_for_pc !=# 'none' + call append('.', [ + \ '/* Note: IE does not support @supports conditionals, but also does not fully support', + \ ' "content:" with custom content, so we *want* the check to fail */', + \ '@supports ( content: attr(data-custom-content) ) {' + \ ]) + +3 + endif + " The line number column inside the foldtext is styled just like the fold + " text in Vim, but it should use the prevent_copy settings of line number + " rather than fold text. Apply the prevent_copy styles to foldtext + " specifically for line numbers, which always come after the fold column, + " or at the beginning of the line. + if s:settings.prevent_copy =~# 'n' && !s:settings.ignore_folding + call append('.', [ + \ ' .FoldColumn + .Folded, .Folded:first-child { user-select: none; }', + \ ' .FoldColumn + [data-Folded-content]::before, [data-Folded-content]:first-child::before { content: attr(data-Folded-content); }', + \ ' .FoldColumn + [data-Folded-content]::before, [data-Folded-content]:first-child::before { padding-bottom: 1px; display: inline-block; /* match the 1-px padding of standard items with background */ }', + \ ' .FoldColumn + span[data-Folded-content]::before, [data-Folded-content]:first-child::before { cursor: default; }', + \ ]) + +4 + endif + for s:style_name in s:unselectable_styles + call append('.', [ + \ ' .'..s:style_name..' { user-select: none; }', + \ ' [data-'..s:style_name..'-content]::before { content: attr(data-'..s:style_name..'-content); }', + \ ' [data-'..s:style_name..'-content]::before { padding-bottom: 1px; display: inline-block; /* match the 1-px padding of standard items with background */ }', + \ ' span[data-'..s:style_name..'-content]::before { cursor: default; }', + \ ]) + +4 + endfor + if s:settings.use_input_for_pc !=# 'none' + " Note, the extra '}' is to match the "@supports" above + call append('.', [ + \ ' input { display: none; }', + \ '}' + \ ]) + +2 + endif + unlet s:unselectable_styles + endif + + " Fix mouse cursor shape for the fallback method of uncopyable text + if s:settings.use_input_for_pc !=# 'none' + if s:settings.prevent_copy =~# 'f' + " Make the cursor show active fold columns as active areas, and empty fold + " columns as not interactive. + call append('.', ['input.FoldColumn { cursor: pointer; }', + \ 'input.FoldColumn[value="'..repeat(' ', s:foldcolumn)..'"] { cursor: default; }' + \ ]) + +2 + if s:settings.use_input_for_pc !=# 'all' + call append('.', [ + \ 'a[data-FoldColumn-content="'..repeat(' ', s:foldcolumn)..'"] { cursor: default; }' + \ ]) + +1 + end + endif + " make line number column show as non-interactive if not selectable + if s:settings.prevent_copy =~# 'n' + call append('.', 'input.LineNr { cursor: default; }') + + + endif + " make fold text and line number column within fold text show as + " non-interactive if not selectable + if (s:settings.prevent_copy =~# 'n' || s:settings.prevent_copy =~# 't') && !s:settings.ignore_folding + call append('.', 'input.Folded { cursor: default; }') + + + endif + " make diff filler show as non-interactive if not selectable + if s:settings.prevent_copy =~# 'd' + call append('.', 'input.DiffDelete { cursor: default; }') + + + endif + endif + endif +endif + +if !s:settings.use_css && !s:settings.no_doc + " For Netscape 4, set attributes too, though, strictly speaking, it's + " incorrect. + execute '%s:]*\):\r]\|>\|<\|"\)+\1\2+ge +endif + +" The DTD +if !s:settings.no_doc + if s:settings.use_xhtml + exe "normal! gg$a\n" + elseif s:html5 + exe "normal! gg0i\n" + else + exe "normal! gg0i\n" + endif +endif + +if s:settings.use_xhtml && !s:settings.no_doc + exe "normal! gg/ +" URL: https://8th-dev.com/ +" Filetypes: *.8th +" NOTE: You should also have the ftplugin/8th.vim file to set 'isk' + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim +syn clear + +syn sync ccomment +syn sync maxlines=200 + +syn case match +syn iskeyword 33-255 + +syn match eighthColonName "\S\+" contained +syn match eighthColonDef ":\s\+\S\+" contains=eighthColonName + +" new words +syn match eighthClasses "\<\S\+:" contained +syn match eighthClassWord "\<\S\+:.\+" contains=eighthClasses + +syn keyword eighthEndOfColonDef ; i; +syn keyword eighthDefine var var, + +" Built in words: +com! -nargs=+ Builtin syn keyword eighthBuiltin + + +Builtin gen-secret 2fa:gen-secret gen-url 2fa:gen-url validate-code 2fa:validate-code cb AWS:cb cli AWS:cli +Builtin cmd AWS:cmd cp AWS:cp rc AWS:rc LIBS DBUS:LIBS call DBUS:call init DBUS:init + DOM:+ - DOM:- +Builtin attr! DOM:attr! attr@ DOM:attr@ attrs DOM:attrs children DOM:children css-parse DOM:css-parse +Builtin each DOM:each find DOM:find new DOM:new type DOM:type ! G:! !if G:!if #! G:#! ## G:## #if G:#if +Builtin #ifdef G:#ifdef #ifeval G:#ifeval ' G:' ( G:( (:) G:(:) (code) G:(code) (defer) G:(defer) (dump) G:(dump) +Builtin (getc) G:(getc) (gets) G:(gets) (interp) G:(interp) (log) G:(log) (needs) G:(needs) (parseln) G:(parseln) +Builtin (putc) G:(putc) (puts) G:(puts) (stat) G:(stat) (with) G:(with) ) G:) +hook G:+hook +ref G:+ref +Builtin ,# G:,# -----BEGIN G:-----BEGIN -Inf G:-Inf -Inf? G:-Inf? -hook G:-hook -ref G:-ref -rot G:-rot +Builtin . G:. .# G:.# .hook G:.hook .needs G:.needs .r G:.r .s G:.s .s-truncate G:.s-truncate .stats G:.stats +Builtin .ver G:.ver .with G:.with 0; G:0; 2dip G:2dip 2drop G:2drop 2dup G:2dup 2nip G:2nip 2over G:2over +Builtin 2swap G:2swap 2tuck G:2tuck 3drop G:3drop 3dup G:3dup 3rev G:3rev 4drop G:4drop 8thdt? G:8thdt? +Builtin 8thsku? G:8thsku? 8thver? G:8thver? 8thvernum? G:8thvernum? : G:: ; G:; ;; G:;; ;;; G:;;; ;with G:;with +Builtin >clip G:>clip >clip-mime G:>clip-mime >json G:>json >kind G:>kind >n G:>n >r G:>r >s G:>s ?: G:?: +Builtin ?@ G:?@ @ G:@ BITMAP: G:BITMAP: ENUM: G:ENUM: FLAG: G:FLAG: I G:I Inf G:Inf Inf? G:Inf? J G:J +Builtin K G:K NaN G:NaN NaN? G:NaN? SED-CHECK G:SED-CHECK SED: G:SED: SED: G:SED: X G:X \ G:\ _dup G:_dup +Builtin _swap G:_swap actor: G:actor: again G:again ahead G:ahead all-words G:all-words and G:and apropos G:apropos +Builtin argc G:argc args G:args array? G:array? assert G:assert base G:base base>n G:base>n bi G:bi +Builtin bits G:bits break G:break break? G:break? breakif G:breakif build? G:build? buildver? G:buildver? +Builtin bye G:bye c/does G:c/does case: G:case: catch G:catch chdir G:chdir clip-mime> G:clip-mime> +Builtin clip-mime? G:clip-mime? clip> G:clip> clone G:clone clone-shallow G:clone-shallow cold G:cold +Builtin compile G:compile compile? G:compile? compiling? G:compiling? conflict G:conflict const G:const +Builtin container? G:container? counting-allocations G:counting-allocations cr G:cr critical: G:critical: +Builtin critical; G:critical; curlang G:curlang curry G:curry curry: G:curry: decimal G:decimal default: G:default: +Builtin defer: G:defer: deferred: G:deferred: deg>rad G:deg>rad depth G:depth die G:die dip G:dip drop G:drop +Builtin dstack G:dstack dump G:dump dup G:dup dup>r G:dup>r dup? G:dup? e# G:e# enum: G:enum: error? G:error? +Builtin eval G:eval eval! G:eval! eval0 G:eval0 exit G:exit expect G:expect extra! G:extra! extra@ G:extra@ +Builtin false G:false fnv G:fnv fourth G:fourth free G:free func: G:func: getc G:getc getcwd G:getcwd +Builtin getenv G:getenv gets G:gets goto G:goto handler G:handler header G:header help G:help help_db G:help_db +Builtin here G:here hex G:hex i: G:i: i; G:i; immutable G:immutable isa? G:isa? items-used G:items-used +Builtin jcall G:jcall jclass G:jclass jmethod G:jmethod json! G:json! json-8th> G:json-8th> json-nesting G:json-nesting +Builtin json-pretty G:json-pretty json-throw G:json-throw json> G:json> json@ G:json@ k32 G:k32 keep G:keep +Builtin l: G:l: last G:last lib G:lib libbin G:libbin libc G:libc libimg G:libimg literal G:literal +Builtin locals: G:locals: lock G:lock lock-to G:lock-to locked? G:locked? log G:log logl G:logl long-days G:long-days +Builtin long-months G:long-months longjmp G:longjmp lookup G:lookup loop G:loop loop- G:loop- map? G:map? +Builtin mark G:mark mark? G:mark? mobile? G:mobile? n# G:n# name>os G:name>os name>sem G:name>sem ndrop G:ndrop +Builtin needs G:needs needs-throws G:needs-throws new G:new next-arg G:next-arg nip G:nip noop G:noop +Builtin not G:not nothrow G:nothrow ns G:ns ns: G:ns: ns>ls G:ns>ls ns>s G:ns>s ns? G:ns? null G:null +Builtin null; G:null; null? G:null? nullvar G:nullvar number? G:number? of: G:of: off G:off on G:on +Builtin onexit G:onexit only G:only op! G:op! or G:or os G:os os-names G:os-names os>long-name G:os>long-name +Builtin os>name G:os>name over G:over p: G:p: pack G:pack parse G:parse parse-csv G:parse-csv parse-date G:parse-date +Builtin parsech G:parsech parseln G:parseln parsews G:parsews pick G:pick poke G:poke pool-clear G:pool-clear +Builtin pool-clear-all G:pool-clear-all prior G:prior private G:private process-args G:process-args +Builtin process-args-fancy G:process-args-fancy process-args-help G:process-args-help prompt G:prompt +Builtin public G:public putc G:putc puts G:puts quote G:quote r! G:r! r> G:r> r@ G:r@ rad>deg G:rad>deg +Builtin rand-float G:rand-float rand-float-signed G:rand-float-signed rand-jit G:rand-jit rand-jsf G:rand-jsf +Builtin rand-native G:rand-native rand-normal G:rand-normal rand-pcg G:rand-pcg rand-pcg-seed G:rand-pcg-seed +Builtin rand-range G:rand-range rand-select G:rand-select randbuf-pcg G:randbuf-pcg random G:random +Builtin rdrop G:rdrop recurse G:recurse recurse-stack G:recurse-stack ref@ G:ref@ reg! G:reg! reg@ G:reg@ +Builtin regbin@ G:regbin@ remaining-args G:remaining-args repeat G:repeat requires G:requires reset G:reset +Builtin roll G:roll rop! G:rop! rot G:rot rpick G:rpick rreset G:rreset rroll G:rroll rstack G:rstack +Builtin rswap G:rswap rusage G:rusage s>ns G:s>ns same? G:same? scriptdir G:scriptdir scriptfile G:scriptfile +Builtin sem G:sem sem-post G:sem-post sem-rm G:sem-rm sem-wait G:sem-wait sem-wait? G:sem-wait? sem>name G:sem>name +Builtin semi-throw G:semi-throw set-wipe G:set-wipe setenv G:setenv setjmp G:setjmp settings! G:settings! +Builtin settings![] G:settings![] settings-clear G:settings-clear settings-db-name G:settings-db-name +Builtin settings-gather G:settings-gather settings-load G:settings-load settings-save G:settings-save +Builtin settings-save-these G:settings-save-these settings-ungather G:settings-ungather settings@ G:settings@ +Builtin settings@? G:settings@? settings@[] G:settings@[] sh G:sh sh! G:sh! sh!to G:sh!to sh$ G:sh$ +Builtin short-days G:short-days short-months G:short-months sleep G:sleep sleep-msec G:sleep-msec sleep-nsec G:sleep-nsec +Builtin sleep-until G:sleep-until slog G:slog space G:space stack-check G:stack-check stack-size G:stack-size +Builtin step G:step sthrow G:sthrow string? G:string? struct: G:struct: swap G:swap tab-hook G:tab-hook +Builtin tell-conflict G:tell-conflict tempdir G:tempdir tempfilename G:tempfilename third G:third throw G:throw +Builtin thrownull G:thrownull times G:times toggle G:toggle tri G:tri true G:true tuck G:tuck type-check G:type-check +Builtin typeassert G:typeassert uid G:uid uname G:uname unlock G:unlock unpack G:unpack until G:until +Builtin until! G:until! while G:while while! G:while! with: G:with: word? G:word? words G:words words-like G:words-like +Builtin words/ G:words/ xchg G:xchg xor G:xor >auth HTTP:>auth (curry) I:(curry) appopts I:appopts +Builtin notimpl I:notimpl sh I:sh call JSONRPC:call auth-string OAuth:auth-string gen-nonce OAuth:gen-nonce +Builtin params OAuth:params call SOAP:call ! a:! + a:+ - a:- / a:/ 2each a:2each 2len a:2len 2map a:2map +Builtin 2map+ a:2map+ 2map= a:2map= <> a:<> = a:= @ a:@ @? a:@? _@ a:_@ _len a:_len _push a:_push all a:all +Builtin any a:any bsearch a:bsearch centroid a:centroid clear a:clear close a:close cmp a:cmp diff a:diff +Builtin dot a:dot each a:each each! a:each! each-par a:each-par each-slice a:each-slice exists? a:exists? +Builtin filter a:filter filter-par a:filter-par generate a:generate group a:group indexof a:indexof +Builtin insert a:insert intersect a:intersect join a:join len a:len map a:map map+ a:map+ map-par a:map-par +Builtin map= a:map= maxlen a:maxlen mean a:mean mean&variance a:mean&variance merge a:merge new a:new +Builtin op! a:op! open a:open pigeon a:pigeon pivot a:pivot pop a:pop push a:push qsort a:qsort randeach a:randeach +Builtin reduce a:reduce reduce+ a:reduce+ remove a:remove rev a:rev rindexof a:rindexof shift a:shift +Builtin shuffle a:shuffle slice a:slice slice+ a:slice+ slide a:slide smear a:smear sort a:sort split a:split +Builtin squash a:squash switch a:switch union a:union uniq a:uniq unzip a:unzip x a:x x-each a:x-each +Builtin xchg a:xchg y a:y zip a:zip 8thdir app:8thdir asset app:asset atrun app:atrun atrun app:atrun +Builtin atrun app:atrun basedir app:basedir basename app:basename config-file-name app:config-file-name +Builtin current app:current datadir app:datadir display-moved app:display-moved exename app:exename +Builtin localechanged app:localechanged lowmem app:lowmem main app:main meta! app:meta! meta@ app:meta@ +Builtin name app:name onback app:onback oncrash app:oncrash opts! app:opts! opts@ app:opts@ orientation app:orientation +Builtin orientation! app:orientation! pid app:pid post-main app:post-main pre-main app:pre-main privdir app:privdir +Builtin quiet? app:quiet? raise app:raise read-config app:read-config read-config-map app:read-config-map +Builtin read-config-var app:read-config-var request-perm app:request-perm restart app:restart resumed app:resumed +Builtin signal app:signal standalone app:standalone standalone! app:standalone! subdir app:subdir suspended app:suspended +Builtin sysquit app:sysquit terminated app:terminated theme? app:theme? themechanged app:themechanged +Builtin ticks app:ticks timeout app:timeout trap app:trap dawn astro:dawn do-dawn astro:do-dawn do-dusk astro:do-dusk +Builtin do-rise astro:do-rise dst! astro:dst! dusk astro:dusk latitude astro:latitude location! astro:location! +Builtin longitude astro:longitude sunrise astro:sunrise genkeys auth:genkeys secret auth:secret session-id auth:session-id +Builtin session-key auth:session-key validate auth:validate ! b:! + b:+ / b:/ 1+ b:1+ 1- b:1- <> b:<> +Builtin = b:= >base16 b:>base16 >base32 b:>base32 >base64 b:>base64 >base85 b:>base85 >hex b:>hex >mpack b:>mpack +Builtin @ b:@ ICONVLIBS b:ICONVLIBS append b:append base16> b:base16> base32> b:base32> base64> b:base64> +Builtin base85> b:base85> bit! b:bit! bit@ b:bit@ clear b:clear compress b:compress conv b:conv each b:each +Builtin each! b:each! each-slice b:each-slice expand b:expand fill b:fill getb b:getb hex> b:hex> len b:len +Builtin mem> b:mem> move b:move mpack-compat b:mpack-compat mpack-date b:mpack-date mpack-ignore b:mpack-ignore +Builtin mpack> b:mpack> n! b:n! n+ b:n+ n@ b:n@ new b:new op b:op op! b:op! pad b:pad rev b:rev search b:search +Builtin shmem b:shmem slice b:slice splice b:splice ungetb b:ungetb unpad b:unpad writable b:writable +Builtin xor b:xor +block bc:+block .blocks bc:.blocks add-block bc:add-block block-hash bc:block-hash +Builtin block@ bc:block@ first-block bc:first-block hash bc:hash last-block bc:last-block load bc:load +Builtin new bc:new save bc:save set-sql bc:set-sql validate bc:validate validate-block bc:validate-block +Builtin add bloom:add filter bloom:filter in? bloom:in? parse bson:parse LIBS bt:LIBS accept bt:accept +Builtin ch! bt:ch! ch@ bt:ch@ connect bt:connect disconnect bt:disconnect init bt:init leconnect bt:leconnect +Builtin lescan bt:lescan listen bt:listen on? bt:on? read bt:read scan bt:scan service? bt:service? +Builtin services? bt:services? write bt:write * c:* * c:* + c:+ + c:+ = c:= = c:= >polar c:>polar >polar c:>polar +Builtin >ri c:>ri >ri c:>ri ^ c:^ ^ c:^ abs c:abs abs c:abs arg c:arg arg c:arg conj c:conj conj c:conj +Builtin im c:im im c:im log c:log log c:log n> c:n> n> c:n> new c:new new c:new polar> c:polar> polar> c:polar> +Builtin re c:re re c:re (.hebrew) cal:(.hebrew) (.islamic) cal:(.islamic) .hebrew cal:.hebrew .islamic cal:.islamic +Builtin >hebepoch cal:>hebepoch >jdn cal:>jdn Adar cal:Adar Adar2 cal:Adar2 Av cal:Av Elul cal:Elul +Builtin Heshvan cal:Heshvan Iyar cal:Iyar Kislev cal:Kislev Nissan cal:Nissan Shevat cal:Shevat Sivan cal:Sivan +Builtin Tammuz cal:Tammuz Tevet cal:Tevet Tishrei cal:Tishrei d>iso cal:d>iso d>week cal:d>week days-in-hebrew-year cal:days-in-hebrew-year +Builtin displaying-hebrew cal:displaying-hebrew fixed>hebrew cal:fixed>hebrew fixed>islamic cal:fixed>islamic +Builtin gershayim cal:gershayim hanukkah cal:hanukkah hebrew-epoch cal:hebrew-epoch hebrew-leap-year? cal:hebrew-leap-year? +Builtin hebrew-leap-year? cal:hebrew-leap-year? hebrew>fixed cal:hebrew>fixed hebrewtoday cal:hebrewtoday +Builtin hmonth-name cal:hmonth-name islamic.epoch cal:islamic.epoch islamic>fixed cal:islamic>fixed +Builtin islamictoday cal:islamictoday iso>d cal:iso>d jdn> cal:jdn> last-day-of-hebrew-month cal:last-day-of-hebrew-month +Builtin number>hebrew cal:number>hebrew omer cal:omer pesach cal:pesach purim cal:purim rosh-chodesh? cal:rosh-chodesh? +Builtin rosh-hashanah cal:rosh-hashanah shavuot cal:shavuot taanit-esther cal:taanit-esther tisha-beav cal:tisha-beav +Builtin week>d cal:week>d yom-haatsmaut cal:yom-haatsmaut yom-kippur cal:yom-kippur >hsva clr:>hsva +Builtin complement clr:complement dist clr:dist gradient clr:gradient hsva> clr:hsva> invert clr:invert +Builtin names clr:names nearest-name clr:nearest-name parse clr:parse >redir con:>redir accept con:accept +Builtin accept-nl con:accept-nl accept-pwd con:accept-pwd alert con:alert ansi? con:ansi? black con:black +Builtin blue con:blue clreol con:clreol cls con:cls ctrld-empty con:ctrld-empty cyan con:cyan down con:down +Builtin file>history con:file>history free con:free getxy con:getxy gotoxy con:gotoxy green con:green +Builtin history-handler con:history-handler history>file con:history>file init con:init key con:key +Builtin key? con:key? left con:left load-history con:load-history magenta con:magenta max-history con:max-history +Builtin onBlack con:onBlack onBlue con:onBlue onCyan con:onCyan onGreen con:onGreen onMagenta con:onMagenta +Builtin onRed con:onRed onWhite con:onWhite onYellow con:onYellow print con:print red con:red redir> con:redir> +Builtin redir? con:redir? right con:right save-history con:save-history size? con:size? up con:up white con:white +Builtin yellow con:yellow >aes128gcm cr:>aes128gcm >aes256gcm cr:>aes256gcm >cp cr:>cp >cpe cr:>cpe +Builtin >decrypt cr:>decrypt >edbox cr:>edbox >encrypt cr:>encrypt >nbuf cr:>nbuf >rsabox cr:>rsabox +Builtin >uuid cr:>uuid aad? cr:aad? aes128box-sig cr:aes128box-sig aes128gcm> cr:aes128gcm> aes256box-sig cr:aes256box-sig +Builtin aes256gcm> cr:aes256gcm> aesgcm cr:aesgcm blakehash cr:blakehash chacha20box-sig cr:chacha20box-sig +Builtin chachapoly cr:chachapoly cipher! cr:cipher! cipher@ cr:cipher@ ciphers cr:ciphers cp> cr:cp> +Builtin cpe> cr:cpe> decrypt cr:decrypt decrypt+ cr:decrypt+ decrypt> cr:decrypt> ebox-sig cr:ebox-sig +Builtin ecc-curves cr:ecc-curves ecc-genkey cr:ecc-genkey ecc-secret cr:ecc-secret ecc-sign cr:ecc-sign +Builtin ecc-verify cr:ecc-verify ed25519 cr:ed25519 ed25519-secret cr:ed25519-secret ed25519-sign cr:ed25519-sign +Builtin ed25519-verify cr:ed25519-verify edbox-sig cr:edbox-sig edbox> cr:edbox> encrypt cr:encrypt +Builtin encrypt+ cr:encrypt+ encrypt> cr:encrypt> ensurekey cr:ensurekey genkey cr:genkey hash cr:hash +Builtin hash! cr:hash! hash+ cr:hash+ hash>b cr:hash>b hash>s cr:hash>s hash@ cr:hash@ hashes cr:hashes +Builtin hmac cr:hmac hotp cr:hotp iv? cr:iv? pem-read cr:pem-read pem-write cr:pem-write pwd-valid? cr:pwd-valid? +Builtin pwd/ cr:pwd/ pwd>hash cr:pwd>hash rand cr:rand randbuf cr:randbuf randkey cr:randkey random-salt cr:random-salt +Builtin restore cr:restore root-certs cr:root-certs rsa_decrypt cr:rsa_decrypt rsa_encrypt cr:rsa_encrypt +Builtin rsa_sign cr:rsa_sign rsa_verify cr:rsa_verify rsabox-sig cr:rsabox-sig rsabox> cr:rsabox> rsagenkey cr:rsagenkey +Builtin save cr:save sbox-sig cr:sbox-sig sha1-hmac cr:sha1-hmac shard cr:shard tag? cr:tag? totp cr:totp +Builtin totp-epoch cr:totp-epoch totp-time-step cr:totp-time-step unshard cr:unshard uuid cr:uuid uuid> cr:uuid> +Builtin validate-pgp-sig cr:validate-pgp-sig validate-pwd cr:validate-pwd (.time) d:(.time) + d:+ +day d:+day +Builtin +hour d:+hour +min d:+min +msec d:+msec - d:- .time d:.time / d:/ = d:= >fixed d:>fixed >hmds d:>hmds +Builtin >hmds: d:>hmds: >msec d:>msec >unix d:>unix >ymd d:>ymd ?= d:?= Fri d:Fri Mon d:Mon Sat d:Sat +Builtin Sun d:Sun Thu d:Thu Tue d:Tue Wed d:Wed adjust-dst d:adjust-dst alarm d:alarm approx! d:approx! +Builtin approx? d:approx? approximates! d:approximates! between d:between cmp d:cmp d. d:d. daylight-db d:daylight-db +Builtin default-now d:default-now doy d:doy dst-ofs d:dst-ofs dst? d:dst? dstinfo d:dstinfo dstquery d:dstquery +Builtin dstzones? d:dstzones? elapsed-timer d:elapsed-timer elapsed-timer-hmds d:elapsed-timer-hmds +Builtin elapsed-timer-msec d:elapsed-timer-msec elapsed-timer-seconds d:elapsed-timer-seconds first-dow d:first-dow +Builtin fixed> d:fixed> fixed>dow d:fixed>dow fixed>iso d:fixed>iso format d:format iso>fixed d:iso>fixed +Builtin join d:join last-dow d:last-dow last-month d:last-month last-week d:last-week last-year d:last-year +Builtin leap? d:leap? mdays d:mdays msec d:msec msec> d:msec> new d:new next-dow d:next-dow next-month d:next-month +Builtin next-week d:next-week next-year d:next-year parse d:parse parse-approx d:parse-approx parse-range d:parse-range +Builtin prev-dow d:prev-dow relative d:relative rfc5322 d:rfc5322 start-timer d:start-timer ticks d:ticks +Builtin ticks/sec d:ticks/sec timer d:timer timer-ctrl d:timer-ctrl tzadjust d:tzadjust unix> d:unix> +Builtin unknown d:unknown unknown? d:unknown? updatetz d:updatetz year@ d:year@ ymd d:ymd ymd> d:ymd> +Builtin MYSQLLIB db:MYSQLLIB ODBCLIB db:ODBCLIB add-func db:add-func aes! db:aes! again? db:again? +Builtin begin db:begin bind db:bind bind-exec db:bind-exec bind-exec{} db:bind-exec{} close db:close +Builtin col db:col col{} db:col{} commit db:commit db db:db dbpush db:dbpush disuse db:disuse each db:each +Builtin err-handler db:err-handler exec db:exec exec-cb db:exec-cb exec-name db:exec-name exec{} db:exec{} +Builtin get db:get get-sub db:get-sub key db:key kind? db:kind? last-rowid db:last-rowid mysql? db:mysql? +Builtin odbc? db:odbc? open db:open open? db:open? prep-name db:prep-name prepare db:prepare query db:query +Builtin query-all db:query-all rekey db:rekey rollback db:rollback set db:set set-sub db:set-sub sql@ db:sql@ +Builtin sql[] db:sql[] sql[np] db:sql[np] sql{np} db:sql{np} sql{} db:sql{} use db:use zip db:zip .state dbg:.state +Builtin bp dbg:bp bt dbg:bt except-task@ dbg:except-task@ go dbg:go prompt dbg:prompt see dbg:see stop dbg:stop +Builtin trace dbg:trace pso ds:pso / f:/ >posix f:>posix abspath f:abspath absrel f:absrel append f:append +Builtin associate f:associate atime f:atime autodel f:autodel canwrite? f:canwrite? chmod f:chmod close f:close +Builtin copy f:copy copydir f:copydir create f:create ctime f:ctime dir? f:dir? dname f:dname eachbuf f:eachbuf +Builtin eachline f:eachline enssep f:enssep eof? f:eof? epub-meta f:epub-meta exec f:exec exists? f:exists? +Builtin expand f:expand expand-home f:expand-home flush f:flush fname f:fname getb f:getb getc f:getc +Builtin getline f:getline getmod f:getmod glob f:glob glob-links f:glob-links glob-nocase f:glob-nocase +Builtin globfilter f:globfilter gunz f:gunz homedir f:homedir homedir! f:homedir! include f:include +Builtin ioctl f:ioctl join f:join launch f:launch link f:link link> f:link> link? f:link? lock f:lock +Builtin mkdir f:mkdir mmap f:mmap mmap-range f:mmap-range mmap-range? f:mmap-range? mtime f:mtime mv f:mv +Builtin name@ f:name@ open f:open open! f:open! open-ro f:open-ro popen f:popen popen3 f:popen3 print f:print +Builtin read f:read read-buf f:read-buf read? f:read? relpath f:relpath rglob f:rglob rm f:rm rmdir f:rmdir +Builtin seek f:seek sep f:sep size f:size slurp f:slurp sparse? f:sparse? spit f:spit stderr f:stderr +Builtin stdin f:stdin stdout f:stdout tell f:tell tempfile f:tempfile tilde f:tilde tilde? f:tilde? +Builtin times f:times tmpspit f:tmpspit trash f:trash truncate f:truncate ungetb f:ungetb ungetc f:ungetc +Builtin unzip f:unzip unzip-entry f:unzip-entry watch f:watch write f:write writen f:writen zip+ f:zip+ +Builtin zip@ f:zip@ zipentry f:zipentry zipnew f:zipnew zipopen f:zipopen zipsave f:zipsave atlas! font:atlas! +Builtin atlas@ font:atlas@ default-size font:default-size default-size@ font:default-size@ info font:info +Builtin ls font:ls measure font:measure new font:new oversample font:oversample pixels font:pixels +Builtin pixels? font:pixels? system font:system system font:system filebrowser g:filebrowser media? g:media? +Builtin event-loop game:event-loop init game:init state! game:state! state@ game:state@ distance geo:distance +Builtin km/deg-lat geo:km/deg-lat km/deg-lon geo:km/deg-lon nearest geo:nearest close gpio:close flags! gpio:flags! +Builtin info gpio:info init gpio:init line gpio:line open gpio:open read gpio:read req gpio:req write gpio:write +Builtin +edge gr:+edge +edge+w gr:+edge+w +node gr:+node connect gr:connect edges gr:edges edges! gr:edges! +Builtin m! gr:m! m@ gr:m@ neighbors gr:neighbors new gr:new node-edges gr:node-edges nodes gr:nodes +Builtin traverse gr:traverse weight! gr:weight! + h:+ @ h:@ clear h:clear cmp! h:cmp! len h:len max! h:max! +Builtin new h:new peek h:peek pop h:pop push h:push unique h:unique parse html:parse arm? hw:arm? camera hw:camera +Builtin camera-img hw:camera-img camera? hw:camera? cpu? hw:cpu? device? hw:device? displays? hw:displays? +Builtin displaysize? hw:displaysize? finger-match hw:finger-match finger-support hw:finger-support +Builtin i2c hw:i2c i2c! hw:i2c! i2c!reg hw:i2c!reg i2c@ hw:i2c@ i2c@reg hw:i2c@reg isround? hw:isround? +Builtin iswatch? hw:iswatch? mac? hw:mac? mem? hw:mem? model? hw:model? poll hw:poll sensor hw:sensor +Builtin sensor-event hw:sensor-event sensors? hw:sensors? start hw:start stop hw:stop touch? hw:touch? +Builtin uid? hw:uid? fetch-full imap:fetch-full fetch-uid-mail imap:fetch-uid-mail login imap:login +Builtin logout imap:logout new imap:new search imap:search select-inbox imap:select-inbox >file img:>file +Builtin >fmt img:>fmt ECC-HIGH img:ECC-HIGH ECC-LOW img:ECC-LOW ECC-MEDIUM img:ECC-MEDIUM ECC-QUARTILE img:ECC-QUARTILE +Builtin copy img:copy crop img:crop data img:data desat img:desat draw img:draw draw-sub img:draw-sub +Builtin exif img:exif exif-rotate? img:exif-rotate? fill img:fill fillrect img:fillrect filter img:filter +Builtin fit img:fit flip img:flip from-svg img:from-svg line img:line new img:new pikchr img:pikchr +Builtin pix! img:pix! pix@ img:pix@ qr-black img:qr-black qr-block img:qr-block qr-gen img:qr-gen qr-margin img:qr-margin +Builtin qr-parse img:qr-parse qr-white img:qr-white qr>img img:qr>img rect img:rect rotate img:rotate +Builtin scale img:scale scroll img:scroll size img:size countries iso:countries languages iso:languages +Builtin bearing loc:bearing city loc:city city-db loc:city-db city-exact loc:city-exact city-exact loc:city-exact +Builtin city-version loc:city-version city_country loc:city_country find loc:find sort loc:sort console log:console +Builtin file log:file hook log:hook level log:level local log:local qsize log:qsize syslog log:syslog +Builtin task log:task time log:time ! m:! !? m:!? + m:+ +? m:+? - m:- <> m:<> = m:= >arr m:>arr @ m:@ +Builtin @? m:@? _! m:_! _@ m:_@ _@? m:_@? accumulate m:accumulate alias m:alias arr> m:arr> bitmap m:bitmap +Builtin clear m:clear data m:data each m:each exists? m:exists? filter m:filter ic m:ic iter m:iter +Builtin iter-all m:iter-all keys m:keys len m:len map m:map merge m:merge new m:new op! m:op! open m:open +Builtin slice m:slice vals m:vals xchg m:xchg zip m:zip ! mat:! * mat:* + mat:+ = mat:= @ mat:@ affine mat:affine +Builtin col mat:col data mat:data det mat:det dim? mat:dim? get-n mat:get-n ident mat:ident inv mat:inv +Builtin m. mat:m. minor mat:minor n* mat:n* new mat:new new-minor mat:new-minor rotate mat:rotate row mat:row +Builtin same-size? mat:same-size? scale mat:scale shear mat:shear trans mat:trans translate mat:translate +Builtin xform mat:xform 2console md:2console 2html md:2html 2nk md:2nk 8th? md:8th? user! md:user! +Builtin user!@ md:user!@ user@ md:user@ user@@ md:user@@ color meta:color console meta:console gui meta:gui +Builtin meta meta:meta ! n:! * n:* */ n:*/ + n:+ +! n:+! - n:- / n:/ /mod n:/mod 1+ n:1+ 1- n:1- < n:< +Builtin = n:= > n:> >bool n:>bool BIGE n:BIGE BIGPI n:BIGPI E n:E PI n:PI ^ n:^ _mod n:_mod abs n:abs +Builtin acos n:acos acosd n:acosd acosh n:acosh andor n:andor asin n:asin asind n:asind asinh n:asinh +Builtin atan n:atan atan2 n:atan2 atand n:atand atanh n:atanh band n:band between n:between bfloat n:bfloat +Builtin bic n:bic bint n:bint binv n:binv bits? n:bits? bnot n:bnot bor n:bor bxor n:bxor cast n:cast +Builtin ceil n:ceil clamp n:clamp clz? n:clz? cmp n:cmp comb n:comb cos n:cos cosd n:cosd cosh n:cosh +Builtin ctz? n:ctz? emod n:emod erf n:erf erfc n:erfc exp n:exp expm1 n:expm1 expmod n:expmod float n:float +Builtin floor n:floor fmod n:fmod frac n:frac gcd n:gcd int n:int invmod n:invmod kind? n:kind? lcm n:lcm +Builtin lerp n:lerp ln n:ln ln1p n:ln1p lnerp n:lnerp logistic n:logistic max n:max median n:median +Builtin min n:min mod n:mod neg n:neg odd? n:odd? parity? n:parity? perm n:perm prime? n:prime? quantize n:quantize +Builtin quantize! n:quantize! r+ n:r+ range n:range rot32l n:rot32l rot32r n:rot32r round n:round round2 n:round2 +Builtin rounding n:rounding running-variance n:running-variance running-variance-finalize n:running-variance-finalize +Builtin sgn n:sgn shl n:shl shr n:shr sin n:sin sincos n:sincos sind n:sind sinh n:sinh sqr n:sqr sqrt n:sqrt +Builtin tan n:tan tand n:tand tanh n:tanh trunc n:trunc ~= n:~= ! net:! !? net:!? - net:- >base64url net:>base64url +Builtin >url net:>url @ net:@ @? net:@? CGI net:CGI DGRAM net:DGRAM INET4 net:INET4 INET6 net:INET6 +Builtin PROTO_TCP net:PROTO_TCP PROTO_UDP net:PROTO_UDP REMOTE_IP net:REMOTE_IP STREAM net:STREAM accept net:accept +Builtin active? net:active? addrinfo>o net:addrinfo>o again? net:again? alloc-and-read net:alloc-and-read +Builtin alloc-buf net:alloc-buf avail? net:avail? base64url> net:base64url> bind net:bind cgi-get net:cgi-get +Builtin cgi-http-header net:cgi-http-header cgi-init net:cgi-init cgi-init-stunnel net:cgi-init-stunnel +Builtin cgi-out net:cgi-out close net:close closed? net:closed? connect net:connect curnet net:curnet +Builtin debug? net:debug? delete net:delete dns net:dns get net:get getaddrinfo net:getaddrinfo getpeername net:getpeername +Builtin head net:head ifaces? net:ifaces? interp8th net:interp8th ipv6? net:ipv6? launch net:launch +Builtin listen net:listen map>url net:map>url mime-type net:mime-type net-socket net:net-socket opts net:opts +Builtin port-is-ssl? net:port-is-ssl? post net:post proxy! net:proxy! put net:put read net:read read-all net:read-all +Builtin read-buf net:read-buf recvfrom net:recvfrom s>url net:s>url sendto net:sendto server net:server +Builtin setsockopt net:setsockopt socket net:socket socket-mcast net:socket-mcast tcp-connect net:tcp-connect +Builtin tlserr net:tlserr tlshello net:tlshello udp-connect net:udp-connect url> net:url> user-agent net:user-agent +Builtin valid-email? net:valid-email? vpncheck net:vpncheck wait net:wait webserver net:webserver write net:write +Builtin (begin) nk:(begin) (chart-begin) nk:(chart-begin) (chart-begin-colored) nk:(chart-begin-colored) +Builtin (chart-end) nk:(chart-end) (end) nk:(end) (group-begin) nk:(group-begin) (group-end) nk:(group-end) +Builtin (property) nk:(property) >img nk:>img PIXEL-FORMATS nk:PIXEL-FORMATS addfont nk:addfont affine nk:affine +Builtin anti-alias nk:anti-alias any-clicked? nk:any-clicked? bounds nk:bounds bounds! nk:bounds! button nk:button +Builtin button-color nk:button-color button-label nk:button-label button-set-behavior nk:button-set-behavior +Builtin button-symbol nk:button-symbol button-symbol-label nk:button-symbol-label calendar nk:calendar +Builtin chart-add-slot nk:chart-add-slot chart-add-slot-colored nk:chart-add-slot-colored chart-push nk:chart-push +Builtin chart-push-slot nk:chart-push-slot checkbox nk:checkbox circle nk:circle clicked? nk:clicked? +Builtin close-this! nk:close-this! close-this? nk:close-this? close? nk:close? color-chooser nk:color-chooser +Builtin color-picker nk:color-picker combo nk:combo combo-begin-color nk:combo-begin-color combo-begin-label nk:combo-begin-label +Builtin combo-cb nk:combo-cb combo-end nk:combo-end contextual-begin nk:contextual-begin contextual-close nk:contextual-close +Builtin contextual-end nk:contextual-end contextual-item-image-text nk:contextual-item-image-text contextual-item-symbol-text nk:contextual-item-symbol-text +Builtin contextual-item-text nk:contextual-item-text cp! nk:cp! cp@ nk:cp@ curpos nk:curpos cursor-load nk:cursor-load +Builtin cursor-set nk:cursor-set cursor-show nk:cursor-show display-info nk:display-info display-scale@ nk:display-scale@ +Builtin display@ nk:display@ do nk:do down? nk:down? draw-image nk:draw-image draw-image-at nk:draw-image-at +Builtin draw-image-centered nk:draw-image-centered draw-sub-image nk:draw-sub-image draw-text nk:draw-text +Builtin draw-text-centered nk:draw-text-centered draw-text-high nk:draw-text-high draw-text-wrap nk:draw-text-wrap +Builtin driver nk:driver drivers nk:drivers dropped nk:dropped dropping nk:dropping edit-focus nk:edit-focus +Builtin edit-string nk:edit-string event nk:event event-boost nk:event-boost event-msec nk:event-msec +Builtin event-wait nk:event-wait event? nk:event? fill-arc nk:fill-arc fill-circle nk:fill-circle fill-color nk:fill-color +Builtin fill-poly nk:fill-poly fill-rect nk:fill-rect fill-rect-color nk:fill-rect-color fill-triangle nk:fill-triangle +Builtin finger nk:finger flags! nk:flags! flags@ nk:flags@ flash nk:flash fullscreen nk:fullscreen +Builtin gesture nk:gesture get nk:get get-row-height nk:get-row-height getfont nk:getfont getmap nk:getmap +Builtin getmap! nk:getmap! gget nk:gget grid nk:grid grid-peek nk:grid-peek grid-push nk:grid-push +Builtin group-scroll-ofs nk:group-scroll-ofs group-scroll-ofs! nk:group-scroll-ofs! gset nk:gset hints nk:hints +Builtin hovered? nk:hovered? hrule nk:hrule ident nk:ident image nk:image init nk:init init-flags nk:init-flags +Builtin init-sub nk:init-sub input-button nk:input-button input-key nk:input-key input-motion nk:input-motion +Builtin input-scroll nk:input-scroll input-string nk:input-string key-down? nk:key-down? key-pressed? nk:key-pressed? +Builtin key-released? nk:key-released? knob nk:knob label nk:label label-colored nk:label-colored label-wrap nk:label-wrap +Builtin label-wrap-colored nk:label-wrap-colored layout-bounds nk:layout-bounds layout-grid-begin nk:layout-grid-begin +Builtin layout-grid-end nk:layout-grid-end layout-push-dynamic nk:layout-push-dynamic layout-push-static nk:layout-push-static +Builtin layout-push-variable nk:layout-push-variable layout-ratio-from-pixel nk:layout-ratio-from-pixel +Builtin layout-reset-row-height nk:layout-reset-row-height layout-row nk:layout-row layout-row-begin nk:layout-row-begin +Builtin layout-row-dynamic nk:layout-row-dynamic layout-row-end nk:layout-row-end layout-row-height nk:layout-row-height +Builtin layout-row-push nk:layout-row-push layout-row-static nk:layout-row-static layout-row-template-begin nk:layout-row-template-begin +Builtin layout-row-template-end nk:layout-row-template-end layout-space-begin nk:layout-space-begin +Builtin layout-space-end nk:layout-space-end layout-space-push nk:layout-space-push layout-widget-bounds nk:layout-widget-bounds +Builtin line-rel nk:line-rel line-to nk:line-to list-begin nk:list-begin list-end nk:list-end list-new nk:list-new +Builtin list-ofs nk:list-ofs list-range nk:list-range m! nk:m! m@ nk:m@ make-style nk:make-style max-vertex-element nk:max-vertex-element +Builtin maximize nk:maximize measure nk:measure measure-font nk:measure-font menu-begin nk:menu-begin +Builtin menu-close nk:menu-close menu-end nk:menu-end menu-item-image nk:menu-item-image menu-item-label nk:menu-item-label +Builtin menu-item-symbol nk:menu-item-symbol menubar-begin nk:menubar-begin menubar-end nk:menubar-end +Builtin minimize nk:minimize mouse-pos nk:mouse-pos move-back nk:move-back move-rel nk:move-rel move-to nk:move-to +Builtin msg nk:msg msgdlg nk:msgdlg ontop nk:ontop option nk:option pen-color nk:pen-color pen-width nk:pen-width +Builtin pix! nk:pix! plot nk:plot plot-fn nk:plot-fn polygon nk:polygon pop-font nk:pop-font popup-begin nk:popup-begin +Builtin popup-close nk:popup-close popup-end nk:popup-end popup-scroll-ofs nk:popup-scroll-ofs popup-scroll-ofs! nk:popup-scroll-ofs! +Builtin progress nk:progress prop-int nk:prop-int pt-in? nk:pt-in? pt>local nk:pt>local pt>screen nk:pt>screen +Builtin push-font nk:push-font raise nk:raise rect-rel nk:rect-rel rect-to nk:rect-to rect>local nk:rect>local +Builtin rect>screen nk:rect>screen released? nk:released? render nk:render render! nk:render! render-loop nk:render-loop +Builtin render-loop-max nk:render-loop-max render-loop-timed nk:render-loop-timed render-timed nk:render-timed +Builtin render@ nk:render@ renderers nk:renderers rendering nk:rendering restore nk:restore rotate nk:rotate +Builtin rotate-rel nk:rotate-rel rtl! nk:rtl! rtl? nk:rtl? safe-bounds nk:safe-bounds save nk:save +Builtin scale nk:scale scale@ nk:scale@ scancode? nk:scancode? screen-saver nk:screen-saver screen-size nk:screen-size +Builtin screen-win-close nk:screen-win-close selectable nk:selectable set nk:set set-font nk:set-font +Builtin set-hint nk:set-hint set-num-vertices nk:set-num-vertices set-radius nk:set-radius setpos nk:setpos +Builtin setwin nk:setwin show nk:show skew nk:skew slider nk:slider slider-int nk:slider-int space nk:space +Builtin spacing nk:spacing start-text nk:start-text stroke-arc nk:stroke-arc stroke-circle nk:stroke-circle +Builtin stroke-curve nk:stroke-curve stroke-line nk:stroke-line stroke-polygon nk:stroke-polygon stroke-polyline nk:stroke-polyline +Builtin stroke-rect nk:stroke-rect stroke-tri nk:stroke-tri style-from-table nk:style-from-table swipe nk:swipe +Builtin swipe-dir-threshold nk:swipe-dir-threshold swipe-threshold nk:swipe-threshold text nk:text +Builtin text-align nk:text-align text-font nk:text-font text-pad nk:text-pad text? nk:text? timer-delay nk:timer-delay +Builtin timer? nk:timer? toast nk:toast tooltip nk:tooltip translate nk:translate tree-pop nk:tree-pop +Builtin tree-state-push nk:tree-state-push triangle nk:triangle use-style nk:use-style vsync nk:vsync +Builtin widget nk:widget widget-bounds nk:widget-bounds widget-disable nk:widget-disable widget-fitting nk:widget-fitting +Builtin widget-high nk:widget-high widget-hovered? nk:widget-hovered? widget-mouse-click-down? nk:widget-mouse-click-down? +Builtin widget-mouse-clicked? nk:widget-mouse-clicked? widget-pos nk:widget-pos widget-size nk:widget-size +Builtin widget-size-allot nk:widget-size-allot widget-wide nk:widget-wide win nk:win win-bounds nk:win-bounds +Builtin win-bounds! nk:win-bounds! win-close nk:win-close win-closed? nk:win-closed? win-collapse nk:win-collapse +Builtin win-collapsed? nk:win-collapsed? win-content-bounds nk:win-content-bounds win-focus nk:win-focus +Builtin win-focused? nk:win-focused? win-hidden? nk:win-hidden? win-high nk:win-high win-hovered? nk:win-hovered? +Builtin win-icon! nk:win-icon! win-pos nk:win-pos win-scroll-ofs nk:win-scroll-ofs win-scroll-ofs! nk:win-scroll-ofs! +Builtin win-show nk:win-show win-size nk:win-size win-title! nk:win-title! win-wide nk:win-wide win? nk:win? +Builtin MAX ns:MAX ! o:! + o:+ +? o:+? ??? o:??? @ o:@ class o:class exec o:exec isa o:isa method o:method +Builtin mutate o:mutate new o:new super o:super POSIX os:POSIX chroot os:chroot devname os:devname +Builtin docker? os:docker? env os:env lang os:lang locales os:locales notify os:notify power-state os:power-state +Builtin region os:region waitpid os:waitpid bezier pdf:bezier bezierq pdf:bezierq circle pdf:circle +Builtin color pdf:color ellipse pdf:ellipse font pdf:font img pdf:img line pdf:line new pdf:new page pdf:page +Builtin page-size pdf:page-size rect pdf:rect save pdf:save size pdf:size text pdf:text text-rotate pdf:text-rotate +Builtin text-size pdf:text-size text-width pdf:text-width text-wrap pdf:text-wrap text-wrap-rotate pdf:text-wrap-rotate +Builtin cast ptr:cast deref ptr:deref len ptr:len null? ptr:null? pack ptr:pack unpack ptr:unpack unpack_orig ptr:unpack_orig +Builtin publish pubsub:publish qsize pubsub:qsize subscribe pubsub:subscribe + q:+ clear q:clear len q:len +Builtin new q:new notify q:notify overwrite q:overwrite peek q:peek pick q:pick pop q:pop push q:push +Builtin remove q:remove shift q:shift size q:size slide q:slide throwing q:throwing wait q:wait ++match r:++match +Builtin +/ r:+/ +match r:+match / r:/ @ r:@ _@ r:_@ len r:len match r:match match[] r:match[] matchall[] r:matchall[] +Builtin new r:new rx r:rx str r:str * rat:* + rat:+ - rat:- / rat:/ >n rat:>n >s rat:>s new rat:new +Builtin proper rat:proper ! rect:! /high rect:/high /wide rect:/wide = rect:= >a rect:>a >pts rect:>pts +Builtin >pts4 rect:>pts4 @ rect:@ center rect:center center-pt rect:center-pt intersect rect:intersect +Builtin new rect:new new-pt rect:new-pt ofs rect:ofs open rect:open pad rect:pad pos rect:pos pt-open rect:pt-open +Builtin pt>a rect:pt>a pt>rect rect:pt>rect pts> rect:pts> restrict rect:restrict shrink rect:shrink +Builtin size rect:size union rect:union ! s:! * s:* + s:+ - s:- / s:/ /scripts s:/scripts /ws s:/ws +Builtin 2len s:2len <+ s:<+ <> s:<> = s:= =ic s:=ic >base64 s:>base64 >ucs2 s:>ucs2 @ s:@ _len s:_len +Builtin append s:append base64> s:base64> clear s:clear cmp s:cmp cmpi s:cmpi compress s:compress count-match s:count-match +Builtin days! s:days! dist s:dist each s:each each! s:each! eachline s:eachline escape s:escape expand s:expand +Builtin expand-env s:expand-env fill s:fill fold s:fold gen-uid s:gen-uid globmatch s:globmatch hexupr s:hexupr +Builtin insert s:insert intl s:intl intl! s:intl! lang s:lang lc s:lc lc? s:lc? len s:len lsub s:lsub +Builtin ltrim s:ltrim map s:map months! s:months! n> s:n> new s:new norm s:norm reduce s:reduce repinsert s:repinsert +Builtin replace s:replace replace! s:replace! rev s:rev rsearch s:rsearch rsub s:rsub rtl s:rtl rtrim s:rtrim +Builtin scan-match s:scan-match script? s:script? search s:search size s:size slice s:slice soundex s:soundex +Builtin strfmap s:strfmap strfmt s:strfmt term s:term text-wrap s:text-wrap tr s:tr transform s:transform +Builtin trim s:trim tsub s:tsub uc s:uc uc? s:uc? ucs2> s:ucs2> utf8? s:utf8? zt s:zt >a set:>a add set:add +Builtin add[] set:add[] del set:del difference set:difference has set:has intersect set:intersect new set:new +Builtin union set:union bits! sio:bits! bits@ sio:bits@ close sio:close enum sio:enum hz! sio:hz! hz@ sio:hz@ +Builtin mode! sio:mode! mode@ sio:mode@ open sio:open open sio:open opts! sio:opts! opts@ sio:opts@ +Builtin read sio:read read sio:read write sio:write write sio:write @ slv:@ auto slv:auto build slv:build +Builtin constraint slv:constraint dump slv:dump edit slv:edit named-variable slv:named-variable new slv:new +Builtin relation slv:relation reset slv:reset suggest slv:suggest term slv:term update slv:update v[] slv:v[] +Builtin variable slv:variable v{} slv:v{} new smtp:new send smtp:send apply-filter snd:apply-filter +Builtin devices? snd:devices? end-record snd:end-record filter snd:filter freq snd:freq gain snd:gain +Builtin gain? snd:gain? init snd:init len snd:len loop snd:loop loop? snd:loop? mix snd:mix new snd:new +Builtin pause snd:pause play snd:play played snd:played rate snd:rate ready? snd:ready? record snd:record +Builtin resume snd:resume seek snd:seek stop snd:stop stopall snd:stopall volume snd:volume volume? snd:volume? +Builtin + st:+ . st:. clear st:clear dot-depth st:dot-depth len st:len list st:list ndrop st:ndrop +Builtin new st:new op! st:op! peek st:peek pick st:pick pop st:pop push st:push roll st:roll shift st:shift +Builtin size st:size slide st:slide swap st:swap throwing st:throwing >buf struct:>buf arr> struct:arr> +Builtin buf struct:buf buf> struct:buf> byte struct:byte double struct:double field! struct:field! +Builtin field@ struct:field@ float struct:float ignore struct:ignore int struct:int long struct:long +Builtin struct; struct:struct; word struct:word ! t:! @ t:@ by-name t:by-name curtask t:curtask def-queue t:def-queue +Builtin def-stack t:def-stack done? t:done? dtor t:dtor err! t:err! err? t:err? errno? t:errno? extra t:extra +Builtin getq t:getq handler t:handler handler@ t:handler@ kill t:kill list t:list main t:main max-exceptions t:max-exceptions +Builtin name! t:name! name@ t:name@ notify t:notify parent t:parent pop t:pop priority t:priority push t:push +Builtin push! t:push! q-notify t:q-notify q-wait t:q-wait qlen t:qlen result t:result set-affinity t:set-affinity +Builtin setq t:setq task t:task task-n t:task-n task-stop t:task-stop ticks t:ticks to? t:to? wait t:wait +Builtin add tree:add binary tree:binary bk tree:bk btree tree:btree cmp! tree:cmp! data tree:data del tree:del +Builtin find tree:find iter tree:iter next tree:next nodes tree:nodes parent tree:parent parse tree:parse +Builtin prev tree:prev root tree:root search tree:search trie tree:trie ! w:! (is) w:(is) @ w:@ alias: w:alias: +Builtin cb w:cb deprecate w:deprecate dlcall w:dlcall dlopen w:dlopen dlsym w:dlsym exec w:exec exec? w:exec? +Builtin ffifail w:ffifail find w:find forget w:forget is w:is name w:name undo w:undo xt w:xt xt> w:xt> +Builtin close ws:close decode ws:decode encode ws:encode encode-nomask ws:encode-nomask gen-accept-header ws:gen-accept-header +Builtin gen-accept-key ws:gen-accept-key opcodes ws:opcodes open ws:open >s xml:>s >txt xml:>txt md-init xml:md-init +Builtin md-parse xml:md-parse parse xml:parse parse-html xml:parse-html parse-stream xml:parse-stream +Builtin getmsg[] zmq:getmsg[] sendmsg[] zmq:sendmsg[] + + +" numbers +syn keyword eighthMath decimal hex base@ base! +syn match eighthInteger '\<-\=[0-9.]*[0-9.]\+\>' + +" recognize hex and binary numbers, the '$' and '%' notation is for eighth +syn match eighthInteger '\<\$\x*\x\+\>' " *1* --- dont't mess +syn match eighthInteger '\<\x*\d\x*\>' " *2* --- this order! +syn match eighthInteger '\<%[0-1]*[0-1]\+\>' +syn match eighthInteger "\<'.\>" + +syn include @SQL syntax/sql.vim +syn region eightSQL matchgroup=Define start=/\/ contains=@SQL keepend +syn region eightSQL matchgroup=Define start=/\/ contains=@SQL keepend +syn region eightSQL matchgroup=Define start=/\/ contains=@SQL keepend + +" Strings +syn region eighthString start=+\.\?\"+ skip=+"+ end=+$+ +syn keyword jsonNull null +syn keyword jsonBool /\(true\|false\)/ +syn region eighthString start=/\<"/ end=/"\>/ +syn match jsonObjEntry /"\"[^"]\+\"\ze\s*:/ + +syn region eighthNeeds start=+needs\[+ end=+]+ matchgroup=eighthNeeds2 transparent +syn match eighthNeeds2 /\/ + +syn match eighthBuiltin /m:\[]!/ +syn match eighthBuiltin /v:\[]/ +syn match eighthBuiltin /db:bind-exec\[]/ +syn match eighthBuiltin /db:exec\[]/ +syn match eighthBuiltin /db:col\[]/ + +syn region eighthComment start="\zs\\" end="$" contains=eighthTodo,@Spell +syn region eighthComment start="\zs--\s" end="$" contains=eighthTodo,@Spell +syn region eighthComment start="\zs(\*" end="\*)\ze" contains=eightTodo,@Spell + +" The default methods for highlighting. Can be overriden later. +hi def link eighthTodo Todo +hi def link eighthNeeds2 Include +hi def link eighthNeeds Error +hi def link eighthOperators Operator +hi def link eighthMath Number +hi def link eighthInteger Number +hi def link eighthStack Special +hi def link eighthFStack Special +hi def link eighthFname Operator +hi def link eighthSP Special +hi def link eighthColonDef Define +hi def link eighthColonName Operator +hi def link eighthEndOfColonDef Define +hi def link eighthDefine Define +hi def link eighthDebug Debug +hi def link eighthCharOps Character +hi def link eighthConversion String +hi def link eighthForth Statement +hi def link eighthVocs Statement +hi def link eighthString String +hi def link eighthComment Comment +hi def link eighthClassDef Define +hi def link eighthEndOfClassDef Define +hi def link eighthObjectDef Define +hi def link eighthEndOfObjectDef Define +hi def link eighthInclude Include +hi def link eighthBuiltin Define +hi def link eighthClasses Define +hi def link eighthClassWord Keyword +hi def link jsonObject Delimiter +hi def link jsonObjEntry Label +hi def link jsonArray Special +hi def link jsonNull Function +hi def link jsonBool Boolean + +delcommand Builtin +let b:current_syntax = "8th" +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ft=vim ts=4 sw=4 nocin:si diff --git a/.config/vim/syntax/a2ps.vim b/.config/vim/syntax/a2ps.vim new file mode 100644 index 0000000..afe3af1 --- /dev/null +++ b/.config/vim/syntax/a2ps.vim @@ -0,0 +1,71 @@ +" Vim syntax file +" Language: a2ps(1) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword a2psPreProc Include + \ nextgroup=a2psKeywordColon + +syn keyword a2psMacro UserOption + \ nextgroup=a2psKeywordColon + +syn keyword a2psKeyword LibraryPath AppendLibraryPath PrependLibraryPath + \ Options Medium Printer UnknownPrinter + \ DefaultPrinter OutputFirstLine + \ PageLabelFormat Delegation FileCommand + \ nextgroup=a2psKeywordColon + +syn match a2psKeywordColon contained display ':' + +syn keyword a2psKeyword Variable nextgroup=a2psVariableColon + +syn match a2psVariableColon contained display ':' + \ nextgroup=a2psVariable skipwhite + +syn match a2psVariable contained display '[^ \t:(){}]\+' + \ contains=a2psVarPrefix + +syn match a2psVarPrefix contained display + \ '\<\%(del\|pro\|ps\|pl\|toc\|user\|\)\ze\.' + +syn match a2psLineCont display '\\$' + +syn match a2psSubst display '$\%(-\=.\=\d\+\)\=\h\d\=' +syn match a2psSubst display '#[?!]\=\w\d\=' +syn match a2psSubst display '#{[^}]\+}' + +syn region a2psString display oneline start=+'+ end=+'+ + \ contains=a2psSubst + +syn region a2psString display oneline start=+"+ end=+"+ + \ contains=a2psSubst + +syn keyword a2psTodo contained TODO FIXME XXX NOTE + +syn region a2psComment display oneline start='^\s*#' end='$' + \ contains=a2psTodo,@Spell + +hi def link a2psTodo Todo +hi def link a2psComment Comment +hi def link a2psPreProc PreProc +hi def link a2psMacro Macro +hi def link a2psKeyword Keyword +hi def link a2psKeywordColon Delimiter +hi def link a2psVariableColon Delimiter +hi def link a2psVariable Identifier +hi def link a2psVarPrefix Type +hi def link a2psLineCont Special +hi def link a2psSubst PreProc +hi def link a2psString String + +let b:current_syntax = "a2ps" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/a65.vim b/.config/vim/syntax/a65.vim new file mode 100644 index 0000000..6445b94 --- /dev/null +++ b/.config/vim/syntax/a65.vim @@ -0,0 +1,153 @@ +" Vim syntax file +" Language: xa 6502 cross assembler +" Maintainer: Clemens Kirchgatterer +" Last Change: 2016 Aug 31 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" Opcodes +syn match a65Opcode "\" +syn match a65Number "#\=$[0-9A-F]*\>" +syn match a65Number "#\=&[0-7]*\>" +syn match a65Number "#\=%[01]*\>" + +syn case match + +" Types +syn match a65Type "\(^\|\s\)\.byt\($\|\s\)" +syn match a65Type "\(^\|\s\)\.word\($\|\s\)" +syn match a65Type "\(^\|\s\)\.asc\($\|\s\)" +syn match a65Type "\(^\|\s\)\.dsb\($\|\s\)" +syn match a65Type "\(^\|\s\)\.fopt\($\|\s\)" +syn match a65Type "\(^\|\s\)\.text\($\|\s\)" +syn match a65Type "\(^\|\s\)\.data\($\|\s\)" +syn match a65Type "\(^\|\s\)\.bss\($\|\s\)" +syn match a65Type "\(^\|\s\)\.zero\($\|\s\)" +syn match a65Type "\(^\|\s\)\.align\($\|\s\)" + +" Blocks +syn match a65Section "\(^\|\s\)\.(\($\|\s\)" +syn match a65Section "\(^\|\s\)\.)\($\|\s\)" + +" Strings +syn match a65String "\".*\"" + +" Program Counter +syn region a65PC start="\*=" end="\>" keepend + +" HI/LO Byte +syn region a65HiLo start="#[<>]" end="$\|\s" contains=a65Comment keepend + +" Comments +syn keyword a65Todo TODO XXX FIXME BUG contained +syn match a65Comment ";.*"hs=s+1 contains=a65Todo +syn region a65Comment start="/\*" end="\*/" contains=a65Todo,a65Comment + +" Preprocessor +syn region a65PreProc start="^#" end="$" contains=a65Comment,a65Continue +syn match a65End excludenl /end$/ contained +syn match a65Continue "\\$" contained + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link a65Section Special +hi def link a65Address Special +hi def link a65Comment Comment +hi def link a65PreProc PreProc +hi def link a65Number Number +hi def link a65String String +hi def link a65Type Statement +hi def link a65Opcode Type +hi def link a65PC Error +hi def link a65Todo Todo +hi def link a65HiLo Number + + +let b:current_syntax = "a65" diff --git a/.config/vim/syntax/aap.vim b/.config/vim/syntax/aap.vim new file mode 100644 index 0000000..87cedab --- /dev/null +++ b/.config/vim/syntax/aap.vim @@ -0,0 +1,159 @@ +" Vim syntax file +" Language: A-A-P recipe +" Maintainer: The Vim Project +" Last Change: 2023 Aug 10 +" Former Maintainer: Bram Moolenaar + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn include @aapPythonScript syntax/python.vim + +syn match aapVariable /$[-+?*="'\\!]*[a-zA-Z0-9_.]*/ +syn match aapVariable /$[-+?*="'\\!]*([a-zA-Z0-9_.]*)/ +syn keyword aapTodo contained TODO Todo +syn match aapString +'[^']\{-}'+ +syn match aapString +"[^"]\{-}"+ + +syn match aapCommand '^\s*:action\>' +syn match aapCommand '^\s*:add\>' +syn match aapCommand '^\s*:addall\>' +syn match aapCommand '^\s*:asroot\>' +syn match aapCommand '^\s*:assertpkg\>' +syn match aapCommand '^\s*:attr\>' +syn match aapCommand '^\s*:attribute\>' +syn match aapCommand '^\s*:autodepend\>' +syn match aapCommand '^\s*:buildcheck\>' +syn match aapCommand '^\s*:cd\>' +syn match aapCommand '^\s*:chdir\>' +syn match aapCommand '^\s*:checkin\>' +syn match aapCommand '^\s*:checkout\>' +syn match aapCommand '^\s*:child\>' +syn match aapCommand '^\s*:chmod\>' +syn match aapCommand '^\s*:commit\>' +syn match aapCommand '^\s*:commitall\>' +syn match aapCommand '^\s*:conf\>' +syn match aapCommand '^\s*:copy\>' +syn match aapCommand '^\s*:del\>' +syn match aapCommand '^\s*:deldir\>' +syn match aapCommand '^\s*:delete\>' +syn match aapCommand '^\s*:delrule\>' +syn match aapCommand '^\s*:dll\>' +syn match aapCommand '^\s*:do\>' +syn match aapCommand '^\s*:error\>' +syn match aapCommand '^\s*:execute\>' +syn match aapCommand '^\s*:exit\>' +syn match aapCommand '^\s*:export\>' +syn match aapCommand '^\s*:fetch\>' +syn match aapCommand '^\s*:fetchall\>' +syn match aapCommand '^\s*:filetype\>' +syn match aapCommand '^\s*:finish\>' +syn match aapCommand '^\s*:global\>' +syn match aapCommand '^\s*:import\>' +syn match aapCommand '^\s*:include\>' +syn match aapCommand '^\s*:installpkg\>' +syn match aapCommand '^\s*:lib\>' +syn match aapCommand '^\s*:local\>' +syn match aapCommand '^\s*:log\>' +syn match aapCommand '^\s*:ltlib\>' +syn match aapCommand '^\s*:mkdir\>' +syn match aapCommand '^\s*:mkdownload\>' +syn match aapCommand '^\s*:move\>' +syn match aapCommand '^\s*:pass\>' +syn match aapCommand '^\s*:popdir\>' +syn match aapCommand '^\s*:produce\>' +syn match aapCommand '^\s*:program\>' +syn match aapCommand '^\s*:progsearch\>' +syn match aapCommand '^\s*:publish\>' +syn match aapCommand '^\s*:publishall\>' +syn match aapCommand '^\s*:pushdir\>' +syn match aapCommand '^\s*:quit\>' +syn match aapCommand '^\s*:recipe\>' +syn match aapCommand '^\s*:refresh\>' +syn match aapCommand '^\s*:remove\>' +syn match aapCommand '^\s*:removeall\>' +syn match aapCommand '^\s*:require\>' +syn match aapCommand '^\s*:revise\>' +syn match aapCommand '^\s*:reviseall\>' +syn match aapCommand '^\s*:route\>' +syn match aapCommand '^\s*:rule\>' +syn match aapCommand '^\s*:start\>' +syn match aapCommand '^\s*:symlink\>' +syn match aapCommand '^\s*:sys\>' +syn match aapCommand '^\s*:sysdepend\>' +syn match aapCommand '^\s*:syspath\>' +syn match aapCommand '^\s*:system\>' +syn match aapCommand '^\s*:tag\>' +syn match aapCommand '^\s*:tagall\>' +syn match aapCommand '^\s*:toolsearch\>' +syn match aapCommand '^\s*:totype\>' +syn match aapCommand '^\s*:touch\>' +syn match aapCommand '^\s*:tree\>' +syn match aapCommand '^\s*:unlock\>' +syn match aapCommand '^\s*:update\>' +syn match aapCommand '^\s*:usetool\>' +syn match aapCommand '^\s*:variant\>' +syn match aapCommand '^\s*:verscont\>' + +syn match aapCommand '^\s*:print\>' nextgroup=aapPipeEnd +syn match aapPipeCmd '\s*:print\>' nextgroup=aapPipeEnd contained +syn match aapCommand '^\s*:cat\>' nextgroup=aapPipeEnd +syn match aapPipeCmd '\s*:cat\>' nextgroup=aapPipeEnd contained +syn match aapCommand '^\s*:syseval\>' nextgroup=aapPipeEnd +syn match aapPipeCmd '\s*:syseval\>' nextgroup=aapPipeEnd contained +syn match aapPipeCmd '\s*:assign\>' contained +syn match aapCommand '^\s*:eval\>' nextgroup=aapPipeEnd +syn match aapPipeCmd '\s*:eval\>' nextgroup=aapPipeEndPy contained +syn match aapPipeCmd '\s*:tee\>' nextgroup=aapPipeEnd contained +syn match aapPipeCmd '\s*:log\>' nextgroup=aapPipeEnd contained +syn match aapPipeEnd '[^|]*|' nextgroup=aapPipeCmd contained skipnl +syn match aapPipeEndPy '[^|]*|' nextgroup=aapPipeCmd contained skipnl contains=@aapPythonScript +syn match aapPipeStart '^\s*|' nextgroup=aapPipeCmd + +" +" A Python line starts with @. Can be continued with a trailing backslash. +syn region aapPythonRegion start="\s*@" skip='\\$' end=+$+ contains=@aapPythonScript keepend +" +" A Python block starts with ":python" and continues so long as the indent is +" bigger. +syn region aapPythonRegion matchgroup=aapCommand start="\z(\s*\):python" skip='\n\z1\s\|\n\s*\n' end=+$+ contains=@aapPythonScript + +" A Python expression is enclosed in backticks. +syn region aapPythonRegion start="`" skip="``" end="`" contains=@aapPythonScript + +" TODO: There is something wrong with line continuation. +syn match aapComment '#.*' contains=aapTodo +syn match aapComment '#.*\(\\\n.*\)' contains=aapTodo + +syn match aapSpecial '$#' +syn match aapSpecial '$\$' +syn match aapSpecial '$(.)' + +" A heredoc assignment. +syn region aapHeredoc start="^\s*\k\+\s*$\=+\=?\=<<\s*\z(\S*\)"hs=e+1 end="^\s*\z1\s*$"he=s-1 + +" Syncing is needed for ":python" and "VAR << EOF". Don't use Python syncing +syn sync clear +syn sync fromstart + +" The default highlighting. +hi def link aapTodo Todo +hi def link aapString String +hi def link aapComment Comment +hi def link aapSpecial Special +hi def link aapVariable Identifier +hi def link aapPipeCmd aapCommand +hi def link aapCommand Statement +hi def link aapHeredoc Constant + +let b:current_syntax = "aap" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 diff --git a/.config/vim/syntax/abap.vim b/.config/vim/syntax/abap.vim new file mode 100644 index 0000000..627e515 --- /dev/null +++ b/.config/vim/syntax/abap.vim @@ -0,0 +1,196 @@ +" Vim ABAP syntax file +" Language: SAP - ABAP/R4 +" Maintainer: Marius Piedallu van Wyk +" Last Change: 2021 Jan 02 +" Comment: Thanks to EPI-USE Labs for all your assistance. :) + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Always ignore case +syn case ignore + +" Symbol Operators (space delimited) +syn match abapSymbolOperator "\W+\W" +syn match abapSymbolOperator "\W-\W" +syn match abapSymbolOperator "\W/\W" +syn match abapSymbolOperator "\W%\W" +syn match abapSymbolOperator "\W=\W" +syn match abapSymbolOperator "\W<\W" +syn match abapSymbolOperator "\W>\W" +syn match abapSymbolOperator "\W\*\W" +syn match abapSymbolOperator "\W[<>]=\W" +syn match abapSymbolOperator "\W<>\W" +syn match abapSymbolOperator "\W\*\*\W" +syn match abapSymbolOperator "\[\]" +syn match abapSymbolOperator "->\*\?" +syn match abapSymbolOperator "=>" +syn match abapSymbolOperator "[()~:,\.&$]" + +" Literals +syn region abapCharString matchgroup=abapCharString start="'" end="'" contains=abapCharStringEscape +syn match abapCharStringEscape contained "''" + +syn region abapString matchgroup=abapString start="`" end="`" contains=abapStringEscape +syn match abapStringEscape contained "``" + +syn match abapNumber "\-\=\<\d\+\>" +syn region abapHex matchgroup=abapHex start="X'" end="'" + +setlocal iskeyword=48-57,_,A-Z,a-z,/ + +syn match abapNamespace "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\<\(EXIT\W\+FROM\W\+STEP\W\+LOOP\|EXIT\)\>" +syn match abapComplexStatement "\<\(BEGIN\W\+OF\W\+\(BLOCK\|LINE\)\|BEGIN\W\+OF\)\>" +syn match abapComplexStatement "\<\(END\W\+OF\W\+\(BLOCK\|LINE\)\|END\W\+OF\)\>" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\<\(PUBLIC\|PRIVATE\|PROTECTED\)\(\W\+SECTION\)\?\>" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\<\(ALL\W\+OCCURRENCES\)\|\(\(FIRST\|LAST\)\W\+OCCURRENCE\)\>" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\<\(UP\W\+\)\?TO\>" + +" hyphenated-word statements +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" +syn match abapComplexStatement "\" + +" ABAP statements +syn keyword abapStatement ADD ALIAS ALIASES ASSERT ASSIGN ASSIGNING AT +syn keyword abapStatement BACK +syn keyword abapStatement CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY +syn keyword abapStatement DATA DEFINE DEFINITION DEFERRED DELETE DESCRIBE DETAIL DIVIDE DO +syn keyword abapStatement ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT +syn keyword abapStatement FETCH FIELDS FORM FORMAT FREE FROM FUNCTION +syn keyword abapStatement GENERATE +syn keyword abapStatement HIDE +syn keyword abapStatement IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION +syn keyword abapStatement LEAVE LIKE LINE LOAD LOCAL LOOP +syn keyword abapStatement MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY +syn keyword abapStatement ON OVERLAY OPTIONAL OTHERS +syn keyword abapStatement PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT +syn keyword abapStatement RAISE RANGES RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURNING ROLLBACK +syn keyword abapStatement SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS +syn keyword abapStatement TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES +syn keyword abapStatement UNASSIGN ULINE UNPACK UPDATE +syn keyword abapStatement WHEN WHILE WINDOW WRITE + +" More statements +syn keyword abapStatement LINES +syn keyword abapStatement INTO GROUP BY HAVING ORDER BY SINGLE +syn keyword abapStatement APPENDING CORRESPONDING FIELDS OF TABLE +syn keyword abapStatement LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER ROWS CONNECTING +syn keyword abapStatement OCCURS STRUCTURE OBJECT PROPERTY +syn keyword abapStatement CASTING APPEND RAISING VALUE COLOR +syn keyword abapStatement CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT +syn keyword abapStatement ID NUMBER FOR TITLE OUTPUT + +" Special ABAP specific tables: +syn match abapSpecialTables "\<\(sy\|\(hrp\|p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)-"me=e-1 contained +syn match abapStructure "\<\w\+-[^\>]"me=e-2 contains=abapSpecialTables,abapStatement,abapComplexStatement +syn match abapField "-\w\+"ms=s+1 + +" Pointer +syn match abapSpecial "<\w\+>" + +" Abap common constants: +syn keyword abapSpecial TRUE FALSE NULL SPACE + +" Includes +syn region abapInclude start="include" end="." contains=abapComment + +" Types +syn keyword abapTypes c n i int8 p f d t x string xstring decfloat16 decfloat34 + +" Atritmitic operators +syn keyword abapOperator abs sign ceil floor trunc frac acos asin atan cos sin tan +syn keyword abapOperator cosh sinh tanh exp log log10 sqrt + +" String operators +syn keyword abapStatement strlen xstrlen charlen numofchar dbmaxlen + +syn keyword abapOperator EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN + +" An error? Not strictly... but cannot think of reason this is intended. +syn match abapError "\.\." + +" Comments +syn region abapComment start="^\*" end="$" contains=abapTodo +syn match abapComment "\".*" contains=abapTodo +syn keyword abapTodo contained TODO NOTE +syn match abapTodo "\#EC\W\+\w\+" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link abapError Error +hi def link abapComment Comment +hi def link abapInclude Include +hi def link abapStatement Statement +hi def link abapComplexStatement Statement +hi def link abapSpecial Special +hi def link abapNamespace Special +hi def link abapSpecialTables Special +hi def link abapSymbolOperator abapOperator +hi def link abapOperator Operator +hi def link abapCharString String +hi def link abapString String +hi def link abapFloat Float +hi def link abapTypes Type +hi def link abapSymbol Structure +hi def link abapStructure Structure +hi def link abapField Variable +hi def link abapNumber Number +hi def link abapHex Number + + +let b:current_syntax = "abap" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/abaqus.vim b/.config/vim/syntax/abaqus.vim new file mode 100644 index 0000000..e6f025d --- /dev/null +++ b/.config/vim/syntax/abaqus.vim @@ -0,0 +1,34 @@ +" Vim syntax file +" Language: Abaqus finite element input file (www.hks.com) +" Maintainer: Carl Osterwisch +" Last Change: 2002 Feb 24 +" Remark: Huge improvement in folding performance--see filetype plugin + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Abaqus comment lines +syn match abaqusComment "^\*\*.*$" + +" Abaqus keyword lines +syn match abaqusKeywordLine "^\*\h.*" contains=abaqusKeyword,abaqusParameter,abaqusValue display +syn match abaqusKeyword "^\*\h[^,]*" contained display +syn match abaqusParameter ",[^,=]\+"lc=1 contained display +syn match abaqusValue "=\s*[^,]*"lc=1 contained display + +" Illegal syntax +syn match abaqusBadLine "^\s\+\*.*" display + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default methods for highlighting. Can be overridden later +hi def link abaqusComment Comment +hi def link abaqusKeyword Statement +hi def link abaqusParameter Identifier +hi def link abaqusValue Constant +hi def link abaqusBadLine Error + +let b:current_syntax = "abaqus" diff --git a/.config/vim/syntax/abc.vim b/.config/vim/syntax/abc.vim new file mode 100644 index 0000000..1a7b3bf --- /dev/null +++ b/.config/vim/syntax/abc.vim @@ -0,0 +1,51 @@ +" Vim syntax file +" Language: abc music notation language +" Maintainer: James Allwright +" URL: http://perun.hscs.wmin.ac.uk/~jra/vim/syntax/abc.vim +" Last Change: 27th April 2001 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" tags +syn region abcGuitarChord start=+"[A-G]+ end=+"+ contained +syn match abcNote "z[1-9]*[0-9]*" contained +syn match abcNote "z[1-9]*[0-9]*/[248]\=" contained +syn match abcNote "[=_\^]\{,2}[A-G],*[1-9]*[0-9]*" contained +syn match abcNote "[=_\^]\{,2}[A-G],*[1-9]*[0-9]*/[248]\=" contained +syn match abcNote "[=_\^]\{,2}[a-g]'*[1-9]*[0-9]*" contained +syn match abcNote "[=_\^]\{,2}[a-g]'*[1-9]*[0-9]*/[248]\=" contained +syn match abcBar "|" contained +syn match abcBar "[:|][:|]" contained +syn match abcBar ":|2" contained +syn match abcBar "|1" contained +syn match abcBar "\[[12]" contained +syn match abcTuple "([1-9]\+:\=[0-9]*:\=[0-9]*" contained +syn match abcBroken "<\|<<\|<<<\|>\|>>\|>>>" contained +syn match abcTie "-" +syn match abcHeadField "^[A-EGHIK-TVWXZ]:.*$" contained +syn match abcBodyField "^[KLMPQWVw]:.*$" contained +syn region abcHeader start="^X:" end="^K:.*$" contained contains=abcHeadField,abcComment keepend +syn region abcTune start="^X:" end="^ *$" contains=abcHeader,abcComment,abcBar,abcNote,abcBodyField,abcGuitarChord,abcTuple,abcBroken,abcTie +syn match abcComment "%.*$" + + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link abcComment Comment +hi def link abcHeadField Type +hi def link abcBodyField Special +hi def link abcBar Statement +hi def link abcTuple Statement +hi def link abcBroken Statement +hi def link abcTie Statement +hi def link abcGuitarChord Identifier +hi def link abcNote Constant + + +let b:current_syntax = "abc" + +" vim: ts=4 diff --git a/.config/vim/syntax/abel.vim b/.config/vim/syntax/abel.vim new file mode 100644 index 0000000..dbed541 --- /dev/null +++ b/.config/vim/syntax/abel.vim @@ -0,0 +1,161 @@ +" Vim syntax file +" Language: ABEL +" Maintainer: John Cook +" Last Change: 2011 Dec 27 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" this language is oblivious to case +syn case ignore + +" A bunch of keywords +syn keyword abelHeader module title device options +syn keyword abelSection declarations equations test_vectors end +syn keyword abelDeclaration state truth_table state_diagram property +syn keyword abelType pin node attribute constant macro library + +syn keyword abelTypeId com reg neg pos buffer dc reg_d reg_t contained +syn keyword abelTypeId reg_sr reg_jk reg_g retain xor invert contained + +syn keyword abelStatement when then else if with endwith case endcase +syn keyword abelStatement fuses expr trace + +" option to omit obsolete statements +if exists("abel_obsolete_ok") + syn keyword abelStatement enable flag in +else + syn keyword abelError enable flag in +endif + +" directives +syn match abelDirective "@alternate" +syn match abelDirective "@standard" +syn match abelDirective "@const" +syn match abelDirective "@dcset" +syn match abelDirective "@include" +syn match abelDirective "@page" +syn match abelDirective "@radix" +syn match abelDirective "@repeat" +syn match abelDirective "@irp" +syn match abelDirective "@expr" +syn match abelDirective "@if" +syn match abelDirective "@ifb" +syn match abelDirective "@ifnb" +syn match abelDirective "@ifdef" +syn match abelDirective "@ifndef" +syn match abelDirective "@ifiden" +syn match abelDirective "@ifniden" + +syn keyword abelTodo contained TODO XXX FIXME + +" wrap up type identifiers to differentiate them from normal strings +syn region abelSpecifier start='istype' end=';' contains=abelTypeIdChar,abelTypeId,abelTypeIdEnd keepend +syn match abelTypeIdChar "[,']" contained +syn match abelTypeIdEnd ";" contained + +" string constants and special characters within them +syn match abelSpecial contained "\\['\\]" +syn region abelString start=+'+ skip=+\\"+ end=+'+ contains=abelSpecial + +" valid integer number formats (decimal, binary, octal, hex) +syn match abelNumber "\<[-+]\=[0-9]\+\>" +syn match abelNumber "\^d[0-9]\+\>" +syn match abelNumber "\^b[01]\+\>" +syn match abelNumber "\^o[0-7]\+\>" +syn match abelNumber "\^h[0-9a-f]\+\>" + +" special characters +" (define these after abelOperator so ?= overrides ?) +syn match abelSpecialChar "[\[\](){},;:?]" + +" operators +syn match abelLogicalOperator "[!#&$]" +syn match abelRangeOperator "\.\." +syn match abelAlternateOperator "[/*+]" +syn match abelAlternateOperator ":[+*]:" +syn match abelArithmeticOperator "[-%]" +syn match abelArithmeticOperator "<<" +syn match abelArithmeticOperator ">>" +syn match abelRelationalOperator "[<>!=]=" +syn match abelRelationalOperator "[<>]" +syn match abelAssignmentOperator "[:?]\==" +syn match abelAssignmentOperator "?:=" +syn match abelTruthTableOperator "->" + +" signal extensions +syn match abelExtension "\.aclr\>" +syn match abelExtension "\.aset\>" +syn match abelExtension "\.clk\>" +syn match abelExtension "\.clr\>" +syn match abelExtension "\.com\>" +syn match abelExtension "\.fb\>" +syn match abelExtension "\.[co]e\>" +syn match abelExtension "\.l[eh]\>" +syn match abelExtension "\.fc\>" +syn match abelExtension "\.pin\>" +syn match abelExtension "\.set\>" +syn match abelExtension "\.[djksrtq]\>" +syn match abelExtension "\.pr\>" +syn match abelExtension "\.re\>" +syn match abelExtension "\.a[pr]\>" +syn match abelExtension "\.s[pr]\>" + +" special constants +syn match abelConstant "\.[ckudfpxz]\." +syn match abelConstant "\.sv[2-9]\." + +" one-line comments +syn region abelComment start=+"+ end=+"\|$+ contains=abelNumber,abelTodo +" option to prevent C++ style comments +if !exists("abel_cpp_comments_illegal") + syn region abelComment start=+//+ end=+$+ contains=abelNumber,abelTodo +endif + +syn sync minlines=1 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default highlighting. +hi def link abelHeader abelStatement +hi def link abelSection abelStatement +hi def link abelDeclaration abelStatement +hi def link abelLogicalOperator abelOperator +hi def link abelRangeOperator abelOperator +hi def link abelAlternateOperator abelOperator +hi def link abelArithmeticOperator abelOperator +hi def link abelRelationalOperator abelOperator +hi def link abelAssignmentOperator abelOperator +hi def link abelTruthTableOperator abelOperator +hi def link abelSpecifier abelStatement +hi def link abelOperator abelStatement +hi def link abelStatement Statement +hi def link abelIdentifier Identifier +hi def link abelTypeId abelType +hi def link abelTypeIdChar abelType +hi def link abelType Type +hi def link abelNumber abelString +hi def link abelString String +hi def link abelConstant Constant +hi def link abelComment Comment +hi def link abelExtension abelSpecial +hi def link abelSpecialChar abelSpecial +hi def link abelTypeIdEnd abelSpecial +hi def link abelSpecial Special +hi def link abelDirective PreProc +hi def link abelTodo Todo +hi def link abelError Error + + +let b:current_syntax = "abel" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim:ts=8 diff --git a/.config/vim/syntax/abnf.vim b/.config/vim/syntax/abnf.vim new file mode 100644 index 0000000..13459eb --- /dev/null +++ b/.config/vim/syntax/abnf.vim @@ -0,0 +1,33 @@ +" Vim compiler file +" Language: abnf +" Maintainer: A4-Tacks +" Last Change: 2025 Mar 05 +" Upstream: https://github.com/A4-Tacks/abnf.vim + +" Implementing RFC-5234, RFC-7405 + +if exists('b:current_syntax') + finish +endif + +syn case ignore + +syn match abnfError /[<>"]/ +syn match abnfComment /;.*/ +syn match abnfOption /[[/\]]/ +syn region abnfString start=/\(%[si]\)\="/ end=/"/ oneline +syn region abnfProse start=// oneline +syn match abnfNumVal /\v\%b[01]+%(%(\.[01]+)+|-[01]+)=>/ +syn match abnfNumVal /\v\%d\d+%(%(\.\d+)+|-\d+)=>/ +syn match abnfNumVal /\v\%x[0-9a-f]+%(%(\.[0-9a-f]+)+|-[0-9a-f]+)=>/ +syn match abnfRepeat /\v%(%(<\d+)=\*\d*|<\d+ =)\ze[^ \t\r\n0-9*/)\]]/ + +hi def link abnfError Error +hi def link abnfComment Comment +hi def link abnfOption PreProc +hi def link abnfString String +hi def link abnfProse String +hi def link abnfNumVal Number +hi def link abnfRepeat Repeat + +" vim:noet:ts=8:sts=8:nowrap diff --git a/.config/vim/syntax/acedb.vim b/.config/vim/syntax/acedb.vim new file mode 100644 index 0000000..2c2cd70 --- /dev/null +++ b/.config/vim/syntax/acedb.vim @@ -0,0 +1,110 @@ +" Vim syntax file +" Language: AceDB model files +" Maintainer: Stewart Morris (Stewart.Morris@ed.ac.uk) +" Last change: Thu Apr 26 10:38:01 BST 2001 +" URL: http://www.ed.ac.uk/~swmorris/vim/acedb.vim + +" Syntax file to handle all $ACEDB/wspec/*.wrm files, primarily models.wrm +" AceDB software is available from http://www.acedb.org + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn keyword acedbXref XREF +syn keyword acedbModifier UNIQUE REPEAT + +syn case ignore +syn keyword acedbModifier Constraints +syn keyword acedbType DateType Int Text Float + +" Magic tags from: http://genome.cornell.edu/acedocs/magic/summary.html +syn keyword acedbMagic pick_me_to_call No_cache Non_graphic Title +syn keyword acedbMagic Flipped Centre Extent View Default_view +syn keyword acedbMagic From_map Minimal_view Main_Marker Map Includes +syn keyword acedbMagic Mapping_data More_data Position Ends Left Right +syn keyword acedbMagic Multi_Position Multi_Ends With Error Relative +syn keyword acedbMagic Min Anchor Gmap Grid_map Grid Submenus Cambridge +syn keyword acedbMagic No_buttons Columns Colour Surround_colour Tag +syn keyword acedbMagic Scale_unit Cursor Cursor_on Cursor_unit +syn keyword acedbMagic Locator Magnification Projection_lines_on +syn keyword acedbMagic Marker_points Marker_intervals Contigs +syn keyword acedbMagic Physical_genes Two_point Multi_point Likelihood +syn keyword acedbMagic Point_query Point_yellow Point_width +syn keyword acedbMagic Point_pne Point_pe Point_nne Point_ne +syn keyword acedbMagic Derived_tags DT_query DT_width DT_no_duplicates +syn keyword acedbMagic RH_data RH_query RH_spacing RH_show_all +syn keyword acedbMagic Names_on Width Symbol Colours Pne Pe Nne pMap +syn keyword acedbMagic Sequence Gridded FingerPrint In_Situ Cosmid_grid +syn keyword acedbMagic Layout Lines_at Space_at No_stagger A1_labelling +syn keyword acedbMagic DNA Structure From Source Source_Exons +syn keyword acedbMagic Coding CDS Transcript Assembly_tags Allele +syn keyword acedbMagic Display Colour Frame_sensitive Strand_sensitive +syn keyword acedbMagic Score_bounds Percent Bumpable Width Symbol +syn keyword acedbMagic Blixem_N Address E_mail Paper Reference Title +syn keyword acedbMagic Point_1 Point_2 Calculation Full One_recombinant +syn keyword acedbMagic Tested Selected_trans Backcross Back_one +syn keyword acedbMagic Dom_semi Dom_let Direct Complex_mixed Calc +syn keyword acedbMagic Calc_upper_conf Item_1 Item_2 Results A_non_B +syn keyword acedbMagic Score Score_by_offset Score_by_width +syn keyword acedbMagic Right_priority Blastn Blixem Blixem_X +syn keyword acedbMagic Journal Year Volume Page Author +syn keyword acedbMagic Selected One_all Recs_all One_let +syn keyword acedbMagic Sex_full Sex_one Sex_cis Dom_one Dom_selected +syn keyword acedbMagic Calc_distance Calc_lower_conf Canon_for_cosmid +syn keyword acedbMagic Reversed_physical Points Positive Negative +syn keyword acedbMagic Point_error_scale Point_segregate_ordered +syn keyword acedbMagic Point_symbol Interval_JTM Interval_RD +syn keyword acedbMagic EMBL_feature Homol Feature +syn keyword acedbMagic DT_tag Spacer Spacer_colour Spacer_width +syn keyword acedbMagic RH_positive RH_negative RH_contradictory Query +syn keyword acedbMagic Clone Y_remark PCR_remark Hybridizes_to +syn keyword acedbMagic Row Virtual_row Mixed In_pool Subpool B_non_A +syn keyword acedbMagic Interval_SRK Point_show_marginal Subsequence +syn keyword acedbMagic Visible Properties Transposon + +syn match acedbClass "^?\w\+\|^#\w\+" +syn match acedbComment "//.*" +syn region acedbComment start="/\*" end="\*/" +syn match acedbComment "^#\W.*" +syn match acedbHelp "^\*\*\w\+$" +syn match acedbTag "[^^]?\w\+\|[^^]#\w\+" +syn match acedbBlock "//#.\+#$" +syn match acedbOption "^_[DVH]\S\+" +syn match acedbFlag "\s\+-\h\+" +syn match acedbSubclass "^Class" +syn match acedbSubtag "^Visible\|^Is_a_subclass_of\|^Filter\|^Hidden" +syn match acedbNumber "\<\d\+\>" +syn match acedbNumber "\<\d\+\.\d\+\>" +syn match acedbHyb "\\|\" +syn region acedbString start=/"/ end=/"/ skip=/\\"/ oneline + +" Rest of syntax highlighting rules start here + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link acedbMagic Special +hi def link acedbHyb Special +hi def link acedbType Type +hi def link acedbOption Type +hi def link acedbSubclass Type +hi def link acedbSubtag Include +hi def link acedbFlag Include +hi def link acedbTag Include +hi def link acedbClass Todo +hi def link acedbHelp Todo +hi def link acedbXref Identifier +hi def link acedbModifier Label +hi def link acedbComment Comment +hi def link acedbBlock ModeMsg +hi def link acedbNumber Number +hi def link acedbString String + + +let b:current_syntax = "acedb" + +" The structure of the model.wrm file is sensitive to mixed tab and space +" indentation and assumes tabs are 8 so... +se ts=8 diff --git a/.config/vim/syntax/ada.vim b/.config/vim/syntax/ada.vim new file mode 100644 index 0000000..415c952 --- /dev/null +++ b/.config/vim/syntax/ada.vim @@ -0,0 +1,368 @@ +"---------------------------------------------------------------------------- +" Description: Vim Ada syntax file +" Language: Ada (2005) +" $Id: ada.vim 887 2008-07-08 14:29:01Z krischik $ +" Copyright: Copyright (C) 2006 Martin Krischik +" Maintainer: Martin Krischik +" David A. Wheeler +" Simon Bradley +" Contributors: Preben Randhol. +" $Author: krischik $ +" $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $ +" Version: 4.6 +" $Revision: 887 $ +" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/syntax/ada.vim $ +" http://www.dwheeler.com/vim +" History: 24.05.2006 MK Unified Headers +" 26.05.2006 MK ' should not be in iskeyword. +" 16.07.2006 MK Ada-Mode as vim-ball +" 02.10.2006 MK Better folding. +" 15.10.2006 MK Bram's suggestion for runtime integration +" 05.11.2006 MK Spell check for comments and strings only +" 05.11.2006 MK Bram suggested to save on spaces +" Help Page: help ft-ada-syntax +"------------------------------------------------------------------------------ +" The formal spec of Ada 2005 (ARM) is the "Ada 2005 Reference Manual". +" For more Ada 2005 info, see http://www.gnuada.org and http://www.adapower.com. +" +" This vim syntax file works on vim 7.0 only and makes use of most of Voim 7.0 +" advanced features. +"------------------------------------------------------------------------------ + +if exists("b:current_syntax") || version < 700 + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +let b:current_syntax = "ada" + +" Section: Ada is entirely case-insensitive. {{{1 +" +syntax case ignore + +" Section: Highlighting commands {{{1 +" +" There are 72 reserved words in total in Ada2005. Some keywords are +" used in more than one way. For example: +" 1. "end" is a general keyword, but "end if" ends a Conditional. +" 2. "then" is a conditional, but "and then" is an operator. +" +for b:Item in g:ada#Keywords + " Standard Exceptions (including I/O). + " We'll highlight the standard exceptions, similar to vim's Python mode. + " It's possible to redefine the standard exceptions as something else, + " but doing so is very bad practice, so simply highlighting them makes sense. + if b:Item['kind'] == "x" + execute "syntax keyword adaException " . b:Item['word'] + endif + if b:Item['kind'] == "a" + execute 'syntax match adaAttribute "\V' . b:Item['word'] . '"' + endif + " We don't normally highlight types in package Standard + " (Integer, Character, Float, etc.). I don't think it looks good + " with the other type keywords, and many Ada programs define + " so many of their own types that it looks inconsistent. + " However, if you want this highlighting, turn on "ada_standard_types". + " For package Standard's definition, see ARM section A.1. + if b:Item['kind'] == "t" && exists ("g:ada_standard_types") + execute "syntax keyword adaBuiltinType " . b:Item['word'] + endif +endfor + +" Section: others {{{1 +" +syntax keyword adaLabel others + +" Section: Operatoren {{{1 +" +syntax keyword adaOperator abs mod not rem xor +syntax match adaOperator "\" +syntax match adaOperator "\" +syntax match adaOperator "\" +syntax match adaOperator "\" +syntax match adaOperator "[-+*/<>&]" +syntax keyword adaOperator ** +syntax match adaOperator "[/<>]=" +syntax keyword adaOperator => +syntax match adaOperator "\.\." +syntax match adaOperator "=" + +" Section: <> {{{1 +" +" Handle the box, <>, specially: +" +syntax keyword adaSpecial <> + +" Section: rainbow color {{{1 +" +if exists("g:ada_rainbow_color") + syntax match adaSpecial "[:;.,]" + call rainbow_parenthsis#LoadRound () + call rainbow_parenthsis#Activate () +else + syntax match adaSpecial "[:;().,]" +endif + +" Section: := {{{1 +" +" We won't map "adaAssignment" by default, but we need to map ":=" to +" something or the "=" inside it will be mislabelled as an operator. +" Note that in Ada, assignment (:=) is not considered an operator. +" +syntax match adaAssignment ":=" + +" Section: Numbers, including floating point, exponents, and alternate bases. {{{1 +" +syntax match adaNumber "\<\d[0-9_]*\(\.\d[0-9_]*\)\=\([Ee][+-]\=\d[0-9_]*\)\=\>" +syntax match adaNumber "\<\d\d\=#\x[0-9A-Fa-f_]*\(\.\x[0-9A-Fa-f_]*\)\=#\([Ee][+-]\=\d[0-9_]*\)\=" + +" Section: Identify leading numeric signs {{{1 +" +" In "A-5" the "-" is an operator, " but in "A:=-5" the "-" is a sign. This +" handles "A3+-5" (etc.) correctly. " This assumes that if you put a +" don't put a space after +/- when it's used " as an operator, you won't +" put a space before it either -- which is true " in code I've seen. +" +syntax match adaSign "[[:space:]<>=(,|:;&*/+-][+-]\d"lc=1,hs=s+1,he=e-1,me=e-1 + +" Section: Labels for the goto statement. {{{1 +" +syntax region adaLabel start="<<" end=">>" + +" Section: Boolean Constants {{{1 +" Boolean Constants. +syntax keyword adaBoolean true false + +" Section: Warn C/C++ {{{1 +" +" Warn people who try to use C/C++ notation erroneously: +" +syntax match adaError "//" +syntax match adaError "/\*" +syntax match adaError "==" + + +" Section: Space Errors {{{1 +" +if exists("g:ada_space_errors") + if !exists("g:ada_no_trail_space_error") + syntax match adaSpaceError excludenl "\s\+$" + endif + if !exists("g:ada_no_tab_space_error") + syntax match adaSpaceError " \+\t"me=e-1 + endif + if !exists("g:ada_all_tab_usage") + syntax match adaSpecial "\t" + endif +endif + +" Section: end {{{1 +" Unless special ("end loop", "end if", etc.), "end" marks the end of a +" begin, package, task etc. Assigning it to adaEnd. +syntax match adaEnd /\/ + +syntax keyword adaPreproc pragma + +syntax keyword adaRepeat exit for loop reverse while +syntax match adaRepeat "\" + +syntax keyword adaStatement accept delay goto raise requeue return +syntax keyword adaStatement terminate +syntax match adaStatement "\" + +" Section: Handle Ada's record keywords. {{{1 +" +" 'record' usually starts a structure, but "with null record;" does not, +" and 'end record;' ends a structure. The ordering here is critical - +" 'record;' matches a "with null record", so make it a keyword (this can +" match when the 'with' or 'null' is on a previous line). +" We see the "end" in "end record" before the word record, so we match that +" pattern as adaStructure (and it won't match the "record;" pattern). +" +syntax match adaStructure "\" contains=adaRecord +syntax match adaStructure "\" contains=adaRecord +syntax match adaKeyword "\" +syntax match adaConditional "\" +syntax match adaConditional "\" +syntax match adaConditional "\" +syntax match adaConditional "\" +syntax match adaConditional "\" +syntax keyword adaConditional if case select +syntax keyword adaConditional elsif when + +" Section: other keywords {{{1 +syntax match adaKeyword "\" contains=adaRecord +syntax keyword adaKeyword all do exception in new null out +syntax keyword adaKeyword separate until overriding + +" Section: begin keywords {{{1 +" +" These keywords begin various constructs, and you _might_ want to +" highlight them differently. +" +syntax keyword adaBegin begin body declare entry generic +syntax keyword adaBegin protected renames task + +syntax match adaBegin "\" contains=adaFunction +syntax match adaBegin "\" contains=adaProcedure +syntax match adaBegin "\" contains=adaPackage + +if exists("ada_with_gnat_project_files") + syntax keyword adaBegin project +endif + +" Section: with, use {{{1 +" +if exists("ada_withuse_ordinary") + " Don't be fancy. Display "with" and "use" as ordinary keywords in all cases. + syntax keyword adaKeyword with use +else + " Highlight "with" and "use" clauses like C's "#include" when they're used + " to reference other compilation units; otherwise they're ordinary keywords. + " If we have vim 6.0 or later, we'll use its advanced pattern-matching + " capabilities so that we won't match leading spaces. + syntax match adaKeyword "\" + syntax match adaKeyword "\" + syntax match adaBeginWith "^\s*\zs\(\(with\(\s\+type\)\=\)\|\(use\)\)\>" contains=adaInc + syntax match adaSemiWith ";\s*\zs\(\(with\(\s\+type\)\=\)\|\(use\)\)\>" contains=adaInc + syntax match adaInc "\" contained contains=NONE + syntax match adaInc "\" contained contains=NONE + syntax match adaInc "\" contained contains=NONE + " Recognize "with null record" as a keyword (even the "record"). + syntax match adaKeyword "\" + " Consider generic formal parameters of subprograms and packages as keywords. + syntax match adaKeyword ";\s*\zswith\s\+\(function\|procedure\|package\)\>" + syntax match adaKeyword "^\s*\zswith\s\+\(function\|procedure\|package\)\>" +endif + +" Section: String and character constants. {{{1 +" +syntax region adaString contains=@Spell start=+"+ skip=+""+ end=+"+ +syntax match adaCharacter "'.'" + +" Section: Todo (only highlighted in comments) {{{1 +" +syntax keyword adaTodo contained TODO FIXME XXX NOTE + +" Section: Comments. {{{1 +" +syntax region adaComment + \ oneline + \ contains=adaTodo,adaLineError,@Spell + \ start="--" + \ end="$" + +" Section: line errors {{{1 +" +" Note: Line errors have become quite slow with Vim 7.0 +" +if exists("g:ada_line_errors") + syntax match adaLineError "\(^.\{79}\)\@<=." contains=ALL containedin=ALL +endif + +" Section: syntax folding {{{1 +" +" Syntax folding is very tricky - for now I still suggest to use +" indent folding +" +if exists("g:ada_folding") && g:ada_folding[0] == 's' + if stridx (g:ada_folding, 'p') >= 0 + syntax region adaPackage + \ start="\(\\|\\)\s*\z(\k*\)" + \ end="end\s\+\z1\s*;" + \ keepend extend transparent fold contains=ALL + endif + if stridx (g:ada_folding, 'f') >= 0 + syntax region adaProcedure + \ start="\\s*\z(\k*\)" + \ end="\\s\+\z1\s*;" + \ keepend extend transparent fold contains=ALL + syntax region adaFunction + \ start="\\s*\z(\k*\)" + \ end="end\s\+\z1\s*;" + \ keepend extend transparent fold contains=ALL + endif + if stridx (g:ada_folding, 'f') >= 0 + syntax region adaRecord + \ start="\" + \ end="\" + \ keepend extend transparent fold contains=ALL + endif +endif + +" Section: The default methods for highlighting. Can be overridden later. {{{1 +" +highlight def link adaCharacter Character +highlight def link adaComment Comment +highlight def link adaConditional Conditional +highlight def link adaKeyword Keyword +highlight def link adaLabel Label +highlight def link adaNumber Number +highlight def link adaSign Number +highlight def link adaOperator Operator +highlight def link adaPreproc PreProc +highlight def link adaRepeat Repeat +highlight def link adaSpecial Special +highlight def link adaStatement Statement +highlight def link adaString String +highlight def link adaStructure Structure +highlight def link adaTodo Todo +highlight def link adaType Type +highlight def link adaTypedef Typedef +highlight def link adaStorageClass StorageClass +highlight def link adaBoolean Boolean +highlight def link adaException Exception +highlight def link adaAttribute Tag +highlight def link adaInc Include +highlight def link adaError Error +highlight def link adaSpaceError Error +highlight def link adaLineError Error +highlight def link adaBuiltinType Type +highlight def link adaAssignment Special + +" Subsection: Begin, End {{{2 +" +if exists ("ada_begin_preproc") + " This is the old default display: + highlight def link adaBegin PreProc + highlight def link adaEnd PreProc +else + " This is the new default display: + highlight def link adaBegin Keyword + highlight def link adaEnd Keyword +endif + + + +" Section: sync {{{1 +" +" We don't need to look backwards to highlight correctly; +" this speeds things up greatly. +syntax sync minlines=1 maxlines=1 + +let &cpo = s:keepcpo +unlet s:keepcpo + +finish " 1}}} + +"------------------------------------------------------------------------------ +" Copyright (C) 2006 Martin Krischik +" +" Vim is Charityware - see ":help license" or uganda.txt for licence details. +"------------------------------------------------------------------------------ +"vim: textwidth=78 nowrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab +"vim: foldmethod=marker diff --git a/.config/vim/syntax/aflex.vim b/.config/vim/syntax/aflex.vim new file mode 100644 index 0000000..aa8b5f8 --- /dev/null +++ b/.config/vim/syntax/aflex.vim @@ -0,0 +1,82 @@ + +" Vim syntax file +" Language: AfLex (from Lex syntax file) +" Maintainer: Mathieu Clabaut +" LastChange: 02 May 2001 +" Original: Lex, maintained by Dr. Charles E. Campbell, Jr. +" Comment: Replaced sourcing c.vim file by ada.vim and rename lex* +" in aflex* + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Read the Ada syntax to start with +runtime! syntax/ada.vim +unlet b:current_syntax + + +" --- AfLex stuff --- + +"I'd prefer to use aflex.* , but it doesn't handle forward definitions yet +syn cluster aflexListGroup contains=aflexAbbrvBlock,aflexAbbrv,aflexAbbrv,aflexAbbrvRegExp,aflexInclude,aflexPatBlock,aflexPat,aflexBrace,aflexPatString,aflexPatTag,aflexPatTag,aflexPatComment,aflexPatCodeLine,aflexMorePat,aflexPatSep,aflexSlashQuote,aflexPatCode,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2 +syn cluster aflexListPatCodeGroup contains=aflexAbbrvBlock,aflexAbbrv,aflexAbbrv,aflexAbbrvRegExp,aflexInclude,aflexPatBlock,aflexPat,aflexBrace,aflexPatTag,aflexPatTag,aflexPatComment,aflexPatCodeLine,aflexMorePat,aflexPatSep,aflexSlashQuote,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2 + +" Abbreviations Section +syn region aflexAbbrvBlock start="^\([a-zA-Z_]\+\t\|%{\)" end="^%%$"me=e-2 skipnl nextgroup=aflexPatBlock contains=aflexAbbrv,aflexInclude,aflexAbbrvComment +syn match aflexAbbrv "^\I\i*\s"me=e-1 skipwhite contained nextgroup=aflexAbbrvRegExp +syn match aflexAbbrv "^%[sx]" contained +syn match aflexAbbrvRegExp "\s\S.*$"lc=1 contained nextgroup=aflexAbbrv,aflexInclude +syn region aflexInclude matchgroup=aflexSep start="^%{" end="%}" contained contains=ALLBUT,@aflexListGroup +syn region aflexAbbrvComment start="^\s\+/\*" end="\*/" + +"%% : Patterns {Actions} +syn region aflexPatBlock matchgroup=Todo start="^%%$" matchgroup=Todo end="^%%$" skipnl skipwhite contains=aflexPat,aflexPatTag,aflexPatComment +syn region aflexPat start=+\S+ skip="\\\\\|\\." end="\s"me=e-1 contained nextgroup=aflexMorePat,aflexPatSep contains=aflexPatString,aflexSlashQuote,aflexBrace +syn region aflexBrace start="\[" skip=+\\\\\|\\+ end="]" contained +syn region aflexPatString matchgroup=String start=+"+ skip=+\\\\\|\\"+ matchgroup=String end=+"+ contained +syn match aflexPatTag "^<\I\i*\(,\I\i*\)*>*" contained nextgroup=aflexPat,aflexPatTag,aflexMorePat,aflexPatSep +syn match aflexPatTag +^<\I\i*\(,\I\i*\)*>*\(\\\\\)*\\"+ contained nextgroup=aflexPat,aflexPatTag,aflexMorePat,aflexPatSep +syn region aflexPatComment start="^\s*/\*" end="\*/" skipnl contained contains=cTodo nextgroup=aflexPatComment,aflexPat,aflexPatString,aflexPatTag +syn match aflexPatCodeLine ".*$" contained contains=ALLBUT,@aflexListGroup +syn match aflexMorePat "\s*|\s*$" skipnl contained nextgroup=aflexPat,aflexPatTag,aflexPatComment +syn match aflexPatSep "\s\+" contained nextgroup=aflexMorePat,aflexPatCode,aflexPatCodeLine +syn match aflexSlashQuote +\(\\\\\)*\\"+ contained +syn region aflexPatCode matchgroup=Delimiter start="{" matchgroup=Delimiter end="}" skipnl contained contains=ALLBUT,@aflexListPatCodeGroup + +syn keyword aflexCFunctions BEGIN input unput woutput yyleng yylook yytext +syn keyword aflexCFunctions ECHO output winput wunput yyless yymore yywrap + +" includes several ALLBUTs; these have to be treated so as to exclude aflex* groups +syn cluster cParenGroup add=aflex.* +syn cluster cDefineGroup add=aflex.* +syn cluster cPreProcGroup add=aflex.* +syn cluster cMultiGroup add=aflex.* + +" Synchronization +syn sync clear +syn sync minlines=300 +syn sync match aflexSyncPat grouphere aflexPatBlock "^%[a-zA-Z]" +syn sync match aflexSyncPat groupthere aflexPatBlock "^<$" +syn sync match aflexSyncPat groupthere aflexPatBlock "^%%$" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link aflexSlashQuote aflexPat +hi def link aflexBrace aflexPat +hi def link aflexAbbrvComment aflexPatComment + +hi def link aflexAbbrv SpecialChar +hi def link aflexAbbrvRegExp Macro +hi def link aflexCFunctions Function +hi def link aflexMorePat SpecialChar +hi def link aflexPat Function +hi def link aflexPatComment Comment +hi def link aflexPatString Function +hi def link aflexPatTag Special +hi def link aflexSep Delimiter + +let b:current_syntax = "aflex" + +" vim:ts=10 diff --git a/.config/vim/syntax/ahdl.vim b/.config/vim/syntax/ahdl.vim new file mode 100644 index 0000000..3a40dcf --- /dev/null +++ b/.config/vim/syntax/ahdl.vim @@ -0,0 +1,81 @@ +" Vim syn file +" Language: Altera AHDL +" Maintainer: John Cook +" Last Change: 2001 Apr 25 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +"this language is oblivious to case. +syn case ignore + +" a bunch of keywords +syn keyword ahdlKeyword assert begin bidir bits buried case clique +syn keyword ahdlKeyword connected_pins constant defaults define design +syn keyword ahdlKeyword device else elsif end for function generate +syn keyword ahdlKeyword gnd help_id if in include input is machine +syn keyword ahdlKeyword node of options others output parameters +syn keyword ahdlKeyword returns states subdesign table then title to +syn keyword ahdlKeyword tri_state_node variable vcc when with + +" a bunch of types +syn keyword ahdlIdentifier carry cascade dffe dff exp global +syn keyword ahdlIdentifier jkffe jkff latch lcell mcell memory opendrn +syn keyword ahdlIdentifier soft srffe srff tffe tff tri wire x + +syn keyword ahdlMegafunction lpm_and lpm_bustri lpm_clshift lpm_constant +syn keyword ahdlMegafunction lpm_decode lpm_inv lpm_mux lpm_or lpm_xor +syn keyword ahdlMegafunction busmux mux + +syn keyword ahdlMegafunction divide lpm_abs lpm_add_sub lpm_compare +syn keyword ahdlMegafunction lpm_counter lpm_mult + +syn keyword ahdlMegafunction altdpram csfifo dcfifo scfifo csdpram lpm_ff +syn keyword ahdlMegafunction lpm_latch lpm_shiftreg lpm_ram_dq lpm_ram_io +syn keyword ahdlMegafunction lpm_rom lpm_dff lpm_tff clklock pll ntsc + +syn keyword ahdlTodo contained TODO + +" String constants +syn region ahdlString start=+"+ skip=+\\"+ end=+"+ + +" valid integer number formats (decimal, binary, octal, hex) +syn match ahdlNumber '\<\d\+\>' +syn match ahdlNumber '\=?:\^]" +syn keyword ahdlOperator not and nand or nor xor xnor +syn keyword ahdlOperator mod div log2 used ceil floor + +" one line and multi-line comments +" (define these after ahdlOperator so -- overrides -) +syn match ahdlComment "--.*" contains=ahdlNumber,ahdlTodo +syn region ahdlComment start="%" end="%" contains=ahdlNumber,ahdlTodo + +" other special characters +syn match ahdlSpecialChar "[\[\]().,;]" + +syn sync minlines=1 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default highlighting. +hi def link ahdlNumber ahdlString +hi def link ahdlMegafunction ahdlIdentifier +hi def link ahdlSpecialChar SpecialChar +hi def link ahdlKeyword Statement +hi def link ahdlString String +hi def link ahdlComment Comment +hi def link ahdlIdentifier Identifier +hi def link ahdlOperator Operator +hi def link ahdlTodo Todo + + +let b:current_syntax = "ahdl" +" vim:ts=8 diff --git a/.config/vim/syntax/aidl.vim b/.config/vim/syntax/aidl.vim new file mode 100644 index 0000000..3a79433 --- /dev/null +++ b/.config/vim/syntax/aidl.vim @@ -0,0 +1,23 @@ +" Vim syntax file +" Language: aidl (Android Interface Definition Language) +" https://developer.android.com/guide/components/aidl +" Maintainer: Dominique Pelle +" LastChange: 2020/12/03 + +" Quit when a syntax file was already loaded. +if exists("b:current_syntax") + finish +endif + +source :p:h/java.vim + +syn keyword aidlParamDir in out inout +syn keyword aidlKeyword const oneway parcelable + +" Needed for the 'in', 'out', 'inout' keywords to be highlighted. +syn cluster javaTop add=aidlParamDir + +hi def link aidlParamDir StorageClass +hi def link aidlKeyword Keyword + +let b:current_syntax = "aidl" diff --git a/.config/vim/syntax/alsaconf.vim b/.config/vim/syntax/alsaconf.vim new file mode 100644 index 0000000..143fcc0 --- /dev/null +++ b/.config/vim/syntax/alsaconf.vim @@ -0,0 +1,49 @@ +" Vim syntax file +" Language: alsaconf(8) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword alsoconfTodo contained FIXME TODO XXX NOTE + +syn region alsaconfComment display oneline + \ start='#' end='$' + \ contains=alsaconfTodo,@Spell + +syn match alsaconfSpecialChar contained display '\\[ntvbrf]' +syn match alsaconfSpecialChar contained display '\\\o\+' + +syn region alsaconfString start=+"+ skip=+\\$+ end=+"\|$+ + \ contains=alsaconfSpecialChar + +syn match alsaconfSpecial contained display 'confdir:' + +syn region alsaconfPreProc start='<' end='>' contains=alsaconfSpecial + +syn match alsaconfMode display '[+?!-]' + +syn keyword alsaconfKeyword card default device errors files func strings +syn keyword alsaconfKeyword subdevice type vars + +syn match alsaconfVariables display '@\(hooks\|func\|args\)' + +hi def link alsoconfTodo Todo +hi def link alsaconfComment Comment +hi def link alsaconfSpecialChar SpecialChar +hi def link alsaconfString String +hi def link alsaconfSpecial Special +hi def link alsaconfPreProc PreProc +hi def link alsaconfMode Special +hi def link alsaconfKeyword Keyword +hi def link alsaconfVariables Identifier + +let b:current_syntax = "alsaconf" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/amiga.vim b/.config/vim/syntax/amiga.vim new file mode 100644 index 0000000..9402196 --- /dev/null +++ b/.config/vim/syntax/amiga.vim @@ -0,0 +1,89 @@ +" Vim syntax file +" Language: AmigaDos +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Charles E. Campbell +" Last Change: Aug 31, 2016 +" Version: 10 +" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_AMIGA + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" Amiga Devices +syn match amiDev "\(par\|ser\|prt\|con\|nil\):" + +" Amiga aliases and paths +syn match amiAlias "\<[a-zA-Z][a-zA-Z0-9]\+:" +syn match amiAlias "\<[a-zA-Z][a-zA-Z0-9]\+:[a-zA-Z0-9/]*/" + +" strings +syn region amiString start=+"+ end=+"+ oneline contains=@Spell + +" numbers +syn match amiNumber "\<\d\+\>" + +" Logic flow +syn region amiFlow matchgroup=Statement start="if" matchgroup=Statement end="endif" contains=ALL +syn keyword amiFlow skip endskip +syn match amiError "else\|endif" +syn keyword amiElse contained else + +syn keyword amiTest contained not warn error fail eq gt ge val exists + +" echo exception +syn region amiEcho matchgroup=Statement start="\" end="$" oneline contains=amiComment +syn region amiEcho matchgroup=Statement start="^\.[bB][rR][aA]" end="$" oneline +syn region amiEcho matchgroup=Statement start="^\.[kK][eE][tT]" end="$" oneline + +" commands +syn keyword amiKey addbuffers copy fault join pointer setdate +syn keyword amiKey addmonitor cpu filenote keyshow printer setenv +syn keyword amiKey alias date fixfonts lab printergfx setfont +syn keyword amiKey ask delete fkey list printfiles setmap +syn keyword amiKey assign dir font loadwb prompt setpatch +syn keyword amiKey autopoint diskchange format lock protect sort +syn keyword amiKey avail diskcopy get magtape quit stack +syn keyword amiKey binddrivers diskdoctor getenv makedir relabel status +syn keyword amiKey bindmonitor display graphicdump makelink remrad time +syn keyword amiKey blanker iconedit more rename type +syn keyword amiKey break ed icontrol mount resident unalias +syn keyword amiKey calculator edit iconx newcli run unset +syn keyword amiKey cd endcli ihelp newshell say unsetenv +syn keyword amiKey changetaskpri endshell info nocapslock screenmode version +syn keyword amiKey clock eval initprinter nofastmem search wait +syn keyword amiKey cmd exchange input overscan serial wbpattern +syn keyword amiKey colors execute install palette set which +syn keyword amiKey conclip failat iprefs path setclock why + +" comments +syn cluster amiCommentGroup contains=amiTodo,@Spell +syn case ignore +syn keyword amiTodo contained todo +syn case match +syn match amiComment ";.*$" contains=amiCommentGroup + +" sync +syn sync lines=50 + +" Define the default highlighting. +if !exists("skip_amiga_syntax_inits") + + hi def link amiAlias Type + hi def link amiComment Comment + hi def link amiDev Type + hi def link amiEcho String + hi def link amiElse Statement + hi def link amiError Error + hi def link amiKey Statement + hi def link amiNumber Number + hi def link amiString String + hi def link amiTest Special + +endif +let b:current_syntax = "amiga" + +" vim:ts=15 diff --git a/.config/vim/syntax/aml.vim b/.config/vim/syntax/aml.vim new file mode 100644 index 0000000..46621ed --- /dev/null +++ b/.config/vim/syntax/aml.vim @@ -0,0 +1,144 @@ +" Vim syntax file +" Language: AML (ARC/INFO Arc Macro Language) +" Written By: Nikki Knuit +" Maintainer: Todd Glover +" Last Change: 2001 May 10 + +" FUTURE CODING: Bold application commands after &sys, &tty +" Only highlight aml Functions at the beginning +" of [], in order to avoid -read highlighted, +" or [quote] strings highlighted + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" ARC, ARCEDIT, ARCPLOT, LIBRARIAN, GRID, SCHEMAEDIT reserved words, +" defined as keywords. + +syn keyword amlArcCmd contained 2button abb abb[reviations] abs ac acos acosh add addc[ogoatt] addcogoatt addf[eatureclass] addh[istory] addi addim[age] addindexatt addit[em] additem addressb[uild] addressc[reate] addresse[rrors] addressedit addressm[atch] addressp[arse] addresst[est] addro[utemeasure] addroutemeasure addte[xt] addto[stack] addw[orktable] addx[y] adj[ust] adm[inlicense] adr[ggrid] ads adsa[rc] ae af ag[gregate] ai ai[request] airequest al alia[s] alig[n] alt[erarchive] am[sarc] and annoa[lignment] annoadd annocapture annocl[ip] annoco[verage] annocurve annoe[dit] annoedit annof annofeature annofit annoitem annola[yer] annole[vel] annolevel annoline annooffset annop[osition] annoplace annos[ize] annoselectfeatur annoset annosum annosymbol annot annot[ext] annotext annotype ao ap apm[ode] app[end] arc arcad[s] arcar[rows] arcc[ogo] arcdf[ad] arcdi[me] arcdl[g] arcdx[f] arced[it] arcedit arcen[dtext] arcf[ont] arcigd[s] arcige[s] arcla[bel] arcli[nes] arcma[rkers] arcmo[ss] +syn keyword amlArcCmd contained arcpl[ot] arcplot arcpo[int] arcr[oute] arcs arcsc[itex] arcse[ction] arcsh[ape] arcsl[f] arcsn[ap] arcsp[ot] arcte[xt] arctig[er] arctin arcto[ols] arctools arcty[pe] area areaq[uery] arm arrow arrows[ize] arrowt[ype] as asc asciig[rid] asciih[elp] asciihelp asco[nnect] asconnect asd asda[tabase] asdi[sconnect] asdisconnect asel[ect] asex[ecute] asf asin asinh asp[ect] asr[eadlocks] ast[race] at atan atan2 atanh atusage aud[ittrail] autoi[ncrement] autol[ink] axis axish[atch] axisl[abels] axisr[uler] axist[ext] bac[klocksymbol] backcoverage backenvironment backnodeangleite backsymbolitem backtextitem base[select] basi[n] bat[ch] bc be be[lls] blackout blockmaj[ority] blockmax blockmea[n] blockmed[ian] blockmin blockmino[rity] blockr[ange] blockst[d] blocksu[m] blockv[ariety] bnai bou[ndaryclean] box br[ief] bsi bti buf[fer] bug[form] bugform build builds[ta] buildv[at] calco[mp] calcomp calcu[late] cali[brateroutes] calibrateroutes can[d] cartr[ead] cartread +syn keyword amlArcCmd contained cartw[rite] cartwrite cei[l] cel[lvalue] cen[troidlabels] cgm cgme[scape] cha[nge] checkin checkinrel checkout checkoutrel chm[od] chown chownt[ransaction] chowntran chowntransaction ci ci[rcle] cir class classp[rob] classs[ig] classsample clean clear clears[elect] clip clipg[raphextent] clipm[apextent] clo[sedatabase] cntvrt co cod[efind] cog[oinverse] cogocom cogoenv cogomenu coll[ocate] color color2b[lue] color2g[reen] color2h[ue] color2r[ed] color2s[at] color2v[al] colorchart coloredit colorh[cbs] colorhcbs colu[mns] comb[ine] comm[ands] commands con connect connectu[ser] cons[ist] conto[ur] contr[olpoints] convertd[oc] convertdoc converti[mage] convertla[yer] convertli[brary] convertr[emap] convertw[orkspace] coo[rdinate] coordinate coordinates copy copyf[eatures] copyi[nfo] copyl[ayer] copyo copyo[ut] copyout copys[tack] copyw[orkspace] copyworkspace cor corr[idor] correlation cos cosh costa[llocation] costb[acklink] costd[istance] costp[ath] cou[ntvertices] +syn keyword amlArcCmd contained countvertices cpw cr create create2[dindex] createa[ttributes] createca[talog] createco[go] createcogo createf[eature] createind[ex] createinf[otable] createlab[els] createlay[er] createli[brary] createn[etindex] creater[emap] creates[ystables] createta[blespace] createti[n] createw[orkspace] createworkspace cs culdesac curs[or] curv[ature] curve3pt cut[fill] cutoff cw cx[or] da dar[cyflow] dat[aset] dba[seinfo] dbmsc dbmsc[ursor] dbmscursor dbmse[xecute] dbmsi[nfo] dbmss[et] de delete deletea[rrows] deletet[ic] deletew[orkspace] deleteworkspace demg[rid] deml[attice] dend[rogram] densify densifya[rc] describe describea[rchive] describel[attice] describeti[n] describetr[ans] describetrans dev df[adarc] dg dif[f] digi[tizer] digt[est] dim[earc] dir dir[ectory] directory disa[blepanzoom] disconnect disconnectu[ser] disp disp[lay] display dissolve dissolvee[vents] dissolveevents dista[nce] distr[ibutebuild] div dl[garc] do doce[ll] docu[ment] document dogroup drag +syn keyword amlArcCmd contained draw drawenvironment draworder draws[ig] drawselect drawt[raverses] drawz[oneshape] drop2[dindex] dropa[rchive] dropfeaturec[lass] dropfeatures dropfr[omstack] dropgroup droph[istory] dropind[ex] dropinf[otable] dropit[em] dropla[yer] droplib[rary] droplin[e] dropline dropn[etindex] dropt[ablespace] dropw[orktable] ds dt[edgrid] dtrans du[plicate] duplicatearcs dw dxf dxfa[rc] dxfi[nfo] dynamicpan dynpan ebe ec ed edg[esnap] edgematch editboundaryerro edit[coverage] editdistance editf editfeature editp[lot] editplot edits[ig] editsymbol ef el[iminate] em[f] en[d] envrst envsav ep[s] eq equ[alto] er[ase] es et et[akarc] euca[llocation] eucdir[ection] eucdis[tance] eval eventa[rc] evente[nds] eventh[atch] eventi[nfo] eventlinee[ndtext] eventlines eventlinet[ext] eventlis[t] eventma[rkers] eventme[nu] eventmenu eventpoint eventpointt[ext] eventse[ction] eventso[urce] eventt[ransform] eventtransform exi[t] exp exp1[0] exp2 expa[nd] expo[rt] exten[d] external externala[ll] +syn keyword amlArcCmd contained fd[convert] featuregroup fg fie[lddata] file fill filt[er] fix[ownership] flip flipa[ngle] float floatg[rid] floo[r] flowa[ccumulation] flowd[irection] flowl[ength] fm[od] focalf[low] focalmaj[ority] focalmax focalmea[n] focalmed[ian] focalmin focalmino[rity] focalr[ange] focalst[d] focalsu[m] focalv[ariety] fonta[rc] fontco[py] fontcr[eate] fontd[elete] fontdump fontl[oad] fontload forc[e] form[edit] formedit forms fr[equency] ge geary general[ize] generat[e] gerbera[rc] gerberr[ead] gerberread gerberw[rite] gerberwrite get getz[factor] gi gi[rasarc] gnds grai[n] graphb[ar] graphe[xtent] graphi[cs] graphicimage graphicview graphlim[its] graphlin[e] graphp[oint] graphs[hade] gray[shade] gre[aterthan] grid grida[scii] gridcl[ip] gridclip gridco[mposite] griddesk[ew] griddesp[eckle] griddi[rection] gride[dit] gridfli[p] gridflo[at] gridim[age] gridin[sert] gridl[ine] gridma[jority] gridmi[rror] gridmo[ss] gridn[et] gridnodatasymbol gridpa[int] gridpoi[nt] gridpol[y] +syn keyword amlArcCmd contained gridq[uery] gridr[otate] gridshad[es] gridshap[e] gridshi[ft] gridw[arp] group groupb[y] gt gv gv[tolerance] ha[rdcopy] he[lp] help hid[densymbol] hig[hlow] hil[lshade] his[togram] historicalview ho[ldadjust] hpgl hpgl2 hsv2b[lue] hsv2g[reen] hsv2r[ed] ht[ml] hview ia ided[it] identif[y] identit[y] idw if igdsa[rc] igdsi[nfo] ige[sarc] il[lustrator] illustrator image imageg[rid] imagep[lot] imageplot imageview imp[ort] in index indexi[tem] info infodba[se] infodbm[s] infof[ile] init90[00] init9100 init9100b init91[00] init95[00] int intersect intersectarcs intersecte[rr] isn[ull] iso[cluster] it[ems] iview j[oinitem] join keeps keepselect keyan[gle] keyar[ea] keyb[ox] keyf[orms] keyl[ine] keym keym[arker] keymap keyp[osition] keyse[paration] keysh[ade] keyspot kill killm[ap] kr[iging] la labela[ngle] labele[rrors] labelm[arkers] labels labelsc[ale] labelsp[ot] labelt[ext] lal latticecl[ip] latticeco[ntour] latticed[em] latticem[erge] latticemarkers latticeo[perate] +syn keyword amlArcCmd contained latticep[oly] latticerep[lace] latticeres[ample] lattices[pot] latticet[in] latticetext layer layera[nno] layerca[lculate] layerco[lumns] layerde[lete] layerdo[ts] layerdr[aw] layere[xport] layerf[ilter] layerid[entify] layerim[port] layerio[mode] layerli[st] layerloc[k] layerlog[file] layerq[uery] layerse[arch] layersp[ot] layert[ext] lc ldbmst le leadera[rrows] leaders leadersy[mbol] leadert[olerance] len[gth] les[sthan] lf lg lh li lib librari[an] library limitadjust limitautolink line line2pt linea[djustment] linecl[osureangle] linecolor linecolorr[amp] linecopy linecopyl[ayer] linedelete linedeletel[ayer] lineden[sity] linedir[ection] linedis[t] lineedit lineg[rid] lineh[ollow] lineinf[o] lineint[erval] linel[ayer] linelist linem[iterangle] lineo[ffset] linepa[ttern] linepe[n] linepu[t] linesa[ve] linesc[ale] linese[t] linesi[ze] linest[ats] linesy[mbol] linete[mplate] +syn keyword amlArcCmd contained linety[pe] link[s] linkfeatures list listarchives listatt listc[overages] listcoverages listdbmstables listg[rids] listgrids listhistory listi[mages] listimages listinfotables listlayers listlibraries listo[utput] listse[lect] listst[acks] liststacks listtablespaces listti[ns] listtins listtr[averses] listtran listtransactions listw[orkspaces] listworkspaces lit ll ll[sfit] lla lm ln load loada[djacent] loadcolormap locko[nly] locks[ymbol] log log1[0] log2 logf[ile] logg[ing] loo[kup] lot[area] lp[os] lstk lt lts lw madditem majority majorityf[ilter] makere[gion] makero[ute] makese[ction] makest[ack] mal[ign] map mapa[ngle] mape[xtent] mapextent mapi[nfo] mapj[oin] mapl[imits] mappo[sition] mappr[ojection] mapsc[ale] mapsh[ift] mapu[nits] mapw[arp] mapz[oom] marker markera[ngle] markercolor markercolorr[amp] markercopy markercopyl[ayer] markerdelete markerdeletel[aye] markeredit markerf[ont] markeri[nfo] markerl[ayer] markerlist markerm[ask] markero[ffset] +syn keyword amlArcCmd contained markerpa[ttern] markerpe[n] markerpu[t] markersa[ve] markersc[ale] markerse[t] markersi[ze] markersy[mbol] mas[elect] matchc[over] matchn[ode] max mb[egin] mc[opy] md[elete] me mean measure measurer[oute] measureroute med mend menu[cover] menuedit menv[ironment] merge mergeh[istory] mergev[at] mfi[t] mfr[esh] mg[roup] miadsa[rc] miadsr[ead] miadsread min minf[o] mino[rity] mir[ror] mitems mjoin ml[classify] mma[sk] mmo[ve] mn[select] mod mor[der] moran mosa[ic] mossa[rc] mossg[rid] move movee[nd] movei[tem] mp[osition] mr mr[otate] msc[ale] mse[lect] mselect mt[olerance] mu[nselect] multcurve multinv multipleadditem multipleitems multiplejoin multipleselect multprop mw[ho] nai ne near neatline neatlineg[rid] neatlineh[atch] neatlinel[abels] neatlinet[ics] new next ni[bble] nodeangleitem nodec[olor] nodee[rrors] nodem[arkers] nodep[oint] nodes nodesi[ze] nodesn[ap] nodesp[ot] nodet[ext] nor[mal] not ns[elect] oe ogrid ogridt[ool] oldwindow oo[ps] op[endatabase] or +syn keyword amlArcCmd contained osymbol over overflow overflowa[rea] overflowp[osition] overflows[eparati] overl[ayevents] overlapsymbol overlayevents overp[ost] pagee[xtent] pages[ize] pageu[nits] pal[info] pan panview par[ticletrack] patc[h] path[distance] pe[nsize] pi[ck] pli[st] plot plotcopy plotg[erber] ploti[con] plotmany plotpanel plotsc[itex] plotsi[f] pointde[nsity] pointdist pointdista[nce] pointdo[ts] pointg[rid] pointi[nterp] pointm[arkers] pointn[ode] points pointsp[ot] pointst[ats] pointt[ext] polygonb[ordertex] polygond[ots] polygone[vents] polygonevents polygonl[ines] polygons polygonsh[ades] polygonsi[zelimit] polygonsp[ot] polygont[ext] polygr[id] polyr[egion] pop[ularity] por[ouspuff] pos pos[tscript] positions postscript pow prec[ision] prep[are] princ[omp] print product producti[nfo] project projectcom[pare] projectcop[y] projectd[efine] pul[litems] pur[gehistory] put pv q q[uit] quit rand rang[e] rank rb rc re readg[raphic] reads[elect] reb[ox] recl[ass] recoverdb rect[ify] +syn keyword amlArcCmd contained red[o] refreshview regionb[uffer] regioncla[ss] regioncle[an] regiondi[ssolve] regiondo[ts] regione[rrors] regiong[roup] regionj[oin] regionl[ines] regionpoly regionpolyc[ount] regionpolycount regionpolyl[ist] regionpolylist regionq[uery] regions regionse[lect] regionsh[ades] regionsp[ot] regiont[ext] regionxa[rea] regionxarea regionxt[ab] regionxtab register registerd[bms] regr[ession] reindex rej[ects] rela[te] rele[ase] rem remapgrid reme[asure] remo[vescalar] remove removeback removecover removeedit removesnap removetransfer rename renamew[orkspace] renameworkspace reno[de] rep[lace] reposition resa[mple] resel[ect] reset resh[ape] restore restorearce[dit] restorearch[ive] resu[me] rgb2h[ue] rgb2s[at] rgb2v[al] rotate rotatep[lot] routea[rc] routeends routeendt[ext] routeer[rors] routeev[entspot] routeh[atch] routel[ines] routes routesp[ot] routest[ats] routet[ext] rp rs rt rt[l] rtl rv rw sa sai sample samples[ig] sav[e] savecolormap sc scal[ar] scat[tergram] +syn keyword amlArcCmd contained scenefog sceneformat scenehaze sceneoversample sceneroll scenesave scenesize scenesky scitexl[ine] scitexpoi[nt] scitexpol[y] scitexr[ead] scitexread scitexw[rite] scitexwrite sco screenr[estore] screens[ave] sd sds sdtse[xport] sdtsim[port] sdtsin[fo] sdtsl[ist] se sea[rchtolerance] sectiona[rc] sectionends sectionendt[ext] sectionh[atch] sectionl[ines] sections sectionsn[ap] sectionsp[ot] sectiont[ext] sel select selectb[ox] selectc[ircle] selectg[et] selectm[ask] selectmode selectpoi[nt] selectpol[ygon] selectpu[t] selectt[ype] selectw[ithin] semivariogram sep[arator] separator ser[verstatus] setan[gle] setar[row] setce[ll] setcoa[lesce] setcon[nectinfo] setd[bmscheckin] setdrawsymbol sete[ditmode] setincrement setm[ask] setn[ull] setools setreference setsymbol setturn setw[indow] sext sf sfmt sfo sha shade shadea[ngle] shadeb[ackcolor] shadecolor shadecolorr[amp] shadecopy shadecopyl[ayer] shadedelete shadedeletel[ayer] shadeedit shadegrid shadei[nfo] shadela[yer] +syn keyword amlArcCmd contained shadeli[nepattern] shadelist shadeo[ffset] shadepa[ttern] shadepe[n] shadepu[t] shadesa[ve] shadesc[ale] shadesep[aration] shadeset shadesi[ze] shadesy[mbol] shadet[ype] shapea[rc] shapef[ile] shapeg[rid] shi[ft] show showconstants showe[ditmode] shr[ink] si sin sinfo sing[leuser] sinh sink sit[e] sl slf[arc] sli[ce] slo[pe] sm smartanno snap snapc[over] snapcover snapcoverage snapenvironment snapfeatures snapitems snapo[rder] snappi[ng] snappo[ur] so[rt] sobs sos spi[der] spiraltrans spline splinem[ethod] split spot spoto[ffset] spots[ize] sproj sqr sqrt sra sre srl ss ssc ssh ssi ssky ssz sta stackh[istogram] stackprofile stacksc[attergram] stackshade stackst[ats] stati[stics] statu[s] statuscogo std stra[ighten] streamline streamlink streamo[rder] stri[pmap] subm[it] subs[elect] sum surface surfaceabbrev surfacecontours surfacedefaults surfacedrape surfaceextent surfaceinfo surfacel[ength] surfacelimits surfacemarker surfacemenu surfaceobserver surfaceprofile +syn keyword amlArcCmd contained surfaceprojectio surfacerange surfaceresolutio surfacesave surfacescene surfaceshade surfacesighting surfacetarget surfacevalue surfaceviewfield surfaceviewshed surfacevisibility surfacexsection surfacezoom surfacezscale sv svfd svs sxs symboldump symboli[tem] symbolsa[ve] symbolsc[ale] symbolse[t] symbolset sz tab[les] tal[ly] tan tanh tc te tes[t] text textal[ignment] textan[gle] textcolor textcolorr[amp] textcop[y] textde[lete] textdi[rection] textedit textfil[e] textfit textfo[nt] textin[fo] textit[em] textj[ustificatio] textlist textm[ask] texto[ffset] textpe[n] textpr[ecision] textpu[t] textq[uality] textsa[ve] textsc[ale] textse[t] textset textsi[ze] textsl[ant] textspa[cing] textspl[ine] textst[yle] textsy[mbol] tf th thie[ssen] thin ti tics tict[ext] tigera[rc] tigert[ool] tigertool til[es] timped tin tina[rc] tinc[ontour] tinerrors tinhull tinl[attice] tinlines tinmarkers tins[pot] tinshades tintext tinv[rml] tl tm tol[erance] top[ogrid] topogridtool +syn keyword amlArcCmd contained transa[ction] transfe[r] transfercoverage transferfeature transferitems transfersymbol transfo[rm] travrst travsav tre[nd] ts tsy tt tur[ntable] turnimpedance tut[orial] una[ry] unde[lete] undo ungenerate ungeneratet[in] unio[n] unit[s] unr[egisterdbms] unse[lect] unsp[lit] update updatei[nfoschema] updatel[abels] upo[s] us[age] v va[riety] vcgl vcgl2 veri[fy] vers[ion] vertex viewrst viewsav vip visd[ecode] visdecode vise[ncode] visencode visi[bility] vo[lume] vpfe[xport] vpfi[mport] vpfl[ist] vpft[ile] w war[p] wat[ershed] weedd[raw] weedo[perator] weedt[olerance] weedtolerance whe[re] whi[le] who wi[ndows] wm[f] wo[rkspace] workspace writec[andidates] writeg[raphic] writes[elect] wt x[or] ze[ta] zeta zi zo zonala[rea] zonalc[entroid] zonalf[ill] zonalg[eometry] zonalmaj[ority] zonalmax zonalmea[n] zonalmed[ian] zonalmin zonalmino[rity] zonalp[erimeter] zonalr[ange] zonalsta[ts] zonalstd zonalsu[m] zonalt[hickness] zonalv[ariety] zoomview zv + +" FORMEDIT reserved words, defined as keywords. + +syn keyword amlFormedCmd contained button choice display help input slider text + +" TABLES reserved words, defined as keywords. + +syn keyword amlTabCmd contained add additem alter asciihelp aselect at calc calculate change commands commit copy define directory dropindex dropitem erase external get help indexitem items kill list move nselect purge quit redefine rename reselect rollback save select show sort statistics unload update usagecontained + +" INFO reserved words, defined as keywords. + +syn keyword amlInfoCmd contained accept add adir alter dialog alter alt directory aret arithmetic expressions aselect automatic return calculate cchr change options change comi cominput commands list como comoutput compile concatenate controlling defaults copy cursor data delete data entry data manipulate data retrieval data update date format datafile create datafile management decode define delimiter dfmt directory management directory display do doend documentation done end environment erase execute exiting expand export external fc files first format forms control get goto help import input form ipf internal item types items label lchar list logical expressions log merge modify options modify move next nselect output password prif print programming program protect purge query quit recase redefine relate relate release notes remark rename report options reporting report reselect reserved words restrictions run save security select set sleep sort special form spool stop items system variables take terminal types terminal time topics list type update upf + +" VTRACE reserved words, defined as keywords. + +syn keyword amlVtrCmd contained add al arcscan arrowlength arrowwidth as aw backtrack branch bt cj clearjunction commands cs dash endofline endofsession eol eos fan fg foreground gap generalizetolerance gtol help hole js junctionsensitivity linesymbol linevariation linewidth ls lv lw markersymbol mode ms raster regionofinterest reset restore retrace roi save searchradius skip sr sta status stc std str straightenangle straightencorner straightendistance straightenrange vt vtrace + +" The AML reserved words, defined as keywords. + +syn keyword amlFunction contained abs access acos after angrad asin atan before calc close copy cos cover coverage cvtdistance date delete dignum dir directory entryname exist[s] exp extract file filelist format formatdate full getchar getchoice getcover getdatabase getdeflayers getfile getgrid getimage getitem getlayercols getlibrary getstack getsymbol gettin getunique iacclose iacconnect iacdisconnect iacopen iacrequest index indexed info invangle invdistance iteminfo joinfile keyword length listfile listitem listunique locase log max menu min mod noecho null okangle okdistance open pathname prefix query quote quoteexists r radang random read rename response round scratchname search show sin sort sqrt subst substr suffix tan task token translate trim truncate type unquote upcase username value variable verify write + +syn keyword amlDir contained abbreviations above all aml amlpath append arc args atool brief by call canvas cc center cl codepage commands conv_watch_to_aml coordinates cr create current cursor cwta dalines data date_format delete delvar describe dfmt digitizer display do doend dv echo else enable encode encrypt end error expansion fail file flushpoints force form format frame fullscreen function getlastpoint getpoint goto iacreturn if ignore info inform key keypad label lc left lf lg list listchar listfiles listglobal listheader listlocal listprogram listvar ll lp lr lv map matrix menu menupath menutype mess message[s] modal mouse nopaging off on others page pause pinaction popup position pt pulldown push pushpoint r repeat return right routine run runwatch rw screen seconds select self setchar severity show sidebar single size staggered station stop stripe sys system tablet tb terminal test then thread to top translate tty ty type uc ul until ur usage w warning watch when while window workspace + +syn keyword amlDir2 contained delvar dv s set setvar sv + +syn keyword amlOutput contained inform warning error pause stop tty ty type + + +" AML Directives: +syn match amlDirSym "&" +syn match amlDirective "&[a-zA-Z]*" contains=amlDir,amlDir2,amlDirSym + +" AML Functions +syn region amlFunc start="\[ *[a-zA-Z]*" end="\]" contains=amlFunction,amlVar +syn match amlFunc2 "\[.*\[.*\].*\]" contains=amlFunction,amlVar + +" Numbers: +"syn match amlNumber "-\=\<[0-9]*\.\=[0-9_]\>" + +" Quoted Strings: +syn region amlQuote start=+"+ skip=+\\"+ end=+"+ contains=amlVar +syn region amlQuote start=+'+ skip=+\\'+ end=+'+ + +" ARC Application Commands only selected at the beginning of the line, +" or after a one line &if &then statement +syn match amlAppCmd "^ *[a-zA-Z]*" contains=amlArcCmd,amlInfoCmd,amlTabCmd,amlVtrCmd,amlFormedCmd +syn region amlAppCmd start="&then" end="$" contains=amlArcCmd,amlFormedCmd,amlInfoCmd,amlTabCmd,amlVtrCmd,amlFunction,amlDirective,amlVar2,amlSkip,amlVar,amlComment + +" Variables +syn region amlVar start="%" end="%" +syn region amlVar start="%" end="%" contained +syn match amlVar2 "&s [a-zA-Z_.0-9]*" contains=amlDir2,amlDirSym +syn match amlVar2 "&sv [a-zA-Z_.0-9]*" contains=amlDir2,amlDirSym +syn match amlVar2 "&set [a-zA-Z_.0-9]*" contains=amlDir2,amlDirSym +syn match amlVar2 "&setvar [a-zA-Z_.0-9]*" contains=amlDir2,amlDirSym +syn match amlVar2 "&dv [a-zA-Z_.0-9]*" contains=amlDir2,amlDirSym +syn match amlVar2 "&delvar [a-zA-Z_.0-9]*" contains=amlDir2,amlDirSym + +" Formedit 2 word commands +syn match amlFormed "^ *check box" +syn match amlFormed "^ *data list" +syn match amlFormed "^ *symbol list" + +" Tables 2 word commands +syn match amlTab "^ *q stop" +syn match amlTab "^ *quit stop" + +" Comments: +syn match amlComment "/\*.*" + +" Regions for skipping over (not highlighting) program output strings: +syn region amlSkip matchgroup=amlOutput start="&call" end="$" contains=amlVar +syn region amlSkip matchgroup=amlOutput start="&routine" end="$" contains=amlVar +syn region amlSkip matchgroup=amlOutput start="&inform" end="$" contains=amlVar +syn region amlSkip matchgroup=amlOutput start="&return &inform" end="$" contains=amlVar +syn region amlSkip matchgroup=amlOutput start="&return &warning" end="$" contains=amlVar +syn region amlSkip matchgroup=amlOutput start="&return &error" end="$" contains=amlVar +syn region amlSkip matchgroup=amlOutput start="&pause" end="$" contains=amlVar +syn region amlSkip matchgroup=amlOutput start="&stop" end="$" contains=amlVar +syn region amlSkip matchgroup=amlOutput start="&tty" end="$" contains=amlVar +syn region amlSkip matchgroup=amlOutput start="&ty" end="$" contains=amlVar +syn region amlSkip matchgroup=amlOutput start="&typ" end="$" contains=amlVar +syn region amlSkip matchgroup=amlOutput start="&type" end="$" contains=amlVar + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link amlComment Comment +hi def link amlNumber Number +hi def link amlQuote String +hi def link amlVar Identifier +hi def link amlVar2 Identifier +hi def link amlFunction PreProc +hi def link amlDir Statement +hi def link amlDir2 Statement +hi def link amlDirSym Statement +hi def link amlOutput Statement +hi def link amlArcCmd ModeMsg +hi def link amlFormedCmd amlArcCmd +hi def link amlTabCmd amlArcCmd +hi def link amlInfoCmd amlArcCmd +hi def link amlVtrCmd amlArcCmd +hi def link amlFormed amlArcCmd +hi def link amlTab amlArcCmd + + +let b:current_syntax = "aml" diff --git a/.config/vim/syntax/ampl.vim b/.config/vim/syntax/ampl.vim new file mode 100644 index 0000000..ad78f7d --- /dev/null +++ b/.config/vim/syntax/ampl.vim @@ -0,0 +1,140 @@ +" Language: ampl (A Mathematical Programming Language) +" Maintainer: Krief David or +" Last Change: 2003 May 11 + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + + + + +"-- +syn match amplEntityKeyword "\(subject to\)\|\(subj to\)\|\(s\.t\.\)" +syn keyword amplEntityKeyword minimize maximize objective + +syn keyword amplEntityKeyword coeff coef cover obj default +syn keyword amplEntityKeyword from to to_come net_in net_out +syn keyword amplEntityKeyword dimen dimension + + + +"-- +syn keyword amplType integer binary set param var +syn keyword amplType node ordered circular reversed symbolic +syn keyword amplType arc + + + +"-- +syn keyword amplStatement check close \display drop include +syn keyword amplStatement print printf quit reset restore +syn keyword amplStatement solve update write shell model +syn keyword amplStatement data option let solution fix +syn keyword amplStatement unfix end function pipe format + + + +"-- +syn keyword amplConditional if then else and or +syn keyword amplConditional exists forall in not within + + + +"-- +syn keyword amplRepeat while repeat for + + + +"-- +syn keyword amplOperators union diff difference symdiff sum +syn keyword amplOperators inter intersect intersection cross setof +syn keyword amplOperators by less mod div product +"syn keyword amplOperators min max +"conflict between functions max, min and operators max, min + +syn match amplBasicOperators "||\|<=\|==\|\^\|<\|=\|!\|-\|\.\.\|:=" +syn match amplBasicOperators "&&\|>=\|!=\|\*\|>\|:\|/\|+\|\*\*" + + + + +"-- +syn match amplComment "\#.*" +syn region amplComment start=+\/\*+ end=+\*\/+ + +syn region amplStrings start=+\'+ skip=+\\'+ end=+\'+ +syn region amplStrings start=+\"+ skip=+\\"+ end=+\"+ + +syn match amplNumerics "[+-]\=\<\d\+\(\.\d\+\)\=\([dDeE][-+]\=\d\+\)\=\>" +syn match amplNumerics "[+-]\=Infinity" + + +"-- +syn keyword amplSetFunction card next nextw prev prevw +syn keyword amplSetFunction first last member ord ord0 + +syn keyword amplBuiltInFunction abs acos acosh alias asin +syn keyword amplBuiltInFunction asinh atan atan2 atanh ceil +syn keyword amplBuiltInFunction cos exp floor log log10 +syn keyword amplBuiltInFunction max min precision round sin +syn keyword amplBuiltInFunction sinh sqrt tan tanh trunc + +syn keyword amplRandomGenerator Beta Cauchy Exponential Gamma Irand224 +syn keyword amplRandomGenerator Normal Poisson Uniform Uniform01 + + + +"-- to highlight the 'dot-suffixes' +syn match amplDotSuffix "\h\w*\.\(lb\|ub\)"hs=e-2 +syn match amplDotSuffix "\h\w*\.\(lb0\|lb1\|lb2\|lrc\|ub0\)"hs=e-3 +syn match amplDotSuffix "\h\w*\.\(ub1\|ub2\|urc\|val\|lbs\|ubs\)"hs=e-3 +syn match amplDotSuffix "\h\w*\.\(init\|body\|dinit\|dual\)"hs=e-4 +syn match amplDotSuffix "\h\w*\.\(init0\|ldual\|slack\|udual\)"hs=e-5 +syn match amplDotSuffix "\h\w*\.\(lslack\|uslack\|dinit0\)"hs=e-6 + + + +"-- +syn match amplPiecewise "<<\|>>" + + + +"-- Todo. +syn keyword amplTodo contained TODO FIXME XXX + + + + + + + + + + + +" The default methods for highlighting. Can be overridden later. +hi def link amplEntityKeyword Keyword +hi def link amplType Type +hi def link amplStatement Statement +hi def link amplOperators Operator +hi def link amplBasicOperators Operator +hi def link amplConditional Conditional +hi def link amplRepeat Repeat +hi def link amplStrings String +hi def link amplNumerics Number +hi def link amplSetFunction Function +hi def link amplBuiltInFunction Function +hi def link amplRandomGenerator Function +hi def link amplComment Comment +hi def link amplDotSuffix Special +hi def link amplPiecewise Special + + +let b:current_syntax = "ampl" + +" vim: ts=8 + + diff --git a/.config/vim/syntax/ant.vim b/.config/vim/syntax/ant.vim new file mode 100644 index 0000000..b023123 --- /dev/null +++ b/.config/vim/syntax/ant.vim @@ -0,0 +1,97 @@ +" Vim syntax file +" Language: ANT build file (xml) +" Maintainer: Doug Kearns +" Previous Maintainer: Johannes Zellner +" Last Change: 2024 Jan 27 +" Filenames: build.xml + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:ant_cpo_save = &cpo +set cpo&vim + +runtime! syntax/xml.vim + +syn case ignore + +if !exists('*AntSyntaxScript') + fun AntSyntaxScript(tagname, synfilename) + unlet b:current_syntax + let s:include = expand(":p:h").'/'.a:synfilename + if filereadable(s:include) + exe 'syn include @ant'.a:tagname.' '.s:include + else + exe 'syn include @ant'.a:tagname." $VIMRUNTIME/syntax/".a:synfilename + endif + + exe 'syn region ant'.a:tagname + \." start=#]\\{-}language\\s*=\\s*['\"]".a:tagname."['\"]\\(>\\|[^>]*[^/>]>\\)#" + \.' end=##' + \.' fold' + \.' contains=@ant'.a:tagname.',xmlCdataStart,xmlCdataEnd,xmlTag,xmlEndTag' + \.' keepend' + exe 'syn cluster xmlRegionHook add=ant'.a:tagname + endfun +endif + +" TODO: add more script languages here ? +call AntSyntaxScript('javascript', 'javascript.vim') +call AntSyntaxScript('jpython', 'python.vim') + + +syn cluster xmlTagHook add=antElement + +syn keyword antElement WsdlToDotnet addfiles and ant antcall antstructure apply archives arg argument +syn keyword antElement assertions attrib attribute available basename bcc blgenclient bootclasspath +syn keyword antElement borland bottom buildnumber buildpath buildpathelement bunzip2 bzip2 cab +syn keyword antElement catalogpath cc cccheckin cccheckout cclock ccmcheckin ccmcheckintask ccmcheckout +syn keyword antElement ccmcreatetask ccmkattr ccmkbl ccmkdir ccmkelem ccmklabel ccmklbtype +syn keyword antElement ccmreconfigure ccrmtype ccuncheckout ccunlock ccupdate checksum chgrp chmod +syn keyword antElement chown classconstants classes classfileset classpath commandline comment +syn keyword antElement compilerarg compilerclasspath concat concatfilter condition copy copydir +syn keyword antElement copyfile coveragepath csc custom cvs cvschangelog cvspass cvstagdiff cvsversion +syn keyword antElement daemons date defaultexcludes define delete deletecharacters deltree depend +syn keyword antElement depends dependset depth description different dirname dirset disable dname +syn keyword antElement doclet doctitle dtd ear echo echoproperties ejbjar element enable entity entry +syn keyword antElement env equals escapeunicode exclude excludepackage excludesfile exec execon +syn keyword antElement existing expandproperties extdirs extension extensionSet extensionset factory +syn keyword antElement fail filelist filename filepath fileset filesmatch filetokenizer filter +syn keyword antElement filterchain filterreader filters filterset filtersfile fixcrlf footer format +syn keyword antElement from ftp generic genkey get gjdoc grant group gunzip gzip header headfilter http +syn keyword antElement ignoreblank ilasm ildasm import importtypelib include includesfile input iplanet +syn keyword antElement iplanet-ejbc isfalse isreference isset istrue jar jarlib-available +syn keyword antElement jarlib-manifest jarlib-resolve java javac javacc javadoc javadoc2 jboss jdepend +syn keyword antElement jjdoc jjtree jlink jonas jpcoverage jpcovmerge jpcovreport jsharpc jspc +syn keyword antElement junitreport jvmarg lib libfileset linetokenizer link loadfile loadproperties +syn keyword antElement location macrodef mail majority manifest map mapper marker mergefiles message +syn keyword antElement metainf method mimemail mkdir mmetrics modified move mparse none not options or +syn keyword antElement os outputproperty package packageset parallel param patch path pathconvert +syn keyword antElement pathelement patternset permissions prefixlines present presetdef project +syn keyword antElement property propertyfile propertyref propertyset pvcs pvcsproject record reference +syn keyword antElement regexp rename renameext replace replacefilter replaceregex replaceregexp +syn keyword antElement replacestring replacetoken replacetokens replacevalue replyto report resource +syn keyword antElement revoke rmic root rootfileset rpm scp section selector sequential serverdeploy +syn keyword antElement setproxy signjar size sleep socket soscheckin soscheckout sosget soslabel source +syn keyword antElement sourcepath sql src srcfile srcfilelist srcfiles srcfileset sshexec stcheckin +syn keyword antElement stcheckout stlabel stlist stringtokenizer stripjavacomments striplinebreaks +syn keyword antElement striplinecomments style subant substitution support symlink sync sysproperty +syn keyword antElement syspropertyset tabstospaces tag taglet tailfilter tar tarfileset target +syn keyword antElement targetfile targetfilelist targetfileset taskdef tempfile test testlet text title +syn keyword antElement to token tokenfilter touch transaction translate triggers trim tstamp type +syn keyword antElement typedef unjar untar unwar unzip uptodate url user vbc vssadd vsscheckin +syn keyword antElement vsscheckout vsscp vsscreate vssget vsshistory vsslabel waitfor war wasclasspath +syn keyword antElement webapp webinf weblogic weblogictoplink websphere whichresource wlclasspath +syn keyword antElement wljspc wsdltodotnet xmlcatalog xmlproperty xmlvalidate xslt zip zipfileset +syn keyword antElement zipgroupfileset + +hi def link antElement Statement + +let b:current_syntax = "ant" + +let &cpo = s:ant_cpo_save +unlet s:ant_cpo_save + +" vim: ts=8 diff --git a/.config/vim/syntax/antlr.vim b/.config/vim/syntax/antlr.vim new file mode 100644 index 0000000..9b0b061 --- /dev/null +++ b/.config/vim/syntax/antlr.vim @@ -0,0 +1,54 @@ +" Vim syntax file +" Antlr: ANTLR, Another Tool For Language Recognition +" Maintainer: Mathieu Clabaut +" LastChange: 02 May 2001 +" Original: Comes from JavaCC.vim + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" This syntac file is a first attempt. It is far from perfect... + +" Uses java.vim, and adds a few special things for JavaCC Parser files. +" Those files usually have the extension *.jj + +" source the java.vim file +runtime! syntax/java.vim +unlet b:current_syntax + +"remove catching errors caused by wrong parenthesis (does not work in antlr +"files) (first define them in case they have not been defined in java) +syn match javaParen "--" +syn match javaParenError "--" +syn match javaInParen "--" +syn match javaError2 "--" +syn clear javaParen +syn clear javaParenError +syn clear javaInParen +syn clear javaError2 + +" remove function definitions (they look different) (first define in +" in case it was not defined in java.vim) +"syn match javaFuncDef "--" +"syn clear javaFuncDef +"syn match javaFuncDef "[a-zA-Z][a-zA-Z0-9_. \[\]]*([^-+*/()]*)[ \t]*:" contains=javaType +" syn region javaFuncDef start=+t[a-zA-Z][a-zA-Z0-9_. \[\]]*([^-+*/()]*,[ ]*+ end=+)[ \t]*:+ + +syn keyword antlrPackages options language buildAST +syn match antlrPackages "PARSER_END([^)]*)" +syn match antlrPackages "PARSER_BEGIN([^)]*)" +syn match antlrSpecToken "" +" the dot is necessary as otherwise it will be matched as a keyword. +syn match antlrSpecToken ".LOOKAHEAD("ms=s+1,me=e-1 +syn match antlrSep "[|:]\|\.\." +syn keyword antlrActionToken TOKEN SKIP MORE SPECIAL_TOKEN +syn keyword antlrError DEBUG IGNORE_IN_BNF + +hi def link antlrSep Statement +hi def link antlrPackages Statement + +let b:current_syntax = "antlr" + +" vim: ts=8 diff --git a/.config/vim/syntax/antlr4.vim b/.config/vim/syntax/antlr4.vim new file mode 100644 index 0000000..33cc865 --- /dev/null +++ b/.config/vim/syntax/antlr4.vim @@ -0,0 +1,30 @@ +" Vim syntax file +" Language: ANTLR4, ANother Tool for Language Recognition v4 +" Maintainer: Yinzuo Jiang +" Last Change: 2024 July 09 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Keywords. See https://github.com/antlr/antlr4/blob/4.13.1/doc/lexicon.md +syn keyword antlr4Include import +" https://github.com/antlr/antlr4/blob/4.13.1/doc/options.md +" https://github.com/antlr/antlr4/blob/4.13.1/doc/grammars.md +syn keyword antlr4Structure fragment lexer parser grammar options channels tokens mode +syn keyword antlr4Statement returns locals +syn keyword antlr4Exceptions throws catch finally + +" Comments. +syn keyword antlr4Todo contained TODO FIXME XXX NOTE +syn region antlr4Comment start="//" end="$" contains=antlr4Todo,@Spell +syn region antlr4Comment start="/\*" end="\*/" contains=antlr4Todo,@Spell + +hi def link antlr4Include Include +hi def link antlr4Structure Structure +hi def link antlr4Statement Statement +hi def link antlr4Exceptions Structure +hi def link antlr4Comment Comment + +let b:current_syntax = "antlr4" diff --git a/.config/vim/syntax/apache.vim b/.config/vim/syntax/apache.vim new file mode 100644 index 0000000..65317fd --- /dev/null +++ b/.config/vim/syntax/apache.vim @@ -0,0 +1,205 @@ +" Vim syntax file +" Language: Apache configuration (httpd.conf, srm.conf, access.conf, .htaccess) +" Maintainer: David Necas (Yeti) +" License: This file can be redistribued and/or modified under the same terms +" as Vim itself. +" Last Change: 2024 Nov 24 +" Notes: Last synced with apache-2.4.62, version 1.x is no longer supported +" TODO: see particular FIXME's scattered through the file +" make it really linewise? +" + add `display' where appropriate + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn iskeyword @,48-57,_,192-255,- +syn case ignore + +" Base constructs +syn match apacheComment "^\s*#.*$" contains=apacheFixme +syn match apacheUserID "#-\?\d\+\>" +syn case match +syn keyword apacheFixme FIXME TODO XXX NOT +syn case ignore +syn match apacheAnything "\s[^>]*" contained +syn match apacheError "\w\+" contained +syn region apacheString start=+"+ end=+"+ skip=+\\\\\|\\\"+ oneline + +" Following is to prevent escaped quotes from being parsed as strings. +syn match apacheSkipQuote +\\"+ + +" Core and mpm +syn keyword apacheDeclaration AccessFileName AddDefaultCharset AllowOverride AuthName AuthType ContentDigest DefaultType DocumentRoot ErrorDocument ErrorLog HostNameLookups IdentityCheck Include KeepAlive KeepAliveTimeout LimitRequestBody LimitRequestFields LimitRequestFieldsize LimitRequestLine LogLevel MaxKeepAliveRequests NameVirtualHost Options Require RLimitCPU RLimitMEM RLimitNPROC Satisfy ScriptInterpreterSource ServerAdmin ServerAlias ServerName ServerPath ServerRoot ServerSignature ServerTokens TimeOut UseCanonicalName +syn keyword apacheDeclaration AcceptPathInfo CGIMapExtension EnableMMAP FileETag ForceType LimitXMLRequestBody SetHandler SetInputFilter SetOutputFilter +syn keyword apacheDeclaration AcceptFilter AllowEncodedSlashes EnableSendfile LimitInternalRecursion TraceEnable +syn keyword apacheOption INode MTime Size +syn keyword apacheOption Any All On Off Double EMail DNS Min Minimal OS Prod ProductOnly Full +syn keyword apacheOption emerg alert crit error warn notice info debug +syn keyword apacheOption registry script inetd standalone +syn match apacheOptionOption "[+-]\?\<\(ExecCGI\|FollowSymLinks\|Includes\|IncludesNoExec\|Indexes\|MultiViews\|SymLinksIfOwnerMatch\)\>" +syn keyword apacheOption user group +syn match apacheOption "\" +syn case match +syn keyword apacheMethodOption GET POST PUT DELETE CONNECT OPTIONS TRACE PATCH PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK contained +" Added as suggested by Mikko Koivunalho +syn keyword apacheMethodOption BASELINE-CONTROL CHECKIN CHECKOUT LABEL MERGE MKACTIVITY MKWORKSPACE REPORT UNCHECKOUT UPDATE VERSION-CONTROL contained +syn case ignore +syn match apacheSection "<\/\=\(Directory\|Files\|If\|Else\|Location\|VirtualHost\)[^>]*>" contains=apacheAnything +syn match apacheSection "<\/\=\(RequireAll\|RequireAny\|RequireNone\)>" contains=apacheAnything +syn match apacheLimitSection "<\/\=Limit[^>]*>" contains=apacheLimitSectionKeyword,apacheMethodOption,apacheError +syn keyword apacheLimitSectionKeyword Limit LimitExcept contained +syn match apacheAuthType "AuthType\s.*$" contains=apacheAuthTypeValue +syn keyword apacheAuthTypeValue Basic Digest +syn match apacheAllowOverride "AllowOverride\s.*$" contains=apacheAllowOverrideValue,apacheComment +syn keyword apacheAllowOverrideValue AuthConfig FileInfo Indexes Limit Options contained +syn keyword apacheDeclaration CoreDumpDirectory EnableExceptionHook GracefulShutdownTimeout Group Listen ListenBacklog LockFile MaxClients MaxMemFree MaxRequestsPerChild MaxSpareThreads MaxSpareThreadsPerChild MinSpareThreads NumServers PidFile ScoreBoardFile SendBufferSize ServerLimit StartServers StartThreads ThreadLimit ThreadsPerChild User +syn keyword apacheDeclaration MaxThreads ThreadStackSize +syn keyword apacheDeclaration Win32DisableAcceptEx +syn keyword apacheDeclaration AssignUserId ChildPerUserId +syn keyword apacheDeclaration AcceptMutex MaxSpareServers MinSpareServers +syn keyword apacheOption flock fcntl sysvsem pthread + +" Modules +syn keyword apacheDeclaration Action Script +syn keyword apacheDeclaration Alias AliasMatch Redirect RedirectMatch RedirectTemp RedirectPermanent ScriptAlias ScriptAliasMatch +syn keyword apacheOption permanent temp seeother gone +syn keyword apacheDeclaration AuthAuthoritative AuthGroupFile AuthUserFile +syn keyword apacheDeclaration AuthBasicAuthoritative AuthBasicProvider +syn keyword apacheDeclaration AuthDigestAlgorithm AuthDigestDomain AuthDigestNcCheck AuthDigestNonceFormat AuthDigestNonceLifetime AuthDigestProvider AuthDigestQop AuthDigestShmemSize +syn keyword apacheOption none auth auth-int MD5 MD5-sess +syn match apacheSection "<\/\=Auth[ntz]ProviderAlias[^>]*>" contains=apacheAnything +syn keyword apacheDeclaration Anonymous Anonymous_Authoritative Anonymous_LogEmail Anonymous_MustGiveEmail Anonymous_NoUserID Anonymous_VerifyEmail +syn keyword apacheDeclaration AuthDBDUserPWQuery AuthDBDUserRealmQuery +syn keyword apacheDeclaration AuthDBMGroupFile AuthDBMAuthoritative +syn keyword apacheDeclaration AuthDBM TypeAuthDBMUserFile +syn keyword apacheOption default SDBM GDBM NDBM DB +syn keyword apacheDeclaration AuthDefaultAuthoritative +syn keyword apacheDeclaration AuthUserFile +syn keyword apacheDeclaration AuthLDAPBindON AuthLDAPEnabled AuthLDAPFrontPageHack AuthLDAPStartTLS +syn keyword apacheDeclaration AuthLDAPBindDN AuthLDAPBindPassword AuthLDAPCharsetConfig AuthLDAPCompareDNOnServer AuthLDAPDereferenceAliases AuthLDAPGroupAttribute AuthLDAPGroupAttributeIsDN AuthLDAPRemoteUserIsDN AuthLDAPUrl AuthzLDAPAuthoritative +syn keyword apacheOption always never searching finding +syn keyword apacheOption ldap-user ldap-group ldap-dn ldap-attribute ldap-filter +syn keyword apacheDeclaration AuthDBMGroupFile AuthzDBMAuthoritative AuthzDBMType +syn keyword apacheDeclaration AuthzDefaultAuthoritative +syn keyword apacheDeclaration AuthGroupFile AuthzGroupFileAuthoritative +syn match apacheAllowDeny "Allow\s\+from.*$" contains=apacheAllowDenyValue,apacheComment +syn match apacheAllowDeny "Deny\s\+from.*$" contains=apacheAllowDenyValue,apacheComment +syn keyword apacheAllowDenyValue All None contained +syn match apacheOrder "^\s*Order\s.*$" contains=apacheOrderValue,apacheComment +syn keyword apacheOrderValue Deny Allow contained +syn keyword apacheDeclaration AuthzOwnerAuthoritative +syn keyword apacheDeclaration AuthzUserAuthoritative +syn keyword apacheDeclaration AddAlt AddAltByEncoding AddAltByType AddDescription AddIcon AddIconByEncoding AddIconByType DefaultIcon HeaderName IndexIgnore IndexOptions IndexOrderDefault ReadmeName +syn keyword apacheDeclaration IndexStyleSheet +syn keyword apacheOption DescriptionWidth FancyIndexing FoldersFirst IconHeight IconsAreLinks IconWidth NameWidth ScanHTMLTitles SuppressColumnSorting SuppressDescription SuppressHTMLPreamble SuppressLastModified SuppressSize TrackModified +syn keyword apacheOption Ascending Descending Name Date Size Description +syn keyword apacheOption HTMLTable SuppressIcon SuppressRules VersionSort XHTML +syn keyword apacheOption IgnoreClient IgnoreCase ShowForbidden SuppresRules +syn keyword apacheDeclaration CacheForceCompletion CacheMaxStreamingBuffer +syn keyword apacheDeclaration CacheDefaultExpire CacheDisable CacheEnable CacheIgnoreCacheControl CacheIgnoreHeaders CacheIgnoreNoLastMod CacheLastModifiedFactor CacheMaxExpire CacheStoreNoStore CacheStorePrivate +syn keyword apacheDeclaration MetaFiles MetaDir MetaSuffix +syn keyword apacheDeclaration ScriptLog ScriptLogLength ScriptLogBuffer +syn keyword apacheDeclaration ScriptStock +syn keyword apacheDeclaration CharsetDefault CharsetOptions CharsetSourceEnc +syn keyword apacheOption DebugLevel ImplicitAdd NoImplicitAdd +syn keyword apacheDeclaration Dav DavDepthInfinity DavMinTimeout +syn keyword apacheDeclaration DavLockDB +syn keyword apacheDeclaration DavGenericLockDB +syn keyword apacheDeclaration DBDExptime DBDKeep DBDMax DBDMin DBDParams DBDPersist DBDPrepareSQL DBDriver +syn keyword apacheDeclaration DeflateCompressionLevel DeflateBufferSize DeflateFilterNote DeflateMemLevel DeflateWindowSize +syn keyword apacheDeclaration DirectoryIndex DirectorySlash +syn keyword apacheDeclaration CacheExpiryCheck CacheGcClean CacheGcDaily CacheGcInterval CacheGcMemUsage CacheGcUnused CacheSize CacheTimeMargin +syn keyword apacheDeclaration CacheDirLength CacheDirLevels CacheMaxFileSize CacheMinFileSize CacheRoot +syn keyword apacheDeclaration DumpIOInput DumpIOOutput +syn keyword apacheDeclaration ProtocolEcho +syn keyword apacheDeclaration PassEnv SetEnv UnsetEnv +syn keyword apacheDeclaration Example +syn keyword apacheDeclaration ExpiresActive ExpiresByType ExpiresDefault +syn keyword apacheDeclaration ExtFilterDefine ExtFilterOptions +syn keyword apacheOption PreservesContentLength DebugLevel LogStderr NoLogStderr +syn match apacheOption "\<\(cmd\|mode\|intype\|outtype\|ftype\|disableenv\|enableenv\)\ze=" +syn keyword apacheDeclaration CacheFile MMapFile +syn keyword apacheDeclaration FilterChain FilterDeclare FilterProtocol FilterProvider FilterTrace +syn keyword apacheDeclaration Header +syn keyword apacheDeclaration RequestHeader +syn keyword apacheOption set unset append add +syn keyword apacheDeclaration IdentityCheck IdentityCheckTimeout +syn keyword apacheDeclaration ImapMenu ImapDefault ImapBase +syn keyword apacheOption none formatted semiformatted unformatted +syn keyword apacheOption nocontent referer error map +syn keyword apacheDeclaration SSIEndTag SSIErrorMsg SSIStartTag SSITimeFormat SSIUndefinedEcho XBitHack +syn keyword apacheOption on off full +syn keyword apacheDeclaration AddModuleInfo +syn keyword apacheDeclaration ISAPIReadAheadBuffer ISAPILogNotSupported ISAPIAppendLogToErrors ISAPIAppendLogToQuery +syn keyword apacheDeclaration ISAPICacheFile ISAIPFakeAsync +syn keyword apacheDeclaration LDAPCertDBPath +syn keyword apacheDeclaration LDAPCacheEntries LDAPCacheTTL LDAPConnectionTimeout LDAPOpCacheEntries LDAPOpCacheTTL LDAPSharedCacheFile LDAPSharedCacheSize LDAPTrustedClientCert LDAPTrustedGlobalCert LDAPTrustedMode LDAPVerifyServerCert +syn keyword apacheOption CA_DER CA_BASE64 CA_CERT7_DB CA_SECMOD CERT_DER CERT_BASE64 CERT_KEY3_DB CERT_NICKNAME CERT_PFX KEY_DER KEY_BASE64 KEY_PFX +syn keyword apacheDeclaration BufferedLogs CookieLog CustomLog LogFormat TransferLog +syn keyword apacheDeclaration ForensicLog +syn keyword apacheDeclaration MCacheMaxObjectCount MCacheMaxObjectSize MCacheMaxStreamingBuffer MCacheMinObjectSize MCacheRemovalAlgorithm MCacheSize +syn keyword apacheDeclaration AddCharset AddEncoding AddHandler AddLanguage AddType DefaultLanguage RemoveEncoding RemoveHandler RemoveType TypesConfig +syn keyword apacheDeclaration AddInputFilter AddOutputFilter ModMimeUsePathInfo MultiviewsMatch RemoveInputFilter RemoveOutputFilter RemoveCharset +syn keyword apacheOption NegotiatedOnly Filters Handlers +syn keyword apacheDeclaration MimeMagicFile +syn keyword apacheDeclaration MMapFile +syn keyword apacheDeclaration CacheNegotiatedDocs LanguagePriority ForceLanguagePriority +syn keyword apacheDeclaration NWSSLTrustedCerts NWSSLUpgradeable SecureListen +syn keyword apacheDeclaration PerlModule PerlRequire PerlTaintCheck PerlWarn +syn keyword apacheDeclaration PerlSetVar PerlSetEnv PerlPassEnv PerlSetupEnv +syn keyword apacheDeclaration PerlInitHandler PerlPostReadRequestHandler PerlHeaderParserHandler +syn keyword apacheDeclaration PerlTransHandler PerlAccessHandler PerlAuthenHandler PerlAuthzHandler +syn keyword apacheDeclaration PerlTypeHandler PerlFixupHandler PerlHandler PerlLogHandler +syn keyword apacheDeclaration PerlCleanupHandler PerlChildInitHandler PerlChildExitHandler +syn keyword apacheDeclaration PerlRestartHandler PerlDispatchHandler +syn keyword apacheDeclaration PerlFreshRestart PerlSendHeader +syn keyword apacheDeclaration php_value php_flag php_admin_value php_admin_flag +syn match apacheSection "<\/\=\(Macro\|MDomain\|Proxy\)[^>]*>" contains=apacheAnything +syn keyword apacheDeclaration AllowCONNECT NoProxy ProxyBadHeader ProxyBlock ProxyDomain ProxyErrorOverride ProxyIOBufferSize ProxyMaxForwards ProxyPass ProxyPassMatch ProxyPassReverse ProxyPassReverseCookieDomain ProxyPassReverseCookiePath ProxyPreserveHost ProxyReceiveBufferSize ProxyRemote ProxyRemoteMatch ProxyRequests ProxyTimeout ProxyVia +syn keyword apacheDeclaration RewriteBase RewriteCond RewriteEngine RewriteLock RewriteLog RewriteLogLevel RewriteMap RewriteOptions RewriteRule +syn keyword apacheOption inherit +syn keyword apacheDeclaration BrowserMatch BrowserMatchNoCase SetEnvIf SetEnvIfNoCase +syn keyword apacheDeclaration LoadFile LoadModule +syn keyword apacheDeclaration CheckSpelling CheckCaseOnly +syn keyword apacheDeclaration SSLCACertificateFile SSLCACertificatePath SSLCADNRequestFile SSLCADNRequestPath SSLCARevocationFile SSLCARevocationPath SSLCertificateChainFile SSLCertificateFile SSLCertificateKeyFile SSLCipherSuite SSLCompression SSLCryptoDevice SSLEngine SSLFIPS SSLHonorCipherOrder SSLInsecureRenegotiation SSLMutex SSLOptions SSLPassPhraseDialog SSLProtocol SSLProxyCACertificateFile SSLProxyCACertificatePath SSLProxyCARevocationFile SSLProxyCARevocationPath SSLProxyCheckPeerCN SSLProxyCheckPeerExpire SSLProxyCipherSuite SSLProxyEngine SSLProxyMachineCertificateChainFile SSLProxyMachineCertificateFile SSLProxyMachineCertificatePath SSLProxyProtocol SSLProxyVerify SSLProxyVerifyDepth SSLRandomSeed SSLRenegBufferSize SSLRequire SSLRequireSSL SSLSessionCache SSLSessionCacheTimeout SSLSessionTicketKeyFile SSLSessionTickets SSLStrictSNIVHostCheck SSLUserName SSLVerifyClient SSLVerifyDepth +syn match apacheOption "[+-]\?\<\(StdEnvVars\|CompatEnvVars\|ExportCertData\|FakeBasicAuth\|StrictRequire\|OptRenegotiate\)\>" +syn keyword apacheOption builtin sem +syn match apacheOption "\(file\|exec\|egd\|dbm\|shm\):" +syn match apacheOption "[+-]\?\<\(SSLv2\|SSLv3\|TLSv1\|kRSA\|kHDr\|kDHd\|kEDH\|aNULL\|aRSA\|aDSS\|aRH\|eNULL\|DES\|3DES\|RC2\|RC4\|IDEA\|MD5\|SHA1\|SHA\|EXP\|EXPORT40\|EXPORT56\|LOW\|MEDIUM\|HIGH\|RSA\|DH\|EDH\|ADH\|DSS\|NULL\)\>" +syn keyword apacheOption optional optional_no_ca +syn keyword apacheDeclaration ExtendedStatus +syn keyword apacheDeclaration SuexecUserGroup +syn keyword apacheDeclaration UserDir +syn keyword apacheDeclaration CookieDomain CookieExpires CookieName CookieStyle CookieTracking +syn keyword apacheOption Netscape Cookie Cookie2 RFC2109 RFC2965 +syn keyword apacheDeclaration VirtualDocumentRoot VirtualDocumentRootIP VirtualScriptAlias VirtualScriptAliasIP +syn keyword apacheDeclaration AcceptErrorsNonFatal AsyncFilter AsyncRequestWorkerFactor AuthBasicFake AuthBasicUseDigestAlgorithm AuthBearerAuthoritative AuthBearerProvider AuthBearerProxy AuthDBMType AuthDBMUserFile AuthFormAuthoritative AuthFormBody AuthFormDisableNoStore AuthFormFakeBasicAuth AuthFormLocation AuthFormLoginRequiredLocation AuthFormLoginSuccessLocation AuthFormLogoutLocation AuthFormMethod AuthFormMimetype AuthFormPassword AuthFormProvider AuthFormSitePassphrase AuthFormSize AuthFormUsername AuthLDAPAuthorizePrefix AuthLDAPBindAuthoritative AuthLDAPCompareAsUser AuthLDAPInitialBindAsUser AuthLDAPInitialBindPattern AuthLDAPMaxSubGroupDepth AuthLDAPRemoteUserAttribute AuthLDAPSearchAsUser AuthLDAPSubGroupAttribute AuthLDAPSubGroupClass AuthLDAPURL AuthMerging AuthnCacheContext AuthnCacheEnable AuthnCacheProvideFor AuthnCacheSOCache AuthnCacheTimeout AuthnzFcgiCheckAuthnProvider AuthnzFcgiDefineProvider AuthtJwtClaim AuthtJwtDriver AuthtJwtSign AuthtJwtVerify AuthzDBDLoginToReferer AuthzDBDQuery AuthzDBDRedirectQuery AuthzSendForbiddenOnFailure BalancerGrowth BalancerInherit BalancerMember BalancerPersist BrotliAlterETag BrotliCompressionMaxInputBlock BrotliCompressionQuality BrotliCompressionWindow BrotliFilterNote BufferSize CacheDetailHeader CacheHeader CacheIgnoreQueryString CacheIgnoreURLSessionIdentifiers CacheKeyBaseURL CacheLock CacheLockMaxAge CacheLockPath CacheMinExpire CacheQuickHandler CacheReadSize CacheReadTime CacheSocache CacheSocacheMaxSize CacheSocacheMaxTime CacheSocacheMinTime CacheSocacheReadSize CacheSocacheReadTime CacheStaleOnError CacheStoreExpired CGIDScriptTimeout CGIPassAuth CGIScriptTimeout CGIVar CheckBasenameMatch ChrootDir CookieHTTPOnly CookieSameSite CookieSecure CryptoCipher CryptoDriver CryptoIV CryptoKey CryptoSize CTAuditStorage CTLogClient CTLogConfigDB CTMaxSCTAge CTProxyAwareness CTSCTStorage CTServerHelloSCTLimit CTStaticLogConfig CTStaticSCTs DBDInitSQL DefaultRuntimeDir DefaultStateDir DeflateAlterETag DeflateInflateLimitRequestBody DeflateInflateRatioBurst DeflateInflateRatioLimit DirectoryCheckHandler DTracePrivileges FallbackResource Files FilesMatch FirehoseConnectionInput FirehoseConnectionOutput FirehoseProxyConnectionInput FirehoseProxyConnectionOutput FirehoseRequestInput FirehoseRequestOutput FlushMaxPipelined FlushMaxThreshold GlobalLog GprofDir H2CopyFiles H2Direct H2EarlyHint H2EarlyHints H2MaxDataFrameLen H2MaxSessionStreams H2MaxWorkerIdleSeconds H2MaxWorkers H2MinWorkers H2ModernTLSOnly H2OutputBuffering H2Padding H2ProxyRequests H2Push H2PushDiarySize H2PushPriority H2PushResource H2SerializeHeaders H2StreamMaxMemSize H2StreamTimeout H2TLSCoolDownSecs H2TLSWarmUpSize H2Upgrade H2WebSockets H2WindowSize HeartbeatAddress HeartbeatListen HeartbeatMaxServers HeartbeatStorage HeartbeatStorage HostnameLookups HttpProtocolOptions IndexForbiddenReturn404 IndexHeadInsert InputSed ISAPIFakeAsync KeptBodySize LDAPConnectionPoolTTL LDAPLibraryDebug LDAPReferralHopLimit LDAPReferrals LDAPRetries LDAPRetryDelay LDAPTimeout Location LocationMatch LogIOTrackTTFB LogIOTrackTTFU LogMessage LuaAuthzProvider LuaCodeCache LuaHookAccessChecker LuaHookAuthChecker LuaHookCheckUserID LuaHookFixups LuaHookInsertFilter LuaHookLog LuaHookMapToStorage LuaHookPreTranslate LuaHookTranslateName LuaHookTypeChecker LuaInherit LuaInputFilter LuaMapHandler LuaOutputFilter LuaPackageCPath LuaPackagePath LuaQuickHandler LuaRoot LuaScope MacroIgnoreBadNesting MacroIgnoreEmptyArgs MaxConnectionsPerChild MaxRangeOverlaps MaxRangeReversals MaxRanges MaxRequestWorkers MDActivationDelay MDBaseServer MDCAChallenges MDCertificateAgreement MDCertificateAuthority MDCertificateCheck MDCertificateFile MDCertificateKeyFile MDCertificateMonitor MDCertificateProtocol MDCertificateStatus MDChallengeDns01 MDChallengeDns01Version MDCheckInterval MDContactEmail MDDriveMode MDExternalAccountBinding MDHttpProxy MDMatchNames MDMember MDMembers MDMessageCmd MDMustStaple MDNotifyCmd MDomain MDPortMap MDPrivateKeys MDRenewMode MDRenewWindow MDRequireHttps MDRetryDelay MDRetryFailover MDServerStatus MDStapleOthers MDStapling MDStaplingKeepResponse MDStaplingRenewWindow MDStoreDir MDStoreLocks MDWarnWindow MemcacheConnTTL MergeSlashes MergeTrailers MimeOptions ModemStandard Mutex Order OutputSed PolicyConditional PolicyConditionalURL PolicyEnvironment PolicyFilter PolicyKeepalive PolicyKeepaliveURL PolicyLength PolicyLengthURL PolicyMaxage PolicyMaxageURL PolicyNocache PolicyNocacheURL PolicyType PolicyTypeURL PolicyValidation PolicyValidationURL PolicyVary PolicyVaryURL PolicyVersion PolicyVersionURL PrivilegesMode Protocol Protocols ProtocolsHonorOrder Proxy100Continue ProxyAddHeaders ProxyExpressDBMFile ProxyExpressDBMType ProxyExpressEnable ProxyFCGIBackendType ProxyFCGISetEnvIf ProxyFtpDirCharset ProxyFtpEscapeWildcards ProxyFtpListOnWildcard ProxyHCExpr ProxyHCTemplate ProxyHCTPsize ProxyHTMLBufSize ProxyHTMLCharsetOut ProxyHTMLDocType ProxyHTMLEnable ProxyHTMLEvents ProxyHTMLExtended ProxyHTMLFixups ProxyHTMLInterp ProxyHTMLLinks ProxyHTMLMeta ProxyHTMLStripComments ProxyHTMLURLMap ProxySCGIInternalRedirect ProxySCGISendfile ProxySet ProxySourceAddress ProxyStatus ProxyWebsocketAsync ProxyWebsocketAsyncDelay ProxyWebsocketFallbackToProxyHttp ProxyWebsocketIdleTimeout QualifyRedirectURL ReadBufferSize ReceiveBufferSize RedisConnPoolTTL RedisTimeout ReflectorHeader RegexDefaultOptions RegisterHttpMethod RemoteIPHeader RemoteIPInternalProxy RemoteIPInternalProxyList RemoteIPProxiesHeader RemoteIPProxyProtocol RemoteIPProxyProtocolExceptions RemoteIPTrustedProxy RemoteIPTrustedProxyList RemoveLanguage RequestReadTimeout SeeRequestTail Session SessionCookieMaxAge SessionCookieName SessionCookieName2 SessionCookieRemove SessionCryptoCipher SessionCryptoDriver SessionCryptoPassphrase SessionCryptoPassphraseFile SessionDBDCookieName SessionDBDCookieName2 SessionDBDCookieRemove SessionDBDDeleteLabel SessionDBDInsertLabel SessionDBDPerUser SessionDBDSelectLabel SessionDBDUpdateLabel SessionEnv SessionExclude SessionExpiryUpdateInterval SessionHeader SessionInclude SessionMaxAge SSIETag SSILastModified SSILegacyExprParser SSLCARevocationCheck SSLClientHelloVars SSLOCSPDefaultResponder SSLOCSPEnable SSLOCSPNoverify SSLOCSPOverrideResponder SSLOCSPProxyURL SSLOCSPResponderCertificateFile SSLOCSPResponderTimeout SSLOCSPResponseMaxAge SSLOCSPResponseTimeSkew SSLOCSPUseRequestNonce SSLOpenSSLConfCmd SSLPolicy SSLProxyCARevocationCheck SSLProxyCheckPeerName SSLSRPUnknownUserSeed SSLSRPVerifierFile SSLStaplingCache SSLStaplingErrorCacheTimeout SSLStaplingFakeTryLater SSLStaplingForceURL SSLStaplingResponderTimeout SSLStaplingResponseMaxAge SSLStaplingResponseTimeSkew SSLStaplingReturnResponderErrors SSLStaplingStandardCacheTimeout SSLUseStapling StrictHostCheck Substitute SubstituteInheritBefore SubstituteMaxLineLength Suexec UNCList UnDefine UndefMacro Use UseCanonicalPhysicalPort VHostCGIMode VHostCGIPrivs VHostGroup VHostPrivs VHostSecure VHostUser Warning WatchdogInterval xml2EncAlias xml2EncDefault xml2StartParse + +" Define the default highlighting + +hi def link apacheAllowOverride apacheDeclaration +hi def link apacheAllowOverrideValue apacheOption +hi def link apacheAuthType apacheDeclaration +hi def link apacheAuthTypeValue apacheOption +hi def link apacheOptionOption apacheOption +hi def link apacheDeclaration Function +hi def link apacheAnything apacheOption +hi def link apacheOption Number +hi def link apacheComment Comment +hi def link apacheFixme Todo +hi def link apacheLimitSectionKeyword apacheLimitSection +hi def link apacheLimitSection apacheSection +hi def link apacheSection Label +hi def link apacheMethodOption Type +hi def link apacheAllowDeny Include +hi def link apacheAllowDenyValue Identifier +hi def link apacheOrder Special +hi def link apacheOrderValue String +hi def link apacheString String +hi def link apacheError Error +hi def link apacheUserID Number + + +let b:current_syntax = "apache" diff --git a/.config/vim/syntax/apachestyle.vim b/.config/vim/syntax/apachestyle.vim new file mode 100644 index 0000000..bd5c89d --- /dev/null +++ b/.config/vim/syntax/apachestyle.vim @@ -0,0 +1,54 @@ +" Vim syntax file +" Language: Apache-Style configuration files (proftpd.conf/apache.conf/..) +" Maintainer: Ben RUBSON +" Former Maintainer: Christian Hammers +" ChangeLog: +" 2017-12-17,ch +" correctly detect comments +" 2001-05-04,ch +" adopted Vim 6.0 syntax style +" 1999-10-28,ch +" initial release + +" The following formats are recognised: +" Apache-style .conf +" # Comment +" Option value +" Option value1 value2 +" Option = value1 value2 #not apache but also allowed +"
    +" Option value +" +" +"
    + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +syn match apOption /^\s*[^ \t#<=]*/ +syn match apComment /^\s*#.*$/ +"syn match apLastValue /[^ \t<=#]*$/ contains=apComment ugly + +" tags +syn region apTag start=// contains=apTagOption,apTagError +" the following should originally be " [^<>]+" but this didn't work :( +syn match apTagOption contained / [-\/_\.:*a-zA-Z0-9]\+/ms=s+1 +syn match apTagError contained /[^>] +" Last Change: 2024 Dec 22 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" The actual syntax is in sh.vim and controlled by buffer-local variables. +unlet! b:is_bash b:is_kornshell +let b:is_sh = 1 + +runtime! syntax/sh.vim + +let b:current_syntax = 'apkbuild' diff --git a/.config/vim/syntax/aptconf.vim b/.config/vim/syntax/aptconf.vim new file mode 100644 index 0000000..d51e7bd --- /dev/null +++ b/.config/vim/syntax/aptconf.vim @@ -0,0 +1,577 @@ +" Vim syntax file +" Language: APT config file +" Maintainer: Yann Amar +" Last Change: 2021 Jul 12 + +" quit when a syntax file was already loaded +if !exists("main_syntax") + if exists("b:current_syntax") + finish + endif + let main_syntax = 'aptconf' +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Errors: +" Catch all that is not overridden by next rules/items: +syn match aptconfError display '[^[:blank:]]' +syn match aptconfError display '^[^[:blank:]][^:{]*' + +" Options: +" Define a general regular expression for the options that are not defined +" later as keywords. Following apt.conf(5), we know that options are case +" insensitive, and can contain alphanumeric characters and '/-:._+'; we +" assume that there can not be consecutive colons (::) which is used as +" syntax operator; we also assume that an option name can not start or end +" by a colon. +syn case ignore +syn match aptconfRegexpOpt '[-[:alnum:]/.+_]\+\(:[-[:alnum:]/.+_]\+\)*' contained display + +" Keywords: +setlocal iskeyword+=/,-,.,_,+ +"setlocal iskeyword+=: is problematic, because of the '::' separator + +" Incomplete keywords will be treated differently than completely bad strings: +syn keyword aptconfGroupIncomplete + \ a[cquire] a[dequate] a[ptitude] a[ptlistbugs] d[ebtags] d[ebug] + \ d[ir] d[pkg] d[select] o[rderlist] p[ackagemanager] p[kgcachegen] + \ q[uiet] r[pm] s[ynaptic] u[nattended-upgrade] w[hatmaps] + +" Only the following keywords can be used at toplevel (to begin an option): +syn keyword aptconfGroup + \ acquire adequate apt aptitude aptlistbugs debtags debug + \ dir dpkg dselect orderlist packagemanager pkgcachegen + \ quiet rpm synaptic unattended-upgrade whatmaps + +" Possible options for each group: +" Acquire: {{{ +syn keyword aptconfAcquire contained + \ cdrom Check-Valid-Until CompressionTypes ForceHash ForceIPv4 + \ ForceIPv6 ftp gpgv GzipIndexes http https Languages Max-ValidTime + \ Min-ValidTime PDiffs Queue-Mode Retries Source-Symlinks + +syn keyword aptconfAcquireCDROM contained + \ AutoDetect CdromOnly Mount UMount + +syn keyword aptconfAcquireCompressionTypes contained + \ bz2 lzma gz Order + +syn keyword aptconfAcquireFTP contained + \ ForceExtended Passive Proxy ProxyLogin Timeout + +syn keyword aptconfAcquireHTTP contained + \ AllowRedirect Dl-Limit Max-Age No-Cache No-Store Pipeline-Depth + \ Proxy ProxyAutoDetect Proxy-Auto-Detect Timeout User-Agent + +syn keyword aptconfAcquireHTTPS contained + \ AllowRedirect CaInfo CaPath CrlFile Dl-Limit IssuerCert Max-Age + \ No-Cache No-Store Proxy SslCert SslForceVersion SslKey Timeout + \ Verify-Host Verify-Peer + +syn keyword aptconfAcquireMaxValidTime contained + \ Debian Debian-Security + +syn keyword aptconfAcquirePDiffs contained + \ FileLimit SizeLimit + +syn cluster aptconfAcquire_ contains=aptconfAcquire, + \ aptconfAcquireCDROM,aptconfAcquireCompressionTypes,aptconfAcquireFTP, + \ aptconfAcquireHTTP,aptconfAcquireHTTPS,aptconfAcquireMaxValidTime, + \ aptconfAcquirePDiffs +" }}} +" Adequate: {{{ +syn keyword aptconfAdequate contained + \ Enabled + +syn cluster aptconfAdequate_ contains=aptconfAdequate +" }}} +" Apt: {{{ +syn keyword aptconfApt contained + \ Architecture Architectures Archive Authentication AutoRemove + \ Build-Essential Build-Profiles Cache Cache-Grow Cache-Limit + \ Cache-Start CDROM Changelogs Clean-Installed Compressor + \ Default-Release Force-LoopBreak Get Ignore-Hold Immediate-Configure + \ Install-Recommends Install-Suggests Keep-Fds List-Cleanup + \ Move-Autobit-Sections NeverAutoRemove Never-MarkAuto-Sections + \ Periodic Status-Fd Update VersionedKernelPackages + +syn keyword aptconfAptAuthentication contained + \ TrustCDROM + +syn keyword aptconfAptAutoRemove contained + \ RecommendsImportant SuggestsImportant + +syn keyword aptconfAptCache contained + \ AllNames AllVersions Generate GivenOnly Important Installed NamesOnly + \ RecurseDepends ShowFull + +syn keyword aptconfAptCDROM contained + \ Fast NoAct NoMount Rename + +syn keyword aptconfAptChangelogs contained + \ Server + +syn keyword aptconfAptCompressor contained + \ bzip2 gzip lzma xz + +syn keyword aptconfAptCompressorAll contained + \ Binary CompressArg Cost Extension Name UncompressArg + +syn keyword aptconfAptGet contained + \ AllowUnauthenticated Arch-Only Assume-No Assume-Yes AutomaticRemove + \ Build-Dep-Automatic Compile Diff-Only Download Download-Only Dsc-Only + \ Fix-Broken Fix-Missing Force-Yes HideAutoRemove Host-Architecture + \ List-Cleanup Only-Source Print-URIs Purge ReInstall Remove + \ Show-Upgraded Show-User-Simulation-Note Show-Versions Simulate + \ Tar-Only Trivial-Only Upgrade + +syn keyword aptconfAptPeriodic contained + \ AutocleanInterval BackupArchiveInterval BackupLevel + \ Download-Upgradeable-Packages Download-Upgradeable-Packages-Debdelta + \ Enable MaxAge MaxSize MinAge Unattended-Upgrade Update-Package-Lists + \ Verbose + +syn keyword aptconfAptUpdate contained + \ List-Refresh Pre-Invoke Post-Invoke Post-Invoke-Success + +syn cluster aptconfApt_ contains=aptconfApt, + \ aptconfAptAuthentication,aptconfAptAutoRemove,aptconfAptCache, + \ aptconfAptCDROM,aptconfAptChangelogs,aptconfAptCompressor, + \ aptconfAptCompressorAll,aptconfAptGet,aptconfAptPeriodic, + \ aptconfAptUpdate +" }}} +" Aptitude: {{{ +syn keyword aptconfAptitude contained + \ Allow-Null-Upgrade Always-Use-Safe-Resolver Autoclean-After-Update + \ Auto-Install Auto-Fix-Broken Cmdline Debtags-Binary + \ Debtags-Update-Options Delete-Unused Delete-Unused-Pattern + \ Display-Planned-Action Forget-New-On-Install Forget-New-On-Update + \ Get-Root-Command Ignore-Old-Tmp Ignore-Recommends-Important + \ Keep-Recommends Keep-Suggests Keep-Unused-Pattern LockFile Log + \ Logging Parse-Description-Bullets Pkg-Display-Limit ProblemResolver + \ Purge-Unused Recommends-Important Safe-Resolver Screenshot Sections + \ Simulate Spin-Interval Suggests-Important Suppress-Read-Only-Warning + \ Theme Track-Dselect-State UI Warn-Not-Root + +syn keyword aptconfAptitudeCmdline contained + \ Always-Prompt Assume-Yes Disable-Columns Download-Only Fix-Broken + \ Ignore-Trust-Violations Package-Display-Format Package-Display-Width + \ Progress Request-Strictness Resolver-Debug Resolver-Dump + \ Resolver-Show-Steps Safe-Upgrade Show-Deps Show-Size-Changes + \ Show-Versions Show-Why Simulate Verbose Version-Display-Format + \ Versions-Group-By Versions-Show-Package-Names Visual-Preview + \ Why-Display-Mode + +syn keyword aptconfAptitudeCmdlineProgress contained + \ Percent-On-Right Retain-Completed + +syn keyword aptconfAptitudeCmdlineSafeUpgrade contained + \ No-New-Installs + +syn keyword aptconfAptitudeLogging contained + \ File Levels + +syn keyword aptconfAptitudeProblemResolver contained + \ Allow-Break-Holds BreakHoldScore Break-Hold-Level BrokenScore + \ DefaultResolutionScore Discard-Null-Solution + \ EssentialRemoveScore ExtraScore FullReplacementScore FutureHorizon + \ Hints ImportantScore Infinity InstallScore Keep-All-Level KeepScore + \ NonDefaultScore Non-Default-Level OptionalScore PreserveAutoScore + \ PreserveManualScore RemoveScore Remove-Essential-Level Remove-Level + \ RequiredScore ResolutionScore Safe-Level SolutionCost StandardScore + \ StepLimit StepScore Trace-Directory Trace-File + \ UndoFullReplacementScore UnfixedSoftScore UpgradeScore + +syn keyword aptconfAptitudeSafeResolver contained + \ No-New-Installs No-New-Upgrades Show-Resolver-Actions + +syn keyword aptconfAptitudeScreenshot contained + \ Cache-Max IncrementalLoadLimit + +syn keyword aptconfAptitudeSections contained + \ Descriptions Top-Sections + +syn keyword aptconfAptitudeUI contained + \ Advance-On-Action Auto-Show-Reasons Default-Grouping + \ Default-Package-View Default-Preview-Grouping Default-Sorting + \ Description-Visible-By-Default Exit-On-Last-Close Fill-Text + \ Flat-View-As-First-View HelpBar Incremental-Search InfoAreaTabs + \ KeyBindings MenuBar-Autohide Minibuf-Download-Bar Minibuf-Prompts + \ New-package-Commands Package-Display-Format Package-Header-Format + \ Package-Status-Format Pause-After-Download Preview-Limit + \ Prompt-On-Exit Styles ViewTabs + +syn keyword aptconfAptitudeUIKeyBindings contained + \ ApplySolution Begin BugReport Cancel Changelog ChangePkgTreeGrouping + \ ChangePkgTreeLimit ChangePkgTreeSorting ClearAuto CollapseAll + \ CollapseTree Commit Confirm Cycle CycleNext CycleOrder CyclePrev + \ DelBOL DelBack DelEOL DelForward Dependencies DescriptionCycle + \ DescriptionDown DescriptionUp DoInstallRun Down DpkgReconfigure + \ DumpResolver EditHier End ExamineSolution ExpandAll ExpandTree + \ FirstSolution ForbidUpgrade ForgetNewPackages Help HistoryNext + \ HistoryPrev Hold Install InstallSingle Keep LastSolution Left + \ LevelDown LevelUp MarkUpgradable MineFlagSquare MineLoadGame + \ MineSaveGame MineSweepSquare MineUncoverSquare MineUncoverSweepSquare + \ NextPage NextSolution No Parent PrevPage PrevSolution Purge + \ PushButton Quit QuitProgram RejectBreakHolds Refresh Remove + \ ReInstall RepeatSearchBack ReSearch ReverseDependencies Right + \ SaveHier Search SearchBack SearchBroken SetAuto ShowHideDescription + \ SolutionActionApprove SolutionActionReject ToggleExpanded + \ ToggleMenuActive Undo Up UpdatePackageList Versions Yes + +syn keyword aptconfAptitudeUIStyles contained + \ Bullet ChangeLogNewerVersion Default DepBroken DisabledMenuEntry + \ DownloadHit DownloadProgress EditLine Error Header HighlightedMenuBar + \ HighlightedMenuEntry MediaChange MenuBar MenuBorder MenuEntry + \ MineBomb MineBorder MineFlag MineNumber1 MineNumber2 MineNumber3 + \ MineNumber4 MineNumber5 MineNumber6 MineNumber7 MineNumber8 + \ MultiplexTab MultiplexTabHighlighted PkgBroken PkgBrokenHighlighted + \ PkgIsInstalled PkgIsInstalledHighlighted PkgNotInstalled + \ PkgNotInstalledHighlighted PkgToDowngrade PkgToDowngradeHighlighted + \ PkgToHold PkgToHoldHighlighted PkgToInstall PkgToInstallHighlighted + \ PkgToRemove PkgToRemoveHighlighted PkgToUpgrade + \ PkgToUpgradeHighlighted Progress SolutionActionApproved + \ SolutionActionRejected Status TreeBackground TrustWarning + +syn keyword aptconfAptitudeUIStylesElements contained + \ bg clear fg flip set + +syn cluster aptconfAptitude_ contains=aptconfAptitude, + \ aptconfAptitudeCmdline,aptconfAptitudeCmdlineProgress, + \ aptconfAptitudeCmdlineSafeUpgrade,aptconfAptitudeLogging, + \ aptconfAptitudeProblemResolver,aptconfAptitudeSafeResolver, + \ aptconfAptitudeScreenshot,aptconfAptitudeSections,aptconfAptitudeUI, + \ aptconfAptitudeUIKeyBindings,aptconfAptitudeUIStyles, + \ aptconfAptitudeUIStylesElements +" }}} +" AptListbugs: {{{ +syn keyword aptconfAptListbugs contained + \ IgnoreRegexp Severities + +syn cluster aptconfAptListbugs_ contains=aptconfAptListbugs +" }}} +" DebTags: {{{ +syn keyword aptconfDebTags contained + \ Vocabulary + +syn cluster aptconfDebTags_ contains=aptconfDebTags +" }}} +" Debug: {{{ +syn keyword aptconfDebug contained + \ Acquire aptcdrom BuildDeps Hashes IdentCdrom Nolocking + \ pkgAcquire pkgAutoRemove pkgCacheGen pkgDepCache pkgDPkgPM + \ pkgDPkgProgressReporting pkgInitialize pkgOrderList + \ pkgPackageManager pkgPolicy pkgProblemResolver RunScripts + \ sourceList + +syn keyword aptconfDebugAcquire contained + \ cdrom Ftp gpgv Http Https netrc + +syn keyword aptconfDebugPkgAcquire contained + \ Auth Diffs RRed Worker + +syn keyword aptconfDebugPkgDepCache contained + \ AutoInstall Marker + +syn keyword aptconfDebugPkgProblemResolver contained + \ ShowScores + +syn cluster aptconfDebug_ contains=aptconfDebug, + \ aptconfDebugAcquire,aptconfDebugPkgAcquire,aptconfDebugPkgDepCache, + \ aptconfDebugPkgProblemResolver +" }}} +" Dir: {{{ +syn keyword aptconfDir contained + \ Aptitude Bin Cache Etc Ignore-Files-Silently Log Media Parts RootDir + \ State + +syn keyword aptconfDirAptitude contained + \ state + +syn keyword aptconfDirBin contained + \ apt-get apt-cache dpkg dpkg-buildpackage dpkg-source gpg gzip Methods + \ solvers + +syn keyword aptconfDirCache contained + \ Archives Backup pkgcache srcpkgcache + +syn keyword aptconfDirEtc contained + \ Main Netrc Parts Preferences PreferencesParts SourceList SourceParts + \ VendorList VendorParts Trusted TrustedParts + +syn keyword aptconfDirLog contained + \ History Terminal + +syn keyword aptconfDirMedia contained + \ MountPath + +syn keyword aptconfDirState contained + \ cdroms extended_states Lists mirrors preferences status + +syn cluster aptconfDir_ contains=aptconfDir, + \ aptconfDirAptitude,aptconfDirBin,aptconfDirCache,aptconfDirEtc, + \ aptconfDirLog,aptconfDirMedia,aptconfDirState +" }}} +" DPkg: {{{ +syn keyword aptconfDPkg contained + \ Build-Options Chroot-Directory ConfigurePending FlushSTDIN + \ MaxArgBytes MaxArgs MaxBytes NoTriggers options + \ Pre-Install-Pkgs Pre-Invoke Post-Invoke + \ Run-Directory StopOnError Tools TriggersPending + +syn keyword aptconfDPkgTools contained + \ adequate InfoFD Options Version + +syn cluster aptconfDPkg_ contains=aptconfDPkg, + \ aptconfDPkgTools +" }}} +" DSelect: {{{ +syn keyword aptconfDSelect contained + \ CheckDir Clean Options PromptAfterUpdate UpdateOptions + +syn cluster aptconfDSelect_ contains=aptconfDSelect +" }}} +" OrderList: {{{ +syn keyword aptconfOrderList contained + \ Score + +syn keyword aptconfOrderListScore contained + \ Delete Essential Immediate PreDepends + +syn cluster aptconfOrderList_ contains=aptconfOrderList, + \ aptconfOrderListScore +" }}} +" PackageManager: {{{ +syn keyword aptconfPackageManager contained + \ Configure + +syn cluster aptconfPackageManager_ contains=aptconfPackageManager +" }}} +" PkgCacheGen: {{{ +syn keyword aptconfPkgCacheGen contained + \ Essential + +syn cluster aptconfPkgCacheGen_ contains=aptconfPkgCacheGen +" }}} +" Quiet: {{{ +syn keyword aptconfQuiet contained + \ NoUpdate + +syn cluster aptconfQuiet_ contains=aptconfQuiet +" }}} +" Rpm: {{{ +syn keyword aptconfRpm contained + \ Post-Invoke Pre-Invoke + +syn cluster aptconfRpm_ contains=aptconfRpm +" }}} +" Synaptic: {{{ +syn keyword aptconfSynaptic contained + \ AskQuitOnProceed AskRelated AutoCleanCache CleanCache DefaultDistro + \ delAction delHistory Download-Only ftpProxy ftpProxyPort httpProxy + \ httpProxyPort Install-Recommends LastSearchType Maximized noProxy + \ OneClickOnStatusActions ShowAllPkgInfoInMain showWelcomeDialog + \ ToolbarState undoStackSize update upgradeType useProxy UseStatusColors + \ UseTerminal useUserFont useUserTerminalFont ViewMode + \ availVerColumnPos availVerColumnVisible componentColumnPos + \ componentColumnVisible descrColumnPos descrColumnVisible + \ downloadSizeColumnPos downloadSizeColumnVisible hpanedPos + \ instVerColumnPos instVerColumnVisible instSizeColumnPos + \ instSizeColumnVisible nameColumnPos nameColumnVisible + \ sectionColumnPos sectionColumnVisible statusColumnPos + \ statusColumnVisible supportedColumnPos supportedColumnVisible + \ vpanedPos windowWidth windowHeight windowX windowY closeZvt + \ color-available color-available-locked color-broken color-downgrade + \ color-install color-installed-locked color-installed-outdated + \ color-installed-updated color-new color-purge color-reinstall + \ color-remove color-upgrade + +syn keyword aptconfSynapticUpdate contained + \ last type + +syn cluster aptconfSynaptic_ contains=aptconfSynaptic, + \ aptconfSynapticUpdate +" }}} +" Unattended Upgrade: {{{ +syn keyword aptconfUnattendedUpgrade contained + \ Allow-APT-Mark-Fallback Allow-downgrade AutoFixInterruptedDpkg + \ Automatic-Reboot Automatic-Reboot-Time Automatic-Reboot-WithUsers + \ Debug InstallOnShutdown Mail MailOnlyOnError MailReport MinimalSteps + \ OnlyOnACPower Origins-Pattern Package-Blacklist + \ Remove-New-Unused-Dependencies Remove-Unused-Dependencies + \ Remove-Unused-Kernel-Packages Skip-Updates-On-Metered-Connections + \ SyslogEnable SyslogFacility Verbose + +syn cluster aptconfUnattendedUpgrade_ contains=aptconfUnattendedUpgrade +" }}} +" Whatmaps: {{{ +syn keyword aptconfWhatmaps contained + \ Enable-Restart Security-Update-Origins + +syn cluster aptconfWhatmaps_ contains=aptconfWhatmaps +" }}} + +syn case match + +" Now put all the keywords (and 'valid' options) in a single cluster: +syn cluster aptconfOptions contains=aptconfRegexpOpt, + \ @aptconfAcquire_,@aptconfAdequate_,@aptconfApt_,@aptconfAptitude_, + \ @aptconfAptListbugs_,@aptconfDebTags_,@aptconfDebug_,@aptconfDir_, + \ @aptconfDPkg_,@aptconfDSelect_,@aptconfOrderList_, + \ @aptconfPackageManager_,@aptconfPkgCacheGen_,@aptconfQuiet_, + \ @aptconfRpm_,@aptconfSynaptic_,@aptconfUnattendedUpgrade_, + \ @aptconfWhatmaps_ + +" Syntax: +syn match aptconfSemiColon ';' +syn match aptconfDoubleColon '::' +syn match aptconfCurlyBraces '[{}]' +syn region aptconfValue start='"' end='"' oneline display +syn region aptconfInclude matchgroup=aptconfOperator start='{' end='}' contains=ALLBUT,aptconfGroup,aptconfGroupIncomplete,@aptconfCommentSpecial +syn region aptconfInclude matchgroup=aptconfOperator start='::' end='{'me=s-1 contains=@aptconfOptions,aptconfError display +syn region aptconfInclude matchgroup=aptconfOperator start='::' end='::\|\s'me=s-1 oneline contains=@aptconfOptions,aptconfError display + +" Basic Syntax Errors: XXX avoid to generate false positives !!! +" +" * Undocumented inline comment. Since it is currently largely used, and does +" not seem to cause trouble ('apt-config dump' never complains when # is used +" the same way than //) it has been moved to aptconfComment group. But it +" still needs to be defined here (i.e. before #clear and #include directives) +syn match aptconfComment '#.*' contains=@aptconfCommentSpecial +" +" * When a semicolon is missing after a double-quoted string: +" There are some cases (for example in the Dir group of options, but not only) +" where this syntax is valid. So we don't treat it as a strict error. +syn match aptconfAsError display '"[^"]*"[^;]'me=e-1 +syn match aptconfAsError display '"[^"]*"$' +" +" * When double quotes are missing around a value (before a semicolon): +" This omission has no effect if the value is a single string (without blank +" characters). But apt.conf(5) says that quotes are required, and this item +" avoids to match unquoted keywords. +syn match aptconfAsError display '\s[^"[:blank:]]*[^}"];'me=e-1 +" +" * When only one double quote is missing around a value (before a semicolon): +" No comment for that: it must be highly visible. +syn match aptconfError display '\(\s\|;\)"[^"[:blank:]]\+;'me=e-1 +syn match aptconfError display '\(\s\|;\)[^"[:blank:]]\+";'me=e-1 +" +" * When space is missing between option and (quoted) value: +" TODO (partially implemented) +syn match aptconfError display '::[^[:blank:]]*"' + +" Special Actions: +syn match aptconfAction '^#\(clear\|include\)\>' +syn region aptconfAction matchgroup=aptconfAction start='^#clear\>' end=';'me=s-1 oneline contains=aptconfGroup,aptconfDoubleColon,@aptconfOptions +syn region aptconfAction matchgroup=aptconfAction start='^#include\>' end=';'me=s-1 oneline contains=aptconfRegexpOpt + +" Comments: +syn keyword aptconfTodo TODO FIXME NOTE XXX contained +syn cluster aptconfCommentSpecial contains=@Spell,aptconfTodo +syn match aptconfComment '//.*' contains=@aptconfCommentSpecial +syn region aptconfComment start='/\*' end='\*/' contains=@aptconfCommentSpecial + +" Highlight Definitions: +hi def link aptconfTodo Todo +hi def link aptconfError Error +hi def link aptconfComment Comment +hi def link aptconfOperator Operator + +hi def link aptconfAction PreProc +hi def link aptconfOption Type +hi def link aptconfValue String +hi def link aptconfRegexpOpt Normal +hi def link aptconfAsError Special + +hi def link aptconfSemiColon aptconfOperator +hi def link aptconfDoubleColon aptconfOperator +hi def link aptconfCurlyBraces aptconfOperator + +hi def link aptconfGroupIncomplete Special +hi def link aptconfGroup aptconfOption + +hi def link aptconfAcquire aptconfOption +hi def link aptconfAcquireCDROM aptconfOption +hi def link aptconfAcquireCompressionTypes aptconfOption +hi def link aptconfAcquireFTP aptconfOption +hi def link aptconfAcquireHTTP aptconfOption +hi def link aptconfAcquireHTTPS aptconfOption +hi def link aptconfAcquireMaxValidTime aptconfOption +hi def link aptconfAcquirePDiffs aptconfOption + +hi def link aptconfAdequate aptconfOption + +hi def link aptconfApt aptconfOption +hi def link aptconfAptAuthentication aptconfOption +hi def link aptconfAptAutoRemove aptconfOption +hi def link aptconfAptCache aptconfOption +hi def link aptconfAptCDROM aptconfOption +hi def link aptconfAptChangelogs aptconfOption +hi def link aptconfAptCompressor aptconfOption +hi def link aptconfAptCompressorAll aptconfOption +hi def link aptconfAptGet aptconfOption +hi def link aptconfAptPeriodic aptconfOption +hi def link aptconfAptUpdate aptconfOption + +hi def link aptconfAptitude aptconfOption +hi def link aptconfAptitudeCmdline aptconfOption +hi def link aptconfAptitudeCmdlineProgress aptconfOption +hi def link aptconfAptitudeCmdlineSafeUpgrade aptconfOption +hi def link aptconfAptitudeLogging aptconfOption +hi def link aptconfAptitudeProblemResolver aptconfOption +hi def link aptconfAptitudeSafeResolver aptconfOption +hi def link aptconfAptitudeScreenshot aptconfOption +hi def link aptconfAptitudeSections aptconfOption +hi def link aptconfAptitudeUI aptconfOption +hi def link aptconfAptitudeUIKeyBindings aptconfOption +hi def link aptconfAptitudeUIStyles aptconfOption +hi def link aptconfAptitudeUIStylesElements aptconfOption + +hi def link aptconfAptListbugs aptconfOption + +hi def link aptconfDebTags aptconfOption + +hi def link aptconfDebug aptconfOption +hi def link aptconfDebugAcquire aptconfOption +hi def link aptconfDebugPkgAcquire aptconfOption +hi def link aptconfDebugPkgDepCache aptconfOption +hi def link aptconfDebugPkgProblemResolver aptconfOption + +hi def link aptconfDir aptconfOption +hi def link aptconfDirAptitude aptconfOption +hi def link aptconfDirBin aptconfOption +hi def link aptconfDirCache aptconfOption +hi def link aptconfDirEtc aptconfOption +hi def link aptconfDirLog aptconfOption +hi def link aptconfDirMedia aptconfOption +hi def link aptconfDirState aptconfOption + +hi def link aptconfDPkg aptconfOption +hi def link aptconfDPkgTools aptconfOption + +hi def link aptconfDSelect aptconfOption + +hi def link aptconfOrderList aptconfOption +hi def link aptconfOrderListScore aptconfOption + +hi def link aptconfPackageManager aptconfOption + +hi def link aptconfPkgCacheGen aptconfOption + +hi def link aptconfQuiet aptconfOption + +hi def link aptconfRpm aptconfOption + +hi def link aptconfSynaptic aptconfOption +hi def link aptconfSynapticUpdate aptconfOption + +hi def link aptconfUnattendedUpgrade aptconfOption + +hi def link aptconfWhatmaps aptconfOption + +let b:current_syntax = "aptconf" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/arch.vim b/.config/vim/syntax/arch.vim new file mode 100644 index 0000000..f9d095e --- /dev/null +++ b/.config/vim/syntax/arch.vim @@ -0,0 +1,41 @@ +" Vim syntax file +" Language: GNU Arch inventory file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2007-06-17 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +setlocal iskeyword+=- + +syn keyword archTodo TODO FIXME XXX NOTE + +syn region archComment display start='^\%(#\|\s\)' end='$' + \ contains=archTodo,@Spell + +syn match archBegin display '^' nextgroup=archKeyword,archComment + +syn keyword archKeyword contained implicit tagline explicit names +syn keyword archKeyword contained untagged-source + \ nextgroup=archTMethod skipwhite +syn keyword archKeyword contained exclude junk backup precious unrecognized + \ source nextgroup=archRegex skipwhite + +syn keyword archTMethod contained source precious backup junk unrecognized + +syn match archRegex contained '\s*\zs.*' + +hi def link archTodo Todo +hi def link archComment Comment +hi def link archKeyword Keyword +hi def link archTMethod Type +hi def link archRegex String + +let b:current_syntax = "arch" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/arduino.vim b/.config/vim/syntax/arduino.vim new file mode 100644 index 0000000..2f06eb6 --- /dev/null +++ b/.config/vim/syntax/arduino.vim @@ -0,0 +1,83 @@ +" Vim syntax file +" Language: Arduino +" Maintainer: Johannes Hoff +" Last Change: 21 October 2021 +" License: VIM license (:help license, replace vim by arduino.vim) + +" Syntax highlighting like in the Arduino IDE +" Automatically generated by the script available at +" https://github.com/johshoff/arduino-vim-syntax +" Using keywords from /build/shared/lib/keywords.txt +" From version: 1.8.16 + +" Thanks to Rik, Erik Nomitch, Adam Obeng, Graeme Cross and Niall Parker +" for helpful feedback! + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" Read the C syntax to start with +if version < 600 + so :p:h/cpp.vim +else + runtime! syntax/cpp.vim +endif + +syn keyword arduinoConstant BIN CHANGE DEC DEFAULT EXTERNAL FALLING HALF_PI HEX +syn keyword arduinoConstant HIGH INPUT INPUT_PULLUP INTERNAL INTERNAL1V1 +syn keyword arduinoConstant INTERNAL2V56 LED_BUILTIN LED_BUILTIN_RX +syn keyword arduinoConstant LED_BUILTIN_TX LOW LSBFIRST MSBFIRST OCT OUTPUT PI +syn keyword arduinoConstant RISING TWO_PI + +syn keyword arduinoFunc analogRead analogReadResolution analogReference +syn keyword arduinoFunc analogWrite analogWriteResolution attachInterrupt +syn keyword arduinoFunc bit bitClear bitRead bitSet bitWrite delay +syn keyword arduinoFunc delayMicroseconds detachInterrupt +syn keyword arduinoFunc digitalPinToInterrupt digitalRead digitalWrite +syn keyword arduinoFunc highByte interrupts lowByte micros millis +syn keyword arduinoFunc noInterrupts noTone pinMode pulseIn pulseInLong +syn keyword arduinoFunc shiftIn shiftOut tone yield + +syn keyword arduinoMethod available availableForWrite begin charAt compareTo +syn keyword arduinoMethod concat end endsWith equals equalsIgnoreCase export +syn keyword arduinoMethod final find findUntil flush getBytes indexOf +syn keyword arduinoMethod lastIndexOf length loop override parseFloat +syn keyword arduinoMethod parseInt peek print println read readBytes +syn keyword arduinoMethod readBytesUntil readString readStringUntil replace +syn keyword arduinoMethod setCharAt setTimeout setup startsWith Stream +syn keyword arduinoMethod substring toCharArray toInt toLowerCase toUpperCase +syn keyword arduinoMethod trim + +syn keyword arduinoModule Keyboard Mouse Serial Serial1 Serial2 Serial3 +syn keyword arduinoModule SerialUSB + +syn keyword arduinoStdFunc abs accept acos acosf asin asinf atan atan2 atan2f +syn keyword arduinoStdFunc atanf cbrt cbrtf ceil ceilf click constrain +syn keyword arduinoStdFunc copysign copysignf cos cosf cosh coshf degrees exp +syn keyword arduinoStdFunc expf fabs fabsf fdim fdimf floor floorf fma fmaf +syn keyword arduinoStdFunc fmax fmaxf fmin fminf fmod fmodf hypot hypotf +syn keyword arduinoStdFunc isfinite isinf isnan isPressed ldexp ldexpf log +syn keyword arduinoStdFunc log10 log10f logf lrint lrintf lround lroundf map +syn keyword arduinoStdFunc max min move pow powf press radians random +syn keyword arduinoStdFunc randomSeed release releaseAll round roundf signbit +syn keyword arduinoStdFunc sin sinf sinh sinhf sq sqrt sqrtf tan tanf tanh +syn keyword arduinoStdFunc tanhf trunc truncf + +syn keyword arduinoType _Bool _Complex _Imaginary array atomic_bool +syn keyword arduinoType atomic_char atomic_int atomic_llong atomic_long +syn keyword arduinoType atomic_schar atomic_short atomic_uchar atomic_uint +syn keyword arduinoType atomic_ullong atomic_ulong atomic_ushort boolean +syn keyword arduinoType byte char16_t char32_t complex NULL null PROGMEM +syn keyword arduinoType String word + +hi def link arduinoType Type +hi def link arduinoConstant Constant +hi def link arduinoStdFunc Function +hi def link arduinoFunc Function +hi def link arduinoMethod Function +hi def link arduinoModule Identifier diff --git a/.config/vim/syntax/art.vim b/.config/vim/syntax/art.vim new file mode 100644 index 0000000..8551198 --- /dev/null +++ b/.config/vim/syntax/art.vim @@ -0,0 +1,50 @@ +" Vim syntax file +" Language: ART-IM and ART*Enterprise +" Maintainer: Dorai Sitaram +" URL: http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html +" Last Change: 2011 Dec 28 by Thilo Six + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn case ignore + +syn keyword artspform => and assert bind +syn keyword artspform declare def-art-fun deffacts defglobal defrule defschema do +syn keyword artspform else for if in$ not or +syn keyword artspform progn retract salience schema test then while + +syn match artvariable "?[^ \t";()|&~]\+" + +syn match artglobalvar "?\*[^ \t";()|&~]\+\*" + +syn match artinstance "![^ \t";()|&~]\+" + +syn match delimiter "[()|&~]" + +syn region string start=/"/ skip=/\\[\\"]/ end=/"/ + +syn match number "\<[-+]\=\([0-9]\+\(\.[0-9]*\)\=\|\.[0-9]\+\)\>" + +syn match comment ";.*$" + +syn match comment "#+:\=ignore" nextgroup=artignore skipwhite skipnl + +syn region artignore start="(" end=")" contained contains=artignore,comment + +syn region artignore start=/"/ skip=/\\[\\"]/ end=/"/ contained + +hi def link artinstance type +hi def link artglobalvar preproc +hi def link artignore comment +hi def link artspform statement +hi def link artvariable function + +let b:current_syntax = "art" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/asciidoc.vim b/.config/vim/syntax/asciidoc.vim new file mode 100644 index 0000000..29451f9 --- /dev/null +++ b/.config/vim/syntax/asciidoc.vim @@ -0,0 +1,185 @@ +" Vim syntax file +" Language: AsciiDoc +" Maintainer: @aerostitch on GitHub (tag me in your issue in the +" github/vim/vim repository and I'll answer when available) +" Original author: Stuart Rackham (inspired by Felix +" Obenhuber's original asciidoc.vim script). +" URL: http://asciidoc.org/ +" Licence: GPL (http://www.gnu.org) +" Remarks: Vim 6 or greater +" Last Update: 2020 May 03 (see Issue 240) +" Limitations: +" +" - Nested quoted text formatting is highlighted according to the outer +" format. +" - If a closing Example Block delimiter may be mistaken for a title +" underline. A workaround is to insert a blank line before the closing +" delimiter. +" - Lines within a paragraph starting with equals characters are +" highlighted as single-line titles. +" - Lines within a paragraph beginning with a period are highlighted as +" block titles. + + +if exists("b:current_syntax") + finish +endif + +" Use the default syntax syncing. + +" Run :help syn-priority to review syntax matching priority. +syn keyword asciidocToDo TODO FIXME CHECK TEST XXX ZZZ DEPRECATED +syn match asciidocBackslash /\\/ +syn region asciidocIdMarker start=/^\$Id:\s/ end=/\s\$$/ +syn match asciidocCallout /\\\@/ +syn match asciidocOpenBlockDelimiter /^--$/ +syn match asciidocLineBreak /[ \t]+$/ containedin=asciidocList +syn match asciidocRuler /^'\{3,}$/ +syn match asciidocPagebreak /^<\{3,}$/ +syn match asciidocEntityRef /\\\@\?[0-9A-Za-z_]\@!/ +syn match asciidocAttributeRef /\\\@.]\{,3}\)\?\([a-z]\)\?\)\?|/ containedin=asciidocTableBlock contained +syn region asciidocTableBlock matchgroup=asciidocTableDelimiter start=/^|=\{3,}$/ end=/^|=\{3,}$/ keepend contains=ALL +syn match asciidocTablePrefix /\(\S\@.]\{,3}\)\?\([a-z]\)\?\)\?!/ containedin=asciidocTableBlock contained +syn region asciidocTableBlock2 matchgroup=asciidocTableDelimiter2 start=/^!=\{3,}$/ end=/^!=\{3,}$/ keepend contains=ALL + +syn match asciidocListContinuation /^+$/ +syn region asciidocLiteralBlock start=/^\.\{4,}$/ end=/^\.\{4,}$/ contains=asciidocCallout,asciidocToDo keepend +syn region asciidocListingBlock start=/^-\{4,}$/ end=/^-\{4,}$/ contains=asciidocCallout,asciidocToDo keepend +syn region asciidocCommentBlock start="^/\{4,}$" end="^/\{4,}$" contains=asciidocToDo +syn region asciidocPassthroughBlock start="^+\{4,}$" end="^+\{4,}$" + +" Allowing leading \w characters in the filter delimiter is to accomodate +" the pre version 8.2.7 syntax and may be removed in future releases. +syn region asciidocFilterBlock start=/^\w*\~\{4,}$/ end=/^\w*\~\{4,}$/ + +syn region asciidocMacroAttributes matchgroup=asciidocRefMacro start=/\\\@>\)\|^$/ contains=asciidocQuoted.* keepend +syn region asciidocMacroAttributes matchgroup=asciidocAnchorMacro start=/\\\@ +" Kevin Dahlhausen +" Contributors: Ori Avtalion, Lakshay Garg, Nir Lichtman +" Last Change: 2025 Jan 26 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn case ignore + +" storage types +syn match asmType "\.long" +syn match asmType "\.ascii" +syn match asmType "\.asciz" +syn match asmType "\.byte" +syn match asmType "\.double" +syn match asmType "\.float" +syn match asmType "\.hword" +syn match asmType "\.int" +syn match asmType "\.octa" +syn match asmType "\.quad" +syn match asmType "\.short" +syn match asmType "\.single" +syn match asmType "\.space" +syn match asmType "\.string" +syn match asmType "\.word" +syn match asmType "\.2byte" +syn match asmType "\.4byte" +syn match asmType "\.8byte" + +syn match asmIdentifier "[a-z_][a-z0-9_]*" +syn match asmLabel "[a-z_][a-z0-9_]*:"he=e-1 + +" Various #'s as defined by GAS ref manual sec 3.6.2.1 +" Technically, the first asmDecimal def is actually octal, +" since the value of 0-7 octal is the same as 0-7 decimal, +" I (Kevin) prefer to map it as decimal: +syn match asmDecimal "\<0\+[1-7]\=\>" display +syn match asmDecimal "\<[1-9]\d*\>" display +syn match asmOctal "\<0[0-7][0-7]\+\>" display +syn match asmHexadecimal "\<0[xX][0-9a-fA-F]\+\>" display +syn match asmBinary "\<0[bB][0-1]\+\>" display + +syn match asmFloat "\<\d\+\.\d*\%(e[+-]\=\d\+\)\=\>" display +syn match asmFloat "\.\d\+\%(e[+-]\=\d\+\)\=\>" display +syn match asmFloat "\<\d\%(e[+-]\=\d\+\)\>" display +syn match asmFloat "[+-]\=Inf\>\|\" display + +syn match asmFloat "\%(0[edfghprs]\)[+-]\=\d*\%(\.\d\+\)\%(e[+-]\=\d\+\)\=" display +syn match asmFloat "\%(0[edfghprs]\)[+-]\=\d\+\%(\.\d\+\)\=\%(e[+-]\=\d\+\)\=" display +" Avoid fighting the hexadecimal match for unicorn-like '0x' prefixed floats +syn match asmFloat "\%(0x\)[+-]\=\d*\%(\.\d\+\)\%(e[+-]\=\d\+\)\=" display + +" Allow all characters to be escaped (and in strings) as these vary across +" architectures [See sec 3.6.1.1 Strings] +syn match asmCharacterEscape "\\." contained +syn match asmCharacter "'\\\=." contains=asmCharacterEscape + +syn match asmStringEscape "\\\_." contained +syn match asmStringEscape "\\\%(\o\{3}\|00[89]\)" contained display +syn match asmStringEscape "\\x\x\+" contained display + +syn region asmString start="\"" end="\"" skip="\\\\\|\\\"" contains=asmStringEscape + +syn keyword asmTodo contained TODO FIXME XXX NOTE + +" GAS supports one type of multi line comments: +syn region asmComment start="/\*" end="\*/" contains=asmTodo,@Spell + +" GAS (undocumentedly?) supports C++ style comments. Unlike in C/C++ however, +" a backslash ending a C++ style comment does not extend the comment to the +" next line (hence the syntax region does not define 'skip="\\$"') +syn region asmComment start="//" end="$" keepend contains=asmTodo,@Spell + +" Line comment characters depend on the target architecture and command line +" options and some comments may double as logical line number directives or +" preprocessor commands. This situation is described at +" http://sourceware.org/binutils/docs-2.22/as/Comments.html +" Some line comment characters have other meanings for other targets. For +" example, .type directives may use the `@' character which is also an ARM +" comment marker. +" As a compromise to accommodate what I arbitrarily assume to be the most +" frequently used features of the most popular architectures (and also the +" non-GNU assembly languages that use this syntax file because their asm files +" are also named *.asm), the following are used as line comment characters: +syn match asmComment "[#;!|].*" contains=asmTodo,@Spell + +" Side effects of this include: +" - When `;' is used to separate statements on the same line (many targets +" support this), all statements except the first get highlighted as +" comments. As a remedy, remove `;' from the above. +" - ARM comments are not highlighted correctly. For ARM, uncomment the +" following two lines and comment the one above. +"syn match asmComment "@.*" contains=asmTodo +"syn match asmComment "^#.*" contains=asmTodo + +" Advanced users of specific architectures will probably want to change the +" comment highlighting or use a specific, more comprehensive syntax file. + +syn match asmInclude "\.include" +syn match asmCond "\.if" +syn match asmCond "\.else" +syn match asmCond "\.endif" +syn match asmMacro "\.macro" +syn match asmMacro "\.endm" + +" Assembler directives start with a '.' and may contain upper case (e.g., +" .ABORT), numbers (e.g., .p2align), dash (e.g., .app-file) and underscore in +" CFI directives (e.g., .cfi_startproc). This will also match labels starting +" with '.', including the GCC auto-generated '.L' labels. +syn match asmDirective "\.[A-Za-z][0-9A-Za-z-_]*" + +syn case match + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default methods for highlighting. Can be overridden later +hi def link asmSection Special +hi def link asmLabel Label +hi def link asmComment Comment +hi def link asmTodo Todo +hi def link asmDirective Statement + +hi def link asmInclude Include +hi def link asmCond PreCondit +hi def link asmMacro Macro + +if exists('g:asm_legacy_syntax_groups') + hi def link hexNumber Number + hi def link decNumber Number + hi def link octNumber Number + hi def link binNumber Number + hi def link asmHexadecimal hexNumber + hi def link asmDecimal decNumber + hi def link asmOctal octNumber + hi def link asmBinary binNumber +else + hi def link asmHexadecimal Number + hi def link asmDecimal Number + hi def link asmOctal Number + hi def link asmBinary Number +endif +hi def link asmFloat Float + +hi def link asmString String +hi def link asmStringEscape Special +hi def link asmCharacter Character +hi def link asmCharacterEscape Special + +hi def link asmIdentifier Identifier +hi def link asmType Type + +let b:current_syntax = "asm" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet diff --git a/.config/vim/syntax/asm68k.vim b/.config/vim/syntax/asm68k.vim new file mode 100644 index 0000000..104887d --- /dev/null +++ b/.config/vim/syntax/asm68k.vim @@ -0,0 +1,378 @@ +" Vim syntax file +" Language: Motorola 68000 Assembler +" Maintainer: Steve Wall +" Last change: 2001 May 01 +" +" This is incomplete. In particular, support for 68020 and +" up and 68851/68881 co-processors is partial or non-existent. +" Feel free to contribute... +" + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" Partial list of register symbols +syn keyword asm68kReg a0 a1 a2 a3 a4 a5 a6 a7 d0 d1 d2 d3 d4 d5 d6 d7 +syn keyword asm68kReg pc sr ccr sp usp ssp + +" MC68010 +syn keyword asm68kReg vbr sfc sfcr dfc dfcr + +" MC68020 +syn keyword asm68kReg msp isp zpc cacr caar +syn keyword asm68kReg za0 za1 za2 za3 za4 za5 za6 za7 +syn keyword asm68kReg zd0 zd1 zd2 zd3 zd4 zd5 zd6 zd7 + +" MC68030 +syn keyword asm68kReg crp srp tc ac0 ac1 acusr tt0 tt1 mmusr + +" MC68040 +syn keyword asm68kReg dtt0 dtt1 itt0 itt1 urp + +" MC68851 registers +syn keyword asm68kReg cal val scc crp srp drp tc ac psr pcsr +syn keyword asm68kReg bac0 bac1 bac2 bac3 bac4 bac5 bac6 bac7 +syn keyword asm68kReg bad0 bad1 bad2 bad3 bad4 bad5 bad6 bad7 + +" MC68881/82 registers +syn keyword asm68kReg fp0 fp1 fp2 fp3 fp4 fp5 fp6 fp7 +syn keyword asm68kReg control status iaddr fpcr fpsr fpiar + +" M68000 opcodes - order is important! +syn match asm68kOpcode "\" +syn match asm68kOpcode "\" +syn match asm68kOpcode "\" +syn match asm68kOpcode "\" +syn match asm68kOpcode "\" +syn match asm68kOpcode "\" +syn match asm68kOpcode "\" +syn match asm68kOpcode "\" +syn match asm68kOpcode "\" +syn match asm68kOpcode "\" +syn match asm68kOpcode "\" +syn match asm68kOpcode "\" +syn match asm68kOpcode "\" +syn match asm68kOpcode "\" +syn match hexNumber "\<[0-9][0-9a-fA-F]*H\>" +syn match octNumber "@[0-7]\+\>" +syn match octNumber "\<[0-7]\+[QO]\>" +syn match binNumber "%[01]\+\>" +syn match binNumber "\<[01]\+B\>" +syn match decNumber "\<[0-9]\+D\=\>" +syn match floatE "_*E_*" contained +syn match floatExponent "_*E_*[-+]\=[0-9]\+" contained contains=floatE +syn match floatNumber "[-+]\=[0-9]\+_*E_*[-+]\=[0-9]\+" contains=floatExponent +syn match floatNumber "[-+]\=[0-9]\+\.[0-9]\+\(E[-+]\=[0-9]\+\)\=" contains=floatExponent +syn match floatNumber ":\([0-9a-f]\+_*\)\+" + +" Character string constants +syn match asm68kStringError "'[ -~]*'" +syn match asm68kStringError "'[ -~]*$" +syn region asm68kString start="'" skip="''" end="'" oneline contains=asm68kCharError +syn match asm68kCharError "[^ -~]" contained + +" Immediate data +syn match asm68kImmediate "#\$[0-9a-fA-F]\+" contains=hexNumber +syn match asm68kImmediate "#[0-9][0-9a-fA-F]*H" contains=hexNumber +syn match asm68kImmediate "#@[0-7]\+" contains=octNumber +syn match asm68kImmediate "#[0-7]\+[QO]" contains=octNumber +syn match asm68kImmediate "#%[01]\+" contains=binNumber +syn match asm68kImmediate "#[01]\+B" contains=binNumber +syn match asm68kImmediate "#[0-9]\+D\=" contains=decNumber +syn match asm68kSymbol "[a-z_?.][a-z0-9_?.$]*" contained +syn match asm68kImmediate "#[a-z_?.][a-z0-9_?.]*" contains=asm68kSymbol + +" Special items for comments +syn keyword asm68kTodo contained TODO + +" Operators +syn match asm68kOperator "[-+*/]" " Must occur before Comments +syn match asm68kOperator "\.SIZEOF\." +syn match asm68kOperator "\.STARTOF\." +syn match asm68kOperator "<<" " shift left +syn match asm68kOperator ">>" " shift right +syn match asm68kOperator "&" " bit-wise logical and +syn match asm68kOperator "!" " bit-wise logical or +syn match asm68kOperator "!!" " exclusive or +syn match asm68kOperator "<>" " inequality +syn match asm68kOperator "=" " must be before other ops containing '=' +syn match asm68kOperator ">=" +syn match asm68kOperator "<=" +syn match asm68kOperator "==" " operand existence - used in macro definitions + +" Condition code style operators +syn match asm68kOperator "<[CV][CS]>" +syn match asm68kOperator "" +syn match asm68kOperator "" +syn match asm68kOperator "<[HM]I>" +syn match asm68kOperator "" +syn match asm68kOperator "" +syn match asm68kOperator "" + +" Comments +syn match asm68kComment ";.*" contains=asm68kTodo +syn match asm68kComment "\s!.*"ms=s+1 contains=asm68kTodo +syn match asm68kComment "^\s*[*!].*" contains=asm68kTodo + +" Include +syn match asm68kInclude "\" +syn match asm68kCond "\" +syn match asm68kCond "\" +syn match asm68kCond "\" +syn match asm68kRepeat "\" +syn match asm68kRepeat "\" +syn match asm68kRepeat "\" +syn match asm68kRepeat "\" +syn match asm68kRepeat "\" + +" Macro definition +syn match asm68kMacro "\" +syn match asm68kMacro "\" +syn match asm68kMacro "\" +syn match asm68kMacroParam "\\[0-9]" + +" Conditional assembly +syn match asm68kPreCond "\" +syn match asm68kPreCond "\" +syn match asm68kPreCond "\" + +" Loop control +syn match asm68kPreCond "\" + +" Directives +syn match asm68kDirective "\" +syn match asm68kDirective "\" +syn match asm68kDirective "\" +syn match asm68kDirective "\" +syn match asm68kDirective "\<\(NO\)\=LIST\>" +syn match asm68kDirective "\" +syn match asm68kDirective "\" +syn match asm68kDirective "\" +syn match asm68kDirective "\" +syn match asm68kDirective "\<\(NO\)\=PAGE\>" +syn match asm68kDirective "\" +syn match asm68kDirective "\" +syn match asm68kDirective "\ +" Previous Maintainer: Kevin Dahlhausen +" Last Change: 2020 Oct 31 + +if exists("b:current_syntax") + finish +endif + +runtime! syntax/asm.vim + +syn case ignore + +syn match asmDirective "\.h8300[hs]n\=" + +"h8300[h] registers +syn match asmRegister "e\=r\o[lh]\=" + +"h8300[h] opcodes - order is important! +syn match asmOpcode "add\.[lbw]" +syn match asmOpcode "add[sx :]" +syn match asmOpcode "and\.[lbw]" +syn match asmOpcode "bl[deots]" +syn match asmOpcode "cmp\.[lbw]" +syn match asmOpcode "dec\.[lbw]" +syn match asmOpcode "divx[us].[bw]" +syn match asmOpcode "ext[su]\.[lw]" +syn match asmOpcode "inc\.[lw]" +syn match asmOpcode "mov\.[lbw]" +syn match asmOpcode "mulx[su]\.[bw]" +syn match asmOpcode "neg\.[lbw]" +syn match asmOpcode "not\.[lbw]" +syn match asmOpcode "or\.[lbw]" +syn match asmOpcode "pop\.[wl]" +syn match asmOpcode "push\.[wl]" +syn match asmOpcode "rotx\=[lr]\.[lbw]" +syn match asmOpcode "sha[lr]\.[lbw]" +syn match asmOpcode "shl[lr]\.[lbw]" +syn match asmOpcode "sub\.[lbw]" +syn match asmOpcode "xor\.[lbw]" + +syn keyword asmOpcode andc band bcc bclr bcs beq bf bge bgt +syn keyword asmOpcode bhi bhs biand bild bior bist bixor bmi +syn keyword asmOpcode bne bnot bnp bor bpl bpt bra brn bset +syn keyword asmOpcode bsr btst bst bt bvc bvs bxor cmp daa +syn keyword asmOpcode das eepmov eepmovw inc jmp jsr ldc movfpe +syn keyword asmOpcode movtpe mov nop orc rte rts sleep stc +syn keyword asmOpcode sub trapa xorc + +syn case match + +hi def link asmOpcode Statement +hi def link asmRegister Identifier + +let b:current_syntax = "asmh8300" + +" vim: nowrap sw=2 sts=2 ts=8 noet diff --git a/.config/vim/syntax/asn.vim b/.config/vim/syntax/asn.vim new file mode 100644 index 0000000..e90c7e0 --- /dev/null +++ b/.config/vim/syntax/asn.vim @@ -0,0 +1,73 @@ +" Vim syntax file +" Language: ASN.1 +" Maintainer: Claudio Fleiner +" URL: http://www.fleiner.com/vim/syntax/asn.vim +" Last Change: 2012 Oct 05 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" keyword definitions +syn keyword asnExternal DEFINITIONS BEGIN END IMPORTS EXPORTS FROM +syn match asnExternal "\" +syn match asnExternal "\" +syn keyword asnFieldOption DEFAULT OPTIONAL +syn keyword asnTagModifier IMPLICIT EXPLICIT +syn keyword asnTypeInfo ABSENT PRESENT SIZE UNIVERSAL APPLICATION PRIVATE +syn keyword asnBoolValue TRUE FALSE +syn keyword asnNumber MIN MAX +syn match asnNumber "\" +syn match asnNumber "\" +syn keyword asnType INTEGER REAL STRING BIT BOOLEAN OCTET NULL EMBEDDED PDV +syn keyword asnType BMPString IA5String TeletexString GeneralString GraphicString ISO646String NumericString PrintableString T61String UniversalString VideotexString VisibleString +syn keyword asnType ANY DEFINED +syn match asnType "\.\.\." +syn match asnType "OBJECT\s\+IDENTIFIER" +syn match asnType "TYPE-IDENTIFIER" +syn keyword asnType UTF8String +syn keyword asnStructure CHOICE SEQUENCE SET OF ENUMERATED CONSTRAINED BY WITH COMPONENTS CLASS + +" Strings and constants +syn match asnSpecial contained "\\\d\d\d\|\\." +syn region asnString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=asnSpecial +syn match asnCharacter "'[^\\]'" +syn match asnSpecialCharacter "'\\.'" +syn match asnNumber "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>" +syn match asnLineComment "--.*" +syn match asnLineComment "--.*--" + +syn match asnDefinition "^\s*[a-zA-Z][-a-zA-Z0-9_.\[\] \t{}]* *::="me=e-3 contains=asnType +syn match asnBraces "[{}]" + +syn sync ccomment asnComment + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link asnDefinition Function +hi def link asnBraces Function +hi def link asnStructure Statement +hi def link asnBoolValue Boolean +hi def link asnSpecial Special +hi def link asnString String +hi def link asnCharacter Character +hi def link asnSpecialCharacter asnSpecial +hi def link asnNumber asnValue +hi def link asnComment Comment +hi def link asnLineComment asnComment +hi def link asnType Type +hi def link asnTypeInfo PreProc +hi def link asnValue Number +hi def link asnExternal Include +hi def link asnTagModifier Function +hi def link asnFieldOption Type + +let &cpo = s:cpo_save +unlet s:cpo_save +let b:current_syntax = "asn" + +" vim: ts=8 diff --git a/.config/vim/syntax/aspperl.vim b/.config/vim/syntax/aspperl.vim new file mode 100644 index 0000000..5a9abed --- /dev/null +++ b/.config/vim/syntax/aspperl.vim @@ -0,0 +1,25 @@ +" Vim syntax file +" Language: Active State's PerlScript (ASP) +" Maintainer: Aaron Hope +" URL: http://nim.dhs.org/~edh/aspperl.vim +" Last Change: 2001 May 09 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +if !exists("main_syntax") + let main_syntax = 'perlscript' +endif + +runtime! syntax/html.vim +unlet b:current_syntax +syn include @AspPerlScript syntax/perl.vim + +syn cluster htmlPreproc add=AspPerlScriptInsideHtmlTags + +syn region AspPerlScriptInsideHtmlTags keepend matchgroup=Delimiter start=+<%=\=+ skip=+".*%>.*"+ end=+%>+ contains=@AspPerlScript +syn region AspPerlScriptInsideHtmlTags keepend matchgroup=Delimiter start=+]*>+ end=++ contains=@AspPerlScript + +let b:current_syntax = "aspperl" diff --git a/.config/vim/syntax/aspvbs.vim b/.config/vim/syntax/aspvbs.vim new file mode 100644 index 0000000..44909b6 --- /dev/null +++ b/.config/vim/syntax/aspvbs.vim @@ -0,0 +1,182 @@ +" Vim syntax file +" Language: Microsoft VBScript Web Content (ASP) +" Maintainer: Devin Weaver (non-functional) +" URL: http://tritarget.com/pub/vim/syntax/aspvbs.vim (broken) +" Last Change: 2006 Jun 19 +" by Dan Casey +" Version: $Revision: 1.3 $ +" Thanks to Jay-Jay for a syntax sync hack, hungarian +" notation, and extra highlighting. +" Thanks to patrick dehne for the folding code. +" Thanks to Dean Hall for testing the use of classes in +" VBScripts which I've been too scared to do. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +if !exists("main_syntax") + let main_syntax = 'aspvbs' +endif + +runtime! syntax/html.vim +unlet b:current_syntax + +syn cluster htmlPreProc add=AspVBScriptInsideHtmlTags + + +" Colored variable names, if written in hungarian notation +hi def AspVBSVariableSimple term=standout ctermfg=3 guifg=#99ee99 +hi def AspVBSVariableComplex term=standout ctermfg=3 guifg=#ee9900 +syn match AspVBSVariableSimple contained "\<\(bln\|byt\|dtm\=\|dbl\|int\|str\)\u\w*" +syn match AspVBSVariableComplex contained "\<\(arr\|ary\|obj\)\u\w*" + + +" Functions and methods that are in VB but will cause errors in an ASP page +" This is helpful if your porting VB code to ASP +" I removed (Count, Item) because these are common variable names in AspVBScript +syn keyword AspVBSError contained Val Str CVar CVDate DoEvents GoSub Return GoTo +syn keyword AspVBSError contained Stop LinkExecute Add Type LinkPoke +syn keyword AspVBSError contained LinkRequest LinkSend Declare Optional Sleep +syn keyword AspVBSError contained ParamArray Static Erl TypeOf Like LSet RSet Mid StrConv +" It may seem that most of these can fit into a keyword clause but keyword takes +" priority over all so I can't get the multi-word matches +syn match AspVBSError contained "\" +syn match AspVBSError contained "^\s*Open\s\+" +syn match AspVBSError contained "Debug\.[a-zA-Z0-9_]*" +syn match AspVBSError contained "^\s*[a-zA-Z0-9_]\+:" +syn match AspVBSError contained "[a-zA-Z0-9_]\+![a-zA-Z0-9_]\+" +syn match AspVBSError contained "^\s*#.*$" +syn match AspVBSError contained "\\|\" +syn match AspVBSError contained "\\|\\|\\|\\|\" +syn match AspVBSError contained "\" +" This one I want 'cause I always seem to mis-spell it. +syn match AspVBSError contained "Respon\?ce\.\S*" +syn match AspVBSError contained "Respose\.\S*" +" When I looked up the VBScript syntax it mentioned that Property Get/Set/Let +" statements are illegal, however, I have received reports that they do work. +" So I commented it out for now. +" syn match AspVBSError contained "\" + +" AspVBScript Reserved Words. +syn match AspVBSStatement contained "\\|\" +syn match AspVBSStatement contained "\" +syn match AspVBSStatement contained "\" +syn match AspVBSStatement contained "\" +syn match AspVBSStatement contained "\" +syn match AspVBSStatement contained "\\|\" +syn match AspVBSStatement contained "\" +syn keyword AspVBSStatement contained Call Class Const Default Dim Do Loop Erase And +syn keyword AspVBSStatement contained Function If Then Else ElseIf Or +syn keyword AspVBSStatement contained Private Public Randomize ReDim +syn keyword AspVBSStatement contained Select Case Sub While With Wend Not + +" AspVBScript Functions +syn keyword AspVBSFunction contained Abs Array Asc Atn CBool CByte CCur CDate CDbl +syn keyword AspVBSFunction contained Chr CInt CLng Cos CreateObject CSng CStr Date +syn keyword AspVBSFunction contained DateAdd DateDiff DatePart DateSerial DateValue +syn keyword AspVBSFunction contained Date Day Exp Filter Fix FormatCurrency +syn keyword AspVBSFunction contained FormatDateTime FormatNumber FormatPercent +syn keyword AspVBSFunction contained GetObject Hex Hour InputBox InStr InStrRev Int +syn keyword AspVBSFunction contained IsArray IsDate IsEmpty IsNull IsNumeric +syn keyword AspVBSFunction contained IsObject Join LBound LCase Left Len LoadPicture +syn keyword AspVBSFunction contained Log LTrim Mid Minute Month MonthName MsgBox Now +syn keyword AspVBSFunction contained Oct Replace RGB Right Rnd Round RTrim +syn keyword AspVBSFunction contained ScriptEngine ScriptEngineBuildVersion +syn keyword AspVBSFunction contained ScriptEngineMajorVersion +syn keyword AspVBSFunction contained ScriptEngineMinorVersion Second Sgn Sin Space +syn keyword AspVBSFunction contained Split Sqr StrComp StrReverse String Tan Time Timer +syn keyword AspVBSFunction contained TimeSerial TimeValue Trim TypeName UBound UCase +syn keyword AspVBSFunction contained VarType Weekday WeekdayName Year + +" AspVBScript Methods +syn keyword AspVBSMethods contained Add AddFolders BuildPath Clear Close Copy +syn keyword AspVBSMethods contained CopyFile CopyFolder CreateFolder CreateTextFile +syn keyword AspVBSMethods contained Delete DeleteFile DeleteFolder DriveExists +syn keyword AspVBSMethods contained Exists FileExists FolderExists +syn keyword AspVBSMethods contained GetAbsolutePathName GetBaseName GetDrive +syn keyword AspVBSMethods contained GetDriveName GetExtensionName GetFile +syn keyword AspVBSMethods contained GetFileName GetFolder GetParentFolderName +syn keyword AspVBSMethods contained GetSpecialFolder GetTempName Items Keys Move +syn keyword AspVBSMethods contained MoveFile MoveFolder OpenAsTextStream +syn keyword AspVBSMethods contained OpenTextFile Raise Read ReadAll ReadLine Remove +syn keyword AspVBSMethods contained RemoveAll Skip SkipLine Write WriteBlankLines +syn keyword AspVBSMethods contained WriteLine +syn match AspVBSMethods contained "Response\.\w*" +" Colorize boolean constants: +syn keyword AspVBSMethods contained true false + +" AspVBScript Number Constants +" Integer number, or floating point number without a dot. +syn match AspVBSNumber contained "\<\d\+\>" +" Floating point number, with dot +syn match AspVBSNumber contained "\<\d\+\.\d*\>" +" Floating point number, starting with a dot +syn match AspVBSNumber contained "\.\d\+\>" + +" String and Character Constants +" removed (skip=+\\\\\|\\"+) because VB doesn't have backslash escaping in +" strings (or does it?) +syn region AspVBSString contained start=+"+ end=+"+ keepend + +" AspVBScript Comments +syn region AspVBSComment contained start="^REM\s\|\sREM\s" end="$" contains=AspVBSTodo keepend +syn region AspVBSComment contained start="^'\|\s'" end="$" contains=AspVBSTodo keepend +" misc. Commenting Stuff +syn keyword AspVBSTodo contained TODO FIXME + +" Cosmetic syntax errors commanly found in VB but not in AspVBScript +" AspVBScript doesn't use line numbers +syn region AspVBSError contained start="^\d" end="\s" keepend +" AspVBScript also doesn't have type defining variables +syn match AspVBSError contained "[a-zA-Z0-9_][\$&!#]"ms=s+1 +" Since 'a%' is a VB variable with a type and in AspVBScript you can have 'a%>' +" I have to make a special case so 'a%>' won't show as an error. +syn match AspVBSError contained "[a-zA-Z0-9_]%\($\|[^>]\)"ms=s+1 + +" Top Cluster +syn cluster AspVBScriptTop contains=AspVBSStatement,AspVBSFunction,AspVBSMethods,AspVBSNumber,AspVBSString,AspVBSComment,AspVBSError,AspVBSVariableSimple,AspVBSVariableComplex + +" Folding +syn region AspVBSFold start="^\s*\(class\)\s\+.*$" end="^\s*end\s\+\(class\)\>.*$" fold contained transparent keepend +syn region AspVBSFold start="^\s*\(private\|public\)\=\(\s\+default\)\=\s\+\(sub\|function\)\s\+.*$" end="^\s*end\s\+\(function\|sub\)\>.*$" fold contained transparent keepend + +" Define AspVBScript delimiters +" <%= func("string_with_%>_in_it") %> This is illegal in ASP syntax. +syn region AspVBScriptInsideHtmlTags keepend matchgroup=Delimiter start=+<%=\=+ end=+%>+ contains=@AspVBScriptTop, AspVBSFold +syn region AspVBScriptInsideHtmlTags keepend matchgroup=Delimiter start=+]*\s\+runatserver[^>]*>+ end=++ contains=@AspVBScriptTop + + +" Synchronization +" syn sync match AspVBSSyncGroup grouphere AspVBScriptInsideHtmlTags "<%" +" This is a kludge so the HTML will sync properly +syn sync match htmlHighlight grouphere htmlTag "%>" + + + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +"hi def link AspVBScript Special +hi def link AspVBSLineNumber Comment +hi def link AspVBSNumber Number +hi def link AspVBSError Error +hi def link AspVBSStatement Statement +hi def link AspVBSString String +hi def link AspVBSComment Comment +hi def link AspVBSTodo Todo +hi def link AspVBSFunction Identifier +hi def link AspVBSMethods PreProc +hi def link AspVBSEvents Special +hi def link AspVBSTypeSpecifier Type + + +let b:current_syntax = "aspvbs" + +if main_syntax == 'aspvbs' + unlet main_syntax +endif + +" vim: ts=8:sw=2:sts=0:noet diff --git a/.config/vim/syntax/asterisk.vim b/.config/vim/syntax/asterisk.vim new file mode 100644 index 0000000..4b3d246 --- /dev/null +++ b/.config/vim/syntax/asterisk.vim @@ -0,0 +1,88 @@ +" Vim syntax file +" Language: Asterisk config file +" Maintainer: Jean Aunis +" Previous Maintainer: brc007 +" Updated for 1.2 by Tilghman Lesher (Corydon76) +" Last Change: 2015 Feb 27 +" version 0.4 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn sync clear +syn sync fromstart + +syn keyword asteriskTodo TODO contained +syn match asteriskComment ";.*" contains=asteriskTodo +syn match asteriskContext "\[.\{-}\]" +syn match asteriskExten "^\s*\zsexten\s*=>\?\s*[^,]\+\ze," contains=asteriskPattern nextgroup=asteriskPriority +syn match asteriskExten "^\s*\zssame\s*=>\?\s*\ze" nextgroup=asteriskPriority +syn match asteriskExten "^\s*\(register\|channel\|ignorepat\|include\|l\?e\?switch\|\(no\)\?load\)\s*=>\?" +syn match asteriskPattern "_\(\[[[:alnum:]#*\-]\+\]\|[[:alnum:]#*]\)*\.\?" contained +syn match asteriskPattern "[^A-Za-z0-9,]\zs[[:alnum:]#*]\+\ze" contained +syn match asteriskApp ",\zs[a-zA-Z]\+\ze$" +syn match asteriskApp ",\zs[a-zA-Z]\+\ze(" +" Digits plus oldlabel (newlabel) +syn match asteriskPriority "\zs[[:digit:]]\+\(+[[:alpha:]][[:alnum:]_]*\)\?\(([[:alpha:]][[:alnum:]_]*)\)\?\ze," contains=asteriskLabel +" oldlabel plus digits (newlabel) +syn match asteriskPriority "\zs[[:alpha:]][[:alnum:]_]*+[[:digit:]]\+\(([[:alpha:]][[:alnum:]_]*)\)\?\ze," contains=asteriskLabel +" s or n plus digits (newlabel) +syn match asteriskPriority "\zs[sn]\(+[[:digit:]]\+\)\?\(([[:alpha:]][[:alnum:]_]*)\)\?\ze," contains=asteriskLabel +syn match asteriskLabel "(\zs[[:alpha:]][[:alnum:]]*\ze)" contained +syn match asteriskError "^\s*#\s*[[:alnum:]]*" +syn match asteriskInclude "^\s*#\s*\(include\|exec\)\s.*" +syn match asteriskVar "\${_\{0,2}[[:alpha:]][[:alnum:]_]*\(:-\?[[:digit:]]\+\(:[[:digit:]]\+\)\?\)\?}" +syn match asteriskVar "_\{0,2}[[:alpha:]][[:alnum:]_]*\ze=" +syn match asteriskVarLen "\${_\{0,2}[[:alpha:]][[:alnum:]_]*(.*)}" contains=asteriskVar,asteriskVarLen,asteriskExp +syn match asteriskVarLen "(\zs[[:alpha:]][[:alnum:]_]*(.\{-})\ze=" contains=asteriskVar,asteriskVarLen,asteriskExp +syn match asteriskExp "\$\[.\{-}\]" contains=asteriskVar,asteriskVarLen,asteriskExp +syn match asteriskCodecsPermit "^\s*\(allow\|disallow\)\s*=\s*.*$" contains=asteriskCodecs +syn match asteriskCodecs "\(vp9\|vp8\|h264\|h263p\|h263\|h261\|jpeg\|opus\|g722\|g723\|gsm\|ulaw\|alaw\|g719\|g726\|g726aal2\|siren7\|siren14\|adpcm\|slin\|lpc10\|g729\|speex\|ilbc\|wav\|all\s*$\)" +syn match asteriskError "^\(type\|auth\|permit\|deny\|bindaddr\|host\)\s*=.*$" +syn match asteriskType "^\zstype=\ze\<\(peer\|user\|friend\)\>$" contains=asteriskTypeType +syn match asteriskTypeType "\<\(peer\|user\|friend\)\>" contained +syn match asteriskAuth "^\zsauth\s*=\ze\s*\<\(md5\|rsa\|plaintext\)\>$" contains=asteriskAuthType +syn match asteriskAuthType "\<\(md5\|rsa\|plaintext\)\>" +syn match asteriskAuth "^\zs\(secret\|inkeys\|outkey\)\s*=\ze.*$" +syn match asteriskAuth "^\(permit\|deny\)\s*=\s*\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}\s*$" contains=asteriskIPRange +syn match asteriskIPRange "\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}" contained +syn match asteriskIP "\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}" contained +syn match asteriskHostname "[[:alnum:]][[:alnum:]\-\.]*\.[[:alpha:]]{2,10}" contained +syn match asteriskPort "\d\{1,5}" contained +syn match asteriskSetting "^bindaddr\s*=\s*\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}$" contains=asteriskIP +syn match asteriskSetting "^port\s*=\s*\d\{1,5}\s*$" contains=asteriskPort +syn match asteriskSetting "^host\s*=\s*\(dynamic\|\(\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}\)\|\([[:alnum:]][[:alnum:]\-\.]*\.[[:alpha:]]{2,10}\)\)" contains=asteriskIP,asteriskHostname + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link asteriskComment Comment +hi def link asteriskExten String +hi def link asteriskContext Preproc +hi def link asteriskPattern Type +hi def link asteriskApp Statement +hi def link asteriskInclude Preproc +hi def link asteriskIncludeBad Error +hi def link asteriskPriority Preproc +hi def link asteriskLabel Type +hi def link asteriskVar String +hi def link asteriskVarLen Function +hi def link asteriskExp Type +hi def link asteriskCodecsPermit Preproc +hi def link asteriskCodecs String +hi def link asteriskType Statement +hi def link asteriskTypeType Type +hi def link asteriskAuth String +hi def link asteriskAuthType Type +hi def link asteriskIPRange Identifier +hi def link asteriskIP Identifier +hi def link asteriskPort Identifier +hi def link asteriskHostname Identifier +hi def link asteriskSetting Statement +hi def link asteriskError Error + +let b:current_syntax = "asterisk" +" vim: ts=8 sw=2 + diff --git a/.config/vim/syntax/asteriskvm.vim b/.config/vim/syntax/asteriskvm.vim new file mode 100644 index 0000000..fa55af5 --- /dev/null +++ b/.config/vim/syntax/asteriskvm.vim @@ -0,0 +1,51 @@ +" Vim syntax file +" Language: Asterisk voicemail config file +" Maintainer: Tilghman Lesher (Corydon76) +" Last Change: 2006 Mar 21 +" version 0.2 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn sync clear +syn sync fromstart + + +syn keyword asteriskvmTodo TODO contained +syn match asteriskvmComment ";.*" contains=asteriskvmTodo +syn match asteriskvmContext "\[.\{-}\]" + +" ZoneMessages +syn match asteriskvmZone "^[[:alnum:]]\+\s*=>\?\s*[[:alnum:]/_]\+|.*$" contains=zoneName,zoneDef +syn match zoneName "=\zs[[:alnum:]/_]\+\ze" contained +syn match zoneDef "|\zs.*\ze$" contained + +syn match asteriskvmSetting "\<\(format\|serveremail\|minmessage\|maxmessage\|maxgreet\|skipms\|maxsilence\|silencethreshold\|maxlogins\)=" +syn match asteriskvmSetting "\<\(externnotify\|externpass\|directoryintro\|charset\|adsi\(fdn\|sec\|ver\)\|\(pager\)\?fromstring\|email\(subject\|body\|cmd\)\|tz\|cidinternalcontexts\|saydurationm\|dialout\|callback\)=" +syn match asteriskvmSettingBool "\<\(attach\|pbxskip\|usedirectory\|saycid\|sayduration\|sendvoicemail\|review\|operator\|envelope\|delete\|nextaftercmd\|forcename\|forcegreeting\)=\(yes\|no\|1\|0\|true\|false\|t\|f\)" + +" Individual mailbox definitions +syn match asteriskvmMailbox "^[[:digit:]]\+\s*=>\?\s*[[:digit:]]\+\(,[^,]*\(,[^,]*\(,[^,]*\(,[^,]*\)\?\)\?\)\?\)\?" contains=mailboxEmail,asteriskvmSetting,asteriskvmSettingBool,comma +syn match mailboxEmail ",\zs[^@=,]*@[[:alnum:]\-\.]\+\.[[:alpha:]]\{2,10}\ze" contains=comma +syn match comma "[,|]" contained + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link asteriskvmComment Comment +hi def link asteriskvmContext Identifier +hi def link asteriskvmZone Type +hi def link zoneName String +hi def link zoneDef String +hi def link asteriskvmSetting Type +hi def link asteriskvmSettingBool Type + +hi def link asteriskvmMailbox Statement +hi def link mailboxEmail String + +let b:current_syntax = "asteriskvm" + +" vim: ts=8 sw=2 + diff --git a/.config/vim/syntax/astro.vim b/.config/vim/syntax/astro.vim new file mode 100644 index 0000000..0816051 --- /dev/null +++ b/.config/vim/syntax/astro.vim @@ -0,0 +1,190 @@ +" Vim syntax file. +" Language: Astro +" Author: Wuelner Martínez +" Maintainer: Wuelner Martínez +" URL: https://github.com/wuelnerdotexe/vim-astro +" Last Change: 2022 Aug 22 +" Based On: Evan Lecklider's vim-svelte +" Changes: See https://github.com/evanleck/vim-svelte +" Credits: See vim-svelte on github + +" Quit when a (custom) syntax file was already loaded. +if !exists('main_syntax') + if exists('b:current_syntax') + finish + endif + let main_syntax = 'astro' +elseif exists('b:current_syntax') && b:current_syntax == 'astro' + finish +endif + +" Astro syntax variables are initialized. +let g:astro_typescript = get(g:, 'astro_typescript', 'disable') +let g:astro_stylus = get(g:, 'astro_stylus', 'disable') + +let s:cpoptions_save = &cpoptions +set cpoptions&vim + +" Embedded HTML syntax. +runtime! syntax/html.vim + +" htmlTagName: expand HTML tag names to include mixed case and periods. +syntax match htmlTagName contained "\<[a-zA-Z\.]*\>" + +" astroDirectives: add Astro Directives to HTML arguments. +syntax match astroDirectives contained '\<[a-z]\+:[a-z|]*\>' containedin=htmlTag + +unlet b:current_syntax + +if g:astro_typescript == 'enable' + " Embedded TypeScript syntax. + syntax include @astroJavaScript syntax/typescript.vim + + " javaScriptExpression: a javascript expression is used as an arg value. + syntax clear javaScriptExpression + syntax region javaScriptExpression + \ contained start=+&{+ + \ keepend end=+};+ + \ contains=@astroJavaScript,@htmlPreproc + + " javaScript: add TypeScript support to HTML script tag. + syntax clear javaScript + syntax region javaScript + \ start=+]*>+ + \ keepend + \ end=+]*>+me=s-1 + \ contains=htmlScriptTag,@astroJavaScript,@htmlPreproc,htmlCssStyleComment +else + " Embedded JavaScript syntax. + syntax include @astroJavaScript syntax/javascript.vim +endif + +" astroFence: detect the Astro fence. +syntax match astroFence contained +^---$+ + +" astrojavaScript: add TypeScript support to Astro code fence. +syntax region astroJavaScript + \ start=+^---$+ + \ keepend + \ end=+^---$+ + \ contains=htmlTag,@astroJavaScript,@htmlPreproc,htmlCssStyleComment,htmlEndTag,astroFence + \ fold + +unlet b:current_syntax + +if g:astro_typescript == 'enable' + " Embedded TypeScript React (TSX) syntax. + syntax include @astroJavaScriptReact syntax/typescriptreact.vim +else + " Embedded JavaScript React (JSX) syntax. + syntax include @astroJavaScriptReact syntax/javascriptreact.vim +endif + +" astroJavaScriptExpression: add {JSX or TSX} support to Astro expresions. +execute 'syntax region astroJavaScriptExpression start=+{+ keepend end=+}+ ' . + \ 'contains=@astroJavaScriptReact, @htmlPreproc containedin=' . join([ + \ 'htmlArg', 'htmlBold', 'htmlBoldItalic', 'htmlBoldItalicUnderline', + \ 'htmlBoldUnderline', 'htmlBoldUnderlineItalic', 'htmlH1', 'htmlH2', + \ 'htmlH3', 'htmlH4', 'htmlH5', 'htmlH6', 'htmlHead', 'htmlItalic', + \ 'htmlItalicBold', 'htmlItalicBoldUnderline', 'htmlItalicUnderline', + \ 'htmlItalicUnderlineBold', 'htmlLeadingSpace', 'htmlLink', + \ 'htmlStrike', 'htmlString', 'htmlTag', 'htmlTitle', 'htmlUnderline', + \ 'htmlUnderlineBold', 'htmlUnderlineBoldItalic', + \ 'htmlUnderlineItalic', 'htmlUnderlineItalicBold', 'htmlValue' + \ ], ',') + +" cssStyle: add CSS style tags support in TypeScript React. +syntax region cssStyle + \ start=+]*>+ + \ keepend + \ end=+]*>+me=s-1 + \ contains=htmlTag,@htmlCss,htmlCssStyleComment,@htmlPreproc,htmlEndTag + \ containedin=@astroJavaScriptReact + +unlet b:current_syntax + +" Embedded SCSS syntax. +syntax include @astroScss syntax/scss.vim + +" cssStyle: add SCSS style tags support in Astro. +syntax region scssStyle + \ start=/\_[^>]*\(lang\)=\("\|''\)[^\2]*scss[^\2]*\2\_[^>]*>/ + \ keepend + \ end=++me=s-1 + \ contains=@astroScss,astroSurroundingTag + \ fold + +unlet b:current_syntax + +" Embedded SASS syntax. +syntax include @astroSass syntax/sass.vim + +" cssStyle: add SASS style tags support in Astro. +syntax region sassStyle + \ start=/\_[^>]*\(lang\)=\("\|''\)[^\2]*sass[^\2]*\2\_[^>]*>/ + \ keepend + \ end=++me=s-1 + \ contains=@astroSass,astroSurroundingTag + \ fold + +unlet b:current_syntax + +" Embedded LESS syntax. +syntax include @astroLess syntax/less.vim + +" cssStyle: add LESS style tags support in Astro. +syntax region lessStyle + \ start=/\_[^>]*\(lang\)=\("\|''\)[^\2]*less[^\2]*\2\_[^>]*>/ + \ keepend + \ end=++me=s-1 + \ contains=@astroLess,astroSurroundingTag + \ fold + +unlet b:current_syntax + +" Embedded Stylus syntax. +" NOTE: Vim does not provide stylus support by default, but you can install +" this plugin to support it: https://github.com/wavded/vim-stylus +if g:astro_stylus == 'enable' + try + " Embedded Stylus syntax. + syntax include @astroStylus syntax/stylus.vim + + " stylusStyle: add Stylus style tags support in Astro. + syntax region stylusStyle + \ start=/\_[^>]*\(lang\)=\("\|''\)[^\2]*stylus[^\2]*\2\_[^>]*>/ + \ keepend + \ end=++me=s-1 + \ contains=@astroStylus,astroSurroundingTag + \ fold + + unlet b:current_syntax + catch + echomsg "you need install a external plugin for support stylus in .astro files" + endtry +endif + +" astroSurroundingTag: add surround HTML tag to script and style. +syntax region astroSurroundingTag + \ start=+<\(script\|style\)+ + \ end=+>+ + \ contains=htmlTagError,htmlTagN,htmlArg,htmlValue,htmlEvent,htmlString + \ contained + \ fold + +" Define the default highlighting. +" Only used when an item doesn't have highlighting yet. +highlight default link astroDirectives Special +highlight default link astroFence Comment + +let b:current_syntax = 'astro' +if main_syntax == 'astro' + unlet main_syntax +endif + +" Sync from start because of the wacky nesting. +syntax sync fromstart + +let &cpoptions = s:cpoptions_save +unlet s:cpoptions_save +" vim: ts=8 diff --git a/.config/vim/syntax/asy.vim b/.config/vim/syntax/asy.vim new file mode 100644 index 0000000..de17d92 --- /dev/null +++ b/.config/vim/syntax/asy.vim @@ -0,0 +1,249 @@ +" Vim syntax file +" Language: Asymptote +" Maintainer: Avid Seeker +" Andy Hammerlindl +" Last Change: 2022 Jan 05 +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121) + +" Hacked together from Bram Moolenaar's C syntax file, and Claudio Fleiner's +" Java syntax file. + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" useful C/C++/Java keywords +syn keyword asyStatement break return continue unravel +syn keyword asyConditional if else +syn keyword asyRepeat while for do +syn keyword asyExternal access from import include +syn keyword asyOperator new operator + +" basic asymptote keywords +syn keyword asyConstant VERSION +syn keyword asyConstant true false default infinity inf nan +syn keyword asyConstant null nullframe nullpath nullpen +syn keyword asyConstant intMin intMax realMin realMax +syn keyword asyConstant realEpsilon realDigits +syn keyword asyPathSpec and cycle controls tension atleast curl +syn keyword asyStorageClass static public restricted private explicit +syn keyword asyStructure struct typedef +syn keyword asyType void bool bool3 int real string file +syn keyword asyType pair triple transform guide path pen frame +syn keyword asyType picture + +" module specific keywords +if exists("asy_syn_plain") + syn keyword asyConstant currentpicture currentpen defaultpen + syn keyword asyConstant inch inches cm mm bp pt up down right left + syn keyword asyConstant E NE N NW W SW S SE + syn keyword asyConstant ENE NNE NNW WNW WSW SSW SSE ESE + syn keyword asyConstant I pi twopi + syn keyword asyConstant CCW CW + syn keyword asyConstant undefined sqrtEpsilon Align mantissaBits + syn keyword asyConstant identity zeroTransform invert + syn keyword asyConstant stdin stdout + syn keyword asyConstant unitsquare unitcircle circleprecision + syn keyword asyConstant solid dotted Dotted dashed dashdotted + syn keyword asyConstant longdashed longdashdotted + syn keyword asyConstant squarecap roundcap extendcap + syn keyword asyConstant miterjoin roundjoin beveljoin + syn keyword asyConstant zerowinding evenodd basealign nobasealign + syn keyword asyConstant black white gray red green blue Cyan Magenta + syn keyword asyConstant Yellow Black cyan magenta yellow palered + syn keyword asyConstant palegreen paleblue palecyan palemagenta + syn keyword asyConstant paleyellow palegray lightred lightgreen + syn keyword asyConstant lightblue lightcyan lightmagenta lightyellow + syn keyword asyConstant lightgray mediumred mediumgreen mediumblue + syn keyword asyConstant mediumcyan mediummagenta mediumyellow + syn keyword asyConstant mediumgray heavyred heavygreen heavyblue + syn keyword asyConstant heavycyan heavymagenta lightolive heavygray + syn keyword asyConstant deepred deepgreen deepblue deepcyan + syn keyword asyConstant deepmagenta deepyellow deepgray darkred + syn keyword asyConstant darkgreen darkblue darkcyan darkmagenta + syn keyword asyConstant darkolive darkgray orange fuchsia chartreuse + syn keyword asyConstant springgreen purple royalblue salmon brown + syn keyword asyConstant olive darkbrown pink palegrey lightgrey + syn keyword asyConstant mediumgrey grey heavygrey deepgrey darkgrey + + if exists("asy_syn_texcolors") + syn keyword asyConstant GreenYellow Yellow Goldenrod Dandelion + syn keyword asyConstant Apricot Peach Melon YellowOrange Orange + syn keyword asyConstant BurntOrange Bittersweet RedOrange Mahogany + syn keyword asyConstant Maroon BrickRed Red OrangeRed RubineRed + syn keyword asyConstant WildStrawberry Salmon CarnationPink Magenta + syn keyword asyConstant VioletRed Rhodamine Mulberry RedViolet + syn keyword asyConstant Fuchsia Lavender Thistle Orchid DarkOrchid + syn keyword asyConstant Purple Plum Violet RoyalPurple BlueViolet + syn keyword asyConstant Periwinkle CadetBlue CornflowerBlue + syn keyword asyConstant MidnightBlue NavyBlue RoyalBlue Blue + syn keyword asyConstant Cerulean Cyan ProcessBlue SkyBlue Turquoise + syn keyword asyConstant TealBlue Aquamarine BlueGreen Emerald + syn keyword asyConstant JungleGreen SeaGreen Green ForestGreen + syn keyword asyConstant PineGreen LimeGreen YellowGreen SpringGreen + syn keyword asyConstant OliveGreen RawSienna Sepia Brown Tan Gray + syn keyword asyConstant Black White + endif + + if exists("asy_syn_x11colors") + syn keyword asyConstant AliceBlue AntiqueWhite Aqua Aquamarine Azure + syn keyword asyConstant Beige Bisque Black BlanchedAlmond Blue + syn keyword asyConstant BlueViolet Brown BurlyWood CadetBlue + syn keyword asyConstant Chartreuse Chocolate Coral CornflowerBlue + syn keyword asyConstant Cornsilk Crimson Cyan DarkBlue DarkCyan + syn keyword asyConstant DarkGoldenrod DarkGray DarkGreen DarkKhaki + syn keyword asyConstant DarkMagenta DarkOliveGreen DarkOrange + syn keyword asyConstant DarkOrchid DarkRed DarkSalmon DarkSeaGreen + syn keyword asyConstant DarkSlateBlue DarkSlateGray DarkTurquoise + syn keyword asyConstant DarkViolet DeepPink DeepSkyBlue DimGray + syn keyword asyConstant DodgerBlue FireBrick FloralWhite ForestGreen + syn keyword asyConstant Fuchsia Gainsboro GhostWhite Gold Goldenrod + syn keyword asyConstant Gray Green GreenYellow Honeydew HotPink + syn keyword asyConstant IndianRed Indigo Ivory Khaki Lavender + syn keyword asyConstant LavenderBlush LawnGreen LemonChiffon + syn keyword asyConstant LightBlue LightCoral LightCyan + syn keyword asyConstant LightGoldenrodYellow LightGreen LightGrey + syn keyword asyConstant LightPink LightSalmon LightSeaGreen + syn keyword asyConstant LightSkyBlue LightSlateGray LightSteelBlue + syn keyword asyConstant LightYellow Lime LimeGreen Linen Magenta + syn keyword asyConstant Maroon MediumAquamarine MediumBlue + syn keyword asyConstant MediumOrchid MediumPurple MediumSeaGreen + syn keyword asyConstant MediumSlateBlue MediumSpringGreen + syn keyword asyConstant MediumTurquoise MediumVioletRed MidnightBlue + syn keyword asyConstant MintCream MistyRose Moccasin NavajoWhite + syn keyword asyConstant Navy OldLace Olive OliveDrab Orange + syn keyword asyConstant OrangeRed Orchid PaleGoldenrod PaleGreen + syn keyword asyConstant PaleTurquoise PaleVioletRed PapayaWhip + syn keyword asyConstant PeachPuff Peru Pink Plum PowderBlue Purple + syn keyword asyConstant Red RosyBrown RoyalBlue SaddleBrown Salmon + syn keyword asyConstant SandyBrown SeaGreen Seashell Sienna Silver + syn keyword asyConstant SkyBlue SlateBlue SlateGray Snow SpringGreen + syn keyword asyConstant SteelBlue Tan Teal Thistle Tomato Turquoise + syn keyword asyConstant Violet Wheat White WhiteSmoke Yellow + syn keyword asyConstant YellowGreen + endif + + if exists("asy_syn_three") + syn keyword asyType path3 guide3 transform3 + syn keyword asyType projection light material patch surface tube + syn keyword asyConstant currentprojection currentlight defaultrender + syn keyword asyConstant identity4 O X Y Z + syn keyword asyConstant nolight nullpens + syn keyword asyConstant unitsphere unithemisphere unitplane octant1 + syn keyword asyConstant unitcone unitsolidcone unitcube unitcylinder + syn keyword asyConstant unitdisk unittube + endif +endif + + +" string constants +syn region asyCString start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=asyCSpecial +syn match asyCSpecial display contained +\\\(['"?\\abfnrtv]\|\o\{1,3}\)+ +syn match asyCSpecial display contained +\\\(x[0-9A-F]\{1,2\}\|$\)+ +" double quoted strings only special character is \" +syn region asyString start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=asySpecial +syn match asySpecial display contained +\(\\\)\@1 +" Last Change: 2001 May 09 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +syn keyword atlasStatement begin terminate +syn keyword atlasStatement fill calculate compare +syn keyword atlasStatement setup connect close open disconnect reset +syn keyword atlasStatement initiate read fetch +syn keyword atlasStatement apply measure verify remove +syn keyword atlasStatement perform leave finish output delay +syn keyword atlasStatement prepare execute +syn keyword atlasStatement do +syn match atlasStatement "\" +syn match atlasStatement "\" + +syn keyword atlasInclude include +syn keyword atlasDefine define require declare identify + +"syn keyword atlasReserved true false go nogo hi lo via +syn keyword atlasReserved true false + +syn keyword atlasStorageClass external global + +syn keyword atlasConditional if then else end +syn keyword atlasRepeat while for thru + +" Flags BEF and statement number +syn match atlasSpecial "^[BE ][ 0-9]\{,6}\>" + +" Number formats +syn match atlasHexNumber "\" +"Floating point number part only +syn match atlasDecimalNumber "\.\d\+\([eE][-+]\=\d\)\=\>" + +syn region atlasFormatString start=+((+ end=+\())\)\|\()[ ]*\$\)+me=e-1 +syn region atlasString start=+\ +" Last Change: 2018 Jan 23 +" Version: 2.9 +" Remark: Included by pike.vim, cmod.vim and optionally c.vim +" Remark: In order to make c.vim use it, set: c_autodoc + +" Quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn case match + +" A bunch of useful autodoc keywords +syn keyword autodocStatement contained appears belongs global +syn keyword autodocStatement contained decl directive inherit +syn keyword autodocStatement contained deprecated obsolete bugs +syn keyword autodocStatement contained copyright example fixme note param returns +syn keyword autodocStatement contained seealso thanks throws constant +syn keyword autodocStatement contained member index elem +syn keyword autodocStatement contained value type item + +syn keyword autodocRegion contained enum mapping code multiset array +syn keyword autodocRegion contained int string section mixed ol ul dl +syn keyword autodocRegion contained class module namespace +syn keyword autodocRegion contained endenum endmapping endcode endmultiset +syn keyword autodocRegion contained endarray endint endstring endsection +syn keyword autodocRegion contained endmixed endol endul enddl +syn keyword autodocRegion contained endclass endmodule endnamespace + +syn keyword autodocIgnore contained ignore endignore + +syn keyword autodocStatAcc contained b i u tt url pre sub sup +syn keyword autodocStatAcc contained ref rfc xml dl expr image + +syn keyword autodocTodo contained TODO FIXME XXX + +syn match autodocLineStart display "\(//\|/\?\*\)\@2<=!" +syn match autodocWords "[^!@{}[\]]\+" display contains=@Spell + +syn match autodocLink "@\[[^[\]]\+]"hs=s+2,he=e-1 display contains=autodocLead +syn match autodocAtStmt "@[a-z]\+\%(\s\|$\)\@="hs=s+1 display contains=autodocStatement,autodocIgnore,autodocLead,autodocRegion + +" Due to limitations of the matching algorithm, we cannot highlight +" nested autodocNStmtAcc structures correctly +syn region autodocNStmtAcc start="@[a-z]\+{" end="@}" contains=autodocStatAcc,autodocLead keepend + +syn match autodocUrl contained display ".\+" +syn region autodocAtUrlAcc start="{"ms=s+1 end="@}"he=e-1,me=e-2 contained display contains=autodocUrl,autodocLead keepend +syn region autodocNUrlAcc start="@url{" end="@}" contains=autodocStatAcc,autodocAtUrlAcc,autodocLead transparent + +syn match autodocSpecial "@@" display +syn match autodocLead "@" display contained + +"when wanted, highlight trailing white space +if exists("c_space_errors") + if !exists("c_no_trail_space_error") + syn match autodocSpaceError display excludenl "\s\+$" + endif + if !exists("c_no_tab_space_error") + syn match autodocSpaceError display " \+\t"me=e-1 + endif +endif + +if exists("c_minlines") + let b:c_minlines = c_minlines +else + if !exists("c_no_if0") + let b:c_minlines = 50 " #if 0 constructs can be long + else + let b:c_minlines = 15 " mostly for () constructs + endif +endif +exec "syn sync ccomment autodocComment minlines=" . b:c_minlines + +" Define the default highlighting. +" Only used when an item doesn't have highlighting yet +hi def link autodocStatement Statement +hi def link autodocStatAcc Statement +hi def link autodocRegion Structure +hi def link autodocAtStmt Error +hi def link autodocNStmtAcc Identifier +hi def link autodocLink Type +hi def link autodocTodo Todo +hi def link autodocSpaceError Error +hi def link autodocLineStart SpecialComment +hi def link autodocSpecial SpecialChar +hi def link autodocUrl Underlined +hi def link autodocLead Statement +hi def link autodocIgnore Delimiter + +let b:current_syntax = "autodoc" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8 diff --git a/.config/vim/syntax/autohotkey.vim b/.config/vim/syntax/autohotkey.vim new file mode 100644 index 0000000..a888394 --- /dev/null +++ b/.config/vim/syntax/autohotkey.vim @@ -0,0 +1,325 @@ +" Vim syntax file +" Language: AutoHotkey script file +" Maintainer: Michael Wong +" https://github.com/mmikeww/autohotkey.vim +" Latest Revision: 2022-07-25 +" Previous Maintainers: SungHyun Nam +" Nikolai Weibull + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn case ignore + +syn keyword autohotkeyTodo + \ contained + \ TODO FIXME XXX NOTE + +" only these chars are valid as escape sequences: ,%`;nrbtvaf +" https://autohotkey.com/docs/commands/_EscapeChar.htm +syn match autohotkeyEscape + \ display + \ '`[,%`;nrbtvaf]' + +syn region autohotkeyString + \ display + \ oneline + \ matchgroup=autohotkeyStringDelimiter + \ start=+"+ + \ end=+"+ + \ contains=autohotkeyEscape,autohotkeyMatchClass + +syn match autohotkeyVariable + \ display + \ oneline + \ contains=autohotkeyBuiltinVariable + \ keepend + \ '%\S\{-}%' + +syn keyword autohotkeyBuiltinVariable + \ A_Space A_Tab + \ A_WorkingDir A_ScriptDir A_ScriptName A_ScriptFullPath A_ScriptHwnd A_LineNumber + \ A_LineFile A_ThisFunc A_ThisLabel A_AhkVersion A_AhkPath A_IsUnicode A_IsCompiled A_ExitReason + \ A_YYYY A_MM A_DD A_MMMM A_MMM A_DDDD A_DDD A_WDay A_YDay A_YWeek A_Hour A_Min + \ A_Mon A_Year A_MDay A_NumBatchLines + \ A_Sec A_MSec A_Now A_NowUTC A_TickCount + \ A_IsSuspended A_IsPaused A_IsCritical A_BatchLines A_TitleMatchMode A_TitleMatchModeSpeed + \ A_DetectHiddenWindows A_DetectHiddenText A_AutoTrim A_StringCaseSense + \ A_FileEncoding A_FormatInteger A_FormatFloat A_WinDelay A_ControlDelay + \ A_SendMode A_SendLevel A_StoreCapsLockMode A_KeyDelay A_KeyDuration + \ A_KeyDelayPlay A_KeyDurationPlay A_MouseDelayPlay + \ A_MouseDelay A_DefaultMouseSpeed A_RegView A_IconHidden A_IconTip A_IconFile + \ A_CoordModeToolTip A_CoordModePixel A_CoordModeMouse A_CoordModeCaret A_CoordModeMenu + \ A_IconNumber + \ A_TimeIdle A_TimeIdlePhysical A_DefaultGui A_DefaultListView A_DefaultTreeView + \ A_Gui A_GuiControl A_GuiWidth A_GuiHeight A_GuiX A_GuiY A_GuiEvent + \ A_GuiControlEvent A_EventInfo + \ A_ThisMenuItem A_ThisMenu A_ThisMenuItemPos A_ThisHotkey A_PriorHotkey + \ A_PriorKey A_TimeSinceThisHotkey A_TimeSincePriorHotkey A_EndChar + \ ComSpec A_Temp A_OSType A_OSVersion A_Language A_ComputerName A_UserName + \ A_Is64BitOS A_PtrSize + \ A_WinDir A_ProgramFiles ProgramFiles A_AppData A_AppDataCommon A_Desktop + \ A_DesktopCommon A_StartMenu A_StartMenuCommon A_Programs + \ A_ProgramsCommon A_Startup A_StartupCommon A_MyDocuments A_IsAdmin + \ A_ScreenWidth A_ScreenHeight A_ScreenDPI A_IPAddress1 A_IPAddress2 A_IPAddress3 + \ A_IPAddress4 + \ A_Cursor A_CaretX A_CaretY Clipboard ClipboardAll ErrorLevel A_LastError + \ A_Index A_LoopFileName A_LoopRegName A_LoopReadLine A_LoopField + \ A_LoopFileExt A_LoopFileFullPath A_LoopFileLongPath A_LoopFileShortPath + \ A_LoopFileShortName A_LoopFileDir A_LoopFileTimeModified A_LoopFileTimeCreated + \ A_LoopFileTimeAccessed A_LoopFileAttrib A_LoopFileSize A_LoopFileSizeKB A_LoopFileSizeMB + \ A_LoopRegType A_LoopRegKey A_LoopRegSubKey A_LoopRegTimeModified + \ A_TimeIdleKeyboard A_TimeIdleMouse A_ListLines A_ComSpec A_LoopFilePath A_Args + +syn match autohotkeyBuiltinVariable + \ contained + \ display + \ '%\d\+%' + +syn keyword autohotkeyCommand + \ ClipWait EnvGet EnvSet EnvUpdate + \ Drive DriveGet DriveSpaceFree FileAppend FileCopy FileCopyDir + \ FileCreateDir FileCreateShortcut FileDelete FileGetAttrib FileEncoding + \ FileGetShortcut FileGetSize FileGetTime FileGetVersion FileInstall + \ FileMove FileMoveDir FileReadLine FileRead FileRecycle FileRecycleEmpty + \ FileRemoveDir FileSelectFolder FileSelectFile FileSetAttrib FileSetTime + \ IniDelete IniRead IniWrite SetWorkingDir + \ SplitPath + \ Gui GuiControl GuiControlGet IfMsgBox InputBox MsgBox Progress + \ SplashImage SplashTextOn SplashTextOff ToolTip TrayTip + \ Hotkey ListHotkeys BlockInput ControlSend ControlSendRaw GetKeyState + \ KeyHistory KeyWait Input Send SendRaw SendInput SendPlay SendEvent + \ SendMode SetKeyDelay SetNumScrollCapsLockState SetStoreCapslockMode + \ EnvAdd EnvDiv EnvMult EnvSub Random SetFormat Transform + \ AutoTrim BlockInput CoordMode Critical Edit ImageSearch + \ ListLines ListVars Menu OutputDebug PixelGetColor PixelSearch + \ SetBatchLines SetEnv SetTimer SysGet Thread Transform URLDownloadToFile + \ Click ControlClick MouseClick MouseClickDrag MouseGetPos MouseMove + \ SetDefaultMouseSpeed SetMouseDelay + \ Process Run RunWait RunAs Shutdown Sleep + \ RegDelete RegRead RegWrite + \ SoundBeep SoundGet SoundGetWaveVolume SoundPlay SoundSet + \ SoundSetWaveVolume + \ FormatTime IfInString IfNotInString Sort StringCaseSense StringGetPos + \ StringLeft StringRight StringLower StringUpper StringMid StringReplace + \ StringSplit StringTrimLeft StringTrimRight StringLen + \ StrSplit StrReplace Throw + \ Control ControlClick ControlFocus ControlGet ControlGetFocus + \ ControlGetPos ControlGetText ControlMove ControlSend ControlSendRaw + \ ControlSetText Menu PostMessage SendMessage SetControlDelay + \ WinMenuSelectItem GroupActivate GroupAdd GroupClose GroupDeactivate + \ DetectHiddenText DetectHiddenWindows SetTitleMatchMode SetWinDelay + \ StatusBarGetText StatusBarWait WinActivate WinActivateBottom WinClose + \ WinGet WinGetActiveStats WinGetActiveTitle WinGetClass WinGetPos + \ WinGetText WinGetTitle WinHide WinKill WinMaximize WinMinimize + \ WinMinimizeAll WinMinimizeAllUndo WinMove WinRestore WinSet + \ WinSetTitle WinShow WinWait WinWaitActive WinWaitNotActive WinWaitClose + \ SetCapsLockState SetNumLockState SetScrollLockState + \ Hotstring LoadPicture MenuGetHandle MenuGetName OnError OnClipboardChange + +syn keyword autohotkeyFunction + \ InStr RegExMatch RegExReplace StrLen SubStr Asc Chr Func + \ DllCall VarSetCapacity WinActive WinExist IsLabel OnMessage + \ Abs Ceil Exp Floor Log Ln Mod Round Sqrt Sin Cos Tan ASin ACos ATan + \ FileExist GetKeyState NumGet NumPut StrGet StrPut RegisterCallback + \ IsFunc Trim LTrim RTrim IsObject Object Array FileOpen + \ ComObjActive ComObjArray ComObjConnect ComObjCreate ComObjGet + \ ComObjError ComObjFlags ComObjQuery ComObjType ComObjValue ComObject + \ Format Exception Ord InputHook + +syn keyword autohotkeyStatement + \ Break Continue Exit ExitApp Gosub Goto OnExit Pause Return + \ Suspend Reload new class extends + +syn keyword autohotkeyRepeat + \ Loop + +syn keyword autohotkeyConditional + \ IfExist IfNotExist If IfEqual IfLess IfGreater Else + \ IfWinExist IfWinNotExist IfWinActive IfWinNotActive + \ IfNotEqual IfLessOrEqual IfGreaterOrEqual + \ while until for in try catch finally not + \ switch case default + +syn match autohotkeyPreProcStart + \ nextgroup= + \ autohotkeyInclude, + \ autohotkeyPreProc + \ skipwhite + \ display + \ '^\s*\zs#' + +syn keyword autohotkeyInclude + \ contained + \ Include + \ IncludeAgain + +syn keyword autohotkeyPreProc + \ contained + \ HotkeyInterval HotKeyModifierTimeout + \ Hotstring + \ IfWinActive IfWinNotActive IfWinExist IfWinNotExist + \ If IfTimeout + \ MaxHotkeysPerInterval MaxThreads MaxThreadsBuffer MaxThreadsPerHotkey + \ UseHook InstallKeybdHook InstallMouseHook + \ KeyHistory + \ NoTrayIcon SingleInstance + \ WinActivateForce + \ AllowSameLineComments + \ ClipboardTimeout + \ CommentFlag + \ ErrorStdOut + \ EscapeChar + \ MaxMem + \ NoEnv + \ Persistent + \ LTrim + \ InputLevel + \ MenuMaskKey + \ Warn + +syn keyword autohotkeyMatchClass + \ ahk_group ahk_class ahk_id ahk_pid ahk_exe + +syn match autohotkeyNumbers + \ display + \ transparent + \ contains= + \ autohotkeyInteger, + \ autohotkeyFloat + \ '\<\d\|\.\d' + +syn match autohotkeyInteger + \ contained + \ display + \ '\d\+\>' + +syn match autohotkeyInteger + \ contained + \ display + \ '0x\x\+\>' + +syn match autohotkeyFloat + \ contained + \ display + \ '\d\+\.\d*\|\.\d\+\>' + +syn keyword autohotkeyType + \ local + \ global + \ static + \ byref + +syn keyword autohotkeyBoolean + \ true + \ false + +syn match autohotkeyHotkey + \ contains=autohotkeyKey, + \ autohotkeyHotkeyDelimiter + \ display + \ '^\s*\S*\%( Up\)\?::' + +syn match autohotkeyKey + \ contained + \ display + \ '^.\{-}' + +syn match autohotkeyDelimiter + \ contained + \ display + \ '::' + +" allowable hotstring options: +" https://autohotkey.com/docs/Hotstrings.htm +syn match autohotkeyHotstringDefinition + \ contains=autohotkeyHotstring, + \ autohotkeyHotstringDelimiter + \ display + \ '^\s*:\%([*?]\|[BORZ]0\?\|C[01]\?\|K\d\+\|P\d\+\|S[IPE]\)*:.\{-}::' + +syn match autohotkeyHotstring + \ contained + \ display + \ '.\{-}' + +syn match autohotkeyHotstringDelimiter + \ contained + \ display + \ '::' + +syn match autohotkeyHotstringDelimiter + \ contains=autohotkeyHotstringOptions + \ contained + \ display + \ ':\%([*?]\|[BORZ]0\?\|C[01]\?\|K\d\+\|P\d\+\|S[IPE]\)*:' + +syn match autohotkeyHotstringOptions + \ contained + \ display + \ '\%([*?]\|[BORZ]0\?\|C[01]\?\|K\d\+\|P\d\+\|S[IPE]\)*' + +syn cluster autohotkeyCommentGroup + \ contains= + \ autohotkeyTodo, + \ @Spell + +syn match autohotkeyComment + \ display + \ contains=@autohotkeyCommentGroup + \ '\%(^;\|\s\+;\).*$' + +syn region autohotkeyComment + \ contains=@autohotkeyCommentGroup + \ matchgroup=autohotkeyCommentStart + \ start='^\s*/\*' + \ end='^\s*\*/' + +" TODO: Shouldn't we look for g:, b:, variables before defaulting to +" something? +if exists("g:autohotkey_syntax_sync_minlines") + let b:autohotkey_syntax_sync_minlines = g:autohotkey_syntax_sync_minlines +else + let b:autohotkey_syntax_sync_minlines = 50 +endif +exec "syn sync ccomment autohotkeyComment minlines=" . b:autohotkey_syntax_sync_minlines + +hi def link autohotkeyTodo Todo +hi def link autohotkeyComment Comment +hi def link autohotkeyCommentStart autohotkeyComment +hi def link autohotkeyEscape Special +hi def link autohotkeyHotkey Type +hi def link autohotkeyKey Type +hi def link autohotkeyDelimiter Delimiter +hi def link autohotkeyHotstringDefinition Type +hi def link autohotkeyHotstring Type +hi def link autohotkeyHotstringDelimiter autohotkeyDelimiter +hi def link autohotkeyHotstringOptions Special +hi def link autohotkeyString String +hi def link autohotkeyStringDelimiter autohotkeyString +hi def link autohotkeyVariable Identifier +hi def link autohotkeyVariableDelimiter autohotkeyVariable +hi def link autohotkeyBuiltinVariable Macro +hi def link autohotkeyCommand Keyword +hi def link autohotkeyFunction Function +hi def link autohotkeyStatement autohotkeyCommand +hi def link autohotkeyRepeat Repeat +hi def link autohotkeyConditional Conditional +hi def link autohotkeyPreProcStart PreProc +hi def link autohotkeyInclude Include +hi def link autohotkeyPreProc PreProc +hi def link autohotkeyMatchClass Typedef +hi def link autohotkeyNumber Number +hi def link autohotkeyInteger autohotkeyNumber +hi def link autohotkeyFloat autohotkeyNumber +hi def link autohotkeyType Type +hi def link autohotkeyBoolean Boolean + +let b:current_syntax = "autohotkey" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/autoit.vim b/.config/vim/syntax/autoit.vim new file mode 100644 index 0000000..6b6048a --- /dev/null +++ b/.config/vim/syntax/autoit.vim @@ -0,0 +1,1125 @@ +" Vim syntax file +" +" Language: AutoIt v3 (http://www.autoitscript.com/autoit3/) +" Maintainer: Jared Breland +" Authored By: Riccardo Casini +" Script URL: http://www.vim.org/scripts/script.php?script_id=1239 +" ChangeLog: Please visit the script URL for detailed change information +" Included change from #970. + +" Quit when a syntax file was already loaded. +if exists("b:current_syntax") + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +let b:current_syntax = "autoit" + +" AutoIt is not case dependent +syn case ignore + +" Definitions for AutoIt reserved keywords +syn keyword autoitKeyword Default False True +syn keyword autoitKeyword Const Dim Global Local ReDim +syn keyword autoitKeyword If Else ElseIf Then EndIf +syn keyword autoitKeyword Select Switch Case EndSelect EndSwitch +syn keyword autoitKeyword Enum For In To Step Next +syn keyword autoitKeyword With While EndWith Wend Do Until +syn keyword autoitKeyword ContinueCase ContinueLoop ExitLoop Exit + +" inside script inclusion and global options +syn match autoitIncluded display contained "<[^>]*>" +syn match autoitInclude display "^\s*#\s*include\>\s*["<]" + \ contains=autoitIncluded,autoitString +syn match autoitInclude "^\s*#include-once\>" +syn match autoitInclude "^\s*#NoTrayIcon\>" +syn match autoitInclude "^\s*#RequireAdmin\>" + +" user-defined functions +syn keyword autoitKeyword Func ByRef EndFunc Return OnAutoItStart OnAutoItExit + +" built-in functions +" environment management +syn keyword autoitFunction ClipGet ClipPut EnvGet EnvSet EnvUpdate MemGetStats +" file, directory, and disk management +syn keyword autoitFunction ConsoleRead ConsoleWrite ConsoleWriteError +syn keyword autoitFunction DirCopy DirCreate DirGetSize DirMove DirRemove +syn keyword autoitFunction DriveGetDrive DriveGetFileSystem DriveGetLabel + \ DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet + \ DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus +syn keyword autoitFunction FileChangeDir FileClose FileCopy FileCreateNTFSLink + \ FileCreateShortcut FileDelete FileExists FileFindFirstFile + \ FileFindNextFile FileGetAttrib FileGetLongName FileGetShortcut + \ FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall + \ FileMove FileOpen FileOpenDialog FileRead FileReadLine FileRecycle + \ FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib + \ FileSetTime FileWrite FileWriteLine +syn keyword autoitFunction IniDelete IniRead IniReadSection IniReadSectionNames + \ IniRenameSection IniWrite IniWriteSection +syn keyword autoitFunction StderrRead StdinWrite StdoutRead +" graphic and sound +syn keyword autoitFunction Beep PixelChecksum PixelGetColor PixelSearch + \ SoundPlay SoundSetWaveVolume +" gui reference +syn keyword autoitFunction GUICreate GUIDelete GUICtrlGetHandle GUICtrlGetState + \ GUICtrlRead GUICtrlRecvMsg GUICtrlSendMsg GUICtrlSendToDummy + \ GUIGetCursorInfo GUIGetMsg GUIRegisterMsg GUIStartGroup GUISwitch +syn keyword autoitFunction GUICtrlCreateAvi GUICtrlCreateButton + \ GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu + \ GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit + \ GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon + \ GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList + \ GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu + \ GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj + \ GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio + \ GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem + \ GUICtrlCreateTreeView GUICtrlCreateTreeViewItem + \ GUICtrlCreateUpDown GUICtrlDelete +syn keyword autoitFunction GUICtrlRegisterListViewSort GUICtrlSetBkColor + \ GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetFont + \ GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent + \ GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle + \ GUICtrlSetTip +syn keyword autoitFunction GUISetBkColor GUISetCoord GUISetCursor GUISetFont + \ GUISetHelp GUISetIcon GUISetOnEvent GUISetState +" keyboard control +syn keyword autoitFunction HotKeySet Send +" math +syn keyword autoitFunction Abs ACos ASin ATan BitAND BitNOT BitOR BitRotate + \ BitShift BitXOR Cos Ceiling Exp Floor Log Mod Random Round Sin Sqrt + \ SRandom Tan +" message boxes and dialogs +syn keyword autoitFunction InputBox MsgBox ProgressOff ProgressOn ProgressSet + \ SplashImageOn SplashOff SplashTextOn ToolTip +" miscellaneous +syn keyword autoitFunction AdlibDisable AdlibEnable AutoItSetOption + \ AutoItWinGetTitle AutoItWinSetTitle BlockInput Break Call CDTray + \ Execute Opt SetError SetExtended +" mouse control +syn keyword autoitFunction MouseClick MouseClickDrag MouseDown MouseGetCursor + \ MouseGetPos MouseMove MouseUp MouseWheel +" network +syn keyword autoitFunction FtpSetProxy HttpSetProxy InetGet InetGetSize Ping + \ TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIp TCPRecv + \ TCPSend TCPShutDown TCPStartup UDPBind UDPCloseSocket UDPOpen UDPRecv + \ UDPSend UDPShutdown UDPStartup +" obj/com reference +syn keyword autoitFunction ObjCreate ObjEvent ObjGet ObjName +" process management +syn keyword autoitFunction DllCall DllClose DllOpen DllStructCreate + \ DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData + \ ProcessClose ProcessExists ProcessSetPriority ProcessList ProcessWait + \ ProcessWaitClose Run RunAsSet RunWait ShellExecute ShellExecuteWait + \ Shutdown + " removed from 3.2.0 docs - PluginClose PluginOpen +" registry management +syn keyword autoitFunction RegDelete RegEnumKey RegEnumVal RegRead RegWrite +" string management +syn keyword autoitFunction StringAddCR StringFormat StringInStr StringIsAlNum + \ StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt + \ StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft + \ StringLen StringLower StringMid StringRegExp StringRegExpReplace + \ StringReplace StringRight StringSplit StringStripCR StringStripWS + \ StringTrimLeft StringTrimRight StringUpper +" timer and delay +syn keyword autoitFunction Sleep TimerInit TimerDiff +" tray +syn keyword autoitFunction TrayCreateItem TrayCreateMenu TrayItemDelete + \ TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent + \ TrayItemSetState TrayItemSetText TrayGetMsg TraySetClick TraySetIcon + \ TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip +" variables and conversions +syn keyword autoitFunction Asc Assign Binary Chr Dec Eval Hex HWnd Int IsAdmin + \ IsArray IsBinaryString IsBool IsDeclared IsDllStruct IsFloat IsHWnd + \ IsInt IsKeyword IsNumber IsObj IsString Number String UBound +" window management +syn keyword autoitFunction WinActivate WinActive WinClose WinExists WinFlash + \ WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos + \ WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList + \ WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove + \ WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait WinWaitActive + \ WinWaitClose WinWaitNotActive +syn keyword autoitFunction ControlClick ControlCommand ControlDisable + \ ControlEnable ControlFocus ControlGetFocus ControlGetHandle + \ ControlGetPos ControlGetText ControlHide ControlListView ControlMove + \ ControlSend ControlSetText ControlShow StatusBarGetText + +" user defined functions +" array +syn keyword autoitFunction _ArrayAdd _ArrayBinarySearch _ArrayCreate + \ _ArrayDelete _ArrayDisplay _ArrayInsert _ArrayMax _ArrayMaxIndex + \ _ArrayMin _ArrayMinIndex _ArrayPop _ArrayPush _ArrayReverse + \ _ArraySearch _ArraySort _ArraySwap _ArrayToClip _ArrayToString + \ _ArrayTrim +" color +syn keyword autoitFunction _ColorgetBlue _ColorGetGreen _ColorGetRed +" date +syn keyword autoitFunction _DateAdd _DateDayOfWeek _DateDaysInMonth _DateDiff + \ _DateIsLeapYear _DateIsValid _DateTimeFormat _DateTimeSplit + \ _DateToDayOfWeek _ToDayOfWeekISO _DateToDayValue _DayValueToDate _Now + \ _NowCalc _NowCalcDate _NowDate _NowTime _SetDate _SetTime _TicksToTime + \ _TimeToTicks _WeekNumberISO +" file +syn keyword autoitFunction _FileCountLines _FileCreate _FileListToArray + \ _FilePrint _FileReadToArray _FileWriteFromArray _FileWriteLog + \ _FileWriteToLine _PathFull _PathMake _PathSplit _ReplaceStringInFile + \ _TempFile +" guicombo +syn keyword autoitFunction _GUICtrlComboAddDir _GUICtrlComboAddString + \ _GUICtrlComboAutoComplete _GUICtrlComboDeleteString + \ _GUICtrlComboFindString _GUICtrlComboGetCount _GUICtrlComboGetCurSel + \ _GUICtrlComboGetDroppedControlRect _GUICtrlComboGetDroppedState + \ _GUICtrlComboGetDroppedWidth _GUICtrlComboGetEditSel + \ _GUICtrlComboGetExtendedUI _GUICtrlComboGetHorizontalExtent + \ _GUICtrlComboGetItemHeight _GUICtrlComboGetLBText + \ _GUICtrlComboGetLBTextLen _GUICtrlComboGetList _GUICtrlComboGetLocale + \ _GUICtrlComboGetMinVisible _GUICtrlComboGetTopIndex + \ _GUICtrlComboInitStorage _GUICtrlComboInsertString + \ _GUICtrlComboLimitText _GUICtrlComboResetContent + \ _GUICtrlComboSelectString _GUICtrlComboSetCurSel + \ _GUICtrlComboSetDroppedWidth _GUICtrlComboSetEditSel + \ _GUICtrlComboSetExtendedUI _GUICtrlComboSetHorizontalExtent + \ _GUICtrlComboSetItemHeight _GUICtrlComboSetMinVisible + \ _GUICtrlComboSetTopIndex _GUICtrlComboShowDropDown +" guiedit +syn keyword autoitFunction _GUICtrlEditCanUndo _GUICtrlEditEmptyUndoBuffer + \ _GuiCtrlEditFind _GUICtrlEditGetFirstVisibleLine _GUICtrlEditGetLine + \ _GUICtrlEditGetLineCount _GUICtrlEditGetModify _GUICtrlEditGetRect + \ _GUICtrlEditGetSel _GUICtrlEditLineFromChar _GUICtrlEditLineIndex + \ _GUICtrlEditLineLength _GUICtrlEditLineScroll _GUICtrlEditReplaceSel + \ _GUICtrlEditScroll _GUICtrlEditSetModify _GUICtrlEditSetRect + \ _GUICtrlEditSetSel _GUICtrlEditUndo +" guiipaddress +syn keyword autoitFunction _GUICtrlIpAddressClear _GUICtrlIpAddressCreate + \ _GUICtrlIpAddressDelete _GUICtrlIpAddressGet _GUICtrlIpAddressIsBlank + \ _GUICtrlIpAddressSet _GUICtrlIpAddressSetFocus + \ _GUICtrlIpAddressSetFont + \ _GUICtrlIpAddressSetRange _GUICtrlIpAddressShowHide +" guilist +syn keyword autoitFunction _GUICtrlListAddDir _GUICtrlListAddItem + \ _GUICtrlListClear + \ _GUICtrlListCount _GUICtrlListDeleteItem _GUICtrlListFindString + \ _GUICtrlListGetAnchorIndex _GUICtrlListGetCaretIndex + \ _GUICtrlListGetHorizontalExtent _GUICtrlListGetInfo + \ _GUICtrlListGetItemRect _GUICtrlListGetLocale _GUICtrlListGetSelCount + \ _GUICtrlListGetSelItems _GUICtrlListGetSelItemsText + \ _GUICtrlListGetSelState _GUICtrlListGetText _GUICtrlListGetTextLen + \ _GUICtrlListGetTopIndex _GUICtrlListInsertItem + \ _GUICtrlListReplaceString _GUICtrlListSelectedIndex + \ _GUICtrlListSelectIndex _GUICtrlListSelectString + \ _GUICtrlListSelItemRange _GUICtrlListSelItemRangeEx + \ _GUICtrlListSetAnchorIndex _GUICtrlListSetCaretIndex + \ _GUICtrlListSetHorizontalExtent _GUICtrlListSetLocale + \ _GUICtrlListSetSel _GUICtrlListSetTopIndex _GUICtrlListSort + \ _GUICtrlListSwapString +" guilistview +syn keyword autoitFunction _GUICtrlListViewCopyItems + \ _GUICtrlListViewDeleteAllItems _GUICtrlListViewDeleteColumn + \ _GUICtrlListViewDeleteItem _GUICtrlListViewDeleteItemsSelected + \ _GUICtrlListViewEnsureVisible _GUICtrlListViewFindItem + \ _GUICtrlListViewGetBackColor _GUICtrlListViewGetCallBackMask + \ _GUICtrlListViewGetCheckedState _GUICtrlListViewGetColumnOrder + \ _GUICtrlListViewGetColumnWidth _GUICtrlListViewGetCounterPage + \ _GUICtrlListViewGetCurSel _GUICtrlListViewGetExtendedListViewStyle + \ _GUICtrlListViewGetHeader _GUICtrlListViewGetHotCursor + \ _GUICtrlListViewGetHotItem _GUICtrlListViewGetHoverTime + \ _GUICtrlListViewGetItemCount _GUICtrlListViewGetItemText + \ _GUICtrlListViewGetItemTextArray _GUICtrlListViewGetNextItem + \ _GUICtrlListViewGetSelectedCount _GUICtrlListViewGetSelectedIndices + \ _GUICtrlListViewGetSubItemsCount _GUICtrlListViewGetTopIndex + \ _GUICtrlListViewGetUnicodeFormat _GUICtrlListViewHideColumn + \ _GUICtrlListViewInsertColumn _GUICtrlListViewInsertItem + \ _GUICtrlListViewJustifyColumn _GUICtrlListViewScroll + \ _GUICtrlListViewSetCheckState _GUICtrlListViewSetColumnHeaderText + \ _GUICtrlListViewSetColumnOrder _GUICtrlListViewSetColumnWidth + \ _GUICtrlListViewSetHotItem _GUICtrlListViewSetHoverTime + \ _GUICtrlListViewSetItemCount _GUICtrlListViewSetItemSelState + \ _GUICtrlListViewSetItemText _GUICtrlListViewSort +" guimonthcal +syn keyword autoitFunction _GUICtrlMonthCalGet1stDOW _GUICtrlMonthCalGetColor + \ _GUICtrlMonthCalGetDelta _GUICtrlMonthCalGetMaxSelCount + \ _GUICtrlMonthCalGetMaxTodayWidth _GUICtrlMonthCalGetMinReqRect + \ _GUICtrlMonthCalSet1stDOW _GUICtrlMonthCalSetColor + \ _GUICtrlMonthCalSetDelta _GUICtrlMonthCalSetMaxSelCount +" guislider +syn keyword autoitFunction _GUICtrlSliderClearTics _GUICtrlSliderGetLineSize + \ _GUICtrlSliderGetNumTics _GUICtrlSliderGetPageSize + \ _GUICtrlSliderGetPos _GUICtrlSliderGetRangeMax + \ _GUICtrlSliderGetRangeMin _GUICtrlSliderSetLineSize + \ _GUICtrlSliderSetPageSize _GUICtrlSliderSetPos + \ _GUICtrlSliderSetTicFreq +" guistatusbar +syn keyword autoitFunction _GuiCtrlStatusBarCreate + \ _GUICtrlStatusBarCreateProgress _GUICtrlStatusBarDelete + \ _GuiCtrlStatusBarGetBorders _GuiCtrlStatusBarGetIcon + \ _GuiCtrlStatusBarGetParts _GuiCtrlStatusBarGetRect + \ _GuiCtrlStatusBarGetText _GuiCtrlStatusBarGetTextLength + \ _GuiCtrlStatusBarGetTip _GuiCtrlStatusBarGetUnicode + \ _GUICtrlStatusBarIsSimple _GuiCtrlStatusBarResize + \ _GuiCtrlStatusBarSetBKColor _GuiCtrlStatusBarSetIcon + \ _GuiCtrlStatusBarSetMinHeight _GUICtrlStatusBarSetParts + \ _GuiCtrlStatusBarSetSimple _GuiCtrlStatusBarSetText + \ _GuiCtrlStatusBarSetTip _GuiCtrlStatusBarSetUnicode + \ _GUICtrlStatusBarShowHide +" guitab +syn keyword autoitFunction _GUICtrlTabDeleteAllItems _GUICtrlTabDeleteItem + \ _GUICtrlTabDeselectAll _GUICtrlTabGetCurFocus _GUICtrlTabGetCurSel + \ _GUICtrlTabGetExtendedStyle _GUICtrlTabGetItemCount + \ _GUICtrlTabGetItemRect _GUICtrlTabGetRowCount + \ _GUICtrlTabGetUnicodeFormat _GUICtrlTabHighlightItem + \ _GUICtrlTabSetCurFocus _GUICtrlTabSetCurSel + \ _GUICtrlTabSetMinTabWidth _GUICtrlTabSetUnicodeFormat +" guitreeview +syn keyword autoitFunction _GUICtrlTreeViewDeleteAllItems + \ _GUICtrlTreeViewDeleteItem _GUICtrlTreeViewExpand + \ _GUICtrlTreeViewGetBkColor _GUICtrlTreeViewGetCount + \ _GUICtrlTreeViewGetIndent _GUICtrlTreeViewGetLineColor + \ _GUICtrlTreeViewGetParentHandle _GUICtrlTreeViewGetParentID + \ _GUICtrlTreeViewGetState _GUICtrlTreeViewGetText + \ _GUICtrlTreeViewGetTextColor _GUICtrlTreeViewItemGetTree + \ _GUICtrlTreeViewInsertItem _GUICtrlTreeViewSetBkColor + \ _GUICtrlTreeViewSetIcon _GUICtrlTreeViewSetIndent + \ _GUICtrlTreeViewSetLineColor GUICtrlTreeViewSetState + \ _GUICtrlTreeViewSetText _GUICtrlTreeViewSetTextColor + \ _GUICtrlTreeViewSort +" ie +syn keyword autoitFunction _IE_Example _IE_Introduction _IE_VersionInfo + \ _IEAction _IEAttach _IEBodyReadHTML _IEBodyReadText _IEBodyWriteHTML + \ _IECreate _IECreateEmbedded _IEDocGetObj _IEDocInsertHTML + \ _IEDocInsertText _IEDocReadHTML _IEDocWriteHTML + \ _IEErrorHandlerDeRegister _IEErrorHandlerRegister _IEErrorNotify + \ _IEFormElementCheckboxSelect _IEFormElementGetCollection + \ _IEFormElementGetObjByName _IEFormElementGetValue + \ _IEFormElementOptionSelect _IEFormElementRadioSelect + \ _IEFormElementSetValue _IEFormGetCollection _IEFormGetObjByName + \ _IEFormImageClick _IEFormReset _IEFormSubmit _IEFrameGetCollection + \ _IEFrameGetObjByName _IEGetObjByName _IEHeadInsertEventScript + \ _IEImgClick _IEImgGetCollection _IEIsFrameSet _IELinkClickByIndex + \ _IELinkClickByText _IELinkGetCollection _IELoadWait _IELoadWaitTimeout + \ _IENavigate _IEPropertyGet _IEPropertySet _IEQuit + \ _IETableGetCollection _IETableWriteToArray _IETagNameAllGetCollection + \ _IETagNameGetCollection +" inet +syn keyword autoitFunction _GetIP _INetExplorerCapable _INetGetSource _INetMail + \ _INetSmtpMail _TCPIpToName +" math +syn keyword autoitFunction _Degree _MathCheckDiv _Max _Min _Radian +" miscellaneous +syn keyword autoitFunction _ChooseColor _ChooseFont _ClipPutFile _Iif + \ _IsPressed _MouseTrap _SendMessage _Singleton +" process +syn keyword autoitFunction _ProcessGetName _ProcessGetPriority _RunDOS +" sound +syn keyword autoitFunction _SoundClose _SoundLength _SoundOpen _SoundPause + \ _SoundPlay _SoundPos _SoundResume _SoundSeek _SoundStatus _SoundStop +" sqlite +syn keyword autoitFunction _SQLite_Changes _SQLite_Close + \ _SQLite_Display2DResult _SQLite_Encode _SQLite_ErrCode _SQLite_ErrMsg + \ _SQLite_Escape _SQLite_Exec _SQLite_FetchData _SQLite_FetchNames + \ _SQLite_GetTable _SQLite_GetTable2D _SQLite_LastInsertRowID + \ _SQLite_LibVersion _SQLite_Open _SQLite_Query _SQLite_QueryFinalize + \ _SQLite_QueryReset _SQLite_QuerySingleRow _SQLite_SaveMode + \ _SQLite_SetTimeout _SQLite_Shutdown _SQLite_SQLiteExe _SQLite_Startup + \ _SQLite_TotalChanges +" string +syn keyword autoitFunction _HexToString _StringAddComma _StringBetween + \ _StringEncrypt _StringInsert _StringProper _StringRepeat + \ _StringReverse _StringToHex +" visa +syn keyword autoitFunction _viClose _viExecCommand _viFindGpib _viGpibBusReset + \ _viGTL _viOpen _viSetAttribute _viSetTimeout + +" read-only macros +syn match autoitBuiltin "@AppData\(Common\)\=Dir" +syn match autoitBuiltin "@AutoItExe" +syn match autoitBuiltin "@AutoItPID" +syn match autoitBuiltin "@AutoItVersion" +syn match autoitBuiltin "@COM_EventObj" +syn match autoitBuiltin "@CommonFilesDir" +syn match autoitBuiltin "@Compiled" +syn match autoitBuiltin "@ComputerName" +syn match autoitBuiltin "@ComSpec" +syn match autoitBuiltin "@CR\(LF\)\=" +syn match autoitBuiltin "@Desktop\(Common\)\=Dir" +syn match autoitBuiltin "@DesktopDepth" +syn match autoitBuiltin "@DesktopHeight" +syn match autoitBuiltin "@DesktopRefresh" +syn match autoitBuiltin "@DesktopWidth" +syn match autoitBuiltin "@DocumentsCommonDir" +syn match autoitBuiltin "@Error" +syn match autoitBuiltin "@ExitCode" +syn match autoitBuiltin "@ExitMethod" +syn match autoitBuiltin "@Extended" +syn match autoitBuiltin "@Favorites\(Common\)\=Dir" +syn match autoitBuiltin "@GUI_CtrlId" +syn match autoitBuiltin "@GUI_CtrlHandle" +syn match autoitBuiltin "@GUI_DragId" +syn match autoitBuiltin "@GUI_DragFile" +syn match autoitBuiltin "@GUI_DropId" +syn match autoitBuiltin "@GUI_WinHandle" +syn match autoitBuiltin "@HomeDrive" +syn match autoitBuiltin "@HomePath" +syn match autoitBuiltin "@HomeShare" +syn match autoitBuiltin "@HOUR" +syn match autoitBuiltin "@HotKeyPressed" +syn match autoitBuiltin "@InetGetActive" +syn match autoitBuiltin "@InetGetBytesRead" +syn match autoitBuiltin "@IPAddress[1234]" +syn match autoitBuiltin "@KBLayout" +syn match autoitBuiltin "@LF" +syn match autoitBuiltin "@Logon\(DNS\)\=Domain" +syn match autoitBuiltin "@LogonServer" +syn match autoitBuiltin "@MDAY" +syn match autoitBuiltin "@MIN" +syn match autoitBuiltin "@MON" +syn match autoitBuiltin "@MyDocumentsDir" +syn match autoitBuiltin "@NumParams" +syn match autoitBuiltin "@OSBuild" +syn match autoitBuiltin "@OSLang" +syn match autoitBuiltin "@OSServicePack" +syn match autoitBuiltin "@OSTYPE" +syn match autoitBuiltin "@OSVersion" +syn match autoitBuiltin "@ProcessorArch" +syn match autoitBuiltin "@ProgramFilesDir" +syn match autoitBuiltin "@Programs\(Common\)\=Dir" +syn match autoitBuiltin "@ScriptDir" +syn match autoitBuiltin "@ScriptFullPath" +syn match autoitBuiltin "@ScriptLineNumber" +syn match autoitBuiltin "@ScriptName" +syn match autoitBuiltin "@SEC" +syn match autoitBuiltin "@StartMenu\(Common\)\=Dir" +syn match autoitBuiltin "@Startup\(Common\)\=Dir" +syn match autoitBuiltin "@SW_DISABLE" +syn match autoitBuiltin "@SW_ENABLE" +syn match autoitBuiltin "@SW_HIDE" +syn match autoitBuiltin "@SW_LOCK" +syn match autoitBuiltin "@SW_MAXIMIZE" +syn match autoitBuiltin "@SW_MINIMIZE" +syn match autoitBuiltin "@SW_RESTORE" +syn match autoitBuiltin "@SW_SHOW" +syn match autoitBuiltin "@SW_SHOWDEFAULT" +syn match autoitBuiltin "@SW_SHOWMAXIMIZED" +syn match autoitBuiltin "@SW_SHOWMINIMIZED" +syn match autoitBuiltin "@SW_SHOWMINNOACTIVE" +syn match autoitBuiltin "@SW_SHOWNA" +syn match autoitBuiltin "@SW_SHOWNOACTIVATE" +syn match autoitBuiltin "@SW_SHOWNORMAL" +syn match autoitBuiltin "@SW_UNLOCK" +syn match autoitBuiltin "@SystemDir" +syn match autoitBuiltin "@TAB" +syn match autoitBuiltin "@TempDir" +syn match autoitBuiltin "@TRAY_ID" +syn match autoitBuiltin "@TrayIconFlashing" +syn match autoitBuiltin "@TrayIconVisible" +syn match autoitBuiltin "@UserProfileDir" +syn match autoitBuiltin "@UserName" +syn match autoitBuiltin "@WDAY" +syn match autoitBuiltin "@WindowsDir" +syn match autoitBuiltin "@WorkingDir" +syn match autoitBuiltin "@YDAY" +syn match autoitBuiltin "@YEAR" + +"comments and commenting-out +syn match autoitComment ";.*" +"in this way also #ce alone will be highlighted +syn match autoitCommDelimiter "^\s*#comments-start\>" +syn match autoitCommDelimiter "^\s*#cs\>" +syn match autoitCommDelimiter "^\s*#comments-end\>" +syn match autoitCommDelimiter "^\s*#ce\>" +syn region autoitComment + \ matchgroup=autoitCommDelimiter + \ start="^\s*#comments-start\>" start="^\s*#cs\>" + \ end="^\s*#comments-end\>" end="^\s*#ce\>" + +"one character operators +syn match autoitOperator "[-+*/&^=<>][^-+*/&^=<>]"me=e-1 +"two characters operators +syn match autoitOperator "==[^=]"me=e-1 +syn match autoitOperator "<>" +syn match autoitOperator "<=" +syn match autoitOperator ">=" +syn match autoitOperator "+=" +syn match autoitOperator "-=" +syn match autoitOperator "*=" +syn match autoitOperator "/=" +syn match autoitOperator "&=" +syn keyword autoitOperator NOT AND OR + +syn match autoitParen "(\|)" +syn match autoitBracket "\[\|\]" +syn match autoitComma "," + +"numbers must come after operator '-' +"decimal numbers without a dot +syn match autoitNumber "-\=\<\d\+\>" +"hexadecimal numbers without a dot +syn match autoitNumber "-\=\<0x\x\+\>" +"floating point number with dot (inside or at end) + +syn match autoitNumber "-\=\<\d\+\.\d*\>" +"floating point number, starting with a dot +syn match autoitNumber "-\=\<\.\d\+\>" +"scientific notation numbers without dots +syn match autoitNumber "-\=\<\d\+e[-+]\=\d\+\>" +"scientific notation numbers with dots +syn match autoitNumber "-\=\<\(\(\d\+\.\d*\)\|\(\.\d\+\)\)\(e[-+]\=\d\+\)\=\>" + +"string constants +"we want the escaped quotes marked in red +syn match autoitDoubledSingles +''+ contained +syn match autoitDoubledDoubles +""+ contained +"we want the continuation character marked in red +"(also at the top level, not just contained) +syn match autoitCont "_$" + +" send key list - must be defined before autoitStrings +syn match autoitSend "{!}" contained +syn match autoitSend "{#}" contained +syn match autoitSend "{+}" contained +syn match autoitSend "{^}" contained +syn match autoitSend "{{}" contained +syn match autoitSend "{}}" contained +syn match autoitSend "{SPACE}" contained +syn match autoitSend "{ENTER}" contained +syn match autoitSend "{ALT}" contained +syn match autoitSend "{BACKSPACE}" contained +syn match autoitSend "{BS}" contained +syn match autoitSend "{DELETE}" contained +syn match autoitSend "{DEL}" contained +syn match autoitSend "{UP}" contained +syn match autoitSend "{DOWN}" contained +syn match autoitSend "{LEFT}" contained +syn match autoitSend "{RIGHT}" contained +syn match autoitSend "{HOME}" contained +syn match autoitSend "{END}" contained +syn match autoitSend "{ESCAPE}" contained +syn match autoitSend "{ESC}" contained +syn match autoitSend "{INSERT}" contained +syn match autoitSend "{INS}" contained +syn match autoitSend "{PGUP}" contained +syn match autoitSend "{PGDN}" contained +syn match autoitSend "{F1}" contained +syn match autoitSend "{F2}" contained +syn match autoitSend "{F3}" contained +syn match autoitSend "{F4}" contained +syn match autoitSend "{F5}" contained +syn match autoitSend "{F6}" contained +syn match autoitSend "{F7}" contained +syn match autoitSend "{F8}" contained +syn match autoitSend "{F9}" contained +syn match autoitSend "{F10}" contained +syn match autoitSend "{F11}" contained +syn match autoitSend "{F12}" contained +syn match autoitSend "{TAB}" contained +syn match autoitSend "{PRINTSCREEN}" contained +syn match autoitSend "{LWIN}" contained +syn match autoitSend "{RWIN}" contained +syn match autoitSend "{NUMLOCK}" contained +syn match autoitSend "{CTRLBREAK}" contained +syn match autoitSend "{PAUSE}" contained +syn match autoitSend "{CAPSLOCK}" contained +syn match autoitSend "{NUMPAD0}" contained +syn match autoitSend "{NUMPAD1}" contained +syn match autoitSend "{NUMPAD2}" contained +syn match autoitSend "{NUMPAD3}" contained +syn match autoitSend "{NUMPAD4}" contained +syn match autoitSend "{NUMPAD5}" contained +syn match autoitSend "{NUMPAD6}" contained +syn match autoitSend "{NUMPAD7}" contained +syn match autoitSend "{NUMPAD8}" contained +syn match autoitSend "{NUMPAD9}" contained +syn match autoitSend "{NUMPADMULT}" contained +syn match autoitSend "{NUMPADADD}" contained +syn match autoitSend "{NUMPADSUB}" contained +syn match autoitSend "{NUMPADDIV}" contained +syn match autoitSend "{NUMPADDOT}" contained +syn match autoitSend "{NUMPADENTER}" contained +syn match autoitSend "{APPSKEY}" contained +syn match autoitSend "{LALT}" contained +syn match autoitSend "{RALT}" contained +syn match autoitSend "{LCTRL}" contained +syn match autoitSend "{RCTRL}" contained +syn match autoitSend "{LSHIFT}" contained +syn match autoitSend "{RSHIFT}" contained +syn match autoitSend "{SLEEP}" contained +syn match autoitSend "{ALTDOWN}" contained +syn match autoitSend "{SHIFTDOWN}" contained +syn match autoitSend "{CTRLDOWN}" contained +syn match autoitSend "{LWINDOWN}" contained +syn match autoitSend "{RWINDOWN}" contained +syn match autoitSend "{ASC \d\d\d\d}" contained +syn match autoitSend "{BROWSER_BACK}" contained +syn match autoitSend "{BROWSER_FORWARD}" contained +syn match autoitSend "{BROWSER_REFRESH}" contained +syn match autoitSend "{BROWSER_STOP}" contained +syn match autoitSend "{BROWSER_SEARCH}" contained +syn match autoitSend "{BROWSER_FAVORITES}" contained +syn match autoitSend "{BROWSER_HOME}" contained +syn match autoitSend "{VOLUME_MUTE}" contained +syn match autoitSend "{VOLUME_DOWN}" contained +syn match autoitSend "{VOLUME_UP}" contained +syn match autoitSend "{MEDIA_NEXT}" contained +syn match autoitSend "{MEDIA_PREV}" contained +syn match autoitSend "{MEDIA_STOP}" contained +syn match autoitSend "{MEDIA_PLAY_PAUSE}" contained +syn match autoitSend "{LAUNCH_MAIL}" contained +syn match autoitSend "{LAUNCH_MEDIA}" contained +syn match autoitSend "{LAUNCH_APP1}" contained +syn match autoitSend "{LAUNCH_APP2}" contained + +"this was tricky! +"we use an oneline region, instead of a match, in order to use skip= +"matchgroup= so start and end quotes are not considered as au3Doubled +"contained +syn region autoitString oneline contains=autoitSend matchgroup=autoitQuote start=+"+ + \ end=+"+ end=+_\n\{1}.*"+ + \ contains=autoitCont,autoitDoubledDoubles skip=+""+ +syn region autoitString oneline matchgroup=autoitQuote start=+'+ + \ end=+'+ end=+_\n\{1}.*'+ + \ contains=autoitCont,autoitDoubledSingles skip=+''+ + +syn match autoitVarSelector "\$" contained display +syn match autoitVariable "$\w\+" contains=autoitVarSelector + +" options - must be defined after autoitStrings +syn match autoitOption "\([\"\']\)CaretCoordMode\1" +syn match autoitOption "\([\"\']\)ColorMode\1" +syn match autoitOption "\([\"\']\)ExpandEnvStrings\1" +syn match autoitOption "\([\"\']\)ExpandVarStrings\1" +syn match autoitOption "\([\"\']\)FtpBinaryMode\1" +syn match autoitOption "\([\"\']\)GUICloseOnEsc\1" +syn match autoitOption "\([\"\']\)GUICoordMode\1" +syn match autoitOption "\([\"\']\)GUIDataSeparatorChar\1" +syn match autoitOption "\([\"\']\)GUIOnEventMode\1" +syn match autoitOption "\([\"\']\)GUIResizeMode\1" +syn match autoitOption "\([\"\']\)GUIEventCompatibilityMode\1" +syn match autoitOption "\([\"\']\)MouseClickDelay\1" +syn match autoitOption "\([\"\']\)MouseClickDownDelay\1" +syn match autoitOption "\([\"\']\)MouseClickDragDelay\1" +syn match autoitOption "\([\"\']\)MouseCoordMode\1" +syn match autoitOption "\([\"\']\)MustDeclareVars\1" +syn match autoitOption "\([\"\']\)OnExitFunc\1" +syn match autoitOption "\([\"\']\)PixelCoordMode\1" +syn match autoitOption "\([\"\']\)RunErrorsFatal\1" +syn match autoitOption "\([\"\']\)SendAttachMode\1" +syn match autoitOption "\([\"\']\)SendCapslockMode\1" +syn match autoitOption "\([\"\']\)SendKeyDelay\1" +syn match autoitOption "\([\"\']\)SendKeyDownDelay\1" +syn match autoitOption "\([\"\']\)TCPTimeout\1" +syn match autoitOption "\([\"\']\)TrayAutoPause\1" +syn match autoitOption "\([\"\']\)TrayIconDebug\1" +syn match autoitOption "\([\"\']\)TrayIconHide\1" +syn match autoitOption "\([\"\']\)TrayMenuMode\1" +syn match autoitOption "\([\"\']\)TrayOnEventMode\1" +syn match autoitOption "\([\"\']\)WinDetectHiddenText\1" +syn match autoitOption "\([\"\']\)WinSearchChildren\1" +syn match autoitOption "\([\"\']\)WinTextMatchMode\1" +syn match autoitOption "\([\"\']\)WinTitleMatchMode\1" +syn match autoitOption "\([\"\']\)WinWaitDelay\1" + +" styles - must be defined after autoitVariable +" common +syn match autoitStyle "\$WS_BORDER" +syn match autoitStyle "\$WS_POPUP" +syn match autoitStyle "\$WS_CAPTION" +syn match autoitStyle "\$WS_CLIPCHILDREN" +syn match autoitStyle "\$WS_CLIPSIBLINGS" +syn match autoitStyle "\$WS_DISABLED" +syn match autoitStyle "\$WS_DLGFRAME" +syn match autoitStyle "\$WS_HSCROLL" +syn match autoitStyle "\$WS_MAXIMIZE" +syn match autoitStyle "\$WS_MAXIMIZEBOX" +syn match autoitStyle "\$WS_MINIMIZE" +syn match autoitStyle "\$WS_MINIMIZEBOX" +syn match autoitStyle "\$WS_OVERLAPPED" +syn match autoitStyle "\$WS_OVERLAPPEDWINDOW" +syn match autoitStyle "\$WS_POPUPWINDOW" +syn match autoitStyle "\$WS_SIZEBOX" +syn match autoitStyle "\$WS_SYSMENU" +syn match autoitStyle "\$WS_THICKFRAME" +syn match autoitStyle "\$WS_VSCROLL" +syn match autoitStyle "\$WS_VISIBLE" +syn match autoitStyle "\$WS_CHILD" +syn match autoitStyle "\$WS_GROUP" +syn match autoitStyle "\$WS_TABSTOP" +syn match autoitStyle "\$DS_MODALFRAME" +syn match autoitStyle "\$DS_SETFOREGROUND" +syn match autoitStyle "\$DS_CONTEXTHELP" +" common extended +syn match autoitStyle "\$WS_EX_ACCEPTFILES" +syn match autoitStyle "\$WS_EX_APPWINDOW" +syn match autoitStyle "\$WS_EX_CLIENTEDGE" +syn match autoitStyle "\$WS_EX_CONTEXTHELP" +syn match autoitStyle "\$WS_EX_DLGMODALFRAME" +syn match autoitStyle "\$WS_EX_MDICHILD" +syn match autoitStyle "\$WS_EX_OVERLAPPEDWINDOW" +syn match autoitStyle "\$WS_EX_STATICEDGE" +syn match autoitStyle "\$WS_EX_TOPMOST" +syn match autoitStyle "\$WS_EX_TRANSPARENT" +syn match autoitStyle "\$WS_EX_TOOLWINDOW" +syn match autoitStyle "\$WS_EX_WINDOWEDGE" +syn match autoitStyle "\$WS_EX_LAYERED" +syn match autoitStyle "\$GUI_WS_EX_PARENTDRAG" +" checkbox +syn match autoitStyle "\$BS_3STATE" +syn match autoitStyle "\$BS_AUTO3STATE" +syn match autoitStyle "\$BS_AUTOCHECKBOX" +syn match autoitStyle "\$BS_CHECKBOX" +syn match autoitStyle "\$BS_LEFT" +syn match autoitStyle "\$BS_PUSHLIKE" +syn match autoitStyle "\$BS_RIGHT" +syn match autoitStyle "\$BS_RIGHTBUTTON" +syn match autoitStyle "\$BS_GROUPBOX" +syn match autoitStyle "\$BS_AUTORADIOBUTTON" +" push button +syn match autoitStyle "\$BS_BOTTOM" +syn match autoitStyle "\$BS_CENTER" +syn match autoitStyle "\$BS_DEFPUSHBUTTON" +syn match autoitStyle "\$BS_MULTILINE" +syn match autoitStyle "\$BS_TOP" +syn match autoitStyle "\$BS_VCENTER" +syn match autoitStyle "\$BS_ICON" +syn match autoitStyle "\$BS_BITMAP" +syn match autoitStyle "\$BS_FLAT" +" combo +syn match autoitStyle "\$CBS_AUTOHSCROLL" +syn match autoitStyle "\$CBS_DISABLENOSCROLL" +syn match autoitStyle "\$CBS_DROPDOWN" +syn match autoitStyle "\$CBS_DROPDOWNLIST" +syn match autoitStyle "\$CBS_LOWERCASE" +syn match autoitStyle "\$CBS_NOINTEGRALHEIGHT" +syn match autoitStyle "\$CBS_OEMCONVERT" +syn match autoitStyle "\$CBS_SIMPLE" +syn match autoitStyle "\$CBS_SORT" +syn match autoitStyle "\$CBS_UPPERCASE" +" list +syn match autoitStyle "\$LBS_DISABLENOSCROLL" +syn match autoitStyle "\$LBS_NOINTEGRALHEIGHT" +syn match autoitStyle "\$LBS_NOSEL" +syn match autoitStyle "\$LBS_NOTIFY" +syn match autoitStyle "\$LBS_SORT" +syn match autoitStyle "\$LBS_STANDARD" +syn match autoitStyle "\$LBS_USETABSTOPS" +" edit/input +syn match autoitStyle "\$ES_AUTOHSCROLL" +syn match autoitStyle "\$ES_AUTOVSCROLL" +syn match autoitStyle "\$ES_CENTER" +syn match autoitStyle "\$ES_LOWERCASE" +syn match autoitStyle "\$ES_NOHIDESEL" +syn match autoitStyle "\$ES_NUMBER" +syn match autoitStyle "\$ES_OEMCONVERT" +syn match autoitStyle "\$ES_MULTILINE" +syn match autoitStyle "\$ES_PASSWORD" +syn match autoitStyle "\$ES_READONLY" +syn match autoitStyle "\$ES_RIGHT" +syn match autoitStyle "\$ES_UPPERCASE" +syn match autoitStyle "\$ES_WANTRETURN" +" progress bar +syn match autoitStyle "\$PBS_SMOOTH" +syn match autoitStyle "\$PBS_VERTICAL" +" up-down +syn match autoitStyle "\$UDS_ALIGNLEFT" +syn match autoitStyle "\$UDS_ALIGNRIGHT" +syn match autoitStyle "\$UDS_ARROWKEYS" +syn match autoitStyle "\$UDS_HORZ" +syn match autoitStyle "\$UDS_NOTHOUSANDS" +syn match autoitStyle "\$UDS_WRAP" +" label/static +syn match autoitStyle "\$SS_BLACKFRAME" +syn match autoitStyle "\$SS_BLACKRECT" +syn match autoitStyle "\$SS_CENTER" +syn match autoitStyle "\$SS_CENTERIMAGE" +syn match autoitStyle "\$SS_ETCHEDFRAME" +syn match autoitStyle "\$SS_ETCHEDHORZ" +syn match autoitStyle "\$SS_ETCHEDVERT" +syn match autoitStyle "\$SS_GRAYFRAME" +syn match autoitStyle "\$SS_GRAYRECT" +syn match autoitStyle "\$SS_LEFT" +syn match autoitStyle "\$SS_LEFTNOWORDWRAP" +syn match autoitStyle "\$SS_NOPREFIX" +syn match autoitStyle "\$SS_NOTIFY" +syn match autoitStyle "\$SS_RIGHT" +syn match autoitStyle "\$SS_RIGHTJUST" +syn match autoitStyle "\$SS_SIMPLE" +syn match autoitStyle "\$SS_SUNKEN" +syn match autoitStyle "\$SS_WHITEFRAME" +syn match autoitStyle "\$SS_WHITERECT" +" tab +syn match autoitStyle "\$TCS_SCROLLOPPOSITE" +syn match autoitStyle "\$TCS_BOTTOM" +syn match autoitStyle "\$TCS_RIGHT" +syn match autoitStyle "\$TCS_MULTISELECT" +syn match autoitStyle "\$TCS_FLATBUTTONS" +syn match autoitStyle "\$TCS_FORCEICONLEFT" +syn match autoitStyle "\$TCS_FORCELABELLEFT" +syn match autoitStyle "\$TCS_HOTTRACK" +syn match autoitStyle "\$TCS_VERTICAL" +syn match autoitStyle "\$TCS_TABS" +syn match autoitStyle "\$TCS_BUTTONS" +syn match autoitStyle "\$TCS_SINGLELINE" +syn match autoitStyle "\$TCS_MULTILINE" +syn match autoitStyle "\$TCS_RIGHTJUSTIFY" +syn match autoitStyle "\$TCS_FIXEDWIDTH" +syn match autoitStyle "\$TCS_RAGGEDRIGHT" +syn match autoitStyle "\$TCS_FOCUSONBUTTONDOWN" +syn match autoitStyle "\$TCS_OWNERDRAWFIXED" +syn match autoitStyle "\$TCS_TOOLTIPS" +syn match autoitStyle "\$TCS_FOCUSNEVER" +" avi clip +syn match autoitStyle "\$ACS_AUTOPLAY" +syn match autoitStyle "\$ACS_CENTER" +syn match autoitStyle "\$ACS_TRANSPARENT" +syn match autoitStyle "\$ACS_NONTRANSPARENT" +" date +syn match autoitStyle "\$DTS_UPDOWN" +syn match autoitStyle "\$DTS_SHOWNONE" +syn match autoitStyle "\$DTS_LONGDATEFORMAT" +syn match autoitStyle "\$DTS_TIMEFORMAT" +syn match autoitStyle "\$DTS_RIGHTALIGN" +syn match autoitStyle "\$DTS_SHORTDATEFORMAT" +" monthcal +syn match autoitStyle "\$MCS_NOTODAY" +syn match autoitStyle "\$MCS_NOTODAYCIRCLE" +syn match autoitStyle "\$MCS_WEEKNUMBERS" +" treeview +syn match autoitStyle "\$TVS_HASBUTTONS" +syn match autoitStyle "\$TVS_HASLINES" +syn match autoitStyle "\$TVS_LINESATROOT" +syn match autoitStyle "\$TVS_DISABLEDRAGDROP" +syn match autoitStyle "\$TVS_SHOWSELALWAYS" +syn match autoitStyle "\$TVS_RTLREADING" +syn match autoitStyle "\$TVS_NOTOOLTIPS" +syn match autoitStyle "\$TVS_CHECKBOXES" +syn match autoitStyle "\$TVS_TRACKSELECT" +syn match autoitStyle "\$TVS_SINGLEEXPAND" +syn match autoitStyle "\$TVS_FULLROWSELECT" +syn match autoitStyle "\$TVS_NOSCROLL" +syn match autoitStyle "\$TVS_NONEVENHEIGHT" +" slider +syn match autoitStyle "\$TBS_AUTOTICKS" +syn match autoitStyle "\$TBS_BOTH" +syn match autoitStyle "\$TBS_BOTTOM" +syn match autoitStyle "\$TBS_HORZ" +syn match autoitStyle "\$TBS_VERT" +syn match autoitStyle "\$TBS_NOTHUMB" +syn match autoitStyle "\$TBS_NOTICKS" +syn match autoitStyle "\$TBS_LEFT" +syn match autoitStyle "\$TBS_RIGHT" +syn match autoitStyle "\$TBS_TOP" +" listview +syn match autoitStyle "\$LVS_ICON" +syn match autoitStyle "\$LVS_REPORT" +syn match autoitStyle "\$LVS_SMALLICON" +syn match autoitStyle "\$LVS_LIST" +syn match autoitStyle "\$LVS_EDITLABELS" +syn match autoitStyle "\$LVS_NOCOLUMNHEADER" +syn match autoitStyle "\$LVS_NOSORTHEADER" +syn match autoitStyle "\$LVS_SINGLESEL" +syn match autoitStyle "\$LVS_SHOWSELALWAYS" +syn match autoitStyle "\$LVS_SORTASCENDING" +syn match autoitStyle "\$LVS_SORTDESCENDING" +" listview extended +syn match autoitStyle "\$LVS_EX_FULLROWSELECT" +syn match autoitStyle "\$LVS_EX_GRIDLINES" +syn match autoitStyle "\$LVS_EX_HEADERDRAGDROP" +syn match autoitStyle "\$LVS_EX_TRACKSELECT" +syn match autoitStyle "\$LVS_EX_CHECKBOXES" +syn match autoitStyle "\$LVS_EX_BORDERSELECT" +syn match autoitStyle "\$LVS_EX_DOUBLEBUFFER" +syn match autoitStyle "\$LVS_EX_FLATSB" +syn match autoitStyle "\$LVS_EX_MULTIWORKAREAS" +syn match autoitStyle "\$LVS_EX_SNAPTOGRID" +syn match autoitStyle "\$LVS_EX_SUBITEMIMAGES" + +" constants - must be defined after autoitVariable - excludes styles +" constants - autoit options +syn match autoitConst "\$OPT_COORDSRELATIVE" +syn match autoitConst "\$OPT_COORDSABSOLUTE" +syn match autoitConst "\$OPT_COORDSCLIENT" +syn match autoitConst "\$OPT_ERRORSILENT" +syn match autoitConst "\$OPT_ERRORFATAL" +syn match autoitConst "\$OPT_CAPSNOSTORE" +syn match autoitConst "\$OPT_CAPSSTORE" +syn match autoitConst "\$OPT_MATCHSTART" +syn match autoitConst "\$OPT_MATCHANY" +syn match autoitConst "\$OPT_MATCHEXACT" +syn match autoitConst "\$OPT_MATCHADVANCED" +" constants - file +syn match autoitConst "\$FC_NOOVERWRITE" +syn match autoitConst "\$FC_OVERWRITE" +syn match autoitConst "\$FT_MODIFIED" +syn match autoitConst "\$FT_CREATED" +syn match autoitConst "\$FT_ACCESSED" +syn match autoitConst "\$FO_READ" +syn match autoitConst "\$FO_APPEND" +syn match autoitConst "\$FO_OVERWRITE" +syn match autoitConst "\$EOF" +syn match autoitConst "\$FD_FILEMUSTEXIST" +syn match autoitConst "\$FD_PATHMUSTEXIST" +syn match autoitConst "\$FD_MULTISELECT" +syn match autoitConst "\$FD_PROMPTCREATENEW" +syn match autoitConst "\$FD_PROMPTOVERWRITE" +" constants - keyboard +syn match autoitConst "\$KB_SENDSPECIAL" +syn match autoitConst "\$KB_SENDRAW" +syn match autoitConst "\$KB_CAPSOFF" +syn match autoitConst "\$KB_CAPSON" +" constants - message box +syn match autoitConst "\$MB_OK" +syn match autoitConst "\$MB_OKCANCEL" +syn match autoitConst "\$MB_ABORTRETRYIGNORE" +syn match autoitConst "\$MB_YESNOCANCEL" +syn match autoitConst "\$MB_YESNO" +syn match autoitConst "\$MB_RETRYCANCEL" +syn match autoitConst "\$MB_ICONHAND" +syn match autoitConst "\$MB_ICONQUESTION" +syn match autoitConst "\$MB_ICONEXCLAMATION" +syn match autoitConst "\$MB_ICONASTERISK" +syn match autoitConst "\$MB_DEFBUTTON1" +syn match autoitConst "\$MB_DEFBUTTON2" +syn match autoitConst "\$MB_DEFBUTTON3" +syn match autoitConst "\$MB_APPLMODAL" +syn match autoitConst "\$MB_SYSTEMMODAL" +syn match autoitConst "\$MB_TASKMODAL" +syn match autoitConst "\$MB_TOPMOST" +syn match autoitConst "\$MB_RIGHTJUSTIFIED" +syn match autoitConst "\$IDTIMEOUT" +syn match autoitConst "\$IDOK" +syn match autoitConst "\$IDCANCEL" +syn match autoitConst "\$IDABORT" +syn match autoitConst "\$IDRETRY" +syn match autoitConst "\$IDIGNORE" +syn match autoitConst "\$IDYES" +syn match autoitConst "\$IDNO" +syn match autoitConst "\$IDTRYAGAIN" +syn match autoitConst "\$IDCONTINUE" +" constants - progress and splash +syn match autoitConst "\$DLG_NOTITLE" +syn match autoitConst "\$DLG_NOTONTOP" +syn match autoitConst "\$DLG_TEXTLEFT" +syn match autoitConst "\$DLG_TEXTRIGHT" +syn match autoitConst "\$DLG_MOVEABLE" +syn match autoitConst "\$DLG_TEXTVCENTER" +" constants - tray tip +syn match autoitConst "\$TIP_ICONNONE" +syn match autoitConst "\$TIP_ICONASTERISK" +syn match autoitConst "\$TIP_ICONEXCLAMATION" +syn match autoitConst "\$TIP_ICONHAND" +syn match autoitConst "\$TIP_NOSOUND" +" constants - mouse +syn match autoitConst "\$IDC_UNKNOWN" +syn match autoitConst "\$IDC_APPSTARTING" +syn match autoitConst "\$IDC_ARROW" +syn match autoitConst "\$IDC_CROSS" +syn match autoitConst "\$IDC_HELP" +syn match autoitConst "\$IDC_IBEAM" +syn match autoitConst "\$IDC_ICON" +syn match autoitConst "\$IDC_NO" +syn match autoitConst "\$IDC_SIZE" +syn match autoitConst "\$IDC_SIZEALL" +syn match autoitConst "\$IDC_SIZENESW" +syn match autoitConst "\$IDC_SIZENS" +syn match autoitConst "\$IDC_SIZENWSE" +syn match autoitConst "\$IDC_SIZEWE" +syn match autoitConst "\$IDC_UPARROW" +syn match autoitConst "\$IDC_WAIT" +" constants - process +syn match autoitConst "\$SD_LOGOFF" +syn match autoitConst "\$SD_SHUTDOWN" +syn match autoitConst "\$SD_REBOOT" +syn match autoitConst "\$SD_FORCE" +syn match autoitConst "\$SD_POWERDOWN" +" constants - string +syn match autoitConst "\$STR_NOCASESENSE" +syn match autoitConst "\$STR_CASESENSE" +syn match autoitConst "\$STR_STRIPLEADING" +syn match autoitConst "\$STR_STRIPTRAILING" +syn match autoitConst "\$STR_STRIPSPACES" +syn match autoitConst "\$STR_STRIPALL" +" constants - tray +syn match autoitConst "\$TRAY_ITEM_EXIT" +syn match autoitConst "\$TRAY_ITEM_PAUSE" +syn match autoitConst "\$TRAY_ITEM_FIRST" +syn match autoitConst "\$TRAY_CHECKED" +syn match autoitConst "\$TRAY_UNCHECKED" +syn match autoitConst "\$TRAY_ENABLE" +syn match autoitConst "\$TRAY_DISABLE" +syn match autoitConst "\$TRAY_FOCUS" +syn match autoitConst "\$TRAY_DEFAULT" +syn match autoitConst "\$TRAY_EVENT_SHOWICON" +syn match autoitConst "\$TRAY_EVENT_HIDEICON" +syn match autoitConst "\$TRAY_EVENT_FLASHICON" +syn match autoitConst "\$TRAY_EVENT_NOFLASHICON" +syn match autoitConst "\$TRAY_EVENT_PRIMARYDOWN" +syn match autoitConst "\$TRAY_EVENT_PRIMARYUP" +syn match autoitConst "\$TRAY_EVENT_SECONDARYDOWN" +syn match autoitConst "\$TRAY_EVENT_SECONDARYUP" +syn match autoitConst "\$TRAY_EVENT_MOUSEOVER" +syn match autoitConst "\$TRAY_EVENT_MOUSEOUT" +syn match autoitConst "\$TRAY_EVENT_PRIMARYDOUBLE" +syn match autoitConst "\$TRAY_EVENT_SECONDARYDOUBLE" +" constants - stdio +syn match autoitConst "\$STDIN_CHILD" +syn match autoitConst "\$STDOUT_CHILD" +syn match autoitConst "\$STDERR_CHILD" +" constants - color +syn match autoitConst "\$COLOR_BLACK" +syn match autoitConst "\$COLOR_SILVER" +syn match autoitConst "\$COLOR_GRAY" +syn match autoitConst "\$COLOR_WHITE" +syn match autoitConst "\$COLOR_MAROON" +syn match autoitConst "\$COLOR_RED" +syn match autoitConst "\$COLOR_PURPLE" +syn match autoitConst "\$COLOR_FUCHSIA" +syn match autoitConst "\$COLOR_GREEN" +syn match autoitConst "\$COLOR_LIME" +syn match autoitConst "\$COLOR_OLIVE" +syn match autoitConst "\$COLOR_YELLOW" +syn match autoitConst "\$COLOR_NAVY" +syn match autoitConst "\$COLOR_BLUE" +syn match autoitConst "\$COLOR_TEAL" +syn match autoitConst "\$COLOR_AQUA" +" constants - reg value type +syn match autoitConst "\$REG_NONE" +syn match autoitConst "\$REG_SZ" +syn match autoitConst "\$REG_EXPAND_SZ" +syn match autoitConst "\$REG_BINARY" +syn match autoitConst "\$REG_DWORD" +syn match autoitConst "\$REG_DWORD_BIG_ENDIAN" +syn match autoitConst "\$REG_LINK" +syn match autoitConst "\$REG_MULTI_SZ" +syn match autoitConst "\$REG_RESOURCE_LIST" +syn match autoitConst "\$REG_FULL_RESOURCE_DESCRIPTOR" +syn match autoitConst "\$REG_RESOURCE_REQUIREMENTS_LIST" +" guiconstants - events and messages +syn match autoitConst "\$GUI_EVENT_CLOSE" +syn match autoitConst "\$GUI_EVENT_MINIMIZE" +syn match autoitConst "\$GUI_EVENT_RESTORE" +syn match autoitConst "\$GUI_EVENT_MAXIMIZE" +syn match autoitConst "\$GUI_EVENT_PRIMARYDOWN" +syn match autoitConst "\$GUI_EVENT_PRIMARYUP" +syn match autoitConst "\$GUI_EVENT_SECONDARYDOWN" +syn match autoitConst "\$GUI_EVENT_SECONDARYUP" +syn match autoitConst "\$GUI_EVENT_MOUSEMOVE" +syn match autoitConst "\$GUI_EVENT_RESIZED" +syn match autoitConst "\$GUI_EVENT_DROPPED" +syn match autoitConst "\$GUI_RUNDEFMSG" +" guiconstants - state +syn match autoitConst "\$GUI_AVISTOP" +syn match autoitConst "\$GUI_AVISTART" +syn match autoitConst "\$GUI_AVICLOSE" +syn match autoitConst "\$GUI_CHECKED" +syn match autoitConst "\$GUI_INDETERMINATE" +syn match autoitConst "\$GUI_UNCHECKED" +syn match autoitConst "\$GUI_DROPACCEPTED" +syn match autoitConst "\$GUI_DROPNOTACCEPTED" +syn match autoitConst "\$GUI_ACCEPTFILES" +syn match autoitConst "\$GUI_SHOW" +syn match autoitConst "\$GUI_HIDE" +syn match autoitConst "\$GUI_ENABLE" +syn match autoitConst "\$GUI_DISABLE" +syn match autoitConst "\$GUI_FOCUS" +syn match autoitConst "\$GUI_NOFOCUS" +syn match autoitConst "\$GUI_DEFBUTTON" +syn match autoitConst "\$GUI_EXPAND" +syn match autoitConst "\$GUI_ONTOP" +" guiconstants - font +syn match autoitConst "\$GUI_FONTITALIC" +syn match autoitConst "\$GUI_FONTUNDER" +syn match autoitConst "\$GUI_FONTSTRIKE" +" guiconstants - resizing +syn match autoitConst "\$GUI_DOCKAUTO" +syn match autoitConst "\$GUI_DOCKLEFT" +syn match autoitConst "\$GUI_DOCKRIGHT" +syn match autoitConst "\$GUI_DOCKHCENTER" +syn match autoitConst "\$GUI_DOCKTOP" +syn match autoitConst "\$GUI_DOCKBOTTOM" +syn match autoitConst "\$GUI_DOCKVCENTER" +syn match autoitConst "\$GUI_DOCKWIDTH" +syn match autoitConst "\$GUI_DOCKHEIGHT" +syn match autoitConst "\$GUI_DOCKSIZE" +syn match autoitConst "\$GUI_DOCKMENUBAR" +syn match autoitConst "\$GUI_DOCKSTATEBAR" +syn match autoitConst "\$GUI_DOCKALL" +syn match autoitConst "\$GUI_DOCKBORDERS" +" guiconstants - graphic +syn match autoitConst "\$GUI_GR_CLOSE" +syn match autoitConst "\$GUI_GR_LINE" +syn match autoitConst "\$GUI_GR_BEZIER" +syn match autoitConst "\$GUI_GR_MOVE" +syn match autoitConst "\$GUI_GR_COLOR" +syn match autoitConst "\$GUI_GR_RECT" +syn match autoitConst "\$GUI_GR_ELLIPSE" +syn match autoitConst "\$GUI_GR_PIE" +syn match autoitConst "\$GUI_GR_DOT" +syn match autoitConst "\$GUI_GR_PIXEL" +syn match autoitConst "\$GUI_GR_HINT" +syn match autoitConst "\$GUI_GR_REFRESH" +syn match autoitConst "\$GUI_GR_PENSIZE" +syn match autoitConst "\$GUI_GR_NOBKCOLOR" +" guiconstants - control default styles +syn match autoitConst "\$GUI_SS_DEFAULT_AVI" +syn match autoitConst "\$GUI_SS_DEFAULT_BUTTON" +syn match autoitConst "\$GUI_SS_DEFAULT_CHECKBOX" +syn match autoitConst "\$GUI_SS_DEFAULT_COMBO" +syn match autoitConst "\$GUI_SS_DEFAULT_DATE" +syn match autoitConst "\$GUI_SS_DEFAULT_EDIT" +syn match autoitConst "\$GUI_SS_DEFAULT_GRAPHIC" +syn match autoitConst "\$GUI_SS_DEFAULT_GROUP" +syn match autoitConst "\$GUI_SS_DEFAULT_ICON" +syn match autoitConst "\$GUI_SS_DEFAULT_INPUT" +syn match autoitConst "\$GUI_SS_DEFAULT_LABEL" +syn match autoitConst "\$GUI_SS_DEFAULT_LIST" +syn match autoitConst "\$GUI_SS_DEFAULT_LISTVIEW" +syn match autoitConst "\$GUI_SS_DEFAULT_MONTHCAL" +syn match autoitConst "\$GUI_SS_DEFAULT_PIC" +syn match autoitConst "\$GUI_SS_DEFAULT_PROGRESS" +syn match autoitConst "\$GUI_SS_DEFAULT_RADIO" +syn match autoitConst "\$GUI_SS_DEFAULT_SLIDER" +syn match autoitConst "\$GUI_SS_DEFAULT_TAB" +syn match autoitConst "\$GUI_SS_DEFAULT_TREEVIEW" +syn match autoitConst "\$GUI_SS_DEFAULT_UPDOWN" +syn match autoitConst "\$GUI_SS_DEFAULT_GUI" +" guiconstants - background color special flags +syn match autoitConst "\$GUI_BKCOLOR_DEFAULT" +syn match autoitConst "\$GUI_BKCOLOR_LV_ALTERNATE" +syn match autoitConst "\$GUI_BKCOLOR_TRANSPARENT" + +" registry constants +syn match autoitConst "\([\"\']\)REG_BINARY\1" +syn match autoitConst "\([\"\']\)REG_SZ\1" +syn match autoitConst "\([\"\']\)REG_MULTI_SZ\1" +syn match autoitConst "\([\"\']\)REG_EXPAND_SZ\1" +syn match autoitConst "\([\"\']\)REG_DWORD\1" + +" Define the default highlighting. +" Unused colors: Underlined, Ignore, Error, Todo +hi def link autoitFunction Statement " yellow/yellow +hi def link autoitKeyword Statement +hi def link autoitOperator Operator +hi def link autoitVarSelector Operator +hi def link autoitComment Comment " cyan/blue +hi def link autoitParen Comment +hi def link autoitComma Comment +hi def link autoitBracket Comment +hi def link autoitNumber Constant " magenta/red +hi def link autoitString Constant +hi def link autoitQuote Constant +hi def link autoitIncluded Constant +hi def link autoitCont Special " red/orange +hi def link autoitDoubledSingles Special +hi def link autoitDoubledDoubles Special +hi def link autoitCommDelimiter PreProc " blue/magenta +hi def link autoitInclude PreProc +hi def link autoitVariable Identifier " cyan/cyan +hi def link autoitBuiltin Type " green/green +hi def link autoitOption Type +hi def link autoitStyle Type +hi def link autoitConst Type +hi def link autoitSend Type + +syn sync minlines=50 + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/.config/vim/syntax/automake.vim b/.config/vim/syntax/automake.vim new file mode 100644 index 0000000..2f1ad98 --- /dev/null +++ b/.config/vim/syntax/automake.vim @@ -0,0 +1,77 @@ +" Vim syntax file +" Language: automake Makefile.am +" Maintainer: Debian Vim Maintainers +" Former Maintainer: John Williams +" Last Change: 2023 Jan 16 +" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/automake.vim +" +" XXX This file is in need of a new maintainer, Debian VIM Maintainers maintain +" it only because patches have been submitted for it by Debian users and the +" former maintainer was MIA (Missing In Action), taking over its +" maintenance was thus the only way to include those patches. +" If you care about this file, and have time to maintain it please do so! +" +" This script adds support for automake's Makefile.am format. It highlights +" Makefile variables significant to automake as well as highlighting +" autoconf-style @variable@ substitutions . Subsitutions are marked as errors +" when they are used in an inappropriate place, such as in defining +" EXTRA_SOURCES. + +" Standard syntax initialization +if exists('b:current_syntax') + finish +endif + +" Read the Makefile syntax to start with +runtime! syntax/make.vim + +syn match automakePrimary "^\w\+\(_PROGRAMS\|_LIBRARIES\|_LISP\|_PYTHON\|_JAVA\|_SCRIPTS\|_DATA\|_HEADERS\|_MANS\|_TEXINFOS\|_LTLIBRARIES\)\s*\ze+\==" +syn match automakePrimary "^TESTS\s*\ze+\=="me=e-1 +syn match automakeSecondary "^\w\+\(_SOURCES\|_LIBADD\|_LDADD\|_LDFLAGS\|_DEPENDENCIES\|_AR\|_CCASFLAGS\|_CFLAGS\|_CPPFLAGS\|_CXXFLAGS\|_FCFLAGS\|_FFLAGS\|_GCJFLAGS\|_LFLAGS\|_LIBTOOLFLAGS\|OBJCFLAGS\|RFLAGS\|UPCFLAGS\|YFLAGS\)\s*\ze+\==" +syn match automakeSecondary "^\(LDADD\|ARFLAGS\|OMIT_DEPENDENCIES\|AM_MAKEFLAGS\|\(AM_\)\=\(MAKEINFOFLAGS\|RUNTESTDEFAULTFLAGS\|ETAGSFLAGS\|CTAGSFLAGS\|JAVACFLAGS\)\)\s*\ze+\==" +syn match automakeExtra "^EXTRA_\w\+\s*\ze+\==" +syn match automakeOptions "^\(ACLOCAL_AMFLAGS\|AUTOMAKE_OPTIONS\|DISTCHECK_CONFIGURE_FLAGS\|ETAGS_ARGS\|TAGS_DEPENDENCIES\)\s*\ze+\==" +syn match automakeClean "^\(MOSTLY\|DIST\|MAINTAINER\)\=CLEANFILES\s*\ze+\==" +syn match automakeSubdirs "^\(DIST_\)\=SUBDIRS\s*\ze+\==" +syn match automakeConditional "^\(if\s*!\=\w\+\|else\|endif\)\s*$" + +syn match automakeSubst "@\w\+@" +syn match automakeSubst "^\s*@\w\+@" +syn match automakeComment1 "#.*$" contains=automakeSubst,@Spell +syn match automakeComment2 "##.*$" contains=@Spell + +syn match automakeMakeError "$[{(][^})]*[^a-zA-Z0-9_})][^})]*[})]" " GNU make function call +syn match automakeMakeError "^AM_LDADD\s*\ze+\==" " Common mistake + +syn region automakeNoSubst start="^EXTRA_\w*\s*+\==" end="$" contains=ALLBUT,automakeNoSubst transparent +syn region automakeNoSubst start="^DIST_SUBDIRS\s*+\==" end="$" contains=ALLBUT,automakeNoSubst transparent +syn region automakeNoSubst start="^\w*_SOURCES\s*+\==" end="$" contains=ALLBUT,automakeNoSubst transparent +syn match automakeBadSubst "@\(\w*@\=\)\=" contained + +syn region automakeMakeDString start=+"+ skip=+\\"+ end=+"+ contains=makeIdent,automakeSubstitution +syn region automakeMakeSString start=+'+ skip=+\\'+ end=+'+ contains=makeIdent,automakeSubstitution +syn region automakeMakeBString start=+`+ skip=+\\`+ end=+`+ contains=makeIdent,makeSString,makeDString,makeNextLine,automakeSubstitution + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link automakePrimary Statement +hi def link automakeSecondary Type +hi def link automakeExtra Special +hi def link automakeOptions Special +hi def link automakeClean Special +hi def link automakeSubdirs Statement +hi def link automakeConditional PreProc +hi def link automakeSubst PreProc +hi def link automakeComment1 makeComment +hi def link automakeComment2 makeComment +hi def link automakeMakeError makeError +hi def link automakeBadSubst makeError +hi def link automakeMakeDString makeDString +hi def link automakeMakeSString makeSString +hi def link automakeMakeBString makeBString + + +let b:current_syntax = 'automake' + +" vi: ts=8 sw=4 sts=4 diff --git a/.config/vim/syntax/autopkgtest.vim b/.config/vim/syntax/autopkgtest.vim new file mode 100644 index 0000000..5dc1b5f --- /dev/null +++ b/.config/vim/syntax/autopkgtest.vim @@ -0,0 +1,95 @@ +" Vim syntax file +" Language: Debian autopkgtest control files +" Maintainer: Debian Vim Maintainers +" Last Change: 2025 Jul 05 +" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/autopkgtest.vim +" +" Specification of the autopkgtest format is available at: +" https://www.debian.org/doc/debian-policy/autopkgtest.txt + +" Standard syntax initialization +if exists('b:current_syntax') + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Must call this first, because it will clear other settings +syn sync clear +syn sync match autopkgtestSync grouphere NONE '^$' + +" Should match case except for the keys of each field +syn case match + +syn iskeyword @,48-57,- + +" #-Comments +syn match autopkgtestComment "#.*" contains=@Spell + +syn match autopkgtestTests contained "[a-z0-9][a-z0-9+.-]\+\%(,\=\s*[a-z0-9][a-z0-9+.-]\+\)*,\=" +syn match autopkgtestArbitrary contained "[^#]*" +syn keyword autopkgtestRestrictions contained + \ allow-stderr + \ breaks-testbe + \ build-neede + \ flaky + \ hint-testsuite-trigger + \ isolation-container + \ isolation-machine + \ needs-internet + \ needs-reboot + \ needs-root + \ needs-sudo + \ rw-build-tree + \ skip-foreign-architecture + \ skip-not-installable + \ skippable + \ superficial +syn keyword autopkgtestDeprecatedRestrictions contained needs-recommends +syn match autopkgtestFeatures contained 'test-name=[^, ]*\%([, ]*[^, #]\)*,\=' +syn match autopkgtestDepends contained '\%(@builddeps@\|@recommends@\|@\)' + +runtime! syntax/shared/debarchitectures.vim + +syn keyword autopkgtestArchitecture contained any +exe 'syn keyword autopkgtestArchitecture contained '. join(g:debArchitectureKernelAnyArch) +exe 'syn keyword autopkgtestArchitecture contained '. join(g:debArchitectureAnyKernelArch) +exe 'syn keyword autopkgtestArchitecture contained '. join(g:debArchitectureArchs) + +syn case ignore + +" Catch-all for the legal fields +syn region autopkgtestMultiField matchgroup=autopkgtestKey start="^Tests: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=autopkgtestTests,autopkgtestComment +syn region autopkgtestMultiField matchgroup=autopkgtestKey start="^Restrictions: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=autopkgtestRestrictions,autopkgtestDeprecatedRestrictions,autopkgtestComment +syn region autopkgtestMultiField matchgroup=autopkgtestKey start="^Features: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=autopkgtestFeatures,autopkgtestComment +syn region autopkgtestMultiField matchgroup=autopkgtestKey start="^Depends: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=autopkgtestDepends,autopkgtestComment +syn region autopkgtestMultiField matchgroup=autopkgtestKey start="^Classes: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=autopkgtestComment +syn region autopkgtestMultiField matchgroup=autopkgtestKey start="^Architecture: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=autopkgtestArchitecture,autopkgtestComment + +" Fields for which we do strict syntax checking +syn region autopkgtestStrictField matchgroup=autopkgtestKey start="^Test-Command: *" end="$" end='#'me=s-1 contains=autopkgtestArbitrary,autopkgtestComment oneline +syn region autopkgtestStrictField matchgroup=autopkgtestKey start="^Tests-Directory: *" end="$" end='#'me=s-1 contains=autopkgtestArbitrary,autopkgtestComment oneline + +syn match autopkgtestError '^\%(\%(Architecture\|Classes\|Depends\|Features\|Restrictions\|Test-Command\|Tests-Directory\|Tests\)\@![^ #]*:\)' + +" Associate our matches and regions with pretty colours +hi def link autopkgtestKey Keyword +hi def link autopkgtestRestrictions Identifier +hi def link autopkgtestFeatures Keyword +hi def link autopkgtestDepends Identifier +hi def link autopkgtestArchitecture Identifier +hi def link autopkgtestStrictField Error +hi def link autopkgtestDeprecatedRestrictions Error +hi def link autopkgtestMultiField Normal +hi def link autopkgtestArbitrary Normal +hi def link autopkgtestTests Normal +hi def link autopkgtestComment Comment +hi def link autopkgtestError Error + +let b:current_syntax = 'autopkgtest' + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/ave.vim b/.config/vim/syntax/ave.vim new file mode 100644 index 0000000..e63e7d2 --- /dev/null +++ b/.config/vim/syntax/ave.vim @@ -0,0 +1,79 @@ +" Vim syntax file +" Copyright by Jan-Oliver Wagner +" Language: avenue +" Maintainer: Jan-Oliver Wagner +" Last change: 2001 May 10 + +" Avenue is the ArcView built-in language. ArcView is +" a desktop GIS by ESRI. Though it is a built-in language +" and a built-in editor is provided, the use of VIM increases +" development speed. +" I use some technologies to automatically load avenue scripts +" into ArcView. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Avenue is entirely case-insensitive. +syn case ignore + +" The keywords + +syn keyword aveStatement if then elseif else end break exit return +syn keyword aveStatement for each in continue while + +" String + +syn region aveString start=+"+ end=+"+ + +" Integer number +syn match aveNumber "[+-]\=\<[0-9]\+\>" + +" Operator + +syn keyword aveOperator or and max min xor mod by +" 'not' is a kind of a problem: It's an Operator as well as a method +" 'not' is only marked as an Operator if not applied as method +syn match aveOperator "[^\.]not[^a-zA-Z]" + +" Variables + +syn keyword aveFixVariables av nil self false true nl tab cr tab +syn match globalVariables "_[a-zA-Z][a-zA-Z0-9]*" +syn match aveVariables "[a-zA-Z][a-zA-Z0-9_]*" +syn match aveConst "#[A-Z][A-Z_]+" + +" Comments + +syn match aveComment "'.*" + +" Typical Typos + +" for C programmers: +syn match aveTypos "==" +syn match aveTypos "!=" + +" Define the default highlighting. +" Only when an item doesn't have highlighting+yet + +hi def link aveStatement Statement + +hi def link aveString String +hi def link aveNumber Number + +hi def link aveFixVariables Special +hi def link aveVariables Identifier +hi def link globalVariables Special +hi def link aveConst Special + +hi def link aveClassMethods Function + +hi def link aveOperator Operator +hi def link aveComment Comment + +hi def link aveTypos Error + + +let b:current_syntax = "ave" diff --git a/.config/vim/syntax/avra.vim b/.config/vim/syntax/avra.vim new file mode 100644 index 0000000..0e02bd8 --- /dev/null +++ b/.config/vim/syntax/avra.vim @@ -0,0 +1,71 @@ +" Vim syntax file +" Language: AVR Assembler (AVRA) +" AVRA Home: http://avra.sourceforge.net/index.html +" AVRA Version: 1.3.0 +" Last Update: 2016 Oct 7 +" Maintainer: Marius Ghita + +let s:cpo_save = &cpo +set cpo&vim + +syn case ignore + +syn keyword avraRegister r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 +syn keyword avraRegister r15 r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r26 r27 +syn keyword avraRegister r28 r29 r30 r31 + +syn keyword avraInstr add adc adiw sub subi sbc sbci sbiw and andi or ori eor +syn keyword avraInstr com neg sbr cbr inc dec tst clr ser mul muls mulsu fmul +syn keyword avraInstr fmuls fmulsu des rjmp ijmp eijmp jmp rcall icall eicall +syn keyword avraInstr call ret reti cpse cp cpc cpi sbrc sbrs sbic sbis brbs +syn keyword avraInstr brbc breq brne brcs brcc brsh brlo brmi brpl brge brlt +syn keyword avraInstr brhs brhc brts brtc brvs brvc brie brid mov movw ldi lds +syn keyword avraInstr ld ldd sts st std lpm elpm spm in out push pop xch las +syn keyword avraInstr lac lat lsl lsr rol ror asr swap bset bclr sbi cbi bst bld +syn keyword avraInstr sec clc sen cln sez clz sei cli ses cls sev clv set clt +syn keyword avraInstr seh clh break nop sleep wdr + +syn keyword avraDirective .byte .cseg .db .def .device .dseg .dw .endmacro .equ +syn keyword avraDirective .eseg .exit .include .list .listmac .macro .nolist +syn keyword avraDirective .org .set .define .undef .ifdef .ifndef .if .else +syn keyword avraDirective .elif .elseif .warning + +syn keyword avraOperator low high byte2 byte3 byte4 lwrd hwrd page exp2 log2 + +syn match avraNumericOperator "[-*/+]" +syn match avraUnaryOperator "!" +syn match avraBinaryOperator "<<\|>>\|<\|<=\|>\|>=\|==\|!=" +syn match avraBitwiseOperator "[~&^|]\|&&\|||" + +syn match avraBinaryNumber "\<0[bB][0-1]*\>" +syn match avraHexNumber "\<0[xX][0-9a-fA-F]\+\>" +syn match avraDecNumber "\<\(0\|[1-9]\d*\)\>" + +syn region avraComment start=";" end="$" +syn region avraString start="\"" end="\"\|$" + +syn match avraLabel "^\s*[^; \t]\+:" + +hi def link avraBinaryNumber avraNumber +hi def link avraHexNumber avraNumber +hi def link avraDecNumber avraNumber + +hi def link avraNumericOperator avraOperator +hi def link avraUnaryOperator avraOperator +hi def link avraBinaryOperator avraOperator +hi def link avraBitwiseOperator avraOperator + + +hi def link avraOperator operator +hi def link avraComment comment +hi def link avraDirective preproc +hi def link avraRegister type +hi def link avraNumber constant +hi def link avraString String +hi def link avraInstr keyword +hi def link avraLabel label + +let b:current_syntax = "avra" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/awk.vim b/.config/vim/syntax/awk.vim new file mode 100644 index 0000000..4e7c0d1 --- /dev/null +++ b/.config/vim/syntax/awk.vim @@ -0,0 +1,217 @@ +" Vim syntax file +" Language: awk, nawk, gawk, mawk +" Maintainer: Doug Kearns +" Previous Maintainer: Antonio Colombo +" Last Change: 2024 Oct 28 + +" AWK ref. is: Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger +" The AWK Programming Language, Addison-Wesley, 1988 + +" GAWK ref. is: Arnold D. Robbins +" Effective AWK Programming, Third Edition, O'Reilly, 2001 +" Effective AWK Programming, Fourth Edition, O'Reilly, 2015 +" (up-to-date version available with the gawk source distribution) + +" MAWK is a "new awk" meaning it implements AWK ref. +" mawk conforms to the Posix 1003.2 (draft 11.3) +" definition of the AWK language which contains a few features +" not described in the AWK book, and mawk provides a small number of extensions. + +" TODO: +" Dig into the commented out syntax expressions below. + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn iskeyword @,48-57,_,192-255,@-@ + +" A bunch of useful Awk keywords +" AWK ref. p. 188 +syn keyword awkStatement break continue delete exit +syn keyword awkStatement function getline next +syn keyword awkStatement print printf return +" GAWK ref. Chapter 7-9 +syn keyword awkStatement case default switch nextfile +syn keyword awkStatement func +" GAWK ref. Chapter 2.7, Including Other Files into Your Program +" GAWK ref. Chapter 2.8, Loading Dynamic Extensions into Your Program +" GAWK ref. Chapter 15, Namespaces +" Directives +syn keyword awkStatement @include @load @namespace +" +" GAWK ref. Chapter 9, Functions +" Numeric Functions +syn keyword awkFunction atan2 cos exp int log rand sin sqrt srand +" String Manipulation Functions +syn keyword awkFunction asort asorti gensub gsub index length match +syn keyword awkFunction patsplit split sprintf strtonum sub substr +syn keyword awkFunction tolower toupper +" Input Output Functions +syn keyword awkFunction close fflush system +" Time Functions +syn keyword awkFunction mktime strftime systime +" Bit Manipulation Functions +syn keyword awkFunction and compl lshift or rshift xor +" Getting Type Information Functions +syn keyword awkFunction isarray typeof +" String-Translation Functions +syn keyword awkFunction bindtextdomain dcgettext dcngetext + +syn keyword awkConditional if else +syn keyword awkRepeat while for do + +syn keyword awkTodo contained TODO + +syn keyword awkPatterns BEGIN END BEGINFILE ENDFILE + +" GAWK ref. Chapter 7 +" Built-in Variables That Control awk +syn keyword awkVariables BINMODE CONVFMT FIELDWIDTHS FPAT FS +syn keyword awkVariables IGNORECASE LINT OFMT OFS ORS PREC +syn keyword awkVariables ROUNDMODE RS SUBSEP TEXTDOMAIN +" Built-in Variables That Convey Information +syn keyword awkVariables ARGC ARGV ARGIND ENVIRON ERRNO FILENAME +syn keyword awkVariables FNR NF FUNCTAB NR PROCINFO RLENGTH RSTART +syn keyword awkVariables RT SYMTAB + +" Arithmetic operators: +, and - take care of ++, and -- +syn match awkOperator "+\|-\|\*\|/\|%\|=" +syn match awkOperator "+=\|-=\|\*=\|/=\|%=" +syn match awkOperator "\^\|\^=" + +" Octal format character. +syn match awkSpecialCharacter display contained "\\[0-7]\{1,3\}" +" Hex format character. +syn match awkSpecialCharacter display contained "\\x[0-9A-Fa-f]\+" + +syn match awkFieldVars "\$\d\+" + +" catch errors caused by wrong parenthesis +syn region awkParen transparent start="(" end=")" contains=ALLBUT,awkParenError,awkSpecialCharacter,awkArrayElement,awkArrayArray,awkTodo,awkRegExp,awkBrktRegExp,awkBrackets,awkCharClass +syn match awkParenError display ")" +"syn match awkInParen display contained "[{}]" + +" 64 lines for complex &&'s, and ||'s in a big "if" +syn sync ccomment awkParen maxlines=64 + +" Search strings & Regular Expressions therein. +syn region awkSearch oneline start="^[ \t]*/"ms=e start="\(,\|!\=\~\)[ \t]*/"ms=e skip="\\\\\|\\/" end="/" contains=awkBrackets,awkRegExp,awkSpecialCharacter +syn region awkBrackets contained start="\[\^\]\="ms=s+2 start="\[[^\^]"ms=s+1 end="\]"me=e-1 contains=awkBrktRegExp,awkCharClass +syn region awkSearch oneline start="[ \t]*/"hs=e skip="\\\\\|\\/" end="/" contains=awkBrackets,awkRegExp,awkSpecialCharacter + +syn match awkCharClass contained "\[:[^:\]]*:\]" +syn match awkBrktRegExp contained "\\.\|.\-[^]]" +syn match awkRegExp contained "/\^"ms=s+1 +syn match awkRegExp contained "\$/"me=e-1 +syn match awkRegExp contained "[?.*{}|+]" + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn region awkString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell,awkSpecialCharacter,awkSpecialPrintf +syn match awkSpecialCharacter contained "\\." + +" Some of these combinations may seem weird, but they work. +syn match awkSpecialPrintf contained "%[-+ #]*\d*\.\=\d*[cdefgiosuxEGX%]" + +" Numbers, allowing signs (both -, and +) +" Integer number. +syn match awkNumber display "[+-]\=\<\d\+\>" +" Floating point number. +syn match awkFloat display "[+-]\=\<\d\+\.\d+\>" +" Floating point number, starting with a dot. +syn match awkFloat display "[+-]\=\<.\d+\>" +syn case ignore +"floating point number, with dot, optional exponent +syn match awkFloat display "\<\d\+\.\d*\(e[-+]\=\d\+\)\=\>" +"floating point number, starting with a dot, optional exponent +syn match awkFloat display "\.\d\+\(e[-+]\=\d\+\)\=\>" +"floating point number, without dot, with exponent +syn match awkFloat display "\<\d\+e[-+]\=\d\+\>" +syn case match + +"syn match awkIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>" + +" Comparison expressions. +syn match awkExpression "==\|>=\|=>\|<=\|=<\|\!=" +syn match awkExpression "\~\|\!\~" +syn match awkExpression "?\|:" +syn keyword awkExpression in + +" Boolean Logic (OR, AND, NOT) +syn match awkBoolLogic "||\|&&\|\!" + +" This is overridden by less-than & greater-than. +" Put this above those to override them. +" Put this in a 'match "\.*;\="' to make it not override +" less/greater than (most of the time), but it won't work yet because +" keywords always have precedence over match & region. +" File I/O: (print foo, bar > "filename") & for nawk (getline < "filename") +"syn match awkFileIO contained ">" +"syn match awkFileIO contained "<" + +" Expression separators: ';' and ',' +syn match awkSemicolon ";" +syn match awkComma "," + +syn match awkComment "#.*" contains=@Spell,awkTodo + +syn match awkLineSkip "\\$" + +" Highlight array element's (recursive arrays allowed). +" Keeps nested array names' separate from normal array elements. +" Keeps numbers separate from normal array elements (variables). +syn match awkArrayArray contained "[^][, \t]\+\["me=e-1 +syn match awkArrayElement contained "[^][, \t]\+" +syn region awkArray transparent start="\[" end="\]" contains=awkArray,awkArrayElement,awkArrayArray,awkNumber,awkFloat + +" 10 should be enough. +" (for the few instances where it would be more than "oneline") +syn sync ccomment awkArray maxlines=10 + +" Define the default highlighting. +hi def link awkConditional Conditional +hi def link awkFunction Function +hi def link awkRepeat Repeat +hi def link awkStatement Statement +hi def link awkString String +hi def link awkSpecialPrintf Special +hi def link awkSpecialCharacter Special +hi def link awkSearch String +hi def link awkBrackets awkRegExp +hi def link awkBrktRegExp awkNestRegExp +hi def link awkCharClass awkNestRegExp +hi def link awkNestRegExp Keyword +hi def link awkRegExp Special +hi def link awkNumber Number +hi def link awkFloat Float +hi def link awkFileIO Special +hi def link awkOperator Special +hi def link awkExpression Special +hi def link awkBoolLogic Special +hi def link awkPatterns Special +hi def link awkVariables Special +hi def link awkFieldVars Special +hi def link awkLineSkip Special +hi def link awkSemicolon Special +hi def link awkComma Special +hi def link awkIdentifier Identifier +hi def link awkComment Comment +hi def link awkTodo Todo +" Change this if you want nested array names to be highlighted. +hi def link awkArrayArray awkArray +hi def link awkArrayElement Special +hi def link awkParenError awkError +hi def link awkInParen awkError +hi def link awkError Error + +let b:current_syntax = "awk" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 diff --git a/.config/vim/syntax/ayacc.vim b/.config/vim/syntax/ayacc.vim new file mode 100644 index 0000000..6fb6aec --- /dev/null +++ b/.config/vim/syntax/ayacc.vim @@ -0,0 +1,75 @@ +" Vim syntax file +" Language: AYacc +" Maintainer: Mathieu Clabaut +" LastChange: 2011 Dec 25 +" Original: Yacc, maintained by Dr. Charles E. Campbell, Jr. +" Comment: Replaced sourcing c.vim file by ada.vim and rename yacc* +" in ayacc* + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Read the Ada syntax to start with +runtime! syntax/ada.vim +unlet b:current_syntax + +let s:cpo_save = &cpo +set cpo&vim + +" Clusters +syn cluster ayaccActionGroup contains=ayaccDelim,cInParen,cTodo,cIncluded,ayaccDelim,ayaccCurlyError,ayaccUnionCurly,ayaccUnion,cUserLabel,cOctalZero,cCppOut2,cCppSkip,cErrInBracket,cErrInParen,cOctalError +syn cluster ayaccUnionGroup contains=ayaccKey,cComment,ayaccCurly,cType,cStructure,cStorageClass,ayaccUnionCurly + +" Yacc stuff +syn match ayaccDelim "^[ \t]*[:|;]" +syn match ayaccOper "@\d\+" + +syn match ayaccKey "^[ \t]*%\(token\|type\|left\|right\|start\|ident\)\>" +syn match ayaccKey "[ \t]%\(prec\|expect\|nonassoc\)\>" +syn match ayaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+" +syn keyword ayaccKeyActn yyerrok yyclearin + +syn match ayaccUnionStart "^%union" skipwhite skipnl nextgroup=ayaccUnion +syn region ayaccUnion contained matchgroup=ayaccCurly start="{" matchgroup=ayaccCurly end="}" contains=@ayaccUnionGroup +syn region ayaccUnionCurly contained matchgroup=ayaccCurly start="{" matchgroup=ayaccCurly end="}" contains=@ayaccUnionGroup +syn match ayaccBrkt contained "[<>]" +syn match ayaccType "<[a-zA-Z_][a-zA-Z0-9_]*>" contains=ayaccBrkt +syn match ayaccDefinition "^[A-Za-z][A-Za-z0-9_]*[ \t]*:" + +" special Yacc separators +syn match ayaccSectionSep "^[ \t]*%%" +syn match ayaccSep "^[ \t]*%{" +syn match ayaccSep "^[ \t]*%}" + +" I'd really like to highlight just the outer {}. Any suggestions??? +syn match ayaccCurlyError "[{}]" +syn region ayaccAction matchgroup=ayaccCurly start="{" end="}" contains=ALLBUT,@ayaccActionGroup + + +" Internal ayacc highlighting links +hi def link ayaccBrkt ayaccStmt +hi def link ayaccKey ayaccStmt +hi def link ayaccOper ayaccStmt +hi def link ayaccUnionStart ayaccKey + +" External ayacc highlighting links +hi def link ayaccCurly Delimiter +hi def link ayaccCurlyError Error +hi def link ayaccDefinition Function +hi def link ayaccDelim Function +hi def link ayaccKeyActn Special +hi def link ayaccSectionSep Todo +hi def link ayaccSep Delimiter +hi def link ayaccStmt Statement +hi def link ayaccType Type + +" since Bram doesn't like my Delimiter :| +hi def link Delimiter Type + +let b:current_syntax = "ayacc" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=15 diff --git a/.config/vim/syntax/b.vim b/.config/vim/syntax/b.vim new file mode 100644 index 0000000..01532be --- /dev/null +++ b/.config/vim/syntax/b.vim @@ -0,0 +1,114 @@ +" Vim syntax file +" Language: B (A Formal Method with refinement and mathematical proof) +" Maintainer: Mathieu Clabaut +" Contributor: Csaba Hoch +" LastChange: 8 Dec 2007 + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + + +" A bunch of useful B keywords +syn keyword bStatement MACHINE MODEL SEES OPERATIONS INCLUDES DEFINITIONS CONSTRAINTS CONSTANTS VARIABLES CONCRETE_CONSTANTS CONCRETE_VARIABLES ABSTRACT_CONSTANTS ABSTRACT_VARIABLES HIDDEN_CONSTANTS HIDDEN_VARIABLES ASSERT ASSERTIONS EXTENDS IMPLEMENTATION REFINEMENT IMPORTS USES INITIALISATION INVARIANT PROMOTES PROPERTIES REFINES SETS VALUES VARIANT VISIBLE_CONSTANTS VISIBLE_VARIABLES THEORY XLS THEOREMS LOCAL_OPERATIONS +syn keyword bLabel CASE IN EITHER OR CHOICE DO OF +syn keyword bConditional IF ELSE SELECT ELSIF THEN WHEN +syn keyword bRepeat WHILE FOR +syn keyword bOps bool card conc closure closure1 dom first fnc front not or id inter iseq iseq1 iterate last max min mod perm pred prj1 prj2 ran rel rev seq seq1 size skip succ tail union +syn keyword bKeywords LET VAR BE IN BEGIN END POW POW1 FIN FIN1 PRE SIGMA STRING UNION IS ANY WHERE + +syn keyword bBoolean TRUE FALSE bfalse btrue +syn keyword bConstant PI MAXINT MININT User_Pass PatchProver PatchProverH0 PatchProverB0 FLAT ARI DED SUB RES +syn keyword bGuard binhyp band bnot bguard bsearch bflat bfresh bguardi bget bgethyp barith bgetresult bresult bgoal bmatch bmodr bnewv bnum btest bpattern bprintf bwritef bsubfrm bvrb blvar bcall bappend bclose + +syn keyword bLogic or not +syn match bLogic "\(!\|#\|%\|&\|+->>\|+->\|-->>\|->>\|-->\|->\|/:\|/<:\|/<<:\|/=\|/\\\|/|\\\|::\|:\|;:\|<+\|<->\|<--\|<-\|<:\|<<:\|<<|\|<=>\|<|\|==\|=>\|>+>>\|>->\|>+>\|||\||->\)" +syn match bNothing /:=/ + +syn keyword cTodo contained TODO FIXME XXX + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match bSpecial contained "\\[0-7][0-7][0-7]\=\|\\." +syn region bString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=bSpecial +syn match bCharacter "'[^\\]'" +syn match bSpecialCharacter "'\\.'" +syn match bSpecialCharacter "'\\[0-7][0-7]'" +syn match bSpecialCharacter "'\\[0-7][0-7][0-7]'" + +"catch errors caused by wrong parenthesis +syn region bParen transparent start='(' end=')' contains=ALLBUT,bParenError,bIncluded,bSpecial,bTodo,bUserLabel,bBitField +syn match bParenError ")" +syn match bInParen contained "[{}]" + +"integer number, or floating point number without a dot and with "f". +syn case ignore +syn match bNumber "\<[0-9]\+\>" +"syn match bIdentifier "\<[a-z_][a-z0-9_]*\>" +syn case match + + syn region bComment start="/\*" end="\*/" contains=bTodo + syn match bComment "//.*" contains=bTodo +syntax match bCommentError "\*/" + +syn keyword bType INT INTEGER BOOL NAT NATURAL NAT1 NATURAL1 + +syn region bPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=bComment,bString,bCharacter,bNumber,bCommentError +syn region bIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match bIncluded contained "<[^>]*>" +syn match bInclude "^\s*#\s*include\>\s*["<]" contains=bIncluded + +syn region bDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,bPreCondit,bIncluded,bInclude,bDefine,bInParen +syn region bPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,bPreCondit,bIncluded,bInclude,bDefine,bInParen + +syn sync ccomment bComment minlines=10 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + + +" The default methods for highlighting. Can be overridden later +hi def link bLabel Label +hi def link bUserLabel Label +hi def link bConditional Conditional +hi def link bRepeat Repeat +hi def link bLogic Special +hi def link bCharacter Character +hi def link bSpecialCharacter bSpecial +hi def link bNumber Number +hi def link bFloat Float +hi def link bOctalError bError +hi def link bParenError bError +" hi def link bInParen bError +hi def link bCommentError bError +hi def link bBoolean Identifier +hi def link bConstant Identifier +hi def link bGuard Identifier +hi def link bOperator Operator +hi def link bKeywords Operator +hi def link bOps Identifier +hi def link bStructure Structure +hi def link bStorageClass StorageClass +hi def link bInclude Include +hi def link bPreProc PreProc +hi def link bDefine Macro +hi def link bIncluded bString +hi def link bError Error +hi def link bStatement Statement +hi def link bPreCondit PreCondit +hi def link bType Type +hi def link bCommentError bError +hi def link bCommentString bString +hi def link bComment2String bString +hi def link bCommentSkip bComment +hi def link bString String +hi def link bComment Comment +hi def link bSpecial SpecialChar +hi def link bTodo Todo +"hi link bIdentifier Identifier + +let b:current_syntax = "b" + +" vim: ts=8 diff --git a/.config/vim/syntax/baan.vim b/.config/vim/syntax/baan.vim new file mode 100644 index 0000000..9a42a43 --- /dev/null +++ b/.config/vim/syntax/baan.vim @@ -0,0 +1,1917 @@ +" Vim syntax file" +" Language: Baan +" Maintainer: Erik Remmelzwaal (erik.remmelzwaal 0x40 ssaglobal.com) +" Originally owned by: Erwin Smit / Her van de Vliert +" Last change: v1.17 2006/04/26 10:40:18 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +"********************************** Lexical setting ***************************" +syn case ignore +setlocal iskeyword+=. +"setlocal ignorecase "This is not a local yet ;-( +" Identifier +syn match baanIdentifier "\<\k\+\>" + +"************************************* 3GL ************************************" +syn match baan3glpre "#ident\>" +syn match baan3glpre "#include\>" +syn region baan3glpre start="#define\>" end="^[^^|]"me=s-1 contains=baanString,baanConstant,baanNumber,baanComment,baansql +syn match baan3glpre "#undef\>" +syn match baan3glpre "#pragma\>" +syn match baan3glpre "#if\>" +syn match baan3glpre "#ifdef\>" +syn match baan3glpre "#ifndef\>" +syn match baan3glpre "#elif\>" +syn match baan3glpre "#else\>" +syn match baan3glpre "#endif\>" + +" Some keywords are only defined when no foldinat based break bset call continue default +syn keyword baan3gl empty fixed ge global goto gt le lt mb +syn keyword baan3gl multibyte ne ofr prompt repeat static step stop +syn keyword baan3gl until void wherebind ref reference break continue +syn keyword baan3gl and or to not in +syn keyword baan3gl eq input end return at print +syn keyword baanType domain double long string table boolean common +syn keyword baanType bset void xmlNode +syn keyword baanStorageClass dim base based extern global fixed MB const +syn keyword baanConstant pi true false + +" Folding settings +if exists("baan_fold") && baan_fold + syn region baanFunctionFold matchgroup=baan3gl start="^\z(\s*\)\" matchgroup=NONE end="^\z1}" transparent fold keepend +else + syn keyword baan3gl function +endif +if exists("baan_fold") && baan_fold && exists("baan_fold_block") && baan_fold_block + syn region baanCondFold matchgroup=baanConditional start="^\z(\s*\)\(if\>\|else\>\)" end="^\z1endif\>" end="^\z1else\>"me=s-1 transparent fold keepend extend + syn region baanCondFold matchgroup=baanConditional start="^\z(\s*\)for\>" end="^\z1endfor\>" transparent fold keepend extend + syn region baanCondFold matchgroup=baanConditional start="^\z(\s*\)while\>" end="^\z1endwhile\>" transparent fold keepend extend + syn region baanDLLUsage matchgroup=baan3gl start="^\z(\s*\)dllusage\>" end="^\z1enddllusage\>" fold contains=baanNumber,baanConstant,baanType + syn region baanFunUsage matchgroup=baan3gl start="^\z(\s*\)functionusage\>" end="^\z1endfunctionusage\>" fold contains=baanNumber,baanConstant,baanType + syn region baanCondFold matchgroup=baanConditional start="^\z(\s*\)\(case\>\|default\>\)\>" end="^\z1endcase\>" end="^\z1\(case\>\|default\>\)"me=s-1 transparent fold keepend extend + syn keyword baanConditional then else endif while endwhile endfor case endcase + syn match baanConditional "\" +else + syn match baanConditional "\" contains=baansql + syn match baanConditional "\" + syn keyword baanConditional if then else endif while endwhile endfor case endcase default + syn region baanDLLUsage matchgroup=baan3gl start="\" end="\" contains=baanNumber,baanConstant,baanType + syn region baanFunUsage matchgroup=baan3gl start="\" end="\" contains=baanNumber,baanConstant,baanType +endif + +"************************************* SQL ************************************" +syn keyword baansql from selectbind +syn keyword baansql where wherebind whereused exsists +syn keyword baansql between inrange having +syn keyword baansql hint ordered asc desc +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +" references +syn keyword path reference +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +" hints +syn keyword baansql hint and ordered asc desc +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +syn match baansql "\" +" update +syn keyword baansql set + +if exists("baan_fold") && baan_fold && exists("baan_fold_sql") && baan_fold_sql + syn region baanSQLFold matchgroup=baansql start="^\z(\s*\)\(select\>\|selectdo\>\|selectempty\>\|selecterror\>\|selecteos\>\)" end="^\z1endselect\>" end="^\z1\(selectdo\>\|selectempty\>\|selecterror\>\|selecteos\>\)"me=s-1 transparent fold keepend extend + "syn region baanSQLFold matchgroup=baansql start="^\z(\s*\)\(update\>\|updateempty\>\|updateerror\>\|selecteos\>\)" end="^\z1endupdate\>" end="^\z1\(updateempty\>\|updateerror\>\|selecteos\>\)"me=s-1 transparent fold keepend extend + syn region baanSQLFold matchgroup=baansql start="^\z(\s*\)\(update\>\|updateempty\>\|updateerror\>\)" end="^\z1endupdate\>" end="^\z1\(updateempty\>\|updateerror\>\)"me=s-1 transparent fold keepend extend + syn region baanSQLFold matchgroup=baansql start="^\z(\s*\)\(delete\s\+from\>\|deleteempty\>\|deleteerror\>\)" end="^\z1enddelete\>" end="^\z1\(deleteempty\>\|deleteerror\>\)"me=s-1 transparent fold keepend extend +else + syn keyword baansql select selectdo selectempty selecterror selecteos endselect + " delete + syn match baansql "\" + syn keyword baansql deleteempty deleteerror deleteeos enddelete + " update + syn keyword baansql update updateempty updateerror updateeos endupdate +endif + +setlocal foldmethod=syntax +"syn sync fromstart +syn sync minlines=100 + + +"These are bshell functions +if exists("baan_obsolete") +syn match baansql "commit\.transaction()" +syn match baansql "abort\.transaction()" +syn match baansql "db\.columns\.to\.record" +syn match baansql "db\.record\.to\.columns" +syn match baansql "db\.bind" +syn match baansql "db\.change\.order" +syn match baansql "db\.set\.to\.default" +syn match baansql "DB\.RETRY" +syn match baansql "db\.delayed\.lock" +syn match baansql "db\.retry\.point()" +syn match baansql "db\.retry\.hit()" +syn match baansql "db\.return\.dupl" +syn match baansql "db\.skip\.dupl" +syn match baansql "db\.row\.length" +endif + +" Constants +syn keyword baanConstant __function__ +syn keyword baanConstant __object__ +syn keyword baanConstant __file__ +syn keyword baanConstant __line__ + +syn keyword baanConstant ABORT.PROGRAM +syn keyword baanConstant ADD.SET +syn keyword baanConstant ALL_ENUMS_EXCEPT +syn keyword baanConstant APPL.EXCL +syn keyword baanConstant APPL.READ +syn keyword baanConstant APPL.WAIT +syn keyword baanConstant APPL.WIDE +syn keyword baanConstant APPL.WRITE +syn keyword baanConstant ASK.HELPINFO +syn keyword baanConstant AUTG_PRINT +syn keyword baanConstant AUTG_DISPLAY +syn keyword baanConstant AUTG_MODIFY +syn keyword baanConstant AUTG_INSERT +syn keyword baanConstant AUTG_DELETE +syn keyword baanConstant AUTG_ALL +syn keyword baanConstant BMS +syn keyword baanConstant CALCULATOR +syn keyword baanConstant CALENDAR +syn keyword baanConstant CHANGE.ORDER +syn keyword baanConstant CMD.OPTIONS +syn keyword baanConstant CMD.WHATS.THIS +syn keyword baanConstant CMF.MESSAGE +syn keyword baanConstant CMF.TASK +syn keyword baanConstant CMF.APPOINTMENT +syn match baanConstant "\" +"number with dot" +syn match baanNumber "\<\-\=\d\+\.\d*\>" +"number starting with a dot" +syn match baanNumber "\<\-\=\.\d\+\>" + +" String Error does not work correct with vim 6.0 +syn match baanOpenStringError +^[^^"]+ display contained excludenl +syn region baanString start=+"+ skip=+""+ end=+"+ end=+^[^^]+ contains=baanOpenStringError keepend + +" Comment" +syn match baanComment "|$" +syn match baanComment "|.$" +syn match baanComment "|[^ ]" +syn match baanComment "|[^#].*[^ ]" +syn match baanCommenth "^|#lra.*$" +syn match baanCommenth "^|#mdm.*$" +syn match baanCommenth "^|#[0-9][0-9][0-9][0-9][0-9].*$" +syn match baanCommenth "^|#N\=o\=Include.*$" +" Oldcode" +syn match baanUncommented "^|[^*#].*[^ ]" +" DLL section +" SpaceError" +syn match baanSpaces " " +syn match baanSpaceError "\s*$" +syn match baanSpaceError " " + +" Baan error" + +if exists("baan_code_stds") && baan_code_stds +syn match BaanError "^\s*i\..*=\s*\(\k\|\"\)*\s*$" "assignment of an input var" +syn match BaanError "^\s*ref.*\s[ilse]\..*$" " ref variable defined with i, l, e and s" +syn match BaanError "^\s*const.*\s[olse]\..*$" " const variable defined with o, l, e and s" +syn match BaanError "^\s*static.*\s\(i\|g\|l\|o\|io\)\..*$" " static defined without s." +syn match BaanError "^\s*\(domain\s\|long\s\|string\s\).*\so\.\k*[,)]" " ref variable without ref" +syn match BaanError "^\s*\(domain\s\|long\s\|string\s\).*\se\.\k*[,)]" " 'e.' variable without extern" +syn match BaanError "^\s*i\..*,\s*|\s*ref.*$" " +endif + +"**************************** bshell functions ******************************** +syn match baanBshell "\ +" Last Change: 2023 Aug 13 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" The actual syntax is in sh.vim and controlled by buffer-local variables. +unlet! b:is_sh +unlet! b:is_kornshell +let b:is_bash = 1 + +runtime! syntax/sh.vim + +let b:current_syntax = 'bash' + +" vim: ts=8 diff --git a/.config/vim/syntax/basic.vim b/.config/vim/syntax/basic.vim new file mode 100644 index 0000000..b6bf23a --- /dev/null +++ b/.config/vim/syntax/basic.vim @@ -0,0 +1,380 @@ +" Vim syntax file +" Language: BASIC (QuickBASIC 4.5) +" Maintainer: Doug Kearns +" Previous Maintainer: Allan Kelly +" Contributors: Thilo Six +" Last Change: 2022 Jun 22 + +" First version based on Micro$soft QBASIC circa 1989, as documented in +" 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989. +" +" Second version attempts to match Microsoft QuickBASIC 4.5 while keeping FreeBASIC +" (-lang qb) and QB64 (excluding extensions) in mind. -- DJK + +" Prelude {{{1 +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn iskeyword @,48-57,.,!,#,%,&,$ +syn case ignore + +" Whitespace Errors {{{1 +if exists("basic_space_errors") + if !exists("basic_no_trail_space_error") + syn match basicSpaceError display excludenl "\s\+$" + endif + if !exists("basic_no_tab_space_error") + syn match basicSpaceError display " \+\t"me=e-1 + endif +endif + +" Comment Errors {{{1 +if !exists("basic_no_comment_errors") + syn match basicCommentError "\.*" +endif + +" Not Top Cluster {{{1 +syn cluster basicNotTop contains=@basicLineIdentifier,basicDataString,basicDataSeparator,basicTodo + +" Statements {{{1 + +syn cluster basicStatements contains=basicStatement,basicDataStatement,basicMetaRemStatement,basicPutStatement,basicRemStatement + +let s:statements =<< trim EOL " {{{2 + beep + bload + bsave + call + calls + case + chain + chdir + circle + clear + close + cls + color + com + common + const + declare + def + def\s\+seg + defdbl + defint + deflng + defsng + defstr + dim + do + draw + elseif + end + end\s\+\%(def\|function\|if\|select\|sub\|type\) + environ + erase + error + exit\s\+\%(def\|do\|for\|function\|sub\) + field + files + for + function + get + gosub + goto + if + input + ioctl + key + kill + let + line + line\s\+input + locate + lock + loop + lprint + lset + mkdir + name + next + on + on\s\+error + on\s\+uevent + open + open\s\+com + option + out + paint + palette + palette\s\+using + pcopy + pen + pmap + poke + preset + print + pset + randomize + read + redim + reset + restore + resume + return + rmdir + rset + run + select\s\+case + shared + shell + sleep + sound + static + stop + strig + sub + swap + system + troff + tron + type + uevent + unlock + using + view + view\s\+print + wait + wend + while + width + window + write +EOL +" }}} + +for s in s:statements + exe 'syn match basicStatement "\<' .. s .. '\>" contained' +endfor + +syn match basicStatement "\<\%(then\|else\)\>" nextgroup=@basicStatements skipwhite + +" DATA Statement +syn match basicDataSeparator "," contained +syn region basicDataStatement matchgroup=basicStatement start="\" matchgroup=basicStatementSeparator end=":\|$" contained contains=basicDataSeparator,basicDataString,basicNumber,basicFloat,basicString + +if !exists("basic_no_data_fold") + syn region basicMultilineData start="^\s*\.*\n\%(^\s*\\)\@=" end="^\s*\.*\n\%(^\s*\\)\@!" contains=basicDataStatement transparent fold keepend +endif + +" PUT File I/O and Graphics statements - needs special handling for graphics +" action verbs +syn match basicPutAction "\<\%(pset\|preset\|and\|or\|xor\)\>" contained +syn region basicPutStatement matchgroup=basicStatement start="\" matchgroup=basicStatementSeparator end=":\|$" contained contains=basicKeyword,basicPutAction,basicFilenumber + +" Keywords {{{1 +let s:keywords =<< trim EOL " {{{2 + absolute + access + alias + append + as + base + binary + byval + cdecl + com + def + do + for + function + gosub + goto + input + int86old + int86xold + interrupt + interruptx + is + key + len + list + local + lock + lprint + next + off + on + output + pen + play + random + read + resume + screen + seg + shared + signal + static + step + stop + strig + sub + timer + to + until + using + while + write +EOL +" }}} + +for k in s:keywords + exe 'syn match basicKeyword "\<' .. k .. '\>"' +endfor + +" Functions {{{1 +syn keyword basicFunction abs asc atn cdbl chr$ cint clng command$ cos csng +syn keyword basicFunction csrlin cvd cvdmbf cvi cvl cvs cvsmbf environ$ eof +syn keyword basicFunction erdev erdev$ erl err exp fileattr fix fre freefile +syn keyword basicFunction hex$ inkey$ inp input$ instr int ioctl$ left$ lbound +syn keyword basicFunction lcase$ len loc lof log lpos ltrim$ mkd$ mkdmbf$ mki$ +syn keyword basicFunction mkl$ mks$ mksmbf$ oct$ peek pen point pos right$ rnd +syn keyword basicFunction rtrim$ sadd setmem sgn sin space$ spc sqr stick str$ +syn keyword basicFunction strig string$ tab tan ubound ucase$ val valptr +syn keyword basicFunction valseg varptr varptr$ varseg + +" Functions and statements (same name) {{{1 +syn match basicStatement "\<\%(date\$\|mid\$\|play\|screen\|seek\|time\$\|timer\)\>" contained +syn match basicFunction "\<\%(date\$\|mid\$\|play\|screen\|seek\|time\$\|timer\)\>" + +" Types {{{1 +syn keyword basicType integer long single double string any + +" Strings {{{1 + +" Unquoted DATA strings - anything except [:,] and leading or trailing whitespace +" Needs lower priority than numbers +syn match basicDataString "[^[:space:],:]\+\%(\s\+[^[:space:],:]\+\)*" contained + +syn region basicString start=+"+ end=+"+ oneline + +" Booleans {{{1 +if exists("basic_booleans") + syn keyword basicBoolean true false +endif + +" Numbers {{{1 + +" Integers +syn match basicNumber "-\=&o\=\o\+[%&]\=\>" +syn match basicNumber "-\=&h\x\+[%&]\=\>" +syn match basicNumber "-\=\<\d\+[%&]\=\>" + +" Floats +syn match basicFloat "-\=\<\d\+\.\=\d*\%(\%([ed][+-]\=\d*\)\|[!#]\)\=\>" +syn match basicFloat "-\=\<\.\d\+\%(\%([ed][+-]\=\d*\)\|[!#]\)\=\>" + +" Statement anchors {{{1 +syn match basicLineStart "^" nextgroup=@basicStatements,@basicLineIdentifier skipwhite +syn match basicStatementSeparator ":" nextgroup=@basicStatements skipwhite + +" Line numbers and labels {{{1 + +" QuickBASIC limits these to 65,529 and 40 chars respectively +syn match basicLineNumber "\d\+" nextgroup=@basicStatements skipwhite contained +syn match basicLineLabel "\a[[:alnum:]]*\ze\s*:" nextgroup=@basicStatements skipwhite contained + +syn cluster basicLineIdentifier contains=basicLineNumber,basicLineLabel + +" Line Continuation {{{1 +syn match basicLineContinuation "\s*\zs_\ze\s*$" + +" Type suffixes {{{1 +if exists("basic_type_suffixes") + syn match basicTypeSuffix "\a[[:alnum:].]*\zs[$%&!#]" +endif + +" File numbers {{{1 +syn match basicFilenumber "#\d\+" +syn match basicFilenumber "#\a[[:alnum:].]*[%&!#]\=" + +" Operators {{{1 +if exists("basic_operators") + syn match basicArithmeticOperator "[-+*/\\^]" + syn match basicRelationalOperator "<>\|<=\|>=\|[><=]" +endif +syn match basicLogicalOperator "\<\%(not\|and\|or\|xor\|eqv\|imp\)\>" +syn match basicArithmeticOperator "\" + +" Metacommands {{{1 +" Note: No trailing word boundaries. Text may be freely mixed however there +" must be only leading whitespace prior to the first metacommand +syn match basicMetacommand "$INCLUDE\s*:\s*'[^']\+'" contained containedin=@basicMetaComments +syn match basicMetacommand "$\%(DYNAMIC\|STATIC\)" contained containedin=@basicMetaComments + +" Comments {{{1 +syn keyword basicTodo TODO FIXME XXX NOTE contained + +syn region basicRemStatement matchgroup=basicStatement start="REM\>" end="$" contains=basicTodo,@Spell contained +syn region basicComment start="'" end="$" contains=basicTodo,@Spell + +if !exists("basic_no_comment_fold") + syn region basicMultilineComment start="^\s*'.*\n\%(\s*'\)\@=" end="^\s*'.*\n\%(\s*'\)\@!" contains=@basicComments transparent fold keepend +endif + +" Metacommands +syn region basicMetaRemStatement matchgroup=basicStatement start="REM\>\s*\$\@=" end="$" contains=basicTodo contained +syn region basicMetaComment start="'\s*\$\@=" end="$" contains=basicTodo + +syn cluster basicMetaComments contains=basicMetaComment,basicMetaRemStatement +syn cluster basicComments contains=basicComment,basicMetaComment + +"syn sync ccomment basicComment + +" Default Highlighting {{{1 +hi def link basicArithmeticOperator basicOperator +hi def link basicBoolean Boolean +hi def link basicComment Comment +hi def link basicCommentError Error +hi def link basicDataString basicString +hi def link basicFilenumber basicTypeSuffix " TODO: better group +hi def link basicFloat Float +hi def link basicFunction Function +hi def link basicKeyword Keyword +hi def link basicLineIdentifier LineNr +hi def link basicLineContinuation Special +hi def link basicLineLabel basicLineIdentifier +hi def link basicLineNumber basicLineIdentifier +hi def link basicLogicalOperator basicOperator +hi def link basicMetacommand SpecialComment +hi def link basicMetaComment Comment +hi def link basicMetaRemStatement Comment +hi def link basicNumber Number +hi def link basicOperator Operator +hi def link basicPutAction Keyword +hi def link basicRelationalOperator basicOperator +hi def link basicRemStatement Comment +hi def link basicSpaceError Error +hi def link basicStatementSeparator Special +hi def link basicStatement Statement +hi def link basicString String +hi def link basicTodo Todo +hi def link basicType Type +hi def link basicTypeSuffix Special +if exists("basic_legacy_syntax_groups") + hi def link basicTypeSpecifier Type + hi def link basicTypeSuffix basicTypeSpecifier +endif + +" Postscript {{{1 +let b:current_syntax = "basic" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: diff --git a/.config/vim/syntax/bc.vim b/.config/vim/syntax/bc.vim new file mode 100644 index 0000000..4cd9d63 --- /dev/null +++ b/.config/vim/syntax/bc.vim @@ -0,0 +1,66 @@ +" Vim syntax file +" Language: bc - An arbitrary precision calculator language +" Maintainer: Vladimir Scholtz +" Last change: 2012 Jun 01 +" (Dominique Pelle added @Spell) +" Available on: www.gjh.sk/~vlado/bc.vim + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" Keywords +syn keyword bcKeyword if else while for break continue return limits halt quit +syn keyword bcKeyword define +syn keyword bcKeyword length read sqrt print + +" Variable +syn keyword bcType auto + +" Constant +syn keyword bcConstant scale ibase obase last +syn keyword bcConstant BC_BASE_MAX BC_DIM_MAX BC_SCALE_MAX BC_STRING_MAX +syn keyword bcConstant BC_ENV_ARGS BC_LINE_LENGTH + +" Any other stuff +syn match bcIdentifier "[a-z_][a-z0-9_]*" + +" String + syn match bcString "\"[^"]*\"" contains=@Spell + +" Number +syn match bcNumber "[0-9]\+" + +" Comment +syn match bcComment "\#.*" contains=@Spell +syn region bcComment start="/\*" end="\*/" contains=@Spell + +" Parent () +syn cluster bcAll contains=bcList,bcIdentifier,bcNumber,bcKeyword,bcType,bcConstant,bcString,bcParentError +syn region bcList matchgroup=Delimiter start="(" skip="|.\{-}|" matchgroup=Delimiter end=")" contains=@bcAll +syn region bcList matchgroup=Delimiter start="\[" skip="|.\{-}|" matchgroup=Delimiter end="\]" contains=@bcAll +syn match bcParenError "]" +syn match bcParenError ")" + + + +syn case match + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link bcKeyword Statement +hi def link bcType Type +hi def link bcConstant Constant +hi def link bcNumber Number +hi def link bcComment Comment +hi def link bcString String +hi def link bcSpecialChar SpecialChar +hi def link bcParenError Error + + +let b:current_syntax = "bc" +" vim: ts=8 diff --git a/.config/vim/syntax/bdf.vim b/.config/vim/syntax/bdf.vim new file mode 100644 index 0000000..cc1a337 --- /dev/null +++ b/.config/vim/syntax/bdf.vim @@ -0,0 +1,97 @@ +" Vim syntax file +" Language: BDF font definition +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn region bdfFontDefinition transparent matchgroup=bdfKeyword + \ start='^STARTFONT\>' end='^ENDFONT\>' + \ contains=bdfComment,bdfFont,bdfSize, + \ bdfBoundingBox,bdfProperties,bdfChars,bdfChar + +syn match bdfNumber contained display + \ '\<\%(\x\+\|[+-]\=\d\+\%(\.\d\+\)*\)' + +syn keyword bdfTodo contained FIXME TODO XXX NOTE + +syn region bdfComment contained start='^COMMENT\>' end='$' + \ contains=bdfTodo,@Spell + +syn region bdfFont contained matchgroup=bdfKeyword + \ start='^FONT\>' end='$' + +syn region bdfSize contained transparent matchgroup=bdfKeyword + \ start='^SIZE\>' end='$' contains=bdfNumber + +syn region bdfBoundingBox contained transparent matchgroup=bdfKeyword + \ start='^FONTBOUNDINGBOX' end='$' + \ contains=bdfNumber + +syn region bdfProperties contained transparent matchgroup=bdfKeyword + \ start='^STARTPROPERTIES' end='^ENDPROPERTIES' + \ contains=bdfNumber,bdfString,bdfProperty, + \ bdfXProperty + +syn keyword bdfProperty contained FONT_ASCENT FONT_DESCENT DEFAULT_CHAR +syn match bdfProperty contained '^\S\+' + +syn keyword bdfXProperty contained FONT_ASCENT FONT_DESCENT DEFAULT_CHAR + \ FONTNAME_REGISTRY FOUNDRY FAMILY_NAME + \ WEIGHT_NAME SLANT SETWIDTH_NAME PIXEL_SIZE + \ POINT_SIZE RESOLUTION_X RESOLUTION_Y SPACING + \ CHARSET_REGISTRY CHARSET_ENCODING COPYRIGHT + \ ADD_STYLE_NAME WEIGHT RESOLUTION X_HEIGHT + \ QUAD_WIDTH FONT AVERAGE_WIDTH + +syn region bdfString contained start=+"+ skip=+""+ end=+"+ + +syn region bdfChars contained display transparent + \ matchgroup=bdfKeyword start='^CHARS' end='$' + \ contains=bdfNumber + +syn region bdfChar transparent matchgroup=bdfKeyword + \ start='^STARTCHAR' end='^ENDCHAR' + \ contains=bdfEncoding,bdfWidth,bdfAttributes, + \ bdfBitmap + +syn region bdfEncoding contained transparent matchgroup=bdfKeyword + \ start='^ENCODING' end='$' contains=bdfNumber + +syn region bdfWidth contained transparent matchgroup=bdfKeyword + \ start='^SWIDTH\|DWIDTH\|BBX' end='$' + \ contains=bdfNumber + +syn region bdfAttributes contained transparent matchgroup=bdfKeyword + \ start='^ATTRIBUTES' end='$' + +syn keyword bdfBitmap contained BITMAP + +if exists("bdf_minlines") + let b:bdf_minlines = bdf_minlines +else + let b:bdf_minlines = 30 +endif +exec "syn sync ccomment bdfChar minlines=" . b:bdf_minlines + + +hi def link bdfKeyword Keyword +hi def link bdfNumber Number +hi def link bdfTodo Todo +hi def link bdfComment Comment +hi def link bdfFont String +hi def link bdfProperty Identifier +hi def link bdfXProperty Identifier +hi def link bdfString String +hi def link bdfChars Keyword +hi def link bdfBitmap Keyword + +let b:current_syntax = "bdf" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/bib.vim b/.config/vim/syntax/bib.vim new file mode 100644 index 0000000..ac8dcda --- /dev/null +++ b/.config/vim/syntax/bib.vim @@ -0,0 +1,121 @@ +" Vim syntax file +" Language: BibTeX (bibliographic database format for (La)TeX) +" Maintainer: Bernd Feige +" Filenames: *.bib +" Last Change: 2017 Sep 29 + +" Thanks to those who pointed out problems with this file or supplied fixes! + +" Initialization +" ============== +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Ignore case +syn case ignore + +" Keywords +" ======== +syn keyword bibType contained article book booklet conference inbook +syn keyword bibType contained incollection inproceedings manual +syn keyword bibType contained mastersthesis misc phdthesis +syn keyword bibType contained proceedings techreport unpublished +syn keyword bibType contained string preamble + +syn keyword bibEntryKw contained address annote author booktitle chapter +syn keyword bibEntryKw contained crossref edition editor howpublished +syn keyword bibEntryKw contained institution journal key month note +syn keyword bibEntryKw contained number organization pages publisher +syn keyword bibEntryKw contained school series title type volume year + +" biblatex keywords, cf. http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf +syn keyword bibType contained mvbook bookinbook suppbook collection mvcollection suppcollection +syn keyword bibType contained online patent periodical suppperiodical mvproceedings reference +syn keyword bibType contained mvreference inreference report set thesis xdata customa customb +syn keyword bibType contained customc customd custome customf electronic www artwork audio bibnote +syn keyword bibType contained commentary image jurisdiction legislation legal letter movie music +syn keyword bibType contained performance review software standard video + +syn keyword bibEntryKw contained abstract isbn issn keywords url +syn keyword bibEntryKw contained addendum afterwordannotation annotation annotator authortype +syn keyword bibEntryKw contained bookauthor bookpagination booksubtitle booktitleaddon +syn keyword bibEntryKw contained commentator date doi editora editorb editorc editortype +syn keyword bibEntryKw contained editoratype editorbtype editorctype eid entrysubtype +syn keyword bibEntryKw contained eprint eprintclass eprinttype eventdate eventtitle +syn keyword bibEntryKw contained eventtitleaddon file foreword holder indextitle +syn keyword bibEntryKw contained introduction isan ismn isrn issue issuesubtitle +syn keyword bibEntryKw contained issuetitle iswc journalsubtitle journaltitle label +syn keyword bibEntryKw contained language library location mainsubtitle maintitle +syn keyword bibEntryKw contained maintitleaddon nameaddon origdate origlanguage +syn keyword bibEntryKw contained origlocation origpublisher origtitle pagetotal +syn keyword bibEntryKw contained pagination part pubstate reprinttitle shortauthor +syn keyword bibEntryKw contained shorteditor shorthand shorthandintro shortjournal +syn keyword bibEntryKw contained shortseries shorttitle subtitle titleaddon translator +syn keyword bibEntryKw contained urldate venue version volumes entryset execute gender +syn keyword bibEntryKw contained langid langidopts ids indexsorttitle options presort +syn keyword bibEntryKw contained related relatedoptions relatedtype relatedstring +syn keyword bibEntryKw contained sortkey sortname sortshorthand sorttitle sortyear xdata +syn keyword bibEntryKw contained xref namea nameb namec nameatype namebtype namectype +syn keyword bibEntryKw contained lista listb listc listd liste listf usera userb userc +syn keyword bibEntryKw contained userd usere userf verba verbb verbc archiveprefix pdf +syn keyword bibEntryKw contained primaryclass + +" Non-standard: +" AMS mref http://www.ams.org/mref +syn keyword bibNSEntryKw contained mrclass mrnumber mrreviewer fjournal coden + +" Clusters +" ======== +syn cluster bibVarContents contains=bibUnescapedSpecial,bibBrace,bibParen,bibMath +" This cluster is empty but things can be added externally: +"syn cluster bibCommentContents + +" Matches +" ======= +syn match bibUnescapedSpecial contained /[^\\][%&]/hs=s+1 +syn match bibKey contained /\s*[^ \t}="]\+,/hs=s,he=e-1 nextgroup=bibField +syn match bibVariable contained /[^{}," \t=]/ +syn region bibComment start=/./ end=/^\s*@/me=e-1 contains=@bibCommentContents nextgroup=bibEntry +syn region bibMath contained start=/\(\\\)\@ +" URL: http://www.mehnle.net/source/odds+ends/vim/syntax/ +" Last Change: Thu 2011-07-16 20:42:00 UTC +" +" Based on an earlier version by Вячеслав Горбанев (Slava Gorbanev), with +" heavy modifications. +" +" $Id: bindzone.vim 12 2011-07-16 21:09:57Z julian $ + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case match + +" Directives +syn region zoneRRecord start=/^/ end=/$/ contains=zoneOwnerName,zoneSpecial,zoneTTL,zoneClass,zoneRRType,zoneComment,zoneUnknown + +syn match zoneDirective /^\$ORIGIN\s\+/ nextgroup=zoneOrigin,zoneUnknown +syn match zoneDirective /^\$TTL\s\+/ nextgroup=zoneTTL,zoneUnknown +syn match zoneDirective /^\$INCLUDE\s\+/ nextgroup=zoneText,zoneUnknown +syn match zoneDirective /^\$GENERATE\s/ + +syn match zoneUnknown contained /\S\+/ + +syn match zoneOwnerName contained /^[^[:space:]!"#$%&'()*+,\/:;<=>?@[\]\^`{|}~]\+\(\s\|;\)\@=/ nextgroup=zoneTTL,zoneClass,zoneRRType skipwhite +syn match zoneOrigin contained /[^[:space:]!"#$%&'()*+,\/:;<=>?@[\]\^`{|}~]\+\(\s\|;\|$\)\@=/ +syn match zoneDomain contained /[^[:space:]!"#$%&'()*+,\/:;<=>?@[\]\^`{|}~]\+\(\s\|;\|$\)\@=/ + +syn match zoneSpecial contained /^[@*.]\s/ +syn match zoneTTL contained /\s\@<=\d[0-9WwDdHhMmSs]*\(\s\|$\)\@=/ nextgroup=zoneClass,zoneRRType skipwhite +syn keyword zoneClass contained IN CHAOS CH HS HESIOD nextgroup=zoneRRType,zoneTTL skipwhite +syn keyword zoneRRType contained A AAAA APL CAA CERT CNAME DNAME DNSKEY DS HINFO LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM OPENPGPKEY PTR RP RRSIG SMIMEA SOA SPF SRV SSHFP TLSA TXT nextgroup=zoneRData skipwhite +syn match zoneRData contained /[^;]*/ contains=zoneDomain,zoneIPAddr,zoneIP6Addr,zoneText,zoneNumber,zoneParen,zoneUnknown + +syn match zoneIPAddr contained /\<[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{,3}\>/ + +" Plain IPv6 address IPv6-embedded-IPv4 address +" 1111:2:3:4:5:6:7:8 1111:2:3:4:5:6:127.0.0.1 +syn match zoneIP6Addr contained /\<\(\x\{1,4}:\)\{6}\(\x\{1,4}:\x\{1,4}\|\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\>/ +" ::[...:]8 ::[...:]127.0.0.1 +syn match zoneIP6Addr contained /\s\@<=::\(\(\x\{1,4}:\)\{,6}\x\{1,4}\|\(\x\{1,4}:\)\{,5}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\>/ +" 1111::[...:]8 1111::[...:]127.0.0.1 +syn match zoneIP6Addr contained /\<\(\x\{1,4}:\)\{1}:\(\(\x\{1,4}:\)\{,5}\x\{1,4}\|\(\x\{1,4}:\)\{,4}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\>/ +" 1111:2::[...:]8 1111:2::[...:]127.0.0.1 +syn match zoneIP6Addr contained /\<\(\x\{1,4}:\)\{2}:\(\(\x\{1,4}:\)\{,4}\x\{1,4}\|\(\x\{1,4}:\)\{,3}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\>/ +" 1111:2:3::[...:]8 1111:2:3::[...:]127.0.0.1 +syn match zoneIP6Addr contained /\<\(\x\{1,4}:\)\{3}:\(\(\x\{1,4}:\)\{,3}\x\{1,4}\|\(\x\{1,4}:\)\{,2}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\>/ +" 1111:2:3:4::[...:]8 1111:2:3:4::[...:]127.0.0.1 +syn match zoneIP6Addr contained /\<\(\x\{1,4}:\)\{4}:\(\(\x\{1,4}:\)\{,2}\x\{1,4}\|\(\x\{1,4}:\)\{,1}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\>/ +" 1111:2:3:4:5::[...:]8 1111:2:3:4:5::127.0.0.1 +syn match zoneIP6Addr contained /\<\(\x\{1,4}:\)\{5}:\(\(\x\{1,4}:\)\{,1}\x\{1,4}\|\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\>/ +" 1111:2:3:4:5:6::8 - +syn match zoneIP6Addr contained /\<\(\x\{1,4}:\)\{6}:\x\{1,4}\>/ +" 1111[:...]:: - +syn match zoneIP6Addr contained /\<\(\x\{1,4}:\)\{1,7}:\(\s\|;\|$\)\@=/ + +syn match zoneText contained /"\([^"\\]\|\\.\)*"\(\s\|;\|$\)\@=/ +syn match zoneNumber contained /\<[0-9]\+\(\s\|;\|$\)\@=/ +syn match zoneSerial contained /\<[0-9]\{1,10}\(\s\|;\|$\)\@=/ + +syn match zoneErrParen /)/ +syn region zoneParen contained start="(" end=")" contains=zoneSerial,zoneTTL,zoneNumber,zoneComment +syn match zoneComment /;.*/ + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link zoneDirective Macro + +hi def link zoneUnknown Error + +hi def link zoneOrigin Statement +hi def link zoneOwnerName Statement +hi def link zoneDomain Identifier + +hi def link zoneSpecial Special +hi def link zoneTTL Constant +hi def link zoneClass Include +hi def link zoneRRType Type + +hi def link zoneIPAddr Number +hi def link zoneIP6Addr Number +hi def link zoneText String +hi def link zoneNumber Number +hi def link zoneSerial Special + +hi def link zoneErrParen Error +hi def link zoneComment Comment + + +let b:current_syntax = "bindzone" + +" vim:sts=2 sw=2 diff --git a/.config/vim/syntax/bitbake.vim b/.config/vim/syntax/bitbake.vim new file mode 100644 index 0000000..5e9bc58 --- /dev/null +++ b/.config/vim/syntax/bitbake.vim @@ -0,0 +1,128 @@ +" Vim syntax file +" Language: BitBake bb/bbclasses/inc +" Author: Chris Larson +" Ricardo Salveti +" Copyright: Copyright (C) 2004 Chris Larson +" Copyright (C) 2008 Ricardo Salveti +" Last Change: 2022 Jul 25 +" 2025 Oct 13 by Vim project: update multiline function syntax #18565 +" +" This file is licensed under the MIT license, see COPYING.MIT in +" this source distribution for the terms. +" +" Syntax highlighting for bb, bbclasses and inc files. +" +" It's an entirely new type, just has specific syntax in shell and python code + +if v:version < 600 + finish +endif +if exists("b:current_syntax") + finish +endif + +syn include @python syntax/python.vim +unlet! b:current_syntax + +" BitBake syntax + +" Matching case +syn case match + +" Indicates the error when nothing is matched +syn match bbUnmatched "." + +" Comments +syn cluster bbCommentGroup contains=bbTodo,@Spell +syn keyword bbTodo COMBAK FIXME TODO XXX contained +syn match bbComment "#.*$" contains=@bbCommentGroup + +" String helpers +syn match bbQuote +['"]+ contained +syn match bbDelimiter "[(){}=]" contained +syn match bbArrayBrackets "[\[\]]" contained + +" BitBake strings +syn match bbContinue "\\$" +syn region bbString matchgroup=bbQuote start=+"+ skip=+\\$+ end=+"+ contained contains=bbTodo,bbContinue,bbVarDeref,bbVarPyValue,@Spell +syn region bbString matchgroup=bbQuote start=+'+ skip=+\\$+ end=+'+ contained contains=bbTodo,bbContinue,bbVarDeref,bbVarPyValue,@Spell + +" Vars definition +syn match bbExport "^export" nextgroup=bbIdentifier skipwhite +syn keyword bbExportFlag export contained nextgroup=bbIdentifier skipwhite +syn match bbIdentifier "[a-zA-Z0-9\-_\.\/\+]\+" display contained +syn match bbVarDeref "${[a-zA-Z0-9\-_:\.\/\+]\+}" contained +syn match bbVarEq "\(:=\|+=\|=+\|\.=\|=\.\|?=\|??=\|=\)" contained nextgroup=bbVarValue +syn match bbVarDef "^\(export\s*\)\?\([a-zA-Z0-9\-_\.\/\+][${}a-zA-Z0-9\-_:\.\/\+]*\)\s*\(:=\|+=\|=+\|\.=\|=\.\|?=\|??=\|=\)\@=" contains=bbExportFlag,bbIdentifier,bbOverrideOperator,bbVarDeref nextgroup=bbVarEq +syn match bbVarValue ".*$" contained contains=bbString,bbVarDeref,bbVarPyValue +syn region bbVarPyValue start=+${@+ skip=+\\$+ end=+}+ contained contains=@python + +" Vars metadata flags +syn match bbVarFlagDef "^\([a-zA-Z0-9\-_\.]\+\)\(\[[a-zA-Z0-9\-_\.+]\+\]\)\@=" contains=bbIdentifier nextgroup=bbVarFlagFlag +syn region bbVarFlagFlag matchgroup=bbArrayBrackets start="\[" end="\]\s*\(:=\|=\|.=\|=.|+=\|=+\|?=\)\@=" contained contains=bbIdentifier nextgroup=bbVarEq + +" Includes and requires +syn keyword bbInclude inherit include require contained +syn match bbIncludeRest ".*$" contained contains=bbString,bbVarDeref +syn match bbIncludeLine "^\(inherit\|include\|require\)\s\+" contains=bbInclude nextgroup=bbIncludeRest + +" Add taks and similar +syn keyword bbStatement addtask deltask addhandler after before EXPORT_FUNCTIONS contained +syn match bbStatementRest ".*$" skipwhite contained contains=bbStatement +syn match bbStatementLine "^\(addtask\|deltask\|addhandler\|after\|before\|EXPORT_FUNCTIONS\)\s\+" contains=bbStatement nextgroup=bbStatementRest + +" OE Important Functions +syn keyword bbOEFunctions do_fetch do_unpack do_patch do_configure do_compile do_stage do_install do_package contained + +" Generic Functions +syn match bbFunction "\h[0-9A-Za-z_\-\.]*" display contained contains=bbOEFunctions + +syn keyword bbOverrideOperator append prepend remove contained + +" BitBake shell metadata +syn include @shell syntax/sh.vim +unlet! b:current_syntax + +syn keyword bbShFakeRootFlag fakeroot contained +syn match bbShFuncDef "^\(fakeroot\s*\)\?\([\.0-9A-Za-z_:${}\-\.]\+\)\(python\)\@ +" Last change: 2011 Dec 28 by Thilo Six + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn case ignore + +" Blank instructions +syn match blankInstruction "{[:;,\.+\-*$#@/\\`'"!\|><{}\[\]()?xspo\^&\~=_%]}" + +" Common strings +syn match blankString "\~[^}]" + +" Numbers +syn match blankNumber "\[[0-9]\+\]" + +syn case match + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link blankInstruction Statement +hi def link blankNumber Number +hi def link blankString String + + +let b:current_syntax = "blank" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8 diff --git a/.config/vim/syntax/bsdl.vim b/.config/vim/syntax/bsdl.vim new file mode 100644 index 0000000..75c6955 --- /dev/null +++ b/.config/vim/syntax/bsdl.vim @@ -0,0 +1,17 @@ +" Vim syntax file +" Language: Boundary Scan Description Language (BSDL) +" Maintainer: Daniel Kho +" Last Changed: 2020 Mar 19 by Daniel Kho + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Read in VHDL syntax files +runtime! syntax/vhdl.vim +unlet b:current_syntax + +let b:current_syntax = "bsdl" + +" vim: ts=8 diff --git a/.config/vim/syntax/bst.vim b/.config/vim/syntax/bst.vim new file mode 100644 index 0000000..5ebef16 --- /dev/null +++ b/.config/vim/syntax/bst.vim @@ -0,0 +1,70 @@ +" Vim syntax file +" Language: BibTeX Bibliography Style +" Maintainer: Tim Pope +" Filenames: *.bst +" $Id: bst.vim,v 1.2 2007/05/05 18:24:42 vimboss Exp $ + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +setlocal iskeyword=48-57,#,$,',.,A-Z,a-z + +syn case ignore + +syn match bstString +"[^"]*\%("\|$\)+ contains=bstField,bstType,bstError +" Highlight the last character of an unclosed string, but only when the cursor +" is not beyond it (i.e., it is still being edited). Imperfect. +syn match bstError '[^"]\%#\@!$' contained + +syn match bstNumber "#-\=\d\+\>" +syn keyword bstNumber entry.max$ global.max$ +syn match bstComment "%.*" + +syn keyword bstCommand ENTRY FUNCTION INTEGERS MACRO STRINGS +syn keyword bstCommand READ EXECUTE ITERATE REVERSE SORT +syn match bstBuiltIn "\s[-<>=+*]\|\s:=" +syn keyword bstBuiltIn add.period$ +syn keyword bstBuiltIn call.type$ change.case$ chr.to.int$ cite$ +syn keyword bstBuiltIn duplicate$ empty$ format.name$ +syn keyword bstBuiltIn if$ int.to.chr$ int.to.str$ +syn keyword bstBuiltIn missing$ +syn keyword bstBuiltIn newline$ num.names$ +syn keyword bstBuiltIn pop$ preamble$ purify$ quote$ +syn keyword bstBuiltIn skip$ stack$ substring$ swap$ +syn keyword bstBuiltIn text.length$ text.prefix$ top$ type$ +syn keyword bstBuiltIn warning$ while$ width$ write$ +syn match bstIdentifier "'\k*" +syn keyword bstType article book booklet conference +syn keyword bstType inbook incollection inproceedings +syn keyword bstType manual mastersthesis misc +syn keyword bstType phdthesis proceedings +syn keyword bstType techreport unpublished +syn keyword bstField abbr address annote author +syn keyword bstField booktitle chapter crossref comment +syn keyword bstField edition editor +syn keyword bstField howpublished institution journal key month +syn keyword bstField note number +syn keyword bstField organization +syn keyword bstField pages publisher +syn keyword bstField school series +syn keyword bstField title type +syn keyword bstField volume year + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link bstComment Comment +hi def link bstString String +hi def link bstCommand PreProc +hi def link bstBuiltIn Statement +hi def link bstField Special +hi def link bstNumber Number +hi def link bstType Type +hi def link bstIdentifier Identifier +hi def link bstError Error + +let b:current_syntax = "bst" + +" vim:set ft=vim sts=4 sw=4: diff --git a/.config/vim/syntax/btm.vim b/.config/vim/syntax/btm.vim new file mode 100644 index 0000000..4f9253f --- /dev/null +++ b/.config/vim/syntax/btm.vim @@ -0,0 +1,216 @@ +" Vim syntax file +" Language: 4Dos batch file +" Maintainer: John Leo Spetz +" Last Change: 2001 May 09 + +"//Issues to resolve: +"//- Boolean operators surrounded by period are recognized but the +"// periods are not highlighted. The only way to do that would +"// be separate synmatches for each possibility otherwise a more +"// general \.\i\+\. will highlight anything delimited by dots. +"//- After unary operators like "defined" can assume token type. +"// Should there be more of these? + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +syn keyword btmStatement call off +syn keyword btmConditional if iff endiff then else elseiff not errorlevel +syn keyword btmConditional gt lt eq ne ge le +syn match btmConditional transparent "\.\i\+\." contains=btmDotBoolOp +syn keyword btmDotBoolOp contained and or xor +syn match btmConditional "==" +syn match btmConditional "!=" +syn keyword btmConditional defined errorlevel exist isalias +syn keyword btmConditional isdir direxist isinternal islabel +syn keyword btmRepeat for in do enddo + +syn keyword btmTodo contained TODO + +" String +syn cluster btmVars contains=btmVariable,btmArgument,btmBIFMatch +syn region btmString start=+"+ end=+"+ contains=@btmVars +syn match btmNumber "\<\d\+\>" + +"syn match btmIdentifier "\<\h\w*\>" + +" If you don't like tabs +"syn match btmShowTab "\t" +"syn match btmShowTabc "\t" +"syn match btmComment "^\ *rem.*$" contains=btmTodo,btmShowTabc + +" Some people use this as a comment line +" In fact this is a Label +"syn match btmComment "^\ *:\ \+.*$" contains=btmTodo + +syn match btmComment "^\ *rem.*$" contains=btmTodo +syn match btmComment "^\ *::.*$" contains=btmTodo + +syn match btmLabelMark "^\ *:[0-9a-zA-Z_\-]\+\>" +syn match btmLabelMark "goto [0-9a-zA-Z_\-]\+\>"lc=5 +syn match btmLabelMark "gosub [0-9a-zA-Z_\-]\+\>"lc=6 + +" syn match btmCmdDivider ">[>&][>&]\=" +syn match btmCmdDivider ">[>&]*" +syn match btmCmdDivider ">>&>" +syn match btmCmdDivider "|&\=" +syn match btmCmdDivider "%+" +syn match btmCmdDivider "\^" + +syn region btmEcho start="echo" skip="echo" matchgroup=btmCmdDivider end="%+" end="$" end="|&\=" end="\^" end=">[>&]*" contains=@btmEchos oneline +syn cluster btmEchos contains=@btmVars,btmEchoCommand,btmEchoParam +syn keyword btmEchoCommand contained echo echoerr echos echoserr +syn keyword btmEchoParam contained on off + +" this is also a valid Label. I don't use it. +"syn match btmLabelMark "^\ *:\ \+[0-9a-zA-Z_\-]\+\>" + +" //Environment variable can be expanded using notation %var in 4DOS +syn match btmVariable "%[0-9a-z_\-]\+" contains=@btmSpecialVars +" //Environment variable can be expanded using notation %var% +syn match btmVariable "%[0-9a-z_\-]*%" contains=@btmSpecialVars +" //The following are special variable in 4DOS +syn match btmVariable "%[=#]" contains=@btmSpecialVars +syn match btmVariable "%??\=" contains=@btmSpecialVars +" //Environment variable can be expanded using notation %[var] in 4DOS +syn match btmVariable "%\[[0-9a-z_\-]*\]" +" //After some keywords next word should be an environment variable +syn match btmVariable "defined\s\i\+"lc=8 +syn match btmVariable "set\s\i\+"lc=4 +" //Parameters to batchfiles take the format % +syn match btmArgument "%\d\>" +" //4DOS allows format %& meaning batchfile parameters digit and up +syn match btmArgument "%\d\>&" +" //Variable used by FOR loops sometimes use %% in batchfiles +syn match btmArgument "%%\a\>" + +" //Show 4DOS built-in functions specially +syn match btmBIFMatch "%@\w\+\["he=e-1 contains=btmBuiltInFunc +syn keyword btmBuiltInFunc contained alias ascii attrib cdrom +syn keyword btmBuiltInFunc contained char clip comma convert +syn keyword btmBuiltInFunc contained date day dec descript +syn keyword btmBuiltInFunc contained device diskfree disktotal +syn keyword btmBuiltInFunc contained diskused dosmem dow dowi +syn keyword btmBuiltInFunc contained doy ems eval exec execstr +syn keyword btmBuiltInFunc contained expand ext extended +syn keyword btmBuiltInFunc contained fileage fileclose filedate +syn keyword btmBuiltInFunc contained filename fileopen fileread +syn keyword btmBuiltInFunc contained files fileseek fileseekl +syn keyword btmBuiltInFunc contained filesize filetime filewrite +syn keyword btmBuiltInFunc contained filewriteb findclose +syn keyword btmBuiltInFunc contained findfirst findnext format +syn keyword btmBuiltInFunc contained full if inc index insert +syn keyword btmBuiltInFunc contained instr int label left len +syn keyword btmBuiltInFunc contained lfn line lines lower lpt +syn keyword btmBuiltInFunc contained makeage makedate maketime +syn keyword btmBuiltInFunc contained master month name numeric +syn keyword btmBuiltInFunc contained path random readscr ready +syn keyword btmBuiltInFunc contained remote removable repeat +syn keyword btmBuiltInFunc contained replace right search +syn keyword btmBuiltInFunc contained select sfn strip substr +syn keyword btmBuiltInFunc contained time timer trim truename +syn keyword btmBuiltInFunc contained unique upper wild word +syn keyword btmBuiltInFunc contained words xms year + +syn cluster btmSpecialVars contains=btmBuiltInVar,btmSpecialVar + +" //Show specialized variables specially +" syn match btmSpecialVar contained "+" +syn match btmSpecialVar contained "=" +syn match btmSpecialVar contained "#" +syn match btmSpecialVar contained "??\=" +syn keyword btmSpecialVar contained cmdline colordir comspec +syn keyword btmSpecialVar contained copycmd dircmd temp temp4dos +syn keyword btmSpecialVar contained filecompletion path prompt + +" //Show 4DOS built-in variables specially specially +syn keyword btmBuiltInVar contained _4ver _alias _ansi +syn keyword btmBuiltInVar contained _apbatt _aplife _apmac _batch +syn keyword btmBuiltInVar contained _batchline _batchname _bg +syn keyword btmBuiltInVar contained _boot _ci _cmdproc _co +syn keyword btmBuiltInVar contained _codepage _column _columns +syn keyword btmBuiltInVar contained _country _cpu _cwd _cwds _cwp +syn keyword btmBuiltInVar contained _cwps _date _day _disk _dname +syn keyword btmBuiltInVar contained _dos _dosver _dow _dowi _doy +syn keyword btmBuiltInVar contained _dpmi _dv _env _fg _hlogfile +syn keyword btmBuiltInVar contained _hour _kbhit _kstack _lastdisk +syn keyword btmBuiltInVar contained _logfile _minute _monitor +syn keyword btmBuiltInVar contained _month _mouse _ndp _row _rows +syn keyword btmBuiltInVar contained _second _shell _swapping +syn keyword btmBuiltInVar contained _syserr _time _transient +syn keyword btmBuiltInVar contained _video _win _wintitle _year + +" //Commands in 4DOS and/or DOS +syn match btmCommand "\s?" +syn match btmCommand "^?" +syn keyword btmCommand alias append assign attrib +syn keyword btmCommand backup beep break cancel case +syn keyword btmCommand cd cdd cdpath chcp chdir +syn keyword btmCommand chkdsk cls color comp copy +syn keyword btmCommand ctty date debug default defrag +syn keyword btmCommand del delay describe dir +syn keyword btmCommand dirhistory dirs diskcomp +syn keyword btmCommand diskcopy doskey dosshell +syn keyword btmCommand drawbox drawhline drawvline +"syn keyword btmCommand echo echoerr echos echoserr +syn keyword btmCommand edit edlin emm386 endlocal +syn keyword btmCommand endswitch erase eset except +syn keyword btmCommand exe2bin exit expand fastopen +syn keyword btmCommand fc fdisk ffind find format +syn keyword btmCommand free global gosub goto +syn keyword btmCommand graftabl graphics help history +syn keyword btmCommand inkey input join keyb keybd +syn keyword btmCommand keystack label lh list loadbtm +syn keyword btmCommand loadhigh lock log md mem +syn keyword btmCommand memory mirror mkdir mode more +syn keyword btmCommand move nlsfunc on option path +syn keyword btmCommand pause popd print prompt pushd +syn keyword btmCommand quit rd reboot recover ren +syn keyword btmCommand rename replace restore return +syn keyword btmCommand rmdir scandisk screen scrput +syn keyword btmCommand select set setdos setlocal +syn keyword btmCommand setver share shift sort subst +syn keyword btmCommand swapping switch sys tee text +syn keyword btmCommand time timer touch tree truename +syn keyword btmCommand type unalias undelete unformat +syn keyword btmCommand unlock unset ver verify vol +syn keyword btmCommand vscrput y + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link btmLabel Special +hi def link btmLabelMark Special +hi def link btmCmdDivider Special +hi def link btmConditional btmStatement +hi def link btmDotBoolOp btmStatement +hi def link btmRepeat btmStatement +hi def link btmEchoCommand btmStatement +hi def link btmEchoParam btmStatement +hi def link btmStatement Statement +hi def link btmTodo Todo +hi def link btmString String +hi def link btmNumber Number +hi def link btmComment Comment +hi def link btmArgument Identifier +hi def link btmVariable Identifier +hi def link btmEcho String +hi def link btmBIFMatch btmStatement +hi def link btmBuiltInFunc btmStatement +hi def link btmBuiltInVar btmStatement +hi def link btmSpecialVar btmStatement +hi def link btmCommand btmStatement + +"optional highlighting +"hi def link btmShowTab Error +"hi def link btmShowTabc Error +"hi def link btmIdentifier Identifier + + +let b:current_syntax = "btm" + +" vim: ts=8 diff --git a/.config/vim/syntax/bzl.vim b/.config/vim/syntax/bzl.vim new file mode 100644 index 0000000..b0ee945 --- /dev/null +++ b/.config/vim/syntax/bzl.vim @@ -0,0 +1,16 @@ +" Vim syntax file +" Language: Bazel (http://bazel.io) +" Maintainer: David Barnett (https://github.com/google/vim-ft-bzl) +" Last Change: 2015 Aug 11 + +if exists('b:current_syntax') + finish +endif + + +runtime! syntax/python.vim + +let b:current_syntax = 'bzl' + +syn region bzlRule start='^\w\+($' end='^)\n*' transparent fold +syn region bzlList start='\[' end='\]' transparent fold diff --git a/.config/vim/syntax/bzr.vim b/.config/vim/syntax/bzr.vim new file mode 100644 index 0000000..43178b8 --- /dev/null +++ b/.config/vim/syntax/bzr.vim @@ -0,0 +1,50 @@ +" Vim syntax file +" Language: Bazaar (bzr) commit file +" Maintainer: Dmitry Vasiliev +" URL: https://github.com/hdima/vim-scripts/blob/master/syntax/bzr.vim +" Last Change: 2012-02-11 +" Filenames: bzr_log.* +" Version: 1.2.2 +" +" Thanks: +" +" Gioele Barabucci +" for idea of diff highlighting + +" quit when a syntax file was already loaded. +if exists("b:current_syntax") + finish +endif + +if exists("bzr_highlight_diff") + syn include @Diff syntax/diff.vim +endif + +syn match bzrRemoved "^removed:$" contained +syn match bzrAdded "^added:$" contained +syn match bzrRenamed "^renamed:$" contained +syn match bzrModified "^modified:$" contained +syn match bzrUnchanged "^unchanged:$" contained +syn match bzrUnknown "^unknown:$" contained +syn cluster Statuses contains=bzrRemoved,bzrAdded,bzrRenamed,bzrModified,bzrUnchanged,bzrUnknown +if exists("bzr_highlight_diff") + syn cluster Statuses add=@Diff +endif +syn region bzrRegion start="^-\{14} This line and the following will be ignored -\{14}$" end="\%$" contains=@NoSpell,@Statuses + +" Synchronization. +syn sync clear +syn sync match bzrSync grouphere bzrRegion "^-\{14} This line and the following will be ignored -\{14}$"me=s-1 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet. + +hi def link bzrRemoved Constant +hi def link bzrAdded Identifier +hi def link bzrModified Special +hi def link bzrRenamed Special +hi def link bzrUnchanged Special +hi def link bzrUnknown Special + + +let b:current_syntax = "bzr" diff --git a/.config/vim/syntax/c.vim b/.config/vim/syntax/c.vim new file mode 100644 index 0000000..68b6778 --- /dev/null +++ b/.config/vim/syntax/c.vim @@ -0,0 +1,637 @@ +" Vim syntax file +" Language: C +" Maintainer: The Vim Project +" Last Change: 2025 Jan 18 +" Former Maintainer: Bram Moolenaar + +" Quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +let s:ft = matchstr(&ft, '^\%([^.]\)\+') + +" check if this was included from cpp.vim +let s:in_cpp_family = exists("b:filetype_in_cpp_family") + +" Optional embedded Autodoc parsing +" To enable it add: let g:c_autodoc = 1 +" to your .vimrc +if exists("c_autodoc") + syn include @cAutodoc :p:h/autodoc.vim + unlet b:current_syntax +endif + +" A bunch of useful C keywords +syn keyword cStatement goto break return continue asm +syn keyword cLabel case default +syn keyword cConditional if else switch +syn keyword cRepeat while for do + +syn keyword cTodo contained TODO FIXME XXX + +" It's easy to accidentally add a space after a backslash that was intended +" for line continuation. Some compilers allow it, which makes it +" unpredictable and should be avoided. +syn match cBadContinuation contained "\\\s\+$" + +" cCommentGroup allows adding matches for special things in comments +syn cluster cCommentGroup contains=cTodo,cBadContinuation + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match cSpecial display contained "\\\%(x\x\+\|\o\{1,3}\|.\|$\)" +if !exists("c_no_utf") + syn match cSpecial display contained "\\\%(u\x\{4}\|U\x\{8}\)" +endif + +if !exists("c_no_cformat") + " Highlight % items in strings. + if !exists("c_no_c99") " ISO C99 + syn match cFormat display "%\%(\d\+\$\)\=[-+' #0*]*\%(\d*\|\*\|\*\d\+\$\)\%(\.\%(\d*\|\*\|\*\d\+\$\)\)\=\%([hlLjzt]\|ll\|hh\)\=\%([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained + else + syn match cFormat display "%\%(\d\+\$\)\=[-+' #0*]*\%(\d*\|\*\|\*\d\+\$\)\%(\.\%(\d*\|\*\|\*\d\+\$\)\)\=\%([hlL]\|ll\)\=\%([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained + endif + syn match cFormat display "%%" contained +endif + +" cCppString: same as cString, but ends at end of line +if s:in_cpp_family && !exists("cpp_no_cpp11") && !exists("c_no_cformat") + " ISO C++11 + syn region cString start=+\%(L\|u\|u8\|U\|R\|LR\|u8R\|uR\|UR\)\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend + syn region cCppString start=+\%(L\|u\|u8\|U\|R\|LR\|u8R\|uR\|UR\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell +elseif s:ft ==# "c" && !exists("c_no_c11") && !exists("c_no_cformat") + " ISO C99 + syn region cString start=+\%(L\|U\|u8\)\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend + syn region cCppString start=+\%(L\|U\|u8\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell +else + " older C or C++ + syn match cFormat display "%%" contained + syn region cString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend + syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell +endif + +syn region cCppSkip contained start="^\s*\%(%:\|#\)\s*\%(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\%(%:\|#\)\s*endif\>" contains=cSpaceError,cCppSkip + +syn cluster cStringGroup contains=cCppString,cCppSkip + +syn match cCharacter "L\='[^\\]'" +syn match cCharacter "L'[^']*'" contains=cSpecial +if exists("c_gnu") + syn match cSpecialError "L\='\\[^'\"?\\abefnrtv]'" + syn match cSpecialCharacter "L\='\\['\"?\\abefnrtv]'" +else + syn match cSpecialError "L\='\\[^'\"?\\abfnrtv]'" + syn match cSpecialCharacter "L\='\\['\"?\\abfnrtv]'" +endif +syn match cSpecialCharacter display "L\='\\\o\{1,3}'" +syn match cSpecialCharacter display "'\\x\x\{1,2}'" +syn match cSpecialCharacter display "L'\\x\x\+'" + +if (s:ft ==# "c" && !exists("c_no_c11")) || (s:in_cpp_family && !exists("cpp_no_cpp11")) + " ISO C11 or ISO C++ 11 + if exists("c_no_cformat") + syn region cString start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell extend + else + syn region cString start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend + endif + syn match cCharacter "[Uu]'[^\\]'" + syn match cCharacter "[Uu]'[^']*'" contains=cSpecial + if exists("c_gnu") + syn match cSpecialError "[Uu]'\\[^'\"?\\abefnrtv]'" + syn match cSpecialCharacter "[Uu]'\\['\"?\\abefnrtv]'" + else + syn match cSpecialError "[Uu]'\\[^'\"?\\abfnrtv]'" + syn match cSpecialCharacter "[Uu]'\\['\"?\\abfnrtv]'" + endif + syn match cSpecialCharacter display "[Uu]'\\\o\{1,3}'" + syn match cSpecialCharacter display "[Uu]'\\x\x\+'" +endif + +if (s:ft ==# "c" && !exists("c_no_c23")) || (s:in_cpp_family && !exists("cpp_no_cpp17")) + syn match cCharacter "u8'[^\\]'" + syn match cCharacter "u8'[^']*'" contains=cSpecial + if exists("c_gnu") + syn match cSpecialError "u8'\\[^'\"?\\abefnrtv]'" + syn match cSpecialCharacter "u8'\\['\"?\\abefnrtv]'" + else + syn match cSpecialError "u8'\\[^'\"?\\abfnrtv]'" + syn match cSpecialCharacter "u8'\\['\"?\\abfnrtv]'" + endif + syn match cSpecialCharacter display "u8'\\\o\{1,3}'" + syn match cSpecialCharacter display "u8'\\x\x\+'" +endif + +"when wanted, highlight trailing white space +if exists("c_space_errors") + if !exists("c_no_trail_space_error") + syn match cSpaceError display excludenl "\s\+$" + endif + if !exists("c_no_tab_space_error") + syn match cSpaceError display " \+\t"me=e-1 + endif +endif + +" This should be before cErrInParen to avoid problems with #define ({ xxx }) +if exists("c_curly_error") + syn match cCurlyError "}" + syn region cBlock start="{" end="}" contains=ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,@cStringGroup,@Spell fold +else + syn region cBlock start="{" end="}" transparent fold +endif + +" Catch errors caused by wrong parenthesis and brackets. +" Also accept <% for {, %> for }, <: for [ and :> for ] (C99) +" But avoid matching <::. +syn cluster cParenGroup contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserLabel,cBitField,cOctalZero,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom +if exists("c_no_curly_error") + if s:in_cpp_family && !exists("cpp_no_cpp11") + syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,@cStringGroup,@Spell + " cCppParen: same as cParen but ends at end-of-line; used in cDefine + syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell + syn match cParenError display ")" + syn match cErrInParen display contained "^^<%\|^%>" + else + syn region cParen transparent start='(' end=')' contains=ALLBUT,cBlock,@cParenGroup,cCppParen,@cStringGroup,@Spell + " cCppParen: same as cParen but ends at end-of-line; used in cDefine + syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell + syn match cParenError display ")" + syn match cErrInParen display contained "^[{}]\|^<%\|^%>" + endif +elseif exists("c_no_bracket_error") + if s:in_cpp_family && !exists("cpp_no_cpp11") + syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,@cStringGroup,@Spell + " cCppParen: same as cParen but ends at end-of-line; used in cDefine + syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell + syn match cParenError display ")" + syn match cErrInParen display contained "<%\|%>" + else + syn region cParen transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,@cStringGroup,@Spell + " cCppParen: same as cParen but ends at end-of-line; used in cDefine + syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell + syn match cParenError display ")" + syn match cErrInParen display contained "[{}]\|<%\|%>" + endif +else + if s:in_cpp_family && !exists("cpp_no_cpp11") + syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,@cStringGroup,@Spell + " cCppParen: same as cParen but ends at end-of-line; used in cDefine + syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell + syn match cParenError display "[\])]" + syn match cErrInParen display contained "<%\|%>" + syn region cBracket transparent start='\[\|<::\@!' end=']\|:>' contains=ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,@cStringGroup,@Spell + else + syn region cParen transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,@cStringGroup,@Spell + " cCppParen: same as cParen but ends at end-of-line; used in cDefine + syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell + syn match cParenError display "[\])]" + syn match cErrInParen display contained "[\]{}]\|<%\|%>" + syn region cBracket transparent start='\[\|<::\@!' end=']\|:>' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cErrInParen,cCppParen,cCppBracket,@cStringGroup,@Spell + endif + " cCppBracket: same as cParen but ends at end-of-line; used in cDefine + syn region cCppBracket transparent start='\[\|<::\@!' skip='\\$' excludenl end=']\|:>' end='$' contained contains=ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString,@Spell + syn match cErrInBracket display contained "[);{}]\|<%\|%>" +endif + +if s:ft ==# 'c' || exists("cpp_no_cpp11") + syn region cBadBlock keepend start="{" end="}" contained containedin=cParen,cBracket,cBadBlock transparent fold +endif + +"integer number, or floating point number without a dot and with "f". +syn case ignore +syn match cNumbers display transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctalError,cOctal +" Same, but without octal error (for comments) +syn match cNumbersCom display contained transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctal + +" cpp.vim handles these +if !exists("c_no_c23") && !s:in_cpp_family + syn match cNumber display contained "\d\%('\=\d\+\)*\%(u\=l\{0,2}\|ll\=u\|u\=wb\|wbu\=\)\>" + "hex number + syn match cNumber display contained "0x\x\%('\=\x\+\)*\%(u\=l\{0,2}\|ll\=u\|u\=wb\|wbu\=\)\>" + " Flag the first zero of an octal number as something special + syn match cOctal display contained "0\o\%('\=\o\+\)*\%(u\=l\{0,2}\|ll\=u\|u\=wb\|wbu\=\)\>" contains=cOctalZero + "binary number + syn match cNumber display contained "0b[01]\%('\=[01]\+\)*\%(u\=l\{0,2}\|ll\=u\|u\=wb\|wbu\=\)\>" +else + syn match cNumber display contained "\d\+\%(u\=l\{0,2}\|ll\=u\)\>" + "hex number + syn match cNumber display contained "0x\x\+\%(u\=l\{0,2}\|ll\=u\)\>" + " Flag the first zero of an octal number as something special + syn match cOctal display contained "0\o\+\%(u\=l\{0,2}\|ll\=u\)\>" contains=cOctalZero + syn match cOctalZero display contained "\<0" +endif + +"floating point number, with dot, optional exponent +syn match cFloat display contained "\d\+\.\d*\%(e[-+]\=\d\+\)\=[fl]\=" +"floating point number, starting with a dot, optional exponent +syn match cFloat display contained "\.\d\+\%(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match cFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" +if !exists("c_no_c99") + "hexadecimal floating point number, optional leading digits, with dot, with exponent + syn match cFloat display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>" + "hexadecimal floating point number, with leading digits, optional dot, with exponent + syn match cFloat display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>" +endif + +" flag an octal number with wrong digits +syn match cOctalError display contained "0\o*[89]\d*" +syn case match + +if exists("c_comment_strings") + " A comment can contain cString, cCharacter and cNumber. + " But a "*/" inside a cString in a cComment DOES end the comment! So we + " need to use a special type of cString: cCommentString, which also ends on + " "*/", and sees a "*" at the start of the line as comment again. + " Unfortunately this doesn't very well work for // type of comments :-( + syn match cCommentSkip contained "^\s*\*\%($\|\s\+\)" + syn region cCommentString contained start=+L\=\\\@" skip="\\$" end="$" keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError +else + syn region cPreCondit start="^\s*\zs\%(%:\|#\)\s*\%(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError +endif +syn match cPreConditMatch display "^\s*\zs\%(%:\|#\)\s*\%(else\|endif\)\>" +if !exists("c_no_if0") + syn cluster cCppOutInGroup contains=cCppInIf,cCppInElse,cCppInElse2,cCppOutIf,cCppOutIf2,cCppOutElse,cCppInSkip,cCppOutSkip + syn region cCppOutWrapper start="^\s*\zs\%(%:\|#\)\s*if\s\+0\+\s*\%($\|//\|/\*\|&\)" end=".\@=\|$" contains=cCppOutIf,cCppOutElse,@NoSpell fold + syn region cCppOutIf contained start="0\+" matchgroup=cCppOutWrapper end="^\s*\%(%:\|#\)\s*endif\>" contains=cCppOutIf2,cCppOutElse + if !exists("c_no_if0_fold") + if !exists("c_no_c23") + syn region cCppOutIf2 contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\%(%:\|#\)\s*\%(else\>\|el\%(if\|ifdef\|ifndef\)\s\+\%(0\+\s*\%($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell fold + else + syn region cCppOutIf2 contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\%(%:\|#\)\s*\%(else\>\|elif\s\+\%(0\+\s*\%($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell fold + endif + else + if !exists("c_no_c23") + syn region cCppOutIf2 contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\%(%:\|#\)\s*\%(else\>\|el\%(if\|ifdef\|ifndef\)\s\+\%(0\+\s*\%($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell + else + syn region cCppOutIf2 contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\%(%:\|#\)\s*\%(else\>\|elif\s\+\%(0\+\s*\%($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell + endif + endif + if !exists("c_no_c23") + syn region cCppOutElse contained matchgroup=cCppOutWrapper start="^\s*\%(%:\|#\)\s*\%(else\|el\%(if\|ifdef\|ifndef\)\)" end="^\s*\%(%:\|#\)\s*endif\>"me=s-1 contains=TOP,cPreCondit + else + syn region cCppOutElse contained matchgroup=cCppOutWrapper start="^\s*\%(%:\|#\)\s*\%(else\|elif\)" end="^\s*\%(%:\|#\)\s*endif\>"me=s-1 contains=TOP,cPreCondit + endif + syn region cCppInWrapper start="^\s*\zs\%(%:\|#\)\s*if\s\+0*[1-9]\d*\s*\%($\|//\|/\*\||\)" end=".\@=\|$" contains=cCppInIf,cCppInElse fold + syn region cCppInIf contained matchgroup=cCppInWrapper start="\d\+" end="^\s*\%(%:\|#\)\s*endif\>" contains=TOP,cPreCondit + if !exists("c_no_if0_fold") + if !exists("c_no_c23") + syn region cCppInElse contained start="^\s*\%(%:\|#\)\s*\%(else\>\|el\%(if\|ifdef\|ifndef\)\s\+\%(0*[1-9]\d*\s*\%($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 fold + else + syn region cCppInElse contained start="^\s*\%(%:\|#\)\s*\%(else\>\|elif\s\+\%(0*[1-9]\d*\s*\%($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 fold + endif + else + if !exists("c_no_c23") + syn region cCppInElse contained start="^\s*\%(%:\|#\)\s*\%(else\>\|el\%(if\|ifdef\|ifndef\)\s\+\%(0*[1-9]\d*\s*\%($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 + else + syn region cCppInElse contained start="^\s*\%(%:\|#\)\s*\%(else\>\|elif\s\+\%(0*[1-9]\d*\s*\%($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 + endif + endif + if !exists("c_no_c23") + syn region cCppInElse2 contained matchgroup=cCppInWrapper start="^\s*\%(%:\|#\)\s*\%(else\|el\%(if\|ifdef\|ifndef\)\)\%([^/]\|/[^/*]\)*" end="^\s*\%(%:\|#\)\s*endif\>"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell + else + syn region cCppInElse2 contained matchgroup=cCppInWrapper start="^\s*\%(%:\|#\)\s*\%(else\|elif\)\%([^/]\|/[^/*]\)*" end="^\s*\%(%:\|#\)\s*endif\>"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell + endif + syn region cCppOutSkip contained start="^\s*\%(%:\|#\)\s*\%(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\%(%:\|#\)\s*endif\>" contains=cSpaceError,cCppOutSkip + syn region cCppInSkip contained matchgroup=cCppInWrapper start="^\s*\%(%:\|#\)\s*\%(if\s\+\%(\d\+\s*\%($\|//\|/\*\||\|&\)\)\@!\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\%(%:\|#\)\s*endif\>" containedin=cCppOutElse,cCppInIf,cCppInSkip contains=TOP,cPreProc +endif +syn region cIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match cIncluded display contained "<[^>]*>" +syn match cInclude display "^\s*\zs\%(%:\|#\)\s*include\>\s*["<]" contains=cIncluded +if !exists("c_no_c23") && !s:in_cpp_family + syn region cInclude start="^\s*\zs\%(%:\|#\)\s*embed\>" skip="\\$" end="$" keepend contains=cEmbed,cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError + syn match cEmbed contained "\%(%:\|#\)\s*embed\>" nextgroup=cIncluded skipwhite transparent + syn cluster cPreProcGroup add=cEmbed +endif +"syn match cLineSkip "\\$" +syn region cDefine start="^\s*\zs\%(%:\|#\)\s*\%(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell +syn region cPreProc start="^\s*\zs\%(%:\|#\)\s*\%(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell + +" Optional embedded Autodoc parsing +if exists("c_autodoc") + syn match cAutodocReal display contained "\%(//\|[/ \t\v]\*\|^\*\)\@2<=!.*" contains=@cAutodoc containedin=cComment,cCommentL + syn cluster cCommentGroup add=cAutodocReal + syn cluster cPreProcGroup add=cAutodocReal +endif + +" be able to fold #pragma regions +syn region cPragma start="^\s*#pragma\s\+region\>" end="^\s*#pragma\s\+endregion\>" transparent keepend extend fold + +" Highlight User Labels +syn cluster cMultiGroup contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString +if s:ft ==# 'c' || exists("cpp_no_cpp11") + syn region cMulti transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell,@cStringGroup +endif +" Avoid matching foo::bar() in C++ by requiring that the next char is not ':' +syn cluster cLabelGroup contains=cUserLabel +syn match cUserCont display "^\s*\zs\I\i*\s*:$" contains=@cLabelGroup +syn match cUserCont display ";\s*\zs\I\i*\s*:$" contains=@cLabelGroup +if s:in_cpp_family + syn match cUserCont display "^\s*\zs\%(class\|struct\|enum\)\@!\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup + syn match cUserCont display ";\s*\zs\%(class\|struct\|enum\)\@!\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup +else + syn match cUserCont display "^\s*\zs\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup + syn match cUserCont display ";\s*\zs\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup +endif + +syn match cUserLabel display "\I\i*" contained + +" Avoid recognizing most bitfields as labels +syn match cBitField display "^\s*\zs\I\i*\s*:\s*[1-9]"me=e-1 contains=cType +syn match cBitField display ";\s*\zs\I\i*\s*:\s*[1-9]"me=e-1 contains=cType + +if exists("c_functions") + syn match cFunction "\<\h\w*\ze\_s*(" + endif + +if exists("c_function_pointers") + syn match cFunctionPointer "\%((\s*\*\s*\)\@<=\h\w*\ze\s*)\_s*(.*)" +endif + +if exists("c_minlines") + let b:c_minlines = c_minlines +else + if !exists("c_no_if0") + let b:c_minlines = 50 " #if 0 constructs can be long + else + let b:c_minlines = 15 " mostly for () constructs + endif +endif +if exists("c_curly_error") + syn sync fromstart +else + exec "syn sync ccomment cComment minlines=" . b:c_minlines +endif + +" Define the default highlighting. +" Only used when an item doesn't have highlighting yet +hi def link cFormat cSpecial +hi def link cCppString cString +hi def link cCommentL cComment +hi def link cCommentStart cComment +hi def link cLabel Label +hi def link cUserLabel Label +hi def link cConditional Conditional +hi def link cRepeat Repeat +hi def link cCharacter Character +hi def link cSpecialCharacter cSpecial +hi def link cNumber Number +hi def link cOctal Number +hi def link cOctalZero PreProc " link this to Error if you want +hi def link cFloat Float +hi def link cOctalError cError +hi def link cParenError cError +hi def link cErrInParen cError +hi def link cErrInBracket cError +hi def link cCommentError cError +hi def link cCommentStartError cError +hi def link cSpaceError cError +hi def link cWrongComTail cError +hi def link cSpecialError cError +hi def link cCurlyError cError +hi def link cOperator Operator +hi def link cStructure Structure +hi def link cTypedef Structure +hi def link cStorageClass StorageClass +hi def link cInclude Include +hi def link cPreProc PreProc +hi def link cDefine Macro +hi def link cIncluded cString +hi def link cError Error +hi def link cStatement Statement +hi def link cCppInWrapper cCppOutWrapper +hi def link cCppOutWrapper cPreCondit +hi def link cPreConditMatch cPreCondit +hi def link cPreCondit PreCondit +hi def link cType Type +hi def link cConstant Constant +hi def link cCommentString cString +hi def link cComment2String cString +hi def link cCommentSkip cComment +hi def link cString String +hi def link cComment Comment +hi def link cSpecial SpecialChar +hi def link cTodo Todo +hi def link cBadContinuation Error +hi def link cCppOutSkip cCppOutIf2 +hi def link cCppInElse2 cCppOutIf2 +hi def link cCppOutIf2 cCppOut +hi def link cCppOut Comment +hi def link cFunction Function +hi def link cFunctionPointer Function + +let b:current_syntax = "c" + +unlet s:ft + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8 diff --git a/.config/vim/syntax/cabal.vim b/.config/vim/syntax/cabal.vim new file mode 100644 index 0000000..74cda51 --- /dev/null +++ b/.config/vim/syntax/cabal.vim @@ -0,0 +1,278 @@ +" Vim syntax file +" Language: Haskell Cabal Build file +" Author: Vincent Berthoux +" Maintainer: Marcin Szamotulski +" Previous Maintainer: Vincent Berthoux +" File Types: .cabal +" Last Change: 22 Oct 2022 +" v1.6: Added support for foreign-libraries +" Added highlighting for various fields +" v1.5: Incorporated changes from +" https://github.com/sdiehl/haskell-vim-proto/blob/master/vim/syntax/cabal.vim +" Use `syn keyword` instead of `syn match`. +" Added cabalStatementRegion to limit matches of keywords, which fixes +" the highlighting of description's value. +" Added cabalVersionRegion to limit the scope of cabalVersionOperator +" and cabalVersion matches. +" Added cabalLanguage keyword. +" Added calbalTitle, cabalAuthor and cabalMaintainer syntax groups. +" Added ! and ^>= operators (calbal 2.0) +" Added build-type keywords +" v1.4: Add benchmark support, thanks to Simon Meier +" v1.3: Updated to the last version of cabal +" Added more highlighting for cabal function, true/false +" and version number. Also added missing comment highlighting. +" Cabal known compiler are highlighted too. +" +" V1.2: Added cpp-options which was missing. Feature implemented +" by GHC, found with a GHC warning, but undocumented. +" Whatever... +" +" v1.1: Fixed operator problems and added ftdetect file +" (thanks to Sebastian Schwarz) +" +" v1.0: Cabal syntax in vimball format +" (thanks to Magnus Therning) + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" this file uses line continuation +let s:cpo_save = &cpo +set cpo&vim + +" set iskeyword for this syntax script +syn iskeyword @,48-57,192-255,- + +" Case sensitive matches +syn case match + +syn keyword cabalConditional if else +syn keyword cabalFunction os arche impl flag +syn match cabalComment /--.*$/ + +" Case insensitive matches +syn case ignore + +syn keyword cabalCategory contained + \ executable + \ library + \ benchmark + \ test-suite + \ source-repository + \ flag + \ foreign-library + \ custom-setup + \ common +syn match cabalCategoryTitle contained /[^{]*\ze{\?/ +syn match cabalCategoryRegion + \ contains=cabalCategory,cabalCategoryTitle + \ nextgroup=cabalCategory skipwhite + \ /^\c\s*\(contained\|executable\|library\|benchmark\|test-suite\|source-repository\|flag\|foreign-library\|custom-setup\|common\)\+\s*\%(.*$\|$\)/ +syn keyword cabalTruth true false + +" cabalStatementRegion which limits the scope of cabalStatement keywords, this +" way they are not highlighted in description. +syn region cabalStatementRegion start=+^\s*\(--\)\@=\|<=\|<\|>/ +" match version: `[%]\@/ +" cabalVersionRegion which limits the scope of cabalVersion pattern. +syn match cabalVersionRegionA + \ contains=cabalVersionOperator,cabalVersion + \ keepend + \ /\%(==\|\^\?>=\|<=\|<\|>\)\s*\d\+\%(\.\d\+\)*\%(\.\*\)\?\>/ +" version inside `version: ...` +syn match cabalVersionRegionB + \ contains=cabalStatementRegion,cabalVersionOperator,cabalVersion + \ /^\s*\%(cabal-\)\?version\s*:.*$/ + +syn keyword cabalLanguage Haskell98 Haskell2010 + +" title region +syn match cabalName contained /:\@<=.*/ +syn match cabalNameRegion + \ contains=cabalStatementRegion,cabalName + \ nextgroup=cabalStatementRegion + \ oneline + \ /^\c\s*name\s*:.*$/ + +" author region +syn match cabalAuthor contained /:\@<=.*/ +syn match cabalAuthorRegion + \ contains=cabalStatementRegion,cabalStatement,cabalAuthor + \ nextgroup=cabalStatementRegion + \ oneline + \ /^\c\s*author\s*:.*$/ + +" maintainer region +syn match cabalMaintainer contained /:\@<=.*/ +syn match cabalMaintainerRegion + \ contains=cabalStatementRegion,cabalStatement,cabalMaintainer + \ nextgroup=cabalStatementRegion + \ oneline + \ /^\c\s*maintainer\s*:.*$/ + +" license region +syn match cabalLicense contained /:\@<=.*/ +syn match cabalLicenseRegion + \ contains=cabalStatementRegion,cabalStatement,cabalLicense + \ nextgroup=cabalStatementRegion + \ oneline + \ /^\c\s*license\s*:.*$/ + +" license-file region +syn match cabalLicenseFile contained /:\@<=.*/ +syn match cabalLicenseFileRegion + \ contains=cabalStatementRegion,cabalStatement,cabalLicenseFile + \ nextgroup=cabalStatementRegion + \ oneline + \ /^\c\s*license-file\s*:.*$/ + +" tested-with region with compilers and versions +syn keyword cabalCompiler contained ghc nhc yhc hugs hbc helium jhc lhc +syn match cabalTestedWithRegion + \ contains=cabalStatementRegion,cabalStatement,cabalCompiler,cabalVersionRegionA + \ nextgroup=cabalStatementRegion + \ oneline + \ /^\c\s*tested-with\s*:.*$/ + +" build type keywords +syn keyword cabalBuildType contained + \ simple custom configure +syn match cabalBuildTypeRegion + \ contains=cabalStatementRegion,cabalStatement,cabalBuildType + \ nextgroup=cabalStatementRegion + \ /^\c\s*build-type\s*:.*$/ + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link cabalName Title +hi def link cabalAuthor Normal +hi def link cabalMaintainer Normal +hi def link cabalCategoryTitle Title +hi def link cabalLicense Normal +hi def link cabalLicenseFile Normal +hi def link cabalBuildType Keyword +hi def link cabalVersion Number +hi def link cabalTruth Boolean +hi def link cabalComment Comment +hi def link cabalStatement Statement +hi def link cabalLanguage Type +hi def link cabalCategory Type +hi def link cabalFunction Function +hi def link cabalConditional Conditional +hi def link cabalOperator Operator +hi def link cabalVersionOperator Operator +hi def link cabalCompiler Constant + +let b:current_syntax = "cabal" + +let &cpo = s:cpo_save +unlet! s:cpo_save + +" vim: ts=8 diff --git a/.config/vim/syntax/cabalconfig.vim b/.config/vim/syntax/cabalconfig.vim new file mode 100644 index 0000000..0165725 --- /dev/null +++ b/.config/vim/syntax/cabalconfig.vim @@ -0,0 +1,30 @@ +" Vim syntax file +" Language: Cabal Config +" Maintainer: profunctor@pm.me +" Last Change: Marcin Szamotulski +" Original Author: Marcin Szamotulski + +if exists("b:current_syntax") + finish +endif + +syn match CabalConfigSection /^\S[[:alpha:]]\+\%(-[[:alpha:]]\+\)*[^:]*$/ +syn region CabalConfigRegion matchgroup=CabalConfigKey start=/^\s*[[:alpha:]]\+\%(-[[:alpha:]]\+\)*:/ matchgroup=NONE end=/$/ contains=CabalConfigSeparator,CabalConfigKeyword,CabalConfigPath keepend +syn match CabalConfigComment /^\s*--.*$/ +syn match CabalConfigValue /.*$/ contained +syn match CabalConfigKey /[[:alpha:]]\+\%(-[[:alpha:]]\+\)*\ze:/ +syn keyword CabalConfigSeparator : contained +syn match CabalConfigVariable /\$[[:alpha:]]\+/ +syn keyword CabalConfigKeyword True False ghc +syn match CabalConfigPath /\%([[:alpha:]]\+:\)\?\%(\/[[:print:]]\+\)\+/ + +hi def link CabalConfigComment Comment +hi def link CabalConfigSection Title +hi def link CabalConfigKey Statement +hi def link CabalConfigSeparator NonText +hi def link CabalConfigValue Normal +hi def link CabalConfigVariable Identifier +hi def link CabalConfigKeyword Keyword +hi def link CabalConfigPath Directory + +let b:current_syntax = "cabal.config" diff --git a/.config/vim/syntax/cabalproject.vim b/.config/vim/syntax/cabalproject.vim new file mode 100644 index 0000000..12143b9 --- /dev/null +++ b/.config/vim/syntax/cabalproject.vim @@ -0,0 +1,28 @@ +" Vim syntax file +" Language: Cabal Project +" Maintainer: profunctor@pm.me +" Last Change: Marcin Szamotulski +" Original Author: Marcin Szamotulski + +if exists("b:current_syntax") + finish +endif + +syn match CabalProjectComment /^\s*--.*/ contains=@Spell +syn match CabalProjectField /^\w\%(\w\|-\)\+/ contains=@NoSpell + +syn keyword CabalProjectBoolean true false True False +syn keyword CabalProjectCompiler ghc ghcjs jhc lhc uhc haskell-suite +syn match CabalProjectNat /\<\d\+\>/ +syn keyword CabalProjectJobs $ncpus +syn keyword CabalProjectProfilingLevel default none exported-functions toplevel-functions all-functions + +hi def link CabalProjectComment Comment +hi def link CabalProjectField Statement +hi def link CabalProjectBoolean Boolean +hi def link CabalProjectCompiler Identifier +hi def link CabalProjectNat Number +hi def link CabalProjectJobs Number +hi def link CabalProjectProfilingLevel Statement + +let b:current_syntax = "cabal.project" diff --git a/.config/vim/syntax/calendar.vim b/.config/vim/syntax/calendar.vim new file mode 100644 index 0000000..4250109 --- /dev/null +++ b/.config/vim/syntax/calendar.vim @@ -0,0 +1,110 @@ +" Vim syntax file +" Language: calendar(1) input file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword calendarTodo contained TODO FIXME XXX NOTE + +syn region calendarComment start='/\*' end='\*/' + \ contains=calendarTodo,@Spell + +syn region calendarCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl + \ end=+"+ end='$' contains=calendarSpecial +syn match calendarSpecial display contained '\\\%(x\x\+\|\o\{1,3}\|.\|$\)' +syn match calendarSpecial display contained "\\\(u\x\{4}\|U\x\{8}\)" + +syn region calendarPreCondit start='^\s*#\s*\%(if\|ifdef\|ifndef\|elif\)\>' + \ skip='\\$' end='$' + \ contains=calendarComment,calendarCppString +syn match calendarPreCondit display '^\s*#\s*\%(else\|endif\)\>' +syn region calendarCppOut start='^\s*#\s*if\s\+0\+' end='.\@=\|$' + \ contains=calendarCppOut2 +syn region calendarCppOut2 contained start='0' + \ end='^\s*#\s*\%(endif\|else\|elif\)\>' + \ contains=calendarSpaceError,calendarCppSkip +syn region calendarCppSkip contained + \ start='^\s*#\s*\%(if\|ifdef\|ifndef\)\>' + \ skip='\\$' end='^\s*#\s*endif\>' + \ contains=calendarSpaceError,calendarCppSkip +syn region calendarIncluded display contained start=+"+ skip=+\\\\\|\\"+ + \ end=+"+ +syn match calendarIncluded display contained '<[^>]*>' +syn match calendarInclude display '^\s*#\s*include\>\s*["<]' + \ contains=calendarIncluded +syn cluster calendarPreProcGroup contains=calendarPreCondit,calendarIncluded, + \ calendarInclude,calendarDefine, + \ calendarCppOut,calendarCppOut2, + \ calendarCppSkip,calendarString, + \ calendarSpecial,calendarTodo +syn region calendarDefine start='^\s*#\s*\%(define\|undef\)\>' + \ skip='\\$' end='$' + \ contains=ALLBUT,@calendarPreProcGroup +syn region calendarPreProc start='^\s*#\s*\%(pragma\|line\|warning\|warn\|error\)\>' + \ skip='\\$' end='$' keepend + \ contains=ALLBUT,@calendarPreProcGroup + +syn keyword calendarKeyword CHARSET BODUN LANG +syn case ignore +syn keyword calendarKeyword Easter Pashka +syn case match + +syn case ignore +syn match calendarNumber display '\<\d\+\>' +syn keyword calendarMonth Jan[uary] Feb[ruary] Mar[ch] Apr[il] May + \ Jun[e] Jul[y] Aug[ust] Sep[tember] + \ Oct[ober] Nov[ember] Dec[ember] +syn match calendarMonth display '\<\%(Jan\|Feb\|Mar\|Apr\|May\|Jun\|Jul\|Aug\|Sep\|Oct\|Nov\|Dec\)\.' +syn keyword calendarWeekday Mon[day] Tue[sday] Wed[nesday] Thu[rsday] +syn keyword calendarWeekday Fri[day] Sat[urday] Sun[day] +syn match calendarWeekday display '\<\%(Mon\|Tue\|Wed\|Thu\|Fri\|Sat\|Sun\)\.' + \ nextgroup=calendarWeekdayMod +syn match calendarWeekdayMod display '[+-]\d\+\>' +syn case match + +syn match calendarTime display '\<\%([01]\=\d\|2[0-3]\):[0-5]\d\%(:[0-5]\d\)\=' +syn match calendarTime display '\<\%(0\=[1-9]\|1[0-2]\):[0-5]\d\%(:[0-5]\d\)\=\s*[AaPp][Mm]' + +syn match calendarVariable '\*' + +if exists("c_minlines") + let b:c_minlines = c_minlines +else + if !exists("c_no_if0") + let b:c_minlines = 50 " #if 0 constructs can be long + else + let b:c_minlines = 15 " mostly for () constructs + endif +endif +exec "syn sync ccomment calendarComment minlines=" . b:c_minlines + +hi def link calendarTodo Todo +hi def link calendarComment Comment +hi def link calendarCppString String +hi def link calendarSpecial SpecialChar +hi def link calendarPreCondit PreCondit +hi def link calendarCppOut Comment +hi def link calendarCppOut2 calendarCppOut +hi def link calendarCppSkip calendarCppOut +hi def link calendarIncluded String +hi def link calendarInclude Include +hi def link calendarDefine Macro +hi def link calendarPreProc PreProc +hi def link calendarKeyword Keyword +hi def link calendarNumber Number +hi def link calendarMonth String +hi def link calendarWeekday String +hi def link calendarWeekdayMod Special +hi def link calendarTime Number +hi def link calendarVariable Identifier + +let b:current_syntax = "calendar" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/cangjie.vim b/.config/vim/syntax/cangjie.vim new file mode 100644 index 0000000..1e8b872 --- /dev/null +++ b/.config/vim/syntax/cangjie.vim @@ -0,0 +1,193 @@ +" Vim syntax file +" Language: Cangjie +" Maintainer: Wu Junkai +" URL: https://github.com/WuJunkai2004/cangjie.vim +" Last Change: 2025 Oct 12 +" +" The Cangjie programming language is a new-generation programming +" language oriented to full-scenario intelligence. It features +" native intelligence, being naturally suitable for all scenarios, +" high performance and strong security. It is mainly applied in +" scenarios such as native applications and service applications +" of HarmonyOS NEXT, providing developers with a good programming +" experience. +" +" For more information, see: +" - https://cangjie-lang.cn/ +" - https://gitcode.com/Cangjie + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:save_cpo = &cpo +set cpo&vim + +" 0. check the user's settings +" use let g:cangjie__color to enable/disable syntax highlighting +function! s:enabled(item) abort + return get(g:, 'cangjie_' . a:item . '_color', 1) +endfunction + +syn case match + +" 1. comments +syn keyword cangjieTodo TODO FIXME XXX NOTE BUG contained +syn match cangjieComment /\v\/\/.*/ contains=cangjieTodo +syn region cangjieComment start=/\/\*/ end=/\*\// contains=cangjieTodo,@Spell + +" 2. keywords +syn keyword cangjieDeclaration abstract extend macro foreign +syn keyword cangjieDeclaration interface open operator override private prop protected +syn keyword cangjieDeclaration public redef static type +syn keyword cangjieStatement as break case catch continue do else finally for in +syn keyword cangjieStatement if in is match quote return spawn super synchronized +syn keyword cangjieStatement throw try unsafe where while +syn keyword cangjieIdentlike false init main this true +syn keyword cangjieVariable const let var +syn keyword cangjieOption Option Some None +syn keyword cangjieDeclaration func struct class enum import package nextgroup=cangjieTypeName skipwhite +syn cluster cangjieKeywordCluster contains= + \ cangjieDeclaration, + \ cangjieStatement, + \ cangjieIdentlike, + \ cangjieVariable, + \ cangjieOption + +" 3. macro (e.g., @override) +syn match cangjieMacro /@\h\w*/ + +" 4. Type and Function Names +syn match cangjieTypeName /\h\w*/ contained + +" 5. specail identifiers +syn region cangjieSpIdentifier start=/`/ end=/`/ oneline + +" 6. types +syn keyword cangjieSpType Any Nothing Range Unit Iterable +syn keyword cangjieArrayType Array ArrayList VArray +syn keyword cangjieHashType HashMap HashSet +syn keyword cangjieCommonType Bool Byte Rune String +syn keyword cangjieFloatType Float16 Float32 Float64 +syn keyword cangjieIntType Int8 Int16 Int32 Int64 IntNative +syn keyword cangjieUIntType UInt8 UInt16 UInt32 UInt64 UIntNative +syn cluster cangjieTypeCluster contains= + \ cangjieSpType, + \ cangjieArrayType, + \ cangjieHashType, + \ cangjieCommonType, + \ cangjieFloatType, + \ cangjieIntType, + \ cangjieUIntType + +" 7. character and strings +syn cluster cangjieInterpolatedPart contains= + \ @cangjieKeywordCluster, + \ cangjieSpIdentifier, + \ @cangjieTypeCluster, + \ @cangjieNumberCluster, + \ cangjieOperator +syn region cangjieInterpolation contained keepend start=/\${/ end=/}/ contains=@cangjieInterpolatedPart +syn match cangjieEscape /\v\\u\{[0-9a-fA-F]{1,8}\}|\\./ contained +syn match cangjieRuneError /\v[rb]'([^'\\]|\\.)*'/ +syn match cangjieRuneError /\v[rb]"([^"\\]|\\.)*"/ +syn match cangjieRune /\vr'(\\u\{[0-9a-fA-F]{1,8}\}|\\.|[^'\\])'/ contains=cangjieEscape +syn match cangjieRune /\vr"(\\u\{[0-9a-fA-F]{1,8}\}|\\.|[^"\\])"/ contains=cangjieEscape +syn match cangjieRune /\vb'(\\u\{[0-9a-fA-F]{1,8}\}|\\.|[^'\\])'/ contains=cangjieEscape +syn region cangjieString start=/"/ skip=/\\\\\|\\"/ end=/"/ oneline contains=cangjieInterpolation,cangjieEscape +syn region cangjieString start=/'/ skip=/\\\\\|\\'/ end=/'/ oneline contains=cangjieInterpolation,cangjieEscape +syn region cangjieString start=/"""/ skip=/\\\\\|\\"/ end=/"""/ contains=cangjieInterpolation,cangjieEscape keepend +syn region cangjieString start=/'''/ skip=/\\\\\|\\'/ end=/'''/ contains=cangjieInterpolation,cangjieEscape keepend +syn region cangjieRawString start='\z(#*\)#"' end='"#\z1' +syn region cangjieRawString start='\z(#*\)#\'' end='\'#\z1' + +" 8. number +syn match cangjieHexFloatNumber /\v\c<0x([0-9a-f_]+\.?|[0-9a-f_]*\.[0-9a-f_]+)[p][-+]?\d[0-9_]*>/ +syn match cangjieFloatNumber /\v\c<\d[0-9_]*\.\d[0-9_]*([ep][-+]?\d[0-9_]*)?(f(16|32|64))?>/ +syn match cangjieFloatNumber /\v\c<\d[0-9_]*\.([ep][-+]?\d[0-9_]*)?(f(16|32|64))?>/ +syn match cangjieFloatNumber /\v\c\.\d[0-9_]*([ep][-+]?\d[0-9_]*)?(f(16|32|64))?>/ +syn match cangjieScienceNumber /\v\c<\d[0-9_]*[e][-+]?\d[0-9_]*(f(16|32|64))?>/ +syn match cangjieHexNumber /\v\c<0x[0-9a-f_]+([iu](8|16|32|64))?>/ +syn match cangjieOctalNumber /\v\c<0o[0-7_]+([iu](8|16|32|64))?>/ +syn match cangjieBinaryNumber /\v\c<0b[01_]+([iu](8|16|32|64))?>/ +syn match cangjieDecimalNumber /\v\c<\d[0-9_]*([iu](8|16|32|64))?>/ +syn cluster cangjieNumberCluster contains= + \ cangjieHexFloatNumber, + \ cangjieFloatNumber, + \ cangjieScienceNumber, + \ cangjieHexNumber, + \ cangjieOctalNumber, + \ cangjieBinaryNumber, + \ cangjieDecimalNumber + +" 9. operators +syn match cangjieOperator /[-+%<>!&|^*=]=\?/ +syn match cangjieOperator /\/\%(=\|\ze[^/*]\)/ +syn match cangjieOperator /\%(<<\|>>\|&^\)=\?/ +syn match cangjieOperator /:=\|||\|<-\|++\|--/ +syn match cangjieOperator /[~]/ +syn match cangjieOperator /[:]/ +syn match cangjieOperator /\.\./ +syn match cangjieVarArgs /\.\.\./ + +" 10. folding +syn region cangjieFoldBraces transparent fold start='{' end='}' contains=ALLBUT,cangjieComment +syn region cangjieFoldParens transparent fold start='(' end=')' contains=ALLBUT,cangjieComment +syn region cangjieFoldBrackets transparent fold start='\[' end='\]' contains=ALLBUT,cangjieComment + +" finally, link the syntax groups to the highlight groups +if s:enabled('comment') + hi def link cangjieTodo Todo + hi def link cangjieComment Comment +endif +if s:enabled('identifier') + hi def link cangjieSpIdentifier Identifier +endif +if s:enabled('keyword') + hi def link cangjieDeclaration Keyword + hi def link cangjieStatement Statement + hi def link cangjieIdentlike Keyword + hi def link cangjieVariable Keyword + hi def link cangjieOption Keyword +endif +if s:enabled('macro') + hi def link cangjieMacro PreProc +endif +if s:enabled('number') + hi def link cangjieHexFloatNumber Number + hi def link cangjieFloatNumber Float + hi def link cangjieScienceNumber Float + hi def link cangjieHexNumber Number + hi def link cangjieOctalNumber Number + hi def link cangjieBinaryNumber Number + hi def link cangjieDecimalNumber Number +endif +if s:enabled('operator') + hi def link cangjieOperator Operator + hi def link cangjieVarArgs Operator +endif +if s:enabled('string') + hi def link cangjieRune Character + hi def link cangjieRuneError Error + hi def link cangjieString String + hi def link cangjieRawString String + hi def link cangjieEscape SpecialChar +endif +if s:enabled('type') + hi def link cangjieTypeName Type + hi def link cangjieSpType Type + hi def link cangjieArrayType Type + hi def link cangjieHashType Type + hi def link cangjieCommonType Type + hi def link cangjieFloatType Type + hi def link cangjieIntType Type + hi def link cangjieUIntType Type +endif + +let b:current_syntax = "cangjie" + +let &cpo = s:save_cpo +unlet s:save_cpo + +" vim: ts=8 sw=8 noet diff --git a/.config/vim/syntax/catalog.vim b/.config/vim/syntax/catalog.vim new file mode 100644 index 0000000..0a1d511 --- /dev/null +++ b/.config/vim/syntax/catalog.vim @@ -0,0 +1,30 @@ +" Vim syntax file +" Language: sgml catalog file +" Maintainer: Johannes Zellner +" Last Change: Fr, 04 Nov 2005 12:46:45 CET +" Filenames: /etc/sgml.catalog +" $Id: catalog.vim,v 1.2 2005/11/23 21:11:10 vimboss Exp $ + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" strings +syn region catalogString start=+"+ skip=+\\\\\|\\"+ end=+"+ keepend +syn region catalogString start=+'+ skip=+\\\\\|\\'+ end=+'+ keepend + +syn region catalogComment start=+--+ end=+--+ contains=catalogTodo +syn keyword catalogTodo TODO FIXME XXX NOTE contained +syn keyword catalogKeyword DOCTYPE OVERRIDE PUBLIC DTDDECL ENTITY CATALOG + + +" The default highlighting. +hi def link catalogString String +hi def link catalogComment Comment +hi def link catalogTodo Todo +hi def link catalogKeyword Statement + +let b:current_syntax = "catalog" diff --git a/.config/vim/syntax/cdl.vim b/.config/vim/syntax/cdl.vim new file mode 100644 index 0000000..2a458d4 --- /dev/null +++ b/.config/vim/syntax/cdl.vim @@ -0,0 +1,78 @@ +" Vim syntax file +" Language: Comshare Dimension Definition Language +" Maintainer: Raul Segura Acevedo +" Last change: 2016 Sep 20 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +sy case ignore +sy sync fromstart +sy keyword cdlStatement dimension hierarchy group grouphierarchy schedule class +sy keyword cdlType add update file category main altername removeall required notrequired +sy keyword cdlConditional if then elseif else endif and or not cons rpt xlt +sy keyword cdlFunction ChildOf IChildOf LeafChildOf DescendantOf IDescendantOf LeafDescendantOf MemberIs CountOf + +sy keyword cdlIdentifier contained id name desc description xlttype precision symbol curr_ name group_name rate_name +sy keyword cdlIdentifier contained xcheck endbal accounttype natsign consolidate formula pctown usage periodicity +sy match cdlIdentifier contained 'child\s*name' +sy match cdlIdentifier contained 'parent\s*name' +sy match cdlIdentifier contained 'grp\s*description' +sy match cdlIdentifier contained 'grpchild\s*name' +sy match cdlIdentifier contained 'grpparent\s*name' +sy match cdlIdentifier contained 'preceding\s*member' +sy match cdlIdentifier contained 'unit\s*name' +sy match cdlIdentifier contained 'unit\s*id' +sy match cdlIdentifier contained 'schedule\s*name' +sy match cdlIdentifier contained 'schedule\s*id' + +sy match cdlString /\[[^]]*]/ contains=cdlRestricted,cdlNotSupported +sy match cdlRestricted contained /[&*,_]/ +" not supported +sy match cdlNotSupported contained /[:"!']/ + +sy keyword cdlTodo contained TODO FIXME XXX +sy cluster cdlCommentGroup contains=cdlTodo +sy match cdlComment '//.*' contains=@cdlCommentGroup +sy region cdlComment start="/\*" end="\*/" contains=@cdlCommentGroup fold +sy match cdlCommentE "\*/" + +sy region cdlParen transparent start='(' end=')' contains=ALLBUT,cdlParenE,cdlRestricted,cdlNotSupported +"sy region cdlParen transparent start='(' end=')' contains=cdlIdentifier,cdlComment,cdlParenWordE +sy match cdlParenE ")" +"sy match cdlParenWordE contained "\k\+" + +sy keyword cdlFxType allocation downfoot expr xltgain +"sy keyword cdlFxType contained allocation downfoot expr xltgain +"sy region cdlFx transparent start='\k\+(' end=')' contains=cdlConditional,cdlFunction,cdlString,cdlComment,cdlFxType + +set foldmethod=expr +set foldexpr=(getline(v:lnum+1)=~'{'\|\|getline(v:lnum)=~'//\\s\\*\\{5}.*table')?'>1':1 +%foldo! +set foldmethod=manual +let b:match_words='\:\:\:\:\' + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link cdlStatement Statement +hi def link cdlType Type +hi def link cdlFxType Type +hi def link cdlIdentifier Identifier +hi def link cdlString String +hi def link cdlRestricted WarningMsg +hi def link cdlNotSupported ErrorMsg +hi def link cdlTodo Todo +hi def link cdlComment Comment +hi def link cdlCommentE ErrorMsg +hi def link cdlParenE ErrorMsg +hi def link cdlParenWordE ErrorMsg +hi def link cdlFunction Function +hi def link cdlConditional Conditional + + +let b:current_syntax = "cdl" + +" vim: ts=8 diff --git a/.config/vim/syntax/cdrdaoconf.vim b/.config/vim/syntax/cdrdaoconf.vim new file mode 100644 index 0000000..0fa6510 --- /dev/null +++ b/.config/vim/syntax/cdrdaoconf.vim @@ -0,0 +1,139 @@ +" Vim syntax file +" Language: cdrdao(1) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2007-09-02 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword cdrdaoconfTodo + \ TODO FIXME XXX NOTE + +syn match cdrdaoconfBegin + \ display + \ nextgroup=@cdrdaoconfKeyword,cdrdaoconfComment + \ '^' + +syn cluster cdrdaoconfKeyword + \ contains=cdrdaoconfIntegerKeyword, + \ cdrdaoconfDriverKeyword, + \ cdrdaoconfDeviceKeyword, + \ cdrdaoconfPathKeyword + +syn keyword cdrdaoconfIntegerKeyword + \ contained + \ nextgroup=cdrdaoconfIntegerDelimiter + \ write_speed + \ write_buffers + \ user_capacity + \ full_burn + \ read_speed + \ cddb_timeout + +syn keyword cdrdaoconfIntegerKeyword + \ contained + \ nextgroup=cdrdaoconfParanoiaModeDelimiter + \ read_paranoia_mode + +syn keyword cdrdaoconfDriverKeyword + \ contained + \ nextgroup=cdrdaoconfDriverDelimiter + \ write_driver + \ read_driver + +syn keyword cdrdaoconfDeviceKeyword + \ contained + \ nextgroup=cdrdaoconfDeviceDelimiter + \ write_device + \ read_device + +syn keyword cdrdaoconfPathKeyword + \ contained + \ nextgroup=cdrdaoconfPathDelimiter + \ cddb_directory + \ tmp_file_dir + +syn match cdrdaoconfIntegerDelimiter + \ contained + \ nextgroup=cdrdaoconfInteger + \ skipwhite + \ ':' + +syn match cdrdaoconfParanoiaModeDelimiter + \ contained + \ nextgroup=cdrdaoconfParanoiaMode + \ skipwhite + \ ':' + +syn match cdrdaoconfDriverDelimiter + \ contained + \ nextgroup=cdrdaoconfDriver + \ skipwhite + \ ':' + +syn match cdrdaoconfDeviceDelimiter + \ contained + \ nextgroup=cdrdaoconfDevice + \ skipwhite + \ ':' + +syn match cdrdaoconfPathDelimiter + \ contained + \ nextgroup=cdrdaoconfPath + \ skipwhite + \ ':' + +syn match cdrdaoconfInteger + \ contained + \ '\<\d\+\>' + +syn match cdrdaoParanoiaMode + \ contained + \ '[0123]' + +syn match cdrdaoconfDriver + \ contained + \ '\<\(cdd2600\|generic-mmc\%(-raw\)\=\|plextor\%(-scan\)\|ricoh-mp6200\|sony-cdu9\%(20\|48\)\|taiyo-yuden\|teac-cdr55\|toshiba\|yamaha-cdr10x\)\>' + +syn region cdrdaoconfDevice + \ contained + \ matchgroup=cdrdaoconfDevice + \ start=+"+ + \ end=+"+ + +syn region cdrdaoconfPath + \ contained + \ matchgroup=cdrdaoconfPath + \ start=+"+ + \ end=+"+ + +syn match cdrdaoconfComment + \ contains=cdrdaoconfTodo,@Spell + \ '^.*#.*$' + +hi def link cdrdaoconfTodo Todo +hi def link cdrdaoconfComment Comment +hi def link cdrdaoconfKeyword Keyword +hi def link cdrdaoconfIntegerKeyword cdrdaoconfKeyword +hi def link cdrdaoconfDriverKeyword cdrdaoconfKeyword +hi def link cdrdaoconfDeviceKeyword cdrdaoconfKeyword +hi def link cdrdaoconfPathKeyword cdrdaoconfKeyword +hi def link cdrdaoconfDelimiter Delimiter +hi def link cdrdaoconfIntegerDelimiter cdrdaoconfDelimiter +hi def link cdrdaoconfDriverDelimiter cdrdaoconfDelimiter +hi def link cdrdaoconfDeviceDelimiter cdrdaoconfDelimiter +hi def link cdrdaoconfPathDelimiter cdrdaoconfDelimiter +hi def link cdrdaoconfInteger Number +hi def link cdrdaoconfParanoiaMode Number +hi def link cdrdaoconfDriver Identifier +hi def link cdrdaoconfDevice cdrdaoconfPath +hi def link cdrdaoconfPath String + +let b:current_syntax = "cdrdaoconf" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/cdrtoc.vim b/.config/vim/syntax/cdrtoc.vim new file mode 100644 index 0000000..866784d --- /dev/null +++ b/.config/vim/syntax/cdrtoc.vim @@ -0,0 +1,537 @@ +" Vim syntax file +" Language: cdrdao(1) TOC file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2007-05-10 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword cdrtocTodo + \ contained + \ TODO + \ FIXME + \ XXX + \ NOTE + +syn cluster cdrtocCommentContents + \ contains= + \ cdrtocTodo, + \ @Spell + +syn cluster cdrtocHeaderFollowsInitial + \ contains= + \ cdrtocHeaderCommentInitial, + \ cdrtocHeaderCatalog, + \ cdrtocHeaderTOCType, + \ cdrtocHeaderCDText, + \ cdrtocTrack + +syn match cdrtocHeaderBegin + \ nextgroup=@cdrtocHeaderFollowsInitial + \ skipwhite skipempty + \ '\%^' + +let s:mmssff_pattern = '\%([0-5]\d\|\d\):\%([0-5]\d\|\d\):\%([0-6]\d\|7[0-5]\|\d\)\>' +let s:byte_pattern = '\<\%([01]\=\d\{1,2}\|2\%([0-4]\d\|5[0-5]\)\)\>' +let s:length_pattern = '\%(\%([0-5]\d\|\d\):\%([0-5]\d\|\d\):\%([0-6]\d\|7[0-5]\|\d\)\|\d\+\)\>' + +function s:def_comment(name, nextgroup) + execute 'syn match' a:name + \ 'nextgroup=' . a:nextgroup . ',' . a:name + \ 'skipwhite skipempty' + \ 'contains=@cdrtocCommentContents' + \ 'contained' + \ "'//.*$'" + execute 'hi def link' a:name 'cdrtocComment' +endfunction + +function s:def_keywords(name, nextgroup, keywords) + let comment_group = a:name . 'FollowComment' + execute 'syn keyword' a:name + \ 'nextgroup=' . a:nextgroup . ',' . comment_group + \ 'skipwhite skipempty' + \ 'contained' + \ join(a:keywords) + + call s:def_comment(comment_group, a:nextgroup) +endfunction + +function s:def_keyword(name, nextgroup, keyword) + call s:def_keywords(a:name, a:nextgroup, [a:keyword]) +endfunction + +" NOTE: Pattern needs to escape any “@”s. +function s:def_match(name, nextgroup, pattern) + let comment_group = a:name . 'FollowComment' + execute 'syn match' a:name + \ 'nextgroup=' . a:nextgroup . ',' . comment_group + \ 'skipwhite skipempty' + \ 'contained' + \ '@' . a:pattern . '@' + + call s:def_comment(comment_group, a:nextgroup) +endfunction + +function s:def_region(name, nextgroup, start, skip, end, matchgroup, contains) + let comment_group = a:name . 'FollowComment' + execute 'syn region' a:name + \ 'nextgroup=' . a:nextgroup . ',' . comment_group + \ 'skipwhite skipempty' + \ 'contained' + \ 'matchgroup=' . a:matchgroup + \ 'contains=' . a:contains + \ 'start=@' . a:start . '@' + \ (a:skip != "" ? ('skip=@' . a:skip . '@') : "") + \ 'end=@' . a:end . '@' + + call s:def_comment(comment_group, a:nextgroup) +endfunction + +call s:def_comment('cdrtocHeaderCommentInitial', '@cdrtocHeaderFollowsInitial') + +call s:def_keyword('cdrtocHeaderCatalog', 'cdrtocHeaderCatalogNumber', 'CATALOG') + +call s:def_match('cdrtocHeaderCatalogNumber', '@cdrtocHeaderFollowsInitial', '"\d\{13\}"') + +call s:def_keywords('cdrtocHeaderTOCType', '@cdrtocHeaderFollowsInitial', ['CD_DA', 'CD_ROM', 'CD_ROM_XA']) + +call s:def_keyword('cdrtocHeaderCDText', 'cdrtocHeaderCDTextStart', 'CD_TEXT') + +" TODO: Actually, language maps aren’t required by TocParser.g, but let’s keep +" things simple (and in agreement with what the manual page says). +call s:def_match('cdrtocHeaderCDTextStart', 'cdrtocHeaderCDTextLanguageMap', '{') + +call s:def_keyword('cdrtocHeaderCDTextLanguageMap', 'cdrtocHeaderLanguageMapStart', 'LANGUAGE_MAP') + +call s:def_match('cdrtocHeaderLanguageMapStart', 'cdrtocHeaderLanguageMapLanguageNumber', '{') + +call s:def_match('cdrtocHeaderLanguageMapLanguageNumber', 'cdrtocHeaderLanguageMapColon', '\<[0-7]\>') + +call s:def_match('cdrtocHeaderLanguageMapColon', 'cdrtocHeaderLanguageMapCountryCode,cdrtocHeaderLanguageMapCountryCodeName', ':') + +syn cluster cdrtocHeaderLanguageMapCountryCodeFollow + \ contains= + \ cdrtocHeaderLanguageMapLanguageNumber, + \ cdrtocHeaderLanguageMapEnd + +call s:def_match('cdrtocHeaderLanguageMapCountryCode', + \ '@cdrtocHeaderLanguageMapCountryCodeFollow', + \ s:byte_pattern) + +call s:def_keyword('cdrtocHeaderLanguageMapCountryCodeName', + \ '@cdrtocHeaderLanguageMapCountryCodeFollow', + \ 'EN') + +call s:def_match('cdrtocHeaderLanguageMapEnd', + \ 'cdrtocHeaderLanguage,cdrtocHeaderCDTextEnd', + \ '}') + +call s:def_keyword('cdrtocHeaderLanguage', 'cdrtocHeaderLanguageNumber', 'LANGUAGE') + +call s:def_match('cdrtocHeaderLanguageNumber', 'cdrtocHeaderLanguageStart', '\<[0-7]\>') + +call s:def_match('cdrtocHeaderLanguageStart', + \ 'cdrtocHeaderCDTextItem,cdrtocHeaderLanguageEnd', + \ '{') + +syn cluster cdrtocHeaderCDTextData + \ contains= + \ cdrtocHeaderCDTextDataString, + \ cdrtocHeaderCDTextDataBinaryStart + +call s:def_keywords('cdrtocHeaderCDTextItem', + \ '@cdrtocHeaderCDTextData', + \ ['TITLE', 'PERFORMER', 'SONGWRITER', 'COMPOSER', + \ 'ARRANGER', 'MESSAGE', 'DISC_ID', 'GENRE', 'TOC_INFO1', + \ 'TOC_INFO2', 'UPC_EAN', 'ISRC', 'SIZE_INFO']) + +call s:def_region('cdrtocHeaderCDTextDataString', + \ 'cdrtocHeaderCDTextItem,cdrtocHeaderLanguageEnd', + \ '"', + \ '\\\\\|\\"', + \ '"', + \ 'cdrtocHeaderCDTextDataStringDelimiters', + \ 'cdrtocHeaderCDTextDataStringSpecialChar') + +syn match cdrtocHeaderCDTextDataStringSpecialChar + \ contained + \ display + \ '\\\%(\o\o\o\|["\\]\)' + +call s:def_match('cdrtocHeaderCDTextDataBinaryStart', + \ 'cdrtocHeaderCDTextDataBinaryInteger', + \ '{') + +call s:def_match('cdrtocHeaderCDTextDataBinaryInteger', + \ 'cdrtocHeaderCDTextDataBinarySeparator,cdrtocHeaderCDTextDataBinaryEnd', + \ s:byte_pattern) + +call s:def_match('cdrtocHeaderCDTextDataBinarySeparator', + \ 'cdrtocHeaderCDTextDataBinaryInteger', + \ ',') + +call s:def_match('cdrtocHeaderCDTextDataBinaryEnd', + \ 'cdrtocHeaderCDTextItem,cdrtocHeaderLanguageEnd', + \ '}') + +call s:def_match('cdrtocHeaderLanguageEnd', + \ 'cdrtocHeaderLanguage,cdrtocHeaderCDTextEnd', + \ '}') + +call s:def_match('cdrtocHeaderCDTextEnd', + \ 'cdrtocTrack', + \ '}') + +syn cluster cdrtocTrackFollow + \ contains= + \ @cdrtocTrackFlags, + \ cdrtocTrackCDText, + \ cdrtocTrackPregap, + \ @cdrtocTrackContents + +call s:def_keyword('cdrtocTrack', 'cdrtocTrackMode', 'TRACK') + +call s:def_keywords('cdrtocTrackMode', + \ 'cdrtocTrackSubChannelMode,@cdrtocTrackFollow', + \ ['AUDIO', 'MODE1', 'MODE1_RAW', 'MODE2', 'MODE2_FORM1', + \ 'MODE2_FORM2', 'MODE2_FORM_MIX', 'MODE2_RAW']) + +call s:def_keywords('cdrtocTrackSubChannelMode', + \ '@cdrtocTrackFollow', + \ ['RW', 'RW_RAW']) + +syn cluster cdrtocTrackFlags + \ contains= + \ cdrtocTrackFlagNo, + \ cdrtocTrackFlagCopy, + \ cdrtocTrackFlagPreEmphasis, + \ cdrtocTrackFlag + +call s:def_keyword('cdrtocTrackFlagNo', + \ 'cdrtocTrackFlagCopy,cdrtocTrackFlagPreEmphasis', + \ 'NO') + +call s:def_keyword('cdrtocTrackFlagCopy', '@cdrtocTrackFollow', 'COPY') + +call s:def_keyword('cdrtocTrackFlagPreEmphasis', '@cdrtocTrackFollow', 'PRE_EMPHASIS') + +call s:def_keywords('cdrtocTrackFlag', + \ '@cdrtocTrackFollow', + \ ['TWO_CHANNEL_AUDIO', 'FOUR_CHANNEL_AUDIO']) + +call s:def_keyword('cdrtocTrackFlag', 'cdrtocTrackISRC', 'ISRC') + +call s:def_match('cdrtocTrackISRC', + \ '@cdrtocTrackFollow', + \ '"[[:upper:][:digit:]]\{5}\d\{7}"') + +call s:def_keyword('cdrtocTrackCDText', 'cdrtocTrackCDTextStart', 'CD_TEXT') + +call s:def_match('cdrtocTrackCDTextStart', 'cdrtocTrackCDTextLanguage', '{') + +call s:def_keyword('cdrtocTrackCDTextLanguage', 'cdrtocTrackCDTextLanguageNumber', 'LANGUAGE') + +call s:def_match('cdrtocTrackCDTextLanguageNumber', 'cdrtocTrackCDTextLanguageStart', '\<[0-7]\>') + +call s:def_match('cdrtocTrackCDTextLanguageStart', + \ 'cdrtocTrackCDTextItem,cdrtocTrackCDTextLanguageEnd', + \ '{') + +syn cluster cdrtocTrackCDTextData + \ contains= + \ cdrtocTrackCDTextDataString, + \ cdrtocTrackCDTextDataBinaryStart + +call s:def_keywords('cdrtocTrackCDTextItem', + \ '@cdrtocTrackCDTextData', + \ ['TITLE', 'PERFORMER', 'SONGWRITER', 'COMPOSER', 'ARRANGER', + \ 'MESSAGE', 'ISRC']) + +call s:def_region('cdrtocTrackCDTextDataString', + \ 'cdrtocTrackCDTextItem,cdrtocTrackCDTextLanguageEnd', + \ '"', + \ '\\\\\|\\"', + \ '"', + \ 'cdrtocTrackCDTextDataStringDelimiters', + \ 'cdrtocTrackCDTextDataStringSpecialChar') + +syn match cdrtocTrackCDTextDataStringSpecialChar + \ contained + \ display + \ '\\\%(\o\o\o\|["\\]\)' + +call s:def_match('cdrtocTrackCDTextDataBinaryStart', + \ 'cdrtocTrackCDTextDataBinaryInteger', + \ '{') + +call s:def_match('cdrtocTrackCDTextDataBinaryInteger', + \ 'cdrtocTrackCDTextDataBinarySeparator,cdrtocTrackCDTextDataBinaryEnd', + \ s:byte_pattern) + +call s:def_match('cdrtocTrackCDTextDataBinarySeparator', + \ 'cdrtocTrackCDTextDataBinaryInteger', + \ ',') + +call s:def_match('cdrtocTrackCDTextDataBinaryEnd', + \ 'cdrtocTrackCDTextItem,cdrtocTrackCDTextLanguageEnd', + \ '}') + +call s:def_match('cdrtocTrackCDTextLanguageEnd', + \ 'cdrtocTrackCDTextLanguage,cdrtocTrackCDTextEnd', + \ '}') + +call s:def_match('cdrtocTrackCDTextEnd', + \ 'cdrtocTrackPregap,@cdrtocTrackContents', + \ '}') + +call s:def_keyword('cdrtocTrackPregap', 'cdrtocTrackPregapMMSSFF', 'PREGAP') + +call s:def_match('cdrtocTrackPregapMMSSFF', + \ '@cdrtocTrackContents', + \ s:mmssff_pattern) + +syn cluster cdrtocTrackContents + \ contains= + \ cdrtocTrackSubTrack, + \ cdrtocTrackMarker + +syn cluster cdrtocTrackContentsFollow + \ contains= + \ @cdrtocTrackContents, + \ cdrtocTrackIndex, + \ cdrtocTrack + +call s:def_keywords('cdrtocTrackSubTrack', + \ 'cdrtocTrackSubTrackFileFilename', + \ ['FILE', 'AUDIOFILE']) + +call s:def_region('cdrtocTrackSubTrackFileFilename', + \ 'cdrtocTrackSubTrackFileStart', + \ '"', + \ '\\\\\|\\"', + \ '"', + \ 'cdrtocTrackSubTrackFileFilenameDelimiters', + \ 'cdrtocTrackSubTrackFileFilenameSpecialChar') + +syn match cdrtocTrackSubTrackFileFilenameSpecialChar + \ contained + \ display + \ '\\\%(\o\o\o\|["\\]\)' + +call s:def_match('cdrtocTrackSubTrackFileStart', + \ 'cdrtocTrackSubTrackFileLength,@cdrtocTrackContentsFollow', + \ s:length_pattern) + +call s:def_match('cdrtocTrackSubTrackFileLength', + \ '@cdrtocTrackContentsFollow', + \ s:length_pattern) + +call s:def_keyword('cdrtocTrackSubTrack', 'cdrtocTrackContentDatafileFilename', 'DATAFILE') + +call s:def_region('cdrtocTrackSubTrackDatafileFilename', + \ 'cdrtocTrackSubTrackDatafileLength', + \ '"', + \ '\\\\\|\\"', + \ '"', + \ 'cdrtocTrackSubTrackDatafileFilenameDelimiters', + \ 'cdrtocTrackSubTrackDatafileFilenameSpecialChar') + +syn match cdrtocTrackSubTrackdatafileFilenameSpecialChar + \ contained + \ display + \ '\\\%(\o\o\o\|["\\]\)' + +call s:def_match('cdrtocTrackDatafileLength', + \ '@cdrtocTrackContentsFollow', + \ s:length_pattern) + +call s:def_keyword('cdrtocTrackSubTrack', 'cdrtocTrackContentFifoFilename', 'DATAFILE') + +call s:def_region('cdrtocTrackSubTrackFifoFilename', + \ 'cdrtocTrackSubTrackFifoLength', + \ '"', + \ '\\\\\|\\"', + \ '"', + \ 'cdrtocTrackSubTrackFifoFilenameDelimiters', + \ 'cdrtocTrackSubTrackFifoFilenameSpecialChar') + +syn match cdrtocTrackSubTrackdatafileFilenameSpecialChar + \ contained + \ display + \ '\\\%(\o\o\o\|["\\]\)' + +call s:def_match('cdrtocTrackFifoLength', + \ '@cdrtocTrackContentsFollow', + \ s:length_pattern) + +call s:def_keyword('cdrtocTrackSubTrack', 'cdrtocTrackSilenceLength', 'SILENCE') + +call s:def_match('cdrtocTrackSilenceLength', + \ '@cdrtocTrackContentsFollow', + \ s:length_pattern) + +call s:def_keyword('cdrtocTrackSubTrack', + \ 'cdrtocTrackSubTrackZeroDataMode,' . + \ 'cdrtocTrackSubTrackZeroDataSubChannelMode,' . + \ 'cdrtocTrackSubTrackZeroDataLength', + \ 'ZERO') + +call s:def_keywords('cdrtocTrackSubTrackZeroDataMode', + \ 'cdrtocTrackSubTrackZeroSubChannelMode,cdrtocTrackSubTrackZeroDataLength', + \ ['AUDIO', 'MODE1', 'MODE1_RAW', 'MODE2', 'MODE2_FORM1', + \ 'MODE2_FORM2', 'MODE2_FORM_MIX', 'MODE2_RAW']) + +call s:def_keywords('cdrtocTrackSubTrackZeroDataSubChannelMode', + \ 'cdrtocTrackSubTrackZeroDataLength', + \ ['RW', 'RW_RAW']) + +call s:def_match('cdrtocTrackSubTrackZeroDataLength', + \ '@cdrtocTrackContentsFollow', + \ s:length_pattern) + +call s:def_keyword('cdrtocTrackMarker', + \ '@cdrtocTrackContentsFollow,cdrtocTrackMarkerStartMMSSFF', + \ 'START') + +call s:def_match('cdrtocTrackMarkerStartMMSSFF', + \ '@cdrtocTrackContentsFollow', + \ s:mmssff_pattern) + +call s:def_keyword('cdrtocTrackMarker', + \ '@cdrtocTrackContentsFollow,cdrtocTrackMarkerEndMMSSFF', + \ 'END') + +call s:def_match('cdrtocTrackMarkerEndMMSSFF', + \ '@cdrtocTrackContentsFollow', + \ s:mmssff_pattern) + +call s:def_keyword('cdrtocTrackIndex', 'cdrtocTrackIndexMMSSFF', 'INDEX') + +call s:def_match('cdrtocTrackIndexMMSSFF', + \ 'cdrtocTrackIndex,cdrtocTrack', + \ s:mmssff_pattern) + +delfunction s:def_region +delfunction s:def_match +delfunction s:def_keyword +delfunction s:def_keywords +delfunction s:def_comment + +syn sync fromstart + +hi def link cdrtocKeyword Keyword +hi def link cdrtocHeaderKeyword cdrtocKeyword +hi def link cdrtocHeaderCDText cdrtocHeaderKeyword +hi def link cdrtocDelimiter Delimiter +hi def link cdrtocCDTextDataBinaryEnd cdrtocDelimiter +hi def link cdrtocHeaderCDTextDataBinaryEnd cdrtocHeaderCDTextDataBinaryEnd +hi def link cdrtocNumber Number +hi def link cdrtocCDTextDataBinaryInteger cdrtocNumber +hi def link cdrtocHeaderCDTextDataBinaryInteger cdrtocCDTextDataBinaryInteger +hi def link cdrtocCDTextDataBinarySeparator cdrtocDelimiter +hi def link cdrtocHeaderCDTextDataBinarySeparator cdrtocCDTextDataBinarySeparator +hi def link cdrtocCDTextDataBinaryStart cdrtocDelimiter +hi def link cdrtocHeaderCDTextDataBinaryStart cdrtocCDTextDataBinaryStart +hi def link cdrtocString String +hi def link cdrtocCDTextDataString cdrtocString +hi def link cdrtocHeaderCDTextDataString cdrtocCDTextDataString +hi def link cdrtocCDTextDataStringDelimiters cdrtocDelimiter +hi def link cdrtocHeaderCDTextDataStringDelimiters cdrtocCDTextDataStringDelimiters +hi def link cdrtocCDTextDataStringSpecialChar SpecialChar +hi def link cdrtocHeaderCDTextDataStringSpecialChar cdrtocCDTextDataStringSpecialChar +hi def link cdrtocCDTextEnd cdrtocDelimiter +hi def link cdrtocHeaderCDTextEnd cdrtocCDTextEnd +hi def link cdrtocType Type +hi def link cdrtocCDTextItem cdrtocType +hi def link cdrtocHeaderCDTextItem cdrtocCDTextItem +hi def link cdrtocHeaderCDTextLanguageMap cdrtocHeaderKeyword +hi def link cdrtocCDTextStart cdrtocDelimiter +hi def link cdrtocHeaderCDTextStart cdrtocCDTextStart +hi def link cdrtocHeaderCatalog cdrtocHeaderKeyword +hi def link cdrtocHeaderCatalogNumber cdrtocString +hi def link cdrtocComment Comment +hi def link cdrtocHeaderCommentInitial cdrtocComment +hi def link cdrtocHeaderLanguage cdrtocKeyword +hi def link cdrtocLanguageEnd cdrtocDelimiter +hi def link cdrtocHeaderLanguageEnd cdrtocLanguageEnd +hi def link cdrtocHeaderLanguageMapColon cdrtocDelimiter +hi def link cdrtocIdentifier Identifier +hi def link cdrtocHeaderLanguageMapCountryCode cdrtocNumber +hi def link cdrtocHeaderLanguageMapCountryCodeName cdrtocIdentifier +hi def link cdrtocHeaderLanguageMapEnd cdrtocDelimiter +hi def link cdrtocHeaderLanguageMapLanguageNumber cdrtocNumber +hi def link cdrtocHeaderLanguageMapStart cdrtocDelimiter +hi def link cdrtocLanguageNumber cdrtocNumber +hi def link cdrtocHeaderLanguageNumber cdrtocLanguageNumber +hi def link cdrtocLanguageStart cdrtocDelimiter +hi def link cdrtocHeaderLanguageStart cdrtocLanguageStart +hi def link cdrtocHeaderTOCType cdrtocType +hi def link cdrtocTodo Todo +hi def link cdrtocTrackKeyword cdrtocKeyword +hi def link cdrtocTrack cdrtocTrackKeyword +hi def link cdrtocTrackCDText cdrtocTrackKeyword +hi def link cdrtocTrackCDTextDataBinaryEnd cdrtocHeaderCDTextDataBinaryEnd +hi def link cdrtocTrackCDTextDataBinaryInteger cdrtocHeaderCDTextDataBinaryInteger +hi def link cdrtocTrackCDTextDataBinarySeparator cdrtocHeaderCDTextDataBinarySeparator +hi def link cdrtocTrackCDTextDataBinaryStart cdrtocHeaderCDTextDataBinaryStart +hi def link cdrtocTrackCDTextDataString cdrtocHeaderCDTextDataString +hi def link cdrtocTrackCDTextDataStringDelimiters cdrtocCDTextDataStringDelimiters +hi def link cdrtocTrackCDTextDataStringSpecialChar cdrtocCDTextDataStringSpecialChar +hi def link cdrtocTrackCDTextEnd cdrtocCDTextEnd +hi def link cdrtocTrackCDTextItem cdrtocCDTextItem +hi def link cdrtocTrackCDTextStart cdrtocCDTextStart +hi def link cdrtocLength cdrtocNumber +hi def link cdrtocTrackDatafileLength cdrtocLength +hi def link cdrtocTrackFifoLength cdrtocLength +hi def link cdrtocPreProc PreProc +hi def link cdrtocTrackFlag cdrtocPreProc +hi def link cdrtocTrackFlagCopy cdrtocTrackFlag +hi def link cdrtocSpecial Special +hi def link cdrtocTrackFlagNo cdrtocSpecial +hi def link cdrtocTrackFlagPreEmphasis cdrtocTrackFlag +hi def link cdrtocTrackISRC cdrtocTrackFlag +hi def link cdrtocTrackIndex cdrtocTrackKeyword +hi def link cdrtocMMSSFF cdrtocLength +hi def link cdrtocTrackIndexMMSSFF cdrtocMMSSFF +hi def link cdrtocTrackCDTextLanguage cdrtocTrackKeyword +hi def link cdrtocTrackCDTextLanguageEnd cdrtocLanguageEnd +hi def link cdrtocTrackCDTextLanguageNumber cdrtocLanguageNumber +hi def link cdrtocTrackCDTextLanguageStart cdrtocLanguageStart +hi def link cdrtocTrackContents StorageClass +hi def link cdrtocTrackMarker cdrtocTrackContents +hi def link cdrtocTrackMarkerEndMMSSFF cdrtocMMSSFF +hi def link cdrtocTrackMarkerStartMMSSFF cdrtocMMSSFF +hi def link cdrtocTrackMode Type +hi def link cdrtocTrackPregap cdrtocTrackContents +hi def link cdrtocTrackPregapMMSSFF cdrtocMMSSFF +hi def link cdrtocTrackSilenceLength cdrtocLength +hi def link cdrtocTrackSubChannelMode cdrtocPreProc +hi def link cdrtocTrackSubTrack cdrtocTrackContents +hi def link cdrtocFilename cdrtocString +hi def link cdrtocTrackSubTrackDatafileFilename cdrtocFilename +hi def link cdrtocTrackSubTrackDatafileFilenameDelimiters cdrtocTrackSubTrackDatafileFilename +hi def link cdrtocSpecialChar SpecialChar +hi def link cdrtocTrackSubTrackDatafileFilenameSpecialChar cdrtocSpecialChar +hi def link cdrtocTrackSubTrackDatafileLength cdrtocLength +hi def link cdrtocTrackSubTrackFifoFilename cdrtocFilename +hi def link cdrtocTrackSubTrackFifoFilenameDelimiters cdrtocTrackSubTrackFifoFilename +hi def link cdrtocTrackSubTrackFifoFilenameSpecialChar cdrtocSpecialChar +hi def link cdrtocTrackSubTrackFifoLength cdrtocLength +hi def link cdrtocTrackSubTrackFileFilename cdrtocFilename +hi def link cdrtocTrackSubTrackFileFilenameDelimiters cdrtocTrackSubTrackFileFilename +hi def link cdrtocTrackSubTrackFileFilenameSpecialChar cdrtocSpecialChar +hi def link cdrtocTrackSubTrackFileLength cdrtocLength +hi def link cdrtocTrackSubTrackFileStart cdrtocLength +hi def link cdrtocTrackSubTrackZeroDataLength cdrtocLength +hi def link cdrtocTrackSubTrackZeroDataMode Type +hi def link cdrtocTrackSubTrackZeroDataSubChannelMode cdrtocPreProc +hi def link cdrtocTrackSubTrackdatafileFilenameSpecialChar cdrtocSpecialChar + +let b:current_syntax = "cdrtoc" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/cf.vim b/.config/vim/syntax/cf.vim new file mode 100644 index 0000000..04f9f59 --- /dev/null +++ b/.config/vim/syntax/cf.vim @@ -0,0 +1,1018 @@ +" Vim syntax file +" +" Language: CFML (ColdFusion) +" Author: Ernst M. van der Linden +" License: The MIT License (MIT) +" +" Maintainer: Ernst M. van der Linden +" URL: https://github.com/ernstvanderlinden/vim-coldfusion +" Last Change: 2017 Nov 28 +" +" Filenames: *.cfc *.cfm + +" Quit when a syntax file was already loaded. +if exists("b:current_syntax") + finish +endif + +" Using line continuation here. +let s:cpo_save=&cpo +set cpo-=C + +sy sync fromstart +" 20171126: disabled as we have fast computers now. +"sy sync maxlines=2000 +sy case ignore + +" INCLUDES {{{ +sy include @sqlSyntax $VIMRUNTIME/syntax/sql.vim +" 20161010: Disabled include html highlighting as it contains huge keywords +" regex, so it will have impact on performance. Use own simple SGML tag +" coloring instead. +"runtime! syntax/html.vim +" / INCLUDES }}} + +" NUMBER {{{ +sy match cfmlNumber + \ "\v<\d+>" +" / NUMBER }}} + +" EQUAL SIGN {{{ +sy match cfmlEqualSign + \ "\v\=" +" / EQUAL SIGN }}} + +" BOOLEAN {{{ +sy match cfmlBoolean + \ "\v<(true|false)>" +" / BOOLEAN }}} + +" HASH SURROUNDED {{{ +sy region cfmlHashSurround + \ keepend + \ oneline + \ start="#" + \ end="#" + \ skip="##" + \ contains= + \@cfmlOperator, + \@cfmlPunctuation, + \cfmlBoolean, + \cfmlCoreKeyword, + \cfmlCoreScope, + \cfmlCustomKeyword, + \cfmlCustomScope, + \cfmlEqualSign, + \cfmlFunctionName, + \cfmlNumber +" / HASH SURROUNDED }}} + +" OPERATOR {{{ + +" OPERATOR - ARITHMETIC {{{ +" +7 -7 +" ++i --i +" i++ i-- +" + - * / % +" += -= *= /= %= +" ^ mod +sy match cfmlArithmeticOperator + \ "\v + \(\+|-)\ze\d + \|(\+\+|--)\ze\w + \|\w\zs(\+\+|--) + \|(\s( + \(\+|-|\*|\/|\%){1}\={,1} + \|\^ + \|mod + \)\s) + \" +" / OPERATOR - ARITHMETIC }}} + +" OPERATOR - BOOLEAN {{{ +" not and or xor eqv imp +" ! && || +sy match cfmlBooleanOperator + \ "\v\s + \(not|and|or|xor|eqv|imp + \|\!|\&\&|\|\| + \)(\s|\)) + \|\s\!\ze\w + \" +" / OPERATOR - BOOLEAN }}} + +" OPERATOR - DECISION {{{ +"is|equal|eq +"is not|not equal|neq +"contains|does not contain +"greater than|gt +"less than|lt +"greater than or equal to|gte|ge +"less than or equal to|lte|le +"==|!=|>|<|>=|<= +sy match cfmlDecisionOperator + \ "\v\s + \(is|equal|eq + \|is not|not equal|neq + \|contains|does not contain + \|greater than|gt + \|less than|lt + \|greater than or equal to|gte|ge + \|less than or equal to|lte|le + \|(!|\<|\>|\=){1}\= + \|\< + \|\> + \)\s" +" / OPERATOR - DECISION }}} + +" OPERATOR - STRING {{{ +" & +" &= +sy match cfmlStringOperator + \ "\v\s\&\={,1}\s" +" / OPERATOR - STRING }}} + +" OPERATOR - TERNARY {{{ +" ? : +sy match cfmlTernaryOperator + \ "\v\s + \\?|\: + \\s" +" / OPERATOR - TERNARY }}} + +sy cluster cfmlOperator + \ contains= + \cfmlArithmeticOperator, + \cfmlBooleanOperator, + \cfmlDecisionOperator, + \cfmlStringOperator, + \cfmlTernaryOperator +" / OPERATOR }}} + +" PARENTHESIS {{{ +sy cluster cfmlParenthesisRegionContains + \ contains= + \@cfmlAttribute, + \@cfmlComment, + \@cfmlFlowStatement, + \@cfmlOperator, + \@cfmlPunctuation, + \cfmlBoolean, + \cfmlBrace, + \cfmlCoreKeyword, + \cfmlCoreScope, + \cfmlCustomKeyword, + \cfmlCustomScope, + \cfmlEqualSign, + \cfmlFunctionName, + \cfmlNumber, + \cfmlStorageKeyword, + \cfmlStorageType + +sy region cfmlParenthesisRegion1 + \ extend + \ matchgroup=cfmlParenthesis1 + \ transparent + \ start=/(/ + \ end=/)/ + \ contains= + \cfmlParenthesisRegion2, + \@cfmlParenthesisRegionContains +sy region cfmlParenthesisRegion2 + \ matchgroup=cfmlParenthesis2 + \ transparent + \ start=/(/ + \ end=/)/ + \ contains= + \cfmlParenthesisRegion3, + \@cfmlParenthesisRegionContains +sy region cfmlParenthesisRegion3 + \ matchgroup=cfmlParenthesis3 + \ transparent + \ start=/(/ + \ end=/)/ + \ contains= + \cfmlParenthesisRegion1, + \@cfmlParenthesisRegionContains +sy cluster cfmlParenthesisRegion + \ contains= + \cfmlParenthesisRegion1, + \cfmlParenthesisRegion2, + \cfmlParenthesisRegion3 +" / PARENTHESIS }}} + +" BRACE {{{ +sy match cfmlBrace + \ "{\|}" + +sy region cfmlBraceRegion + \ extend + \ fold + \ keepend + \ transparent + \ start="{" + \ end="}" +" / BRACE }}} + +" PUNCTUATION {{{ + +" PUNCTUATION - BRACKET {{{ +sy match cfmlBracket + \ "\(\[\|\]\)" + \ contained +" / PUNCTUATION - BRACKET }}} + +" PUNCTUATION - CHAR {{{ +sy match cfmlComma "," +sy match cfmlDot "\." +sy match cfmlSemiColon ";" + +" / PUNCTUATION - CHAR }}} + +" PUNCTUATION - QUOTE {{{ +sy region cfmlSingleQuotedValue + \ matchgroup=cfmlSingleQuote + \ start=/'/ + \ skip=/''/ + \ end=/'/ + \ contains= + \cfmlHashSurround + +sy region cfmlDoubleQuotedValue + \ matchgroup=cfmlDoubleQuote + \ start=/"/ + \ skip=/""/ + \ end=/"/ + \ contains= + \cfmlHashSurround + +sy cluster cfmlQuotedValue + \ contains= + \cfmlDoubleQuotedValue, + \cfmlSingleQuotedValue + +sy cluster cfmlQuote + \ contains= + \cfmlDoubleQuote, + \cfmlSingleQuote +" / PUNCTUATION - QUOTE }}} + +sy cluster cfmlPunctuation + \ contains= + \@cfmlQuote, + \@cfmlQuotedValue, + \cfmlBracket, + \cfmlComma, + \cfmlDot, + \cfmlSemiColon + +" / PUNCTUATION }}} + +" TAG START AND END {{{ +" tag start +" +" s^^ e +sy region cfmlTagStart + \ keepend + \ transparent + \ start="\c +" s^^^ e +sy match cfmlTagEnd + \ transparent + \ "\c]*>" + \ contains= + \cfmlTagBracket, + \cfmlTagName + +" tag bracket +" +" ^^ ^ +sy match cfmlTagBracket + \ contained + \ "\(<\|>\|\/\)" + +" tag name +" +" s^^^e +sy match cfmlTagName + \ contained + \ "\v<\/*\zs\ccf\w*" +" / TAG START AND END }}} + +" ATTRIBUTE NAME AND VALUE {{{ +sy match cfmlAttrName + \ contained + \ "\v(var\s)@ +" ^^^^^^^^^^^^^e +sy region cfmlComponentTagRegion + \ fold + \ keepend + \ transparent + \ start="\c +" ^^^^^^^^^^^^e +sy region cfmlFunctionTagRegion + \ fold + \ keepend + \ transparent + \ start="\c +" ^^^^^^e +sy region cfmlIfTagRegion + \ fold + \ keepend + \ transparent + \ start="\c +" ^^^^^^^^e +sy region cfmlLoopTagRegion + \ fold + \ keepend + \ transparent + \ start="\c +" ^^^^^^^^^^e +sy region cfmlOutputTagRegion + \ fold + \ keepend + \ transparent + \ start="\c +" ^^^^^^^^^e + "\@cfmlSqlStatement, +sy region cfmlQueryTagRegion + \ fold + \ keepend + \ transparent + \ start="\c +" ^^^^^^^^^^^^^e +sy region cfmlSavecontentTagRegion + \ fold + \ keepend + \ transparent + \ start="\c +" s^^^^^^^^^ +" +" ^^^^^^^^^^e +"\cfmlCustomScope, +sy region cfmlScriptTagRegion + \ fold + \ keepend + \ transparent + \ start="\c" + \ end="\c" + \ contains= + \@cfmlComment, + \@cfmlFlowStatement, + \cfmlHashSurround, + \@cfmlOperator, + \@cfmlParenthesisRegion, + \@cfmlPunctuation, + \cfmlBoolean, + \cfmlBrace, + \cfmlCoreKeyword, + \cfmlCoreScope, + \cfmlCustomKeyword, + \cfmlCustomScope, + \cfmlEqualSign, + \cfmlFunctionDefinition, + \cfmlFunctionName, + \cfmlNumber, + \cfmlOddFunction, + \cfmlStorageKeyword, + \cfmlTagEnd, + \cfmlTagStart +" / CFSCRIPT REGION AND FOLD }}} + +" CFSWITCH REGION AND FOLD {{{ +" +" ^^^^^^^^^^e +sy region cfmlSwitchTagRegion + \ fold + \ keepend + \ transparent + \ start="\c +" ^^^^^^^^^^^^^^^e +sy region cfmlTransactionTagRegion + \ fold + \ keepend + \ transparent + \ start="\c +" s^^^ ^ +" +" ^^^^^ e +sy region cfmlCustomTagRegion + \ fold + \ keepend + \ transparent + \ start="\c]*>" + \ end="\c]*>" +" / CUSTOM TAG REGION AND FOLD }}} + +" / TAG REGION AND FOLDING }}} + +" COMMENT {{{ + +" COMMENT BLOCK {{{ +" /*...*/ +" s^ ^e +sy region cfmlCommentBlock + \ keepend + \ start="/\*" + \ end="\*/" + \ contains= + \cfmlMetaData +" / COMMENT BLOCK }}} + +" COMMENT LINE {{{ +" //... +" s^ +sy match cfmlCommentLine + \ "\/\/.*" +" / COMMENT LINE }}} + +sy cluster cfmlComment + \ contains= + \cfmlCommentBlock, + \cfmlCommentLine +" / COMMENT }}} + +" TAG COMMENT {{{ +" +" s^^^^ ^^^e +sy region cfmlTagComment + \ keepend + \ start="" + \ contains= + \cfmlTagComment +" / TAG COMMENT }}} + +" FLOW STATEMENT {{{ +" BRANCH FLOW KEYWORD {{{ +sy keyword cfmlBranchFlowKeyword + \ break + \ continue + \ return + +" / BRANCH KEYWORD }}} + +" DECISION FLOW KEYWORD {{{ +sy keyword cfmlDecisionFlowKeyword + \ case + \ defaultcase + \ else + \ if + \ switch + +" / DECISION FLOW KEYWORD }}} + +" LOOP FLOW KEYWORD {{{ +sy keyword cfmlLoopFlowKeyword + \ do + \ for + \ in + \ while + +" / LOOP FLOW KEYWORD }}} + +" TRY FLOW KEYWORD {{{ +sy keyword cfmlTryFlowKeyword + \ catch + \ finally + \ rethrow + \ throw + \ try + +" / TRY FLOW KEYWORD }}} + +sy cluster cfmlFlowStatement + \ contains= + \cfmlBranchFlowKeyword, + \cfmlDecisionFlowKeyword, + \cfmlLoopFlowKeyword, + \cfmlTryFlowKeyword + +" / FLOW STATEMENT }}} + +" STORAGE KEYWORD {{{ +sy keyword cfmlStorageKeyword + \ var +" / STORAGE KEYWORD }}} + +" STORAGE TYPE {{{ +sy match cfmlStorageType + \ contained + \ "\v< + \(any + \|array + \|binary + \|boolean + \|date + \|numeric + \|query + \|string + \|struct + \|uuid + \|void + \|xml + \){1}\ze(\s*\=)@!" +" / STORAGE TYPE }}} + +" CORE KEYWORD {{{ +sy match cfmlCoreKeyword + \ "\v< + \(new + \|required + \)\ze\s" +" / CORE KEYWORD }}} + +" CORE SCOPE {{{ +sy match cfmlCoreScope + \ "\v< + \(application + \|arguments + \|attributes + \|caller + \|cfcatch + \|cffile + \|cfhttp + \|cgi + \|client + \|cookie + \|form + \|local + \|request + \|server + \|session + \|super + \|this + \|thisTag + \|thread + \|variables + \|url + \){1}\ze(,|\.|\[|\)|\s)" +" / CORE SCOPE }}} + +" SQL STATEMENT {{{ +sy cluster cfmlSqlStatement + \ contains= + \@cfmlParenthesisRegion, + \@cfmlQuote, + \@cfmlQuotedValue, + \@sqlSyntax, + \cfmlBoolean, + \cfmlDot, + \cfmlEqualSign, + \cfmlFunctionName, + \cfmlHashSurround, + \cfmlNumber +" / SQL STATEMENT }}} + +" TAG IN SCRIPT {{{ +sy match cfmlTagNameInScript + \ "\vcf_*\w+\s*\ze\(" +" / TAG IN SCRIPT }}} + +" METADATA {{{ +sy region cfmlMetaData + \ contained + \ keepend + \ start="@\w\+" + \ end="$" + \ contains= + \cfmlMetaDataName + +sy match cfmlMetaDataName + \ contained + \ "@\w\+" +" / METADATA }}} + +" COMPONENT DEFINITION {{{ +sy region cfmlComponentDefinition + \ start="component" + \ end="{"me=e-1 + \ contains= + \@cfmlAttribute, + \cfmlComponentKeyword + +sy match cfmlComponentKeyword + \ contained + \ "\v" +" / COMPONENT DEFINITION }}} + +" INTERFACE DEFINITION {{{ +sy match cfmlInterfaceDefinition + \ "interface\s.*{"me=e-1 + \ contains= + \cfmlInterfaceKeyword + +sy match cfmlInterfaceKeyword + \ contained + \ "\v" +" / INTERFACE DEFINITION }}} + +" PROPERTY {{{ +sy region cfmlProperty + \ transparent + \ start="\v" + \ end=";"me=e-1 + \ contains= + \@cfmlQuotedValue, + \cfmlAttrEqualSign, + \cfmlAttrName, + \cfmlAttrValue, + \cfmlPropertyKeyword + +sy match cfmlPropertyKeyword + \ contained + \ "\v" +" / PROPERTY }}} + +" FUNCTION DEFINITION {{{ +sy match cfmlFunctionDefinition + \ "\v + \(<(public|private|package)\s){,1} + \(< + \(any + \|array + \|binary + \|boolean + \|date + \|numeric + \|query + \|string + \|struct + \|uuid + \|void + \|xml + \)\s){,1} + \" +" / FUNCTION KEYWORD }}} + +" FUNCTION MODIFIER {{{ +sy match cfmlFunctionModifier + \ contained + \ "\v< + \(public + \|private + \|package + \)>" +" / FUNCTION MODIFIER }}} + +" FUNCTION RETURN TYPE {{{ +sy match cfmlFunctionReturnType + \ contained + \ "\v + \(any + \|array + \|binary + \|boolean + \|date + \|numeric + \|query + \|string + \|struct + \|uuid + \|void + \|xml + \)" +" / FUNCTION RETURN TYPE }}} + +" FUNCTION NAME {{{ +" specific regex for core functions decreases performance +" so use the same highlighting for both function types +sy match cfmlFunctionName + \ "\v<(cf|if|elseif|throw)@!\w+\s*\ze\(" +" / FUNCTION NAME }}} + +" / FUNCTION DEFINITION }}} + +" ODD FUNCTION {{{ +sy region cfmlOddFunction + \ transparent + \ start="\v< + \(abort + \|exit + \|import + \|include + \|lock + \|pageencoding + \|param + \|savecontent + \|thread + \|transaction + \){1}" + \ end="\v(\{|;)"me=e-1 + \ contains= + \@cfmlQuotedValue, + \cfmlAttrEqualSign, + \cfmlAttrName, + \cfmlAttrValue, + \cfmlCoreKeyword, + \cfmlOddFunctionKeyword, + \cfmlCoreScope + +" ODD FUNCTION KEYWORD {{{ +sy match cfmlOddFunctionKeyword + \ contained + \ "\v< + \(abort + \|exit + \|import + \|include + \|lock + \|pageencoding + \|param + \|savecontent + \|thread + \|transaction + \)\ze(\s|$|;)" +" / ODD FUNCTION KEYWORD }}} + +" / ODD FUNCTION }}} + +" CUSTOM {{{ + +" CUSTOM KEYWORD {{{ +sy match cfmlCustomKeyword + \ contained + \ "\v< + \(customKeyword1 + \|customKeyword2 + \|customKeyword3 + \)>" +" / CUSTOM KEYWORD }}} + +" CUSTOM SCOPE {{{ +sy match cfmlCustomScope + \ contained + \ "\v< + \(prc + \|rc + \|event + \|(\w+Service) + \){1}\ze(\.|\[)" +" / CUSTOM SCOPE }}} + +" / CUSTOM }}} + +" SGML TAG START AND END {{{ +" SGML tag start +" <...> +" s^^^e +sy region cfmlSGMLTagStart + \ keepend + \ transparent + \ start="\v(\ +" s^^^^e +sy match cfmlSGMLTagEnd + \ transparent + \ "\v(\<\/cf)@!\zs\<\/\w+\>" + \ contains= + \cfmlTagBracket, + \cfmlSGMLTagName + +" SGML tag name +" <...> +" s^^^e +sy match cfmlSGMLTagName + \ contained + \ "\v(\<\/*)\zs\w+" + +" / SGML TAG START AND END }}} + +" HIGHLIGHTING {{{ + +hi link cfmlNumber Number +hi link cfmlBoolean Boolean +hi link cfmlEqualSign Keyword +" HASH SURROUND +hi link cfmlHash PreProc +hi link cfmlHashSurround PreProc +" OPERATOR +hi link cfmlArithmeticOperator Function +hi link cfmlBooleanOperator Function +hi link cfmlDecisionOperator Function +hi link cfmlStringOperator Function +hi link cfmlTernaryOperator Function +" PARENTHESIS +hi link cfmlParenthesis1 Statement +hi link cfmlParenthesis2 String +hi link cfmlParenthesis3 Delimiter +" BRACE +hi link cfmlBrace PreProc +" PUNCTUATION - BRACKET +hi link cfmlBracket Statement +" PUNCTUATION - CHAR +hi link cfmlComma Comment +hi link cfmlDot Comment +hi link cfmlSemiColon Comment +" PUNCTUATION - QUOTE +hi link cfmlDoubleQuote String +hi link cfmlDoubleQuotedValue String +hi link cfmlSingleQuote String +hi link cfmlSingleQuotedValue String +" TAG START AND END +hi link cfmlTagName Function +hi link cfmlTagBracket Comment +" ATTRIBUTE NAME AND VALUE +hi link cfmlAttrName Type +hi link cfmlAttrValue Special +" COMMENT +hi link cfmlCommentBlock Comment +hi link cfmlCommentLine Comment +hi link cfmlTagComment Comment +" FLOW STATEMENT +hi link cfmlDecisionFlowKeyword Conditional +hi link cfmlLoopFlowKeyword Repeat +hi link cfmlTryFlowKeyword Exception +hi link cfmlBranchFlowKeyword Keyword +" STORAGE KEYWORD +hi link cfmlStorageKeyword Keyword +" STORAGE TYPE +hi link cfmlStorageType Keyword +" CORE KEYWORD +hi link cfmlCoreKeyword PreProc +" CORE SCOPE +hi link cfmlCoreScope Keyword +" TAG IN SCRIPT +hi link cfmlTagNameInScript Function +" METADATA +" meta data value = cfmlMetaData +hi link cfmlMetaData String +hi link cfmlMetaDataName Type +" COMPONENT DEFINITION +hi link cfmlComponentKeyword Keyword +" INTERFACE DEFINITION +hi link cfmlInterfaceKeyword Keyword +" PROPERTY +hi link cfmlPropertyKeyword Keyword +" FUNCTION DEFINITION +hi link cfmlFunctionKeyword Keyword +hi link cfmlFunctionModifier Keyword +hi link cfmlFunctionReturnType Keyword +hi link cfmlFunctionName Function +" ODD FUNCTION +hi link cfmlOddFunctionKeyword Function +" CUSTOM +hi link cfmlCustomKeyword Keyword +hi link cfmlCustomScope Structure +" SGML TAG +hi link cfmlSGMLTagName Ignore + +" / HIGHLIGHTING }}} + +let b:current_syntax = "cfml" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/cfg.vim b/.config/vim/syntax/cfg.vim new file mode 100644 index 0000000..6978876 --- /dev/null +++ b/.config/vim/syntax/cfg.vim @@ -0,0 +1,49 @@ +" Vim syntax file +" Language: Good old CFG files +" Maintainer: Igor N. Prischepoff (igor@tyumbit.ru, pri_igor@mail.ru) +" Last Change: 2012 Aug 11 +" 2024 Nov 14 by Vim project: // only denotes a comment when starting a line (#16051) + +" quit when a syntax file was already loaded +if exists ("b:current_syntax") + finish +endif + +" case off +syn case ignore +syn keyword CfgOnOff ON OFF YES NO TRUE FALSE contained +syn match UncPath "\\\\\p*" contained +"Dos Drive:\Path +syn match CfgDirectory "[a-zA-Z]:\\\p*" contained +"Parameters +syn match CfgParams ".\{0}="me=e-1 contains=CfgComment +"... and their values (don't want to highlight '=' sign) +syn match CfgValues "=.*"hs=s+1 contains=CfgDirectory,UncPath,CfgComment,CfgString,CfgOnOff + +" Sections +syn match CfgSection "\[.*\]" +syn match CfgSection "{.*}" + +" String +syn match CfgString "\".*\"" contained +syn match CfgString "'.*'" contained + +" Comments (Everything before '#' or ';' or leading '//') +syn match CfgComment "#.*" +syn match CfgComment ";.*" +syn match CfgComment "^\s*\/\/.*" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link CfgOnOff Label +hi def link CfgComment Comment +hi def link CfgSection Type +hi def link CfgString String +hi def link CfgParams Keyword +hi def link CfgValues Constant +hi def link CfgDirectory Directory +hi def link UncPath Directory + + +let b:current_syntax = "cfg" +" vim:ts=8 diff --git a/.config/vim/syntax/cgdbrc.vim b/.config/vim/syntax/cgdbrc.vim new file mode 100644 index 0000000..1ace370 --- /dev/null +++ b/.config/vim/syntax/cgdbrc.vim @@ -0,0 +1,16 @@ +" Vim syntax file +" Language: cgdbrc +" Maintainer: Wu, Zhenyu +" Documentation: https://cgdb.github.io/docs/Configuring-CGDB.html +" Latest Revision: 2024-04-09 + +if exists('b:current_syntax') + finish +endif +let b:current_syntax = 'cgdbrc' + +runtime! syntax/vim.vim + +syn region cgdbComment start="^\s*\#" skip="\\$" end="$" contains=@Spell + +highlight default link cgdbComment Comment diff --git a/.config/vim/syntax/ch.vim b/.config/vim/syntax/ch.vim new file mode 100644 index 0000000..61f475b --- /dev/null +++ b/.config/vim/syntax/ch.vim @@ -0,0 +1,38 @@ +" Vim syntax file +" Language: Ch +" Maintainer: SoftIntegration, Inc. +" URL: http://www.softintegration.com/download/vim/syntax/ch.vim +" Last change: 2004 Sep 01 +" Created based on cpp.vim +" +" Ch is a C/C++ interpreter with many high level extensions +" + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Read the C syntax to start with +runtime! syntax/c.vim +unlet b:current_syntax + +" Ch extentions + +syn keyword chStatement new delete this foreach +syn keyword chAccess public private +syn keyword chStorageClass __declspec(global) __declspec(local) +syn keyword chStructure class +syn keyword chType string_t array + +" Default highlighting + +hi def link chAccess chStatement +hi def link chExceptions Exception +hi def link chStatement Statement +hi def link chType Type +hi def link chStructure Structure + +let b:current_syntax = "ch" + +" vim: ts=8 diff --git a/.config/vim/syntax/chaiscript.vim b/.config/vim/syntax/chaiscript.vim new file mode 100644 index 0000000..9925ba5 --- /dev/null +++ b/.config/vim/syntax/chaiscript.vim @@ -0,0 +1,94 @@ +" Vim syntax file +" Language: ChaiScript +" Maintainer: Jason Turner + +" Quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +end + +syn case match + +" syncing method +syn sync fromstart + +" Strings +syn region chaiscriptString start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=chaiscriptSpecial,chaiscriptEval,@Spell + +" Escape characters +syn match chaiscriptSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}" + +" String evals +syn region chaiscriptEval contained start="${" end="}" + +" integer number +syn match chaiscriptNumber "\<\d\+\>" + +" floating point number, with dot, optional exponent +syn match chaiscriptFloat "\<\d\+\.\d*\%(e[-+]\=\d\+\)\=\>" + +" floating point number, starting with a dot, optional exponent +syn match chaiscriptFloat "\.\d\+\%(e[-+]\=\d\+\)\=\>" + +" floating point number, without dot, with exponent +syn match chaiscriptFloat "\<\d\+e[-+]\=\d\+\>" + +" Hex strings +syn match chaiscriptNumber "\<0x\x\+\>" + +" Binary strings +syn match chaiscriptNumber "\<0b[01]\+\>" + +" Various language features +syn keyword chaiscriptCond if else +syn keyword chaiscriptRepeat while for do +syn keyword chaiscriptStatement break continue return +syn keyword chaiscriptExceptions try catch throw + +"Keyword +syn keyword chaiscriptKeyword def true false attr + +"Built in types +syn keyword chaiscriptType fun var + +"Built in funcs, keep it simple +syn keyword chaiscriptFunc eval throw + +"Let's treat all backtick operator function lookups as built in too +syn region chaiscriptFunc matchgroup=chaiscriptFunc start="`" end="`" + +" Account for the "[1..10]" syntax, treating it as an operator +" Intentionally leaving out all of the normal, well known operators +syn match chaiscriptOperator "\.\." + +" Guard separator as an operator +syn match chaiscriptOperator ":" + +" Comments +syn match chaiscriptComment "//.*$" contains=@Spell +syn region chaiscriptComment matchgroup=chaiscriptComment start="/\*" end="\*/" contains=@Spell + + + +hi def link chaiscriptExceptions Exception +hi def link chaiscriptKeyword Keyword +hi def link chaiscriptStatement Statement +hi def link chaiscriptRepeat Repeat +hi def link chaiscriptString String +hi def link chaiscriptNumber Number +hi def link chaiscriptFloat Float +hi def link chaiscriptOperator Operator +hi def link chaiscriptConstant Constant +hi def link chaiscriptCond Conditional +hi def link chaiscriptFunction Function +hi def link chaiscriptComment Comment +hi def link chaiscriptTodo Todo +hi def link chaiscriptError Error +hi def link chaiscriptSpecial SpecialChar +hi def link chaiscriptFunc Identifier +hi def link chaiscriptType Type +hi def link chaiscriptEval Special + +let b:current_syntax = "chaiscript" + +" vim: nowrap sw=2 sts=2 ts=8 noet diff --git a/.config/vim/syntax/change.vim b/.config/vim/syntax/change.vim new file mode 100644 index 0000000..a92767e --- /dev/null +++ b/.config/vim/syntax/change.vim @@ -0,0 +1,29 @@ +" Vim syntax file +" Language: WEB Changes +" Maintainer: Andreas Scherer +" Last Change: April 25, 2001 + +" Details of the change mechanism of the WEB and CWEB languages can be found +" in the articles by Donald E. Knuth and Silvio Levy cited in "web.vim" and +" "cweb.vim" respectively. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" We distinguish two groups of material, (a) stuff between @x..@y, and +" (b) stuff between @y..@z. WEB/CWEB ignore everything else in a change file. +syn region changeFromMaterial start="^@x.*$"ms=e+1 end="^@y.*$"me=s-1 +syn region changeToMaterial start="^@y.*$"ms=e+1 end="^@z.*$"me=s-1 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link changeFromMaterial String +hi def link changeToMaterial Statement + + +let b:current_syntax = "change" + +" vim: ts=8 diff --git a/.config/vim/syntax/changelog.vim b/.config/vim/syntax/changelog.vim new file mode 100644 index 0000000..cf9021e --- /dev/null +++ b/.config/vim/syntax/changelog.vim @@ -0,0 +1,58 @@ +" Vim syntax file +" Language: generic ChangeLog file +" Written By: Gediminas Paulauskas +" Maintainer: Corinna Vinschen +" Last Change: June 1, 2003 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +if exists('b:changelog_spacing_errors') + let s:spacing_errors = b:changelog_spacing_errors +elseif exists('g:changelog_spacing_errors') + let s:spacing_errors = g:changelog_spacing_errors +else + let s:spacing_errors = 1 +endif + +if s:spacing_errors + syn match changelogError "^ \+" +endif + +syn match changelogText "^\s.*$" contains=changelogMail,changelogNumber,changelogMonth,changelogDay,changelogError +syn match changelogHeader "^\S.*$" contains=changelogNumber,changelogMonth,changelogDay,changelogMail +syn region changelogFiles start="^\s\+[+*]\s" end=":" end="^$" contains=changelogBullet,changelogColon,changelogFuncs,changelogError keepend +syn region changelogFiles start="^\s\+[([]" end=":" end="^$" contains=changelogBullet,changelogColon,changelogFuncs,changelogError keepend +syn match changelogFuncs contained "(.\{-})" extend +syn match changelogFuncs contained "\[.\{-}]" extend +syn match changelogColon contained ":" + +syn match changelogBullet contained "^\s\+[+*]\s" contains=changelogError +syn match changelogMail contained "<[A-Za-z0-9\._:+-]\+@[A-Za-z0-9\._-]\+>" +syn keyword changelogMonth contained jan feb mar apr may jun jul aug sep oct nov dec +syn keyword changelogDay contained mon tue wed thu fri sat sun +syn match changelogNumber contained "[.-]*[0-9]\+" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link changelogText Normal +hi def link changelogBullet Type +hi def link changelogColon Type +hi def link changelogFiles Comment +hi def link changelogFuncs Comment +hi def link changelogHeader Statement +hi def link changelogMail Special +hi def link changelogNumber Number +hi def link changelogMonth Number +hi def link changelogDay Number +hi def link changelogError Folded + + +let b:current_syntax = "changelog" + +" vim: ts=8 diff --git a/.config/vim/syntax/chaskell.vim b/.config/vim/syntax/chaskell.vim new file mode 100644 index 0000000..4b1e8c5 --- /dev/null +++ b/.config/vim/syntax/chaskell.vim @@ -0,0 +1,14 @@ +" Vim syntax file +" Language: Haskell supporting c2hs binding hooks +" Maintainer: Armin Sander +" Last Change: 2001 November 1 +" +" 2001 November 1: Changed commands for sourcing haskell.vim + +" Enable binding hooks +let b:hs_chs=1 + +" Include standard Haskell highlighting +runtime! syntax/haskell.vim + +" vim: ts=8 diff --git a/.config/vim/syntax/chatito.vim b/.config/vim/syntax/chatito.vim new file mode 100644 index 0000000..d89307c --- /dev/null +++ b/.config/vim/syntax/chatito.vim @@ -0,0 +1,62 @@ +" Vim syntax file +" Language: Chatito +" Maintainer: ObserverOfTime +" Filenames: *.chatito +" Last Change: 2022 Sep 19 + +if exists('b:current_syntax') + finish +endif + +" Comment +syn keyword chatitoTodo contained TODO FIXME XXX +syn match chatitoComment /^#.*/ contains=chatitoTodo,@Spell +syn match chatitoComment +^//.*+ contains=chatitoTodo,@Spell + +" Import +syn match chatitoImport /^import \+.*$/ transparent contains=chatitoImportKeyword,chatitoImportFile +syn keyword chatitoImportKeyword import contained nextgroup=chatitoImportFile +syn match chatitoImportFile /.*$/ contained skipwhite + +" Intent +syn match chatitoIntent /^%\[[^\]?]\+\]\((.\+)\)\=$/ contains=chatitoArgs + +" Slot +syn match chatitoSlot /^@\[[^\]?#]\+\(#[^\]?#]\+\)\=\]\((.\+)\)\=$/ contains=chatitoArgs,chatitoVariation +syn match chatitoSlot /@\[[^\]?#]\+\(#[^\]?#]\+\)\=?\=\]/ contained contains=chatitoOpt,chatitoVariation + +" Alias +syn match chatitoAlias /^\~\[[^\]?]\+\]\=$/ +syn match chatitoAlias /\~\[[^\]?]\+?\=\]/ contained contains=chatitoOpt + +" Probability +syn match chatitoProbability /\*\[\d\+\(\.\d\+\)\=%\=\]/ contained + +" Optional +syn match chatitoOpt '?' contained + +" Arguments +syn match chatitoArgs /(.\+)/ contained + +" Variation +syn match chatitoVariation /#[^\]?#]\+/ contained + +" Value +syn match chatitoValue /^ \{4\}\zs.\+$/ contains=chatitoProbability,chatitoSlot,chatitoAlias,@Spell + +" Errors +syn match chatitoError /^\t/ + +hi def link chatitoAlias String +hi def link chatitoArgs Special +hi def link chatitoComment Comment +hi def link chatitoError Error +hi def link chatitoImportKeyword Include +hi def link chatitoIntent Statement +hi def link chatitoOpt SpecialChar +hi def link chatitoProbability Number +hi def link chatitoSlot Identifier +hi def link chatitoTodo Todo +hi def link chatitoVariation Special + +let b:current_syntax = 'chatito' diff --git a/.config/vim/syntax/cheetah.vim b/.config/vim/syntax/cheetah.vim new file mode 100644 index 0000000..9567ecb --- /dev/null +++ b/.config/vim/syntax/cheetah.vim @@ -0,0 +1,47 @@ +" Vim syntax file +" Language: Cheetah template engine +" Maintainer: Max Ischenko +" Last Change: 2003-05-11 +" +" Missing features: +" match invalid syntax, like bad variable ref. or unmatched closing tag +" PSP-style tags: <% .. %> (obsoleted feature) +" doc-strings and header comments (rarely used feature) + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syntax case match + +syn keyword cheetahKeyword contained if else unless elif for in not +syn keyword cheetahKeyword contained while repeat break continue pass end +syn keyword cheetahKeyword contained set del attr def global include raw echo +syn keyword cheetahKeyword contained import from extends implements +syn keyword cheetahKeyword contained assert raise try catch finally +syn keyword cheetahKeyword contained errorCatcher breakpoint silent cache filter +syn match cheetahKeyword contained "\" + +" Matches cached placeholders +syn match cheetahPlaceHolder "$\(\*[0-9.]\+[wdhms]\?\*\|\*\)\?\h\w*\(\.\h\w*\)*" display +syn match cheetahPlaceHolder "$\(\*[0-9.]\+[wdhms]\?\*\|\*\)\?{\h\w*\(\.\h\w*\)*}" display +syn match cheetahDirective "^\s*#[^#].*$" contains=cheetahPlaceHolder,cheetahKeyword,cheetahComment display + +syn match cheetahContinuation "\\$" +syn match cheetahComment "##.*$" display +syn region cheetahMultiLineComment start="#\*" end="\*#" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link cheetahPlaceHolder Identifier +hi def link cheetahDirective PreCondit +hi def link cheetahKeyword Define +hi def link cheetahContinuation Special +hi def link cheetahComment Comment +hi def link cheetahMultiLineComment Comment + + +let b:current_syntax = "cheetah" + diff --git a/.config/vim/syntax/chicken.vim b/.config/vim/syntax/chicken.vim new file mode 100644 index 0000000..958fc1f --- /dev/null +++ b/.config/vim/syntax/chicken.vim @@ -0,0 +1,94 @@ +" Vim syntax file +" Language: Scheme (CHICKEN) +" Last Change: 2024 Jun 21 +" Author: Evan Hanson +" Maintainer: Evan Hanson +" Repository: https://git.foldling.org/vim-scheme.git +" URL: https://foldling.org/vim/syntax/chicken.vim +" Notes: This is supplemental syntax, to be loaded after the core +" Scheme syntax file (syntax/scheme.vim). Enable it by +" setting b:is_chicken=1 and filetype=scheme. + +" Only to be used on top of the Scheme syntax. +if !exists('b:did_scheme_syntax') + finish +endif + +" Lighten parentheses. +hi! def link schemeParentheses Comment + +" foo#bar +syn match schemeExtraSyntax /[^ #'`\t\n()\[\]"|;]\+#[^ '`\t\n()\[\]"|;]\+/ + +" ##foo#bar +syn match schemeExtraSyntax /##[^ '`\t\n()\[\]"|;]\+/ + +" Heredocs. +syn region schemeString start=/#<[<#]\s*\z(.*\)/ end=/^\z1$/ + +" Keywords. +syn match schemeKeyword /#[!:][a-zA-Z0-9!$%&*+-./:<=>?@^_~#]\+/ +syn match schemeKeyword /[a-zA-Z0-9!$%&*+-./:<=>?@^_~#]\+:\>/ + +" C/C++ syntax. +let s:c = globpath(&rtp, 'syntax/cpp.vim', 0, 1) +if len(s:c) + exe 'syn include @c ' s:c[0] + syn region c matchgroup=schemeComment start=/#>/ end=/<#/ contains=@c +endif + +" SRFI 26 +syn match schemeSyntax /\(([ \t\n]*\)\@<=\(cut\|cute\)\>/ + +syn keyword schemeSyntax and-let* +syn keyword schemeSyntax define-record +syn keyword schemeSyntax set!-values +syn keyword schemeSyntax fluid-let +syn keyword schemeSyntax let-optionals +syn keyword schemeSyntax let-optionals* +syn keyword schemeSyntax letrec-values +syn keyword schemeSyntax nth-value +syn keyword schemeSyntax receive + +syn keyword schemeLibrarySyntax declare +syn keyword schemeLibrarySyntax define-interface +syn keyword schemeLibrarySyntax functor +syn keyword schemeLibrarySyntax include-relative +syn keyword schemeLibrarySyntax module +syn keyword schemeLibrarySyntax reexport +syn keyword schemeLibrarySyntax require-library + +syn keyword schemeTypeSyntax --> +syn keyword schemeTypeSyntax -> +syn keyword schemeTypeSyntax : +syn keyword schemeTypeSyntax assume +syn keyword schemeTypeSyntax compiler-typecase +syn keyword schemeTypeSyntax define-specialization +syn keyword schemeTypeSyntax define-type +syn keyword schemeTypeSyntax the + +syn keyword schemeExtraSyntax match +syn keyword schemeExtraSyntax match-lambda +syn keyword schemeExtraSyntax match-lambda* +syn keyword schemeExtraSyntax match-let +syn keyword schemeExtraSyntax match-let* +syn keyword schemeExtraSyntax match-letrec + +syn keyword schemeSpecialSyntax define-compiler-syntax +syn keyword schemeSpecialSyntax define-constant +syn keyword schemeSpecialSyntax define-external +syn keyword schemeSpecialSyntax define-inline +syn keyword schemeSpecialSyntax foreign-code +syn keyword schemeSpecialSyntax foreign-declare +syn keyword schemeSpecialSyntax foreign-lambda +syn keyword schemeSpecialSyntax foreign-lambda* +syn keyword schemeSpecialSyntax foreign-primitive +syn keyword schemeSpecialSyntax foreign-safe-lambda +syn keyword schemeSpecialSyntax foreign-safe-lambda* +syn keyword schemeSpecialSyntax foreign-value + +syn keyword schemeSyntaxSyntax begin-for-syntax +syn keyword schemeSyntaxSyntax define-for-syntax +syn keyword schemeSyntaxSyntax er-macro-transformer +syn keyword schemeSyntaxSyntax ir-macro-transformer +syn keyword schemeSyntaxSyntax require-library-for-syntax diff --git a/.config/vim/syntax/chill.vim b/.config/vim/syntax/chill.vim new file mode 100644 index 0000000..b95df68 --- /dev/null +++ b/.config/vim/syntax/chill.vim @@ -0,0 +1,178 @@ +" Vim syntax file +" Language: CHILL +" Maintainer: YoungSang Yoon +" Last change: 2004 Jan 21 +" + +" first created by image@lgic.co.kr & modified by paris@lgic.co.kr + +" CHILL (CCITT High Level Programming Language) is used for +" developing software of ATM switch at LGIC (LG Information +" & Communications LTd.) + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" A bunch of useful CHILL keywords +syn keyword chillStatement goto GOTO return RETURN returns RETURNS +syn keyword chillLabel CASE case ESAC esac +syn keyword chillConditional if IF else ELSE elsif ELSIF switch SWITCH THEN then FI fi +syn keyword chillLogical NOT not +syn keyword chillRepeat while WHILE for FOR do DO od OD TO to +syn keyword chillProcess START start STACKSIZE stacksize PRIORITY priority THIS this STOP stop +syn keyword chillBlock PROC proc PROCESS process +syn keyword chillSignal RECEIVE receive SEND send NONPERSISTENT nonpersistent PERSISTENT persistent SET set EVER ever + +syn keyword chillTodo contained TODO FIXME XXX + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match chillSpecial contained "\\x\x\+\|\\\o\{1,3\}\|\\.\|\\$" +syn region chillString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=chillSpecial +syn match chillCharacter "'[^\\]'" +syn match chillSpecialCharacter "'\\.'" +syn match chillSpecialCharacter "'\\\o\{1,3\}'" + +"when wanted, highlight trailing white space +if exists("chill_space_errors") + syn match chillSpaceError "\s*$" + syn match chillSpaceError " \+\t"me=e-1 +endif + +"catch errors caused by wrong parenthesis +syn cluster chillParenGroup contains=chillParenError,chillIncluded,chillSpecial,chillTodo,chillUserCont,chillUserLabel,chillBitField +syn region chillParen transparent start='(' end=')' contains=ALLBUT,@chillParenGroup +syn match chillParenError ")" +syn match chillInParen contained "[{}]" + +"integer number, or floating point number without a dot and with "f". +syn case ignore +syn match chillNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" +"floating point number, with dot, optional exponent +syn match chillFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, starting with a dot, optional exponent +syn match chillFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match chillFloat "\<\d\+e[-+]\=\d\+[fl]\=\>" +"hex number +syn match chillNumber "\<0x\x\+\(u\=l\=\|lu\)\>" +"syn match chillIdentifier "\<[a-z_][a-z0-9_]*\>" +syn case match +" flag an octal number with wrong digits +syn match chillOctalError "\<0\o*[89]" + +if exists("chill_comment_strings") + " A comment can contain chillString, chillCharacter and chillNumber. + " But a "*/" inside a chillString in a chillComment DOES end the comment! So we + " need to use a special type of chillString: chillCommentString, which also ends on + " "*/", and sees a "*" at the start of the line as comment again. + " Unfortunately this doesn't very well work for // type of comments :-( + syntax match chillCommentSkip contained "^\s*\*\($\|\s\+\)" + syntax region chillCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=chillSpecial,chillCommentSkip + syntax region chillComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=chillSpecial + syntax region chillComment start="/\*" end="\*/" contains=chillTodo,chillCommentString,chillCharacter,chillNumber,chillFloat,chillSpaceError + syntax match chillComment "//.*" contains=chillTodo,chillComment2String,chillCharacter,chillNumber,chillSpaceError +else + syn region chillComment start="/\*" end="\*/" contains=chillTodo,chillSpaceError + syn match chillComment "//.*" contains=chillTodo,chillSpaceError +endif +syntax match chillCommentError "\*/" + +syn keyword chillOperator SIZE size +syn keyword chillType dcl DCL int INT char CHAR bool BOOL REF ref LOC loc INSTANCE instance +syn keyword chillStructure struct STRUCT enum ENUM newmode NEWMODE synmode SYNMODE +"syn keyword chillStorageClass +syn keyword chillBlock PROC proc END end +syn keyword chillScope GRANT grant SEIZE seize +syn keyword chillEDML select SELECT delete DELETE update UPDATE in IN seq SEQ WHERE where INSERT insert include INCLUDE exclude EXCLUDE +syn keyword chillBoolConst true TRUE false FALSE + +syn region chillPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=chillComment,chillString,chillCharacter,chillNumber,chillCommentError,chillSpaceError +syn region chillIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match chillIncluded contained "<[^>]*>" +syn match chillInclude "^\s*#\s*include\>\s*["<]" contains=chillIncluded +"syn match chillLineSkip "\\$" +syn cluster chillPreProcGroup contains=chillPreCondit,chillIncluded,chillInclude,chillDefine,chillInParen,chillUserLabel +syn region chillDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,@chillPreProcGroup +syn region chillPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,@chillPreProcGroup + +" Highlight User Labels +syn cluster chillMultiGroup contains=chillIncluded,chillSpecial,chillTodo,chillUserCont,chillUserLabel,chillBitField +syn region chillMulti transparent start='?' end=':' contains=ALLBUT,@chillMultiGroup +" Avoid matching foo::bar() in C++ by requiring that the next char is not ':' +syn match chillUserCont "^\s*\I\i*\s*:$" contains=chillUserLabel +syn match chillUserCont ";\s*\I\i*\s*:$" contains=chillUserLabel +syn match chillUserCont "^\s*\I\i*\s*:[^:]"me=e-1 contains=chillUserLabel +syn match chillUserCont ";\s*\I\i*\s*:[^:]"me=e-1 contains=chillUserLabel + +syn match chillUserLabel "\I\i*" contained + +" Avoid recognizing most bitfields as labels +syn match chillBitField "^\s*\I\i*\s*:\s*[1-9]"me=e-1 +syn match chillBitField ";\s*\I\i*\s*:\s*[1-9]"me=e-1 + +syn match chillBracket contained "[<>]" +if !exists("chill_minlines") + let chill_minlines = 15 +endif +exec "syn sync ccomment chillComment minlines=" . chill_minlines + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link chillLabel Label +hi def link chillUserLabel Label +hi def link chillConditional Conditional +" hi def link chillConditional term=bold ctermfg=red guifg=red gui=bold + +hi def link chillRepeat Repeat +hi def link chillProcess Repeat +hi def link chillSignal Repeat +hi def link chillCharacter Character +hi def link chillSpecialCharacter chillSpecial +hi def link chillNumber Number +hi def link chillFloat Float +hi def link chillOctalError chillError +hi def link chillParenError chillError +hi def link chillInParen chillError +hi def link chillCommentError chillError +hi def link chillSpaceError chillError +hi def link chillOperator Operator +hi def link chillStructure Structure +hi def link chillBlock Operator +hi def link chillScope Operator +"hi def link chillEDML term=underline ctermfg=DarkRed guifg=Red +hi def link chillEDML PreProc +"hi def link chillBoolConst term=bold ctermfg=brown guifg=brown +hi def link chillBoolConst Constant +"hi def link chillLogical term=bold ctermfg=brown guifg=brown +hi def link chillLogical Constant +hi def link chillStorageClass StorageClass +hi def link chillInclude Include +hi def link chillPreProc PreProc +hi def link chillDefine Macro +hi def link chillIncluded chillString +hi def link chillError Error +hi def link chillStatement Statement +hi def link chillPreCondit PreCondit +hi def link chillType Type +hi def link chillCommentError chillError +hi def link chillCommentString chillString +hi def link chillComment2String chillString +hi def link chillCommentSkip chillComment +hi def link chillString String +hi def link chillComment Comment +" hi def link chillComment term=None ctermfg=lightblue guifg=lightblue +hi def link chillSpecial SpecialChar +hi def link chillTodo Todo +hi def link chillBlock Statement +"hi def link chillIdentifier Identifier +hi def link chillBracket Delimiter + + +let b:current_syntax = "chill" + +" vim: ts=8 diff --git a/.config/vim/syntax/chordpro.vim b/.config/vim/syntax/chordpro.vim new file mode 100644 index 0000000..02c34b8 --- /dev/null +++ b/.config/vim/syntax/chordpro.vim @@ -0,0 +1,174 @@ +" Vim syntax file +" Language: ChordPro 6 (https://www.chordpro.org) +" Maintainer: Niels Bo Andersen +" Last Change: 2022-04-15 +" 2024 Dec 31: add "keys" as syntax keyword (via: https://groups.google.com/g/vim_dev/c/vP4epus0euM/m/mNoDY6hsCQAJ) + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn case ignore + +" Include embedded abc syntax +syn include @Abc syntax/abc.vim + +" Lilypond and Pango syntaxes could be embedded as well, but they are not +" available in the distribution. + +" Directives without arguments +syn keyword chordproDirective contained nextgroup=chordproConditional + \ new_song ns + \ start_of_chorus soc + \ chorus + \ start_of_verse sov + \ start_of_bridge sob + \ start_of_tab sot + \ start_of_grid sog + \ start_of_abc + \ start_of_ly + \ end_of_chorus eoc + \ end_of_verse eov + \ end_of_bridge eob + \ end_of_tab eot + \ end_of_grid eog + \ end_of_abc + \ end_of_ly + \ new_page np + \ new_physical_page npp + \ column_break cb + \ grid g + \ no_grid ng + \ transpose + \ chordfont cf chordsize cs chordcolour + \ footerfont footersize footercolour + \ gridfont gridsize gridcolour + \ tabfont tabsize tabcolour + \ tocfont tocsize toccolour + \ textfont tf textsize ts textcolour + \ titlefont titlesize titlecolour + +" Directives with arguments. Some directives are in both groups, as they can +" be used both with and without arguments +syn keyword chordproDirWithArg contained nextgroup=chordproConditional + \ title t + \ subtitle st + \ sorttitle + \ artist + \ composer + \ lyricist + \ arranger + \ copyright + \ album + \ year + \ key + \ time + \ tempo + \ duration + \ capo + \ comment c + \ highlight + \ comment_italic ci + \ comment_box cb + \ image + \ start_of_chorus soc + \ chorus + \ start_of_verse sov + \ start_of_bridge sob + \ start_of_tab sot + \ start_of_grid sog + \ start_of_abc + \ start_of_ly + \ define + \ chord + \ transpose + \ chordfont cf chordsize cs chordcolour + \ footerfont footersize footercolour + \ gridfont gridsize gridcolour + \ tabfont tabsize tabcolour + \ tocfont tocsize toccolour + \ textfont tf textsize ts textcolour + \ titlefont titlesize titlecolour + \ pagetype + \ titles + \ columns col + +syn keyword chordproMetaKeyword contained meta +syn keyword chordproMetadata contained title sorttitle subtitle artist composer lyricist arranger copyright album year key time tempo duration capo +syn keyword chordproStandardMetadata contained songindex page pages pagerange today tuning instrument user +syn match chordproStandardMetadata /instrument\.type/ contained +syn match chordproStandardMetadata /instrument\.description/ contained +syn match chordproStandardMetadata /user\.name/ contained +syn match chordproStandardMetadata /user\.fullname/ contained + +syn keyword chordproDefineKeyword contained frets fingers keys +syn match chordproDefineKeyword /base-fret/ contained + +syn match chordproArgumentsNumber /\d\+/ contained + +syn match chordproCustom /x_\w\+/ contained + +syn match chordproDirMatch /{\w\+\(-\w\+\)\?}/ contains=chordproDirective contained transparent +syn match chordproDirArgMatch /{\w\+\(-\w\+\)\?[: ]/ contains=chordproDirWithArg contained transparent +syn match chordproMetaMatch /{meta\(-\w\+\)\?[: ]\+\w\+/ contains=chordproMetaKeyword,chordproMetadata contained transparent +syn match chordproCustomMatch /{x_\w\+\(-\w\+\)\?[: ]/ contains=chordproCustom contained transparent + +syn match chordproConditional /-\w\+/ contained + +syn match chordproMetaDataOperator /[=|]/ contained +syn match chordproMetaDataValue /%{\w*/ contains=chordproMetaData,chordproStandardMetadata contained transparent +" Handles nested metadata tags, but the end of the containing chordproTag is +" not highlighted correctly, if there are more than two levels of nesting +syn region chordproMetaDataTag start=/%{\w*/ skip=/%{[^}]*}/ end=/}/ contains=chordproMetaDataValue,chordproMetaDataOperator,chordproMetadataTag contained + +syn region chordproArguments start=/{\w\+\(-\w\+\)\?[: ]/hs=e+1 skip=/%{[^}]*}/ end=/}/he=s-1 contains=chordproDirArgMatch,chordproArgumentsNumber,chordproMetaDataTag contained +syn region chordproArguments start=/{\(define\|chord\)\(-\w\+\)\?[: ]/hs=e+1 end=/}/he=s-1 contains=chordproDirArgMatch,chordproDefineKeyword,chordproArgumentsNumber contained +syn region chordproArguments start=/{meta\(-\w\+\)\?[: ]/hs=e+1 skip=/%{[^}]*}/ end=/}/he=s-1 contains=chordproMetaMatch,chordproMetaDataTag contained +syn region chordproArguments start=/{x_\w\+\(-\w\+\)\?[: ]/hs=e+1 end=/}/he=s-1 contains=chordproCustomMatch contained + +syn region chordproTag start=/{/ skip=/%{[^}]*}/ end=/}/ contains=chordproDirMatch,chordproArguments oneline + +syn region chordproChord matchgroup=chordproBracket start=/\[/ end=/]/ oneline + +syn region chordproAnnotation matchgroup=chordproBracket start=/\[\*/ end=/]/ oneline + +syn region chordproTab start=/{start_of_tab\(-\w\+\)\?\([: ].\+\)\?}\|{sot\(-\w\+\)\?\([: ].\+\)\?}/hs=e+1 end=/{end_of_tab}\|{eot}/me=s-1 contains=chordproTag,chordproComment keepend + +syn region chordproChorus start=/{start_of_chorus\(-\w\+\)\?\([: ].\+\)\?}\|{soc\(-\w\+\)\?\([: ].\+\)\?}/hs=e+1 end=/{end_of_chorus}\|{eoc}/me=s-1 contains=chordproTag,chordproChord,chordproAnnotation,chordproComment keepend + +syn region chordproBridge start=/{start_of_bridge\(-\w\+\)\?\([: ].\+\)\?}\|{sob\(-\w\+\)\?\([: ].\+\)\?}/hs=e+1 end=/{end_of_bridge}\|{eob}/me=s-1 contains=chordproTag,chordproChord,chordproAnnotation,chordproComment keepend + +syn region chordproAbc start=/{start_of_abc\(-\w\+\)\?\([: ].\+\)\?}/hs=e+1 end=/{end_of_abc}/me=s-1 contains=chordproTag,@Abc keepend + +syn match chordproComment /^#.*/ + +" Define the default highlighting. +hi def link chordproDirective Statement +hi def link chordproDirWithArg Statement +hi def link chordproConditional Statement +hi def link chordproCustom Statement +hi def link chordproMetaKeyword Statement +hi def link chordproMetaDataOperator Operator +hi def link chordproMetaDataTag Function +hi def link chordproArguments Special +hi def link chordproArgumentsNumber Number +hi def link chordproChord Type +hi def link chordproAnnotation Identifier +hi def link chordproTag Constant +hi def link chordproTab PreProc +hi def link chordproComment Comment +hi def link chordproBracket Constant +hi def link chordproDefineKeyword Identifier +hi def link chordproMetadata Identifier +hi def link chordproStandardMetadata Identifier +hi def chordproChorus term=bold cterm=bold gui=bold +hi def chordproBridge term=italic cterm=italic gui=italic + +let b:current_syntax = "chordpro" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/chuck.vim b/.config/vim/syntax/chuck.vim new file mode 100644 index 0000000..6fcf40c --- /dev/null +++ b/.config/vim/syntax/chuck.vim @@ -0,0 +1,187 @@ +" Vim syntax file +" Language: ChucK +" Maintainer: Andrea Callea +" URL: https://github.com/gacallea/chuck.vim +" Last Change: 2024 Jan 21 by Andrea Callea + +" Sources used for this syntax +" https://chuck.cs.princeton.edu/doc/language/ +" https://chuck.cs.princeton.edu/doc/reference/ + +" HISTORY: +" 2024 Jan 21 - Initial revision + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" https://chuck.cs.princeton.edu/doc/language/type.html +syn keyword chuckPrimitiveType int float time dur void vec3 vec4 +syn keyword chuckComplexType complex polar +syn keyword chuckReferenceType Object Event UGen array string +syn keyword chuckBoolean true false maybe +syn keyword chuckBoolean null NULL + +" https://chuck.cs.princeton.edu/doc/language/oper.html +syn match chuckOperator "=>" +syn match chuckOperator "@=>" + +syn match chuckOperator "=^" + +syn match chuckOperator "+" +syn match chuckOperator "-" +syn match chuckOperator "*" +syn match chuckOperator "/" +syn match chuckOperator "%" +syn match chuckOperator "!" +syn match chuckOperator "&" +syn match chuckOperator "|" +syn match chuckOperator "\^" + +syn match chuckOperator "+=>" +syn match chuckOperator "-=>" +syn match chuckOperator "*=>" +syn match chuckOperator "/=>" +syn match chuckOperator "%=>" +syn match chuckOperator "!=>" +syn match chuckOperator "&=>" +syn match chuckOperator "|=>" +syn match chuckOperator "\^=>" + +syn match chuckOperator "&&" +syn match chuckOperator "||" +syn match chuckOperator "==" +syn match chuckOperator "!=" +syn match chuckOperator ">" +syn match chuckOperator ">=" +syn match chuckOperator "<" +syn match chuckOperator "<=" + +syn match chuckOperator ">>" +syn match chuckOperator "<<" + +syn match chuckOperator "++" +syn match chuckOperator "--" +syn match chuckOperator "<<<" +syn match chuckOperator ">>>" + +syn keyword chuckOperator new + +" https://chuck.cs.princeton.edu/doc/language/ctrl.html +syn keyword chuckConditional if else +syn keyword chuckRepeat while do until for each + +" https://chuck.cs.princeton.edu/doc/language/time.html +syn keyword chuckTimeAndDuration samp ms second minute hour day week +syn keyword chuckTimeAndDuration now later + +" these may need some additional keywords I missed, for a future revision +syn keyword chuckKeyword dac adc +syn keyword chuckKeyword fun function +syn keyword chuckKeyword return +syn keyword chuckKeyword const +syn match chuckKeyword "@" +syn keyword chuckKeyword pi +syn keyword chuckKeyword me +syn keyword chuckKeyword repeat break continue +syn keyword chuckKeyword class extends public private static pure this +syn keyword chuckKeyword spork +syn keyword chuckKeyword cherr chout + +" https://chuck.cs.princeton.edu/doc/reference/ +syn keyword chuckBaseClasses Shred Math Machine Std + +" https://chuck.cs.princeton.edu/doc/reference/ +syn keyword chuckBasicUGen Gain Impulse Step SndBuf SndBuf2 +syn keyword chuckBasicUGen ADSR Envelope Delay DelayL DelayA Echo +syn keyword chuckBasicUGen Noise CNoise Osc SinOsc TriOsc SawOsc PulseOsc SqrOsc +syn keyword chuckBasicUGen Phasor HalfRect FullRect +syn keyword chuckBasicUGen Chugraph Chugen UGen_Multi UGen_Stereo Mix2 Pan2 + +" https://chuck.cs.princeton.edu/doc/reference/ +syn keyword chuckFilterUGen FilterBasic LPF HPF BPF BRF BiQuad ResonZ +syn keyword chuckFilterUGen OnePole OneZero TwoPole TwoZero PoleZero + +" https://chuck.cs.princeton.edu/doc/reference/ +syn keyword chuckSTKUGen JCRev NRev PRCRev +syn keyword chuckSTKUGen Chorus Modulate PitShift SubNoise +syn keyword chuckSTKUGen BLT Blit BlitSaw BlitSquare FilterStk +syn keyword chuckSTKUGen WvIn WaveLoop WvOut WvOut2 StkInstrument +syn keyword chuckSTKUGen BandedWG BlowBotl BlowHole +syn keyword chuckSTKUGen Bowed Brass Clarinet Flute Mandolin +syn keyword chuckSTKUGen ModalBar Moog Saxofony Shakers Sitar StifKarp +syn keyword chuckSTKUGen VoicForm KrstlChr FM BeeThree FMVoices +syn keyword chuckSTKUGen HevyMetl HnkyTonk FrencHrn PercFlut Rhodey TubeBell Wurley + +" https://chuck.cs.princeton.edu/doc/reference/ +syn keyword chuckAdvancedUGen LiSa LiSa2 LiSa6 LiSa8 LiSa10 +syn keyword chuckAdvancedUGen LiSa16 GenX Gen5 Gen7 Gen9 Gen10 Gen17 +syn keyword chuckAdvancedUGen CurveTable WarpTable Dyno + +" https://chuck.cs.princeton.edu/doc/reference/ +syn keyword chuckChugin ABSaturator AmbPan3 Bitcrusher Elliptic ExpDelay ExpEnv FIR +syn keyword chuckChugin FoldbackSaturator GVerb KasFilter MagicSine Mesh2D +syn keyword chuckChugin Multicomb Pan4 Pan8 Pan16 PitchTrack PowerADSR RegEx +syn keyword chuckChugin Sigmund Spectacle WinFuncEnv WPDiodeLadder WPKorg35 + +" https://chuck.cs.princeton.edu/doc/reference/ +syn keyword chuckUnitAnalyzer UAna UAnaBlob Windowing +syn keyword chuckUnitAnalyzer FFT IFFT DCT IDCT +syn keyword chuckUnitAnalyzer Centroid Flux RMS RollOff +syn keyword chuckUnitAnalyzer Flip UnFlip XCorr +syn keyword chuckUnitAnalyzer Chroma Kurtosis MFCC SFM ZeroX AutoCorr FeatureCollector + +" https://chuck.cs.princeton.edu/doc/reference/ +syn keyword chuckChAI MLP KNN KNN2 HMM SVM Word2Vec PCA Wekinator AI + +" https://chuck.cs.princeton.edu/doc/reference/ +syn keyword chuckInputOutput IO FileIO OscIn OscOut OscMsg +syn keyword chuckInputOutput Hid HidMsg KBHit SerialIO +syn keyword chuckInputOutput MidiIn MidiOut MidiMsg MidiFileIn + +" https://chuck.cs.princeton.edu/doc/reference/ +syn keyword chuckUtilities CKDoc StringTokenizer ConsoleInput + +" https://github.com/wilsaj/chuck.vim/blob/master/syntax/chuck.vim +syn match chuckNumber /\%(\i\|\$\)\@/ display +syn match chuckFloat /\%(\i\|\$\)\@ Remove SPAX spam block +" Version: 6 +" Last Change: Mar 06 2013 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +setlocal iskeyword=@,48-57,_,- + +syn case ignore + +syn sync lines=300 + +"If/else/elsif/endif and while/wend mismatch errors +syn match clifError "\" +syn match clifError "\" +syn match clifError "\" +syn match clifError "\" + +syn match clSpaceError "\s\+$" + +" If and while regions +syn region clLoop transparent matchgroup=clWhile start="\" matchgroup=clWhile end="\" contains=ALLBUT,clBreak,clProcedure +syn region clIf transparent matchgroup=clConditional start="\" matchgroup=clConditional end="\" contains=ALLBUT,clBreak,clProcedure + +" Make those TODO notes and debugging stand out! +syn keyword clTodo contained TODO BUG DEBUG FIX +syn match clNeedsWork contained "NEED[S]*\s\s*WORK" +syn keyword clDebug contained debug + +syn match clComment "#.*$" contains=clTodo,clNeedsWork,@Spell +syn region clProcedure oneline start="^\s*[{}]" end="$" +syn match clInclude "^\s*include\s.*" + +" We don't put "debug" in the clSetOptions; +" we contain it in clSet so we can make it stand out. +syn keyword clSetOptions transparent aauto abort align convert E fill fnum goback hangup justify null_exit output rauto rawprint rawdisplay repeat skip tab trim +syn match clSet "^\s*set\s.*" contains=clSetOptions,clDebug + +syn match clPreProc "^\s*#P.*" + +syn keyword clConditional else elsif +syn keyword clWhile continue endloop +" 'break' needs to be a region so we can sync on it above. +syn region clBreak oneline start="^\s*break" end="$" + +syn match clOperator "[!;|)(:.><+*=-]" + +syn match clNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" + +syn region clString matchgroup=clQuote start=+"+ end=+"+ skip=+\\"+ contains=@Spell +syn region clString matchgroup=clQuote start=+'+ end=+'+ skip=+\\'+ contains=@Spell + +syn keyword clReserved ERROR EXIT INTERRUPT LOCKED LREPLY MODE MCOL MLINE MREPLY NULL REPLY V1 V2 V3 V4 V5 V6 V7 V8 V9 ZERO BYPASS GOING_BACK AAUTO ABORT ABORT ALIGN BIGE CONVERT FNUM GOBACK HANGUP JUSTIFY NEXIT OUTPUT RAUTO RAWDISPLAY RAWPRINT REPEAT SKIP TAB TRIM LCOUNT PCOUNT PLINES SLINES SCOLS MATCH LMATCH + +syn keyword clFunction asc asize chr name random slen srandom day getarg getcgi getenv lcase scat sconv sdel skey smult srep substr sword trim ucase match + +syn keyword clStatement clear clear_eol clear_eos close copy create unique with where empty define define ldefine delay_form delete escape exit_block exit_do exit_process field fork format get getfile getnext getprev goto head join maintain message no_join on_eop on_key on_exit on_delete openin openout openapp pause popenin popenout popenio print put range read redisplay refresh restart_block screen select sleep text unlock write and not or do + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link clifError Error +hi def link clSpaceError Error +hi def link clWhile Repeat +hi def link clConditional Conditional +hi def link clDebug Debug +hi def link clNeedsWork Todo +hi def link clTodo Todo +hi def link clComment Comment +hi def link clProcedure Procedure +hi def link clBreak Procedure +hi def link clInclude Include +hi def link clSetOption Statement +hi def link clSet Identifier +hi def link clPreProc PreProc +hi def link clOperator Operator +hi def link clNumber Number +hi def link clString String +hi def link clQuote Delimiter +hi def link clReserved Identifier +hi def link clFunction Function +hi def link clStatement Statement + + +let b:current_syntax = "cl" + +" vim: ts=8 sw=8 diff --git a/.config/vim/syntax/clean.vim b/.config/vim/syntax/clean.vim new file mode 100644 index 0000000..70bf654 --- /dev/null +++ b/.config/vim/syntax/clean.vim @@ -0,0 +1,90 @@ +" Vim syntax file +" Language: Clean +" Author: Pieter van Engelen +" Co-Author: Arthur van Leeuwen +" Last Change: 2013 Oct 15 by Jurriën Stutterheim + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Some Clean-keywords +syn keyword cleanConditional if case +syn keyword cleanLabel let! with where in of +syn keyword cleanSpecial Start +syn keyword cleanKeyword infixl infixr infix +syn keyword cleanBasicType Int Real Char Bool String +syn keyword cleanSpecialType World ProcId Void Files File +syn keyword cleanModuleSystem module implementation definition system +syn keyword cleanTypeClass class instance export + +" Import highlighting +syn region cleanIncludeRegion start="^\s*\(from\|import\|\s\+\(as\|qualified\)\)" end="\n" contains=cleanIncludeKeyword keepend +syn keyword cleanIncludeKeyword contained from import as qualified + +" To do some Denotation Highlighting +syn keyword cleanBoolDenot True False +syn region cleanStringDenot start=+"+ skip=+\(\(\\\\\)\+\|\\"\)+ end=+"+ display +syn match cleanCharDenot "'\(\\\\\|\\'\|[^'\\]\)\+'" display +syn match cleanIntegerDenot "[\~+-]\?\<\(\d\+\|0[0-7]\+\|0x[0-9A-Fa-f]\+\)\>" display +syn match cleanRealDenot "[\~+-]\?\d\+\.\d\+\(E[\~+-]\?\d\+\)\?" display + +" To highlight the use of lists, tuples and arrays +syn region cleanList start="\[" end="\]" contains=ALL +syn region cleanRecord start="{" end="}" contains=ALL +syn region cleanArray start="{:" end=":}" contains=ALL +syn match cleanTuple "([^=]*,[^=]*)" contains=ALL + +" To do some Comment Highlighting +syn region cleanComment start="/\*" end="\*/" contains=cleanComment,cleanTodo fold +syn region cleanComment start="//.*" end="$" display contains=cleanTodo +syn keyword cleanTodo TODO FIXME XXX contained + +" Now for some useful type definition recognition +syn match cleanFuncTypeDef "\([a-zA-Z].*\|(\=[-~@#$%^?!+*<>\/|&=:]\+)\=\)\s*\(infix[lr]\=\)\=\s*\d\=\s*::.*->.*" contains=cleanSpecial,cleanBasicType,cleanSpecialType,cleanKeyword + + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + + " Comments + hi def link cleanComment Comment + " Constants and denotations + hi def link cleanStringDenot String + hi def link cleanCharDenot Character + hi def link cleanIntegerDenot Number + hi def link cleanBoolDenot Boolean + hi def link cleanRealDenot Float + " Identifiers + " Statements + hi def link cleanTypeClass Keyword + hi def link cleanConditional Conditional + hi def link cleanLabel Label + hi def link cleanKeyword Keyword + " Generic Preprocessing + hi def link cleanIncludeKeyword Include + hi def link cleanModuleSystem PreProc + " Type + hi def link cleanBasicType Type + hi def link cleanSpecialType Type + hi def link cleanFuncTypeDef Typedef + " Special + hi def link cleanSpecial Special + hi def link cleanList Special + hi def link cleanArray Special + hi def link cleanRecord Special + hi def link cleanTuple Special + " Error + " Todo + hi def link cleanTodo Todo + + +let b:current_syntax = "clean" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=4 diff --git a/.config/vim/syntax/clipper.vim b/.config/vim/syntax/clipper.vim new file mode 100644 index 0000000..203f9f0 --- /dev/null +++ b/.config/vim/syntax/clipper.vim @@ -0,0 +1,135 @@ +" Vim syntax file: +" Language: Clipper 5.2 & FlagShip +" Maintainer: C R Zamana +" Some things based on c.vim by Bram Moolenaar and pascal.vim by Mario Eusebio +" Last Change: 2011 Dec 29 by Thilo Six + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Exceptions for my "Very Own" (TM) user variables naming style. +" If you don't like this, comment it +syn match clipperUserVariable "\<[a,b,c,d,l,n,o,u,x][A-Z][A-Za-z0-9_]*\>" +syn match clipperUserVariable "\<[a-z]\>" + +" Clipper is case insensitive ( see "exception" above ) +syn case ignore + +" Clipper keywords ( in no particular order ) +syn keyword clipperStatement ACCEPT APPEND BLANK FROM AVERAGE CALL CANCEL +syn keyword clipperStatement CLEAR ALL GETS MEMORY TYPEAHEAD CLOSE +syn keyword clipperStatement COMMIT CONTINUE SHARED NEW PICT +syn keyword clipperStatement COPY FILE STRUCTURE STRU EXTE TO COUNT +syn keyword clipperStatement CREATE FROM NIL +syn keyword clipperStatement DELETE FILE DIR DISPLAY EJECT ERASE FIND GO +syn keyword clipperStatement INDEX INPUT VALID WHEN +syn keyword clipperStatement JOIN KEYBOARD LABEL FORM LIST LOCATE MENU TO +syn keyword clipperStatement NOTE PACK QUIT READ +syn keyword clipperStatement RECALL REINDEX RELEASE RENAME REPLACE REPORT +syn keyword clipperStatement RETURN FORM RESTORE +syn keyword clipperStatement RUN SAVE SEEK SELECT +syn keyword clipperStatement SKIP SORT STORE SUM TEXT TOTAL TYPE UNLOCK +syn keyword clipperStatement UPDATE USE WAIT ZAP +syn keyword clipperStatement BEGIN SEQUENCE +syn keyword clipperStatement SET ALTERNATE BELL CENTURY COLOR CONFIRM CONSOLE +syn keyword clipperStatement CURSOR DATE DECIMALS DEFAULT DELETED DELIMITERS +syn keyword clipperStatement DEVICE EPOCH ESCAPE EXACT EXCLUSIVE FILTER FIXED +syn keyword clipperStatement FORMAT FUNCTION INTENSITY KEY MARGIN MESSAGE +syn keyword clipperStatement ORDER PATH PRINTER PROCEDURE RELATION SCOREBOARD +syn keyword clipperStatement SOFTSEEK TYPEAHEAD UNIQUE WRAP +syn keyword clipperStatement BOX CLEAR GET PROMPT SAY ? ?? +syn keyword clipperStatement DELETE TAG GO RTLINKCMD TMP DBLOCKINFO +syn keyword clipperStatement DBEVALINFO DBFIELDINFO DBFILTERINFO DBFUNCTABLE +syn keyword clipperStatement DBOPENINFO DBORDERCONDINFO DBORDERCREATEINF +syn keyword clipperStatement DBORDERINFO DBRELINFO DBSCOPEINFO DBSORTINFO +syn keyword clipperStatement DBSORTITEM DBTRANSINFO DBTRANSITEM WORKAREA + +" Conditionals +syn keyword clipperConditional CASE OTHERWISE ENDCASE +syn keyword clipperConditional IF ELSE ENDIF IIF IFDEF IFNDEF + +" Loops +syn keyword clipperRepeat DO WHILE ENDDO +syn keyword clipperRepeat FOR TO NEXT STEP + +" Visibility +syn keyword clipperStorageClass ANNOUNCE STATIC +syn keyword clipperStorageClass DECLARE EXTERNAL LOCAL MEMVAR PARAMETERS +syn keyword clipperStorageClass PRIVATE PROCEDURE PUBLIC REQUEST STATIC +syn keyword clipperStorageClass FIELD FUNCTION +syn keyword clipperStorageClass EXIT PROCEDURE INIT PROCEDURE + +" Operators +syn match clipperOperator "$\|%\|&\|+\|-\|->\|!" +syn match clipperOperator "\.AND\.\|\.NOT\.\|\.OR\." +syn match clipperOperator ":=\|<\|<=\|<>\|!=\|#\|=\|==\|>\|>=\|@" +syn match clipperOperator "*" + +" Numbers +syn match clipperNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" + +" Includes +syn region clipperIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match clipperIncluded contained "<[^>]*>" +syn match clipperInclude "^\s*#\s*include\>\s*["<]" contains=clipperIncluded + +" String and Character constants +syn region clipperString start=+"+ end=+"+ +syn region clipperString start=+'+ end=+'+ + +" Delimiters +syn match ClipperDelimiters "[()]\|[\[\]]\|[{}]\|[||]" + +" Special +syn match clipperLineContinuation ";" + +" This is from Bram Moolenaar: +if exists("c_comment_strings") + " A comment can contain cString, cCharacter and cNumber. + " But a "*/" inside a cString in a clipperComment DOES end the comment! + " So we need to use a special type of cString: clipperCommentString, which + " also ends on "*/", and sees a "*" at the start of the line as comment + " again. Unfortunately this doesn't very well work for // type of comments :-( + syntax match clipperCommentSkip contained "^\s*\*\($\|\s\+\)" + syntax region clipperCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=clipperCommentSkip + syntax region clipperComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" + syntax region clipperComment start="/\*" end="\*/" contains=clipperCommentString,clipperCharacter,clipperNumber,clipperString + syntax match clipperComment "//.*" contains=clipperComment2String,clipperCharacter,clipperNumber +else + syn region clipperComment start="/\*" end="\*/" + syn match clipperComment "//.*" +endif +syntax match clipperCommentError "\*/" + +" Lines beggining with an "*" are comments too +syntax match clipperComment "^\*.*" + + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link clipperConditional Conditional +hi def link clipperRepeat Repeat +hi def link clipperNumber Number +hi def link clipperInclude Include +hi def link clipperComment Comment +hi def link clipperOperator Operator +hi def link clipperStorageClass StorageClass +hi def link clipperStatement Statement +hi def link clipperString String +hi def link clipperFunction Function +hi def link clipperLineContinuation Special +hi def link clipperDelimiters Delimiter +hi def link clipperUserVariable Identifier + + +let b:current_syntax = "clipper" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8 diff --git a/.config/vim/syntax/clojure.vim b/.config/vim/syntax/clojure.vim new file mode 100644 index 0000000..0d63728 --- /dev/null +++ b/.config/vim/syntax/clojure.vim @@ -0,0 +1,218 @@ +" Vim indent file +" Language: Clojure +" Maintainer: Alex Vear +" Former Maintainers: Sung Pae +" Meikel Brandmeyer +" Toralf Wittner +" Contributors: Joel Holdbrooks (Regexp support, bug fixes) +" URL: https://github.com/clojure-vim/clojure.vim +" License: Vim (see :h license) +" Last Change: 2022-03-24 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_sav = &cpo +set cpo&vim + +if has("folding") && exists("g:clojure_fold") && g:clojure_fold > 0 + setlocal foldmethod=syntax +endif + +" -*- KEYWORDS -*- +" Generated from https://github.com/clojure-vim/clojure.vim/blob/fd280e33e84c88e97860930557dba3ff80b1a82d/clj/src/vim_clojure_static/generate.clj +" Clojure version 1.11.0 +let s:clojure_syntax_keywords = { + \ 'clojureBoolean': ["false","true"], + \ 'clojureCond': ["case","case*","clojure.core/case","clojure.core/cond","clojure.core/cond->","clojure.core/cond->>","clojure.core/condp","clojure.core/if-let","clojure.core/if-not","clojure.core/if-some","clojure.core/when","clojure.core/when-first","clojure.core/when-let","clojure.core/when-not","clojure.core/when-some","cond","cond->","cond->>","condp","if","if-let","if-not","if-some","when","when-first","when-let","when-not","when-some"], + \ 'clojureConstant': ["nil"], + \ 'clojureDefine': ["clojure.core/definline","clojure.core/definterface","clojure.core/defmacro","clojure.core/defmethod","clojure.core/defmulti","clojure.core/defn","clojure.core/defn-","clojure.core/defonce","clojure.core/defprotocol","clojure.core/defrecord","clojure.core/defstruct","clojure.core/deftype","def","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","deftype*"], + \ 'clojureException': ["catch","finally","throw","try"], + \ 'clojureFunc': ["*","*'","+","+'","-","-'","->ArrayChunk","->Eduction","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods","/","<","<=","=","==",">",">=","NaN?","PrintWriter-on","StackTraceElement->vec","Throwable->map","abs","accessor","aclone","add-classpath","add-tap","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","ancestors","any?","apply","array-map","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assoc","assoc!","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","boolean?","booleans","bound-fn*","bound?","bounded-count","butlast","byte","byte-array","bytes","bytes?","cast","cat","char","char-array","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","clojure.core/*","clojure.core/*'","clojure.core/+","clojure.core/+'","clojure.core/-","clojure.core/-'","clojure.core/->ArrayChunk","clojure.core/->Eduction","clojure.core/->Vec","clojure.core/->VecNode","clojure.core/->VecSeq","clojure.core/-cache-protocol-fn","clojure.core/-reset-methods","clojure.core//","clojure.core/<","clojure.core/<=","clojure.core/=","clojure.core/==","clojure.core/>","clojure.core/>=","clojure.core/NaN?","clojure.core/PrintWriter-on","clojure.core/StackTraceElement->vec","clojure.core/Throwable->map","clojure.core/abs","clojure.core/accessor","clojure.core/aclone","clojure.core/add-classpath","clojure.core/add-tap","clojure.core/add-watch","clojure.core/agent","clojure.core/agent-error","clojure.core/agent-errors","clojure.core/aget","clojure.core/alength","clojure.core/alias","clojure.core/all-ns","clojure.core/alter","clojure.core/alter-meta!","clojure.core/alter-var-root","clojure.core/ancestors","clojure.core/any?","clojure.core/apply","clojure.core/array-map","clojure.core/aset","clojure.core/aset-boolean","clojure.core/aset-byte","clojure.core/aset-char","clojure.core/aset-double","clojure.core/aset-float","clojure.core/aset-int","clojure.core/aset-long","clojure.core/aset-short","clojure.core/assoc","clojure.core/assoc!","clojure.core/assoc-in","clojure.core/associative?","clojure.core/atom","clojure.core/await","clojure.core/await-for","clojure.core/await1","clojure.core/bases","clojure.core/bean","clojure.core/bigdec","clojure.core/bigint","clojure.core/biginteger","clojure.core/bit-and","clojure.core/bit-and-not","clojure.core/bit-clear","clojure.core/bit-flip","clojure.core/bit-not","clojure.core/bit-or","clojure.core/bit-set","clojure.core/bit-shift-left","clojure.core/bit-shift-right","clojure.core/bit-test","clojure.core/bit-xor","clojure.core/boolean","clojure.core/boolean-array","clojure.core/boolean?","clojure.core/booleans","clojure.core/bound-fn*","clojure.core/bound?","clojure.core/bounded-count","clojure.core/butlast","clojure.core/byte","clojure.core/byte-array","clojure.core/bytes","clojure.core/bytes?","clojure.core/cast","clojure.core/cat","clojure.core/char","clojure.core/char-array","clojure.core/char?","clojure.core/chars","clojure.core/chunk","clojure.core/chunk-append","clojure.core/chunk-buffer","clojure.core/chunk-cons","clojure.core/chunk-first","clojure.core/chunk-next","clojure.core/chunk-rest","clojure.core/chunked-seq?","clojure.core/class","clojure.core/class?","clojure.core/clear-agent-errors","clojure.core/clojure-version","clojure.core/coll?","clojure.core/commute","clojure.core/comp","clojure.core/comparator","clojure.core/compare","clojure.core/compare-and-set!","clojure.core/compile","clojure.core/complement","clojure.core/completing","clojure.core/concat","clojure.core/conj","clojure.core/conj!","clojure.core/cons","clojure.core/constantly","clojure.core/construct-proxy","clojure.core/contains?","clojure.core/count","clojure.core/counted?","clojure.core/create-ns","clojure.core/create-struct","clojure.core/cycle","clojure.core/dec","clojure.core/dec'","clojure.core/decimal?","clojure.core/dedupe","clojure.core/delay?","clojure.core/deliver","clojure.core/denominator","clojure.core/deref","clojure.core/derive","clojure.core/descendants","clojure.core/destructure","clojure.core/disj","clojure.core/disj!","clojure.core/dissoc","clojure.core/dissoc!","clojure.core/distinct","clojure.core/distinct?","clojure.core/doall","clojure.core/dorun","clojure.core/double","clojure.core/double-array","clojure.core/double?","clojure.core/doubles","clojure.core/drop","clojure.core/drop-last","clojure.core/drop-while","clojure.core/eduction","clojure.core/empty","clojure.core/empty?","clojure.core/ensure","clojure.core/ensure-reduced","clojure.core/enumeration-seq","clojure.core/error-handler","clojure.core/error-mode","clojure.core/eval","clojure.core/even?","clojure.core/every-pred","clojure.core/every?","clojure.core/ex-cause","clojure.core/ex-data","clojure.core/ex-info","clojure.core/ex-message","clojure.core/extend","clojure.core/extenders","clojure.core/extends?","clojure.core/false?","clojure.core/ffirst","clojure.core/file-seq","clojure.core/filter","clojure.core/filterv","clojure.core/find","clojure.core/find-keyword","clojure.core/find-ns","clojure.core/find-protocol-impl","clojure.core/find-protocol-method","clojure.core/find-var","clojure.core/first","clojure.core/flatten","clojure.core/float","clojure.core/float-array","clojure.core/float?","clojure.core/floats","clojure.core/flush","clojure.core/fn?","clojure.core/fnext","clojure.core/fnil","clojure.core/force","clojure.core/format","clojure.core/frequencies","clojure.core/future-call","clojure.core/future-cancel","clojure.core/future-cancelled?","clojure.core/future-done?","clojure.core/future?","clojure.core/gensym","clojure.core/get","clojure.core/get-in","clojure.core/get-method","clojure.core/get-proxy-class","clojure.core/get-thread-bindings","clojure.core/get-validator","clojure.core/group-by","clojure.core/halt-when","clojure.core/hash","clojure.core/hash-combine","clojure.core/hash-map","clojure.core/hash-ordered-coll","clojure.core/hash-set","clojure.core/hash-unordered-coll","clojure.core/ident?","clojure.core/identical?","clojure.core/identity","clojure.core/ifn?","clojure.core/in-ns","clojure.core/inc","clojure.core/inc'","clojure.core/indexed?","clojure.core/infinite?","clojure.core/init-proxy","clojure.core/inst-ms","clojure.core/inst-ms*","clojure.core/inst?","clojure.core/instance?","clojure.core/int","clojure.core/int-array","clojure.core/int?","clojure.core/integer?","clojure.core/interleave","clojure.core/intern","clojure.core/interpose","clojure.core/into","clojure.core/into-array","clojure.core/ints","clojure.core/isa?","clojure.core/iterate","clojure.core/iteration","clojure.core/iterator-seq","clojure.core/juxt","clojure.core/keep","clojure.core/keep-indexed","clojure.core/key","clojure.core/keys","clojure.core/keyword","clojure.core/keyword?","clojure.core/last","clojure.core/line-seq","clojure.core/list","clojure.core/list*","clojure.core/list?","clojure.core/load","clojure.core/load-file","clojure.core/load-reader","clojure.core/load-string","clojure.core/loaded-libs","clojure.core/long","clojure.core/long-array","clojure.core/longs","clojure.core/macroexpand","clojure.core/macroexpand-1","clojure.core/make-array","clojure.core/make-hierarchy","clojure.core/map","clojure.core/map-entry?","clojure.core/map-indexed","clojure.core/map?","clojure.core/mapcat","clojure.core/mapv","clojure.core/max","clojure.core/max-key","clojure.core/memoize","clojure.core/merge","clojure.core/merge-with","clojure.core/meta","clojure.core/method-sig","clojure.core/methods","clojure.core/min","clojure.core/min-key","clojure.core/mix-collection-hash","clojure.core/mod","clojure.core/munge","clojure.core/name","clojure.core/namespace","clojure.core/namespace-munge","clojure.core/nat-int?","clojure.core/neg-int?","clojure.core/neg?","clojure.core/newline","clojure.core/next","clojure.core/nfirst","clojure.core/nil?","clojure.core/nnext","clojure.core/not","clojure.core/not-any?","clojure.core/not-empty","clojure.core/not-every?","clojure.core/not=","clojure.core/ns-aliases","clojure.core/ns-imports","clojure.core/ns-interns","clojure.core/ns-map","clojure.core/ns-name","clojure.core/ns-publics","clojure.core/ns-refers","clojure.core/ns-resolve","clojure.core/ns-unalias","clojure.core/ns-unmap","clojure.core/nth","clojure.core/nthnext","clojure.core/nthrest","clojure.core/num","clojure.core/number?","clojure.core/numerator","clojure.core/object-array","clojure.core/odd?","clojure.core/parents","clojure.core/parse-boolean","clojure.core/parse-double","clojure.core/parse-long","clojure.core/parse-uuid","clojure.core/partial","clojure.core/partition","clojure.core/partition-all","clojure.core/partition-by","clojure.core/pcalls","clojure.core/peek","clojure.core/persistent!","clojure.core/pmap","clojure.core/pop","clojure.core/pop!","clojure.core/pop-thread-bindings","clojure.core/pos-int?","clojure.core/pos?","clojure.core/pr","clojure.core/pr-str","clojure.core/prefer-method","clojure.core/prefers","clojure.core/print","clojure.core/print-ctor","clojure.core/print-dup","clojure.core/print-method","clojure.core/print-simple","clojure.core/print-str","clojure.core/printf","clojure.core/println","clojure.core/println-str","clojure.core/prn","clojure.core/prn-str","clojure.core/promise","clojure.core/proxy-call-with-super","clojure.core/proxy-mappings","clojure.core/proxy-name","clojure.core/push-thread-bindings","clojure.core/qualified-ident?","clojure.core/qualified-keyword?","clojure.core/qualified-symbol?","clojure.core/quot","clojure.core/rand","clojure.core/rand-int","clojure.core/rand-nth","clojure.core/random-sample","clojure.core/random-uuid","clojure.core/range","clojure.core/ratio?","clojure.core/rational?","clojure.core/rationalize","clojure.core/re-find","clojure.core/re-groups","clojure.core/re-matcher","clojure.core/re-matches","clojure.core/re-pattern","clojure.core/re-seq","clojure.core/read","clojure.core/read+string","clojure.core/read-line","clojure.core/read-string","clojure.core/reader-conditional","clojure.core/reader-conditional?","clojure.core/realized?","clojure.core/record?","clojure.core/reduce","clojure.core/reduce-kv","clojure.core/reduced","clojure.core/reduced?","clojure.core/reductions","clojure.core/ref","clojure.core/ref-history-count","clojure.core/ref-max-history","clojure.core/ref-min-history","clojure.core/ref-set","clojure.core/refer","clojure.core/release-pending-sends","clojure.core/rem","clojure.core/remove","clojure.core/remove-all-methods","clojure.core/remove-method","clojure.core/remove-ns","clojure.core/remove-tap","clojure.core/remove-watch","clojure.core/repeat","clojure.core/repeatedly","clojure.core/replace","clojure.core/replicate","clojure.core/require","clojure.core/requiring-resolve","clojure.core/reset!","clojure.core/reset-meta!","clojure.core/reset-vals!","clojure.core/resolve","clojure.core/rest","clojure.core/restart-agent","clojure.core/resultset-seq","clojure.core/reverse","clojure.core/reversible?","clojure.core/rseq","clojure.core/rsubseq","clojure.core/run!","clojure.core/satisfies?","clojure.core/second","clojure.core/select-keys","clojure.core/send","clojure.core/send-off","clojure.core/send-via","clojure.core/seq","clojure.core/seq-to-map-for-destructuring","clojure.core/seq?","clojure.core/seqable?","clojure.core/seque","clojure.core/sequence","clojure.core/sequential?","clojure.core/set","clojure.core/set-agent-send-executor!","clojure.core/set-agent-send-off-executor!","clojure.core/set-error-handler!","clojure.core/set-error-mode!","clojure.core/set-validator!","clojure.core/set?","clojure.core/short","clojure.core/short-array","clojure.core/shorts","clojure.core/shuffle","clojure.core/shutdown-agents","clojure.core/simple-ident?","clojure.core/simple-keyword?","clojure.core/simple-symbol?","clojure.core/slurp","clojure.core/some","clojure.core/some-fn","clojure.core/some?","clojure.core/sort","clojure.core/sort-by","clojure.core/sorted-map","clojure.core/sorted-map-by","clojure.core/sorted-set","clojure.core/sorted-set-by","clojure.core/sorted?","clojure.core/special-symbol?","clojure.core/spit","clojure.core/split-at","clojure.core/split-with","clojure.core/str","clojure.core/string?","clojure.core/struct","clojure.core/struct-map","clojure.core/subs","clojure.core/subseq","clojure.core/subvec","clojure.core/supers","clojure.core/swap!","clojure.core/swap-vals!","clojure.core/symbol","clojure.core/symbol?","clojure.core/tagged-literal","clojure.core/tagged-literal?","clojure.core/take","clojure.core/take-last","clojure.core/take-nth","clojure.core/take-while","clojure.core/tap>","clojure.core/test","clojure.core/the-ns","clojure.core/thread-bound?","clojure.core/to-array","clojure.core/to-array-2d","clojure.core/trampoline","clojure.core/transduce","clojure.core/transient","clojure.core/tree-seq","clojure.core/true?","clojure.core/type","clojure.core/unchecked-add","clojure.core/unchecked-add-int","clojure.core/unchecked-byte","clojure.core/unchecked-char","clojure.core/unchecked-dec","clojure.core/unchecked-dec-int","clojure.core/unchecked-divide-int","clojure.core/unchecked-double","clojure.core/unchecked-float","clojure.core/unchecked-inc","clojure.core/unchecked-inc-int","clojure.core/unchecked-int","clojure.core/unchecked-long","clojure.core/unchecked-multiply","clojure.core/unchecked-multiply-int","clojure.core/unchecked-negate","clojure.core/unchecked-negate-int","clojure.core/unchecked-remainder-int","clojure.core/unchecked-short","clojure.core/unchecked-subtract","clojure.core/unchecked-subtract-int","clojure.core/underive","clojure.core/unreduced","clojure.core/unsigned-bit-shift-right","clojure.core/update","clojure.core/update-in","clojure.core/update-keys","clojure.core/update-proxy","clojure.core/update-vals","clojure.core/uri?","clojure.core/use","clojure.core/uuid?","clojure.core/val","clojure.core/vals","clojure.core/var-get","clojure.core/var-set","clojure.core/var?","clojure.core/vary-meta","clojure.core/vec","clojure.core/vector","clojure.core/vector-of","clojure.core/vector?","clojure.core/volatile!","clojure.core/volatile?","clojure.core/vreset!","clojure.core/with-bindings*","clojure.core/with-meta","clojure.core/with-redefs-fn","clojure.core/xml-seq","clojure.core/zero?","clojure.core/zipmap","coll?","commute","comp","comparator","compare","compare-and-set!","compile","complement","completing","concat","conj","conj!","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","dedupe","delay?","deliver","denominator","deref","derive","descendants","destructure","disj","disj!","dissoc","dissoc!","distinct","distinct?","doall","dorun","double","double-array","double?","doubles","drop","drop-last","drop-while","eduction","empty","empty?","ensure","ensure-reduced","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-cause","ex-data","ex-info","ex-message","extend","extenders","extends?","false?","ffirst","file-seq","filter","filterv","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn?","fnext","fnil","force","format","frequencies","future-call","future-cancel","future-cancelled?","future-done?","future?","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","halt-when","hash","hash-combine","hash-map","hash-ordered-coll","hash-set","hash-unordered-coll","ident?","identical?","identity","ifn?","in-ns","inc","inc'","indexed?","infinite?","init-proxy","inst-ms","inst-ms*","inst?","instance?","int","int-array","int?","integer?","interleave","intern","interpose","into","into-array","ints","isa?","iterate","iteration","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","long","long-array","longs","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-entry?","map-indexed","map?","mapcat","mapv","max","max-key","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mix-collection-hash","mod","munge","name","namespace","namespace-munge","nat-int?","neg-int?","neg?","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","parents","parse-boolean","parse-double","parse-long","parse-uuid","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop","pop!","pop-thread-bindings","pos-int?","pos?","pr","pr-str","prefer-method","prefers","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy-call-with-super","proxy-mappings","proxy-name","push-thread-bindings","qualified-ident?","qualified-keyword?","qualified-symbol?","quot","rand","rand-int","rand-nth","random-sample","random-uuid","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read+string","read-line","read-string","reader-conditional","reader-conditional?","realized?","record?","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-tap","remove-watch","repeat","repeatedly","replace","replicate","require","requiring-resolve","reset!","reset-meta!","reset-vals!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","run!","satisfies?","second","select-keys","send","send-off","send-via","seq","seq-to-map-for-destructuring","seq?","seqable?","seque","sequence","sequential?","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","simple-ident?","simple-keyword?","simple-symbol?","slurp","some","some-fn","some?","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","swap-vals!","symbol","symbol?","tagged-literal","tagged-literal?","take","take-last","take-nth","take-while","tap>","test","the-ns","thread-bound?","to-array","to-array-2d","trampoline","transduce","transient","tree-seq","true?","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unreduced","unsigned-bit-shift-right","update","update-in","update-keys","update-proxy","update-vals","uri?","use","uuid?","val","vals","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","volatile!","volatile?","vreset!","with-bindings*","with-meta","with-redefs-fn","xml-seq","zero?","zipmap"], + \ 'clojureMacro': ["->","->>","..","amap","and","areduce","as->","assert","binding","bound-fn","clojure.core/->","clojure.core/->>","clojure.core/..","clojure.core/amap","clojure.core/and","clojure.core/areduce","clojure.core/as->","clojure.core/assert","clojure.core/binding","clojure.core/bound-fn","clojure.core/comment","clojure.core/declare","clojure.core/delay","clojure.core/dosync","clojure.core/doto","clojure.core/extend-protocol","clojure.core/extend-type","clojure.core/for","clojure.core/future","clojure.core/gen-class","clojure.core/gen-interface","clojure.core/import","clojure.core/io!","clojure.core/lazy-cat","clojure.core/lazy-seq","clojure.core/locking","clojure.core/memfn","clojure.core/ns","clojure.core/or","clojure.core/proxy","clojure.core/proxy-super","clojure.core/pvalues","clojure.core/refer-clojure","clojure.core/reify","clojure.core/some->","clojure.core/some->>","clojure.core/sync","clojure.core/time","clojure.core/vswap!","clojure.core/with-bindings","clojure.core/with-in-str","clojure.core/with-loading-context","clojure.core/with-local-vars","clojure.core/with-open","clojure.core/with-out-str","clojure.core/with-precision","clojure.core/with-redefs","comment","declare","delay","dosync","doto","extend-protocol","extend-type","for","future","gen-class","gen-interface","import","io!","lazy-cat","lazy-seq","locking","memfn","ns","or","proxy","proxy-super","pvalues","refer-clojure","reify","some->","some->>","sync","time","vswap!","with-bindings","with-in-str","with-loading-context","with-local-vars","with-open","with-out-str","with-precision","with-redefs"], + \ 'clojureRepeat': ["clojure.core/doseq","clojure.core/dotimes","clojure.core/loop","clojure.core/while","doseq","dotimes","loop","loop*","recur","while"], + \ 'clojureSpecial': ["&",".","clojure.core/fn","clojure.core/import*","clojure.core/let","clojure.core/letfn","do","fn","fn*","let","let*","letfn","letfn*","monitor-enter","monitor-exit","new","quote","reify*","set!","var"], + \ 'clojureVariable': ["*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-namespace-maps*","*print-readably*","*read-eval*","*reader-resolver*","*source-path*","*suppress-read*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","EMPTY-NODE","Inst","char-escape-string","char-name-string","clojure.core/*1","clojure.core/*2","clojure.core/*3","clojure.core/*agent*","clojure.core/*allow-unresolved-vars*","clojure.core/*assert*","clojure.core/*clojure-version*","clojure.core/*command-line-args*","clojure.core/*compile-files*","clojure.core/*compile-path*","clojure.core/*compiler-options*","clojure.core/*data-readers*","clojure.core/*default-data-reader-fn*","clojure.core/*e","clojure.core/*err*","clojure.core/*file*","clojure.core/*flush-on-newline*","clojure.core/*fn-loader*","clojure.core/*in*","clojure.core/*math-context*","clojure.core/*ns*","clojure.core/*out*","clojure.core/*print-dup*","clojure.core/*print-length*","clojure.core/*print-level*","clojure.core/*print-meta*","clojure.core/*print-namespace-maps*","clojure.core/*print-readably*","clojure.core/*read-eval*","clojure.core/*reader-resolver*","clojure.core/*source-path*","clojure.core/*suppress-read*","clojure.core/*unchecked-math*","clojure.core/*use-context-classloader*","clojure.core/*verbose-defrecords*","clojure.core/*warn-on-reflection*","clojure.core/EMPTY-NODE","clojure.core/Inst","clojure.core/char-escape-string","clojure.core/char-name-string","clojure.core/default-data-readers","clojure.core/primitives-classnames","clojure.core/print-dup","clojure.core/print-method","clojure.core/unquote","clojure.core/unquote-splicing","default-data-readers","primitives-classnames","print-dup","print-method","unquote","unquote-splicing"] + \ } + +function! s:syntax_keyword(dict) + for key in keys(a:dict) + execute 'syntax keyword' key join(a:dict[key], ' ') + endfor +endfunction + +if exists('b:clojure_syntax_without_core_keywords') && b:clojure_syntax_without_core_keywords + " Only match language specials and primitives + for s:key in ['clojureBoolean', 'clojureConstant', 'clojureException', 'clojureSpecial'] + execute 'syntax keyword' s:key join(s:clojure_syntax_keywords[s:key], ' ') + endfor +else + call s:syntax_keyword(s:clojure_syntax_keywords) +endif + +if exists('g:clojure_syntax_keywords') + call s:syntax_keyword(g:clojure_syntax_keywords) +endif + +if exists('b:clojure_syntax_keywords') + call s:syntax_keyword(b:clojure_syntax_keywords) +endif + +unlet! s:key +delfunction s:syntax_keyword + +" Keywords are symbols: +" static Pattern symbolPat = Pattern.compile("[:]?([\\D&&[^/]].*/)?([\\D&&[^/]][^/]*)"); +" But they: +" * Must not end in a : or / +" * Must not have two adjacent colons except at the beginning +" * Must not contain any reader metacharacters except for ' and # +syntax match clojureKeyword "\v<:{1,2}([^ \n\r\t()\[\]{}";@^`~\\/]+/)*[^ \n\r\t()\[\]{}";@^`~\\/]+:@1" + +syntax match clojureStringEscape "\v\\%([\\btnfr"]|u\x{4}|[0-3]\o{2}|\o{1,2})" contained + +syntax region clojureString matchgroup=clojureStringDelimiter start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=clojureStringEscape,@Spell + +syntax match clojureCharacter "\v\\%(o%([0-3]\o{2}|\o{1,2})|u\x{4}|newline|tab|space|return|backspace|formfeed|.)" + +syntax match clojureSymbol "\v%([a-zA-Z!$&*_+=|<.>?-]|[^\x00-\x7F])+%(:?%([a-zA-Z0-9!#$%&*_+=|'<.>/?-]|[^\x00-\x7F]))*[#:]@1" + +syntax match clojureQuote "\v['`]" +syntax match clojureUnquote "\v\~\@?" +syntax match clojureMeta "\^" +syntax match clojureDeref "@" +syntax match clojureDispatch "\v#[\^'=<_]?" + +" Clojure permits no more than 20 anonymous params. +syntax match clojureAnonArg "%\(20\|1\d\|[1-9]\|&\)\?" + +syntax match clojureRegexpEscape "\v\\%([\\tnrfae.()\[\]{}^$*?+]|c\u|0[0-3]?\o{1,2}|x%(\x{2}|\{\x{1,6}\})|u\x{4})" contained display +syntax region clojureRegexpQuoted start=/\\Q/ms=e+1 skip=/\\\\\|\\"/ end=/\\E/me=s-1 end=/"/me=s-1 contained +syntax region clojureRegexpQuote start=/\\Q/ skip=/\\\\\|\\"/ end=/\\E/ end=/"/me=s-1 contains=clojureRegexpQuoted keepend contained + +" -*- CHARACTER PROPERTY CLASSES -*- +" Generated from https://github.com/clojure-vim/clojure.vim/blob/fd280e33e84c88e97860930557dba3ff80b1a82d/clj/src/vim_clojure_static/generate.clj +" Java version 17.0.2 +syntax match clojureRegexpPosixCharClass "\v\\[pP]\{%(Cntrl|A%(l%(pha|num)|SCII)|Space|Graph|Upper|P%(rint|unct)|Blank|XDigit|Digit|Lower)\}" contained display +syntax match clojureRegexpJavaCharClass "\v\\[pP]\{java%(Whitespace|JavaIdentifier%(Part|Start)|SpaceChar|Mirrored|TitleCase|I%(SOControl|de%(ographic|ntifierIgnorable))|D%(efined|igit)|U%(pperCase|nicodeIdentifier%(Part|Start))|L%(etter%(OrDigit)?|owerCase)|Alphabetic)\}" contained display +syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{\cIs%(l%(owercase|etter)|hex%(digit|_digit)|w%(hite%(_space|space)|ord)|noncharacter%(_code_point|codepoint)|p%(rint|unctuation)|ideographic|graph|a%(l%(num|phabetic)|ssigned)|uppercase|join%(control|_control)|titlecase|blank|digit|control)\}" contained display +syntax match clojureRegexpUnicodeCharClass "\v\\[pP][NSCMZPL]" contained display +syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{%(N[dlo]?|P[dcifeos]?|C[ncfos]?|M[nce]?|Z[lsp]?|S[mcko]?|L[muCDlto]?)\}" contained display +syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{%(Is|gc\=|general_category\=)?%(N[dlo]?|P[dcifeos]?|C[ncfos]?|M[nce]?|Z[lsp]?|S[mcko]?|L[muCDlto]?)\}" contained display +syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{\c%(Is|sc\=|script\=)%(k%(its|h%(oj%(ki)?|m%(r|er)|itan_small_script|udawadi|ar%(oshthi)?)|a%(li|n%(a|nada)|takana%(_or_hiragana)?|yah_li|ithi)|nda|thi)|r%(ohg|un%(ic|r)|ejang|jng)|l%(epc%(ha)?|i%(mbu?|n%([ab]|ear_[ab])|su)|y%([dc]i%(an)?)|a%(t%(n|in)|na|oo?))|t%(elu%(gu)?|ha%(i|a%(na)?)|i%(finagh|rh%(uta)?|b%(t|etan))|fng|glg|a%(i_%(le|tham|viet)|g%(alog|b%(anwa)?)|vt|kri?|ng%(ut)?|l[ue]|m%(il|l)))|vaii?|y%(i%(ii)?|ezi%(di)?)|e%(thi%(opic)?|l%(ym%(aic)?|ba%(san)?)|gyp%(tian_hieroglyphs)?)|u%(gar%(itic)?|nknown)|h%(ung|ira%(gana)?|rkt|mn[gp]|a%(n%(i%(fi_rohingya)?|unoo|o|g%(ul)?)?|tr%(an)?)|luw|ebr%(ew)?)|g%(r%(e%(k|ek)|an%(tha)?)|lag%(olitic)?|eor%(gian)?|o%(n[mg]|th%(ic)?)|u%(j%(arati|r)|r%(u|mukhi)|njala_gondi))|m%(lym|a%(n%(d%(aic)?|i%(chaean)?)|saram_gondi|h%(ajani|j)|ka%(sar)?|rc%(hen)?|layalam)|o%(di|ng%(olian)?)|e%(r%(c|o%(itic_%(hieroglyphs|cursive))?)|etei_mayek|nd%(e_kikakui)?|d%(f|efaidrin))|roo?|y%(anmar|mr)|tei|iao|ult%(ani)?)|d%(upl%(oyan)?|srt|i%(ak|ves_akuru)|ogra?|e%(seret|va%(nagari)?))|z%(an%(abazar_square|b)|inh|yyy|zzz)|n%(yiakeng_puachue_hmong|bat|koo?|ew%(_tai_lue|a)|ushu|shu|a%(bataean|rb|nd%(inagari)?))|s%(h%(rd|a%(vian|rada|w))|o%(yo%(mbo)?|g%(d%(ian)?|o)|ra%(_sompeng)?)|i%(n%(d|h%(ala)?)|dd%(ham)?|gnwriting)|a%(ur%(ashtra)?|m%(r|aritan)|rb)|y%(r%(c|iac)|lo%(ti_nagri)?)|und%(anese)?|gnw)|w%(cho|a%(ncho|ra%(ng_citi)?))|c%(y%(priot|r%(l|illic))|h%(er%(okee)?|a%(m|kma)|rs|orasmian)|a%(km|ucasian_albanian|n%(adian_aboriginal|s)|ri%(an)?)|prt|uneiform|o%(pt%(ic)?|mmon))|i%(n%(scriptional_pa%(rthian|hlavi)|herited)|mperial_aramaic|tal)|p%(h%(l[ip]|oenician|ag%(s_pa)?|nx)|a%(lm%(yrene)?|u%(_cin_hau|c)|hawh_hmong)|rti|salter_pahlavi|lrd|erm)|x%(peo|sux)|b%(eng%(ali)?|ra%(i%(lle)?|h%(mi)?)|opo%(mofo)?|u%(gi%(nese)?|h%(d|id))|h%(ks|aiksuki)|a%(ss%(a_vah)?|t%(ak|k)|li%(nese)?|mum?))|java%(nese)?|o%(g%(am|ham)|s%(age|ge|ma%(nya)?)|l%(d_%(hungarian|north_arabian|so%(gdian|uth_arabian)|per%(mic|sian)|italic|turkic)|ck|_chiki)|r%(iya|kh|ya))|a%(r%(ab%(ic)?|m%([ni]|enian))|dl%(m|am)|natolian_hieroglyphs|hom|v%(st|estan)|ghb))\}" contained display +syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{\c%(In|blk\=|block\=)%(zanabazar%([ _]square|square)|javanese|h%(a%(lfwidth%( and fullwidth forms|andfullwidthforms|_and_fullwidth_forms)|tran|n%(unoo|gul%(compatibilityjamo|syllables|jamo%(extended\-[ab])?|_%(syllables|jamo%(_extended_[ab])?|compatibility_jamo)| %(syllables|compatibility jamo|jamo%( extended\-[ab])?))|ifi%([_ ]rohingya|rohingya)))|i%(ragana|gh%( %(private use surrogates|surrogates)|_%(private_use_surrogates|surrogates)|surrogates|privateusesurrogates))|ebrew)|i%(pa%([ _]extensions|extensions)|n%(scriptional%(%([ _]pa%(rthian|hlavi))|pa%(rthian|hlavi))|dic%(siyaqnumbers|_siyaq_numbers| siyaq numbers))|deographic%(symbolsandpunctuation|_%(description_characters|symbols_and_punctuation)| %(description characters|symbols and punctuation)|descriptioncharacters)|mperial%(aramaic|[_ ]aramaic))|c%(o%(ntrol%(pictures|[ _]pictures)|ptic%(epactnumbers|_epact_numbers| epact numbers)?|m%(mon%(_indic_number_forms|indicnumberforms| indic number forms)|bining%(halfmarks|_%(diacritical_marks%(_%(supplement|for_symbols|extended))?|marks_for_symbols|half_marks)| %(half marks|diacritical marks%( %(supplement|for symbols|extended))?|marks for symbols)|diacriticalmarks%(supplement|forsymbols|extended)?|marksforsymbols))|unting%( rod numerals|_rod_numerals|rodnumerals))|a%(rian|ucasian%([ _]albanian|albanian))|jk%(unifiedideographs%(extension[dgacfbe])?|s%(ymbolsandpunctuation|trokes)|_%(s%(trokes|ymbols_and_punctuation)|radicals_supplement|unified_ideographs%(_extension_[dgacfbe])?|compatibility%(_%(forms|ideographs%(_supplement)?))?)|compatibility%(forms|ideographs%(supplement)?)?|radicalssupplement| %(compatibility%( %(ideographs%( supplement)?|forms))?|unified ideographs%( extension [dgacfbe])?|radicals supplement|s%(ymbols and punctuation|trokes)))|y%(rillic%(supplement%(ary)?| %(supplement%(ary)?|extended\-[acb])|extended\-[acb]|_%(extended_[acb]|supplement%(ary)?))?|priot%(syllabary|[ _]syllabary))|u%(rrency%([_ ]symbols|symbols)|neiform%(_numbers_and_punctuation|numbersandpunctuation| numbers and punctuation)?)|h%(e%(ss%([_ ]symbols|symbols)|rokee%(supplement|[ _]supplement)?)|a%(m|kma)|orasmian))|g%(othic|u%(njala%(gondi|[_ ]gondi)|jarati|rmukhi)|lagolitic%(supplement|[ _]supplement)?|e%(o%(rgian%(supplement|%([_ ]%(supplement|extended))|extended)?|metric%( shapes%( extended)?|shapes%(extended)?|_shapes%(_extended)?))|neral%([_ ]punctuation|punctuation))|r%(eek%( %(and coptic|extended)|andcoptic|_%(and_coptic|extended)|extended)?|antha))|s%(h%(orthand%( format controls|_format_controls|formatcontrols)|a%(vian|rada))|u%(ndanese%(supplement|[ _]supplement)?|p%(erscripts%(_and_subscripts|andsubscripts| and subscripts)|plementa%(ry%(_private_use_area_[ab]|privateusearea\-[ab]| private use area\-[ab])|l%( %(mathematical operators|symbols and pictographs|punctuation|arrows\-[acb])|symbolsandpictographs|mathematicaloperators|punctuation|arrows\-[acb]|_%(arrows_[acb]|symbols_and_pictographs|mathematical_operators|punctuation))))|tton%(signwriting|[_ ]signwriting))|i%(nhala%( archaic numbers|archaicnumbers|_archaic_numbers)?|ddham)|y%(loti%([_ ]nagri|nagri)|mbols%( %(for legacy computing|and pictographs extended\-a)|forlegacycomputing|andpictographsextended\-a|_%(and_pictographs_extended_a|for_legacy_computing))|riac%(supplement|[ _]supplement)?)|p%(acing%(_modifier_letters| modifier letters|modifierletters)|ecials)|a%(maritan|urashtra)|o%(yombo|gdian|ra%(sompeng|[ _]sompeng))|mall%(kanaextension| %(kana extension|form variants)|_%(kana_extension|form_variants)|formvariants))|y%(i%(syllables|%([_ ]%(syllables|radicals))|radicals|jing%(hexagramsymbols| hexagram symbols|_hexagram_symbols))|ezidi)|p%(h%(o%(enician|netic%( extensions%( supplement)?|extensions%(supplement)?|_extensions%(_supplement)?))|a%(istos%([ _]disc|disc)|gs[_\-]pa))|laying%(cards|[_ ]cards)|rivate%(usearea| use area|_use_area)|a%(hawh%(hmong|[_ ]hmong)|u%(_cin_hau|cinhau| cin hau)|lmyrene)|salter%(pahlavi|[ _]pahlavi))|e%(l%(basan|ymaic)|arly%(_dynastic_cuneiform|dynasticcuneiform| dynastic cuneiform)|moticons|gyptian%(hieroglyph%(formatcontrols|s)| hieroglyph%( format controls|s)|_hieroglyph%(_format_controls|s))|nclosed%( %(cjk letters and months|ideographic supplement|alphanumeric%( supplement|s))|cjklettersandmonths|_%(ideographic_supplement|alphanumeric%(_supplement|s)|cjk_letters_and_months)|alphanumerics%(upplement)?|ideographicsupplement)|thiopic%(supplement|_%(supplement|extended%(_a)?)| %(supplement|extended%(\-a)?)|extended%(\-a)?)?)|r%(u%(nic|mi%(numeralsymbols| numeral symbols|_numeral_symbols))|ejang)|d%(o%(gra|mino%([ _]tiles|tiles))|e%(seret|vanagari%([ _]extended|extended)?)|uployan|i%(ngbats|ves%([_ ]akuru|akuru)))|m%(e%(defaidrin|nde%([ _]kikakui|kikakui)|etei%(mayek%(extensions)?|_mayek%(_extensions)?| mayek%( extensions)?)|roitic%(hieroglyphs|%([_ ]%(hieroglyphs|cursive))|cursive))|o%(ngolian%(supplement|[ _]supplement)?|di%(fier%(_tone_letters| tone letters|toneletters))?)|ro|u%(ltani|sical%([_ ]symbols|symbols))|i%(ao|scellaneous%(technical|symbols%(and%(pictographs|arrows))?|mathematicalsymbols\-[ab]| %(technical|mathematical symbols\-[ab]|symbols%( and %(pictographs|arrows))?)|_%(technical|symbols%(_and_%(pictographs|arrows))?|mathematical_symbols_[ab])))|yanmar%( extended\-[ab]|extended\-[ab]|_extended_[ab])?|a%(h%(ajani|jong%([ _]tiles|tiles))|rchen|n%(daic|ichaean)|yan%([_ ]numerals|numerals)|saram%(gondi|[_ ]gondi)|layalam|thematical%(alphanumericsymbols| %(alphanumeric symbols|operators)|_%(alphanumeric_symbols|operators)|operators)|kasar))|o%(s%(age|manya)|ttoman%(siyaqnumbers|_siyaq_numbers| siyaq numbers)|r%(namental%([ _]dingbats|dingbats)|iya)|ptical%( character recognition|_character_recognition|characterrecognition)|gham|l%([ _]chiki|d%(hungarian| %(hungarian|so%(uth arabian|gdian)|per%(mic|sian)|north arabian|italic|turkic)|per%(mic|sian)|so%(utharabian|gdian)|italic|turkic|_%(hungarian|north_arabian|so%(gdian|uth_arabian)|per%(mic|sian)|italic|turkic)|northarabian)|chiki))|n%(ew%(_tai_lue|a|tailue| tai lue)|ko|yiakeng%( puachue hmong|puachuehmong|_puachue_hmong)|a%(bataean|ndinagari)|u%(shu|mber%(forms|[ _]forms)))|b%(u%(ginese|hid)|a%(s%(sa%([ _]vah|vah)|ic%([ _]latin|latin))|linese|mum%(supplement|[ _]supplement)?|tak)|ra%(hmi|ille%(patterns|[_ ]patterns))|o%(x%([ _]drawing|drawing)|pomofo%([ _]extended|extended)?)|lock%([ _]elements|elements)|haiksuki|yzantine%( musical symbols|musicalsymbols|_musical_symbols)|engali)|l%(i%(mbu|near%(a| %(a|b %(ideograms|syllabary))|b%(ideograms|syllabary)|_%(a|b_%(ideograms|syllabary)))|su%(supplement|[ _]supplement)?)|a%(tin%(extended%(\-[dacbe]|additional)|_%(extended_%([dcbe]|a%(dditional)?)|1_supplement)|\-1%(supplement| supplement)| extended%(\-[dacbe]| additional))|o)|e%(tterlike%([_ ]symbols|symbols)|pcha)|ow%([_ ]surrogates|surrogates)|y[cd]ian)|k%(h%(aroshthi|ojki|mer%([_ ]symbols|symbols)?|udawadi|itan%( small script|smallscript|_small_script))|a%(takana%(_phonetic_extensions|phoneticextensions| phonetic extensions)?|n%(gxi%([_ ]radicals|radicals)|a%(extended\-a|supplement| %(extended\-a|supplement)|_%(supplement|extended_a))|bun|nada)|ithi|yah%([ _]li|li)))|wa%(ncho|rang%(citi|[ _]citi))|t%(elugu|ransport%( and map symbols|_and_map_symbols|andmapsymbols)|i%(rhuta|betan|finagh)|a%(mil%(supplement|[ _]supplement)?|kri|ngut%(supplement|%([ _]%(supplement|components))|components)?|i%(xuanjingsymbols|_%(le|xuan_jing_symbols|tham|viet)|le| %(xuan jing symbols|le|tham|viet)|tham|viet)|g%(alog|s|banwa))|ha%(i|ana))|a%(l%(chemical%([_ ]symbols|symbols)|phabetic%( presentation forms|_presentation_forms|presentationforms))|n%(cient%(_%(greek_%(musical_notation|numbers)|symbols)|greek%(numbers|musicalnotation)| %(greek %(numbers|musical notation)|symbols)|symbols)|atolian%([ _]hieroglyphs|hieroglyphs))|dlam|r%(menian|abic%(extended\-a|mathematicalalphabeticsymbols|supplement|_%(presentation_forms_[ab]|supplement|extended_a|mathematical_alphabetic_symbols)| %(extended\-a|mathematical alphabetic symbols|supplement|presentation forms\-[ab])|presentationforms\-[ab])?|rows)|egean%(numbers|[ _]numbers)|vestan|hom)|u%(garitic|nified%(canadianaboriginalsyllabics%(extended)?|_canadian_aboriginal_syllabics%(_extended)?| canadian aboriginal syllabics%( extended)?))|v%(a%(i|riation%( selectors%( supplement)?|selectors%(supplement)?|_selectors%(_supplement)?))|e%(rtical%(forms|[ _]forms)|dic%([ _]extensions|extensions))))\}" contained display + +syntax match clojureRegexpPredefinedCharClass "\v%(\\[dDsSwW]|\.)" contained display +syntax cluster clojureRegexpCharPropertyClasses contains=clojureRegexpPosixCharClass,clojureRegexpJavaCharClass,clojureRegexpUnicodeCharClass +syntax cluster clojureRegexpCharClasses contains=clojureRegexpPredefinedCharClass,clojureRegexpCharClass,@clojureRegexpCharPropertyClasses +syntax region clojureRegexpCharClass start="\[" skip=/\\\\\|\\]/ end="]" contained contains=clojureRegexpPredefinedCharClass,@clojureRegexpCharPropertyClasses +syntax match clojureRegexpBoundary "\\[bBAGZz]" contained display +syntax match clojureRegexpBoundary "[$^]" contained display +syntax match clojureRegexpQuantifier "[?*+][?+]\=" contained display +syntax match clojureRegexpQuantifier "\v\{\d+%(,|,\d+)?}\??" contained display +syntax match clojureRegexpOr "|" contained display +syntax match clojureRegexpBackRef "\v\\%([1-9]\d*|k\<[[:alpha:]]+\>)" contained display + +" Mode modifiers, mode-modified spans, lookaround, regular and atomic +" grouping, and named-capturing. +syntax match clojureRegexpMod "\v\(@<=\?:" contained display +syntax match clojureRegexpMod "\v\(@<=\?[xdsmiuU]*-?[xdsmiuU]+:?" contained display +syntax match clojureRegexpMod "\v\(@<=\?%(\)" contained display +syntax match clojureRegexpMod "\v\(@<=\?\<[[:alpha:]]+\>" contained display + +syntax region clojureRegexpGroup start="(" skip=/\\\\\|\\)/ end=")" matchgroup=clojureRegexpGroup contained contains=clojureRegexpMod,clojureRegexpQuantifier,clojureRegexpBoundary,clojureRegexpEscape,@clojureRegexpCharClasses +syntax region clojureRegexp matchgroup=clojureRegexpDelimiter start=/\#"/ skip=/\\\\\|\\"/ end=/"/ contains=@clojureRegexpCharClasses,clojureRegexpEscape,clojureRegexpQuote,clojureRegexpBoundary,clojureRegexpQuantifier,clojureRegexpOr,clojureRegexpBackRef,clojureRegexpGroup keepend + +syntax keyword clojureCommentTodo contained FIXME XXX TODO BUG NOTE HACK FIXME: XXX: TODO: BUG: NOTE: HACK: + +syntax match clojureComment ";.*$" contains=clojureCommentTodo,@Spell +syntax match clojureComment "#!.*$" +syntax match clojureComment "," + +" Comment out discarded forms. +if exists('g:clojure_discard_macro') && g:clojure_discard_macro + syntax region clojureDiscard matchgroup=clojureDiscard start=/#_[ ,\t\n`'~]*/ end=/[, \t\n()\[\]{}";]/me=e-1 + syntax region clojureDiscard matchgroup=clojureDiscard start=/#_[ ,\t\n`'~]*"/ skip=/\\[\\"]/ end=/"/ + syntax region clojureDiscard matchgroup=clojureDiscard start=/#_[ ,\t\n`'~]*(/ end=/)/ contains=clojureDiscardForm + syntax region clojureDiscard matchgroup=clojureDiscard start=/#_[ ,\t\n`'~]*\[/ end=/\]/ contains=clojureDiscardForm + syntax region clojureDiscard matchgroup=clojureDiscard start=/#_[ ,\t\n`'~]*{/ end=/}/ contains=clojureDiscardForm + + syntax region clojureDiscardForm start="(" end=")" contained contains=clojureDiscardForm + syntax region clojureDiscardForm start="{" end="}" contained contains=clojureDiscardForm + syntax region clojureDiscardForm start="\[" end="\]" contained contains=clojureDiscardForm +endif + +" -*- TOP CLUSTER -*- +" Generated from https://github.com/clojure-vim/clojure.vim/blob/fd280e33e84c88e97860930557dba3ff80b1a82d/clj/src/vim_clojure_static/generate.clj +syntax cluster clojureTop contains=@Spell,clojureAnonArg,clojureBoolean,clojureCharacter,clojureComment,clojureCond,clojureConstant,clojureDefine,clojureDeref,clojureDiscard,clojureDispatch,clojureError,clojureException,clojureFunc,clojureKeyword,clojureMacro,clojureMap,clojureMeta,clojureNumber,clojureQuote,clojureRegexp,clojureRepeat,clojureSexp,clojureSpecial,clojureString,clojureSymbol,clojureUnquote,clojureVariable,clojureVector + +syntax region clojureSexp matchgroup=clojureParen start="(" end=")" contains=@clojureTop fold +syntax region clojureVector matchgroup=clojureParen start="\[" end="]" contains=@clojureTop fold +syntax region clojureMap matchgroup=clojureParen start="{" end="}" contains=@clojureTop fold + +" Highlight superfluous closing parens, brackets and braces. +syntax match clojureError "]\|}\|)" + +syntax sync fromstart + +highlight default link clojureConstant Constant +highlight default link clojureBoolean Boolean +highlight default link clojureCharacter Character +highlight default link clojureKeyword Keyword +highlight default link clojureNumber Number +highlight default link clojureString String +highlight default link clojureStringDelimiter String +highlight default link clojureStringEscape Character + +highlight default link clojureRegexp Constant +highlight default link clojureRegexpDelimiter Constant +highlight default link clojureRegexpEscape Character +highlight default link clojureRegexpCharClass SpecialChar +highlight default link clojureRegexpPosixCharClass clojureRegexpCharClass +highlight default link clojureRegexpJavaCharClass clojureRegexpCharClass +highlight default link clojureRegexpUnicodeCharClass clojureRegexpCharClass +highlight default link clojureRegexpPredefinedCharClass clojureRegexpCharClass +highlight default link clojureRegexpBoundary SpecialChar +highlight default link clojureRegexpQuantifier SpecialChar +highlight default link clojureRegexpMod SpecialChar +highlight default link clojureRegexpOr SpecialChar +highlight default link clojureRegexpBackRef SpecialChar +highlight default link clojureRegexpGroup clojureRegexp +highlight default link clojureRegexpQuoted clojureString +highlight default link clojureRegexpQuote clojureRegexpBoundary + +highlight default link clojureVariable Identifier +highlight default link clojureCond Conditional +highlight default link clojureDefine Define +highlight default link clojureException Exception +highlight default link clojureFunc Function +highlight default link clojureMacro Macro +highlight default link clojureRepeat Repeat + +highlight default link clojureSpecial Special +highlight default link clojureQuote SpecialChar +highlight default link clojureUnquote SpecialChar +highlight default link clojureMeta SpecialChar +highlight default link clojureDeref SpecialChar +highlight default link clojureAnonArg SpecialChar +highlight default link clojureDispatch SpecialChar + +highlight default link clojureComment Comment +highlight default link clojureCommentTodo Todo +highlight default link clojureDiscard clojureComment +highlight default link clojureDiscardForm clojureDiscard + +highlight default link clojureError Error + +highlight default link clojureParen Delimiter + +let b:current_syntax = "clojure" + +let &cpo = s:cpo_sav +unlet! s:cpo_sav + +" vim:sts=8:sw=8:ts=8:noet diff --git a/.config/vim/syntax/cmacro.vim b/.config/vim/syntax/cmacro.vim new file mode 100644 index 0000000..1d448f0 --- /dev/null +++ b/.config/vim/syntax/cmacro.vim @@ -0,0 +1,77 @@ +" Vim syntax file +" Language: C macro for C preprocessor +" Maintainer: Wu, Zhenyu +" Last Change: 2024 Dec 31 +" modified from syntax/c.vim + +" C compiler has a preprocessor: `cpp -P test.txt` +" test.txt doesn't need to be a C file +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Accept %: for # (C99) +syn region cmacroPreCondit start="^\s*\zs\%(%:\|#\)\s*\%(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" keepend contains=cmacroCppParen,cmacroNumbers +syn match cmacroPreConditMatch display "^\s*\zs\%(%:\|#\)\s*\%(else\|endif\)\>" +if !exists("c_no_if0") + syn cluster cmacroCppOutInGroup contains=cmacroCppInIf,cmacroCppInElse,cmacroCppInElse2,cmacroCppOutIf,cmacroCppOutIf2,cmacroCppOutElse,cmacroCppInSkip,cmacroCppOutSkip + syn region cmacroCppOutWrapper start="^\s*\zs\%(%:\|#\)\s*if\s\+0\+\s*\%($\|//\|/\*\|&\)" end=".\@=\|$" contains=cmacroCppOutIf,cmacroCppOutElse,@NoSpell fold + syn region cmacroCppOutIf contained start="0\+" matchgroup=cmacroCppOutWrapper end="^\s*\%(%:\|#\)\s*endif\>" contains=cmacroCppOutIf2,cmacroCppOutElse + if !exists("c_no_if0_fold") + syn region cmacroCppOutIf2 contained matchgroup=cmacroCppOutWrapper start="0\+" end="^\s*\%(%:\|#\)\s*\%(else\>\|elif\s\+\%(0\+\s*\%($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cmacroCppOutSkip,@Spell fold + else + syn region cmacroCppOutIf2 contained matchgroup=cmacroCppOutWrapper start="0\+" end="^\s*\%(%:\|#\)\s*\%(else\>\|elif\s\+\%(0\+\s*\%($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cmacroCppOutSkip,@Spell + endif + syn region cmacroCppOutElse contained matchgroup=cmacroCppOutWrapper start="^\s*\%(%:\|#\)\s*\%(else\|elif\)" end="^\s*\%(%:\|#\)\s*endif\>"me=s-1 contains=TOP,cmacroPreCondit + syn region cmacroCppInWrapper start="^\s*\zs\%(%:\|#\)\s*if\s\+0*[1-9]\d*\s*\%($\|//\|/\*\||\)" end=".\@=\|$" contains=cmacroCppInIf,cmacroCppInElse fold + syn region cmacroCppInIf contained matchgroup=cmacroCppInWrapper start="\d\+" end="^\s*\%(%:\|#\)\s*endif\>" contains=TOP,cmacroPreCondit + if !exists("c_no_if0_fold") + syn region cmacroCppInElse contained start="^\s*\%(%:\|#\)\s*\%(else\>\|elif\s\+\%(0*[1-9]\d*\s*\%($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cmacroCppInIf contains=cmacroCppInElse2 fold + else + syn region cmacroCppInElse contained start="^\s*\%(%:\|#\)\s*\%(else\>\|elif\s\+\%(0*[1-9]\d*\s*\%($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cmacroCppInIf contains=cmacroCppInElse2 + endif + syn region cmacroCppInElse2 contained matchgroup=cmacroCppInWrapper start="^\s*\%(%:\|#\)\s*\%(else\|elif\)\%([^/]\|/[^/*]\)*" end="^\s*\%(%:\|#\)\s*endif\>"me=s-1 contains=cmacroCppOutSkip,@Spell + syn region cmacroCppOutSkip contained start="^\s*\%(%:\|#\)\s*\%(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\%(%:\|#\)\s*endif\>" contains=cmacroCppOutSkip + syn region cmacroCppInSkip contained matchgroup=cmacroCppInWrapper start="^\s*\%(%:\|#\)\s*\%(if\s\+\%(\d\+\s*\%($\|//\|/\*\||\|&\)\)\@!\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\%(%:\|#\)\s*endif\>" containedin=cmacroCppOutElse,cmacroCppInIf,cmacroCppInSkip contains=TOP,cmacroPreProc +endif +syn region cmacroIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match cmacroIncluded display contained "<[^>]*>" +syn match cmacroInclude display "^\s*\zs\%(%:\|#\)\s*include\>\s*["<]" contains=cmacroIncluded +"syn match cmacroLineSkip "\\$" +syn cluster cmacroPreProcmacroGroup contains=cmacroPreCondit,cmacroIncluded,cmacroInclude,cmacroDefine,cmacroCppOutWrapper,cmacroCppInWrapper,@cmacroCppOutInGroup,cmacroNumbersCom,@cmacroCommentGroup,cmacroParen,cmacroBracket,cmacroMulti,cmacroBadBlock +syn region cmacroDefine start="^\s*\zs\%(%:\|#\)\s*\%(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cmacroPreProcmacroGroup,@Spell +syn region cmacroPreProc start="^\s*\zs\%(%:\|#\)\s*\%(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cmacroPreProcmacroGroup,@Spell + +" be able to fold #pragma regions +syn region cmacroPragma start="^\s*#pragma\s\+region\>" end="^\s*#pragma\s\+endregion\>" transparent keepend extend fold + +syn keyword cmacroTodo contained TODO FIXME XXX NOTE +syn region cmacroComment start='/\*' end='\*/' contains=cmacroTodo,@Spell +syn match cmacroCommentError "\*/" +syn region cmacroComment start='//' end='$' contains=cmacroTodo,@Spell + +" Define the default highlighting. +" Only used when an item doesn't have highlighting yet +hi def link cmacroInclude Include +hi def link cmacroPreProc PreProc +hi def link cmacroDefine Macro +hi def link cmacroIncluded cmacroString +hi def link cmacroCppInWrapper cmacroCppOutWrapper +hi def link cmacroCppOutWrapper cmacroPreCondit +hi def link cmacroPreConditMatch cmacroPreCondit +hi def link cmacroPreCondit PreCondit +hi def link cmacroCppOutSkip cmacroCppOutIf2 +hi def link cmacroCppInElse2 cmacroCppOutIf2 +hi def link cmacroCppOutIf2 cmacroCppOut +hi def link cmacroCppOut Comment +hi def link cmacroTodo Todo +hi def link cmacroComment Comment +hi def link cmacroCommentError Error + +let b:current_syntax = "cmacro" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/cmake.vim b/.config/vim/syntax/cmake.vim new file mode 100644 index 0000000..c95503b --- /dev/null +++ b/.config/vim/syntax/cmake.vim @@ -0,0 +1,4980 @@ +" Vim syntax file +" Program: CMake - Cross-Platform Makefile Generator +" Version: cmake version 3.27.20230713-gdc88dd5 +" Language: CMake +" Author: Andy Cedilnik , +" Nicholas Hutchinson , +" Patrick Boettcher +" Maintainer: Dimitri Merejkowsky +" Former Maintainer: Karthik Krishnan +" Last Change: 2023 Jul 13 +" +" License: The CMake license applies to this file. See +" https://cmake.org/licensing +" This implies that distribution with Vim is allowed + +if exists("b:current_syntax") + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +syn region cmakeBracketArgument start="\[\z(=*\)\[" end="\]\z1\]" contains=cmakeTodo,@Spell + +syn region cmakeComment start="#\(\[=*\[\)\@!" end="$" contains=cmakeTodo,@Spell +syn region cmakeBracketComment start="#\[\z(=*\)\[" end="\]\z1\]" contains=cmakeTodo,@Spell + +syn match cmakeEscaped /\(\\\\\|\\"\|\\n\|\\t\)/ contained +syn region cmakeRegistry start="\[" end="]" contained oneline contains=cmakeTodo,cmakeEscaped + +syn region cmakeGeneratorExpression start="$<" end=">" contained oneline contains=cmakeVariableValue,cmakeProperty,cmakeGeneratorExpressions,cmakeTodo + +syn region cmakeString start='"' end='"' contained contains=cmakeTodo,cmakeVariableValue,cmakeEscaped,@Spell + +syn region cmakeVariableValue start="${" end="}" contained oneline contains=cmakeVariable,cmakeTodo,cmakeVariableValue + +syn region cmakeEnvironment start="$ENV{" end="}" contained oneline contains=cmakeTodo + +syn region cmakeArguments start="(" end=")" contains=ALLBUT,cmakeGeneratorExpressions,cmakeCommand,cmakeCommandConditional,cmakeCommandRepeat,cmakeCommandDeprecated,cmakeCommandManuallyAdded,cmakeArguments,cmakeTodo,@Spell + +syn case match + +syn keyword cmakeProperty contained + \ ABSTRACT + \ ADDITIONAL_CLEAN_FILES + \ ADDITIONAL_MAKE_CLEAN_FILES + \ ADVANCED + \ AIX_EXPORT_ALL_SYMBOLS + \ ALIASED_TARGET + \ ALIAS_GLOBAL + \ ALLOW_DUPLICATE_CUSTOM_TARGETS + \ ANDROID_ANT_ADDITIONAL_OPTIONS + \ ANDROID_API + \ ANDROID_API_MIN + \ ANDROID_ARCH + \ ANDROID_ASSETS_DIRECTORIES + \ ANDROID_GUI + \ ANDROID_JAR_DEPENDENCIES + \ ANDROID_JAR_DIRECTORIES + \ ANDROID_JAVA_SOURCE_DIR + \ ANDROID_NATIVE_LIB_DEPENDENCIES + \ ANDROID_NATIVE_LIB_DIRECTORIES + \ ANDROID_PROCESS_MAX + \ ANDROID_PROGUARD + \ ANDROID_PROGUARD_CONFIG_PATH + \ ANDROID_SECURE_PROPS_PATH + \ ANDROID_SKIP_ANT_STEP + \ ANDROID_STL_TYPE + \ ARCHIVE_OUTPUT_DIRECTORY + \ ARCHIVE_OUTPUT_NAME + \ ATTACHED_FILES + \ ATTACHED_FILES_ON_FAIL + \ AUTOGEN_BUILD_DIR + \ AUTOGEN_COMMAND_LINE_LENGTH_MAX + \ AUTOGEN_ORIGIN_DEPENDS + \ AUTOGEN_PARALLEL + \ AUTOGEN_SOURCE_GROUP + \ AUTOGEN_USE_SYSTEM_INCLUDE + \ AUTOGEN_TARGETS_FOLDER + \ AUTOGEN_TARGET_DEPENDS + \ AUTOGEN_USE_SYSTEM_INCLUDE + \ AUTOMOC + \ AUTOMOC_COMPILER_PREDEFINES + \ AUTOMOC_DEPEND_FILTERS + \ AUTOMOC_EXECUTABLE + \ AUTOMOC_MACRO_NAMES + \ AUTOMOC_MOC_OPTIONS + \ AUTOMOC_PATH_PREFIX + \ AUTOMOC_SOURCE_GROUP + \ AUTOMOC_TARGETS_FOLDER + \ AUTORCC + \ AUTORCC_EXECUTABLE + \ AUTORCC_OPTIONS + \ AUTORCC_SOURCE_GROUP + \ AUTOUIC + \ AUTOUIC_EXECUTABLE + \ AUTOUIC_OPTIONS + \ AUTOUIC_SEARCH_PATHS + \ AUTOUIC_SOURCE_GROUP + \ BINARY_DIR + \ BUILDSYSTEM_TARGETS + \ BUILD_RPATH + \ BUILD_RPATH_USE_ORIGIN + \ BUILD_WITH_INSTALL_NAME_DIR + \ BUILD_WITH_INSTALL_RPATH + \ BUNDLE + \ BUNDLE_EXTENSION + \ CACHE_VARIABLES + \ CLEAN_NO_CUSTOM + \ CMAKE_CONFIGURE_DEPENDS + \ CMAKE_CUDA_KNOWN_FEATURES + \ CMAKE_CXX_KNOWN_FEATURES + \ CMAKE_C_KNOWN_FEATURES + \ CMAKE_ROLE + \ COMMON_LANGUAGE_RUNTIME + \ COMPATIBLE_INTERFACE_BOOL + \ COMPATIBLE_INTERFACE_NUMBER_MAX + \ COMPATIBLE_INTERFACE_NUMBER_MIN + \ COMPATIBLE_INTERFACE_STRING + \ COMPILE_DEFINITIONS + \ COMPILE_FEATURES + \ COMPILE_FLAGS + \ COMPILE_OPTIONS + \ COMPILE_PDB_NAME + \ COMPILE_PDB_OUTPUT_DIRECTORY + \ COMPILE_WARNING_AS_ERROR + \ COST + \ CPACK_DESKTOP_SHORTCUTS + \ CPACK_NEVER_OVERWRITE + \ CPACK_PERMANENT + \ CPACK_STARTUP_SHORTCUTS + \ CPACK_START_MENU_SHORTCUTS + \ CPACK_WIX_ACL + \ CROSSCOMPILING_EMULATOR + \ CUDA_ARCHITECTURES + \ CUDA_CUBIN_COMPILATION + \ CUDA_EXTENSIONS + \ CUDA_FATBIN_COMPILATION + \ CUDA_OPTIX_COMPILATION + \ CUDA_PTX_COMPILATION + \ CUDA_RESOLVE_DEVICE_SYMBOLS + \ CUDA_RUNTIME_LIBRARY + \ CUDA_SEPARABLE_COMPILATION + \ CUDA_STANDARD + \ CUDA_STANDARD_REQUIRED + \ CXX_EXTENSIONS + \ CXX_MODULE_DIRS + \ CXX_MODULE_SET + \ CXX_MODULE_SETS + \ CXX_SCAN_FOR_MODULES + \ CXX_STANDARD + \ CXX_STANDARD_REQUIRED + \ C_EXTENSIONS + \ C_STANDARD + \ C_STANDARD_REQUIRED + \ DEBUG_CONFIGURATIONS + \ DEBUG_POSTFIX + \ DEFINE_SYMBOL + \ DEFINITIONS + \ DEPENDS + \ DEPLOYMENT_ADDITIONAL_FILES + \ DEPLOYMENT_REMOTE_DIRECTORY + \ DEPRECATION + \ DISABLED + \ DISABLED_FEATURES + \ DISABLE_PRECOMPILE_HEADERS + \ DLL_NAME_WITH_SOVERSION + \ DOTNET_SDK + \ DOTNET_TARGET_FRAMEWORK + \ DOTNET_TARGET_FRAMEWORK_VERSION + \ ECLIPSE_EXTRA_CPROJECT_CONTENTS + \ ECLIPSE_EXTRA_NATURES + \ ENABLED_FEATURES + \ ENABLED_LANGUAGES + \ ENABLE_EXPORTS + \ ENVIRONMENT + \ ENVIRONMENT_MODIFICATION + \ EXCLUDE_FROM_ALL + \ EXCLUDE_FROM_DEFAULT_BUILD + \ EXPORT_COMPILE_COMMANDS + \ EXPORT_NAME + \ EXPORT_NO_SYSTEM + \ EXPORT_PROPERTIES + \ EXTERNAL_OBJECT + \ EchoString + \ FAIL_REGULAR_EXPRESSION + \ FIND_LIBRARY_USE_LIB32_PATHS + \ FIND_LIBRARY_USE_LIB64_PATHS + \ FIND_LIBRARY_USE_LIBX32_PATHS + \ FIND_LIBRARY_USE_OPENBSD_VERSIONING + \ FIXTURES_CLEANUP + \ FIXTURES_REQUIRED + \ FIXTURES_SETUP + \ FOLDER + \ FRAMEWORK + \ FRAMEWORK_VERSION + \ Fortran_BUILDING_INSTRINSIC_MODULES + \ Fortran_FORMAT + \ Fortran_MODULE_DIRECTORY + \ Fortran_PREPROCESS + \ GENERATED + \ GENERATOR_FILE_NAME + \ GENERATOR_IS_MULTI_CONFIG + \ GHS_INTEGRITY_APP + \ GHS_NO_SOURCE_GROUP_FILE + \ GLOBAL_DEPENDS_DEBUG_MODE + \ GLOBAL_DEPENDS_NO_CYCLES + \ GNUtoMS + \ HAS_CXX + \ HEADER_DIRS + \ HEADER_FILE_ONLY + \ HEADER_SET + \ HEADER_SETS + \ HELPSTRING + \ HIP_ARCHITECTURES + \ HIP_EXTENSIONS + \ HIP_STANDARD + \ HIP_STANDARD_REQUIRED + \ IMPLICIT_DEPENDS_INCLUDE_TRANSFORM + \ IMPORTED + \ IMPORTED_COMMON_LANGUAGE_RUNTIME + \ IMPORTED_CONFIGURATIONS + \ IMPORTED_GLOBAL + \ IMPORTED_IMPLIB + \ IMPORTED_LIBNAME + \ IMPORTED_LINK_DEPENDENT_LIBRARIES + \ IMPORTED_LINK_INTERFACE_LANGUAGES + \ IMPORTED_LINK_INTERFACE_LIBRARIES + \ IMPORTED_LINK_INTERFACE_MULTIPLICITY + \ IMPORTED_LOCATION + \ IMPORTED_NO_SONAME + \ IMPORTED_NO_SYSTEM + \ IMPORTED_OBJECTS + \ IMPORTED_SONAME + \ IMPORTED_TARGETS + \ IMPORT_PREFIX + \ IMPORT_SUFFIX + \ INCLUDE_DIRECTORIES + \ INCLUDE_REGULAR_EXPRESSION + \ INSTALL_NAME_DIR + \ INSTALL_REMOVE_ENVIRONMENT_RPATH + \ INSTALL_RPATH + \ INSTALL_RPATH_USE_LINK_PATH + \ INTERFACE_AUTOMOC_MACRO_NAMES + \ INTERFACE_AUTOUIC_OPTIONS + \ INTERFACE_AUTOMOC_MACRO_NAMES + \ INTERFACE_COMPILE_DEFINITIONS + \ INTERFACE_COMPILE_FEATURES + \ INTERFACE_COMPILE_OPTIONS + \ INTERFACE_CXX_MODULE_SETS + \ INTERFACE_HEADER_SETS + \ INTERFACE_HEADER_SETS_TO_VERIFY + \ INTERFACE_INCLUDE_DIRECTORIES + \ INTERFACE_LINK_DEPENDS + \ INTERFACE_LINK_DIRECTORIES + \ INTERFACE_LINK_LIBRARIES + \ INTERFACE_LINK_LIBRARIES_DIRECT + \ INTERFACE_LINK_LIBRARIES_DIRECT_EXCLUDE + \ INTERFACE_LINK_OPTIONS + \ INTERFACE_POSITION_INDEPENDENT_CODE + \ INTERFACE_PRECOMPILE_HEADERS + \ INTERFACE_SOURCES + \ INTERFACE_SYSTEM_INCLUDE_DIRECTORIES + \ INTERPROCEDURAL_OPTIMIZATION + \ IN_TRY_COMPILE + \ IOS_INSTALL_COMBINED + \ ISPC_HEADER_DIRECTORY + \ ISPC_HEADER_SUFFIX + \ ISPC_INSTRUCTION_SETS + \ JOB_POOLS + \ JOB_POOL_COMPILE + \ JOB_POOL_LINK + \ JOB_POOL_PRECOMPILE_HEADER + \ KEEP_EXTENSION + \ LABELS + \ LANGUAGE + \ LIBRARY_OUTPUT_DIRECTORY + \ LIBRARY_OUTPUT_NAME + \ LINKER_LANGUAGE + \ LINK_DEPENDS + \ LINK_DEPENDS_NO_SHARED + \ LINK_DIRECTORIES + \ LINK_FLAGS + \ LINK_INTERFACE_LIBRARIES + \ LINK_INTERFACE_MULTIPLICITY + \ LINK_LIBRARIES + \ LINK_LIBRARIES_ONLY_TARGETS + \ LINK_LIBRARY_OVERRIDE + \ LINK_OPTIONS + \ LINK_SEARCH_END_STATIC + \ LINK_SEARCH_START_STATIC + \ LINK_WHAT_YOU_USE + \ LISTFILE_STACK + \ LOCATION + \ MACHO_COMPATIBILITY_VERSION + \ MACHO_CURRENT_VERSION + \ MACOSX_BUNDLE + \ MACOSX_BUNDLE_INFO_PLIST + \ MACOSX_FRAMEWORK_INFO_PLIST + \ MACOSX_PACKAGE_LOCATION + \ MACOSX_RPATH + \ MACROS + \ MANUALLY_ADDED_DEPENDENCIES + \ MEASUREMENT + \ MODIFIED + \ MSVC_DEBUG_INFORMATION_FORMAT + \ MSVC_RUNTIME_LIBRARY + \ NAME + \ NO_SONAME + \ NO_SYSTEM_FROM_IMPORTED + \ OBJCXX_EXTENSIONS + \ OBJCXX_STANDARD + \ OBJCXX_STANDARD_REQUIRED + \ OBJC_EXTENSIONS + \ OBJC_STANDARD + \ OBJC_STANDARD_REQUIRED + \ OBJECT_DEPENDS + \ OBJECT_OUTPUTS + \ OPTIMIZE_DEPENDENCIES + \ OSX_ARCHITECTURES + \ OUTPUT_NAME + \ PACKAGES_FOUND + \ PACKAGES_NOT_FOUND + \ PARENT_DIRECTORY + \ PASS_REGULAR_EXPRESSION + \ PCH_INSTANTIATE_TEMPLATES + \ PCH_WARN_INVALID + \ PDB_NAME + \ PDB_OUTPUT_DIRECTORY + \ POSITION_INDEPENDENT_CODE + \ POST_INSTALL_SCRIPT + \ PRECOMPILE_HEADERS + \ PRECOMPILE_HEADERS_REUSE_FROM + \ PREDEFINED_TARGETS_FOLDER + \ PREFIX + \ PRE_INSTALL_SCRIPT + \ PRIVATE_HEADER + \ PROCESSORS + \ PROCESSOR_AFFINITY + \ PROJECT_LABEL + \ PUBLIC_HEADER + \ REPORT_UNDEFINED_PROPERTIES + \ REQUIRED_FILES + \ RESOURCE + \ RESOURCE_GROUPS + \ RESOURCE_LOCK + \ RULE_LAUNCH_COMPILE + \ RULE_LAUNCH_CUSTOM + \ RULE_LAUNCH_LINK + \ RULE_MESSAGES + \ RUNTIME_OUTPUT_DIRECTORY + \ RUNTIME_OUTPUT_NAME + \ RUN_SERIAL + \ SKIP_AUTOGEN + \ SKIP_AUTOMOC + \ SKIP_AUTORCC + \ SKIP_AUTOUIC + \ SKIP_BUILD_RPATH + \ SKIP_LINTING + \ SKIP_PRECOMPILE_HEADERS + \ SKIP_REGULAR_EXPRESSION + \ SKIP_RETURN_CODE + \ SKIP_UNITY_BUILD_INCLUSION + \ SOURCES + \ SOURCE_DIR + \ SOVERSION + \ STATIC_LIBRARY_FLAGS + \ STATIC_LIBRARY_OPTIONS + \ STRINGS + \ SUBDIRECTORIES + \ SUFFIX + \ SYMBOLIC + \ SYSTEM + \ Swift_DEPENDENCIES_FILE + \ Swift_DIAGNOSTICS_FILE + \ Swift_LANGUAGE_VERSION + \ Swift_MODULE_DIRECTORY + \ Swift_MODULE_NAME + \ Swift_COMPILATION_MODE + \ TARGET_ARCHIVES_MAY_BE_SHARED_LIBS + \ TARGET_MESSAGES + \ TARGET_SUPPORTS_SHARED_LIBS + \ TESTS + \ TEST_INCLUDE_FILE + \ TEST_INCLUDE_FILES + \ TIMEOUT + \ TIMEOUT_AFTER_MATCH + \ TIMEOUT_SIGNAL_GRACE_PERIOD + \ TIMEOUT_SIGNAL_NAME + \ TYPE + \ UNITY_BUILD + \ UNITY_BUILD_BATCH_SIZE + \ UNITY_BUILD_CODE_AFTER_INCLUDE + \ UNITY_BUILD_CODE_BEFORE_INCLUDE + \ UNITY_BUILD_MODE + \ UNITY_BUILD_UNIQUE_ID + \ UNITY_GROUP + \ USE_FOLDERS + \ VALUE + \ VARIABLES + \ VERIFY_INTERFACE_HEADER_SETS + \ VERSION + \ VISIBILITY_INLINES_HIDDEN + \ VS_CONFIGURATION_TYPE + \ VS_COPY_TO_OUT_DIR + \ VS_DEBUGGER_COMMAND + \ VS_DEBUGGER_COMMAND_ARGUMENTS + \ VS_DEBUGGER_ENVIRONMENT + \ VS_DEBUGGER_WORKING_DIRECTORY + \ VS_DEPLOYMENT_CONTENT + \ VS_DEPLOYMENT_LOCATION + \ VS_DESKTOP_EXTENSIONS_VERSION + \ VS_DOTNET_DOCUMENTATION_FILE + \ VS_DOTNET_REFERENCES + \ VS_DOTNET_REFERENCES_COPY_LOCAL + \ VS_DOTNET_STARTUP_OBJECT + \ VS_DOTNET_TARGET_FRAMEWORK_VERSION + \ VS_DPI_AWARE + \ VS_GLOBAL_KEYWORD + \ VS_GLOBAL_PROJECT_TYPES + \ VS_GLOBAL_ROOTNAMESPACE + \ VS_INCLUDE_IN_VSIX + \ VS_IOT_EXTENSIONS_VERSION + \ VS_IOT_STARTUP_TASK + \ VS_JUST_MY_CODE_DEBUGGING + \ VS_KEYWORD + \ VS_MOBILE_EXTENSIONS_VERSION + \ VS_NO_COMPILE_BATCHING + \ VS_NO_SOLUTION_DEPLOY + \ VS_PACKAGE_REFERENCES + \ VS_PLATFORM_TOOLSET + \ VS_PROJECT_IMPORT + \ VS_RESOURCE_GENERATOR + \ VS_SCC_AUXPATH + \ VS_SCC_LOCALPATH + \ VS_SCC_PROJECTNAME + \ VS_SCC_PROVIDER + \ VS_SDK_REFERENCES + \ VS_SETTINGS + \ VS_SHADER_DISABLE_OPTIMIZATIONS + \ VS_SHADER_ENABLE_DEBUG + \ VS_SHADER_ENTRYPOINT + \ VS_SHADER_FLAGS + \ VS_SHADER_MODEL + \ VS_SHADER_OBJECT_FILE_NAME + \ VS_SHADER_OUTPUT_HEADER_FILE + \ VS_SHADER_TYPE + \ VS_SHADER_VARIABLE_NAME + \ VS_SOLUTION_DEPLOY + \ VS_STARTUP_PROJECT + \ VS_TOOL_OVERRIDE + \ VS_USER_PROPS + \ VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION + \ VS_WINRT_COMPONENT + \ VS_WINRT_EXTENSIONS + \ VS_WINRT_REFERENCES + \ VS_XAML_TYPE + \ WATCOM_RUNTIME_LIBRARY + \ WILL_FAIL + \ WIN32_EXECUTABLE + \ WINDOWS_EXPORT_ALL_SYMBOLS + \ WORKING_DIRECTORY + \ WRAP_EXCLUDE + \ XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY + \ XCODE_EMBED_FRAMEWORKS_REMOVE_HEADERS_ON_COPY + \ XCODE_EMIT_EFFECTIVE_PLATFORM_NAME + \ XCODE_EXPLICIT_FILE_TYPE + \ XCODE_FILE_ATTRIBUTES + \ XCODE_GENERATE_SCHEME + \ XCODE_LAST_KNOWN_FILE_TYPE + \ XCODE_LINK_BUILD_PHASE_MODE + \ XCODE_PRODUCT_TYPE + \ XCODE_SCHEME_ADDRESS_SANITIZER + \ XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN + \ XCODE_SCHEME_ARGUMENTS + \ XCODE_SCHEME_DEBUG_AS_ROOT + \ XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING + \ XCODE_SCHEME_ENABLE_GPU_FRAME_CAPTURE_MODE + \ XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER + \ XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS + \ XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE + \ XCODE_SCHEME_ENABLE_GPU_API_VALIDATION + \ XCODE_SCHEME_ENABLE_GPU_FRAME_CAPTURE_MODE + \ XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION + \ XCODE_SCHEME_ENVIRONMENT + \ XCODE_SCHEME_EXECUTABLE + \ XCODE_SCHEME_GUARD_MALLOC + \ XCODE_SCHEME_LAUNCH_CONFIGURATION + \ XCODE_SCHEME_LAUNCH_MODE + \ XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP + \ XCODE_SCHEME_MALLOC_GUARD_EDGES + \ XCODE_SCHEME_MALLOC_SCRIBBLE + \ XCODE_SCHEME_MALLOC_STACK + \ XCODE_SCHEME_THREAD_SANITIZER + \ XCODE_SCHEME_THREAD_SANITIZER_STOP + \ XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER + \ XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP + \ XCODE_SCHEME_ENABLE_GPU_API_VALIDATION + \ XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION + \ XCODE_SCHEME_LAUNCH_CONFIGURATION + \ XCODE_SCHEME_WORKING_DIRECTORY + \ XCODE_SCHEME_ZOMBIE_OBJECTS + \ XCODE_XCCONFIG + \ XCTEST + +syn keyword cmakeVariable contained + \ ANDROID + \ APPLE + \ BORLAND + \ BSD + \ BUILD_SHARED_LIBS + \ CACHE + \ CMAKE_ABSOLUTE_DESTINATION_FILES + \ CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY + \ CMAKE_ADSP_ROOT + \ CMAKE_AIX_EXPORT_ALL_SYMBOLS + \ CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS + \ CMAKE_ANDROID_API + \ CMAKE_ANDROID_API_MIN + \ CMAKE_ANDROID_ARCH + \ CMAKE_ANDROID_ARCH_ABI + \ CMAKE_ANDROID_ARM_MODE + \ CMAKE_ANDROID_ARM_NEON + \ CMAKE_ANDROID_ASSETS_DIRECTORIES + \ CMAKE_ANDROID_EXCEPTIONS + \ CMAKE_ANDROID_GUI + \ CMAKE_ANDROID_JAR_DEPENDENCIES + \ CMAKE_ANDROID_JAR_DIRECTORIES + \ CMAKE_ANDROID_JAVA_SOURCE_DIR + \ CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES + \ CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES + \ CMAKE_ANDROID_NDK + \ CMAKE_ANDROID_NDK_DEPRECATED_HEADERS + \ CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG + \ CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION + \ CMAKE_ANDROID_NDK_VERSION + \ CMAKE_ANDROID_PROCESS_MAX + \ CMAKE_ANDROID_PROGUARD + \ CMAKE_ANDROID_PROGUARD_CONFIG_PATH + \ CMAKE_ANDROID_RTTI + \ CMAKE_ANDROID_SECURE_PROPS_PATH + \ CMAKE_ANDROID_SKIP_ANT_STEP + \ CMAKE_ANDROID_STANDALONE_TOOLCHAIN + \ CMAKE_ANDROID_STL_TYPE + \ CMAKE_APPBUNDLE_PATH + \ CMAKE_APPLE_SILICON_PROCESSOR + \ CMAKE_AR + \ CMAKE_ARCHIVE_OUTPUT_DIRECTORY + \ CMAKE_ARGC + \ CMAKE_ARGV0 + \ CMAKE_ASM + \ CMAKE_ASM_ANDROID_TOOLCHAIN_MACHINE + \ CMAKE_ASM_ANDROID_TOOLCHAIN_PREFIX + \ CMAKE_ASM_ANDROID_TOOLCHAIN_SUFFIX + \ CMAKE_ASM_ARCHIVE_APPEND + \ CMAKE_ASM_ARCHIVE_CREATE + \ CMAKE_ASM_ARCHIVE_FINISH + \ CMAKE_ASM_BYTE_ORDER + \ CMAKE_ASM_CLANG_TIDY + \ CMAKE_ASM_CLANG_TIDY_EXPORT_FIXES_DIR + \ CMAKE_ASM_COMPILER + \ CMAKE_ASM_COMPILER_ABI + \ CMAKE_ASM_COMPILER_AR + \ CMAKE_ASM_COMPILER_ARCHITECTURE_ID + \ CMAKE_ASM_COMPILER_EXTERNAL_TOOLCHAIN + \ CMAKE_ASM_COMPILER_FRONTEND_VARIANT + \ CMAKE_ASM_COMPILER_ID + \ CMAKE_ASM_COMPILER_LAUNCHER + \ CMAKE_ASM_COMPILER_LOADED + \ CMAKE_ASM_COMPILER_PREDEFINES_COMMAND + \ CMAKE_ASM_COMPILER_RANLIB + \ CMAKE_ASM_COMPILER_TARGET + \ CMAKE_ASM_COMPILER_VERSION + \ CMAKE_ASM_COMPILER_VERSION_INTERNAL + \ CMAKE_ASM_COMPILE_OBJECT + \ CMAKE_ASM_CPPCHECK + \ CMAKE_ASM_CPPLINT + \ CMAKE_ASM_CREATE_SHARED_LIBRARY + \ CMAKE_ASM_CREATE_SHARED_MODULE + \ CMAKE_ASM_CREATE_STATIC_LIBRARY + \ CMAKE_ASM_EXTENSIONS + \ CMAKE_ASM_EXTENSIONS_DEFAULT + \ CMAKE_ASM_FLAGS + \ CMAKE_ASM_FLAGS_DEBUG + \ CMAKE_ASM_FLAGS_DEBUG_INIT + \ CMAKE_ASM_FLAGS_INIT + \ CMAKE_ASM_FLAGS_MINSIZEREL + \ CMAKE_ASM_FLAGS_MINSIZEREL_INIT + \ CMAKE_ASM_FLAGS_RELEASE + \ CMAKE_ASM_FLAGS_RELEASE_INIT + \ CMAKE_ASM_FLAGS_RELWITHDEBINFO + \ CMAKE_ASM_FLAGS_RELWITHDEBINFO_INIT + \ CMAKE_ASM_IGNORE_EXTENSIONS + \ CMAKE_ASM_IMPLICIT_INCLUDE_DIRECTORIES + \ CMAKE_ASM_IMPLICIT_LINK_DIRECTORIES + \ CMAKE_ASM_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + \ CMAKE_ASM_IMPLICIT_LINK_LIBRARIES + \ CMAKE_ASM_INCLUDE_WHAT_YOU_USE + \ CMAKE_ASM_INIT + \ CMAKE_ASM_LIBRARY_ARCHITECTURE + \ CMAKE_ASM_LINKER_LAUNCHER + \ CMAKE_ASM_LINKER_PREFERENCE + \ CMAKE_ASM_LINKER_PREFERENCE_PROPAGATES + \ CMAKE_ASM_LINKER_WRAPPER_FLAG + \ CMAKE_ASM_LINKER_WRAPPER_FLAG_SEP + \ CMAKE_ASM_LINK_EXECUTABLE + \ CMAKE_ASM_LINK_LIBRARY_FILE_FLAG + \ CMAKE_ASM_LINK_LIBRARY_FLAG + \ CMAKE_ASM_LINK_LIBRARY_SUFFIX + \ CMAKE_ASM_LINK_WHAT_YOU_USE_FLAG + \ CMAKE_ASM_MASM + \ CMAKE_ASM_MASM_ANDROID_TOOLCHAIN_MACHINE + \ CMAKE_ASM_MASM_ANDROID_TOOLCHAIN_PREFIX + \ CMAKE_ASM_MASM_ANDROID_TOOLCHAIN_SUFFIX + \ CMAKE_ASM_MASM_ARCHIVE_APPEND + \ CMAKE_ASM_MASM_ARCHIVE_CREATE + \ CMAKE_ASM_MASM_ARCHIVE_FINISH + \ CMAKE_ASM_MASM_BYTE_ORDER + \ CMAKE_ASM_MASM_CLANG_TIDY + \ CMAKE_ASM_MASM_CLANG_TIDY_EXPORT_FIXES_DIR + \ CMAKE_ASM_MASM_COMPILER + \ CMAKE_ASM_MASM_COMPILER_ABI + \ CMAKE_ASM_MASM_COMPILER_AR + \ CMAKE_ASM_MASM_COMPILER_ARCHITECTURE_ID + \ CMAKE_ASM_MASM_COMPILER_EXTERNAL_TOOLCHAIN + \ CMAKE_ASM_MASM_COMPILER_FRONTEND_VARIANT + \ CMAKE_ASM_MASM_COMPILER_ID + \ CMAKE_ASM_MASM_COMPILER_LAUNCHER + \ CMAKE_ASM_MASM_COMPILER_LOADED + \ CMAKE_ASM_MASM_COMPILER_PREDEFINES_COMMAND + \ CMAKE_ASM_MASM_COMPILER_RANLIB + \ CMAKE_ASM_MASM_COMPILER_TARGET + \ CMAKE_ASM_MASM_COMPILER_VERSION + \ CMAKE_ASM_MASM_COMPILER_VERSION_INTERNAL + \ CMAKE_ASM_MASM_COMPILE_OBJECT + \ CMAKE_ASM_MASM_CPPCHECK + \ CMAKE_ASM_MASM_CPPLINT + \ CMAKE_ASM_MASM_CREATE_SHARED_LIBRARY + \ CMAKE_ASM_MASM_CREATE_SHARED_MODULE + \ CMAKE_ASM_MASM_CREATE_STATIC_LIBRARY + \ CMAKE_ASM_MASM_EXTENSIONS + \ CMAKE_ASM_MASM_EXTENSIONS_DEFAULT + \ CMAKE_ASM_MASM_FLAGS + \ CMAKE_ASM_MASM_FLAGS_DEBUG + \ CMAKE_ASM_MASM_FLAGS_DEBUG_INIT + \ CMAKE_ASM_MASM_FLAGS_INIT + \ CMAKE_ASM_MASM_FLAGS_MINSIZEREL + \ CMAKE_ASM_MASM_FLAGS_MINSIZEREL_INIT + \ CMAKE_ASM_MASM_FLAGS_RELEASE + \ CMAKE_ASM_MASM_FLAGS_RELEASE_INIT + \ CMAKE_ASM_MASM_FLAGS_RELWITHDEBINFO + \ CMAKE_ASM_MASM_FLAGS_RELWITHDEBINFO_INIT + \ CMAKE_ASM_MASM_IGNORE_EXTENSIONS + \ CMAKE_ASM_MASM_IMPLICIT_INCLUDE_DIRECTORIES + \ CMAKE_ASM_MASM_IMPLICIT_LINK_DIRECTORIES + \ CMAKE_ASM_MASM_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + \ CMAKE_ASM_MASM_IMPLICIT_LINK_LIBRARIES + \ CMAKE_ASM_MASM_INCLUDE_WHAT_YOU_USE + \ CMAKE_ASM_MASM_INIT + \ CMAKE_ASM_MASM_LIBRARY_ARCHITECTURE + \ CMAKE_ASM_MASM_LINKER_LAUNCHER + \ CMAKE_ASM_MASM_LINKER_PREFERENCE + \ CMAKE_ASM_MASM_LINKER_PREFERENCE_PROPAGATES + \ CMAKE_ASM_MASM_LINKER_WRAPPER_FLAG + \ CMAKE_ASM_MASM_LINKER_WRAPPER_FLAG_SEP + \ CMAKE_ASM_MASM_LINK_EXECUTABLE + \ CMAKE_ASM_MASM_LINK_LIBRARY_FILE_FLAG + \ CMAKE_ASM_MASM_LINK_LIBRARY_FLAG + \ CMAKE_ASM_MASM_LINK_LIBRARY_SUFFIX + \ CMAKE_ASM_MASM_LINK_WHAT_YOU_USE_FLAG + \ CMAKE_ASM_MASM_OUTPUT_EXTENSION + \ CMAKE_ASM_MASM_PLATFORM_ID + \ CMAKE_ASM_MASM_SIMULATE_ID + \ CMAKE_ASM_MASM_SIMULATE_VERSION + \ CMAKE_ASM_MASM_SIZEOF_DATA_PTR + \ CMAKE_ASM_MASM_SOURCE_FILE_EXTENSIONS + \ CMAKE_ASM_MASM_STANDARD + \ CMAKE_ASM_MASM_STANDARD_DEFAULT + \ CMAKE_ASM_MASM_STANDARD_INCLUDE_DIRECTORIES + \ CMAKE_ASM_MASM_STANDARD_LIBRARIES + \ CMAKE_ASM_MASM_STANDARD_REQUIRED + \ CMAKE_ASM_MASM_SUPPORTED + \ CMAKE_ASM_MASM_VISIBILITY_PRESET + \ CMAKE_ASM_NASM + \ CMAKE_ASM_NASM_ANDROID_TOOLCHAIN_MACHINE + \ CMAKE_ASM_NASM_ANDROID_TOOLCHAIN_PREFIX + \ CMAKE_ASM_NASM_ANDROID_TOOLCHAIN_SUFFIX + \ CMAKE_ASM_NASM_ARCHIVE_APPEND + \ CMAKE_ASM_NASM_ARCHIVE_CREATE + \ CMAKE_ASM_NASM_ARCHIVE_FINISH + \ CMAKE_ASM_NASM_BYTE_ORDER + \ CMAKE_ASM_NASM_CLANG_TIDY + \ CMAKE_ASM_NASM_CLANG_TIDY_EXPORT_FIXES_DIR + \ CMAKE_ASM_NASM_COMPILER + \ CMAKE_ASM_NASM_COMPILER_ABI + \ CMAKE_ASM_NASM_COMPILER_AR + \ CMAKE_ASM_NASM_COMPILER_ARCHITECTURE_ID + \ CMAKE_ASM_NASM_COMPILER_EXTERNAL_TOOLCHAIN + \ CMAKE_ASM_NASM_COMPILER_FRONTEND_VARIANT + \ CMAKE_ASM_NASM_COMPILER_ID + \ CMAKE_ASM_NASM_COMPILER_LAUNCHER + \ CMAKE_ASM_NASM_COMPILER_LOADED + \ CMAKE_ASM_NASM_COMPILER_PREDEFINES_COMMAND + \ CMAKE_ASM_NASM_COMPILER_RANLIB + \ CMAKE_ASM_NASM_COMPILER_TARGET + \ CMAKE_ASM_NASM_COMPILER_VERSION + \ CMAKE_ASM_NASM_COMPILER_VERSION_INTERNAL + \ CMAKE_ASM_NASM_COMPILE_OBJECT + \ CMAKE_ASM_NASM_CPPCHECK + \ CMAKE_ASM_NASM_CPPLINT + \ CMAKE_ASM_NASM_CREATE_SHARED_LIBRARY + \ CMAKE_ASM_NASM_CREATE_SHARED_MODULE + \ CMAKE_ASM_NASM_CREATE_STATIC_LIBRARY + \ CMAKE_ASM_NASM_EXTENSIONS + \ CMAKE_ASM_NASM_EXTENSIONS_DEFAULT + \ CMAKE_ASM_NASM_FLAGS + \ CMAKE_ASM_NASM_FLAGS_DEBUG + \ CMAKE_ASM_NASM_FLAGS_DEBUG_INIT + \ CMAKE_ASM_NASM_FLAGS_INIT + \ CMAKE_ASM_NASM_FLAGS_MINSIZEREL + \ CMAKE_ASM_NASM_FLAGS_MINSIZEREL_INIT + \ CMAKE_ASM_NASM_FLAGS_RELEASE + \ CMAKE_ASM_NASM_FLAGS_RELEASE_INIT + \ CMAKE_ASM_NASM_FLAGS_RELWITHDEBINFO + \ CMAKE_ASM_NASM_FLAGS_RELWITHDEBINFO_INIT + \ CMAKE_ASM_NASM_IGNORE_EXTENSIONS + \ CMAKE_ASM_NASM_IMPLICIT_INCLUDE_DIRECTORIES + \ CMAKE_ASM_NASM_IMPLICIT_LINK_DIRECTORIES + \ CMAKE_ASM_NASM_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + \ CMAKE_ASM_NASM_IMPLICIT_LINK_LIBRARIES + \ CMAKE_ASM_NASM_INCLUDE_WHAT_YOU_USE + \ CMAKE_ASM_NASM_INIT + \ CMAKE_ASM_NASM_LIBRARY_ARCHITECTURE + \ CMAKE_ASM_NASM_LINKER_LAUNCHER + \ CMAKE_ASM_NASM_LINKER_PREFERENCE + \ CMAKE_ASM_NASM_LINKER_PREFERENCE_PROPAGATES + \ CMAKE_ASM_NASM_LINKER_WRAPPER_FLAG + \ CMAKE_ASM_NASM_LINKER_WRAPPER_FLAG_SEP + \ CMAKE_ASM_NASM_LINK_EXECUTABLE + \ CMAKE_ASM_NASM_LINK_LIBRARY_FILE_FLAG + \ CMAKE_ASM_NASM_LINK_LIBRARY_FLAG + \ CMAKE_ASM_NASM_LINK_LIBRARY_SUFFIX + \ CMAKE_ASM_NASM_LINK_WHAT_YOU_USE_FLAG + \ CMAKE_ASM_NASM_OUTPUT_EXTENSION + \ CMAKE_ASM_NASM_PLATFORM_ID + \ CMAKE_ASM_NASM_SIMULATE_ID + \ CMAKE_ASM_NASM_SIMULATE_VERSION + \ CMAKE_ASM_NASM_SIZEOF_DATA_PTR + \ CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS + \ CMAKE_ASM_NASM_STANDARD + \ CMAKE_ASM_NASM_STANDARD_DEFAULT + \ CMAKE_ASM_NASM_STANDARD_INCLUDE_DIRECTORIES + \ CMAKE_ASM_NASM_STANDARD_LIBRARIES + \ CMAKE_ASM_NASM_STANDARD_REQUIRED + \ CMAKE_ASM_NASM_SUPPORTED + \ CMAKE_ASM_NASM_VISIBILITY_PRESET + \ CMAKE_ASM_OUTPUT_EXTENSION + \ CMAKE_ASM_PLATFORM_ID + \ CMAKE_ASM_SIMULATE_ID + \ CMAKE_ASM_SIMULATE_VERSION + \ CMAKE_ASM_SIZEOF_DATA_PTR + \ CMAKE_ASM_SOURCE_FILE_EXTENSIONS + \ CMAKE_ASM_STANDARD + \ CMAKE_ASM_STANDARD_DEFAULT + \ CMAKE_ASM_STANDARD_INCLUDE_DIRECTORIES + \ CMAKE_ASM_STANDARD_LIBRARIES + \ CMAKE_ASM_STANDARD_REQUIRED + \ CMAKE_ASM_SUPPORTED + \ CMAKE_ASM_VISIBILITY_PRESET + \ CMAKE_AUTOGEN_COMMAND_LINE_LENGTH_MAX + \ CMAKE_AUTOGEN_ORIGIN_DEPENDS + \ CMAKE_AUTOGEN_PARALLEL + \ CMAKE_AUTOGEN_USE_SYSTEM_INCLUDE + \ CMAKE_AUTOGEN_VERBOSE + \ CMAKE_AUTOMOC + \ CMAKE_AUTOMOC_COMPILER_PREDEFINES + \ CMAKE_AUTOMOC_DEPEND_FILTERS + \ CMAKE_AUTOMOC_EXECUTABLE + \ CMAKE_AUTOMOC_MACRO_NAMES + \ CMAKE_AUTOMOC_MOC_OPTIONS + \ CMAKE_AUTOMOC_PATH_PREFIX + \ CMAKE_AUTOMOC_RELAXED_MODE + \ CMAKE_AUTOMOC_EXECUTABLE + \ CMAKE_AUTORCC + \ CMAKE_AUTORCC_EXECUTABLE + \ CMAKE_AUTORCC_OPTIONS + \ CMAKE_AUTORCC_EXECUTABLE + \ CMAKE_AUTOUIC + \ CMAKE_AUTOUIC_EXECUTABLE + \ CMAKE_AUTOUIC_OPTIONS + \ CMAKE_AUTOUIC_SEARCH_PATHS + \ CMAKE_AUTOUIC_EXECUTABLE + \ CMAKE_BACKWARDS_COMPATIBILITY + \ CMAKE_BINARY_DIR + \ CMAKE_BUILD_RPATH + \ CMAKE_BUILD_RPATH_USE_ORIGIN + \ CMAKE_BUILD_TOOL + \ CMAKE_BUILD_TYPE + \ CMAKE_BUILD_WITH_INSTALL_NAME_DIR + \ CMAKE_BUILD_WITH_INSTALL_RPATH + \ CMAKE_C + \ CMAKE_CACHEFILE_DIR + \ CMAKE_CACHE_MAJOR_VERSION + \ CMAKE_CACHE_MINOR_VERSION + \ CMAKE_CACHE_PATCH_VERSION + \ CMAKE_CFG_INTDIR + \ CMAKE_CLANG_VFS_OVERLAY + \ CMAKE_CL_64 + \ CMAKE_CODEBLOCKS_COMPILER_ID + \ CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES + \ CMAKE_CODELITE_USE_TARGETS + \ CMAKE_COLOR_DIAGNOSTICS + \ CMAKE_COLOR_MAKEFILE + \ CMAKE_COMMAND + \ CMAKE_COMPILER_2005 + \ CMAKE_COMPILER_IS_GNUCC + \ CMAKE_COMPILER_IS_GNUCXX + \ CMAKE_COMPILER_IS_GNUG77 + \ CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY + \ CMAKE_COMPILE_WARNING_AS_ERROR + \ CMAKE_CONFIGURATION_TYPES + \ CMAKE_CPACK_COMMAND + \ CMAKE_CROSSCOMPILING + \ CMAKE_CROSSCOMPILING_EMULATOR + \ CMAKE_CROSS_CONFIGS + \ CMAKE_CSharp + \ CMAKE_CSharp_ANDROID_TOOLCHAIN_MACHINE + \ CMAKE_CSharp_ANDROID_TOOLCHAIN_PREFIX + \ CMAKE_CSharp_ANDROID_TOOLCHAIN_SUFFIX + \ CMAKE_CSharp_ARCHIVE_APPEND + \ CMAKE_CSharp_ARCHIVE_CREATE + \ CMAKE_CSharp_ARCHIVE_FINISH + \ CMAKE_CSharp_BYTE_ORDER + \ CMAKE_CSharp_CLANG_TIDY + \ CMAKE_CSharp_CLANG_TIDY_EXPORT_FIXES_DIR + \ CMAKE_CSharp_COMPILER + \ CMAKE_CSharp_COMPILER_ABI + \ CMAKE_CSharp_COMPILER_AR + \ CMAKE_CSharp_COMPILER_ARCHITECTURE_ID + \ CMAKE_CSharp_COMPILER_EXTERNAL_TOOLCHAIN + \ CMAKE_CSharp_COMPILER_FRONTEND_VARIANT + \ CMAKE_CSharp_COMPILER_ID + \ CMAKE_CSharp_COMPILER_LAUNCHER + \ CMAKE_CSharp_COMPILER_LOADED + \ CMAKE_CSharp_COMPILER_PREDEFINES_COMMAND + \ CMAKE_CSharp_COMPILER_RANLIB + \ CMAKE_CSharp_COMPILER_TARGET + \ CMAKE_CSharp_COMPILER_VERSION + \ CMAKE_CSharp_COMPILER_VERSION_INTERNAL + \ CMAKE_CSharp_COMPILE_OBJECT + \ CMAKE_CSharp_CPPCHECK + \ CMAKE_CSharp_CPPLINT + \ CMAKE_CSharp_CREATE_SHARED_LIBRARY + \ CMAKE_CSharp_CREATE_SHARED_MODULE + \ CMAKE_CSharp_CREATE_STATIC_LIBRARY + \ CMAKE_CSharp_EXTENSIONS + \ CMAKE_CSharp_EXTENSIONS_DEFAULT + \ CMAKE_CSharp_FLAGS + \ CMAKE_CSharp_FLAGS_DEBUG + \ CMAKE_CSharp_FLAGS_DEBUG_INIT + \ CMAKE_CSharp_FLAGS_INIT + \ CMAKE_CSharp_FLAGS_MINSIZEREL + \ CMAKE_CSharp_FLAGS_MINSIZEREL_INIT + \ CMAKE_CSharp_FLAGS_RELEASE + \ CMAKE_CSharp_FLAGS_RELEASE_INIT + \ CMAKE_CSharp_FLAGS_RELWITHDEBINFO + \ CMAKE_CSharp_FLAGS_RELWITHDEBINFO_INIT + \ CMAKE_CSharp_IGNORE_EXTENSIONS + \ CMAKE_CSharp_IMPLICIT_INCLUDE_DIRECTORIES + \ CMAKE_CSharp_IMPLICIT_LINK_DIRECTORIES + \ CMAKE_CSharp_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + \ CMAKE_CSharp_IMPLICIT_LINK_LIBRARIES + \ CMAKE_CSharp_INCLUDE_WHAT_YOU_USE + \ CMAKE_CSharp_INIT + \ CMAKE_CSharp_LIBRARY_ARCHITECTURE + \ CMAKE_CSharp_LINKER_LAUNCHER + \ CMAKE_CSharp_LINKER_PREFERENCE + \ CMAKE_CSharp_LINKER_PREFERENCE_PROPAGATES + \ CMAKE_CSharp_LINKER_WRAPPER_FLAG + \ CMAKE_CSharp_LINKER_WRAPPER_FLAG_SEP + \ CMAKE_CSharp_LINK_EXECUTABLE + \ CMAKE_CSharp_LINK_LIBRARY_FILE_FLAG + \ CMAKE_CSharp_LINK_LIBRARY_FLAG + \ CMAKE_CSharp_LINK_LIBRARY_SUFFIX + \ CMAKE_CSharp_LINK_WHAT_YOU_USE_FLAG + \ CMAKE_CSharp_OUTPUT_EXTENSION + \ CMAKE_CSharp_PLATFORM_ID + \ CMAKE_CSharp_SIMULATE_ID + \ CMAKE_CSharp_SIMULATE_VERSION + \ CMAKE_CSharp_SIZEOF_DATA_PTR + \ CMAKE_CSharp_SOURCE_FILE_EXTENSIONS + \ CMAKE_CSharp_STANDARD + \ CMAKE_CSharp_STANDARD_DEFAULT + \ CMAKE_CSharp_STANDARD_INCLUDE_DIRECTORIES + \ CMAKE_CSharp_STANDARD_LIBRARIES + \ CMAKE_CSharp_STANDARD_REQUIRED + \ CMAKE_CSharp_SUPPORTED + \ CMAKE_CSharp_VISIBILITY_PRESET + \ CMAKE_CTEST_ARGUMENTS + \ CMAKE_CTEST_COMMAND + \ CMAKE_CUDA + \ CMAKE_CUDA_ANDROID_TOOLCHAIN_MACHINE + \ CMAKE_CUDA_ANDROID_TOOLCHAIN_PREFIX + \ CMAKE_CUDA_ANDROID_TOOLCHAIN_SUFFIX + \ CMAKE_CUDA_ARCHITECTURES + \ CMAKE_CUDA_ARCHIVE_APPEND + \ CMAKE_CUDA_ARCHIVE_CREATE + \ CMAKE_CUDA_ARCHIVE_FINISH + \ CMAKE_CUDA_BYTE_ORDER + \ CMAKE_CUDA_CLANG_TIDY + \ CMAKE_CUDA_CLANG_TIDY_EXPORT_FIXES_DIR + \ CMAKE_CUDA_COMPILER + \ CMAKE_CUDA_COMPILER_ABI + \ CMAKE_CUDA_COMPILER_AR + \ CMAKE_CUDA_COMPILER_ARCHITECTURE_ID + \ CMAKE_CUDA_COMPILER_EXTERNAL_TOOLCHAIN + \ CMAKE_CUDA_COMPILER_FRONTEND_VARIANT + \ CMAKE_CUDA_COMPILER_ID + \ CMAKE_CUDA_COMPILER_LAUNCHER + \ CMAKE_CUDA_COMPILER_LOADED + \ CMAKE_CUDA_COMPILER_PREDEFINES_COMMAND + \ CMAKE_CUDA_COMPILER_RANLIB + \ CMAKE_CUDA_COMPILER_TARGET + \ CMAKE_CUDA_COMPILER_VERSION + \ CMAKE_CUDA_COMPILER_VERSION_INTERNAL + \ CMAKE_CUDA_COMPILE_FEATURES + \ CMAKE_CUDA_COMPILE_OBJECT + \ CMAKE_CUDA_CPPCHECK + \ CMAKE_CUDA_CPPLINT + \ CMAKE_CUDA_CREATE_SHARED_LIBRARY + \ CMAKE_CUDA_CREATE_SHARED_MODULE + \ CMAKE_CUDA_CREATE_STATIC_LIBRARY + \ CMAKE_CUDA_EXTENSIONS + \ CMAKE_CUDA_EXTENSIONS_DEFAULT + \ CMAKE_CUDA_FLAGS + \ CMAKE_CUDA_FLAGS_DEBUG + \ CMAKE_CUDA_FLAGS_DEBUG_INIT + \ CMAKE_CUDA_FLAGS_INIT + \ CMAKE_CUDA_FLAGS_MINSIZEREL + \ CMAKE_CUDA_FLAGS_MINSIZEREL_INIT + \ CMAKE_CUDA_FLAGS_RELEASE + \ CMAKE_CUDA_FLAGS_RELEASE_INIT + \ CMAKE_CUDA_FLAGS_RELWITHDEBINFO + \ CMAKE_CUDA_FLAGS_RELWITHDEBINFO_INIT + \ CMAKE_CUDA_HOST_COMPILER + \ CMAKE_CUDA_IGNORE_EXTENSIONS + \ CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES + \ CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES + \ CMAKE_CUDA_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + \ CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES + \ CMAKE_CUDA_INCLUDE_WHAT_YOU_USE + \ CMAKE_CUDA_INIT + \ CMAKE_CUDA_LIBRARY_ARCHITECTURE + \ CMAKE_CUDA_LINKER_LAUNCHER + \ CMAKE_CUDA_LINKER_PREFERENCE + \ CMAKE_CUDA_LINKER_PREFERENCE_PROPAGATES + \ CMAKE_CUDA_LINKER_WRAPPER_FLAG + \ CMAKE_CUDA_LINKER_WRAPPER_FLAG_SEP + \ CMAKE_CUDA_LINK_EXECUTABLE + \ CMAKE_CUDA_LINK_LIBRARY_FILE_FLAG + \ CMAKE_CUDA_LINK_LIBRARY_FLAG + \ CMAKE_CUDA_LINK_LIBRARY_SUFFIX + \ CMAKE_CUDA_LINK_WHAT_YOU_USE_FLAG + \ CMAKE_CUDA_OUTPUT_EXTENSION + \ CMAKE_CUDA_PLATFORM_ID + \ CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS + \ CMAKE_CUDA_RUNTIME_LIBRARY + \ CMAKE_CUDA_SEPARABLE_COMPILATION + \ CMAKE_CUDA_SIMULATE_ID + \ CMAKE_CUDA_SIMULATE_VERSION + \ CMAKE_CUDA_SIZEOF_DATA_PTR + \ CMAKE_CUDA_SOURCE_FILE_EXTENSIONS + \ CMAKE_CUDA_STANDARD + \ CMAKE_CUDA_STANDARD_DEFAULT + \ CMAKE_CUDA_STANDARD_INCLUDE_DIRECTORIES + \ CMAKE_CUDA_STANDARD_LIBRARIES + \ CMAKE_CUDA_STANDARD_REQUIRED + \ CMAKE_CUDA_SUPPORTED + \ CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES + \ CMAKE_CUDA_VISIBILITY_PRESET + \ CMAKE_CURRENT_BINARY_DIR + \ CMAKE_CURRENT_FUNCTION + \ CMAKE_CURRENT_FUNCTION_LIST_DIR + \ CMAKE_CURRENT_FUNCTION_LIST_FILE + \ CMAKE_CURRENT_FUNCTION_LIST_LINE + \ CMAKE_CURRENT_LIST_DIR + \ CMAKE_CURRENT_LIST_FILE + \ CMAKE_CURRENT_LIST_LINE + \ CMAKE_CURRENT_SOURCE_DIR + \ CMAKE_CXX + \ CMAKE_CXX_ANDROID_TOOLCHAIN_MACHINE + \ CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX + \ CMAKE_CXX_ANDROID_TOOLCHAIN_SUFFIX + \ CMAKE_CXX_ARCHIVE_APPEND + \ CMAKE_CXX_ARCHIVE_CREATE + \ CMAKE_CXX_ARCHIVE_FINISH + \ CMAKE_CXX_BYTE_ORDER + \ CMAKE_CXX_CLANG_TIDY + \ CMAKE_CXX_CLANG_TIDY_EXPORT_FIXES_DIR + \ CMAKE_CXX_COMPILER + \ CMAKE_CXX_COMPILER_ABI + \ CMAKE_CXX_COMPILER_AR + \ CMAKE_CXX_COMPILER_ARCHITECTURE_ID + \ CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN + \ CMAKE_CXX_COMPILER_FRONTEND_VARIANT + \ CMAKE_CXX_COMPILER_ID + \ CMAKE_CXX_COMPILER_LAUNCHER + \ CMAKE_CXX_COMPILER_LOADED + \ CMAKE_CXX_COMPILER_PREDEFINES_COMMAND + \ CMAKE_CXX_COMPILER_RANLIB + \ CMAKE_CXX_COMPILER_TARGET + \ CMAKE_CXX_COMPILER_VERSION + \ CMAKE_CXX_COMPILER_VERSION_INTERNAL + \ CMAKE_CXX_COMPILE_FEATURES + \ CMAKE_CXX_COMPILE_OBJECT + \ CMAKE_CXX_CPPCHECK + \ CMAKE_CXX_CPPLINT + \ CMAKE_CXX_CREATE_SHARED_LIBRARY + \ CMAKE_CXX_CREATE_SHARED_MODULE + \ CMAKE_CXX_CREATE_STATIC_LIBRARY + \ CMAKE_CXX_EXTENSIONS + \ CMAKE_CXX_EXTENSIONS_DEFAULT + \ CMAKE_CXX_FLAGS + \ CMAKE_CXX_FLAGS_DEBUG + \ CMAKE_CXX_FLAGS_DEBUG_INIT + \ CMAKE_CXX_FLAGS_INIT + \ CMAKE_CXX_FLAGS_MINSIZEREL + \ CMAKE_CXX_FLAGS_MINSIZEREL_INIT + \ CMAKE_CXX_FLAGS_RELEASE + \ CMAKE_CXX_FLAGS_RELEASE_INIT + \ CMAKE_CXX_FLAGS_RELWITHDEBINFO + \ CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT + \ CMAKE_CXX_IGNORE_EXTENSIONS + \ CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES + \ CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES + \ CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + \ CMAKE_CXX_IMPLICIT_LINK_LIBRARIES + \ CMAKE_CXX_INCLUDE_WHAT_YOU_USE + \ CMAKE_CXX_INIT + \ CMAKE_CXX_LIBRARY_ARCHITECTURE + \ CMAKE_CXX_LINKER_LAUNCHER + \ CMAKE_CXX_LINKER_PREFERENCE + \ CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES + \ CMAKE_CXX_LINKER_WRAPPER_FLAG + \ CMAKE_CXX_LINKER_WRAPPER_FLAG_SEP + \ CMAKE_CXX_LINK_EXECUTABLE + \ CMAKE_CXX_LINK_LIBRARY_FILE_FLAG + \ CMAKE_CXX_LINK_LIBRARY_FLAG + \ CMAKE_CXX_LINK_LIBRARY_SUFFIX + \ CMAKE_CXX_LINK_WHAT_YOU_USE_FLAG + \ CMAKE_CXX_OUTPUT_EXTENSION + \ CMAKE_CXX_PLATFORM_ID + \ CMAKE_CXX_SCAN_FOR_MODULES + \ CMAKE_CXX_SIMULATE_ID + \ CMAKE_CXX_SIMULATE_VERSION + \ CMAKE_CXX_SIZEOF_DATA_PTR + \ CMAKE_CXX_SOURCE_FILE_EXTENSIONS + \ CMAKE_CXX_STANDARD + \ CMAKE_CXX_STANDARD_DEFAULT + \ CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES + \ CMAKE_CXX_STANDARD_LIBRARIES + \ CMAKE_CXX_STANDARD_REQUIRED + \ CMAKE_CXX_SUPPORTED + \ CMAKE_CXX_VISIBILITY_PRESET + \ CMAKE_C_ANDROID_TOOLCHAIN_MACHINE + \ CMAKE_C_ANDROID_TOOLCHAIN_PREFIX + \ CMAKE_C_ANDROID_TOOLCHAIN_SUFFIX + \ CMAKE_C_ARCHIVE_APPEND + \ CMAKE_C_ARCHIVE_CREATE + \ CMAKE_C_ARCHIVE_FINISH + \ CMAKE_C_BYTE_ORDER + \ CMAKE_C_CLANG_TIDY + \ CMAKE_C_CLANG_TIDY_EXPORT_FIXES_DIR + \ CMAKE_C_COMPILER + \ CMAKE_C_COMPILER_ABI + \ CMAKE_C_COMPILER_AR + \ CMAKE_C_COMPILER_ARCHITECTURE_ID + \ CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN + \ CMAKE_C_COMPILER_FRONTEND_VARIANT + \ CMAKE_C_COMPILER_ID + \ CMAKE_C_COMPILER_LAUNCHER + \ CMAKE_C_COMPILER_LOADED + \ CMAKE_C_COMPILER_PREDEFINES_COMMAND + \ CMAKE_C_COMPILER_RANLIB + \ CMAKE_C_COMPILER_TARGET + \ CMAKE_C_COMPILER_VERSION + \ CMAKE_C_COMPILER_VERSION_INTERNAL + \ CMAKE_C_COMPILE_FEATURES + \ CMAKE_C_COMPILE_OBJECT + \ CMAKE_C_CPPCHECK + \ CMAKE_C_CPPLINT + \ CMAKE_C_CREATE_SHARED_LIBRARY + \ CMAKE_C_CREATE_SHARED_MODULE + \ CMAKE_C_CREATE_STATIC_LIBRARY + \ CMAKE_C_EXTENSIONS + \ CMAKE_C_EXTENSIONS_DEFAULT + \ CMAKE_C_FLAGS + \ CMAKE_C_FLAGS_DEBUG + \ CMAKE_C_FLAGS_DEBUG_INIT + \ CMAKE_C_FLAGS_INIT + \ CMAKE_C_FLAGS_MINSIZEREL + \ CMAKE_C_FLAGS_MINSIZEREL_INIT + \ CMAKE_C_FLAGS_RELEASE + \ CMAKE_C_FLAGS_RELEASE_INIT + \ CMAKE_C_FLAGS_RELWITHDEBINFO + \ CMAKE_C_FLAGS_RELWITHDEBINFO_INIT + \ CMAKE_C_IGNORE_EXTENSIONS + \ CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES + \ CMAKE_C_IMPLICIT_LINK_DIRECTORIES + \ CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + \ CMAKE_C_IMPLICIT_LINK_LIBRARIES + \ CMAKE_C_INCLUDE_WHAT_YOU_USE + \ CMAKE_C_INIT + \ CMAKE_C_LIBRARY_ARCHITECTURE + \ CMAKE_C_LINKER_LAUNCHER + \ CMAKE_C_LINKER_PREFERENCE + \ CMAKE_C_LINKER_PREFERENCE_PROPAGATES + \ CMAKE_C_LINKER_WRAPPER_FLAG + \ CMAKE_C_LINKER_WRAPPER_FLAG_SEP + \ CMAKE_C_LINK_EXECUTABLE + \ CMAKE_C_LINK_LIBRARY_FILE_FLAG + \ CMAKE_C_LINK_LIBRARY_FLAG + \ CMAKE_C_LINK_LIBRARY_SUFFIX + \ CMAKE_C_LINK_WHAT_YOU_USE_FLAG + \ CMAKE_C_OUTPUT_EXTENSION + \ CMAKE_C_PLATFORM_ID + \ CMAKE_C_SIMULATE_ID + \ CMAKE_C_SIMULATE_VERSION + \ CMAKE_C_SIZEOF_DATA_PTR + \ CMAKE_C_SOURCE_FILE_EXTENSIONS + \ CMAKE_C_STANDARD + \ CMAKE_C_STANDARD_DEFAULT + \ CMAKE_C_STANDARD_INCLUDE_DIRECTORIES + \ CMAKE_C_STANDARD_LIBRARIES + \ CMAKE_C_STANDARD_REQUIRED + \ CMAKE_C_SUPPORTED + \ CMAKE_C_VISIBILITY_PRESET + \ CMAKE_DEBUG_POSTFIX + \ CMAKE_DEBUG_TARGET_PROPERTIES + \ CMAKE_DEFAULT_BUILD_TYPE + \ CMAKE_DEFAULT_CONFIGS + \ CMAKE_DEPENDS_IN_PROJECT_ONLY + \ CMAKE_DEPENDS_USE_COMPILER + \ CMAKE_DIRECTORY_LABELS + \ CMAKE_DISABLE_PRECOMPILE_HEADERS + \ CMAKE_DLL_NAME_WITH_SOVERSION + \ CMAKE_DL_LIBS + \ CMAKE_DOTNET_SDK + \ CMAKE_DOTNET_TARGET_FRAMEWORK + \ CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION + \ CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES + \ CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT + \ CMAKE_ECLIPSE_MAKE_ARGUMENTS + \ CMAKE_ECLIPSE_RESOURCE_ENCODING + \ CMAKE_ECLIPSE_VERSION + \ CMAKE_EDIT_COMMAND + \ CMAKE_ENABLE_EXPORTS + \ CMAKE_ERROR_DEPRECATED + \ CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION + \ CMAKE_EXECUTABLE_ENABLE_EXPORTS + \ CMAKE_EXECUTABLE_SUFFIX + \ CMAKE_EXECUTABLE_SUFFIX_ASM + \ CMAKE_EXECUTABLE_SUFFIX_ASM_MASM + \ CMAKE_EXECUTABLE_SUFFIX_ASM_NASM + \ CMAKE_EXECUTABLE_SUFFIX_C + \ CMAKE_EXECUTABLE_SUFFIX_CSharp + \ CMAKE_EXECUTABLE_SUFFIX_CUDA + \ CMAKE_EXECUTABLE_SUFFIX_CXX + \ CMAKE_EXECUTABLE_SUFFIX_Fortran + \ CMAKE_EXECUTABLE_SUFFIX_HIP + \ CMAKE_EXECUTABLE_SUFFIX_Java + \ CMAKE_EXECUTABLE_SUFFIX_RC + \ CMAKE_EXECUTABLE_SUFFIX_Swift + \ CMAKE_EXECUTE_PROCESS_COMMAND_ECHO + \ CMAKE_EXE_LINKER_FLAGS + \ CMAKE_EXE_LINKER_FLAGS_INIT + \ CMAKE_EXPORT_COMPILE_COMMANDS + \ CMAKE_EXPORT_NO_PACKAGE_REGISTRY + \ CMAKE_EXPORT_PACKAGE_REGISTRY + \ CMAKE_EXTRA_GENERATOR + \ CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES + \ CMAKE_FIND_APPBUNDLE + \ CMAKE_FIND_DEBUG_MODE + \ CMAKE_FIND_FRAMEWORK + \ CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX + \ CMAKE_FIND_LIBRARY_PREFIXES + \ CMAKE_FIND_LIBRARY_SUFFIXES + \ CMAKE_FIND_NO_INSTALL_PREFIX + \ CMAKE_FIND_PACKAGE_NAME + \ CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY + \ CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY + \ CMAKE_FIND_PACKAGE_PREFER_CONFIG + \ CMAKE_FIND_PACKAGE_REDIRECTS_DIR + \ CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS + \ CMAKE_FIND_PACKAGE_SORT_DIRECTION + \ CMAKE_FIND_PACKAGE_SORT_ORDER + \ CMAKE_FIND_PACKAGE_TARGETS_GLOBAL + \ CMAKE_FIND_PACKAGE_WARN_NO_MODULE + \ CMAKE_FIND_ROOT_PATH + \ CMAKE_FIND_ROOT_PATH_MODE_INCLUDE + \ CMAKE_FIND_ROOT_PATH_MODE_LIBRARY + \ CMAKE_FIND_ROOT_PATH_MODE_PACKAGE + \ CMAKE_FIND_ROOT_PATH_MODE_PROGRAM + \ CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH + \ CMAKE_FIND_USE_INSTALL_PREFIX + \ CMAKE_FIND_USE_CMAKE_PATH + \ CMAKE_FIND_USE_CMAKE_SYSTEM_PATH + \ CMAKE_FIND_USE_INSTALL_PREFIX + \ CMAKE_FIND_USE_PACKAGE_REGISTRY + \ CMAKE_FIND_USE_PACKAGE_ROOT_PATH + \ CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH + \ CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY + \ CMAKE_FOLDER + \ CMAKE_FRAMEWORK + \ CMAKE_FRAMEWORK_PATH + \ CMAKE_Fortran + \ CMAKE_Fortran_ANDROID_TOOLCHAIN_MACHINE + \ CMAKE_Fortran_ANDROID_TOOLCHAIN_PREFIX + \ CMAKE_Fortran_ANDROID_TOOLCHAIN_SUFFIX + \ CMAKE_Fortran_ARCHIVE_APPEND + \ CMAKE_Fortran_ARCHIVE_CREATE + \ CMAKE_Fortran_ARCHIVE_FINISH + \ CMAKE_Fortran_BYTE_ORDER + \ CMAKE_Fortran_CLANG_TIDY + \ CMAKE_Fortran_CLANG_TIDY_EXPORT_FIXES_DIR + \ CMAKE_Fortran_COMPILER + \ CMAKE_Fortran_COMPILER_ABI + \ CMAKE_Fortran_COMPILER_AR + \ CMAKE_Fortran_COMPILER_ARCHITECTURE_ID + \ CMAKE_Fortran_COMPILER_EXTERNAL_TOOLCHAIN + \ CMAKE_Fortran_COMPILER_FRONTEND_VARIANT + \ CMAKE_Fortran_COMPILER_ID + \ CMAKE_Fortran_COMPILER_LAUNCHER + \ CMAKE_Fortran_COMPILER_LOADED + \ CMAKE_Fortran_COMPILER_PREDEFINES_COMMAND + \ CMAKE_Fortran_COMPILER_RANLIB + \ CMAKE_Fortran_COMPILER_TARGET + \ CMAKE_Fortran_COMPILER_VERSION + \ CMAKE_Fortran_COMPILER_VERSION_INTERNAL + \ CMAKE_Fortran_COMPILE_OBJECT + \ CMAKE_Fortran_CPPCHECK + \ CMAKE_Fortran_CPPLINT + \ CMAKE_Fortran_CREATE_SHARED_LIBRARY + \ CMAKE_Fortran_CREATE_SHARED_MODULE + \ CMAKE_Fortran_CREATE_STATIC_LIBRARY + \ CMAKE_Fortran_EXTENSIONS + \ CMAKE_Fortran_EXTENSIONS_DEFAULT + \ CMAKE_Fortran_FLAGS + \ CMAKE_Fortran_FLAGS_DEBUG + \ CMAKE_Fortran_FLAGS_DEBUG_INIT + \ CMAKE_Fortran_FLAGS_INIT + \ CMAKE_Fortran_FLAGS_MINSIZEREL + \ CMAKE_Fortran_FLAGS_MINSIZEREL_INIT + \ CMAKE_Fortran_FLAGS_RELEASE + \ CMAKE_Fortran_FLAGS_RELEASE_INIT + \ CMAKE_Fortran_FLAGS_RELWITHDEBINFO + \ CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT + \ CMAKE_Fortran_FORMAT + \ CMAKE_Fortran_IGNORE_EXTENSIONS + \ CMAKE_Fortran_IMPLICIT_INCLUDE_DIRECTORIES + \ CMAKE_Fortran_IMPLICIT_LINK_DIRECTORIES + \ CMAKE_Fortran_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + \ CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES + \ CMAKE_Fortran_INCLUDE_WHAT_YOU_USE + \ CMAKE_Fortran_INIT + \ CMAKE_Fortran_LIBRARY_ARCHITECTURE + \ CMAKE_Fortran_LINKER_LAUNCHER + \ CMAKE_Fortran_LINKER_PREFERENCE + \ CMAKE_Fortran_LINKER_PREFERENCE_PROPAGATES + \ CMAKE_Fortran_LINKER_WRAPPER_FLAG + \ CMAKE_Fortran_LINKER_WRAPPER_FLAG_SEP + \ CMAKE_Fortran_LINK_EXECUTABLE + \ CMAKE_Fortran_LINK_LIBRARY_FILE_FLAG + \ CMAKE_Fortran_LINK_LIBRARY_FLAG + \ CMAKE_Fortran_LINK_LIBRARY_SUFFIX + \ CMAKE_Fortran_LINK_WHAT_YOU_USE_FLAG + \ CMAKE_Fortran_MODDIR_DEFAULT + \ CMAKE_Fortran_MODDIR_FLAG + \ CMAKE_Fortran_MODOUT_FLAG + \ CMAKE_Fortran_MODULE_DIRECTORY + \ CMAKE_Fortran_OUTPUT_EXTENSION + \ CMAKE_Fortran_PLATFORM_ID + \ CMAKE_Fortran_PREPROCESS + \ CMAKE_Fortran_SIMULATE_ID + \ CMAKE_Fortran_SIMULATE_VERSION + \ CMAKE_Fortran_SIZEOF_DATA_PTR + \ CMAKE_Fortran_SOURCE_FILE_EXTENSIONS + \ CMAKE_Fortran_STANDARD + \ CMAKE_Fortran_STANDARD_DEFAULT + \ CMAKE_Fortran_STANDARD_INCLUDE_DIRECTORIES + \ CMAKE_Fortran_STANDARD_LIBRARIES + \ CMAKE_Fortran_STANDARD_REQUIRED + \ CMAKE_Fortran_SUPPORTED + \ CMAKE_Fortran_VISIBILITY_PRESET + \ CMAKE_GENERATOR + \ CMAKE_GENERATOR_INSTANCE + \ CMAKE_GENERATOR_PLATFORM + \ CMAKE_GENERATOR_TOOLSET + \ CMAKE_GHS_NO_SOURCE_GROUP_FILE + \ CMAKE_GLOBAL_AUTOGEN_TARGET + \ CMAKE_GLOBAL_AUTOGEN_TARGET_NAME + \ CMAKE_GLOBAL_AUTORCC_TARGET + \ CMAKE_GLOBAL_AUTORCC_TARGET_NAME + \ CMAKE_GNUtoMS + \ CMAKE_HIP + \ CMAKE_HIP_ANDROID_TOOLCHAIN_MACHINE + \ CMAKE_HIP_ANDROID_TOOLCHAIN_PREFIX + \ CMAKE_HIP_ANDROID_TOOLCHAIN_SUFFIX + \ CMAKE_HIP_ARCHITECTURES + \ CMAKE_HIP_ARCHIVE_APPEND + \ CMAKE_HIP_ARCHIVE_CREATE + \ CMAKE_HIP_ARCHIVE_FINISH + \ CMAKE_HIP_BYTE_ORDER + \ CMAKE_HIP_CLANG_TIDY + \ CMAKE_HIP_CLANG_TIDY_EXPORT_FIXES_DIR + \ CMAKE_HIP_COMPILER + \ CMAKE_HIP_COMPILER_ABI + \ CMAKE_HIP_COMPILER_AR + \ CMAKE_HIP_COMPILER_ARCHITECTURE_ID + \ CMAKE_HIP_COMPILER_EXTERNAL_TOOLCHAIN + \ CMAKE_HIP_COMPILER_FRONTEND_VARIANT + \ CMAKE_HIP_COMPILER_ID + \ CMAKE_HIP_COMPILER_LAUNCHER + \ CMAKE_HIP_COMPILER_LOADED + \ CMAKE_HIP_COMPILER_PREDEFINES_COMMAND + \ CMAKE_HIP_COMPILER_RANLIB + \ CMAKE_HIP_COMPILER_TARGET + \ CMAKE_HIP_COMPILER_VERSION + \ CMAKE_HIP_COMPILER_VERSION_INTERNAL + \ CMAKE_HIP_COMPILE_FEATURES + \ CMAKE_HIP_COMPILE_OBJECT + \ CMAKE_HIP_CPPCHECK + \ CMAKE_HIP_CPPLINT + \ CMAKE_HIP_CREATE_SHARED_LIBRARY + \ CMAKE_HIP_CREATE_SHARED_MODULE + \ CMAKE_HIP_CREATE_STATIC_LIBRARY + \ CMAKE_HIP_EXTENSIONS + \ CMAKE_HIP_EXTENSIONS_DEFAULT + \ CMAKE_HIP_FLAGS + \ CMAKE_HIP_FLAGS_DEBUG + \ CMAKE_HIP_FLAGS_DEBUG_INIT + \ CMAKE_HIP_FLAGS_INIT + \ CMAKE_HIP_FLAGS_MINSIZEREL + \ CMAKE_HIP_FLAGS_MINSIZEREL_INIT + \ CMAKE_HIP_FLAGS_RELEASE + \ CMAKE_HIP_FLAGS_RELEASE_INIT + \ CMAKE_HIP_FLAGS_RELWITHDEBINFO + \ CMAKE_HIP_FLAGS_RELWITHDEBINFO_INIT + \ CMAKE_HIP_IGNORE_EXTENSIONS + \ CMAKE_HIP_IMPLICIT_INCLUDE_DIRECTORIES + \ CMAKE_HIP_IMPLICIT_LINK_DIRECTORIES + \ CMAKE_HIP_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + \ CMAKE_HIP_IMPLICIT_LINK_LIBRARIES + \ CMAKE_HIP_INCLUDE_WHAT_YOU_USE + \ CMAKE_HIP_INIT + \ CMAKE_HIP_LIBRARY_ARCHITECTURE + \ CMAKE_HIP_LINKER_LAUNCHER + \ CMAKE_HIP_LINKER_PREFERENCE + \ CMAKE_HIP_LINKER_PREFERENCE_PROPAGATES + \ CMAKE_HIP_LINKER_WRAPPER_FLAG + \ CMAKE_HIP_LINKER_WRAPPER_FLAG_SEP + \ CMAKE_HIP_LINK_EXECUTABLE + \ CMAKE_HIP_LINK_LIBRARY_FILE_FLAG + \ CMAKE_HIP_LINK_LIBRARY_FLAG + \ CMAKE_HIP_LINK_LIBRARY_SUFFIX + \ CMAKE_HIP_LINK_WHAT_YOU_USE_FLAG + \ CMAKE_HIP_OUTPUT_EXTENSION + \ CMAKE_HIP_PLATFORM_ID + \ CMAKE_HIP_SIMULATE_ID + \ CMAKE_HIP_SIMULATE_VERSION + \ CMAKE_HIP_SIZEOF_DATA_PTR + \ CMAKE_HIP_SOURCE_FILE_EXTENSIONS + \ CMAKE_HIP_STANDARD + \ CMAKE_HIP_STANDARD_DEFAULT + \ CMAKE_HIP_STANDARD_INCLUDE_DIRECTORIES + \ CMAKE_HIP_STANDARD_LIBRARIES + \ CMAKE_HIP_STANDARD_REQUIRED + \ CMAKE_HIP_SUPPORTED + \ CMAKE_HIP_VISIBILITY_PRESET + \ CMAKE_HOME_DIRECTORY + \ CMAKE_HOST_APPLE + \ CMAKE_HOST_BSD + \ CMAKE_HOST_LINUX + \ CMAKE_HOST_SOLARIS + \ CMAKE_HOST_SYSTEM + \ CMAKE_HOST_SYSTEM_NAME + \ CMAKE_HOST_SYSTEM_PROCESSOR + \ CMAKE_HOST_SYSTEM_VERSION + \ CMAKE_HOST_UNIX + \ CMAKE_HOST_WIN32 + \ CMAKE_IGNORE_PATH + \ CMAKE_IGNORE_PREFIX_PATH + \ CMAKE_IMPORT_LIBRARY_PREFIX + \ CMAKE_IMPORT_LIBRARY_SUFFIX + \ CMAKE_INCLUDE_CURRENT_DIR + \ CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE + \ CMAKE_INCLUDE_DIRECTORIES_BEFORE + \ CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE + \ CMAKE_INCLUDE_PATH + \ CMAKE_INSTALL_DEFAULT_COMPONENT_NAME + \ CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS + \ CMAKE_INSTALL_MESSAGE + \ CMAKE_INSTALL_NAME_DIR + \ CMAKE_INSTALL_PREFIX + \ CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT + \ CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH + \ CMAKE_INSTALL_RPATH + \ CMAKE_INSTALL_RPATH_USE_LINK_PATH + \ CMAKE_INTERNAL_PLATFORM_ABI + \ CMAKE_INTERPROCEDURAL_OPTIMIZATION + \ CMAKE_IOS_INSTALL_COMBINED + \ CMAKE_ISPC_HEADER_DIRECTORY + \ CMAKE_ISPC_HEADER_SUFFIX + \ CMAKE_ISPC_INSTRUCTION_SETS + \ CMAKE_JOB_POOLS + \ CMAKE_JOB_POOL_COMPILE + \ CMAKE_JOB_POOL_LINK + \ CMAKE_JOB_POOL_PRECOMPILE_HEADER + \ CMAKE_Java + \ CMAKE_Java_ANDROID_TOOLCHAIN_MACHINE + \ CMAKE_Java_ANDROID_TOOLCHAIN_PREFIX + \ CMAKE_Java_ANDROID_TOOLCHAIN_SUFFIX + \ CMAKE_Java_ARCHIVE_APPEND + \ CMAKE_Java_ARCHIVE_CREATE + \ CMAKE_Java_ARCHIVE_FINISH + \ CMAKE_Java_BYTE_ORDER + \ CMAKE_Java_CLANG_TIDY + \ CMAKE_Java_CLANG_TIDY_EXPORT_FIXES_DIR + \ CMAKE_Java_COMPILER + \ CMAKE_Java_COMPILER_ABI + \ CMAKE_Java_COMPILER_AR + \ CMAKE_Java_COMPILER_ARCHITECTURE_ID + \ CMAKE_Java_COMPILER_EXTERNAL_TOOLCHAIN + \ CMAKE_Java_COMPILER_FRONTEND_VARIANT + \ CMAKE_Java_COMPILER_ID + \ CMAKE_Java_COMPILER_LAUNCHER + \ CMAKE_Java_COMPILER_LOADED + \ CMAKE_Java_COMPILER_PREDEFINES_COMMAND + \ CMAKE_Java_COMPILER_RANLIB + \ CMAKE_Java_COMPILER_TARGET + \ CMAKE_Java_COMPILER_VERSION + \ CMAKE_Java_COMPILER_VERSION_INTERNAL + \ CMAKE_Java_COMPILE_OBJECT + \ CMAKE_Java_CPPCHECK + \ CMAKE_Java_CPPLINT + \ CMAKE_Java_CREATE_SHARED_LIBRARY + \ CMAKE_Java_CREATE_SHARED_MODULE + \ CMAKE_Java_CREATE_STATIC_LIBRARY + \ CMAKE_Java_EXTENSIONS + \ CMAKE_Java_EXTENSIONS_DEFAULT + \ CMAKE_Java_FLAGS + \ CMAKE_Java_FLAGS_DEBUG + \ CMAKE_Java_FLAGS_DEBUG_INIT + \ CMAKE_Java_FLAGS_INIT + \ CMAKE_Java_FLAGS_MINSIZEREL + \ CMAKE_Java_FLAGS_MINSIZEREL_INIT + \ CMAKE_Java_FLAGS_RELEASE + \ CMAKE_Java_FLAGS_RELEASE_INIT + \ CMAKE_Java_FLAGS_RELWITHDEBINFO + \ CMAKE_Java_FLAGS_RELWITHDEBINFO_INIT + \ CMAKE_Java_IGNORE_EXTENSIONS + \ CMAKE_Java_IMPLICIT_INCLUDE_DIRECTORIES + \ CMAKE_Java_IMPLICIT_LINK_DIRECTORIES + \ CMAKE_Java_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + \ CMAKE_Java_IMPLICIT_LINK_LIBRARIES + \ CMAKE_Java_INCLUDE_WHAT_YOU_USE + \ CMAKE_Java_INIT + \ CMAKE_Java_LIBRARY_ARCHITECTURE + \ CMAKE_Java_LINKER_LAUNCHER + \ CMAKE_Java_LINKER_PREFERENCE + \ CMAKE_Java_LINKER_PREFERENCE_PROPAGATES + \ CMAKE_Java_LINKER_WRAPPER_FLAG + \ CMAKE_Java_LINKER_WRAPPER_FLAG_SEP + \ CMAKE_Java_LINK_EXECUTABLE + \ CMAKE_Java_LINK_LIBRARY_FILE_FLAG + \ CMAKE_Java_LINK_LIBRARY_FLAG + \ CMAKE_Java_LINK_LIBRARY_SUFFIX + \ CMAKE_Java_LINK_WHAT_YOU_USE_FLAG + \ CMAKE_Java_OUTPUT_EXTENSION + \ CMAKE_Java_PLATFORM_ID + \ CMAKE_Java_SIMULATE_ID + \ CMAKE_Java_SIMULATE_VERSION + \ CMAKE_Java_SIZEOF_DATA_PTR + \ CMAKE_Java_SOURCE_FILE_EXTENSIONS + \ CMAKE_Java_STANDARD + \ CMAKE_Java_STANDARD_DEFAULT + \ CMAKE_Java_STANDARD_INCLUDE_DIRECTORIES + \ CMAKE_Java_STANDARD_LIBRARIES + \ CMAKE_Java_STANDARD_REQUIRED + \ CMAKE_Java_SUPPORTED + \ CMAKE_Java_VISIBILITY_PRESET + \ CMAKE_KATE_FILES_MODE + \ CMAKE_KATE_MAKE_ARGUMENTS + \ CMAKE_LIBRARY_ARCHITECTURE + \ CMAKE_LIBRARY_ARCHITECTURE_REGEX + \ CMAKE_LIBRARY_OUTPUT_DIRECTORY + \ CMAKE_LIBRARY_PATH + \ CMAKE_LIBRARY_PATH_FLAG + \ CMAKE_LINK_DEF_FILE_FLAG + \ CMAKE_LINK_DEPENDS_NO_SHARED + \ CMAKE_LINK_DEPENDS_USE_LINKER + \ CMAKE_LINK_DIRECTORIES_BEFORE + \ CMAKE_LINK_INTERFACE_LIBRARIES + \ CMAKE_LINK_LIBRARIES_ONLY_TARGETS + \ CMAKE_LINK_LIBRARY_FILE_FLAG + \ CMAKE_LINK_LIBRARY_FLAG + \ CMAKE_LINK_LIBRARY_SUFFIX + \ CMAKE_LINK_SEARCH_END_STATIC + \ CMAKE_LINK_SEARCH_START_STATIC + \ CMAKE_LINK_WHAT_YOU_USE + \ CMAKE_LINK_WHAT_YOU_USE_CHECK + \ CMAKE_MACOSX_BUNDLE + \ CMAKE_MACOSX_RPATH + \ CMAKE_MAJOR_VERSION + \ CMAKE_MAKE_PROGRAM + \ CMAKE_MATCH_COUNT + \ CMAKE_MAXIMUM_RECURSION_DEPTH + \ CMAKE_MESSAGE_CONTEXT + \ CMAKE_MESSAGE_CONTEXT_SHOW + \ CMAKE_MESSAGE_INDENT + \ CMAKE_MESSAGE_LOG_LEVEL + \ CMAKE_MFC_FLAG + \ CMAKE_MINIMUM_REQUIRED_VERSION + \ CMAKE_MINOR_VERSION + \ CMAKE_MODULE_LINKER_FLAGS + \ CMAKE_MODULE_LINKER_FLAGS_INIT + \ CMAKE_MODULE_PATH + \ CMAKE_MSVCIDE_RUN_PATH + \ CMAKE_MSVC_DEBUG_INFORMATION_FORMAT + \ CMAKE_MSVC_RUNTIME_LIBRARY + \ CMAKE_NETRC + \ CMAKE_NETRC_FILE + \ CMAKE_NINJA_OUTPUT_PATH_PREFIX + \ CMAKE_NOT_USING_CONFIG_FLAGS + \ CMAKE_NO_BUILTIN_CHRPATH + \ CMAKE_NO_SYSTEM_FROM_IMPORTED + \ CMAKE_OBJCXX_CLANG_TIDY + \ CMAKE_OBJCXX_EXTENSIONS + \ CMAKE_OBJCXX_LINKER_LAUNCHER + \ CMAKE_OBJCXX_STANDARD + \ CMAKE_OBJCXX_STANDARD_REQUIRED + \ CMAKE_OBJC_CLANG_TIDY + \ CMAKE_OBJC_EXTENSIONS + \ CMAKE_OBJC_LINKER_LAUNCHER + \ CMAKE_OBJC_STANDARD + \ CMAKE_OBJC_STANDARD_REQUIRED + \ CMAKE_OBJECT_PATH_MAX + \ CMAKE_OPTIMIZE_DEPENDENCIES + \ CMAKE_OSX_ARCHITECTURES + \ CMAKE_OSX_DEPLOYMENT_TARGET + \ CMAKE_OSX_SYSROOT + \ CMAKE_PARENT_LIST_FILE + \ CMAKE_PATCH_VERSION + \ CMAKE_PCH_INSTANTIATE_TEMPLATES + \ CMAKE_PCH_WARN_INVALID + \ CMAKE_PDB_OUTPUT_DIRECTORY + \ CMAKE_PLATFORM_NO_VERSIONED_SONAME + \ CMAKE_POSITION_INDEPENDENT_CODE + \ CMAKE_PREFIX_PATH + \ CMAKE_PROGRAM_PATH + \ CMAKE_PROJECT_DESCRIPTION + \ CMAKE_PROJECT_HOMEPAGE_URL + \ CMAKE_PROJECT_INCLUDE + \ CMAKE_PROJECT_INCLUDE_BEFORE + \ CMAKE_PROJECT_NAME + \ CMAKE_PROJECT_TOP_LEVEL_INCLUDES + \ CMAKE_PROJECT_VERSION + \ CMAKE_PROJECT_VERSION_MAJOR + \ CMAKE_PROJECT_VERSION_MINOR + \ CMAKE_PROJECT_VERSION_PATCH + \ CMAKE_PROJECT_VERSION_TWEAK + \ CMAKE_RANLIB + \ CMAKE_RC + \ CMAKE_RC_ANDROID_TOOLCHAIN_MACHINE + \ CMAKE_RC_ANDROID_TOOLCHAIN_PREFIX + \ CMAKE_RC_ANDROID_TOOLCHAIN_SUFFIX + \ CMAKE_RC_ARCHIVE_APPEND + \ CMAKE_RC_ARCHIVE_CREATE + \ CMAKE_RC_ARCHIVE_FINISH + \ CMAKE_RC_BYTE_ORDER + \ CMAKE_RC_CLANG_TIDY + \ CMAKE_RC_CLANG_TIDY_EXPORT_FIXES_DIR + \ CMAKE_RC_COMPILER + \ CMAKE_RC_COMPILER_ABI + \ CMAKE_RC_COMPILER_AR + \ CMAKE_RC_COMPILER_ARCHITECTURE_ID + \ CMAKE_RC_COMPILER_EXTERNAL_TOOLCHAIN + \ CMAKE_RC_COMPILER_FRONTEND_VARIANT + \ CMAKE_RC_COMPILER_ID + \ CMAKE_RC_COMPILER_LAUNCHER + \ CMAKE_RC_COMPILER_LOADED + \ CMAKE_RC_COMPILER_PREDEFINES_COMMAND + \ CMAKE_RC_COMPILER_RANLIB + \ CMAKE_RC_COMPILER_TARGET + \ CMAKE_RC_COMPILER_VERSION + \ CMAKE_RC_COMPILER_VERSION_INTERNAL + \ CMAKE_RC_COMPILE_OBJECT + \ CMAKE_RC_CPPCHECK + \ CMAKE_RC_CPPLINT + \ CMAKE_RC_CREATE_SHARED_LIBRARY + \ CMAKE_RC_CREATE_SHARED_MODULE + \ CMAKE_RC_CREATE_STATIC_LIBRARY + \ CMAKE_RC_EXTENSIONS + \ CMAKE_RC_EXTENSIONS_DEFAULT + \ CMAKE_RC_FLAGS + \ CMAKE_RC_FLAGS_DEBUG + \ CMAKE_RC_FLAGS_DEBUG_INIT + \ CMAKE_RC_FLAGS_INIT + \ CMAKE_RC_FLAGS_MINSIZEREL + \ CMAKE_RC_FLAGS_MINSIZEREL_INIT + \ CMAKE_RC_FLAGS_RELEASE + \ CMAKE_RC_FLAGS_RELEASE_INIT + \ CMAKE_RC_FLAGS_RELWITHDEBINFO + \ CMAKE_RC_FLAGS_RELWITHDEBINFO_INIT + \ CMAKE_RC_IGNORE_EXTENSIONS + \ CMAKE_RC_IMPLICIT_INCLUDE_DIRECTORIES + \ CMAKE_RC_IMPLICIT_LINK_DIRECTORIES + \ CMAKE_RC_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + \ CMAKE_RC_IMPLICIT_LINK_LIBRARIES + \ CMAKE_RC_INCLUDE_WHAT_YOU_USE + \ CMAKE_RC_INIT + \ CMAKE_RC_LIBRARY_ARCHITECTURE + \ CMAKE_RC_LINKER_LAUNCHER + \ CMAKE_RC_LINKER_PREFERENCE + \ CMAKE_RC_LINKER_PREFERENCE_PROPAGATES + \ CMAKE_RC_LINKER_WRAPPER_FLAG + \ CMAKE_RC_LINKER_WRAPPER_FLAG_SEP + \ CMAKE_RC_LINK_EXECUTABLE + \ CMAKE_RC_LINK_LIBRARY_FILE_FLAG + \ CMAKE_RC_LINK_LIBRARY_FLAG + \ CMAKE_RC_LINK_LIBRARY_SUFFIX + \ CMAKE_RC_LINK_WHAT_YOU_USE_FLAG + \ CMAKE_RC_OUTPUT_EXTENSION + \ CMAKE_RC_PLATFORM_ID + \ CMAKE_RC_SIMULATE_ID + \ CMAKE_RC_SIMULATE_VERSION + \ CMAKE_RC_SIZEOF_DATA_PTR + \ CMAKE_RC_SOURCE_FILE_EXTENSIONS + \ CMAKE_RC_STANDARD + \ CMAKE_RC_STANDARD_DEFAULT + \ CMAKE_RC_STANDARD_INCLUDE_DIRECTORIES + \ CMAKE_RC_STANDARD_LIBRARIES + \ CMAKE_RC_STANDARD_REQUIRED + \ CMAKE_RC_SUPPORTED + \ CMAKE_RC_VISIBILITY_PRESET + \ CMAKE_ROOT + \ CMAKE_RULE_MESSAGES + \ CMAKE_RUNTIME_OUTPUT_DIRECTORY + \ CMAKE_SCRIPT_MODE_FILE + \ CMAKE_SHARED_LIBRARY_ENABLE_EXPORTS + \ CMAKE_SHARED_LIBRARY_PREFIX + \ CMAKE_SHARED_LIBRARY_SUFFIX + \ CMAKE_SHARED_LINKER_FLAGS + \ CMAKE_SHARED_LINKER_FLAGS_INIT + \ CMAKE_SHARED_MODULE_PREFIX + \ CMAKE_SHARED_MODULE_SUFFIX + \ CMAKE_SIZEOF_VOID_P + \ CMAKE_SKIP_BUILD_RPATH + \ CMAKE_SKIP_INSTALL_ALL_DEPENDENCY + \ CMAKE_SKIP_INSTALL_RPATH + \ CMAKE_SKIP_INSTALL_RULES + \ CMAKE_SKIP_RPATH + \ CMAKE_SKIP_TEST_ALL_DEPENDENCY + \ CMAKE_SOURCE_DIR + \ CMAKE_STAGING_PREFIX + \ CMAKE_STATIC_LIBRARY_PREFIX + \ CMAKE_STATIC_LIBRARY_SUFFIX + \ CMAKE_STATIC_LINKER_FLAGS + \ CMAKE_STATIC_LINKER_FLAGS_INIT + \ CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS + \ CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE + \ CMAKE_SUPPRESS_REGENERATION + \ CMAKE_SYSROOT + \ CMAKE_SYSROOT_COMPILE + \ CMAKE_SYSROOT_LINK + \ CMAKE_SYSTEM + \ CMAKE_SYSTEM_APPBUNDLE_PATH + \ CMAKE_SYSTEM_FRAMEWORK_PATH + \ CMAKE_SYSTEM_IGNORE_PATH + \ CMAKE_SYSTEM_IGNORE_PREFIX_PATH + \ CMAKE_SYSTEM_INCLUDE_PATH + \ CMAKE_SYSTEM_LIBRARY_PATH + \ CMAKE_SYSTEM_NAME + \ CMAKE_SYSTEM_PREFIX_PATH + \ CMAKE_SYSTEM_PROCESSOR + \ CMAKE_SYSTEM_PROGRAM_PATH + \ CMAKE_SYSTEM_VERSION + \ CMAKE_Swift + \ CMAKE_Swift_ANDROID_TOOLCHAIN_MACHINE + \ CMAKE_Swift_ANDROID_TOOLCHAIN_PREFIX + \ CMAKE_Swift_ANDROID_TOOLCHAIN_SUFFIX + \ CMAKE_Swift_ARCHIVE_APPEND + \ CMAKE_Swift_ARCHIVE_CREATE + \ CMAKE_Swift_ARCHIVE_FINISH + \ CMAKE_Swift_BYTE_ORDER + \ CMAKE_Swift_CLANG_TIDY + \ CMAKE_Swift_CLANG_TIDY_EXPORT_FIXES_DIR + \ CMAKE_Swift_COMPILER + \ CMAKE_Swift_COMPILER_ABI + \ CMAKE_Swift_COMPILER_AR + \ CMAKE_Swift_COMPILER_ARCHITECTURE_ID + \ CMAKE_Swift_COMPILER_EXTERNAL_TOOLCHAIN + \ CMAKE_Swift_COMPILER_FRONTEND_VARIANT + \ CMAKE_Swift_COMPILER_ID + \ CMAKE_Swift_COMPILER_LAUNCHER + \ CMAKE_Swift_COMPILER_LOADED + \ CMAKE_Swift_COMPILER_PREDEFINES_COMMAND + \ CMAKE_Swift_COMPILER_RANLIB + \ CMAKE_Swift_COMPILER_TARGET + \ CMAKE_Swift_COMPILER_VERSION + \ CMAKE_Swift_COMPILER_VERSION_INTERNAL + \ CMAKE_Swift_COMPILE_OBJECT + \ CMAKE_Swift_CPPCHECK + \ CMAKE_Swift_CPPLINT + \ CMAKE_Swift_CREATE_SHARED_LIBRARY + \ CMAKE_Swift_CREATE_SHARED_MODULE + \ CMAKE_Swift_CREATE_STATIC_LIBRARY + \ CMAKE_Swift_EXTENSIONS + \ CMAKE_Swift_EXTENSIONS_DEFAULT + \ CMAKE_Swift_FLAGS + \ CMAKE_Swift_FLAGS_DEBUG + \ CMAKE_Swift_FLAGS_DEBUG_INIT + \ CMAKE_Swift_FLAGS_INIT + \ CMAKE_Swift_FLAGS_MINSIZEREL + \ CMAKE_Swift_FLAGS_MINSIZEREL_INIT + \ CMAKE_Swift_FLAGS_RELEASE + \ CMAKE_Swift_FLAGS_RELEASE_INIT + \ CMAKE_Swift_FLAGS_RELWITHDEBINFO + \ CMAKE_Swift_FLAGS_RELWITHDEBINFO_INIT + \ CMAKE_Swift_IGNORE_EXTENSIONS + \ CMAKE_Swift_IMPLICIT_INCLUDE_DIRECTORIES + \ CMAKE_Swift_IMPLICIT_LINK_DIRECTORIES + \ CMAKE_Swift_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + \ CMAKE_Swift_IMPLICIT_LINK_LIBRARIES + \ CMAKE_Swift_INCLUDE_WHAT_YOU_USE + \ CMAKE_Swift_INIT + \ CMAKE_Swift_LANGUAGE_VERSION + \ CMAKE_Swift_LIBRARY_ARCHITECTURE + \ CMAKE_Swift_LINKER_LAUNCHER + \ CMAKE_Swift_LINKER_PREFERENCE + \ CMAKE_Swift_LINKER_PREFERENCE_PROPAGATES + \ CMAKE_Swift_LINKER_WRAPPER_FLAG + \ CMAKE_Swift_LINKER_WRAPPER_FLAG_SEP + \ CMAKE_Swift_LINK_EXECUTABLE + \ CMAKE_Swift_LINK_LIBRARY_FILE_FLAG + \ CMAKE_Swift_LINK_LIBRARY_FLAG + \ CMAKE_Swift_LINK_LIBRARY_SUFFIX + \ CMAKE_Swift_LINK_WHAT_YOU_USE_FLAG + \ CMAKE_Swift_MODULE_DIRECTORY + \ CMAKE_Swift_NUM_THREADS + \ CMAKE_Swift_OUTPUT_EXTENSION + \ CMAKE_Swift_PLATFORM_ID + \ CMAKE_Swift_SIMULATE_ID + \ CMAKE_Swift_SIMULATE_VERSION + \ CMAKE_Swift_SIZEOF_DATA_PTR + \ CMAKE_Swift_SOURCE_FILE_EXTENSIONS + \ CMAKE_Swift_STANDARD + \ CMAKE_Swift_STANDARD_DEFAULT + \ CMAKE_Swift_STANDARD_INCLUDE_DIRECTORIES + \ CMAKE_Swift_STANDARD_LIBRARIES + \ CMAKE_Swift_STANDARD_REQUIRED + \ CMAKE_Swift_SUPPORTED + \ CMAKE_Swift_VISIBILITY_PRESET + \ CMAKE_TASKING_TOOLSET + \ CMAKE_TLS_CAINFO + \ CMAKE_TLS_VERIFY + \ CMAKE_TOOLCHAIN_FILE + \ CMAKE_TRY_COMPILE_CONFIGURATION + \ CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES + \ CMAKE_TRY_COMPILE_PLATFORM_VARIABLES + \ CMAKE_TRY_COMPILE_TARGET_TYPE + \ CMAKE_TWEAK_VERSION + \ CMAKE_UNITY_BUILD + \ CMAKE_UNITY_BUILD_BATCH_SIZE + \ CMAKE_UNITY_BUILD_UNIQUE_ID + \ CMAKE_USER_MAKE_RULES_OVERRIDE + \ CMAKE_USER_MAKE_RULES_OVERRIDE_ASM + \ CMAKE_USER_MAKE_RULES_OVERRIDE_ASM_MASM + \ CMAKE_USER_MAKE_RULES_OVERRIDE_ASM_NASM + \ CMAKE_USER_MAKE_RULES_OVERRIDE_C + \ CMAKE_USER_MAKE_RULES_OVERRIDE_CSharp + \ CMAKE_USER_MAKE_RULES_OVERRIDE_CUDA + \ CMAKE_USER_MAKE_RULES_OVERRIDE_CXX + \ CMAKE_USER_MAKE_RULES_OVERRIDE_Fortran + \ CMAKE_USER_MAKE_RULES_OVERRIDE_HIP + \ CMAKE_USER_MAKE_RULES_OVERRIDE_Java + \ CMAKE_USER_MAKE_RULES_OVERRIDE_RC + \ CMAKE_USER_MAKE_RULES_OVERRIDE_Swift + \ CMAKE_USE_RELATIVE_PATHS + \ CMAKE_VERBOSE_MAKEFILE + \ CMAKE_VERIFY_INTERFACE_HEADER_SETS + \ CMAKE_VERSION + \ CMAKE_VISIBILITY_INLINES_HIDDEN + \ CMAKE_VS_DEBUGGER_COMMAND + \ CMAKE_VS_DEBUGGER_COMMAND_ARGUMENTS + \ CMAKE_VS_DEBUGGER_ENVIRONMENT + \ CMAKE_VS_DEBUGGER_WORKING_DIRECTORY + \ CMAKE_VS_DEVENV_COMMAND + \ CMAKE_VS_GLOBALS + \ CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD + \ CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD + \ CMAKE_VS_INTEL_Fortran_PROJECT_VERSION + \ CMAKE_VS_JUST_MY_CODE_DEBUGGING + \ CMAKE_VS_MSBUILD_COMMAND + \ CMAKE_VS_NO_COMPILE_BATCHING + \ CMAKE_VS_NUGET_PACKAGE_RESTORE + \ CMAKE_VS_NsightTegra_VERSION + \ CMAKE_VS_PLATFORM_NAME + \ CMAKE_VS_PLATFORM_NAME_DEFAULT + \ CMAKE_VS_PLATFORM_TOOLSET + \ CMAKE_VS_PLATFORM_TOOLSET_CUDA + \ CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR + \ CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE + \ CMAKE_VS_PLATFORM_TOOLSET_VERSION + \ CMAKE_VS_SDK_EXCLUDE_DIRECTORIES + \ CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES + \ CMAKE_VS_SDK_INCLUDE_DIRECTORIES + \ CMAKE_VS_SDK_LIBRARY_DIRECTORIES + \ CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES + \ CMAKE_VS_SDK_REFERENCE_DIRECTORIES + \ CMAKE_VS_SDK_SOURCE_DIRECTORIES + \ CMAKE_VS_TARGET_FRAMEWORK_IDENTIFIER + \ CMAKE_VS_TARGET_FRAMEWORK_TARGETS_VERSION + \ CMAKE_VS_TARGET_FRAMEWORK_VERSION + \ CMAKE_VS_VERSION_BUILD_NUMBER + \ CMAKE_VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION + \ CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION + \ CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM + \ CMAKE_VS_WINRT_BY_DEFAULT + \ CMAKE_WARN_DEPRECATED + \ CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION + \ CMAKE_WATCOM_RUNTIME_LIBRARY + \ CMAKE_WIN32_EXECUTABLE + \ CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS + \ CMAKE_XCODE_BUILD_SYSTEM + \ CMAKE_XCODE_GENERATE_SCHEME + \ CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY + \ CMAKE_XCODE_LINK_BUILD_PHASE_MODE + \ CMAKE_XCODE_PLATFORM_TOOLSET + \ CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER + \ CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN + \ CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING + \ CMAKE_XCODE_SCHEME_ENABLE_GPU_FRAME_CAPTURE_MODE + \ CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER + \ CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS + \ CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE + \ CMAKE_XCODE_SCHEME_ENABLE_GPU_API_VALIDATION + \ CMAKE_XCODE_SCHEME_ENABLE_GPU_FRAME_CAPTURE_MODE + \ CMAKE_XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION + \ CMAKE_XCODE_SCHEME_ENVIRONMENT + \ CMAKE_XCODE_SCHEME_GUARD_MALLOC + \ CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATION + \ CMAKE_XCODE_SCHEME_LAUNCH_MODE + \ CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP + \ CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES + \ CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE + \ CMAKE_XCODE_SCHEME_MALLOC_STACK + \ CMAKE_XCODE_SCHEME_THREAD_SANITIZER + \ CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP + \ CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER + \ CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP + \ CMAKE_XCODE_SCHEME_ENABLE_GPU_API_VALIDATION + \ CMAKE_XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION + \ CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATION + \ CMAKE_XCODE_SCHEME_WORKING_DIRECTORY + \ CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS + \ CMAKE_XCODE_XCCONFIG + \ CPACK_ABSOLUTE_DESTINATION_FILES + \ CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY + \ CPACK_CUSTOM_INSTALL_VARIABLES + \ CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION + \ CPACK_INCLUDE_TOPLEVEL_DIRECTORY + \ CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS + \ CPACK_PACKAGING_INSTALL_PREFIX + \ CPACK_SET_DESTDIR + \ CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION + \ CTEST_BINARY_DIRECTORY + \ CTEST_BUILD_COMMAND + \ CTEST_BUILD_NAME + \ CTEST_BZR_COMMAND + \ CTEST_BZR_UPDATE_OPTIONS + \ CTEST_CHANGE_ID + \ CTEST_CHECKOUT_COMMAND + \ CTEST_CONFIGURATION_TYPE + \ CTEST_CONFIGURE_COMMAND + \ CTEST_COVERAGE_COMMAND + \ CTEST_COVERAGE_EXTRA_FLAGS + \ CTEST_CURL_OPTIONS + \ CTEST_CUSTOM_COVERAGE_EXCLUDE + \ CTEST_CUSTOM_ERROR_EXCEPTION + \ CTEST_CUSTOM_ERROR_MATCH + \ CTEST_CUSTOM_ERROR_POST_CONTEXT + \ CTEST_CUSTOM_ERROR_PRE_CONTEXT + \ CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE + \ CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS + \ CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS + \ CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE + \ CTEST_CUSTOM_TEST_OUTPUT_TRUNCATION + \ CTEST_CUSTOM_MEMCHECK_IGNORE + \ CTEST_CUSTOM_POST_MEMCHECK + \ CTEST_CUSTOM_POST_TEST + \ CTEST_CUSTOM_PRE_MEMCHECK + \ CTEST_CUSTOM_PRE_TEST + \ CTEST_CUSTOM_TESTS_IGNORE + \ CTEST_CUSTOM_TEST_OUTPUT_TRUNCATION + \ CTEST_CUSTOM_WARNING_EXCEPTION + \ CTEST_CUSTOM_WARNING_MATCH + \ CTEST_CVS_CHECKOUT + \ CTEST_CVS_COMMAND + \ CTEST_CVS_UPDATE_OPTIONS + \ CTEST_DROP_LOCATION + \ CTEST_DROP_METHOD + \ CTEST_DROP_SITE + \ CTEST_DROP_SITE_CDASH + \ CTEST_DROP_SITE_PASSWORD + \ CTEST_DROP_SITE_USER + \ CTEST_EXTRA_COVERAGE_GLOB + \ CTEST_GIT_COMMAND + \ CTEST_GIT_INIT_SUBMODULES + \ CTEST_GIT_UPDATE_CUSTOM + \ CTEST_GIT_UPDATE_OPTIONS + \ CTEST_HG_COMMAND + \ CTEST_HG_UPDATE_OPTIONS + \ CTEST_LABELS_FOR_SUBPROJECTS + \ CTEST_MEMORYCHECK_COMMAND + \ CTEST_MEMORYCHECK_COMMAND_OPTIONS + \ CTEST_MEMORYCHECK_SANITIZER_OPTIONS + \ CTEST_MEMORYCHECK_SUPPRESSIONS_FILE + \ CTEST_MEMORYCHECK_TYPE + \ CTEST_NIGHTLY_START_TIME + \ CTEST_P4_CLIENT + \ CTEST_P4_COMMAND + \ CTEST_P4_OPTIONS + \ CTEST_P4_UPDATE_OPTIONS + \ CTEST_RESOURCE_SPEC_FILE + \ CTEST_RUN_CURRENT_SCRIPT + \ CTEST_SCP_COMMAND + \ CTEST_SCRIPT_DIRECTORY + \ CTEST_SITE + \ CTEST_SOURCE_DIRECTORY + \ CTEST_SUBMIT_INACTIVITY_TIMEOUT + \ CTEST_SUBMIT_URL + \ CTEST_SVN_COMMAND + \ CTEST_SVN_OPTIONS + \ CTEST_SVN_UPDATE_OPTIONS + \ CTEST_TEST_LOAD + \ CTEST_TEST_TIMEOUT + \ CTEST_TRIGGER_SITE + \ CTEST_UPDATE_COMMAND + \ CTEST_UPDATE_OPTIONS + \ CTEST_UPDATE_VERSION_ONLY + \ CTEST_UPDATE_VERSION_OVERRIDE + \ CTEST_USE_LAUNCHERS + \ CYGWIN + \ DOXYGEN_ABBREVIATE_BRIEF + \ DOXYGEN_ALIASES + \ DOXYGEN_ALLEXTERNALS + \ DOXYGEN_ALLOW_UNICODE_NAMES + \ DOXYGEN_ALPHABETICAL_INDEX + \ DOXYGEN_ALWAYS_DETAILED_SEC + \ DOXYGEN_AUTOLINK_SUPPORT + \ DOXYGEN_BINARY_TOC + \ DOXYGEN_BRIEF_MEMBER_DESC + \ DOXYGEN_BUILTIN_STL_SUPPORT + \ DOXYGEN_CALLER_GRAPH + \ DOXYGEN_CALL_GRAPH + \ DOXYGEN_CASE_SENSE_NAMES + \ DOXYGEN_CHM_FILE + \ DOXYGEN_CHM_INDEX_ENCODING + \ DOXYGEN_CITE_BIB_FILES + \ DOXYGEN_CLANG_ASSISTED_PARSING + \ DOXYGEN_CLANG_DATABASE_PATH + \ DOXYGEN_CLANG_OPTIONS + \ DOXYGEN_CLASS_DIAGRAMS + \ DOXYGEN_CLASS_GRAPH + \ DOXYGEN_COLLABORATION_GRAPH + \ DOXYGEN_COLS_IN_ALPHA_INDEX + \ DOXYGEN_COMPACT_LATEX + \ DOXYGEN_COMPACT_RTF + \ DOXYGEN_CPP_CLI_SUPPORT + \ DOXYGEN_CREATE_SUBDIRS + \ DOXYGEN_DIAFILE_DIRS + \ DOXYGEN_DIA_PATH + \ DOXYGEN_DIRECTORY_GRAPH + \ DOXYGEN_DISABLE_INDEX + \ DOXYGEN_DISTRIBUTE_GROUP_DOC + \ DOXYGEN_DOCBOOK_OUTPUT + \ DOXYGEN_DOCBOOK_PROGRAMLISTING + \ DOXYGEN_DOCSET_BUNDLE_ID + \ DOXYGEN_DOCSET_FEEDNAME + \ DOXYGEN_DOCSET_PUBLISHER_ID + \ DOXYGEN_DOCSET_PUBLISHER_NAME + \ DOXYGEN_DOTFILE_DIRS + \ DOXYGEN_DOT_CLEANUP + \ DOXYGEN_DOT_FONTNAME + \ DOXYGEN_DOT_FONTPATH + \ DOXYGEN_DOT_FONTSIZE + \ DOXYGEN_DOT_GRAPH_MAX_NODES + \ DOXYGEN_DOT_IMAGE_FORMAT + \ DOXYGEN_DOT_MULTI_TARGETS + \ DOXYGEN_DOT_NUM_THREADS + \ DOXYGEN_DOT_PATH + \ DOXYGEN_DOT_TRANSPARENT + \ DOXYGEN_DOXYFILE_ENCODING + \ DOXYGEN_ECLIPSE_DOC_ID + \ DOXYGEN_ENABLED_SECTIONS + \ DOXYGEN_ENABLE_PREPROCESSING + \ DOXYGEN_ENUM_VALUES_PER_LINE + \ DOXYGEN_EXAMPLE_PATH + \ DOXYGEN_EXAMPLE_PATTERNS + \ DOXYGEN_EXAMPLE_RECURSIVE + \ DOXYGEN_EXCLUDE + \ DOXYGEN_EXCLUDE_PATTERNS + \ DOXYGEN_EXCLUDE_SYMBOLS + \ DOXYGEN_EXCLUDE_SYMLINKS + \ DOXYGEN_EXPAND_AS_DEFINED + \ DOXYGEN_EXPAND_ONLY_PREDEF + \ DOXYGEN_EXTENSION_MAPPING + \ DOXYGEN_EXTERNAL_GROUPS + \ DOXYGEN_EXTERNAL_PAGES + \ DOXYGEN_EXTERNAL_SEARCH + \ DOXYGEN_EXTERNAL_SEARCH_ID + \ DOXYGEN_EXTRACT_ALL + \ DOXYGEN_EXTRACT_ANON_NSPACES + \ DOXYGEN_EXTRACT_LOCAL_CLASSES + \ DOXYGEN_EXTRACT_LOCAL_METHODS + \ DOXYGEN_EXTRACT_PACKAGE + \ DOXYGEN_EXTRACT_PRIVATE + \ DOXYGEN_EXTRACT_PRIV_VIRTUAL + \ DOXYGEN_EXTRACT_STATIC + \ DOXYGEN_EXTRA_PACKAGES + \ DOXYGEN_EXTRA_SEARCH_MAPPINGS + \ DOXYGEN_EXT_LINKS_IN_WINDOW + \ DOXYGEN_FILE_PATTERNS + \ DOXYGEN_FILE_VERSION_FILTER + \ DOXYGEN_FILTER_PATTERNS + \ DOXYGEN_FILTER_SOURCE_FILES + \ DOXYGEN_FILTER_SOURCE_PATTERNS + \ DOXYGEN_FORCE_LOCAL_INCLUDES + \ DOXYGEN_FORMULA_FONTSIZE + \ DOXYGEN_FORMULA_TRANSPARENT + \ DOXYGEN_FULL_PATH_NAMES + \ DOXYGEN_GENERATE_AUTOGEN_DEF + \ DOXYGEN_GENERATE_BUGLIST + \ DOXYGEN_GENERATE_CHI + \ DOXYGEN_GENERATE_DEPRECATEDLIST + \ DOXYGEN_GENERATE_DOCBOOK + \ DOXYGEN_GENERATE_DOCSET + \ DOXYGEN_GENERATE_ECLIPSEHELP + \ DOXYGEN_GENERATE_HTML + \ DOXYGEN_GENERATE_HTMLHELP + \ DOXYGEN_GENERATE_LATEX + \ DOXYGEN_GENERATE_LEGEND + \ DOXYGEN_GENERATE_MAN + \ DOXYGEN_GENERATE_PERLMOD + \ DOXYGEN_GENERATE_QHP + \ DOXYGEN_GENERATE_RTF + \ DOXYGEN_GENERATE_TAGFILE + \ DOXYGEN_GENERATE_TESTLIST + \ DOXYGEN_GENERATE_TODOLIST + \ DOXYGEN_GENERATE_TREEVIEW + \ DOXYGEN_GENERATE_XML + \ DOXYGEN_GRAPHICAL_HIERARCHY + \ DOXYGEN_GROUP_GRAPHS + \ DOXYGEN_GROUP_NESTED_COMPOUNDS + \ DOXYGEN_HAVE_DOT + \ DOXYGEN_HHC_LOCATION + \ DOXYGEN_HIDE_COMPOUND_REFERENCE + \ DOXYGEN_HIDE_FRIEND_COMPOUNDS + \ DOXYGEN_HIDE_IN_BODY_DOCS + \ DOXYGEN_HIDE_SCOPE_NAMES + \ DOXYGEN_HIDE_UNDOC_CLASSES + \ DOXYGEN_HIDE_UNDOC_MEMBERS + \ DOXYGEN_HIDE_UNDOC_RELATIONS + \ DOXYGEN_HTML_COLORSTYLE_GAMMA + \ DOXYGEN_HTML_COLORSTYLE_HUE + \ DOXYGEN_HTML_COLORSTYLE_SAT + \ DOXYGEN_HTML_DYNAMIC_MENUS + \ DOXYGEN_HTML_DYNAMIC_SECTIONS + \ DOXYGEN_HTML_EXTRA_FILES + \ DOXYGEN_HTML_EXTRA_STYLESHEET + \ DOXYGEN_HTML_FILE_EXTENSION + \ DOXYGEN_HTML_FOOTER + \ DOXYGEN_HTML_HEADER + \ DOXYGEN_HTML_INDEX_NUM_ENTRIES + \ DOXYGEN_HTML_OUTPUT + \ DOXYGEN_HTML_STYLESHEET + \ DOXYGEN_HTML_TIMESTAMP + \ DOXYGEN_IDL_PROPERTY_SUPPORT + \ DOXYGEN_IGNORE_PREFIX + \ DOXYGEN_IMAGE_PATH + \ DOXYGEN_INCLUDED_BY_GRAPH + \ DOXYGEN_INCLUDE_FILE_PATTERNS + \ DOXYGEN_INCLUDE_GRAPH + \ DOXYGEN_INCLUDE_PATH + \ DOXYGEN_INHERIT_DOCS + \ DOXYGEN_INLINE_GROUPED_CLASSES + \ DOXYGEN_INLINE_INFO + \ DOXYGEN_INLINE_INHERITED_MEMB + \ DOXYGEN_INLINE_SIMPLE_STRUCTS + \ DOXYGEN_INLINE_SOURCES + \ DOXYGEN_INPUT + \ DOXYGEN_INPUT_ENCODING + \ DOXYGEN_INPUT_FILTER + \ DOXYGEN_INTERACTIVE_SVG + \ DOXYGEN_INTERNAL_DOCS + \ DOXYGEN_JAVADOC_AUTOBRIEF + \ DOXYGEN_JAVADOC_BANNER + \ DOXYGEN_LATEX_BATCHMODE + \ DOXYGEN_LATEX_BIB_STYLE + \ DOXYGEN_LATEX_CMD_NAME + \ DOXYGEN_LATEX_EMOJI_DIRECTORY + \ DOXYGEN_LATEX_EXTRA_FILES + \ DOXYGEN_LATEX_EXTRA_STYLESHEET + \ DOXYGEN_LATEX_FOOTER + \ DOXYGEN_LATEX_HEADER + \ DOXYGEN_LATEX_HIDE_INDICES + \ DOXYGEN_LATEX_MAKEINDEX_CMD + \ DOXYGEN_LATEX_OUTPUT + \ DOXYGEN_LATEX_SOURCE_CODE + \ DOXYGEN_LATEX_TIMESTAMP + \ DOXYGEN_LAYOUT_FILE + \ DOXYGEN_LOOKUP_CACHE_SIZE + \ DOXYGEN_MACRO_EXPANSION + \ DOXYGEN_MAKEINDEX_CMD_NAME + \ DOXYGEN_MAN_EXTENSION + \ DOXYGEN_MAN_LINKS + \ DOXYGEN_MAN_OUTPUT + \ DOXYGEN_MAN_SUBDIR + \ DOXYGEN_MARKDOWN_SUPPORT + \ DOXYGEN_MATHJAX_CODEFILE + \ DOXYGEN_MATHJAX_EXTENSIONS + \ DOXYGEN_MATHJAX_FORMAT + \ DOXYGEN_MATHJAX_RELPATH + \ DOXYGEN_MAX_DOT_GRAPH_DEPTH + \ DOXYGEN_MAX_INITIALIZER_LINES + \ DOXYGEN_MSCFILE_DIRS + \ DOXYGEN_MULTILINE_CPP_IS_BRIEF + \ DOXYGEN_OPTIMIZE_FOR_FORTRAN + \ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C + \ DOXYGEN_OPTIMIZE_OUTPUT_JAVA + \ DOXYGEN_OPTIMIZE_OUTPUT_SLICE + \ DOXYGEN_OPTIMIZE_OUTPUT_VHDL + \ DOXYGEN_OUTPUT_DIRECTORY + \ DOXYGEN_OUTPUT_LANGUAGE + \ DOXYGEN_OUTPUT_TEXT_DIRECTION + \ DOXYGEN_PAPER_TYPE + \ DOXYGEN_PDF_HYPERLINKS + \ DOXYGEN_PERLMOD_LATEX + \ DOXYGEN_PERLMOD_MAKEVAR_PREFIX + \ DOXYGEN_PERLMOD_PRETTY + \ DOXYGEN_PLANTUML_CFG_FILE + \ DOXYGEN_PLANTUML_INCLUDE_PATH + \ DOXYGEN_PLANTUML_JAR_PATH + \ DOXYGEN_PREDEFINED + \ DOXYGEN_PROJECT_BRIEF + \ DOXYGEN_PROJECT_LOGO + \ DOXYGEN_PROJECT_NAME + \ DOXYGEN_PROJECT_NUMBER + \ DOXYGEN_QCH_FILE + \ DOXYGEN_QHG_LOCATION + \ DOXYGEN_QHP_CUST_FILTER_ATTRS + \ DOXYGEN_QHP_CUST_FILTER_NAME + \ DOXYGEN_QHP_NAMESPACE + \ DOXYGEN_QHP_SECT_FILTER_ATTRS + \ DOXYGEN_QHP_VIRTUAL_FOLDER + \ DOXYGEN_QT_AUTOBRIEF + \ DOXYGEN_QUIET + \ DOXYGEN_RECURSIVE + \ DOXYGEN_REFERENCED_BY_RELATION + \ DOXYGEN_REFERENCES_LINK_SOURCE + \ DOXYGEN_REFERENCES_RELATION + \ DOXYGEN_REPEAT_BRIEF + \ DOXYGEN_RTF_EXTENSIONS_FILE + \ DOXYGEN_RTF_HYPERLINKS + \ DOXYGEN_RTF_OUTPUT + \ DOXYGEN_RTF_SOURCE_CODE + \ DOXYGEN_RTF_STYLESHEET_FILE + \ DOXYGEN_SEARCHDATA_FILE + \ DOXYGEN_SEARCHENGINE + \ DOXYGEN_SEARCHENGINE_URL + \ DOXYGEN_SEARCH_INCLUDES + \ DOXYGEN_SEPARATE_MEMBER_PAGES + \ DOXYGEN_SERVER_BASED_SEARCH + \ DOXYGEN_SHORT_NAMES + \ DOXYGEN_SHOW_FILES + \ DOXYGEN_SHOW_GROUPED_MEMB_INC + \ DOXYGEN_SHOW_INCLUDE_FILES + \ DOXYGEN_SHOW_NAMESPACES + \ DOXYGEN_SHOW_USED_FILES + \ DOXYGEN_SIP_SUPPORT + \ DOXYGEN_SKIP_FUNCTION_MACROS + \ DOXYGEN_SORT_BRIEF_DOCS + \ DOXYGEN_SORT_BY_SCOPE_NAME + \ DOXYGEN_SORT_GROUP_NAMES + \ DOXYGEN_SORT_MEMBERS_CTORS_1ST + \ DOXYGEN_SORT_MEMBER_DOCS + \ DOXYGEN_SOURCE_BROWSER + \ DOXYGEN_SOURCE_TOOLTIPS + \ DOXYGEN_STRICT_PROTO_MATCHING + \ DOXYGEN_STRIP_CODE_COMMENTS + \ DOXYGEN_STRIP_FROM_INC_PATH + \ DOXYGEN_STRIP_FROM_PATH + \ DOXYGEN_SUBGROUPING + \ DOXYGEN_TAB_SIZE + \ DOXYGEN_TAGFILES + \ DOXYGEN_TCL_SUBST + \ DOXYGEN_TEMPLATE_RELATIONS + \ DOXYGEN_TOC_EXPAND + \ DOXYGEN_TOC_INCLUDE_HEADINGS + \ DOXYGEN_TREEVIEW_WIDTH + \ DOXYGEN_TYPEDEF_HIDES_STRUCT + \ DOXYGEN_UML_LIMIT_NUM_FIELDS + \ DOXYGEN_UML_LOOK + \ DOXYGEN_USE_HTAGS + \ DOXYGEN_USE_MATHJAX + \ DOXYGEN_USE_MDFILE_AS_MAINPAGE + \ DOXYGEN_USE_PDFLATEX + \ DOXYGEN_VERBATIM_HEADERS + \ DOXYGEN_VERBATIM_VARS + \ DOXYGEN_VERSION + \ DOXYGEN_WARNINGS + \ DOXYGEN_WARN_AS_ERROR + \ DOXYGEN_WARN_FORMAT + \ DOXYGEN_WARN_IF_DOC_ERROR + \ DOXYGEN_WARN_IF_UNDOCUMENTED + \ DOXYGEN_WARN_LOGFILE + \ DOXYGEN_WARN_NO_PARAMDOC + \ DOXYGEN_XML_NS_MEMB_FILE_SCOPE + \ DOXYGEN_XML_OUTPUT + \ DOXYGEN_XML_PROGRAMLISTING + \ ENV + \ EXECUTABLE_OUTPUT_PATH + \ GHSMULTI + \ IOS + \ LIBRARY_OUTPUT_PATH + \ LINUX + \ MINGW + \ MSVC + \ MSVC10 + \ MSVC11 + \ MSVC12 + \ MSVC14 + \ MSVC60 + \ MSVC70 + \ MSVC71 + \ MSVC80 + \ MSVC90 + \ MSVC_IDE + \ MSVC_TOOLSET_VERSION + \ MSVC_VERSION + \ MSYS + \ PROJECT_BINARY_DIR + \ PROJECT_DESCRIPTION + \ PROJECT_HOMEPAGE_URL + \ PROJECT_IS_TOP_LEVEL + \ PROJECT_NAME + \ PROJECT_SOURCE_DIR + \ PROJECT_VERSION + \ PROJECT_VERSION_MAJOR + \ PROJECT_VERSION_MINOR + \ PROJECT_VERSION_PATCH + \ PROJECT_VERSION_TWEAK + \ UNIX + \ WIN32 + \ WINCE + \ WINDOWS_PHONE + \ WINDOWS_STORE + \ XCODE + \ XCODE_VERSION + +syn keyword cmakeModule contained + \ ExternalProject + \ FetchContent + +syn keyword cmakeKWExternalProject contained + \ AWS + \ BINARY_DIR + \ BUILD_ALWAYS + \ BUILD_BYPRODUCTS + \ BUILD_COMMAND + \ BUILD_IN_SOURCE + \ CHECKOUT + \ CMAKE_ARGS + \ CMAKE_CACHE_ARGS + \ CMAKE_CACHE_DEFAULT_ARGS + \ CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY + \ CMAKE_INSTALL_MODE + \ COMMENT + \ CONFIGURE_COMMAND + \ CONFIGURE_HANDLED_BY_BUILD + \ CVS + \ CVSROOT + \ CVS_MODULE + \ CVS_REPOSITORY + \ CVS_TAG + \ DEPENDEES + \ DEPENDERS + \ DEPENDS + \ DOWNLOADED_FILE + \ DOWNLOAD_COMMAND + \ DOWNLOAD_DIR + \ DOWNLOAD_EXTRACT_TIMESTAMP + \ DOWNLOAD_NAME + \ DOWNLOAD_NO_EXTRACT + \ DOWNLOAD_NO_PROGRESS + \ EP_BASE + \ EP_INDEPENDENT_STEP_TARGETS + \ EP_PREFIX + \ EP_STEP_TARGETS + \ EP_UPDATE_DISCONNECTED + \ EXCLUDE_FROM_ALL + \ FALSE + \ FORCE + \ GHS + \ GIT_CONFIG + \ GIT_PROGRESS + \ GIT_REMOTE_NAME + \ GIT_REMOTE_UPDATE_STRATEGY + \ GIT_REPOSITORY + \ GIT_SHALLOW + \ GIT_SUBMODULES + \ GIT_SUBMODULES_RECURSE + \ GIT_TAG + \ HG_REPOSITORY + \ HG_TAG + \ HTTP_HEADER + \ HTTP_PASSWORD + \ HTTP_USERNAME + \ IGNORED + \ INACTIVITY_TIMEOUT + \ INDEPENDENT_STEP_TARGETS + \ INSTALL_BYPRODUCTS + \ INSTALL_COMMAND + \ INSTALL_DIR + \ JOB_POOLS + \ LIST_SEPARATOR + \ LOG_BUILD + \ LOG_CONFIGURE + \ LOG_DIR + \ LOG_DOWNLOAD + \ LOG_INSTALL + \ LOG_MERGED_STDOUTERR + \ LOG_OUTPUT_ON_FAILURE + \ LOG_PATCH + \ LOG_TEST + \ LOG_UPDATE + \ MAKE_EXE + \ MULTI + \ NAMES + \ NETRC + \ NETRC_FILE + \ NOTE + \ NO_DEPENDS + \ OPTIONAL + \ PATCH_COMMAND + \ PREFIX + \ PROPERTY + \ REBASE + \ REBASE_CHECKOUT + \ REQUIRED + \ SOURCE_DIR + \ SOURCE_SUBDIR + \ STAMP_DIR + \ STEP_TARGETS + \ STRING + \ SVN_PASSWORD + \ SVN_REPOSITORY + \ SVN_REVISION + \ SVN_TRUST_CERT + \ SVN_USERNAME + \ TEST_AFTER_INSTALL + \ TEST_BEFORE_INSTALL + \ TEST_COMMAND + \ TEST_EXCLUDE_FROM_MAIN + \ TIMEOUT + \ TLS_CAINFO + \ TLS_VERIFY + \ TMP_DIR + \ TRUE + \ UPDATE_COMMAND + \ UPDATE_DISCONNECTED + \ URL + \ URL_HASH + \ URL_MD5 + \ USES_TERMINAL_BUILD + \ USES_TERMINAL_CONFIGURE + \ USES_TERMINAL_DOWNLOAD + \ USES_TERMINAL_INSTALL + \ USES_TERMINAL_PATCH + \ USES_TERMINAL_TEST + \ USES_TERMINAL_UPDATE + \ WORKING_DIRECTORY + +syn keyword cmakeKWFetchContent contained + \ ALWAYS + \ BINARY_DIR + \ BUILD_COMMAND + \ BYPASS_PROVIDER + \ CMAKE_PROJECT_ + \ CONFIGURE_COMMAND + \ COPY + \ CORRECT + \ DCMAKE_TOOLCHAIN_FILE + \ DESTINATION + \ DOWNLOAD_NO_EXTRACT + \ EXISTS + \ FETCHCONTENT_BASE_DIR + \ FETCHCONTENT_FULLY_DISCONNECTED + \ FETCHCONTENT_MAKEAVAILABLE_SERIAL + \ FETCHCONTENT_QUIET + \ FETCHCONTENT_SOURCE_DIR_ + \ FETCHCONTENT_TRY_FIND_PACKAGE_MODE + \ FETCHCONTENT_UPDATES_DISCONNECTED + \ FETCHCONTENT_UPDATES_DISCONNECTED_ + \ FIND_PACKAGE_ARGS + \ GIT_REPOSITORY + \ GIT_TAG + \ GLOBAL + \ GTEST_BOTH_LIBRARIES + \ GTEST_LIBRARIES + \ GTEST_MAIN_LIBRARIES + \ INSTALL_COMMAND + \ INTERNAL + \ NAME + \ NAMES + \ NEVER + \ NOTE + \ OFF + \ OPTIONAL + \ OPT_IN + \ OVERRIDE_FIND_PACKAGE + \ PACKAGE_VERSION_COMPATIBLE + \ PACKAGE_VERSION_EXACT + \ QUIET + \ SOURCE_SUBDIR + \ STREQUAL + \ SUBBUILD_DIR + \ SVN_REPOSITORY + \ SVN_REVISION + \ SYSTEM + \ TARGET + \ TEST_COMMAND + \ TRUE + \ URL + \ URL_HASH + \ VERIFY_INTERFACE_HEADER_SETS + \ WRITE + \ WRONG + \ _BINARY_DIR + \ _INCLUDE + \ _POPULATED + \ _SOURCE_DIR + +syn keyword cmakeKWadd_compile_definitions contained + \ COMPILE_DEFINITIONS + \ VAR + +syn keyword cmakeKWadd_compile_options contained + \ CMAKE_ + \ COMPILE_LANGUAGE + \ COMPILE_OPTIONS + \ CONFIG + \ SHELL + \ UNIX_COMMAND + \ _FLAGS + \ _FLAGS_ + +syn keyword cmakeKWadd_custom_command contained + \ APPEND + \ ARGS + \ BNF + \ BYPRODUCTS + \ CC + \ COMMAND + \ COMMAND_EXPAND_LISTS + \ COMMENT + \ CONFIG + \ CROSSCOMPILING_EMULATOR + \ DEPENDS + \ DEPENDS_EXPLICIT_ONLY + \ DEPFILE + \ GENERATED + \ IMPLICIT_DEPENDS + \ INCLUDE_DIRECTORIES + \ JOB_POOL + \ JOB_POOLS + \ JOIN + \ MAIN_DEPENDENCY + \ MODULE + \ NOT + \ OUTPUT + \ PATH + \ POST_BUILD + \ PRE_BUILD + \ PRE_LINK + \ SYMBOLIC + \ TARGET_FILE + \ TARGET_LINKER_FILE + \ TARGET_PDB_FILE + \ TARGET_PROPERTY + \ TARGET_SONAME_FILE + \ USES_TERMINAL + \ VERBATIM + \ WORKING_DIRECTORY + +syn keyword cmakeKWadd_custom_target contained + \ ALL + \ BYPRODUCTS + \ CC + \ COMMAND + \ COMMAND_EXPAND_LISTS + \ COMMENT + \ CROSSCOMPILING_EMULATOR + \ DEPENDS + \ GENERATED + \ INCLUDE_DIRECTORIES + \ JOB_POOL + \ JOB_POOLS + \ JOIN + \ PATH + \ SOURCES + \ TARGET_FILE + \ TARGET_LINKER_FILE + \ TARGET_PDB_FILE + \ TARGET_PROPERTY + \ TARGET_SONAME_FILE + \ USES_TERMINAL + \ VERBATIM + \ WORKING_DIRECTORY + +syn keyword cmakeKWadd_definitions contained + \ COMPILE_DEFINITIONS + +syn keyword cmakeKWadd_dependencies contained + \ DEPENDS + \ OBJECT_DEPENDS + +syn keyword cmakeKWadd_executable contained + \ ALIAS + \ ALIAS_GLOBAL + \ CONFIG + \ EXCLUDE_FROM_ALL + \ GLOBAL + \ HEADER_FILE_ONLY + \ IMPORTED + \ IMPORTED_ + \ IMPORTED_LOCATION + \ IMPORTED_LOCATION_ + \ MACOSX_BUNDLE + \ OUTPUT_NAME + \ RUNTIME_OUTPUT_DIRECTORY + \ TARGET + +syn keyword cmakeKWadd_library contained + \ ALIAS + \ ALIAS_GLOBAL + \ ARCHIVE_OUTPUT_DIRECTORY + \ CLI + \ CONFIG + \ DLL + \ EXCLUDE_FROM_ALL + \ FRAMEWORK + \ GLOBAL + \ HEADER_FILE_ONLY + \ HEADER_SETS + \ IMPORTED + \ IMPORTED_ + \ IMPORTED_IMPLIB + \ IMPORTED_IMPLIB_ + \ IMPORTED_LOCATION + \ IMPORTED_LOCATION_ + \ IMPORTED_NO_SONAME + \ IMPORTED_OBJECTS + \ IMPORTED_OBJECTS_ + \ IMPORTED_SONAME + \ INTERFACE + \ INTERFACE_ + \ INTERFACE_SOURCES + \ LC_ID_DYLIB + \ LIBRARY_OUTPUT_DIRECTORY + \ MODULE + \ OBJECT + \ ON + \ OUTPUT_NAME + \ POSITION_INDEPENDENT_CODE + \ POST_BUILD + \ PRE_BUILD + \ PRE_LINK + \ PRIVATE_HEADER + \ PUBLIC_HEADER + \ RUNTIME_OUTPUT_DIRECTORY + \ SHARED + \ SONAME + \ SOURCES + \ STATIC + \ TARGETS + \ TARGET_OBJECTS + \ TARGET_RUNTIME_DLLS + \ UNKNOWN + +syn keyword cmakeKWadd_link_options contained + \ CMAKE_ + \ CONFIG + \ CUDA_RESOLVE_DEVICE_SYMBOLS + \ CUDA_SEPARABLE_COMPILATION + \ DEVICE_LINK + \ GCC + \ HOST_LINK + \ LANG + \ LINKER + \ LINK_OPTIONS + \ SHELL + \ STATIC_LIBRARY_OPTIONS + \ UNIX_COMMAND + \ _FLAGS + \ _FLAGS_ + \ _LINKER_WRAPPER_FLAG + \ _LINKER_WRAPPER_FLAG_SEP + +syn keyword cmakeKWadd_subdirectory contained + \ EXCLUDE_FROM_ALL + \ SYSTEM + +syn keyword cmakeKWadd_test contained + \ BUILD_TESTING + \ COMMAND + \ COMMAND_EXPAND_LISTS + \ CONFIGURATIONS + \ FAIL_REGULAR_EXPRESSION + \ NAME + \ OFF + \ PASS_REGULAR_EXPRESSION + \ SKIP_REGULAR_EXPRESSION + \ TARGET_FILE + \ WILL_FAIL + \ WILL_FALL + \ WORKING_DIRECTORY + +syn keyword cmakeKWblock contained + \ PARENT_SCOPE + \ POLICIES + \ PROPAGATE + \ PUSH + \ SCOPE_FOR + \ TRUE + \ VARIABLES + +syn keyword cmakeKWbuild_command contained + \ CONFIGURATION + \ PARALLEL_LEVEL + \ TARGET + +syn keyword cmakeKWcmake_file_api contained + \ API + \ API_VERSION + \ BUILD_DIR + \ CMAKEFILES + \ CODEMODEL + \ COMMAND + \ CONFIG + \ QUERY + \ TOOLCHAINS + +syn keyword cmakeKWcmake_host_system_information contained + \ APPEND + \ AVAILABLE_PHYSICAL_MEMORY + \ AVAILABLE_VIRTUAL_MEMORY + \ BOTH + \ CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT + \ CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ + \ CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID + \ CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME + \ CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_PRETTY_NAME + \ CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION + \ CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID + \ CMAKE_GET_OS_RELEASE_FALLBACK_SCRIPTS + \ DISTRIB_INFO + \ DISTRIB_PRETTY_NAME + \ DISTRO + \ DISTRO_BUG_REPORT_URL + \ DISTRO_HOME_URL + \ DISTRO_ID + \ DISTRO_ID_LIKE + \ DISTRO_NAME + \ DISTRO_PRETTY_NAME + \ DISTRO_PRIVACY_POLICY_URL + \ DISTRO_SUPPORT_URL + \ DISTRO_UBUNTU_CODENAME + \ DISTRO_VERSION + \ DISTRO_VERSION_CODENAME + \ DISTRO_VERSION_ID + \ ERROR_VARIABLE + \ EXISTS + \ FQDN + \ HAS_FPU + \ HAS_MMX + \ HAS_MMX_PLUS + \ HAS_SERIAL_NUMBER + \ HAS_SSE + \ HAS_SSE_FP + \ HAS_SSE_MMX + \ HKCC + \ HKCR + \ HKCU + \ HKEY_CLASSES_ROOT + \ HKEY_CURRENT_CONFIG + \ HKEY_CURRENT_USER + \ HKEY_LOCAL_MACHINE + \ HKEY_USERS + \ HKLM + \ HKU + \ HOSTNAME + \ ID + \ LIMIT_COUNT + \ LISTS + \ LTS + \ MATCHES + \ NNN + \ NOT + \ NUMBER_OF_LOGICAL_CORES + \ NUMBER_OF_PHYSICAL_CORES + \ OS_NAME + \ OS_PLATFORM + \ OS_RELEASE + \ OS_VERSION + \ PRETTY_NAME + \ PROCESSOR_DESCRIPTION + \ PROCESSOR_NAME + \ PROCESSOR_SERIAL_NUMBER + \ QUERY + \ REG_DWORD + \ REG_EXPAND_SZ + \ REG_MULTI_SZ + \ REG_QWORD + \ REG_SZ + \ RESULT + \ SEPARATOR + \ SOFTWARE + \ STATUS + \ STRINGS + \ SUBKEYS + \ TARGET + \ TOTAL_PHYSICAL_MEMORY + \ TOTAL_VIRTUAL_MEMORY + \ VALUE_NAMES + \ VAR + \ VIEW + \ WINDOWS_REGISTRY + +syn keyword cmakeKWcmake_language contained + \ AND + \ ANY + \ APPEND + \ ARGN + \ BINARY_DIR + \ BYPASS_PROVIDER + \ CALL + \ CANCEL_CALL + \ CODE + \ COMMAND + \ COMMAND_ERROR_IS_FATAL + \ DCMAKE_PROJECT_TOP_LEVEL_INCLUDES + \ DEFER + \ DIRECTORY + \ EVAL + \ FALSE + \ FETCHCONTENT_MAKEAVAILABE_SERIAL + \ FETCHCONTENT_MAKEAVAILABLE_SERIAL + \ FETCHCONTENT_SOURCE_DIR_ + \ FETCHCONTENT_TRY_FIND_PACKAGE_MODE + \ FIND_PACKAGE + \ FIND_PACKAGE_ARGS + \ GET_CALL_IDS + \ GET_MESSAGE_LOG_LEVEL + \ GIT_REPOSITORY + \ GIT_SUBMODULES + \ GIT_TAG + \ ID_VAR + \ MATCHES + \ MYCOMP_PROVIDER_INSTALL_DIR + \ NEVER + \ NOT + \ OVERRIDE_FIND_PACKAGE + \ PATH + \ POP_BACK + \ QUIET + \ SET_DEPENDENCY_PROVIDER + \ SOURCE_DIR + \ STATUS + \ STREQUAL + \ SUPPORTED_METHODS + \ TRUE + \ VERSION + \ WRITE + \ _FOUND + \ _PATH + +syn keyword cmakeKWcmake_minimum_required contained + \ FATAL_ERROR + \ VERSION + +syn keyword cmakeKWcmake_parse_arguments contained + \ ARGN + \ CONFIGURATIONS + \ DESTINATION + \ FALSE + \ FAST + \ FILES + \ MY_INSTALL + \ MY_INSTALL_CONFIGURATIONS + \ MY_INSTALL_DESTINATION + \ MY_INSTALL_FAST + \ MY_INSTALL_KEYWORDS_MISSING_VALUES + \ MY_INSTALL_OPTIONAL + \ MY_INSTALL_RENAME + \ MY_INSTALL_TARGETS + \ MY_INSTALL_UNPARSED_ARGUMENTS + \ OPTIONAL + \ PARSE_ARGV + \ RENAME + \ TARGETS + \ TRUE + \ UNDEFINED + \ _KEYWORDS_MISSING_VALUES + \ _UNPARSED_ARGUMENTS + +syn keyword cmakeKWcmake_path contained + \ ABSOLUTE_PATH + \ AND + \ APPEND + \ APPEND_STRING + \ BASE_DIRECTORY + \ COMPARE + \ CONVERT + \ EQUAL + \ EXTENSION + \ EXTENSION_DEF + \ FALSE + \ FILENAME + \ FILENAME_DEF + \ GET + \ GET_EXTENSION + \ GET_FILENAME + \ GET_PARENT_PATH + \ GET_RELATIVE_PART + \ GET_ROOT_DIRECTORY + \ GET_ROOT_NAME + \ GET_ROOT_PATH + \ GET_STEM + \ HASH + \ HAS_EXTENSION + \ HAS_FILENAME + \ HAS_PARENT_PATH + \ HAS_RELATIVE_PART + \ HAS_ROOT_DIRECTORY + \ HAS_ROOT_NAME + \ HAS_ROOT_PATH + \ HAS_STEM + \ IS_ABSOLUTE + \ IS_PREFIX + \ IS_RELATIVE + \ LAST_ONLY + \ MATCHES + \ NATIVE_PATH + \ NORMALIZE + \ NORMAL_PATH + \ NOT_EQUAL + \ OP + \ OUTPUT_VARIABLE + \ PARENT_PATH + \ REAL_PATH + \ RELATIVE_PART + \ RELATIVE_PATH + \ REMOVE_EXTENSION + \ REMOVE_FILENAME + \ REPLACE_EXTENSION + \ REPLACE_FILENAME + \ ROOT_DIRECTORY + \ ROOT_NAME + \ ROOT_PATH + \ SET + \ STEM + \ STREQUAL + \ TO_CMAKE_PATH_LIST + \ TO_NATIVE_PATH_LIST + \ TRUE + \ XOR + +syn keyword cmakeKWcmake_policy contained + \ CMAKE_POLICY_DEFAULT_CMP + \ CMP + \ GET + \ NNNN + \ NO_POLICY_SCOPE + \ OLD + \ POLICIES + \ POP + \ PUSH + \ SCOPE_FOR + \ SET + \ VERSION + +syn keyword cmakeKWconfigure_file contained + \ COPYONLY + \ CRLF + \ DOS + \ ESCAPE_QUOTES + \ FILE_PERMISSIONS + \ FOO_ENABLE + \ FOO_STRING + \ GENERATE + \ INTERFACE + \ LF + \ NEWLINE_STYLE + \ NO_SOURCE_PERMISSIONS + \ PRIVATE + \ PUBLIC + \ SYSTEM + \ USE_SOURCE_PERMISSIONS + \ VAR + +syn keyword cmakeKWcreate_test_sourcelist contained + \ CMAKE_TESTDRIVER_AFTER_TESTMAIN + \ CMAKE_TESTDRIVER_BEFORE_TESTMAIN + \ EXTRA_INCLUDE + \ FUNCTION + +syn keyword cmakeKWctest_build contained + \ ALL_BUILD + \ APPEND + \ BUILD + \ CAPTURE_CMAKE_ERROR + \ CMAKE_BUILD_PARALLEL_LEVEL + \ CONFIGURATION + \ CTEST_BUILD_CONFIGURATION + \ CTEST_BUILD_FLAGS + \ CTEST_BUILD_TARGET + \ FLAGS + \ NUMBER_ERRORS + \ NUMBER_WARNINGS + \ PARALLEL_LEVEL + \ QUIET + \ RETURN_VALUE + \ TARGET + +syn keyword cmakeKWctest_configure contained + \ APPEND + \ BUILD + \ CAPTURE_CMAKE_ERROR + \ OPTIONS + \ QUIET + \ RETURN_VALUE + \ SOURCE + +syn keyword cmakeKWctest_coverage contained + \ APPEND + \ BUILD + \ CAPTURE_CMAKE_ERROR + \ LABELS + \ QUIET + \ RETURN_VALUE + +syn keyword cmakeKWctest_memcheck contained + \ APPEND + \ BUILD + \ CAPTURE_CMAKE_ERROR + \ DEFECT_COUNT + \ EXCLUDE + \ EXCLUDE_FIXTURE + \ EXCLUDE_FIXTURE_CLEANUP + \ EXCLUDE_FIXTURE_SETUP + \ EXCLUDE_LABEL + \ INCLUDE + \ INCLUDE_LABEL + \ OFF + \ ON + \ OUTPUT_JUNIT + \ PARALLEL_LEVEL + \ QUIET + \ REPEAT + \ RESOURCE_SPEC_FILE + \ RETURN_VALUE + \ SCHEDULE_RANDOM + \ START + \ STOP_ON_FAILURE + \ STOP_TIME + \ STRIDE + \ TEST_LOAD + +syn keyword cmakeKWctest_run_script contained + \ NEW_PROCESS + \ RETURN_VALUE + +syn keyword cmakeKWctest_start contained + \ APPEND + \ GROUP + \ QUIET + \ TAG + \ TRACK + +syn keyword cmakeKWctest_submit contained + \ API + \ BUILD_ID + \ CAPTURE_CMAKE_ERROR + \ CDASH_UPLOAD + \ CDASH_UPLOAD_TYPE + \ CTEST_EXTRA_SUBMIT_FILES + \ CTEST_NOTES_FILES + \ FILES + \ HTTPHEADER + \ PARTS + \ QUIET + \ RETRY_COUNT + \ RETRY_DELAY + \ RETURN_VALUE + \ SUBMIT_URL + +syn keyword cmakeKWctest_test contained + \ AFTER_TIMEOUT + \ APPEND + \ ATTACHED_FILES + \ ATTACHED_FILES_ON_FAIL + \ BUILD + \ CAPTURE_CMAKE_ERROR + \ CPU + \ EXCLUDE + \ EXCLUDE_FIXTURE + \ EXCLUDE_FIXTURE_CLEANUP + \ EXCLUDE_FIXTURE_SETUP + \ EXCLUDE_LABEL + \ INCLUDE + \ INCLUDE_LABEL + \ LABELS + \ OFF + \ ON + \ OUTPUT_JUNIT + \ PARALLEL_LEVEL + \ QUIET + \ REPEAT + \ RESOURCE_SPEC_FILE + \ RETURN_VALUE + \ SCHEDULE_RANDOM + \ START + \ STOP_ON_FAILURE + \ STOP_TIME + \ STRIDE + \ TEST_LOAD + \ UNTIL_FAIL + \ UNTIL_PASS + \ URL + \ XML + +syn keyword cmakeKWctest_update contained + \ CAPTURE_CMAKE_ERROR + \ QUIET + \ RETURN_VALUE + \ SOURCE + +syn keyword cmakeKWctest_upload contained + \ CAPTURE_CMAKE_ERROR + \ FILES + \ QUIET + +syn keyword cmakeKWdefine_property contained + \ APPEND + \ APPEND_STRING + \ BRIEF_DOCS + \ CACHED_VARIABLE + \ CMAKE_ + \ DIRECTORY + \ FULL_DOCS + \ GLOBAL + \ INHERITED + \ INITIALIZE_FROM_VARIABLE + \ PROPERTY + \ SOURCE + \ TARGET + \ TEST + \ VARIABLE + \ _CMAKE_ + +syn keyword cmakeKWdoxygen_add_docs contained + \ ALL + \ COMMENT + \ USE_STAMP_FILE + \ WORKING_DIRECTORY + +syn keyword cmakeKWenable_language contained + \ ASM + \ ASM_MARMASM + \ ASM_MASM + \ ASM_NASM + \ ATT + \ CUDA + \ HIP + \ ISPC + \ OBJC + \ OBJCXX + \ OPTIONAL + +syn keyword cmakeKWenable_testing contained + \ BUILD_TESTING + +syn keyword cmakeKWexec_program contained + \ ARGS + \ OUTPUT_VARIABLE + \ RETURN_VALUE + +syn keyword cmakeKWexecute_process contained + \ ANSI + \ ANY + \ AUTO + \ COMMAND + \ COMMAND_ECHO + \ COMMAND_ERROR_IS_FATAL + \ ECHO_ERROR_VARIABLE + \ ECHO_OUTPUT_VARIABLE + \ ENCODING + \ ERROR_FILE + \ ERROR_QUIET + \ ERROR_STRIP_TRAILING_WHITESPACE + \ ERROR_VARIABLE + \ INPUT_FILE + \ LAST + \ NONE + \ OEM + \ OUTPUT_FILE + \ OUTPUT_QUIET + \ OUTPUT_STRIP_TRAILING_WHITESPACE + \ OUTPUT_VARIABLE + \ POSIX + \ RESULTS_VARIABLE + \ RESULT_VARIABLE + \ RFC + \ STDERR + \ STDOUT + \ TIMEOUT + \ UTF + \ WORKING_DIRECTORY + +syn keyword cmakeKWexport contained + \ ANDROID_MK + \ APPEND + \ CONFIG + \ CXX_MODULES_DIRECTORY + \ EXPORT + \ EXPORT_LINK_INTERFACE_LIBRARIES + \ FILE + \ IMPORTED_ + \ NAMESPACE + \ NDK + \ OLD + \ PACKAGE + \ TARGETS + +syn keyword cmakeKWexport_library_dependencies contained + \ APPEND + \ EXPORT + \ INCLUDE + \ LINK_INTERFACE_LIBRARIES + \ SET + +syn keyword cmakeKWfile contained + \ APPEND + \ ARCHIVE_CREATE + \ ARCHIVE_EXTRACT + \ ASCII + \ BASE_DIRECTORY + \ BUNDLE_EXECUTABLE + \ CHMOD + \ CHMOD_RECURSE + \ CMAKE_GET_RUNTIME_DEPENDENCIES_COMMAND + \ CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM + \ CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL + \ CMAKE_INSTALL_MODE + \ CMAKE_OBJDUMP + \ CODE + \ COMPILE_FEATURES + \ COMPRESSION + \ COMPRESSION_LEVEL + \ CONDITION + \ CONFIGURE + \ CONFIGURE_DEPENDS + \ CONFLICTING_DEPENDENCIES_PREFIX + \ CONTENT + \ CONVERT + \ COPYONLY + \ COPY_FILE + \ COPY_ON_ERROR + \ CREATE_LINK + \ CRLF + \ DESTINATION + \ DIRECTORIES + \ DIRECTORY_PERMISSIONS + \ DLL + \ DOS + \ DOWNLOAD + \ ENCODING + \ ESCAPE_QUOTES + \ EXECUTABLES + \ EXPAND_TILDE + \ EXPECTED_HASH + \ FILES_MATCHING + \ FILE_PERMISSIONS + \ FOLLOW_SYMLINKS + \ FOLLOW_SYMLINK_CHAIN + \ FORMAT + \ FUNCTION + \ GENERATE + \ GET_RUNTIME_DEPENDENCIES + \ GLOB + \ GLOB_RECURSE + \ GROUP_EXECUTE + \ GROUP_READ + \ GROUP_WRITE + \ GUARD + \ HASH + \ HEX + \ HOME + \ HTTPHEADER + \ IGNORED + \ INACTIVITY_TIMEOUT + \ INPUT + \ INPUT_MAY_BE_RECENT + \ INSTALL + \ IS_ABSOLUTE + \ LENGTH_MAXIMUM + \ LENGTH_MINIMUM + \ LF + \ LIBRARIES + \ LIMIT + \ LIMIT_COUNT + \ LIMIT_INPUT + \ LIMIT_OUTPUT + \ LIST_DIRECTORIES + \ LIST_ONLY + \ LOCK + \ LOG + \ MAKE_DIRECTORY + \ MODULES + \ MTIME + \ MYLIBRARY + \ NETRC + \ NETRC_FILE + \ NEWLINE_CONSUME + \ NEWLINE_STYLE + \ NOT + \ NO_HEX_CONVERSION + \ NO_REPLACE + \ NO_SOURCE_PERMISSIONS + \ OFFSET + \ ONLY + \ ONLY_IF_DIFFERENT + \ OPTIONAL + \ OUTPUT + \ OWNER_EXECUTE + \ OWNER_READ + \ OWNER_WRITE + \ PATHS + \ PATTERN + \ PATTERNS + \ PERMISSIONS + \ POST_EXCLUDE_FILES + \ POST_EXCLUDE_REGEXES + \ POST_INCLUDE_FILES + \ POST_INCLUDE_REGEXES + \ PRE_EXCLUDE_REGEXES + \ PRE_INCLUDE_REGEXES + \ PROCESS + \ RANGE_END + \ RANGE_START + \ READ + \ READ_SYMLINK + \ REAL_PATH + \ REGEX + \ RELATIVE + \ RELATIVE_PATH + \ RELEASE + \ REMOVE + \ REMOVE_RECURSE + \ RENAME + \ REQUIRED + \ RESOLVED_DEPENDENCIES_VAR + \ RESULT + \ RESULT_VARIABLE + \ RPATH + \ RUNPATH + \ RUNTIME_DEPENDENCY_SET + \ SCRIPT + \ SETGID + \ SETUID + \ SHARED + \ SHOW_PROGRESS + \ SIZE + \ SSL + \ STATIC + \ STATUS + \ STRINGS + \ SYMBOLIC + \ TARGET + \ TARGET_PROPERTY + \ TIMESTAMP + \ TLS_CAINFO + \ TLS_VERIFY + \ TOUCH + \ TOUCH_NOCREATE + \ TO_CMAKE_PATH + \ TO_CMAKE_PATH_LIST + \ TO_NATIVE_PATH + \ TO_NATIVE_PATH_LIST + \ UNRESOLVED_DEPENDENCIES_VAR + \ UPLOAD + \ URL + \ USERPROFILE + \ USERPWD + \ USE_SOURCE_PERMISSIONS + \ UTC + \ UTF + \ VERBOSE + \ WORLD_EXECUTE + \ WORLD_READ + \ WORLD_WRITE + \ WRITE + \ XZ + \ _FILENAMES + +syn keyword cmakeKWfind_file contained + \ BOTH + \ CATEGORY + \ CMAKE_FIND_ROOT_PATH_BOTH + \ CMAKE_FIND_USE_ + \ DOC + \ DVAR + \ FALSE + \ FIND_XXX_REGISTRY_VIEW + \ HINTS + \ HOST + \ INCLUDE + \ MATCHES + \ NAMES + \ NOT + \ NO_CACHE + \ NO_CMAKE_ENVIRONMENT_PATH + \ NO_CMAKE_FIND_ROOT_PATH + \ NO_CMAKE_INSTALL_PREFIX + \ NO_CMAKE_PATH + \ NO_CMAKE_SYSTEM_PATH + \ NO_DEFAULT_PATH + \ NO_PACKAGE_ROOT_PATH + \ NO_SYSTEM_ENVIRONMENT_PATH + \ ONLY_CMAKE_FIND_ROOT_PATH + \ PACKAGENAME + \ PARENT_SCOPE + \ PATHS + \ PATH_SUFFIXES + \ REGISTRY_VIEW + \ REQUIRED + \ TARGET + \ VALIDATOR + \ VAR + +syn keyword cmakeKWfind_library contained + \ BOTH + \ CATEGORY + \ CMAKE_FIND_ROOT_PATH_BOTH + \ CMAKE_FIND_USE_ + \ DOC + \ DVAR + \ FALSE + \ FIND_XXX_REGISTRY_VIEW + \ HINTS + \ HOST + \ LIB + \ MATCHES + \ NAMES + \ NAMES_PER_DIR + \ NOT + \ NO_CACHE + \ NO_CMAKE_ENVIRONMENT_PATH + \ NO_CMAKE_FIND_ROOT_PATH + \ NO_CMAKE_INSTALL_PREFIX + \ NO_CMAKE_PATH + \ NO_CMAKE_SYSTEM_PATH + \ NO_DEFAULT_PATH + \ NO_PACKAGE_ROOT_PATH + \ NO_SYSTEM_ENVIRONMENT_PATH + \ ONLY_CMAKE_FIND_ROOT_PATH + \ PACKAGENAME + \ PARENT_SCOPE + \ PATHS + \ PATH_SUFFIXES + \ REGISTRY_VIEW + \ REQUIRED + \ TARGET + \ VALIDATOR + \ VAR + +syn keyword cmakeKWfind_package contained + \ ABI + \ BOTH + \ BUNDLE + \ BYPASS_PROVIDER + \ CATEGORY + \ CMAKE_DISABLE_FIND_PACKAGE_ + \ CMAKE_REQUIRE_FIND_PACKAGE_ + \ CMAKE_FIND_ROOT_PATH_BOTH + \ CMAKE_FIND_USE_ + \ CMAKE_REQUIRE_FIND_PACKAGE_ + \ COMPONENTS + \ CONFIG + \ CONFIGS + \ DEC + \ DVAR + \ EXACT + \ EXCLUDE + \ FALSE + \ FIND_PACKAGE_VERSION_FORMAT + \ FRAMEWORK + \ GLOBAL + \ HINTS + \ HOST + \ INCLUDE + \ MODULE + \ NAMES + \ NATURAL + \ NO_CMAKE_BUILDS_PATH + \ NO_CMAKE_ENVIRONMENT_PATH + \ NO_CMAKE_FIND_ROOT_PATH + \ NO_CMAKE_INSTALL_PREFIX + \ NO_CMAKE_PACKAGE_REGISTRY + \ NO_CMAKE_PATH + \ NO_CMAKE_SYSTEM_PACKAGE_REGISTRY + \ NO_CMAKE_SYSTEM_PATH + \ NO_DEFAULT_PATH + \ NO_MODULE + \ NO_PACKAGE_ROOT_PATH + \ NO_POLICY_SCOPE + \ NO_SYSTEM_ENVIRONMENT_PATH + \ OLD + \ ONLY_CMAKE_FIND_ROOT_PATH + \ OPTIONAL_COMPONENTS + \ PACKAGENAME + \ PACKAGE_FIND_NAME + \ PACKAGE_FIND_VERSION + \ PACKAGE_FIND_VERSION_COMPLETE + \ PACKAGE_FIND_VERSION_COUNT + \ PACKAGE_FIND_VERSION_MAJOR + \ PACKAGE_FIND_VERSION_MAX + \ PACKAGE_FIND_VERSION_MAX_COUNT + \ PACKAGE_FIND_VERSION_MAX_MAJOR + \ PACKAGE_FIND_VERSION_MAX_MINOR + \ PACKAGE_FIND_VERSION_MAX_PATCH + \ PACKAGE_FIND_VERSION_MAX_TWEAK + \ PACKAGE_FIND_VERSION_MINOR + \ PACKAGE_FIND_VERSION_MIN_COUNT + \ PACKAGE_FIND_VERSION_MIN_MAJOR + \ PACKAGE_FIND_VERSION_MIN_MINOR + \ PACKAGE_FIND_VERSION_MIN_PATCH + \ PACKAGE_FIND_VERSION_MIN_TWEAK + \ PACKAGE_FIND_VERSION_PATCH + \ PACKAGE_FIND_VERSION_RANGE + \ PACKAGE_FIND_VERSION_RANGE_MAX + \ PACKAGE_FIND_VERSION_RANGE_MIN + \ PACKAGE_FIND_VERSION_TWEAK + \ PACKAGE_VERSION_COMPATIBLE + \ PACKAGE_VERSION_EXACT + \ PACKAGE_VERSION_UNSUITABLE + \ PATHS + \ PATH_SUFFIXES + \ QUIET + \ REGISTRY_VIEW + \ REQUIRED + \ SET + \ TARGET + \ TRUE + \ VALUE + \ _CONFIG + \ _CONSIDERED_CONFIGS + \ _CONSIDERED_VERSIONS + \ _DIR + \ _FIND_COMPONENTS + \ _FIND_QUIETLY + \ _FIND_REGISTRY_VIEW + \ _FIND_REQUIRED + \ _FIND_REQUIRED_ + \ _FIND_VERSION_EXACT + \ _FOUND + +syn keyword cmakeKWfind_path contained + \ BOTH + \ CATEGORY + \ CMAKE_FIND_ROOT_PATH_BOTH + \ CMAKE_FIND_USE_ + \ DOC + \ DVAR + \ FALSE + \ FIND_XXX_REGISTRY_VIEW + \ HINTS + \ HOST + \ INCLUDE + \ MATCHES + \ NAMES + \ NOT + \ NO_CACHE + \ NO_CMAKE_ENVIRONMENT_PATH + \ NO_CMAKE_FIND_ROOT_PATH + \ NO_CMAKE_INSTALL_PREFIX + \ NO_CMAKE_PATH + \ NO_CMAKE_SYSTEM_PATH + \ NO_DEFAULT_PATH + \ NO_PACKAGE_ROOT_PATH + \ NO_SYSTEM_ENVIRONMENT_PATH + \ ONLY_CMAKE_FIND_ROOT_PATH + \ PACKAGENAME + \ PARENT_SCOPE + \ PATHS + \ PATH_SUFFIXES + \ REGISTRY_VIEW + \ REQUIRED + \ TARGET + \ VALIDATOR + \ VAR + +syn keyword cmakeKWfind_program contained + \ BOTH + \ CATEGORY + \ CMAKE_FIND_ROOT_PATH_BOTH + \ CMAKE_FIND_USE_ + \ DOC + \ DVAR + \ FALSE + \ FIND_XXX_REGISTRY_VIEW + \ HINTS + \ HOST + \ MATCHES + \ NAMES + \ NAMES_PER_DIR + \ NOT + \ NO_CACHE + \ NO_CMAKE_ENVIRONMENT_PATH + \ NO_CMAKE_FIND_ROOT_PATH + \ NO_CMAKE_INSTALL_PREFIX + \ NO_CMAKE_PATH + \ NO_CMAKE_SYSTEM_PATH + \ NO_DEFAULT_PATH + \ NO_PACKAGE_ROOT_PATH + \ NO_SYSTEM_ENVIRONMENT_PATH + \ ONLY_CMAKE_FIND_ROOT_PATH + \ PACKAGENAME + \ PARENT_SCOPE + \ PATHS + \ PATH_SUFFIXES + \ REGISTRY_VIEW + \ REQUIRED + \ TARGET + \ VALIDATOR + \ VAR + +syn keyword cmakeKWfltk_wrap_ui contained + \ FLTK + +syn keyword cmakeKWforeach contained + \ APPEND + \ IN + \ ITEMS + \ LISTS + \ RANGE + \ STATUS + \ ZIP_LISTS + +syn keyword cmakeKWfunction contained + \ ARGC + \ ARGN + \ ARGV + \ CALL + \ FOO + \ PARENT_SCOPE + +syn keyword cmakeKWget_cmake_property contained + \ COMPONENTS + \ GLOBAL + \ MACROS + \ VARIABLES + +syn keyword cmakeKWget_directory_property contained + \ DEFINITION + \ DIRECTORY + \ INHERITED + +syn keyword cmakeKWget_filename_component contained + \ ABSOLUTE + \ BASE_DIR + \ DIRECTORY + \ EXT + \ LAST_EXT + \ NAME + \ NAME_WE + \ NAME_WLE + \ PROGRAM + \ PROGRAM_ARGS + \ QUERY + \ REALPATH + \ REAL_PATH + \ WINDOWS_REGISTRY + +syn keyword cmakeKWget_property contained + \ BRIEF_DOCS + \ DEFINED + \ DIRECTORY + \ FULL_DOCS + \ GENERATED + \ GLOBAL + \ INSTALL + \ PROPERTY + \ SET + \ SOURCE + \ TARGET + \ TARGET_DIRECTORY + \ TEST + \ VARIABLE + +syn keyword cmakeKWget_source_file_property contained + \ DIRECTORY + \ GENERATED + \ INHERITED + \ LOCATION + \ TARGET_DIRECTORY + +syn keyword cmakeKWget_target_property contained + \ INHERITED + \ VAR + +syn keyword cmakeKWget_test_property contained + \ INHERITED + \ VAR + +syn keyword cmakeKWif contained + \ CMAKE_MATCH_ + \ CMP + \ COMMAND + \ COMPARE + \ DEFINED + \ EQUAL + \ EXISTS + \ FALSE + \ GREATER + \ GREATER_EQUAL + \ IGNORE + \ IN_LIST + \ IS_ABSOLUTE + \ IS_DIRECTORY + \ IS_NEWER_THAN + \ IS_SYMLINK + \ LESS + \ LESS_EQUAL + \ MATCHES + \ NNNN + \ NOT + \ OFF + \ OR + \ PATH_EQUAL + \ POLICY + \ STREQUAL + \ STRGREATER + \ STRGREATER_EQUAL + \ STRLESS + \ STRLESS_EQUAL + \ TARGET + \ TEST + \ TRUE + \ VERSION_EQUAL + \ VERSION_GREATER + \ VERSION_GREATER_EQUAL + \ VERSION_LESS + \ VERSION_LESS_EQUAL + \ YES + +syn keyword cmakeKWinclude contained + \ NO_POLICY_SCOPE + \ OPTIONAL + \ RESULT_VARIABLE + +syn keyword cmakeKWinclude_directories contained + \ AFTER + \ BEFORE + \ INCLUDE_DIRECTORIES + \ ON + \ SYSTEM + +syn keyword cmakeKWinclude_external_msproject contained + \ GUID + \ MAP_IMPORTED_CONFIG_ + \ PLATFORM + \ TYPE + \ WIX + +syn keyword cmakeKWinclude_guard contained + \ DIRECTORY + \ GLOBAL + \ TRUE + \ __CURRENT_FILE_VAR__ + +syn keyword cmakeKWinstall contained + \ AFTER + \ AIX + \ ALL_COMPONENTS + \ APT + \ ARCHIVE + \ BEFORE + \ BUILD_TYPE + \ BUNDLE + \ BUNDLE_EXECUTABLE + \ CMAKE_INSTALL_BINDIR + \ CMAKE_INSTALL_DATADIR + \ CMAKE_INSTALL_DATAROOTDIR + \ CMAKE_INSTALL_DOCDIR + \ CMAKE_INSTALL_INCLUDEDIR + \ CMAKE_INSTALL_INFODIR + \ CMAKE_INSTALL_LIBDIR + \ CMAKE_INSTALL_LOCALEDIR + \ CMAKE_INSTALL_LOCALSTATEDIR + \ CMAKE_INSTALL_MANDIR + \ CMAKE_INSTALL_MODE + \ CMAKE_INSTALL_RUNSTATEDIR + \ CMAKE_INSTALL_SBINDIR + \ CMAKE_INSTALL_SHARESTATEDIR + \ CMAKE_INSTALL_SYSCONFDIR + \ CODE + \ COMPONENT + \ CONFIGURATIONS + \ CVS + \ CXX_MODULES_BMI + \ CXX_MODULES_DIRECTORY + \ DATA + \ DATAROOT + \ DBUILD_TYPE + \ DCOMPONENT + \ DESTDIR + \ DESTINATION + \ DIRECTORY + \ DIRECTORY_PERMISSIONS + \ DLL + \ DOC + \ ENABLE_EXPORTS + \ EXCLUDE_FROM_ALL + \ EXECUTABLES + \ EXPORT + \ EXPORT_ANDROID_MK + \ EXPORT_LINK_INTERFACE_LIBRARIES + \ EXPORT_NAME + \ FILES + \ FILES_MATCHING + \ FILE_PERMISSIONS + \ FILE_SET + \ FRAMEWORK + \ GET_RUNTIME_DEPENDENCIES + \ GROUP_EXECUTE + \ GROUP_READ + \ GROUP_WRITE + \ HEADERS + \ IMPORTED_RUNTIME_ARTIFACTS + \ INCLUDES + \ INFO + \ INSTALL_PREFIX + \ INTERFACE + \ INTERFACE_INCLUDE_DIRECTORIES + \ LIBRARY + \ LOCALE + \ LOCALSTATE + \ MACOSX_BUNDLE + \ MAN + \ MESSAGE_NEVER + \ NAMELINK_COMPONENT + \ NAMELINK_ONLY + \ NAMELINK_SKIP + \ NAMESPACE + \ NDK + \ OBJECTS + \ OPTIONAL + \ OWNER_EXECUTE + \ OWNER_READ + \ OWNER_WRITE + \ PATTERN + \ PERMISSIONS + \ POST_EXCLUDE_FILES + \ POST_EXCLUDE_REGEXES + \ POST_INCLUDE_FILES + \ POST_INCLUDE_REGEXES + \ POST_INSTALL_SCRIPT + \ PRE_EXCLUDE_REGEXES + \ PRE_INCLUDE_REGEXES + \ PRE_INSTALL_SCRIPT + \ PRIVATE_HEADER + \ PROGRAMS + \ PROPERTIES + \ PUBLIC_HEADER + \ RENAME + \ RESOURCE + \ RPM + \ RUNSTATE + \ RUNTIME_DEPENDENCIES + \ RUNTIME_DEPENDENCY_SET + \ SBIN + \ SCRIPT + \ SETGID + \ SETUID + \ SHAREDSTATE + \ SOVERSION + \ STATIC + \ SYSCONF + \ TARGETS + \ TRUE + \ TYPE + \ USE_SOURCE_PERMISSIONS + \ VERSION + \ WORLD_EXECUTE + \ WORLD_READ + \ WORLD_WRITE + +syn keyword cmakeKWinstall_files contained + \ FILES + \ GLOB + +syn keyword cmakeKWinstall_programs contained + \ FILES + \ GLOB + \ PROGRAMS + \ TARGETS + +syn keyword cmakeKWinstall_targets contained + \ DLL + \ RUNTIME_DIRECTORY + +syn keyword cmakeKWlink_directories contained + \ AFTER + \ BEFORE + \ LINK_DIRECTORIES + \ ON + \ ORIGIN + \ RPATH + +syn keyword cmakeKWlist contained + \ ACTION + \ APPEND + \ ASCENDING + \ CASE + \ COMPARE + \ DESCENDING + \ EXCLUDE + \ FILE_BASENAME + \ FILTER + \ FIND + \ GENEX_STRIP + \ GET + \ INCLUDE + \ INSENSITIVE + \ INSERT + \ INTERNAL + \ JOIN + \ LENGTH + \ NATURAL + \ ORDER + \ OUTPUT_VARIABLE + \ PARENT_SCOPE + \ POP_BACK + \ POP_FRONT + \ PREPEND + \ REGEX + \ REMOVE_AT + \ REMOVE_DUPLICATES + \ REMOVE_ITEM + \ REPLACE + \ REVERSE + \ SELECTOR + \ SENSITIVE + \ SORT + \ STRING + \ STRIP + \ SUBLIST + \ TOLOWER + \ TOUPPER + \ TRANSFORM + \ TRANSFORM_APPEND + \ TRANSFORM_GENEX_STRIP + \ TRANSFORM_REPLACE + \ TRANSFORM_STRIP + \ TRANSFORM_TOLOWER + +syn keyword cmakeKWload_cache contained + \ EXCLUDE + \ INCLUDE_INTERNALS + \ READ_WITH_PREFIX + +syn keyword cmakeKWload_command contained + \ CMAKE_LOADED_COMMAND_ + \ COMMAND_NAME + +syn keyword cmakeKWmacro contained + \ ARGC + \ ARGN + \ ARGV + \ CALL + \ DEFINED + \ FOO + \ GREATER + \ LISTS + \ NOT + +syn keyword cmakeKWmark_as_advanced contained + \ CLEAR + \ FORCE + +syn keyword cmakeKWmath contained + \ EXPR + \ HEXADECIMAL + \ OUTPUT_FORMAT + +syn keyword cmakeKWmessage contained + \ APPEND + \ AUTHOR_WARNING + \ CHECK_ + \ CHECK_FAIL + \ CHECK_PASS + \ CHECK_START + \ CONFIGURE_LOG + \ DEBUG + \ DEFINED + \ DEPRECATION + \ FATAL_ERROR + \ GET_MESSAGE_LOG_LEVEL + \ GUI + \ INTERNAL + \ MY_CHECK_RESULT + \ NOTICE + \ POP_BACK + \ SEND_ERROR + \ STATUS + \ TRACE + \ VERBOSE + \ WARNING + +syn keyword cmakeKWoption contained + \ OFF + +syn keyword cmakeKWproject contained + \ ASM + \ ASM_MARMASM + \ ASM_MASM + \ ASM_NASM + \ ATT + \ CMAKE_PROJECT_ + \ CUDA + \ DESCRIPTION + \ HIP + \ HOMEPAGE_URL + \ ISPC + \ LANGUAGES + \ NAME + \ NONE + \ OBJC + \ OBJCXX + \ PROJECT + \ VERSION + \ _BINARY_DIR + \ _DESCRIPTION + \ _HOMEPAGE_URL + \ _INCLUDE_BEFORE + \ _IS_TOP_LEVEL + \ _SOURCE_DIR + \ _VERSION + \ _VERSION_MAJOR + \ _VERSION_MINOR + \ _VERSION_PATCH + \ _VERSION_TWEAK + +syn keyword cmakeKWqt_wrap_cpp contained + \ AUTOMOC + +syn keyword cmakeKWqt_wrap_ui contained + \ AUTOUIC + +syn keyword cmakeKWremove contained + \ VALUE + \ VAR + +syn keyword cmakeKWreturn contained + \ DEFER + \ PARENT_SCOPE + \ PROPAGATE + \ SCOPE_FOR + \ VARIABLES + \ VERSION + +syn keyword cmakeKWseparate_arguments contained + \ MSDN + \ NATIVE_COMMAND + \ PROGRAM + \ SEPARATE_ARGS + \ UNIX_COMMAND + \ WINDOWS_COMMAND + +syn keyword cmakeKWset contained + \ BOOL + \ FILEPATH + \ FORCE + \ INTERNAL + \ OFF + \ OLD + \ ON + \ PARENT_SCOPE + \ PROPAGATE + \ STRING + \ STRINGS + \ VAR + +syn keyword cmakeKWset_directory_properties contained + \ DIRECTORY + \ PROPERTIES + +syn keyword cmakeKWset_property contained + \ APPEND + \ APPEND_STRING + \ DIRECTORY + \ GENERATED + \ GLOBAL + \ INHERITED + \ INSTALL + \ NAME + \ PROPERTY + \ SOURCE + \ TARGET + \ TARGET_DIRECTORY + \ TEST + \ WIX + +syn keyword cmakeKWset_source_files_properties contained + \ DIRECTORY + \ GENERATED + \ PROPERTIES + \ SOURCE + \ TARGET_DIRECTORY + +syn keyword cmakeKWset_target_properties contained + \ PROPERTIES + +syn keyword cmakeKWset_tests_properties contained + \ NAME + \ PROPERTIES + +syn keyword cmakeKWsite_name contained + \ HOSTNAME + +syn keyword cmakeKWsource_group contained + \ FILES + \ PREFIX + \ REGULAR_EXPRESSION + \ TREE + +syn keyword cmakeKWstring contained + \ ALPHABET + \ APPEND + \ ARRAY + \ ASCII + \ BOOLEAN + \ CMAKE_MATCH_ + \ COMPARE + \ CONCAT + \ CONFIGURE + \ EQUAL + \ ERROR_VARIABLE + \ ESCAPE_QUOTES + \ FIND + \ GENEX_STRIP + \ GET + \ GREATER + \ GREATER_EQUAL + \ GUID + \ HASH + \ HEX + \ ISO + \ JOIN + \ JSON + \ LENGTH + \ LESS + \ LESS_EQUAL + \ MAKE_C_IDENTIFIER + \ MATCH + \ MATCHALL + \ MATCHES + \ MEMBER + \ NAMESPACE + \ NOTEQUAL + \ NULL + \ NUMBER + \ OBJECT + \ OFF + \ ONLY + \ PREPEND + \ RANDOM + \ RANDOM_SEED + \ REGEX + \ REMOVE + \ REPEAT + \ REPLACE + \ REVERSE + \ RFC + \ SET + \ SHA + \ SOURCE_DATE_EPOCH + \ STRIP + \ SUBSTRING + \ SZ + \ TIMESTAMP + \ TOLOWER + \ TOUPPER + \ TYPE + \ US + \ UTC + \ UUID + +syn keyword cmakeKWsubdirs contained + \ EXCLUDE_FROM_ALL + \ PREORDER + +syn keyword cmakeKWtarget_compile_definitions contained + \ ALIAS + \ COMPILE_DEFINITIONS + \ FOO + \ IMPORTED + \ INTERFACE + \ INTERFACE_COMPILE_DEFINITIONS + \ PRIVATE + \ PUBLIC + +syn keyword cmakeKWtarget_compile_features contained + \ ALIAS + \ COMPILE_FEATURES + \ IMPORTED + \ INTERFACE + \ INTERFACE_COMPILE_FEATURES + \ PRIVATE + \ PUBLIC + +syn keyword cmakeKWtarget_compile_options contained + \ ALIAS + \ BEFORE + \ CMAKE_ + \ COMPILE_LANGUAGE + \ COMPILE_OPTIONS + \ CONFIG + \ IMPORTED + \ INTERFACE + \ INTERFACE_COMPILE_OPTIONS + \ PRIVATE + \ PUBLIC + \ SHELL + \ UNIX_COMMAND + \ _FLAGS + \ _FLAGS_ + +syn keyword cmakeKWtarget_include_directories contained + \ AFTER + \ ALIAS + \ BEFORE + \ BUILD_INTERFACE + \ IMPORTED + \ INCLUDE_DIRECTORIES + \ INSTALL_INTERFACE + \ INTERFACE + \ INTERFACE_INCLUDE_DIRECTORIES + \ INTERFACE_LINK_LIBRARIES + \ INTERFACE_SYSTEM_INCLUDE_DIRECTORIES + \ PRIVATE + \ PUBLIC + \ SYSTEM + +syn keyword cmakeKWtarget_link_directories contained + \ ALIAS + \ BEFORE + \ IMPORTED + \ INTERFACE + \ INTERFACE_LINK_DIRECTORIES + \ LINK_DIRECTORIES + \ ORIGIN + \ PRIVATE + \ PUBLIC + \ RPATH + +syn keyword cmakeKWtarget_link_libraries contained + \ ALIAS + \ DA + \ DAG + \ DEBUG_CONFIGURATIONS + \ DOBJ + \ IMPORTED + \ IMPORTED_NO_SONAME + \ INTERFACE + \ INTERFACE_LINK_LIBRARIES + \ LINK_FLAGS + \ LINK_INTERFACE_LIBRARIES + \ LINK_INTERFACE_LIBRARIES_DEBUG + \ LINK_INTERFACE_MULTIPLICITY + \ LINK_OPTIONS + \ LINK_PRIVATE + \ LINK_PUBLIC + \ OBJECT + \ OLD + \ PRIVATE + \ PUBLIC + \ SHARED + \ STATIC + \ TARGET_OBJECTS + +syn keyword cmakeKWtarget_link_options contained + \ ALIAS + \ BEFORE + \ CMAKE_ + \ CONFIG + \ CUDA_RESOLVE_DEVICE_SYMBOLS + \ CUDA_SEPARABLE_COMPILATION + \ DEVICE_LINK + \ GCC + \ HOST_LINK + \ IMPORTED + \ INTERFACE + \ INTERFACE_LINK_OPTIONS + \ LANG + \ LINKER + \ LINK_OPTIONS + \ PRIVATE + \ PUBLIC + \ SHELL + \ STATIC_LIBRARY_OPTIONS + \ UNIX_COMMAND + \ _FLAGS + \ _FLAGS_ + \ _LINKER_WRAPPER_FLAG + \ _LINKER_WRAPPER_FLAG_SEP + +syn keyword cmakeKWtarget_precompile_headers contained + \ ALIAS + \ ANGLE + \ BUILD_INTERFACE + \ COMPILE_LANGUAGE + \ DISABLE_PRECOMPILE_HEADERS + \ EXPORT + \ FI + \ GCC + \ IMPORTED + \ INTERFACE + \ INTERFACE_PRECOMPILE_HEADERS + \ PRECOMPILE_HEADERS + \ PRECOMPILE_HEADERS_REUSE_FROM + \ PRIVATE + \ PUBLIC + \ REUSE_FROM + \ SKIP_PRECOMPILE_HEADERS + +syn keyword cmakeKWtarget_sources contained + \ ALIAS + \ BASE_DIRS + \ BUILD_INTERFACE + \ CONFIG + \ CORRECT + \ CXX_MODULES + \ CXX_MODULE_DIRS + \ CXX_MODULE_DIRS_ + \ CXX_MODULE_SETS + \ CXX_MODULE_SET_ + \ EXPORT + \ FILES + \ FILE_SET + \ FRAMEWORK + \ HEADERS + \ HEADER_DIRS + \ HEADER_DIRS_ + \ HEADER_FILE_ONLY + \ HEADER_SETS + \ HEADER_SET_ + \ IMPORTED + \ INCLUDE_DIRECTORIES + \ INTERFACE + \ INTERFACE_CXX_MODULE_SETS + \ INTERFACE_HEADER_SETS + \ INTERFACE_INCLUDE_DIRECTORIES + \ INTERFACE_SOURCES + \ NAME + \ PRIVATE + \ PUBLIC + \ SOURCES + \ SOURCE_DIR + \ TARGETS + \ TRUE + \ TYPE + \ WRONG + +syn keyword cmakeKWtry_compile contained + \ ALL_BUILD + \ BINARY_DIR + \ CMAKE_FLAGS + \ COMPILE_DEFINITIONS + \ COPY_FILE + \ COPY_FILE_ERROR + \ CUDA_EXTENSIONS + \ CUDA_STANDARD + \ CUDA_STANDARD_REQUIRED + \ CXX_EXTENSIONS + \ CXX_STANDARD + \ CXX_STANDARD_REQUIRED + \ C_EXTENSIONS + \ C_STANDARD + \ C_STANDARD_REQUIRED + \ DEFINED + \ DLINK_LIBRARIES + \ DVAR + \ EXECUTABLE + \ FALSE + \ GHS + \ HIP_EXTENSIONS + \ HIP_STANDARD + \ HIP_STANDARD_REQUIRED + \ INCLUDE_DIRECTORIES + \ LANG + \ LINK_DIRECTORIES + \ LINK_LIBRARIES + \ LINK_OPTIONS + \ LOG_DESCRIPTION + \ MULTI + \ NOT + \ NO_CACHE + \ NO_LOG + \ OBJCXX_EXTENSIONS + \ OBJCXX_STANDARD + \ OBJCXX_STANDARD_REQUIRED + \ OBJC_EXTENSIONS + \ OBJC_STANDARD + \ OBJC_STANDARD_REQUIRED + \ OUTPUT_VARIABLE + \ PRIVATE + \ PROJECT + \ RESULTVAR + \ SOURCES + \ SOURCE_DIR + \ SOURCE_FROM_CONTENT + \ SOURCE_FROM_FILE + \ SOURCE_FROM_VAR + \ STATIC_LIBRARY + \ STATIC_LIBRARY_OPTIONS + \ TARGET + \ TRUE + \ TYPE + \ VALUE + \ _EXTENSIONS + \ _STANDARD + \ _STANDARD_REQUIRED + +syn keyword cmakeKWtry_run contained + \ ARGS + \ CMAKE_FLAGS + \ COMPILE_DEFINITIONS + \ COMPILE_OUTPUT_VARIABLE + \ COPY_FILE + \ COPY_FILE_ERROR + \ FAILED_TO_RUN + \ FALSE + \ LANG + \ LINK_LIBRARIES + \ LINK_OPTIONS + \ LOG_DESCRIPTION + \ NO_CACHE + \ NO_LOG + \ RUN_OUTPUT_STDERR_VARIABLE + \ RUN_OUTPUT_STDOUT_VARIABLE + \ RUN_OUTPUT_VARIABLE + \ SOURCES + \ SOURCE_FROM_CONTENT + \ SOURCE_FROM_FILE + \ SOURCE_FROM_VAR + \ TRUE + \ WORKING_DIRECTORY + \ _EXTENSIONS + \ _STANDARD + \ _STANDARD_REQUIRED + \ __TRYRUN_OUTPUT + +syn keyword cmakeKWunset contained + \ PARENT_SCOPE + \ VAR + +syn keyword cmakeKWuse_mangled_mesa contained + \ GL + \ OUTPUT_DIRECTORY + \ PATH_TO_MESA + +syn keyword cmakeKWvariable_requires contained + \ RESULT_VARIABLE + \ TEST_VARIABLE + +syn keyword cmakeKWvariable_watch contained + \ APPEND + \ COMMAND + \ DEFINED + \ MODIFIED_ACCESS + \ READ_ACCESS + \ REMOVED_ACCESS + \ UNKNOWN_MODIFIED_ACCESS + \ UNKNOWN_READ_ACCESS + +syn keyword cmakeKWwrite_file contained + \ APPEND + \ CONFIGURE_FILE + \ NOTE + \ WRITE + + +syn keyword cmakeGeneratorExpressions contained + \ ABSOLUTE_PATH + \ ACTION + \ AIX + \ ANGLE + \ APPEND + \ ARCHIVE_OUTPUT_NAME + \ ARCHIVE_OUTPUT_NAME_ + \ ASCENDING + \ BAR + \ BOOL + \ BUILD_INTERFACE + \ BUILD_LOCAL_INTERFACE + \ CMAKE_LINK_GROUP_USING_ + \ CMAKE_LINK_LIBRARY_USING_ + \ CMAKE_PATH + \ CODE + \ COMMAND_CONFIG + \ COMMAND_EXPAND_LISTS + \ COMPARE + \ COMPILE_DEFINITIONS + \ COMPILE_FEATURES + \ COMPILE_LANGUAGE + \ COMPILE_LANG_AND_ID + \ COMPILE_ONLY + \ COMPILING_CUDA + \ COMPILING_CXX + \ COMPILING_CXX_WITH_CLANG + \ COMPILING_CXX_WITH_INTEL + \ COMPILING_C_WITH_CLANG + \ CONFIG + \ CONFIGURATION + \ CONTENT + \ CUDA_COMPILER_ID + \ CUDA_COMPILER_VERSION + \ CUDA_RESOLVE_DEVICE_SYMBOLS + \ CUDA_SEPARABLE_COMPILATION + \ CUSTOM_KEYS + \ CXX_COMPILER_ID + \ CXX_COMPILER_VERSION + \ CXX_CONFIG + \ CXX_STANDARD + \ C_COMPILER_ID + \ C_COMPILER_VERSION + \ C_STANDARD + \ DEBUG_MODE + \ DEBUG_POSTFIX + \ DENABLE_SOME_FEATURE + \ DESCENDING + \ DEVICE_LINK + \ DLL + \ ENABLE_EXPORTS + \ EXCLUDE + \ EXPORT + \ EXTENSION_DEF + \ FALSE + \ FILENAME_DEF + \ FILE_BASENAME + \ FILTER + \ FIND + \ FOO_EXTRA_THINGS + \ GENERATE + \ GENEX_EVAL + \ GET_EXTENSION + \ GET_FILENAME + \ GET_PARENT_PATH + \ GET_RELATIVE_PART + \ GET_ROOT_DIRECTORY + \ GET_ROOT_NAME + \ GET_ROOT_PATH + \ GET_STEM + \ HAS_ + \ HAS_EXTENSION + \ HAS_FILENAME + \ HAS_PARENT_PATH + \ HAS_RELATIVE_PART + \ HAS_ROOT_DIRECTORY + \ HAS_ROOT_NAME + \ HAS_ROOT_PATH + \ HAS_STEM + \ HAVE_SOME_FEATURE + \ HIP_COMPILER_ID + \ HIP_COMPILER_VERSION + \ HIP_STANDARD + \ HOST_LINK + \ IF + \ IGNORE + \ IMPORTED_LOCATION + \ IMPORT_PREFIX + \ IMPORT_SUFFIX + \ INCLUDE_DIRECTORIES + \ INSENSITIVE + \ INSERT + \ INSTALL_INTERFACE + \ INSTALL_NAME_DIR + \ INSTALL_PREFIX + \ INSTALL_RPATH + \ INTERFACE_LINK_LIBRARIES + \ INTERFACE_LINK_LIBRARIES_DIRECT + \ IN_LIST + \ ISPC_COMPILER_ID + \ ISPC_COMPILER_VERSION + \ IS_ABSOLUTE + \ IS_PREFIX + \ IS_RELATIVE + \ JOIN + \ LANG + \ LANG_COMPILER_ID + \ LAST_ONLY + \ LENGTH + \ LIBRARY_OUTPUT_NAME + \ LIBRARY_OUTPUT_NAME_ + \ LINK_GROUP + \ LINK_GROUP_PREDEFINED_FEATURES + \ LINK_LANGUAGE + \ LINK_LANG_AND_ID + \ LINK_LIBRARIES + \ LINK_LIBRARY + \ LINK_LIBRARY_OVERRIDE + \ LINK_LIBRARY_OVERRIDE_ + \ LINK_LIBRARY_PREDEFINED_FEATURES + \ LINK_ONLY + \ LOWER_CASE + \ MAKE_C_IDENTIFIER + \ MAP_IMPORTED_CONFIG_ + \ MODULE + \ NATURAL + \ NO + \ NORMALIZE + \ NORMAL_PATH + \ NOT + \ OBJCXX_COMPILER_ID + \ OBJCXX_COMPILER_VERSION + \ OBJC_COMPILER_ID + \ OBJC_COMPILER_VERSION + \ OBJECT + \ OFF + \ OLD_COMPILER + \ ORDER + \ OUTPUT + \ OUTPUT_CONFIG + \ OUTPUT_NAME + \ OUTPUT_NAME_ + \ PATH + \ PATH_EQUAL + \ PDB_NAME + \ PDB_NAME_ + \ PDB_OUTPUT_DIRECTORY + \ PDB_OUTPUT_DIRECTORY_ + \ PLATFORM_ID + \ POP_BACK + \ POP_FRONT + \ POSIX + \ POST_BUILD + \ PREPEND + \ PRIVATE + \ PUBLIC + \ REGEX + \ RELATIVE_PATH + \ REMOVE_AT + \ REMOVE_DUPLICATES + \ REMOVE_EXTENSION + \ REMOVE_FILENAME + \ REMOVE_ITEM + \ REPLACE + \ REPLACE_EXTENSION + \ REPLACE_FILENAME + \ REQUIRED + \ RESCAN + \ REVERSE + \ RPATH + \ RUNTIME_DEPENDENCY_SET + \ RUNTIME_OUTPUT_NAME + \ RUNTIME_OUTPUT_NAME_ + \ SCRIPT + \ SDK + \ SELECTOR + \ SEMICOLON + \ SENSITIVE + \ SHARED + \ SHELL_PATH + \ SORT + \ STATIC + \ STREQUAL + \ STRING + \ STRIP + \ SUBLIST + \ TARGET_BUNDLE_CONTENT_DIR + \ TARGET_BUNDLE_DIR + \ TARGET_BUNDLE_DIR_NAME + \ TARGET_EXISTS + \ TARGET_FILE + \ TARGET_FILE_BASE_NAME + \ TARGET_FILE_DIR + \ TARGET_FILE_NAME + \ TARGET_FILE_PREFIX + \ TARGET_FILE_SUFFIX + \ TARGET_GENEX_EVAL + \ TARGET_IMPORT_FILE + \ TARGET_IMPORT_FILE_BASE_NAME + \ TARGET_IMPORT_FILE_DIR + \ TARGET_IMPORT_FILE_NAME + \ TARGET_IMPORT_FILE_PREFIX + \ TARGET_IMPORT_FILE_SUFFIX + \ TARGET_LINKER_FILE + \ TARGET_LINKER_FILE_BASE_NAME + \ TARGET_LINKER_FILE_DIR + \ TARGET_LINKER_FILE_NAME + \ TARGET_LINKER_FILE_PREFIX + \ TARGET_LINKER_FILE_SUFFIX + \ TARGET_LINKER_IMPORT_FILE + \ TARGET_LINKER_IMPORT_FILE_BASE_NAME + \ TARGET_LINKER_IMPORT_FILE_DIR + \ TARGET_LINKER_IMPORT_FILE_NAME + \ TARGET_LINKER_IMPORT_FILE_PREFIX + \ TARGET_LINKER_IMPORT_FILE_SUFFIX + \ TARGET_LINKER_LIBRARY_FILE + \ TARGET_LINKER_LIBRARY_FILE_BASE_NAME + \ TARGET_LINKER_LIBRARY_FILE_DIR + \ TARGET_LINKER_LIBRARY_FILE_NAME + \ TARGET_LINKER_LIBRARY_FILE_PREFIX + \ TARGET_LINKER_LIBRARY_FILE_SUFFIX + \ TARGET_NAME_IF_EXISTS + \ TARGET_OBJECTS + \ TARGET_PDB_FILE + \ TARGET_PDB_FILE_BASE_NAME + \ TARGET_PDB_FILE_DIR + \ TARGET_PDB_FILE_NAME + \ TARGET_POLICY + \ TARGET_PROPERTY + \ TARGET_RUNTIME_DLLS + \ TARGET_RUNTIME_DLL_DIRS + \ TARGET_SONAME_FILE + \ TARGET_SONAME_FILE_DIR + \ TARGET_SONAME_FILE_NAME + \ TARGET_SONAME_IMPORT_FILE + \ TARGET_SONAME_IMPORT_FILE_DIR + \ TARGET_SONAME_IMPORT_FILE_NAME + \ TOLOWER + \ TOUPPER + \ TRANSFORM + \ TRANSFORM_APPEND + \ TRANSFORM_REPLACE + \ TRANSFORM_STRIP + \ TRANSFORM_TOLOWER + \ UNKNOWN + \ UPPER_CASE + \ VERBATIM + \ VERSION_EQUAL + \ VERSION_GREATER_EQUAL + \ VERSION_LESS + \ VERSION_LESS_EQUAL + \ WHOLE_ARCHIVE + \ WRONG + \ _LINK_GROUP_USING_ + \ _LINK_LIBRARY_USING_ + \ _POSTFIX + \ _SUPPORTED + +syn case ignore + +syn keyword cmakeCommand + \ add_compile_definitions + \ add_compile_options + \ add_custom_command + \ add_custom_target + \ add_definitions + \ add_dependencies + \ add_executable + \ add_library + \ add_link_options + \ add_subdirectory + \ add_test + \ aux_source_directory + \ block + \ break + \ build_command + \ cmake_file_api + \ cmake_host_system_information + \ cmake_language + \ cmake_minimum_required + \ cmake_parse_arguments + \ cmake_path + \ cmake_policy + \ configure_file + \ continue + \ create_test_sourcelist + \ ctest_build + \ ctest_configure + \ ctest_coverage + \ ctest_empty_binary_directory + \ ctest_memcheck + \ ctest_read_custom_files + \ ctest_run_script + \ ctest_sleep + \ ctest_start + \ ctest_submit + \ ctest_test + \ ctest_update + \ ctest_upload + \ define_property + \ enable_language + \ enable_testing + \ endblock + \ endfunction + \ endmacro + \ execute_process + \ export + \ file + \ find_file + \ find_library + \ find_package + \ find_path + \ find_program + \ fltk_wrap_ui + \ function + \ get_cmake_property + \ get_directory_property + \ get_filename_component + \ get_property + \ get_source_file_property + \ get_target_property + \ get_test_property + \ include + \ include_directories + \ include_external_msproject + \ include_guard + \ include_regular_expression + \ install + \ link_directories + \ list + \ load_cache + \ load_command + \ macro + \ mark_as_advanced + \ math + \ message + \ option + \ project + \ qt_wrap_cpp + \ qt_wrap_ui + \ remove_definitions + \ return + \ separate_arguments + \ set + \ set_directory_properties + \ set_property + \ set_source_files_properties + \ set_target_properties + \ set_tests_properties + \ site_name + \ source_group + \ string + \ target_compile_definitions + \ target_compile_features + \ target_compile_options + \ target_include_directories + \ target_link_directories + \ target_link_libraries + \ target_link_options + \ target_precompile_headers + \ target_sources + \ try_compile + \ try_run + \ unset + \ variable_watch + \ nextgroup=cmakeArguments + +syn keyword cmakeCommandConditional + \ else + \ elseif + \ endif + \ if + \ nextgroup=cmakeArguments + +syn keyword cmakeCommandRepeat + \ endforeach + \ endwhile + \ foreach + \ while + \ nextgroup=cmakeArguments + +syn keyword cmakeCommandDeprecated + \ build_name + \ exec_program + \ export_library_dependencies + \ install_files + \ install_programs + \ install_targets + \ link_libraries + \ make_directory + \ output_required_files + \ remove + \ subdir_depends + \ subdirs + \ use_mangled_mesa + \ utility_source + \ variable_requires + \ write_file + \ nextgroup=cmakeArguments + +syn case match + +syn keyword cmakeTodo + \ TODO FIXME XXX + \ contained + +hi def link cmakeBracketArgument String +hi def link cmakeBracketComment Comment +hi def link cmakeCommand Function +hi def link cmakeCommandConditional Conditional +hi def link cmakeCommandDeprecated WarningMsg +hi def link cmakeCommandRepeat Repeat +hi def link cmakeComment Comment +hi def link cmakeEnvironment Special +hi def link cmakeEscaped Special +hi def link cmakeGeneratorExpression WarningMsg +hi def link cmakeGeneratorExpressions Constant +hi def link cmakeModule Include +hi def link cmakeProperty Constant +hi def link cmakeRegistry Underlined +hi def link cmakeString String +hi def link cmakeTodo TODO +hi def link cmakeVariableValue Type +hi def link cmakeVariable Identifier + +hi def link cmakeKWExternalProject ModeMsg +hi def link cmakeKWFetchContent ModeMsg +hi def link cmakeKWadd_compile_definitions ModeMsg +hi def link cmakeKWadd_compile_options ModeMsg +hi def link cmakeKWadd_custom_command ModeMsg +hi def link cmakeKWadd_custom_target ModeMsg +hi def link cmakeKWadd_definitions ModeMsg +hi def link cmakeKWadd_dependencies ModeMsg +hi def link cmakeKWadd_executable ModeMsg +hi def link cmakeKWadd_library ModeMsg +hi def link cmakeKWadd_link_options ModeMsg +hi def link cmakeKWadd_subdirectory ModeMsg +hi def link cmakeKWadd_test ModeMsg +hi def link cmakeKWblock ModeMsg +hi def link cmakeKWbuild_command ModeMsg +hi def link cmakeKWcmake_file_api ModeMsg +hi def link cmakeKWcmake_host_system_information ModeMsg +hi def link cmakeKWcmake_language ModeMsg +hi def link cmakeKWcmake_minimum_required ModeMsg +hi def link cmakeKWcmake_parse_arguments ModeMsg +hi def link cmakeKWcmake_path ModeMsg +hi def link cmakeKWcmake_policy ModeMsg +hi def link cmakeKWconfigure_file ModeMsg +hi def link cmakeKWcreate_test_sourcelist ModeMsg +hi def link cmakeKWctest_build ModeMsg +hi def link cmakeKWctest_configure ModeMsg +hi def link cmakeKWctest_coverage ModeMsg +hi def link cmakeKWctest_memcheck ModeMsg +hi def link cmakeKWctest_run_script ModeMsg +hi def link cmakeKWctest_start ModeMsg +hi def link cmakeKWctest_submit ModeMsg +hi def link cmakeKWctest_test ModeMsg +hi def link cmakeKWctest_update ModeMsg +hi def link cmakeKWctest_upload ModeMsg +hi def link cmakeKWdefine_property ModeMsg +hi def link cmakeKWdoxygen_add_docs ModeMsg +hi def link cmakeKWenable_language ModeMsg +hi def link cmakeKWenable_testing ModeMsg +hi def link cmakeKWexec_program ModeMsg +hi def link cmakeKWexecute_process ModeMsg +hi def link cmakeKWexport ModeMsg +hi def link cmakeKWexport_library_dependencies ModeMsg +hi def link cmakeKWfile ModeMsg +hi def link cmakeKWfind_file ModeMsg +hi def link cmakeKWfind_library ModeMsg +hi def link cmakeKWfind_package ModeMsg +hi def link cmakeKWfind_path ModeMsg +hi def link cmakeKWfind_program ModeMsg +hi def link cmakeKWfltk_wrap_ui ModeMsg +hi def link cmakeKWforeach ModeMsg +hi def link cmakeKWfunction ModeMsg +hi def link cmakeKWget_cmake_property ModeMsg +hi def link cmakeKWget_directory_property ModeMsg +hi def link cmakeKWget_filename_component ModeMsg +hi def link cmakeKWget_property ModeMsg +hi def link cmakeKWget_source_file_property ModeMsg +hi def link cmakeKWget_target_property ModeMsg +hi def link cmakeKWget_test_property ModeMsg +hi def link cmakeKWif ModeMsg +hi def link cmakeKWinclude ModeMsg +hi def link cmakeKWinclude_directories ModeMsg +hi def link cmakeKWinclude_external_msproject ModeMsg +hi def link cmakeKWinclude_guard ModeMsg +hi def link cmakeKWinstall ModeMsg +hi def link cmakeKWinstall_files ModeMsg +hi def link cmakeKWinstall_programs ModeMsg +hi def link cmakeKWinstall_targets ModeMsg +hi def link cmakeKWlink_directories ModeMsg +hi def link cmakeKWlist ModeMsg +hi def link cmakeKWload_cache ModeMsg +hi def link cmakeKWload_command ModeMsg +hi def link cmakeKWmacro ModeMsg +hi def link cmakeKWmark_as_advanced ModeMsg +hi def link cmakeKWmath ModeMsg +hi def link cmakeKWmessage ModeMsg +hi def link cmakeKWoption ModeMsg +hi def link cmakeKWproject ModeMsg +hi def link cmakeKWqt_wrap_cpp ModeMsg +hi def link cmakeKWqt_wrap_ui ModeMsg +hi def link cmakeKWremove ModeMsg +hi def link cmakeKWreturn ModeMsg +hi def link cmakeKWseparate_arguments ModeMsg +hi def link cmakeKWset ModeMsg +hi def link cmakeKWset_directory_properties ModeMsg +hi def link cmakeKWset_property ModeMsg +hi def link cmakeKWset_source_files_properties ModeMsg +hi def link cmakeKWset_target_properties ModeMsg +hi def link cmakeKWset_tests_properties ModeMsg +hi def link cmakeKWsite_name ModeMsg +hi def link cmakeKWsource_group ModeMsg +hi def link cmakeKWstring ModeMsg +hi def link cmakeKWsubdirs ModeMsg +hi def link cmakeKWtarget_compile_definitions ModeMsg +hi def link cmakeKWtarget_compile_features ModeMsg +hi def link cmakeKWtarget_compile_options ModeMsg +hi def link cmakeKWtarget_include_directories ModeMsg +hi def link cmakeKWtarget_link_directories ModeMsg +hi def link cmakeKWtarget_link_libraries ModeMsg +hi def link cmakeKWtarget_link_options ModeMsg +hi def link cmakeKWtarget_precompile_headers ModeMsg +hi def link cmakeKWtarget_sources ModeMsg +hi def link cmakeKWtry_compile ModeMsg +hi def link cmakeKWtry_run ModeMsg +hi def link cmakeKWunset ModeMsg +hi def link cmakeKWuse_mangled_mesa ModeMsg +hi def link cmakeKWvariable_requires ModeMsg +hi def link cmakeKWvariable_watch ModeMsg +hi def link cmakeKWwrite_file ModeMsg + +" Manually added - difficult to parse out of documentation +syn case ignore + +syn keyword cmakeCommandManuallyAdded + \ configure_package_config_file write_basic_package_version_file + \ nextgroup=cmakeArguments + +syn case match + +syn keyword cmakeKWconfigure_package_config_file contained + \ INSTALL_DESTINATION PATH_VARS NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO INSTALL_PREFIX + +syn keyword cmakeKWconfigure_package_config_file_constants contained + \ AnyNewerVersion SameMajorVersion SameMinorVersion ExactVersion + +syn keyword cmakeKWwrite_basic_package_version_file contained + \ VERSION COMPATIBILITY + +hi def link cmakeCommandManuallyAdded Function + +hi def link cmakeKWconfigure_package_config_file ModeMsg +hi def link cmakeKWwrite_basic_package_version_file ModeMsg +hi def link cmakeKWconfigure_package_config_file_constants Constant + +let b:current_syntax = "cmake" + +let &cpo = s:keepcpo +unlet s:keepcpo + +" vim: set nowrap: diff --git a/.config/vim/syntax/cmakecache.vim b/.config/vim/syntax/cmakecache.vim new file mode 100644 index 0000000..f07c719 --- /dev/null +++ b/.config/vim/syntax/cmakecache.vim @@ -0,0 +1,60 @@ +" Vim syntax file +" Language: cmakecache - CMakeCache.txt files generated by CMake +" Author: bfrg +" Upstream: https://github.com/bfrg/vim-cmakecache-syntax +" Last Change: Nov 28, 2019 +" License: Same as Vim itself (see :h license) + +if exists('b:current_syntax') + finish +endif + +let s:cpo_save = &cpoptions +set cpoptions&vim + +" Comments start with # or // +syntax region CMakeCacheComment start="#\|//" end="$" + +" Match 'key' in key:type=value +syntax match CMakeCacheKey "^\s*\w\+\(-ADVANCED\)\=:"me=e-1 + +" Highlight 'str' in key:STRING=str (many thanks to Nickspoons in #vim!) +syntax region CMakeCacheStringVar matchgroup=CMakeCacheType start=":STRING="ms=s+1,rs=e-1 end="$" contains=CMakeCacheString keepend +syntax region CMakeCacheString start="="ms=s+1 end="$" contained + +" Highlight boolean 'value' in key:BOOL=value +syntax region CMakeCacheBoolVar matchgroup=CMakeCacheType start=":BOOL="ms=s+1,rs=e-1 end="$" contains=CMakeCacheBool keepend +syntax region CMakeCacheBool start="="ms=s+1 end="$" contained + +" Highlight 'path' in key:PATH=path +syntax region CMakeCachePathVar matchgroup=CMakeCacheType start=":PATH="ms=s+1,rs=e-1 end="$" contains=CMakeCachePath keepend +syntax region CMakeCachePath start="="ms=s+1 end="$" contained + +" Highlight 'file' in key:FILEPATH=file +syntax region CMakeCacheFilePathVar matchgroup=CMakeCacheType start=":FILEPATH="ms=s+1,rs=e-1 end="$" contains=CMakeCacheFilePath keepend +syntax region CMakeCacheFilePath start="="ms=s+1 end="$" contained + +" Highlight 'value' in key:STATIC=value +syntax region CMakeCacheStaticVar matchgroup=CMakeCacheType start=":STATIC="ms=s+1,rs=e-1 end="$" contains=CMakeCacheStatic keepend +syntax region CMakeCacheStatic start="="ms=s+1 end="$" contained + +" Highlight 'value' in key:Internal=value +syntax region CMakeCacheInternalVar matchgroup=CMakeCacheType start=":INTERNAL="ms=s+1,rs=e-1 end="$" contains=CMakeCacheInternal keepend +syntax region CMakeCacheInternal start="="ms=s+1 end="$" contained + +hi def link CMakeCacheComment Comment +hi def link CMakeCacheKey Identifier +hi def link CMakeCacheString String +hi def link CMakeCacheBool Constant +hi def link CMakeCachePath Directory +hi def link CMakeCacheFilePath Normal +hi def link CMakeCacheStatic Normal +hi def link CMakeCacheInternal Normal + +" Highlight 'type' in key:type=value +hi def link CMakeCacheType Type + +let b:current_syntax = 'cmakecache' + +let &cpoptions = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/cmod.vim b/.config/vim/syntax/cmod.vim new file mode 100644 index 0000000..ea37682 --- /dev/null +++ b/.config/vim/syntax/cmod.vim @@ -0,0 +1,144 @@ +" Vim syntax file +" Language: Cmod +" Current Maintainer: Stephen R. van den Berg +" Last Change: 2018 Jan 23 +" Version: 2.9 +" Remark: Is used to edit Cmod files for Pike development. +" Remark: Includes a highlighter for any embedded Autodoc format. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Read the C syntax to start with +runtime! syntax/c.vim +unlet b:current_syntax + +if !exists("c_autodoc") + " For embedded Autodoc documentation + syn include @cmodAutodoc :p:h/autodoc.vim + unlet b:current_syntax +endif + +" Supports rotating amongst several same-level preprocessor conditionals +packadd! matchit +let b:match_words = "({:}\\@1<=),^\s*#\s*\%(if\%(n\?def\)\|else\|el\%(se\)\?if\|endif\)\>" + +" Cmod extensions +syn keyword cmodStatement __INIT INIT EXIT GC_RECURSE GC_CHECK +syn keyword cmodStatement EXTRA OPTIMIZE RETURN +syn keyword cmodStatement ADD_EFUN ADD_EFUN2 ADD_FUNCTION +syn keyword cmodStatement MK_STRING MK_STRING_SVALUE CONSTANT_STRLEN + +syn keyword cmodStatement SET_SVAL pop_n_elems pop_stack +syn keyword cmodStatement SIMPLE_ARG_TYPE_ERROR Pike_sp Pike_fp MKPCHARP +syn keyword cmodStatement SET_SVAL_TYPE REF_MAKE_CONST_STRING INC_PCHARP +syn keyword cmodStatement PTR_FROM_INT INHERIT_FROM_PTR +syn keyword cmodStatement DECLARE_CYCLIC BEGIN_CYCLIC END_CYCLIC +syn keyword cmodStatement UPDATE_LOCATION UNSAFE_IS_ZERO SAFE_IS_ZERO +syn keyword cmodStatement MKPCHARP_STR APPLY_MASTER current_storage +syn keyword cmodStatement PIKE_MAP_VARIABLE size_shift +syn keyword cmodStatement THREADS_ALLOW THREADS_DISALLOW + +syn keyword cmodStatement add_integer_constant ref_push_object +syn keyword cmodStatement push_string apply_svalue free_svalue +syn keyword cmodStatement get_inherit_storage get_storage +syn keyword cmodStatement make_shared_binary_string push_int64 +syn keyword cmodStatement begin_shared_string end_shared_string +syn keyword cmodStatement add_ref fast_clone_object clone_object +syn keyword cmodStatement push_undefined push_int ref_push_string +syn keyword cmodStatement free_string push_ulongest free_object +syn keyword cmodStatement convert_stack_top_to_bignum push_array +syn keyword cmodStatement push_object reduce_stack_top_bignum +syn keyword cmodStatement push_static_text apply_current +syn keyword cmodStatement assign_svalue free_program destruct_object +syn keyword cmodStatement start_new_program low_inherit stack_swap +syn keyword cmodStatement generic_error_program end_program +syn keyword cmodStatement free_array apply_external copy_mapping +syn keyword cmodStatement push_constant_text ref_push_mapping +syn keyword cmodStatement mapping_insert mapping_string_insert_string +syn keyword cmodStatement f_aggregate_mapping f_aggregate apply +syn keyword cmodStatement push_mapping push_svalue low_mapping_lookup +syn keyword cmodStatement assign_svalues_no_free f_add +syn keyword cmodStatement push_empty_string stack_dup assign_lvalue +syn keyword cmodStatement low_mapping_string_lookup allocate_mapping +syn keyword cmodStatement copy_shared_string make_shared_binary_string0 +syn keyword cmodStatement f_call_function f_index f_utf8_to_string +syn keyword cmodStatement finish_string_builder init_string_builder +syn keyword cmodStatement reset_string_builder free_string_builder +syn keyword cmodStatement string_builder_putchar get_all_args +syn keyword cmodStatement add_shared_strings check_all_args +syn keyword cmodStatement do_inherit add_string_constant +syn keyword cmodStatement add_program_constant set_init_callback +syn keyword cmodStatement simple_mapping_string_lookup +syn keyword cmodStatement f_sprintf push_text string_has_null +syn keyword cmodStatement end_and_resize_shared_string + +syn keyword cmodStatement args sp + +syn keyword cmodStatement free + +syn keyword cmodConstant ID_PROTECTED ID_FINAL PIKE_DEBUG +syn keyword cmodConstant NUMBER_NUMBER +syn keyword cmodConstant PIKE_T_INT PIKE_T_STRING PIKE_T_ARRAY +syn keyword cmodConstant PIKE_T_MULTISET PIKE_T_OBJECT PIKE_T_MAPPING +syn keyword cmodConstant NUMBER_UNDEFINED PIKE_T_PROGRAM PIKE_T_FUNCTION +syn keyword cmodConstant T_OBJECT T_STRING T_ARRAY T_MAPPING + +syn keyword cmodException SET_ONERROR UNSET_ONERROR ONERROR +syn keyword cmodException CALL_AND_UNSET_ONERROR + +syn keyword cmodDebug Pike_fatal Pike_error check_stack + +syn keyword cmodAccess public protected private INHERIT +syn keyword cmodAccess CTYPE CVAR PIKEVAR PIKEFUN + +syn keyword cmodModifier efun export flags optflags optfunc +syn keyword cmodModifier type rawtype errname name c_name prototype +syn keyword cmodModifier program_flags gc_trivial PMOD_EXPORT +syn keyword cmodModifier ATTRIBUTE noclone noinline +syn keyword cmodModifier tOr tFuncV tInt tMix tVoid tStr tMap tPrg +syn keyword cmodModifier tSetvar tArr tMult tMultiset +syn keyword cmodModifier tArray tMapping tString tSetvar tVar + +syn keyword cmodType bool mapping string multiset array mixed +syn keyword cmodType object function program auto svalue +syn keyword cmodType bignum longest zero pike_string +syn keyword cmodType this this_program THIS INT_TYPE INT64 INT32 +syn keyword cmodType p_wchar2 PCHARP p_wchar1 p_wchar0 MP_INT + +syn keyword cmodOperator _destruct create __hash _sizeof _indices _values +syn keyword cmodOperator _is_type _sprintf _equal _m_delete _get_iterator +syn keyword cmodOperator _search _types _serialize _deserialize +syn keyword cmodOperator _size_object _random _sqrt TYPEOF SUBTYPEOF +syn keyword cmodOperator LIKELY UNLIKELY + +syn keyword cmodStructure DECLARATIONS PIKECLASS DECLARE_STORAGE + +if !exists("c_autodoc") + syn match cmodAutodocReal display contained "\%(//\|[/ \t\v]\*\|^\*\)\@2<=!.*" contains=@cmodAutodoc containedin=cComment,cCommentL + syn cluster cCommentGroup add=cmodAutodocReal + syn cluster cPreProcGroup add=cmodAutodocReal +endif + +" Default highlighting +hi def link cmodAccess Statement +hi def link cmodOperator Operator +hi def link cmodStatement Statement +hi def link cmodConstant Constant +hi def link cmodModifier Type +hi def link cmodType Type +hi def link cmodStorageClass StorageClass +hi def link cmodStructure Structure +hi def link cmodException Exception +hi def link cmodDebug Debug + +let b:current_syntax = "cmod" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8 diff --git a/.config/vim/syntax/cmusrc.vim b/.config/vim/syntax/cmusrc.vim new file mode 100644 index 0000000..b821aff --- /dev/null +++ b/.config/vim/syntax/cmusrc.vim @@ -0,0 +1,309 @@ +" Vim syntax file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2007-06-17 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +setlocal iskeyword+=- + +syn keyword cmusrcTodo contained TODO FIXME XXX NOTE + +syn match cmusrcComment contained display '^\s*#.*$' + +syn match cmusrcBegin display '^' + \ nextgroup=cmusrcKeyword,cmusrcComment + \ skipwhite + +syn keyword cmusrcKeyword contained add + \ nextgroup=cmusrcAddSwitches,cmusrcURI + \ skipwhite + +syn match cmusrcAddSwitches contained display '-[lpqQ]' + \ nextgroup=cmusrcURI + \ skipwhite + +syn match cmusrcURI contained display '.\+' + +syn keyword cmusrcKeyword contained bind + \ nextgroup=cmusrcBindSwitches, + \ cmusrcBindContext + \ skipwhite + +syn match cmusrcBindSwitches contained display '-[f]' + \ nextgroup=cmusrcBindContext + \ skipwhite + +syn keyword cmusrcBindContext contained common library playlist queue + \ browser filters + \ nextgroup=cmusrcBindKey + \ skipwhite + +syn match cmusrcBindKey contained display '\S\+' + \ nextgroup=cmusrcKeyword + \ skipwhite + +syn keyword cmusrcKeyword contained browser-up colorscheme echo factivate + \ filter invert player-next player-pause + \ player-play player-prev player-stop quit + \ refresh run search-next search-prev shuffle + \ unmark win-activate win-add-l win-add-p + \ win-add-Q win-add-q win-bottom win-down + \ win-mv-after win-mv-before win-next + \ win-page-down win-page-up win-remove + \ win-sel-cur win-toggle win-top win-up + \ win-update + +syn keyword cmusrcKeyword contained cd + \ nextgroup=cmusrcDirectory + \ skipwhite + +syn match cmusrcDirectory contained display '.\+' + +syn keyword cmusrcKeyword contained clear + \ nextgroup=cmusrcClearSwitches + +syn match cmusrcClearSwitches contained display '-[lpq]' + +syn keyword cmusrcKeyword contained fset + \ nextgroup=cmusrcFSetName + \ skipwhite + +syn match cmusrcFSetName contained display '[^=]\+' + \ nextgroup=cmusrcFSetEq + +syn match cmusrcFSetEq contained display '=' + \ nextgroup=cmusrcFilterExpr + +syn match cmusrcFilterExpr contained display '.\+' + +syn keyword cmusrcKeyword contained load + \ nextgroup=cmusrcLoadSwitches,cmusrcURI + \ skipwhite + +syn match cmusrcLoadSwitches contained display '-[lp]' + \ nextgroup=cmusrcURI + \ skipwhite + +syn keyword cmusrcKeyword contained mark + \ nextgroup=cmusrcFilterExpr + +syn keyword cmusrcKeyword contained save + \ nextgroup=cmusrcSaveSwitches,cmusrcFile + \ skipwhite + +syn match cmusrcSaveSwitches contained display '-[lp]' + \ nextgroup=cmusrcFile + \ skipwhite + +syn match cmusrcFile contained display '.\+' + +syn keyword cmusrcKeyword contained seek + \ nextgroup=cmusrcSeekOffset + \ skipwhite + +syn match cmusrcSeekOffset contained display + \ '[+-]\=\%(\d\+[mh]\=\|\%(\%(0\=\d\|[1-5]\d\):\)\=\%(0\=\d\|[1-5]\d\):\%(0\=\d\|[1-5]\d\)\)' + +syn keyword cmusrcKeyword contained set + \ nextgroup=cmusrcOption + \ skipwhite + +syn keyword cmusrcOption contained auto_reshuffle confirm_run + \ continue play_library play_sorted repeat + \ show_hidden show_remaining_time shuffle + \ nextgroup=cmusrcSetTest,cmusrcOptEqBoolean + +syn match cmusrcSetTest contained display '?' + +syn match cmusrcOptEqBoolean contained display '=' + \ nextgroup=cmusrcOptBoolean + +syn keyword cmusrcOptBoolean contained true false + +syn keyword cmusrcOption contained aaa_mode + \ nextgroup=cmusrcOptEqAAA + +syn match cmusrcOptEqAAA contained display '=' + \ nextgroup=cmusrcOptAAA + +syn keyword cmusrcOptAAA contained all artist album + +syn keyword cmusrcOption contained buffer_seconds + \ nextgroup=cmusrcOptEqNumber + +syn match cmusrcOptEqNumber contained display '=' + \ nextgroup=cmusrcOptNumber + +syn match cmusrcOptNumber contained display '\d\+' + +syn keyword cmusrcOption contained altformat_current altformat_playlist + \ altformat_title altformat_trackwin + \ format_current format_playlist format_title + \ format_trackwin + \ nextgroup=cmusrcOptEqFormat + +syn match cmusrcOptEqFormat contained display '=' + \ nextgroup=cmusrcOptFormat + +syn match cmusrcOptFormat contained display '.\+' + \ contains=cmusrcFormatSpecial + +syn match cmusrcFormatSpecial contained display '%[0-]*\d*[alDntgydfF=%]' + +syn keyword cmusrcOption contained color_cmdline_bg color_cmdline_fg + \ color_error color_info color_separator + \ color_statusline_bg color_statusline_fg + \ color_titleline_bg color_titleline_fg + \ color_win_bg color_win_cur + \ color_win_cur_sel_bg color_win_cur_sel_fg + \ color_win_dir color_win_fg + \ color_win_inactive_cur_sel_bg + \ color_win_inactive_cur_sel_fg + \ color_win_inactive_sel_bg + \ color_win_inactive_sel_fg + \ color_win_sel_bg color_win_sel_fg + \ color_win_title_bg color_win_title_fg + \ nextgroup=cmusrcOptEqColor + +syn match cmusrcOptEqColor contained display '=' + \ nextgroup=@cmusrcOptColor + +syn cluster cmusrcOptColor contains=cmusrcOptColorName,cmusrcOptColorValue + +syn keyword cmusrcOptColorName contained default black red green yellow blue + \ magenta cyan gray darkgray lightred lightred + \ lightgreen lightyellow lightblue lightmagenta + \ lightcyan white + +syn match cmusrcOptColorValue contained display + \ '-1\|0*\%(\d\|[1-9]\d\|1\d\d\|2\%([0-4]\d\|5[0-5]\)\)' + +syn keyword cmusrcOption contained id3_default_charset output_plugin + \ status_display_program + \ nextgroup=cmusrcOptEqString + +syn match cmusrcOption contained + \ '\%(dsp\|mixer\)\.\%(alsa\|oss\|sun\)\.\%(channel\|device\)' + \ nextgroup=cmusrcOptEqString + +syn match cmusrcOption contained + \ 'dsp\.ao\.\%(buffer_size\|driver\|wav_counter\|wav_dir\)' + \ nextgroup=cmusrcOptEqString + +syn match cmusrcOptEqString contained display '=' + \ nextgroup=cmusrcOptString + +syn match cmusrcOptString contained display '.\+' + +syn keyword cmusrcOption contained lib_sort pl_sort + \ nextgroup=cmusrcOptEqSortKeys + +syn match cmusrcOptEqSortKeys contained display '=' + \ nextgroup=cmusrcOptSortKeys + +syn keyword cmusrcOptSortKeys contained artist album title tracknumber + \ discnumber date genre filename + \ nextgroup=cmusrcOptSortKeys + \ skipwhite + +syn keyword cmusrcKeyword contained showbind + \ nextgroup=cmusrcSBindContext + \ skipwhite + +syn keyword cmusrcSBindContext contained common library playlist queue + \ browser filters + \ nextgroup=cmusrcSBindKey + \ skipwhite + +syn match cmusrcSBindKey contained display '\S\+' + +syn keyword cmusrcKeyword contained toggle + \ nextgroup=cmusrcTogglableOpt + \ skipwhite + +syn keyword cmusrcTogglableOpt contained auto_reshuffle aaa_mode + \ confirm_run continue play_library play_sorted + \ repeat show_hidden show_remaining_time shuffle + +syn keyword cmusrcKeyword contained unbind + \ nextgroup=cmusrcUnbindSwitches, + \ cmusrcSBindContext + \ skipwhite + +syn match cmusrcUnbindSwitches contained display '-[f]' + \ nextgroup=cmusrcSBindContext + \ skipwhite + +syn keyword cmusrcKeyword contained view + \ nextgroup=cmusrcView + \ skipwhite + +syn keyword cmusrcView contained library playlist queue browser filters +syn match cmusrcView contained display '[1-6]' + +syn keyword cmusrcKeyword contained vol + \ nextgroup=cmusrcVolume1 + \ skipwhite + +syn match cmusrcVolume1 contained display '[+-]\=\d\+%' + \ nextgroup=cmusrcVolume2 + \ skipwhite + +syn match cmusrcVolume2 contained display '[+-]\=\d\+%' + +hi def link cmusrcTodo Todo +hi def link cmusrcComment Comment +hi def link cmusrcKeyword Keyword +hi def link cmusrcSwitches Special +hi def link cmusrcAddSwitches cmusrcSwitches +hi def link cmusrcURI Normal +hi def link cmusrcBindSwitches cmusrcSwitches +hi def link cmusrcContext Type +hi def link cmusrcBindContext cmusrcContext +hi def link cmusrcKey String +hi def link cmusrcBindKey cmusrcKey +hi def link cmusrcDirectory Normal +hi def link cmusrcClearSwitches cmusrcSwitches +hi def link cmusrcFSetName PreProc +hi def link cmusrcEq Normal +hi def link cmusrcFSetEq cmusrcEq +hi def link cmusrcFilterExpr Normal +hi def link cmusrcLoadSwitches cmusrcSwitches +hi def link cmusrcSaveSwitches cmusrcSwitches +hi def link cmusrcFile Normal +hi def link cmusrcSeekOffset Number +hi def link cmusrcOption PreProc +hi def link cmusrcSetTest Normal +hi def link cmusrcOptBoolean Boolean +hi def link cmusrcOptEqAAA cmusrcEq +hi def link cmusrcOptAAA Identifier +hi def link cmusrcOptEqNumber cmusrcEq +hi def link cmusrcOptNumber Number +hi def link cmusrcOptEqFormat cmusrcEq +hi def link cmusrcOptFormat String +hi def link cmusrcFormatSpecial SpecialChar +hi def link cmusrcOptEqColor cmusrcEq +hi def link cmusrcOptColor Normal +hi def link cmusrcOptColorName cmusrcOptColor +hi def link cmusrcOptColorValue cmusrcOptColor +hi def link cmusrcOptEqString cmusrcEq +hi def link cmusrcOptString Normal +hi def link cmusrcOptEqSortKeys cmusrcEq +hi def link cmusrcOptSortKeys Identifier +hi def link cmusrcSBindContext cmusrcContext +hi def link cmusrcSBindKey cmusrcKey +hi def link cmusrcTogglableOpt cmusrcOption +hi def link cmusrcUnbindSwitches cmusrcSwitches +hi def link cmusrcView Normal +hi def link cmusrcVolume1 Number +hi def link cmusrcVolume2 Number + +let b:current_syntax = "cmusrc" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/cobol.vim b/.config/vim/syntax/cobol.vim new file mode 100644 index 0000000..5d64944 --- /dev/null +++ b/.config/vim/syntax/cobol.vim @@ -0,0 +1,260 @@ +" Vim syntax file +" Language: COBOL +" Maintainer: Ankit Jain +" (formerly Tim Pope ) +" (formerly Davyd Ondrejko ) +" (formerly Sitaram Chamarty and +" James Mitchell ) +" Last Change: 2019 Mar 22 +" Ankit Jain 22.03.2019 Changes & fixes: +" 1. Include inline comments +" 2. Use comment highlight for bad lines +" 3. Change certain 'keywords' to 'matches' +" for additional highlighting +" 4. Different highlighting for COPY, GO TO & +" CALL lines +" 5. Fix for COMP keyword +" 6. Fix for PROCEDURE DIVISION highlighting +" 7. Highlight EXIT PROGRAM like STOP RUN +" 8. Highlight X & A in PIC clause +" Tag: #C22032019 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" MOST important - else most of the keywords wont work! +setlocal isk=@,48-57,-,_ + +if !exists('g:cobol_inline_comment') + let g:cobol_inline_comment=0 +endif + +syn case ignore + +syn cluster cobolStart contains=cobolAreaA,cobolAreaB,cobolComment,cobolCompiler +syn cluster cobolAreaA contains=cobolParagraph,cobolSection,cobolDivision +"syn cluster cobolAreaB contains= +syn cluster cobolAreaAB contains=cobolLine +syn cluster cobolLine contains=cobolReserved +syn match cobolMarker "^\%( \{,5\}[^ ]\)\@=.\{,6}" nextgroup=@cobolStart +syn match cobolSpace "^ \{6\}" nextgroup=@cobolStart +syn match cobolAreaA " \{1,4\}" contained nextgroup=@cobolAreaA,@cobolAreaAB +syn match cobolAreaB " \{5,\}\|- *" contained nextgroup=@cobolAreaB,@cobolAreaAB +syn match cobolComment "[/*C].*$" contained +syn match cobolCompiler "$.*$" contained +syn match cobolLine ".*$" contained contains=cobolReserved,@cobolLine + +"#C22032019: Fix for PROCEDURE DIVISION USING highlighting, removed . from the +"end of the regex +"syn match cobolDivision \"[A-Z][A-Z0-9-]*[A-Z0-9]\s\+DIVISION\."he=e-1 contained contains=cobolDivisionName +syn match cobolDivision "[A-Z][A-Z0-9-]*[A-Z0-9]\s\+DIVISION" contained contains=cobolDivisionName +syn keyword cobolDivisionName contained IDENTIFICATION ENVIRONMENT DATA PROCEDURE +syn match cobolSection "[A-Z][A-Z0-9-]*[A-Z0-9]\s\+SECTION\."he=e-1 contained contains=cobolSectionName +syn keyword cobolSectionName contained CONFIGURATION INPUT-OUTPUT FILE WORKING-STORAGE LOCAL-STORAGE LINKAGE +syn match cobolParagraph "\a[A-Z0-9-]*[A-Z0-9]\.\|\d[A-Z0-9-]*[A-Z]\."he=e-1 contained contains=cobolParagraphName +syn keyword cobolParagraphName contained PROGRAM-ID SOURCE-COMPUTER OBJECT-COMPUTER SPECIAL-NAMES FILE-CONTROL I-O-CONTROL + + +"syn match cobolKeys "^\a\{1,6\}" contains=cobolReserved +"#C22032019: Remove BY, REPLACING, PROGRAM, TO, IN from 'keyword' group and add +"to 'match' group or other 'keyword' group +syn keyword cobolReserved contained ACCEPT ACCESS ADD ADDRESS ADVANCING AFTER ALPHABET ALPHABETIC +syn keyword cobolReserved contained ALPHABETIC-LOWER ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED ALS +syn keyword cobolReserved contained ALTERNATE AND ANY ARE AREA AREAS ASCENDING ASSIGN AT AUTHOR BEFORE BINARY +syn keyword cobolReserved contained BLANK BLOCK BOTTOM CANCEL CBLL CD CF CH CHARACTER CHARACTERS CLASS +syn keyword cobolReserved contained CLOCK-UNITS CLOSE COBOL CODE CODE-SET COLLATING COLUMN COMMA COMMON +syn keyword cobolReserved contained COMMUNICATIONS COMPUTATIONAL COMPUTE CONTENT CONTINUE +syn keyword cobolReserved contained CONTROL CONVERTING CORR CORRESPONDING COUNT CURRENCY DATE DATE-COMPILED +syn keyword cobolReserved contained DATE-WRITTEN DAY DAY-OF-WEEK DE DEBUG-CONTENTS DEBUG-ITEM DEBUG-LINE +syn keyword cobolReserved contained DEBUG-NAME DEBUG-SUB-1 DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING DECIMAL-POINT +syn keyword cobolReserved contained DELARATIVES DELETE DELIMITED DELIMITER DEPENDING DESCENDING DESTINATION +syn keyword cobolReserved contained DETAIL DISABLE DISPLAY DIVIDE DIVISION DOWN DUPLICATES DYNAMIC EGI ELSE EMI +syn keyword cobolReserved contained ENABLE END-ADD END-COMPUTE END-DELETE END-DIVIDE END-EVALUATE END-IF +syn keyword cobolReserved contained END-MULTIPLY END-OF-PAGE END-READ END-RECEIVE END-RETURN +syn keyword cobolReserved contained END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT END-UNSTRING +syn keyword cobolReserved contained END-WRITE EQUAL ERROR ESI EVALUATE EVERY EXCEPTION EXIT +syn keyword cobolReserved contained EXTEND EXTERNAL FALSE FD FILLER FINAL FIRST FOOTING FOR FROM +syn keyword cobolReserved contained GENERATE GIVING GLOBAL GREATER GROUP HEADING HIGH-VALUE HIGH-VALUES I-O +syn keyword cobolReserved contained INDEX INDEXED INDICATE INITIAL INITIALIZE +syn keyword cobolReserved contained INITIATE INPUT INSPECT INSTALLATION INTO IS JUST +syn keyword cobolReserved contained JUSTIFIED KEY LABEL LAST LEADING LEFT LENGTH LOCK MEMORY +syn keyword cobolReserved contained MERGE MESSAGE MODE MODULES MOVE MULTIPLE MULTIPLY NATIVE NEGATIVE NEXT NO NOT +syn keyword cobolReserved contained NUMBER NUMERIC NUMERIC-EDITED OCCURS OF OFF OMITTED ON OPEN +syn keyword cobolReserved contained OPTIONAL OR ORDER ORGANIZATION OTHER OUTPUT OVERFLOW PACKED-DECIMAL PADDING +syn keyword cobolReserved contained PAGE PAGE-COUNTER PERFORM PF PH PIC PICTURE PLUS POINTER POSITION POSITIVE +syn keyword cobolReserved contained PRINTING PROCEDURES PROCEDD PURGE QUEUE QUOTES +syn keyword cobolReserved contained RANDOM RD READ RECEIVE RECORD RECORDS REDEFINES REEL REFERENCE REFERENCES +syn keyword cobolReserved contained RELATIVE RELEASE REMAINDER REMOVAL REPLACE REPORT REPORTING +syn keyword cobolReserved contained REPORTS RERUN RESERVE RESET RETURN RETURNING REVERSED REWIND REWRITE RF RH +syn keyword cobolReserved contained RIGHT ROUNDED RUN SAME SD SEARCH SECTION SECURITY SEGMENT SEGMENT-LIMITED +syn keyword cobolReserved contained SELECT SEND SENTENCE SEPARATE SEQUENCE SEQUENTIAL SET SIGN SIZE SORT +syn keyword cobolReserved contained SORT-MERGE SOURCE STANDARD +syn keyword cobolReserved contained STANDARD-1 STANDARD-2 START STATUS STOP STRING SUB-QUEUE-1 SUB-QUEUE-2 +syn keyword cobolReserved contained SUB-QUEUE-3 SUBTRACT SUM SUPPRESS SYMBOLIC SYNC SYNCHRONIZED TABLE TALLYING +syn keyword cobolReserved contained TAPE TERMINAL TERMINATE TEST TEXT THAN THEN THROUGH THRU TIME TIMES TOP +syn keyword cobolReserved contained TRAILING TRUE TYPE UNIT UNSTRING UNTIL UP UPON USAGE USE USING VALUE VALUES +syn keyword cobolReserved contained VARYING WHEN WITH WORDS WRITE +syn match cobolReserved contained "\" +syn match cobolReserved contained "\<\(IF\|INVALID\|END\|EOP\)\>" +syn match cobolReserved contained "\" +" #C22032019: Add BY as match instead of keyword: BY not followed by == +syn match cobolReserved contained "\\s\+\(==\)\@!" +syn match cobolReserved contained "\" + +syn cluster cobolLine add=cobolConstant,cobolNumber,cobolPic +syn keyword cobolConstant SPACE SPACES NULL ZERO ZEROES ZEROS LOW-VALUE LOW-VALUES + +" #C22032019: Fix for many pic clauses +syn match cobolNumber "\<-\=\d*\.\=\d\+\>" contained +" syn match cobolPic \"\" contained +syn match cobolPic "\" contained +syn match cobolPic "\<$*\.\=9\+\>" contained +syn match cobolPic "\" contained +syn match cobolPic "\" contained +syn match cobolPic "\<9\+V\>" contained +" syn match cobolPic \"\<-\+[Z9]\+\>" contained +syn match cobolPic "\<-*[Z9]\+-*\>" contained +" #C22032019: Add Z,X and A to cobolPic +syn match cobolPic "\<[ZXA]\+\>" contained +syn match cobolTodo "todo" contained containedin=cobolInlineComment,cobolComment + +" For MicroFocus or other inline comments, include this line. +if g:cobol_inline_comment == 1 + syn region cobolInlineComment start="*>" end="$" contains=cobolTodo,cobolMarker + syn cluster cobolLine add=cobolInlineComment +endif + +syn match cobolBadLine "[^ D\*$/-].*" contained + +" If comment mark somehow gets into column past Column 7. +if g:cobol_inline_comment == 1 + " #C22032019: It is a bad line only if * is not followed by > when inline + " comments enabled + syn match cobolBadLine "\s\+\*\(>\)\@!.*" contained +else + syn match cobolBadLine "\s\+\*.*" contained +endif +syn cluster cobolStart add=cobolBadLine + +" #C22032019: Different highlighting for GO TO statements +" syn keyword cobolGoTo GO GOTO +syn keyword cobolGoTo GOTO +syn match cobolGoTo /\\s\+\/ +syn match cobolGoToPara /\\s\+\\s\+[A-Z0-9-]\+/ contains=cobolGoTo +" #C22032019: Highlight copybook name and location in using different group +" syn keyword cobolCopy COPY +syn match cobolCopy "\\|\" +syn match cobolCopy "\\s\+\(==\)\@=" +syn match cobolCopy "\\s\+\(==\)\@=" +syn match cobolCopyName "\\s\+[A-Z0-9]\+\(\s\+\\s\+[A-Z0-9]\+\)\?" contains=cobolCopy +syn cluster cobolLine add=cobolGoToPara,cobolCopyName + +" cobolBAD: things that are BAD NEWS! +syn keyword cobolBAD ALTER ENTER RENAMES + +syn cluster cobolLine add=cobolGoTo,cobolCopy,cobolBAD,cobolWatch,cobolEXECs + +" cobolWatch: things that are important when trying to understand a program +syn keyword cobolWatch OCCURS DEPENDING VARYING BINARY COMP REDEFINES +" #C22032019: Remove REPLACING from cobolWatch 'keyword' group and add to cobolCopy & +" cobolWatch 'match' group +" syn keyword cobolWatch REPLACING RUN +syn keyword cobolWatch RUN PROGRAM +syn match cobolWatch contained "\\s\+\(==\)\@!" +" #C22032019: Look for word starting with COMP +" syn match cobolWatch \"COMP-[123456XN]" +syn match cobolWatch "\" +syn match cobolCALLProg /\\s\+"\{0,1\}[A-Z0-9]\+"\{0,1\}/ contains=cobolCALLs +syn match cobolExtras /\ +" Last Change: 2022 Jun 14 +" Remark: Coco/R syntax partially implemented. +" License: Vim license + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn keyword cocoKeywords ANY CHARACTERS COMMENTS COMPILER CONTEXT END FROM IF IGNORE IGNORECASE NESTED PRAGMAS PRODUCTIONS SYNC TO TOKENS WEAK +syn match cocoUnilineComment #//.*$# +syn match cocoIdentifier /[[:alpha:]][[:alnum:]]*/ +syn region cocoMultilineComment start=#/[*]# end=#[*]/# +syn region cocoString start=/"/ skip=/\\"\|\\\\/ end=/"/ +syn region cocoCharacter start=/'/ skip=/\\'\|\\\\/ end=/'/ +syn match cocoOperator /+\||\|\.\.\|-\|(\|)\|{\|}\|\[\|\]\|=\|<\|>/ +syn region cocoProductionCode start=/([.]/ end=/[.])/ +syn match cocoPragma /[$][[:alnum:]]*/ + +hi def link cocoKeywords Keyword +hi def link cocoUnilineComment Comment +hi def link cocoMultilineComment Comment +hi def link cocoIdentifier Identifier +hi def link cocoString String +hi def link cocoCharacter Character +hi def link cocoOperator Operator +hi def link cocoProductionCode Statement +hi def link cocoPragma Special + +let b:current_syntax = 'coco' diff --git a/.config/vim/syntax/codeowners.vim b/.config/vim/syntax/codeowners.vim new file mode 100644 index 0000000..7370220 --- /dev/null +++ b/.config/vim/syntax/codeowners.vim @@ -0,0 +1,23 @@ +" Vim syntax file +" Language: codeowners +" Maintainer: Jon Parise +" Last Change: 2025 Sep 14 + +if exists('b:current_syntax') + finish +endif + +" Comments +syn match codeownersComment /#.*$/ contains=codeownersTodo,@Spell +syn keyword codeownersTodo TODO FIXME XXX contained + +" Patterns +syn match codeownersPattern /^#\@![^#]*/ contains=codeownersGlob +syn match codeownersGlob /^\S\+/ contained nextgroup=codeownersOwner skipwhite +syn match codeownersOwner /\S\+/ contained nextgroup=codeownersOwner skipwhite + +hi def link codeownersComment Comment +hi def link codeownersOwner Identifier +hi def link codeownersTodo Todo + +let b:current_syntax = 'codeowners' diff --git a/.config/vim/syntax/colortest.vim b/.config/vim/syntax/colortest.vim new file mode 100644 index 0000000..1dd860c --- /dev/null +++ b/.config/vim/syntax/colortest.vim @@ -0,0 +1,82 @@ +" Vim script for testing colors +" Maintainer: The Vim Project +" Contributors: Rafael Garcia-Suarez, Charles Campbell +" Last Change: 2023 Aug 10 +" Former Maintainer: Bram Moolenaar + +" edit this file, then do ":source %", and check if the colors match + +" black black_on_white white_on_black +" black_on_black black_on_black +" darkred darkred_on_white white_on_darkred +" darkred_on_black black_on_darkred +" darkgreen darkgreen_on_white white_on_darkgreen +" darkgreen_on_black black_on_darkgreen +" brown brown_on_white white_on_brown +" brown_on_black black_on_brown +" darkblue darkblue_on_white white_on_darkblue +" darkblue_on_black black_on_darkblue +" darkmagenta darkmagenta_on_white white_on_darkmagenta +" darkmagenta_on_black black_on_darkmagenta +" darkcyan darkcyan_on_white white_on_darkcyan +" darkcyan_on_black black_on_darkcyan +" lightgray lightgray_on_white white_on_lightgray +" lightgray_on_black black_on_lightgray +" darkgray darkgray_on_white white_on_darkgray +" darkgray_on_black black_on_darkgray +" red red_on_white white_on_red +" red_on_black black_on_red +" green green_on_white white_on_green +" green_on_black black_on_green +" yellow yellow_on_white white_on_yellow +" yellow_on_black black_on_yellow +" blue blue_on_white white_on_blue +" blue_on_black black_on_blue +" magenta magenta_on_white white_on_magenta +" magenta_on_black black_on_magenta +" cyan cyan_on_white white_on_cyan +" cyan_on_black black_on_cyan +" white white_on_white white_on_white +" white_on_black black_on_white +" grey grey_on_white white_on_grey +" grey_on_black black_on_grey +" lightred lightred_on_white white_on_lightred +" lightred_on_black black_on_lightred +" lightgreen lightgreen_on_white white_on_lightgreen +" lightgreen_on_black black_on_lightgreen +" lightyellow lightyellow_on_white white_on_lightyellow +" lightyellow_on_black black_on_lightyellow +" lightblue lightblue_on_white white_on_lightblue +" lightblue_on_black black_on_lightblue +" lightmagenta lightmagenta_on_white white_on_lightmagenta +" lightmagenta_on_black black_on_lightmagenta +" lightcyan lightcyan_on_white white_on_lightcyan +" lightcyan_on_black black_on_lightcyan + +" Open this file in a window if it isn't edited yet. +" Use the current window if it's empty. +if expand('%:p') != expand(':p') + let s:fname = expand('') + if exists('*fnameescape') + let s:fname = fnameescape(s:fname) + else + let s:fname = escape(s:fname, ' \|') + endif + if &mod || line('$') != 1 || getline(1) != '' + exe "new " . s:fname + else + exe "edit " . s:fname + endif + unlet s:fname +endif + +syn clear +8 +while search("_on_", "W") < 55 + let col1 = substitute(expand(""), '\(\a\+\)_on_\a\+', '\1', "") + let col2 = substitute(expand(""), '\a\+_on_\(\a\+\)', '\1', "") + exec 'hi col_'.col1.'_'.col2.' ctermfg='.col1.' guifg='.col1.' ctermbg='.col2.' guibg='.col2 + exec 'syn keyword col_'.col1.'_'.col2.' '.col1.'_on_'.col2 +endwhile +8,54g/^" \a/exec 'hi col_'.expand("").' ctermfg='.expand("").' guifg='.expand("")| exec 'syn keyword col_'.expand("")." ".expand("") +nohlsearch diff --git a/.config/vim/syntax/conaryrecipe.vim b/.config/vim/syntax/conaryrecipe.vim new file mode 100644 index 0000000..f94fdd4 --- /dev/null +++ b/.config/vim/syntax/conaryrecipe.vim @@ -0,0 +1,137 @@ +" Vim syntax file +" Language: Conary Recipe +" Maintainer: rPath Inc +" Updated: 2007-12-08 + +if exists("b:current_syntax") + finish +endif + +runtime! syntax/python.vim + +syn keyword conarySFunction mainDir addAction addSource addArchive addPatch +syn keyword conarySFunction addRedirect addSvnSnapshot addMercurialSnapshot +syn keyword conarySFunction addCvsSnapshot addGitSnapshot addBzrSnapshot + +syn keyword conaryGFunction add addAll addNewGroup addReference createGroup +syn keyword conaryGFunction addNewGroup startGroup remove removeComponents +syn keyword conaryGFunction replace setByDefault setDefaultGroup +syn keyword conaryGFunction setLabelPath addCopy setSearchPath AddAllFlags +syn keyword conaryGFunction GroupRecipe GroupReference TroveCacheWrapper +syn keyword conaryGFunction TroveCache buildGroups findTrovesForGroups +syn keyword conaryGFunction followRedirect processAddAllDirectives +syn keyword conaryGFunction processOneAddAllDirective removeDifferences +syn keyword conaryGFunction addTrovesToGroup addCopiedComponents +syn keyword conaryGFunction findAllWeakTrovesToRemove checkForRedirects +syn keyword conaryGFunction addPackagesForComponents getResolveSource +syn keyword conaryGFunction resolveGroupDependencies checkGroupDependencies +syn keyword conaryGFunction calcSizeAndCheckHashes findSourcesForGroup +syn keyword conaryGFunction addPostInstallScript addPostRollbackScript +syn keyword conaryGFunction addPostUpdateScript addPreUpdateScript +syn keyword conaryGFunction addTrove moveComponents copyComponents +syn keyword conaryGFunction removeItemsAlsoInNewGroup removeItemsAlsoInGroup +syn keyword conaryGFunction addResolveSource iterReplaceSpecs +syn keyword conaryGFunction setCompatibilityClass getLabelPath +syn keyword conaryGFunction getResolveTroveSpecs getSearchFlavor +syn keyword conaryGFunction getChildGroups getGroupMap + +syn keyword conaryBFunction Run Automake Configure ManualConfigure +syn keyword conaryBFunction Make MakeParallelSubdir MakeInstall +syn keyword conaryBFunction MakePathsInstall CompilePython +syn keyword conaryBFunction Ldconfig Desktopfile Environment SetModes +syn keyword conaryBFunction Install Copy Move Symlink Link Remove Doc +syn keyword conaryBFunction Create MakeDirs disableParallelMake +syn keyword conaryBFunction ConsoleHelper Replace SGMLCatalogEntry +syn keyword conaryBFunction XInetdService XMLCatalogEntry TestSuite +syn keyword conaryBFunction PythonSetup CMake Ant JavaCompile ClassPath +syn keyword conaryBFunction JavaDoc IncludeLicense MakeFIFO + +syn keyword conaryPFunction NonBinariesInBindirs FilesInMandir +syn keyword conaryPFunction ImproperlyShared CheckSonames CheckDestDir +syn keyword conaryPFunction ComponentSpec PackageSpec +syn keyword conaryPFunction Config InitScript GconfSchema SharedLibrary +syn keyword conaryPFunction ParseManifest MakeDevices DanglingSymlinks +syn keyword conaryPFunction AddModes WarnWriteable IgnoredSetuid +syn keyword conaryPFunction Ownership ExcludeDirectories +syn keyword conaryPFunction BadFilenames BadInterpreterPaths ByDefault +syn keyword conaryPFunction ComponentProvides ComponentRequires Flavor +syn keyword conaryPFunction EnforceConfigLogBuildRequirements Group +syn keyword conaryPFunction EnforceSonameBuildRequirements InitialContents +syn keyword conaryPFunction FilesForDirectories LinkCount +syn keyword conaryPFunction MakdeDevices NonMultilibComponent ObsoletePaths +syn keyword conaryPFunction NonMultilibDirectories NonUTF8Filenames TagSpec +syn keyword conaryPFunction Provides RequireChkconfig Requires TagHandler +syn keyword conaryPFunction TagDescription Transient User UtilizeGroup +syn keyword conaryPFunction WorldWritableExecutables UtilizeUser +syn keyword conaryPFunction WarnWritable Strip CheckDesktopFiles +syn keyword conaryPFunction FixDirModes LinkType reportMissingBuildRequires +syn keyword conaryPFunction reportErrors FixupManpagePaths FixObsoletePaths +syn keyword conaryPFunction NonLSBPaths PythonEggs +syn keyword conaryPFunction EnforcePythonBuildRequirements +syn keyword conaryPFunction EnforceJavaBuildRequirements +syn keyword conaryPFunction EnforceCILBuildRequirements +syn keyword conaryPFunction EnforcePerlBuildRequirements +syn keyword conaryPFunction EnforceFlagBuildRequirements +syn keyword conaryPFunction FixupMultilibPaths ExecutableLibraries +syn keyword conaryPFunction NormalizeLibrarySymlinks NormalizeCompression +syn keyword conaryPFunction NormalizeManPages NormalizeInfoPages +syn keyword conaryPFunction NormalizeInitscriptLocation +syn keyword conaryPFunction NormalizeInitscriptContents +syn keyword conaryPFunction NormalizeAppDefaults NormalizeInterpreterPaths +syn keyword conaryPFunction NormalizePamConfig ReadableDocs +syn keyword conaryPFunction WorldWriteableExecutables NormalizePkgConfig +syn keyword conaryPFunction EtcConfig InstallBucket SupplementalGroup +syn keyword conaryPFunction FixBuilddirSymlink RelativeSymlinks + +" Most destdirPolicy aren't called from recipes, except for these +syn keyword conaryPFunction AutoDoc RemoveNonPackageFiles TestSuiteFiles +syn keyword conaryPFunction TestSuiteLinks + +syn match conaryMacro "%(\w\+)[sd]" contained +syn match conaryBadMacro "%(\w*)[^sd]" contained " no final marker +syn keyword conaryArches contained x86 x86_64 alpha ia64 ppc ppc64 s390 +syn keyword conaryArches contained sparc sparc64 +syn keyword conarySubArches contained sse2 3dnow 3dnowext cmov i486 i586 +syn keyword conarySubArches contained i686 mmx mmxext nx sse sse2 +syn keyword conaryBad RPM_BUILD_ROOT EtcConfig InstallBucket subDir +syn keyword conaryBad RPM_OPT_FLAGS subdir +syn cluster conaryArchFlags contains=conaryArches,conarySubArches +syn match conaryArch "Arch\.[a-z0-9A-Z]\+" contains=conaryArches,conarySubArches +syn match conaryArch "Arch\.[a-z0-9A-Z]\+" contains=conaryArches,conarySubArches +syn keyword conaryKeywords name buildRequires version clearBuildReqs +syn keyword conaryUseFlag contained pcre tcpwrappers gcj gnat selinux pam +syn keyword conaryUseFlag contained bootstrap python perl +syn keyword conaryUseFlag contained readline gdbm emacs krb builddocs +syn keyword conaryUseFlag contained alternatives tcl tk X gtk gnome qt +syn keyword conaryUseFlag contained xfce gd ldap sasl pie desktop ssl kde +syn keyword conaryUseFlag contained slang netpbm nptl ipv6 buildtests +syn keyword conaryUseFlag contained ntpl xen dom0 domU +syn match conaryUse "Use\.[a-z0-9A-Z]\+" contains=conaryUseFlag + +" strings +syn region pythonString matchgroup=Normal start=+[uU]\='+ end=+'+ skip=+\\\\\|\\'+ contains=pythonEscape,conaryMacro,conaryBadMacro +syn region pythonString matchgroup=Normal start=+[uU]\="+ end=+"+ skip=+\\\\\|\\"+ contains=pythonEscape,conaryMacro,conaryBadMacro +syn region pythonString matchgroup=Normal start=+[uU]\="""+ end=+"""+ contains=pythonEscape,conaryMacro,conaryBadMacro +syn region pythonString matchgroup=Normal start=+[uU]\='''+ end=+'''+ contains=pythonEscape,conaryMacro,conaryBadMacro +syn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]'+ end=+'+ skip=+\\\\\|\\'+ contains=conaryMacro,conaryBadMacro +syn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]"+ end=+"+ skip=+\\\\\|\\"+ contains=conaryMacro,conaryBadMacro +syn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]"""+ end=+"""+ contains=conaryMacro,conaryBadMacro +syn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]'''+ end=+'''+ contains=conaryMacro,conaryBadMacro + +hi def link conaryMacro Special +hi def link conaryrecipeFunction Function +hi def link conaryError Error +hi def link conaryBFunction conaryrecipeFunction +hi def link conaryGFunction conaryrecipeFunction +hi def link conarySFunction Operator +hi def link conaryPFunction Typedef +hi def link conaryFlags PreCondit +hi def link conaryArches Special +hi def link conarySubArches Special +hi def link conaryBad conaryError +hi def link conaryBadMacro conaryError +hi def link conaryKeywords Special +hi def link conaryUseFlag Typedef + +let b:current_syntax = "conaryrecipe" + diff --git a/.config/vim/syntax/conf.vim b/.config/vim/syntax/conf.vim new file mode 100644 index 0000000..15a1fff --- /dev/null +++ b/.config/vim/syntax/conf.vim @@ -0,0 +1,27 @@ +" Vim syntax file +" Language: generic configure file +" Maintainer: The Vim Project +" Last Change: 2023 Aug 10 +" Former Maintainer: Bram Moolenaar + +" Quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn keyword confTodo contained TODO FIXME XXX +" Avoid matching "text#text", used in /etc/disktab and /etc/gettytab +syn match confComment "^#.*" contains=confTodo,@Spell +syn match confComment "\s#.*"ms=s+1 contains=confTodo,@Spell +syn region confString start=+"+ skip=+\\\\\|\\"+ end=+"+ oneline +syn region confString start=+'+ skip=+\\\\\|\\'+ end=+'+ oneline + +" Define the default highlighting. +" Only used when an item doesn't have highlighting yet +hi def link confComment Comment +hi def link confTodo Todo +hi def link confString String + +let b:current_syntax = "conf" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/config.vim b/.config/vim/syntax/config.vim new file mode 100644 index 0000000..2e8f626 --- /dev/null +++ b/.config/vim/syntax/config.vim @@ -0,0 +1,60 @@ +" Vim syntax file +" Language: Autoconf M4 +" Former Maintainer: Christian Hammesr +" Last Change: 2018 Feb 03 +" (patch from Yngve Inntjore Levinsen to detect AC_MSG) +" (patch from Khym Chanur to add @Spell) +" (patch from James McCoy to fix paren matching) +" (2025 Sep 14 patch from Damien Lejay to detect unportable +=) +" (2025 Sep 18 by Vim Project: fix inconsistent group name) + +" Well, I actually even do not know much about m4. This explains why there +" is probably very much missing here, yet ! +" But I missed good highlighting when editing my GNU autoconf/automake +" script, so I wrote this quick and dirty patch. + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" define the config syntax +syn match configdelimiter "[()\[\];,]" +syn match configoperator "[=|&\*\+\<\>]" +syn match configcomment "\(dnl.*\)\|\(#.*\)" contains=configDnl,@Spell +syn match configfunction "\<[A-Z_][A-Z0-9_]*\>" +syn match confignumber "[-+]\=\<\d\+\(\.\d*\)\=\>" +syn keyword configDnl dnl contained +syn keyword configkeyword if then else fi test for in do done +syn keyword configspecial cat rm eval + +" This shortens the script, see syn-ext-match.. +syn region configstring start=+\z(["'`]\)+ skip=+\\\z1+ end=+\z1+ contains=@Spell + +" Anything inside AC_MSG_TYPE([...]) and AC_MSG_TYPE(...) is a string. +syn region configmsg matchgroup=configfunction start="AC_MSG_[A-Z]*\ze(\[" matchgroup=configdelimiter end="\])" contains=configdelimiter,@Spell +syn region configmsg matchgroup=configfunction start="AC_MSG_[A-Z]*\ze([^[]" matchgroup=configdelimiter end=")" contains=configdelimiter,@Spell + +" Help write portable shell code +syn match configPlusEq '\v\+\=' containedin=ALLBUT,configcomment + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link configdelimiter Delimiter +hi def link configoperator Operator +hi def link configcomment Comment +hi def link configDnl Comment +hi def link configfunction Function +hi def link confignumber Number +hi def link configkeyword Keyword +hi def link configspecial Special +hi def link configstring String +hi def link configmsg String +hi def link configPlusEq Error + + +let b:current_syntax = "config" + +" vim: ts=4 diff --git a/.config/vim/syntax/confini.vim b/.config/vim/syntax/confini.vim new file mode 100644 index 0000000..009a60c --- /dev/null +++ b/.config/vim/syntax/confini.vim @@ -0,0 +1,18 @@ +" Vim syntax file +" Language: confini +" Last Change: +" 2025 May 02 by Vim project commented line starts with # only + +" Quit if a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Use the cfg syntax for now, it's similar. +runtime! syntax/cfg.vim + +" Only accept '#' as the start of a comment. +syn clear CfgComment +syn match CfgComment "#.*" contains=@Spell + +let b:current_syntax = 'confini' diff --git a/.config/vim/syntax/context.vim b/.config/vim/syntax/context.vim new file mode 100644 index 0000000..c5bbbb4 --- /dev/null +++ b/.config/vim/syntax/context.vim @@ -0,0 +1,144 @@ +vim9script + +# Vim syntax file +# Language: ConTeXt typesetting engine +# Maintainer: Nicola Vitacolonna +# Former Maintainers: Nikolai Weibull +# Latest Revision: 2023 Dec 26 + +if exists("b:current_syntax") + finish +endif + +# Dictionary of (filetype, group) pairs to highlight between \startGROUP \stopGROUP. +var context_include = get(b:, 'context_include', get(g:, 'context_include', {'xml': 'XML'})) + +# Deprecation warning +if type(context_include) ==# type([]) + echomsg "[ConTeXt] b:context_include/g:context_include must be Dictionaries." + context_include = {'xml': 'XML'} +endif + +syn iskeyword @,48-57,_,!,?,a-z,A-Z,192-255 + +syn spell toplevel + +runtime! syntax/shared/context-data-context.vim +runtime! syntax/shared/context-data-interfaces.vim +runtime! syntax/shared/context-data-tex.vim + +syn match contextCommand '\\\k\+\>' display contains=@NoSpell + +# ConTeXt options, i.e., [...] blocks +syn region contextOptions matchgroup=contextDelimiter start='\[' end=']\|\ze\\stop' skip='\\\[\|\\\]' contains=TOP,@Spell + +# Highlight braces +syn match contextDelimiter '[{}]' + +# Comments +syn match contextComment '\%(\_^\|[^\\]\)\%(\\\\\)*\zs%.*$' display contains=contextTodo,contextMagicLine +syn match contextComment '^\s*%[CDM].*$' display contains=contextTodo,contextMagicLine +syn keyword contextTodo TODO FIXME XXX NOTE contained +syn match contextMagicLine '^\s*%\s*!TEX.*$' contained + +syn match contextBlockDelim '\\\%(start\|stop\)\k\+' contains=@NoSpell + +syn region contextEscaped matchgroup=contextPreProc start='\\type\%(\s*\|\n\)*\z([^A-Za-z%]\)' end='\z1' +syn region contextEscaped matchgroup=contextPreProc start='\\type\=\%(\s\|\n\)*{' end='}' +syn region contextEscaped matchgroup=contextPreProc start='\\type\=\%(\s*\|\n\)*<<' end='>>' +syn region contextEscaped matchgroup=contextPreProc + \ start='\\start\z(\a*\%(typing\|typen\)\)' + \ end='\\stop\z1' contains=contextComment keepend +syn region contextEscaped matchgroup=contextPreProc start='\\\h\+Type\%(\s\|\n\)*{' end='}' +syn region contextEscaped matchgroup=contextPreProc start='\\Typed\h\+\%(\s\|\n\)*{' end='}' + +syn match contextBuiltin '\\unexpanded\>' display contains=@NoSpell + +# \unprotect... \protect regions +syn region contextUnprotect matchgroup=contextBuiltin start='\\unprotect' end='\\protect' contains=TOP +syn match contextSequence '\\[a-zA-Z]*[@_!?]\+[a-zA-Z@_!?]*' contains=@NoSpell contained containedin=contextUnprotect + +# Math +syn match contextMathCmd '\\m\%(ath\%(ematics\)\=\)\=\>' +syn region contextInlineMath matchgroup=contextMathDelim start='\$' skip='\\\\\|\\\$' end='\$' +syn region contextDisplayMath matchgroup=contextMathDelim start='\$\$' skip='\\\\\|\\\$' end='\$\$' keepend +syn region contextDisplayMath matchgroup=contextBlockDelim start='\\startformula' end='\\stopformula' contains=TOP + +# MetaFun +b:mp_metafun = 1 +syn include @mpTop syntax/mp.vim +unlet b:current_syntax + +syn region contextMPGraphic matchgroup=contextBlockDelim + \ start='\\start\z(MP\%(clip\|code\|definitions\|drawing\|environment\|extensions\|inclusions\|initializations\|page\|\)\)\>.*$' + \ end='\\stop\z1' + \ contains=@mpTop,@NoSpell +syn region contextMPGraphic matchgroup=contextBlockDelim + \ start='\\start\z(\%(\%[re]usable\|use\|unique\|static\)MPgraphic\|staticMPfigure\|uniqueMPpagegraphic\)\>.*$' + \ end='\\stop\z1' + \ contains=@mpTop,@NoSpell + +# Lua +syn include @luaTop syntax/lua.vim +unlet b:current_syntax + +syn region contextLuaCode matchgroup=contextBlockDelim + \ start='\\startluacode\>' + \ end='\\stopluacode\>' keepend + \ contains=@luaTop,@NoSpell +syn match contextDirectLua "\\\%(directlua\|ctxlua\)\>\%(\s*%.*$\)\=" + \ nextgroup=contextBeginEndLua skipwhite skipempty + \ contains=contextComment +syn region contextBeginEndLua matchgroup=contextSpecial + \ start="{" end="}" skip="\\[{}]" keepend + \ contained contains=@luaTop,@NoSpell + +for synname in keys(context_include) + execute 'syn include @' .. synname .. 'Top' 'syntax/' .. synname .. '.vim' + unlet b:current_syntax + execute 'syn region context' .. context_include[synname] .. 'Code' + \ 'matchgroup=contextBlockDelim' + \ 'start=+\\start' .. context_include[synname] .. '\w*+' + \ 'end=+\\stop' .. context_include[synname] .. '\w*+' + \ 'contains=@' .. synname .. 'Top,@NoSpell' +endfor + +syn match contextSectioning '\\\%(start\|stop\)\=\%(\%(sub\)*section\|\%(sub\)*subject\|chapter\|part\|component\|product\|title\)\>' contains=@NoSpell + +syn match contextSpecial '\\par\>\|-\{2,3}\||[<>/]\=|' contains=@NoSpell +syn match contextSpecial /\\[`'"]/ +syn match contextSpecial +\\char\%(\d\{1,3}\|'\o\{1,3}\|"\x\{1,2}\)\>+ contains=@NoSpell +syn match contextSpecial '\^\^.' +syn match contextSpecial '`\%(\\.\|\^\^.\|.\)' + +syn match contextStyle '\\\%(em\|ss\|hw\|cg\|mf\)\>' contains=@NoSpell +syn match contextFont '\\\%(CAP\|Cap\|cap\|Caps\|kap\|nocap\)\>' contains=@NoSpell +syn match contextFont '\\\%(Word\|WORD\|Words\|WORDS\)\>' contains=@NoSpell +syn match contextFont '\\\%(vi\{1,3}\|ix\|xi\{0,2}\)\>' contains=@NoSpell +syn match contextFont '\\\%(tf\|b[si]\|s[cl]\|os\)\%(xx\|[xabcd]\)\=\>' contains=@NoSpell + +hi def link contextBlockDelim Keyword +hi def link contextBuiltin Keyword +hi def link contextCommand Keyword +hi def link contextComment Comment +hi def link contextDelimiter Delimiter +hi def link contextDirectLua Keyword +hi def link contextEscaped String +hi def link contextFont contextType +hi def link contextKeyword Keyword +hi def link contextInlineMath String +hi def link contextMagicLine PreProc +hi def link contextMathCmd Identifier +hi def link contextMathDelim Delimiter +hi def link contextOptions Typedef +hi def link contextPreProc PreProc +hi def link contextSectioning PreProc +hi def link contextSequence Identifier +hi def link contextSpecial Special +hi def link contextStyle contextType +hi def link contextTodo Todo +hi def link contextType Type + +b:current_syntax = 'context' + +# vim: sw=2 fdm=marker diff --git a/.config/vim/syntax/cpp.vim b/.config/vim/syntax/cpp.vim new file mode 100644 index 0000000..ff1226b --- /dev/null +++ b/.config/vim/syntax/cpp.vim @@ -0,0 +1,131 @@ +" Vim syntax file +" Language: C++ +" Current Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp) +" Previous Maintainer: Ken Shan +" Last Change: 2024 May 04 +" 2024 May 04 by Vim Project (fix digit separator in octals and floats) + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" inform C syntax that the file was included from cpp.vim +let b:filetype_in_cpp_family = 1 + +" Read the C syntax to start with +runtime! syntax/c.vim +unlet b:current_syntax +unlet b:filetype_in_cpp_family + +" C++ extensions +syn keyword cppStatement new delete this friend using +syn keyword cppAccess public protected private +syn keyword cppModifier inline virtual explicit export +syn keyword cppType bool wchar_t +syn keyword cppExceptions throw try catch +syn keyword cppOperator operator typeid +syn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq +syn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1 +syn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$" +syn keyword cppStorageClass mutable +syn keyword cppStructure class typename template namespace +syn keyword cppBoolean true false +syn keyword cppConstant __cplusplus + +" C++ 11 extensions +if !exists("cpp_no_cpp11") + syn keyword cppModifier override final + syn keyword cppType nullptr_t auto + syn keyword cppExceptions noexcept + syn keyword cppStorageClass constexpr decltype thread_local + syn keyword cppConstant nullptr + syn keyword cppConstant ATOMIC_FLAG_INIT ATOMIC_VAR_INIT + syn keyword cppConstant ATOMIC_BOOL_LOCK_FREE ATOMIC_CHAR_LOCK_FREE + syn keyword cppConstant ATOMIC_CHAR16_T_LOCK_FREE ATOMIC_CHAR32_T_LOCK_FREE + syn keyword cppConstant ATOMIC_WCHAR_T_LOCK_FREE ATOMIC_SHORT_LOCK_FREE + syn keyword cppConstant ATOMIC_INT_LOCK_FREE ATOMIC_LONG_LOCK_FREE + syn keyword cppConstant ATOMIC_LLONG_LOCK_FREE ATOMIC_POINTER_LOCK_FREE + syn region cppRawString matchgroup=cppRawStringDelimiter start=+\%(u8\|[uLU]\)\=R"\z([[:alnum:]_{}[\]#<>%:;.?*\+\-/\^&|~!=,"']\{,16}\)(+ end=+)\z1"\(sv\|s\|_[_a-zA-Z][_a-zA-Z0-9]*\)\=+ contains=@Spell + syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*<"me=e-1 + syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*$" +endif + +" C++ 14 extensions +if !exists("cpp_no_cpp14") + syn match cppNumbers display transparent "\<\d\|\.\d" contains=cppNumber,cppFloat + syn match cppNumber display contained "\<0\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppNumber display contained "\<[1-9]\('\=\d\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppNumber display contained "\<0\('\=\o\+\)\+\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppNumber display contained "\<0b[01]\('\=[01]\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppNumber display contained "\<0x\x\('\=\x\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppFloat display contained "\<\d\('\=\d\+\)*\.\(\d\('\=\d\+\)*\)\=\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppFloat display contained "\.\d\('\=\d\+\)*\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppFloat display contained "\<\d\+e[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn region cppString start=+\(L\|u\|u8\|U\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"\(sv\|s\|_\i*\)\=+ end='$' contains=cSpecial,cFormat,@Spell +endif + +" C++ 17 extensions +if !exists("cpp_no_cpp17") + syn match cppCast "\" + syn match cppFloat display contained "\<0x\x\+\.\=p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + + " TODO: push this up to c.vim if/when supported in C23 + syn match cppCharacter "u8'[^\\]'" + syn match cppCharacter "u8'[^']*'" contains=cSpecial + if exists("c_gnu") + syn match cppSpecialError "u8'\\[^'\"?\\abefnrtv]'" + syn match cppSpecialCharacter "u8'\\['\"?\\abefnrtv]'" + else + syn match cppSpecialError "u8'\\[^'\"?\\abfnrtv]'" + syn match cppSpecialCharacter "u8'\\['\"?\\abfnrtv]'" + endif + syn match cppSpecialCharacter display "u8'\\\o\{1,3}'" + syn match cppSpecialCharacter display "u8'\\x\x\+'" + +endif + +" C++ 20 extensions +if !exists("cpp_no_cpp20") + syn match cppNumber display contained "\<0\(y\|d\)\>" + syn match cppNumber display contained "\<[1-9]\('\=\d\+\)*\(y\|d\)\>" + syn match cppNumber display contained "\<0\o\+\(y\|d\)\>" + syn match cppNumber display contained "\<0b[01]\('\=[01]\+\)*\(y\|d\)\>" + syn match cppNumber display contained "\<0x\x\('\=\x\+\)*\(y\|d\)\>" + syn keyword cppStatement co_await co_return co_yield requires + syn keyword cppStorageClass consteval constinit + syn keyword cppStructure concept + syn keyword cppType char8_t + syn keyword cppModule import module export +endif + +" The minimum and maximum operators in GNU C++ +syn match cppMinMax "[<>]?" + +" Default highlighting +hi def link cppAccess cppStatement +hi def link cppCast cppStatement +hi def link cppExceptions Exception +hi def link cppOperator Operator +hi def link cppStatement Statement +hi def link cppModifier Type +hi def link cppType Type +hi def link cppStorageClass StorageClass +hi def link cppStructure Structure +hi def link cppBoolean Boolean +hi def link cppCharacter cCharacter +hi def link cppSpecialCharacter cSpecialCharacter +hi def link cppSpecialError cSpecialError +hi def link cppConstant Constant +hi def link cppRawStringDelimiter Delimiter +hi def link cppRawString String +hi def link cppString String +hi def link cppNumber Number +hi def link cppFloat Number +hi def link cppModule Include + +let b:current_syntax = "cpp" + +" vim: ts=8 diff --git a/.config/vim/syntax/crm.vim b/.config/vim/syntax/crm.vim new file mode 100644 index 0000000..5285de3 --- /dev/null +++ b/.config/vim/syntax/crm.vim @@ -0,0 +1,41 @@ +" Vim syntax file +" Language: CRM114 +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword crmTodo contained TODO FIXME XXX NOTE + +syn region crmComment display oneline start='#' end='\\#' + \ contains=crmTodo,@Spell + +syn match crmVariable display ':[*#@]:[^:]\{-1,}:' + +syn match crmSpecial display '\\\%(x\x\x\|o\o\o\o\|[]nrtabvf0>)};/\\]\)' + +syn keyword crmStatement insert noop accept alius alter classify eval exit +syn keyword crmStatement fail fault goto hash intersect isolate input learn +syn keyword crmStatement liaf match output syscall trap union window + +syn region crmRegex start='/' skip='\\/' end='/' contains=crmVariable + +syn match crmLabel display '^\s*:[[:graph:]]\+:' + +hi def link crmTodo Todo +hi def link crmComment Comment +hi def link crmVariable Identifier +hi def link crmSpecial SpecialChar +hi def link crmStatement Statement +hi def link crmRegex String +hi def link crmLabel Label + +let b:current_syntax = "crm" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/crontab.vim b/.config/vim/syntax/crontab.vim new file mode 100644 index 0000000..12daa9b --- /dev/null +++ b/.config/vim/syntax/crontab.vim @@ -0,0 +1,67 @@ +" Vim syntax file +" Language: crontab +" Maintainer: David Necas (Yeti) +" Original Maintainer: John Hoelzel johnh51@users.sourceforge.net +" License: This file can be redistribued and/or modified under the same terms +" as Vim itself. +" Filenames: /tmp/crontab.* used by "crontab -e" +" Last Change: 2022-09-22 +" +" crontab line format: +" Minutes Hours Days Months Days_of_Week Commands # comments + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syntax match crontabNick "^\s*@\(reboot\|yearly\|annually\|monthly\|weekly\|daily\|midnight\|hourly\|every_minute\|every_second\)\>" nextgroup=crontabCmd skipwhite + +syntax match crontabVar "^\s*\k\w*\s*="me=e-1 + +syntax case ignore + +syntax match crontabMin "^\s*[-~0-9/,.*]\+" nextgroup=crontabHr skipwhite +syntax match crontabHr "\s[-~0-9/,.*]\+" nextgroup=crontabDay skipwhite contained +syntax match crontabDay "\s[-~0-9/,.*]\+" nextgroup=crontabMnth skipwhite contained + +syntax match crontabMnth "\s[-~a-z0-9/,.*]\+" nextgroup=crontabDow skipwhite contained +syntax keyword crontabMnth12 contained jan feb mar apr may jun jul aug sep oct nov dec + +syntax match crontabDow "\s[-~a-z0-9/,.*]\+" nextgroup=crontabCmd skipwhite contained +syntax keyword crontabDow7 contained sun mon tue wed thu fri sat + +syntax region crontabCmd start="\S" end="$" skipwhite contained keepend contains=crontabPercent +syntax match crontabCmnt "^\s*#.*" contains=@Spell +syntax match crontabPercent "[^\\]%.*"lc=1 contained + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link crontabMin Number +hi def link crontabHr PreProc +hi def link crontabDay Type + +hi def link crontabMnth Number +hi def link crontabMnth12 Number +hi def link crontabMnthS Number +hi def link crontabMnthN Number + +hi def link crontabDow PreProc +hi def link crontabDow7 PreProc +hi def link crontabDowS PreProc +hi def link crontabDowN PreProc + +hi def link crontabNick Special +hi def link crontabVar Identifier +hi def link crontabPercent Special + +" comment out next line for to suppress unix commands coloring. +hi def link crontabCmd Statement + +hi def link crontabCmnt Comment + + +let b:current_syntax = "crontab" + +" vim: ts=8 diff --git a/.config/vim/syntax/cs.vim b/.config/vim/syntax/cs.vim new file mode 100644 index 0000000..3ae6bfc --- /dev/null +++ b/.config/vim/syntax/cs.vim @@ -0,0 +1,360 @@ +" Vim syntax file +" Language: C# +" Maintainer: Nick Jensen +" Former Maintainers: Anduin Withers +" Johannes Zellner +" Last Change: 2025-03-14 +" Filenames: *.cs +" License: Vim (see :h license) +" Repository: https://github.com/nickspoons/vim-cs +" +" References: +" - ECMA-334 5th Edition: C# Language Specification +" https://www.ecma-international.org/publications-and-standards/standards/ecma-334/ +" - C# Language Design: Draft 6th Edition and later proposals +" https://github.com/dotnet/csharplang + +if exists('b:current_syntax') + finish +endif + +let s:save_cpo = &cpoptions +set cpoptions&vim + +syn keyword csType bool byte char decimal double float int long object sbyte short string T uint ulong ushort var void dynamic +syn keyword csType nint nuint " contextual + +syn keyword csStorage enum interface namespace struct +syn match csStorage "\" +syn match csStorage "\" +syn keyword csRepeat break continue do for foreach goto return while +syn keyword csConditional else if switch +syn keyword csLabel case default + +syn match csNamespaceAlias "@\=\h\w*\ze\_s*::" display +syn match csGlobalNamespaceAlias "global\ze\_s*::" display +syn cluster csNamespaceAlias contains=csGlobalNamespaceAlias,csNamespaceAlias,csNamespaceAliasQualifier + +" user labels +syn match csLabel display +^\s*\I\i*\s*:\%([^:]\)\@=+ + +" Function pointers +syn match csType "\" +syn keyword csAccessModifier internal private protected public +syn keyword csModifier operator nextgroup=csCheckedModifier skipwhite skipempty +syn keyword csCheckedModifier checked contained + +" TODO: in new out +syn keyword csModifier abstract const event override readonly sealed static virtual volatile +syn match csModifier "\<\%(extern\|fixed\|unsafe\)\>" +syn match csModifier "\" + +syn keyword csException try catch finally throw when +syn keyword csLinq ascending by descending equals from group in into join let on orderby select +syn match csLinq "\" + +" Type parameter constraint clause +syn match csStorage "\\ze\_s\+@\=\h\w*\_s*:" + +" Async +syn keyword csAsyncModifier async +syn keyword csAsyncOperator await + +syn match csStorage "\" +syn match csStorage "\%(\" + +syn match csStatement "\<\%(checked\|unchecked\|unsafe\)\ze\_s*{" +syn match csStatement "\" + +syn match csAccessor "\<\%(get\|set\|init\|add\|remove\)\ze\_s*\%([;{]\|=>\)" + +syn keyword csAccess base +syn match csAccess "\" + +" Extension method parameter modifier +syn match csModifier "\\{1,2}" display +syn match csOpSymbols "<\{1,2}" display +syn match csOpSymbols "[!><+\-*/]=" display +syn match csOpSymbols "[!*/^]" display +syn match csOpSymbols "=>" display +syn match csEndColon ";" display +syn match csLogicSymbols "&&" display +syn match csLogicSymbols "||" display +syn match csLogicSymbols "?" display +syn match csLogicSymbols ":" display +syn match csNamespaceAliasQualifier "::" display + +" Generics +syn region csGeneric matchgroup=csGenericBraces start="<" end=">" oneline contains=csType,csGeneric,@csNamespaceAlias,csUserType,csUserIdentifier,csUserInterface,csUserMethod + +" Comments +" +" PROVIDES: @csCommentHook +syn keyword csTodo contained TODO FIXME XXX NOTE HACK TBD +syn region csBlockComment start="/\*" end="\*/" contains=@csCommentHook,csTodo,@Spell +syn match csLineComment "//.*$" contains=@csCommentHook,csTodo,@Spell +syn cluster csComment contains=csLineComment,csBlockComment + +syn region csSummary start="^\s*/// ' + syn region csPreProcInclude start="^\s*\zs#\s*\%(load\|r\)\>" end="$" contains=csLineComment keepend + syn match csShebang "\%^#!.*" display +endif + +syn cluster csPreProcessor contains=csPreProc.* + +syn region csClassType start="\"hs=s+6 end=">" end="[:{]"me=e-1 contains=csClass +" csUserType may be defined by user scripts/plugins - it should be contained in csNewType +syn region csNewType start="\"hs=s+4 end="[;\n{(<\[]"me=e-1 contains=csNew,@csNamespaceAlias,csUserType +syn region csIsType start=" is "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs +syn region csIsType start=" as "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs +syn keyword csNew new contained +syn keyword csClass class contained +syn keyword csIsAs is as + +syn keyword csBoolean false true +syn keyword csNull null + +" Strings and constants +syn match csSpecialError "\\." contained +syn match csSpecialCharError "[^']" contained +" Character literals +syn match csSpecialChar +\\["\\'0abfnrtv]+ contained display +syn match csUnicodeNumber +\\x\x\{1,4}+ contained contains=csUnicodeSpecifier display +syn match csUnicodeNumber +\\u\x\{4}+ contained contains=csUnicodeSpecifier display +syn match csUnicodeNumber +\\U00\x\{6}+ contained contains=csUnicodeSpecifier display +syn match csUnicodeSpecifier +\\[uUx]+ contained display + +syn region csString matchgroup=csQuote start=+"+ end=+"\%(u8\)\=+ end=+$+ extend contains=csSpecialChar,csSpecialError,csUnicodeNumber,@Spell + +for s:i in range(3, get(g:, "cs_raw_string_quote_count", 8)) + exe 'syn region csRawString' .. s:i .. ' matchgroup=csQuote start=+\z("\{' .. s:i .. '}\)+ end=+\z1+ oneline nextgroup=csRawStringError' .. s:i + exe 'syn region csRawString' .. s:i .. ' matchgroup=csQuote start=+\z("\{' .. s:i .. '}\)\s*$+ end=+^\s*\z1+ nextgroup=csRawStringError' .. s:i .. ' contains=csRawStringError' .. s:i + exe 'syn match csRawStringError' .. s:i .. ' /\%("\{' .. s:i .. '}\)\@' .. s:i .. '<="\+/ contained' + exe 'syn match csRawStringError' .. s:i .. ' /\S.\{-}\s*"\{' .. s:i .. '}"\@!/ contained' + + exe 'hi def link csRawString' .. s:i .. ' csString' + exe 'hi def link csRawStringError' .. s:i .. ' Error' +endfor +unlet s:i + +syn match csCharacter "'[^']*'" contains=csSpecialChar,csSpecialCharError,csUnicodeNumber display +syn match csCharacter "'\\''" contains=csSpecialChar display +syn match csCharacter "'[^\\]'" display + +" Numbers +syn case ignore +syn match csInteger "\<0b[01_]*[01]\%([lu]\|lu\|ul\)\=\>" display +syn match csInteger "\<\d\+\%(_\+\d\+\)*\%([lu]\|lu\|ul\)\=\>" display +syn match csInteger "\<0x[[:xdigit:]_]*\x\%([lu]\|lu\|ul\)\=\>" display +syn match csReal "\<\d\+\%(_\+\d\+\)*\.\d\+\%(_\+\d\+\)*\%\(e[-+]\=\d\+\%(_\+\d\+\)*\)\=[fdm]\=" display +syn match csReal "\.\d\+\%(_\+\d\+\)*\%(e[-+]\=\d\+\%(_\+\d\+\)*\)\=[fdm]\=\>" display +syn match csReal "\<\d\+\%(_\+\d\+\)*e[-+]\=\d\+\%(_\+\d\+\)*[fdm]\=\>" display +syn match csReal "\<\d\+\%(_\+\d\+\)*[fdm]\>" display +syn case match +syn cluster csNumber contains=csInteger,csReal + +syn region csInterpolatedString matchgroup=csQuote start=+\$"+ end=+"\%(u8\)\=+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,@Spell + +syn region csInterpolation matchgroup=csInterpolationDelimiter start=+{+ end=+}+ keepend contained contains=@csAll,csBraced,csBracketed,csInterpolationAlign,csInterpolationFormat +syn match csEscapedInterpolation "{{" transparent contains=NONE display +syn match csEscapedInterpolation "}}" transparent contains=NONE display +syn region csInterpolationAlign matchgroup=csInterpolationAlignDel start=+,+ end=+}+ end=+:+me=e-1 contained contains=@csNumber,csBoolean,csConstant,csCharacter,csParens,csOpSymbols,csString,csBracketed display +syn match csInterpolationFormat +:[^}]\+}+ contained contains=csInterpolationFormatDel display +syn match csInterpolationAlignDel +,+ contained display +syn match csInterpolationFormatDel +:+ contained display + +syn region csVerbatimString matchgroup=csQuote start=+@"+ end=+"\%(u8\)\=+ skip=+""+ extend contains=csVerbatimQuote,@Spell + +" Interpolated raw string literals +for s:i in range(1, get(g:, "cs_raw_string_interpolation_brace_count", 8)) + exe 'syn region csInterpolatedRawString' .. s:i .. ' matchgroup=csQuote start=+$\{' .. s:i .. '}\z("""\+\)+ end=+\z1+ extend contains=csInterpolation' .. s:i .. ',csInterpolationDelimiterError' .. s:i .. ',@Spell' + exe 'syn match csInterpolationDelimiterError' .. s:i .. ' "}\{' .. s:i .. '}" contained' + exe 'syn match csInterpolationDelimiterError' .. s:i .. ' "{\{' .. 2 * s:i .. ',}" contained' + exe 'syn match csInterpolationDelimiterError' .. s:i .. ' "}\{' .. 2 * s:i .. ',}" contained' + exe 'syn region csInterpolation' .. s:i .. ' matchgroup=csInterpolationDelimiter start=+\%({\{' .. s:i .. '}\)\@' .. s:i .. ' +" Last change: 2011 Dec 25 by Thilo Six + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" folds: fix/endfix and comments +sy region EssFold start="\" +"hex number +sy match cscNumber contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" +" Flag the first zero of an octal number as something special +sy match cscOctal contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" +sy match cscFloat contained "\d\+f" +"floating point number, with dot, optional exponent +sy match cscFloat contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" +"floating point number, starting with a dot, optional exponent +sy match cscFloat contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +sy match cscFloat contained "\d\+e[-+]\=\d\+[fl]\=\>" + +sy region cscComment start="/\*" end="\*/" contains=@cscCommentGroup,cscSpaceE fold +sy match cscCommentE "\*/" + +sy keyword cscIfError IF ELSE ENDIF ELSEIF +sy keyword cscCondition contained IF ELSE ENDIF ELSEIF +sy keyword cscFunction contained VARPER VAR UDA TRUNCATE SYD SUMRANGE SUM +sy keyword cscFunction contained STDDEVRANGE STDDEV SPARENTVAL SLN SIBLINGS SHIFT +sy keyword cscFunction contained SANCESTVAL RSIBLINGS ROUND REMAINDER RELATIVE PTD +sy keyword cscFunction contained PRIOR POWER PARENTVAL NPV NEXT MOD MINRANGE MIN +sy keyword cscFunction contained MDSHIFT MDPARENTVAL MDANCESTVAL MAXRANGE MAX MATCH +sy keyword cscFunction contained LSIBLINGS LEVMBRS LEV +sy keyword cscFunction contained ISUDA ISSIBLING ISSAMELEV ISSAMEGEN ISPARENT ISMBR +sy keyword cscFunction contained ISLEV ISISIBLING ISIPARENT ISIDESC ISICHILD ISIBLINGS +sy keyword cscFunction contained ISIANCEST ISGEN ISDESC ISCHILD ISANCEST ISACCTYPE +sy keyword cscFunction contained IRSIBLINGS IRR INTEREST INT ILSIBLINGS IDESCENDANTS +sy keyword cscFunction contained ICHILDREN IANCESTORS IALLANCESTORS +sy keyword cscFunction contained GROWTH GENMBRS GEN FACTORIAL DISCOUNT DESCENDANTS +sy keyword cscFunction contained DECLINE CHILDREN CURRMBRRANGE CURLEV CURGEN +sy keyword cscFunction contained COMPOUNDGROWTH COMPOUND AVGRANGE AVG ANCESTVAL +sy keyword cscFunction contained ANCESTORS ALLANCESTORS ACCUM ABS +sy keyword cscFunction contained @VARPER @VAR @UDA @TRUNCATE @SYD @SUMRANGE @SUM +sy keyword cscFunction contained @STDDEVRANGE @STDDEV @SPARENTVAL @SLN @SIBLINGS @SHIFT +sy keyword cscFunction contained @SANCESTVAL @RSIBLINGS @ROUND @REMAINDER @RELATIVE @PTD +sy keyword cscFunction contained @PRIOR @POWER @PARENTVAL @NPV @NEXT @MOD @MINRANGE @MIN +sy keyword cscFunction contained @MDSHIFT @MDPARENTVAL @MDANCESTVAL @MAXRANGE @MAX @MATCH +sy keyword cscFunction contained @LSIBLINGS @LEVMBRS @LEV +sy keyword cscFunction contained @ISUDA @ISSIBLING @ISSAMELEV @ISSAMEGEN @ISPARENT @ISMBR +sy keyword cscFunction contained @ISLEV @ISISIBLING @ISIPARENT @ISIDESC @ISICHILD @ISIBLINGS +sy keyword cscFunction contained @ISIANCEST @ISGEN @ISDESC @ISCHILD @ISANCEST @ISACCTYPE +sy keyword cscFunction contained @IRSIBLINGS @IRR @INTEREST @INT @ILSIBLINGS @IDESCENDANTS +sy keyword cscFunction contained @ICHILDREN @IANCESTORS @IALLANCESTORS +sy keyword cscFunction contained @GROWTH @GENMBRS @GEN @FACTORIAL @DISCOUNT @DESCENDANTS +sy keyword cscFunction contained @DECLINE @CHILDREN @CURRMBRRANGE @CURLEV @CURGEN +sy keyword cscFunction contained @COMPOUNDGROWTH @COMPOUND @AVGRANGE @AVG @ANCESTVAL +sy keyword cscFunction contained @ANCESTORS @ALLANCESTORS @ACCUM @ABS +sy match cscFunction contained "@" +sy match cscError "@\s*\a*" contains=cscFunction + +sy match cscStatement "&" +sy keyword cscStatement AGG ARRAY VAR CCONV CLEARDATA DATACOPY + +sy match cscComE contained "^\s*CALC.*" +sy match cscComE contained "^\s*CLEARBLOCK.*" +sy match cscComE contained "^\s*SET.*" +sy match cscComE contained "^\s*FIX" +sy match cscComE contained "^\s*ENDFIX" +sy match cscComE contained "^\s*ENDLOOP" +sy match cscComE contained "^\s*LOOP" +" sy keyword cscCom FIX ENDFIX LOOP ENDLOOP + +sy match cscComW "^\s*CALC.*" +sy match cscCom "^\s*CALC\s*ALL" +sy match cscCom "^\s*CALC\s*AVERAGE" +sy match cscCom "^\s*CALC\s*DIM" +sy match cscCom "^\s*CALC\s*FIRST" +sy match cscCom "^\s*CALC\s*LAST" +sy match cscCom "^\s*CALC\s*TWOPASS" + +sy match cscComW "^\s*CLEARBLOCK.*" +sy match cscCom "^\s*CLEARBLOCK\s\+ALL" +sy match cscCom "^\s*CLEARBLOCK\s\+UPPER" +sy match cscCom "^\s*CLEARBLOCK\s\+NONINPUT" + +sy match cscComW "^\s*\{}~]\+\s*\|->\s*\)*=\([^=]\@=\|$\)' + sy region cscFormula transparent matchgroup=cscVarName start='\("[^"]*"\|[^][\t !%()*+,--/:;<=>{}~]\+\)\s*=\([^=]\@=\|\n\)' skip='"[^"]*"' end=';' contains=ALLBUT,cscFormula,cscFormulaIn,cscBPMacro,cscCondition + sy region cscFormulaIn matchgroup=cscVarName transparent start='\("[^"]*"\|[^][\t !%()*+,--/:;<=>{}~]\+\)\(->\("[^"]*"\|[^][\t !%()*+,--/:;<=>{}~]\+\)\)*\s*=\([^=]\@=\|$\)' skip='"[^"]*"' end=';' contains=ALLBUT,cscFormula,cscFormulaIn,cscBPMacro,cscCondition contained + sy match cscEq "==" +endif + +if !exists("csc_minlines") + let csc_minlines = 50 " mostly for () constructs +endif +exec "sy sync ccomment cscComment minlines=" . csc_minlines + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi cscVarName term=bold ctermfg=9 gui=bold guifg=blue + +hi def link cscNumber Number +hi def link cscOctal Number +hi def link cscFloat Float +hi def link cscParenE Error +hi def link cscCommentE Error +hi def link cscSpaceE Error +hi def link cscError Error +hi def link cscString String +hi def link cscComment Comment +hi def link cscTodo Todo +hi def link cscStatement Statement +hi def link cscIfError Error +hi def link cscEqError Error +hi def link cscFunction Statement +hi def link cscCondition Statement +hi def link cscWarn WarningMsg + +hi def link cscComE Error +hi def link cscCom Statement +hi def link cscComW WarningMsg + +hi def link cscBPMacro Identifier +hi def link cscBPW WarningMsg + + +let b:current_syntax = "csc" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8 diff --git a/.config/vim/syntax/csdl.vim b/.config/vim/syntax/csdl.vim new file mode 100644 index 0000000..f7d30f1 --- /dev/null +++ b/.config/vim/syntax/csdl.vim @@ -0,0 +1,536 @@ +" Vim syntax file +" Language: Curated Stream Definition Language (CSDL) +" Maintainer: Jacek Artymiak +" Latest Revision: 25 February 2013 + +if exists("b:current_syntax") + finish +endif + +setlocal iskeyword=.,@,48-57,_,192-255 +syn case ignore + +syn match csdlKeyword "tag " +syn match csdlKeyword "stream " +syn match csdlKeyword "return " + +syn keyword csdlOperator contains +syn match csdlOperator "cs contains" +syn keyword csdlOperator substr +syn match csdlOperator "cs substr" +syn keyword csdlOperator contains_any +syn match csdlOperator "cs contains_any" +syn keyword csdlOperator any +syn match csdlOperator "cs any" +syn keyword csdlOperator contains_near +syn match csdlOperator "cs contains_near" +syn keyword csdlOperator exists +syn keyword csdlOperator in +syn keyword csdlOperator url_in +syn match csdlOperator "==" +syn match csdlOperator "!=" +syn match csdlOperator "cs ==" +syn match csdlOperator "cs !=" +syn match csdlOperator ">" +syn match csdlOperator ">=" +syn match csdlOperator "<" +syn match csdlOperator "<=" +syn keyword csdlOperator regex_partial +syn keyword csdlOperator regex_exact +syn keyword csdlOperator geo_box +syn keyword csdlOperator geo_radius +syn keyword csdlOperator geo_polygon + +syn keyword csdlLogicalOperator and +syn keyword csdlLogicalOperator or +syn keyword csdlLogicalOperator not + +syn match csdlTarget 'reddit\.title' +syn match csdlTarget 'reddit\.content' +syn match csdlTarget 'reddit\.contenttype' +syn match csdlTarget 'reddit\.link' +syn match csdlTarget 'reddit\.author\.name' +syn match csdlTarget 'reddit\.author\.link' +syn match csdlTarget 'reddit\.type' +syn match csdlTarget 'reddit\.thread' +syn match csdlTarget 'interaction\.type' +syn match csdlTarget 'interaction\.title' +syn match csdlTarget 'interaction\.content' +syn match csdlTarget 'interaction\.source' +syn match csdlTarget 'interaction\.geo' +syn match csdlTarget 'interaction\.link' +syn match csdlTarget 'interaction\.author\.username' +syn match csdlTarget 'interaction\.author\.name' +syn match csdlTarget 'interaction\.author\.id' +syn match csdlTarget 'interaction\.author\.avatar' +syn match csdlTarget 'interaction\.author\.link' +syn match csdlTarget 'interaction\.sample' +syn match csdlTarget 'links\.title' +syn match csdlTarget 'links\.url' +syn keyword csdlTarget links.normalized_url +syn match csdlTarget 'links\.hops' +syn match csdlTarget 'links\.code' +syn match csdlTarget 'links\.domain' +syn keyword csdlTarget links.retweet_count +syn match csdlTarget 'links\.age' +syn keyword csdlTarget links.meta.content_type +syn match csdlTarget 'links\.meta\.charset' +syn match csdlTarget 'links\.meta\.lang' +syn match csdlTarget 'links\.meta\.keywords' +syn match csdlTarget 'links\.meta\.description' +syn match csdlTarget 'links\.meta\.newskeywords' +syn match csdlTarget 'links\.meta\.standout' +syn match csdlTarget 'links\.meta\.opengraph\.type' +syn match csdlTarget 'links\.meta\.opengraph\.title' +syn match csdlTarget 'links\.meta\.opengraph\.image' +syn match csdlTarget 'links\.meta\.opengraph\.url' +syn match csdlTarget 'links\.meta\.opengraph\.description' +syn keyword csdlTarget links.meta.opengraph.site_name +syn match csdlTarget 'links\.meta\.opengraph\.email' +syn keyword csdlTarget links.meta.opengraph.phone_number +syn keyword csdlTarget links.meta.opengraph.fax_number +syn match csdlTarget 'links\.meta\.opengraph\.geo' +syn keyword csdlTarget links.meta.opengraph.street_address +syn match csdlTarget 'links\.meta\.opengraph\.locality' +syn match csdlTarget 'links\.meta\.opengraph\.region' +syn keyword csdlTarget links.meta.opengraph.postal_code +syn match csdlTarget 'links\.meta\.opengraph\.activity' +syn match csdlTarget 'links\.meta\.opengraph\.sport' +syn match csdlTarget 'links\.meta\.opengraph\.bar' +syn match csdlTarget 'links\.meta\.opengraph\.company' +syn match csdlTarget 'links\.meta\.opengraph\.cafe' +syn match csdlTarget 'links\.meta\.opengraph\.hotel' +syn match csdlTarget 'links\.meta\.opengraph\.restaurant' +syn match csdlTarget 'links\.meta\.opengraph\.cause' +syn keyword csdlTarget links.meta.opengraph.sports_league +syn keyword csdlTarget links.meta.opengraph.sports_team +syn match csdlTarget 'links\.meta\.opengraph\.band' +syn match csdlTarget 'links\.meta\.opengraph\.government' +syn keyword csdlTarget links.meta.opengraph.non_profit +syn match csdlTarget 'links\.meta\.opengraph\.school' +syn match csdlTarget 'links\.meta\.opengraph\.university' +syn match csdlTarget 'links\.meta\.opengraph\.actor' +syn match csdlTarget 'links\.meta\.opengraph\.athlete' +syn match csdlTarget 'links\.meta\.opengraph\.author' +syn match csdlTarget 'links\.meta\.opengraph\.director' +syn match csdlTarget 'links\.meta\.opengraph\.musician' +syn match csdlTarget 'links\.meta\.opengraph\.politician' +syn keyword csdlTarget links.meta.opengraph.public_figure +syn match csdlTarget 'links\.meta\.opengraph\.city' +syn match csdlTarget 'links\.meta\.opengraph\.country' +syn match csdlTarget 'links\.meta\.opengraph\.landmark' +syn keyword csdlTarget links.meta.opengraph.state_province +syn match csdlTarget 'links\.meta\.opengraph\.album' +syn match csdlTarget 'links\.meta\.opengraph\.book' +syn match csdlTarget 'links\.meta\.opengraph\.drink' +syn match csdlTarget 'links\.meta\.opengraph\.food' +syn match csdlTarget 'links\.meta\.opengraph\.game' +syn match csdlTarget 'links\.meta\.opengraph\.movie' +syn match csdlTarget 'links\.meta\.opengraph\.product' +syn match csdlTarget 'links\.meta\.opengraph\.song' +syn keyword csdlTarget links.meta.opengraph.tv_show +syn match csdlTarget 'links\.meta\.opengraph\.blog' +syn match csdlTarget 'links\.meta\.opengraph\.website' +syn match csdlTarget 'links\.meta\.opengraph\.article' +syn match csdlTarget 'links\.meta\.twitter\.card' +syn match csdlTarget 'links\.meta\.twitter\.site' +syn keyword csdlTarget links.meta.twitter.site_id +syn match csdlTarget 'links\.meta\.twitter\.creator' +syn keyword csdlTarget links.meta.twitter.creator_id +syn match csdlTarget 'links\.meta\.twitter\.url' +syn match csdlTarget 'links\.meta\.twitter\.description' +syn match csdlTarget 'links\.meta\.twitter\.title' +syn match csdlTarget 'links\.meta\.twitter\.image' +syn keyword csdlTarget links.meta.twitter.image_width +syn keyword csdlTarget links.meta.twitter.image_height +syn match csdlTarget 'links\.meta\.twitter\.player' +syn keyword csdlTarget links.meta.twitter.player_width +syn keyword csdlTarget links.meta.twitter.player_height +syn keyword csdlTarget links.meta.twitter.player_stream +syn keyword csdlTarget links.meta.twitter.player_stream_content_type +syn match csdlTarget 'myspace\.link' +syn match csdlTarget 'myspace\.content' +syn match csdlTarget 'myspace\.contenttype' +syn match csdlTarget 'myspace\.category' +syn match csdlTarget 'myspace\.author\.username' +syn match csdlTarget 'myspace\.author\.name' +syn match csdlTarget 'myspace\.author\.id' +syn match csdlTarget 'myspace\.author\.link' +syn match csdlTarget 'myspace\.author\.avatar' +syn match csdlTarget 'myspace\.geo' +syn match csdlTarget 'myspace\.verb' +syn match csdlTarget 'newscred\.type' +syn match csdlTarget 'newscred\.article\.domain' +syn match csdlTarget 'newscred\.video\.domain' +syn match csdlTarget 'newscred\.article\.topics' +syn match csdlTarget 'newscred\.video\.topics' +syn match csdlTarget 'newscred\.article\.category' +syn match csdlTarget 'newscred\.video\.category' +syn match csdlTarget 'newscred\.article\.title' +syn match csdlTarget 'newscred\.video\.title' +syn match csdlTarget 'newscred\.article\.content' +syn match csdlTarget 'newscred\.article\.fulltext' +syn match csdlTarget 'newscred\.article\.authors' +syn match csdlTarget 'newscred\.image\.caption' +syn match csdlTarget 'newscred\.video\.caption' +syn match csdlTarget 'newscred\.image\.attribution\.text' +syn match csdlTarget 'newscred\.image\.attribution\.link' +syn match csdlTarget 'newscred\.source\.name' +syn match csdlTarget 'newscred\.source\.link' +syn match csdlTarget 'newscred\.source\.domain' +syn keyword csdlTarget newscred.source.media_type +syn keyword csdlTarget newscred.source.company_type +syn match csdlTarget 'newscred\.source\.country' +syn match csdlTarget 'newscred\.source\.circulation' +syn match csdlTarget 'newscred\.source\.founded' +syn match csdlTarget 'imdb\.title' +syn match csdlTarget 'imdb\.content' +syn match csdlTarget 'imdb\.contenttype' +syn match csdlTarget 'imdb\.link' +syn match csdlTarget 'imdb\.author\.name' +syn match csdlTarget 'imdb\.author\.link' +syn match csdlTarget 'imdb\.type' +syn match csdlTarget 'imdb\.thread' +syn match csdlTarget 'amazon\.title' +syn match csdlTarget 'amazon\.content' +syn match csdlTarget 'amazon\.contenttype' +syn match csdlTarget 'amazon\.link' +syn match csdlTarget 'amazon\.author\.name' +syn match csdlTarget 'amazon\.author\.link' +syn match csdlTarget 'amazon\.type' +syn match csdlTarget 'amazon\.thread' +syn match csdlTarget 'salience\.content\.sentiment' +syn match csdlTarget 'salience\.content\.topics' +syn match csdlTarget 'salience\.title\.sentiment' +syn match csdlTarget 'salience\.title\.topics' +syn match csdlTarget 'salience\.content\.entities\.name' +syn match csdlTarget 'salience\.content\.entities\.type' +syn match csdlTarget 'salience\.title\.entities\.name' +syn match csdlTarget 'salience\.title\.entities\.type' +syn match csdlTarget 'klout\.score' +syn match csdlTarget 'klout\.network' +syn match csdlTarget 'klout\.amplification' +syn keyword csdlTarget klout.true_reach +syn match csdlTarget 'klout\.topics' +syn match csdlTarget 'wikipedia\.author\.talk' +syn match csdlTarget 'wikipedia\.author\.contributions' +syn match csdlTarget 'wikipedia\.author\.username' +syn match csdlTarget 'wikipedia\.body' +syn match csdlTarget 'wikipedia\.title' +syn match csdlTarget 'wikipedia\.images' +syn match csdlTarget 'wikipedia\.categories' +syn match csdlTarget 'wikipedia\.externallinks' +syn match csdlTarget 'wikipedia\.ns' +syn match csdlTarget 'wikipedia\.namespace' +syn match csdlTarget 'wikipedia\.pageid' +syn match csdlTarget 'wikipedia\.parentid' +syn match csdlTarget 'wikipedia\.oldlen' +syn match csdlTarget 'wikipedia\.newlen' +syn match csdlTarget 'wikipedia\.changetype' +syn match csdlTarget 'wikipedia\.diff\.from' +syn match csdlTarget 'wikipedia\.diff\.to' +syn match csdlTarget 'wikipedia\.diff\.changes\.added' +syn match csdlTarget 'wikipedia\.diff\.changes\.removed' +syn keyword csdlTarget demographic.twitter_activity +syn match csdlTarget 'demographic\.location\.country' +syn keyword csdlTarget demographic.location.us_state +syn match csdlTarget 'demographic\.location\.city' +syn match csdlTarget 'demographic\.type' +syn match csdlTarget 'demographic\.sex' +syn match csdlTarget 'demographic\.status\.relationship' +syn match csdlTarget 'demographic\.status\.work' +syn keyword csdlTarget demographic.likes_and_interests +syn keyword csdlTarget demographic.first_language +syn match csdlTarget 'demographic\.professions' +syn match csdlTarget 'demographic\.services' +syn keyword csdlTarget demographic.large_accounts_followed +syn keyword csdlTarget demographic.age_range.start +syn keyword csdlTarget demographic.age_range.end +syn match csdlTarget 'demographic\.income\.start' +syn match csdlTarget 'demographic\.income\.end' +syn keyword csdlTarget demographic.main_street.dressed_by +syn keyword csdlTarget demographic.main_street.shop_at +syn keyword csdlTarget demographic.main_street.eat_and_drink_at +syn match csdlTarget 'demographic\.accounts\.categories' +syn match csdlTarget 'tumblr\.activity' +syn match csdlTarget 'tumblr\.source\.blogid' +syn match csdlTarget 'tumblr\.dest\.blogid' +syn match csdlTarget 'tumblr\.dest\.postid' +syn match csdlTarget 'tumblr\.root\.blogid' +syn match csdlTarget 'tumblr\.root\.postid' +syn match csdlTarget 'tumblr\.blogid' +syn keyword csdlTarget tumblr.blog_name +syn match csdlTarget 'tumblr\.type' +syn match csdlTarget 'tumblr\.title' +syn match csdlTarget 'tumblr\.body' +syn match csdlTarget 'tumblr\.text' +syn match csdlTarget 'tumblr\.tags' +syn keyword csdlTarget tumblr.track_name +syn match csdlTarget 'tumblr\.album' +syn match csdlTarget 'tumblr\.link' +syn match csdlTarget 'tumblr\.meta\.url' +syn match csdlTarget 'tumblr\.meta\.type' +syn match csdlTarget 'tumblr\.meta\.description' +syn keyword csdlTarget tumblr.meta.likes_local +syn keyword csdlTarget tumblr.meta.likes_global +syn keyword csdlTarget tumblr.meta.reblogged_global +syn match csdlTarget 'demographic\.gender' +syn match csdlTarget 'flickr\.title' +syn match csdlTarget 'flickr\.content' +syn match csdlTarget 'flickr\.contenttype' +syn match csdlTarget 'flickr\.link' +syn match csdlTarget 'flickr\.author\.name' +syn match csdlTarget 'flickr\.author\.link' +syn match csdlTarget 'flickr\.author\.username' +syn match csdlTarget 'flickr\.type' +syn match csdlTarget 'flickr\.thread' +syn match csdlTarget 'twitter\.text' +syn match csdlTarget 'twitter\.source' +syn match csdlTarget 'twitter\.mentions' +syn keyword csdlTarget twitter.mention_ids +syn match csdlTarget 'twitter\.links' +syn match csdlTarget 'twitter\.domains' +syn keyword csdlTarget twitter.in_reply_to_screen_name +syn keyword csdlTarget twitter.in_reply_to_user_id +syn keyword csdlTarget twitter.in_reply_to_status_id +syn keyword csdlTarget twitter.filter_level +syn match csdlTarget 'twitter\.lang' +syn match csdlTarget 'twitter\.geo' +syn match csdlTarget 'twitter\.user\.description' +syn match csdlTarget 'twitter\.user\.location' +syn keyword csdlTarget twitter.user.statuses_count +syn keyword csdlTarget twitter.user.followers_count +syn keyword csdlTarget twitter.user.follower_ratio +syn keyword csdlTarget twitter.user.profile_age +syn keyword csdlTarget twitter.user.friends_count +syn keyword csdlTarget twitter.user.screen_name +syn match csdlTarget 'twitter\.user\.lang' +syn keyword csdlTarget twitter.user.time_zone +syn match csdlTarget 'twitter\.user\.name' +syn match csdlTarget 'twitter\.user\.id' +syn keyword csdlTarget twitter.user.listed_count +syn match csdlTarget 'twitter\.user\.url' +syn match csdlTarget 'twitter\.user\.verified' +syn keyword csdlTarget twitter.place.place_type +syn match csdlTarget 'twitter\.place\.country' +syn keyword csdlTarget twitter.place.country_code +syn keyword csdlTarget twitter.place.full_name +syn match csdlTarget 'twitter\.place\.name' +syn match csdlTarget 'twitter\.place\.url' +syn match csdlTarget 'twitter\.place\.attributes\.locality' +syn match csdlTarget 'twitter\.place\.attributes\.region' +syn keyword csdlTarget twitter.place.attributes.street_address +syn match csdlTarget 'twitter\.status' +syn match csdlTarget 'twitter\.retweet\.text' +syn match csdlTarget 'twitter\.retweet\.elapsed' +syn match csdlTarget 'twitter\.retweet\.source' +syn keyword csdlTarget twitter.retweet.filter_level +syn match csdlTarget 'twitter\.retweet\.lang' +syn match csdlTarget 'twitter\.retweet\.user\.description' +syn match csdlTarget 'twitter\.retweet\.user\.location' +syn keyword csdlTarget twitter.retweet.user.statuses_count +syn keyword csdlTarget twitter.retweet.user.followers_count +syn keyword csdlTarget twitter.retweet.user.follower_ratio +syn keyword csdlTarget twitter.retweet.user.profile_age +syn keyword csdlTarget twitter.retweet.user.friends_count +syn keyword csdlTarget twitter.retweet.user.screen_name +syn match csdlTarget 'twitter\.retweet\.user\.lang' +syn keyword csdlTarget twitter.retweet.user.time_zone +syn match csdlTarget 'twitter\.retweet\.user\.name' +syn match csdlTarget 'twitter\.retweet\.user\.id' +syn keyword csdlTarget twitter.retweet.user.listed_count +syn match csdlTarget 'twitter\.retweet\.user\.url' +syn match csdlTarget 'twitter\.retweet\.user\.verified' +syn match csdlTarget 'twitter\.retweeted\.id' +syn match csdlTarget 'twitter\.retweeted\.source' +syn keyword csdlTarget twitter.retweeted.in_reply_to_screen_name +syn keyword csdlTarget twitter.retweeted.in_reply_to_user_id_str +syn keyword csdlTarget twitter.retweeted.in_reply_to_status_id +syn match csdlTarget 'twitter\.retweet\.count' +syn match csdlTarget 'twitter\.retweet\.mentions' +syn keyword csdlTarget twitter.retweet.mention_ids +syn match csdlTarget 'twitter\.retweet\.links' +syn match csdlTarget 'twitter\.retweet\.domains' +syn match csdlTarget 'twitter\.retweeted\.user\.description' +syn match csdlTarget 'twitter\.retweeted\.user\.location' +syn keyword csdlTarget twitter.retweeted.user.statuses_count +syn keyword csdlTarget twitter.retweeted.user.followers_count +syn keyword csdlTarget twitter.retweeted.user.follower_ratio +syn keyword csdlTarget twitter.retweeted.user.profile_age +syn keyword csdlTarget twitter.retweeted.user.friends_count +syn keyword csdlTarget twitter.retweeted.user.screen_name +syn match csdlTarget 'twitter\.retweeted\.user\.lang' +syn keyword csdlTarget twitter.retweeted.user.time_zone +syn match csdlTarget 'twitter\.retweeted\.user\.name' +syn match csdlTarget 'twitter\.retweeted\.user\.id' +syn keyword csdlTarget twitter.retweeted.user.listed_count +syn match csdlTarget 'twitter\.retweeted\.user\.url' +syn match csdlTarget 'twitter\.retweeted\.user\.verified' +syn match csdlTarget 'twitter\.retweeted\.geo' +syn keyword csdlTarget twitter.retweeted.place.place_type +syn match csdlTarget 'twitter\.retweeted\.place\.country' +syn keyword csdlTarget twitter.retweeted.place.country_code +syn keyword csdlTarget twitter.retweeted.place.full_name +syn match csdlTarget 'twitter\.retweeted\.place\.name' +syn match csdlTarget 'twitter\.retweeted\.place\.url' +syn match csdlTarget 'twitter\.retweeted\.place\.attributes' +syn match csdlTarget 'twitter\.hashtags' +syn match csdlTarget 'twitter\.retweet\.hashtags' +syn match csdlTarget 'twitter\.media\.type' +syn keyword csdlTarget twitter.media.media_url +syn keyword csdlTarget twitter.media.display_url +syn match csdlTarget 'twitter\.retweet\.media\.type' +syn keyword csdlTarget twitter.retweet.media.media_url +syn keyword csdlTarget twitter.retweet.media.display_url +syn match csdlTarget 'blog\.title' +syn match csdlTarget 'blog\.content' +syn match csdlTarget 'blog\.contenttype' +syn match csdlTarget 'blog\.link' +syn match csdlTarget 'blog\.domain' +syn match csdlTarget 'blog\.author\.name' +syn match csdlTarget 'blog\.author\.link' +syn match csdlTarget 'blog\.author\.avatar' +syn match csdlTarget 'blog\.author\.username' +syn match csdlTarget 'blog\.type' +syn match csdlTarget 'blog\.post\.link' +syn match csdlTarget 'blog\.post\.title' +syn match csdlTarget 'facebook\.author\.name' +syn match csdlTarget 'facebook\.author\.link' +syn match csdlTarget 'facebook\.author\.id' +syn match csdlTarget 'facebook\.author\.avatar' +syn match csdlTarget 'facebook\.message' +syn match csdlTarget 'facebook\.description' +syn match csdlTarget 'facebook\.caption' +syn match csdlTarget 'facebook\.type' +syn match csdlTarget 'facebook\.application' +syn match csdlTarget 'facebook\.source' +syn match csdlTarget 'facebook\.link' +syn match csdlTarget 'facebook\.name' +syn match csdlTarget 'facebook\.to\.names' +syn match csdlTarget 'facebook\.to\.ids' +syn match csdlTarget 'facebook\.og\.title' +syn match csdlTarget 'facebook\.og\.location' +syn match csdlTarget 'facebook\.og\.photos' +syn match csdlTarget 'facebook\.og\.by' +syn match csdlTarget 'facebook\.og\.description' +syn match csdlTarget 'facebook\.og\.type' +syn match csdlTarget 'facebook\.og\.length' +syn match csdlTarget 'facebook\.likes\.count' +syn match csdlTarget 'facebook\.likes\.names' +syn match csdlTarget 'facebook\.likes\.ids' +syn match csdlTarget 'topix\.title' +syn match csdlTarget 'topix\.content' +syn match csdlTarget 'topix\.contenttype' +syn match csdlTarget 'topix\.link' +syn match csdlTarget 'topix\.author\.name' +syn match csdlTarget 'topix\.type' +syn match csdlTarget 'topix\.thread' +syn match csdlTarget 'topix\.author\.location' +syn match csdlTarget 'bitly\.user\.agent' +syn keyword csdlTarget bitly.url_hash +syn match csdlTarget 'bitly\.share\.hash' +syn match csdlTarget 'bitly\.cname' +syn keyword csdlTarget bitly.referring_url +syn keyword csdlTarget bitly.referring_domain +syn match csdlTarget 'bitly\.url' +syn match csdlTarget 'bitly\.domain' +syn keyword csdlTarget bitly.country_code +syn keyword csdlTarget bitly.geo_region_code +syn match csdlTarget 'bitly\.country' +syn keyword csdlTarget bitly.geo_region +syn keyword csdlTarget bitly.geo_city +syn match csdlTarget 'bitly\.geo' +syn match csdlTarget 'bitly\.timezone' +syn match csdlTarget 'trends\.type' +syn match csdlTarget 'trends\.content' +syn match csdlTarget 'trends\.source' +syn match csdlTarget 'board\.title' +syn match csdlTarget 'board\.content' +syn match csdlTarget 'board\.contenttype' +syn match csdlTarget 'board\.link' +syn match csdlTarget 'board\.domain' +syn match csdlTarget 'board\.author\.name' +syn match csdlTarget 'board\.author\.link' +syn match csdlTarget 'board\.author\.avatar' +syn match csdlTarget 'board\.author\.username' +syn match csdlTarget 'board\.type' +syn match csdlTarget 'board\.thread' +syn match csdlTarget 'board\.author\.location' +syn match csdlTarget 'board\.author\.signature' +syn match csdlTarget 'board\.author\.registered' +syn match csdlTarget 'board\.author\.age' +syn match csdlTarget 'board\.author\.gender' +syn match csdlTarget 'video\.title' +syn match csdlTarget 'video\.content' +syn match csdlTarget 'video\.contenttype' +syn match csdlTarget 'video\.domain' +syn match csdlTarget 'video\.author\.name' +syn match csdlTarget 'video\.author\.link' +syn match csdlTarget 'video\.author\.avatar' +syn match csdlTarget 'video\.author\.username' +syn match csdlTarget 'video\.type' +syn match csdlTarget 'video\.videolink' +syn match csdlTarget 'video\.commentslink' +syn match csdlTarget 'video\.duration' +syn match csdlTarget 'video\.thumbnail' +syn match csdlTarget 'video\.category' +syn match csdlTarget 'video\.tags' +syn match csdlTarget '2ch\.title' +syn match csdlTarget '2ch\.content' +syn match csdlTarget '2ch\.contenttype' +syn match csdlTarget '2ch\.link' +syn match csdlTarget '2ch\.author\.name' +syn match csdlTarget '2ch\.type' +syn match csdlTarget '2ch\.thread' +syn match csdlTarget 'dailymotion\.title' +syn match csdlTarget 'dailymotion\.content' +syn match csdlTarget 'dailymotion\.contenttype' +syn match csdlTarget 'dailymotion\.author\.link' +syn match csdlTarget 'dailymotion\.author\.username' +syn match csdlTarget 'dailymotion\.videolink' +syn match csdlTarget 'dailymotion\.duration' +syn match csdlTarget 'dailymotion\.thumbnail' +syn match csdlTarget 'dailymotion\.category' +syn match csdlTarget 'dailymotion\.tags' +syn match csdlTarget 'language\.tag' +syn match csdlTarget 'language\.confidence' +syn match csdlTarget 'digg\.type' +syn match csdlTarget 'digg\.user\.name' +syn match csdlTarget 'digg\.user\.fullname' +syn match csdlTarget 'digg\.user\.registered' +syn match csdlTarget 'digg\.user\.profileviews' +syn match csdlTarget 'digg\.user\.icon' +syn match csdlTarget 'digg\.user\.links' +syn match csdlTarget 'digg\.item\.status' +syn match csdlTarget 'digg\.item\.description' +syn match csdlTarget 'digg\.item\.title' +syn match csdlTarget 'digg\.item\.diggs' +syn match csdlTarget 'digg\.item\.comments' +syn match csdlTarget 'digg\.item\.topic' +syn match csdlTarget 'digg\.comment\.buries' +syn match csdlTarget 'digg\.comment\.diggs' +syn match csdlTarget 'digg\.comment\.text' +syn match csdlTarget 'youtube\.title' +syn match csdlTarget 'youtube\.content' +syn match csdlTarget 'youtube\.contenttype' +syn match csdlTarget 'youtube\.author\.name' +syn match csdlTarget 'youtube\.author\.link' +syn match csdlTarget 'youtube\.type' +syn match csdlTarget 'youtube\.videolink' +syn match csdlTarget 'youtube\.commentslink' +syn match csdlTarget 'youtube\.duration' +syn match csdlTarget 'youtube\.thumbnail' +syn match csdlTarget 'youtube\.category' +syn match csdlTarget 'youtube\.tags' + +syn match csdlComment "^\/\/.*$" +syn match csdlComment "^\/\*.*$" +syn match csdlComment "^.*\*\/$" + +highlight link csdlKeyword Statement +highlight link csdlOperator Operator +highlight link csdlLogicalOperator Operator +highlight link csdlTarget Constant +highlight link csdlComment Comment +" +let b:current_syntax = "csdl" diff --git a/.config/vim/syntax/csh.vim b/.config/vim/syntax/csh.vim new file mode 100644 index 0000000..0ad85ad --- /dev/null +++ b/.config/vim/syntax/csh.vim @@ -0,0 +1,144 @@ +" Vim syntax file +" Language: C-shell (csh) +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Charles E. Campbell +" Last Change: Aug 31, 2016 +" Version: 14 +" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_CSH + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" clusters: +syn cluster cshQuoteList contains=cshDblQuote,cshSnglQuote,cshBckQuote +syn cluster cshVarList contains=cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst + +" Variables which affect the csh itself +syn match cshSetVariables contained "argv\|histchars\|ignoreeof\|noglob\|prompt\|status" +syn match cshSetVariables contained "cdpath\|history\|mail\|nonomatch\|savehist\|time" +syn match cshSetVariables contained "cwd\|home\|noclobber\|path\|shell\|verbose" +syn match cshSetVariables contained "echo" + +syn case ignore +syn keyword cshTodo contained todo +syn case match + +" Variable Name Expansion Modifiers +syn match cshModifier contained ":\(h\|t\|r\|q\|x\|gh\|gt\|gr\)" + +" Strings and Comments +syn match cshNoEndlineDQ contained "[^\"]\(\\\\\)*$" +syn match cshNoEndlineSQ contained "[^\']\(\\\\\)*$" +syn match cshNoEndlineBQ contained "[^\`]\(\\\\\)*$" + +syn region cshDblQuote start=+[^\\]"+lc=1 skip=+\\\\\|\\"+ end=+"+ contains=cshSpecial,cshShellVariables,cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst,cshNoEndlineDQ,cshBckQuote,@Spell +syn region cshSnglQuote start=+[^\\]'+lc=1 skip=+\\\\\|\\'+ end=+'+ contains=cshNoEndlineSQ,@Spell +syn region cshBckQuote start=+[^\\]`+lc=1 skip=+\\\\\|\\`+ end=+`+ contains=cshNoEndlineBQ,@Spell +syn region cshDblQuote start=+^"+ skip=+\\\\\|\\"+ end=+"+ contains=cshSpecial,cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst,cshNoEndlineDQ,@Spell +syn region cshSnglQuote start=+^'+ skip=+\\\\\|\\'+ end=+'+ contains=cshNoEndlineSQ,@Spell +syn region cshBckQuote start=+^`+ skip=+\\\\\|\\`+ end=+`+ contains=cshNoEndlineBQ,@Spell +syn cluster cshCommentGroup contains=cshTodo,@Spell +syn match cshComment "#.*$" contains=@cshCommentGroup + +" A bunch of useful csh keywords +syn keyword cshStatement alias end history onintr setenv unalias +syn keyword cshStatement cd eval kill popd shift unhash +syn keyword cshStatement chdir exec login pushd source +syn keyword cshStatement continue exit logout rehash time unsetenv +syn keyword cshStatement dirs glob nice repeat umask wait +syn keyword cshStatement echo goto nohup + +syn keyword cshConditional break case else endsw switch +syn keyword cshConditional breaksw default endif +syn keyword cshRepeat foreach + +" Special environment variables +syn keyword cshShellVariables HOME LOGNAME PATH TERM USER + +" Modifiable Variables without {} +syn match cshExtVar "\$[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier +syn match cshSelector "\$[a-zA-Z_][a-zA-Z0-9_]*\[[a-zA-Z_]\+\]\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier +syn match cshQtyWord "\$#[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier +syn match cshArgv "\$\d\+\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier +syn match cshArgv "\$\*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier + +" Modifiable Variables with {} +syn match cshExtVar "\${[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier +syn match cshSelector "\${[a-zA-Z_][a-zA-Z0-9_]*\[[a-zA-Z_]\+\]\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier +syn match cshQtyWord "\${#[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier +syn match cshArgv "\${\d\+\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier + +" UnModifiable Substitutions +syn match cshSubstError "\$?[a-zA-Z_][a-zA-Z0-9_]*:\(h\|t\|r\|q\|x\|gh\|gt\|gr\)" +syn match cshSubstError "\${?[a-zA-Z_][a-zA-Z0-9_]*:\(h\|t\|r\|q\|x\|gh\|gt\|gr\)}" +syn match cshSubstError "\$?[0$<]:\(h\|t\|r\|q\|x\|gh\|gt\|gr\)" +syn match cshSubst "\$?[a-zA-Z_][a-zA-Z0-9_]*" +syn match cshSubst "\${?[a-zA-Z_][a-zA-Z0-9_]*}" +syn match cshSubst "\$?[0$<]" + +" I/O redirection +syn match cshRedir ">>&!\|>&!\|>>&\|>>!\|>&\|>!\|>>\|<<\|>\|<" + +" Handle set expressions +syn region cshSetExpr matchgroup=cshSetStmt start="\\|\" end="$\|;" contains=cshComment,cshSetStmt,cshSetVariables,@cshQuoteList + +" Operators and Expression-Using constructs +"syn match cshOperator contained "&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|\|%\|&\|+\|-\|/\|<\|>\||" +syn match cshOperator contained "&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|%\|&\|+\|-\|/\|<\|>\||" +syn match cshOperator contained "[(){}]" +syn region cshTest matchgroup=cshStatement start="\\|\" skip="\\$" matchgroup=cshStatement end="\\|$" contains=cshComment,cshOperator,@cshQuoteList,@cshVarLIst + +" Highlight special characters (those which have a backslash) differently +syn match cshSpecial contained "\\\d\d\d\|\\[abcfnrtv\\]" +syn match cshNumber "-\=\<\d\+\>" + +" All other identifiers +"syn match cshIdentifier "\<[a-zA-Z._][a-zA-Z0-9._]*\>" + +" Shell Input Redirection (Here Documents) +syn region cshHereDoc matchgroup=cshRedir start="<<-\=\s*\**\z(\h\w*\)\**" matchgroup=cshRedir end="^\z1$" + +" Define the default highlighting. +if !exists("skip_csh_syntax_inits") + + hi def link cshArgv cshVariables + hi def link cshBckQuote cshCommand + hi def link cshDblQuote cshString + hi def link cshExtVar cshVariables + hi def link cshHereDoc cshString + hi def link cshNoEndlineBQ cshNoEndline + hi def link cshNoEndlineDQ cshNoEndline + hi def link cshNoEndlineSQ cshNoEndline + hi def link cshQtyWord cshVariables + hi def link cshRedir cshOperator + hi def link cshSelector cshVariables + hi def link cshSetStmt cshStatement + hi def link cshSetVariables cshVariables + hi def link cshSnglQuote cshString + hi def link cshSubst cshVariables + + hi def link cshCommand Statement + hi def link cshComment Comment + hi def link cshConditional Conditional + hi def link cshIdentifier Error + hi def link cshModifier Special + hi def link cshNoEndline Error + hi def link cshNumber Number + hi def link cshOperator Operator + hi def link cshRedir Statement + hi def link cshRepeat Repeat + hi def link cshShellVariables Special + hi def link cshSpecial Special + hi def link cshStatement Statement + hi def link cshString String + hi def link cshSubstError Error + hi def link cshTodo Todo + hi def link cshVariables Type + +endif + +let b:current_syntax = "csh" + +" vim: ts=18 diff --git a/.config/vim/syntax/csp.vim b/.config/vim/syntax/csp.vim new file mode 100644 index 0000000..8001b1f --- /dev/null +++ b/.config/vim/syntax/csp.vim @@ -0,0 +1,182 @@ +" Vim syntax file +" Language: CSP (Communication Sequential Processes, using FDR input syntax) +" Maintainer: Jan Bredereke +" Version: 0.6.0 +" Last change: Mon Mar 25, 2002 +" URL: http://www.tzi.de/~brederek/vim/ +" Copying: You may distribute and use this file freely, in the same +" way as the vim editor itself. +" +" To Do: - Probably I missed some keywords or operators, please +" fix them and notify me, the maintainer. +" - Currently, we do lexical highlighting only. It would be +" nice to have more actual syntax checks, including +" highlighting of wrong syntax. +" - The additional syntax for the RT-Tester (pseudo-comments) +" should be optional. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" case is significant to FDR: +syn case match + +" Block comments in CSP are between {- and -} +syn region cspComment start="{-" end="-}" contains=cspTodo +" Single-line comments start with -- +syn region cspComment start="--" end="$" contains=cspTodo,cspOldRttComment,cspSdlRttComment keepend + +" Numbers: +syn match cspNumber "\<\d\+\>" + +" Conditionals: +syn keyword cspConditional if then else + +" Operators on processes: +" -> ? : ! ' ; /\ \ [] |~| [> & [[..<-..]] ||| [|..|] || [..<->..] ; : @ ||| +syn match cspOperator "->" +syn match cspOperator "/\\" +syn match cspOperator "[^/]\\"lc=1 +syn match cspOperator "\[\]" +syn match cspOperator "|\~|" +syn match cspOperator "\[>" +syn match cspOperator "\[\[" +syn match cspOperator "\]\]" +syn match cspOperator "<-" +syn match cspOperator "|||" +syn match cspOperator "[^|]||[^|]"lc=1,me=e-1 +syn match cspOperator "[^|{\~]|[^|}\~]"lc=1,me=e-1 +syn match cspOperator "\[|" +syn match cspOperator "|\]" +syn match cspOperator "\[[^>]"me=e-1 +syn match cspOperator "\]" +syn match cspOperator "<->" +syn match cspOperator "[?:!';@]" +syn match cspOperator "&" +syn match cspOperator "\." + +" (not on processes:) +" syn match cspDelimiter "{|" +" syn match cspDelimiter "|}" +" syn match cspDelimiter "{[^-|]"me=e-1 +" syn match cspDelimiter "[^-|]}"lc=1 + +" Keywords: +syn keyword cspKeyword length null head tail concat elem +syn keyword cspKeyword union inter diff Union Inter member card +syn keyword cspKeyword empty set Set Seq +syn keyword cspKeyword true false and or not within let +syn keyword cspKeyword nametype datatype diamond normal +syn keyword cspKeyword sbisim tau_loop_factor model_compress +syn keyword cspKeyword explicate +syn match cspKeyword "transparent" +syn keyword cspKeyword external chase prioritize +syn keyword cspKeyword channel Events +syn keyword cspKeyword extensions productions +syn keyword cspKeyword Bool Int + +" Reserved keywords: +syn keyword cspReserved attribute embed module subtype + +" Include: +syn region cspInclude matchgroup=cspIncludeKeyword start="^include" end="$" keepend contains=cspIncludeArg +syn region cspIncludeArg start='\s\+\"' end= '\"\s*' contained + +" Assertions: +syn keyword cspAssert assert deterministic divergence free deadlock +syn keyword cspAssert livelock +syn match cspAssert "\[T=" +syn match cspAssert "\[F=" +syn match cspAssert "\[FD=" +syn match cspAssert "\[FD\]" +syn match cspAssert "\[F\]" + +" Types and Sets +" (first char a capital, later at least one lower case, no trailing underscore): +syn match cspType "\<_*[A-Z][A-Z_0-9]*[a-z]\(\|[A-Za-z_0-9]*[A-Za-z0-9]\)\>" + +" Processes (all upper case, no trailing underscore): +" (For identifiers that could be types or sets, too, this second rule set +" wins.) +syn match cspProcess "\<[A-Z_][A-Z_0-9]*[A-Z0-9]\>" +syn match cspProcess "\<[A-Z_]\>" + +" reserved identifiers for tool output (ending in underscore): +syn match cspReservedIdentifier "\<[A-Za-z_][A-Za-z_0-9]*_\>" + +" ToDo markers: +syn match cspTodo "FIXME" contained +syn match cspTodo "TODO" contained +syn match cspTodo "!!!" contained + +" RT-Tester pseudo comments: +" (The now obsolete syntax:) +syn match cspOldRttComment "^--\$\$AM_UNDEF"lc=2 contained +syn match cspOldRttComment "^--\$\$AM_ERROR"lc=2 contained +syn match cspOldRttComment "^--\$\$AM_WARNING"lc=2 contained +syn match cspOldRttComment "^--\$\$AM_SET_TIMER"lc=2 contained +syn match cspOldRttComment "^--\$\$AM_RESET_TIMER"lc=2 contained +syn match cspOldRttComment "^--\$\$AM_ELAPSED_TIMER"lc=2 contained +syn match cspOldRttComment "^--\$\$AM_OUTPUT"lc=2 contained +syn match cspOldRttComment "^--\$\$AM_INPUT"lc=2 contained +" (The current syntax:) +syn region cspRttPragma matchgroup=cspRttPragmaKeyword start="^pragma\s\+" end="\s*$" oneline keepend contains=cspRttPragmaArg,cspRttPragmaSdl +syn keyword cspRttPragmaArg AM_ERROR AM_WARNING AM_SET_TIMER contained +syn keyword cspRttPragmaArg AM_RESET_TIMER AM_ELAPSED_TIMER contained +syn keyword cspRttPragmaArg AM_OUTPUT AM_INPUT AM_INTERNAL contained +" the "SDL_MATCH" extension: +syn region cspRttPragmaSdl matchgroup=cspRttPragmaKeyword start="SDL_MATCH\s\+" end="\s*$" contains=cspRttPragmaSdlArg contained +syn keyword cspRttPragmaSdlArg TRANSLATE nextgroup=cspRttPragmaSdlTransName contained +syn keyword cspRttPragmaSdlArg PARAM SKIP OPTIONAL CHOICE ARRAY nextgroup=cspRttPragmaSdlName contained +syn match cspRttPragmaSdlName "\s*\S\+\s*" nextgroup=cspRttPragmaSdlTail contained +syn region cspRttPragmaSdlTail start="" end="\s*$" contains=cspRttPragmaSdlTailArg contained +syn keyword cspRttPragmaSdlTailArg SUBSET_USED DEFAULT_VALUE Present contained +syn match cspRttPragmaSdlTransName "\s*\w\+\s*" nextgroup=cspRttPragmaSdlTransTail contained +syn region cspRttPragmaSdlTransTail start="" end="\s*$" contains=cspRttPragmaSdlTransTailArg contained +syn keyword cspRttPragmaSdlTransTailArg sizeof contained +syn match cspRttPragmaSdlTransTailArg "\*" contained +syn match cspRttPragmaSdlTransTailArg "(" contained +syn match cspRttPragmaSdlTransTailArg ")" contained + +" temporary syntax extension for commented-out "pragma SDL_MATCH": +syn match cspSdlRttComment "pragma\s\+SDL_MATCH\s\+" nextgroup=cspRttPragmaSdlArg contained + +syn sync lines=250 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default methods for highlighting. Can be overridden later +" (For vim version <=5.7, the command groups are defined in +" $VIMRUNTIME/syntax/synload.vim ) +hi def link cspComment Comment +hi def link cspNumber Number +hi def link cspConditional Conditional +hi def link cspOperator Delimiter +hi def link cspKeyword Keyword +hi def link cspReserved SpecialChar +hi def link cspInclude Error +hi def link cspIncludeKeyword Include +hi def link cspIncludeArg Include +hi def link cspAssert PreCondit +hi def link cspType Type +hi def link cspProcess Function +hi def link cspTodo Todo +hi def link cspOldRttComment Define +hi def link cspRttPragmaKeyword Define +hi def link cspSdlRttComment Define +hi def link cspRttPragmaArg Define +hi def link cspRttPragmaSdlArg Define +hi def link cspRttPragmaSdlName Default +hi def link cspRttPragmaSdlTailArg Define +hi def link cspRttPragmaSdlTransName Default +hi def link cspRttPragmaSdlTransTailArg Define +hi def link cspReservedIdentifier Error +" (Currently unused vim method: Debug) + + +let b:current_syntax = "csp" + +" vim: ts=8 diff --git a/.config/vim/syntax/css.vim b/.config/vim/syntax/css.vim new file mode 100644 index 0000000..da3f3c7 --- /dev/null +++ b/.config/vim/syntax/css.vim @@ -0,0 +1,671 @@ +" Vim syntax file +" Language: Cascading Style Sheets +" Previous Contributor List: +" Jules Wang +" Claudio Fleiner +" Yeti (Add full CSS2, HTML4 support) +" Nikolai Weibull (Add CSS2 support) +" URL: https://github.com/vim-language-dept/css-syntax.vim +" Maintainer: Jay Sitter +" Last Change: 2024 Mar 2 +" 2025 Nov 11: improve support for cssBoxProperties #18717 + +" quit when a syntax file was already loaded +if !exists("main_syntax") + if exists("b:current_syntax") + finish + endif + let main_syntax = 'css' +elseif exists("b:current_syntax") && b:current_syntax == "css" + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn case ignore +" Add dash to allowed keyword characters. +syn iskeyword @,48-57,_,192-255,- + +" HTML4 tags +syn keyword cssTagName abbr address area a b base +syn keyword cssTagName bdo blockquote body br button +syn keyword cssTagName caption cite code col colgroup dd del +syn keyword cssTagName dfn div dl dt em fieldset form +syn keyword cssTagName h1 h2 h3 h4 h5 h6 head hr html img i +syn keyword cssTagName iframe input ins isindex kbd label legend li +syn keyword cssTagName link map menu meta noscript ol optgroup +syn keyword cssTagName option p param picture pre q s samp script small +syn keyword cssTagName span strong sub sup tbody td +syn keyword cssTagName textarea tfoot th thead title tr ul u var +syn keyword cssTagName object svg +syn match cssTagName /\\|\\|\/ + +" 34 HTML5 tags +syn keyword cssTagName article aside audio bdi canvas command data +syn keyword cssTagName datalist details dialog embed figcaption figure footer +syn keyword cssTagName header hgroup keygen main mark menuitem meter nav +syn keyword cssTagName output progress rt rp ruby section +syn keyword cssTagName source summary time track video wbr + +" Tags not supported in HTML5 +" acronym applet basefont big center dir +" font frame frameset noframes strike tt + +syn match cssTagName "\*" + +" selectors +syn match cssSelectorOp "[,>+~]" +syn match cssSelectorOp2 "[~|^$*]\?=" contained +syn region cssAttributeSelector matchgroup=cssSelectorOp start="\[" end="]" contains=cssUnicodeEscape,cssSelectorOp2,cssStringQ,cssStringQQ + +" .class and #id +syn match cssClassName "\.-\=[A-Za-z_][A-Za-z0-9_-]*" contains=cssClassNameDot +syn match cssClassNameDot contained '\.' + +try +syn match cssIdentifier "#[A-Za-zÀ-ÿ_@][A-Za-zÀ-ÿ0-9_@-]*" +catch /^.*/ +syn match cssIdentifier "#[A-Za-z_@][A-Za-z0-9_@-]*" +endtry + +" digits +syn match cssValueInteger contained "[-+]\=\d\+" contains=cssUnitDecorators +syn match cssValueNumber contained "[-+]\=\d\+\(\.\d*\)\=" contains=cssUnitDecorators +syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=\(mm\|cm\|in\|pt\|pc\|em\|ex\|px\|rem\|dpi\|dppx\|dpcm\|fr\|vw\|vh\|vmin\|vmax\|ch\)\>" contains=cssUnitDecorators +syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=%" contains=cssUnitDecorators +syn match cssValueAngle contained "[-+]\=\d\+\(\.\d*\)\=\(deg\|grad\|rad\)\>" contains=cssUnitDecorators +syn match cssValueTime contained "+\=\d\+\(\.\d*\)\=\(ms\|s\)\>" contains=cssUnitDecorators +syn match cssValueFrequency contained "+\=\d\+\(\.\d*\)\=\(Hz\|kHz\)\>" contains=cssUnitDecorators + +" The 16 basic color names +syn keyword cssColor contained aqua black blue fuchsia gray green lime maroon navy olive purple red silver teal yellow + +" 130 more color names +syn keyword cssColor contained aliceblue antiquewhite aquamarine azure +syn keyword cssColor contained beige bisque blanchedalmond blueviolet brown burlywood +syn keyword cssColor contained cadetblue chartreuse chocolate coral cornflowerblue cornsilk crimson cyan +syn match cssColor contained /\/ +syn match cssColor contained /\/ +syn match cssColor contained /\/ +syn match cssColor contained /\/ +syn keyword cssColor contained deeppink deepskyblue dimgray dimgrey dodgerblue firebrick +syn keyword cssColor contained floralwhite forestgreen gainsboro ghostwhite gold +syn keyword cssColor contained goldenrod greenyellow grey honeydew hotpink +syn keyword cssColor contained indianred indigo ivory khaki lavender lavenderblush lawngreen +syn keyword cssColor contained lemonchiffon limegreen linen magenta +syn match cssColor contained /\/ +syn match cssColor contained /\/ +syn match cssColor contained /\/ +syn match cssColor contained /\/ +syn match cssColor contained /\/ +syn keyword cssColor contained midnightblue mintcream mistyrose moccasin navajowhite +syn keyword cssColor contained oldlace olivedrab orange orangered orchid +syn match cssColor contained /\/ +syn keyword cssColor contained papayawhip peachpuff peru pink plum powderblue +syn keyword cssColor contained rosybrown royalblue rebeccapurple saddlebrown salmon +syn keyword cssColor contained sandybrown seagreen seashell sienna skyblue slateblue +syn keyword cssColor contained slategray slategrey snow springgreen steelblue tan +syn keyword cssColor contained thistle tomato turquoise violet wheat +syn keyword cssColor contained whitesmoke yellowgreen + +" FIXME: These are actually case-insensitive too, but (a) specs recommend using +" mixed-case (b) it's hard to highlight the word `Background' correctly in +" all situations +syn case match +syn keyword cssColor contained ActiveBorder ActiveCaption AppWorkspace ButtonFace ButtonHighlight ButtonShadow ButtonText CaptionText GrayText Highlight HighlightText InactiveBorder InactiveCaption InactiveCaptionText InfoBackground InfoText Menu MenuText Scrollbar ThreeDDarkShadow ThreeDFace ThreeDHighlight ThreeDLightShadow ThreeDShadow Window WindowFrame WindowText Background +syn case ignore + +syn match cssImportant contained "!\s*important\>" +syn match cssCustomProp contained "\<--[a-zA-Z0-9-_]*\>" + +syn match cssColor contained "\" +syn match cssColor contained "\" +syn match cssColor contained "\" +syn match cssColor contained "#\x\{3,4\}\>" contains=cssUnitDecorators +syn match cssColor contained "#\x\{6\}\>" contains=cssUnitDecorators +syn match cssColor contained "#\x\{8\}\>" contains=cssUnitDecorators + +syn region cssURL contained matchgroup=cssFunctionName start="\<\(uri\|url\|local\|format\)\s*(" end=")" contains=cssStringQ,cssStringQQ oneline +syn region cssMathGroup contained matchgroup=cssMathParens start="(" end=")" containedin=cssFunction,cssMathGroup contains=cssCustomProp,cssValue.*,cssFunction,cssColor,cssStringQ,cssStringQQ oneline +syn region cssFunction contained matchgroup=cssFunctionName start="\<\(var\|calc\)\s*(" end=")" contains=cssCustomProp,cssValue.*,cssFunction,cssURL,cssColor,cssStringQ,cssStringQQ oneline +syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgb\|clip\|attr\|counter\|rect\|cubic-bezier\|steps\)\s*(" end=")" oneline contains=cssValueInteger,cssValueNumber,cssValueLength,cssFunctionComma +syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgba\|hsl\|hsla\|color-stop\|from\|to\)\s*(" end=")" oneline contains=cssColor,cssValueInteger,cssValueNumber,cssValueLength,cssFunctionComma,cssFunction +syn region cssFunction contained matchgroup=cssFunctionName start="\<\(linear-\|radial-\|conic-\)\=\gradient\s*(" end=")" oneline contains=cssColor,cssValueInteger,cssValueNumber,cssValueLength,cssFunction,cssGradientAttr,cssFunctionComma +syn region cssFunction contained matchgroup=cssFunctionName start="\<\(matrix\(3d\)\=\|scale\(3d\|X\|Y\|Z\)\=\|translate\(3d\|X\|Y\|Z\)\=\|skew\(X\|Y\)\=\|rotate\(3d\|X\|Y\|Z\)\=\|perspective\)\s*(" end=")" oneline contains=cssValueInteger,cssValueNumber,cssValueLength,cssValueAngle,cssFunctionComma +syn region cssFunction contained matchgroup=cssFunctionName start="\<\(blur\|brightness\|contrast\|drop-shadow\|grayscale\|hue-rotate\|invert\|opacity\|saturate\|sepia\)\s*(" end=")" oneline contains=cssValueInteger,cssValueNumber,cssValueLength,cssValueAngle,cssFunctionComma +syn keyword cssGradientAttr contained top bottom left right cover center middle ellipse at +syn match cssFunctionComma contained "," + +" Common Prop and Attr +syn keyword cssCommonAttr contained auto none inherit all default normal +syn keyword cssCommonAttr contained top bottom center stretch hidden visible +syn match cssCommonAttr contained "\<\(max-\|min-\|fit-\)content\>" +"------------------------------------------------ +" CSS Animations +" http://www.w3.org/TR/css3-animations/ +syn match cssAnimationProp contained "\" + +" animation-direction attributes +syn keyword cssAnimationAttr contained alternate reverse +syn match cssAnimationAttr contained "\" + +" animation-fill-mode attributes +syn keyword cssAnimationAttr contained forwards backwards both + +" animation-play-state attributes +syn keyword cssAnimationAttr contained running paused + +" animation-iteration-count attributes +syn keyword cssAnimationAttr contained infinite +"------------------------------------------------ +" CSS Backgrounds and Borders Module Level 3 +" http://www.w3.org/TR/css3-background/ +syn match cssBackgroundProp contained "\" +" background-attachment attributes +syn keyword cssBackgroundAttr contained scroll fixed local + +" background-position attributes +syn keyword cssBackgroundAttr contained left center right top bottom + +" background-repeat attributes +syn match cssBackgroundAttr contained "\" +syn match cssBackgroundAttr contained "\" + +" background-size attributes +syn keyword cssBackgroundAttr contained cover contain + +syn match cssBorderProp contained "\" +syn match cssBorderProp contained "\" +syn match cssBorderProp contained "\" +syn match cssBorderProp contained "\" +syn match cssBorderProp contained "\" +syn match cssBorderProp contained "\" +syn match cssBorderProp contained "\" + +" border-image attributes +syn keyword cssBorderAttr contained stretch round fill + +" border-style attributes +syn keyword cssBorderAttr contained dotted dashed solid double groove ridge inset outset + +" border-width attributes +syn keyword cssBorderAttr contained thin thick medium + +" box-decoration-break attributes +syn keyword cssBorderAttr contained clone slice +"------------------------------------------------ + +syn match cssBoxProp contained "\" +syn match cssBoxProp contained "\" +syn match cssBoxProp contained "\<\(margin\|padding\)\(-\(inline\|block\)\(-\(start\|end\)\)\=\)\=\>" +syn match cssBoxProp contained "\" +syn match cssBoxProp contained "\" +syn keyword cssBoxAttr contained visible hidden scroll auto +syn match cssBoxAttr contained "\" + +syn keyword cssCascadeProp contained all +syn keyword cssCascadeAttr contained initial unset revert + +syn keyword cssColorProp contained opacity +syn match cssColorProp contained "\" +syn match cssColorProp contained "\" + + +syn match cssDimensionProp contained "\<\(min\|max\)-\(width\|height\)\>" +syn keyword cssDimensionProp contained height +syn keyword cssDimensionProp contained width + +" CSS Flexible Box Layout Module Level 1 +" http://www.w3.org/TR/css3-flexbox/ +" CSS Box Alignment Module Level 3 +" http://www.w3.org/TR/css-align-3/ +syn match cssFlexibleBoxProp contained "\" +syn match cssFlexibleBoxProp contained "\<\(align\|justify\)\(-\(items\|self\|content\)\)\=\>" +syn keyword cssFlexibleBoxProp contained order + +syn match cssFlexibleBoxAttr contained "\<\(row\|column\|wrap\)\(-reverse\)\=\>" +syn keyword cssFlexibleBoxAttr contained nowrap stretch baseline center +syn match cssFlexibleBoxAttr contained "\" +syn match cssFlexibleBoxAttr contained "\" + +" CSS Fonts Module Level 3 +" http://www.w3.org/TR/css-fonts-3/ +syn match cssFontProp contained "\" + +" font attributes +syn keyword cssFontAttr contained icon menu caption +syn match cssFontAttr contained "\" +syn match cssFontAttr contained "\" +syn keyword cssFontAttr contained larger smaller +syn match cssFontAttr contained "\<\(x\{1,2\}-\)\=\(large\|small\)\>" +syn match cssFontAttr contained "\" +" font-family attributes +syn keyword cssFontAttr contained sans-serif serif cursive fantasy monospace +" font-feature-settings attributes +syn keyword cssFontAttr contained on off +" font-stretch attributes +syn match cssFontAttr contained "\<\(\(ultra\|extra\|semi\)-\)\=\(condensed\|expanded\)\>" +" font-style attributes +syn keyword cssFontAttr contained italic oblique +" font-synthesis attributes +syn keyword cssFontAttr contained weight style +" font-weight attributes +syn keyword cssFontAttr contained bold bolder lighter +" font-display attributes +syn keyword cssFontAttr contained auto block swap fallback optional +" TODO: font-variant-* attributes +"------------------------------------------------ + +" Webkit specific property/attributes +syn match cssFontProp contained "\" +syn match cssFontAttr contained "\<\(subpixel-\)\=\antialiased\>" + + +" CSS Multi-column Layout Module +" http://www.w3.org/TR/css3-multicol/ +syn match cssMultiColumnProp contained "\" +syn match cssMultiColumnProp contained "\" +syn keyword cssMultiColumnProp contained columns +syn keyword cssMultiColumnAttr contained balance medium +syn keyword cssMultiColumnAttr contained always left right page column +syn match cssMultiColumnAttr contained "\" + +" http://www.w3.org/TR/css3-break/#page-break +syn match cssMultiColumnProp contained "\" + +" http://www.w3.org/TR/SVG11/interact.html +syn match cssInteractProp contained "\" +syn match cssInteractAttr contained "\<\(visible\)\=\(Painted\|Fill\|Stroke\)\=\>" + +" TODO find following items in w3c docs. +syn keyword cssGeneratedContentProp contained quotes crop +syn match cssGeneratedContentProp contained "\" +syn match cssGeneratedContentProp contained "\" +syn match cssGeneratedContentProp contained "\" +syn match cssGeneratedContentAttr contained "\<\(no-\)\=\(open\|close\)-quote\>" + +" https://www.w3.org/TR/css-grid-1/ +syn match cssGridProp contained "\" +syn match cssGridProp contained "\" +syn match cssGridProp contained "\<\(grid-\)\=\(column\|row\)\(-\(start\|end\|gap\)\)\=\>" +syn match cssGridProp contained "\" +syn match cssGridProp contained "\" +syn match cssGridProp contained "\" + +syn match cssHyerlinkProp contained "\" + +syn match cssListProp contained "\" +syn match cssListAttr contained "\<\(lower\|upper\)-\(roman\|alpha\|greek\|latin\)\>" +syn match cssListAttr contained "\<\(hiragana\|katakana\)\(-iroha\)\=\>" +syn match cssListAttr contained "\<\(decimal\(-leading-zero\)\=\|cjk-ideographic\)\>" +syn keyword cssListAttr contained disc circle square hebrew armenian georgian +syn keyword cssListAttr contained inside outside + +" object-fit https://www.w3.org/TR/css-images-3/#the-object-fit +syn match cssObjectProp contained "\" +syn keyword cssObjectAttr contained fill contain cover scale-down + +syn keyword cssPositioningProp contained bottom clear clip display float left +syn keyword cssPositioningProp contained position right top visibility +syn match cssPositioningProp contained "\" +syn keyword cssPositioningAttr contained block compact grid +syn match cssPositioningAttr contained "\" +syn keyword cssPositioningAttr contained left right both +syn match cssPositioningAttr contained "\" +syn match cssPositioningAttr contained "\" +syn match cssPositioningAttr contained "\" +syn keyword cssPositioningAttr contained static relative absolute fixed subgrid sticky + +syn keyword cssPrintAttr contained landscape portrait crop cross always + +syn match cssTableProp contained "\<\(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\)\>" +syn keyword cssTableAttr contained fixed collapse separate show hide once always + + +syn keyword cssTextProp contained color direction hyphens +syn match cssTextProp "\<\(\(word\|letter\)-spacing\|text\(-\(decoration\|transform\|align\|index\|shadow\)\)\=\|vertical-align\|unicode-bidi\|line-height\)\>" +syn match cssTextProp contained "\" +syn match cssTextProp contained "\<\(word\|line\)-break\|\(overflow\|word\)-wrap\>" +syn match cssTextProp contained "\" +syn match cssTextProp contained "\" +syn match cssTextProp contained "\" +syn match cssTextProp contained "\" +syn match cssTextAttr contained "\" +syn match cssTextAttr contained "\<\(text-\)\=\(top\|bottom\)\>" +syn keyword cssTextAttr contained ltr rtl embed nowrap +syn keyword cssTextAttr contained underline overline blink sub super middle +syn keyword cssTextAttr contained capitalize uppercase lowercase +syn keyword cssTextAttr contained justify baseline sub super +syn keyword cssTextAttr contained optimizeLegibility optimizeSpeed geometricPrecision +syn match cssTextAttr contained "\" +syn match cssTextAttr contained "\<\(allow\|force\)-end\>" +syn keyword cssTextAttr contained start end adjacent +syn match cssTextAttr contained "\" +syn keyword cssTextAttr contained distribute kashida first last +syn keyword cssTextAttr contained clip ellipsis unrestricted suppress +syn match cssTextAttr contained "\" +syn match cssTextAttr contained "\" +syn keyword cssTextAttr contained manual +syn match cssTextAttr contained "\" + +syn match cssTransformProp contained "\" +syn match cssTransformProp contained "\" +syn match cssTransformProp contained "\" + +" CSS Transitions +" http://www.w3.org/TR/css3-transitions/ +syn match cssTransitionProp contained "\" + +" transition-time-function attributes +syn match cssTransitionAttr contained "\" +syn match cssTransitionAttr contained "\" +syn match cssTransitionAttr contained "\" +"------------------------------------------------ +" CSS Basic User Interface Module Level 3 (CSS3 UI) +" http://www.w3.org/TR/css3-ui/ +syn match cssUIProp contained "\" +syn match cssUIAttr contained "\<\(content\|padding\|border\)\(-box\)\=\>" + +syn keyword cssUIProp contained cursor +syn match cssUIAttr contained "\<\(\([ns]\=[ew]\=\)\|col\|row\|nesw\|nwse\)-resize\>" +syn keyword cssUIAttr contained crosshair help move pointer alias copy +syn keyword cssUIAttr contained progress wait text cell move +syn match cssUIAttr contained "\" +syn match cssUIAttr contained "\" +syn match cssUIAttr contained "\" +syn match cssUIAttr contained "\" +syn match cssUIAttr contained "\<\(vertical-\)\=text\>" +syn match cssUIAttr contained "\" + +syn match cssUIProp contained "\" +syn keyword cssUIAttr contained active inactive disabled + +syn match cssUIProp contained "\" +syn match cssUIProp contained "\" +syn keyword cssUIAttr contained invert + +syn keyword cssUIProp contained icon resize +syn keyword cssUIAttr contained both horizontal vertical + +syn match cssUIProp contained "\" +syn keyword cssUIAttr contained clip ellipsis + +syn match cssUIProp contained "\" +syn keyword cssUIAttr contained pixellated +syn match cssUIAttr contained "\" + +"------------------------------------------------ +" Webkit/iOS specific attributes +syn match cssUIAttr contained '\' +" IE specific attributes +syn match cssIEUIAttr contained '\' + +" Webkit/iOS specific properties +syn match cssUIProp contained '\<\(tap-highlight-color\|user-select\|touch-callout\)\>' +" IE specific properties +syn match cssIEUIProp contained '\<\(interpolation-mode\|zoom\|filter\)\>' + +" Webkit/Firebox specific properties/attributes +syn keyword cssUIProp contained appearance +syn keyword cssUIAttr contained window button field icon document menu + + +syn match cssAuralProp contained "\<\(pause\|cue\)\(-\(before\|after\)\)\=\>" +syn match cssAuralProp contained "\<\(play-during\|speech-rate\|voice-family\|pitch\(-range\)\=\|speak\(-\(punctuation\|numeral\|header\)\)\=\)\>" +syn keyword cssAuralProp contained volume during azimuth elevation stress richness +syn match cssAuralAttr contained "\<\(x-\)\=\(soft\|loud\)\>" +syn keyword cssAuralAttr contained silent +syn match cssAuralAttr contained "\" +syn keyword cssAuralAttr contained non mix +syn match cssAuralAttr contained "\<\(left\|right\)-side\>" +syn match cssAuralAttr contained "\<\(far\|center\)-\(left\|center\|right\)\>" +syn keyword cssAuralAttr contained leftwards rightwards behind +syn keyword cssAuralAttr contained below level above lower higher +syn match cssAuralAttr contained "\<\(x-\)\=\(slow\|fast\|low\|high\)\>" +syn keyword cssAuralAttr contained faster slower +syn keyword cssAuralAttr contained male female child code digits continuous + +" mobile text +syn match cssMobileTextProp contained "\" + +syn keyword cssMediaProp contained width height orientation scan +syn keyword cssMediaProp contained any-hover any-pointer color-gamut grid hover +syn keyword cssMediaProp contained overflow-block overflow-inline pointer update +syn match cssMediaProp contained /\<\(\(max\|min\)-\)\=\(\(device\)-\)\=aspect-ratio\>/ +syn match cssMediaProp contained /\<\(\(max\|min\)-\)\=device-pixel-ratio\>/ +syn match cssMediaProp contained /\<\(\(max\|min\)-\)\=device-\(height\|width\)\>/ +syn match cssMediaProp contained /\<\(\(max\|min\)-\)\=\(height\|width\|resolution\|monochrome\|color\(-index\)\=\)\>/ +syn keyword cssMediaAttr contained portrait landscape progressive interlace +syn keyword cssMediaAttr contained coarse fast fine hover infinite p3 paged +syn keyword cssMediaAttr contained rec2020 scroll slow srgb +syn match cssKeyFrameProp contained /\(\d\+\(\.\d\+\)\?%\|\(\\)\)/ nextgroup=cssDefinition +syn match cssPageMarginProp /@\(\(top\|left\|right\|bottom\)-\(left\|center\|right\|middle\|bottom\)\)\(-corner\)\=/ contained nextgroup=cssDefinition +syn keyword cssPageProp contained content size +syn keyword cssPageProp contained orphans widows +syn keyword cssFontDescriptorProp contained src +syn match cssFontDescriptorProp contained "\" +" unicode-range attributes +syn match cssFontDescriptorAttr contained "U+[0-9A-Fa-f?]\+" +syn match cssFontDescriptorAttr contained "U+\x\+-\x\+" + +syn match cssBraces contained "[{}]" +syn match cssError contained "{@<>" +syn region cssDefinition transparent matchgroup=cssBraces start='{' end='}' contains=cssTagName,cssAttributeSelector,cssClassName,cssIdentifier,cssAtRule,cssAttrRegion,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssCustomProp,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssVendor,cssDefinition,cssHacks,cssNoise fold +syn match cssBraceError "}" +syn match cssAttrComma "," + +" Pseudo class +" https://www.w3.org/TR/selectors-4/ +syn match cssPseudoClass ":[A-Za-z0-9_-]*" contains=cssNoise,cssPseudoClassId,cssUnicodeEscape,cssVendor,cssPseudoClassFn +syn keyword cssPseudoClassId contained link visited active hover before after left right +syn keyword cssPseudoClassId contained root empty target enabled disabled checked invalid +syn match cssPseudoClassId contained "\" +syn match cssPseudoClassId contained "\<\(first\|last\|only\)-\(of-type\|child\)\>" +syn match cssPseudoClassId contained "\" +syn region cssPseudoClassFn contained matchgroup=cssFunctionName start="\<\(not\|is\|lang\|\(nth\|nth-last\)-\(of-type\|child\)\)(" end=")" contains=cssStringQ,cssStringQQ,cssTagName,cssAttributeSelector,cssClassName,cssIdentifier +" ------------------------------------ +" Vendor specific properties +syn match cssPseudoClassId contained "\" +syn match cssPseudoClassId contained "\<\(input-\)\=placeholder\>" + +" Misc highlight groups +syntax match cssUnitDecorators /\(#\|-\|+\|%\|mm\|cm\|in\|pt\|pc\|em\|ex\|px\|ch\|rem\|vh\|vw\|vmin\|vmax\|dpi\|dppx\|dpcm\|Hz\|kHz\|s\|ms\|deg\|grad\|rad\)/ contained +syntax match cssNoise contained /\(:\|;\|\/\)/ + +" Comment +syn region cssComment start="/\*" end="\*/" contains=@Spell fold + +syn match cssUnicodeEscape "\\\x\{1,6}\s\?" +syn match cssSpecialCharQQ +\\\\\|\\"+ contained +syn match cssSpecialCharQ +\\\\\|\\'+ contained +syn region cssStringQQ start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=cssUnicodeEscape,cssSpecialCharQQ +syn region cssStringQ start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=cssUnicodeEscape,cssSpecialCharQ + +" Vendor Prefix +syn match cssVendor contained "-\(webkit\|moz\|o\|ms\)-" + +" Various CSS Hack characters +" In earlier versions of IE (6 and 7), one can prefix property names +" with a _ or * to isolate those definitions to particular versions of IE +" This is purely decorative and therefore we assign to the same highlight +" group to cssVendor, for more information: +" http://www.paulirish.com/2009/browser-specific-css-hacks/ +syn match cssHacks contained /\(_\|*\)/ + +" Attr Enhance +" Some keywords are both Prop and Attr, so we have to handle them +" cssPseudoClassId is hidden by cssAttrRegion, so we add it here. see #69 +syn region cssAttrRegion start=/:/ end=/\ze\(;\|)\|}\|{\)/ contained contains=cssPseudoClassId,css.*Attr,cssColor,cssImportant,cssValue.*,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssAttrComma,cssNoise + +" Hack for transition +" 'transition' has Props after ':'. +syn region cssAttrRegion start=/transition\s*:/ end=/\ze\(;\|)\|}\)/ contained contains=css.*Prop,css.*Attr,cssColor,cssImportant,cssValue.*,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssAttrComma,cssNoise + +syn match cssAtKeyword /@\(font-face\|media\|keyframes\|import\|charset\|namespace\|page\|supports\)/ + +syn keyword cssAtRuleLogical only not and contained + +" @media +" Reference: http://www.w3.org/TR/css3-mediaqueries/ +syn region cssAtRule start=/@media\>/ end=/\ze{/ skipwhite skipnl matchgroup=cssAtKeyword contains=cssMediaProp,cssValueLength,cssAtRuleLogical,cssValueInteger,cssMediaAttr,cssVendor,cssMediaType,cssComment,cssCustomProp,cssFunctionName nextgroup=cssDefinition +syn keyword cssMediaType contained screen print aural braille embossed handheld projection tty tv speech all contained + +" @page +" http://www.w3.org/TR/css3-page/ +syn region cssAtRule start=/@page\>/ end=/\ze{/ skipwhite skipnl matchgroup=cssAtKeyword contains=cssPagePseudo,cssComment nextgroup=cssDefinition +syn match cssPagePseudo /:\(left\|right\|first\|blank\)/ contained skipwhite skipnl +" @keyframe +" http://www.w3.org/TR/css3-animations/#keyframes +syn region cssAtRule start=/@\(-[a-z]\+-\)\=keyframes\>/ end=/\ze{/ skipwhite skipnl matchgroup=cssAtKeyword contains=cssVendor,cssComment nextgroup=cssDefinition + +syn region cssAtRule start=/@import\>/ end=/\ze;/ contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssAtKeyword,cssURL,cssMediaProp,cssValueLength,cssAtRuleLogical,cssValueInteger,cssMediaAttr,cssMediaType +syn region cssAtRule start=/@charset\>/ end=/\ze;/ contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssAtKeyword +syn region cssAtRule start=/@namespace\>/ end=/\ze;/ contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssAtKeyword + +" @supports +" https://www.w3.org/TR/css3-conditional/#at-supports +syn region cssAtRule start=/@supports\>/ end=/\ze{/ skipwhite skipnl contains=cssAtRuleLogical,cssAttrRegion,css.*Prop,cssValue.*,cssVendor,cssAtKeyword,cssComment nextgroup=cssDefinition + + +if main_syntax == "css" + syn sync minlines=10 +endif + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link cssComment Comment +hi def link cssVendor Comment +hi def link cssHacks Comment +hi def link cssTagName Statement +hi def link cssDeprecated Error +hi def link cssSelectorOp Special +hi def link cssSelectorOp2 Special +hi def link cssAttrComma Special + +hi def link cssAnimationProp cssProp +hi def link cssBackgroundProp cssProp +hi def link cssBorderProp cssProp +hi def link cssBoxProp cssProp +hi def link cssCascadeProp cssProp +hi def link cssColorProp cssProp +hi def link cssContentForPagedMediaProp cssProp +hi def link cssDimensionProp cssProp +hi def link cssFlexibleBoxProp cssProp +hi def link cssFontProp cssProp +hi def link cssGeneratedContentProp cssProp +hi def link cssGridProp cssProp +hi def link cssHyerlinkProp cssProp +hi def link cssInteractProp cssProp +hi def link cssLineboxProp cssProp +hi def link cssListProp cssProp +hi def link cssMarqueeProp cssProp +hi def link cssMultiColumnProp cssProp +hi def link cssPagedMediaProp cssProp +hi def link cssPositioningProp cssProp +hi def link cssObjectProp cssProp +hi def link cssPrintProp cssProp +hi def link cssRubyProp cssProp +hi def link cssSpeechProp cssProp +hi def link cssTableProp cssProp +hi def link cssTextProp cssProp +hi def link cssTransformProp cssProp +hi def link cssTransitionProp cssProp +hi def link cssUIProp cssProp +hi def link cssIEUIProp cssProp +hi def link cssAuralProp cssProp +hi def link cssRenderProp cssProp +hi def link cssMobileTextProp cssProp + +hi def link cssAnimationAttr cssAttr +hi def link cssBackgroundAttr cssAttr +hi def link cssBorderAttr cssAttr +hi def link cssBoxAttr cssAttr +hi def link cssContentForPagedMediaAttr cssAttr +hi def link cssDimensionAttr cssAttr +hi def link cssFlexibleBoxAttr cssAttr +hi def link cssFontAttr cssAttr +hi def link cssGeneratedContentAttr cssAttr +hi def link cssGridAttr cssAttr +hi def link cssHyerlinkAttr cssAttr +hi def link cssInteractAttr cssAttr +hi def link cssLineboxAttr cssAttr +hi def link cssListAttr cssAttr +hi def link cssMarginAttr cssAttr +hi def link cssMarqueeAttr cssAttr +hi def link cssMultiColumnAttr cssAttr +hi def link cssPaddingAttr cssAttr +hi def link cssPagedMediaAttr cssAttr +hi def link cssPositioningAttr cssAttr +hi def link cssObjectAttr cssAttr +hi def link cssGradientAttr cssAttr +hi def link cssPrintAttr cssAttr +hi def link cssRubyAttr cssAttr +hi def link cssSpeechAttr cssAttr +hi def link cssTableAttr cssAttr +hi def link cssTextAttr cssAttr +hi def link cssTransformAttr cssAttr +hi def link cssTransitionAttr cssAttr +hi def link cssUIAttr cssAttr +hi def link cssIEUIAttr cssAttr +hi def link cssAuralAttr cssAttr +hi def link cssRenderAttr cssAttr +hi def link cssCascadeAttr cssAttr +hi def link cssCommonAttr cssAttr + +hi def link cssPseudoClassId PreProc +hi def link cssPseudoClassLang Constant +hi def link cssValueLength Number +hi def link cssValueInteger Number +hi def link cssValueNumber Number +hi def link cssValueAngle Number +hi def link cssValueTime Number +hi def link cssValueFrequency Number +hi def link cssFunction Constant +hi def link cssURL String +hi def link cssFunctionName Function +hi def link cssFunctionComma Function +hi def link cssColor Constant +hi def link cssIdentifier Function +hi def link cssAtRule Include +hi def link cssAtKeyword PreProc +hi def link cssImportant Special +hi def link cssCustomProp Special +hi def link cssBraces Function +hi def link cssBraceError Error +hi def link cssError Error +hi def link cssUnicodeEscape Special +hi def link cssStringQQ String +hi def link cssStringQ String +hi def link cssAttributeSelector String +hi def link cssMediaType Special +hi def link cssMediaComma Normal +hi def link cssAtRuleLogical Statement +hi def link cssMediaProp cssProp +hi def link cssMediaAttr cssAttr +hi def link cssPagePseudo PreProc +hi def link cssPageMarginProp cssAtKeyword +hi def link cssPageProp cssProp +hi def link cssKeyFrameProp Constant +hi def link cssFontDescriptor Special +hi def link cssFontDescriptorProp cssProp +hi def link cssFontDescriptorAttr cssAttr +hi def link cssUnicodeRange Constant +hi def link cssClassName Function +hi def link cssClassNameDot Function +hi def link cssProp StorageClass +hi def link cssAttr Constant +hi def link cssUnitDecorators Number +hi def link cssNoise Noise + +let b:current_syntax = "css" + +if main_syntax == 'css' + unlet main_syntax +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 diff --git a/.config/vim/syntax/csv.vim b/.config/vim/syntax/csv.vim new file mode 100644 index 0000000..848029a --- /dev/null +++ b/.config/vim/syntax/csv.vim @@ -0,0 +1,39 @@ +vim9script + +# Maintainer: Maxim Kim +# Last Update: 2024-06-18 + +if exists("b:current_syntax") + finish +endif + +var delimiter = get(b:, "csv_delimiter", ",") + +# generate bunch of following syntaxes: +# syntax match csvCol8 /.\{-}\(,\|$\)/ nextgroup=escCsvCol0,csvCol0 +# syntax region escCsvCol8 start=/ *"\([^"]*""\)*[^"]*/ end=/" *\(,\|$\)/ nextgroup=escCsvCol0,csvCol0 +for col in range(8, 0, -1) + var ncol = (col == 8 ? 0 : col + 1) + exe $'syntax match csvCol{col}' .. ' /.\{-}\(' .. delimiter .. '\|$\)/ nextgroup=escCsvCol' .. ncol .. ',csvCol' .. ncol + exe $'syntax region escCsvCol{col}' .. ' start=/ *"\([^"]*""\)*[^"]*/ end=/" *\(' .. delimiter .. '\|$\)/ nextgroup=escCsvCol' .. ncol .. ',csvCol' .. ncol +endfor + +hi def link csvCol1 Statement +hi def link csvCol2 Constant +hi def link csvCol3 Type +hi def link csvCol4 PreProc +hi def link csvCol5 Identifier +hi def link csvCol6 Special +hi def link csvCol7 String +hi def link csvCol8 Comment + +hi def link escCsvCol1 csvCol1 +hi def link escCsvCol2 csvCol2 +hi def link escCsvCol3 csvCol3 +hi def link escCsvCol4 csvCol4 +hi def link escCsvCol5 csvCol5 +hi def link escCsvCol6 csvCol6 +hi def link escCsvCol7 csvCol7 +hi def link escCsvCol8 csvCol8 + +b:current_syntax = "csv" diff --git a/.config/vim/syntax/cterm.vim b/.config/vim/syntax/cterm.vim new file mode 100644 index 0000000..1b6cb28 --- /dev/null +++ b/.config/vim/syntax/cterm.vim @@ -0,0 +1,177 @@ +" Vim syntax file +" Language: Century Term Command Script +" Maintainer: Sean M. McKee +" Last Change: 2002 Apr 13 +" Version Info: @(#)cterm.vim 1.7 97/12/15 09:23:14 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +"FUNCTIONS +syn keyword ctermFunction abort addcr addlf answer at attr batch baud +syn keyword ctermFunction break call capture cd cdelay charset cls color +syn keyword ctermFunction combase config commect copy cread +syn keyword ctermFunction creadint devprefix dialer dialog dimint +syn keyword ctermFunction dimlog dimstr display dtimeout dwait edit +syn keyword ctermFunction editor emulate erase escloop fcreate +syn keyword ctermFunction fflush fillchar flags flush fopen fread +syn keyword ctermFunction freadln fseek fwrite fwriteln get hangup +syn keyword ctermFunction help hiwait htime ignore init itime +syn keyword ctermFunction keyboard lchar ldelay learn lockfile +syn keyword ctermFunction locktime log login logout lowait +syn keyword ctermFunction lsend ltime memlist menu mkdir mode +syn keyword ctermFunction modem netdialog netport noerror pages parity +syn keyword ctermFunction pause portlist printer protocol quit rcv +syn keyword ctermFunction read readint readn redial release +syn keyword ctermFunction remote rename restart retries return +syn keyword ctermFunction rmdir rtime run runx scrollback send +syn keyword ctermFunction session set setcap setcolor setkey +syn keyword ctermFunction setsym setvar startserver status +syn keyword ctermFunction stime stopbits stopserver tdelay +syn keyword ctermFunction terminal time trans type usend version +syn keyword ctermFunction vi vidblink vidcard vidout vidunder wait +syn keyword ctermFunction wildsize wclose wopen wordlen wru wruchar +syn keyword ctermFunction xfer xmit xprot +syn match ctermFunction "?" +"syn keyword ctermFunction comment remark + +"END FUNCTIONS +"INTEGER FUNCTIONS +syn keyword ctermIntFunction asc atod eval filedate filemode filesize ftell +syn keyword ctermIntFunction len termbits opsys pos sum time val mdmstat +"END INTEGER FUNCTIONS + +"STRING FUNCTIONS +syn keyword ctermStrFunction cdate ctime chr chrdy chrin comin getenv +syn keyword ctermStrFunction gethomedir left midstr right str tolower +syn keyword ctermStrFunction toupper uniq comst exists feof hascolor + +"END STRING FUNCTIONS + +"PREDEFINED TERM VARIABLES R/W +syn keyword ctermPreVarRW f _escloop _filename _kermiteol _obufsiz +syn keyword ctermPreVarRW _port _rcvsync _cbaud _reval _turnchar +syn keyword ctermPreVarRW _txblksiz _txwindow _vmin _vtime _cparity +syn keyword ctermPreVarRW _cnumber false t true _cwordlen _cstopbits +syn keyword ctermPreVarRW _cmode _cemulate _cxprot _clogin _clogout +syn keyword ctermPreVarRW _cstartsrv _cstopsrv _ccmdfile _cwru +syn keyword ctermPreVarRW _cprotocol _captfile _cremark _combufsiz +syn keyword ctermPreVarRW logfile +"END PREDEFINED TERM VARIABLES R/W + +"PREDEFINED TERM VARIABLES R/O +syn keyword ctermPreVarRO _1 _2 _3 _4 _5 _6 _7 _8 _9 _cursess +syn keyword ctermPreVarRO _lockfile _baud _errno _retval _sernum +syn keyword ctermPreVarRO _timeout _row _col _version +"END PREDEFINED TERM VARIABLES R/O + +syn keyword ctermOperator not mod eq ne gt le lt ge xor and or shr not shl + +"SYMBOLS +syn match CtermSymbols "|" +"syn keyword ctermOperators + - * / % = != > < >= <= & | ^ ! << >> +"END SYMBOLS + +"STATEMENT +syn keyword ctermStatement off +syn keyword ctermStatement disk overwrite append spool none +syn keyword ctermStatement echo view wrap +"END STATEMENT + +"TYPE +"syn keyword ctermType +"END TYPE + +"USERLIB FUNCTIONS +"syn keyword ctermLibFunc +"END USERLIB FUNCTIONS + +"LABEL +syn keyword ctermLabel case default +"END LABEL + +"CONDITIONAL +syn keyword ctermConditional on endon +syn keyword ctermConditional proc endproc +syn keyword ctermConditional for in do endfor +syn keyword ctermConditional if else elseif endif iferror +syn keyword ctermConditional switch endswitch +syn keyword ctermConditional repeat until +"END CONDITIONAL + +"REPEAT +syn keyword ctermRepeat while +"END REPEAT + +" Function arguments (eg $1 $2 $3) +syn match ctermFuncArg "\$[1-9]" + +syn keyword ctermTodo contained TODO + +syn match ctermNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" +"floating point number, with dot, optional exponent +syn match ctermNumber "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, starting with a dot, optional exponent +syn match ctermNumber "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match ctermNumber "\<\d\+e[-+]\=\d\+[fl]\=\>" +"hex number +syn match ctermNumber "0x[0-9a-f]\+\(u\=l\=\|lu\)\>" + +syn match ctermComment "![^=].*$" contains=ctermTodo +syn match ctermComment "!$" +syn match ctermComment "\*.*$" contains=ctermTodo +syn region ctermComment start="comment" end="$" contains=ctermTodo +syn region ctermComment start="remark" end="$" contains=ctermTodo + +syn region ctermVar start="\$(" end=")" + +" String and Character contstants +" Highlight special characters (those which have a backslash) differently +syn match ctermSpecial contained "\\\d\d\d\|\\." +syn match ctermSpecial contained "\^." +syn region ctermString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=ctermSpecial,ctermVar,ctermSymbols +syn match ctermCharacter "'[^\\]'" +syn match ctermSpecialCharacter "'\\.'" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link ctermStatement Statement +hi def link ctermFunction Statement +hi def link ctermStrFunction Statement +hi def link ctermIntFunction Statement +hi def link ctermLabel Statement +hi def link ctermConditional Statement +hi def link ctermRepeat Statement +hi def link ctermLibFunc UserDefFunc +hi def link ctermType Type +hi def link ctermFuncArg PreCondit + +hi def link ctermPreVarRO PreCondit +hi def link ctermPreVarRW PreConditBold +hi def link ctermVar Type + +hi def link ctermComment Comment + +hi def link ctermCharacter SpecialChar +hi def link ctermSpecial Special +hi def link ctermSpecialCharacter SpecialChar +hi def link ctermSymbols Special +hi def link ctermString String +hi def link ctermTodo Todo +hi def link ctermOperator Statement +hi def link ctermNumber Number + +" redefine the colors +"hi PreConditBold term=bold ctermfg=1 cterm=bold guifg=Purple gui=bold +"hi Special term=bold ctermfg=6 guifg=SlateBlue gui=underline + + +let b:current_syntax = "cterm" + +" vim: ts=8 diff --git a/.config/vim/syntax/ctrlh.vim b/.config/vim/syntax/ctrlh.vim new file mode 100644 index 0000000..b34f335 --- /dev/null +++ b/.config/vim/syntax/ctrlh.vim @@ -0,0 +1,24 @@ +" Vim syntax file +" Language: CTRL-H (e.g., ASCII manpages) +" Maintainer: The Vim Project +" Last Change: 2023 Aug 10 +" Former Maintainer: Bram Moolenaar + +" Existing syntax is kept, this file can be used as an addition + +" Recognize underlined text: _^Hx +syntax match CtrlHUnderline /_\b./ contains=CtrlHHide + +" Recognize bold text: x^Hx +syntax match CtrlHBold /\(.\)\b\1/ contains=CtrlHHide + +" Hide the CTRL-H (backspace) +syntax match CtrlHHide /.\b/ contained + +" Define the default highlighting. +" Only used when an item doesn't have highlighting yet +hi def link CtrlHHide Ignore +hi def CtrlHUnderline term=underline cterm=underline gui=underline +hi def CtrlHBold term=bold cterm=bold gui=bold + +" vim: ts=8 diff --git a/.config/vim/syntax/cucumber.vim b/.config/vim/syntax/cucumber.vim new file mode 100644 index 0000000..90fdbfa --- /dev/null +++ b/.config/vim/syntax/cucumber.vim @@ -0,0 +1,170 @@ +" Vim syntax file +" Language: Cucumber +" Maintainer: Tim Pope +" Filenames: *.feature +" Last Change: 2023 Dec 28 + +if exists("b:current_syntax") + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +syn case match +syn sync minlines=20 + +let g:cucumber_languages = { + \"en": {"and": "And\\>", "background": "Background", "but": "But\\>", "examples": "Scenarios\\|Examples", "feature": "Business Need\\|Feature\\|Ability", "given": "Given\\>", "rule": "Rule", "scenario": "Scenario\\|Example", "scenario_outline": "Scenario Template\\|Scenario Outline", "then": "Then\\>", "when": "When\\>"}, + \"af": {"and": "En\\>", "background": "Agtergrond", "but": "Maar\\>", "examples": "Voorbeelde", "feature": "Besigheid Behoefte\\|Funksie\\|Vermo\\%u00eb", "given": "Gegewe\\>", "rule": "Regel", "scenario": "Voorbeeld\\|Situasie", "scenario_outline": "Situasie Uiteensetting", "then": "Dan\\>", "when": "Wanneer\\>"}, + \"am": {"and": "\\%u0535\\%u057e\\>", "background": "\\%u053f\\%u0578\\%u0576\\%u057f\\%u0565\\%u0584\\%u057d\\%u057f", "but": "\\%u0532\\%u0561\\%u0575\\%u0581\\>", "examples": "\\%u0555\\%u0580\\%u056b\\%u0576\\%u0561\\%u056f\\%u0576\\%u0565\\%u0580", "feature": "\\%u0556\\%u0578\\%u0582\\%u0576\\%u056f\\%u0581\\%u056b\\%u0578\\%u0576\\%u0561\\%u056c\\%u0578\\%u0582\\%u0569\\%u0575\\%u0578\\%u0582\\%u0576\\|\\%u0540\\%u0561\\%u057f\\%u056f\\%u0578\\%u0582\\%u0569\\%u0575\\%u0578\\%u0582\\%u0576", "given": "\\%u0534\\%u056b\\%u0581\\%u0578\\%u0582\\%u0584\\>", "rule": "Rule", "scenario": "\\%u0555\\%u0580\\%u056b\\%u0576\\%u0561\\%u056f\\|\\%u054d\\%u0581\\%u0565\\%u0576\\%u0561\\%u0580", "scenario_outline": "\\%u054d\\%u0581\\%u0565\\%u0576\\%u0561\\%u0580\\%u056b \\%u056f\\%u0561\\%u057c\\%u0578\\%u0582\\%u0581\\%u057e\\%u0561\\%u0581\\%u0584\\%u0568", "then": "\\%u0531\\%u057a\\%u0561\\>", "when": "\\%u0535\\%u0569\\%u0565\\>\\|\\%u0535\\%u0580\\%u0562\\>"}, + \"amh": {"and": "\\%u12a5\\%u1293\\>", "background": "\\%u1245\\%u12f5\\%u1218 \\%u1201\\%u1294\\%u1273\\|\\%u1218\\%u1290\\%u123b \\%u1200\\%u1233\\%u1265\\|\\%u1218\\%u1290\\%u123b", "but": "\\%u130d\\%u1295\\>", "examples": "\\%u121d\\%u1233\\%u120c\\%u12ce\\%u127d\\|\\%u1201\\%u1293\\%u1274\\%u12ce\\%u127d", "feature": "\\%u12e8\\%u121a\\%u1348\\%u1208\\%u1308\\%u12cd \\%u12f5\\%u122d\\%u130a\\%u1275\\|\\%u12e8\\%u1270\\%u1348\\%u1208\\%u1308\\%u12cd \\%u1235\\%u122b\\|\\%u1235\\%u122b", "given": "\\%u12e8\\%u1270\\%u1230\\%u1320\\>", "rule": "\\%u1205\\%u130d", "scenario": "\\%u121d\\%u1233\\%u120c\\|\\%u1201\\%u1293\\%u1274", "scenario_outline": "\\%u1201\\%u1293\\%u1274 \\%u12dd\\%u122d\\%u12dd\\%u122d\\|\\%u1201\\%u1293\\%u1274 \\%u12a0\\%u1265\\%u1290\\%u1275", "then": "\\%u12a8\\%u12da\\%u12eb\\>", "when": "\\%u1218\\%u127c\\>"}, + \"an": {"and": "Y\\>\\|E\\>", "background": "Antecedents", "but": "Pero\\>", "examples": "Eixemplos", "feature": "Caracteristica", "given": "Dadas\\>\\|Dada\\>\\|Daus\\>\\|Dau\\>", "rule": "Rule", "scenario": "Eixemplo\\|Caso", "scenario_outline": "Esquema del caso", "then": "Antonces\\>\\|Alavez\\>\\|Allora\\>", "when": "Cuan\\>"}, + \"ar": {"and": "\\%u0648\\>", "background": "\\%u0627\\%u0644\\%u062e\\%u0644\\%u0641\\%u064a\\%u0629", "but": "\\%u0644\\%u0643\\%u0646\\>", "examples": "\\%u0627\\%u0645\\%u062b\\%u0644\\%u0629", "feature": "\\%u062e\\%u0627\\%u0635\\%u064a\\%u0629", "given": "\\%u0628\\%u0641\\%u0631\\%u0636\\>", "rule": "Rule", "scenario": "\\%u0633\\%u064a\\%u0646\\%u0627\\%u0631\\%u064a\\%u0648\\|\\%u0645\\%u062b\\%u0627\\%u0644", "scenario_outline": "\\%u0633\\%u064a\\%u0646\\%u0627\\%u0631\\%u064a\\%u0648 \\%u0645\\%u062e\\%u0637\\%u0637", "then": "\\%u0627\\%u0630\\%u0627\\%u064b\\>\\|\\%u062b\\%u0645\\>", "when": "\\%u0639\\%u0646\\%u062f\\%u0645\\%u0627\\>\\|\\%u0645\\%u062a\\%u0649\\>"}, + \"ast": {"and": "Ya\\>\\|Y\\>", "background": "Antecedentes", "but": "Peru\\>", "examples": "Exemplos", "feature": "Carauter\\%u00edstica", "given": "Dada\\>\\|Daos\\>\\|Daes\\>\\|D\\%u00e1u\\>", "rule": "Rule", "scenario": "Exemplo\\|Casu", "scenario_outline": "Esbozu del casu", "then": "Ent\\%u00f3s\\>", "when": "Cuando\\>"}, + \"az": {"and": "H\\%u0259m\\>\\|V\\%u0259\\>", "background": "Kontekst\\|Ke\\%u00e7mi\\%u015f", "but": "Ancaq\\>\\|Amma\\>", "examples": "N\\%u00fcmun\\%u0259l\\%u0259r", "feature": "\\%u00d6z\\%u0259llik", "given": "Tutaq ki\\>\\|Verilir\\>", "rule": "Rule", "scenario": "Ssenari\\|N\\%u00fcmun\\%u0259", "scenario_outline": "Ssenarinin strukturu", "then": "O halda\\>", "when": "N\\%u0259 vaxt ki\\>\\|\\%u018fg\\%u0259r\\>"}, + \"bg": {"and": "\\%u0418\\>", "background": "\\%u041f\\%u0440\\%u0435\\%u0434\\%u0438\\%u0441\\%u0442\\%u043e\\%u0440\\%u0438\\%u044f", "but": "\\%u041d\\%u043e\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u0438", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\%u043d\\%u043e\\%u0441\\%u0442", "given": "\\%u0414\\%u0430\\%u0434\\%u0435\\%u043d\\%u043e\\>", "rule": "\\%u041f\\%u0440\\%u0430\\%u0432\\%u0438\\%u043b\\%u043e", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440", "scenario_outline": "\\%u0420\\%u0430\\%u043c\\%u043a\\%u0430 \\%u043d\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439", "then": "\\%u0422\\%u043e\\>", "when": "\\%u041a\\%u043e\\%u0433\\%u0430\\%u0442\\%u043e\\>"}, + \"bm": {"and": "Dan\\>", "background": "Latar Belakang", "but": "Tetapi\\>\\|Tapi\\>", "examples": "Contoh", "feature": "Fungsi", "given": "Diberi\\>\\|Bagi\\>", "rule": "Rule", "scenario": "Senario\\|Situasi\\|Keadaan", "scenario_outline": "Garis Panduan Senario\\|Kerangka Senario\\|Kerangka Situasi\\|Kerangka Keadaan", "then": "Kemudian\\>\\|Maka\\>", "when": "Apabila\\>"}, + \"bs": {"and": "I\\>\\|A\\>", "background": "Pozadina", "but": "Ali\\>", "examples": "Primjeri", "feature": "Karakteristika", "given": "Dato\\>", "rule": "Rule", "scenario": "Scenariju\\|Scenario\\|Primjer", "scenario_outline": "Scenario-outline\\|Scenariju-obris", "then": "Zatim\\>", "when": "Kada\\>"}, + \"ca": {"and": "I\\>", "background": "Antecedents\\|Rerefons", "but": "Per\\%u00f2\\>", "examples": "Exemples", "feature": "Caracter\\%u00edstica\\|Funcionalitat", "given": "Donada\\>\\|Donat\\>\\|Atesa\\>\\|At\\%u00e8s\\>", "rule": "Rule", "scenario": "Escenari\\|Exemple", "scenario_outline": "Esquema de l'escenari", "then": "Aleshores\\>\\|Cal\\>", "when": "Quan\\>"}, + \"cs": {"and": "A tak\\%u00e9\\>\\|A\\>", "background": "Kontext\\|Pozad\\%u00ed", "but": "Ale\\>", "examples": "P\\%u0159\\%u00edklady", "feature": "Po\\%u017eadavek", "given": "Za p\\%u0159edpokladu\\>\\|Pokud\\>", "rule": "Pravidlo", "scenario": "P\\%u0159\\%u00edklad\\|Sc\\%u00e9n\\%u00e1\\%u0159", "scenario_outline": "Osnova sc\\%u00e9n\\%u00e1\\%u0159e\\|N\\%u00e1\\%u010drt Sc\\%u00e9n\\%u00e1\\%u0159e", "then": "Pak\\>", "when": "Kdy\\%u017e\\>"}, + \"cy-GB": {"and": "A\\>", "background": "Cefndir", "but": "Ond\\>", "examples": "Enghreifftiau", "feature": "Arwedd", "given": "Anrhegedig a\\>", "rule": "Rule", "scenario": "Enghraifft\\|Scenario", "scenario_outline": "Scenario Amlinellol", "then": "Yna\\>", "when": "Pryd\\>"}, + \"da": {"and": "Og\\>", "background": "Baggrund", "but": "Men\\>", "examples": "Eksempler", "feature": "Egenskab", "given": "Givet\\>", "rule": "Rule", "scenario": "Eksempel\\|Scenarie", "scenario_outline": "Abstrakt Scenario", "then": "S\\%u00e5\\>", "when": "N\\%u00e5r\\>"}, + \"de": {"and": "Und\\>", "background": "Voraussetzungen\\|Vorbedingungen\\|Hintergrund\\|Grundlage", "but": "Aber\\>", "examples": "Beispiele", "feature": "Funktionalit\\%u00e4t\\|Funktion", "given": "Gegeben seien\\>\\|Gegeben sei\\>\\|Angenommen\\>", "rule": "Regel\\|Rule", "scenario": "Beispiel\\|Szenario", "scenario_outline": "Szenariogrundriss\\|Szenarien", "then": "Dann\\>", "when": "Wenn\\>"}, + \"el": {"and": "\\%u039a\\%u03b1\\%u03b9\\>", "background": "\\%u03a5\\%u03c0\\%u03cc\\%u03b2\\%u03b1\\%u03b8\\%u03c1\\%u03bf", "but": "\\%u0391\\%u03bb\\%u03bb\\%u03ac\\>", "examples": "\\%u03a0\\%u03b1\\%u03c1\\%u03b1\\%u03b4\\%u03b5\\%u03af\\%u03b3\\%u03bc\\%u03b1\\%u03c4\\%u03b1\\|\\%u03a3\\%u03b5\\%u03bd\\%u03ac\\%u03c1\\%u03b9\\%u03b1", "feature": "\\%u0394\\%u03c5\\%u03bd\\%u03b1\\%u03c4\\%u03cc\\%u03c4\\%u03b7\\%u03c4\\%u03b1\\|\\%u039b\\%u03b5\\%u03b9\\%u03c4\\%u03bf\\%u03c5\\%u03c1\\%u03b3\\%u03af\\%u03b1", "given": "\\%u0394\\%u03b5\\%u03b4\\%u03bf\\%u03bc\\%u03ad\\%u03bd\\%u03bf\\%u03c5\\>", "rule": "Rule", "scenario": "\\%u03a0\\%u03b1\\%u03c1\\%u03ac\\%u03b4\\%u03b5\\%u03b9\\%u03b3\\%u03bc\\%u03b1\\|\\%u03a3\\%u03b5\\%u03bd\\%u03ac\\%u03c1\\%u03b9\\%u03bf", "scenario_outline": "\\%u03a0\\%u03b5\\%u03c1\\%u03af\\%u03b3\\%u03c1\\%u03b1\\%u03bc\\%u03bc\\%u03b1 \\%u03a3\\%u03b5\\%u03bd\\%u03b1\\%u03c1\\%u03af\\%u03bf\\%u03c5\\|\\%u03a0\\%u03b5\\%u03c1\\%u03b9\\%u03b3\\%u03c1\\%u03b1\\%u03c6\\%u03ae \\%u03a3\\%u03b5\\%u03bd\\%u03b1\\%u03c1\\%u03af\\%u03bf\\%u03c5", "then": "\\%u03a4\\%u03cc\\%u03c4\\%u03b5\\>", "when": "\\%u038c\\%u03c4\\%u03b1\\%u03bd\\>"}, + \"em": {"and": "\\%u1f602", "background": "\\%u1f4a4", "but": "\\%u1f614", "examples": "\\%u1f4d3", "feature": "\\%u1f4da", "given": "\\%u1f610", "rule": "Rule", "scenario": "\\%u1f952\\|\\%u1f4d5", "scenario_outline": "\\%u1f4d6", "then": "\\%u1f64f", "when": "\\%u1f3ac"}, + \"en-Scouse": {"and": "An\\>", "background": "Dis is what went down", "but": "Buh\\>", "examples": "Examples", "feature": "Feature", "given": "Youse know when youse got\\>\\|Givun\\>", "rule": "Rule", "scenario": "The thing of it is", "scenario_outline": "Wharrimean is", "then": "Den youse gotta\\>\\|Dun\\>", "when": "Youse know like when\\>\\|Wun\\>"}, + \"en-au": {"and": "Too right\\>", "background": "First off", "but": "Yeah nah\\>", "examples": "You'll wanna", "feature": "Pretty much", "given": "Y'know\\>", "rule": "Rule", "scenario": "Awww, look mate", "scenario_outline": "Reckon it's like", "then": "But at the end of the day I reckon\\>", "when": "It's just unbelievable\\>"}, + \"en-lol": {"and": "AN\\>", "background": "B4", "but": "BUT\\>", "examples": "EXAMPLZ", "feature": "OH HAI", "given": "I CAN HAZ\\>", "rule": "Rule", "scenario": "MISHUN", "scenario_outline": "MISHUN SRSLY", "then": "DEN\\>", "when": "WEN\\>"}, + \"en-old": {"and": "Ond\\>\\|7\\>", "background": "Aer\\|\\%u00c6r", "but": "Ac\\>", "examples": "Se the\\|Se \\%u00fee\\|Se \\%u00f0e", "feature": "Hwaet\\|Hw\\%u00e6t", "given": "Thurh\\>\\|\\%u00deurh\\>\\|\\%u00d0urh\\>", "rule": "Rule", "scenario": "Swa", "scenario_outline": "Swa hwaer swa\\|Swa hw\\%u00e6r swa", "then": "Tha the\\>\\|\\%u00dea \\%u00fee\\>\\|\\%u00d0a \\%u00f0e\\>\\|Tha\\>\\|\\%u00dea\\>\\|\\%u00d0a\\>", "when": "B\\%u00e6\\%u00fesealfa\\>\\|B\\%u00e6\\%u00fesealfe\\>\\|B\\%u00e6\\%u00fesealf\\>\\|Ciric\\%u00e6we\\>\\|Ciric\\%u00e6wa\\>\\|Ciric\\%u00e6w\\>"}, + \"en-pirate": {"and": "Aye\\>", "background": "Yo-ho-ho", "but": "Avast!\\>", "examples": "Dead men tell no tales", "feature": "Ahoy matey!", "given": "Gangway!\\>", "rule": "Rule", "scenario": "Heave to", "scenario_outline": "Shiver me timbers", "then": "Let go and haul\\>", "when": "Blimey!\\>"}, + \"en-tx": {"and": "Come hell or high water\\>", "background": "Lemme tell y'all a story", "but": "Well now hold on, I'll you what\\>", "examples": "Now that's a story longer than a cattle drive in July", "feature": "This ain\\%u2019t my first rodeo\\|All gussied up", "given": "All git out\\>\\|Fixin' to\\>", "rule": "Rule\\>", "scenario": "All hat and no cattle", "scenario_outline": "Busy as a hound in flea season\\|Serious as a snake bite", "then": "There\\%u2019s no tree but bears some fruit\\>", "when": "Quick out of the chute\\>"}, + \"eo": {"and": "Kaj\\>", "background": "Fono", "but": "Sed\\>", "examples": "Ekzemploj", "feature": "Trajto", "given": "Donita\\%u0135o\\>\\|Komence\\>", "rule": "Rule", "scenario": "Ekzemplo\\|Scenaro\\|Kazo", "scenario_outline": "Konturo de la scenaro\\|Kazo-skizo\\|Skizo", "then": "Do\\>", "when": "Se\\>"}, + \"es": {"and": "Y\\>\\|E\\>", "background": "Antecedentes", "but": "Pero\\>", "examples": "Ejemplos", "feature": "Necesidad del negocio\\|Caracter\\%u00edstica\\|Requisito", "given": "Dados\\>\\|Dadas\\>\\|Dado\\>\\|Dada\\>", "rule": "Regla de negocio\\|Regla", "scenario": "Escenario\\|Ejemplo", "scenario_outline": "Esquema del escenario", "then": "Entonces\\>", "when": "Cuando\\>"}, + \"et": {"and": "Ja\\>", "background": "Taust", "but": "Kuid\\>", "examples": "Juhtumid", "feature": "Omadus", "given": "Eeldades\\>", "rule": "Reegel", "scenario": "Stsenaarium\\|Juhtum", "scenario_outline": "Raamstsenaarium\\|Raamjuhtum", "then": "Siis\\>", "when": "Kui\\>"}, + \"fa": {"and": "\\%u0648\\>", "background": "\\%u0632\\%u0645\\%u06cc\\%u0646\\%u0647", "but": "\\%u0627\\%u0645\\%u0627\\>", "examples": "\\%u0646\\%u0645\\%u0648\\%u0646\\%u0647 \\%u0647\\%u0627", "feature": "\\%u0648\\%u0650\\%u06cc\\%u0698\\%u06af\\%u06cc", "given": "\\%u0628\\%u0627 \\%u0641\\%u0631\\%u0636\\>", "rule": "Rule", "scenario": "\\%u0633\\%u0646\\%u0627\\%u0631\\%u06cc\\%u0648\\|\\%u0645\\%u062b\\%u0627\\%u0644", "scenario_outline": "\\%u0627\\%u0644\\%u06af\\%u0648\\%u06cc \\%u0633\\%u0646\\%u0627\\%u0631\\%u06cc\\%u0648", "then": "\\%u0622\\%u0646\\%u06af\\%u0627\\%u0647\\>", "when": "\\%u0647\\%u0646\\%u06af\\%u0627\\%u0645\\%u06cc\\>"}, + \"fi": {"and": "Ja\\>", "background": "Tausta", "but": "Mutta\\>", "examples": "Tapaukset", "feature": "Ominaisuus", "given": "Oletetaan\\>", "rule": "Rule", "scenario": "Tapaus", "scenario_outline": "Tapausaihio", "then": "Niin\\>", "when": "Kun\\>"}, + \"fr": {"and": "Et que\\>\\|Et qu'\\|Et\\>", "background": "Contexte", "but": "Mais que\\>\\|Mais qu'\\|Mais\\>", "examples": "Exemples", "feature": "Fonctionnalit\\%u00e9", "given": "Etant donn\\%u00e9 que\\>\\|\\%u00c9tant donn\\%u00e9 que\\>\\|Etant donn\\%u00e9 qu'\\|\\%u00c9tant donn\\%u00e9 qu'\\|Etant donn\\%u00e9es\\>\\|\\%u00c9tant donn\\%u00e9es\\>\\|Etant donn\\%u00e9e\\>\\|Etant donn\\%u00e9s\\>\\|\\%u00c9tant donn\\%u00e9e\\>\\|\\%u00c9tant donn\\%u00e9s\\>\\|Sachant que\\>\\|Etant donn\\%u00e9\\>\\|\\%u00c9tant donn\\%u00e9\\>\\|Sachant qu'\\|Sachant\\>\\|Soit\\>", "rule": "R\\%u00e8gle", "scenario": "Sc\\%u00e9nario\\|Exemple", "scenario_outline": "Plan du sc\\%u00e9nario\\|Plan du Sc\\%u00e9nario", "then": "Alors\\>\\|Donc\\>", "when": "Lorsque\\>\\|Lorsqu'\\|Quand\\>"}, + \"ga": {"and": "Agus", "background": "C\\%u00falra", "but": "Ach", "examples": "Sampla\\%u00ed", "feature": "Gn\\%u00e9", "given": "Cuir i gc\\%u00e1s nach\\|Cuir i gc\\%u00e1s gur\\|Cuir i gc\\%u00e1s n\\%u00e1r\\|Cuir i gc\\%u00e1s go", "rule": "Rule", "scenario": "Sampla\\|C\\%u00e1s", "scenario_outline": "C\\%u00e1s Achomair", "then": "Ansin", "when": "Nuair nach\\|Nuair n\\%u00e1r\\|Nuair ba\\|Nuair a"}, + \"gj": {"and": "\\%u0a85\\%u0aa8\\%u0ac7\\>", "background": "\\%u0aac\\%u0ac7\\%u0a95\\%u0a97\\%u0acd\\%u0ab0\\%u0abe\\%u0a89\\%u0aa8\\%u0acd\\%u0aa1", "but": "\\%u0aaa\\%u0aa3\\>", "examples": "\\%u0a89\\%u0aa6\\%u0abe\\%u0ab9\\%u0ab0\\%u0aa3\\%u0acb", "feature": "\\%u0ab5\\%u0acd\\%u0aaf\\%u0abe\\%u0aaa\\%u0abe\\%u0ab0 \\%u0a9c\\%u0ab0\\%u0ac2\\%u0ab0\\|\\%u0a95\\%u0acd\\%u0ab7\\%u0aae\\%u0aa4\\%u0abe\\|\\%u0ab2\\%u0a95\\%u0acd\\%u0ab7\\%u0aa3", "given": "\\%u0a86\\%u0aaa\\%u0ac7\\%u0ab2 \\%u0a9b\\%u0ac7\\>", "rule": "Rule", "scenario": "\\%u0a89\\%u0aa6\\%u0abe\\%u0ab9\\%u0ab0\\%u0aa3\\|\\%u0ab8\\%u0acd\\%u0aa5\\%u0abf\\%u0aa4\\%u0abf", "scenario_outline": "\\%u0aaa\\%u0ab0\\%u0abf\\%u0aa6\\%u0acd\\%u0aa6\\%u0ab6\\%u0acd\\%u0aaf \\%u0ab0\\%u0ac2\\%u0aaa\\%u0ab0\\%u0ac7\\%u0a96\\%u0abe\\|\\%u0aaa\\%u0ab0\\%u0abf\\%u0aa6\\%u0acd\\%u0aa6\\%u0ab6\\%u0acd\\%u0aaf \\%u0aa2\\%u0abe\\%u0a82\\%u0a9a\\%u0acb", "then": "\\%u0aaa\\%u0a9b\\%u0ac0\\>", "when": "\\%u0a95\\%u0acd\\%u0aaf\\%u0abe\\%u0ab0\\%u0ac7\\>"}, + \"gl": {"and": "E\\>", "background": "Contexto", "but": "Mais\\>\\|Pero\\>", "examples": "Exemplos", "feature": "Caracter\\%u00edstica", "given": "Dados\\>\\|Dadas\\>\\|Dado\\>\\|Dada\\>", "rule": "Rule", "scenario": "Escenario\\|Exemplo", "scenario_outline": "Esbozo do escenario", "then": "Ent\\%u00f3n\\>\\|Logo\\>", "when": "Cando\\>"}, + \"he": {"and": "\\%u05d5\\%u05d2\\%u05dd\\>", "background": "\\%u05e8\\%u05e7\\%u05e2", "but": "\\%u05d0\\%u05d1\\%u05dc\\>", "examples": "\\%u05d3\\%u05d5\\%u05d2\\%u05de\\%u05d0\\%u05d5\\%u05ea", "feature": "\\%u05ea\\%u05db\\%u05d5\\%u05e0\\%u05d4", "given": "\\%u05d1\\%u05d4\\%u05d9\\%u05e0\\%u05ea\\%u05df\\>", "rule": "\\%u05db\\%u05dc\\%u05dc", "scenario": "\\%u05d3\\%u05d5\\%u05d2\\%u05de\\%u05d0\\|\\%u05ea\\%u05e8\\%u05d7\\%u05d9\\%u05e9", "scenario_outline": "\\%u05ea\\%u05d1\\%u05e0\\%u05d9\\%u05ea \\%u05ea\\%u05e8\\%u05d7\\%u05d9\\%u05e9", "then": "\\%u05d0\\%u05d6\\%u05d9\\>\\|\\%u05d0\\%u05d6\\>", "when": "\\%u05db\\%u05d0\\%u05e9\\%u05e8\\>"}, + \"hi": {"and": "\\%u0924\\%u0925\\%u093e\\>\\|\\%u0914\\%u0930\\>", "background": "\\%u092a\\%u0943\\%u0937\\%u094d\\%u0920\\%u092d\\%u0942\\%u092e\\%u093f", "but": "\\%u092a\\%u0930\\%u0928\\%u094d\\%u0924\\%u0941\\>\\|\\%u0915\\%u093f\\%u0928\\%u094d\\%u0924\\%u0941\\>\\|\\%u092a\\%u0930\\>", "examples": "\\%u0909\\%u0926\\%u093e\\%u0939\\%u0930\\%u0923", "feature": "\\%u0930\\%u0942\\%u092a \\%u0932\\%u0947\\%u0916", "given": "\\%u091a\\%u0942\\%u0902\\%u0915\\%u093f\\>\\|\\%u0905\\%u0917\\%u0930\\>\\|\\%u092f\\%u0926\\%u093f\\>", "rule": "\\%u0928\\%u093f\\%u092f\\%u092e", "scenario": "\\%u092a\\%u0930\\%u093f\\%u0926\\%u0943\\%u0936\\%u094d\\%u092f", "scenario_outline": "\\%u092a\\%u0930\\%u093f\\%u0926\\%u0943\\%u0936\\%u094d\\%u092f \\%u0930\\%u0942\\%u092a\\%u0930\\%u0947\\%u0916\\%u093e", "then": "\\%u0924\\%u0926\\%u093e\\>\\|\\%u0924\\%u092c\\>", "when": "\\%u0915\\%u0926\\%u093e\\>\\|\\%u091c\\%u092c\\>"}, + \"hr": {"and": "I\\>", "background": "Pozadina", "but": "Ali\\>", "examples": "Scenariji\\|Primjeri", "feature": "Mogu\\%u0107nost\\|Mogucnost\\|Osobina", "given": "Ukoliko\\>\\|Zadani\\>\\|Zadano\\>\\|Zadan\\>", "rule": "Rule", "scenario": "Scenarij\\|Primjer", "scenario_outline": "Koncept\\|Skica", "then": "Onda\\>", "when": "Kada\\>\\|Kad\\>"}, + \"ht": {"and": "Epi\\>\\|Ak\\>\\|E\\>", "background": "Kont\\%u00e8ks\\|Istorik", "but": "Men\\>", "examples": "Egzanp", "feature": "Karakteristik\\|Fonksyonalite\\|Mak", "given": "Sipoze ke\\>\\|Sipoze Ke\\>\\|Sipoze\\>", "rule": "Rule", "scenario": "Senaryo", "scenario_outline": "Senaryo deskripsyon\\|Senaryo Deskripsyon\\|Dyagram senaryo\\|Dyagram Senaryo\\|Plan senaryo\\|Plan Senaryo", "then": "L\\%u00e8 sa a\\>\\|Le sa a\\>", "when": "L\\%u00e8\\>\\|Le\\>"}, + \"hu": {"and": "\\%u00c9s\\>", "background": "H\\%u00e1tt\\%u00e9r", "but": "De\\>", "examples": "P\\%u00e9ld\\%u00e1k", "feature": "Jellemz\\%u0151", "given": "Amennyiben\\>\\|Adott\\>", "rule": "Szab\\%u00e1ly", "scenario": "Forgat\\%u00f3k\\%u00f6nyv\\|P\\%u00e9lda", "scenario_outline": "Forgat\\%u00f3k\\%u00f6nyv v\\%u00e1zlat", "then": "Akkor\\>", "when": "Amikor\\>\\|Majd\\>\\|Ha\\>"}, + \"id": {"and": "Dan\\>", "background": "Latar Belakang\\|Dasar", "but": "Tetapi\\>\\|Tapi\\>", "examples": "Contoh\\|Misal", "feature": "Fitur", "given": "Diasumsikan\\>\\|Diketahui\\>\\|Dengan\\>\\|Bila\\>\\|Jika\\>", "rule": "Aturan\\|Rule", "scenario": "Skenario", "scenario_outline": "Garis-Besar Skenario\\|Skenario konsep", "then": "Kemudian\\>\\|Maka\\>", "when": "Ketika\\>"}, + \"is": {"and": "Og\\>", "background": "Bakgrunnur", "but": "En\\>", "examples": "Atbur\\%u00f0ar\\%u00e1sir\\|D\\%u00e6mi", "feature": "Eiginleiki", "given": "Ef\\>", "rule": "Rule", "scenario": "Atbur\\%u00f0ar\\%u00e1s", "scenario_outline": "L\\%u00fdsing Atbur\\%u00f0ar\\%u00e1sar\\|L\\%u00fdsing D\\%u00e6ma", "then": "\\%u00de\\%u00e1\\>", "when": "\\%u00deegar\\>"}, + \"it": {"and": "E\\>", "background": "Contesto", "but": "Ma\\>", "examples": "Esempi", "feature": "Esigenza di Business\\|Funzionalit\\%u00e0\\|Abilit\\%u00e0", "given": "Dato\\>\\|Data\\>\\|Dati\\>\\|Date\\>", "rule": "Regola", "scenario": "Scenario\\|Esempio", "scenario_outline": "Schema dello scenario", "then": "Allora\\>", "when": "Quando\\>"}, + \"ja": {"and": "\\%u4e14\\%u3064\\|\\%u304b\\%u3064", "background": "\\%u80cc\\%u666f", "but": "\\%u3057\\%u304b\\%u3057\\|\\%u305f\\%u3060\\%u3057\\|\\%u7136\\%u3057\\|\\%u4f46\\%u3057", "examples": "\\%u30b5\\%u30f3\\%u30d7\\%u30eb\\|\\%u4f8b", "feature": "\\%u30d5\\%u30a3\\%u30fc\\%u30c1\\%u30e3\\|\\%u6a5f\\%u80fd", "given": "\\%u524d\\%u63d0", "rule": "\\%u30eb\\%u30fc\\%u30eb", "scenario": "\\%u30b7\\%u30ca\\%u30ea\\%u30aa", "scenario_outline": "\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30a2\\%u30a6\\%u30c8\\%u30e9\\%u30a4\\%u30f3\\|\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30c6\\%u30f3\\%u30d7\\%u30ec\\%u30fc\\%u30c8\\|\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30c6\\%u30f3\\%u30d7\\%u30ec\\|\\%u30c6\\%u30f3\\%u30d7\\%u30ec", "then": "\\%u306a\\%u3089\\%u3070", "when": "\\%u3082\\%u3057"}, + \"jv": {"and": "Lan\\>", "background": "Dasar", "but": "Ananging\\>\\|Nanging\\>\\|Tapi\\>", "examples": "Contone\\|Conto", "feature": "Fitur", "given": "Nalikaning\\>\\|Nalika\\>", "rule": "Rule", "scenario": "Skenario", "scenario_outline": "Konsep skenario", "then": "Banjur\\>\\|Njuk\\>", "when": "Manawa\\>\\|Menawa\\>"}, + \"ka": {"and": "\\%u10d0\\%u10e1\\%u10d4\\%u10d5\\%u10d4\\>\\|\\%u10d3\\%u10d0\\>", "background": "\\%u10d9\\%u10dd\\%u10dc\\%u10e2\\%u10d4\\%u10e5\\%u10e1\\%u10e2\\%u10d8", "but": "\\%u10db\\%u10d0\\%u10d2\\%u10e0\\%u10d0\\%u10db\\>\\|\\%u10d7\\%u10e3\\%u10db\\%u10ea\\%u10d0\\>", "examples": "\\%u10db\\%u10d0\\%u10d2\\%u10d0\\%u10da\\%u10d8\\%u10d7\\%u10d4\\%u10d1\\%u10d8", "feature": "\\%u10db\\%u10dd\\%u10d7\\%u10ee\\%u10dd\\%u10d5\\%u10dc\\%u10d0\\|\\%u10d7\\%u10d5\\%u10d8\\%u10e1\\%u10d4\\%u10d1\\%u10d0", "given": "\\%u10db\\%u10dd\\%u10ea\\%u10d4\\%u10db\\%u10e3\\%u10da\\%u10d8\\%u10d0\\>\\|\\%u10db\\%u10dd\\%u10ea\\%u10d4\\%u10db\\%u10e3\\%u10da\\%u10d8\\>\\|\\%u10d5\\%u10d7\\%u10e5\\%u10d5\\%u10d0\\%u10d7\\>", "rule": "\\%u10ec\\%u10d4\\%u10e1\\%u10d8", "scenario": "\\%u10db\\%u10d0\\%u10d2\\%u10d0\\%u10da\\%u10d8\\%u10d7\\%u10d0\\%u10d3\\|\\%u10db\\%u10d0\\%u10d2\\%u10d0\\%u10da\\%u10d8\\%u10d7\\%u10d8\\|\\%u10e1\\%u10ea\\%u10d4\\%u10dc\\%u10d0\\%u10e0\\%u10d8\\|\\%u10db\\%u10d0\\%u10d2", "scenario_outline": "\\%u10e1\\%u10ea\\%u10d4\\%u10dc\\%u10d0\\%u10e0\\%u10d8\\%u10e1 \\%u10e8\\%u10d0\\%u10d1\\%u10da\\%u10dd\\%u10dc\\%u10d8\\|\\%u10e1\\%u10ea\\%u10d4\\%u10dc\\%u10d0\\%u10e0\\%u10d8\\%u10e1 \\%u10dc\\%u10d8\\%u10db\\%u10e3\\%u10e8\\%u10d8\\|\\%u10e8\\%u10d0\\%u10d1\\%u10da\\%u10dd\\%u10dc\\%u10d8\\|\\%u10dc\\%u10d8\\%u10db\\%u10e3\\%u10e8\\%u10d8", "then": "\\%u10db\\%u10d0\\%u10e8\\%u10d8\\%u10dc\\>", "when": "\\%u10e0\\%u10dd\\%u10d2\\%u10dd\\%u10e0\\%u10ea \\%u10d9\\%u10d8\\>\\|\\%u10e0\\%u10dd\\%u10d3\\%u10d4\\%u10e1\\%u10d0\\%u10ea\\>\\|\\%u10e0\\%u10dd\\%u10ea\\%u10d0\\>\\|\\%u10d7\\%u10e3\\>"}, + \"kn": {"and": "\\%u0cae\\%u0ca4\\%u0ccd\\%u0ca4\\%u0cc1\\>", "background": "\\%u0cb9\\%u0cbf\\%u0ca8\\%u0ccd\\%u0ca8\\%u0cc6\\%u0cb2\\%u0cc6", "but": "\\%u0c86\\%u0ca6\\%u0cb0\\%u0cc6\\>", "examples": "\\%u0c89\\%u0ca6\\%u0cbe\\%u0cb9\\%u0cb0\\%u0ca3\\%u0cc6\\%u0c97\\%u0cb3\\%u0cc1", "feature": "\\%u0cb9\\%u0cc6\\%u0c9a\\%u0ccd\\%u0c9a\\%u0cb3", "given": "\\%u0ca8\\%u0cbf\\%u0cd5\\%u0ca1\\%u0cbf\\%u0ca6\\>", "rule": "Rule", "scenario": "\\%u0c95\\%u0ca5\\%u0cbe\\%u0cb8\\%u0cbe\\%u0cb0\\%u0cbe\\%u0c82\\%u0cb6\\|\\%u0c89\\%u0ca6\\%u0cbe\\%u0cb9\\%u0cb0\\%u0ca3\\%u0cc6", "scenario_outline": "\\%u0cb5\\%u0cbf\\%u0cb5\\%u0cb0\\%u0ca3\\%u0cc6", "then": "\\%u0ca8\\%u0c82\\%u0ca4\\%u0cb0\\>", "when": "\\%u0cb8\\%u0ccd\\%u0ca5\\%u0cbf\\%u0ca4\\%u0cbf\\%u0caf\\%u0ca8\\%u0ccd\\%u0ca8\\%u0cc1\\>"}, + \"ko": {"and": "\\%uadf8\\%ub9ac\\%uace0", "background": "\\%ubc30\\%uacbd", "but": "\\%ud558\\%uc9c0\\%ub9cc\\|\\%ub2e8", "examples": "\\%uc608", "feature": "\\%uae30\\%ub2a5", "given": "\\%uc870\\%uac74\\|\\%uba3c\\%uc800", "rule": "Rule", "scenario": "\\%uc2dc\\%ub098\\%ub9ac\\%uc624", "scenario_outline": "\\%uc2dc\\%ub098\\%ub9ac\\%uc624 \\%uac1c\\%uc694", "then": "\\%uadf8\\%ub7ec\\%uba74", "when": "\\%ub9cc\\%uc77c\\|\\%ub9cc\\%uc57d"}, + \"lt": {"and": "Ir\\>", "background": "Kontekstas", "but": "Bet\\>", "examples": "Pavyzd\\%u017eiai\\|Scenarijai\\|Variantai", "feature": "Savyb\\%u0117", "given": "Duota\\>", "rule": "Rule", "scenario": "Scenarijus\\|Pavyzdys", "scenario_outline": "Scenarijaus \\%u0161ablonas", "then": "Tada\\>", "when": "Kai\\>"}, + \"lu": {"and": "an\\>\\|a\\>", "background": "Hannergrond", "but": "awer\\>\\|m\\%u00e4\\>", "examples": "Beispiller", "feature": "Funktionalit\\%u00e9it", "given": "ugeholl\\>", "rule": "Rule", "scenario": "Beispill\\|Szenario", "scenario_outline": "Plang vum Szenario", "then": "dann\\>", "when": "wann\\>"}, + \"lv": {"and": "Un\\>", "background": "Konteksts\\|Situ\\%u0101cija", "but": "Bet\\>", "examples": "Piem\\%u0113ri\\|Paraugs", "feature": "Funkcionalit\\%u0101te\\|F\\%u012b\\%u010da", "given": "Kad\\>", "rule": "Rule", "scenario": "Scen\\%u0101rijs\\|Piem\\%u0113rs", "scenario_outline": "Scen\\%u0101rijs p\\%u0113c parauga", "then": "Tad\\>", "when": "Ja\\>"}, + \"mk-Cyrl": {"and": "\\%u0418\\>", "background": "\\%u041a\\%u043e\\%u043d\\%u0442\\%u0435\\%u043a\\%u0441\\%u0442\\|\\%u0421\\%u043e\\%u0434\\%u0440\\%u0436\\%u0438\\%u043d\\%u0430", "but": "\\%u041d\\%u043e\\>", "examples": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0458\\%u0430\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u0438", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\%u043d\\%u043e\\%u0441\\%u0442\\|\\%u0411\\%u0438\\%u0437\\%u043d\\%u0438\\%u0441 \\%u043f\\%u043e\\%u0442\\%u0440\\%u0435\\%u0431\\%u0430\\|\\%u041c\\%u043e\\%u0436\\%u043d\\%u043e\\%u0441\\%u0442", "given": "\\%u0414\\%u0430\\%u0434\\%u0435\\%u043d\\%u043e\\>\\|\\%u0414\\%u0430\\%u0434\\%u0435\\%u043d\\%u0430\\>", "rule": "Rule", "scenario": "\\%u041d\\%u0430 \\%u043f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\|\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u043e\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440", "scenario_outline": "\\%u041f\\%u0440\\%u0435\\%u0433\\%u043b\\%u0435\\%u0434 \\%u043d\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0458\\%u0430\\|\\%u041a\\%u043e\\%u043d\\%u0446\\%u0435\\%u043f\\%u0442\\|\\%u0421\\%u043a\\%u0438\\%u0446\\%u0430", "then": "\\%u0422\\%u043e\\%u0433\\%u0430\\%u0448\\>", "when": "\\%u041a\\%u043e\\%u0433\\%u0430\\>"}, + \"mk-Latn": {"and": "I\\>", "background": "Sodrzhina\\|Kontekst", "but": "No\\>", "examples": "Scenaria\\|Primeri", "feature": "Funkcionalnost\\|Biznis potreba\\|Mozhnost", "given": "Dadeno\\>\\|Dadena\\>", "rule": "Rule", "scenario": "Na primer\\|Scenario", "scenario_outline": "Pregled na scenarija\\|Koncept\\|Skica", "then": "Togash\\>", "when": "Koga\\>"}, + \"mn": {"and": "\\%u0422\\%u044d\\%u0433\\%u044d\\%u044d\\%u0434\\>\\|\\%u041c\\%u04e9\\%u043d\\>", "background": "\\%u0410\\%u0433\\%u0443\\%u0443\\%u043b\\%u0433\\%u0430", "but": "\\%u0413\\%u044d\\%u0445\\%u0434\\%u044d\\%u044d\\>\\|\\%u0425\\%u0430\\%u0440\\%u0438\\%u043d\\>", "examples": "\\%u0422\\%u0443\\%u0445\\%u0430\\%u0439\\%u043b\\%u0431\\%u0430\\%u043b", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\|\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446", "given": "\\%u04e8\\%u0433\\%u04e9\\%u0433\\%u0434\\%u0441\\%u04e9\\%u043d \\%u043d\\%u044c\\>\\|\\%u0410\\%u043d\\%u0445\\>", "rule": "Rule", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440", "scenario_outline": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u044b\\%u043d \\%u0442\\%u04e9\\%u043b\\%u04e9\\%u0432\\%u043b\\%u04e9\\%u0433\\%u04e9\\%u04e9", "then": "\\%u04ae\\%u04af\\%u043d\\%u0438\\%u0439 \\%u0434\\%u0430\\%u0440\\%u0430\\%u0430\\>\\|\\%u0422\\%u044d\\%u0433\\%u044d\\%u0445\\%u044d\\%u0434\\>", "when": "\\%u0425\\%u044d\\%u0440\\%u044d\\%u0432\\>"}, + \"mr": {"and": "\\%u0924\\%u0938\\%u0947\\%u091a\\>\\|\\%u0906\\%u0923\\%u093f\\>", "background": "\\%u092a\\%u093e\\%u0930\\%u094d\\%u0936\\%u094d\\%u0935\\%u092d\\%u0942\\%u092e\\%u0940", "but": "\\%u092a\\%u0930\\%u0902\\%u0924\\%u0941\\>\\|\\%u092a\\%u0923\\>", "examples": "\\%u0909\\%u0926\\%u093e\\%u0939\\%u0930\\%u0923", "feature": "\\%u0935\\%u0948\\%u0936\\%u093f\\%u0937\\%u094d\\%u091f\\%u094d\\%u092f\\|\\%u0938\\%u0941\\%u0935\\%u093f\\%u0927\\%u093e", "given": "\\%u0926\\%u093f\\%u0932\\%u0947\\%u0932\\%u094d\\%u092f\\%u093e \\%u092a\\%u094d\\%u0930\\%u092e\\%u093e\\%u0923\\%u0947\\>\\|\\%u091c\\%u0930", "rule": "\\%u0928\\%u093f\\%u092f\\%u092e", "scenario": "\\%u092a\\%u0930\\%u093f\\%u0926\\%u0943\\%u0936\\%u094d\\%u092f", "scenario_outline": "\\%u092a\\%u0930\\%u093f\\%u0926\\%u0943\\%u0936\\%u094d\\%u092f \\%u0930\\%u0942\\%u092a\\%u0930\\%u0947\\%u0916\\%u093e", "then": "\\%u0924\\%u0947\\%u0935\\%u094d\\%u0939\\%u093e\\>\\|\\%u092e\\%u0917\\>", "when": "\\%u091c\\%u0947\\%u0935\\%u094d\\%u0939\\%u093e\\>"}, + \"ne": {"and": "\\%u0905\\%u0928\\%u093f\\>\\|\\%u0930\\>", "background": "\\%u092a\\%u0943\\%u0937\\%u094d\\%u0920\\%u092d\\%u0942\\%u092e\\%u0940", "but": "\\%u0924\\%u0930\\>", "examples": "\\%u0909\\%u0926\\%u093e\\%u0939\\%u0930\\%u0923\\%u0939\\%u0930\\%u0941\\|\\%u0909\\%u0926\\%u093e\\%u0939\\%u0930\\%u0923", "feature": "\\%u0935\\%u093f\\%u0936\\%u0947\\%u0937\\%u0924\\%u093e\\|\\%u0938\\%u0941\\%u0935\\%u093f\\%u0927\\%u093e", "given": "\\%u0926\\%u093f\\%u0907\\%u090f\\%u0915\\%u094b\\>\\|\\%u0926\\%u093f\\%u090f\\%u0915\\%u094b\\>\\|\\%u092f\\%u0926\\%u093f\\>", "rule": "\\%u0928\\%u093f\\%u092f\\%u092e", "scenario": "\\%u092a\\%u0930\\%u093f\\%u0926\\%u0943\\%u0936\\%u094d\\%u092f", "scenario_outline": "\\%u092a\\%u0930\\%u093f\\%u0926\\%u0943\\%u0936\\%u094d\\%u092f \\%u0930\\%u0942\\%u092a\\%u0930\\%u0947\\%u0916\\%u093e", "then": "\\%u0924\\%u094d\\%u092f\\%u0938\\%u092a\\%u091b\\%u093f\\>\\|\\%u0905\\%u0928\\%u0940\\>", "when": "\\%u091c\\%u092c\\>"}, + \"nl": {"and": "En\\>", "background": "Achtergrond", "but": "Maar\\>", "examples": "Voorbeelden", "feature": "Functionaliteit", "given": "Gegeven\\>\\|Stel\\>", "rule": "Rule", "scenario": "Voorbeeld\\|Scenario", "scenario_outline": "Abstract Scenario", "then": "Dan\\>", "when": "Wanneer\\>\\|Als\\>"}, + \"no": {"and": "Og\\>", "background": "Bakgrunn", "but": "Men\\>", "examples": "Eksempler", "feature": "Egenskap", "given": "Gitt\\>", "rule": "Regel", "scenario": "Eksempel\\|Scenario", "scenario_outline": "Abstrakt Scenario\\|Scenariomal", "then": "S\\%u00e5\\>", "when": "N\\%u00e5r\\>"}, + \"pa": {"and": "\\%u0a05\\%u0a24\\%u0a47\\>", "background": "\\%u0a2a\\%u0a3f\\%u0a1b\\%u0a4b\\%u0a15\\%u0a5c", "but": "\\%u0a2a\\%u0a30\\>", "examples": "\\%u0a09\\%u0a26\\%u0a3e\\%u0a39\\%u0a30\\%u0a28\\%u0a3e\\%u0a02", "feature": "\\%u0a28\\%u0a15\\%u0a36 \\%u0a28\\%u0a41\\%u0a39\\%u0a3e\\%u0a30\\|\\%u0a2e\\%u0a41\\%u0a39\\%u0a3e\\%u0a02\\%u0a26\\%u0a30\\%u0a3e\\|\\%u0a16\\%u0a3e\\%u0a38\\%u0a40\\%u0a05\\%u0a24", "given": "\\%u0a1c\\%u0a3f\\%u0a35\\%u0a47\\%u0a02 \\%u0a15\\%u0a3f\\>\\|\\%u0a1c\\%u0a47\\%u0a15\\%u0a30\\>", "rule": "Rule", "scenario": "\\%u0a09\\%u0a26\\%u0a3e\\%u0a39\\%u0a30\\%u0a28\\|\\%u0a2a\\%u0a1f\\%u0a15\\%u0a25\\%u0a3e", "scenario_outline": "\\%u0a2a\\%u0a1f\\%u0a15\\%u0a25\\%u0a3e \\%u0a30\\%u0a42\\%u0a2a \\%u0a30\\%u0a47\\%u0a16\\%u0a3e\\|\\%u0a2a\\%u0a1f\\%u0a15\\%u0a25\\%u0a3e \\%u0a22\\%u0a3e\\%u0a02\\%u0a1a\\%u0a3e", "then": "\\%u0a24\\%u0a26\\>", "when": "\\%u0a1c\\%u0a26\\%u0a4b\\%u0a02\\>"}, + \"pl": {"and": "Oraz\\>\\|I\\>", "background": "Za\\%u0142o\\%u017cenia", "but": "Ale\\>", "examples": "Przyk\\%u0142ady", "feature": "Potrzeba biznesowa\\|W\\%u0142a\\%u015bciwo\\%u015b\\%u0107\\|Funkcja\\|Aspekt", "given": "Zak\\%u0142adaj\\%u0105c, \\%u017ce\\>\\|Zak\\%u0142adaj\\%u0105c\\>\\|Maj\\%u0105c\\>", "rule": "Zasada\\|Regu\\%u0142a", "scenario": "Scenariusz\\|Przyk\\%u0142ad", "scenario_outline": "Szablon scenariusza", "then": "Wtedy\\>", "when": "Je\\%u017celi\\>\\|Je\\%u015bli\\>\\|Kiedy\\>\\|Gdy\\>"}, + \"pt": {"and": "E\\>", "background": "Cen\\%u00e1rio de Fundo\\|Cenario de Fundo\\|Contexto\\|Fundo", "but": "Mas\\>", "examples": "Exemplos\\|Cen\\%u00e1rios\\|Cenarios", "feature": "Funcionalidade\\|Caracter\\%u00edstica\\|Caracteristica", "given": "Dados\\>\\|Dadas\\>\\|Dado\\>\\|Dada\\>", "rule": "Regra", "scenario": "Exemplo\\|Cen\\%u00e1rio\\|Cenario", "scenario_outline": "Delinea\\%u00e7\\%u00e3o do Cen\\%u00e1rio\\|Delineacao do Cenario\\|Esquema do Cen\\%u00e1rio\\|Esquema do Cenario", "then": "Ent\\%u00e3o\\>\\|Entao\\>", "when": "Quando\\>"}, + \"ro": {"and": "Si\\>\\|\\%u0218i\\>\\|\\%u015ei\\>", "background": "Context", "but": "Dar\\>", "examples": "Exemple", "feature": "Functionalitate\\|Func\\%u021bionalitate\\|Func\\%u0163ionalitate", "given": "Date fiind\\>\\|Dati fiind\\>\\|Da\\%u021bi fiind\\>\\|Da\\%u0163i fiind\\>\\|Dat fiind\\>\\|Dat\\%u0103 fiind", "rule": "Rule", "scenario": "Scenariu\\|Exemplu", "scenario_outline": "Structura scenariu\\|Structur\\%u0103 scenariu", "then": "Atunci\\>", "when": "Cand\\>\\|C\\%u00e2nd\\>"}, + \"ru": {"and": "\\%u041a \\%u0442\\%u043e\\%u043c\\%u0443 \\%u0436\\%u0435\\>\\|\\%u0422\\%u0430\\%u043a\\%u0436\\%u0435\\>\\|\\%u0418\\>", "background": "\\%u041f\\%u0440\\%u0435\\%u0434\\%u044b\\%u0441\\%u0442\\%u043e\\%u0440\\%u0438\\%u044f\\|\\%u041a\\%u043e\\%u043d\\%u0442\\%u0435\\%u043a\\%u0441\\%u0442", "but": "\\%u0418\\%u043d\\%u0430\\%u0447\\%u0435\\>\\|\\%u041d\\%u043e\\>\\|\\%u0410\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u044b", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\%u044c\\%u043d\\%u043e\\%u0441\\%u0442\\%u044c\\|\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\|\\%u0421\\%u0432\\%u043e\\%u0439\\%u0441\\%u0442\\%u0432\\%u043e\\|\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u044f\\|\\%u0424\\%u0438\\%u0447\\%u0430", "given": "\\%u0414\\%u043e\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\>\\|\\%u041f\\%u0443\\%u0441\\%u0442\\%u044c\\>\\|\\%u0414\\%u0430\\%u043d\\%u043e\\>", "rule": "\\%u041f\\%u0440\\%u0430\\%u0432\\%u0438\\%u043b\\%u043e", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u044f\\|\\%u0428\\%u0430\\%u0431\\%u043b\\%u043e\\%u043d \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u044f", "then": "\\%u0417\\%u0430\\%u0442\\%u0435\\%u043c\\>\\|\\%u0422\\%u043e\\%u0433\\%u0434\\%u0430\\>\\|\\%u0422\\%u043e\\>", "when": "\\%u041a\\%u043e\\%u0433\\%u0434\\%u0430\\>\\|\\%u0415\\%u0441\\%u043b\\%u0438\\>"}, + \"sk": {"and": "A taktie\\%u017e\\>\\|A z\\%u00e1rove\\%u0148\\>\\|A tie\\%u017e\\>\\|A\\>", "background": "Pozadie", "but": "Ale\\>", "examples": "Pr\\%u00edklady", "feature": "Po\\%u017eiadavka\\|Vlastnos\\%u0165\\|Funkcia", "given": "Za predpokladu\\>\\|Pokia\\%u013e\\>", "rule": "Rule", "scenario": "Pr\\%u00edklad\\|Scen\\%u00e1r", "scenario_outline": "Osnova Scen\\%u00e1ra\\|N\\%u00e1\\%u010drt Scen\\%u00e1ru\\|N\\%u00e1\\%u010drt Scen\\%u00e1ra", "then": "Potom\\>\\|Tak\\>", "when": "Ke\\%u010f\\>\\|Ak\\>"}, + \"sl": {"and": "Ter\\>\\|In\\>", "background": "Kontekst\\|Osnova\\|Ozadje", "but": "Vendar\\>\\|Ampak\\>\\|Toda\\>", "examples": "Scenariji\\|Primeri", "feature": "Funkcionalnost\\|Zna\\%u010dilnost\\|Funkcija\\|Mo\\%u017enosti\\|Moznosti\\|Lastnost", "given": "Privzeto\\>\\|Podano\\>\\|Zaradi\\>\\|Dano\\>", "rule": "Rule", "scenario": "Scenarij\\|Primer", "scenario_outline": "Struktura scenarija\\|Oris scenarija\\|Koncept\\|Osnutek\\|Skica", "then": "Takrat\\>\\|Potem\\>\\|Nato\\>", "when": "Kadar\\>\\|Ko\\>\\|Ce\\>\\|\\%u010ce\\>"}, + \"sr-Cyrl": {"and": "\\%u0418\\>", "background": "\\%u041a\\%u043e\\%u043d\\%u0442\\%u0435\\%u043a\\%u0441\\%u0442\\|\\%u041f\\%u043e\\%u0437\\%u0430\\%u0434\\%u0438\\%u043d\\%u0430\\|\\%u041e\\%u0441\\%u043d\\%u043e\\%u0432\\%u0430", "but": "\\%u0410\\%u043b\\%u0438\\>", "examples": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0458\\%u0438\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u0438", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\%u043d\\%u043e\\%u0441\\%u0442\\|\\%u041c\\%u043e\\%u0433\\%u0443\\%u045b\\%u043d\\%u043e\\%u0441\\%u0442\\|\\%u041e\\%u0441\\%u043e\\%u0431\\%u0438\\%u043d\\%u0430", "given": "\\%u0417\\%u0430 \\%u0434\\%u0430\\%u0442\\%u043e\\>\\|\\%u0417\\%u0430 \\%u0434\\%u0430\\%u0442\\%u0435\\>\\|\\%u0417\\%u0430 \\%u0434\\%u0430\\%u0442\\%u0438\\>", "rule": "\\%u041f\\%u0440\\%u0430\\%u0432\\%u0438\\%u043b\\%u043e", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u043e\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0458\\%u0430\\|\\%u041a\\%u043e\\%u043d\\%u0446\\%u0435\\%u043f\\%u0442\\|\\%u0421\\%u043a\\%u0438\\%u0446\\%u0430", "then": "\\%u041e\\%u043d\\%u0434\\%u0430\\>", "when": "\\%u041a\\%u0430\\%u0434\\%u0430\\>\\|\\%u041a\\%u0430\\%u0434\\>"}, + \"sr-Latn": {"and": "I\\>", "background": "Kontekst\\|Pozadina\\|Osnova", "but": "Ali\\>", "examples": "Scenariji\\|Primeri", "feature": "Funkcionalnost\\|Mogu\\%u0107nost\\|Mogucnost\\|Osobina", "given": "Za dato\\>\\|Za date\\>\\|Za dati\\>", "rule": "Pravilo", "scenario": "Scenario\\|Primer", "scenario_outline": "Struktura scenarija\\|Koncept\\|Skica", "then": "Onda\\>", "when": "Kada\\>\\|Kad\\>"}, + \"sv": {"and": "Och\\>", "background": "Bakgrund", "but": "Men\\>", "examples": "Exempel", "feature": "Egenskap", "given": "Givet\\>", "rule": "Regel", "scenario": "Scenario", "scenario_outline": "Abstrakt Scenario\\|Scenariomall", "then": "S\\%u00e5\\>", "when": "N\\%u00e4r\\>"}, + \"ta": {"and": "\\%u0bae\\%u0bc7\\%u0bb2\\%u0bc1\\%u0bae\\%u0bcd \\>\\|\\%u0bae\\%u0bb1\\%u0bcd\\%u0bb1\\%u0bc1\\%u0bae\\%u0bcd\\>", "background": "\\%u0baa\\%u0bbf\\%u0ba9\\%u0bcd\\%u0ba9\\%u0ba3\\%u0bbf", "but": "\\%u0b86\\%u0ba9\\%u0bbe\\%u0bb2\\%u0bcd \\>", "examples": "\\%u0b8e\\%u0b9f\\%u0bc1\\%u0ba4\\%u0bcd\\%u0ba4\\%u0bc1\\%u0b95\\%u0bcd\\%u0b95\\%u0bbe\\%u0b9f\\%u0bcd\\%u0b9f\\%u0bc1\\%u0b95\\%u0bb3\\%u0bcd\\|\\%u0ba8\\%u0bbf\\%u0bb2\\%u0bc8\\%u0bae\\%u0bc8\\%u0b95\\%u0bb3\\%u0bbf\\%u0bb2\\%u0bcd\\|\\%u0b95\\%u0bbe\\%u0b9f\\%u0bcd\\%u0b9a\\%u0bbf\\%u0b95\\%u0bb3\\%u0bcd", "feature": "\\%u0bb5\\%u0ba3\\%u0bbf\\%u0b95 \\%u0ba4\\%u0bc7\\%u0bb5\\%u0bc8\\|\\%u0b85\\%u0bae\\%u0bcd\\%u0b9a\\%u0bae\\%u0bcd\\|\\%u0ba4\\%u0bbf\\%u0bb1\\%u0ba9\\%u0bcd", "given": "\\%u0b95\\%u0bc6\\%u0bbe\\%u0b9f\\%u0bc1\\%u0b95\\%u0bcd\\%u0b95\\%u0baa\\%u0bcd\\%u0baa\\%u0b9f\\%u0bcd\\%u0b9f\\>", "rule": "Rule", "scenario": "\\%u0b89\\%u0ba4\\%u0bbe\\%u0bb0\\%u0ba3\\%u0bae\\%u0bbe\\%u0b95\\|\\%u0b95\\%u0bbe\\%u0b9f\\%u0bcd\\%u0b9a\\%u0bbf", "scenario_outline": "\\%u0b95\\%u0bbe\\%u0b9f\\%u0bcd\\%u0b9a\\%u0bbf \\%u0bb5\\%u0bbe\\%u0bb0\\%u0bcd\\%u0baa\\%u0bcd\\%u0baa\\%u0bc1\\%u0bb0\\%u0bc1\\|\\%u0b95\\%u0bbe\\%u0b9f\\%u0bcd\\%u0b9a\\%u0bbf \\%u0b9a\\%u0bc1\\%u0bb0\\%u0bc1\\%u0b95\\%u0bcd\\%u0b95\\%u0bae\\%u0bcd", "then": "\\%u0b85\\%u0baa\\%u0bcd\\%u0baa\\%u0bc6\\%u0bbe\\%u0bb4\\%u0bc1\\%u0ba4\\%u0bc1\\>", "when": "\\%u0b8e\\%u0baa\\%u0bcd\\%u0baa\\%u0bc7\\%u0bbe\\%u0ba4\\%u0bc1\\>"}, + \"te": {"and": "\\%u0c2e\\%u0c30\\%u0c3f\\%u0c2f\\%u0c41\\>", "background": "\\%u0c28\\%u0c47\\%u0c2a\\%u0c25\\%u0c4d\\%u0c2f\\%u0c02", "but": "\\%u0c15\\%u0c3e\\%u0c28\\%u0c3f\\>", "examples": "\\%u0c09\\%u0c26\\%u0c3e\\%u0c39\\%u0c30\\%u0c23\\%u0c32\\%u0c41", "feature": "\\%u0c17\\%u0c41\\%u0c23\\%u0c2e\\%u0c41", "given": "\\%u0c1a\\%u0c46\\%u0c2a\\%u0c4d\\%u0c2a\\%u0c2c\\%u0c21\\%u0c3f\\%u0c28\\%u0c26\\%u0c3f\\>", "rule": "Rule", "scenario": "\\%u0c38\\%u0c28\\%u0c4d\\%u0c28\\%u0c3f\\%u0c35\\%u0c47\\%u0c36\\%u0c02\\|\\%u0c09\\%u0c26\\%u0c3e\\%u0c39\\%u0c30\\%u0c23", "scenario_outline": "\\%u0c15\\%u0c25\\%u0c28\\%u0c02", "then": "\\%u0c05\\%u0c2a\\%u0c4d\\%u0c2a\\%u0c41\\%u0c21\\%u0c41\\>", "when": "\\%u0c08 \\%u0c2a\\%u0c30\\%u0c3f\\%u0c38\\%u0c4d\\%u0c25\\%u0c3f\\%u0c24\\%u0c3f\\%u0c32\\%u0c4b\\>"}, + \"th": {"and": "\\%u0e41\\%u0e25\\%u0e30\\>", "background": "\\%u0e41\\%u0e19\\%u0e27\\%u0e04\\%u0e34\\%u0e14", "but": "\\%u0e41\\%u0e15\\%u0e48\\>", "examples": "\\%u0e0a\\%u0e38\\%u0e14\\%u0e02\\%u0e2d\\%u0e07\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\|\\%u0e0a\\%u0e38\\%u0e14\\%u0e02\\%u0e2d\\%u0e07\\%u0e15\\%u0e31\\%u0e27\\%u0e2d\\%u0e22\\%u0e48\\%u0e32\\%u0e07", "feature": "\\%u0e04\\%u0e27\\%u0e32\\%u0e21\\%u0e15\\%u0e49\\%u0e2d\\%u0e07\\%u0e01\\%u0e32\\%u0e23\\%u0e17\\%u0e32\\%u0e07\\%u0e18\\%u0e38\\%u0e23\\%u0e01\\%u0e34\\%u0e08\\|\\%u0e04\\%u0e27\\%u0e32\\%u0e21\\%u0e2a\\%u0e32\\%u0e21\\%u0e32\\%u0e23\\%u0e16\\|\\%u0e42\\%u0e04\\%u0e23\\%u0e07\\%u0e2b\\%u0e25\\%u0e31\\%u0e01", "given": "\\%u0e01\\%u0e33\\%u0e2b\\%u0e19\\%u0e14\\%u0e43\\%u0e2b\\%u0e49\\>", "rule": "Rule", "scenario": "\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c", "scenario_outline": "\\%u0e42\\%u0e04\\%u0e23\\%u0e07\\%u0e2a\\%u0e23\\%u0e49\\%u0e32\\%u0e07\\%u0e02\\%u0e2d\\%u0e07\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\|\\%u0e2a\\%u0e23\\%u0e38\\%u0e1b\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c", "then": "\\%u0e14\\%u0e31\\%u0e07\\%u0e19\\%u0e31\\%u0e49\\%u0e19\\>", "when": "\\%u0e40\\%u0e21\\%u0e37\\%u0e48\\%u0e2d\\>"}, + \"tlh": {"and": "latlh\\>\\|'ej\\>", "background": "mo'", "but": "'ach\\>\\|'a\\>", "examples": "ghantoH\\|lutmey", "feature": "poQbogh malja'\\|Qu'meH 'ut\\|perbogh\\|Qap\\|laH", "given": "DaH ghu' bejlu'\\>\\|ghu' noblu'\\>", "rule": "Rule", "scenario": "lut", "scenario_outline": "lut chovnatlh", "then": "vaj\\>", "when": "qaSDI'\\>"}, + \"tr": {"and": "Ve\\>", "background": "Ge\\%u00e7mi\\%u015f", "but": "Fakat\\>\\|Ama\\>", "examples": "\\%u00d6rnekler", "feature": "\\%u00d6zellik", "given": "Diyelim ki\\>", "rule": "Kural", "scenario": "Senaryo\\|\\%u00d6rnek", "scenario_outline": "Senaryo tasla\\%u011f\\%u0131", "then": "O zaman\\>", "when": "E\\%u011fer ki\\>"}, + \"tt": {"and": "\\%u04ba\\%u04d9\\%u043c\\>\\|\\%u0412\\%u04d9\\>", "background": "\\%u041a\\%u0435\\%u0440\\%u0435\\%u0448", "but": "\\%u041b\\%u04d9\\%u043a\\%u0438\\%u043d\\>\\|\\%u04d8\\%u043c\\%u043c\\%u0430\\>", "examples": "\\%u04ae\\%u0440\\%u043d\\%u04d9\\%u043a\\%u043b\\%u04d9\\%u0440\\|\\%u041c\\%u0438\\%u0441\\%u0430\\%u043b\\%u043b\\%u0430\\%u0440", "feature": "\\%u04ae\\%u0437\\%u0435\\%u043d\\%u0447\\%u04d9\\%u043b\\%u0435\\%u043a\\%u043b\\%u0435\\%u043b\\%u0435\\%u043a\\|\\%u041c\\%u04e9\\%u043c\\%u043a\\%u0438\\%u043d\\%u043b\\%u0435\\%u043a", "given": "\\%u04d8\\%u0439\\%u0442\\%u0438\\%u043a\\>", "rule": "Rule", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439", "scenario_outline": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\%u043d\\%u044b\\%u04a3 \\%u0442\\%u04e9\\%u0437\\%u0435\\%u043b\\%u0435\\%u0448\\%u0435", "then": "\\%u041d\\%u04d9\\%u0442\\%u0438\\%u0497\\%u04d9\\%u0434\\%u04d9\\>", "when": "\\%u04d8\\%u0433\\%u04d9\\%u0440\\>"}, + \"uk": {"and": "\\%u0410 \\%u0442\\%u0430\\%u043a\\%u043e\\%u0436\\>\\|\\%u0422\\%u0430\\>\\|\\%u0406\\>", "background": "\\%u041f\\%u0435\\%u0440\\%u0435\\%u0434\\%u0443\\%u043c\\%u043e\\%u0432\\%u0430", "but": "\\%u0410\\%u043b\\%u0435\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043a\\%u043b\\%u0430\\%u0434\\%u0438", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0456\\%u043e\\%u043d\\%u0430\\%u043b", "given": "\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e, \\%u0449\\%u043e\\>\\|\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e\\>\\|\\%u041d\\%u0435\\%u0445\\%u0430\\%u0439\\>\\|\\%u0414\\%u0430\\%u043d\\%u043e\\>", "rule": "Rule", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u0439\\|\\%u041f\\%u0440\\%u0438\\%u043a\\%u043b\\%u0430\\%u0434", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u044e", "then": "\\%u0422\\%u043e\\%u0434\\%u0456\\>\\|\\%u0422\\%u043e\\>", "when": "\\%u042f\\%u043a\\%u0449\\%u043e\\>\\|\\%u041a\\%u043e\\%u043b\\%u0438\\>"}, + \"ur": {"and": "\\%u0627\\%u0648\\%u0631\\>", "background": "\\%u067e\\%u0633 \\%u0645\\%u0646\\%u0638\\%u0631", "but": "\\%u0644\\%u06cc\\%u06a9\\%u0646\\>", "examples": "\\%u0645\\%u062b\\%u0627\\%u0644\\%u06cc\\%u06ba", "feature": "\\%u06a9\\%u0627\\%u0631\\%u0648\\%u0628\\%u0627\\%u0631 \\%u06a9\\%u06cc \\%u0636\\%u0631\\%u0648\\%u0631\\%u062a\\|\\%u0635\\%u0644\\%u0627\\%u062d\\%u06cc\\%u062a\\|\\%u062e\\%u0635\\%u0648\\%u0635\\%u06cc\\%u062a", "given": "\\%u0641\\%u0631\\%u0636 \\%u06a9\\%u06cc\\%u0627\\>\\|\\%u0628\\%u0627\\%u0644\\%u0641\\%u0631\\%u0636\\>\\|\\%u0627\\%u06af\\%u0631\\>", "rule": "Rule", "scenario": "\\%u0645\\%u0646\\%u0638\\%u0631\\%u0646\\%u0627\\%u0645\\%u06c1", "scenario_outline": "\\%u0645\\%u0646\\%u0638\\%u0631 \\%u0646\\%u0627\\%u0645\\%u06d2 \\%u06a9\\%u0627 \\%u062e\\%u0627\\%u06a9\\%u06c1", "then": "\\%u067e\\%u06be\\%u0631\\>\\|\\%u062a\\%u0628\\>", "when": "\\%u062c\\%u0628\\>"}, + \"uz": {"and": "\\%u0412\\%u0430\\>", "background": "\\%u0422\\%u0430\\%u0440\\%u0438\\%u0445", "but": "\\%u041b\\%u0435\\%u043a\\%u0438\\%u043d\\>\\|\\%u0411\\%u0438\\%u0440\\%u043e\\%u043a\\>\\|\\%u0410\\%u043c\\%u043c\\%u043e\\>", "examples": "\\%u041c\\%u0438\\%u0441\\%u043e\\%u043b\\%u043b\\%u0430\\%u0440", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b", "given": "Belgilangan\\>", "rule": "Rule", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439", "scenario_outline": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439 \\%u0441\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430\\%u0441\\%u0438", "then": "\\%u0423\\%u043d\\%u0434\\%u0430\\>", "when": "\\%u0410\\%u0433\\%u0430\\%u0440\\>"}, + \"vi": {"and": "V\\%u00e0\\>", "background": "B\\%u1ed1i c\\%u1ea3nh", "but": "Nh\\%u01b0ng\\>", "examples": "D\\%u1eef li\\%u1ec7u", "feature": "T\\%u00ednh n\\%u0103ng", "given": "Bi\\%u1ebft\\>\\|Cho\\>", "rule": "Rule", "scenario": "T\\%u00ecnh hu\\%u1ed1ng\\|K\\%u1ecbch b\\%u1ea3n", "scenario_outline": "Khung t\\%u00ecnh hu\\%u1ed1ng\\|Khung k\\%u1ecbch b\\%u1ea3n", "then": "Th\\%u00ec\\>", "when": "Khi\\>"}, + \"zh-CN": {"and": "\\%u800c\\%u4e14\\|\\%u5e76\\%u4e14\\|\\%u540c\\%u65f6", "background": "\\%u80cc\\%u666f", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50", "feature": "\\%u529f\\%u80fd", "given": "\\%u5047\\%u5982\\|\\%u5047\\%u8bbe\\|\\%u5047\\%u5b9a", "rule": "Rule\\|\\%u89c4\\%u5219", "scenario": "\\%u573a\\%u666f\\|\\%u5267\\%u672c", "scenario_outline": "\\%u573a\\%u666f\\%u5927\\%u7eb2\\|\\%u5267\\%u672c\\%u5927\\%u7eb2", "then": "\\%u90a3\\%u4e48", "when": "\\%u5f53"}, + \"zh-TW": {"and": "\\%u800c\\%u4e14\\|\\%u4e26\\%u4e14\\|\\%u540c\\%u6642", "background": "\\%u80cc\\%u666f", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50", "feature": "\\%u529f\\%u80fd", "given": "\\%u5047\\%u5982\\|\\%u5047\\%u8a2d\\|\\%u5047\\%u5b9a", "rule": "Rule", "scenario": "\\%u5834\\%u666f\\|\\%u5287\\%u672c", "scenario_outline": "\\%u5834\\%u666f\\%u5927\\%u7db1\\|\\%u5287\\%u672c\\%u5927\\%u7db1", "then": "\\%u90a3\\%u9ebc", "when": "\\%u7576"}} + +function! s:pattern(key) + let language = matchstr(getline(1),'#\s*language:\s*\zs\S\+') + if &fileencoding == 'latin1' && language == '' + let language = 'en' + endif + if has_key(g:cucumber_languages, language) + let languages = [g:cucumber_languages[language]] + else + let languages = values(g:cucumber_languages) + end + return '\<\%('.join(map(languages,'get(v:val,a:key,"\\%(a\\&b\\)")'),'\|').'\)' +endfunction + +function! s:Add(name) + let next = " skipempty skipwhite nextgroup=".join(map(["Region","AndRegion","ButRegion","StarRegion","Comment","String","Table"],'"cucumber".a:name.v:val'),",") + exe "syn region cucumber".a:name.'Region matchgroup=cucumber'.a:name.' start="\%(^\s*\)\@<=\%('.s:pattern(tolower(a:name)).'\)" end="$"'.next + exe 'syn region cucumber'.a:name.'AndRegion matchgroup=cucumber'.a:name.'And start="\%(^\s*\)\@<='.s:pattern('and').'" end="$" contained'.next + exe 'syn region cucumber'.a:name.'ButRegion matchgroup=cucumber'.a:name.'But start="\%(^\s*\)\@<='.s:pattern('but').'" end="$" contained'.next + exe 'syn region cucumber'.a:name.'StarRegion matchgroup=cucumber'.a:name.'Star start="\%(^\s*\)\@<=\*\S\@!" end="$" contained'.next + exe 'syn match cucumber'.a:name.'Comment "\%(^\s*\)\@<=#.*" contained'.next + exe 'syn region cucumber'.a:name.'String start=+\%(^\s*\)\@<="""+ end=+"""+ contained'.next + exe 'syn match cucumber'.a:name.'Table "\%(^\s*\)\@<=|.*" contained contains=cucumberDelimiter'.next + exe 'hi def link cucumber'.a:name.'Comment cucumberComment' + exe 'hi def link cucumber'.a:name.'String cucumberString' + exe 'hi def link cucumber'.a:name.'But cucumber'.a:name.'And' + exe 'hi def link cucumber'.a:name.'Star cucumber'.a:name.'And' + exe 'hi def link cucumber'.a:name.'And cucumber'.a:name + exe 'syn cluster cucumberStepRegions add=cucumber'.a:name.'Region,cucumber'.a:name.'AndRegion,cucumber'.a:name.'ButRegion' +endfunction + +syn match cucumberComment "\%(^\s*\)\@<=#.*" +syn match cucumberComment "\%(\%^\s*\)\@<=#.*" contains=cucumberLanguage +syn match cucumberLanguage "\%(#\s*\)\@<=language:" contained +syn match cucumberUnparsed "\S.*" nextgroup=cucumberUnparsedComment,cucumberUnparsed,cucumberTags,cucumberBackground,cucumberRule,cucumberScenario,cucumberScenarioOutline,cucumberExamples skipwhite skipempty contained +syn match cucumberUnparsedComment "#.*" nextgroup=cucumberUnparsedComment,cucumberUnparsed,cucumberTags,cucumberBackground,cucumberRule,cucumberScenario,cucumberScenarioOutline,cucumberExamples skipwhite skipempty contained + +exe 'syn match cucumberFeature "\%(^\s*\)\@<='.s:pattern('feature').':" nextgroup=cucumberUnparsedComment,cucumberUnparsed,cucumberBackground,cucumberRule,cucumberScenario,cucumberScenarioOutline,cucumberExamples skipwhite skipempty' +exe 'syn match cucumberBackground "\%(^\s*\)\@<='.s:pattern('background').':"' +exe 'syn match cucumberScenario "\%(^\s*\)\@<='.s:pattern('scenario').':"' +exe 'syn match cucumberRule "\%(^\s*\)\@<='.s:pattern('rule').':"' +exe 'syn match cucumberScenarioOutline "\%(^\s*\)\@<='.s:pattern('scenario_outline').':"' +exe 'syn match cucumberExamples "\%(^\s*\)\@<='.s:pattern('examples').':" nextgroup=cucumberExampleTable skipempty skipwhite' + +syn match cucumberPlaceholder "<[^<>]*>" contained containedin=@cucumberStepRegions +syn match cucumberExampleTable "\%(^\s*\)\@<=|.*" contains=cucumberDelimiter +syn match cucumberDelimiter "\\\@ +" Last Change: 2024 Apr 04 +" Contributor: jiangyinzuo + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Read the C++ syntax to start with +runtime! syntax/cpp.vim + +" CUDA extentions. +" Reference: https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#c-language-extensions +syn keyword cudaStorageClass __device__ __global__ __host__ __managed__ +syn keyword cudaStorageClass __constant__ __grid_constant__ __shared__ +syn keyword cudaStorageClass __inline__ __noinline__ __forceinline__ __inline_hint__ +syn keyword cudaStorageClass __align__ __thread__ __restrict__ +"syn keyword cudaStorageClass __import__ __export__ __location__ +syn keyword cudaType char1 char2 char3 char4 +syn keyword cudaType uchar1 uchar2 uchar3 uchar4 +syn keyword cudaType short1 short2 short3 short4 +syn keyword cudaType ushort1 ushort2 ushort3 ushort4 +syn keyword cudaType int1 int2 int3 int4 +syn keyword cudaType uint1 uint2 uint3 uint4 +syn keyword cudaType long1 long2 long3 long4 +syn keyword cudaType ulong1 ulong2 ulong3 ulong4 +syn keyword cudaType longlong1 longlong2 longlong3 longlong4 +syn keyword cudaType ulonglong1 ulonglong2 ulonglong3 ulonglong4 +syn keyword cudaType float1 float2 float3 float4 +syn keyword cudaType double1 double2 double3 double4 +syn keyword cudaType dim3 texture textureReference +syn keyword cudaType cudaError_t cudaDeviceProp cudaMemcpyKind +syn keyword cudaType cudaArray cudaChannelFormatKind +syn keyword cudaType cudaChannelFormatDesc cudaTextureAddressMode +syn keyword cudaType cudaTextureFilterMode cudaTextureReadMode +syn keyword cudaVariable gridDim blockIdx blockDim threadIdx warpSize +syn keyword cudaConstant __CUDA_ARCH__ +syn keyword cudaConstant __DEVICE_EMULATION__ +" There are too many CUDA enumeration constants. We only define a subset of commonly used constants. +" Reference: https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__TYPES.html +syn keyword cudaConstant cudaSuccess + +hi def link cudaStorageClass StorageClass +hi def link cudaType Type +hi def link cudaVariable Identifier +hi def link cudaConstant Constant + +let b:current_syntax = "cuda" + +" vim: ts=8 diff --git a/.config/vim/syntax/cupl.vim b/.config/vim/syntax/cupl.vim new file mode 100644 index 0000000..54495f8 --- /dev/null +++ b/.config/vim/syntax/cupl.vim @@ -0,0 +1,124 @@ +" Vim syntax file +" Language: CUPL +" Maintainer: John Cook +" Last Change: 2011 Dec 27 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" this language is oblivious to case. +syn case ignore + +" A bunch of keywords +syn keyword cuplHeader name partno date revision rev designer company nextgroup=cuplHeaderContents +syn keyword cuplHeader assembly assy location device nextgroup=cuplHeaderContents + +syn keyword cuplTodo contained TODO XXX FIXME + +" cuplHeaderContents uses default highlighting except for numbers +syn match cuplHeaderContents ".\+;"me=e-1 contains=cuplNumber contained + +" String constants +syn region cuplString start=+'+ end=+'+ +syn region cuplString start=+"+ end=+"+ + +syn keyword cuplStatement append condition +syn keyword cuplStatement default else +syn keyword cuplStatement field fld format function fuse +syn keyword cuplStatement group if jump loc +syn keyword cuplStatement macro min node out +syn keyword cuplStatement pin pinnode present table +syn keyword cuplStatement sequence sequenced sequencejk sequencers sequencet + +syn keyword cuplFunction log2 log8 log16 log + +" Valid integer number formats (decimal, binary, octal, hex) +syn match cuplNumber "\<[-+]\=[0-9]\+\>" +syn match cuplNumber "'d'[0-9]\+\>" +syn match cuplNumber "'b'[01x]\+\>" +syn match cuplNumber "'o'[0-7x]\+\>" +syn match cuplNumber "'h'[0-9a-fx]\+\>" + +" operators +syn match cuplLogicalOperator "[!#&$]" +syn match cuplArithmeticOperator "[-+*/%]" +syn match cuplArithmeticOperator "\*\*" +syn match cuplAssignmentOperator ":\==" +syn match cuplEqualityOperator ":" +syn match cuplTruthTableOperator "=>" + +" Signal extensions +syn match cuplExtension "\.[as][pr]\>" +syn match cuplExtension "\.oe\>" +syn match cuplExtension "\.oemux\>" +syn match cuplExtension "\.[dlsrjk]\>" +syn match cuplExtension "\.ck\>" +syn match cuplExtension "\.dq\>" +syn match cuplExtension "\.ckmux\>" +syn match cuplExtension "\.tec\>" +syn match cuplExtension "\.cnt\>" + +syn match cuplRangeOperator "\.\." contained + +" match ranges like memadr:[0000..1FFF] +" and highlight both the numbers and the .. operator +syn match cuplNumberRange "\<\x\+\.\.\x\+\>" contains=cuplRangeOperator + +" match vectors of type [name3..0] (decimal numbers only) +" but assign them no special highlighting except for the .. operator +syn match cuplBitVector "\<\a\+\d\+\.\.\d\+\>" contains=cuplRangeOperator + +" other special characters +syn match cuplSpecialChar "[\[\](){},;]" + +" directives +" (define these after cuplOperator so $xxx overrides $) +syn match cuplDirective "\$msg" +syn match cuplDirective "\$macro" +syn match cuplDirective "\$mend" +syn match cuplDirective "\$repeat" +syn match cuplDirective "\$repend" +syn match cuplDirective "\$define" +syn match cuplDirective "\$include" + +" multi-line comments +syn region cuplComment start=+/\*+ end=+\*/+ contains=cuplNumber,cuplTodo + +syn sync minlines=1 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default highlighting. +hi def link cuplHeader cuplStatement +hi def link cuplLogicalOperator cuplOperator +hi def link cuplRangeOperator cuplOperator +hi def link cuplArithmeticOperator cuplOperator +hi def link cuplAssignmentOperator cuplOperator +hi def link cuplEqualityOperator cuplOperator +hi def link cuplTruthTableOperator cuplOperator +hi def link cuplOperator cuplStatement +hi def link cuplFunction cuplStatement +hi def link cuplStatement Statement +hi def link cuplNumberRange cuplNumber +hi def link cuplNumber cuplString +hi def link cuplString String +hi def link cuplComment Comment +hi def link cuplExtension cuplSpecial +hi def link cuplSpecialChar cuplSpecial +hi def link cuplSpecial Special +hi def link cuplDirective PreProc +hi def link cuplTodo Todo + + +let b:current_syntax = "cupl" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim:ts=8 diff --git a/.config/vim/syntax/cuplsim.vim b/.config/vim/syntax/cuplsim.vim new file mode 100644 index 0000000..36eb4c3 --- /dev/null +++ b/.config/vim/syntax/cuplsim.vim @@ -0,0 +1,63 @@ +" Vim syntax file +" Language: CUPL simulation +" Maintainer: John Cook +" Last Change: 2001 Apr 25 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Read the CUPL syntax to start with +runtime! syntax/cupl.vim +unlet b:current_syntax + +" omit definition-specific stuff +syn clear cuplStatement +syn clear cuplFunction +syn clear cuplLogicalOperator +syn clear cuplArithmeticOperator +syn clear cuplAssignmentOperator +syn clear cuplEqualityOperator +syn clear cuplTruthTableOperator +syn clear cuplExtension + +" simulation order statement +syn match cuplsimOrder "order:" nextgroup=cuplsimOrderSpec skipempty +syn region cuplsimOrderSpec start="." end=";"me=e-1 contains=cuplComment,cuplsimOrderFormat,cuplBitVector,cuplSpecialChar,cuplLogicalOperator,cuplCommaOperator contained + +" simulation base statement +syn match cuplsimBase "base:" nextgroup=cuplsimBaseSpec skipempty +syn region cuplsimBaseSpec start="." end=";"me=e-1 contains=cuplComment,cuplsimBaseType contained +syn keyword cuplsimBaseType octal decimal hex contained + +" simulation vectors statement +syn match cuplsimVectors "vectors:" + +" simulator format control +syn match cuplsimOrderFormat "%\d\+\>" contained + +" simulator control +syn match cuplsimStimulus "[10ckpx]\+" +syn match cuplsimStimulus +'\(\x\|x\)\+'+ +syn match cuplsimOutput "[lhznx*]\+" +syn match cuplsimOutput +"\x\+"+ + +syn sync minlines=1 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" append to the highlighting links in cupl.vim +" The default highlighting. +hi def link cuplsimOrder cuplStatement +hi def link cuplsimBase cuplStatement +hi def link cuplsimBaseType cuplStatement +hi def link cuplsimVectors cuplStatement +hi def link cuplsimStimulus cuplNumber +hi def link cuplsimOutput cuplNumber +hi def link cuplsimOrderFormat cuplNumber + + +let b:current_syntax = "cuplsim" +" vim:ts=8 diff --git a/.config/vim/syntax/cvs.vim b/.config/vim/syntax/cvs.vim new file mode 100644 index 0000000..e1e413f --- /dev/null +++ b/.config/vim/syntax/cvs.vim @@ -0,0 +1,29 @@ +" Vim syntax file +" Language: CVS commit file +" Maintainer: Matt Dunford (zenmatic@gmail.com) +" Last Change: Sat Nov 24 23:25:11 CET 2001 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn region cvsLine start="^CVS: " end="$" contains=cvsFile,cvsCom,cvsFiles,cvsTag +syn match cvsFile contained " \t\(\(\S\+\) \)\+" +syn match cvsTag contained " Tag:" +syn match cvsFiles contained "\(Added\|Modified\|Removed\) Files:" +syn region cvsCom start="Committing in" end="$" contains=cvsDir contained extend keepend +syn match cvsDir contained "\S\+$" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link cvsLine Comment +hi def link cvsDir cvsFile +hi def link cvsFile Constant +hi def link cvsFiles cvsCom +hi def link cvsTag cvsCom +hi def link cvsCom Statement + + +let b:current_syntax = "cvs" diff --git a/.config/vim/syntax/cvsrc.vim b/.config/vim/syntax/cvsrc.vim new file mode 100644 index 0000000..9522de6 --- /dev/null +++ b/.config/vim/syntax/cvsrc.vim @@ -0,0 +1,39 @@ +" Vim syntax file +" Language: cvs(1) RC file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn region cvsrcString display oneline start=+"+ skip=+\\\\\|\\\\"+ end=+"+ +syn region cvsrcString display oneline start=+'+ skip=+\\\\\|\\\\'+ end=+'+ + +syn match cvsrcNumber display '\<\d\+\>' + +syn match cvsrcBegin display '^' nextgroup=cvsrcCommand skipwhite + +syn region cvsrcCommand contained transparent matchgroup=cvsrcCommand + \ start='add\|admin\|checkout\|commit\|cvs\|diff' + \ start='export\|history\|import\|init\|log' + \ start='rdiff\|release\|remove\|rtag\|status\|tag' + \ start='update' + \ end='$' + \ contains=cvsrcOption,cvsrcString,cvsrcNumber + \ keepend + +syn match cvsrcOption contained display '-\a\+' + +hi def link cvsrcString String +hi def link cvsrcNumber Number +hi def link cvsrcCommand Keyword +hi def link cvsrcOption Identifier + +let b:current_syntax = "cvsrc" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/cweb.vim b/.config/vim/syntax/cweb.vim new file mode 100644 index 0000000..4e06b36 --- /dev/null +++ b/.config/vim/syntax/cweb.vim @@ -0,0 +1,68 @@ +" Vim syntax file +" Language: CWEB +" Maintainer: Andreas Scherer +" Last Change: 2011 Dec 25 by Thilo Six + +" Details of the CWEB language can be found in the article by Donald E. Knuth +" and Silvio Levy, "The CWEB System of Structured Documentation", included as +" file "cwebman.tex" in the standard CWEB distribution, available for +" anonymous ftp at ftp://labrea.stanford.edu/pub/cweb/. + +" TODO: Section names and C/C++ comments should be treated as TeX material. +" TODO: The current version switches syntax highlighting off for section +" TODO: names, and leaves C/C++ comments as such. (On the other hand, +" TODO: switching to TeX mode in C/C++ comments might be colour overkill.) + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" For starters, read the TeX syntax; TeX syntax items are allowed at the top +" level in the CWEB syntax, e.g., in the preamble. In general, a CWEB source +" code can be seen as a normal TeX document with some C/C++ material +" interspersed in certain defined regions. +runtime! syntax/tex.vim +unlet b:current_syntax + +" Read the C/C++ syntax too; C/C++ syntax items are treated as such in the +" C/C++ section of a CWEB chunk or in inner C/C++ context in "|...|" groups. +syntax include @webIncludedC :p:h/cpp.vim + +let s:cpo_save = &cpo +set cpo&vim + +" Inner C/C++ context (ICC) should be quite simple as it's comprised of +" material in "|...|"; however the naive definition for this region would +" hickup at the innocious "\|" TeX macro. Note: For the time being we expect +" that an ICC begins either at the start of a line or after some white space. +syntax region webInnerCcontext start="\(^\|[ \t\~`(]\)|" end="|" contains=@webIncludedC,webSectionName,webRestrictedTeX,webIgnoredStuff + +" Genuine C/C++ material. This syntactic region covers both the definition +" part and the C/C++ part of a CWEB section; it is ended by the TeX part of +" the next section. +syntax region webCpart start="@[dfscp<(]" end="@[ \*]" contains=@webIncludedC,webSectionName,webRestrictedTeX,webIgnoredStuff + +" Section names contain C/C++ material only in inner context. +syntax region webSectionName start="@[<(]" end="@>" contains=webInnerCcontext contained + +" The contents of "control texts" is not treated as TeX material, because in +" non-trivial cases this completely clobbers the syntax recognition. Instead, +" we highlight these elements as "strings". +syntax region webRestrictedTeX start="@[\^\.:t=q]" end="@>" oneline + +" Double-@ means single-@, anywhere in the CWEB source. (This allows e-mail +" address without going into C/C++ mode.) +syntax match webIgnoredStuff "@@" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link webRestrictedTeX String + + +let b:current_syntax = "cweb" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8 diff --git a/.config/vim/syntax/cynlib.vim b/.config/vim/syntax/cynlib.vim new file mode 100644 index 0000000..24ad2a2 --- /dev/null +++ b/.config/vim/syntax/cynlib.vim @@ -0,0 +1,74 @@ +" Vim syntax file +" Language: Cynlib(C++) +" Maintainer: Phil Derrick +" Last change: 2001 Sep 02 +" URL http://www.derrickp.freeserve.co.uk/vim/syntax/cynlib.vim +" +" Language Information +" +" Cynlib is a library of C++ classes to allow hardware +" modelling in C++. Combined with a simulation kernel, +" the compiled and linked executable forms a hardware +" simulation of the described design. +" +" Further information can be found from www.forteds.com + + +" Remove any old syntax stuff hanging around +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + + + +" Read the C++ syntax to start with - this includes the C syntax +runtime! syntax/cpp.vim +unlet b:current_syntax + +" Cynlib extensions + +syn keyword cynlibMacro Default CYNSCON +syn keyword cynlibMacro Case CaseX EndCaseX +syn keyword cynlibType CynData CynSignedData CynTime +syn keyword cynlibType In Out InST OutST +syn keyword cynlibType Struct +syn keyword cynlibType Int Uint Const +syn keyword cynlibType Long Ulong +syn keyword cynlibType OneHot +syn keyword cynlibType CynClock Cynclock0 +syn keyword cynlibFunction time configure my_name +syn keyword cynlibFunction CynModule epilog execute_on +syn keyword cynlibFunction my_name +syn keyword cynlibFunction CynBind bind +syn keyword cynlibFunction CynWait CynEvent +syn keyword cynlibFunction CynSetName +syn keyword cynlibFunction CynTick CynRun +syn keyword cynlibFunction CynFinish +syn keyword cynlibFunction Cynprintf CynSimTime +syn keyword cynlibFunction CynVcdFile +syn keyword cynlibFunction CynVcdAdd CynVcdRemove +syn keyword cynlibFunction CynVcdOn CynVcdOff +syn keyword cynlibFunction CynVcdScale +syn keyword cynlibFunction CynBgnName CynEndName +syn keyword cynlibFunction CynClock configure time +syn keyword cynlibFunction CynRedAnd CynRedNand +syn keyword cynlibFunction CynRedOr CynRedNor +syn keyword cynlibFunction CynRedXor CynRedXnor +syn keyword cynlibFunction CynVerify + + +syn match cynlibOperator "<<=" +syn keyword cynlibType In Out InST OutST Int Uint Const Cynclock + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link cynlibOperator Operator +hi def link cynlibMacro Statement +hi def link cynlibFunction Statement +hi def link cynlibppMacro Statement +hi def link cynlibType Type + + +let b:current_syntax = "cynlib" diff --git a/.config/vim/syntax/cynpp.vim b/.config/vim/syntax/cynpp.vim new file mode 100644 index 0000000..3064b11 --- /dev/null +++ b/.config/vim/syntax/cynpp.vim @@ -0,0 +1,50 @@ +" Vim syntax file +" Language: Cyn++ +" Maintainer: Phil Derrick +" Last change: 2001 Sep 02 +" +" Language Information +" +" Cynpp (Cyn++) is a macro language to ease coding in Cynlib. +" Cynlib is a library of C++ classes to allow hardware +" modelling in C++. Combined with a simulation kernel, +" the compiled and linked executable forms a hardware +" simulation of the described design. +" +" Cyn++ is designed to be HDL-like. +" +" Further information can be found from www.forteds.com + + + + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Read the Cynlib syntax to start with - this includes the C++ syntax +runtime! syntax/cynlib.vim +unlet b:current_syntax + + + +" Cyn++ extensions + +syn keyword cynppMacro Always EndAlways +syn keyword cynppMacro Module EndModule +syn keyword cynppMacro Initial EndInitial +syn keyword cynppMacro Posedge Negedge Changed +syn keyword cynppMacro At +syn keyword cynppMacro Thread EndThread +syn keyword cynppMacro Instantiate + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link cLabel Label +hi def link cynppMacro Statement + + +let b:current_syntax = "cynpp" diff --git a/.config/vim/syntax/d.vim b/.config/vim/syntax/d.vim new file mode 100644 index 0000000..fdac98c --- /dev/null +++ b/.config/vim/syntax/d.vim @@ -0,0 +1,573 @@ +" Vim syntax file for the D programming language (version 1.076 and 2.069). +" +" Language: D +" Maintainer: Jesse Phillips +" Last Change: 2016 Feb 2 +" Version: 0.28 +" +" Contributors: +" - Jason Mills: original Maintainer +" - Kirk McDonald +" - Tim Keating +" - Frank Benoit +" - Shougo Matsushita +" - Ellery Newcomer +" - Steven N. Oliver +" - Sohgo Takeuchi +" - Robert Clipsham +" - Petar Kirov +" +" Please submit bugs/comments/suggestions to the github repo: +" https://github.com/JesseKPhillips/d.vim +" +" Options: +" d_comment_strings - Set to highlight strings and numbers in comments. +" +" d_hl_operator_overload - Set to highlight D's specially named functions +" that when overloaded implement unary and binary operators (e.g. opCmp). +" +" d_hl_object_types - Set to highlight some common types from object.di. + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Support cpoptions +let s:cpo_save = &cpo +set cpo&vim + +" Set the current syntax to be known as d +let b:current_syntax = "d" + +" Keyword definitions +" +syn keyword dExternal contained import module +syn keyword dAssert assert +syn keyword dConditional if else switch +syn keyword dBranch goto break continue +syn keyword dRepeat while for do foreach foreach_reverse +syn keyword dBoolean true false +syn keyword dConstant null +syn keyword dConstant __FILE__ __LINE__ __EOF__ __VERSION__ +syn keyword dConstant __DATE__ __TIME__ __TIMESTAMP__ __VENDOR__ +syn keyword dConstant __MODULE__ __FUNCTION__ __PRETTY_FUNCTION__ +syn keyword dTypedef alias typedef +syn keyword dStructure template interface class struct union +syn keyword dEnum enum +syn keyword dOperator new delete typeof typeid cast align is +syn keyword dOperator this super +if exists("d_hl_operator_overload") + syn keyword dOpOverload opNeg opCom opPostInc opPostDec opCast opAdd + syn keyword dOpOverload opSub opSub_r opMul opDiv opDiv_r opMod + syn keyword dOpOverload opMod_r opAnd opOr opXor opShl opShl_r opShr + syn keyword dOpOverload opShr_r opUShr opUShr_r opCat + syn keyword dOpOverload opCat_r opEquals opCmp + syn keyword dOpOverload opAssign opAddAssign opSubAssign opMulAssign + syn keyword dOpOverload opDivAssign opModAssign opAndAssign + syn keyword dOpOverload opOrAssign opXorAssign opShlAssign + syn keyword dOpOverload opShrAssign opUShrAssign opCatAssign + syn keyword dOpOverload opIndex opIndexAssign opIndexOpAssign + syn keyword dOpOverload opCall opSlice opSliceAssign opSliceOpAssign + syn keyword dOpOverload opPos opAdd_r opMul_r opAnd_r opOr_r opXor_r + syn keyword dOpOverload opIn opIn_r opPow opDispatch opStar opDot + syn keyword dOpOverload opApply opApplyReverse opDollar + syn keyword dOpOverload opUnary opIndexUnary opSliceUnary + syn keyword dOpOverload opBinary opBinaryRight +endif + +syn keyword dType byte ubyte short ushort int uint long ulong cent ucent +syn keyword dType void bool Object +syn keyword dType float double real +syn keyword dType ushort int uint long ulong float +syn keyword dType char wchar dchar string wstring dstring +syn keyword dType ireal ifloat idouble creal cfloat cdouble +syn keyword dType size_t ptrdiff_t sizediff_t equals_t hash_t +if exists("d_hl_object_types") + syn keyword dType Object Throwable AssociativeArray Error Exception + syn keyword dType Interface OffsetTypeInfo TypeInfo TypeInfo_Typedef + syn keyword dType TypeInfo_Enum TypeInfo_Pointer TypeInfo_Array + syn keyword dType TypeInfo_StaticArray TypeInfo_AssociativeArray + syn keyword dType TypeInfo_Function TypeInfo_Delegate TypeInfo_Class + syn keyword dType ClassInfo TypeInfo_Interface TypeInfo_Struct + syn keyword dType TypeInfo_Tuple TypeInfo_Const TypeInfo_Invariant + syn keyword dType TypeInfo_Shared TypeInfo_Inout MemberInfo + syn keyword dType MemberInfo_field MemberInfo_function ModuleInfo +endif +syn keyword dDebug deprecated unittest invariant +syn keyword dExceptions throw try catch finally +syn keyword dScopeDecl public protected private export package +syn keyword dStatement debug return with +syn keyword dStatement function delegate __ctfe mixin macro __simd +syn keyword dStatement in out body +syn keyword dStorageClass contained in out scope +syn keyword dStorageClass inout ref lazy pure nothrow +syn keyword dStorageClass auto static override final abstract volatile +syn keyword dStorageClass __gshared __vector +syn keyword dStorageClass synchronized shared immutable const lazy +syn keyword dIdentifier _arguments _argptr __vptr __monitor +syn keyword dIdentifier _ctor _dtor __argTypes __overloadset +syn keyword dScopeIdentifier contained exit success failure +syn keyword dTraitsIdentifier contained isAbstractClass isArithmetic +syn keyword dTraitsIdentifier contained isAssociativeArray isFinalClass +syn keyword dTraitsIdentifier contained isPOD isNested isFloating +syn keyword dTraitsIdentifier contained isIntegral isScalar isStaticArray +syn keyword dTraitsIdentifier contained isUnsigned isVirtualFunction +syn keyword dTraitsIdentifier contained isVirtualMethod isAbstractFunction +syn keyword dTraitsIdentifier contained isFinalFunction isStaticFunction +syn keyword dTraitsIdentifier contained isOverrideFunction isTemplate +syn keyword dTraitsIdentifier contained isRef isOut isLazy hasMember +syn keyword dTraitsIdentifier contained identifier getAliasThis +syn keyword dTraitsIdentifier contained getAttributes getFunctionAttributes getMember +syn keyword dTraitsIdentifier contained getOverloads getPointerBitmap getProtection +syn keyword dTraitsIdentifier contained getVirtualFunctions getVirtualIndex +syn keyword dTraitsIdentifier contained getVirtualMethods getUnitTests +syn keyword dTraitsIdentifier contained parent classInstanceSize allMembers +syn keyword dTraitsIdentifier contained derivedMembers isSame compiles +syn keyword dPragmaIdentifier contained inline lib mangle msg startaddress GNU_asm +syn keyword dExternIdentifier contained C C++ D Windows Pascal System Objective-C +syn keyword dAttribute contained safe trusted system +syn keyword dAttribute contained property disable nogc +syn keyword dVersionIdentifier contained DigitalMars GNU LDC SDC D_NET +syn keyword dVersionIdentifier contained X86 X86_64 ARM PPC PPC64 IA64 MIPS MIPS64 Alpha +syn keyword dVersionIdentifier contained SPARC SPARC64 S390 S390X HPPA HPPA64 SH SH64 +syn keyword dVersionIdentifier contained linux Posix OSX FreeBSD Windows Win32 Win64 +syn keyword dVersionIdentifier contained OpenBSD BSD Solaris AIX SkyOS SysV3 SysV4 Hurd +syn keyword dVersionIdentifier contained Cygwin MinGW +syn keyword dVersionIdentifier contained LittleEndian BigEndian +syn keyword dVersionIdentifier contained D_InlineAsm_X86 D_InlineAsm_X86_64 +syn keyword dVersionIdentifier contained D_Version2 D_Coverage D_Ddoc D_LP64 D_PIC +syn keyword dVersionIdentifier contained unittest assert none all + +syn cluster dComment contains=dNestedComment,dBlockComment,dLineComment + +" Highlight the sharpbang +syn match dSharpBang "\%^#!.*" display + +" Attributes/annotations +syn match dAnnotation "@[_$a-zA-Z][_$a-zA-Z0-9_]*\>" contains=dAttribute + +" Version Identifiers +syn match dVersion "\" +syn match dVersion "\"he=s+7 contains=dVersionIdentifier + +" Scope Identifiers +syn match dStatement "\" +syn match dStatement "\"he=s+5 contains=dScopeIdentifier + +" Traits Statement +syn match dStatement "\<__traits\>" +syn match dStatement "\<__traits\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+8 contains=dTraitsIdentifier + +" Pragma Statement +syn match dPragma "\" +syn match dPragma "\"he=s+6 contains=dPragmaIdentifier + +" Necessary to highlight C++ in extern modifiers. +syn match dExternIdentifier "C\(++\)\?" contained + +" Extern Identifiers +syn match dExternal "\" +syn match dExtern "\"he=s+6 contains=dExternIdentifier + +" Make import a region to prevent highlighting keywords +syn region dImport start="\+ contained transparent contains=dNestAngleString,@Spell +syn region dNestCurlyString start=+{+ end=+}+ contained transparent contains=dNestCurlyString,@Spell + +" Nesting delimited strings +" +syn region dParenString matchgroup=dParenString start=+q"(+ end=+)"+ contains=dNestParenString,@Spell +syn region dBrackString matchgroup=dBrackString start=+q"\[+ end=+\]"+ contains=dNestBrackString,@Spell +syn region dAngleString matchgroup=dAngleString start=+q"<+ end=+>"+ contains=dNestAngleString,@Spell +syn region dCurlyString matchgroup=dCurlyString start=+q"{+ end=+}"+ contains=dNestCurlyString,@Spell + +hi link dParenString dNestString +hi link dBrackString dNestString +hi link dAngleString dNestString +hi link dCurlyString dNestString + +syn cluster dTokens add=dString,dRawString,dHexString,dDelimString,dNestString + +" Token strings +" +syn region dNestTokenString start=+{+ end=+}+ contained contains=dNestTokenString,@dTokens,dFormat +syn region dTokenString matchgroup=dTokenStringBrack transparent start=+q{+ end=+}+ contains=dNestTokenString,@dTokens,dFormat + +syn cluster dTokens add=dTokenString + +" Numbers +" +syn case ignore + +syn match dDec display "\<\d[0-9_]*\(u\=l\=\|l\=u\=\)\>" + +" Hex number +syn match dHex display "\<0x[0-9a-f_]\+\(u\=l\=\|l\=u\=\)\>" + +syn match dOctal display "\<0[0-7_]\+\(u\=l\=\|l\=u\=\)\>" +" flag an octal number with wrong digits +syn match dOctalError display "\<0[0-7_]*[89][0-9_]*" + +" binary numbers +syn match dBinary display "\<0b[01_]\+\(u\=l\=\|l\=u\=\)\>" + +"floating point without the dot +syn match dFloat display "\<\d[0-9_]*\(fi\=\|l\=i\)\>" +"floating point number, with dot, optional exponent +syn match dFloat display "\<\d[0-9_]*\.[0-9_]*\(e[-+]\=[0-9_]\+\)\=[fl]\=i\=" +"floating point number, starting with a dot, optional exponent +syn match dFloat display "\(\.[0-9_]\+\)\(e[-+]\=[0-9_]\+\)\=[fl]\=i\=\>" +"floating point number, without dot, with exponent +"syn match dFloat display "\<\d\+e[-+]\=\d\+[fl]\=\>" +syn match dFloat display "\<\d[0-9_]*e[-+]\=[0-9_]\+[fl]\=\>" + +"floating point without the dot +syn match dHexFloat display "\<0x[0-9a-f_]\+\(fi\=\|l\=i\)\>" +"floating point number, with dot, optional exponent +syn match dHexFloat display "\<0x[0-9a-f_]\+\.[0-9a-f_]*\(p[-+]\=[0-9_]\+\)\=[fl]\=i\=" +"floating point number, without dot, with exponent +syn match dHexFloat display "\<0x[0-9a-f_]\+p[-+]\=[0-9_]\+[fl]\=i\=\>" + +syn cluster dTokens add=dDec,dHex,dOctal,dOctalError,dBinary,dFloat,dHexFloat + +syn case match + +" Pragma (preprocessor) support +" TODO: Highlight following Integer and optional Filespec. +syn region dPragma start="#\s*\(line\>\)" skip="\\$" end="$" + +" Block +" +syn region dBlock start="{" end="}" transparent fold + + +" The default highlighting. +" +hi def link dBinary Number +hi def link dDec Number +hi def link dHex Number +hi def link dOctal Number +hi def link dFloat Float +hi def link dHexFloat Float +hi def link dDebug Debug +hi def link dBranch Conditional +hi def link dConditional Conditional +hi def link dLabel Label +hi def link dUserLabel Label +hi def link dRepeat Repeat +hi def link dExceptions Exception +hi def link dAssert Statement +hi def link dStatement Statement +hi def link dScopeDecl dStorageClass +hi def link dStorageClass StorageClass +hi def link dBoolean Boolean +hi def link dUnicode Special +hi def link dTokenStringBrack String +hi def link dHereString String +hi def link dNestString String +hi def link dDelimString String +hi def link dRawString String +hi def link dString String +hi def link dHexString String +hi def link dCharacter Character +hi def link dEscSequence SpecialChar +hi def link dFormat SpecialChar +hi def link dSpecialCharError Error +hi def link dOctalError Error +hi def link dOperator Operator +hi def link dOpOverload Identifier +hi def link dConstant Constant +hi def link dTypedef Typedef +hi def link dEnum Structure +hi def link dStructure Structure +hi def link dTodo Todo +hi def link dType Type +hi def link dLineComment Comment +hi def link dBlockComment Comment +hi def link dNestedComment Comment +hi def link dCommentError Error +hi def link dNestedCommentError Error +hi def link dCommentStartError Error +hi def link dExternal Include +hi def link dAnnotation PreProc +hi def link dSharpBang PreProc +hi def link dAttribute StorageClass +hi def link dIdentifier Identifier +hi def link dVersion dStatement +hi def link dVersionIdentifier Identifier +hi def link dScopeIdentifier Identifier +hi def link dTraitsIdentifier Identifier +hi def link dPragma PreProc +hi def link dPragmaIdentifier Identifier +hi def link dExtern dExternal +hi def link dExternIdentifier Identifier + +" Marks contents of the asm statment body as special + +syn match dAsmStatement "\" +syn region dAsmBody start="asm[\n]*\s*{"hs=e+1 end="}"he=e-1 contains=dAsmStatement,dAsmOpCode,@dComment,DUserLabel + +hi def link dAsmBody dUnicode +hi def link dAsmStatement dStatement +hi def link dAsmOpCode Identifier + +syn keyword dAsmOpCode contained aaa aad aam aas +syn keyword dAsmOpCode contained add addpd addps addsd +syn keyword dAsmOpCode contained and andnpd andnps andpd +syn keyword dAsmOpCode contained arpl bound bsf bsr +syn keyword dAsmOpCode contained bt btc btr bts +syn keyword dAsmOpCode contained call bswap andps addss +syn keyword dAsmOpCode contained cbw cdq clc cld +syn keyword dAsmOpCode contained cli clts cmc cmova +syn keyword dAsmOpCode contained cmovb cmovbe cmovc cmove +syn keyword dAsmOpCode contained cmovge cmovl cmovle cmovna +syn keyword dAsmOpCode contained cmovnae cmovg cmovae clflush +syn keyword dAsmOpCode contained cmovnb cmovnbe cmovnc cmovne +syn keyword dAsmOpCode contained cmovnge cmovnl cmovnle cmovno +syn keyword dAsmOpCode contained cmovns cmovnz cmovo cmovp +syn keyword dAsmOpCode contained cmovpo cmovs cmovz cmp +syn keyword dAsmOpCode contained cmppd cmovpe cmovnp cmovng +syn keyword dAsmOpCode contained cmpps cmps cmpsb cmpsd +syn keyword dAsmOpCode contained cmpsw cmpxch8b cmpxchg comisd +syn keyword dAsmOpCode contained cpuid cvtdq2pd cvtdq2ps cvtpd2dq +syn keyword dAsmOpCode contained cvtpd2ps cvtpi2pd cvtpi2ps cvtps2dq +syn keyword dAsmOpCode contained cvtps2pd cvtpd2pi comiss cmpss +syn keyword dAsmOpCode contained cvtps2pi cvtsd2si cvtsd2ss cvtsi2sd +syn keyword dAsmOpCode contained cvtss2sd cvtss2si cvttpd2dq cvttpd2pi +syn keyword dAsmOpCode contained cvttps2pi cvttsd2si cvttss2si cwd +syn keyword dAsmOpCode contained da daa das db +syn keyword dAsmOpCode contained dd cwde cvttps2dq cvtsi2ss +syn keyword dAsmOpCode contained de dec df di +syn keyword dAsmOpCode contained divpd divps divsd divss +syn keyword dAsmOpCode contained dq ds dt dw +syn keyword dAsmOpCode contained enter f2xm1 fabs fadd +syn keyword dAsmOpCode contained faddp emms dl div +syn keyword dAsmOpCode contained fbld fbstp fchs fclex +syn keyword dAsmOpCode contained fcmovbe fcmove fcmovnb fcmovnbe +syn keyword dAsmOpCode contained fcmovnu fcmovu fcom fcomi +syn keyword dAsmOpCode contained fcomp fcompp fcos fdecstp +syn keyword dAsmOpCode contained fdisi fcomip fcmovne fcmovb +syn keyword dAsmOpCode contained fdiv fdivp fdivr fdivrp +syn keyword dAsmOpCode contained ffree fiadd ficom ficomp +syn keyword dAsmOpCode contained fidivr fild fimul fincstp +syn keyword dAsmOpCode contained fist fistp fisub fisubr +syn keyword dAsmOpCode contained fld finit fidiv feni +syn keyword dAsmOpCode contained fld1 fldcw fldenv fldl2e +syn keyword dAsmOpCode contained fldlg2 fldln2 fldpi fldz +syn keyword dAsmOpCode contained fmulp fnclex fndisi fneni +syn keyword dAsmOpCode contained fnop fnsave fnstcw fnstenv +syn keyword dAsmOpCode contained fnstsw fninit fmul fldl2t +syn keyword dAsmOpCode contained fpatan fprem fprem1 fptan +syn keyword dAsmOpCode contained frstor fsave fscale fsetpm +syn keyword dAsmOpCode contained fsincos fsqrt fst fstcw +syn keyword dAsmOpCode contained fstp fstsw fsub fsubp +syn keyword dAsmOpCode contained fsubr fstenv fsin frndint +syn keyword dAsmOpCode contained fsubrp ftst fucom fucomi +syn keyword dAsmOpCode contained fucomp fucompp fwait fxam +syn keyword dAsmOpCode contained fxrstor fxsave fxtract fyl2x +syn keyword dAsmOpCode contained hlt idiv imul in +syn keyword dAsmOpCode contained inc fyl2xp1 fxch fucomip +syn keyword dAsmOpCode contained ins insb insd insw +syn keyword dAsmOpCode contained into invd invlpg iret +syn keyword dAsmOpCode contained ja jae jb jbe +syn keyword dAsmOpCode contained jcxz je jecxz jg +syn keyword dAsmOpCode contained jge jc iretd int +syn keyword dAsmOpCode contained jl jle jmp jna +syn keyword dAsmOpCode contained jnb jnbe jnc jne +syn keyword dAsmOpCode contained jnge jnl jnle jno +syn keyword dAsmOpCode contained jns jnz jo jp +syn keyword dAsmOpCode contained jpe jnp jng jnae +syn keyword dAsmOpCode contained jpo js jz lahf +syn keyword dAsmOpCode contained ldmxcsr lds lea leave +syn keyword dAsmOpCode contained lfence lfs lgdt lgs +syn keyword dAsmOpCode contained lldt lmsw lock lods +syn keyword dAsmOpCode contained lodsb lidt les lar +syn keyword dAsmOpCode contained lodsd lodsw loop loope +syn keyword dAsmOpCode contained loopnz loopz lsl lss +syn keyword dAsmOpCode contained maskmovdqu maskmovq maxpd maxps +syn keyword dAsmOpCode contained maxss mfence minpd minps +syn keyword dAsmOpCode contained minsd maxsd ltr loopne +syn keyword dAsmOpCode contained minss mov movapd movaps +syn keyword dAsmOpCode contained movdq2q movdqa movdqu movhlps +syn keyword dAsmOpCode contained movhps movlhps movlpd movlps +syn keyword dAsmOpCode contained movmskps movntdq movnti movntpd +syn keyword dAsmOpCode contained movntps movmskpd movhpd movd +syn keyword dAsmOpCode contained movntq movq movq2dq movs +syn keyword dAsmOpCode contained movsd movss movsw movsx +syn keyword dAsmOpCode contained movups movzx mul mulpd +syn keyword dAsmOpCode contained mulsd mulss neg nop +syn keyword dAsmOpCode contained not mulps movupd movsb +syn keyword dAsmOpCode contained or orpd orps out +syn keyword dAsmOpCode contained outsb outsd outsw packssdw +syn keyword dAsmOpCode contained packuswb paddb paddd paddq +syn keyword dAsmOpCode contained paddsw paddusb paddusw paddw +syn keyword dAsmOpCode contained pand paddsb packsswb outs +syn keyword dAsmOpCode contained pandn pavgb pavgw pcmpeqb +syn keyword dAsmOpCode contained pcmpeqw pcmpgtb pcmpgtd pcmpgtw +syn keyword dAsmOpCode contained pinsrw pmaddwd pmaxsw pmaxub +syn keyword dAsmOpCode contained pminub pmovmskb pmulhuw pmulhw +syn keyword dAsmOpCode contained pmullw pminsw pextrw pcmpeqd +syn keyword dAsmOpCode contained pmuludq pop popa popad +syn keyword dAsmOpCode contained popfd por prefetchnta prefetcht0 +syn keyword dAsmOpCode contained prefetcht2 psadbw pshufd pshufhw +syn keyword dAsmOpCode contained pshufw pslld pslldq psllq +syn keyword dAsmOpCode contained psllw pshuflw prefetcht1 popf +syn keyword dAsmOpCode contained psrad psraw psrld psrldq +syn keyword dAsmOpCode contained psrlw psubb psubd psubq +syn keyword dAsmOpCode contained psubsw psubusb psubusw psubw +syn keyword dAsmOpCode contained punpckhdq punpckhqdq punpckhwd punpcklbw +syn keyword dAsmOpCode contained punpckldq punpckhbw psubsb psrlq +syn keyword dAsmOpCode contained punpcklqdq punpcklwd push pusha +syn keyword dAsmOpCode contained pushf pushfd pxor rcl +syn keyword dAsmOpCode contained rcpss rcr rdmsr rdpmc +syn keyword dAsmOpCode contained rep repe repne repnz +syn keyword dAsmOpCode contained repz rdtsc rcpps pushad +syn keyword dAsmOpCode contained ret retf rol ror +syn keyword dAsmOpCode contained rsqrtps rsqrtss sahf sal +syn keyword dAsmOpCode contained sbb scas scasb scasd +syn keyword dAsmOpCode contained seta setae setb setbe +syn keyword dAsmOpCode contained setc scasw sar rsm +syn keyword dAsmOpCode contained sete setg setge setl +syn keyword dAsmOpCode contained setna setnae setnb setnbe +syn keyword dAsmOpCode contained setne setng setnge setnl +syn keyword dAsmOpCode contained setno setnp setns setnz +syn keyword dAsmOpCode contained seto setnle setnc setle +syn keyword dAsmOpCode contained setp setpe setpo sets +syn keyword dAsmOpCode contained sfence sgdt shl shld +syn keyword dAsmOpCode contained shrd shufpd shufps sidt +syn keyword dAsmOpCode contained smsw sqrtpd sqrtps sqrtsd +syn keyword dAsmOpCode contained sqrtss sldt shr setz +syn keyword dAsmOpCode contained stc std sti stmxcsr +syn keyword dAsmOpCode contained stosb stosd stosw str +syn keyword dAsmOpCode contained subpd subps subsd subss +syn keyword dAsmOpCode contained sysexit test ucomisd ucomiss +syn keyword dAsmOpCode contained ud2 sysenter sub stos +syn keyword dAsmOpCode contained unpckhpd unpckhps unpcklpd unpcklps +syn keyword dAsmOpCode contained verw wbinvd wrmsr xadd +syn keyword dAsmOpCode contained xchg xlatb xor xorpd +syn keyword dAsmOpCode contained xorps pfrcpit1 pfmin movddup +syn keyword dAsmOpCode contained addsubpd addsubps fisttp haddps +syn keyword dAsmOpCode contained hsubpd hsubps lddqu monitor +syn keyword dAsmOpCode contained haddpd xlat wait verr +syn keyword dAsmOpCode contained movshdup movsldup mwait pfcmpeq +syn keyword dAsmOpCode contained pavgusb pf2id pfacc pfadd +syn keyword dAsmOpCode contained pfcmpge pfcmpgt pfmax pfmul +syn keyword dAsmOpCode contained pfnacc pfpnacc pfrcp pfrcpit1 +syn keyword dAsmOpCode contained pfrsqit1 pfrsqrt pfsub pfsubr +syn keyword dAsmOpCode contained pmulhrw pswapd syscall sysret +syn keyword dAsmOpCode contained vpmuldq xgetbv cmpxchg8b cmpxchg16b +syn keyword dAsmOpCode contained pabsb pabsd pabsw palignr +syn keyword dAsmOpCode contained phaddd phaddsw phaddw phsubd +syn keyword dAsmOpCode contained phsubsw phsubw pmaddubsw pmulhrsw +syn keyword dAsmOpCode contained pshufb psignb psignd psignw +syn keyword dAsmOpCode contained popfq pushfq blendpd blendps +syn keyword dAsmOpCode contained blendvpd blendvps extractps insertps +syn keyword dAsmOpCode contained movntdqa mpsadbw packusdw pblendvb +syn keyword dAsmOpCode contained pblendw pcmpeqq pextrb pextrd +syn keyword dAsmOpCode contained pextrq phminposuw pinsrb pinsrd +syn keyword dAsmOpCode contained pinsrq pmaxsb pmaxsd pmaxud +syn keyword dAsmOpCode contained pmaxuw pminsb pminsd pminud +syn keyword dAsmOpCode contained pminuw pmulld ptest roundpd +syn keyword dAsmOpCode contained roundps roundsd roundss pmuldq +syn keyword dAsmOpCode contained pmovsxbd pmovsxdq pmovzxbq pmovzxdq +syn keyword dAsmOpCode contained pmovsxbq pmovsxwd pmovzxbq pmovzxwd +syn keyword dAsmOpCode contained pmovsxbw pmovsxwq pmovzxbw pmovzxwq +syn keyword dAsmOpCode contained crc32 pcmpestri pcmpestrm pcmpgtq +syn keyword dAsmOpCode contained pcmpistri pcmpistrm popcnt pi2fd +syn keyword dAsmOpCode contained adc + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/dart.vim b/.config/vim/syntax/dart.vim new file mode 100644 index 0000000..d1c2bf2 --- /dev/null +++ b/.config/vim/syntax/dart.vim @@ -0,0 +1,90 @@ +" Vim syntax file +" +" Language: Dart +" Maintainer: Eugene 'pr3d4t0r' Ciurana +" Source: https://github.com/pr3d4t0r/dart-vim-syntax +" Last Update: 2019 Oct 19 +" +" License: Vim is Charityware. dart.vim syntax is Charityware. +" (c) Copyright 2019 by Eugene Ciurana / pr3d4t0r. Licensed +" under the standard VIM LICENSE - Vim command :help uganda.txt +" for details. +" +" Questions, comments: +" https://ciurana.eu/pgp, https://keybase.io/pr3d4t0r +" +" vim: set fileencoding=utf-8: + + +" Quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + + +syn keyword dartCommentTodo contained TODO FIXME XXX TBD +syn match dartLineComment "//.*" contains=dartTodo,@Spell +syn match dartCommentSkip "^[ \t]*\*\($\|[ \t]\+\)" +syn region dartComment start="/\*" end="\*/" contains=@Spell,dartTodo +syn keyword dartReserved assert async await class const export extends external final hide import implements interface library mixin on show super sync yield +syn match dartNumber "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>" + + +syn keyword dartBoolean false true +syn keyword dartBranch break continue +syn keyword dartConditional if else switch +syn keyword dartException catch finally rethrow throw try +syn keyword dartIdentifier abstract covariant deferred dynamic factory Function operator part static this typedef var +syn keyword dartLabel case default +syn keyword dartNull null +syn keyword dartOperator is new +syn keyword dartRepeat for do in while +syn keyword dartStatement return with +syn keyword dartType bool double enum int String StringBuffer void +syn keyword dartTodo contained TODO FIXME XXX + + +syn match dartEscape contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)" +syn match dartSpecialError contained "\\." +syn match dartStrInterpol contained "\${[\x, _]*\}" + +syn region dartDQString start=+"+ end=+"+ end=+$+ contains=dartEscape,dartStrInterpol,dartSpecialError,@Spell +syn region dartSQString start=+'+ end=+'+ end=+$+ contains=dartEscape,dartStrInterpol,dartSpecialError,@Spell + +syn match dartBraces "[{}\[\]]" +syn match dartParens "[()]" + + +syn sync fromstart +syn sync maxlines=100 + + +hi def link dartBoolean Boolean +hi def link dartBranch Conditional +hi def link dartComment Comment +hi def link dartConditional Conditional +hi def link dartDQString String +hi def link dartEscape SpecialChar +hi def link dartException Exception +hi def link dartIdentifier Identifier +hi def link dartLabel Label +hi def link dartLineComment Comment +hi def link dartNull Keyword +hi def link dartOperator Operator +hi def link dartRepeat Repeat +hi def link dartReserved Keyword +hi def link dartSQString String +hi def link dartSpecialError Error +hi def link dartStatement Statement +hi def link dartStrInterpol Special +hi def link dartTodo Todo +hi def link dartType Type + + +let b:current_syntax = "dart" +let &cpo = s:cpo_save +unlet s:cpo_save + diff --git a/.config/vim/syntax/datascript.vim b/.config/vim/syntax/datascript.vim new file mode 100644 index 0000000..7b686a1 --- /dev/null +++ b/.config/vim/syntax/datascript.vim @@ -0,0 +1,102 @@ +" Vim syntax file +" Language: DataScript +" Maintainer: Dominique Pelle +" Last Change: 2015 Jul 30 +" +" DataScript is a formal language for modelling binary datatypes, +" bitstreams or file formats. For more information, see: +" +" http://dstools.sourceforge.net/DataScriptLanguageOverview.html + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +syn keyword dsPackage import package +syn keyword dsType bit bool string +syn keyword dsType int int8 int16 int32 int64 +syn keyword dsType uint8 uint16 uint32 uint64 +syn keyword dsType varint16 varint32 varint64 +syn keyword dsType varuint16 varuint32 varuint64 +syn keyword dsType leint16 leint32 leint64 +syn keyword dsType leuint16 leuint32 leuint64 +syn keyword dsEndian little big +syn keyword dsAlign align +syn keyword dsLabel case default +syn keyword dsConditional if condition +syn keyword dsBoolean true false +syn keyword dsCompound union choice on enum bitmask subtype explicit +syn keyword dsKeyword function return +syn keyword dsOperator sizeof bitsizeof lengthof is sum forall in +syn keyword dsStorageClass const +syn keyword dsTodo contained TODO FIXME XXX +syn keyword dsSql sql sql_table sql_database sql_pragma sql_index +syn keyword dsSql sql_integer sql_metadata sql_key sql_virtual +syn keyword dsSql using reference_key foreign_key to + +" dsCommentGroup allows adding matches for special things in comments. +syn cluster dsCommentGroup contains=dsTodo + +syn match dsOffset display "^\s*[a-zA-Z_:\.][a-zA-Z0-9_:\.]*\s*:" + +syn match dsNumber display "\<\d\+\>" +syn match dsNumberHex display "\<0[xX]\x\+\>" +syn match dsNumberBin display "\<[01]\+[bB]\>" contains=dsBinaryB +syn match dsBinaryB display contained "[bB]\>" +syn match dsOctal display "\<0\o\+\>" contains=dsOctalZero +syn match dsOctalZero display contained "\<0" + +syn match dsOctalError display "\<0\o*[89]\d*\>" + +syn match dsCommentError display "\*/" +syn match dsCommentStartError display "/\*"me=e-1 contained + +syn region dsCommentL + \ start="//" skip="\\$" end="$" keepend + \ contains=@dsCommentGroup,@Spell +syn region dsComment + \ matchgroup=dsCommentStart start="/\*" end="\*/" + \ contains=@dsCommentGroup,dsCommentStartError,@Spell extend + +syn region dsString + \ start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell + +syn sync ccomment dsComment + +" Define the default highlighting. +hi def link dsType Type +hi def link dsEndian StorageClass +hi def link dsStorageClass StorageClass +hi def link dsAlign Label +hi def link dsLabel Label +hi def link dsOffset Label +hi def link dsSql PreProc +hi def link dsCompound Structure +hi def link dsConditional Conditional +hi def link dsBoolean Boolean +hi def link dsKeyword Statement +hi def link dsString String +hi def link dsNumber Number +hi def link dsNumberBin Number +hi def link dsBinaryB Special +hi def link dsOctal Number +hi def link dsOctalZero Special +hi def link dsOctalError Error +hi def link dsNumberHex Number +hi def link dsTodo Todo +hi def link dsOperator Operator +hi def link dsPackage Include +hi def link dsCommentError Error +hi def link dsCommentStartError Error +hi def link dsCommentStart dsComment +hi def link dsCommentL dsComment +hi def link cCommentL dsComment +hi def link dsComment Comment + +let b:current_syntax = "datascript" + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/.config/vim/syntax/dax.vim b/.config/vim/syntax/dax.vim new file mode 100644 index 0000000..12e54ee --- /dev/null +++ b/.config/vim/syntax/dax.vim @@ -0,0 +1,151 @@ +" Vim syntax file +" Language: Data Analysis Expressions (DAX) +" Maintainer: Anarion Dunedain +" Last Change: +" 2025 Mar 28 First version + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif +let s:keepcpo = &cpo +set cpo&vim + +" There are DAX functions with dot in the name (like VARX.S) +setlocal iskeyword+=. +" DAX is case insensitive +syn case ignore + +" DAX statements +syn keyword daxStatement DEFINE EVALUATE MEASURE RETURN VAR +syn match daxStatement "ORDER\ BY" +syn match daxStatement "START\ AT" + +" TODO +syn keyword daxTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained + +" DAX functions +syn keyword daxFunction + \ ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH + \ ADDCOLUMNS ADDMISSINGITEMS ALL ALLCROSSFILTERED ALLEXCEPT ALLNOBLANKROW ALLSELECTED + \ AMORDEGRC AMORLINC AND APPROXIMATEDISTINCTCOUNT ASIN ASINH ATAN + \ ATANH AVERAGE AVERAGEA AVERAGEX BETA.DIST BETA.INV BITAND + \ BITLSHIFT BITOR BITRSHIFT BITXOR BLANK CALCULATE CALCULATETABLE + \ CALENDAR CALENDARAUTO CEILING CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT + \ CLOSINGBALANCEMONTH CLOSINGBALANCEQUARTER CLOSINGBALANCEYEAR COALESCE COLUMNSTATISTICS COMBIN COMBINA + \ COMBINEVALUES CONCATENATE CONCATENATEX CONFIDENCE.NORM CONFIDENCE.T CONTAINSROW + \ CONTAINSSTRING CONTAINSSTRINGEXACT CONVERT COS COSH COT COTH + \ COUNT COUNTA COUNTAX COUNTBLANK COUNTROWS COUNTX COUPDAYBS + \ COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD CROSSFILTER CROSSJOIN + \ CUMIPMT CUMPRINC CURRENCY CURRENTGROUP CUSTOMDATA DATATABLE DATE + \ DATEADD DATEDIFF DATESBETWEEN DATESINPERIOD DATESMTD DATESQTD DATESYTD + \ DATEVALUE DAY DB DDB DEGREES DETAILROWS DISC + \ DISTINCT column DISTINCT table DISTINCTCOUNT DISTINCTCOUNTNOBLANK DIVIDE DOLLARDE DOLLARFR + \ DURATION EARLIER EARLIEST EDATE EFFECT ENDOFMONTH ENDOFQUARTER + \ ENDOFYEAR EOMONTH ERROR EVALUATEANDLOG EVEN EXACT EXCEPT + \ EXP EXPON.DIST FACT FALSE FILTER FILTERS FIND + \ FIRST FIRSTDATE FIXED FLOOR FORMAT FV GCD + \ GENERATE GENERATEALL GENERATESERIES GEOMEAN GEOMEANX GROUPBY HASONEFILTER + \ HASONEVALUE HOUR IF IF.EAGER IFERROR IGNORE INDEX + \ INFO.ALTERNATEOFDEFINITIONS INFO.ANNOTATIONS INFO.ATTRIBUTEHIERARCHIES INFO.ATTRIBUTEHIERARCHYSTORAGES INFO.CALCDEPENDENCY INFO.CALCULATIONGROUPS INFO.CALCULATIONITEMS + \ INFO.CATALOGS INFO.CHANGEDPROPERTIES INFO.COLUMNPARTITIONSTORAGES INFO.COLUMNPERMISSIONS INFO.COLUMNS INFO.COLUMNSTORAGES INFO.CSDLMETADATA + \ INFO.CULTURES INFO.DATACOVERAGEDEFINITIONS INFO.DATASOURCES INFO.DELTATABLEMETADATASTORAGES INFO.DEPENDENCIES INFO.DETAILROWSDEFINITIONS INFO.DICTIONARYSTORAGES + \ INFO.EXCLUDEDARTIFACTS INFO.EXPRESSIONS INFO.EXTENDEDPROPERTIES INFO.FORMATSTRINGDEFINITIONS INFO.FUNCTIONS INFO.GENERALSEGMENTMAPSEGMENTMETADATASTORAGES INFO.GROUPBYCOLUMNS + \ INFO.HIERARCHIES INFO.HIERARCHYSTORAGES INFO.KPIS INFO.LEVELS INFO.LINGUISTICMETADATA INFO.MEASURES INFO.MODEL + \ INFO.OBJECTTRANSLATIONS INFO.PARQUETFILESTORAGES INFO.PARTITIONS INFO.PARTITIONSTORAGES INFO.PERSPECTIVECOLUMNS INFO.PERSPECTIVEHIERARCHIES INFO.PERSPECTIVEMEASURES + \ INFO.PERSPECTIVES INFO.PERSPECTIVETABLES INFO.PROPERTIES INFO.QUERYGROUPS INFO.REFRESHPOLICIES INFO.RELATEDCOLUMNDETAILS INFO.RELATIONSHIPINDEXSTORAGES + \ INFO.RELATIONSHIPS INFO.RELATIONSHIPSTORAGES INFO.ROLEMEMBERSHIPS INFO.ROLES INFO.SEGMENTMAPSTORAGES INFO.SEGMENTSTORAGES INFO.STORAGEFILES + \ INFO.STORAGEFOLDERS INFO.STORAGETABLECOLUMNS INFO.STORAGETABLECOLUMNSEGMENTS INFO.STORAGETABLES INFO.TABLEPERMISSIONS INFO.TABLES INFO.TABLESTORAGES + \ INFO.VARIATIONS INFO.VIEW.COLUMNS INFO.VIEW.MEASURES INFO.VIEW.RELATIONSHIPS INFO.VIEW.TABLES INT INTERSECT + \ INTRATE IPMT ISAFTER ISBLANK ISCROSSFILTERED ISEMPTY ISERROR + \ ISEVEN ISFILTERED ISINSCOPE ISLOGICAL ISNONTEXT ISNUMBER ISO.CEILING + \ ISODD ISONORAFTER ISPMT ISSELECTEDMEASURE ISSUBTOTAL ISTEXT KEEPFILTERS + \ LAST LASTDATE LCM LEFT LEN LINEST LINESTX + \ LN LOG LOG10 LOOKUPVALUE LOWER MATCHBY MAX + \ MAXA MAXX MDURATION MEDIAN MEDIANX MID MIN + \ MINA MINUTE MINX MOD MONTH MOVINGAVERAGE MROUND + \ NATURALINNERJOIN NATURALLEFTOUTERJOIN NETWORKDAYS NEXT NEXTDAY NEXTMONTH NEXTQUARTER + \ NEXTYEAR NOMINAL NONVISUAL NORM.DIST NORM.INV NORM.S.DIST NORM.S.INV + \ NOT NOW NPER ODD ODDFPRICE ODDFYIELD ODDLPRICE + \ ODDLYIELD OFFSET OPENINGBALANCEMONTH OPENINGBALANCEQUARTER OPENINGBALANCEYEAR OR ORDERBY + \ PARALLELPERIOD PARTITIONBY PATH PATHCONTAINS PATHITEM PATHITEMREVERSE PATHLENGTH + \ PDURATION PERCENTILE.EXC PERCENTILE.INC PERCENTILEX.EXC PERCENTILEX.INC PERMUT PI + \ PMT POISSON.DIST POWER PPMT PREVIOUS PREVIOUSDAY PREVIOUSMONTH + \ PREVIOUSQUARTER PREVIOUSYEAR PRICE PRICEDISC PRICEMAT PRODUCT PRODUCTX + \ PV QUARTER QUOTIENT RADIANS RAND RANDBETWEEN RANGE + \ RANK RANK.EQ RANKX RATE RECEIVED RELATED RELATEDTABLE + \ REMOVEFILTERS REPLACE REPT RIGHT ROLLUP ROLLUPADDISSUBTOTAL ROLLUPGROUP + \ ROLLUPISSUBTOTAL ROUND ROUNDDOWN ROUNDUP ROW ROWNUMBER RRI + \ RUNNINGSUM SAMEPERIODLASTYEAR SAMPLE SEARCH SECOND SELECTCOLUMNS SELECTEDMEASURE + \ SELECTEDMEASUREFORMATSTRING SELECTEDMEASURENAME SELECTEDVALUE SIGN SIN SINH SLN + \ SQRT SQRTPI STARTOFMONTH STARTOFQUARTER STARTOFYEAR STDEV.P STDEV.S + \ STDEVX.P STDEVX.S SUBSTITUTE SUBSTITUTEWITHINDEX SUM SUMMARIZE SUMMARIZECOLUMNS + \ SUMX SWITCH SYD T.DIST T.DIST.2T T.DIST.RT T.INV + \ T.INV.2t TAN TANH TBILLEQ TBILLPRICE TBILLYIELD TIME + \ TIMEVALUE TOCSV TODAY TOJSON TOPN TOTALMTD TOTALQTD + \ TOTALYTD TREATAS TRIM TRUE TRUNC Table Constructor UNICHAR + \ UNICODE UNION UPPER USERCULTURE USERELATIONSHIP USERNAME USEROBJECTID + \ USERPRINCIPALNAME UTCNOW UTCTODAY VALUE VALUES VAR.P VAR.S + \ VARX.P VARX.S VDB WEEKDAY WEEKNUM WINDOW XIRR + \ XNPV YEAR YEARFRAC YIELD YIELDDISC YIELDMAT + +" CONTAINS is a vim syntax keyword and can't be a defined keyword +syn match daxFunction "CONTAINS" + +" Numbers +" integer number, or floating point number without a dot. +syn match daxNumber "\<\d\+\>" +" floating point number, with dot +syn match daxNumber "\<\d\+\.\d*\>" + +syn match daxFloat "[-+]\=\<\d\+[eE][\-+]\=\d\+" +syn match daxFloat "[-+]\=\<\d\+\.\d*\([eE][\-+]\=\d\+\)\=" +syn match daxFloat "[-+]\=\<\.\d\+\([eE][\-+]\=\d\+\)\=" + +" String and Character constants +syn region daxString start=+"+ end=+"+ + +" DAX Table and Column names +syn region daxTable start=+'+ms=s+1 end=+'+me=e-1 +syn region daxColumn matchgroup=daxParen start=/\[/ end=/\]/ + +" Operators +syn match daxOperator "+" +syn match daxOperator "-" +syn match daxOperator "*" +syn match daxOperator "/" +syn match daxOperator "\^" +syn match daxOperator "\ NOT(\s\|\\)" +syn match daxOperator "\ IN\ " +syn match daxOperator "&&" +syn match daxOperator "&" +syn match daxOperator "\\|\\|" +syn match daxOperator "[<>]=\=" +syn match daxOperator "<>" +syn match daxOperator "=" +syn match daxOperator ">" +syn match daxOperator "<" + +" Comments +syn region daxComment start="\(^\|\s\)\//" end="$" contains=daxTodo +syn region daxComment start="/\*" end="\*/" contains=daxTodo + +" Define highlighting +hi def link daxComment Comment +hi def link daxNumber Number +hi def link daxFloat Float +hi def link daxString String +hi def link daxStatement Keyword +hi def link daxOperator Operator +hi def link daxFunction Function +hi def link daxTable Number +hi def link daxColumn Statement +hi def link daxParen Delimiter +hi def link daxTodo Todo + +let b:current_syntax = "dax" + +let &cpo = s:keepcpo +unlet! s:keepcpo + +" vim: ts=8 diff --git a/.config/vim/syntax/dcd.vim b/.config/vim/syntax/dcd.vim new file mode 100644 index 0000000..058d272 --- /dev/null +++ b/.config/vim/syntax/dcd.vim @@ -0,0 +1,51 @@ +" Vim syntax file +" Language: WildPackets EtherPeek Decoder (.dcd) file +" Maintainer: Christopher Shinn +" Last Change: 2003 Apr 25 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Keywords +syn keyword dcdFunction DCod TRTS TNXT CRLF +syn match dcdFunction display "\(STR\)\#" +syn keyword dcdLabel LABL +syn region dcdLabel start="[A-Z]" end=";" +syn keyword dcdConditional CEQU CNEQ CGTE CLTE CBIT CLSE +syn keyword dcdConditional LSTS LSTE LSTZ +syn keyword dcdConditional TYPE TTST TEQU TNEQ TGTE TLTE TBIT TLSE TSUB SKIP +syn keyword dcdConditional MARK WHOA +syn keyword dcdConditional SEQU SNEQ SGTE SLTE SBIT +syn match dcdConditional display "\(CST\)\#" "\(TST\)\#" +syn keyword dcdDisplay HBIT DBIT BBIT +syn keyword dcdDisplay HBYT DBYT BBYT +syn keyword dcdDisplay HWRD DWRD BWRD +syn keyword dcdDisplay HLNG DLNG BLNG +syn keyword dcdDisplay D64B +syn match dcdDisplay display "\(HEX\)\#" "\(CHR\)\#" "\(EBC\)\#" +syn keyword dcdDisplay HGLB DGLB BGLB +syn keyword dcdDisplay DUMP +syn keyword dcdStatement IPLG IPV6 ATLG AT03 AT01 ETHR TRNG PRTO PORT +syn keyword dcdStatement TIME OSTP PSTR CSTR NBNM DMPE FTPL CKSM FCSC +syn keyword dcdStatement GBIT GBYT GWRD GLNG +syn keyword dcdStatement MOVE ANDG ORRG NOTG ADDG SUBG MULG DIVG MODG INCR DECR +syn keyword dcdSpecial PRV1 PRV2 PRV3 PRV4 PRV5 PRV6 PRV7 PRV8 + +" Comment +syn region dcdComment start="\*" end="\;" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link dcdFunction Identifier +hi def link dcdLabel Constant +hi def link dcdConditional Conditional +hi def link dcdDisplay Type +hi def link dcdStatement Statement +hi def link dcdSpecial Special +hi def link dcdComment Comment + + +let b:current_syntax = "dcd" diff --git a/.config/vim/syntax/dcl.vim b/.config/vim/syntax/dcl.vim new file mode 100644 index 0000000..1987ebb --- /dev/null +++ b/.config/vim/syntax/dcl.vim @@ -0,0 +1,153 @@ +" Vim syntax file +" Language: DCL (Digital Command Language - vms) +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Charles E. Campbell +" Last Change: Mar 26, 2019 +" Version: 13 +" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_DCL + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +if (v:version == 704 && has("patch-7.4.1142")) || v:version > 704 + syn iskeyword $,@,48-57,_ +else + setlocal iskeyword=$,@,48-57,_ +endif + +syn case ignore +syn keyword dclInstr accounting del[ete] gen[cat] mou[nt] run +syn keyword dclInstr all[ocate] dep[osit] gen[eral] ncp run[off] +syn keyword dclInstr ana[lyze] dia[gnose] gos[ub] ncs sca +syn keyword dclInstr app[end] dif[ferences] got[o] on sea[rch] +syn keyword dclInstr ass[ign] dir[ectory] hel[p] ope[n] set +syn keyword dclInstr att[ach] dis[able] ico[nv] pas[cal] sho[w] +syn keyword dclInstr aut[horize] dis[connect] if pas[sword] sor[t] +syn keyword dclInstr aut[ogen] dis[mount] ini[tialize] pat[ch] spa[wn] +syn keyword dclInstr bac[kup] dpm[l] inq[uire] pca sta[rt] +syn keyword dclInstr cal[l] dqs ins[tall] pho[ne] sto[p] +syn keyword dclInstr can[cel] dsr job pri[nt] sub[mit] +syn keyword dclInstr cc dst[graph] lat[cp] pro[duct] sub[routine] +syn keyword dclInstr clo[se] dtm lib[rary] psw[rap] swx[cr] +syn keyword dclInstr cms dum[p] lic[ense] pur[ge] syn[chronize] +syn keyword dclInstr con[nect] edi[t] lin[k] qde[lete] sys[gen] +syn keyword dclInstr con[tinue] ena[ble] lmc[p] qse[t] sys[man] +syn keyword dclInstr con[vert] end[subroutine] loc[ale] qsh[ow] tff +syn keyword dclInstr cop[y] eod log[in] rea[d] then +syn keyword dclInstr cre[ate] eoj log[out] rec[all] typ[e] +syn keyword dclInstr cxx exa[mine] lse[dit] rec[over] uil +syn keyword dclInstr cxx[l_help] exc[hange] mac[ro] ren[ame] unl[ock] +syn keyword dclInstr dea[llocate] exi[t] mai[l] rep[ly] ves[t] +syn keyword dclInstr dea[ssign] fdl mer[ge] req[uest] vie[w] +syn keyword dclInstr deb[ug] flo[wgraph] mes[sage] ret[urn] wai[t] +syn keyword dclInstr dec[k] fon[t] mms rms wri[te] +syn keyword dclInstr def[ine] for[tran] + +syn keyword dclLexical f$context f$edit f$getjpi f$message f$setprv +syn keyword dclLexical f$csid f$element f$getqui f$mode f$string +syn keyword dclLexical f$cvsi f$environment f$getsyi f$parse f$time +syn keyword dclLexical f$cvtime f$extract f$identifier f$pid f$trnlnm +syn keyword dclLexical f$cvui f$fao f$integer f$privilege f$type +syn keyword dclLexical f$device f$file_attributes f$length f$process f$user +syn keyword dclLexical f$directory f$getdvi f$locate f$search f$verify + +syn match dclMdfy "/\I\i*" nextgroup=dclMdfySet,dclMdfySetString +syn match dclMdfySet "=[^ \t"]*" contained +syn region dclMdfySet matchgroup=dclMdfyBrkt start="=\[" matchgroup=dclMdfyBrkt end="]" contains=dclMdfySep +syn region dclMdfySetString start='="' skip='""' end='"' contained +syn match dclMdfySep "[:,]" contained + +" Numbers +syn match dclNumber "\d\+" + +" Varname (mainly to prevent dclNumbers from being recognized when part of a dclVarname) +syn match dclVarname "\I\i*" + +" Filenames (devices, paths) +syn match dclDevice "\I\i*\(\$\I\i*\)\=:[^=]"me=e-1 nextgroup=dclDirPath,dclFilename +syn match dclDirPath "\[\(\I\i*\.\)*\I\i*\]" contains=dclDirSep nextgroup=dclFilename +syn match dclFilename "\I\i*\$\(\I\i*\)\=\.\(\I\i*\)*\(;\d\+\)\=" contains=dclDirSep +syn match dclFilename "\I\i*\.\(\I\i*\)\=\(;\d\+\)\=" contains=dclDirSep contained +syn match dclDirSep "[[\].;]" + +" Strings +syn region dclString start='"' skip='""' end='"' contains=@Spell + +" $ stuff and comments +syn cluster dclCommentGroup contains=dclStart,dclTodo,@Spell +syn match dclStart "^\$" skipwhite nextgroup=dclExe +syn match dclContinue "-$" +syn match dclComment "^\$!.*$" contains=@dclCommentGroup +syn match dclExe "\I\i*" contained +syn keyword dclTodo contained COMBAK DEBUG FIXME TODO XXX + +" Assignments and Operators +syn match dclAssign ":==\=" +syn match dclAssign "=" +syn match dclOper "--\|+\|\*\|/" +syn match dclLogOper "\.[a-zA-Z][a-zA-Z][a-zA-Z]\=\." contains=dclLogical,dclLogSep +syn keyword dclLogical contained and ge gts lt nes +syn keyword dclLogical contained eq ges le lts not +syn keyword dclLogical contained eqs gt les ne or +syn match dclLogSep "\." contained + +" @command procedures +syn match dclCmdProcStart "@" nextgroup=dclCmdProc +syn match dclCmdProc "\I\i*\(\.\I\i*\)\=" contained +syn match dclCmdProc "\I\i*:" contained nextgroup=dclCmdDirPath,dclCmdProc +syn match dclCmdDirPath "\[\(\I\i*\.\)*\I\i*\]" contained nextgroup=delCmdProc + +" labels +syn match dclGotoLabel "^\$\s*\I\i*:\s*$" contains=dclStart + +" parameters +syn match dclParam "'\I[a-zA-Z0-9_$]*'\=" + +" () matching (the clusters are commented out until a vim/vms comes out for v5.2+) +"syn cluster dclNextGroups contains=dclCmdDirPath,dclCmdProc,dclCmdProc,dclDirPath,dclFilename,dclFilename,dclMdfySet,dclMdfySetString,delCmdProc,dclExe,dclTodo +"syn region dclFuncList matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,@dclNextGroups +syn region dclFuncList matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,dclCmdDirPath,dclCmdProc,dclCmdProc,dclDirPath,dclFilename,dclFilename,dclMdfySet,dclMdfySetString,delCmdProc,dclExe,dclTodo +syn match dclError ")" + +" Define the default highlighting. +if !exists("skip_dcl_syntax_inits") + + hi def link dclLogOper dclError + hi def link dclLogical dclOper + hi def link dclLogSep dclSep + + hi def link dclAssign Operator + hi def link dclCmdProc Special + hi def link dclCmdProcStart Operator + hi def link dclComment Comment + hi def link dclContinue Statement + hi def link dclDevice Identifier + hi def link dclDirPath Identifier + hi def link dclDirPath Identifier + hi def link dclDirSep Delimiter + hi def link dclError Error + hi def link dclExe Statement + hi def link dclFilename NONE + hi def link dclGotoLabel Label + hi def link dclInstr Statement + hi def link dclLexical Function + hi def link dclMdfy Type + hi def link dclMdfyBrkt Delimiter + hi def link dclMdfySep Delimiter + hi def link dclMdfySet Type + hi def link dclMdfySetString String + hi def link dclNumber Number + hi def link dclOper Operator + hi def link dclParam Special + hi def link dclSep Delimiter + hi def link dclStart Delimiter + hi def link dclString String + hi def link dclTodo Todo + +endif + +let b:current_syntax = "dcl" + +" vim: ts=16 diff --git a/.config/vim/syntax/deb822sources.vim b/.config/vim/syntax/deb822sources.vim new file mode 100644 index 0000000..ec45605 --- /dev/null +++ b/.config/vim/syntax/deb822sources.vim @@ -0,0 +1,63 @@ +" Vim syntax file +" Language: Debian deb822-format source list file +" Maintainer: Debian Vim Maintainers +" Last Change: 2024 Jan 30 +" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/deb822sources.vim + +" Standard syntax initialization +if exists('b:current_syntax') + finish +endif + +" case insensitive +syn case ignore + +" A bunch of useful keywords +syn match deb822sourcesType /\<\(deb-src\|deb\)\ */ contained +syn match deb822sourcesFreeComponent /\<\(main\|universe\)\> */ contained +syn match deb822sourcesNonFreeComponent /\<\(contrib\|non-free-firmware\|non-free\|restricted\|multiverse\)\> */ contained + +" Comments are matched from the first character of a line to the end-of-line +syn region deb822sourcesComment start="^#" end="$" + +" Include Debian versioning information +runtime! syntax/shared/debversions.vim + +exe 'syn match deb822sourcesSupportedSuites contained + *\([[:alnum:]_./]*\)\<\('. join(g:debSharedSupportedVersions, '\|'). '\)\>\([-[:alnum:]_./]*\) *+' +exe 'syn match deb822sourcesUnsupportedSuites contained + *\([[:alnum:]_./]*\)\<\('. join(g:debSharedUnsupportedVersions, '\|'). '\)\>\([-[:alnum:]_./]*\) *+' + +unlet g:debSharedSupportedVersions +unlet g:debSharedUnsupportedVersions + +syn region deb822sourcesSuites start="\(^Suites: *\)\@<=" end="$" contains=deb822sourcesSupportedSuites,deb822sourcesUnsupportedSuites oneline + +syn keyword deb822sourcesForce contained force +syn keyword deb822sourcesYesNo contained yes no + +" Match uri's +syn match deb822sourcesUri '\(https\?://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^' <>"]\+' + +syn region deb822sourcesStrictField matchgroup=deb822sourcesEntryField start="^\%(Types\|URIs\|Suites\|Components\): *" end="$" contains=deb822sourcesType,deb822sourcesUri,deb822sourcesSupportedSuites,deb822sourcesUnsupportedSuites,deb822sourcesFreeComponent,deb822sourcesNonFreeComponent oneline +syn region deb822sourcesField matchgroup=deb822sourcesOptionField start="^\%(Signed-By\|Check-Valid-Until\|Valid-Until-Min\|Valid-Until-Max\|Date-Max-Future\|InRelease-Path\): *" end="$" oneline +syn region deb822sourcesField matchgroup=deb822sourcesMultiValueOptionField start="^\%(Architectures\|Languages\|Targets\)\%(-Add\|-Remove\)\?: *" end="$" oneline +syn region deb822sourcesStrictField matchgroup=deb822sourcesBooleanOptionField start="^\%(PDiffs\|Allow-Insecure\|Allow-Weak\|Allow-Downgrade-To-Insecure\|Trusted\|Check-Date\|Enabled\): *" end="$" contains=deb822sourcesYesNo oneline +syn region deb822sourcesStrictField matchgroup=deb822sourcesForceBooleanOptionField start="^\%(By-Hash\): *" end="$" contains=deb822sourcesForce,deb822sourcesYesNo oneline + +hi def link deb822sourcesField Default +hi def link deb822sourcesComment Comment +hi def link deb822sourcesEntryField Keyword +hi def link deb822sourcesOptionField Special +hi def link deb822sourcesMultiValueOptionField Special +hi def link deb822sourcesBooleanOptionField Special +hi def link deb822sourcesForceBooleanOptionField Special +hi def link deb822sourcesStrictField Error +hi def link deb822sourcesType Identifier +hi def link deb822sourcesFreeComponent Identifier +hi def link deb822sourcesNonFreeComponent Identifier +hi def link deb822sourcesForce Identifier +hi def link deb822sourcesYesNo Identifier +hi def link deb822sourcesUri Constant +hi def link deb822sourcesSupportedSuites Type +hi def link deb822sourcesUnsupportedSuites WarningMsg + +let b:current_syntax = 'deb822sources' diff --git a/.config/vim/syntax/debchangelog.vim b/.config/vim/syntax/debchangelog.vim new file mode 100644 index 0000000..da35a6a --- /dev/null +++ b/.config/vim/syntax/debchangelog.vim @@ -0,0 +1,62 @@ +" Vim syntax file +" Language: Debian changelog files +" Maintainer: Debian Vim Maintainers +" Former Maintainers: Gerfried Fuchs +" Wichert Akkerman +" Last Change: 2023 Oct 11 +" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debchangelog.vim + +" Standard syntax initialization +if exists('b:current_syntax') + finish +endif + +" Case doesn't matter for us +syn case ignore + +let s:urgency='urgency=\(low\|medium\|high\|emergency\|critical\)\( [^[:space:],][^,]*\)\=' +let s:binNMU='binary-only=yes' + +" Include Debian versioning information +runtime! syntax/shared/debversions.vim + +exe 'syn match debchangelogTarget contained "\%( \%('.join(g:debSharedSupportedVersions, '\|').'\)\>[-[:alnum:]]*\)\+"' +exe 'syn match debchangelogUnsupportedTarget contained "\%( \%('.join(g:debSharedUnsupportedVersions, '\|').'\)\>[-[:alnum:]]*\)\+"' + +unlet g:debSharedSupportedVersions +unlet g:debSharedUnsupportedVersions + +" Define some common expressions we can use later on +syn match debchangelogName contained "^[[:alnum:]][[:alnum:].+-]\+ " +exe 'syn match debchangelogFirstKV contained "; \('.s:urgency.'\|'.s:binNMU.'\)"' +exe 'syn match debchangelogOtherKV contained ", \('.s:urgency.'\|'.s:binNMU.'\)"' +syn match debchangelogUnreleased contained / UNRELEASED/ +syn match debchangelogVersion contained "(.\{-})" +syn match debchangelogCloses contained "closes:\_s*\(bug\)\=#\=\_s\=\d\+\(,\_s*\(bug\)\=#\=\_s\=\d\+\)*" +syn match debchangelogLP contained "\clp:\s\+#\d\+\(,\s*#\d\+\)*" +syn match debchangelogEmail contained "[_=[:alnum:].+-]\+@[[:alnum:]./\-]\+" +syn match debchangelogEmail contained "<.\{-}>" + +" Define the entries that make up the changelog +syn region debchangelogHeader start="^[^ ]" end="$" contains=debchangelogName,debchangelogFirstKV,debchangelogOtherKV,debchangelogTarget,debchangelogUnsupportedTarget,debchangelogUnreleased,debchangelogVersion,debchangelogBinNMU oneline +syn region debchangelogFooter start="^ [^ ]" end="$" contains=debchangelogEmail oneline +syn region debchangelogEntry start="^ " end="$" contains=debchangelogCloses,debchangelogLP oneline + +" Associate our matches and regions with pretty colours +hi def link debchangelogHeader Error +hi def link debchangelogFooter Identifier +hi def link debchangelogEntry Normal +hi def link debchangelogCloses Statement +hi def link debchangelogLP Statement +hi def link debchangelogFirstKV Identifier +hi def link debchangelogOtherKV Identifier +hi def link debchangelogName Comment +hi def link debchangelogVersion Identifier +hi def link debchangelogUnreleased WarningMsg +hi def link debchangelogEmail Special +hi def link debchangelogTarget Identifier +hi def link debchangelogUnsupportedTarget Identifier + +let b:current_syntax = 'debchangelog' + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/debcontrol.vim b/.config/vim/syntax/debcontrol.vim new file mode 100644 index 0000000..e98a6d3 --- /dev/null +++ b/.config/vim/syntax/debcontrol.vim @@ -0,0 +1,132 @@ +" Vim syntax file +" Language: Debian control files +" Maintainer: Debian Vim Maintainers +" Former Maintainers: Gerfried Fuchs +" Wichert Akkerman +" Last Change: 2025 Jul 05 +" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debcontrol.vim + +" Standard syntax initialization +if exists('b:current_syntax') + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Should match case except for the keys of each field +syn case match + +syn iskeyword @,48-57,- + +" Everything that is not explicitly matched by the rules below +syn match debcontrolElse "^.*$" + +" Common separators +syn match debControlComma ",[ \t]*" +syn match debControlSpace "[ \t]" + +runtime! syntax/shared/debarchitectures.vim + +" Define some common expressions we can use later on +syn keyword debcontrolArchitecture contained all any +exe 'syn keyword debcontrolArchitecture contained '. join(g:debArchitectureKernelAnyArch) +exe 'syn keyword debcontrolArchitecture contained '. join(g:debArchitectureAnyKernelArch) +exe 'syn keyword debcontrolArchitecture contained '. join(g:debArchitectureArchs) + +" Keep in sync with https://metadata.ftp-master.org/sections.822 +" curl -q https://metadata.ftp-master.debian.org/sections.822 2>/dev/null| grep-dctrl -n --not -FSection -sSection / - +let s:sections = [ + \ 'admin', 'cli-mono', 'comm', 'database', 'debian-installer', 'debug' + \, 'devel', 'doc', 'editors', 'education', 'electronics', 'embedded' + \, 'fonts', 'games', 'gnome', 'gnu-r', 'gnustep', 'golang', 'graphics' + \, 'hamradio', 'haskell', 'httpd', 'interpreters', 'introspection' + \, 'java', 'javascript', 'kde', 'kernel', 'libdevel', 'libs', 'lisp' + \, 'localization', 'mail', 'math', 'metapackages', 'misc', 'net', 'news' + \, 'ocaml', 'oldlibs', 'otherosfs', 'perl', 'php', 'python', 'raku' + \, 'ruby', 'rust', 'science', 'shells', 'sound', 'tasks', 'tex', 'text' + \, 'utils', 'vcs', 'video', 'web', 'x11', 'xfce', 'zope' + \ ] + +syn keyword debcontrolMultiArch contained no foreign allowed same +syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+" +syn keyword debcontrolPriority contained extra important optional required standard +exe 'syn match debcontrolSection contained "\%(\%(contrib\|non-free\|non-US/main\|non-US/contrib\|non-US/non-free\|restricted\|universe\|multiverse\)/\)\=\<\%('.join(s:sections, '\|').'\)\>"' +syn keyword debcontrolPackageType contained udeb deb +syn match debcontrolVariable contained "\${.\{-}}" +syn keyword debcontrolDmUpload contained yes +syn keyword debcontrolYesNo contained yes no +syn match debcontrolR3 contained "\<\%(no\|binary-targets\|[[:graph:]]\+/[[:graph:]]\+\%( \+[[:graph:]]\+/[[:graph:]]\+\)*\)\>" + +unlet s:sections + +" A URL (using the domain name definitions from RFC 1034 and 1738), right now +" only enforce protocol and some sanity on the server/path part; +syn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$" +syn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$" +syn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$" +syn match debcontrolVcsGit contained "\v%(git|https?)://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?%(\s+-b\s+[^ ~^:?*[\\]+)?$" + +" An email address +syn match debcontrolEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+" +syn match debcontrolEmail "<.\{-}>" + +" #-Comments +syn match debcontrolComment "^#.*$" contains=@Spell + +syn case ignore + +" Handle all fields from deb-src-control(5) + +" Catch-all for the legal fields +syn region debcontrolField matchgroup=debcontrolKey start="^\%(\%(XSBC-Original-\)\=Maintainer\|Standards-Version\|Bugs\|Origin\|X[SB]-Python-Version\|\%(XS-\)\=Vcs-Mtn\|\%(XS-\)\=Testsuite\%(-Triggers\)\=\|Build-Profiles\|Tag\|Subarchitecture\|Kernel-Version\|Installer-Menu-Item\): " end="$" contains=debcontrolVariable,debcontrolEmail oneline +syn region debcontrolMultiField matchgroup=debcontrolKey start="^\%(Build-\%(Conflicts\|Depends\)\%(-Arch\|-Indep\)\=\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Breaks\|Enhances\|Replaces\|Conflicts\|Provides\|Built-Using\|Static-Built-Using\|Uploaders\|X[SBC]\{0,3\}\%(Private-\)\=-[-a-zA-Z0-9]\+\): *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolEmail,debcontrolVariable,debcontrolComment +syn region debcontrolMultiFieldSpell matchgroup=debcontrolKey start="^Description: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell + +" Fields for which we do strict syntax checking +syn region debcontrolStrictField matchgroup=debcontrolKey start="^Architecture: *" end="$" contains=debcontrolArchitecture,debcontrolSpace oneline +syn region debcontrolStrictField matchgroup=debcontrolKey start="^Multi-Arch: *" end="$" contains=debcontrolMultiArch oneline +syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Package\|Source\): *" end="$" contains=debcontrolName oneline +syn region debcontrolStrictField matchgroup=debcontrolKey start="^Priority: *" end="$" contains=debcontrolPriority oneline +syn region debcontrolStrictField matchgroup=debcontrolKey start="^Section: *" end="$" contains=debcontrolSection oneline +syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XC-\)\=Package-Type: *" end="$" contains=debcontrolPackageType oneline +syn region debcontrolStrictField matchgroup=debcontrolKey start="^Homepage: *" end="$" contains=debcontrolHTTPUrl oneline keepend +syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\): *" end="$" contains=debcontrolHTTPUrl oneline keepend +syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Svn: *" end="$" contains=debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend +syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Cvs: *" end="$" contains=debcontrolVcsCvs oneline keepend +syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Git: *" end="$" contains=debcontrolVcsGit oneline keepend +syn region debcontrolStrictField matchgroup=debcontrolKey start="^Rules-Requires-Root: *" end="$" contains=debcontrolR3 oneline +syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Build-\)\=Essential: *" end="$" contains=debcontrolYesNo oneline + +syn region debcontrolStrictField matchgroup=debcontrolDeprecatedKey start="^\%(XS-\)\=DM-Upload-Allowed: *" end="$" contains=debcontrolDmUpload oneline + +" Associate our matches and regions with pretty colours +hi def link debcontrolKey Keyword +hi def link debcontrolField Normal +hi def link debcontrolStrictField Error +hi def link debcontrolDeprecatedKey Error +hi def link debcontrolMultiField Normal +hi def link debcontrolArchitecture Normal +hi def link debcontrolMultiArch Normal +hi def link debcontrolName Normal +hi def link debcontrolPriority Normal +hi def link debcontrolSection Normal +hi def link debcontrolPackageType Normal +hi def link debcontrolVariable Identifier +hi def link debcontrolEmail Identifier +hi def link debcontrolVcsSvn Identifier +hi def link debcontrolVcsCvs Identifier +hi def link debcontrolVcsGit Identifier +hi def link debcontrolHTTPUrl Identifier +hi def link debcontrolDmUpload Identifier +hi def link debcontrolYesNo Identifier +hi def link debcontrolR3 Identifier +hi def link debcontrolComment Comment +hi def link debcontrolElse Special + +let b:current_syntax = 'debcontrol' + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/debcopyright.vim b/.config/vim/syntax/debcopyright.vim new file mode 100644 index 0000000..cb9e896 --- /dev/null +++ b/.config/vim/syntax/debcopyright.vim @@ -0,0 +1,33 @@ +" Vim syntax file +" Language: Debian copyright file +" Maintainer: Debian Vim Maintainers +" Last Change: 2024 Jul 28 +" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debcopyright.vim + +" Standard syntax initialization +if exists('b:current_syntax') + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn case match + +syn match debcopyrightUrl "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$" +syn match debcopyrightKey "^\%(Format\|Upstream-Name\|Upstream-Contact\|Disclaimer\|Source\|Comment\|Files\|Copyright\|License\|Files-\%(Excluded\|Included\)\%(-[-a-zA-Z0-9]\+\)\=\): *" +syn match debcopyrightEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+" +syn match debcopyrightEmail "<.\{-}>" +syn match debcopyrightComment "^#.*$" contains=@Spell + +hi def link debcopyrightUrl Identifier +hi def link debcopyrightKey Keyword +hi def link debcopyrightEmail Identifier +hi def link debcopyrightComment Comment + +let b:current_syntax = 'debcopyright' + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/debsources.vim b/.config/vim/syntax/debsources.vim new file mode 100644 index 0000000..76b52cf --- /dev/null +++ b/.config/vim/syntax/debsources.vim @@ -0,0 +1,46 @@ +" Vim syntax file +" Language: Debian sources.list +" Maintainer: Debian Vim Maintainers +" Former Maintainer: Matthijs Mohlmann +" Last Change: 2024 Jan 30 +" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debsources.vim + +" Standard syntax initialization +if exists('b:current_syntax') + finish +endif + +" case sensitive +syn case match + +" A bunch of useful keywords +syn match debsourcesType /\<\(deb-src\|deb\)\>/ contained +syn match debsourcesFreeComponent /\<\(main\|universe\)\>/ contained +syn match debsourcesNonFreeComponent /\<\(contrib\|non-free-firmware\|non-free\|restricted\|multiverse\)\>/ contained + +" Match comments +syn match debsourcesComment /#.*/ contains=@Spell + +" Include Debian versioning information +runtime! syntax/shared/debversions.vim + +exe 'syn match debsourcesDistrKeyword +\([[:alnum:]_./]*\)\<\('. join(g:debSharedSupportedVersions, '\|'). '\)\>\([-[:alnum:]_./]*\)+' +exe 'syn match debsourcesUnsupportedDistrKeyword +\([[:alnum:]_./]*\)\<\('. join(g:debSharedUnsupportedVersions, '\|') .'\)\>\([-[:alnum:]_./]*\)+' + +unlet g:debSharedSupportedVersions +unlet g:debSharedUnsupportedVersions + +" Match uri's +syn match debsourcesUri '\(https\?://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^' <>"]\+' +syn region debsourcesLine start="^" end="$" contains=debsourcesType,debsourcesFreeComponent,debsourcesNonFreeComponent,debsourcesComment,debsourcesUri,debsourcesDistrKeyword,debsourcesUnsupportedDistrKeyword oneline + +" Associate our matches and regions with pretty colours +hi def link debsourcesType Statement +hi def link debsourcesFreeComponent Statement +hi def link debsourcesNonFreeComponent Statement +hi def link debsourcesComment Comment +hi def link debsourcesUri Constant +hi def link debsourcesDistrKeyword Type +hi def link debsourcesUnsupportedDistrKeyword WarningMsg + +let b:current_syntax = 'debsources' diff --git a/.config/vim/syntax/def.vim b/.config/vim/syntax/def.vim new file mode 100644 index 0000000..a17714c --- /dev/null +++ b/.config/vim/syntax/def.vim @@ -0,0 +1,44 @@ +" Vim syntax file +" Language: Microsoft Module-Definition (.def) File +" Orig Author: Rob Brady +" Maintainer: Wu Yongwei +" Last Change: $Date: 2007/10/02 13:51:24 $ +" $Revision: 1.2 $ + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +syn match defComment ";.*" + +syn keyword defKeyword LIBRARY STUB EXETYPE DESCRIPTION CODE WINDOWS DOS +syn keyword defKeyword RESIDENTNAME PRIVATE EXPORTS IMPORTS SEGMENTS +syn keyword defKeyword HEAPSIZE DATA +syn keyword defStorage LOADONCALL MOVEABLE DISCARDABLE SINGLE +syn keyword defStorage FIXED PRELOAD + +syn match defOrdinal "\s\+@\d\+" + +syn region defString start=+'+ end=+'+ + +syn match defNumber "\d+" +syn match defNumber "0x\x\+" + + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link defComment Comment +hi def link defKeyword Keyword +hi def link defStorage StorageClass +hi def link defString String +hi def link defNumber Number +hi def link defOrdinal Operator + + +let b:current_syntax = "def" + +" vim: ts=8 diff --git a/.config/vim/syntax/denyhosts.vim b/.config/vim/syntax/denyhosts.vim new file mode 100644 index 0000000..f32faab --- /dev/null +++ b/.config/vim/syntax/denyhosts.vim @@ -0,0 +1,289 @@ +" Vim syntax file +" Language: denyhosts configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2007-06-25 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword denyhostsTodo + \ contained + \ TODO + \ FIXME + \ XXX + \ NOTE + +syn case ignore + +syn match denyhostsComment + \ contained + \ display + \ '#.*' + \ contains=denyhostsTodo, + \ @Spell + +syn match denyhostsBegin + \ display + \ '^' + \ nextgroup=@denyhostsSetting, + \ denyhostsComment + \ skipwhite + +syn cluster denyhostsSetting + \ contains=denyhostsStringSetting, + \ denyhostsBooleanSetting, + \ denyhostsPathSetting, + \ denyhostsNumericSetting, + \ denyhostsTimespecSetting, + \ denyhostsFormatSetting, + \ denyhostsRegexSetting + +syn keyword denyhostsStringSetting + \ contained + \ ADMIN_EMAIL + \ SMTP_HOST + \ SMTP_USERNAME + \ SMTP_PASSWORD + \ SMTP_FROM + \ SMTP_SUBJECT + \ BLOCK_SERVICE + \ nextgroup=denyhostsStringDelimiter + \ skipwhite + +syn keyword denyhostsBooleanSetting + \ contained + \ SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS + \ HOSTNAME_LOOKUP + \ SYSLOG_REPORT + \ RESET_ON_SUCCESS + \ SYNC_UPLOAD + \ SYNC_DOWNLOAD + \ ALLOWED_HOSTS_HOSTNAME_LOOKUP + \ nextgroup=denyhostsBooleanDelimiter + \ skipwhite + +syn keyword denyhostsPathSetting + \ contained + \ DAEMON_LOG + \ PLUGIN_DENY + \ PLUGIN_PURGE + \ SECURE_LOG + \ LOCK_FILE + \ HOSTS_DENY + \ WORK_DIR + \ nextgroup=denyhostsPathDelimiter + \ skipwhite + +syn keyword denyhostsNumericSetting + \ contained + \ SYNC_DOWNLOAD_THRESHOLD + \ SMTP_PORT + \ PURGE_THRESHOLD + \ DENY_THRESHOLD_INVALID + \ DENY_THRESHOLD_VALID + \ DENY_THRESHOLD_ROOT + \ DENY_THRESHOLD_RESTRICTED + \ nextgroup=denyhostsNumericDelimiter + \ skipwhite + +syn keyword denyhostsTimespecSetting + \ contained + \ DAEMON_SLEEP + \ DAEMON_PURGE + \ AGE_RESET_INVALID + \ AGE_RESET_VALID + \ AGE_RESET_ROOT + \ AGE_RESET_RESTRICTED + \ SYNC_INTERVAL + \ SYNC_DOWNLOAD_RESILIENCY + \ PURGE_DENY + \ nextgroup=denyhostsTimespecDelimiter + \ skipwhite + +syn keyword denyhostsFormatSetting + \ contained + \ DAEMON_LOG_TIME_FORMAT + \ DAEMON_LOG_MESSAGE_FORMAT + \ SMTP_DATE_FORMAT + \ nextgroup=denyhostsFormatDelimiter + \ skipwhite + +syn keyword denyhostsRegexSetting + \ contained + \ SSHD_FORMAT_REGEX + \ FAILED_ENTRY_REGEX + \ FAILED_ENTRY_REGEX2 + \ FAILED_ENTRY_REGEX3 + \ FAILED_ENTRY_REGEX4 + \ FAILED_ENTRY_REGEX5 + \ FAILED_ENTRY_REGEX6 + \ FAILED_ENTRY_REGEX7 + \ USERDEF_FAILED_ENTRY_REGEX + \ SUCCESSFUL_ENTRY_REGEX + \ nextgroup=denyhostsRegexDelimiter + \ skipwhite + +syn keyword denyhostURLSetting + \ contained + \ SYNC_SERVER + \ nextgroup=denyhostsURLDelimiter + \ skipwhite + +syn match denyhostsStringDelimiter + \ contained + \ display + \ '[:=]' + \ nextgroup=denyhostsString + \ skipwhite + +syn match denyhostsBooleanDelimiter + \ contained + \ display + \ '[:=]' + \ nextgroup=@denyhostsBoolean + \ skipwhite + +syn match denyhostsPathDelimiter + \ contained + \ display + \ '[:=]' + \ nextgroup=denyhostsPath + \ skipwhite + +syn match denyhostsNumericDelimiter + \ contained + \ display + \ '[:=]' + \ nextgroup=denyhostsNumber + \ skipwhite + +syn match denyhostsTimespecDelimiter + \ contained + \ display + \ '[:=]' + \ nextgroup=denyhostsTimespec + \ skipwhite + +syn match denyhostsFormatDelimiter + \ contained + \ display + \ '[:=]' + \ nextgroup=denyhostsFormat + \ skipwhite + +syn match denyhostsRegexDelimiter + \ contained + \ display + \ '[:=]' + \ nextgroup=denyhostsRegex + \ skipwhite + +syn match denyhostsURLDelimiter + \ contained + \ display + \ '[:=]' + \ nextgroup=denyhostsURL + \ skipwhite + +syn match denyhostsString + \ contained + \ display + \ '.\+' + +syn cluster denyhostsBoolean + \ contains=denyhostsBooleanTrue, + \ denyhostsBooleanFalse + +syn match denyhostsBooleanFalse + \ contained + \ display + \ '.\+' + +syn match denyhostsBooleanTrue + \ contained + \ display + \ '\s*\%(1\|t\%(rue\)\=\|y\%(es\)\=\)\>\s*$' + +syn match denyhostsPath + \ contained + \ display + \ '.\+' + +syn match denyhostsNumber + \ contained + \ display + \ '\d\+\>' + +syn match denyhostsTimespec + \ contained + \ display + \ '\d\+[mhdwy]\>' + +syn match denyhostsFormat + \ contained + \ display + \ '.\+' + \ contains=denyhostsFormattingExpandos + +syn match denyhostsFormattingExpandos + \ contained + \ display + \ '%.' + +syn match denyhostsRegex + \ contained + \ display + \ '.\+' + +" TODO: Perhaps come up with a better regex here? There should really be a +" library for these kinds of generic regexes, that is, URLs, mail addresses, … +syn match denyhostsURL + \ contained + \ display + \ '.\+' + +hi def link denyhostsTodo Todo +hi def link denyhostsComment Comment +hi def link denyhostsSetting Keyword +hi def link denyhostsStringSetting denyhostsSetting +hi def link denyhostsBooleanSetting denyhostsSetting +hi def link denyhostsPathSetting denyhostsSetting +hi def link denyhostsNumericSetting denyhostsSetting +hi def link denyhostsTimespecSetting denyhostsSetting +hi def link denyhostsFormatSetting denyhostsSetting +hi def link denyhostsRegexSetting denyhostsSetting +hi def link denyhostURLSetting denyhostsSetting +hi def link denyhostsDelimiter Normal +hi def link denyhostsStringDelimiter denyhostsDelimiter +hi def link denyhostsBooleanDelimiter denyhostsDelimiter +hi def link denyhostsPathDelimiter denyhostsDelimiter +hi def link denyhostsNumericDelimiter denyhostsDelimiter +hi def link denyhostsTimespecDelimiter denyhostsDelimiter +hi def link denyhostsFormatDelimiter denyhostsDelimiter +hi def link denyhostsRegexDelimiter denyhostsDelimiter +hi def link denyhostsURLDelimiter denyhostsDelimiter +hi def link denyhostsString String +if exists('g:syntax_booleans_simple') || exists('b:syntax_booleans_simple') + hi def link denyhostsBoolean Boolean + hi def link denyhostsBooleanFalse denyhostsBoolean + hi def link denyhostsBooleanTrue denyhostsBoolean +else + hi def denyhostsBooleanTrue term=bold ctermfg=Green guifg=Green + hi def denyhostsBooleanFalse ctermfg=Red guifg=Red +endif +hi def link denyhostsPath String +hi def link denyhostsNumber Number +hi def link denyhostsTimespec Number +hi def link denyhostsFormat String +hi def link denyhostsFormattingExpandos Special +hi def link denyhostsRegex String +hi def link denyhostsURL String + +let b:current_syntax = "denyhosts" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/dep3patch.vim b/.config/vim/syntax/dep3patch.vim new file mode 100644 index 0000000..c00bddf --- /dev/null +++ b/.config/vim/syntax/dep3patch.vim @@ -0,0 +1,57 @@ +" Vim syntax file +" Language: Debian DEP3 Patch headers +" Maintainer: Gabriel Filion +" Last Change: 2023 Jan 16 +" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/dep3patch.vim +" +" Specification of the DEP3 patch header format is available at: +" https://dep-team.pages.debian.net/deps/dep3/ + +" Standard syntax initialization +if exists('b:current_syntax') + finish +endif + +runtime! syntax/diff.vim +unlet! b:current_syntax + +let s:cpo_save = &cpo +set cpo&vim + +syn region dep3patchHeaders start="\%^" end="^\%(---\)\@=" contains=dep3patchKey,dep3patchMultiField + +syn case ignore + +syn region dep3patchMultiField matchgroup=dep3patchKey start="^\%(Description\|Subject\)\ze: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contained contains=@Spell +syn region dep3patchMultiField matchgroup=dep3patchKey start="^Origin\ze: *" end="$" contained contains=dep3patchHTTPUrl,dep3patchCommitID,dep3patchOriginCategory oneline keepend +syn region dep3patchMultiField matchgroup=dep3patchKey start="^Bug\%(-[[:graph:]]\+\)\?\ze: *" end="$" contained contains=dep3patchHTTPUrl oneline keepend +syn region dep3patchMultiField matchgroup=dep3patchKey start="^Forwarded\ze: *" end="$" contained contains=dep3patchHTTPUrl,dep3patchForwardedShort oneline keepend +syn region dep3patchMultiField matchgroup=dep3patchKey start="^\%(Author\|From\)\ze: *" end="$" contained contains=dep3patchEmail oneline keepend +syn region dep3patchMultiField matchgroup=dep3patchKey start="^\%(Reviewed-by\|Acked-by\)\ze: *" end="$" contained contains=dep3patchEmail oneline keepend +syn region dep3patchMultiField matchgroup=dep3patchKey start="^Last-Update\ze: *" end="$" contained contains=dep3patchISODate oneline keepend +syn region dep3patchMultiField matchgroup=dep3patchKey start="^Applied-Upstream\ze: *" end="$" contained contains=dep3patchHTTPUrl,dep3patchCommitID oneline keepend + +syn match dep3patchHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$" +syn match dep3patchCommitID contained "commit:[[:alnum:]]\+" +syn match dep3patchOriginCategory contained "\%(upstream\|backport\|vendor\|other\), " +syn match dep3patchForwardedShort contained "\%(yes\|no\|not-needed\), " +syn match dep3patchEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+" +syn match dep3patchEmail "<.\{-}>" +syn match dep3patchISODate "[[:digit:]]\{4}-[[:digit:]]\{2}-[[:digit:]]\{2}" + +" Associate our matches and regions with pretty colours +hi def link dep3patchKey Keyword +hi def link dep3patchOriginCategory Keyword +hi def link dep3patchForwardedShort Keyword +hi def link dep3patchMultiField Normal +hi def link dep3patchHTTPUrl Identifier +hi def link dep3patchCommitID Identifier +hi def link dep3patchEmail Identifier +hi def link dep3patchISODate Identifier + +let b:current_syntax = 'dep3patch' + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/desc.vim b/.config/vim/syntax/desc.vim new file mode 100644 index 0000000..84b9cd0 --- /dev/null +++ b/.config/vim/syntax/desc.vim @@ -0,0 +1,88 @@ +" Vim syntax file +" Language: T2 / ROCK Linux .desc +" Maintainer: René Rebe , Piotr Esden-Tempski +" Last Change: 2006 Aug 14 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" syntax definitions + +setl iskeyword+=- +syn keyword descFlag DIETLIBC KAFFE JAIL NOPARALLEL FPIC-QUIRK LIBTOOL-WUIRK NO-LIBTOOL-FIX AUTOMAKE-QUIRK NO-AS-NEEDED NO-SSP KERNEL INIT LIBC CC CXX F77 KCC contained +syn keyword descLicense Unknown GPL LGPL FDL MIT BSD OpenSource Free-to-use Commercial contained + +" tags +syn match descTag /^\[\(COPY\)\]/ +syn match descTag /^\[\(I\|TITLE\)\]/ +syn match descTag /^\[\(T\|TEXT\)\]/ contained +syn match descTag /^\[\(U\|URL\)\]/ +syn match descTag /^\[\(A\|AUTHOR\)\]/ +syn match descTag /^\[\(M\|MAINTAINER\)\]/ +syn match descTag /^\[\(C\|CATEGORY\)\]/ contained +syn match descTag /^\[\(F\|FLAG\)\]/ contained +syn match descTag /^\[\(E\|DEP\|DEPENDENCY\)\]/ +syn match descTag /^\[\(R\|ARCH\|ARCHITECTURE\)\]/ +syn match descTag /^\[\(L\|LICENSE\)\]/ contained +syn match descTag /^\[\(S\|STATUS\)\]/ +syn match descTag /^\[\(O\|CONF\)\]/ +syn match descTag /^\[\(V\|VER\|VERSION\)\]/ +syn match descTag /^\[\(P\|PRI\|PRIORITY\)\]/ nextgroup=descInstall skipwhite +syn match descTag /^\[\(D\|DOWN\|DOWNLOAD\)\]/ nextgroup=descSum skipwhite + +" misc +syn match descUrl /\w\+:\/\/\S\+/ +syn match descCategory /\w\+\/\w\+/ contained +syn match descEmail /<[\.A-Za-z0-9]\+@[\.A-Za-z0-9]\+>/ + +" priority tag +syn match descInstallX /X/ contained +syn match descInstallO /O/ contained +syn match descInstall /[OX]/ contained contains=descInstallX,descInstallO nextgroup=descStage skipwhite +syn match descDash /-/ contained +syn match descDigit /\d/ contained +syn match descStage /[\-0][\-1][\-2][\-3][\-4][\-5][\-6][\-7][\-8][\-9]/ contained contains=descDash,descDigit nextgroup=descCompilePriority skipwhite +syn match descCompilePriority /\d\{3}\.\d\{3}/ contained + +" download tag +syn match descSum /\d\+/ contained nextgroup=descTarball skipwhite +syn match descTarball /\S\+/ contained nextgroup=descUrl skipwhite + + +" tag regions +syn region descText start=/^\[\(T\|TEXT\)\]/ end=/$/ contains=descTag,descUrl,descEmail + +syn region descTagRegion start=/^\[\(C\|CATEGORY\)\]/ end=/$/ contains=descTag,descCategory + +syn region descTagRegion start=/^\[\(F\|FLAG\)\]/ end=/$/ contains=descTag,descFlag + +syn region descTagRegion start=/^\[\(L\|LICENSE\)\]/ end=/$/ contains=descTag,descLicense + +" Only when an item doesn't have highlighting yet + +hi def link descFlag Identifier +hi def link descLicense Identifier +hi def link descCategory Identifier + +hi def link descTag Type +hi def link descUrl Underlined +hi def link descEmail Underlined + +" priority tag colors +hi def link descInstallX Boolean +hi def link descInstallO Type +hi def link descDash Operator +hi def link descDigit Number +hi def link descCompilePriority Number + +" download tag colors +hi def link descSum Number +hi def link descTarball Underlined + +" tag region colors +hi def link descText Comment + + +let b:current_syntax = "desc" diff --git a/.config/vim/syntax/desktop.vim b/.config/vim/syntax/desktop.vim new file mode 100644 index 0000000..461ba85 --- /dev/null +++ b/.config/vim/syntax/desktop.vim @@ -0,0 +1,267 @@ +" Vim syntax file +" Language: XDG desktop entry +" Filenames: *.desktop, *.directory +" Maintainer: Eisuke Kawashima ( e.kawaschima+vim AT gmail.com ) +" Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) +" Last Change: 2022 Sep 22 +" Version Info: desktop.vim 1.5 +" References: +" - https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.5.html (2020-04-27) +" - https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-0.11.html (2006-02-07) + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim +syn case match + +" Variable {{{1 +" This syntax file can be used to all *nix configuration files similar to dos +" ini format (eg. .xawtv, .radio, kde rc files) - this is default mode. +" By default strict following of freedesktop.org standard is enforced. +" To highlight nonstandard extensions that does not begin with X-, set +" let g:desktop_enable_nonstd = v:true +" Note that this may cause wrong highlight. +" To highlight KDE-reserved features, set +" let g:desktop_enable_kde = v:true +" g:desktop_enable_kde follows g:desktop_enable_nonstd if not supplied + +if exists("g:desktop_enable_nonstd") && g:desktop_enable_nonstd + let s:desktop_enable_nonstd = v:true +else + let s:desktop_enable_nonstd = v:false +endif + +if exists("g:desktop_enable_kde") && g:desktop_enable_kde || s:desktop_enable_nonstd + let s:desktop_enable_kde = v:true +else + let s:desktop_enable_kde = v:false +endif + +" Comment {{{1 +syn match dtComment /^#.*$/ + +" Error {{{1 +syn match dtError /\%(^\s.*\|\s\+$\)/ + +" Group Header {{{1 +" ASCII printable characters except for brackets [ (0x5B) and ] (0x5D) +syn match dtGroup /^\[[\x20-\x5A\x5C\x5E-\x7E]\+\]$/ + +" Entries {{{1 +syn match dtDelim /=/ contained +" lang_territory.codeset@modifier +syn match dtLocaleSuffix + \ /\[\%(C\|POSIX\|[a-z]\{2,4}\%(_[A-Z0-9]\{2,3}\)\?\)\%(\.[A-Za-z0-9_-]\+\)\?\%(@[A-Za-z]\+\)\?\]\ze\s*=/ + \ contained + +" Boolean Value {{{2 +syn match dtBoolean + \ /^\%(DBusActivatable\|Hidden\|NoDisplay\|PrefersNonDefaultGPU\|SingleMainWindow\|StartupNotify\|Terminal\)\s*=\s*\%(true\|false\)/ + \ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent +syn keyword dtBooleanKey + \ DBusActivatable Hidden NoDisplay PrefersNonDefaultGPU SingleMainWindow StartupNotify Terminal + \ contained nextgroup=dtDelim + +if s:desktop_enable_kde + syn match dtBoolean + \ /^ReadOnly\s*=\s*\%(true\|false\)/ + \ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent + syn keyword dtBooleanKey + \ ReadOnly + \ contained nextgroup=dtDelim +endif +syn keyword dtBooleanValue true false contained + +" Numeric Value {{{2 +" icon theme +syn match dtNumeric /^\%(MaxSize\|MinSize\|Size\|Threshold\)\s*=\s*\d\+/ contains=dtNumericKey,dtDelim,dtNumericDecimal +syn keyword dtNumericKey + \ MaxSize MinSize Size Threshold + \ contained nextgroup=dtDelim + +if s:desktop_enable_kde + syn match dtNumeric /^InitialPreference\s*=\s*\d\+/ contains=dtNumericKey,dtDelim,dtNumericDecimal + syn keyword dtNumericKey + \ InitialPreference + \ contained nextgroup=dtDelim +endif + +syn match dtNumericDecimal /\<\d\+$/ contained + +" String Value {{{2 +syn match dtString + \ /^\%(Actions\|Implements\|MimeType\|NotShowIn\|OnlyShowIn\|Path\|StartupWMClass\|URL\)\s*=.*\S/ + \ contains=dtStringKey,dtDelim transparent +syn keyword dtStringKey + \ Actions Implements MimeType NotShowIn OnlyShowIn Path StartupWMClass URL Version + \ contained nextgroup=dtDelim + +" icon theme +syn match dtString + \ /^\%(Context\|Directories\|Example\|Inherits\)\s*=.*\S/ + \ contains=dtStringKey,dtDelim transparent +syn keyword dtStringKey + \ Context Directories Example Inherits + \ contained nextgroup=dtDelim + +if s:desktop_enable_kde + syn match dtString + \ /^\%(Dev\|DocPath\|FSType\|MountPoint\|ServiceTypes\)\s*=.*\S/ + \ contains=dtStringKey,dtDelim transparent + syn keyword dtStringKey + \ Dev DocPath FSType MountPoint ServiceTypes + \ contained nextgroup=dtDelim +endif + +" Categories {{{3 +" https://specifications.freedesktop.org/menu-spec/menu-spec-1.0.html#category-registry +syn match dtCategories /^Categories\s*=.\+\S/ contains=dtCategoriesKey,dtDelim,dtCategoriesValue transparent +syn keyword dtCategoriesKey + \ Categories + \ contained nextgroup=dtDelim + +" Main Categories +syn keyword dtCategoriesValue + \ Audio AudioVideo Development Education Game Graphics Network Office + \ Settings System Utility Video + \ contained + +" Additional Categories +syn keyword dtCategoriesValue + \ BoardGame Chat Clock Geoscience Presentation 2DGraphics 3DGraphics + \ Accessibility ActionGame AdventureGame Amusement ArcadeGame Archiving + \ Art ArtificialIntelligence Astronomy AudioVideoEditing Biology + \ BlocksGame BoardGame Building Calculator Calendar CardGame Chart Chat + \ Chemistry Clock Compression ComputerScience ConsoleOnly Construction + \ ContactManagement Core DataVisualization Database Debugger + \ DesktopSettings Dialup Dictionary DiscBurning Documentation Economy + \ Electricity Electronics Email Emulator Engineering FileManager + \ FileTools FileTransfer Filesystem Finance FlowChart GNOME GTK + \ GUIDesigner Geography Geology Geoscience HamRadio HardwareSettings + \ History IDE IRCClient ImageProcessing InstantMessaging Java KDE + \ KidsGame Languages Literature LogicGame Math MedicalSoftware Midi + \ Mixer Monitor Motif Music News NumericalAnalysis OCR P2P PDA + \ PackageManager ParallelComputing Photography Physics Player + \ Presentation Printing Profiling ProjectManagement Publishing Qt + \ RasterGraphics Recorder RemoteAccess RevisionControl Robotics + \ RolePlaying Scanning Science Security Sequencer Simulation Sports + \ SportsGame Spreadsheet StrategyGame TV Telephony TelephonyTools + \ TerminalEmulator TextEditor TextTools Translation Tuner VectorGraphics + \ VideoConference Viewer WebBrowser WebDevelopment WordProcessor + \ contained + +" Reserved Category +syn keyword dtCategoriesValue + \ Applet Screensaver Shell TrayIcon + \ contained + +" Exec/TryExec {{{3 +syn match dtExec /^\%(Exec\|TryExec\)\s*=.\+\S/ contains=dtExecKey,dtDelim,dtExecParam transparent +syn keyword dtExecKey + \ Exec TryExec + \ contained nextgroup=dtDelim +" code for file(s), URL(s), etc +syn match dtExecParam /\s\zs%[fFuUick]\ze\%(\W\|$\)/ contained + +" Type {{{3 +syn match dtType /^Type\s*=\s*\S\+/ contains=dtTypeKey,dtDelim,dtTypeValue transparent +syn keyword dtTypeKey + \ Type + \ contained nextgroup=dtDelim +syn keyword dtTypeValue + \ Application Directory Link + \ contained + +if s:desktop_enable_kde + syn keyword dtTypeValue + \ FSDevice Service ServiceType + \ contained +endif + + +" Version {{{3 +syn match dtVersion /^Version\s*=\s*\S\+/ contains=dtVersionKey,dtDelim,dtVersionValue transparent +syn keyword dtVersionKey + \ Version + \ contained nextgroup=dtDelim +syn match dtVersionValue /[0-9]\+\%(\.[0-9]\+\)\{1,2}$/ contained + +" Localestring Value {{{2 +syn match dtLocalestring + \ /^\%(Comment\|GenericName\|Keywords\|Name\)\%(\[.\{-}\]\)\?\s*=.*\S/ + \ contains=dtLocalestringKey,dtLocaleSuffix,dtDelim transparent +syn keyword dtLocalestringKey + \ Comment GenericName Keywords Name + \ contained nextgroup=dtLocaleSuffix,dtDelim skipwhite + +" Iconstring Value {{{2 +syn match dtIconstring + \ /^Icon\s*=.*\S/ + \ contains=dtIconstringKey,dtDelim transparent +syn keyword dtIconstringKey + \ Icon + \ contained nextgroup=dtDelim skipwhite + +if s:desktop_enable_kde + syn match dtIconstring + \ /^UnmountIcon\>\%(\[.\{-}\]\)\?\s*=.*\S/ + \ contains=dtIconstringKey,dtLocaleSuffix,dtDelim transparent + syn keyword dtIconstringKey + \ UnmountIcon + \ contained nextgroup=dtLocaleSuffix,dtDelim skipwhite +endif + +" X-Extension {{{2 +syn match dtXExtension /^X-[0-9A-Za-z-]*\%(\[.\{-}\]\)\?\s*=.*\S/ + \ contains=dtXExtensionKey,dtLocaleSuffix,dtDelim transparent +syn match dtXExtensionKey /^X-[0-9A-Za-z-]*/ contained nextgroup=dtLocaleSuffix,dtDelim + +" non standard {{{2 +if s:desktop_enable_nonstd + syn match dtNonStdLabel /^[0-9A-Za-z-]\+\%(\[.\{-}\]\)\?\s*=.*\S/ + \ contains=dtNonStdLabelKey,dtLocaleSuffix,dtDelim transparent + syn match dtNonStdLabelKey /^[0-9A-Za-z-]\+/ contained nextgroup=dtLocaleSuffix,dtDelim +endif + +" Highlight {{{1 +hi def link dtComment Comment +hi def link dtError Error + +hi def link dtGroup Special + +hi def link dtDelim Delimiter +hi def link dtLocaleSuffix Identifier + +hi def link dtBooleanKey Type +hi def link dtBooleanValue Boolean + +hi def link dtNumericKey Type +hi def link dtNumericDecimal Number + +hi def link dtStringKey Type +hi def link dtCategoriesKey Type +hi def link dtCategoriesValue Constant +hi def link dtExecKey Type +hi def link dtExecParam Special +hi def link dtTypeKey Type +hi def link dtTypeValue Constant +hi def link dtVersionKey Type +hi def link dtVersionValue Constant + +hi def link dtLocalestringKey Type + +hi def link dtIconStringKey Type + +hi def link dtXExtensionKey Type + +hi def link dtNonStdLabelKey Type + +" Clean Up {{{1 +let b:current_syntax = "desktop" +let &cpo = s:cpo_save + +" vim:ts=8:sw=2:fdm=marker diff --git a/.config/vim/syntax/dictconf.vim b/.config/vim/syntax/dictconf.vim new file mode 100644 index 0000000..c762808 --- /dev/null +++ b/.config/vim/syntax/dictconf.vim @@ -0,0 +1,80 @@ +" Vim syntax file +" Language: dict(1) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword dictconfTodo contained TODO FIXME XXX NOTE + +syn region dictconfComment display oneline start='#' end='$' + \ contains=dictconfTodo,@Spell + +syn match dictconfBegin display '^' + \ nextgroup=dictconfKeyword,dictconfComment + \ skipwhite + +syn keyword dictconfKeyword contained server + \ nextgroup=dictconfServer skipwhite + +syn keyword dictconfKeyword contained pager + \ nextgroup=dictconfPager + +syn match dictconfServer contained display + \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*' + \ nextgroup=dictconfServerOptG skipwhite + +syn region dictconfServer contained display oneline + \ start=+"+ skip=+""+ end=+"+ + \ nextgroup=dictconfServerOptG skipwhite + +syn region dictconfServerOptG contained transparent + \ matchgroup=dictconfServerOptsD start='{' + \ matchgroup=dictconfServerOptsD end='}' + \ contains=dictconfServerOpts,dictconfComment + +syn keyword dictconfServerOpts contained port + \ nextgroup=dictconfNumber skipwhite + +syn keyword dictconfServerOpts contained user + \ nextgroup=dictconfUsername skipwhite + +syn match dictconfUsername contained display + \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*' + \ nextgroup=dictconfSecret skipwhite +syn region dictconfUsername contained display oneline + \ start=+"+ skip=+""+ end=+"+ + \ nextgroup=dictconfSecret skipwhite + +syn match dictconfSecret contained display + \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*' +syn region dictconfSecret contained display oneline + \ start=+"+ skip=+""+ end=+"+ + +syn match dictconfNumber contained '\<\d\+\>' + +syn match dictconfPager contained display + \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*' +syn region dictconfPager contained display oneline + \ start=+"+ skip=+""+ end=+"+ + +hi def link dictconfTodo Todo +hi def link dictconfComment Comment +hi def link dictconfKeyword Keyword +hi def link dictconfServer String +hi def link dictconfServerOptsD Delimiter +hi def link dictconfServerOpts Identifier +hi def link dictconfUsername String +hi def link dictconfSecret Special +hi def link dictconfNumber Number +hi def link dictconfPager String + +let b:current_syntax = "dictconf" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/dictdconf.vim b/.config/vim/syntax/dictdconf.vim new file mode 100644 index 0000000..ecf5fd3 --- /dev/null +++ b/.config/vim/syntax/dictdconf.vim @@ -0,0 +1,146 @@ +" Vim syntax file +" Language: dictd(8) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword dictdconfTodo contained TODO FIXME XXX NOTE + +syn region dictdconfComment display oneline start='#' end='$' + \ contains=dictdconfTodo,dictdconfSpecialC, + \ @Spell + +syn keyword dictdconfSpecialC LASTLINE + +syn match dictdconfBegin display '^' + \ nextgroup=dictdconfKeyword,dictdconfComment + \ skipwhite + +syn keyword dictdconfKeyword contained access + \ nextgroup=dictdconfAccessG skipwhite + +syn region dictdconfAccessG contained transparent + \ matchgroup=dictdconfDelimiter start='{' + \ matchgroup=dictdconfDelimiter end='}' + \ contains=dictdconfAccess,dictdconfComment + +syn keyword dictdconfAccess contained allow deny authonly user + \ nextgroup=dictdconfString skipwhite + +syn keyword dictdconfKeyword contained database + \ nextgroup=dictdconfDatabase skipwhite + +syn match dictdconfDatabase contained display + \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*' + \ nextgroup=dictdconfSpecG skipwhite +syn region dictdconfDatabase contained display oneline + \ start=+"+ skip=+""\|\\\\\|\\"+ end=+"+ + \ nextgroup=dictdconfSpecG skipwhite + +syn region dictdconfSpecG contained transparent + \ matchgroup=dictdconfDelimiter start='{' + \ matchgroup=dictdconfDelimiter end='}' + \ contains=dictdconfSpec,dictdconfAccess, + \ dictdconfComment + +syn keyword dictdconfSpec contained data index index_suffix index_word + \ filter prefilter postfilter name info + \ disable_strat + \ nextgroup=dictdconfString skipwhite + +syn keyword dictdconfSpec contained invisible + +syn keyword dictdconfKeyword contained database_virtual + \ nextgroup=dictdconfVDatabase skipwhite + +syn match dictdconfVDatabase contained display + \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*' + \ nextgroup=dictdconfVSpecG skipwhite +syn region dictdconfVDatabase contained display oneline + \ start=+"+ skip=+""\|\\\\\|\\"+ end=+"+ + \ nextgroup=dictdconfVSpecG skipwhite + +syn region dictdconfVSpecG contained transparent + \ matchgroup=dictdconfDelimiter start='{' + \ matchgroup=dictdconfDelimiter end='}' + \ contains=dictdconfVSpec,dictdconfAccess, + \ dictdconfComment + +syn keyword dictdconfVSpec contained name info database_list disable_strat + \ nextgroup=dictdconfString skipwhite + +syn keyword dictdconfVSpec contained invisible + +syn keyword dictdconfKeyword contained database_plugin + \ nextgroup=dictdconfPDatabase skipwhite + +syn match dictdconfPDatabase contained display + \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*' + \ nextgroup=dictdconfPSpecG skipwhite +syn region dictdconfPDatabase contained display oneline + \ start=+"+ skip=+""\|\\\\\|\\"+ end=+"+ + \ nextgroup=dictdconfPSpecG skipwhite + +syn region dictdconfPSpecG contained transparent + \ matchgroup=dictdconfDelimiter start='{' + \ matchgroup=dictdconfDelimiter end='}' + \ contains=dictdconfPSpec,dictdconfAccess, + \ dictdconfComment + +syn keyword dictdconfPSpec contained name info plugin data disable_strat + \ nextgroup=dictdconfString skipwhite + +syn keyword dictdconfPSpec contained invisible + +syn keyword dictdconfKeyword contained database_exit + +syn keyword dictdconfKeyword contained site + \ nextgroup=dictdconfString skipwhite + +syn keyword dictdconfKeyword contained user + \ nextgroup=dictdconfUsername skipwhite + +syn match dictdconfUsername contained display + \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*' + \ nextgroup=dictdconfSecret skipwhite +syn region dictdconfUsername contained display oneline + \ start=+"+ skip=+""+ end=+"+ + \ nextgroup=dictdconfSecret skipwhite + +syn match dictdconfSecret contained display + \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*' +syn region dictdconfSecret contained display oneline + \ start=+"+ skip=+""+ end=+"+ + +syn match dictdconfString contained display + \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*' +syn region dictdconfString contained display oneline + \ start=+"+ skip=+""\|\\\\\|\\"+ end=+"+ + +hi def link dictdconfTodo Todo +hi def link dictdconfComment Comment +hi def link dictdconfSpecialC Special +hi def link dictdconfKeyword Keyword +hi def link dictdconfIdentifier Identifier +hi def link dictdconfAccess dictdconfIdentifier +hi def link dictdconfDatabase dictdconfString +hi def link dictdconfSpec dictdconfIdentifier +hi def link dictdconfVDatabase dictdconfDatabase +hi def link dictdconfVSpec dictdconfSpec +hi def link dictdconfPDatabase dictdconfDatabase +hi def link dictdconfPSpec dictdconfSpec +hi def link dictdconfUsername dictdconfString +hi def link dictdconfSecret Special +hi def link dictdconfString String +hi def link dictdconfDelimiter Delimiter + +let b:current_syntax = "dictdconf" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/diff.vim b/.config/vim/syntax/diff.vim new file mode 100644 index 0000000..71d2763 --- /dev/null +++ b/.config/vim/syntax/diff.vim @@ -0,0 +1,390 @@ +" Vim syntax file +" Language: Diff (context or unified) +" Maintainer: The Vim Project +" Translations by Jakson Alves de Aquino. +" Last Change: 2025 Aug 16 +" Former Maintainer: Bram Moolenaar + +" Quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif +scriptencoding utf-8 + +syn match diffOnly "^Only in .*" +syn match diffIdentical "^Files .* and .* are identical$" +syn match diffDiffer "^Files .* and .* differ$" +syn match diffBDiffer "^Binary files .* and .* differ$" +syn match diffIsA "^File .* is a .* while file .* is a .*" +syn match diffNoEOL "^\\ No newline at end of file.*" +syn match diffCommon "^Common subdirectories: .*" + +" Disable the translations by setting diff_translations to zero. +if !exists("diff_translations") || diff_translations + +" ca +syn match diffOnly "^Només a .*" +syn match diffIdentical "^Els fitxers .* i .* són idèntics$" +syn match diffDiffer "^Els fitxers .* i .* difereixen$" +syn match diffBDiffer "^Els fitxers .* i .* difereixen$" +syn match diffIsA "^El fitxer .* és un .* mentre que el fitxer .* és un .*" +syn match diffNoEOL "^\\ No hi ha cap caràcter de salt de línia al final del fitxer" +syn match diffCommon "^Subdirectoris comuns: .* i .*" + +" cs +syn match diffOnly "^Pouze v .*" +syn match diffIdentical "^Soubory .* a .* jsou identické$" +syn match diffDiffer "^Soubory .* a .* jsou různé$" +syn match diffBDiffer "^Binární soubory .* a .* jsou rozdílné$" +syn match diffBDiffer "^Soubory .* a .* jsou různé$" +syn match diffIsA "^Soubor .* je .* pokud soubor .* je .*" +syn match diffNoEOL "^\\ Chybí znak konce řádku na konci souboru" +syn match diffCommon "^Společné podadresáře: .* a .*" + +" da +syn match diffOnly "^Kun i .*" +syn match diffIdentical "^Filerne .* og .* er identiske$" +syn match diffDiffer "^Filerne .* og .* er forskellige$" +syn match diffBDiffer "^Binære filer .* og .* er forskellige$" +syn match diffIsA "^Filen .* er en .* mens filen .* er en .*" +syn match diffNoEOL "^\\ Intet linjeskift ved filafslutning" +syn match diffCommon "^Identiske underkataloger: .* og .*" + +" de +syn match diffOnly "^Nur in .*" +syn match diffIdentical "^Dateien .* und .* sind identisch.$" +syn match diffDiffer "^Dateien .* und .* sind verschieden.$" +syn match diffBDiffer "^Binärdateien .* and .* sind verschieden.$" +syn match diffBDiffer "^Binärdateien .* und .* sind verschieden.$" +syn match diffIsA "^Datei .* ist ein .* während Datei .* ein .* ist.$" +syn match diffNoEOL "^\\ Kein Zeilenumbruch am Dateiende." +syn match diffCommon "^Gemeinsame Unterverzeichnisse: .* und .*.$" + +" el +syn match diffOnly "^Μόνο στο .*" +syn match diffIdentical "^Τα αρχεία .* καί .* είναι πανομοιότυπα$" +syn match diffDiffer "^Τα αρχεία .* και .* διαφέρουν$" +syn match diffBDiffer "^Τα αρχεία .* και .* διαφέρουν$" +syn match diffIsA "^Το αρχείο .* είναι .* ενώ το αρχείο .* είναι .*" +syn match diffNoEOL "^\\ Δεν υπάρχει χαρακτήρας νέας γραμμής στο τέλος του αρχείου" +syn match diffCommon "^Οι υποκατάλογοι .* και .* είναι ταυτόσημοι$" + +" eo +syn match diffOnly "^Nur en .*" +syn match diffIdentical "^Dosieroj .* kaj .* estas samaj$" +syn match diffDiffer "^Dosieroj .* kaj .* estas malsamaj$" +syn match diffBDiffer "^Dosieroj .* kaj .* estas malsamaj$" +syn match diffIsA "^Dosiero .* estas .*, dum dosiero .* estas .*" +syn match diffNoEOL "^\\ Mankas linifino ĉe fino de dosiero" +syn match diffCommon "^Komunaj subdosierujoj: .* kaj .*" + +" es +syn match diffOnly "^Sólo en .*" +syn match diffIdentical "^Los ficheros .* y .* son idénticos$" +syn match diffDiffer "^Los ficheros .* y .* son distintos$" +syn match diffBDiffer "^Los ficheros binarios .* y .* son distintos$" +syn match diffIsA "^El fichero .* es un .* mientras que el .* es un .*" +syn match diffNoEOL "^\\ No hay ningún carácter de nueva línea al final del fichero" +syn match diffCommon "^Subdirectorios comunes: .* y .*" + +" fi +syn match diffOnly "^Vain hakemistossa .*" +syn match diffIdentical "^Tiedostot .* ja .* ovat identtiset$" +syn match diffDiffer "^Tiedostot .* ja .* eroavat$" +syn match diffBDiffer "^Binääritiedostot .* ja .* eroavat$" +syn match diffIsA "^Tiedosto .* on .*, kun taas tiedosto .* on .*" +syn match diffNoEOL "^\\ Ei rivinvaihtoa tiedoston lopussa" +syn match diffCommon "^Yhteiset alihakemistot: .* ja .*" + +" fr +syn match diffOnly "^Seulement dans .*" +syn match diffIdentical "^Les fichiers .* et .* sont identiques.*" +syn match diffDiffer "^Les fichiers .* et .* sont différents.*" +syn match diffBDiffer "^Les fichiers binaires .* et .* sont différents.*" +syn match diffIsA "^Le fichier .* est un .* alors que le fichier .* est un .*" +syn match diffNoEOL "^\\ Pas de fin de ligne à la fin du fichier.*" +syn match diffCommon "^Les sous-répertoires .* et .* sont identiques.*" + +" ga +syn match diffOnly "^I .* amháin: .*" +syn match diffIdentical "^Is comhionann iad na comhaid .* agus .*" +syn match diffDiffer "^Tá difríocht idir na comhaid .* agus .*" +syn match diffBDiffer "^Tá difríocht idir na comhaid .* agus .*" +syn match diffIsA "^Tá comhad .* ina .* ach tá comhad .* ina .*" +syn match diffNoEOL "^\\ Gan líne nua ag an chomhadchríoch" +syn match diffCommon "^Fochomhadlanna i gcoitianta: .* agus .*" + +" gl +syn match diffOnly "^Só en .*" +syn match diffIdentical "^Os ficheiros .* e .* son idénticos$" +syn match diffDiffer "^Os ficheiros .* e .* son diferentes$" +syn match diffBDiffer "^Os ficheiros binarios .* e .* son diferentes$" +syn match diffIsA "^O ficheiro .* é un .* mentres que o ficheiro .* é un .*" +syn match diffNoEOL "^\\ Non hai un salto de liña na fin da liña" +syn match diffCommon "^Subdirectorios comúns: .* e .*" + +" he +" ^.* are expansive patterns for long lines, so disabled unless we can match +" some specific hebrew chars +if search('\%u05d5\|\%u05d1', 'nw', '', 100) + syn match diffOnly "^.*-ב קר אצמנ .*" + syn match diffIdentical "^םיהז םניה .*-ו .* םיצבקה$" + syn match diffDiffer "^הזמ הז םינוש `.*'-ו `.*' םיצבקה$" + syn match diffBDiffer "^הזמ הז םינוש `.*'-ו `.*' םיירניב םיצבק$" + syn match diffIsA "^.* .*-ל .* .* תוושהל ןתינ אל$" + syn match diffNoEOL "^\\ ץבוקה ףוסב השד.-הרוש ות רס." + syn match diffCommon "^.*-ו .* :תוהז תויקית-תת$" +endif + +" hr +syn match diffOnly "^Samo u .*" +syn match diffIdentical "^Datoteke .* i .* su identične$" +syn match diffDiffer "^Datoteke .* i .* se razlikuju$" +syn match diffBDiffer "^Binarne datoteke .* i .* se razlikuju$" +syn match diffIsA "^Datoteka .* je .*, a datoteka .* je .*" +syn match diffNoEOL "^\\ Nema novog retka na kraju datoteke" +syn match diffCommon "^Uobičajeni poddirektoriji: .* i .*" + +" hu +syn match diffOnly "^Csak .* -ben: .*" +syn match diffIdentical "^.* és .* fájlok azonosak$" +syn match diffDiffer "^A(z) .* és a(z) .* fájlok különböznek$" +syn match diffBDiffer "^A(z) .* és a(z) .* fájlok különböznek$" +syn match diffIsA "^A(z) .* fájl egy .*, viszont a(z) .* fájl egy .*" +syn match diffNoEOL "^\\ Nincs újsor a fájl végén" +syn match diffCommon "^Közös alkönyvtárak: .* és .*" + +" id +syn match diffOnly "^Hanya dalam .*" +syn match diffIdentical "^File .* dan .* identik$" +syn match diffDiffer "^Berkas .* dan .* berbeda$" +syn match diffBDiffer "^File biner .* dan .* berbeda$" +syn match diffIsA "^File .* adalah .* sementara file .* adalah .*" +syn match diffNoEOL "^\\ Tidak ada baris-baru di akhir dari berkas" +syn match diffCommon "^Subdirektori sama: .* dan .*" + +" it +syn match diffOnly "^Solo in .*" +syn match diffIdentical "^I file .* e .* sono identici$" +syn match diffDiffer "^I file .* e .* sono diversi$" +syn match diffBDiffer "^I file .* e .* sono diversi$" +syn match diffBDiffer "^I file binari .* e .* sono diversi$" +syn match diffIsA "^File .* è un .* mentre file .* è un .*" +syn match diffNoEOL "^\\ Manca newline alla fine del file" +syn match diffCommon "^Sottodirectory in comune: .* e .*" + +" ja +syn match diffOnly "^.*だけに発見: .*" +syn match diffIdentical "^ファイル.*と.*は同一$" +syn match diffDiffer "^ファイル.*と.*は違います$" +syn match diffBDiffer "^バイナリー・ファイル.*と.*は違います$" +syn match diffIsA "^ファイル.*は.*、ファイル.*は.*" +syn match diffNoEOL "^\\ ファイル末尾に改行がありません" +syn match diffCommon "^共通の下位ディレクトリー: .*と.*" + +" ja DiffUtils 3.3 +syn match diffOnly "^.* のみに存在: .*" +syn match diffIdentical "^ファイル .* と .* は同一です$" +syn match diffDiffer "^ファイル .* と .* は異なります$" +syn match diffBDiffer "^バイナリーファイル .* と.* は異なります$" +syn match diffIsA "^ファイル .* は .* です。一方、ファイル .* は .* です$" +syn match diffNoEOL "^\\ ファイル末尾に改行がありません" +syn match diffCommon "^共通のサブディレクトリー: .* と .*" + +" lv +syn match diffOnly "^Tikai iekš .*" +syn match diffIdentical "^Fails .* un .* ir identiski$" +syn match diffDiffer "^Faili .* un .* atšķiras$" +syn match diffBDiffer "^Faili .* un .* atšķiras$" +syn match diffBDiffer "^Binārie faili .* un .* atšķiras$" +syn match diffIsA "^Fails .* ir .* kamēr fails .* ir .*" +syn match diffNoEOL "^\\ Nav jaunu rindu faila beigās" +syn match diffCommon "^Kopējās apakšdirektorijas: .* un .*" + +" ms +syn match diffOnly "^Hanya dalam .*" +syn match diffIdentical "^Fail .* dan .* adalah serupa$" +syn match diffDiffer "^Fail .* dan .* berbeza$" +syn match diffBDiffer "^Fail .* dan .* berbeza$" +syn match diffIsA "^Fail .* adalah .* manakala fail .* adalah .*" +syn match diffNoEOL "^\\ Tiada baris baru pada penghujung fail" +syn match diffCommon "^Subdirektori umum: .* dan .*" + +" nl +syn match diffOnly "^Alleen in .*" +syn match diffIdentical "^Bestanden .* en .* zijn identiek$" +syn match diffDiffer "^Bestanden .* en .* zijn verschillend$" +syn match diffBDiffer "^Bestanden .* en .* zijn verschillend$" +syn match diffBDiffer "^Binaire bestanden .* en .* zijn verschillend$" +syn match diffIsA "^Bestand .* is een .* terwijl bestand .* een .* is$" +syn match diffNoEOL "^\\ Geen regeleindeteken (LF) aan einde van bestand" +syn match diffCommon "^Gemeenschappelijke submappen: .* en .*" + +" pl +syn match diffOnly "^Tylko w .*" +syn match diffIdentical "^Pliki .* i .* są identyczne$" +syn match diffDiffer "^Pliki .* i .* różnią się$" +syn match diffBDiffer "^Pliki .* i .* różnią się$" +syn match diffBDiffer "^Binarne pliki .* i .* różnią się$" +syn match diffIsA "^Plik .* jest .*, podczas gdy plik .* jest .*" +syn match diffNoEOL "^\\ Brak znaku nowej linii na końcu pliku" +syn match diffCommon "^Wspólne podkatalogi: .* i .*" + +" pt_BR +syn match diffOnly "^Somente em .*" +syn match diffOnly "^Apenas em .*" +syn match diffIdentical "^Os aquivos .* e .* são idênticos$" +syn match diffDiffer "^Os arquivos .* e .* são diferentes$" +syn match diffBDiffer "^Os arquivos binários .* e .* são diferentes$" +syn match diffIsA "^O arquivo .* é .* enquanto o arquivo .* é .*" +syn match diffNoEOL "^\\ Falta o caracter nova linha no final do arquivo" +syn match diffCommon "^Subdiretórios idênticos: .* e .*" + +" ro +syn match diffOnly "^Doar în .*" +syn match diffIdentical "^Fişierele .* şi .* sunt identice$" +syn match diffDiffer "^Fişierele .* şi .* diferă$" +syn match diffBDiffer "^Fişierele binare .* şi .* diferă$" +syn match diffIsA "^Fişierul .* este un .* pe când fişierul .* este un .*.$" +syn match diffNoEOL "^\\ Nici un element de linie nouă la sfârşitul fişierului" +syn match diffCommon "^Subdirectoare comune: .* şi .*.$" + +" ru +syn match diffOnly "^Только в .*" +syn match diffIdentical "^Файлы .* и .* идентичны$" +syn match diffDiffer "^Файлы .* и .* различаются$" +syn match diffBDiffer "^Файлы .* и .* различаются$" +syn match diffIsA "^Файл .* это .*, тогда как файл .* -- .*" +syn match diffNoEOL "^\\ В конце файла нет новой строки" +syn match diffCommon "^Общие подкаталоги: .* и .*" + +" sr +syn match diffOnly "^Само у .*" +syn match diffIdentical "^Датотеке „.*“ и „.*“ се подударају$" +syn match diffDiffer "^Датотеке .* и .* различите$" +syn match diffBDiffer "^Бинарне датотеке .* и .* различите$" +syn match diffIsA "^Датотека „.*“ је „.*“ док је датотека „.*“ „.*“$" +syn match diffNoEOL "^\\ Без новог реда на крају датотеке" +syn match diffCommon "^Заједнички поддиректоријуми: .* и .*" + +" sv +syn match diffOnly "^Endast i .*" +syn match diffIdentical "^Filerna .* och .* är lika$" +syn match diffDiffer "^Filerna .* och .* skiljer$" +syn match diffBDiffer "^Filerna .* och .* skiljer$" +syn match diffIsA "^Fil .* är en .* medan fil .* är en .*" +syn match diffBDiffer "^De binära filerna .* och .* skiljer$" +syn match diffIsA "^Filen .* är .* medan filen .* är .*" +syn match diffNoEOL "^\\ Ingen nyrad vid filslut" +syn match diffCommon "^Lika underkataloger: .* och .*" + +" tr +syn match diffOnly "^Yalnızca .*'da: .*" +syn match diffIdentical "^.* ve .* dosyaları birbirinin aynı$" +syn match diffDiffer "^.* ve .* dosyaları birbirinden farklı$" +syn match diffBDiffer "^.* ve .* dosyaları birbirinden farklı$" +syn match diffBDiffer "^İkili .* ve .* birbirinden farklı$" +syn match diffIsA "^.* dosyası, bir .*, halbuki .* dosyası bir .*" +syn match diffNoEOL "^\\ Dosya sonunda yenisatır yok." +syn match diffCommon "^Ortak alt dizinler: .* ve .*" + +" uk +syn match diffOnly "^Лише у .*" +syn match diffIdentical "^Файли .* та .* ідентичні$" +syn match diffDiffer "^Файли .* та .* відрізняються$" +syn match diffBDiffer "^Файли .* та .* відрізняються$" +syn match diffBDiffer "^Двійкові файли .* та .* відрізняються$" +syn match diffIsA "^Файл .* це .*, тоді як файл .* -- .*" +syn match diffNoEOL "^\\ Наприкінці файлу немає нового рядка" +syn match diffCommon "^Спільні підкаталоги: .* та .*" + +" vi +syn match diffOnly "^Chỉ trong .*" +syn match diffIdentical "^Hai tập tin .* và .* là bằng nhau.$" +syn match diffIdentical "^Cả .* và .* là cùng một tập tin$" +syn match diffDiffer "^Hai tập tin .* và .* là khác nhau.$" +syn match diffBDiffer "^Hai tập tin nhị phân .* và .* khác nhau$" +syn match diffIsA "^Tập tin .* là một .* trong khi tập tin .* là một .*.$" +syn match diffBDiffer "^Hai tập tin .* và .* là khác nhau.$" +syn match diffIsA "^Tập tin .* là một .* còn tập tin .* là một .*.$" +syn match diffNoEOL "^\\ Không có ký tự dòng mới tại kêt thức tập tin." +syn match diffCommon "^Thư mục con chung: .* và .*" + +" zh_CN +syn match diffOnly "^只在 .* 存在:.*" +syn match diffIdentical "^文件 .* 和 .* 相同$" +syn match diffDiffer "^文件 .* 和 .* 不同$" +syn match diffBDiffer "^二进制文件 .* 和 .* 不同$" +syn match diffIsA "^文件 .* 是.*而文件 .* 是.*" +syn match diffNoEOL "^\\ 文件尾没有 newline 字符" +syn match diffCommon "^.* 和 .* 有共同的子目录$" + +" zh_TW +syn match diffOnly "^只在 .* 存在:.*" +syn match diffIdentical "^檔案 .* 和 .* 相同$" +syn match diffDiffer "^檔案 .* 與 .* 不同$" +syn match diffBDiffer "^二元碼檔 .* 與 .* 不同$" +syn match diffIsA "^檔案 .* 是.*而檔案 .* 是.*" +syn match diffNoEOL "^\\ 檔案末沒有 newline 字元" +syn match diffCommon "^.* 和 .* 有共同的副目錄$" + +endif + + +syn match diffRemoved "^-.*" +syn match diffRemoved "^<.*" +syn match diffAdded "^+.*" +syn match diffAdded "^>.*" +syn match diffChanged "^! .*" + +syn match diffSubname " @@..*"ms=s+3 contained +syn match diffLine "^@.*" contains=diffSubname +syn match diffLine "^\<\d\+\>.*" +syn match diffLine "^\*\*\*\*.*" +syn match diffLine "^---$" + +" Some versions of diff have lines like "#c#" and "#d#" (where # is a number) +syn match diffLine "^\d\+\(,\d\+\)\=[cda]\d\+\>.*" + +syn match diffFile "^diff\>.*" +syn match diffFile "^Index: .*" +syn match diffFile "^==== .*" + +if search('^@@ -\S\+ +\S\+ @@', 'nw', '', 100) + " unified + syn match diffOldFile "^--- .*" + syn match diffNewFile "^+++ .*" +else + " context / old style + syn match diffOldFile "^\*\*\* .*" + syn match diffNewFile "^--- .*" +endif + +" Used by git +syn match diffIndexLine "^index \x\x\x\x.*" + +syn match diffComment "^#.*" + +" Define the default highlighting. +" Only used when an item doesn't have highlighting yet +hi def link diffOldFile diffFile +hi def link diffNewFile diffFile +hi def link diffIndexLine PreProc +hi def link diffFile Type +hi def link diffOnly Constant +hi def link diffIdentical Constant +hi def link diffDiffer Constant +hi def link diffBDiffer Constant +hi def link diffIsA Constant +hi def link diffNoEOL Constant +hi def link diffCommon Constant +hi def link diffRemoved Removed +hi def link diffChanged Changed +hi def link diffAdded Added +hi def link diffLine Statement +hi def link diffSubname PreProc +hi def link diffComment Comment + +let b:current_syntax = "diff" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/dircolors.vim b/.config/vim/syntax/dircolors.vim new file mode 100644 index 0000000..24bc31f --- /dev/null +++ b/.config/vim/syntax/dircolors.vim @@ -0,0 +1,222 @@ +" Vim syntax file +" Language: dircolors(1) input file +" Maintainer: Jan Larres +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2018-02-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syntax keyword dircolorsTodo FIXME TODO XXX NOTE contained + +syntax region dircolorsComment start='#' end='$' contains=dircolorsTodo,@Spell + +syntax keyword dircolorsKeyword TERM LEFT LEFTCODE RIGHT RIGHTCODE END ENDCODE + +syntax keyword dircolorsKeyword NORMAL NORM FILE RESET DIR LNK LINK SYMLINK + \ MULTIHARDLINK FIFO SOCK DOOR BLK CHR ORPHAN + \ MISSING PIPE BLOCK CHR EXEC SETUID SETGID + \ CAPABILITY STICKY_OTHER_WRITABLE + \ OTHER_WRITABLE STICKY + +" Slackware only, ignored by GNU dircolors. +syntax keyword dircolorsKeyword COLOR OPTIONS EIGHTBIT + +syntax match dircolorsExtension '^\s*\zs[.*]\S\+' + +syntax match dircolorsEscape '\\[abefnrtv?_\\^#]' +syntax match dircolorsEscape '\\[0-9]\{3}' +syntax match dircolorsEscape '\\x[0-9a-f]\{3}' + +if !has('gui_running') && &t_Co == '' + syntax match dircolorsNumber '\<\d\+\>' + highlight default link dircolorsNumber Number +endif + +highlight default link dircolorsTodo Todo +highlight default link dircolorsComment Comment +highlight default link dircolorsKeyword Keyword +highlight default link dircolorsExtension Identifier +highlight default link dircolorsEscape Special + +function! s:set_guicolors() abort + let s:termguicolors = {} + + let s:termguicolors[0] = "Black" + let s:termguicolors[1] = "DarkRed" + let s:termguicolors[2] = "DarkGreen" + let s:termguicolors[3] = "DarkYellow" + let s:termguicolors[4] = "DarkBlue" + let s:termguicolors[5] = "DarkMagenta" + let s:termguicolors[6] = "DarkCyan" + let s:termguicolors[7] = "Gray" + let s:termguicolors[8] = "DarkGray" + let s:termguicolors[9] = "Red" + let s:termguicolors[10] = "Green" + let s:termguicolors[11] = "Yellow" + let s:termguicolors[12] = "Blue" + let s:termguicolors[13] = "Magenta" + let s:termguicolors[14] = "Cyan" + let s:termguicolors[15] = "White" + + let xterm_palette = ["00", "5f", "87", "af", "d7", "ff"] + + let cur_col = 16 + + for r in xterm_palette + for g in xterm_palette + for b in xterm_palette + let s:termguicolors[cur_col] = '#' . r . g . b + let cur_col += 1 + endfor + endfor + endfor + + for i in range(24) + let g = i * 0xa + 8 + let s:termguicolors[i + 232] = '#' . g . g . g + endfor +endfunction + +function! s:get_hi_str(color, place) abort + if a:color >= 0 && a:color <= 255 + if has('gui_running') + return ' gui' . a:place . '=' . s:termguicolors[a:color] + elseif a:color <= 7 || &t_Co == 256 || &t_Co == 88 + return ' cterm' . a:place . '=' . a:color + endif + endif + return '' +endfunction + +function! s:get_256color(colors) abort + if len(a:colors) >= 2 " May be fewer while editing + let [_five, color] = remove(a:colors, 0, 1) + if _five != '5' || color == '' + return -1 + else + return str2nr(color) + endif + else + return -1 + endif +endfunction + +function! s:preview_color(linenr) abort + let line = getline(a:linenr) + let defline = matchlist(line, '^\v([A-Z_]+|[*.]\S+)\s+([0-9;]+)') + if empty(defline) + return + endif + + let colordef = defline[2] + + let colors = split(colordef, ';') + + let hi_str = '' + let hi_attrs = [] + while len(colors) > 0 + let item = str2nr(remove(colors, 0)) + if item == 1 + call add(hi_attrs, 'bold') + elseif item == 3 + call add(hi_attrs, 'italic') + elseif item == 4 + call add(hi_attrs, 'underline') + elseif item == 7 + call add(hi_attrs, 'inverse') + elseif item >= 30 && item <= 37 + " ANSI SGR foreground color + let hi_str .= s:get_hi_str(item - 30, 'fg') + elseif item >= 40 && item <= 47 + " ANSI SGR background color + let hi_str .= s:get_hi_str(item - 40, 'bg') + elseif item >= 90 && item <= 97 + " ANSI SGR+8 foreground color (xterm 16-color support) + let hi_str .= s:get_hi_str(item - 82, 'fg') + elseif item >= 100 && item <= 107 + " ANSI SGR+8 background color (xterm 16-color support) + let hi_str .= s:get_hi_str(item - 92, 'bg') + elseif item == 38 + " Foreground for terminals with 88/256 color support + let color = s:get_256color(colors) + if color == -1 + break + endif + let hi_str .= s:get_hi_str(color, 'fg') + elseif item == 48 + " Background for terminals with 88/256 color support + let color = s:get_256color(colors) + if color == -1 + break + endif + let hi_str .= s:get_hi_str(color, 'bg') + endif + endwhile + + if hi_str == '' && empty(hi_attrs) + return + endif + + " Check whether we have already defined this color + redir => s:currentmatch + silent! execute 'syntax list' + redir END + + if s:currentmatch !~# '\/\\_s\\zs' . colordef . '\\ze\\_s\/' + " Append the buffer number to avoid problems with other dircolors + " buffers interfering + let bufnr = bufnr('%') + execute 'syntax match dircolorsColor' . b:dc_next_index . '_' . bufnr . + \ ' "\_s\zs' . colordef . '\ze\_s"' + let hi_attrs_str = '' + if !empty(hi_attrs) + if has('gui_running') + let hi_attrs_str = ' gui=' . join(hi_attrs, ',') + else + let hi_attrs_str = ' cterm=' . join(hi_attrs, ',') + endif + endif + execute 'highlight default dircolorsColor' . b:dc_next_index . '_' . + \ bufnr . hi_str . hi_attrs_str + let b:dc_next_index += 1 + endif +endfunction + +" Avoid accumulating too many definitions while editing +function! s:reset_colors() abort + if b:dc_next_index > 0 + let bufnr = bufnr('%') + for i in range(b:dc_next_index) + execute 'syntax clear dircolorsColor' . i . '_' . bufnr + execute 'highlight clear dircolorsColor' . i . '_' . bufnr + endfor + let b:dc_next_index = 0 + endif + + for linenr in range(1, line('$')) + call s:preview_color(linenr) + endfor +endfunction + +let b:dc_next_index = 0 + +if has('gui_running') + call s:set_guicolors() +endif + +if has('gui_running') || &t_Co != '' + call s:reset_colors() + + autocmd CursorMoved,CursorMovedI call s:preview_color('.') + autocmd CursorHold,CursorHoldI call s:reset_colors() +endif + +let b:current_syntax = "dircolors" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/dirpager.vim b/.config/vim/syntax/dirpager.vim new file mode 100644 index 0000000..dc8b986 --- /dev/null +++ b/.config/vim/syntax/dirpager.vim @@ -0,0 +1,56 @@ +" Vim syntax file +" Maintainer: Thilo Six +" Contact: +" http://www.vim.org/maillist.php#vim-dev +" +" Description: display directory content inside Vim with syntax +" highlighting +" File: runtime/syntax/dirpager.vim +" Last Change: 2022 Jun 14 +" Modeline: vim: ts=8:sw=2:sts=2: +" +" Credits: dirpager.vim is derived from Nikolai Weibulls dircolors.vim +" +" License: VIM License +" Vim is Charityware, see ":help Uganda" +" +" Usage: $ ls -la | view -c "set ft=dirpager" - +" +" +",----[ ls(1posix) ]-------------------------------------------------- +" +" The character shall describe the type of file, as +" follows: +" +" d Directory. +" b Block special file. +" c Character special file. +" l (ell) Symbolic link. +" p FIFO. +" - Regular file. +" + +if exists("b:current_syntax") || &compatible + finish +endif + +setlocal nowrap + +syn keyword DirPagerTodo contained FIXME TODO XXX NOTE + +syn region DirPagerExe start='^...x\|^......x\|^.........x' end='$' contains=DirPagerTodo,@Spell +syn region DirPagerDir start='^d' end='$' contains=DirPagerTodo,@Spell +syn region DirPagerLink start='^l' end='$' contains=DirPagerTodo,@Spell +syn region DirPagerSpecial start='^b' end='$' contains=DirPagerTodo,@Spell +syn region DirPagerSpecial start='^c' end='$' contains=DirPagerTodo,@Spell +syn region DirPagerFifo start='^p' end='$' contains=DirPagerTodo,@Spell + +hi def link DirPagerTodo Todo +hi def DirPagerExe ctermfg=Green guifg=Green +hi def DirPagerDir ctermfg=Blue guifg=Blue +hi def DirPagerLink ctermfg=Cyan guifg=Cyan +hi def DirPagerSpecial ctermfg=Yellow guifg=Yellow +hi def DirPagerFifo ctermfg=Brown guifg=Brown + +let b:current_syntax = "dirpager" + diff --git a/.config/vim/syntax/diva.vim b/.config/vim/syntax/diva.vim new file mode 100644 index 0000000..127a0b4 --- /dev/null +++ b/.config/vim/syntax/diva.vim @@ -0,0 +1,96 @@ +" Vim syntax file +" Language: SKILL for Diva +" Maintainer: Toby Schaffer +" Last Change: 2001 May 09 +" Comments: SKILL is a Lisp-like programming language for use in EDA +" tools from Cadence Design Systems. It allows you to have +" a programming environment within the Cadence environment +" that gives you access to the complete tool set and design +" database. These items are for Diva verification rules decks. + +" Don't remove any old syntax stuff hanging around! We need stuff +" from skill.vim. +if !exists("did_skill_syntax_inits") + runtime! syntax/skill.vim +endif + +syn keyword divaDRCKeywords area enc notch ovlp sep width +syn keyword divaDRCKeywords app diffNet length lengtha lengthb +syn keyword divaDRCKeywords notParallel only_perp opposite parallel +syn keyword divaDRCKeywords sameNet shielded with_perp +syn keyword divaDRCKeywords edge edgea edgeb fig figa figb +syn keyword divaDRCKeywords normalGrow squareGrow message raw +syn keyword divaMeasKeywords perimeter length bends_all bends_full +syn keyword divaMeasKeywords bends_part corners_all corners_full +syn keyword divaMeasKeywords corners_part angles_all angles_full +syn keyword divaMeasKeywords angles_part fig_count butting coincident +syn keyword divaMeasKeywords over not_over outside inside enclosing +syn keyword divaMeasKeywords figure one_net two_net three_net grounded +syn keyword divaMeasKeywords polarized limit keep ignore +syn match divaCtrlFunctions "(ivIf\>"hs=s+1 +syn match divaCtrlFunctions "\"hs=s+1 +syn match divaCtrlFunctions "\"hs=s+1 +syn match divaCtrlFunctions "\"hs=s+1 +syn match divaCtrlFunctions "\"hs=s+1 +syn match divaCtrlFunctions "\"hs=s+1 +syn match divaExtFunctions "\"hs=s+1 +syn match divaExtFunctions "\<\(save\|measure\|attach\|multiLevel\|calculate\)Parasitic("he=e-1 +syn match divaExtFunctions "(\(calculate\|measure\)Parameter\>"hs=s+1 +syn match divaExtFunctions "\<\(calculate\|measure\)Parameter("he=e-1 +syn match divaExtFunctions "(measure\(Resistance\|Fringe\)\>"hs=s+1 +syn match divaExtFunctions "\"hs=s+1 +syn match divaExtFunctions "\"hs=s+1 +syn match divaDRCFunctions "\"hs=s+1 +syn match divaDRCFunctions "\"hs=s+1 +syn match divaDRCFunctions "\"hs=s+1 +syn match divaDRCFunctions "\"hs=s+1 +syn match divaFunctions "\<\(drcExtract\|lvs\)Rules("he=e-1 +syn match divaLayerFunctions "(saveDerived\>"hs=s+1 +syn match divaLayerFunctions "\"hs=s+1 +syn match divaLayerFunctions "\"hs=s+1 +syn match divaChkFunctions "\"hs=s+1 +syn match divaChkFunctions "\"hs=s+1 +syn match divaLVSFunctions "\"hs=s+1 +syn match divaLVSFunctions "\"hs=s+1 +syn match divaLVSFunctions "\"hs=s+1 +syn match divaLVSFunctions "\<\(permute\|prune\|remove\)Device("he=e-1 +syn match divaGeomFunctions "(geom\u\a\+\(45\|90\)\=\>"hs=s+1 +syn match divaGeomFunctions "\ +" Last Change: 2021 Nov 29 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syntax case match + +" Mark illegal characters +syn match djangoError "%}\|}}\|#}" + +" Django template built-in tags and parameters +" 'comment' doesn't appear here because it gets special treatment +syn keyword djangoStatement contained autoescape csrf_token empty +" FIXME ==, !=, <, >, <=, and >= should be djangoStatements: +" syn keyword djangoStatement contained == != < > <= >= +syn keyword djangoStatement contained and as block endblock by cycle debug else elif +syn keyword djangoStatement contained extends filter endfilter firstof for +syn keyword djangoStatement contained endfor if endif ifchanged endifchanged +syn keyword djangoStatement contained ifequal endifequal ifnotequal +syn keyword djangoStatement contained endifnotequal in include load not now or +syn keyword djangoStatement contained parsed regroup reversed spaceless +syn keyword djangoStatement contained endspaceless ssi templatetag openblock +syn keyword djangoStatement contained closeblock openvariable closevariable +syn keyword djangoStatement contained openbrace closebrace opencomment +syn keyword djangoStatement contained closecomment widthratio url with endwith +syn keyword djangoStatement contained get_current_language trans noop blocktrans +syn keyword djangoStatement contained endblocktrans get_available_languages +syn keyword djangoStatement contained get_current_language_bidi plural +syn keyword djangoStatement contained translate blocktranslate endblocktranslate + +" Django templete built-in filters +syn keyword djangoFilter contained add addslashes capfirst center cut date +syn keyword djangoFilter contained default default_if_none dictsort +syn keyword djangoFilter contained dictsortreversed divisibleby escape escapejs +syn keyword djangoFilter contained filesizeformat first fix_ampersands +syn keyword djangoFilter contained floatformat get_digit join last length length_is +syn keyword djangoFilter contained linebreaks linebreaksbr linenumbers ljust +syn keyword djangoFilter contained lower make_list phone2numeric pluralize +syn keyword djangoFilter contained pprint random removetags rjust slice slugify +syn keyword djangoFilter contained safe safeseq stringformat striptags +syn keyword djangoFilter contained time timesince timeuntil title truncatechars +syn keyword djangoFilter contained truncatewords truncatewords_html unordered_list upper urlencode +syn keyword djangoFilter contained urlize urlizetrunc wordcount wordwrap yesno + +" Keywords to highlight within comments +syn keyword djangoTodo contained TODO FIXME XXX + +" Django template constants (always surrounded by double quotes) +syn region djangoArgument contained start=/"/ skip=/\\"/ end=/"/ + +" Mark illegal characters within tag and variables blocks +syn match djangoTagError contained "#}\|{{\|[^%]}}\|[&#]" +syn match djangoVarError contained "#}\|{%\|%}\|[<>!&#%]" + +" Django template tag and variable blocks +syn region djangoTagBlock start="{%" end="%}" contains=djangoStatement,djangoFilter,djangoArgument,djangoTagError display +syn region djangoVarBlock start="{{" end="}}" contains=djangoFilter,djangoArgument,djangoVarError display + +" Django template 'comment' tag and comment block +syn region djangoComment start="{%\s*comment\(\s\+.\{-}\)\?%}" end="{%\s*endcomment\s*%}" contains=djangoTodo +syn region djangoComBlock start="{#" end="#}" contains=djangoTodo + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link djangoTagBlock PreProc +hi def link djangoVarBlock PreProc +hi def link djangoStatement Statement +hi def link djangoFilter Identifier +hi def link djangoArgument Constant +hi def link djangoTagError Error +hi def link djangoVarError Error +hi def link djangoError Error +hi def link djangoComment Comment +hi def link djangoComBlock Comment +hi def link djangoTodo Todo + + +let b:current_syntax = "django" diff --git a/.config/vim/syntax/dns.vim b/.config/vim/syntax/dns.vim new file mode 100644 index 0000000..cc9a3f0 --- /dev/null +++ b/.config/vim/syntax/dns.vim @@ -0,0 +1,5 @@ +" Vim syntax file +" Language: DNS/BIND Zone File + +" This has been replaced by the bindzone syntax +:runtime! syntax/bindzone.vim diff --git a/.config/vim/syntax/dnsmasq.vim b/.config/vim/syntax/dnsmasq.vim new file mode 100644 index 0000000..a4cc8b5 --- /dev/null +++ b/.config/vim/syntax/dnsmasq.vim @@ -0,0 +1,242 @@ +" Vim syntax file +" Maintainer: Thilo Six +" Contact: vim-foo@xk2c-foo.de +" :3s+-foo++g +" Description: highlight dnsmasq configuration files +" File: runtime/syntax/dnsmasq.vim +" Version: 2.76 +" Last Change: 2015 Sep 27 +" Modeline: vim: ts=8:sw=2:sts=2: +" +" License: VIM License +" Vim is Charityware, see ":help Uganda" +" +" Options: You might want to add this to your vimrc: +" +" if &background == "dark" +" let dnsmasq_backrgound_light = 0 +" else +" let dnsmasq_backrgound_light = 1 +" endif +" + +" quit when a syntax file was already loaded +if exists("b:current_syntax") || &compatible + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +if !exists("b:dnsmasq_backrgound_light") + if exists("dnsmasq_backrgound_light") + let b:dnsmasq_backrgound_light = dnsmasq_backrgound_light + else + let b:dnsmasq_backrgound_light = 0 + endif +endif + + +" case on +syn case match + +syn match DnsmasqValues "=.*"hs=s+1 contains=DnsmasqComment,DnsmasqSpecial +syn match DnsmasqSpecial display '=\|@\|,\|!\|:' nextgroup=DnsmasqValues +syn match DnsmasqSpecial "#" + +syn match DnsmasqIPv4 "\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>" nextgroup=DnsmasqSubnet2,DnsmasqRange +syn match DnsmasqSubnet "\<255.\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{2\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>" +syn match DnsmasqSubnet2 contained "\/\([0-4]\?[0-9]\)\>" +syn match DnsmasqRange contained "-" +syn match DnsmasqMac "\<\(\x\x\?:\)\{5}\x\x\?" + +syn match DnsmasqTime "\<\(\d\{1,3}\)[hm]\>" + +" String +syn match DnsmasqString "\".*\"" contains=@Spell +syn match DnsmasqString "'.*'" contains=@Spell + +" Comments +syn keyword DnsmasqTodo FIXME TODO XXX NOTE contained +syn match DnsmasqComment "\(^\|\s\+\)#.*$" contains=@Spell,DnsmasqTodo + +" highlight trailing spaces +syn match DnsmasqTrailSpace "[ \t]\+$" +syn match DnsmasqTrailSpace "[ \t]\+$" containedin=ALL + +syn match DnsmasqKeywordSpecial "\:"me=e-1 +syn match DnsmasqKeywordSpecial "\:"me=e-1 +syn match DnsmasqKeywordSpecial ",\"hs=s+1 contains=DnsmasqSpecial +syn match DnsmasqKeywordSpecial ",\"hs=s+1 contains=DnsmasqSpecial +syn match DnsmasqKeywordSpecial "\:"me=e-1 +syn match DnsmasqKeywordSpecial "\:"me=e-1 +syn match DnsmasqKeywordSpecial "\:"me=e-1 +syn match DnsmasqKeywordSpecial "\:"me=e-1 +syn match DnsmasqKeywordSpecial "\:"me=e-1 +syn match DnsmasqKeywordSpecial "\:"me=e-1 +syn match DnsmasqKeywordSpecial "\:"me=e-1 +syn match DnsmasqKeywordSpecial ",\"hs=s+1 contains=DnsmasqSpecial +syn match DnsmasqKeywordSpecial "\:"me=e-1 + +syn match DnsmasqKeyword "^\s*add-mac\>" +syn match DnsmasqKeyword "^\s*add-subnet\>" +syn match DnsmasqKeyword "^\s*addn-hosts\>" +syn match DnsmasqKeyword "^\s*address\>" +syn match DnsmasqKeyword "^\s*alias\>" +syn match DnsmasqKeyword "^\s*all-servers\>" +syn match DnsmasqKeyword "^\s*auth-zone\>" +syn match DnsmasqKeyword "^\s*bind-dynamic\>" +syn match DnsmasqKeyword "^\s*bind-interfaces\>" +syn match DnsmasqKeyword "^\s*bogus-nxdomain\>" +syn match DnsmasqKeyword "^\s*bogus-priv\>" +syn match DnsmasqKeyword "^\s*bootp-dynamic\>" +syn match DnsmasqKeyword "^\s*bridge-interface\>" +syn match DnsmasqKeyword "^\s*cache-size\>" +syn match DnsmasqKeyword "^\s*clear-on-reload\>" +syn match DnsmasqKeyword "^\s*cname\>" +syn match DnsmasqKeyword "^\s*conf-dir\>" +syn match DnsmasqKeyword "^\s*conf-file\>" +syn match DnsmasqKeyword "^\s*conntrack\>" +syn match DnsmasqKeyword "^\s*dhcp-alternate-port\>" +syn match DnsmasqKeyword "^\s*dhcp-authoritative\>" +syn match DnsmasqKeyword "^\s*dhcp-boot\>" +syn match DnsmasqKeyword "^\s*dhcp-broadcast\>" +syn match DnsmasqKeyword "^\s*dhcp-circuitid\>" +syn match DnsmasqKeyword "^\s*dhcp-client-update\>" +syn match DnsmasqKeyword "^\s*dhcp-duid\>" +syn match DnsmasqKeyword "^\s*dhcp-fqdn\>" +syn match DnsmasqKeyword "^\s*dhcp-generate-names\>" +syn match DnsmasqKeyword "^\s*dhcp-host\>" +syn match DnsmasqKeyword "^\s*dhcp-hostsfile\>" +syn match DnsmasqKeyword "^\s*dhcp-ignore\>" +syn match DnsmasqKeyword "^\s*dhcp-ignore-names\>" +syn match DnsmasqKeyword "^\s*dhcp-lease-max\>" +syn match DnsmasqKeyword "^\s*dhcp-leasefile\>" +syn match DnsmasqKeyword "^\s*dhcp-luascript\>" +syn match DnsmasqKeyword "^\s*dhcp-mac\>" +syn match DnsmasqKeyword "^\s*dhcp-match\>" +syn match DnsmasqKeyword "^\s*dhcp-no-override\>" +syn match DnsmasqKeyword "^\s*dhcp-option\>" +syn match DnsmasqKeyword "^\s*dhcp-option-force\>" +syn match DnsmasqKeyword "^\s*dhcp-optsfile\>" +syn match DnsmasqKeyword "^\s*dhcp-proxy\>" +syn match DnsmasqKeyword "^\s*dhcp-range\>" +syn match DnsmasqKeyword "^\s*dhcp-relay\>" +syn match DnsmasqKeyword "^\s*dhcp-remoteid\>" +syn match DnsmasqKeyword "^\s*dhcp-script\>" +syn match DnsmasqKeyword "^\s*dhcp-scriptuser\>" +syn match DnsmasqKeyword "^\s*dhcp-sequential-ip\>" +syn match DnsmasqKeyword "^\s*dhcp-subscrid\>" +syn match DnsmasqKeyword "^\s*dhcp-userclass\>" +syn match DnsmasqKeyword "^\s*dhcp-vendorclass\>" +syn match DnsmasqKeyword "^\s*dhcp-hostsdir\>" +syn match DnsmasqKeyword "^\s*dns-rr\>" +syn match DnsmasqKeyword "^\s*dnssec\>" +syn match DnsmasqKeyword "^\s*dnssec-check-unsigned\>" +syn match DnsmasqKeyword "^\s*dnssec-no-timecheck\>" +syn match DnsmasqKeyword "^\s*dnssec-timestamp\>" +syn match DnsmasqKeyword "^\s*dns-forward-max\>" +syn match DnsmasqKeyword "^\s*domain\>" +syn match DnsmasqKeyword "^\s*domain-needed\>" +syn match DnsmasqKeyword "^\s*edns-packet-max\>" +syn match DnsmasqKeyword "^\s*enable-dbus\>" +syn match DnsmasqKeyword "^\s*enable-ra\>" +syn match DnsmasqKeyword "^\s*enable-tftp\>" +syn match DnsmasqKeyword "^\s*except-interface\>" +syn match DnsmasqKeyword "^\s*expand-hosts\>" +syn match DnsmasqKeyword "^\s*filterwin2k\>" +syn match DnsmasqKeyword "^\s*group\>" +syn match DnsmasqKeyword "^\s*host-record\>" +syn match DnsmasqKeyword "^\s*interface\>" +syn match DnsmasqKeyword "^\s*interface-name\>" +syn match DnsmasqKeyword "^\s*ipset\>" +syn match DnsmasqKeyword "^\s*ignore-address\>" +syn match DnsmasqKeyword "^\s*keep-in-foreground\>" +syn match DnsmasqKeyword "^\s*leasefile-ro\>" +syn match DnsmasqKeyword "^\s*listen-address\>" +syn match DnsmasqKeyword "^\s*local\>" +syn match DnsmasqKeyword "^\s*localmx\>" +syn match DnsmasqKeyword "^\s*local-ttl\>" +syn match DnsmasqKeyword "^\s*local-service\>" +syn match DnsmasqKeyword "^\s*localise-queries\>" +syn match DnsmasqKeyword "^\s*log-async\>" +syn match DnsmasqKeyword "^\s*log-dhcp\>" +syn match DnsmasqKeyword "^\s*log-facility\>" +syn match DnsmasqKeyword "^\s*log-queries\>" +syn match DnsmasqKeyword "^\s*max-ttl\>" +syn match DnsmasqKeyword "^\s*max-cache-ttl\>" +syn match DnsmasqKeyword "^\s*min-cache-ttl\>" +syn match DnsmasqKeyword "^\s*min-port\>" +syn match DnsmasqKeyword "^\s*mx-host\>" +syn match DnsmasqKeyword "^\s*mx-target\>" +syn match DnsmasqKeyword "^\s*naptr-record\>" +syn match DnsmasqKeyword "^\s*neg-ttl\>" +syn match DnsmasqKeyword "^\s*no-daemon\>" +syn match DnsmasqKeyword "^\s*no-dhcp-interface\>" +syn match DnsmasqKeyword "^\s*no-hosts\>" +syn match DnsmasqKeyword "^\s*no-negcache\>" +syn match DnsmasqKeyword "^\s*no-ping\>" +syn match DnsmasqKeyword "^\s*no-poll\>" +syn match DnsmasqKeyword "^\s*no-resolv\>" +syn match DnsmasqKeyword "^\s*pid-file\>" +syn match DnsmasqKeyword "^\s*port\>" +syn match DnsmasqKeyword "^\s*proxy-dnssec\>" +syn match DnsmasqKeyword "^\s*ptr-record\>" +syn match DnsmasqKeyword "^\s*pxe-prompt\>" +syn match DnsmasqKeyword "^\s*pxe-service\>" +syn match DnsmasqKeyword "^\s*query-port\>" +syn match DnsmasqKeyword "^\s*quiet-ra\>" +syn match DnsmasqKeyword "^\s*quiet-dhcp\>" +syn match DnsmasqKeyword "^\s*quiet-dhcp6\>" +syn match DnsmasqKeyword "^\s*ra-param\>" +syn match DnsmasqKeyword "^\s*read-ethers\>" +syn match DnsmasqKeyword "^\s*rebind-domain-ok\>" +syn match DnsmasqKeyword "^\s*rebind-localhost-ok\>" +syn match DnsmasqKeyword "^\s*resolv-file\>" +syn match DnsmasqKeyword "^\s*rev-server\>" +syn match DnsmasqKeyword "^\s*selfmx\>" +syn match DnsmasqKeyword "^\s*server\>" +syn match DnsmasqKeyword "^\s*servers-file\>" +syn match DnsmasqKeyword "^\s*srv-host\>" +syn match DnsmasqKeyword "^\s*stop-dns-rebind\>" +syn match DnsmasqKeyword "^\s*strict-order\>" +syn match DnsmasqKeyword "^\s*synth-domain\>" +syn match DnsmasqKeyword "^\s*tag-if\>" +syn match DnsmasqKeyword "^\s*test\>" +syn match DnsmasqKeyword "^\s*tftp-max\>" +syn match DnsmasqKeyword "^\s*tftp-lowercase\>" +syn match DnsmasqKeyword "^\s*tftp-no-blocksize\>" +syn match DnsmasqKeyword "^\s*tftp-no-fail\>" +syn match DnsmasqKeyword "^\s*tftp-port-range\>" +syn match DnsmasqKeyword "^\s*tftp-root\>" +syn match DnsmasqKeyword "^\s*tftp-secure\>" +syn match DnsmasqKeyword "^\s*tftp-unique-root\>" +syn match DnsmasqKeyword "^\s*txt-record\>" +syn match DnsmasqKeyword "^\s*user\>" +syn match DnsmasqKeyword "^\s*version\>" + + +if b:dnsmasq_backrgound_light == 1 + hi def DnsmasqKeyword ctermfg=DarkGreen guifg=DarkGreen +else + hi def link DnsmasqKeyword Keyword +endif +hi def link DnsmasqKeywordSpecial Type +hi def link DnsmasqTodo Todo +hi def link DnsmasqSpecial Constant +hi def link DnsmasqIPv4 Identifier +hi def link DnsmasqSubnet2 DnsmasqSubnet +hi def link DnsmasqSubnet DnsmasqMac +hi def link DnsmasqRange DnsmasqMac +hi def link DnsmasqMac Preproc +hi def link DnsmasqTime Preproc +hi def link DnsmasqComment Comment +hi def link DnsmasqTrailSpace DiffDelete +hi def link DnsmasqString Constant +hi def link DnsmasqValues Normal + +let b:current_syntax = "dnsmasq" + +let &cpo = s:cpo_save +unlet s:cpo_save + diff --git a/.config/vim/syntax/docbk.vim b/.config/vim/syntax/docbk.vim new file mode 100644 index 0000000..809f289 --- /dev/null +++ b/.config/vim/syntax/docbk.vim @@ -0,0 +1,186 @@ +" Vim syntax file +" Language: DocBook +" Maintainer: Devin Weaver +" Last Updated By: Shlomi Fish +" URL: http://tritarget.com/pub/vim/syntax/docbk.vim +" Last Change: 2012 Nov 28 +" Version: 1.2 (and modified after that) +" Thanks to Johannes Zellner for the default to XML +" suggestion. + +" REFERENCES: +" http://docbook.org/ +" http://www.open-oasis.org/docbook/ +" + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Auto detect added by Bram Moolenaar +if !exists('b:docbk_type') + if expand('%:e') == "sgml" + let b:docbk_type = 'sgml' + else + let b:docbk_type = 'xml' + endif +endif + +if !exists('b:docbk_ver') + if exists('docbk_ver') + let b:docbk_ver = docbk_ver + else + let b:docbk_ver = 4 + endif +end + +if 'xml' == b:docbk_type + doau Syntax xml + syn cluster xmlTagHook add=docbkKeyword + syn cluster xmlRegionHook add=docbkRegion,docbkTitle,docbkRemark,docbkCite + syn case match +elseif 'sgml' == b:docbk_type + doau Syntax sgml + syn cluster sgmlTagHook add=docbkKeyword + syn cluster sgmlRegionHook add=docbkRegion,docbkTitle,docbkRemark,docbkCite + syn case ignore +endif + +syn keyword docbkKeyword abbrev abstract accel acronym address contained +syn keyword docbkKeyword affiliation alt anchor answer appendix contained +syn keyword docbkKeyword application area areaset areaspec arg contained +syn keyword docbkKeyword article artpagenums attribution audiodata contained +syn keyword docbkKeyword audioobject author authorgroup contained +syn keyword docbkKeyword authorinitials bibliocoverage bibliodiv contained +syn keyword docbkKeyword biblioentry bibliography biblioid contained +syn keyword docbkKeyword bibliolist bibliomisc bibliomixed contained +syn keyword docbkKeyword bibliomset biblioref bibliorelation contained +syn keyword docbkKeyword biblioset bibliosource blockquote book contained +syn keyword docbkKeyword bridgehead callout calloutlist caption contained +syn keyword docbkKeyword caution chapter citation citebiblioid contained +syn keyword docbkKeyword citerefentry citetitle city classname contained +syn keyword docbkKeyword classsynopsis classsynopsisinfo cmdsynopsis contained +syn keyword docbkKeyword co code col colgroup collab colophon contained +syn keyword docbkKeyword colspec command computeroutput confdates contained +syn keyword docbkKeyword confgroup confnum confsponsor conftitle contained +syn keyword docbkKeyword constant constructorsynopsis contractnum contained +syn keyword docbkKeyword contractsponsor contrib copyright coref contained +syn keyword docbkKeyword country database date dedication contained +syn keyword docbkKeyword destructorsynopsis edition editor email contained +syn keyword docbkKeyword emphasis entry entrytbl envar epigraph contained +syn keyword docbkKeyword equation errorcode errorname errortext contained +syn keyword docbkKeyword errortype example exceptionname fax contained +syn keyword docbkKeyword fieldsynopsis figure filename firstname contained +syn keyword docbkKeyword firstterm footnote footnoteref contained +syn keyword docbkKeyword foreignphrase formalpara funcdef funcparams contained +syn keyword docbkKeyword funcprototype funcsynopsis funcsynopsisinfo contained +syn keyword docbkKeyword function glossary glossdef glossdiv contained +syn keyword docbkKeyword glossentry glosslist glosssee glossseealso contained +syn keyword docbkKeyword glossterm group guibutton guiicon guilabel contained +syn keyword docbkKeyword guimenu guimenuitem guisubmenu hardware contained +syn keyword docbkKeyword holder honorific imagedata imageobject contained +syn keyword docbkKeyword imageobjectco important index indexdiv contained +syn keyword docbkKeyword indexentry indexterm informalequation contained +syn keyword docbkKeyword informalexample informalfigure contained +syn keyword docbkKeyword informaltable initializer inlineequation contained +syn keyword docbkKeyword inlinemediaobject interfacename issuenum contained +syn keyword docbkKeyword itemizedlist itermset jobtitle keycap contained +syn keyword docbkKeyword keycode keycombo keysym keyword keywordset contained +syn keyword docbkKeyword label legalnotice lineage lineannotation contained +syn keyword docbkKeyword link listitem literal literallayout contained +syn keyword docbkKeyword manvolnum markup mathphrase mediaobject contained +syn keyword docbkKeyword member menuchoice methodname methodparam contained +syn keyword docbkKeyword methodsynopsis modifier mousebutton msg contained +syn keyword docbkKeyword msgaud msgentry msgexplan msginfo msglevel contained +syn keyword docbkKeyword msgmain msgorig msgrel msgset msgsub contained +syn keyword docbkKeyword msgtext note olink ooclass ooexception contained +syn keyword docbkKeyword oointerface option optional orderedlist contained +syn keyword docbkKeyword orgdiv orgname otheraddr othercredit contained +syn keyword docbkKeyword othername package pagenums para paramdef contained +syn keyword docbkKeyword parameter part partintro personblurb contained +syn keyword docbkKeyword personname phone phrase pob postcode contained +syn keyword docbkKeyword preface primary primaryie printhistory contained +syn keyword docbkKeyword procedure productname productnumber contained +syn keyword docbkKeyword programlisting programlistingco prompt contained +syn keyword docbkKeyword property pubdate publisher publishername contained +syn keyword docbkKeyword qandadiv qandaentry qandaset question quote contained +syn keyword docbkKeyword refclass refdescriptor refentry contained +syn keyword docbkKeyword refentrytitle reference refmeta refmiscinfo contained +syn keyword docbkKeyword refname refnamediv refpurpose refsect1 contained +syn keyword docbkKeyword refsect2 refsect3 refsection refsynopsisdiv contained +syn keyword docbkKeyword releaseinfo remark replaceable returnvalue contained +syn keyword docbkKeyword revdescription revhistory revision contained +syn keyword docbkKeyword revnumber revremark row sbr screen screenco contained +syn keyword docbkKeyword screenshot secondary secondaryie sect1 contained +syn keyword docbkKeyword sect2 sect3 sect4 sect5 section see seealso contained +syn keyword docbkKeyword seealsoie seeie seg seglistitem contained +syn keyword docbkKeyword segmentedlist segtitle seriesvolnums set contained +syn keyword docbkKeyword setindex shortaffil shortcut sidebar contained +syn keyword docbkKeyword simpara simplelist simplemsgentry contained +syn keyword docbkKeyword simplesect spanspec state step contained +syn keyword docbkKeyword stepalternatives street subject subjectset contained +syn keyword docbkKeyword subjectterm subscript substeps subtitle contained +syn keyword docbkKeyword superscript surname symbol synopfragment contained +syn keyword docbkKeyword synopfragmentref synopsis systemitem table contained +syn keyword docbkKeyword task taskprerequisites taskrelated contained +syn keyword docbkKeyword tasksummary tbody td term termdef tertiary contained +syn keyword docbkKeyword tertiaryie textdata textobject tfoot tgroup contained +syn keyword docbkKeyword th thead tip title titleabbrev toc tocentry contained +syn keyword docbkKeyword token tr trademark type uri userinput contained +syn keyword docbkKeyword varargs variablelist varlistentry varname contained +syn keyword docbkKeyword videodata videoobject void volumenum contained +syn keyword docbkKeyword warning wordasword xref year contained + +if b:docbk_ver == 4 + syn keyword docbkKeyword ackno action appendixinfo articleinfo contained + syn keyword docbkKeyword authorblurb beginpage bibliographyinfo contained + syn keyword docbkKeyword blockinfo bookinfo chapterinfo contained + syn keyword docbkKeyword collabname corpauthor corpcredit contained + syn keyword docbkKeyword corpname glossaryinfo graphic graphicco contained + syn keyword docbkKeyword highlights indexinfo inlinegraphic contained + syn keyword docbkKeyword interface invpartnumber isbn issn lot contained + syn keyword docbkKeyword lotentry medialabel mediaobjectco contained + syn keyword docbkKeyword modespec objectinfo partinfo contained + syn keyword docbkKeyword prefaceinfo pubsnumber refentryinfo contained + syn keyword docbkKeyword referenceinfo refsect1info refsect2info contained + syn keyword docbkKeyword refsect3info refsectioninfo contained + syn keyword docbkKeyword refsynopsisdivinfo screeninfo sect1info contained + syn keyword docbkKeyword sect2info sect3info sect4info sect5info contained + syn keyword docbkKeyword sectioninfo setindexinfo setinfo contained + syn keyword docbkKeyword sgmltag sidebarinfo structfield contained + syn keyword docbkKeyword structname tocback tocchap tocfront contained + syn keyword docbkKeyword toclevel1 toclevel2 toclevel3 toclevel4 contained + syn keyword docbkKeyword toclevel5 tocpart ulink contained + +else + syn keyword docbkKeyword acknowledgements annotation arc contained + syn keyword docbkKeyword constraint constraintdef cover contained + syn keyword docbkKeyword extendedlink givenname info lhs locator contained + syn keyword docbkKeyword multimediaparam nonterminal org person contained + syn keyword docbkKeyword production productionrecap contained + syn keyword docbkKeyword productionset rhs tag tocdiv topic contained + +endif + +" Add special emphasis on some regions. Thanks to Rory Hunter for these ideas. +syn region docbkRegion start=""lc=10 end=""me=e-11 contains=xmlRegion,xmlEntity,sgmlRegion,sgmlEntity keepend +syn region docbkTitle start=""lc=7 end=""me=e-8 contains=xmlRegion,xmlEntity,sgmlRegion,sgmlEntity keepend +syn region docbkRemark start=""lc=8 end=""me=e-9 contains=xmlRegion,xmlEntity,sgmlRegion,sgmlEntity keepend +syn region docbkRemark start=""lc=9 end=""me=e-10 contains=xmlRegion,xmlEntity,sgmlRegion,sgmlEntity keepend +syn region docbkCite start=""lc=10 end=""me=e-11 contains=xmlRegion,xmlEntity,sgmlRegion,sgmlEntity keepend + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def DocbkBold term=bold cterm=bold gui=bold + +hi def link docbkKeyword Statement +hi def link docbkRegion DocbkBold +hi def link docbkTitle Title +hi def link docbkRemark Comment +hi def link docbkCite Constant + + +let b:current_syntax = "docbk" + +" vim: ts=8 diff --git a/.config/vim/syntax/docbksgml.vim b/.config/vim/syntax/docbksgml.vim new file mode 100644 index 0000000..544f3d2 --- /dev/null +++ b/.config/vim/syntax/docbksgml.vim @@ -0,0 +1,7 @@ +" Vim syntax file +" Language: DocBook SGML +" Maintainer: Johannes Zellner +" Last Change: Sam, 07 Sep 2002 17:20:46 CEST + +let b:docbk_type="sgml" +runtime syntax/docbk.vim diff --git a/.config/vim/syntax/docbkxml.vim b/.config/vim/syntax/docbkxml.vim new file mode 100644 index 0000000..181af2c --- /dev/null +++ b/.config/vim/syntax/docbkxml.vim @@ -0,0 +1,7 @@ +" Vim syntax file +" Language: DocBook XML +" Maintainer: Johannes Zellner +" Last Change: Sam, 07 Sep 2002 17:20:12 CEST + +let b:docbk_type="xml" +runtime syntax/docbk.vim diff --git a/.config/vim/syntax/dockerfile.vim b/.config/vim/syntax/dockerfile.vim new file mode 100644 index 0000000..f1d612f --- /dev/null +++ b/.config/vim/syntax/dockerfile.vim @@ -0,0 +1,44 @@ +" dockerfile.vim - Syntax highlighting for Dockerfiles +" Maintainer: Honza Pokorny +" Last Change: 2024 Dec 20 +" License: BSD + +" https://docs.docker.com/engine/reference/builder/ + +if exists("b:current_syntax") + finish +endif + +syntax include @JSON syntax/json.vim +unlet b:current_syntax + +syntax include @Shell syntax/sh.vim +unlet b:current_syntax + +syntax case ignore +syntax match dockerfileLinePrefix /\v^\s*(ONBUILD\s+)?\ze\S/ contains=dockerfileKeyword nextgroup=dockerfileInstruction skipwhite +syntax region dockerfileFrom matchgroup=dockerfileKeyword start=/\v^\s*(FROM)\ze(\s|$)/ skip=/\v\\\_./ end=/\v((^|\s)AS(\s|$)|$)/ contains=dockerfileOption + +syntax keyword dockerfileKeyword contained ADD ARG CMD COPY ENTRYPOINT ENV EXPOSE HEALTHCHECK LABEL MAINTAINER ONBUILD RUN SHELL STOPSIGNAL USER VOLUME WORKDIR +syntax match dockerfileOption contained /\v(^|\s)\zs--\S+/ + +syntax match dockerfileInstruction contained /\v<(\S+)>(\s+--\S+)*/ contains=dockerfileKeyword,dockerfileOption skipwhite nextgroup=dockerfileValue +syntax match dockerfileInstruction contained /\v<(ADD|COPY)>(\s+--\S+)*/ contains=dockerfileKeyword,dockerfileOption skipwhite nextgroup=dockerfileJSON +syntax match dockerfileInstruction contained /\v<(HEALTHCHECK)>(\s+--\S+)*/ contains=dockerfileKeyword,dockerfileOption skipwhite nextgroup=dockerfileInstruction +syntax match dockerfileInstruction contained /\v<(CMD|ENTRYPOINT|RUN)>/ contains=dockerfileKeyword skipwhite nextgroup=dockerfileShell +syntax match dockerfileInstruction contained /\v<(CMD|ENTRYPOINT|RUN)>\ze\s+\[/ contains=dockerfileKeyword skipwhite nextgroup=dockerfileJSON +syntax match dockerfileInstruction contained /\v<(SHELL|VOLUME)>/ contains=dockerfileKeyword skipwhite nextgroup=dockerfileJSON + +syntax region dockerfileString contained start=/\v"/ skip=/\v\\./ end=/\v"/ +syntax region dockerfileJSON contained keepend start=/\v\[/ skip=/\v\\\_./ end=/\v$/ contains=@JSON +syntax region dockerfileShell contained keepend start=/\v/ skip=/\v\\\_./ end=/\v$/ contains=@Shell +syntax region dockerfileValue contained keepend start=/\v/ skip=/\v\\\_./ end=/\v$/ contains=dockerfileString + +syntax region dockerfileComment start=/\v^\s*#/ end=/\v$/ contains=@Spell + +hi def link dockerfileString String +hi def link dockerfileKeyword Keyword +hi def link dockerfileComment Comment +hi def link dockerfileOption Special + +let b:current_syntax = "dockerfile" diff --git a/.config/vim/syntax/dosbatch.vim b/.config/vim/syntax/dosbatch.vim new file mode 100644 index 0000000..0c3e99b --- /dev/null +++ b/.config/vim/syntax/dosbatch.vim @@ -0,0 +1,164 @@ +" Vim syntax file +" Language: MS-DOS/Windows batch file (with NT command extensions) +" Maintainer: Mike Williams +" Filenames: *.bat +" Last Change: 3rd February 2024 +" 2024 Aug 14 by Vim Project: improve syntax (#15453) +" +" Options Flags: +" dosbatch_cmdextversion - 1 = Windows NT, 2 = Windows 2000 [default] +" dosbatch_colons_comment - any value to allow :: comments in code blocks +" + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Set default highlighting to Win2k +if !exists("dosbatch_cmdextversion") + let dosbatch_cmdextversion = 2 +endif + +" DOS bat files are case insensitive but case preserving! +syn case ignore + +syn keyword dosbatchTodo contained TODO + +" Dosbat keywords +syn keyword dosbatchStatement goto call exit +syn keyword dosbatchConditional if else +syn keyword dosbatchRepeat for + +" Some operators - first lot are case sensitive! +syn case match +syn keyword dosbatchOperator EQU NEQ LSS LEQ GTR GEQ +syn case ignore +syn match dosbatchOperator "\s[-+\*/%!~]\s" +syn match dosbatchOperator "=" +syn match dosbatchOperator "[-+\*/%]=" +syn match dosbatchOperator "\s\(&\||\|^\|<<\|>>\)=\=\s" +syn match dosbatchIfOperator "if\s\+\(\(not\)\=\s\+\)\=\(exist\|defined\|errorlevel\|cmdextversion\)\="lc=2 + +" String - using "'s is a convenience rather than a requirement outside of FOR +syn match dosbatchString "\"[^"]*\"" contains=dosbatchVariable,dosBatchArgument,dosbatchSpecialChar,@dosbatchNumber,@Spell +syn match dosbatchString "\|]\|\^\@<=[)>|]\)*"lc=4 contains=dosbatchVariable,dosbatchArgument,dosbatchSpecialChar,@dosbatchNumber,@Spell +syn match dosbatchEchoOperator "\^]" +syn match dosbatchSpecialChar "\$[a-hl-npqstv_$+]" +syn match dosbatchSpecialChar "%%" + +" Environment variables +syn match dosbatchIdentifier contained "\s\h\w*\>" +syn match dosbatchVariable "%\h\w*%" +syn match dosbatchVariable "%\h\w*:\*\=[^=]*=[^%]*%" +syn match dosbatchVariable "%\h\w*:\~[-]\=\d\+\(,[-]\=\d\+\)\=%" contains=dosbatchInteger +syn match dosbatchVariable "!\h\w*!" +syn match dosbatchVariable "!\h\w*:\*\=[^=]*=[^!]*!" +syn match dosbatchVariable "!\h\w*:\~[-]\=\d\+\(,[-]\=\d\+\)\=!" contains=dosbatchInteger +syn match dosbatchSet "\s\h\w*[+-]\==\{-1}" contains=dosbatchIdentifier,dosbatchOperator + +" Args to bat files and for loops, etc +syn match dosbatchArgument "%\(\d\|\*\)" +syn match dosbatchArgument "%%[a-z]\>" +if dosbatch_cmdextversion == 1 + syn match dosbatchArgument "%\~[fdpnxs]\+\(\($PATH:\)\=[a-z]\|\d\)\>" +else + syn match dosbatchArgument "%\~[fdpnxsatz]\+\(\($PATH:\)\=[a-z]\|\d\)\>" +endif + +" Line labels +syn match dosbatchLabel "^\s*:\s*\h\w*\>" +syn match dosbatchLabel "\<\(goto\|call\)\s\+:\h\w*\>"lc=4 +syn match dosbatchLabel "\"lc=4 +syn match dosbatchLabel ":\h\w*\>" + +" Comments - usual rem but also two colons as first non-space is an idiom +syn match dosbatchRemComment "^rem\($\|\s.*$\)"lc=3 contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell +syn match dosbatchRemComment "^@rem\($\|\s.*$\)"lc=4 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell +syn match dosbatchRemComment "\srem\($\|\s.*$\)"lc=4 contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell +syn match dosbatchRemComment "\s@rem\($\|\s.*$\)"lc=5 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell +syn match dosbatchColonComment "\s*:\s*:.*$" contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell + +" Commands code blocks +syn cluster dosbatchCodeBlockComment contains=dosbatchRemComment +if exists("dosbatch_colons_comment") + syn cluster dosbatchCodeBlockComment add=dosbatchColonComment +else + syn match dosbatchColonCommentErr contained "\s*:\s*:.*$" +endif +syn match dosbatchColonCommentErr contained "\s*:\s*:[^)]*\(\(\n\s*\)\?)\)\@=" +syn region dosbatchCodeBlock transparent start=+(+ end=+)+ contains=dosbatchString,dosbatchVariable,dosBatchArgument,@dosbatchNumber,dosbatchImplicit,dosbatchStatement,dosbatchConditional,dosbatchRepeat,dosbatchOperator,dosbatchIfOperator,@dosbatchCodeBlockComment,dosbatchColonCommentErr,dosbatchCodeBlock +syn match dosbatchCodeBlockErr ")" + +syn sync match dosbatchSyncCodeBlock grouphere NONE "^)\s*$" + +syn keyword dosbatchImplicit append assoc at attrib break cacls cd chcp chdir +syn keyword dosbatchImplicit chkdsk chkntfs cls cmd color comp compact convert copy +syn keyword dosbatchImplicit date del dir diskcomp diskcopy doskey echo endlocal +syn keyword dosbatchImplicit erase fc find findstr format ftype +syn keyword dosbatchImplicit graftabl help keyb label md mkdir mode more move +syn keyword dosbatchImplicit path pause popd print prompt pushd rd recover rem +syn keyword dosbatchImplicit ren rename replace restore rmdir set setlocal shift +syn keyword dosbatchImplicit sort start subst time title tree type ver verify +syn keyword dosbatchImplicit vol xcopy + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link dosbatchTodo Todo +hi def link dosbatchError Error +hi def link dosbatchCodeBlockErr dosbatchError +hi def link dosbatchColonCommentErr dosbatchError + +hi def link dosbatchStatement Statement +hi def link dosbatchCommands dosbatchStatement +hi def link dosbatchLabel Label +hi def link dosbatchConditional Conditional +hi def link dosbatchRepeat Repeat + +hi def link dosbatchOperator Operator +hi def link dosbatchEchoOperator dosbatchOperator +hi def link dosbatchIfOperator dosbatchOperator + +hi def link dosbatchArgument Identifier +hi def link dosbatchIdentifier Identifier +hi def link dosbatchVariable dosbatchIdentifier + +hi def link dosbatchSpecialChar SpecialChar +hi def link dosbatchString String +hi def link dosbatchNumber Number +hi def link dosbatchInteger dosbatchNumber +hi def link dosbatchHex dosbatchNumber +hi def link dosbatchBinary dosbatchNumber +hi def link dosbatchOctal dosbatchNumber + +hi def link dosbatchComment Comment +hi def link dosbatchRemComment dosbatchComment +hi def link dosbatchColonComment dosbatchComment + +hi def link dosbatchImplicit Function + +hi def link dosbatchSwitch Special + +hi def link dosbatchCmd PreProc + + +let b:current_syntax = "dosbatch" + +" vim: ts=8 diff --git a/.config/vim/syntax/dosini.vim b/.config/vim/syntax/dosini.vim new file mode 100644 index 0000000..e8212b6 --- /dev/null +++ b/.config/vim/syntax/dosini.vim @@ -0,0 +1,49 @@ +" Vim syntax file +" Language: Configuration File (ini file) for MSDOS/MS Windows +" Version: 2.4 +" Original Author: Sean M. McKee +" Previous Maintainer: Nima Talebi +" Current Maintainer: Hong Xu +" Homepage: http://www.vim.org/scripts/script.php?script_id=3747 +" Repository: https://github.com/xuhdev/syntax-dosini.vim +" Last Change: 2024 Sept 08 + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" using of line-continuation requires cpo&vim +let s:cpo_save = &cpo +set cpo&vim + +" shut case off +syn case ignore + +syn match dosiniLabel "^.\{-}\ze\s*=" nextgroup=dosiniNumber,dosiniValue +syn match dosiniValue "=\zs.*" +syn match dosiniNumber "=\zs\s*\d\+\s*$" +syn match dosiniNumber "=\zs\s*\d*\.\d\+\s*$" +syn match dosiniNumber "=\zs\s*\d\+e[+-]\=\d\+\s*$" +syn region dosiniHeader start="^\s*\[" end="\]" +syn match dosiniComment "^[#;].*$" contains=@Spell +syn region dosiniSection start="\s*\[.*\]" end="\ze\s*\[.*\]" fold + \ contains=dosiniLabel,dosiniValue,dosiniNumber,dosiniHeader,dosiniComment + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link dosiniNumber Number +hi def link dosiniHeader Special +hi def link dosiniComment Comment +hi def link dosiniLabel Type +hi def link dosiniValue String + + +let b:current_syntax = "dosini" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: sts=2 sw=2 et diff --git a/.config/vim/syntax/dot.vim b/.config/vim/syntax/dot.vim new file mode 100644 index 0000000..68a0f57 --- /dev/null +++ b/.config/vim/syntax/dot.vim @@ -0,0 +1,121 @@ +" Language: Dot +" Filenames: *.dot +" Maintainer: Markus Mottl +" URL: http://www.ocaml.info/vim/syntax/dot.vim +" Last Change: 2021 Mar 24 - better attr + escape string matching, new keywords (Farbod Salamat-Zadeh) +" 2011 May 17 - improved identifier matching + two new keywords +" 2001 May 04 - initial version + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +let s:keepcpo = &cpo +set cpo&vim + +" Errors +syn match dotParErr ")" +syn match dotBrackErr "]" +syn match dotBraceErr "}" + +" Enclosing delimiters +syn region dotEncl transparent matchgroup=dotParEncl start="(" matchgroup=dotParEncl end=")" contains=ALLBUT,dotParErr +syn region dotEncl transparent matchgroup=dotBrackEncl start="\[" matchgroup=dotBrackEncl end="\]" contains=ALLBUT,dotBrackErr +syn region dotEncl transparent matchgroup=dotBraceEncl start="{" matchgroup=dotBraceEncl end="}" contains=ALLBUT,dotBraceErr + +" Comments +syn region dotComment start="//" end="$" contains=dotComment,dotTodo +syn region dotComment start="/\*" end="\*/" contains=dotComment,dotTodo +syn keyword dotTodo contained TODO FIXME XXX + +" Strings +syn region dotString start=+"+ skip=+\\\\\|\\"+ end=+"+ + +" Escape strings +syn match dotEscString /\v\\(N|G|E|T|H|L)/ containedin=dotString +syn match dotEscString /\v\\(n|l|r)/ containedin=dotString + +" General keywords +syn keyword dotKeyword graph digraph subgraph node edge strict + +" Node, edge and graph attributes +syn keyword dotType _background area arrowhead arrowsize arrowtail bb bgcolor + \ center charset class clusterrank color colorscheme comment compound + \ concentrate constraint Damping decorate defaultdist dim dimen dir + \ diredgeconstraints distortion dpi edgehref edgetarget edgetooltip + \ edgeURL epsilon esep fillcolor fixedsize fontcolor fontname fontnames + \ fontpath fontsize forcelabels gradientangle group head_lp headclip + \ headhref headlabel headport headtarget headtooltip headURL height href + \ id image imagepath imagepos imagescale inputscale K label label_scheme + \ labelangle labeldistance labelfloat labelfontcolor labelfontname + \ labelfontsize labelhref labeljust labelloc labeltarget labeltooltip + \ labelURL landscape layer layerlistsep layers layerselect layersep + \ layout len levels levelsgap lhead lheight lp ltail lwidth margin + \ maxiter mclimit mindist minlen mode model mosek newrank nodesep + \ nojustify normalize notranslate nslimit nslimit1 ordering orientation + \ outputorder overlap overlap_scaling overlap_shrink pack packmode pad + \ page pagedir pencolor penwidth peripheries pin pos quadtree quantum + \ rank rankdir ranksep ratio rects regular remincross repulsiveforce + \ resolution root rotate rotation samehead sametail samplepoints scale + \ searchsize sep shape shapefile showboxes sides size skew smoothing + \ sortv splines start style stylesheet tail_lp tailclip tailhref + \ taillabel tailport tailtarget tailtooltip tailURL target tooltip + \ truecolor URL vertices viewport voro_margin weight width xdotversion + \ xlabel xlp z + +" Special chars +syn match dotKeyChar "=" +syn match dotKeyChar ";" +syn match dotKeyChar "->" +syn match dotKeyChar "--" + +" Identifier +syn match dotIdentifier /\<\w\+\(:\w\+\)\?\>/ + +" Synchronization +syn sync minlines=50 +syn sync maxlines=500 + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_dot_syntax_inits") + if version < 508 + let did_dot_syntax_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + HiLink dotParErr Error + HiLink dotBraceErr Error + HiLink dotBrackErr Error + + HiLink dotComment Comment + HiLink dotTodo Todo + + HiLink dotParEncl Keyword + HiLink dotBrackEncl Keyword + HiLink dotBraceEncl Keyword + + HiLink dotKeyword Keyword + HiLink dotType Type + HiLink dotKeyChar Keyword + + HiLink dotString String + HiLink dotEscString Keyword + HiLink dotIdentifier Identifier + + delcommand HiLink +endif + +let b:current_syntax = "dot" + +let &cpo = s:keepcpo +unlet s:keepcpo + +" vim: ts=8 diff --git a/.config/vim/syntax/doxygen.vim b/.config/vim/syntax/doxygen.vim new file mode 100644 index 0000000..357c430 --- /dev/null +++ b/.config/vim/syntax/doxygen.vim @@ -0,0 +1,633 @@ +" DoxyGen syntax highlighting extension for c/c++/idl/java +" Language: doxygen on top of c, cpp, idl, java, php +" Maintainer: Michael Geddes +" Author: Michael Geddes +" Last Change: December 2020 +" Version: 1.30 +" +" Copyright 2004-2020 Michael Geddes +" Please feel free to use, modify & distribute all or part of this script, +" providing this copyright message remains. +" I would appreciate being acknowledged in any derived scripts, and would +" appreciate and welcome any updates, modifications or suggestions. + +" NOTE: Comments welcome! +" +" There are two variables that control the syntax highlighting produced by this +" script: +" doxygen_enhanced_colour - Use the (non-standard) original colours designed +" for this highlighting. +" doxygen_my_rendering - Disable the HTML bold/italic/underline rendering. +" +" A brief description without '.' or '!' will cause the end comment +" character to be marked as an error. You can define the colour of this using +" the highlight doxygenErrorComment. +" A \link without an \endlink will cause an error highlight on the end-comment. +" This is defined by doxygenLinkError +" +" The variable g:doxygen_codeword_font can be set to the guifont for marking \c +" words - a 'typewriter' like font normally. Spaces must be escaped. It can +" also be set to any highlight attribute. Alternatively, a highlight for doxygenCodeWord +" can be used to override it. +" +" By default, highlighting is done assuming you have the JAVADOC_AUTOBRIEF +" setting turned on in your Doxygen configuration. If you don't, you +" can set the variable g:doxygen_javadoc_autobrief to 0 to have the +" highlighting more accurately reflect the way Doxygen will interpret your +" comments. +" +" Support for cpp, c, idl, doxygen and php. +" +" Special thanks to: Wu Yongwei, Toby Allsopp +" + +if exists('b:suppress_doxygen') + unlet b:suppress_doxygen + finish +endif + +if exists('b:current_syntax') && b:current_syntax =~ 'doxygen' && !exists('doxygen_debug_script') + finish +endif + +let s:cpo_save = &cpo +try + set cpo&vim + + " Start of Doxygen syntax highlighting: + " + + " C/C++ Style line comments + syn match doxygenCommentWhite +\s*\ze/\*\(\*/\)\@![*!]+ containedin=phpRegion + syn match doxygenCommentWhite +\s*\ze//[/!]+ containedin=phpRegion + syn match doxygenCommentWhite +\s*\ze/\*\(\*/\)\@![*!]+ + syn match doxygenCommentWhite +\s*\ze//[/!]+ containedin=phpRegion + + syn region doxygenComment start=+/\*\(\*/\)\@![*!]+ end=+\*/+ contains=doxygenSyncStart,doxygenStart,doxygenTODO,doxygenLeadingWhite keepend fold containedin=phpRegion + syn region doxygenCommentL start=+//[/!]<\@!+me=e-1 end=+$+ contains=doxygenLeadingLWhite,doxygenStartL,@Spell keepend skipwhite skipnl nextgroup=doxygenCommentWhite2 fold containedin=phpRegion + syn region doxygenCommentL start=+//[/!]<+me=e-2 end=+$+ contains=doxygenStartL,@Spell keepend skipwhite skipnl fold containedin=phpRegion + syn region doxygenCommentL start=+//@\ze[{}]+ end=+$+ contains=doxygenGroupDefine,doxygenGroupDefineSpecial,@Spell fold containedin=phpRegion + syn region doxygenComment start=+/\*@\ze[{}]+ end=+\*/+ contains=doxygenGroupDefine,doxygenGroupDefineSpecial,@Spell fold containedin=phpRegion + + " Single line brief followed by multiline comment. + syn match doxygenCommentWhite2 +\_s*\ze/\*\(\*/\)\@![*!]+ contained nextgroup=doxygenComment2 + syn region doxygenComment2 start=+/\*\(\*/\)\@![*!]+ end=+\*/+ contained contains=doxygenSyncStart2,doxygenStart2,doxygenTODO keepend fold + " This helps with sync-ing as for some reason, syncing behaves differently to a normal region, and the start pattern does not get matched. + syn match doxygenSyncStart2 +[^*/]+ contained nextgroup=doxygenBody,doxygenPrev,doxygenStartSpecial,doxygenSkipComment,doxygenStartSkip2 skipwhite skipnl + + " Skip empty lines at the start for when comments start on the 2nd/3rd line. + syn match doxygenStartSkip2 +^\s*\*[^/]+me=e-1 contained nextgroup=doxygenBody,doxygenStartSpecial,doxygenStartSkipWhite skipwhite skipnl + syn match doxygenStartSkip2 +^\s*\*$+ contained nextgroup=doxygenBody,doxygenStartSpecial,doxygenStartSkipWhite skipwhite skipnl + syn match doxygenStart2 +/\*[*!]+ contained nextgroup=doxygenBody,doxygenPrev,doxygenStartSpecial,doxygenStartSkip2 skipwhite skipnl + + + " Match the Starting pattern (effectively creating the start of a BNF) + if !exists('g:doxygen_javadoc_autobrief') || g:doxygen_javadoc_autobrief + syn match doxygenStart +/\*[*!]+ contained nextgroup=doxygenBrief,doxygenPrev,doxygenFindBriefSpecial,doxygenStartSpecial,doxygenStartSkipWhite,doxygenPage skipwhite skipnl + syn match doxygenLeadingLWhite +\s\++ contained nextgroup=doxygenPrevL,doxygenBriefL,doxygenSpecial + syn match doxygenStartL +//[/!]+ contained nextgroup=doxygenLeaingLWhite,doxygenPrevL,doxygenBriefL,doxygenSpecial + " Match the first sentence as a brief comment + if ! exists('g:doxygen_end_punctuation') + let g:doxygen_end_punctuation='[.]' + endif + + exe 'syn region doxygenBrief contained start=+[\\@]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]+ start=+\(^\s*\)\@\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\@!\)\@=+ contains=doxygenSmallSpecial,doxygenContinueCommentWhite,doxygenLeadingWhite,doxygenBriefEndComment,doxygenFindBriefSpecial,doxygenSmallSpecial,@doxygenHtmlGroup,doxygenTODO,doxygenHyperLink,doxygenHashLink,@Spell skipnl nextgroup=doxygenBody' + + syn match doxygenBriefEndComment +\*/+ contained + + exe 'syn region doxygenBriefL start=+@\k\@!\|[\\@]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@]+ start=+\<+ skip=+'.doxygen_end_punctuation.'\S+ end=+'.doxygen_end_punctuation.'\|$+ contained contains=doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup,@Spell keepend' + syn match doxygenPrevL +<+ contained nextgroup=doxygenBriefL,doxygenSpecial skipwhite + else + syn match doxygenStart +/\*[*!]+ contained nextgroup=doxygenBody,doxygenPrev,doxygenFindBriefSpecial,doxygenStartSpecial,doxygenStartSkipWhite,doxygenPage skipwhite skipnl + syn match doxygenStartL +//[/!]+ contained nextgroup=doxygenLeadingLWhite,doxygenPrevL,doxygenLine,doxygenSpecial + syn match doxygenLeadingLWhite +\s\++ contained nextgroup=doxygenPrevL,doxygenLine,doxygenSpecial + syn region doxygenLine start=+@\k\@!\|[\\@]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@<]+ start=+\<+ end='$' contained contains=doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup,@Spell keepend + syn match doxygenPrevL +<+ contained nextgroup=doxygenLine,doxygenSpecial skipwhite + + endif + + " This helps with sync-ing as for some reason, syncing behaves differently to a normal region, and the start pattern does not get matched. + syn match doxygenSyncStart +\ze[^*/]+ contained nextgroup=doxygenBrief,doxygenPrev,doxygenStartSpecial,doxygenFindBriefSpecial,doxygenStartSkipWhite,doxygenPage skipwhite skipnl + " Match an [@\]brief so that it moves to body-mode. + " + " + " syn match doxygenBriefLine contained + syn match doxygenBriefSpecial contained +[@\\]+ nextgroup=doxygenBriefWord skipwhite + " syn region doxygenFindBriefSpecial start=+[@\\]brief\>+ end=+\(\n\s*\*\=\s*\([@\\]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\@!\)\|\s*$\)\@=+ keepend contains=doxygenBriefSpecial nextgroup=doxygenBody keepend skipwhite skipnl contained + syn region doxygenFindBriefSpecial start=+[@\\]brief\>+ skip=+^\s*\(\*/\@!\s*\)\=\(\<\|[@\\]\<\([npcbea]\>\|em\>\|ref\|link\>\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]\)+ end=+^+ keepend contains=doxygenBriefSpecial nextgroup=doxygenBody keepend skipwhite skipnl contained + + + +" end=+\(\n\s*\*\=\s*\([@\\]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\@!\)\|\s*$\)\@=+ +"syn region doxygenBriefLine contained start=+\<\k+ skip=+^\s*\(\*/\@!\s*\)\=\(\<\|[@\\]\<\([npcbea]\>\|em\>\|ref\|link\>\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]\)+ end=+^+ contains=doxygenContinueCommentWhite,doxygenSmallSpecial,@doxygenHtmlGroup,doxygenTODO,doxygenHyperLink,doxygenHashLink,@Spell skipwhite keepend matchgroup=xxx +syn region doxygenBriefLine contained start=+\<\k+ skip=+^\s*\(\*/\@!\s*\)\=\(\<\|[@\\]\<\([npcbea]\>\|em\>\|ref\|link\>\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]\)+ end=+^+ skipwhite keepend matchgroup=xxx contains=@Spell +" syn region doxygenBriefLine matchgroup=xxxy contained start=+\<\k.\++ skip=+^\s*\k+ end=+end+ skipwhite keepend +"doxygenFindBriefSpecial, + "" syn region doxygenSpecialMultilineDesc start=+.\++ contained contains=doxygenSpecialContinueCommentWhite,doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup,@Spell skipwhite keepend + + + " Match a '<' for applying a comment to the previous element. + syn match doxygenPrev +<+ contained nextgroup=doxygenBrief,doxygenBody,doxygenSpecial,doxygenStartSkipWhite skipwhite + +if exists("c_comment_strings") + " These are anti-Doxygen comments. If there are more than two asterisks or 3 '/'s + " then turn the comments back into normal C comments. + syn region cComment start="/\*\*\*" end="\*/" contains=@cCommentGroup,cCommentString,cCharacter,cNumbersCom,cSpaceError + syn region cCommentL start="////" skip="\\$" end="$" contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError +else + syn region cComment start="/\*\*\*" end="\*/" contains=@cCommentGroup,cSpaceError + syn region cCommentL start="////" skip="\\$" end="$" contains=@cCommentGroup,cSpaceError +endif + + " Special commands at the start of the area: starting with '@' or '\' + syn region doxygenStartSpecial contained start=+[@\\]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\@!+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=doxygenSpecial nextgroup=doxygenSkipComment skipnl keepend + syn match doxygenSkipComment contained +^\s*\*/\@!+ nextgroup=doxygenBrief,doxygenStartSpecial,doxygenFindBriefSpecial,doxygenPage skipwhite + + "syn region doxygenBodyBit contained start=+$+ + + " The main body of a doxygen comment. + syn region doxygenBody contained start=+\(/\*[*!]\)\@|]\@|#]\+[-0-9A-Za-z_%=+*/!~>|]\@!\|\\[\\<>&.]@\|[.,]\w\@=\|::\|([^)]*)\|&[0-9a-zA-Z]\{2,7};\)\+' + exe 'syn region doxygenSpecial'.a:name.'Word contained start=+'.a:kword.'+ end=+\(\_s\+'.mx.'\)\@<=[-a-zA-Z_0-9+*/^%|~!=&\\]\@!+ skipwhite contains=doxygenContinueCommentWhite,doxygen'.a:name.'Word' + exe 'syn match doxygen'.a:name.'Word contained "\_s\@<='.mx.'" contains=doxygenHtmlSpecial,@Spell keepend' + endfun + call s:DxyCreateSmallSpecial('p', 'Code') + call s:DxyCreateSmallSpecial('c', 'Code') + call s:DxyCreateSmallSpecial('b', 'Bold') + call s:DxyCreateSmallSpecial('e', 'Emphasised') + call s:DxyCreateSmallSpecial('em', 'Emphasised') + call s:DxyCreateSmallSpecial('a', 'Argument') + call s:DxyCreateSmallSpecial('ref', 'Ref') + delfun s:DxyCreateSmallSpecial + + syn match doxygenSmallSpecial contained +[@\\]\(\<[npcbea]\>\|\\|\\|\\|f\$\|[$\\&<>#]\)\@=+ nextgroup=doxygenOtherLink,doxygenHyperLink,doxygenHashLink,doxygenFormula,doxygenSymbol,doxygenSpecial.*Word + + " Now for special characters + syn match doxygenSpecial contained +[@\\]\(\<[npcbea]\>\|\\|\\>\|\#]\)\@!+ nextgroup=doxygenParam,doxygenTParam,doxygenRetval,doxygenBriefWord,doxygenBold,doxygenBOther,doxygenOther,doxygenOtherTODO,doxygenOtherWARN,doxygenOtherBUG,doxygenPage,doxygenGroupDefine,doxygenCodeRegion,doxygenVerbatimRegion,doxygenDotRegion + " doxygenOtherLink,doxygenSymbol,doxygenFormula,doxygenErrorSpecial,doxygenSpecial.*Word + " + syn match doxygenGroupDefine contained +@\@<=[{}]+ + syn match doxygenGroupDefineSpecial contained +@\ze[{}]+ + + syn match doxygenErrorSpecial contained +\s+ + + " Match parameters and retvals (highlighting the first word as special). + syn match doxygenParamDirection contained "\v\[(\s*in>((]\s*\[|\s*,\s*)out>)=|out>((]\s*\[|\s*,\s*)in>)=)\]" nextgroup=doxygenParamName skipwhite + syn keyword doxygenParam contained param nextgroup=doxygenParamName,doxygenParamDirection skipwhite + syn keyword doxygenTParam contained tparam nextgroup=doxygenParamName skipwhite + syn match doxygenParamName contained +[A-Za-z0-9_:]\++ nextgroup=doxygenSpecialMultilineDesc skipwhite + syn keyword doxygenRetval contained retval throw throws exception nextgroup=doxygenReturnValue skipwhite + syn match doxygenReturnValue contained +\S\++ nextgroup=doxygenSpecialMultilineDesc skipwhite + + " Match one line identifiers. + syn keyword doxygenOther contained addindex anchor + \ dontinclude endhtmlonly endlatexonly showinitializer hideinitializer + \ example htmlonly image include includelineno ingroup latexonly line + \ overload relates related relatesalso relatedalso sa skip skipline + \ until verbinclude version addtogroup htmlinclude copydoc dotfile + \ xmlonly endxmlonly + \ nextgroup=doxygenSpecialOnelineDesc copybrief copydetails copyright dir extends + \ implements + + syn region doxygenCodeRegion contained matchgroup=doxygenOther start=+\+ matchgroup=doxygenOther end=+[\\@]\@<=\+ contains=doxygenCodeRegionSpecial,doxygenContinueCommentWhite,doxygenErrorComment,@NoSpell + syn match doxygenCodeRegionSpecial contained +[\\@]\(endcode\>\)\@=+ + + syn region doxygenVerbatimRegion contained matchgroup=doxygenOther start=+\+ matchgroup=doxygenOther end=+[\\@]\@<=\+ contains=doxygenVerbatimRegionSpecial,doxygenContinueCommentWhite,doxygenErrorComment,@NoSpell + syn match doxygenVerbatimRegionSpecial contained +[\\@]\(endverbatim\>\)\@=+ + + if exists('b:current_syntax') + let b:doxygen_syntax_save=b:current_syntax + unlet b:current_syntax + endif + + syn include @Dotx syntax/dot.vim + + if exists('b:doxygen_syntax_save') + let b:current_syntax=b:doxygen_syntax_save + unlet b:doxygen_syntax_save + else + unlet b:current_syntax + endif + + syn region doxygenDotRegion contained matchgroup=doxygenOther start=+\+ matchgroup=doxygenOther end=+[\\@]\@<=\+ contains=doxygenDotRegionSpecial,doxygenErrorComment,doxygenContinueCommentWhite,@NoSpell,@Dotx + syn match doxygenDotRegionSpecial contained +[\\@]\(enddot\>\)\@=+ + + " Match single line identifiers. + syn keyword doxygenBOther contained class enum file fn mainpage interface + \ namespace struct typedef union var def name + \ nextgroup=doxygenSpecialTypeOnelineDesc + + syn keyword doxygenOther contained par nextgroup=doxygenHeaderLine + syn region doxygenHeaderLine start=+.+ end=+^+ contained skipwhite nextgroup=doxygenSpecialMultilineDesc + " Match the start of other multiline comments. + syn keyword doxygenOther contained arg author authors date deprecated li return returns result see invariant note post pre remarks since test internal nextgroup=doxygenSpecialMultilineDesc + syn keyword doxygenOtherTODO contained todo attention nextgroup=doxygenSpecialMultilineDesc + syn keyword doxygenOtherWARN contained warning nextgroup=doxygenSpecialMultilineDesc + syn keyword doxygenOtherBUG contained bug nextgroup=doxygenSpecialMultilineDesc + + " Handle \link, \endlink, highlighting the link-to and the link text bits separately. + syn region doxygenOtherLink matchgroup=doxygenOther start=+\+ end=+[\@]\@<=endlink\>+ contained contains=doxygenLinkWord,doxygenContinueCommentWhite,doxygenLinkError,doxygenEndlinkSpecial + syn match doxygenEndlinkSpecial contained +[\\@]\zeendlink\>+ + + syn match doxygenLinkWord "[_a-zA-Z:#()][_a-z0-9A-Z:#()]*\>" contained skipnl nextgroup=doxygenLinkRest,doxygenContinueLinkComment + syn match doxygenLinkRest +[^*@\\]\|\*/\@!\|[@\\]\(endlink\>\)\@!+ contained skipnl nextgroup=doxygenLinkRest,doxygenContinueLinkComment + syn match doxygenContinueLinkComment contained +^\s*\*\=[^/]+me=e-1 nextgroup=doxygenLinkRest + syn match doxygenLinkError "\*/" contained + " #Link highlighting. + syn match doxygenHashLink /\(\h\w*\)\?#\(\.\w\@=\|\w\+\|::\|()\)\+/ contained contains=doxygenHashSpecial + syn match doxygenHashSpecial /#/ contained + syn match doxygenHyperLink /\(\s\|^\s*\*\?\)\@<=\(http\|https\|ftp\):\/\/[-0-9a-zA-Z_?&=+#%/.!':;@~]\+/ contained + + " Handle \page. This does not use doxygenBrief. + syn match doxygenPage "[\\@]page\>"me=s+1 contained skipwhite nextgroup=doxygenPagePage + syn keyword doxygenPagePage page contained skipwhite nextgroup=doxygenPageIdent + syn region doxygenPageDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend skipwhite skipnl nextgroup=doxygenBody + syn match doxygenPageIdent "\<\w\+\>" contained nextgroup=doxygenPageDesc + + " Handle section + syn keyword doxygenOther defgroup section subsection subsubsection weakgroup contained skipwhite nextgroup=doxygenSpecialIdent + syn region doxygenSpecialSectionDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend skipwhite skipnl nextgroup=doxygenContinueCommentWhite + syn match doxygenSpecialIdent "\<\w\+\>" contained nextgroup=doxygenSpecialSectionDesc + + " Does the one-line description for the one-line type identifiers. + syn region doxygenSpecialTypeOnelineDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend + syn region doxygenSpecialOnelineDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend + + " Handle the multiline description for the multiline type identifiers. + " Continue until an 'empty' line (can contain a '*' continuation) or until the + " next whole-line @ command \ command. + syn region doxygenSpecialMultilineDesc start=+.\++ skip=+^\s*\(\*/\@!\s*\)\=\(\<\|[@\\]\<\([npcbea]\>\|em\>\|ref\|link\>\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]\)+ end=+^+ contained contains=doxygenSpecialContinueCommentWhite,doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup,@Spell skipwhite keepend + +" syn match doxygenSpecialContinueComment contained +^\s*\*/\@!\s*+ nextgroup=doxygenSpecial skipwhite + syn match doxygenSpecialContinueCommentWhite contained +^\s*\ze\*+ nextgroup=doxygenSpecialContinueComment + syn match doxygenSpecialContinueComment contained +\*/\@!+ + + + " Handle special cases 'bold' and 'group' + syn keyword doxygenBold contained bold nextgroup=doxygenSpecialHeading + syn keyword doxygenBriefWord contained brief nextgroup=doxygenBriefLine skipwhite + syn match doxygenSpecialHeading +.\++ contained skipwhite + syn keyword doxygenGroup contained group nextgroup=doxygenGroupName skipwhite + syn keyword doxygenGroupName contained +\k\++ nextgroup=doxygenSpecialOnelineDesc skipwhite + + " Handle special symbol identifiers @$, @\, @$ etc + syn match doxygenSymbol contained +[$\\&<>#n]+ + + " Simplistic handling of formula regions + syn region doxygenFormula contained matchgroup=doxygenFormulaEnds start=+f\$+ end=+[@\\]f\$+ contains=doxygenFormulaSpecial,doxygenFormulaOperator + syn match doxygenFormulaSpecial contained +[@\\]\(f[^$]\|[^f]\)+me=s+1 nextgroup=doxygenFormulaKeyword,doxygenFormulaEscaped + syn match doxygenFormulaEscaped contained "." + syn match doxygenFormulaKeyword contained "[a-z]\+" + syn match doxygenFormulaOperator contained +[_^]+ + + syn region doxygenFormula contained matchgroup=doxygenFormulaEnds start=+f\[+ end=+[@\\]f]+ contains=doxygenFormulaSpecial,doxygenFormulaOperator,doxygenAtom + syn region doxygenAtom contained transparent matchgroup=doxygenFormulaOperator start=+{+ end=+}+ contains=doxygenAtom,doxygenFormulaSpecial,doxygenFormulaOperator + + " Add TODO highlighting. + syn keyword doxygenTODO contained TODO README XXX FIXME + + " Supported HTML subset. Not perfect, but okay. + syn case ignore + syn region doxygenHtmlTag contained matchgroup=doxygenHtmlCh start=+\v\+ skip=+\\<\|\<\k\+=\("[^"]*"\|'[^']*\)+ end=+>+ contains=doxygenHtmlCmd,doxygenContinueCommentWhite,doxygenHtmlVar + syn keyword doxygenHtmlCmd contained b i em strong u img a br p center code dfn dl dd dt hr h1 h2 h3 li ol ul pre small sub sup table tt var caption nextgroup=doxygenHtmlVar skipwhite + syn keyword doxygenHtmlVar contained src alt longdesc name height width usemap ismap href type nextgroup=doxygenHtmlEqu skipwhite + syn match doxygenHtmlEqu contained +=+ nextgroup=doxygenHtmlExpr skipwhite + syn match doxygenHtmlExpr contained +"\(\\.\|[^"]\)*"\|'\(\\.\|[^']\)*'+ nextgroup=doxygenHtmlVar skipwhite + syn case match + syn match doxygenHtmlSpecial contained "&\(copy\|quot\|[AEIOUYaeiouy]uml\|[AEIOUYaeiouy]acute\|[AEIOUaeiouy]grave\|[AEIOUaeiouy]circ\|[ANOano]tilde\|szlig\|[Aa]ring\|nbsp\|gt\|lt\|amp\);" + + syn cluster doxygenHtmlGroup contains=doxygenHtmlCode,doxygenHtmlBold,doxygenHtmlUnderline,doxygenHtmlItalic,doxygenHtmlSpecial,doxygenHtmlTag,doxygenHtmlLink + + syn cluster doxygenHtmlTop contains=@Spell,doxygenHtmlSpecial,doxygenHtmlTag,doxygenContinueCommentWhite + " Html Support + syn region doxygenHtmlLink contained start=+<[aA]\>\s*\(\n\s*\*\s*\)\=\(\(name\|href\)=\("[^"]*"\|'[^']*'\)\)\=\s*>+ end=++me=e-4 contains=@doxygenHtmlTop + hi link doxygenHtmlLink Underlined + + syn region doxygenHtmlBold contained start="\c" end="\c
    "me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderline,doxygenHtmlBoldItalic,@Spell + syn region doxygenHtmlBold contained start="\c" end="\c"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderline,doxygenHtmlBoldItalic,@Spell + syn region doxygenHtmlBoldUnderline contained start="\c" end="\c
    "me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderlineItalic,@Spell + syn region doxygenHtmlBoldItalic contained start="\c" end="\c"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldItalicUnderline,@Spell + syn region doxygenHtmlBoldItalic contained start="\c" end="\c"me=e-5 contains=@doxygenHtmlTop,doxygenHtmlBoldItalicUnderline,@Spell + syn region doxygenHtmlBoldUnderlineItalic contained start="\c" end="\c
    "me=e-4 contains=@doxygenHtmlTop,@Spell + syn region doxygenHtmlBoldUnderlineItalic contained start="\c" end="\c"me=e-5 contains=@doxygenHtmlTop,@Spell + syn region doxygenHtmlBoldItalicUnderline contained start="\c" end="\c"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderlineItalic,@Spell + + syn region doxygenHtmlUnderline contained start="\c" end="\c
    "me=e-4 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBold,doxygenHtmlUnderlineItalic,@Spell + syn region doxygenHtmlUnderlineBold contained start="\c" end="\c"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBoldItalic,@Spell + syn region doxygenHtmlUnderlineBold contained start="\c" end="\c"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBoldItalic,@Spell + syn region doxygenHtmlUnderlineItalic contained start="\c" end="\c"me=e-4 contains=@doxygenHtmlTop,htmUnderlineItalicBold,@Spell + syn region doxygenHtmlUnderlineItalic contained start="\c" end="\c"me=e-5 contains=@doxygenHtmlTop,htmUnderlineItalicBold,@Spell + syn region doxygenHtmlUnderlineItalicBold contained start="\c" end="\c"me=e-4 contains=@doxygenHtmlTop,@Spell + syn region doxygenHtmlUnderlineItalicBold contained start="\c" end="\c"me=e-9 contains=@doxygenHtmlTop,@Spell + syn region doxygenHtmlUnderlineBoldItalic contained start="\c" end="\c"me=e-4 contains=@doxygenHtmlTop,@Spell + syn region doxygenHtmlUnderlineBoldItalic contained start="\c" end="\c"me=e-5 contains=@doxygenHtmlTop,@Spell + + syn region doxygenHtmlItalic contained start="\c" end="\c"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicBold,doxygenHtmlItalicUnderline,@Spell + syn region doxygenHtmlItalic contained start="\c" end="\c"me=e-5 contains=@doxygenHtmlTop,@Spell + syn region doxygenHtmlItalicBold contained start="\c" end="\c"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicBoldUnderline,@Spell + syn region doxygenHtmlItalicBold contained start="\c" end="\c"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlItalicBoldUnderline,@Spell + syn region doxygenHtmlItalicBoldUnderline contained start="\c" end="\c
    "me=e-4 contains=@doxygenHtmlTop,@Spell + syn region doxygenHtmlItalicUnderline contained start="\c" end="\c
    "me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicUnderlineBold,@Spell + syn region doxygenHtmlItalicUnderlineBold contained start="\c" end="\c"me=e-4 contains=@doxygenHtmlTop,@Spell + syn region doxygenHtmlItalicUnderlineBold contained start="\c" end="\c"me=e-9 contains=@doxygenHtmlTop,@Spell + + syn region doxygenHtmlCode contained start="\c" end="\c"me=e-7 contains=@doxygenHtmlTop,@NoSpell + + " Prevent the doxygen contained matches from leaking into the c/rc groups. + syn cluster cParenGroup add=doxygen.* + syn cluster cParenGroup remove=doxygenComment,doxygenCommentL + syn cluster cPreProcGroup add=doxygen.* + syn cluster cMultiGroup add=doxygen.* + syn cluster rcParenGroup add=doxygen.* + syn cluster rcParenGroup remove=doxygenComment,doxygenCommentL + syn cluster rcGroup add=doxygen.* + + let s:my_syncolor=0 + if !exists(':SynColor') + command -nargs=+ SynColor hi def + let s:my_syncolor=1 + endif + + let s:my_synlink=0 + if !exists(':SynLink') + command -nargs=+ SynLink hi def link + let s:my_synlink=1 + endif + + try + "let did_doxygen_syntax_inits = &background + hi doxygen_Dummy guifg=black + + fun! s:Doxygen_Hilights_Base() + SynLink doxygenHtmlSpecial Special + SynLink doxygenHtmlVar Type + SynLink doxygenHtmlExpr String + + SynLink doxygenSmallSpecial SpecialChar + + SynLink doxygenSpecialCodeWord doxygenSmallSpecial + SynLink doxygenSpecialBoldWord doxygenSmallSpecial + SynLink doxygenSpecialEmphasisedWord doxygenSmallSpecial + SynLink doxygenSpecialArgumentWord doxygenSmallSpecial + + " SynColor doxygenFormulaKeyword cterm=bold ctermfg=DarkMagenta guifg=DarkMagenta gui=bold + SynLink doxygenFormulaKeyword Keyword + "SynColor doxygenFormulaEscaped ctermfg=DarkMagenta guifg=DarkMagenta gui=bold + SynLink doxygenFormulaEscaped Special + SynLink doxygenFormulaOperator Operator + SynLink doxygenFormula Statement + SynLink doxygenSymbol Constant + SynLink doxygenSpecial Special + SynLink doxygenFormulaSpecial Special + "SynColor doxygenFormulaSpecial ctermfg=DarkBlue guifg=DarkBlue + endfun + call s:Doxygen_Hilights_Base() + + fun! s:Doxygen_Hilights() + " Pick a sensible default for 'codeword'. + let font='' + if exists('g:doxygen_codeword_font') + if g:doxygen_codeword_font !~ '\<\k\+=' + let font='font='.g:doxygen_codeword_font + else + let font=g:doxygen_codeword_font + endif + else + " Try and pick a font (only some platforms have been tested). + if has('gui_running') + if has('gui_gtk2') + if &guifont == '' + let font="font='FreeSerif 12'" + else + let font="font='".substitute(&guifont, '^.\{-}\(\d\+\)$', 'FreeSerif \1','')."'" + endif + + elseif has('gui_win32') || has('gui_win16') || has('gui_win95') + + if exists('g:doxygen_use_bitsream_vera') && g:doxygen_use_bitsream_vera + let font_base='Bitstream_Vera_Sans_Mono' + else + let font_base='Lucida_Console' + endif + if &guifont == '' + let font='font='.font_base.':h10' + else + let font='font='.matchstr(substitute(&guifont, '^[^:]*', font_base,''),'[^,]*') + endif + elseif has('gui_athena') || has('gui_gtk') || &guifont=~'^\(-[^-]\+\)\{14}' + if &guifont == '' + let font='font=-b&h-lucidatypewriter-medium-r-normal-*-*-140-*-*-m-*-iso8859-1' + else + " let font='font='.substitute(&guifont,'^\(-[^-]\+\)\{7}-\([0-9]\+\).*', '-b\&h-lucidatypewriter-medium-r-normal-*-*-\2-*-*-m-*-iso8859-1','') + " The above line works, but it is hard to expect the combination of + " the two fonts will look good. + endif + elseif has('gui_kde') + " let font='font=Bitstream\ Vera\ Sans\ Mono/12/-1/5/50/0/0/0/0/0' + endif + endif + endif + if font=='' | let font='gui=bold' | endif + exe 'SynColor doxygenCodeWord term=bold cterm=bold '.font + if (exists('g:doxygen_enhanced_color') && g:doxygen_enhanced_color) || (exists('g:doxygen_enhanced_colour') && g:doxygen_enhanced_colour) + if &background=='light' + SynColor doxygenComment ctermfg=DarkRed guifg=DarkRed + SynColor doxygenBrief cterm=bold ctermfg=Cyan guifg=DarkBlue gui=bold + SynColor doxygenBody ctermfg=DarkBlue guifg=DarkBlue + SynColor doxygenSpecialTypeOnelineDesc cterm=bold ctermfg=DarkRed guifg=firebrick3 gui=bold + SynColor doxygenBOther cterm=bold ctermfg=DarkMagenta guifg=#aa50aa gui=bold + SynColor doxygenParam ctermfg=DarkGray guifg=#aa50aa + SynColor doxygenParamName cterm=italic ctermfg=DarkBlue guifg=DeepSkyBlue4 gui=italic,bold + SynColor doxygenSpecialOnelineDesc cterm=bold ctermfg=DarkCyan guifg=DodgerBlue3 gui=bold + SynColor doxygenSpecialHeading cterm=bold ctermfg=DarkBlue guifg=DeepSkyBlue4 gui=bold + SynColor doxygenPrev ctermfg=DarkGreen guifg=DarkGreen + else + SynColor doxygenComment ctermfg=LightRed guifg=LightRed + SynColor doxygenBrief cterm=bold ctermfg=Cyan ctermbg=darkgrey guifg=LightBlue gui=Bold,Italic + SynColor doxygenBody ctermfg=Cyan guifg=LightBlue + SynColor doxygenSpecialTypeOnelineDesc cterm=bold ctermfg=Red guifg=firebrick3 gui=bold + SynColor doxygenBOther cterm=bold ctermfg=Magenta guifg=#aa50aa gui=bold + SynColor doxygenParam ctermfg=LightGray guifg=LightGray + SynColor doxygenParamName cterm=italic ctermfg=LightBlue guifg=LightBlue gui=italic,bold + SynColor doxygenSpecialOnelineDesc cterm=bold ctermfg=LightCyan guifg=LightCyan gui=bold + SynColor doxygenSpecialHeading cterm=bold ctermfg=LightBlue guifg=LightBlue gui=bold + SynColor doxygenPrev ctermfg=LightGreen guifg=LightGreen + endif + SynLink doxygenValue doxygenParamName + else + SynLink doxygenComment SpecialComment + SynLink doxygenBrief Statement + SynLink doxygenBody Comment + SynLink doxygenSpecialTypeOnelineDesc Statement + SynLink doxygenBOther Constant + SynLink doxygenParam SpecialComment + SynLink doxygenParamName Underlined + SynLink doxygenSpecialOnelineDesc Statement + SynLink doxygenSpecialHeading Statement + SynLink doxygenPrev SpecialComment + SynLink doxygenValue Constant + endif + SynLink doxygenTParam doxygenParam + + endfun + + call s:Doxygen_Hilights() + + syn match doxygenLeadingWhite +\(^\s*\*\)\@<=\s*+ contained + + " This is still a proposal, but it is probably fine. However, it doesn't + " work when 'syntax' is set in a modeline, catch the security error. + try + aug doxygengroup + au! + au Syntax UserColor_reset nested call s:Doxygen_Hilights_Base() + au Syntax UserColor_{on,reset,enable} nested call s:Doxygen_Hilights() + aug END + catch /E12:/ + endtry + + + SynLink doxygenBody Comment + SynLink doxygenLine doxygenBody + SynLink doxygenTODO Todo + SynLink doxygenOtherTODO Todo + SynLink doxygenOtherWARN Todo + SynLink doxygenOtherBUG Todo + SynLink doxygenLeadingLWhite doxygenBody + + SynLink doxygenErrorSpecial Error + SynLink doxygenErrorEnd Error + SynLink doxygenErrorComment Error + SynLink doxygenLinkError Error + SynLink doxygenBriefSpecial doxygenSpecial + SynLink doxygenHashSpecial doxygenSpecial + SynLink doxygenGroupDefineSpecial doxygenSpecial + SynLink doxygenEndlinkSpecial doxygenSpecial + SynLink doxygenCodeRegionSpecial doxygenSpecial + SynLink doxygenVerbatimRegionSpecial doxygenSpecial + SynLink doxygenDotRegionSpecial doxygenSpecial + SynLink doxygenGroupDefine doxygenParam + + SynLink doxygenSpecialMultilineDesc doxygenSpecialOnelineDesc + SynLink doxygenFormulaEnds doxygenSpecial + SynLink doxygenBold doxygenParam + SynLink doxygenBriefWord doxygenParam + SynLink doxygenRetval doxygenParam + SynLink doxygenOther doxygenParam + SynLink doxygenStart doxygenComment + SynLink doxygenStart2 doxygenStart + SynLink doxygenComment2 doxygenComment + SynLink doxygenCommentL doxygenComment + SynLink doxygenContinueComment doxygenComment + SynLink doxygenSpecialContinueComment doxygenComment + SynLink doxygenSkipComment doxygenComment + SynLink doxygenEndComment doxygenComment + SynLink doxygenStartL doxygenComment + SynLink doxygenBriefEndComment doxygenComment + SynLink doxygenPrevL doxygenPrev + SynLink doxygenBriefL doxygenBrief + SynLink doxygenBriefLine doxygenBrief + SynLink doxygenHeaderLine doxygenSpecialHeading + SynLink doxygenCommentWhite Normal + SynLink doxygenCommentWhite2 doxygenCommentWhite + SynLink doxygenContinueCommentWhite doxygenCommentWhite + SynLink doxygenStartSkipWhite doxygenContinueCommentWhite + SynLink doxygenLinkWord doxygenParamName + SynLink doxygenLinkRest doxygenSpecialMultilineDesc + SynLink doxygenHyperLink doxygenLinkWord + SynLink doxygenHashLink doxygenLinkWord + SynLink doxygenReturnValue doxygenValue + + SynLink doxygenPage doxygenSpecial + SynLink doxygenPagePage doxygenBOther + SynLink doxygenPageIdent doxygenParamName + SynLink doxygenPageDesc doxygenSpecialTypeOnelineDesc + + SynLink doxygenSpecialIdent doxygenPageIdent + SynLink doxygenSpecialSectionDesc doxygenSpecialMultilineDesc + + SynLink doxygenSpecialRefWord doxygenOther + SynLink doxygenRefWord doxygenPageIdent + SynLink doxygenContinueLinkComment doxygenComment + + SynLink doxygenHtmlCh Function + SynLink doxygenHtmlCmd Statement + SynLink doxygenHtmlBoldItalicUnderline doxygenHtmlBoldUnderlineItalic + SynLink doxygenHtmlUnderlineBold doxygenHtmlBoldUnderline + SynLink doxygenHtmlUnderlineItalicBold doxygenHtmlBoldUnderlineItalic + SynLink doxygenHtmlUnderlineBoldItalic doxygenHtmlBoldUnderlineItalic + SynLink doxygenHtmlItalicUnderline doxygenHtmlUnderlineItalic + SynLink doxygenHtmlItalicBold doxygenHtmlBoldItalic + SynLink doxygenHtmlItalicBoldUnderline doxygenHtmlBoldUnderlineItalic + SynLink doxygenHtmlItalicUnderlineBold doxygenHtmlBoldUnderlineItalic + SynLink doxygenHtmlLink Underlined + + SynLink doxygenParamDirection StorageClass + + + if !exists("doxygen_my_rendering") && !exists("html_my_rendering") + SynColor doxygenBoldWord term=bold cterm=bold gui=bold + SynColor doxygenEmphasisedWord term=italic cterm=italic gui=italic + SynLink doxygenArgumentWord doxygenEmphasisedWord + SynLink doxygenHtmlCode doxygenCodeWord + SynLink doxygenHtmlBold doxygenBoldWord + SynColor doxygenHtmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline + SynColor doxygenHtmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic + SynColor doxygenHtmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline + SynColor doxygenHtmlUnderline term=underline cterm=underline gui=underline + SynColor doxygenHtmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline + SynColor doxygenHtmlItalic term=italic cterm=italic gui=italic + endif + + finally + if s:my_synlink | delcommand SynLink | endif + if s:my_syncolor | delcommand SynColor | endif + endtry + + if &syntax=='idl' + syn cluster idlCommentable add=doxygenComment,doxygenCommentL + endif + + "syn sync clear + "syn sync maxlines=500 + "syn sync minlines=50 + syn sync match doxygenComment groupthere cComment "/\@ +" Last change: Wed Apr 25 18:50:01 PDT 2001 +" Extensions: drac.*,*.drac,*.drc,*.lvs,*.lpe +" Comment: Dracula is an industry-standard language created by CADENCE (a +" company specializing in Electronics Design Automation), for +" the purposes of Design Rule Checking, Layout vs. Schematic +" verification, and Layout Parameter Extraction. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Ignore case +syn case ignore + +" A bunch of useful Dracula keywords + +"syn match draculaIdentifier + +syn keyword draculaStatement indisk primary outdisk printfile system +syn keyword draculaStatement mode scale resolution listerror keepdata +syn keyword draculaStatement datatype by lt gt output label range touch +syn keyword draculaStatement inside outside within overlap outlib +syn keyword draculaStatement schematic model unit parset +syn match draculaStatement "flag-\(non45\|acuteangle\|offgrid\)" +syn match draculaStatement "text-pri-only" +syn match draculaStatement "[=&]" +syn match draculaStatement "\[[^,]*\]" +syn match draculastatement "^ *\(sel\|width\|ext\|enc\|area\|shrink\|grow\|length\)" +syn match draculastatement "^ *\(or\|not\|and\|select\|size\|connect\|sconnect\|int\)" +syn match draculastatement "^ *\(softchk\|stamp\|element\|parasitic cap\|attribute cap\)" +syn match draculastatement "^ *\(flagnon45\|lextract\|equation\|lpeselect\|lpechk\|attach\)" +syn match draculaStatement "\(temporary\|connect\)-layer" +syn match draculaStatement "program-dir" +syn match draculaStatement "status-command" +syn match draculaStatement "batch-queue" +syn match draculaStatement "cnames-csen" +syn match draculaStatement "filter-lay-opt" +syn match draculaStatement "filter-sch-opt" +syn match draculaStatement "power-node" +syn match draculaStatement "ground-node" +syn match draculaStatement "subckt-name" + +syn match draculaType "\*description" +syn match draculaType "\*input-layer" +syn match draculaType "\*operation" +syn match draculaType "\*end" + +syn match draculaComment ";.*" + +syn match draculaPreProc "^#.*" + +"Modify the following as needed. The trade-off is performance versus +"functionality. +syn sync lines=50 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link draculaIdentifier Identifier +hi def link draculaStatement Statement +hi def link draculaType Type +hi def link draculaComment Comment +hi def link draculaPreProc PreProc + + +let b:current_syntax = "dracula" + +" vim: ts=8 diff --git a/.config/vim/syntax/dsl.vim b/.config/vim/syntax/dsl.vim new file mode 100644 index 0000000..95c7843 --- /dev/null +++ b/.config/vim/syntax/dsl.vim @@ -0,0 +1,38 @@ +" Vim syntax file +" Language: DSSSL +" Maintainer: Johannes Zellner +" Last Change: Tue, 27 Apr 2004 14:54:59 CEST +" Filenames: *.dsl +" $Id: dsl.vim,v 1.1 2004/06/13 19:13:31 vimboss Exp $ + +if exists("b:current_syntax") | finish | endif + +runtime syntax/xml.vim +syn cluster xmlRegionHook add=dslRegion,dslComment +syn cluster xmlCommentHook add=dslCond + +" EXAMPLE: +" +" (define html-manifest #f) +" ]]> +" +" NOTE: 'contains' the same as xmlRegion, except xmlTag / xmlEndTag +syn region dslCond matchgroup=dslCondDelim start="\[\_[^[]\+\[" end="]]" contains=xmlCdata,@xmlRegionCluster,xmlComment,xmlEntity,xmlProcessing,@xmlRegionHook + +" NOTE, that dslRegion and dslComment do both NOT have a 'contained' +" argument, so this will also work in plain dsssl documents. + +syn region dslRegion matchgroup=Delimiter start=+(+ end=+)+ contains=dslRegion,dslString,dslComment +syn match dslString +"\_[^"]*"+ contained +syn match dslComment +;.*$+ contains=dslTodo +syn keyword dslTodo contained TODO FIXME XXX display + +" The default highlighting. +hi def link dslTodo Todo +hi def link dslString String +hi def link dslComment Comment +" compare the following with xmlCdataStart / xmlCdataEnd +hi def link dslCondDelim Type + +let b:current_syntax = "dsl" diff --git a/.config/vim/syntax/dtd.vim b/.config/vim/syntax/dtd.vim new file mode 100644 index 0000000..58f07c9 --- /dev/null +++ b/.config/vim/syntax/dtd.vim @@ -0,0 +1,161 @@ +" Vim syntax file +" Language: DTD (Document Type Definition for XML) +" Maintainer: Christian Brabandt +" Repository: https://github.com/chrisbra/vim-xml-ftplugin +" Previous Maintainer: Johannes Zellner +" Author: Daniel Amyot +" Last Changed: Sept 24, 2019 +" Filenames: *.dtd +" +" REFERENCES: +" http://www.w3.org/TR/html40/ +" http://www.w3.org/TR/NOTE-html-970421 +" +" TODO: +" - improve synchronizing. + +if exists("b:current_syntax") + finish +endif +let s:dtd_cpo_save = &cpo +set cpo&vim + +if !exists("dtd_ignore_case") + " I prefer having the case takes into consideration. + syn case match +else + syn case ignore +endif + + +" the following line makes the opening highlighted using 'dtdFunction'. +" +" PROVIDES: @dtdTagHook +" +syn region dtdTag matchgroup=dtdFunction + \ start=++ matchgroup=NONE + \ contains=dtdTag,dtdTagName,dtdError,dtdComment,dtdString,dtdAttrType,dtdAttrDef,dtdEnum,dtdParamEntityInst,dtdParamEntityDecl,dtdCard,@dtdTagHook + +if !exists("dtd_no_tag_errors") + " mark everything as an error which starts with a + +endif + +" if this is a html like comment highlight also +" the opening as Comment. +syn region dtdComment start=++ contains=dtdTodo,@Spell + + +" proper DTD comment +syn region dtdComment contained start=+--+ end=+--+ contains=dtdTodo,@Spell + + +" Start tags (keywords). This is contained in dtdFunction. +" Note that everything not contained here will be marked +" as error. +syn match dtdTagName contained +" + \ matchgroup=NONE contains=dtdParamEntityPunct + syn match dtdParamEntityPunct contained "\." + + " declarations + " syn region dtdParamEntityDecl oneline matchgroup=dtdParamEntityDPunct start=+" contains=dtdParamEntityDPunct + syn match dtdParamEntityDecl + (njj) +" Last change: 2001 Sep 02 + +" These are used with Claudio Fleiner's html.vim in the standard distribution. +" +" Still very hackish. The 'dtml attributes' and 'dtml methods' have been +" hacked out of the Zope Quick Reference in case someone finds something +" sensible to do with them. I certainly haven't. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" First load the HTML syntax +runtime! syntax/html.vim + +syn case match + +" This doesn't have any effect. Does it need to be moved to above/ +" if !exists("main_syntax") +" let main_syntax = 'dtml' +" endif + +" dtml attributes +syn keyword dtmlAttribute ac_inherited_permissions access_debug_info contained +syn keyword dtmlAttribute acquiredRolesAreUsedBy all_meta_types assume_children AUTH_TYPE contained +syn keyword dtmlAttribute AUTHENTICATED_USER AUTHENTICATION_PATH BASE0 batch-end-index batch-size contained +syn keyword dtmlAttribute batch-start-index bobobase_modification_time boundary branches contained +syn keyword dtmlAttribute branches_expr capitalize cb_dataItems cb_dataValid cb_isCopyable contained +syn keyword dtmlAttribute cb_isMoveable changeClassId classDefinedAndInheritedPermissions contained +syn keyword dtmlAttribute classDefinedPermissions classInheritedPermissions collapse-all column contained +syn keyword dtmlAttribute connected connectionIsValid CONTENT_LENGTH CONTENT_TYPE cook cookies contained +syn keyword dtmlAttribute COPY count- createInObjectManager da_has_single_argument dav__allprop contained +syn keyword dtmlAttribute dav__init dav__propnames dav__propstat dav__validate default contained +syn keyword dtmlAttribute delClassAttr DELETE Destination DestinationURL digits discard contained +syn keyword dtmlAttribute disposition document_src e encode enter etc expand-all expr File contained +syn keyword dtmlAttribute filtered_manage_options filtered_meta_types first- fmt footer form contained +syn keyword dtmlAttribute GATEWAY_INTERFACE get_local_roles get_local_roles_for_userid contained +syn keyword dtmlAttribute get_request_var_or_attr get_size get_size get_valid_userids getAttribute contained +syn keyword dtmlAttribute getAttributeNode getAttributes getChildNodes getClassAttr getContentType contained +syn keyword dtmlAttribute getData getDocType getDocumentElement getElementsByTagName getFirstChild contained +syn keyword dtmlAttribute getImplementation getLastChild getLength getName getNextSibling contained +syn keyword dtmlAttribute getNodeName getNodeType getNodeValue getOwnerDocument getParentNode contained +syn keyword dtmlAttribute getPreviousSibling getProperty getPropertyType getSize getSize getSize contained +syn keyword dtmlAttribute get_size getTagName getUser getUserName getUserNames getUsers contained +syn keyword dtmlAttribute has_local_roles hasChildNodes hasProperty HEAD header hexdigits HTML contained +syn keyword dtmlAttribute html_quote HTMLFile id index_html index_objects indexes contained +syn keyword dtmlAttribute inheritedAttribute items last- leave leave_another leaves letters LOCK contained +syn keyword dtmlAttribute locked_in_version lower lowercase mailfrom mailhost mailhost_list mailto contained +syn keyword dtmlAttribute manage manage_ methods manage_access manage_acquiredPermissions contained +syn keyword dtmlAttribute manage_addConferaTopic manage_addDocument manage_addDTMLDocument contained +syn keyword dtmlAttribute manage_addDTMLMethod manage_addFile manage_addFolder manage_addImage contained +syn keyword dtmlAttribute manage_addLocalRoles manage_addMailHost manage_addPermission contained +syn keyword dtmlAttribute manage_addPrincipiaFactory manage_addProduct manage_addProperty contained +syn keyword dtmlAttribute manage_addUserFolder manage_addZClass manage_addZGadflyConnection contained +syn keyword dtmlAttribute manage_addZGadflyConnectionForm manage_advanced manage_afterAdd contained +syn keyword dtmlAttribute manage_afterClone manage_beforeDelete manage_changePermissions contained +syn keyword dtmlAttribute manage_changeProperties manage_clone manage_CopyContainerFirstItem contained +syn keyword dtmlAttribute manage_copyObjects manage_cutObjects manage_defined_roles contained +syn keyword dtmlAttribute manage_delLocalRoles manage_delObjects manage_delProperties contained +syn keyword dtmlAttribute manage_distribute manage_edit manage_editedDialog manage_editProperties contained +syn keyword dtmlAttribute manage_editRoles manage_exportObject manage_FTPget manage_FTPlist contained +syn keyword dtmlAttribute manage_FTPstat manage_get_product_readme__ manage_getPermissionMapping contained +syn keyword dtmlAttribute manage_haveProxy manage_help manage_importObject manage_listLocalRoles contained +syn keyword dtmlAttribute manage_options manage_pasteObjects manage_permission contained +syn keyword dtmlAttribute manage_propertiesForm manage_proxy manage_renameObject manage_role contained +syn keyword dtmlAttribute manage_setLocalRoles manage_setPermissionMapping contained +syn keyword dtmlAttribute manage_subclassableClassNames manage_test manage_testForm contained +syn keyword dtmlAttribute manage_undo_transactions manage_upload manage_users manage_workspace contained +syn keyword dtmlAttribute management_interface mapping math max- mean- median- meta_type min- contained +syn keyword dtmlAttribute MKCOL modified_in_version MOVE multiple name navigate_filter new_version contained +syn keyword dtmlAttribute newline_to_br next next-batches next-sequence next-sequence-end-index contained +syn keyword dtmlAttribute next-sequence-size next-sequence-start-index no manage_access None contained +syn keyword dtmlAttribute nonempty normalize nowrap null Object Manager objectIds objectItems contained +syn keyword dtmlAttribute objectMap objectValues octdigits only optional OPTIONS orphan overlap contained +syn keyword dtmlAttribute PARENTS PATH_INFO PATH_TRANSLATED permission_settings contained +syn keyword dtmlAttribute permissionMappingPossibleValues permissionsOfRole pi port contained +syn keyword dtmlAttribute possible_permissions previous previous-batches previous-sequence contained +syn keyword dtmlAttribute previous-sequence-end-index previous-sequence-size contained +syn keyword dtmlAttribute previous-sequence-start-index PrincipiaFind PrincipiaSearchSource contained +syn keyword dtmlAttribute propdict propertyIds propertyItems propertyLabel propertyMap propertyMap contained +syn keyword dtmlAttribute propertyValues PROPFIND PROPPATCH PUT query_day query_month QUERY_STRING contained +syn keyword dtmlAttribute query_year quoted_input quoted_report raise_standardErrorMessage random contained +syn keyword dtmlAttribute read read_raw REMOTE_ADDR REMOTE_HOST REMOTE_IDENT REMOTE_USER REQUEST contained +syn keyword dtmlAttribute REQUESTED_METHOD required RESPONSE reverse rolesOfPermission save schema contained +syn keyword dtmlAttribute SCRIPT_NAME sequence-end sequence-even sequence-index contained +syn keyword dtmlAttribute sequence-index-var- sequence-item sequence-key sequence-Letter contained +syn keyword dtmlAttribute sequence-letter sequence-number sequence-odd sequence-query contained +syn keyword dtmlAttribute sequence-roman sequence-Roman sequence-start sequence-step-end-index contained +syn keyword dtmlAttribute sequence-step-size sequence-step-start-index sequence-var- SERVER_NAME contained +syn keyword dtmlAttribute SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE setClassAttr setName single contained +syn keyword dtmlAttribute size skip_unauthorized smtphost sort spacify sql_quote SQLConnectionIDs contained +syn keyword dtmlAttribute standard-deviation- standard-deviation-n- standard_html_footer contained +syn keyword dtmlAttribute standard_html_header start String string subject SubTemplate superValues contained +syn keyword dtmlAttribute tabs_path_info tag test_url_ text_content this thousands_commas title contained +syn keyword dtmlAttribute title_and_id title_or_id total- tpURL tpValues TRACE translate tree-c contained +syn keyword dtmlAttribute tree-colspan tree-e tree-item-expanded tree-item-url tree-level contained +syn keyword dtmlAttribute tree-root-url tree-s tree-state type undoable_transactions UNLOCK contained +syn keyword dtmlAttribute update_data upper uppercase url url_quote URLn user_names contained +syn keyword dtmlAttribute userdefined_roles valid_property_id valid_roles validate_roles contained +syn keyword dtmlAttribute validClipData validRoles values variance- variance-n- view_image_or_file contained +syn keyword dtmlAttribute where whitespace whrandom xml_namespace zclass_candidate_view_actions contained +syn keyword dtmlAttribute ZClassBaseClassNames ziconImage ZopeFind ZQueryIds contained + +syn keyword dtmlMethod abs absolute_url ac_inherited_permissions aCommon contained +syn keyword dtmlMethod aCommonZ acos acquiredRolesAreUsedBy aDay addPropertySheet aMonth AMPM contained +syn keyword dtmlMethod ampm AMPMMinutes appendChild appendData appendHeader asin atan atan2 contained +syn keyword dtmlMethod atof atoi betavariate capatilize capwords catalog_object ceil center contained +syn keyword dtmlMethod choice chr cloneNode COPY cos cosh count createInObjectManager contained +syn keyword dtmlMethod createSQLInput cunifvariate Date DateTime Day day dayOfYear dd default contained +syn keyword dtmlMethod DELETE deleteData delPropertySheet divmod document_id document_title dow contained +syn keyword dtmlMethod earliestTime enter equalTo exp expireCookie expovariate fabs fCommon contained +syn keyword dtmlMethod fCommonZ filtered_manage_options filtered_meta_types find float floor contained +syn keyword dtmlMethod fmod frexp gamma gauss get get_local_roles_for_userid get_size getattr contained +syn keyword dtmlMethod getAttribute getAttributeNode getClassAttr getDomains contained +syn keyword dtmlMethod getElementsByTagName getHeader getitem getNamedItem getobject contained +syn keyword dtmlMethod getObjectsInfo getpath getProperty getRoles getStatus getUser contained +syn keyword dtmlMethod getUserName greaterThan greaterThanEqualTo h_12 h_24 has_key contained +syn keyword dtmlMethod has_permission has_role hasattr hasFeature hash hasProperty HEAD hex contained +syn keyword dtmlMethod hour hypot index index_html inheritedAttribute insertBefore insertData contained +syn keyword dtmlMethod int isCurrentDay isCurrentHour isCurrentMinute isCurrentMonth contained +syn keyword dtmlMethod isCurrentYear isFuture isLeadYear isPast item join latestTime ldexp contained +syn keyword dtmlMethod leave leave_another len lessThan lessThanEqualTo ljust log log10 contained +syn keyword dtmlMethod lognormvariate lower lstrip maketrans manage manage_access contained +syn keyword dtmlMethod manage_acquiredPermissions manage_addColumn manage_addDocument contained +syn keyword dtmlMethod manage_addDTMLDocument manage_addDTMLMethod manage_addFile contained +syn keyword dtmlMethod manage_addFolder manage_addImage manage_addIndex manage_addLocalRoles contained +syn keyword dtmlMethod manage_addMailHost manage_addPermission manage_addPrincipiaFactory contained +syn keyword dtmlMethod manage_addProduct manage_addProperty manage_addPropertySheet contained +syn keyword dtmlMethod manage_addUserFolder manage_addZCatalog manage_addZClass contained +syn keyword dtmlMethod manage_addZGadflyConnection manage_addZGadflyConnectionForm contained +syn keyword dtmlMethod manage_advanced manage_catalogClear manage_catalogFoundItems contained +syn keyword dtmlMethod manage_catalogObject manage_catalogReindex manage_changePermissions contained +syn keyword dtmlMethod manage_changeProperties manage_clone manage_CopyContainerFirstItem contained +syn keyword dtmlMethod manage_copyObjects manage_createEditor manage_createView contained +syn keyword dtmlMethod manage_cutObjects manage_defined_roles manage_delColumns contained +syn keyword dtmlMethod manage_delIndexes manage_delLocalRoles manage_delObjects contained +syn keyword dtmlMethod manage_delProperties manage_Discard__draft__ manage_distribute contained +syn keyword dtmlMethod manage_edit manage_edit manage_editedDialog manage_editProperties contained +syn keyword dtmlMethod manage_editRoles manage_exportObject manage_importObject contained +syn keyword dtmlMethod manage_makeChanges manage_pasteObjects manage_permission contained +syn keyword dtmlMethod manage_propertiesForm manage_proxy manage_renameObject manage_role contained +syn keyword dtmlMethod manage_Save__draft__ manage_setLocalRoles manage_setPermissionMapping contained +syn keyword dtmlMethod manage_test manage_testForm manage_uncatalogObject contained +syn keyword dtmlMethod manage_undo_transactions manage_upload manage_users manage_workspace contained +syn keyword dtmlMethod mange_createWizard max min minute MKCOL mm modf month Month MOVE contained +syn keyword dtmlMethod namespace new_version nextObject normalvariate notEqualTo objectIds contained +syn keyword dtmlMethod objectItems objectValues oct OPTIONS ord paretovariate parts pCommon contained +syn keyword dtmlMethod pCommonZ pDay permissionsOfRole pMonth pow PreciseAMPM PreciseTime contained +syn keyword dtmlMethod previousObject propertyInfo propertyLabel PROPFIND PROPPATCH PUT quit contained +syn keyword dtmlMethod raise_standardErrorMessage randint random read read_raw redirect contained +syn keyword dtmlMethod removeAttribute removeAttributeNode removeChild replace replaceChild contained +syn keyword dtmlMethod replaceData rfc822 rfind rindex rjust rolesOfPermission round rstrip contained +syn keyword dtmlMethod save searchResults second seed set setAttribute setAttributeNode setBase contained +syn keyword dtmlMethod setCookie setHeader setStatus sin sinh split splitText sqrt str strip contained +syn keyword dtmlMethod substringData superValues swapcase tabs_path_info tan tanh Time contained +syn keyword dtmlMethod TimeMinutes timeTime timezone title title_and_id title_or_id toXML contained +syn keyword dtmlMethod toZone uncatalog_object undoable_transactions uniform uniqueValuesFor contained +syn keyword dtmlMethod update_data upper valid_property_id validate_roles vonmisesvariate contained +syn keyword dtmlMethod weibullvariate year yy zfill ZopeFind contained + +" DTML tags +syn keyword dtmlTagName var if elif else unless in with let call raise try except tag comment tree sqlvar sqltest sqlgroup sendmail mime transparent contained + +syn keyword dtmlEndTagName if unless in with let raise try tree sendmail transparent contained + +" Own additions +syn keyword dtmlTODO TODO FIXME contained + +syn region dtmlComment start=++ end=++ contains=dtmlTODO + +" All dtmlTagNames are contained by dtmlIsTag. +syn match dtmlIsTag "dtml-[A-Za-z]\+" contains=dtmlTagName + +" 'var' tag entity syntax: &dtml-variableName; +" - with attributes: &dtml.attribute1[.attribute2]...-variableName; +syn match dtmlSpecialChar "&dtml[.0-9A-Za-z_]\{-}-[0-9A-Za-z_.]\+;" + +" Redefine to allow inclusion of DTML within HTML strings. +syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,dtmlSpecialChar,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc +syn region htmlLink start="[^>]*href\>" end=""me=e-4 contains=@Spell,htmlTag,htmlEndTag,dtmlSpecialChar,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc +syn region htmlHead start="" end=""me=e-7 end=""me=e-5 end=""me=e-3 contains=htmlTag,htmlEndTag,dtmlSpecialChar,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,htmlTitle,javaScript,cssStyle,@htmlPreproc +syn region htmlTitle start="" end=""me=e-8 contains=htmlTag,htmlEndTag,dtmlSpecialChar,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc +syn region htmlString contained start=+"+ end=+"+ contains=dtmlSpecialChar,htmlSpecialChar,javaScriptExpression,dtmlIsTag,dtmlAttribute,dtmlMethod,@htmlPreproc +syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,dtmlIsTag,dtmlAttribute,dtmlMethod,@htmlTagNameCluster +syn match htmlTagN contained + + +" dtrace lexer and parser are at +" http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libdtrace/common/dt_lex.l +" http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libdtrace/common/dt_grammar.y + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Read the C syntax to start with +runtime! syntax/c.vim +unlet b:current_syntax + +syn clear cCommentL " dtrace doesn't support // style comments + +" First line may start with #!, also make sure a '-s' flag is somewhere in +" that line. +syn match dtraceComment "\%^#!.*-s.*" + +" Probe descriptors need explicit matches, so that keywords in probe +" descriptors don't show up as errors. Note that this regex detects probes +" as "something with three ':' in it". This works in practice, but it's not +" really correct. Also add special case code for BEGIN, END and ERROR, since +" they are common. +" Be careful not to detect '/*some:::node*/\n/**/' as probe, as it's +" commented out. +" XXX: This allows a probe description to end with ',', even if it's not +" followed by another probe. +" XXX: This doesn't work if followed by a comment. +let s:oneProbe = '\%(BEGIN\|END\|ERROR\|\S\{-}:\S\{-}:\S\{-}:\S\{-}\)\_s*' +exec 'syn match dtraceProbe "'.s:oneProbe.'\%(,\_s*'.s:oneProbe.'\)*\ze\_s\%({\|\/[^*]\|\%$\)"' + +" Note: We have to be careful to not make this match /* */ comments. +" Also be careful not to eat `c = a / b; b = a / 2;`. We use the same +" technique as the dtrace lexer: a predicate has to be followed by {, ;, or +" EOF. Also note that dtrace doesn't allow an empty predicate // (we do). +" This regex doesn't allow a divison operator in the predicate. +" Make sure that this matches the empty predicate as well. +" XXX: This doesn't work if followed by a comment. +syn match dtracePredicate "/\*\@!\_[^/]*/\ze\_s*\%({\|;\|\%$\)" + "contains=ALLBUT,dtraceOption " this lets the region contain too much stuff + +" Pragmas. +" dtrace seems not to support whitespace before or after the '='. dtrace +" supports only one option per #pragma, and no continuations of #pragma over +" several lines with '\'. +" Note that dtrace treats units (Hz etc) as case-insenstive, we allow only +" sane unit capitalization in this script (ie 'ns', 'us', 'ms', 's' have to be +" small, Hertz can be 'Hz' or 'hz') +" XXX: "cpu" is always highlighted as builtin var, not as option + +" auto or manual: bufresize +syn match dtraceOption contained "bufresize=\%(auto\|manual\)\s*$" + +" scalar: cpu jstackframes jstackstrsize nspec stackframes stackindent ustackframes +syn match dtraceOption contained "\%(cpu\|jstackframes\|jstackstrsize\|nspec\|stackframes\|stackindent\|ustackframes\)=\d\+\s*$" + +" size: aggsize bufsize dynvarsize specsize strsize +" size defaults to something if no unit is given (ie., having no unit is ok) +syn match dtraceOption contained "\%(aggsize\|bufsize\|dynvarsize\|specsize\|strsize\)=\d\+\%(k\|m\|g\|t\|K\|M\|G\|T\)\=\s*$" + +" time: aggrate cleanrate statusrate switchrate +" time defaults to hz if no unit is given +syn match dtraceOption contained "\%(aggrate\|cleanrate\|statusrate\|switchrate\)=\d\+\%(hz\|Hz\|ns\|us\|ms\|s\)\=\s*$" + +" No type: defaultargs destructive flowindent grabanon quiet rawbytes +syn match dtraceOption contained "\%(defaultargs\|destructive\|flowindent\|grabanon\|quiet\|rawbytes\)\s*$" + + +" Turn reserved but unspecified keywords into errors +syn keyword dtraceReservedKeyword auto break case continue counter default do +syn keyword dtraceReservedKeyword else for goto if import probe provider +syn keyword dtraceReservedKeyword register restrict return static switch while + +" Add dtrace-specific stuff +syn keyword dtraceOperator sizeof offsetof stringof xlate +syn keyword dtraceStatement self inline xlate this translator + +" Builtin variables +syn keyword dtraceIdentifier arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 +syn keyword dtraceIdentifier args caller chip cpu curcpu curlwpsinfo curpsinfo +syn keyword dtraceIdentifier curthread cwd epid errno execname gid id ipl lgrp +syn keyword dtraceIdentifier pid ppid probefunc probemod probename probeprov +syn keyword dtraceIdentifier pset root stackdepth tid timestamp uid uregs +syn keyword dtraceIdentifier vtimestamp walltimestamp +syn keyword dtraceIdentifier ustackdepth + +" Macro Variables +syn match dtraceConstant "$[0-9]\+" +syn match dtraceConstant "$\(egid\|euid\|gid\|pgid\|ppid\)" +syn match dtraceConstant "$\(projid\|sid\|target\|taskid\|uid\)" + +" Data Recording Actions +syn keyword dtraceFunction trace tracemem printf printa stack ustack jstack + +" Process Destructive Actions +syn keyword dtraceFunction stop raise copyout copyoutstr system + +" Kernel Destructive Actions +syn keyword dtraceFunction breakpoint panic chill + +" Special Actions +syn keyword dtraceFunction speculate commit discard exit + +" Subroutines +syn keyword dtraceFunction alloca basename bcopy cleanpath copyin copyinstr +syn keyword dtraceFunction copyinto dirname msgdsize msgsize mutex_owned +syn keyword dtraceFunction mutex_owner mutex_type_adaptive progenyof +syn keyword dtraceFunction rand rw_iswriter rw_write_held speculation +syn keyword dtraceFunction strjoin strlen + +" Aggregating Functions +syn keyword dtraceAggregatingFunction count sum avg min max lquantize quantize + +syn keyword dtraceType int8_t int16_t int32_t int64_t intptr_t +syn keyword dtraceType uint8_t uint16_t uint32_t uint64_t uintptr_t +syn keyword dtraceType string +syn keyword dtraceType pid_t id_t + + +" Define the default highlighting. +" We use `hi def link` directly, this requires 5.8. +hi def link dtraceReservedKeyword Error +hi def link dtracePredicate String +hi def link dtraceProbe dtraceStatement +hi def link dtraceStatement Statement +hi def link dtraceConstant Constant +hi def link dtraceIdentifier Identifier +hi def link dtraceAggregatingFunction dtraceFunction +hi def link dtraceFunction Function +hi def link dtraceType Type +hi def link dtraceOperator Operator +hi def link dtraceComment Comment +hi def link dtraceNumber Number +hi def link dtraceOption Identifier + +let b:current_syntax = "dtrace" diff --git a/.config/vim/syntax/dts.vim b/.config/vim/syntax/dts.vim new file mode 100644 index 0000000..bb7eff7 --- /dev/null +++ b/.config/vim/syntax/dts.vim @@ -0,0 +1,80 @@ +" Vim syntax file +" Language: dts/dtsi (device tree files) +" Maintainer: Daniel Mack +" Last Change: 2023 Apr 28 + +if exists("b:current_syntax") + finish +endif +let b:current_syntax = 'dts' + +syntax region dtsComment start="/\*" end="\*/" +syntax match dtsReference "&[[:alpha:][:digit:]_]\+" +syntax match dtsReference "&{[[:alpha:][:digit:]@_/-]\+}" +syntax region dtsBinaryProperty start="\[" end="\]" +syntax match dtsStringProperty "\".*\"" +syntax match dtsKeyword "/[[:alpha:][:digit:]-]\+/\([[:space:]]\|;\)"he=e-1 +syntax match dtsLabel "^[[:space:]]*[[:alpha:][:digit:]_]\+:" +syntax match dtsNode /[[:alpha:][:digit:]-_]\+\(@[0-9a-fA-F]\+\|\)[[:space:]]*{/he=e-1 +syntax region dtsCellProperty start="<" end=">" contains=dtsReference,dtsBinaryProperty,dtsStringProperty,dtsComment +syntax region dtsCommentInner start="/\*" end="\*/" +syntax match dtsCommentLine "//.*$" + +" Accept %: for # (C99) +syn region cPreCondit start="^\s*\zs\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError +syn match cPreConditMatch display "^\s*\zs\(%:\|#\)\s*\(else\|endif\)\>" +if !exists("c_no_if0") + syn cluster cCppOutInGroup contains=cCppInIf,cCppInElse,cCppInElse2,cCppOutIf,cCppOutIf2,cCppOutElse,cCppInSkip,cCppOutSkip + syn region cCppOutWrapper start="^\s*\zs\(%:\|#\)\s*if\s\+0\+\s*\($\|//\|/\*\|&\)" end=".\@=\|$" contains=cCppOutIf,cCppOutElse,@NoSpell fold + syn region cCppOutIf contained start="0\+" matchgroup=cCppOutWrapper end="^\s*\(%:\|#\)\s*endif\>" contains=cCppOutIf2,cCppOutElse + if !exists("c_no_if0_fold") + syn region cCppOutIf2 contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell fold + else + syn region cCppOutIf2 contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell + endif + syn region cCppOutElse contained matchgroup=cCppOutWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=TOP,cPreCondit + syn region cCppInWrapper start="^\s*\zs\(%:\|#\)\s*if\s\+0*[1-9]\d*\s*\($\|//\|/\*\||\)" end=".\@=\|$" contains=cCppInIf,cCppInElse fold + syn region cCppInIf contained matchgroup=cCppInWrapper start="\d\+" end="^\s*\(%:\|#\)\s*endif\>" contains=TOP,cPreCondit + if !exists("c_no_if0_fold") + syn region cCppInElse contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 fold + else + syn region cCppInElse contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 + endif + syn region cCppInElse2 contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)\([^/]\|/[^/*]\)*" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell + syn region cCppOutSkip contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppOutSkip + syn region cCppInSkip contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(if\s\+\(\d\+\s*\($\|//\|/\*\||\|&\)\)\@!\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" containedin=cCppOutElse,cCppInIf,cCppInSkip contains=TOP,cPreProc +endif +syn region cIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match cIncluded display contained "<[^>]*>" +syn match cInclude display "^\s*\zs\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded +"syn match cLineSkip "\\$" +syn cluster cPreProcGroup contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti,cBadBlock +syn region cDefine start="^\s*\zs\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell +syn region cPreProc start="^\s*\zs\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell + +hi def link dtsCellProperty Number +hi def link dtsBinaryProperty Number +hi def link dtsStringProperty String +hi def link dtsKeyword Include +hi def link dtsLabel Label +hi def link dtsNode Structure +hi def link dtsReference Macro +hi def link dtsComment Comment +hi def link dtsCommentInner Comment +hi def link dtsCommentLine Comment + +hi def link cInclude Include +hi def link cPreProc PreProc +hi def link cDefine Macro +hi def link cIncluded cString +hi def link cString String + +hi def link cCppInWrapper cCppOutWrapper +hi def link cCppOutWrapper cPreCondit +hi def link cPreConditMatch cPreCondit +hi def link cPreCondit PreCondit +hi def link cCppOutSkip cCppOutIf2 + +hi def link cCppInElse2 cCppOutIf2 +hi def link cCppOutIf2 cCppOut +hi def link cCppOut Comment diff --git a/.config/vim/syntax/dune.vim b/.config/vim/syntax/dune.vim new file mode 100644 index 0000000..3cfb47f --- /dev/null +++ b/.config/vim/syntax/dune.vim @@ -0,0 +1,50 @@ +" Vim syntax file +" Language: Dune buildsystem +" Maintainer: Markus Mottl +" Anton Kochkov +" URL: https://github.com/ocaml/vim-ocaml +" Last Change: +" 2023 Nov 24 - Add end-of-line strings (Samuel Hym) +" 2019 Feb 27 - Add newer keywords to the syntax (Simon Cruanes) +" 2018 May 8 - Check current_syntax (Kawahara Satoru) +" 2018 Mar 29 - Extend jbuild syntax with more keywords (Petter A. Urkedal) +" 2017 Sep 6 - Initial version (Etienne Millon) + +if exists("b:current_syntax") + finish +endif + +set syntax=lisp +syn case match + +" The syn-iskeyword setting lacks #,? from the iskeyword setting here. +" Clearing it avoids maintaining keyword characters in multiple places. +syn iskeyword clear + +syn keyword lispDecl jbuild_version library executable executables rule ocamllex ocamlyacc menhir alias install + +syn keyword lispKey name public_name synopsis modules libraries wrapped +syn keyword lispKey preprocess preprocessor_deps optional c_names cxx_names +syn keyword lispKey install_c_headers modes no_dynlink self_build_stubs_archive +syn keyword lispKey ppx_runtime_libraries virtual_deps js_of_ocaml link_flags +syn keyword lispKey javascript_files flags ocamlc_flags ocamlopt_flags pps staged_pps +syn keyword lispKey library_flags c_flags c_library_flags kind package action +syn keyword lispKey deps targets locks fallback +syn keyword lispKey inline_tests tests test names + +syn keyword lispAtom true false + +syn keyword lispFunc cat chdir copy# diff? echo run setenv +syn keyword lispFunc ignore-stdout ignore-stderr ignore-outputs +syn keyword lispFunc with-stdout-to with-stderr-to with-outputs-to +syn keyword lispFunc write-file system bash + +syn region lispString start=+"\\[>|]+ end=+$+ contains=@Spell + +syn cluster lispBaseListCluster add=duneVar +syn match duneVar '\${[@<^]}' containedin=lispSymbol +syn match duneVar '\${\k\+\(:\k\+\)\?}' containedin=lispSymbol + +hi def link duneVar Identifier + +let b:current_syntax = "dune" diff --git a/.config/vim/syntax/dylan.vim b/.config/vim/syntax/dylan.vim new file mode 100644 index 0000000..345e932 --- /dev/null +++ b/.config/vim/syntax/dylan.vim @@ -0,0 +1,92 @@ +" Vim syntax file +" Language: Dylan +" Authors: Justus Pendleton +" Brent A. Fulgham +" Last Change: Fri Sep 29 13:45:55 PDT 2000 +" +" This syntax file is based on the Haskell, Perl, Scheme, and C +" syntax files. + +" Part 1: Syntax definition +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +setlocal lisp + +" Highlight special characters (those that have backslashes) differently +syn match dylanSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)" + +" Keywords +syn keyword dylanBlock afterwards begin block cleanup end +syn keyword dylanClassMods abstract concrete primary inherited virtual +syn keyword dylanException exception handler signal +syn keyword dylanParamDefs method class function library macro interface +syn keyword dylanSimpleDefs constant variable generic primary +syn keyword dylanOther above below from by in instance local slot subclass then to +syn keyword dylanConditional if when select case else elseif unless finally otherwise then +syn keyword dylanRepeat begin for until while from to +syn keyword dylanStatement define let +syn keyword dylanImport use import export exclude rename create +syn keyword dylanMiscMods open sealed domain singleton sideways inline functional + +" Matching rules for special forms +syn match dylanOperator "\s[-!%&\*\+/=\?@\\^|~:]\+[-#!>%&:\*\+/=\?@\\^|~]*" +syn match dylanOperator "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=:[-!#$%&\*\+./=\?@\\^|~:]*" +" Numbers +syn match dylanNumber "\<[0-9]\+\>\|\<0[xX][0-9a-fA-F]\+\>\|\<0[oO][0-7]\+\>" +syn match dylanNumber "\<[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=\>" +" Booleans +syn match dylanBoolean "#t\|#f" +" Comments +syn match dylanComment "//.*" +syn region dylanComment start="/\*" end="\*/" +" Strings +syn region dylanString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=dySpecial +syn match dylanCharacter "'[^\\]'" +" Constants, classes, and variables +syn match dylanConstant "$\<[a-zA-Z0-9\-]\+\>" +syn match dylanClass "<\<[a-zA-Z0-9\-]\+\>>" +syn match dylanVariable "\*\<[a-zA-Z0-9\-]\+\>\*" +" Preconditions +syn region dylanPrecondit start="^\s*#\s*\(if\>\|else\>\|endif\>\)" skip="\\$" end="$" + +" These appear at the top of files (usually). I like to highlight the whole line +" so that the definition stands out. They should probably really be keywords, but they +" don't generally appear in the middle of a line of code. +syn region dylanHeader start="^[Mm]odule:" end="^$" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link dylanBlock PreProc +hi def link dylanBoolean Boolean +hi def link dylanCharacter Character +hi def link dylanClass Structure +hi def link dylanClassMods StorageClass +hi def link dylanComment Comment +hi def link dylanConditional Conditional +hi def link dylanConstant Constant +hi def link dylanException Exception +hi def link dylanHeader Macro +hi def link dylanImport Include +hi def link dylanLabel Label +hi def link dylanMiscMods StorageClass +hi def link dylanNumber Number +hi def link dylanOther Keyword +hi def link dylanOperator Operator +hi def link dylanParamDefs Keyword +hi def link dylanPrecondit PreCondit +hi def link dylanRepeat Repeat +hi def link dylanSimpleDefs Keyword +hi def link dylanStatement Macro +hi def link dylanString String +hi def link dylanVariable Identifier + + +let b:current_syntax = "dylan" + +" vim:ts=8 diff --git a/.config/vim/syntax/dylanintr.vim b/.config/vim/syntax/dylanintr.vim new file mode 100644 index 0000000..692db34 --- /dev/null +++ b/.config/vim/syntax/dylanintr.vim @@ -0,0 +1,39 @@ +" Vim syntax file +" Language: Dylan +" Authors: Justus Pendleton +" Last Change: Fri Sep 29 13:53:27 PDT 2000 +" + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +syn region dylanintrInfo matchgroup=Statement start="^" end=":" oneline +syn match dylanintrInterface "define interface" +syn match dylanintrClass "<.*>" +syn region dylanintrType start=+"+ skip=+\\\\\|\\"+ end=+"+ + +syn region dylanintrIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match dylanintrIncluded contained "<[^>]*>" +syn match dylanintrInclude "^\s*#\s*include\>\s*["<]" contains=intrIncluded + +"syn keyword intrMods pointer struct + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link dylanintrInfo Special +hi def link dylanintrInterface Operator +hi def link dylanintrMods Type +hi def link dylanintrClass StorageClass +hi def link dylanintrType Type +hi def link dylanintrIncluded String +hi def link dylanintrInclude Include + + +let b:current_syntax = "dylanintr" + +" vim:ts=8 diff --git a/.config/vim/syntax/dylanlid.vim b/.config/vim/syntax/dylanlid.vim new file mode 100644 index 0000000..dae0bf9 --- /dev/null +++ b/.config/vim/syntax/dylanlid.vim @@ -0,0 +1,29 @@ +" Vim syntax file +" Language: Dylan Library Interface Files +" Authors: Justus Pendleton +" Brent Fulgham +" Last Change: Fri Sep 29 13:50:20 PDT 2000 +" + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +syn region dylanlidInfo matchgroup=Statement start="^" end=":" oneline +syn region dylanlidEntry matchgroup=Statement start=":%" end="$" oneline + +syn sync lines=50 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link dylanlidInfo Type +hi def link dylanlidEntry String + + +let b:current_syntax = "dylanlid" + +" vim:ts=8 diff --git a/.config/vim/syntax/ecd.vim b/.config/vim/syntax/ecd.vim new file mode 100644 index 0000000..1276f2b --- /dev/null +++ b/.config/vim/syntax/ecd.vim @@ -0,0 +1,44 @@ +" Vim syntax file +" Language: ecd (Embedix Component Description) files +" Maintainer: John Beppu +" URL: http://opensource.lineo.com/~beppu/prose/ecd_vim.html +" Last Change: 2001 Sep 27 + +" An ECD file contains meta-data for packages in the Embedix Linux distro. +" This syntax file was derived from apachestyle.vim +" by Christian Hammers + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" specials +syn match ecdComment "^\s*#.*" + +" options and values +syn match ecdAttr "^\s*[a-zA-Z]\S*\s*[=].*$" contains=ecdAttrN,ecdAttrV +syn match ecdAttrN contained "^.*="me=e-1 +syn match ecdAttrV contained "=.*$"ms=s+1 + +" tags +syn region ecdTag start=+<+ end=+>+ contains=ecdTagN,ecdTagError +syn match ecdTagN contained +<[/\s]*[-a-zA-Z0-9_]\++ms=s+1 +syn match ecdTagError contained "[^>]<"ms=s+1 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link ecdComment Comment +hi def link ecdAttr Type +hi def link ecdAttrN Statement +hi def link ecdAttrV Value +hi def link ecdTag Function +hi def link ecdTagN Statement +hi def link ecdTagError Error + + +let b:current_syntax = "ecd" +" vim: ts=8 diff --git a/.config/vim/syntax/edif.vim b/.config/vim/syntax/edif.vim new file mode 100644 index 0000000..002c9f8 --- /dev/null +++ b/.config/vim/syntax/edif.vim @@ -0,0 +1,45 @@ +" Vim syntax file +" Language: EDIF (Electronic Design Interchange Format) +" Maintainer: Artem Zankovich +" Last Change: Oct 14, 2002 +" +" Supported standarts are: +" ANSI/EIA Standard 548-1988 (EDIF Version 2 0 0) +" IEC 61690-1 (EDIF Version 3 0 0) +" IEC 61690-2 (EDIF Version 4 0 0) + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +setlocal iskeyword=48-57,-,+,A-Z,a-z,_,& + +syn region edifList matchgroup=Delimiter start="(" end=")" contains=edifList,edifKeyword,edifString,edifNumber + +" Strings +syn match edifInStringError /%/ contained +syn match edifInString /%\s*\d\+\s*%/ contained +syn region edifString start=/"/ end=/"/ contains=edifInString,edifInStringError contained + +" Numbers +syn match edifNumber "\<[-+]\=[0-9]\+\>" + +" Keywords +syn match edifKeyword "(\@<=\s*[a-zA-Z&][a-zA-Z_0-9]*\>" contained + +syn match edifError ")" + +" synchronization +syntax sync fromstart + +" Define the default highlighting. + +hi def link edifInString SpecialChar +hi def link edifKeyword Keyword +hi def link edifNumber Number +hi def link edifInStringError edifError +hi def link edifError Error +hi def link edifString String + +let b:current_syntax = "edif" diff --git a/.config/vim/syntax/editorconfig.vim b/.config/vim/syntax/editorconfig.vim new file mode 100644 index 0000000..7f75ab6 --- /dev/null +++ b/.config/vim/syntax/editorconfig.vim @@ -0,0 +1,21 @@ +" Vim syntax file +" Language: EditorConfig +" Maintainer: Gregory Anders +" Last Change: 2023-07-20 + +if exists('b:current_syntax') + finish +endif + +runtime! syntax/dosini.vim +unlet! b:current_syntax + +syntax match editorconfigUnknownProperty "^\s*\zs[a-zA-Z0-9_-]\+\ze\s*=" + +syntax keyword editorconfigProperty root charset end_of_line indent_style +syntax keyword editorconfigProperty indent_size tab_width max_line_length +syntax keyword editorconfigProperty trim_trailing_whitespace insert_final_newline + +hi def link editorconfigProperty dosiniLabel + +let b:current_syntax = 'editorconfig' diff --git a/.config/vim/syntax/eiffel.vim b/.config/vim/syntax/eiffel.vim new file mode 100644 index 0000000..c663487 --- /dev/null +++ b/.config/vim/syntax/eiffel.vim @@ -0,0 +1,199 @@ +" Eiffel syntax file +" Language: Eiffel +" Maintainer: Jocelyn Fiat +" Previous maintainer: Reimer Behrends +" Contributions from: Thilo Six +" +" URL: https://github.com/eiffelhub/vim-eiffel +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:keepcpo= &cpo +set cpo&vim + +" Option handling + +if exists("eiffel_ignore_case") + syn case ignore +else + syn case match + if exists("eiffel_pedantic") || exists("eiffel_strict") + syn keyword eiffelError current void result precursor none + syn keyword eiffelError CURRENT VOID RESULT PRECURSOR None + syn keyword eiffelError TRUE FALSE + endif + if exists("eiffel_pedantic") + syn keyword eiffelError true false + syn match eiffelError "\<[a-z_]\+[A-Z][a-zA_Z_]*\>" + syn match eiffelError "\<[A-Z][a-z_]*[A-Z][a-zA-Z_]*\>" + endif + if exists("eiffel_lower_case_predef") + syn keyword eiffelPredefined current void result precursor + endif +endif + +if exists("eiffel_hex_constants") + syn match eiffelNumber "\d[0-9a-fA-F]*[xX]" +endif + +" Keyword definitions + +syn keyword eiffelTopStruct note indexing feature creation inherit +syn match eiffelTopStruct "\" +syn match eiffelKeyword "\" +syn match eiffelTopStruct "^end\>\(\s*--\s\+class\s\+\<[A-Z][A-Z0-9_]*\>\)\=" contains=eiffelClassName +syn match eiffelBrackets "[[\]]" +syn match eiffelBracketError "\]" +syn region eiffelGeneric transparent matchgroup=eiffelBrackets start="\[" end="\]" contains=ALLBUT,eiffelBracketError,eiffelGenericDecl,eiffelStringError,eiffelStringEscape,eiffelGenericCreate,eiffelTopStruct +if exists("eiffel_ise") + syn match eiffelAgent "\" + syn match eiffelConvert "\" + syn match eiffelCreate "\" + syn match eiffelTopStruct contained "\" + syn match eiffelTopStruct contained "\" + syn match eiffelGenericCreate contained "\" + syn match eiffelTopStruct "^create\>" + syn region eiffelGenericDecl transparent matchgroup=eiffelBrackets contained start="\[" end="\]" contains=ALLBUT,eiffelCreate,eiffelTopStruct,eiffelGeneric,eiffelBracketError,eiffelStringEscape,eiffelStringError,eiffelBrackets + syn region eiffelClassHeader start="^class\>" end="$" contains=ALLBUT,eiffelCreate,eiffelGenericCreate,eiffelGeneric,eiffelStringEscape,eiffelStringError,eiffelBrackets +endif +syn keyword eiffelDeclaration is do once deferred unique local attribute assign +syn keyword eiffelDeclaration attached detachable Unique +syn keyword eiffelProperty expanded obsolete separate frozen +syn keyword eiffelProperty prefix infix +syn keyword eiffelInheritClause rename redefine undefine select export as +syn keyword eiffelAll all +syn keyword eiffelKeyword external alias some +syn keyword eiffelStatement if else elseif inspect +syn keyword eiffelStatement when then +syn match eiffelAssertion "\" +syn match eiffelAssertion "\" +syn keyword eiffelAssertion check +syn keyword eiffelDebug debug +syn keyword eiffelStatement across from until loop +syn keyword eiffelAssertion variant +syn match eiffelAssertion "\" +syn match eiffelTopStruct "^invariant\>" +syn keyword eiffelException rescue retry + +syn keyword eiffelPredefined Current Void Result Precursor + +" Operators +syn match eiffelOperator "\" +syn match eiffelOperator "\" +syn keyword eiffelOperator xor implies not +syn keyword eiffelOperator strip old +syn keyword eiffelOperator Strip +syn match eiffelOperator "\$" +syn match eiffelCreation "!" +syn match eiffelExport "[{}]" +syn match eiffelArray "<<" +syn match eiffelArray ">>" +syn match eiffelConstraint "->" +syn match eiffelOperator "[@#|&][^ \e\t\b%]*" + +" Special classes +syn keyword eiffelAnchored like +syn keyword eiffelBitType BIT + +" Constants +if !exists("eiffel_pedantic") + syn keyword eiffelBool true false +endif +syn keyword eiffelBool True False +syn region eiffelString start=+"+ skip=+%"+ end=+"+ contains=eiffelStringEscape,eiffelStringError +syn match eiffelStringEscape contained "%[^/]" +syn match eiffelStringEscape contained "%/\d\+/" +syn match eiffelStringEscape contained "^[ \t]*%" +syn match eiffelStringEscape contained "%[ \t]*$" +syn match eiffelStringError contained "%/[^0-9]" +syn match eiffelStringError contained "%/\d\+[^0-9/]" +syn match eiffelBadConstant "'\(%[^/]\|%/\d\+/\|[^'%]\)\+'" +syn match eiffelBadConstant "''" +syn match eiffelCharacter "'\(%[^/]\|%/\d\+/\|[^'%]\)'" contains=eiffelStringEscape +syn match eiffelNumber "-\=\<\d\+\(_\d\+\)*\>" +syn match eiffelNumber "\<[01]\+[bB]\>" +syn match eiffelNumber "-\=\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\)\=\([eE][-+]\=\d\+\(_\d\+\)*\)\=" +syn match eiffelNumber "-\=\.\d\+\(_\d\+\)*\([eE][-+]\=\d\+\(_\d\+\)*\)\=" +syn match eiffelComment "--.*" contains=eiffelTodo + +syn case match + +" Case sensitive stuff + +syn keyword eiffelTodo contained TODO XXX FIXME +syn match eiffelClassName "\<[A-Z][A-Z0-9_]*\>" + +" Catch mismatched parentheses +syn match eiffelParenError ")" +syn region eiffelParen transparent start="(" end=")" contains=ALLBUT,eiffelParenError,eiffelStringError,eiffelStringEscape + +if exists("eiffel_fold") +" setlocal foldmethod=indent +" syn sync fromstart +endif + +" Should suffice for even very long strings and expressions +syn sync lines=40 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link eiffelKeyword Statement +hi def link eiffelProperty Statement +hi def link eiffelInheritClause Statement +hi def link eiffelStatement Statement +hi def link eiffelDeclaration Statement +hi def link eiffelAssertion Statement +hi def link eiffelDebug Statement +hi def link eiffelException Statement +hi def link eiffelGenericCreate Statement + +hi def link eiffelAgent Statement +hi def link eiffelConvert Statement + +hi def link eiffelTopStruct PreProc + +hi def link eiffelAll Special +hi def link eiffelAnchored Special +hi def link eiffelBitType Special + + +hi def link eiffelBool Boolean +hi def link eiffelString String +hi def link eiffelCharacter Character +hi def link eiffelClassName Type +hi def link eiffelNumber Number + +hi def link eiffelStringEscape Special + +hi def link eiffelOperator Special +hi def link eiffelArray Special +hi def link eiffelExport Special +hi def link eiffelCreation Special +hi def link eiffelBrackets Special +hi def link eiffelGeneric Special +hi def link eiffelGenericDecl Special +hi def link eiffelConstraint Special +hi def link eiffelCreate Special + +hi def link eiffelPredefined Constant + +hi def link eiffelComment Comment + +hi def link eiffelError Error +hi def link eiffelBadConstant Error +hi def link eiffelStringError Error +hi def link eiffelParenError Error +hi def link eiffelBracketError Error + +hi def link eiffelTodo Todo + + +let b:current_syntax = "eiffel" + +let &cpo = s:keepcpo +unlet s:keepcpo + +" vim: ts=8 diff --git a/.config/vim/syntax/elf.vim b/.config/vim/syntax/elf.vim new file mode 100644 index 0000000..c8e5a61 --- /dev/null +++ b/.config/vim/syntax/elf.vim @@ -0,0 +1,82 @@ +" Vim syntax file +" Language: ELF +" Maintainer: Christian V. J. Brüssow +" Last Change: Son 22 Jun 2003 20:43:14 CEST +" Filenames: *.ab,*.am +" URL: http://www.cvjb.de/comp/vim/elf.vim +" $Id: elf.vim,v 1.1 2004/06/13 19:52:27 vimboss Exp $ +" +" ELF: Extensible Language Facility +" This is the Applix Inc., Macro and Builder programming language. +" It has nothing in common with the binary format called ELF. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Case does not matter +syn case ignore + +" Environments +syn region elfEnvironment transparent matchgroup=Special start="{" matchgroup=Special end="}" contains=ALLBUT,elfBraceError + +" Unmatched braces +syn match elfBraceError "}" + +" All macros must have at least one of these definitions +syn keyword elfSpecial endmacro +syn region elfSpecial transparent matchgroup=Special start="^\(\(macro\)\|\(set\)\) \S\+$" matchgroup=Special end="^\(\(endmacro\)\|\(endset\)\)$" contains=ALLBUT,elfBraceError + +" Preprocessor Commands +syn keyword elfPPCom define include + +" Some keywords +syn keyword elfKeyword false true null +syn keyword elfKeyword var format object function endfunction + +" Conditionals and loops +syn keyword elfConditional if else case of endcase for to next while until return goto + +" All built-in elf macros end with an '@' +syn match elfMacro "[0-9_A-Za-z]\+@" + +" Strings and characters +syn region elfString start=+"+ skip=+\\\\\|\\"+ end=+"+ + +" Numbers +syn match elfNumber "-\=\<[0-9]*\.\=[0-9_]\>" + +" Comments +syn region elfComment start="/\*" end="\*/" +syn match elfComment "\'.*$" + +syn sync ccomment elfComment + +" Parenthesis +syn match elfParens "[\[\]()]" + +" Punctuation +syn match elfPunct "[,;]" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default methods for highlighting. Can be overridden later. +hi def link elfComment Comment +hi def link elfPPCom Include +hi def link elfKeyword Keyword +hi def link elfSpecial Special +hi def link elfEnvironment Special +hi def link elfBraceError Error +hi def link elfConditional Conditional +hi def link elfMacro Function +hi def link elfNumber Number +hi def link elfString String +hi def link elfParens Delimiter +hi def link elfPunct Delimiter + + +let b:current_syntax = "elf" + +" vim:ts=8:sw=4:nocindent:smartindent: diff --git a/.config/vim/syntax/elinks.vim b/.config/vim/syntax/elinks.vim new file mode 100644 index 0000000..98252a2 --- /dev/null +++ b/.config/vim/syntax/elinks.vim @@ -0,0 +1,188 @@ +" Vim syntax file +" Language: elinks(1) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2007-06-17 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +setlocal iskeyword+=- + +syn keyword elinksTodo contained TODO FIXME XXX NOTE + +syn region elinksComment display oneline start='#' end='$' + \ contains=elinksTodo,@Spell + +syn match elinksNumber '\<\d\+\>' + +syn region elinksString start=+"+ skip=+\\\\\|\\"+ end=+"+ + \ contains=@elinksColor + +syn keyword elinksKeyword set bind + +syn keyword elinksPrefix bookmarks +syn keyword elinksOptions file_format + +syn keyword elinksPrefix config +syn keyword elinksOptions comments indentation saving_style i18n + \ saving_style_w show_template + +syn keyword elinksPrefix connection ssl client_cert +syn keyword elinksOptions enable file cert_verify async_dns max_connections + \ max_connections_to_host receive_timeout retries + \ unrestartable_receive_timeout + +syn keyword elinksPrefix cookies +syn keyword elinksOptions accept_policy max_age paranoid_security save resave + +syn keyword elinksPrefix document browse accesskey forms images links +syn keyword elinksPrefix active_link colors search cache codepage colors +syn keyword elinksPrefix format memory download dump history global html +syn keyword elinksPrefix plain +syn keyword elinksOptions auto_follow priority auto_submit confirm_submit + \ input_size show_formhist file_tags + \ image_link_tagging image_link_prefix + \ image_link_suffix show_as_links + \ show_any_as_links background text enable_color + \ bold invert underline color_dirs numbering + \ use_tabindex number_keys_select_link + \ wraparound case regex show_hit_top_bottom + \ wraparound show_not_found margin_width refresh + \ minimum_refresh_time scroll_margin scroll_step + \ table_move_order size size cache_redirects + \ ignore_cache_control assume force_assumed text + \ background link vlink dirs allow_dark_on_black + \ ensure_contrast use_document_colors directory + \ set_original_time overwrite notify_bell + \ codepage width enable max_items display_type + \ write_interval keep_unhistory display_frames + \ display_tables expand_table_columns display_subs + \ display_sups link_display underline_links + \ wrap_nbsp display_links compress_empty_lines + +syn keyword elinksPrefix mime extension handler mailcap mimetypes type +syn keyword elinksOptions ask block program enable path ask description + \ prioritize enable path default_type + +syn keyword elinksPrefix protocol file cgi ftp proxy http bugs proxy +syn keyword elinksPrefix referer https proxy rewrite dumb smart +syn keyword elinksOptions path policy allow_special_files show_hidden_files + \ try_encoding_extensions host anon_passwd + \ use_pasv use_epsv accept_charset allow_blacklist + \ broken_302_redirect post_no_keepalive http10 + \ host user passwd policy fake accept_language + \ accept_ui_language trace user_agent host + \ enable-dumb enable-smart + +syn keyword elinksPrefix terminal +syn keyword elinksOptions type m11_hack utf_8_io restrict_852 block_cursor + \ colors transparency underline charset + +syn keyword elinksPrefix ui colors color mainmenu normal selected hotkey + \ menu marked hotkey frame dialog generic + \ frame scrollbar scrollbar-selected title text + \ checkbox checkbox-label button button-selected + \ field field-text meter shadow title title-bar + \ title-text status status-bar status-text tabs + \ unvisited normal loading separator searched mono +syn keyword elinksOptions text background + +syn keyword elinksPrefix ui dialogs leds sessions tabs timer +syn keyword elinksOptions listbox_min_height shadows underline_hotkeys enable + \ auto_save auto_restore auto_save_foldername + \ homepage show_bar wraparound confirm_close + \ enable duration action language show_status_bar + \ show_title_bar startup_goto_dialog + \ success_msgbox window_title + +syn keyword elinksOptions secure_file_saving + +syn cluster elinksColor contains=elinksColorBlack,elinksColorDarkRed, + \ elinksColorDarkGreen,elinksColorDarkYellow, + \ elinksColorDarkBlue,elinksColorDarkMagenta, + \ elinksColorDarkCyan,elinksColorGray, + \ elinksColorDarkGray,elinksColorRed, + \ elinksColorGreen,elinksColorYellow, + \ elinksColorBlue,elinksColorMagenta, + \ elinksColorCyan,elinksColorWhite + +syn keyword elinksColorBlack contained black +syn keyword elinksColorDarkRed contained darkred sandybrown maroon crimson + \ firebrick +syn keyword elinksColorDarkGreen contained darkgreen darkolivegreen + \ darkseagreen forestgreen + \ mediumspringgreen seagreen +syn keyword elinksColorDarkYellow contained brown blanchedalmond chocolate + \ darkorange darkgoldenrod orange rosybrown + \ saddlebrown peru olive olivedrab sienna +syn keyword elinksColorDarkBlue contained darkblue cadetblue cornflowerblue + \ darkslateblue deepskyblue midnightblue + \ royalblue steelblue navy +syn keyword elinksColorDarkMagenta contained darkmagenta mediumorchid + \ mediumpurple mediumslateblue slateblue + \ deeppink hotpink darkorchid orchid purple + \ indigo +syn keyword elinksColorDarkCyan contained darkcyan mediumaquamarine + \ mediumturquoise darkturquoise teal +syn keyword elinksColorGray contained silver dimgray lightslategray + \ slategray lightgrey burlywood plum tan + \ thistle +syn keyword elinksColorDarkGray contained gray darkgray darkslategray + \ darksalmon +syn keyword elinksColorRed contained red indianred orangered tomato + \ lightsalmon salmon coral lightcoral +syn keyword elinksColorGreen contained green greenyellow lawngreen + \ lightgreen lightseagreen limegreen + \ mediumseagreen springgreen yellowgreen + \ palegreen lime chartreuse +syn keyword elinksColorYellow contained yellow beige darkkhaki + \ lightgoldenrodyellow palegoldenrod gold + \ goldenrod khaki lightyellow +syn keyword elinksColorBlue contained blue aliceblue aqua aquamarine + \ azure dodgerblue lightblue lightskyblue + \ lightsteelblue mediumblue +syn keyword elinksColorMagenta contained magenta darkviolet blueviolet + \ lightpink mediumvioletred palevioletred + \ violet pink fuchsia +syn keyword elinksColorCyan contained cyan lightcyan powderblue skyblue + \ turquoise paleturquoise +syn keyword elinksColorWhite contained white antiquewhite floralwhite + \ ghostwhite navajowhite whitesmoke linen + \ lemonchiffon cornsilk lavender + \ lavenderblush seashell mistyrose ivory + \ papayawhip bisque gainsboro honeydew + \ mintcream moccasin oldlace peachpuff snow + \ wheat + +hi def link elinksTodo Todo +hi def link elinksComment Comment +hi def link elinksNumber Number +hi def link elinksString String +hi def link elinksKeyword Keyword +hi def link elinksPrefix Identifier +hi def link elinksOptions Identifier +hi def elinksColorBlack ctermfg=Black guifg=Black +hi def elinksColorDarkRed ctermfg=DarkRed guifg=DarkRed +hi def elinksColorDarkGreen ctermfg=DarkGreen guifg=DarkGreen +hi def elinksColorDarkYellow ctermfg=DarkYellow guifg=DarkYellow +hi def elinksColorDarkBlue ctermfg=DarkBlue guifg=DarkBlue +hi def elinksColorDarkMagenta ctermfg=DarkMagenta guifg=DarkMagenta +hi def elinksColorDarkCyan ctermfg=DarkCyan guifg=DarkCyan +hi def elinksColorGray ctermfg=Gray guifg=Gray +hi def elinksColorDarkGray ctermfg=DarkGray guifg=DarkGray +hi def elinksColorRed ctermfg=Red guifg=Red +hi def elinksColorGreen ctermfg=Green guifg=Green +hi def elinksColorYellow ctermfg=Yellow guifg=Yellow +hi def elinksColorBlue ctermfg=Blue guifg=Blue +hi def elinksColorMagenta ctermfg=Magenta guifg=Magenta +hi def elinksColorCyan ctermfg=Cyan guifg=Cyan +hi def elinksColorWhite ctermfg=White guifg=White + +let b:current_syntax = "elinks" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/elm.vim b/.config/vim/syntax/elm.vim new file mode 100644 index 0000000..1277827 --- /dev/null +++ b/.config/vim/syntax/elm.vim @@ -0,0 +1,105 @@ +" Vim syntax file +" Language: Elm +" Maintainer: Andreas Scharf +" Original Author: Joseph Hager +" Copyright: Joseph Hager +" License: BSD3 +" Latest Revision: 2020-05-29 + +if exists('b:current_syntax') + finish +endif + +" Keywords +syn keyword elmConditional else if of then case +syn keyword elmAlias alias +syn keyword elmTypedef contained type port +syn keyword elmImport exposing as import module where + +" Operators +" elm/core +syn match elmOperator contained "\(<|\||>\|||\|&&\|==\|/=\|<=\|>=\|++\|::\|+\|-\|*\|/\|//\|^\|<>\|>>\|<<\|<\|>\|%\)" +" elm/parser +syn match elmOperator contained "\(|.\||=\)" +" elm/url +syn match elmOperator contained "\(\|\)" + +" Types +syn match elmType "\<[A-Z][0-9A-Za-z_-]*" +syn keyword elmNumberType number + +" Modules +syn match elmModule "\<\([A-Z][0-9A-Za-z_'-\.]*\)\+\.[A-Za-z]"me=e-2 +syn match elmModule "^\(module\|import\)\s\+[A-Z][0-9A-Za-z_'-\.]*\(\s\+as\s\+[A-Z][0-9A-Za-z_'-\.]*\)\?\(\s\+exposing\)\?" contains=elmImport + +" Delimiters +syn match elmDelimiter "[,;]" +syn match elmBraces "[()[\]{}]" + +" Functions +syn match elmTupleFunction "\((,\+)\)" + +" Comments +syn keyword elmTodo TODO FIXME XXX contained +syn match elmLineComment "--.*" contains=elmTodo,@spell +syn region elmComment matchgroup=elmComment start="{-|\=" end="-}" contains=elmTodo,elmComment,@spell fold + +" Strings +syn match elmStringEscape "\\u[0-9a-fA-F]\{4}" contained +syn match elmStringEscape "\\[nrfvbt\\\"]" contained +syn region elmString start="\"" skip="\\\"" end="\"" contains=elmStringEscape,@spell +syn region elmTripleString start="\"\"\"" skip="\\\"" end="\"\"\"" contains=elmStringEscape,@spell +syn match elmChar "'[^'\\]'\|'\\.'\|'\\u[0-9a-fA-F]\{4}'" + +" Lambda +syn region elmLambdaFunc start="\\"hs=s+1 end="->"he=e-2 + +" Debug +syn match elmDebug "Debug.\(log\|todo\|toString\)" + +" Numbers +syn match elmInt "-\?\<\d\+\>" +syn match elmFloat "-\?\(\<\d\+\.\d\+\>\)" + +" Identifiers +syn match elmTopLevelDecl "^\s*[a-zA-Z][a-zA-z0-9_]*\('\)*\s\+:\(\r\n\|\r\|\n\|\s\)\+" contains=elmOperator +syn match elmFuncName /^\l\w*/ + +" Folding +syn region elmTopLevelTypedef start="type" end="\n\(\n\n\)\@=" contains=ALL fold +syn region elmTopLevelFunction start="^[a-zA-Z].\+\n[a-zA-Z].\+=" end="^\(\n\+\)\@=" contains=ALL fold +syn region elmCaseBlock matchgroup=elmCaseBlockDefinition start="^\z\(\s\+\)\" end="^\z1\@!\W\@=" end="\(\n\n\z1\@!\)\@=" end="\n\z1\@!\(\n\n\)\@=" contains=ALL fold +syn region elmCaseItemBlock start="^\z\(\s\+\).\+->$" end="^\z1\@!\W\@=" end="\(\n\n\z1\@!\)\@=" end="\(\n\z1\S\)\@=" contains=ALL fold +syn region elmLetBlock matchgroup=elmLetBlockDefinition start="\" end="\" contains=ALL fold + +hi def link elmFuncName Function +hi def link elmCaseBlockDefinition Conditional +hi def link elmCaseBlockItemDefinition Conditional +hi def link elmLetBlockDefinition TypeDef +hi def link elmTopLevelDecl Function +hi def link elmTupleFunction Normal +hi def link elmTodo Todo +hi def link elmComment Comment +hi def link elmLineComment Comment +hi def link elmString String +hi def link elmTripleString String +hi def link elmChar String +hi def link elmStringEscape Special +hi def link elmInt Number +hi def link elmFloat Float +hi def link elmDelimiter Delimiter +hi def link elmBraces Delimiter +hi def link elmTypedef TypeDef +hi def link elmImport Include +hi def link elmConditional Conditional +hi def link elmAlias Delimiter +hi def link elmOperator Operator +hi def link elmType Type +hi def link elmNumberType Identifier +hi def link elmLambdaFunc Function +hi def link elmDebug Debug +hi def link elmModule Type + +syn sync minlines=500 + +let b:current_syntax = 'elm' diff --git a/.config/vim/syntax/elmfilt.vim b/.config/vim/syntax/elmfilt.vim new file mode 100644 index 0000000..aa1b57c --- /dev/null +++ b/.config/vim/syntax/elmfilt.vim @@ -0,0 +1,59 @@ +" Vim syntax file +" Language: Elm Filter rules +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Charles E. Campbell +" Last Change: Aug 31, 2016 +" Version: 9 +" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_ELMFILT + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn cluster elmfiltIfGroup contains=elmfiltCond,elmfiltOper,elmfiltOperKey,,elmfiltNumber,elmfiltOperKey + +syn match elmfiltParenError "[()]" +syn match elmfiltMatchError "/" +syn region elmfiltIf start="\" end="\" contains=elmfiltParen,elmfiltParenError skipnl skipwhite nextgroup=elmfiltAction +syn region elmfiltParen contained matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=elmfiltParen,@elmfiltIfGroup,elmfiltThenError +syn region elmfiltMatch contained matchgroup=Delimiter start="/" skip="\\/" matchgroup=Delimiter end="/" skipnl skipwhite nextgroup=elmfiltOper,elmfiltOperKey +syn match elmfiltThenError "\" skipnl skipwhite nextgroup=elmfiltString +syn match elmfiltOperKey contained "\=\|!=\|<\|<\|=" skipnl skipwhite nextgroup=elmfiltString,elmfiltCond,elmfiltOperKey +syn region elmfiltString contained start='"' skip='"\(\\\\\)*\\["%]' end='"' contains=elmfiltArg skipnl skipwhite nextgroup=elmfiltOper,elmfiltOperKey,@Spell +syn region elmfiltString contained start="'" skip="'\(\\\\\)*\\['%]" end="'" contains=elmfiltArg skipnl skipwhite nextgroup=elmfiltOper,elmfiltOperKey,@Spell +syn match elmfiltSpaceError contained "\s.*$" + +" Define the default highlighting. +if !exists("skip_elmfilt_syntax_inits") + + hi def link elmfiltAction Statement + hi def link elmfiltArg Special + hi def link elmfiltComment Comment + hi def link elmfiltCond Statement + hi def link elmfiltIf Statement + hi def link elmfiltMatch Special + hi def link elmfiltMatchError Error + hi def link elmfiltNumber Number + hi def link elmfiltOper Operator + hi def link elmfiltOperKey Type + hi def link elmfiltParenError Error + hi def link elmfiltSpaceError Error + hi def link elmfiltString String + hi def link elmfiltThenError Error + +endif + +let b:current_syntax = "elmfilt" +" vim: ts=9 diff --git a/.config/vim/syntax/erlang.vim b/.config/vim/syntax/erlang.vim new file mode 100644 index 0000000..3ef2c8d --- /dev/null +++ b/.config/vim/syntax/erlang.vim @@ -0,0 +1,408 @@ +" Vim syntax file +" Language: Erlang (http://www.erlang.org) +" Maintainer: Csaba Hoch +" Contributor: Adam Rutkowski +" Johannes Christ +" Last Update: 2025-Jul-06 +" License: Vim license +" URL: https://github.com/vim-erlang/vim-erlang-runtime + +" Acknowledgements: This script was originally created by Kresimir Marzic [1]. +" The script was then revamped by Csaba Hoch [2]. During the revamp, the new +" highlighting style and some code was taken from the Erlang syntax script +" that is part of vimerl [3], created by Oscar Hellström [4] and improved by +" Ricardo Catalinas Jiménez [5]. + +" [1]: Kreąimir Marľić (Kresimir Marzic) +" [2]: Csaba Hoch +" [3]: https://github.com/jimenezrick/vimerl +" [4]: Oscar Hellström (http://oscar.hellstrom.st) +" [5]: Ricardo Catalinas Jiménez + +" Customization: +" +" To use the old highlighting style, add this to your .vimrc: +" +" let g:erlang_old_style_highlight = 1 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +if !exists('g:main_syntax') + " This is an Erlang source file, and this is the main execution of + " syntax/erlang.vim. + let g:main_syntax = 'erlang' +elseif g:main_syntax == 'erlang' + " This is an Erlang source file, and this is an inner execution of + " syntax/erlang.vim. For example: + " + " 1. The main execution of syntax/erlang.vim included syntax/markdown.vim + " because "g:erlang_use_markdown_for_docs == 1". + " + " 2. syntax/markdown.vim included syntax/erlang.vim because + " "g:markdown_fenced_languages == ['erlang']". This is the inner + " execution of syntax/erlang.vim. + " + " To avoid infinite recursion with Markdown and Erlang including each other, + " and to avoid the inner syntax/erlang.vim execution messing up the + " variables of the outer erlang.vim execution, we finish executing the inner + " erlang.vim. + " + " In the inner execution, we already have the Erlang syntax items included, + " so the highlighting of Erlang within Markdown within Erlang will be + " acceptable. It won't highlight Markdown inside Erlang inside Markdown + " inside Erlang. + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" "g:erlang_old_style_highlight": Whether to use old style highlighting. +" +" * "g:erlang_old_style_highlight == 0" (default): Use new style +" highlighting. +" +" * "g:erlang_old_style_highlight == 1": Use old style highlighting. +let s:old_style = (exists("g:erlang_old_style_highlight") && + \g:erlang_old_style_highlight == 1) + +" "g:erlang_use_markdown_for_docs": Whether to use Markdown highlighting in +" docstrings. +" +" * "g:erlang_use_markdown_for_docs == 1": Enable Markdown highlighting in +" docstrings. +" +" * "g:erlang_use_markdown_for_docs == 0" (default): Disable Markdown +" highlighting in docstrings. +" +" If "g:main_syntax" is not 'erlang', this is not an Erlang source file but +" for example a Markdown file, and syntax/markdown.vim is including +" syntax/erlang.vim. To avoid infinite recursion with Markdown and Erlang +" including each other, we disable sourcing syntax/markdown.vim in this case. +if exists("g:erlang_use_markdown_for_docs") && g:main_syntax == 'erlang' + let s:use_markdown = g:erlang_use_markdown_for_docs +else + let s:use_markdown = 0 +endif + +" "g:erlang_docstring_default_highlight": How to highlight the text inside +" docstrings (except the text which is highlighted by Markdown). +" +" If "g:erlang_use_markdown_for_docs == 1": +" +" * "g:erlang_docstring_default_highlight == 'Comment'" (default): the plugin +" highlights the plain text inside Markdown as Markdown normally does, +" with comment highlighting to regular text in the docstring. +" +" * If you set g:erlang_docstring_default_highlight to the name of highlight +" group, for example "String", the plugin highlights the plain text inside +" Markdown with the specified highlight group. See ":highlight" for the +" available groups. You may also set it to an empty string to disable any +" specific highlighting. +" +" If "g:erlang_use_markdown_for_docs == 0": +" +" * "g:erlang_docstring_default_highlight == 'Comment'" (default): the plugin +" does not highlight the contents of the docstring as markdown, but +" continues to display them in the style of comments. +" +" * If you set g:erlang_docstring_default_highlight to the name of highlight +" group, for example "String", the plugin highlights the plain text inside +" Markdown with the specified highlight group. See ":highlight" for the +" available groups. You may also set it to an empty string to disable any +" specific highlighting. +" +" Configuration examples: +" +" " Highlight docstrings as Markdown. +" let g:erlang_use_markdown_for_docs = 1 +" let g:erlang_docstring_default_highlight = 'Comment' +" +" " 1. Highlight Markdown elements in docstrings as Markdown. +" " 2. Highlight the plain text in docstrings as String. +" let g:erlang_use_markdown_for_docs = 1 +" let g:erlang_docstring_default_highlight = 'String' +" +" " Highlight docstrings as strings. +" let g:erlang_use_markdown_for_docs = 0 +" let g:erlang_docstring_default_highlight = 'String' +" +" " Highlight docstrings as comments (default). +" let g:erlang_use_markdown_for_docs = 0 +" let g:erlang_docstring_default_highlight = 'Comment' +if exists("g:erlang_docstring_default_highlight") + let s:docstring_default_highlight = g:erlang_docstring_default_highlight +else + let s:docstring_default_highlight = 'Comment' +endif + +" Case sensitive +syn case match + +setlocal iskeyword+=$,@-@ + +" Comments +syn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo +syn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|param\|private\|equiv\|spec\|throws\)' contained +syn match erlangCommentAnnotation /`[^']*'/ contained +syn keyword erlangTodo TODO FIXME XXX contained + +" Numbers (minimum base is 2, maximum is 36.) +syn match erlangNumberInteger '\<\d\+\>' +syn match erlangNumberInteger '\<\%([2-9]\|[12]\d\|3[0-6]\)\+#[[:alnum:]]\+\>' +syn match erlangNumberFloat '\<\d\+\.\d\+\%([eE][+-]\=\d\+\)\=\>' + +" Strings, atoms, characters +syn region erlangString start=/"/ end=/"/ contains=erlangStringModifier +syn region erlangStringTripleQuoted matchgroup=String start=/"""/ end=/\%(^\s*\)\@<="""/ keepend + +" Documentation +syn region erlangDocString start=/^-\%(module\)\=doc\s*\~\="/ end=/"\.$/ contains=@erlangDocStringCluster keepend +syn region erlangDocString start=/^-\%(module\)\=doc\s*<<"/ end=/">>\.$/ contains=@erlangDocStringCluster keepend +syn region erlangDocString start=/^-\%(module\)\=doc\s*\~\="""/ end=/\%(^\s*\)\@<="""\.$/ contains=@erlangDocStringCluster keepend +syn region erlangDocString start=/^-\%(module\)\=doc\s*<<"""/ end=/\%(^\s*\)\@<=""">>\.$/ contains=@erlangDocStringCluster keepend +syn cluster erlangDocStringCluster contains=erlangInnerDocAttribute,erlangDocStringDelimiter +syn region erlangDocStringDelimiter matchgroup=erlangString start=/"/ end=/"/ contains=@erlangDocStringContained contained +syn region erlangDocStringDelimiter matchgroup=erlangString start=/"""/ end=/"""/ contains=@erlangDocStringContained contained + +if s:use_markdown + syn cluster erlangDocStringContained contains=@markdown +endif + +syn region erlangQuotedAtom start=/'/ end=/'/ contains=erlangQuotedAtomModifier +syn match erlangStringModifier '\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\|\~\%([ni~]\|\%(-\=\d\+\|\*\)\=\.\=\%(\*\|\d\+\)\=\%(\..\)\=[tl]*[cfegswpWPBX#bx+]\)' contained +syn match erlangQuotedAtomModifier '\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained +syn match erlangModifier '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)' + +" Operators, separators +syn match erlangOperator '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|=>\|:=\|?=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/' +syn match erlangEqualsBinary '=<<\%(<\)\@!' +syn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse +syn match erlangBracket '{\|}\|\[\|]\||\|||' +syn match erlangPipe '|' +syn match erlangRightArrow '->' + +" Atoms, function calls (order is important) +syn match erlangAtom '\<\l[[:alnum:]_@]*' contains=erlangBoolean +syn keyword erlangBoolean true false contained +syn match erlangLocalFuncCall '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangBIF +syn match erlangLocalFuncRef '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@=' +syn match erlangGlobalFuncCall '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\|\n\|%.*\n\)*\)*\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*:\%(\s\|\n\|%.*\n\)*\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangComment,erlangVariable +syn match erlangGlobalFuncRef '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\|\n\|%.*\n\)*\)*\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*:\%(\s\|\n\|%.*\n\)*\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@=' contains=erlangComment,erlangVariable + +" Variables, macros, records, maps +syn match erlangVariable '\<[A-Z][[:alnum:]_@]*' +syn match erlangAnonymousVariable '\<_[[:alnum:]_@]*' +syn match erlangMacro '??\=[[:alnum:]_@]\+' +syn match erlangMacro '\%(-define(\)\@<=[[:alnum:]_@]\+' +syn region erlangQuotedMacro start=/??\=\s*'/ end=/'/ contains=erlangQuotedAtomModifier +syn match erlangMap '#' +syn match erlangRecord '#\s*\l[[:alnum:]_@]*' +syn region erlangQuotedRecord start=/#\s*'/ end=/'/ contains=erlangQuotedAtomModifier + +" Shebang (this line has to be after the ErlangMap) +syn match erlangShebang '^#!.*' + +" Bitstrings +syn match erlangBitType '\%(\/\%(\s\|\n\|%.*\n\)*\)\@<=\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\%(\%(\s\|\n\|%.*\n\)*-\%(\s\|\n\|%.*\n\)*\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\)*' contains=erlangComment + +" Constants and Directives +syn match erlangUnknownAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\l[[:alnum:]_@]*' contains=erlangComment +syn match erlangAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\%(behaviou\=r\|compile\|dialyzer\|export\|export_type\|file\|import\|module\|author\|copyright\|vsn\|on_load\|optional_callbacks\|feature\|mode\)\>' contains=erlangComment +syn match erlangDocAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\%(moduledoc\|doc\)\>' contains=erlangComment,erlangDocString +syn match erlangInnerDocAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\%(moduledoc\|doc\)\>' contained +syn match erlangInclude '^\s*-\%(\s\|\n\|%.*\n\)*\%(include\|include_lib\)\>' contains=erlangComment +syn match erlangRecordDef '^\s*-\%(\s\|\n\|%.*\n\)*record\>' contains=erlangComment +syn match erlangDefine '^\s*-\%(\s\|\n\|%.*\n\)*\%(define\|undef\)\>' contains=erlangComment +syn match erlangPreCondit '^\s*-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|endif\)\>' contains=erlangComment +syn match erlangType '^\s*-\%(\s\|\n\|%.*\n\)*\%(spec\|type\|opaque\|nominal\|callback\)\>' contains=erlangComment + +" Keywords +syn keyword erlangKeyword after begin case catch cond end fun if let of else +syn keyword erlangKeyword receive when try maybe + +" Build-in-functions (BIFs) +syn keyword erlangBIF abs alive apply atom_to_binary atom_to_list contained +syn keyword erlangBIF binary_part binary_to_atom contained +syn keyword erlangBIF binary_to_existing_atom binary_to_float contained +syn keyword erlangBIF binary_to_integer bitstring_to_list contained +syn keyword erlangBIF binary_to_list binary_to_term bit_size contained +syn keyword erlangBIF byte_size check_old_code check_process_code contained +syn keyword erlangBIF concat_binary date delete_module demonitor contained +syn keyword erlangBIF disconnect_node element erase error exit contained +syn keyword erlangBIF float float_to_binary float_to_list contained +syn keyword erlangBIF garbage_collect get get_keys group_leader contained +syn keyword erlangBIF halt hd integer_to_binary integer_to_list contained +syn keyword erlangBIF iolist_to_binary iolist_size is_alive contained +syn keyword erlangBIF is_atom is_binary is_bitstring is_boolean contained +syn keyword erlangBIF is_float is_function is_integer is_list is_map is_map_key contained +syn keyword erlangBIF is_number is_pid is_port is_process_alive contained +syn keyword erlangBIF is_record is_reference is_tuple length link contained +syn keyword erlangBIF list_to_atom list_to_binary contained +syn keyword erlangBIF list_to_bitstring list_to_existing_atom contained +syn keyword erlangBIF list_to_float list_to_integer list_to_pid contained +syn keyword erlangBIF list_to_tuple load_module make_ref map_size max contained +syn keyword erlangBIF min module_loaded monitor monitor_node node contained +syn keyword erlangBIF nodes now open_port pid_to_list port_close contained +syn keyword erlangBIF port_command port_connect pre_loaded contained +syn keyword erlangBIF process_flag process_flag process_info contained +syn keyword erlangBIF process purge_module put register registered contained +syn keyword erlangBIF round self setelement size spawn spawn_link contained +syn keyword erlangBIF spawn_monitor spawn_opt split_binary contained +syn keyword erlangBIF statistics term_to_binary throw time tl contained +syn keyword erlangBIF trunc tuple_size tuple_to_list unlink contained +syn keyword erlangBIF unregister whereis contained + +" Sync at the beginning of functions: if this is not used, multiline string +" are not always recognized, and the indentation script cannot use the +" "searchpair" (because it would not always skip strings and comments when +" looking for keywords and opening parens/brackets). +syn sync match erlangSync grouphere NONE "^[a-z]\s*(" +let b:erlang_syntax_synced = 1 + +" Define the default highlighting. See ":help group-name" for the groups and +" their colors. + +if s:use_markdown + " Add markdown syntax elements for docstrings (actually, for all + " triple-quoted strings). + unlet! b:current_syntax + + syn include @markdown syntax/markdown.vim + let b:current_syntax = "erlang" + + " markdown-erlang.vim includes html.vim, which includes css.vim, which adds + " the dash character (-) to the list of syntax keywords, which causes + " `-VarName` not to be highlighted as a variable in the Erlang code. + " + " Here we override that. + syntax iskeyword @,48-57,192-255,$,_ +endif + +" Comments +hi def link erlangComment Comment +hi def link erlangCommentAnnotation Special +hi def link erlangTodo Todo +hi def link erlangShebang Comment + +" Numbers +hi def link erlangNumberInteger Number +hi def link erlangNumberFloat Float + +" Strings, atoms, characters +hi def link erlangString String +hi def link erlangStringTripleQuoted String + +" Triple quoted strings +if s:docstring_default_highlight != '' + execute 'hi def link erlangDocStringDelimiter '. s:docstring_default_highlight +endif + +if s:old_style +hi def link erlangQuotedAtom Type +else +hi def link erlangQuotedAtom String +endif + +hi def link erlangStringModifier Special +hi def link erlangQuotedAtomModifier Special +hi def link erlangModifier Special + +" Operators, separators +hi def link erlangOperator Operator +hi def link erlangEqualsBinary ErrorMsg +hi def link erlangRightArrow Operator +if s:old_style +hi def link erlangBracket Normal +hi def link erlangPipe Normal +else +hi def link erlangBracket Delimiter +hi def link erlangPipe Delimiter +endif + +" Atoms, functions, variables, macros +if s:old_style +hi def link erlangAtom Normal +hi def link erlangLocalFuncCall Normal +hi def link erlangLocalFuncRef Normal +hi def link erlangGlobalFuncCall Function +hi def link erlangGlobalFuncRef Function +hi def link erlangVariable Normal +hi def link erlangAnonymousVariable erlangVariable +hi def link erlangMacro Normal +hi def link erlangQuotedMacro Normal +hi def link erlangRecord Normal +hi def link erlangQuotedRecord Normal +hi def link erlangMap Normal +else +hi def link erlangAtom String +hi def link erlangLocalFuncCall Normal +hi def link erlangLocalFuncRef Normal +hi def link erlangGlobalFuncCall Normal +hi def link erlangGlobalFuncRef Normal +hi def link erlangVariable Identifier +hi def link erlangAnonymousVariable erlangVariable +hi def link erlangMacro Macro +hi def link erlangQuotedMacro Macro +hi def link erlangRecord Structure +hi def link erlangQuotedRecord Structure +hi def link erlangMap Structure +endif + +" Bitstrings +if !s:old_style +hi def link erlangBitType Type +endif + +" Constants and Directives +if s:old_style +hi def link erlangAttribute Type +hi def link erlangMacroDef Type +hi def link erlangUnknownAttribute Normal +hi def link erlangInclude Type +hi def link erlangRecordDef Type +hi def link erlangDefine Type +hi def link erlangPreCondit Type +hi def link erlangType Type +else +hi def link erlangAttribute Keyword +hi def link erlangDocAttribute Keyword +hi def link erlangInnerDocAttribute Keyword +hi def link erlangMacroDef Macro +hi def link erlangUnknownAttribute Normal +hi def link erlangInclude Include +hi def link erlangRecordDef Keyword +hi def link erlangDefine Define +hi def link erlangPreCondit PreCondit +hi def link erlangType Type +endif + +" Keywords +hi def link erlangKeyword Keyword + +" Build-in-functions (BIFs) +hi def link erlangBIF Function + +if s:old_style +hi def link erlangBoolean Statement +hi def link erlangExtra Statement +hi def link erlangSignal Statement +else +hi def link erlangBoolean Boolean +hi def link erlangExtra Statement +hi def link erlangSignal Statement +endif + +let b:current_syntax = "erlang" + +if g:main_syntax ==# 'erlang' + unlet g:main_syntax +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: sw=2 et diff --git a/.config/vim/syntax/eruby.vim b/.config/vim/syntax/eruby.vim new file mode 100644 index 0000000..3d1bf71 --- /dev/null +++ b/.config/vim/syntax/eruby.vim @@ -0,0 +1,79 @@ +" Vim syntax file +" Language: eRuby +" Maintainer: Tim Pope +" URL: https://github.com/vim-ruby/vim-ruby +" Release Coordinator: Doug Kearns +" Last Change: 2022 Mar 18 + +if exists("b:current_syntax") + finish +endif + +if !exists("main_syntax") + let main_syntax = 'eruby' +endif + +if !exists("g:eruby_default_subtype") + let g:eruby_default_subtype = "html" +endif + +if &filetype =~ '^eruby\.' + let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+') +elseif !exists("b:eruby_subtype") && main_syntax == 'eruby' + let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$") + let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+') + if b:eruby_subtype == '' + let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\|\.example\)\+$','',''),'\.\zs\w\+\%(\ze+\w\+\)\=$') + endif + if b:eruby_subtype == 'rhtml' + let b:eruby_subtype = 'html' + elseif b:eruby_subtype == 'rb' + let b:eruby_subtype = 'ruby' + elseif b:eruby_subtype == 'yml' + let b:eruby_subtype = 'yaml' + elseif b:eruby_subtype == 'js' + let b:eruby_subtype = 'javascript' + elseif b:eruby_subtype == 'txt' + " Conventional; not a real file type + let b:eruby_subtype = 'text' + elseif b:eruby_subtype == '' + let b:eruby_subtype = g:eruby_default_subtype + endif +endif + +if !exists("b:eruby_nest_level") + if &syntax =~# '\' + let b:eruby_nest_level = strlen(substitute(substitute(&filetype,'\C\','@','g'),'[^@]','','g')) + else + let b:eruby_nest_level = strlen(substitute(substitute(substitute(expand("%:t"),'@','','g'),'\c\.\%(erb\|rhtml\)\>','@','g'),'[^@]','','g')) + endif +endif +if !b:eruby_nest_level + let b:eruby_nest_level = 1 +endif + +if exists("b:eruby_subtype") && b:eruby_subtype != '' && b:eruby_subtype !=? 'eruby' + exe "runtime! syntax/".b:eruby_subtype.".vim" + unlet! b:current_syntax +endif +syn include @rubyTop syntax/ruby.vim + +syn cluster erubyRegions contains=erubyOneLiner,erubyBlock,erubyExpression,erubyComment + +exe 'syn region erubyOneLiner matchgroup=erubyDelimiter start="^%\{1,'.b:eruby_nest_level.'\}%\@!" end="$" contains=@rubyTop containedin=ALLBUT,@erubyRegions keepend oneline' +exe 'syn region erubyBlock matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}%\@!-\=" end="[=-]\=%\@" contains=@rubyTop containedin=ALLBUT,@erubyRegions keepend' +exe 'syn region erubyExpression matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}=\{1,4}" end="[=-]\=%\@" contains=@rubyTop containedin=ALLBUT,@erubyRegions keepend' +exe 'syn region erubyComment matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}-\=#" end="[=-]\=%\@" contains=rubyTodo,@Spell containedin=ALLBUT,@erubyRegions keepend' + +" Define the default highlighting. + +hi def link erubyDelimiter PreProc +hi def link erubyComment Comment + +let b:current_syntax = 'eruby' + +if main_syntax == 'eruby' + unlet main_syntax +endif + +" vim: nowrap sw=2 sts=2 ts=8: diff --git a/.config/vim/syntax/esmtprc.vim b/.config/vim/syntax/esmtprc.vim new file mode 100644 index 0000000..81f074b --- /dev/null +++ b/.config/vim/syntax/esmtprc.vim @@ -0,0 +1,31 @@ +" Vim syntax file +" Language: Esmtp setup file (based on esmtp 0.5.0) +" Maintainer: Kornel Kielczewski +" Last Change: 16 Feb 2005 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +"All options +syntax keyword esmtprcOptions hostname username password starttls certificate_passphrase preconnect identity mda + +"All keywords +syntax keyword esmtprcIdentifier default enabled disabled required + +"We're trying to be smarer than /."*@.*/ :) +syntax match esmtprcAddress /[a-z0-9_.-]*[a-z0-9]\+@[a-z0-9_.-]*[a-z0-9]\+\.[a-z]\+/ +syntax match esmtprcFulladd /[a-z0-9_.-]*[a-z0-9]\+\.[a-z]\+:[0-9]\+/ + +"String.. +syntax region esmtprcString start=/"/ end=/"/ + + +highlight link esmtprcOptions Label +highlight link esmtprcString String +highlight link esmtprcAddress Type +highlight link esmtprcIdentifier Identifier +highlight link esmtprcFulladd Include + +let b:current_syntax = "esmtprc" diff --git a/.config/vim/syntax/esqlc.vim b/.config/vim/syntax/esqlc.vim new file mode 100644 index 0000000..792e5d3 --- /dev/null +++ b/.config/vim/syntax/esqlc.vim @@ -0,0 +1,58 @@ +" Vim syntax file +" Language: ESQL-C +" Maintainer: Jonathan A. George +" Last Change: 2001 May 09 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Read the C++ syntax to start with +runtime! syntax/cpp.vim + +" ESQL-C extentions + +syntax keyword esqlcPreProc EXEC SQL INCLUDE + +syntax case ignore + +syntax keyword esqlcPreProc begin end declare section database open execute +syntax keyword esqlcPreProc prepare fetch goto continue found sqlerror work + +syntax keyword esqlcKeyword access add as asc by check cluster column +syntax keyword esqlcKeyword compress connect current decimal +syntax keyword esqlcKeyword desc exclusive file from group +syntax keyword esqlcKeyword having identified immediate increment index +syntax keyword esqlcKeyword initial into is level maxextents mode modify +syntax keyword esqlcKeyword nocompress nowait of offline on online start +syntax keyword esqlcKeyword successful synonym table then to trigger uid +syntax keyword esqlcKeyword unique user validate values view whenever +syntax keyword esqlcKeyword where with option order pctfree privileges +syntax keyword esqlcKeyword public resource row rowlabel rownum rows +syntax keyword esqlcKeyword session share size smallint + +syntax keyword esqlcOperator not and or +syntax keyword esqlcOperator in any some all between exists +syntax keyword esqlcOperator like escape +syntax keyword esqlcOperator intersect minus +syntax keyword esqlcOperator prior distinct +syntax keyword esqlcOperator sysdate + +syntax keyword esqlcStatement alter analyze audit comment commit create +syntax keyword esqlcStatement delete drop explain grant insert lock noaudit +syntax keyword esqlcStatement rename revoke rollback savepoint select set +syntax keyword esqlcStatement truncate update + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link esqlcOperator Operator +hi def link esqlcStatement Statement +hi def link esqlcKeyword esqlcSpecial +hi def link esqlcSpecial Special +hi def link esqlcPreProc PreProc + + +let b:current_syntax = "esqlc" + diff --git a/.config/vim/syntax/esterel.vim b/.config/vim/syntax/esterel.vim new file mode 100644 index 0000000..b010521 --- /dev/null +++ b/.config/vim/syntax/esterel.vim @@ -0,0 +1,78 @@ +" Vim syntax file +" Language: ESTEREL +" Maintainer: Maurizio Tranchero - +" Credits: Luca Necchi , Nikos Andrikos +" First Release: Tue May 17 23:49:39 CEST 2005 +" Last Change: Tue May 6 13:29:56 CEST 2008 +" Version: 0.8 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" case is significant +syn case ignore +" Esterel Regions +syn region esterelModule start=/module/ end=/end module/ contains=ALLBUT,esterelModule +syn region esterelLoop start=/loop/ end=/end loop/ contains=ALLBUT,esterelModule +syn region esterelAbort start=/abort/ end=/when/ contains=ALLBUT,esterelModule +syn region esterelAbort start=/weak abort/ end=/when/ contains=ALLBUT,esterelModule +syn region esterelEvery start=/every/ end=/end every/ contains=ALLBUT,esterelModule +syn region esterelIf start=/if/ end=/end if/ contains=ALLBUT,esterelModule +syn region esterelConcurrent transparent start=/\[/ end=/\]/ contains=ALLBUT,esterelModule +syn region esterelIfThen start=/if/ end=/then/ oneline +" Esterel Keywords +syn keyword esterelIO input output inputoutput constant +syn keyword esterelBoolean and or not xor xnor nor nand +syn keyword esterelExpressions mod pre +syn keyword esterelStatement nothing halt +syn keyword esterelStatement module signal sensor end +syn keyword esterelStatement every do loop abort weak +syn keyword esterelStatement emit present await +syn keyword esterelStatement pause when immediate +syn keyword esterelStatement if then else case +syn keyword esterelStatement var in run suspend +syn keyword esterelStatement repeat times combine with +syn keyword esterelStatement assert sustain +" check what it is the following +syn keyword esterelStatement relation +syn keyword esterelFunctions function procedure task +syn keyword esterelSysCall call trap exit exec +" Esterel Types +syn keyword esterelType integer float bolean +" Esterel Comment +syn match esterelComment "%.*$" +" Operators and special characters +syn match esterelSpecial ":" +syn match esterelSpecial "<=" +syn match esterelSpecial ">=" +syn match esterelSpecial "+" +syn match esterelSpecial "-" +syn match esterelSpecial "=" +syn match esterelSpecial ";" +syn match esterelSpecial "/" +syn match esterelSpecial "?" +syn match esterelOperator "\[" +syn match esterelOperator "\]" +syn match esterelOperator ":=" +syn match esterelOperator "||" +syn match esterelStatement "\<\(if\|else\)\>" +syn match esterelNone "\$" +syn match esterelNone "\\s" + +" Class Linking + +hi def link esterelStatement Statement +hi def link esterelType Type +hi def link esterelComment Comment +hi def link esterelBoolean Number +hi def link esterelExpressions Number +hi def link esterelIO String +hi def link esterelOperator Type +hi def link esterelSysCall Type +hi def link esterelFunctions Type +hi def link esterelSpecial Special + + +let b:current_syntax = "esterel" diff --git a/.config/vim/syntax/eterm.vim b/.config/vim/syntax/eterm.vim new file mode 100644 index 0000000..9b43cb2 --- /dev/null +++ b/.config/vim/syntax/eterm.vim @@ -0,0 +1,429 @@ +" Vim syntax file +" Language: eterm(1) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-21 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword etermTodo contained TODO FIXME XXX NOTE + +syn region etermComment display oneline start='^#' end='$' + \ contains=etermTodo,@Spell + +syn match etermMagic display '^$' + +syn match etermNumber contained display '\<\(\d\+\|0x\x\{1,2}\)\>' + +syn region etermString contained display oneline start=+"+ + \ skip=+\\"+ end=+"+ + +syn keyword etermBoolean contained on off true false yes no + +syn keyword etermPreProc contained appname exec get put random version + \ include preproc + +syn keyword etermFunctions contained copy exit kill nop paste save + \ scroll search spawn + +syn cluster etermGeneral contains=etermComment,etermFunction, + \ etermPreProc + +syn keyword etermKeyMod contained ctrl shift lock mod1 mod2 mod3 mod4 + \ mod5 alt meta anymod +syn keyword etermKeyMod contained button1 button2 button3 button4 + \ button5 + +syn keyword etermColorOptions contained video nextgroup=etermVideoOptions + \ skipwhite + +syn keyword etermVideoType contained normal reverse + +syn keyword etermColorOptions contained foreground background cursor + \ cursor_text pointer + \ nextgroup=etermColorType skipwhite + +syn keyword etermColorType contained bd ul +syn match etermColorType contained display '\<\%(\d\|1[0-5]\)' + +syn keyword etermColorOptions contained color + \ nextgroup=etermColorNumber skipwhite + +syn keyword etermColorNumber contained bd ul nextgroup=etermColorSpec + \ skipwhite +syn match etermColorNumber contained display '\<\%(\d\|1[0-5]\)' + \ nextgroup=etermColorSpec skipwhite + +syn match etermColorSpec contained display '\S\+' + +syn region etermColorContext fold transparent matchgroup=etermContext + \ start='^\s*begin\s\+color\>' + \ end='^\s*end\>' + \ contains=@etermGeneral,etermColorOptions + +syn keyword etermAttrOptions contained geometry nextgroup=etermGeometry + \ skipwhite + +syn match etermGeometry contained display '\d\+x\d++\d\++\d\+' + +syn keyword etermAttrOptions contained scrollbar_type + \ nextgroup=etermScrollbarType skipwhite + +syn keyword etermScrollbarType contained motif xterm next + +syn keyword etermAttrOptions contained font nextgroup=etermFontType + \ skipwhite + +syn keyword etermFontType contained bold nextgroup=etermFont skipwhite +syn match etermFontType contained display '[0-5]' nextgroup=etermFont + \ skipwhite + +syn match etermFont contained display '\S\+' + +syn keyword etermFontType contained default nextgroup=etermNumber + \ skipwhite + +syn keyword etermFontType contained proportional nextgroup=etermBoolean + \ skipwhite + +syn keyword etermFontType contained fx nextgroup=etermString skipwhite + +syn keyword etermAttrOptions contained title name iconname + \ nextgroup=etermString skipwhite + +syn keyword etermAttrOptions contained scrollbar_width desktop + \ nextgroup=etermNumber skipwhite + +syn region etermAttrContext fold transparent matchgroup=etermContext + \ start='^\s*begin\s\+attributes\>' + \ end='^\s*end\>' + \ contains=@etermGeneral,etermAttrOptions + +syn keyword etermIClassOptions contained icon path nextgroup=etermString + \ skipwhite +syn keyword etermIClassOptions contained cache nextgroup=etermNumber + \ skipwhite +syn keyword etermIClassOptions contained anim nextgroup=etermNumber + \ skipwhite + +syn region etermIClassContext fold transparent matchgroup=etermContext + \ start='^\s*begin\s\+imageclasses\>' + \ end='^\s*end\>' + \ contains=@etermGeneral,etermImageContext, + \ etermIClassOptions + +syn keyword etermImageOptions contained type nextgroup=etermImageType + \ skipwhite + +syn keyword etermImageTypes contained background trough anchor up_arrow + \ left_arrow right_arrow menu menuitem + \ submenu button buttonbar down_arrow + +syn keyword etermImageOptions contained mode nextgroup=etermImageModes + \ skipwhite + +syn keyword etermImageModes contained image trans viewport auto solid + \ nextgroup=etermImageModesAllow skipwhite +syn keyword etermImageModesAllow contained allow nextgroup=etermImageModesR + \ skipwhite +syn keyword etermImageModesR contained image trans viewport auto solid + +syn keyword etermImageOptions contained state nextgroup=etermImageState + \ skipwhite + +syn keyword etermImageState contained normal selected clicked disabled + +syn keyword etermImageOptions contained color nextgroup=etermImageColorFG + \ skipwhite + +syn keyword etermImageColorFG contained '\S\+' nextgroup=etermImageColorBG + \ skipwhite + +syn keyword etermImageColorBG contained '\S\+' + +syn keyword etermImageOptions contained file nextgroup=etermString + \ skipwhite + +syn keyword etermImageOptions contained geom nextgroup=etermImageGeom + \ skipwhite + +syn match etermImageGeom contained display + \ '\s\+\%(\d\+x\d\++\d\++\d\+\)\=:\%(\%(tie\|scale\|hscale\|vscale\|propscale\)d\=\)\=' + +syn keyword etermImageOptions contained cmod colormod + \ nextgroup=etermImageCmod skipwhite + +syn keyword etermImageCmod contained image red green blue + \ nextgroup=etermImageBrightness skipwhite + +syn match etermImageBrightness contained display '\<\(\d\+\|0x\x\{1,2}\)\>' + \ nextgroup=etermImageContrast skipwhite + +syn match etermImageContrast contained display '\<\(\d\+\|0x\x\{1,2}\)\>' + \ nextgroup=etermImageGamma skipwhite + +syn match etermImageGamma contained display '\<\(\d\+\|0x\x\{1,2}\)\>' + \ nextgroup=etermImageGamma skipwhite + +syn region etermImageOptions contained display oneline + \ matchgroup=etermImageOptions + \ start='border\|bevel\%(\s\+\%(up\|down\)\)\|padding' + \ end='$' contains=etermNumber + +syn region etermImageContext contained fold transparent + \ matchgroup=etermContext + \ start='^\s*begin\s\+image\>' + \ end='^\s*end\>' + \ contains=@etermGeneral,etermImageOptions + +syn keyword etermMenuItemOptions contained action + \ nextgroup=etermMenuItemAction skipwhite + +syn keyword etermMenuItemAction contained string echo submenu script + \ nextgroup=etermString skipwhite + +syn keyword etermMenuItemAction contained separator + +syn keyword etermMenuItemOptions contained text rtext nextgroup=etermString + \ skipwhite + +syn region etermMenuItemContext contained fold transparent + \ matchgroup=etermContext + \ start='^\s*begin\s\+menuitem\>' + \ end='^\s*end\>' + \ contains=@etermGeneral,etermMenuItemOptions + +syn keyword etermMenuOptions contained title nextgroup=etermString + \ skipwhite + +syn keyword etermMenuOptions contained font_name nextgroup=etermFont + \ skipwhite + +syn match etermMenuOptions contained display '\\|-' + +syn region etermMenuContext fold transparent matchgroup=etermContext + \ start='^\s*begin\s\+menu\>' + \ end='^\s*end\>' + \ contains=@etermGeneral,etermMenuOptions, + \ etermMenuItemContext + +syn keyword etermBind contained bind nextgroup=etermBindMods + \ skipwhite + +syn keyword etermBindMods contained ctrl shift lock mod1 mod2 mod3 mod4 + \ mod5 alt meta anymod + \ nextgroup=etermBindMods skipwhite + +syn keyword etermBindTo contained to nextgroup=etermBindType + \ skipwhite + +syn keyword etermBindType contained string echo menu script + \ nextgroup=etermBindParam skipwhite + +syn match etermBindParam contained display '\S\+' + +syn region etermActionsContext fold transparent matchgroup=etermContext + \ start='^\s*begin\s\+actions\>' + \ end='^\s*end\>' + \ contains=@etermGeneral,etermActionsOptions + +syn keyword etermButtonOptions contained font nextgroup=etermFont skipwhite +syn keyword etermButtonOptions contained visible nextgroup=etermBoolean + \ skipwhite +syn keyword etermButtonOptions contained dock nextgroup=etermDockOption + \ skipwhite + +syn keyword etermDockOption contained top bottom no + +syn keyword etermButton contained button nextgroup=etermButtonText + \ skipwhite + +syn region etermButtonText contained display oneline start=+"+ + \ skip=+\\"+ end=+"+ + \ nextgroup=etermButtonIcon skipwhite + +syn keyword etermButtonIcon contained icon nextgroup=etermButtonIconFile + \ skipwhite + +syn keyword etermButtonIconFile contained '\S\+' nextgroup=etermButtonAction + \ skipwhite + +syn keyword etermButtonAction contained action nextgroup=etermBindType + \ skipwhite + +syn region etermButtonContext fold transparent matchgroup=etermContext + \ start='^\s*begin\s\+button_bar\>' + \ end='^\s*end\>' + \ contains=@etermGeneral,etermButtonOptions + +syn keyword etermMultiOptions contained encoding nextgroup=etermEncoding + \ skipwhite + +syn keyword etermEncoding eucj sjis euckr big5 gb +syn match etermEncoding display 'iso-10646' + +syn keyword etermMultiOptions contained font nextgroup=etermFontType + \ skipwhite + +syn region etermMultiContext fold transparent matchgroup=etermContext + \ start='^\s*begin\s\+multichar\>' + \ end='^\s*end\>' + \ contains=@etermGeneral,etermMultiOptions + +syn keyword etermXimOptions contained input_method + \ nextgroup=etermInputMethod skipwhite + +syn match etermInputMethod contained display '\S+' + +syn keyword etermXimOptions contained preedit_type + \ nextgroup=etermPreeditType skipwhite + +syn keyword etermPreeditType contained OverTheSpot OffTheSpot Root + +syn region etermXimContext fold transparent matchgroup=etermContext + \ start='^\s*begin\s\+xim\>' + \ end='^\s*end\>' + \ contains=@etermGeneral,etermXimOptions + +syn keyword etermTogOptions contained map_alert visual_bell login_shell + \ scrollbar utmp_logging meta8 iconic + \ no_input home_on_output home_on_input + \ scrollbar_floating scrollbar_right + \ scrollbar_popup borderless double_buffer + \ no_cursor pause xterm_select select_line + \ select_trailing_spaces report_as_keysyms + \ itrans immotile_trans buttonbar + \ resize_gravity nextgroup=etermBoolean + \ skipwhite + +syn region etermTogContext fold transparent matchgroup=etermContext + \ start='^\s*begin\s\+toggles\>' + \ end='^\s*end\>' + \ contains=@etermGeneral,etermTogOptions + +syn keyword etermKeyboardOptions contained smallfont_key bigfont_key keysym + \ nextgroup=etermKeysym skipwhite + +syn keyword etermKeysym contained '\S\+' nextgroup=etermString + \ skipwhite + +syn keyword etermKeyboardOptions contained meta_mod alt_mod numlock_mod + \ nextgroup=etermNumber skipwhite + +syn keyword etermKeyboardOptions contained greek app_keypad app_cursor + \ nextgroup=etermBoolean skipwhite + +syn region etermKeyboardContext fold transparent matchgroup=etermContext + \ start='^\s*begin\s\+keyboard\>' + \ end='^\s*end\>' + \ contains=@etermGeneral,etermKeyboardOptions + +syn keyword etermMiscOptions contained print_pipe cut_chars finished_title + \ finished_text term_name exec + \ nextgroup=etermString skipwhite + +syn keyword etermMiscOptions contained save_lines min_anchor_size + \ border_width line_space + +syn region etermMiscContext fold transparent matchgroup=etermContext + \ start='^\s*begin\s\+misc\>' + \ end='^\s*end\>' + \ contains=@etermGeneral,etermMiscOptions + +syn keyword etermEScreenOptions contained url nextgroup=etermURL skipwhite + +syn match etermURL contained display + \ '\<\%(screen\|twin\)://\%([^@:/]\+\%(@[^:/]\+\%(:[^/]\+\)\=\)\=\)\=/\S\+' + +syn keyword etermEScreenOptions contained firewall + +syn keyword etermEScreenOptions contained delay nextgroup=etermNumber + \ skipwhite + +syn keyword etermEScreenOptions contained bbar_font nextgroup=etermFont + \ skipwhite + +syn keyword etermEScreenOptions contained bbar_dock nextgroup=etermDockOption + \ skipwhite + +syn region etermEScreenContext fold transparent matchgroup=etermContext + \ start='^\s*begin\s\+escreen\>' + \ end='^\s*end\>' + \ contains=@etermGeneral,etermEScreenOptions + +if exists("eterm_minlines") + let b:eterm_minlines = eterm_minlines +else + let b:eterm_minlines = 50 +endif +exec "syn sync minlines=" . b:eterm_minlines + +hi def link etermTodo Todo +hi def link etermComment Comment +hi def link etermMagic PreProc +hi def link etermNumber Number +hi def link etermString String +hi def link etermBoolean Boolean +hi def link etermPreProc PreProc +hi def link etermFunctions Function +hi def link etermKeyMod Constant +hi def link etermOption Keyword +hi def link etermColorOptions etermOption +hi def link etermColor String +hi def link etermVideoType Type +hi def link etermColorType Type +hi def link etermColorNumber Number +hi def link etermColorSpec etermColor +hi def link etermContext Keyword +hi def link etermAttrOptions etermOption +hi def link etermGeometry String +hi def link etermScrollbarType Type +hi def link etermFontType Type +hi def link etermIClassOptions etermOption +hi def link etermImageOptions etermOption +hi def link etermImageTypes Type +hi def link etermImageModes Type +hi def link etermImageModesAllow Keyword +hi def link etermImageModesR Type +hi def link etermImageState Keyword +hi def link etermImageColorFG etermColor +hi def link etermImageColorBG etermColor +hi def link etermImageGeom String +hi def link etermImageCmod etermOption +hi def link etermImageBrightness Number +hi def link etermImageContrast Number +hi def link etermImageGamma Number +hi def link etermMenuItemOptions etermOption +hi def link etermMenuItemAction Keyword +hi def link etermMenuOptions etermOption +hi def link etermBind Keyword +hi def link etermBindMods Identifier +hi def link etermBindTo Keyword +hi def link etermBindType Type +hi def link etermBindParam String +hi def link etermButtonOptions etermOption +hi def link etermDockOption etermOption +hi def link etermButtonText String +hi def link etermButtonIcon String +hi def link etermButtonIconFile String +hi def link etermButtonAction Keyword +hi def link etermMultiOptions etermOption +hi def link etermEncoding Identifier +hi def link etermXimOptions etermOption +hi def link etermInputMethod Identifier +hi def link etermPreeditType Type +hi def link etermTogOptions etermOption +hi def link etermKeyboardOptions etermOption +hi def link etermKeysym Constant +hi def link etermMiscOptions etermOption +hi def link etermEScreenOptions etermOption +hi def link etermURL Identifier + +let b:current_syntax = "eterm" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/euphoria3.vim b/.config/vim/syntax/euphoria3.vim new file mode 100644 index 0000000..ece1402 --- /dev/null +++ b/.config/vim/syntax/euphoria3.vim @@ -0,0 +1,133 @@ +" Vim syntax file +" Language: Euphoria 3.1.1 - supports DOS - (http://www.rapideuphoria.com/) +" Maintainer: Shian Lee +" Last Change: 2014 Feb 24 (for Vim 7.4) +" Remark: Euphoria has two syntax files, euphoria3.vim and euphoria4.vim; +" For details see :help ft-euphoria-syntax + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Reset compatible-options to Vim default value, just in case: +let s:save_cpo = &cpo +set cpo&vim + +" Should suffice for very long expressions: +syn sync lines=40 + +" Euphoria is a case-sensitive language (with only 4 builtin types): +syntax case match + +" Keywords/Builtins for Debug - from $EUDIR/bin/keywords.e: +syn keyword euphoria3Debug with without trace profile +syn keyword euphoria3Debug profile_time warning type_check + +" Keywords (Statments) - from $EUDIR/bin/keywords.e: +syn keyword euphoria3Keyword if end then procedure else for return +syn keyword euphoria3Keyword do elsif while type constant to and or +syn keyword euphoria3Keyword exit function global by not include +syn keyword euphoria3Keyword xor + +" Builtins (Identifiers) - from $EUDIR/bin/keywords.e: +syn keyword euphoria3Builtin length puts integer sequence position object +syn keyword euphoria3Builtin append prepend print printf +syn keyword euphoria3Builtin clear_screen floor getc gets get_key +syn keyword euphoria3Builtin rand repeat atom compare find match +syn keyword euphoria3Builtin time command_line open close getenv +syn keyword euphoria3Builtin sqrt sin cos tan log system date remainder +syn keyword euphoria3Builtin power machine_func machine_proc abort peek poke +syn keyword euphoria3Builtin call sprintf arctan and_bits or_bits xor_bits +syn keyword euphoria3Builtin not_bits pixel get_pixel mem_copy mem_set +syn keyword euphoria3Builtin c_proc c_func routine_id call_proc call_func +syn keyword euphoria3Builtin poke4 peek4s peek4u equal system_exec +syn keyword euphoria3Builtin platform task_create task_schedule task_yield +syn keyword euphoria3Builtin task_self task_suspend task_list +syn keyword euphoria3Builtin task_status task_clock_stop task_clock_start +syn keyword euphoria3Builtin find_from match_from +" Builtins (Identifiers) shortcuts for length() and print(): +syn match euphoria3Builtin "\$" +syn match euphoria3Builtin "?" + +" Library Identifiers (Function) - from $EUDIR/doc/library.doc: +syn keyword euphoria3Library reverse sort custom_sort lower upper +syn keyword euphoria3Library wildcard_match wildcard_file arcsin +syn keyword euphoria3Library arccos PI flush lock_file unlock_file +syn keyword euphoria3Library pretty_print sprint get_bytes prompt_string +syn keyword euphoria3Library wait_key get prompt_number value seek where +syn keyword euphoria3Library current_dir chdir dir walk_dir allow_break +syn keyword euphoria3Library check_break get_mouse mouse_events mouse_pointer +syn keyword euphoria3Library tick_rate sleep get_position graphics_mode +syn keyword euphoria3Library video_config scroll wrap text_color bk_color +syn keyword euphoria3Library palette all_palette get_all_palette read_bitmap +syn keyword euphoria3Library save_bitmap get_active_page set_active_page +syn keyword euphoria3Library get_display_page set_display_page sound +syn keyword euphoria3Library cursor text_rows get_screen_char put_screen_char +syn keyword euphoria3Library save_text_image display_text_image draw_line +syn keyword euphoria3Library polygon ellipse save_screen save_image display_image +syn keyword euphoria3Library dos_interrupt allocate free allocate_low free_low +syn keyword euphoria3Library allocate_string register_block unregister_block +syn keyword euphoria3Library get_vector set_vector lock_memory int_to_bytes +syn keyword euphoria3Library bytes_to_int int_to_bits bits_to_int atom_to_float64 +syn keyword euphoria3Library atom_to_float32 float64_to_atom float32_to_atom +syn keyword euphoria3Library set_rand use_vesa crash_file crash_message +syn keyword euphoria3Library crash_routine open_dll define_c_proc define_c_func +syn keyword euphoria3Library define_c_var call_back message_box free_console +syn keyword euphoria3Library instance + +" Library Identifiers (Function) - from $EUDIR/doc/database.doc: +syn keyword euphoria3Library db_create db_open db_select db_close db_create_table +syn keyword euphoria3Library db_select_table db_rename_table db_delete_table +syn keyword euphoria3Library db_table_list db_table_size db_find_key db_record_key +syn keyword euphoria3Library db_record_data db_insert db_delete_record +syn keyword euphoria3Library db_replace_data db_compress db_dump db_fatal_id + +" Linux shell comment (#!...): +syn match euphoria3Comment "\%^#!.*$" +" Comment on one line: +syn region euphoria3Comment start=/--/ end=/$/ + +" Delimiters and brackets: +syn match euphoria3Delimit "[([\])]" +syn match euphoria3Delimit "\.\." +syn match euphoria3Operator "[{}]" + +" Character constant: +syn region euphoria3Char start=/'/ skip=/\\'\|\\\\/ end=/'/ oneline + +" String constant: +syn region euphoria3String start=/"/ skip=/\\"\|\\\\/ end=/"/ oneline + +" Hexadecimal integer: +syn match euphoria3Number "#[0-9A-F]\+\>" + +" Integer/Floating point without a dot: +syn match euphoria3Number "\<\d\+\>" +" Floating point with dot: +syn match euphoria3Number "\<\d\+\.\d*\>" +" Floating point starting with a dot: +syn match euphoria3Number "\.\d\+\>" +" Boolean constants: +syn keyword euphoria3Boolean true TRUE false FALSE + +" Define the default highlighting. +" Only used when an item doesn't have highlighting yet: +hi def link euphoria3Comment Comment +hi def link euphoria3String String +hi def link euphoria3Char Character +hi def link euphoria3Number Number +hi def link euphoria3Boolean Boolean +hi def link euphoria3Builtin Identifier +hi def link euphoria3Library Function +hi def link euphoria3Keyword Statement +hi def link euphoria3Operator Statement +hi def link euphoria3Debug Debug +hi def link euphoria3Delimit Delimiter + +let b:current_syntax = "euphoria3" + +" Restore current compatible-options: +let &cpo = s:save_cpo +unlet s:save_cpo + diff --git a/.config/vim/syntax/euphoria4.vim b/.config/vim/syntax/euphoria4.vim new file mode 100644 index 0000000..baa0e8e --- /dev/null +++ b/.config/vim/syntax/euphoria4.vim @@ -0,0 +1,245 @@ +" Vim syntax file +" Language: Euphoria 4.0.5 (http://www.openeuphoria.org/) +" Maintainer: Shian Lee +" Last Change: 2014 Feb 26 (for Vim 7.4) +" Remark: Euphoria has two syntax files, euphoria3.vim and euphoria4.vim; +" For details see :help ft-euphoria-syntax + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Reset compatible-options to Vim default value, just in case: +let s:save_cpo = &cpo +set cpo&vim + +" Should suffice for very long strings and expressions: +syn sync lines=40 + +" Euphoria is a case-sensitive language (with only 4 builtin types): +syntax case match + +" Some keywords/Builtins for Debug - from $EUDIR/include/euphoria/keywords.e: +syn keyword euphoria4Debug with without trace profile batch check indirect +syn keyword euphoria4Debug includes inline warning define + +" Keywords for conditional compilation - from $EUDIR/include/euphoria/keywords.e: +syn keyword euphoria4PreProc elsedef elsifdef ifdef + +" Keywords (Statements) - from $EUDIR/include/euphoria/keywords.e: +syn keyword euphoria4Keyword and as break by case constant continue do else +syn keyword euphoria4Keyword elsif end entry enum exit export +syn keyword euphoria4Keyword fallthru for function global goto if include +syn keyword euphoria4Keyword label loop namespace not or override procedure +syn keyword euphoria4Keyword public retry return routine switch then to type +syn keyword euphoria4Keyword until while xor + +" Builtins (Identifiers) - from $EUDIR/include/euphoria/keywords.e: +syn keyword euphoria4Builtin abort and_bits append arctan atom c_func c_proc +syn keyword euphoria4Builtin call call_func call_proc clear_screen close +syn keyword euphoria4Builtin command_line compare cos date delete delete_routine +syn keyword euphoria4Builtin equal find floor get_key getc getenv gets hash +syn keyword euphoria4Builtin head include_paths insert integer length log +syn keyword euphoria4Builtin machine_func machine_proc match mem_copy mem_set +syn keyword euphoria4Builtin not_bits object open option_switches or_bits peek +syn keyword euphoria4Builtin peek2s peek2u peek4s peek4u peek_string peeks pixel +syn keyword euphoria4Builtin platform poke poke2 poke4 position power prepend +syn keyword euphoria4Builtin print printf puts rand remainder remove repeat +syn keyword euphoria4Builtin replace routine_id sequence sin splice sprintf +syn keyword euphoria4Builtin sqrt system system_exec tail tan task_clock_start +syn keyword euphoria4Builtin task_clock_stop task_create task_list task_schedule +syn keyword euphoria4Builtin task_self task_status task_suspend task_yield time +syn keyword euphoria4Builtin xor_bits +" Builtins (Identifiers) shortcuts for length() and print(): +syn match euphoria4Builtin "\$" +syn match euphoria4Builtin "?" + +" Library Identifiers (Function) - grep from $EUDIR/include/*: +syn keyword euphoria4Library DEP_on SyntaxColor abbreviate_path abs absolute_path +syn keyword euphoria4Library accept add add_item all_copyrights all_matches +syn keyword euphoria4Library allocate allocate_code allocate_data allocate_low +syn keyword euphoria4Library allocate_pointer_array allocate_protect +syn keyword euphoria4Library allocate_string allocate_string_pointer_array +syn keyword euphoria4Library allocate_wstring allocations allow_break any_key +syn keyword euphoria4Library append_lines apply approx arccos arccosh arcsin +syn keyword euphoria4Library arcsinh arctanh assert at atan2 atom_to_float32 +syn keyword euphoria4Library atom_to_float64 attr_to_colors avedev average +syn keyword euphoria4Library begins binary_search bind binop_ok bits_to_int +syn keyword euphoria4Library bk_color breakup build_commandline build_list +syn keyword euphoria4Library bytes_to_int calc_hash calc_primes call_back +syn keyword euphoria4Library canon2win canonical canonical_path ceil +syn keyword euphoria4Library central_moment chance char_test chdir +syn keyword euphoria4Library check_all_blocks check_break check_free_list +syn keyword euphoria4Library checksum clear clear_directory cmd_parse +syn keyword euphoria4Library colors_to_attr columnize combine connect +syn keyword euphoria4Library console_colors copy copy_file cosh count crash +syn keyword euphoria4Library crash_file crash_message crash_routine create +syn keyword euphoria4Library create_directory create_file curdir current_dir +syn keyword euphoria4Library cursor custom_sort datetime days_in_month +syn keyword euphoria4Library days_in_year db_cache_clear db_clear_table db_close +syn keyword euphoria4Library db_compress db_connect db_create db_create_table +syn keyword euphoria4Library db_current db_current_table db_delete_record +syn keyword euphoria4Library db_delete_table db_dump db_fetch_record db_find_key +syn keyword euphoria4Library db_get_errors db_get_recid db_insert db_open +syn keyword euphoria4Library db_record_data db_record_key db_record_recid +syn keyword euphoria4Library db_rename_table db_replace_data db_replace_recid +syn keyword euphoria4Library db_select db_select_table db_set_caching +syn keyword euphoria4Library db_table_list db_table_size deallocate decanonical +syn keyword euphoria4Library decode defaulted_value defaultext define_c_func +syn keyword euphoria4Library define_c_proc define_c_var deg2rad delete_file +syn keyword euphoria4Library dep_works dequote deserialize diff dir dir_size +syn keyword euphoria4Library dirname disk_metrics disk_size display +syn keyword euphoria4Library display_text_image dnsquery driveid dump dup emovavg +syn keyword euphoria4Library encode ends ensure_in_list ensure_in_range +syn keyword euphoria4Library error_code error_message error_no error_string +syn keyword euphoria4Library error_to_string escape euphoria_copyright exec +syn keyword euphoria4Library exp extract fetch fib file_exists file_length +syn keyword euphoria4Library file_timestamp file_type filebase fileext filename +syn keyword euphoria4Library filter find_all find_all_but find_any find_each +syn keyword euphoria4Library find_nested find_replace find_replace_callback +syn keyword euphoria4Library find_replace_limit flags_to_string flatten +syn keyword euphoria4Library float32_to_atom float64_to_atom flush for_each +syn keyword euphoria4Library format frac free free_code free_console free_low +syn keyword euphoria4Library free_pointer_array from_date from_unix gcd geomean +syn keyword euphoria4Library get get_bytes get_charsets get_def_lang +syn keyword euphoria4Library get_display_page get_dstring get_encoding_properties +syn keyword euphoria4Library get_integer16 get_integer32 get_lang_path get_lcid +syn keyword euphoria4Library get_mouse get_option get_ovector_size get_pid +syn keyword euphoria4Library get_position get_rand get_screen_char get_text +syn keyword euphoria4Library get_vector getaddrinfo getmxrr getnsrr graphics_mode +syn keyword euphoria4Library harmean has has_console has_match hex_text +syn keyword euphoria4Library host_by_addr host_by_name http_get http_post iff +syn keyword euphoria4Library iif info init_class init_curdir insertion_sort +syn keyword euphoria4Library instance int_to_bits int_to_bytes intdiv +syn keyword euphoria4Library is_DEP_supported is_empty is_even is_even_obj +syn keyword euphoria4Library is_in_list is_in_range is_inetaddr is_leap_year +syn keyword euphoria4Library is_match is_using_DEP is_win_nt join join_path +syn keyword euphoria4Library keep_comments keep_newlines key_codes keys keyvalues +syn keyword euphoria4Library kill kurtosis lang_load larger_of largest last +syn keyword euphoria4Library listen load load_map locate_file lock_file +syn keyword euphoria4Library lock_memory log10 lookup lower malloc mapping +syn keyword euphoria4Library match_all match_any match_replace matches max +syn keyword euphoria4Library maybe_any_key median memory_used merge message_box +syn keyword euphoria4Library mid min minsize mod mode money mouse_events +syn keyword euphoria4Library mouse_pointer movavg move_file nested_get +syn keyword euphoria4Library nested_put new new_extra new_from_kvpairs +syn keyword euphoria4Library new_from_string new_time next_prime now now_gmt +syn keyword euphoria4Library number open_dll optimize option_spec_to_string +syn keyword euphoria4Library or_all pad_head pad_tail pairs parse +syn keyword euphoria4Library parse_commandline parse_ip_address parse_querystring +syn keyword euphoria4Library parse_url patch pathinfo pathname pcre_copyright +syn keyword euphoria4Library peek_end peek_top peek_wstring pivot platform_name +syn keyword euphoria4Library poke_string poke_wstring pop powof2 prepare_block +syn keyword euphoria4Library pretty_print pretty_sprint prime_list process_lines +syn keyword euphoria4Library product project prompt_number prompt_string proper +syn keyword euphoria4Library push put put_integer16 put_integer32 put_screen_char +syn keyword euphoria4Library quote rad2deg rand_range range raw_frequency read +syn keyword euphoria4Library read_bitmap read_file read_lines receive receive_from +syn keyword euphoria4Library register_block rehash remove_all remove_directory +syn keyword euphoria4Library remove_dups remove_item remove_subseq rename_file +syn keyword euphoria4Library repeat_pattern reset retain_all reverse rfind rmatch +syn keyword euphoria4Library rnd rnd_1 roll rotate rotate_bits round safe_address +syn keyword euphoria4Library sample save_bitmap save_map save_text_image scroll +syn keyword euphoria4Library seek select send send_to serialize series +syn keyword euphoria4Library service_by_name service_by_port set +syn keyword euphoria4Library set_accumulate_summary set_charsets set_colors +syn keyword euphoria4Library set_decimal_mark set_def_lang set_default_charsets +syn keyword euphoria4Library set_encoding_properties set_keycodes set_lang_path +syn keyword euphoria4Library set_option set_rand set_test_abort set_test_verbosity +syn keyword euphoria4Library set_vector set_wait_on_summary setenv shift_bits +syn keyword euphoria4Library show_block show_help show_tokens shuffle shutdown +syn keyword euphoria4Library sign sim_index sinh size skewness sleep slice small +syn keyword euphoria4Library smaller_of smallest sort sort_columns sound split +syn keyword euphoria4Library split_any split_limit split_path sprint start_time +syn keyword euphoria4Library statistics stdev store string_numbers subtract sum +syn keyword euphoria4Library sum_central_moments swap tanh task_delay temp_file +syn keyword euphoria4Library test_equal test_exec test_fail test_false +syn keyword euphoria4Library test_not_equal test_pass test_read test_report +syn keyword euphoria4Library test_true test_write text_color text_rows threshold +syn keyword euphoria4Library tick_rate to_integer to_number to_string to_unix +syn keyword euphoria4Library tokenize_file tokenize_string top transform translate +syn keyword euphoria4Library transmute trim trim_head trim_tail trsprintf trunc +syn keyword euphoria4Library type_of uname unlock_file unregister_block unsetenv +syn keyword euphoria4Library upper use_vesa valid valid_index value values version +syn keyword euphoria4Library version_date version_major version_minor version_node +syn keyword euphoria4Library version_patch version_revision version_string +syn keyword euphoria4Library version_string_long version_string_short version_type +syn keyword euphoria4Library video_config vlookup vslice wait_key walk_dir +syn keyword euphoria4Library warning_file weeks_day where which_bit wildcard_file +syn keyword euphoria4Library wildcard_match wrap write write_file write_lines +syn keyword euphoria4Library writef writefln years_day + +" Library Identifiers (Type) - grep from $EUDIR/include/*: +syn keyword euphoria4Type ascii_string boolean bordered_address byte_range +syn keyword euphoria4Type case_flagset_type color cstring +syn keyword euphoria4Type file_number file_position graphics_point +syn keyword euphoria4Type integer_array lcid lock_type machine_addr map +syn keyword euphoria4Type mixture number_array option_spec +syn keyword euphoria4Type page_aligned_address positive_int process regex +syn keyword euphoria4Type sequence_array socket stack std_library_address +syn keyword euphoria4Type string t_alnum t_alpha t_ascii t_boolean +syn keyword euphoria4Type t_bytearray t_cntrl t_consonant t_digit t_display +syn keyword euphoria4Type t_graph t_identifier t_lower t_print t_punct +syn keyword euphoria4Type t_space t_specword t_text t_upper t_vowel t_xdigit +syn keyword euphoria4Type valid_memory_protection_constant valid_wordsize + +" Linux shell comment (#!...): +syn match euphoria4Comment "\%^#!.*$" +" Single and multilines comments: +syn region euphoria4Comment start=/--/ end=/$/ +syn region euphoria4Comment start="/\*" end="\*/" + +" Delimiters and brackets: +syn match euphoria4Delimit "[([\])]" +syn match euphoria4Delimit "\.\." +syn match euphoria4Delimit ":" +syn match euphoria4Operator "[{}]" + +" Character constant: +syn region euphoria4Char start=/'/ skip=/\\'\|\\\\/ end=/'/ oneline + +" String constant (""" must be *after* "): +syn region euphoria4String start=/"/ skip=/\\"\|\\\\/ end=/"/ oneline +syn region euphoria4String start=/b"\|x"/ end=/"/ +syn region euphoria4String start=/`/ end=/`/ +syn region euphoria4String start=/"""/ end=/"""/ + +" Binary/Octal/Decimal/Hexadecimal integer: +syn match euphoria4Number "\<0b[01_]\+\>" +syn match euphoria4Number "\<0t[0-7_]\+\>" +syn match euphoria4Number "\<0d[0-9_]\+\>" +syn match euphoria4Number "\<0x[0-9A-Fa-f_]\+\>" +syn match euphoria4Number "#[0-9A-Fa-f_]\+\>" + +" Integer/Floating point without a dot: +syn match euphoria4Number "\<\d\+\>" +" Floating point with dot: +syn match euphoria4Number "\<\d\+\.\d*\>" +" Floating point starting with a dot: +syn match euphoria4Number "\.\d\+\>" +" Boolean constants: +syn keyword euphoria4Boolean true TRUE false FALSE + +" Define the default highlighting. +" Only used when an item doesn't have highlighting yet: +hi def link euphoria4Comment Comment +hi def link euphoria4String String +hi def link euphoria4Char Character +hi def link euphoria4Number Number +hi def link euphoria4Boolean Boolean +hi def link euphoria4Builtin Identifier +hi def link euphoria4Library Function +hi def link euphoria4Type Type +hi def link euphoria4Keyword Statement +hi def link euphoria4Operator Statement +hi def link euphoria4Debug Debug +hi def link euphoria4Delimit Delimiter +hi def link euphoria4PreProc PreProc + +let b:current_syntax = "euphoria4" + +" Restore current compatible-options: +let &cpo = s:save_cpo +unlet s:save_cpo + diff --git a/.config/vim/syntax/eviews.vim b/.config/vim/syntax/eviews.vim new file mode 100644 index 0000000..03cfb25 --- /dev/null +++ b/.config/vim/syntax/eviews.vim @@ -0,0 +1,87 @@ +" Vim syntax file +" Language: Eviews (http://www.eviews.com) +" Maintainer: Vaidotas Zemlys +" Last Change: 2006 Apr 30 +" Filenames: *.prg +" URL: http://uosis.mif.vu.lt/~zemlys/vim-syntax/eviews.vim +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +setlocal iskeyword=@,48-57,_,. + +syn case match + +" Comment +syn match eComment /\'.*/ + +" Constant +" string enclosed in double quotes +syn region eString start=/"/ skip=/\\\\\|\\"/ end=/"/ +" number with no fractional part or exponent +syn match eNumber /\d\+/ +" floating point number with integer and fractional parts and optional exponent +syn match eFloat /\d\+\.\d*\([Ee][-+]\=\d\+\)\=/ +" floating point number with no integer part and optional exponent +syn match eFloat /\.\d\+\([Ee][-+]\=\d\+\)\=/ +" floating point number with no fractional part and optional exponent +syn match eFloat /\d\+[Ee][-+]\=\d\+/ + +" Identifier +" identifier with leading letter and optional following keyword characters +syn match eIdentifier /\a\k*/ + +" Eviews Programing Language +syn keyword eProgLang @date else endif @errorcount @evpath exitloop for if @isobject next poff pon return statusline step stop @temppath then @time to @toc wend while include call subroutine endsub and or + +" Eviews Objects, Views and Procedures +syn keyword eOVP alpha coef equation graph group link logl matrix model pool rowvector sample scalar series sspace sym system table text valmap var vector + + +" Standard Eviews Commands +syn keyword eStdCmd 3sls add addassign addinit addtext align alpha append arch archtest area arlm arma arroots auto axis bar bdstest binary block boxplot boxplotby bplabel cause ccopy cd cdfplot cellipse censored cfetch checkderivs chow clabel cleartext close coef coefcov coint comment control copy cor correl correlsq count cov create cross data datelabel dates db dbcopy dbcreate dbdelete dbopen dbpack dbrebuild dbrename dbrepair decomp define delete derivs describe displayname do draw driconvert drop dtable ec edftest endog eqs equation errbar exclude exit expand fetch fill fiml fit forecast freeze freq frml garch genr gmm grads graph group hconvert hfetch hilo hist hlabel hpf impulse jbera kdensity kerfit label laglen legend line linefit link linkto load logit logl ls makecoint makederivs makeendog makefilter makegarch makegrads makegraph makegroup makelimits makemodel makeregs makeresids makesignals makestates makestats makesystem map matrix means merge metafile ml model msg name nnfit open options ordered output override pageappend pagecontract pagecopy pagecreate pagedelete pageload pagerename pagesave pageselect pagestack pagestruct pageunstack param pcomp pie pool predict print probit program qqplot qstats range read rename representations resample reset residcor residcov resids results rls rndint rndseed rowvector run sample save scalar scale scat scatmat scenario seas seasplot series set setbpelem setcell setcolwidth setconvert setelem setfillcolor setfont setformat setheight setindent setjust setline setlines setmerge settextcolor setwidth sheet show signalgraphs smooth smpl solve solveopt sort spec spike sspace statby statefinal stategraphs stateinit stats statusline stomna store structure sur svar sym system table template testadd testbtw testby testdrop testexog testfit testlags teststat text tic toc trace tramoseats tsls unlink update updatecoefs uroot usage valmap var vars vector wald wfcreate wfopen wfsave wfselect white wls workfile write wtsls x11 x12 xy xyline xypair + +" Constant Identifier +syn match eConstant /\!\k*/ +" String Identifier +syn match eStringId /%\k*/ +" Command Identifier +syn match eCommand /@\k*/ + +" Special +syn match eDelimiter /[,;:]/ + +" Error +syn region eRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError +syn region eRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError +syn region eRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError +syn match eError /[)\]}]/ +syn match eBraceError /[)}]/ contained +syn match eCurlyError /[)\]]/ contained +syn match eParenError /[\]}]/ contained + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link eComment Comment +hi def link eConstant Identifier +hi def link eStringId Identifier +hi def link eCommand Type +hi def link eString String +hi def link eNumber Number +hi def link eBoolean Boolean +hi def link eFloat Float +hi def link eConditional Conditional +hi def link eProgLang Statement +hi def link eOVP Statement +hi def link eStdCmd Statement +hi def link eIdentifier Normal +hi def link eDelimiter Delimiter +hi def link eError Error +hi def link eBraceError Error +hi def link eCurlyError Error +hi def link eParenError Error + +let b:current_syntax="eviews" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/exim.vim b/.config/vim/syntax/exim.vim new file mode 100644 index 0000000..4edc0d7 --- /dev/null +++ b/.config/vim/syntax/exim.vim @@ -0,0 +1,105 @@ +" Vim syntax file +" This is a GENERATED FILE. Please always refer to source file at the URI below. +" Language: Exim configuration file exim.conf +" Maintainer: David Ne\v{c}as (Yeti) +" Last Change: 2002-10-15 +" URL: http://trific.ath.cx/Ftp/vim/syntax/exim.vim + +" Setup +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case match + +" Base constructs +syn match eximComment "^\s*#.*$" contains=eximFixme +syn match eximComment "\s#.*$" contains=eximFixme +syn keyword eximFixme FIXME TODO XXX NOT contained +syn keyword eximConstant true false yes no +syn match eximNumber "\<\d\+[KM]\?\>" +syn match eximNumber "\<0[xX]\x\+\>" +syn match eximNumber "\<\d\+\(\.\d\{,3}\)\?\>" +syn match eximTime "\<\(\d\+[wdhms]\)\+\>" +syn match eximSpecialChar "\\[\\nrt]\|\\\o\{1,3}\|\\x\x\{1,2}" +syn region eximMacroDefinition matchgroup=eximMacroName start="^[A-Z]\i*\s*=" end="$" skip="\\\s*$" transparent + +syn match eximDriverName "\<\(aliasfile\|appendfile\|autoreply\|domainlist\|forwardfile\|ipliteral\|iplookup\|lmtp\|localuser\|lookuphost\|pipe\|queryprogram\|smartuser\|smtp\)\>" +syn match eximTransport "^\s*\i\+:" + +" Options +syn keyword eximEnd end +syn keyword eximKeyword accept_8bitmime accept_timeout admin_groups allow_mx_to_ip always_bcc auth_always_advertise auth_hosts auth_over_tls_hosts auto_thaw bi_command check_log_inodes check_log_space check_spool_inodes check_spool_space collapse_source_routes daemon_smtp_port daemon_smtp_service debug_level delay_warning delay_warning_condition deliver_load_max deliver_queue_load_max delivery_date_remove dns_again_means_nonexist dns_check_names dns_check_names_pattern dns_retrans dns_ipv4_lookup dns_retry envelope_to_remove errmsg_text errmsg_file errors_address errors_copy errors_reply_to exim_group exim_path exim_user extract_addresses_remove_arguments finduser_retries forbid_domain_literals freeze_tell_mailmaster gecos_name gecos_pattern headers_check_syntax headers_checks_fail headers_sender_verify headers_sender_verify_errmsg helo_accept_junk_hosts helo_strict_syntax helo_verify hold_domains host_accept_relay host_auth_accept_relay host_lookup host_reject host_reject_recipients hosts_treat_as_local ignore_errmsg_errors ignore_errmsg_errors_after ignore_fromline_hosts ignore_fromline_local keep_malformed kill_ip_options ldap_default_servers local_domains local_domains_include_host local_domains_include_host_literals local_from_check local_from_prefix local_from_suffix local_interfaces localhost_number locally_caseless log_all_parents log_arguments log_file_path log_incoming_port log_ip_options log_level log_queue_run_level log_received_recipients log_received_sender log_refused_recipients log_rewrites log_sender_on_delivery log_smtp_confirmation log_smtp_connections log_smtp_syntax_errors log_subject lookup_open_max max_username_length message_body_visible message_filter message_filter_directory_transport message_filter_directory2_transport message_filter_file_transport message_filter_group message_filter_pipe_transport message_filter_reply_transport message_filter_user message_id_header_text message_size_limit message_size_limit_count_recipients move_frozen_messages mysql_servers never_users nobody_group nobody_user percent_hack_domains perl_at_start perl_startup pgsql_servers pid_file_path preserve_message_logs primary_hostname print_topbitchars prod_requires_admin prohibition_message qualify_domain qualify_recipient queue_list_requires_admin queue_only queue_only_file queue_only_load queue_remote_domains queue_run_in_order queue_run_max queue_smtp_domains rbl_domains rbl_hosts rbl_log_headers rbl_log_rcpt_count rbl_reject_recipients rbl_warn_header received_header_text received_headers_max receiver_try_verify receiver_unqualified_hosts receiver_verify receiver_verify_addresses receiver_verify_hosts receiver_verify_senders recipients_max recipients_max_reject recipients_reject_except recipients_reject_except_senders refuse_ip_options relay_domains relay_domains_include_local_mx relay_match_host_or_sender remote_max_parallel remote_sort retry_data_expire retry_interval_max return_path_remove return_size_limit rfc1413_hosts rfc1413_query_timeout security sender_address_relay sender_address_relay_hosts sender_reject sender_reject_recipients sender_try_verify sender_unqualified_hosts sender_verify sender_verify_batch sender_verify_callback_domains sender_verify_callback_timeout sender_verify_fixup sender_verify_hosts sender_verify_hosts_callback sender_verify_max_retry_rate sender_verify_reject smtp_accept_keepalive smtp_accept_max smtp_accept_max_per_host smtp_accept_queue smtp_accept_queue_per_connection smtp_accept_reserve smtp_banner smtp_check_spool_space smtp_connect_backlog smtp_etrn_command smtp_etrn_hosts smtp_etrn_serialize smtp_expn_hosts smtp_load_reserve smtp_receive_timeout smtp_reserve_hosts smtp_verify split_spool_directory spool_directory strip_excess_angle_brackets strip_trailing_dot syslog_timestamp timeout_frozen_after timestamps_utc timezone tls_advertise_hosts tls_certificate tls_dhparam tls_host_accept_relay tls_hosts tls_log_cipher tls_log_peerdn tls_privatekey tls_verify_certificates tls_verify_ciphers tls_verify_hosts trusted_groups trusted_users unknown_login unknown_username untrusted_set_sender uucp_from_pattern uucp_from_sender warnmsg_file +syn keyword eximKeyword no_accept_8bitmime no_allow_mx_to_ip no_always_bcc no_auth_always_advertise no_collapse_source_routes no_delivery_date_remove no_dns_check_names no_envelope_to_remove no_extract_addresses_remove_arguments no_forbid_domain_literals no_freeze_tell_mailmaster no_headers_check_syntax no_headers_checks_fail no_headers_sender_verify no_headers_sender_verify_errmsg no_helo_strict_syntax no_ignore_errmsg_errors no_ignore_fromline_local no_kill_ip_options no_local_domains_include_host no_local_domains_include_host_literals no_local_from_check no_locally_caseless no_log_all_parents no_log_arguments no_log_incoming_port no_log_ip_options no_log_received_recipients no_log_received_sender no_log_refused_recipients no_log_rewrites no_log_sender_on_delivery no_log_smtp_confirmation no_log_smtp_connections no_log_smtp_syntax_errors no_log_subject no_message_size_limit_count_recipients no_move_frozen_messages no_preserve_message_logs no_print_topbitchars no_prod_requires_admin no_queue_list_requires_admin no_queue_only no_rbl_log_headers no_rbl_log_rcpt_count no_rbl_reject_recipients no_receiver_try_verify no_receiver_verify no_recipients_max_reject no_refuse_ip_options no_relay_domains_include_local_mx no_relay_match_host_or_sender no_return_path_remove no_sender_try_verify no_sender_verify no_sender_verify_batch no_sender_verify_fixup no_sender_verify_reject no_smtp_accept_keepalive no_smtp_check_spool_space no_smtp_etrn_serialize no_smtp_verify no_split_spool_directory no_strip_excess_angle_brackets no_strip_trailing_dot no_syslog_timestamp no_timestamps_utc no_tls_log_cipher no_tls_log_peerdn no_untrusted_set_sender +syn keyword eximKeyword not_accept_8bitmime not_allow_mx_to_ip not_always_bcc not_auth_always_advertise not_collapse_source_routes not_delivery_date_remove not_dns_check_names not_envelope_to_remove not_extract_addresses_remove_arguments not_forbid_domain_literals not_freeze_tell_mailmaster not_headers_check_syntax not_headers_checks_fail not_headers_sender_verify not_headers_sender_verify_errmsg not_helo_strict_syntax not_ignore_errmsg_errors not_ignore_fromline_local not_kill_ip_options not_local_domains_include_host not_local_domains_include_host_literals not_local_from_check not_locally_caseless not_log_all_parents not_log_arguments not_log_incoming_port not_log_ip_options not_log_received_recipients not_log_received_sender not_log_refused_recipients not_log_rewrites not_log_sender_on_delivery not_log_smtp_confirmation not_log_smtp_connections not_log_smtp_syntax_errors not_log_subject not_message_size_limit_count_recipients not_move_frozen_messages not_preserve_message_logs not_print_topbitchars not_prod_requires_admin not_queue_list_requires_admin not_queue_only not_rbl_log_headers not_rbl_log_rcpt_count not_rbl_reject_recipients not_receiver_try_verify not_receiver_verify not_recipients_max_reject not_refuse_ip_options not_relay_domains_include_local_mx not_relay_match_host_or_sender not_return_path_remove not_sender_try_verify not_sender_verify not_sender_verify_batch not_sender_verify_fixup not_sender_verify_reject not_smtp_accept_keepalive not_smtp_check_spool_space not_smtp_etrn_serialize not_smtp_verify not_split_spool_directory not_strip_excess_angle_brackets not_strip_trailing_dot not_syslog_timestamp not_timestamps_utc not_tls_log_cipher not_tls_log_peerdn not_untrusted_set_sender +syn keyword eximKeyword body_only debug_print delivery_date_add driver envelope_to_add headers_add headers_only headers_remove headers_rewrite message_size_limit return_path return_path_add shadow_condition shadow_transport transport_filter +syn keyword eximKeyword no_body_only no_delivery_date_add no_envelope_to_add no_headers_only no_return_path_add +syn keyword eximKeyword not_body_only not_delivery_date_add not_envelope_to_add not_headers_only not_return_path_add +syn keyword eximKeyword allow_fifo allow_symlink batch batch_max bsmtp bsmtp_helo check_group check_owner check_string create_directory create_file current_directory directory directory_mode escape_string file file_format file_must_exist from_hack group lock_fcntl_timeout lock_interval lock_retries lockfile_mode lockfile_timeout maildir_format maildir_retries maildir_tag mailstore_format mailstore_prefix mailstore_suffix mbx_format mode mode_fail_narrower notify_comsat prefix quota quota_filecount quota_is_inclusive quota_size_regex quota_warn_message quota_warn_threshold require_lockfile retry_use_local_part suffix use_crlf use_fcntl_lock use_lockfile use_mbx_lock user +syn keyword eximKeyword no_allow_fifo no_allow_symlink no_bsmtp_helo no_check_group no_check_owner no_create_directory no_file_must_exist no_from_hack no_maildir_format no_mailstore_format no_mbx_format no_mode_fail_narrower no_notify_comsat no_quota_is_inclusive no_require_lockfile no_retry_use_local_part no_use_crlf no_use_fcntl_lock no_use_lockfile no_use_mbx_lock +syn keyword eximKeyword not_allow_fifo not_allow_symlink not_bsmtp_helo not_check_group not_check_owner not_create_directory not_file_must_exist not_from_hack not_maildir_format not_mailstore_format not_mbx_format not_mode_fail_narrower not_notify_comsat not_quota_is_inclusive not_require_lockfile not_retry_use_local_part not_use_crlf not_use_fcntl_lock not_use_lockfile not_use_mbx_lock +syn keyword eximKeyword bcc cc file file_expand file_optional from group headers initgroups log mode once once_file_size once_repeat reply_to return_message subject text to user +syn keyword eximKeyword no_file_expand no_file_optional no_initgroups no_return_message +syn keyword eximKeyword not_file_expand not_file_optional not_initgroups not_return_message +syn keyword eximKeyword batch batch_max command group initgroups retry_use_local_part timeout user +syn keyword eximKeyword no_initgroups +syn keyword eximKeyword not_initgroups +syn keyword eximKeyword allow_commands batch batch_max bsmtp bsmtp_helo check_string command current_directory environment escape_string freeze_exec_fail from_hack group home_directory ignore_status initgroups log_defer_output log_fail_output log_output max_output path pipe_as_creator prefix restrict_to_path retry_use_local_part return_fail_output return_output suffix temp_errors timeout umask use_crlf use_shell user +syn keyword eximKeyword no_bsmtp_helo no_freeze_exec_fail no_from_hack no_ignore_status no_log_defer_output no_log_fail_output no_log_output no_pipe_as_creator no_restrict_to_path no_return_fail_output no_return_output no_use_crlf no_use_shell +syn keyword eximKeyword not_bsmtp_helo not_freeze_exec_fail not_from_hack not_ignore_status not_log_defer_output not_log_fail_output not_log_output not_pipe_as_creator not_restrict_to_path not_return_fail_output not_return_output not_use_crlf not_use_shell +syn keyword eximKeyword allow_localhost authenticate_hosts batch_max command_timeout connect_timeout data_timeout delay_after_cutoff dns_qualify_single dns_search_parents fallback_hosts final_timeout gethostbyname helo_data hosts hosts_avoid_tls hosts_require_tls hosts_override hosts_max_try hosts_randomize interface keepalive max_rcpt multi_domain mx_domains port protocol retry_include_ip_address serialize_hosts service size_addition tls_certificate tls_privatekey tls_verify_certificates tls_verify_ciphers +syn keyword eximKeyword no_allow_localhost no_delay_after_cutoff no_dns_qualify_single no_dns_search_parents no_gethostbyname no_hosts_override no_hosts_randomize no_keepalive no_multi_domain no_retry_include_ip_address +syn keyword eximKeyword not_allow_localhost not_delay_after_cutoff not_dns_qualify_single not_dns_search_parents not_gethostbyname not_hosts_override not_hosts_randomize not_keepalive not_multi_domain not_retry_include_ip_address +syn keyword eximKeyword condition debug_print domains driver errors_to fail_verify fail_verify_recipient fail_verify_sender fallback_hosts group headers_add headers_remove initgroups local_parts more require_files senders transport unseen user verify verify_only verify_recipient verify_sender +syn keyword eximKeyword no_fail_verify no_fail_verify_recipient no_fail_verify_sender no_initgroups no_more no_unseen no_verify no_verify_only no_verify_recipient no_verify_sender +syn keyword eximKeyword not_fail_verify not_fail_verify_recipient not_fail_verify_sender not_initgroups not_more not_unseen not_verify not_verify_only not_verify_recipient not_verify_sender +syn keyword eximKeyword current_directory expn home_directory new_director prefix prefix_optional suffix suffix_optional +syn keyword eximKeyword no_expn no_prefix_optional no_suffix_optional +syn keyword eximKeyword not_expn not_prefix_optional not_suffix_optional +syn keyword eximKeyword check_ancestor directory_transport directory2_transport file_transport forbid_file forbid_include forbid_pipe freeze_missing_include hide_child_in_errmsg modemask one_time owners owngroups pipe_transport qualify_preserve_domain rewrite skip_syntax_errors syntax_errors_text syntax_errors_to +syn keyword eximKeyword no_check_ancestor no_forbid_file no_forbid_include no_forbid_pipe no_freeze_missing_include no_hide_child_in_errmsg no_one_time no_qualify_preserve_domain no_rewrite no_skip_syntax_errors +syn keyword eximKeyword not_check_ancestor not_forbid_file not_forbid_include not_forbid_pipe not_freeze_missing_include not_hide_child_in_errmsg not_one_time not_qualify_preserve_domain not_rewrite not_skip_syntax_errors +syn keyword eximKeyword expand file forbid_special include_domain optional queries query search_type +syn keyword eximKeyword no_expand no_forbid_special no_include_domain no_optional +syn keyword eximKeyword not_expand not_forbid_special not_include_domain not_optional +syn keyword eximKeyword allow_system_actions check_group check_local_user data file file_directory filter forbid_filter_existstest forbid_filter_logwrite forbid_filter_lookup forbid_filter_perl forbid_filter_reply ignore_eacces ignore_enotdir match_directory reply_transport seteuid +syn keyword eximKeyword no_allow_system_actions no_check_local_user no_forbid_filter_reply no_forbid_filter_existstest no_forbid_filter_logwrite no_forbid_filter_lookup no_forbid_filter_perl no_forbid_filter_reply no_ignore_eacces no_ignore_enotdir no_seteuid +syn keyword eximKeyword not_allow_system_actions not_check_local_user not_forbid_filter_reply not_forbid_filter_existstest not_forbid_filter_logwrite not_forbid_filter_lookup not_forbid_filter_perl not_forbid_filter_reply not_ignore_eacces not_ignore_enotdir not_seteuid +syn keyword eximKeyword match_directory +syn keyword eximKeyword directory_transport directory2_transport file_transport forbid_file forbid_pipe hide_child_in_errmsg new_address panic_expansion_fail pipe_transport qualify_preserve_domain rewrite +syn keyword eximKeyword no_forbid_file no_forbid_pipe no_hide_child_in_errmsg no_panic_expansion_fail no_qualify_preserve_domain no_rewrite +syn keyword eximKeyword not_forbid_file not_forbid_pipe not_hide_child_in_errmsg not_panic_expansion_fail not_qualify_preserve_domain not_rewrite +syn keyword eximKeyword ignore_target_hosts pass_on_timeout self translate_ip_address +syn keyword eximKeyword no_pass_on_timeout +syn keyword eximKeyword not_pass_on_timeout +syn keyword eximKeyword host_find_failed hosts_randomize modemask owners owngroups qualify_single route_file route_list route_queries route_query search_parents search_type +syn keyword eximKeyword no_hosts_randomize no_qualify_single no_search_parents +syn keyword eximKeyword not_hosts_randomize not_qualify_single not_search_parents +syn keyword eximKeyword hosts optional port protocol query reroute response_pattern service timeout +syn keyword eximKeyword no_optional +syn keyword eximKeyword not_optional +syn keyword eximKeyword check_secondary_mx gethostbyname mx_domains qualify_single rewrite_headers search_parents widen_domains +syn keyword eximKeyword no_check_secondary_mx no_gethostbyname no_qualify_single no_search_parents +syn keyword eximKeyword not_check_secondary_mx not_gethostbyname not_qualify_single not_search_parents +syn keyword eximKeyword command command_group command_user current_directory timeout +syn keyword eximKeyword driver public_name server_set_id server_mail_auth_condition +syn keyword eximKeyword server_prompts server_condition client_send +syn keyword eximKeyword server_secret client_name client_secret + +" Define the default highlighting + +hi def link eximComment Comment +hi def link eximFixme Todo +hi def link eximEnd Keyword +hi def link eximNumber Number +hi def link eximDriverName Constant +hi def link eximConstant Constant +hi def link eximTime Constant +hi def link eximKeyword Type +hi def link eximSpecialChar Special +hi def link eximMacroName Preproc +hi def link eximTransport Identifier + + +let b:current_syntax = "exim" diff --git a/.config/vim/syntax/expect.vim b/.config/vim/syntax/expect.vim new file mode 100644 index 0000000..75cbd3e --- /dev/null +++ b/.config/vim/syntax/expect.vim @@ -0,0 +1,103 @@ +" Vim syntax file +" Language: Expect +" Maintainer: Ralph Jennings +" Last Change: 2012 Jun 01 +" (Dominique Pelle added @Spell) + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Reserved Expect variable prefixes. +syn match expectVariables "\$exp[a-zA-Z0-9_]*\|\$inter[a-zA-Z0-9_]*" +syn match expectVariables "\$spawn[a-zA-Z0-9_]*\|\$timeout[a-zA-Z0-9_]*" + +" Normal Expect variables. +syn match expectVariables "\$env([^)]*)" +syn match expectVariables "\$any_spawn_id\|\$argc\|\$argv\d*" +syn match expectVariables "\$user_spawn_id\|\$spawn_id\|\$timeout" + +" Expect variable arrays. +syn match expectVariables "\$\(expect\|interact\)_out([^)]*)" contains=expectOutVar + +" User defined variables. +syn match expectVariables "\$[a-zA-Z_][a-zA-Z0-9_]*" + +" Reserved Expect command prefixes. +syn match expectCommand "exp_[a-zA-Z0-9_]*" + +" Normal Expect commands. +syn keyword expectStatement close debug disconnect +syn keyword expectStatement exit exp_continue exp_internal exp_open +syn keyword expectStatement exp_pid exp_version +syn keyword expectStatement fork inter_return interpreter +syn keyword expectStatement log_file log_user match_max overlay +syn keyword expectStatement parity remove_nulls return +syn keyword expectStatement send send_error send_log send_user +syn keyword expectStatement sleep spawn strace stty system +syn keyword expectStatement timestamp trace trap wait + +" Tcl commands recognized and used by Expect. +syn keyword expectCommand proc +syn keyword expectConditional if else +syn keyword expectRepeat while for foreach + +" Expect commands with special arguments. +syn keyword expectStatement expect expect_after expect_background nextgroup=expectExpectOpts +syn keyword expectStatement expect_before expect_user interact nextgroup=expectExpectOpts + +syn match expectSpecial contained "\\." + +" Options for "expect", "expect_after", "expect_background", +" "expect_before", "expect_user", and "interact". +syn keyword expectExpectOpts default eof full_buffer null return timeout + +syn keyword expectOutVar contained spawn_id seconds seconds_total +syn keyword expectOutVar contained string start end buffer + +" Numbers (Tcl style). +syn case ignore + syn match expectNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" + "floating point number, with dot, optional exponent + syn match expectNumber "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" + "floating point number, starting with a dot, optional exponent + syn match expectNumber "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" + "floating point number, without dot, with exponent + syn match expectNumber "\<\d\+e[-+]\=\d\+[fl]\=\>" + "hex number + syn match expectNumber "0x[0-9a-f]\+\(u\=l\=\|lu\)\>" + "syn match expectIdentifier "\<[a-z_][a-z0-9_]*\>" +syn case match + +syn region expectString start=+"+ end=+"+ contains=@Spell,expectVariables,expectSpecial + +" Are these really comments in Expect? (I never use it, so I'm just guessing). +syn keyword expectTodo contained TODO +syn match expectComment "#.*$" contains=@Spell,expectTodo +syn match expectSharpBang "\%^#!.*" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link expectSharpBang PreProc +hi def link expectVariables Special +hi def link expectCommand Function +hi def link expectStatement Statement +hi def link expectConditional Conditional +hi def link expectRepeat Repeat +hi def link expectExpectOpts Keyword +hi def link expectOutVar Special +hi def link expectSpecial Special +hi def link expectNumber Number + +hi def link expectString String + +hi def link expectComment Comment +hi def link expectTodo Todo +"hi def link expectIdentifier Identifier + + +let b:current_syntax = "expect" + +" vim: ts=8 diff --git a/.config/vim/syntax/exports.vim b/.config/vim/syntax/exports.vim new file mode 100644 index 0000000..00b7d80 --- /dev/null +++ b/.config/vim/syntax/exports.vim @@ -0,0 +1,59 @@ +" Vim syntax file +" Language: exports +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Charles E. Campbell +" Last Change: Aug 31, 2016 +" Version: 8 +" Notes: This file includes both SysV and BSD 'isms +" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_EXPORTS + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Options: -word +syn keyword exportsKeyOptions contained alldirs nohide ro wsync +syn keyword exportsKeyOptions contained kerb o rw +syn match exportsOptError contained "[a-z]\+" + +" Settings: word= +syn keyword exportsKeySettings contained access anon root rw +syn match exportsSetError contained "[a-z]\+" + +" OptSet: -word= +syn keyword exportsKeyOptSet contained mapall maproot mask network +syn match exportsOptSetError contained "[a-z]\+" + +" options and settings +syn match exportsSettings "[a-z]\+=" contains=exportsKeySettings,exportsSetError +syn match exportsOptions "-[a-z]\+" contains=exportsKeyOptions,exportsOptError +syn match exportsOptSet "-[a-z]\+=" contains=exportsKeyOptSet,exportsOptSetError + +" Separators +syn match exportsSeparator "[,:]" + +" comments +syn match exportsComment "^\s*#.*$" contains=@Spell + +" Define the default highlighting. +if !exists("skip_exports_syntax_inits") + + hi def link exportsKeyOptSet exportsKeySettings + hi def link exportsOptSet exportsSettings + + hi def link exportsComment Comment + hi def link exportsKeyOptions Type + hi def link exportsKeySettings Keyword + hi def link exportsOptions Constant + hi def link exportsSeparator Constant + hi def link exportsSettings Constant + + hi def link exportsOptError Error + hi def link exportsOptSetError Error + hi def link exportsSetError Error + +endif + +let b:current_syntax = "exports" +" vim: ts=10 diff --git a/.config/vim/syntax/falcon.vim b/.config/vim/syntax/falcon.vim new file mode 100644 index 0000000..e022c7a --- /dev/null +++ b/.config/vim/syntax/falcon.vim @@ -0,0 +1,197 @@ +" Vim syntax file +" Language: Falcon +" Maintainer: Steven Oliver +" Website: http://github.com/steveno/vim-files/blob/master/syntax/falcon.vim +" Credits: Thanks the ruby.vim authors, I borrowed a lot! +" Thanks to the lisp authors for the rainbow code! +" ------------------------------------------------------------------------------- + +" When wanted, highlight the trailing whitespace. +if exists("c_space_errors") + if !exists("c_no_trail_space_error") + syn match falconSpaceError "\s\+$" + endif + + if !exists("c_no_tab_space_error") + syn match falconSpaceError " \+\t"me=e-1 + endif +endif + +" Symbols +syn match falconSymbol "\(;\|,\|\.\)" +syn match falconSymbolOther "\(#\|@\)" display + +" Operators +syn match falconOperator "\(+\|-\|\*\|/\|=\|<\|>\|\*\*\|!=\|\~=\)" +syn match falconOperator "\(<=\|>=\|=>\|\.\.\|<<\|>>\|\"\)" + +" Clusters +syn region falconSymbol start="[]})\"':]\@\|::\)\@=\%(\s*(\)\@!" + +" Comments +syn match falconCommentSkip contained "^\s*\*\($\|\s\+\)" +syn region falconComment start="/\*" end="\*/" contains=@falconCommentGroup,falconSpaceError,falconTodo +syn region falconCommentL start="//" end="$" keepend contains=@falconCommentGroup,falconSpaceError,falconTodo +syn match falconSharpBang "\%^#!.*" display +syn sync ccomment falconComment + +" Numbers +syn match falconNumbers transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=falconIntLiteral,falconFloatLiteral,falconHexadecimal,falconOctal +syn match falconNumbersCom contained transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=falconIntLiteral,falconFloatLiteral,falconHexadecimal,falconOctal +syn match falconHexadecimal contained "\<0x\x\+\>" +syn match falconOctal contained "\<0\o\+\>" +syn match falconIntLiteral contained "[+-]\" +syn match falconFloatLiteral contained "[+-]\=\d\+\.\d*" +syn match falconFloatLiteral contained "[+-]\=\d*\.\d*" + +" Includes +syn keyword falconInclude load import + +" Expression Substitution and Backslash Notation +syn match falconStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display +syn match falconStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display +syn region falconSymbol start="[]})\"':]\@" skip="\\\\\|\\>" fold contains=falconDelimEscape +syn region falconString matchgroup=falconStringDelimiter start="%[qw]\[" end="\]" skip="\\\\\|\\\]" fold contains=falconDelimEscape +syn region falconString matchgroup=falconStringDelimiter start="%[qw](" end=")" skip="\\\\\|\\)" fold contains=falconDelimEscape +syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold +syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]{" end="}" skip="\\\\\|\\}" fold contains=falconDelimEscape +syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]<" end=">" skip="\\\\\|\\>" fold contains=falconDelimEscape +syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]\[" end="\]" skip="\\\\\|\\\]" fold contains=falconDelimEscape +syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s](" end=")" skip="\\\\\|\\)" fold contains=falconDelimEscape + +" Generalized Double Quoted String and Array of Strings and Shell Command Output +syn region falconString matchgroup=falconStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=falconStringEscape fold +syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=falconStringEscape fold +syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=falconStringEscape,falconDelimEscape fold +syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=falconStringEscape,falconDelimEscape fold +syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=falconStringEscape,falconDelimEscape fold +syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=falconStringEscape,falconDelimEscape fold + +syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@ +" Last Change: 2010 May 27 +" Based on Java syntax file by Claudio Fleiner + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" keyword definitions +syn keyword fanExternal using native +syn keyword fanError goto void serializable volatile +syn keyword fanConditional if else switch +syn keyword fanRepeat do while for foreach each +syn keyword fanBoolean true false +syn keyword fanConstant null +syn keyword fanTypedef this super +syn keyword fanOperator new is isnot as +syn keyword fanLongOperator plus minus mult div mod get set slice lshift rshift and or xor inverse negate increment decrement equals compare +syn keyword fanType Void Bool Int Float Decimal Str Duration Uri Type Range List Map Obj +syn keyword fanStatement return +syn keyword fanStorageClass static const final +syn keyword fanSlot virtual override once +syn keyword fanField readonly +syn keyword fanExceptions throw try catch finally +syn keyword fanAssert assert +syn keyword fanTypedef class enum mixin +syn match fanFacet "@[_a-zA-Z][_a-zA-Z0-9_]*\>" +syn keyword fanBranch break continue +syn keyword fanScopeDecl public internal protected private abstract + +if exists("fan_space_errors") + if !exists("fan_no_trail_space_error") + syn match fanSpaceError "\s\+$" + endif + if !exists("fan_no_tab_space_error") + syn match fanSpaceError " \+\t"me=e-1 + endif +endif + +syn region fanLabelRegion transparent matchgroup=fanLabel start="\" matchgroup=NONE end=":" contains=fanNumber,fanCharacter +syn keyword fanLabel default +syn keyword fanLabel case + +" The following cluster contains all fan groups except the contained ones +syn cluster fanTop add=fanExternal,fanError,fanConditional,fanRepeat,fanBoolean,fanConstant,fanTypedef,fanOperator,fanLongOperator,fanType,fanType,fanStatement,fanStorageClass,fanSlot,fanField,fanExceptions,fanAssert,fanClassDecl,fanTypedef,fanFacet,fanBranch,fanScopeDecl,fanLabelRegion,fanLabel + +" Comments +syn keyword fanTodo contained TODO FIXME XXX +syn region fanComment start="/\*" end="\*/" contains=@fanCommentSpecial,fanTodo,fanComment,@Spell +syn match fanCommentStar contained "^\s*\*[^/]"me=e-1 +syn match fanCommentStar contained "^\s*\*$" +syn match fanLineComment "//.*" contains=@fanCommentSpecial2,fanTodo,@Spell +syn match fanDocComment "\*\*.*" contains=@fanCommentSpecial2,fanTodo,@Spell +hi def link fanCommentString fanString +hi def link fanComment2String fanString +hi def link fanCommentCharacter fanCharacter + +syn cluster fanTop add=fanComment,fanLineComment,fanDocComment + +" match the special comment /**/ +syn match fanComment "/\*\*/" + +" Strings and constants +syn match fanSpecialError contained "\\." +syn match fanSpecialCharError contained "[^']" +syn match fanSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\|\$\)" +syn match fanStringSubst contained "\$[A-Za-z][A-Za-z_.]*" +syn match fanStringSubst contained "\${[^}]*}" +syn region fanString start=+"+ end=+"+ contains=fanSpecialChar,fanSpecialError,fanStringSubst,@Spell +syn region fanTripleString start=+"""+ end=+"""+ contains=fanSpecialChar,fanSpecialError,fanStringSubst,@Spell +syn region fanDSL start=+<|+ end=+|>+ +syn match fanUri "`[^`]*`" +syn match fanCharacter "'[^']*'" contains=fanSpecialChar,fanSpecialCharError +syn match fanCharacter "'\\''" contains=fanSpecialChar +syn match fanCharacter "'[^\\]'" +syn match fanNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" +syn match fanNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" +syn match fanNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" +syn match fanNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" + +syn cluster fanTop add=fanString,fanCharacter,fanNumber,fanSpecial,fanStringError + +" The default highlighting. +hi def link fanBranch Conditional +hi def link fanLabel Label +hi def link fanUserLabel Label +hi def link fanConditional Conditional +hi def link fanRepeat Repeat +hi def link fanExceptions Exception +hi def link fanAssert Statement +hi def link fanStorageClass StorageClass +hi def link fanSlot StorageClass +hi def link fanField StorageClass +hi def link fanScopeDecl StorageClass +hi def link fanBoolean Boolean +hi def link fanSpecial Special +hi def link fanSpecialError Error +hi def link fanSpecialCharError Error +hi def link fanTripleString String +hi def link fanString String +hi def link fanDSL String +hi def link fanCharacter String +hi def link fanStringSubst Identifier +hi def link fanUri SpecialChar +hi def link fanSpecialChar SpecialChar +hi def link fanNumber Number +hi def link fanError Error +hi def link fanStringError Error +hi def link fanStatement Statement +hi def link fanOperator Operator +hi def link fanLongOperator Operator +hi def link fanComment Comment +hi def link fanDocComment Comment +hi def link fanLineComment Comment +hi def link fanConstant Constant +hi def link fanTypedef Typedef +hi def link fanTodo Todo +hi def link fanFacet PreProc + +hi def link fanCommentTitle SpecialComment +hi def link fanCommentStar SpecialComment +hi def link fanType Identifier +hi def link fanExternal Include + +hi def link fanSpaceError Error + +let b:current_syntax = "fan" + +" vim: ts=8 diff --git a/.config/vim/syntax/fasm.vim b/.config/vim/syntax/fasm.vim new file mode 100644 index 0000000..172ba7c --- /dev/null +++ b/.config/vim/syntax/fasm.vim @@ -0,0 +1,151 @@ +" Vim syntax file +" Language: Flat Assembler (FASM) +" Maintainer: Ron Aaron +" Last Change: 2012/02/13 +" Vim URL: http://www.vim.org/lang.html +" FASM Home: http://flatassembler.net/ +" FASM Version: 1.56 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +setlocal iskeyword=a-z,A-Z,48-57,.,_ +setlocal isident=a-z,A-Z,48-57,.,_ +syn case ignore + +syn keyword fasmRegister ah al ax bh bl bp bx ch cl cr0 cr1 cr2 cr3 cr4 cr5 cr6 +syn keyword fasmRegister cr7 cs cx dh di dl dr0 dr1 dr2 dr3 dr4 dr5 dr6 dr7 ds dx +syn keyword fasmRegister eax ebp ebx ecx edi edx es esi esp fs gs mm0 mm1 mm2 mm3 +syn keyword fasmRegister mm4 mm5 mm6 mm7 si sp ss st st0 st1 st2 st3 st4 st5 st6 +syn keyword fasmRegister st7 tr0 tr1 tr2 tr3 tr4 tr5 tr6 tr7 xmm0 xmm1 xmm2 xmm3 +syn keyword fasmRegister xmm4 xmm5 xmm6 xmm7 +syn keyword fasmAddressSizes byte dqword dword fword pword qword tword word +syn keyword fasmDataDirectives db dd df dp dq dt du dw file rb rd rf rp rq rt rw +syn keyword fasmInstr aaa aad aam aas adc add addpd addps addsd addss addsubpd +syn keyword fasmInstr addsubps and andnpd andnps andpd andps arpl bound bsf bsr +syn keyword fasmInstr bswap bt btc btr bts call cbw cdq clc cld clflush cli clts +syn keyword fasmInstr cmc cmova cmovae cmovb cmovbe cmovc cmove cmovg cmovge cmovl +syn keyword fasmInstr cmovle cmovna cmovnae cmovnb cmovnbe cmovnc cmovne cmovng +syn keyword fasmInstr cmovnge cmovnl cmovnle cmovno cmovnp cmovns cmovnz cmovo cmovp +syn keyword fasmInstr cmovpe cmovpo cmovs cmovz cmp cmpeqpd cmpeqps cmpeqsd cmpeqss +syn keyword fasmInstr cmplepd cmpleps cmplesd cmpless cmpltpd cmpltps cmpltsd cmpltss +syn keyword fasmInstr cmpneqpd cmpneqps cmpneqsd cmpneqss cmpnlepd cmpnleps cmpnlesd +syn keyword fasmInstr cmpnless cmpnltpd cmpnltps cmpnltsd cmpnltss cmpordpd cmpordps +syn keyword fasmInstr cmpordsd cmpordss cmppd cmpps cmps cmpsb cmpsd cmpss cmpsw +syn keyword fasmInstr cmpunordpd cmpunordps cmpunordsd cmpunordss cmpxchg cmpxchg8b +syn keyword fasmInstr comisd comiss cpuid cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps +syn keyword fasmInstr cvtpi2pd cvtpi2ps cvtps2dq cvtps2pd cvtps2pi cvtsd2si cvtsd2ss +syn keyword fasmInstr cvtsi2sd cvtsi2ss cvtss2sd cvtss2si cvttpd2dq cvttpd2pi cvttps2dq +syn keyword fasmInstr cvttps2pi cvttsd2si cvttss2si cwd cwde daa das data dec div +syn keyword fasmInstr divpd divps divsd divss else emms end enter extrn f2xm1 fabs +syn keyword fasmInstr fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb +syn keyword fasmInstr fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp +syn keyword fasmInstr fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree +syn keyword fasmInstr ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp +syn keyword fasmInstr finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv +syn keyword fasmInstr fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi +syn keyword fasmInstr fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem +syn keyword fasmInstr fprem1 fptan frndint frstor frstpm fsave fscale fsetpm fsin +syn keyword fasmInstr fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr +syn keyword fasmInstr fsubrp ftst fucom fucomi fucomip fucomp fucompp fwait fxam +syn keyword fasmInstr fxch fxrstor fxsave fxtract fyl2x fyl2xp1 haddpd haddps heap +syn keyword fasmInstr hlt hsubpd hsubps idiv if imul in inc ins insb insd insw int +syn keyword fasmInstr int3 into invd invlpg iret iretd iretw ja jae jb jbe jc jcxz +syn keyword fasmInstr je jecxz jg jge jl jle jmp jna jnae jnb jnbe jnc jne jng jnge +syn keyword fasmInstr jnl jnle jno jnp jns jnz jo jp jpe jpo js jz lahf lar lddqu +syn keyword fasmInstr ldmxcsr lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw +syn keyword fasmInstr load loadall286 loadall386 lock lods lodsb lodsd lodsw loop +syn keyword fasmInstr loopd loope looped loopew loopne loopned loopnew loopnz loopnzd +syn keyword fasmInstr loopnzw loopw loopz loopzd loopzw lsl lss ltr maskmovdqu maskmovq +syn keyword fasmInstr maxpd maxps maxsd maxss mfence minpd minps minsd minss monitor +syn keyword fasmInstr mov movapd movaps movd movddup movdq2q movdqa movdqu movhlps +syn keyword fasmInstr movhpd movhps movlhps movlpd movlps movmskpd movmskps movntdq +syn keyword fasmInstr movnti movntpd movntps movntq movq movq2dq movs movsb movsd +syn keyword fasmInstr movshdup movsldup movss movsw movsx movupd movups movzx mul +syn keyword fasmInstr mulpd mulps mulsd mulss mwait neg nop not or org orpd orps +syn keyword fasmInstr out outs outsb outsd outsw packssdw packsswb packuswb paddb +syn keyword fasmInstr paddd paddq paddsb paddsw paddusb paddusw paddw pand pandn +syn keyword fasmInstr pause pavgb pavgusb pavgw pcmpeqb pcmpeqd pcmpeqw pcmpgtb +syn keyword fasmInstr pcmpgtd pcmpgtw pextrw pf2id pf2iw pfacc pfadd pfcmpeq pfcmpge +syn keyword fasmInstr pfcmpgt pfmax pfmin pfmul pfnacc pfpnacc pfrcp pfrcpit1 pfrcpit2 +syn keyword fasmInstr pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pi2fw pinsrw pmaddwd pmaxsw +syn keyword fasmInstr pmaxub pminsw pminub pmovmskb pmulhrw pmulhuw pmulhw pmullw +syn keyword fasmInstr pmuludq pop popa popad popaw popd popf popfd popfw popw por +syn keyword fasmInstr prefetch prefetchnta prefetcht0 prefetcht1 prefetcht2 prefetchw +syn keyword fasmInstr psadbw pshufd pshufhw pshuflw pshufw pslld pslldq psllq psllw +syn keyword fasmInstr psrad psraw psrld psrldq psrlq psrlw psubb psubd psubq psubsb +syn keyword fasmInstr psubsw psubusb psubusw psubw pswapd punpckhbw punpckhdq punpckhqdq +syn keyword fasmInstr punpckhwd punpcklbw punpckldq punpcklqdq punpcklwd push pusha +syn keyword fasmInstr pushad pushaw pushd pushf pushfd pushfw pushw pxor rcl rcpps +syn keyword fasmInstr rcpss rcr rdmsr rdpmc rdtsc rep repe repne repnz repz ret +syn keyword fasmInstr retd retf retfd retfw retn retnd retnw retw rol ror rsm rsqrtps +syn keyword fasmInstr rsqrtss sahf sal salc sar sbb scas scasb scasd scasw seta +syn keyword fasmInstr setae setalc setb setbe setc sete setg setge setl setle setna +syn keyword fasmInstr setnae setnb setnbe setnc setne setng setnge setnl setnle +syn keyword fasmInstr setno setnp setns setnz seto setp setpe setpo sets setz sfence +syn keyword fasmInstr sgdt shl shld shr shrd shufpd shufps sidt sldt smsw sqrtpd +syn keyword fasmInstr sqrtps sqrtsd sqrtss stc std sti stmxcsr store stos stosb +syn keyword fasmInstr stosd stosw str sub subpd subps subsd subss sysenter sysexit +syn keyword fasmInstr test ucomisd ucomiss ud2 unpckhpd unpckhps unpcklpd unpcklps +syn keyword fasmInstr verr verw wait wbinvd wrmsr xadd xchg xlat xlatb xor xorpd +syn keyword fasmPreprocess common equ fix forward include local macro purge restore +syn keyword fasmPreprocess reverse struc +syn keyword fasmDirective align binary code coff console discardable display dll +syn keyword fasmDirective elf entry executable export extern far fixups format gui +syn keyword fasmDirective import label ms mz native near notpageable pe public readable +syn keyword fasmDirective repeat resource section segment shareable stack times +syn keyword fasmDirective use16 use32 virtual wdm writable writeable +syn keyword fasmOperator as at defined eq eqtype from mod on ptr rva used + +syn match fasmNumericOperator "[+-/*]" +syn match fasmLogicalOperator "[=|&~<>]\|<=\|>=\|<>" +" numbers +syn match fasmBinaryNumber "\<[01]\+b\>" +syn match fasmHexNumber "\<\d\x*h\>" +syn match fasmHexNumber "\<\(0x\|$\)\x*\>" +syn match fasmFPUNumber "\<\d\+\(\.\d*\)\=\(e[-+]\=\d*\)\=\>" +syn match fasmOctalNumber "\<\(0\o\+o\=\|\o\+o\)\>" +syn match fasmDecimalNumber "\<\(0\|[1-9]\d*\)\>" +syn region fasmComment start=";" end="$" +syn region fasmString start="\"" end="\"\|$" +syn region fasmString start="'" end="'\|$" +syn match fasmSymbol "[()|\[\]:]" +syn match fasmSpecial "[#?%$,]" +syn match fasmLabel "^\s*[^; \t]\+:" + +hi def link fasmAddressSizes type +hi def link fasmNumericOperator fasmOperator +hi def link fasmLogicalOperator fasmOperator + +hi def link fasmBinaryNumber fasmNumber +hi def link fasmHexNumber fasmNumber +hi def link fasmFPUNumber fasmNumber +hi def link fasmOctalNumber fasmNumber +hi def link fasmDecimalNumber fasmNumber + +hi def link fasmSymbols fasmRegister +hi def link fasmPreprocess fasmDirective + +" link to standard syn groups so the 'colorschemes' work: +hi def link fasmOperator operator +hi def link fasmComment comment +hi def link fasmDirective preproc +hi def link fasmRegister type +hi def link fasmNumber constant +hi def link fasmSymbol structure +hi def link fasmString String +hi def link fasmSpecial special +hi def link fasmInstr keyword +hi def link fasmLabel label +hi def link fasmPrefix preproc +let b:current_syntax = "fasm" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 sw=8 : diff --git a/.config/vim/syntax/fdcc.vim b/.config/vim/syntax/fdcc.vim new file mode 100644 index 0000000..f7b296b --- /dev/null +++ b/.config/vim/syntax/fdcc.vim @@ -0,0 +1,101 @@ +" Vim syntax file +" Language: fdcc or locale files +" Maintainer: Dwayne Bailey +" Last Change: 2004 May 16 +" Remarks: FDCC (Formal Definitions of Cultural Conventions) see ISO TR 14652 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn sync minlines=150 +setlocal iskeyword+=- + +" Numbers +syn match fdccNumber /[0-9]*/ contained + +" Unicode codings and strings +syn match fdccUnicodeInValid /<[^<]*>/ contained +syn match fdccUnicodeValid // contained +syn region fdccString start=/"/ end=/"/ contains=fdccUnicodeInValid,fdccUnicodeValid + +" Valid LC_ Keywords +syn keyword fdccKeyword escape_char comment_char +syn keyword fdccKeywordIdentification title source address contact email tel fax language territory revision date category +syn keyword fdccKeywordCtype copy space translit_start include translit_end outdigit class +syn keyword fdccKeywordCollate copy script order_start order_end collating-symbol reorder-after reorder-end collating-element symbol-equivalence +syn keyword fdccKeywordMonetary copy int_curr_symbol currency_symbol mon_decimal_point mon_thousands_sep mon_grouping positive_sign negative_sign int_frac_digits frac_digits p_cs_precedes p_sep_by_space n_cs_precedes n_sep_by_space p_sign_posn n_sign_posn int_p_cs_precedes int_p_sep_by_space int_n_cs_precedes int_n_sep_by_space int_p_sign_posn int_n_sign_posn +syn keyword fdccKeywordNumeric copy decimal_point thousands_sep grouping +syn keyword fdccKeywordTime copy abday day abmon mon d_t_fmt d_fmt t_fmt am_pm t_fmt_ampm date_fmt era_d_fmt first_weekday first_workday week cal_direction time_zone era alt_digits era_d_t_fmt +syn keyword fdccKeywordMessages copy yesexpr noexpr yesstr nostr +syn keyword fdccKeywordPaper copy height width +syn keyword fdccKeywordTelephone copy tel_int_fmt int_prefix tel_dom_fmt int_select +syn keyword fdccKeywordMeasurement copy measurement +syn keyword fdccKeywordName copy name_fmt name_gen name_mr name_mrs name_miss name_ms +syn keyword fdccKeywordAddress copy postal_fmt country_name country_post country_ab2 country_ab3 country_num country_car country_isbn lang_name lang_ab lang_term lang_lib + +" Comments +syn keyword fdccTodo TODO FIXME contained +syn match fdccVariable /%[a-zA-Z]/ contained +syn match fdccComment /[#%].*/ contains=fdccTodo,fdccVariable + +" LC_ Groups +syn region fdccBlank matchgroup=fdccLCIdentification start=/^LC_IDENTIFICATION$/ end=/^END LC_IDENTIFICATION$/ contains=fdccKeywordIdentification,fdccString,fdccComment +syn region fdccBlank matchgroup=fdccLCCtype start=/^LC_CTYPE$/ end=/^END LC_CTYPE$/ contains=fdccKeywordCtype,fdccString,fdccComment,fdccUnicodeInValid,fdccUnicodeValid +syn region fdccBlank matchgroup=fdccLCCollate start=/^LC_COLLATE$/ end=/^END LC_COLLATE$/ contains=fdccKeywordCollate,fdccString,fdccComment,fdccUnicodeInValid,fdccUnicodeValid +syn region fdccBlank matchgroup=fdccLCMonetary start=/^LC_MONETARY$/ end=/^END LC_MONETARY$/ contains=fdccKeywordMonetary,fdccString,fdccComment,fdccNumber +syn region fdccBlank matchgroup=fdccLCNumeric start=/^LC_NUMERIC$/ end=/^END LC_NUMERIC$/ contains=fdccKeywordNumeric,fdccString,fdccComment,fdccNumber +syn region fdccBlank matchgroup=fdccLCTime start=/^LC_TIME$/ end=/^END LC_TIME$/ contains=fdccKeywordTime,fdccString,fdccComment,fdccNumber +syn region fdccBlank matchgroup=fdccLCMessages start=/^LC_MESSAGES$/ end=/^END LC_MESSAGES$/ contains=fdccKeywordMessages,fdccString,fdccComment +syn region fdccBlank matchgroup=fdccLCPaper start=/^LC_PAPER$/ end=/^END LC_PAPER$/ contains=fdccKeywordPaper,fdccString,fdccComment,fdccNumber +syn region fdccBlank matchgroup=fdccLCTelephone start=/^LC_TELEPHONE$/ end=/^END LC_TELEPHONE$/ contains=fdccKeywordTelephone,fdccString,fdccComment +syn region fdccBlank matchgroup=fdccLCMeasurement start=/^LC_MEASUREMENT$/ end=/^END LC_MEASUREMENT$/ contains=fdccKeywordMeasurement,fdccString,fdccComment,fdccNumber +syn region fdccBlank matchgroup=fdccLCName start=/^LC_NAME$/ end=/^END LC_NAME$/ contains=fdccKeywordName,fdccString,fdccComment +syn region fdccBlank matchgroup=fdccLCAddress start=/^LC_ADDRESS$/ end=/^END LC_ADDRESS$/ contains=fdccKeywordAddress,fdccString,fdccComment,fdccNumber + + +" Only when an item doesn't have highlighting yet + +hi def link fdccBlank Blank + +hi def link fdccTodo Todo +hi def link fdccComment Comment +hi def link fdccVariable Type + +hi def link fdccLCIdentification Statement +hi def link fdccLCCtype Statement +hi def link fdccLCCollate Statement +hi def link fdccLCMonetary Statement +hi def link fdccLCNumeric Statement +hi def link fdccLCTime Statement +hi def link fdccLCMessages Statement +hi def link fdccLCPaper Statement +hi def link fdccLCTelephone Statement +hi def link fdccLCMeasurement Statement +hi def link fdccLCName Statement +hi def link fdccLCAddress Statement + +hi def link fdccUnicodeInValid Error +hi def link fdccUnicodeValid String +hi def link fdccString String +hi def link fdccNumber Blank + +hi def link fdccKeywordIdentification fdccKeyword +hi def link fdccKeywordCtype fdccKeyword +hi def link fdccKeywordCollate fdccKeyword +hi def link fdccKeywordMonetary fdccKeyword +hi def link fdccKeywordNumeric fdccKeyword +hi def link fdccKeywordTime fdccKeyword +hi def link fdccKeywordMessages fdccKeyword +hi def link fdccKeywordPaper fdccKeyword +hi def link fdccKeywordTelephone fdccKeyword +hi def link fdccKeywordMeasurement fdccKeyword +hi def link fdccKeywordName fdccKeyword +hi def link fdccKeywordAddress fdccKeyword +hi def link fdccKeyword Identifier + + +let b:current_syntax = "fdcc" + +" vim: ts=8 diff --git a/.config/vim/syntax/fetchmail.vim b/.config/vim/syntax/fetchmail.vim new file mode 100644 index 0000000..50d6b82 --- /dev/null +++ b/.config/vim/syntax/fetchmail.vim @@ -0,0 +1,83 @@ +" Vim syntax file +" Language: fetchmail(1) RC File +" Maintainer: Doug Kearns +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2022 Jul 02 + +" Version 6.4.3 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword fetchmailTodo contained FIXME TODO XXX NOTE + +syn region fetchmailComment start='#' end='$' contains=fetchmailTodo,@Spell + +syn match fetchmailNumber display '\<\d\+\>' + +syn region fetchmailString start=+"+ skip=+\\\\\|\\"+ end=+"+ + \ contains=fetchmailStringEsc +syn region fetchmailString start=+'+ skip=+\\\\\|\\'+ end=+'+ + \ contains=fetchmailStringEsc + +syn match fetchmailStringEsc contained '\\\([ntb]\|0\d*\|x\x\+\)' + +syn region fetchmailKeyword transparent matchgroup=fetchmailKeyword + \ start='\' + \ end='\' + \ contains=ALLBUT,fetchmailOptions,fetchmailSet + +syn keyword fetchmailServerOpts contained via proto[col] local[domains] port + \ service auth[enticate] timeout envelope + \ qvirtual aka interface monitor plugin plugout + \ dns checkalias uidl interval tracepolls + \ principal esmtpname esmtppassword +" removed in 6.3.0 +syn keyword fetchmailServerOpts contained netsec +syn match fetchmailServerOpts contained '\' +syn match fetchmailServerOpts contained '\ +" Update: 26 Sep 2002 +" Changes: +" - Dynamic 4GL/FourJs/4GL 7.30 pseudo comment directives (Julian Bridle) +" - Conditionally allow case insensitive keywords (Julian Bridle) +" + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +if exists("fgl_ignore_case") + syntax case ignore +else + syntax case match +endif +syn keyword fglKeyword ABORT ABS ABSOLUTE ACCEPT ACCESS ACOS ADD AFTER ALL +syn keyword fglKeyword ALLOCATE ALTER AND ANSI ANY APPEND ARG_VAL ARRAY ARR_COUNT +syn keyword fglKeyword ARR_CURR AS ASC ASCENDING ASCII ASIN AT ATAN ATAN2 ATTACH +syn keyword fglKeyword ATTRIBUTE ATTRIBUTES AUDIT AUTHORIZATION AUTO AUTONEXT AVERAGE AVG +syn keyword fglKeyword BEFORE BEGIN BETWEEN BLACK BLINK BLUE BOLD BORDER BOTH BOTTOM +syn keyword fglKeyword BREAK BUFFERED BY BYTE +syn keyword fglKeyword CALL CASCADE CASE CHAR CHARACTER CHARACTER_LENGTH CHAR_LENGTH +syn keyword fglKeyword CHECK CLASS_ORIGIN CLEAR CLIPPED CLOSE CLUSTER COLOR +syn keyword fglKeyword COLUMN COLUMNS COMMAND COMMENT COMMENTS COMMIT COMMITTED +syn keyword fglKeyword COMPOSITES COMPRESS CONCURRENT CONNECT CONNECTION +syn keyword fglKeyword CONNECTION_ALIAS CONSTRAINED CONSTRAINT CONSTRAINTS CONSTRUCT +syn keyword fglKeyword CONTINUE CONTROL COS COUNT CREATE CURRENT CURSOR CYAN +syn keyword fglKeyword DATA DATABASE DATASKIP DATE DATETIME DAY DBA DBINFO DBSERVERNAME +syn keyword fglKeyword DEALLOCATE DEBUG DEC DECIMAL DECLARE DEFAULT DEFAULTS DEFER +syn keyword fglKeyword DEFERRED DEFINE DELETE DELIMITER DELIMITERS DESC DESCENDING +syn keyword fglKeyword DESCRIBE DESCRIPTOR DETACH DIAGNOSTICS DIM DIRTY DISABLED +syn keyword fglKeyword DISCONNECT DISPLAY DISTINCT DISTRIBUTIONS DO DORMANT DOUBLE +syn keyword fglKeyword DOWN DOWNSHIFT DROP +syn keyword fglKeyword EACH ELIF ELSE ENABLED END ENTRY ERROR ERRORLOG ERR_GET +syn keyword fglKeyword ERR_PRINT ERR_QUIT ESC ESCAPE EVERY EXCEPTION EXCLUSIVE +syn keyword fglKeyword EXEC EXECUTE EXISTS EXIT EXP EXPLAIN EXPRESSION EXTEND EXTENT +syn keyword fglKeyword EXTERN EXTERNAL +syn keyword fglKeyword F1 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F2 F20 F21 F22 F23 +syn keyword fglKeyword F24 F25 F26 F27 F28 F29 F3 F30 F31 F32 F33 F34 F35 F36 F37 F38 +syn keyword fglKeyword F39 F4 F40 F41 F42 F43 F44 F45 F46 F47 F48 F49 F5 F50 F51 F52 +syn keyword fglKeyword F53 F54 F55 F56 F57 F58 F59 F6 F60 F61 F62 F63 F64 F7 F8 F9 +syn keyword fglKeyword FALSE FETCH FGL_GETENV FGL_KEYVAL FGL_LASTKEY FIELD FIELD_TOUCHED +syn keyword fglKeyword FILE FILLFACTOR FILTERING FINISH FIRST FLOAT FLUSH FOR +syn keyword fglKeyword FOREACH FOREIGN FORM FORMAT FORMONLY FORTRAN FOUND FRACTION +syn keyword fglKeyword FRAGMENT FREE FROM FUNCTION GET_FLDBUF GLOBAL GLOBALS GO GOTO +syn keyword fglKeyword GRANT GREEN GROUP HAVING HEADER HELP HEX HIDE HIGH HOLD HOUR +syn keyword fglKeyword IDATA IF ILENGTH IMMEDIATE IN INCLUDE INDEX INDEXES INDICATOR +syn keyword fglKeyword INFIELD INIT INITIALIZE INPUT INSERT INSTRUCTIONS INT INTEGER +syn keyword fglKeyword INTERRUPT INTERVAL INTO INT_FLAG INVISIBLE IS ISAM ISOLATION +syn keyword fglKeyword ITYPE +syn keyword fglKeyword KEY LABEL +syn keyword fglKeyword LANGUAGE LAST LEADING LEFT LENGTH LET LIKE LINE +syn keyword fglKeyword LINENO LINES LOAD LOCATE LOCK LOG LOG10 LOGN LONG LOW +syn keyword fglKeyword MAGENTA MAIN MARGIN MATCHES MAX MDY MEDIUM MEMORY MENU MESSAGE +syn keyword fglKeyword MESSAGE_LENGTH MESSAGE_TEXT MIN MINUTE MOD MODE MODIFY MODULE +syn keyword fglKeyword MONEY MONTH MORE +syn keyword fglKeyword NAME NCHAR NEED NEW NEXT NEXTPAGE NO NOCR NOENTRY NONE NORMAL +syn keyword fglKeyword NOT NOTFOUND NULL NULLABLE NUMBER NUMERIC NUM_ARGS NVARCHAR +syn keyword fglKeyword OCTET_LENGTH OF OFF OLD ON ONLY OPEN OPTIMIZATION OPTION OPTIONS +syn keyword fglKeyword OR ORDER OTHERWISE OUTER OUTPUT +syn keyword fglKeyword PAGE PAGENO PAUSE PDQPRIORITY PERCENT PICTURE PIPE POW PRECISION +syn keyword fglKeyword PREPARE PREVIOUS PREVPAGE PRIMARY PRINT PRINTER PRIOR PRIVATE +syn keyword fglKeyword PRIVILEGES PROCEDURE PROGRAM PROMPT PUBLIC PUT +syn keyword fglKeyword QUIT QUIT_FLAG +syn keyword fglKeyword RAISE RANGE READ READONLY REAL RECORD RECOVER RED REFERENCES +syn keyword fglKeyword REFERENCING REGISTER RELATIVE REMAINDER REMOVE RENAME REOPTIMIZATION +syn keyword fglKeyword REPEATABLE REPORT REQUIRED RESOLUTION RESOURCE RESTRICT +syn keyword fglKeyword RESUME RETURN RETURNED_SQLSTATE RETURNING REVERSE REVOKE RIGHT +syn keyword fglKeyword ROBIN ROLE ROLLBACK ROLLFORWARD ROOT ROUND ROW ROWID ROWIDS +syn keyword fglKeyword ROWS ROW_COUNT RUN +syn keyword fglKeyword SCALE SCHEMA SCREEN SCROLL SCR_LINE SECOND SECTION SELECT +syn keyword fglKeyword SERIAL SERIALIZABLE SERVER_NAME SESSION SET SET_COUNT SHARE +syn keyword fglKeyword SHORT SHOW SITENAME SIZE SIZEOF SKIP SLEEP SMALLFLOAT SMALLINT +syn keyword fglKeyword SOME SPACE SPACES SQL SQLAWARN SQLCA SQLCODE SQLERRD SQLERRM +syn keyword fglKeyword SQLERROR SQLERRP SQLSTATE SQLWARNING SQRT STABILITY START +syn keyword fglKeyword STARTLOG STATIC STATISTICS STATUS STDEV STEP STOP STRING STRUCT +syn keyword fglKeyword SUBCLASS_ORIGIN SUM SWITCH SYNONYM SYSTEM +syn keyword fglKeyword SysBlobs SysChecks SysColAuth SysColDepend SysColumns +syn keyword fglKeyword SysConstraints SysDefaults SysDepend SysDistrib SysFragAuth +syn keyword fglKeyword SysFragments SysIndexes SysObjState SysOpClstr SysProcAuth +syn keyword fglKeyword SysProcBody SysProcPlan SysProcedures SysReferences SysRoleAuth +syn keyword fglKeyword SysSynTable SysSynonyms SysTabAuth SysTables SysTrigBody +syn keyword fglKeyword SysTriggers SysUsers SysViews SysViolations +syn keyword fglKeyword TAB TABLE TABLES TAN TEMP TEXT THEN THROUGH THRU TIME TO +syn keyword fglKeyword TODAY TOP TOTAL TRACE TRAILER TRAILING TRANSACTION TRIGGER +syn keyword fglKeyword TRIGGERS TRIM TRUE TRUNC TYPE TYPEDEF +syn keyword fglKeyword UNCOMMITTED UNCONSTRAINED UNDERLINE UNION UNIQUE UNITS UNLOAD +syn keyword fglKeyword UNLOCK UNSIGNED UP UPDATE UPSHIFT USER USING +syn keyword fglKeyword VALIDATE VALUE VALUES VARCHAR VARIABLES VARIANCE VARYING +syn keyword fglKeyword VERIFY VIEW VIOLATIONS +syn keyword fglKeyword WAIT WAITING WARNING WEEKDAY WHEN WHENEVER WHERE WHILE WHITE +syn keyword fglKeyword WINDOW WITH WITHOUT WORDWRAP WORK WRAP WRITE +syn keyword fglKeyword YEAR YELLOW +syn keyword fglKeyword ZEROFILL + +" Strings and characters: +syn region fglString start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn region fglString start=+'+ skip=+\\\\\|\\"+ end=+'+ + +" Numbers: +syn match fglNumber "-\=\<[0-9]*\.\=[0-9_]\>" + +" Comments: +syn region fglComment start="{" end="}" +syn match fglComment "--.*" +syn match fglComment "#.*" + +" Not a comment even though it looks like one (Dynamic 4GL/FourJs directive) +syn match fglSpecial "--#" +syn match fglSpecial "--@" + +syn sync ccomment fglComment + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link fglComment Comment +"hi def link fglKeyword fglSpecial +hi def link fglKeyword fglStatement +hi def link fglNumber Number +hi def link fglOperator fglStatement +hi def link fglSpecial Special +hi def link fglStatement Statement +hi def link fglString String +hi def link fglType Type + + +let b:current_syntax = "fgl" + +" vim: ts=8 diff --git a/.config/vim/syntax/fish.vim b/.config/vim/syntax/fish.vim new file mode 100644 index 0000000..266878b --- /dev/null +++ b/.config/vim/syntax/fish.vim @@ -0,0 +1,225 @@ +" Vim syntax file +" Language: fish +" Maintainer: Nicholas Boyle (github.com/nickeb96) +" Repository: https://github.com/nickeb96/fish.vim +" Last Change: February 1, 2023 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + + +" Statements +syn cluster fishStatement contains=fishKeywordAndOr,fishNot,fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand,fishVariable + +syn keyword fishKeywordAndOr and or nextgroup=fishNot,fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand +hi def link fishKeywordAndOr fishOperator + +syn keyword fishNot not skipwhite nextgroup=fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand +syn match fishNot /!/ skipwhite nextgroup=fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand +hi def link fishNot fishOperator + +syn keyword fishSelectStatement command builtin skipwhite nextgroup=fishKeyword,fishKeywordIf,fishCommand,fishOption +hi def link fishSelectStatement fishKeyword + +syn keyword fishKeyword end skipwhite nextgroup=@fishTerminator + +syn keyword fishKeywordIf if skipwhite nextgroup=@fishStatement +syn keyword fishKeyword else skipwhite nextgroup=fishKeywordIf,fishSemicolon +hi def link fishKeywordIf fishKeyword + +syn keyword fishKeyword switch skipwhite nextgroup=@fishArgument +syn keyword fishKeyword case skipwhite nextgroup=@fishArgument + +syn keyword fishKeyword while skipwhite nextgroup=@fishStatement + +syn keyword fishKeyword for skipwhite nextgroup=fishForVariable +syn match fishForVariable /[[:alnum:]_]\+/ contained skipwhite nextgroup=fishKeywordIn +syn keyword fishKeywordIn in contained skipwhite nextgroup=@fishArgument +hi def link fishForVariable fishParameter +hi def link fishKeywordIn fishKeyword + +syn keyword fishKeyword _ abbr argparse begin bg bind block break breakpoint cd commandline + \ complete continue count disown echo emit eval exec exit false fg function functions + \ history jobs math printf pwd random read realpath return set set_color source status + \ string test time true type ulimit wait + \ skipwhite nextgroup=@fishNext +syn match fishKeyword /\/ skipwhite nextgroup=@fishNext + +syn match fishCommand /[[:alnum:]_\/[][[:alnum:]+._-]*/ skipwhite nextgroup=@fishNext + + +" Internally Nested Arguments + +syn cluster fishSubscriptArgs contains=fishInnerVariable,fishIndexNum,fishIndexRange,fishInnerCommandSub + +syn match fishInnerVariable /\$\+[[:alnum:]_]\+/ contained +syn match fishInnerVariable /\$\+[[:alnum:]_]\+\[/me=e-1,he=e-1 contained nextgroup=fishInnerSubscript +hi def link fishInnerVariable fishVariable + +syn region fishInnerSubscript matchgroup=fishVariable start=/\[/ end=/]/ contained + \ keepend contains=@fishSubscriptArgs +hi def link fishInnerSubscript fishSubscript + +syn match fishIndexNum /[+-]?[[:digit:]]\+/ contained +hi def link fishIndexNum fishParameter + +syn match fishIndexRange /\.\./ contained +hi def link fishIndexRange fishParameter + +syn region fishInnerCommandSub matchgroup=fishOperator start=/(/ start=/\$(/ end=/)/ contained + \ contains=@fishStatement +hi def link fishInnerCommandSub fishCommandSub + +syn region fishQuotedCommandSub matchgroup=fishOperator start=/\$(/ end=/)/ contained + \ contains=@fishStatement +hi def link fishQuotedCommandSub fishCommandSub + +syn match fishBraceExpansionComma /,/ contained +hi def link fishBraceExpansionComma fishOperator + +syn match fishBracedParameter '[[:alnum:]\u5b\u5d@:=+.%/!_-]\+' contained contains=fishInnerPathGlob +hi def link fishBracedParameter fishParameter + +syn region fishBracedQuote start=/'/ skip=/\\'/ end=/'/ contained + \ contains=fishEscapedEscape,fishEscapedSQuote +syn region fishBracedQuote start=/"/ skip=/\\"/ end=/"/ contained + \ contains=fishEscapedEscape,fishEscapedDQuote,fishEscapedDollar,fishInnerVariable,fishInnerCommandSub +hi def link fishBracedQuote fishQuote + + +" Arguments + +syn cluster fishArgument contains=fishParameter,fishOption,fishVariable,fishPathGlob,fishBraceExpansion,fishQuote,fishCharacter,fishCommandSub,fishRedirection,fishSelfPid + +syn match fishParameter '[[:alnum:]\u5b\u5d@:=+.,%/!_-]\+' contained skipwhite nextgroup=@fishNext + +syn match fishOption /-[[:alnum:]=_-]*/ contained skipwhite nextgroup=@fishNext + +syn match fishPathGlob /\(\~\|*\|?\)/ contained skipwhite nextgroup=@fishNext + +syn region fishBraceExpansion matchgroup=fishOperator start=/{/ end=/}/ contained + \ contains=fishBraceExpansionComma,fishInnerVariable,fishInnerCommandSub,fishBracedParameter,fishBracedQuote + \ skipwhite nextgroup=@fishNext + +syn match fishVariable /\$\+[[:alnum:]_]\+/ skipwhite nextgroup=@fishNext +syn match fishVariable /\$\+[[:alnum:]_]\+\[/me=e-1,he=e-1 nextgroup=fishSubscript + +syn region fishSubscript matchgroup=fishVariable start=/\[/ end=/]/ contained + \ keepend contains=@fishSubscriptArgs + \ skipwhite nextgroup=@fishNext + +syn region fishCommandSub matchgroup=fishOperator start=/(/ start=/\$(/ end=/)/ contained + \ contains=@fishStatement + \ skipwhite nextgroup=@fishNext + +syn region fishQuote start=/'/ skip=/\\'/ end=/'/ contained + \ contains=fishEscapedEscape,fishEscapedSQuote + \ skipwhite nextgroup=@fishNext +syn region fishQuote start=/"/ skip=/\\"/ end=/"/ contained + \ contains=fishEscapedEscape,fishEscapedDQuote,fishEscapedDollar,fishInnerVariable,fishQuotedCommandSub + \ skipwhite nextgroup=@fishNext + +syn match fishEscapedEscape /\\\\/ contained +syn match fishEscapedSQuote /\\'/ contained +syn match fishEscapedDQuote /\\"/ contained +syn match fishEscapedDollar /\\\$/ contained +hi def link fishEscapedEscape fishCharacter +hi def link fishEscapedSQuote fishCharacter +hi def link fishEscapedDQuote fishCharacter +hi def link fishEscapedDollar fishCharacter + +syn match fishCharacter /\\[0-7]\{1,3}/ contained skipwhite nextgroup=@fishNext +syn match fishCharacter /\\u[0-9a-fA-F]\{4}/ contained skipwhite nextgroup=@fishNext +syn match fishCharacter /\\U[0-9a-fA-F]\{8}/ contained skipwhite nextgroup=@fishNext +syn match fishCharacter /\\x[0-7][0-9a-fA-F]\|\\x[0-9a-fA-F]/ contained skipwhite nextgroup=@fishNext +syn match fishCharacter /\\X[0-9a-fA-F]\{1,2}/ contained skipwhite nextgroup=@fishNext +syn match fishCharacter /\\[abcefnrtv[\](){}<>\\*?~%#$|&;'" ]/ contained skipwhite nextgroup=@fishNext + +syn match fishRedirection /[>?]\?/ contained skipwhite nextgroup=fishRedirectionTarget +syn match fishRedirection /[0-9&]\?>&[0-9-]/ contained skipwhite nextgroup=@fishNext + +syn match fishRedirectionTarget /[[:alnum:]$~*?{,}"'\/._-]\+/ contained contains=fishInnerVariable skipwhite nextgroup=@fishNext +hi def link fishRedirectionTarget fishRedirection + +syn match fishSelfPid /%self\>/ contained nextgroup=@fishNext +hi def link fishSelfPid fishOperator + + +" Terminators + +syn cluster fishTerminator contains=fishPipe,fishBackgroundJob,fishSemicolon,fishSymbolicAndOr + +syn match fishPipe /\(1>\|2>\|&\)\?|/ contained skipwhite nextgroup=@fishStatement +hi def link fishPipe fishEnd + +syn match fishBackgroundJob /&$/ contained skipwhite nextgroup=@fishStatement +syn match fishBackgroundJob /&[^<>&|]/me=s+1,he=s+1 contained skipwhite nextgroup=@fishStatement +hi def link fishBackgroundJob fishEnd + +syn match fishSemicolon /;/ skipwhite nextgroup=@fishStatement +hi def link fishSemicolon fishEnd + +syn match fishSymbolicAndOr /\(&&\|||\)/ contained skipwhite skipempty nextgroup=@fishStatement +hi def link fishSymbolicAndOr fishOperator + + +" Other + +syn cluster fishNext contains=fishEscapedNl,@fishArgument,@fishTerminator + +syn match fishEscapedNl /\\$/ skipnl skipwhite contained nextgroup=@fishNext + +syn match fishComment /#.*/ contains=fishTodo,@Spell + +syn keyword fishTodo TODO contained + + + +syn sync minlines=200 +syn sync maxlines=300 + + +" Intermediate highlight groups matching $fish_color_* variables + +hi def link fishCommand fish_color_command +hi def link fishComment fish_color_comment +hi def link fishEnd fish_color_end +hi def link fishCharacter fish_color_escape +hi def link fishKeyword fish_color_keyword +hi def link fishEscapedNl fish_color_normal +hi def link fishOperator fish_color_operator +hi def link fishVariable fish_color_operator +hi def link fishInnerVariable fish_color_operator +hi def link fishPathGlob fish_color_operator +hi def link fishOption fish_color_option +hi def link fishParameter fish_color_param +hi def link fishQuote fish_color_quote +hi def link fishRedirection fish_color_redirection + + +" Default highlight groups + +hi def link fish_color_param Normal +hi def link fish_color_normal Normal +hi def link fish_color_option Normal +hi def link fish_color_command Function +hi def link fish_color_keyword Keyword +hi def link fish_color_end Delimiter +hi def link fish_color_operator Operator +hi def link fish_color_redirection Type +hi def link fish_color_quote String +hi def link fish_color_escape Character +hi def link fish_color_comment Comment + +hi def link fishTodo Todo + + +let b:current_syntax = 'fish' + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/flexwiki.vim b/.config/vim/syntax/flexwiki.vim new file mode 100644 index 0000000..3b5f7ff --- /dev/null +++ b/.config/vim/syntax/flexwiki.vim @@ -0,0 +1,133 @@ +" Vim syntax file +" Language: FlexWiki, http://www.flexwiki.com/ +" Maintainer: George V. Reilly +" Home: http://www.georgevreilly.com/vim/flexwiki/ +" Other Home: http://www.vim.org/scripts/script.php?script_id=1529 +" Author: George V. Reilly +" Filenames: *.wiki +" Last Change: Wed Apr 26 11:00 PM 2006 P +" Version: 0.3 + +" Note: The horrible regexps were reverse-engineered from +" FlexWikiCore\EngineSource\Formatter.cs, with help from the Regex Analyzer +" in The Regulator, http://regulator.sourceforge.net/ .NET uses Perl-style +" regexes, which use a different syntax than Vim (fewer \s). +" The primary test case is FlexWiki\FormattingRules.wiki + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" A WikiWord (unqualifiedWikiName) +syntax match flexwikiWord /\%(_\?\([A-Z]\{2,}[a-z0-9]\+[A-Za-z0-9]*\)\|\([A-Z][a-z0-9]\+[A-Za-z0-9]*[A-Z]\+[A-Za-z0-9]*\)\)/ +" A [bracketed wiki word] +syntax match flexwikiWord /\[[[:alnum:]\s]\+\]/ + +" text: "this is a link (optional tooltip)":http://www.microsoft.com +" TODO: check URL syntax against RFC +syntax match flexwikiLink `\("[^"(]\+\((\([^)]\+\))\)\?":\)\?\(https\?\|ftp\|gopher\|telnet\|file\|notes\|ms-help\):\(\(\(//\)\|\(\\\\\)\)\+[A-Za-z0-9:#@%/;$~_?+-=.&\-\\\\]*\)` + +" text: *strong* +syntax match flexwikiBold /\(^\|\W\)\zs\*\([^ ].\{-}\)\*/ +" '''bold''' +syntax match flexwikiBold /'''\([^'].\{-}\)'''/ + +" text: _emphasis_ +syntax match flexwikiItalic /\(^\|\W\)\zs_\([^ ].\{-}\)_/ +" ''italic'' +syntax match flexwikiItalic /''\([^'].\{-}\)''/ + +" ``deemphasis`` +syntax match flexwikiDeEmphasis /``\([^`].\{-}\)``/ + +" text: @code@ +syntax match flexwikiCode /\(^\|\s\|(\|\[\)\zs@\([^@]\+\)@/ + +" text: -deleted text- +syntax match flexwikiDelText /\(^\|\s\+\)\zs-\([^ , horizontal rule +syntax match flexwikiHR /^----.*$/ + +" Formatting can be turned off by ""enclosing it in pairs of double quotes"" +syntax match flexwikiEscape /"".\{-}""/ + +" Tables. Each line starts and ends with '||'; each cell is separated by '||' +syntax match flexwikiTable /||/ + +" Bulleted list items start with one or tabs, followed by whitespace, then '*' +" Numeric list items start with one or tabs, followed by whitespace, then '1.' +" Eight spaces at the beginning of the line is equivalent to the leading tab. +syntax match flexwikiList /^\(\t\| \{8}\)\s*\(\*\|1\.\).*$/ contains=@flexwikiText + +" Treat all other lines that start with spaces as PRE-formatted text. +syntax match flexwikiPre /^[ \t]\+[^ \t*1].*$/ + + +" Link FlexWiki syntax items to colors +hi def link flexwikiH1 Title +hi def link flexwikiH2 flexwikiH1 +hi def link flexwikiH3 flexwikiH2 +hi def link flexwikiH4 flexwikiH3 +hi def link flexwikiH5 flexwikiH4 +hi def link flexwikiH6 flexwikiH5 +hi def link flexwikiHR flexwikiH6 + +hi def flexwikiBold term=bold cterm=bold gui=bold +hi def flexwikiItalic term=italic cterm=italic gui=italic + +hi def link flexwikiCode Statement +hi def link flexwikiWord Underlined + +hi def link flexwikiEscape Todo +hi def link flexwikiPre PreProc +hi def link flexwikiLink Underlined +hi def link flexwikiList Type +hi def link flexwikiTable Type +hi def link flexwikiEmoticons Constant +hi def link flexwikiDelText Comment +hi def link flexwikiDeEmphasis Comment +hi def link flexwikiInsText Constant +hi def link flexwikiSuperScript Constant +hi def link flexwikiSubScript Constant +hi def link flexwikiCitation Constant + +hi def link flexwikiSingleLineProperty Identifier + +let b:current_syntax="FlexWiki" + +" vim:tw=0: diff --git a/.config/vim/syntax/focexec.vim b/.config/vim/syntax/focexec.vim new file mode 100644 index 0000000..187fd50 --- /dev/null +++ b/.config/vim/syntax/focexec.vim @@ -0,0 +1,88 @@ +" Vim syntax file +" Language: Focus Executable +" Maintainer: Rob Brady +" Last Change: $Date: 2004/06/13 15:38:04 $ +" URL: http://www.datatone.com/~robb/vim/syntax/focexec.vim +" $Revision: 1.1 $ + +" this is a very simple syntax file - I will be improving it +" one thing is how to do computes +" I don't like that &vars and FUSE() functions highlight to the same color +" I think some of these things should get different highlights - +" should MODIFY commands look different than TABLE? + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case match + +" A bunch of useful keywords +syn keyword focexecTable TABLE SUM BY ACROSS END PRINT HOLD LIST NOPRINT +syn keyword focexecTable SUBFOOT SUBHEAD HEADING FOOTING PAGE-BREAK AS +syn keyword focexecTable WHERE AND OR NOSPLIT FORMAT +syn keyword focexecModify MODIFY DATA ON FIXFORM PROMPT MATCH COMPUTE +syn keyword focexecModify GOTO CASE ENDCASE TYPE NOMATCH REJECT INCLUDE +syn keyword focexecModify CONTINUE FROM +syn keyword focexecNormal CHECK FILE CREATE EX SET IF FILEDEF DEFINE +syn keyword focexecNormal REBUILD IF RECORDLIMIT FI EQ JOIN +syn keyword focexecJoin IN TO +syn keyword focexecFileDef DISK +syn keyword focexecSet MSG ALL +syn match focexecDash "-RUN" +syn match focexecDash "-PROMPT" +syn match focexecDash "-WINFORM" + +" String and Character constants +syn region focexecString1 start=+"+ end=+"+ +syn region focexecString2 start=+'+ end=+'+ + +"amper variables +syn match focexecAmperVar "&&\=[A-Z_]\+" + +"fuse functions +syn keyword focexecFuse GETUSER GETUSR WHOAMI FEXERR ASIS GETTOK UPCASE LOCASE +syn keyword focexecFuse SUBSTR TODAY TODAYI POSIT HHMMSS BYTVAL EDAUT1 BITVAL +syn keyword focexecFuse BITSON FGETENV FPUTENV HEXBYT SPAWN YM YMI JULDAT +syn keyword focexecFuse JULDATI DOWK DOWKI DOWKLI CHGDAT CHGDATI FTOA ATODBL +syn keyword focexecFuse SOUNDEX RJUST REVERSE PARAG OVRLAY LJUST CTRFLD CTRAN +syn keyword focexecFuse CHKFMT ARGLEN GREGDT GREGDTI DTYMD DTYMDI DTDMY DTDMYI +syn keyword focexecFuse DTYDM DTYDMI DTMYD DTMYDI DTDYM DTDYMI DAYMD DAYMDI +syn keyword focexecFuse DAMDY DAMDYI DADMY DADMYI AYM AYMI AYMD AYMDI CHKPCK +syn keyword focexecFuse IMOD FMOD DMOD PCKOUT EXP BAR SPELLNM SPELLNUM RTCIVP +syn keyword focexecFuse PRDUNI PRDNOR RDNORM RDUNIF LCWORD ITOZ RLPHLD IBIPRO +syn keyword focexecFuse IBIPRW IBIPRC IBIPRU IBIRCP PTHDAT ITOPACK ITONUM +syn keyword focexecFuse DSMEXEC DSMEVAL DSMERRC MSMEXEC MSMEVAL MSMERRC EXTDXI +syn keyword focexecFuse BAANHASH EDAYSI DTOG GTOD HSETPT HPART HTIME HNAME +syn keyword focexecFuse HADD HDIFF HDATE HGETC HCNVRT HDTTM HMIDNT TEMPPATH +syn keyword focexecFuse DATEADD DATEDIF DATEMOV DATECVT EURHLD EURXCH FINDFOC +syn keyword focexecFuse FERRMES CNCTUSR CURRPATH USERPATH SYSTEM ASKYN +syn keyword focexecFuse FUSEMENU POPEDIT POPFILE + +syn match focexecNumber "\<\d\+\>" +syn match focexecNumber "\<\d\+\.\d*\>" + +syn match focexecComment "-\*.*" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link focexecString1 String +hi def link focexecString2 String +hi def link focexecNumber Number +hi def link focexecComment Comment +hi def link focexecTable Keyword +hi def link focexecModify Keyword +hi def link focexecNormal Keyword +hi def link focexecSet Keyword +hi def link focexecDash Keyword +hi def link focexecFileDef Keyword +hi def link focexecJoin Keyword +hi def link focexecAmperVar Identifier +hi def link focexecFuse Function + + +let b:current_syntax = "focexec" + +" vim: ts=8 diff --git a/.config/vim/syntax/form.vim b/.config/vim/syntax/form.vim new file mode 100644 index 0000000..9718480 --- /dev/null +++ b/.config/vim/syntax/form.vim @@ -0,0 +1,145 @@ +" Vim syntax file +" Language: FORM +" Version: 2.0 +" Maintainer: Michael M. Tung +" Last Change: +" Past Change: +" Past Change: + +" First public release based on 'Symbolic Manipulation with FORM' +" by J.A.M. Vermaseren, CAN, Netherlands, 1991. +" This syntax file is still in development. Please send suggestions +" to the maintainer. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" a bunch of useful FORM keywords +syn keyword formType global local +syn keyword formHeaderStatement symbol symbols cfunction cfunctions +syn keyword formHeaderStatement function functions vector vectors +syn keyword formHeaderStatement tensor tensors ctensor ctensors +syn keyword formHeaderStatement set sets index indices table ctable +syn keyword formHeaderStatement dimension dimensions unittrace +syn keyword formConditional if else elseif endif while +syn keyword formConditional repeat endrepeat label goto +syn keyword formConditional argument endargument exit +syn keyword formConditional inexpression inside term +syn keyword formConditional endinexpression endinside endterm +syn keyword formStatement abrackets also antibrackets antisymmetrize +syn keyword formStatement argexplode argimplode apply auto autodeclare +syn keyword formStatement brackets chainin chainout chisholm cleartable +syn keyword formStatement collect commuting compress contract +syn keyword formStatement cyclesymmetrize deallocatetable delete +syn keyword formStatement dimension discard disorder drop factarg fill +syn keyword formStatement fillexpression fixindex format funpowers hide +syn keyword formStatement identify idnew idold ifmatch inparallel +syn keyword formStatement insidefirst keep load makeinteger many metric +syn keyword formStatement moduleoption modulus multi multiply ndrop +syn keyword formStatement nfunctions nhide normalize notinparallel +syn keyword formStatement nprint nskip ntable ntensors nunhide nwrite +syn keyword formStatement off on once only polyfun pophide print +syn keyword formStatement printtable propercount pushhide ratio +syn keyword formStatement rcyclesymmetrize redefine renumber +syn keyword formStatement replaceinarg replaceloop save select +syn keyword formStatement setexitflag skip slavepatchsize sort splitarg +syn keyword formStatement splitfirstarg splitlastarg sum symmetrize +syn keyword formStatement tablebase testuse threadbucketsize totensor +syn keyword formStatement tovector trace4 tracen tryreplace unhide +syn keyword formStatement unittrace vectors write +" for compatibility with older FORM versions: +syn keyword formStatement id bracket count match traceN + +" some special functions +syn keyword formStatement abs_ bernoulli_ binom_ conjg_ count_ +syn keyword formStatement d_ dd_ delta_ deltap_ denom_ distrib_ +syn keyword formStatement dum_ dummy_ dummyten_ e_ exp_ fac_ +syn keyword formStatement factorin_ firstbracket_ g5_ g6_ g7_ +syn keyword formStatement g_ gcd_ gi_ integer_ invfac_ match_ +syn keyword formStatement max_ maxpowerof_ min_ minpowerof_ +syn keyword formStatement mod_ nargs_ nterms_ pattern_ poly_ +syn keyword formStatement polyadd_ polydiv_ polygcd_ polyintfac_ +syn keyword formStatement polymul_ polynorm_ polyrem_ polysub_ +syn keyword formStatement replace_ reverse_ root_ setfun_ sig_ +syn keyword formStatement sign_ sum_ sump_ table_ tbl_ term_ +syn keyword formStatement termsin_ termsinbracket_ theta_ thetap_ +syn keyword formStatement 5_ 6_ 7_ + +syn keyword formReserved sqrt_ ln_ sin_ cos_ tan_ asin_ acos_ +syn keyword formReserved atan_ atan2_ sinh_ cosh_ tanh_ asinh_ +syn keyword formReserved acosh_ atanh_ li2_ lin_ + +syn keyword formTodo contained TODO FIXME XXX + +syn match formSpecial display contained "\\\(n\|t\|b\|\\\|\"\)" +syn match formSpecial display contained "%\(%\|e\|E\|s\|f\|\$\)" +syn match formSpecial "\" +syn match formNumber "\<\d\+\>" +syn match formNumber "\<\d\+\.\d*\>" +syn match formNumber "\.\d\+\>" +syn match formNumber "-\d" contains=Number +syn match formNumber "-\.\d" contains=Number +syn match formNumber "i_\+\>" +syn match formNumber "fac_\+\>" +" pattern matching wildcards +syn match formNumber "?[a-zA-Z0-9]*" +" dollar-variables (new in 3.x) +syn match formNumber "\\$[a-zA-Z0-9]*" +" scalar products +syn match formNumber "^\=[a-zA-Z][a-zA-Z0-9]*\.[a-zA-Z][a-zA-Z0-9]*\>" + +syn match formDirective "^\=\.[a-zA-Z][a-zA-Z0-9]*\>" + +" hi User Labels +syn sync ccomment formComment minlines=10 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link formConditional Conditional +hi def link formNumber Number +hi def link formStatement Statement +hi def link formComment Comment +hi def link formPreProc PreProc +hi def link formDirective PreProc +hi def link formType Type +hi def link formString String +hi def link formNestedString String +hi def link formReserved Error +hi def link formTodo Todo +hi def link formSpecial SpecialChar + +if !exists("form_enhanced_color") +hi def link formHeaderStatement Statement +else +" enhanced color mode +hi def link formHeaderStatement HeaderStatement +" dark and a light background for local types +if &background == "dark" +hi HeaderStatement term=underline ctermfg=LightGreen guifg=LightGreen gui=bold +else +hi HeaderStatement term=underline ctermfg=DarkGreen guifg=SeaGreen gui=bold +endif +" change slightly the default for dark gvim +if has("gui_running") && &background == "dark" +hi Conditional guifg=LightBlue gui=bold +hi Statement guifg=LightYellow +endif +endif + + + let b:current_syntax = "form" + +" vim: ts=8 diff --git a/.config/vim/syntax/forth.vim b/.config/vim/syntax/forth.vim new file mode 100644 index 0000000..252116a --- /dev/null +++ b/.config/vim/syntax/forth.vim @@ -0,0 +1,455 @@ +" Vim syntax file +" Language: Forth +" Maintainer: Johan Kotlinski +" Previous Maintainer: Christian V. J. Brüssow +" Last Change: 2023 Aug 13 +" Filenames: *.f,*.fs,*.ft,*.fth,*.4th +" URL: https://github.com/jkotlinski/forth.vim + +" Supports the Forth-2012 Standard. +" +" Removed words from the earlier Forth-79, Forth-83 and Forth-94 standards are +" also included. +" +" These have been organised according to the version in which they were +" initially included and the version in which they were removed (obsolescent +" status is ignored). Words with "experimental" or "uncontrolled" status are +" not included unless they were later standardised. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Synchronization method +exe "syn sync minlines=" .. get(g:, "forth_minlines", 50) + +syn case ignore + +" Characters allowed in keywords +" I don't know if 128-255 are allowed in ANS-FORTH +syn iskeyword 33-126,128-255 + +" Space errors {{{1 +" when wanted, highlight trailing white space +if exists("forth_space_errors") + if !exists("forth_no_trail_space_error") + syn match forthSpaceError display excludenl "\s\+$" + endif + if !exists("forth_no_tab_space_error") + syn match forthSpaceError display " \+\t"me=e-1 + endif +endif + +" Core words {{{1 + +" basic mathematical and logical operators {{{2 +syn keyword forthOperators * */ */MOD + - / /MOD 0< 0= 1+ 1- 2* 2/ < = > ABS +syn keyword forthOperators AND FM/MOD INVERT LSHIFT M* MAX MIN MOD NEGATE OR +syn keyword forthOperators RSHIFT SM/REM U< UM* UM/MOD XOR + " extension words +syn keyword forthOperators 0<> 0> <> U> WITHIN + " Forth-79 +syn keyword forthOperators U* U/ U/MOD + " Forth-79, Forth-83 +syn keyword forthOperators NOT + " Forth-83 +syn keyword forthOperators 2+ 2- + +" non-standard basic mathematical and logical operators +syn keyword forthOperators 0<= 0>= 8* <= >= ?DNEGATE ?NEGATE U<= U>= UNDER+ + +" various words that take an input and do something with it {{{2 +syn keyword forthFunction . U. + " extension words +syn keyword forthFunction .R U.R + +" stack manipulations {{{2 +syn keyword forthStack 2DROP 2DUP 2OVER 2SWAP >R ?DUP DROP DUP OVER R> R@ ROT +syn keyword forthStack SWAP + " extension words +syn keyword forthStack NIP PICK ROLL TUCK +syn keyword forthRStack 2>R 2R> 2R@ + +" non-standard stack manipulations +syn keyword forthStack -ROT 3DROP 3DUP 4-ROT 4DROP 4DUP 4ROT 4SWAP 4TUCK +syn keyword forthStack 5DROP 5DUP 8DROP 8DUP 8SWAP +syn keyword forthRStack 4>R 4R> 4R@ 4RDROP RDROP + +" stack pointer manipulations {{{2 +syn keyword forthSP DEPTH + +" non-standard stack pointer manipulations +syn keyword forthSP FP! FP@ LP! LP@ RP! RP@ SP! SP@ + +" address operations {{{2 +syn keyword forthMemory ! +! 2! 2@ @ C! C@ +syn keyword forthAdrArith ALIGN ALIGNED ALLOT CELL+ CELLS CHAR+ CHARS +syn keyword forthMemBlks FILL MOVE + " extension words +syn keyword forthMemBlks ERASE UNUSED + +" non-standard address operations +syn keyword forthAdrArith ADDRESS-UNIT-BITS CELL CFALIGN CFALIGNED FLOAT +syn keyword forthAdrArith MAXALIGN MAXALIGNED + +" conditionals {{{2 +syn keyword forthCond ELSE IF THEN + " extension words +syn keyword forthCond CASE ENDCASE ENDOF OF + +" non-standard conditionals +syn keyword forthCond ?DUP-0=-IF ?DUP-IF ENDIF + +" iterations {{{2 +syn keyword forthLoop +LOOP BEGIN DO EXIT I J LEAVE LOOP RECURSE REPEAT UNLOOP +syn keyword forthLoop UNTIL WHILE + " extension words +syn keyword forthLoop ?DO AGAIN + +" non-standard iterations +syn keyword forthLoop +DO -DO -LOOP ?LEAVE DONE FOR K NEXT U+DO U-DO + +" new words {{{2 +syn match forthColonDef "\<:\s*[^ \t]\+\>" +syn keyword forthEndOfColonDef ; +syn keyword forthDefine ' , C, CONSTANT CREATE DOES> EXECUTE IMMEDIATE LITERAL +syn keyword forthDefine POSTPONE STATE VARIABLE ] +syn match forthDefine "\<\[']\>" +syn match forthDefine "\<\[\>" + " extension words +syn keyword forthColonDef :NONAME +syn keyword forthDefine BUFFER: COMPILE, DEFER IS MARKER TO VALUE +syn match forthDefine "\<\[COMPILE]\>" + " Forth-79, Forth-83 +syn keyword forthDefine COMPILE + +" non-standard new words +syn match forthClassDef "\<:CLASS\s*[^ \t]\+\>" +syn keyword forthEndOfClassDef ;CLASS +syn match forthObjectDef "\<:OBJECT\s*[^ \t]\+\>" +syn keyword forthEndOfObjectDef ;OBJECT +syn match forthColonDef "\<:M\s*[^ \t]\+\>" +syn keyword forthEndOfColonDef ;M +syn keyword forthDefine 2, COMPILE-ONLY CREATE-INTERPRET/COMPILE +syn keyword forthDefine CVARIABLE F, FIND-NAME INTERPRET INTERPRETATION> +syn keyword forthDefine LASTXT NAME>COMP NAME>INT NAME?INT POSTPONE, RESTRICT +syn keyword forthDefine USER +syn match forthDefine "\<\[COMP']\>" + +" basic character operations {{{2 +syn keyword forthCharOps BL COUNT CR EMIT FIND KEY SPACE SPACES TYPE WORD +" recognize 'char (' or '[CHAR] (' correctly, so it doesn't +" highlight everything after the paren as a comment till a closing ')' +syn match forthCharOps '\ #S <# >NUMBER HOLD S>D SIGN + " extension words +syn keyword forthConversion HOLDS + " Forth-79, Forth-83, Forth-93 +syn keyword forthConversion CONVERT + +" non-standard char-number conversion +syn keyword forthConversion #>> (NUMBER) (NUMBER?) <<# DIGIT DPL HLD NUMBER + +" interpreter, wordbook, compiler {{{2 +syn keyword forthForth >BODY >IN ACCEPT ENVIRONMENT? EVALUATE HERE QUIT SOURCE + " extension words +syn keyword forthForth ACTION-OF DEFER! DEFER@ PAD PARSE PARSE-NAME REFILL +syn keyword forthForth RESTORE-INPUT SAVE-INPUT SOURCE-ID + " Forth-79 +syn keyword forthForth 79-STANDARD + " Forth-83 +syn keyword forthForth MARK >RESOLVE ?BRANCH BRANCH FORTH-83 + " Forth-79, Forth-83, Forth-94 +syn keyword forthForth QUERY + " Forth-83, Forth-94 +syn keyword forthForth SPAN + +" non-standard interpreter, wordbook, compiler +syn keyword forthForth ) >LINK >NEXT >VIEW ASSERT( ASSERT0( ASSERT1( ASSERT2( +syn keyword forthForth ASSERT3( BODY> CFA COLD L>NAME LINK> N>LINK NAME> VIEW +syn keyword forthForth VIEW> + +" booleans {{{2 + " extension words +syn match forthBoolean "\<\%(TRUE\|FALSE\)\>" + +" numbers {{{2 +syn keyword forthMath BASE DECIMAL + " extension words +syn keyword forthMath HEX +syn match forthInteger '\<-\=\d\+\.\=\>' +syn match forthInteger '\<#-\=\d\+\.\=\>' +syn match forthInteger '\<\$-\=\x\+\.\=\>' +syn match forthInteger '\<%-\=[01]\+\.\=\>' + +" characters {{{2 +syn match forthCharacter "'\k'" + +" strings {{{2 + +" Words that end with " are assumed to start string parsing. +" This includes standard words: S" ." +syn region forthString matchgroup=forthString start=+\<\S\+"\s+ end=+"+ end=+$+ contains=@Spell + " extension words +syn region forthString matchgroup=forthString start=+\\|:\@=\)" + +" XXX If you find this overkill you can remove it. This has to come after the +" highlighting for numbers and booleans otherwise it has no effect. +syn region forthComment start='\<\%(0\|FALSE\)\s\+\[IF]' end='\<\[ENDIF]' end='\<\[THEN]' contains=forthTodo + +if get(g:, "forth_no_comment_fold", 0) + syn region forthComment start='\<(\>' end=')' contains=@Spell,forthTodo,forthSpaceError + " extension words + syn match forthComment '\<\\\>.*$' contains=@Spell,forthTodo,forthSpaceError +else + syn region forthComment start='\<(\>' end=')' contains=@Spell,forthTodo,forthSpaceError fold + " extension words + syn match forthComment '\<\\\>.*$' contains=@Spell,forthTodo,forthSpaceError + syn region forthMultilineComment start="^\s*\\\>" end="\n\%(\s*\\\>\)\@!" contains=forthComment transparent fold +endif + + " extension words +syn region forthComment start='\<\.(\>' end=')' end='$' contains=@Spell,forthTodo,forthSpaceError + +" ABORT {{{2 +syn keyword forthForth ABORT +syn region forthForth start=+\+ end=+$+ + +" The optional Block word set {{{1 +" Handled as Core words - REFILL +syn keyword forthBlocks BLK BLOCK BUFFER FLUSH LOAD SAVE-BUFFERS UPDATE + " extension words +syn keyword forthBlocks EMPTY-BUFFERS LIST SCR THRU + +" Non-standard Block words +syn keyword forthBlocks +LOAD +THRU --> BLOCK-INCLUDED BLOCK-OFFSET +syn keyword forthBlocks BLOCK-POSITION EMPTY-BUFFER GET-BLOCK-FID OPEN-BLOCKS +syn keyword forthBlocks SAVE-BUFFER UPDATED? USE + +" The optional Double-Number word set {{{1 +syn keyword forthConversion D>S +syn keyword forthDefine 2CONSTANT 2LITERAL 2VARIABLE +syn keyword forthFunction D. D.R +syn keyword forthOperators D+ D- D0= D2* D2/ D= DABS DMAX DMIN DNEGATE +syn keyword forthOperators D0< D< M+ M*/ + " extension words +syn keyword forthDefine 2VALUE +syn keyword forthOperators DU< +syn keyword forthStack 2ROT + +" Non-standard Double-Number words +syn keyword forthOperators D0<= D0<> D0> D0>= D<= D<> D> D>= DU<= DU> DU>= +syn keyword forthStack 2-ROT 2NIP 2RDROP 2TUCK + +" The optional Exception word set {{{1 +" Handled as Core words - ABORT ABORT" +syn keyword forthCond CATCH THROW + +" The optional Facility word set {{{1 +syn keyword forthCharOps AT-XY KEY? PAGE + " extension words +syn keyword forthCharOps EKEY EKEY>CHAR EKEY>FKEY EKEY? EMIT? K-ALT-MASK +syn keyword forthCharOps K-CTRL-MASK K-DELETE K-DOWN K-END K-F1 K-F10 K-F11 +syn keyword forthCharOps K-F12 K-F2 K-F3 K-F4 K-F5 K-F6 K-F7 K-F8 K-F9 K-HOME +syn keyword forthCharOps K-INSERT K-LEFT K-NEXT K-PRIOR K-RIGHT K-SHIFT-MASK +syn keyword forthCharOps K-UP +syn keyword forthDefine +FIELD BEGIN-STRUCTURE CFIELD: END-STRUCTURE FIELD: +syn keyword forthForth MS TIME&DATE + +" The optional File-Access word set {{{1 +" Handled as Core words - REFILL SOURCE-ID S\" S" ( +syn keyword forthFileMode BIN R/O R/W W/O +syn keyword forthFileWords CLOSE-FILE CREATE-FILE DELETE-FILE FILE-POSITION +syn keyword forthFileWords FILE-SIZE INCLUDE-FILE INCLUDED OPEN-FILE READ-FILE +syn keyword forthFileWords READ-LINE REPOSITION-FILE RESIZE-FILE WRITE-FILE +syn keyword forthFileWords WRITE-LINE + " extension words +syn keyword forthFileWords FILE-STATUS FLUSH-FILE RENAME-FILE REQUIRED +syn match forthInclude '\' + +syn keyword forthConversion >FLOAT D>F F>D +syn keyword forthAdrArith FALIGN FALIGNED FLOAT+ FLOATS +syn keyword forthDefine FCONSTANT FLITERAL FVARIABLE +syn keyword forthFStack FDROP FDUP FOVER FROT FSWAP +syn keyword forthFunction REPRESENT +syn keyword forthMemory F! F@ +syn keyword forthOperators F* F+ F- F/ F0< F0= F< FLOOR FMAX FMIN FNEGATE +syn keyword forthOperators FROUND +syn keyword forthSP FDEPTH + " extension words +syn keyword forthConversion F>S S>F +syn keyword forthAdrArith DFALIGN DFALIGNED DFLOAT+ DFLOATS SFALIGN +syn keyword forthAdrArith SFALIGNED SFLOAT+ SFLOATS +syn keyword forthDefine DFFIELD: FFIELD: FVALUE SFFIELD: +syn keyword forthFunction F. FE. FS. PRECISION SET-PRECISION +syn keyword forthMemory DF! DF@ SF! SF@ +syn keyword forthOperators F** FABS FACOS FACOSH FALOG FASIN FASINH FATAN +syn keyword forthOperators FATAN2 FATANH FCOS FCOSH FEXP FEXPM1 FLN FLNP1 +syn keyword forthOperators FLOG FSIN FSINCOS FSINH FSQRT FTAN FTANH FTRUNC F~ + +" Non-standard Floating-Point words +syn keyword forthOperators 1/F F2* F2/ F~ABS F~REL +syn keyword forthFStack FNIP FTUCK + +" The optional Locals word set {{{1 +syn keyword forthForth (LOCAL) + " extension words +syn region forthLocals start="\<{:\>" end="\<:}\>" +syn region forthLocals start="\" end="\<|\>" + +" Non-standard Locals words +syn region forthLocals start="\<{\>" end="\<}\>" + +" The optional Memory-Allocation word set {{{1 +syn keyword forthMemory ALLOCATE FREE RESIZE + +" The optional Programming-Tools wordset {{{1 +syn keyword forthDebug .S ? DUMP SEE WORDS + " extension words +syn keyword forthAssembler ;CODE ASSEMBLER CODE END-CODE +syn keyword forthCond AHEAD CS-PICK CS-ROLL +syn keyword forthDefine NAME>COMPILE NAME>INTERPRET NAME>STRING SYNONYM +syn keyword forthDefine TRAVERSE-WORDLIST +syn match forthDefine "\<\[DEFINED]\>" +syn match forthDefine "\<\[ELSE]\>" +syn match forthDefine "\<\[IF]\>" +syn match forthDefine "\<\[THEN]\>" +syn match forthDefine "\<\[UNDEFINED]\>" +syn keyword forthForth BYE FORGET +syn keyword forthStack N>R NR> +syn keyword forthVocs EDITOR + +" Non-standard Programming-Tools words +syn keyword forthAssembler FLUSH-ICACHE +syn keyword forthDebug PRINTDEBUGDATA PRINTDEBUGLINE +syn match forthDebug "\<\~\~\>" +syn match forthDefine "\<\[+LOOP]\>" +syn match forthDefine "\<\[?DO]\>" +syn match forthDefine "\<\[AGAIN]\>" +syn match forthDefine "\<\[BEGIN]\>" +syn match forthDefine "\<\[DO]\>" +syn match forthDefine "\<\[ENDIF]\>" +syn match forthDefine "\<\[IFDEF]\>" +syn match forthDefine "\<\[IFUNDEF]\>" +syn match forthDefine "\<\[LOOP]\>" +syn match forthDefine "\<\[NEXT]\>" +syn match forthDefine "\<\[REPEAT]\>" +syn match forthDefine "\<\[UNTIL]\>" +syn match forthDefine "\<\[WHILE]\>" + +" The optional Search-Order word set {{{1 +" Handled as Core words - FIND +syn keyword forthVocs DEFINITIONS FORTH-WORDLIST GET-CURRENT GET-ORDER +syn keyword forthVocs SEARCH-WORDLIST SET-CURRENT SET-ORDER WORDLIST + " extension words +syn keyword forthVocs ALSO FORTH ONLY ORDER PREVIOUS + " Forth-79, Forth-83 +syn keyword forthVocs CONTEXT CURRENT VOCABULARY + +" Non-standard Search-Order words +syn keyword forthVocs #VOCS ROOT SEAL VOCS + +" The optional String word set {{{1 +syn keyword forthFunction -TRAILING /STRING BLANK CMOVE CMOVE> COMPARE SEARCH +syn keyword forthFunction SLITERAL + " extension words +syn keyword forthFunction REPLACES SUBSTITUTE UNESCAPE + +" The optional Extended-Character word set {{{1 +" Handled as Core words - [CHAR] CHAR and PARSE +syn keyword forthAdrArith XCHAR+ +syn keyword forthCharOps X-SIZE XC-SIZE XEMIT XKEY XKEY? +syn keyword forthDefine XC, +syn keyword forthMemory XC!+ XC!+? XC@+ + " extension words +syn keyword forthAdrArith XCHAR- +X/STRING X\\STRING- +syn keyword forthCharOps EKEY>XCHAR X-WIDTH XC-WIDTH +syn keyword forthConversion XHOLD +syn keyword forthString -TRAILING-GARBAGE + +" Define the default highlighting {{{1 +hi def link forthBoolean Boolean +hi def link forthCharacter Character +hi def link forthTodo Todo +hi def link forthOperators Operator +hi def link forthMath Number +hi def link forthInteger Number +hi def link forthFloat Float +hi def link forthStack Special +hi def link forthRstack Special +hi def link forthFStack Special +hi def link forthSP Special +hi def link forthMemory Function +hi def link forthAdrArith Function +hi def link forthMemBlks Function +hi def link forthCond Conditional +hi def link forthLoop Repeat +hi def link forthColonDef Define +hi def link forthEndOfColonDef Define +hi def link forthDefine Define +hi def link forthDebug Debug +hi def link forthAssembler Include +hi def link forthCharOps Character +hi def link forthConversion String +hi def link forthForth Statement +hi def link forthVocs Statement +hi def link forthEscape Special +hi def link forthString String +hi def link forthComment Comment +hi def link forthClassDef Define +hi def link forthEndOfClassDef Define +hi def link forthObjectDef Define +hi def link forthEndOfObjectDef Define +hi def link forthInclude Include +hi def link forthLocals Type " nothing else uses type and locals must stand out +hi def link forthFileMode Function +hi def link forthFunction Function +hi def link forthFileWords Statement +hi def link forthBlocks Statement +hi def link forthSpaceError Error +"}}} + +let b:current_syntax = "forth" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim:ts=8:sw=4:nocindent:smartindent:fdm=marker:tw=78 + diff --git a/.config/vim/syntax/fortran.vim b/.config/vim/syntax/fortran.vim new file mode 100644 index 0000000..8167e4d --- /dev/null +++ b/.config/vim/syntax/fortran.vim @@ -0,0 +1,490 @@ +" Vim syntax file +" Language: Fortran 2023 (and Fortran 2018, 2008, 2003, 95, 90, and 77) +" Version: (v113) 2024 February 01 +" Maintainers: Ajit J. Thakkar ; +" Joshua Hollett +" Usage: For instructions, do :help fortran-syntax from Vim +" Credits: +" Version 0.1 for Fortran 95 was created in April 2000 by Ajit Thakkar from an +" older Fortran 77 syntax file by Mario Eusebio and Preben Guldberg. +" Since then, useful suggestions and contributions have been made, in order, by: +" Andrej Panjkov, Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile, +" Walter Dieudonne, Alexander Wagner, Roman Bertle, Charles Rendleman, +" Andrew Griffiths, Joe Krahn, Hendrik Merx, Matt Thompson, Jan Hermann, +" Stefano Zaghi, Vishnu V. Krishnan, Judicael Grasset, Takuma Yoshida, +" Eisuke Kawashima, Andre Chalella, Fritz Reese, Karl D. Hammond, +" and Michele Esposito Marzino. + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Choose between fixed and free source form if this hasn't been done yet +if !exists("b:fortran_fixed_source") + if exists("fortran_free_source") + " User guarantees free source form for all Fortran files + let b:fortran_fixed_source = 0 + elseif exists("fortran_fixed_source") + " User guarantees fixed source form for all fortran files + let b:fortran_fixed_source = 1 + elseif expand("%:e") =~? '^f\%(90\|95\|03\|08\)$' + " Free-form file extension defaults as in Intel ifort, gcc(gfortran), NAG, Pathscale, and Cray compilers + let b:fortran_fixed_source = 0 + elseif expand("%:e") =~? '^\%(f\|f77\|for\)$' + " Fixed-form file extension defaults + let b:fortran_fixed_source = 1 + else + " Modern Fortran compilers still allow both free and fixed source form. + " Assume fixed source form unless signs of free source form + " are detected in the first five columns of the first s:lmax lines. + " Detection becomes more accurate and time-consuming if more lines + " are checked. Increase the limit below if you keep lots of comments at + " the very top of each file and you have a fast computer. + let s:lmax = 500 + if ( s:lmax > line("$") ) + let s:lmax = line("$") + endif + let b:fortran_fixed_source = 1 + let s:ln=1 + while s:ln <= s:lmax + let s:test = strpart(getline(s:ln),0,5) + if s:test !~ '^[Cc*]' && s:test !~ '^ *[!#]' && s:test =~ '[^ 0-9\t]' && s:test !~ '^[ 0-9]*\t' + let b:fortran_fixed_source = 0 + break + endif + let s:ln = s:ln + 1 + endwhile + unlet! s:lmax s:ln s:test + endif +endif + +" Group names ending in 'Del' and 'Ob', respectively, indicate features deleted and obsolescent in Fortran 2018 and later +" Deleted features are highlighted as errors +" Obsolescent features are highlighted as todo items +syn case ignore + +if b:fortran_fixed_source == 1 + syn match fortranConstructName "^\s\{6,}\zs\a\w*\ze\s*:" +else + syn match fortranConstructName "^\s*\zs\a\w*\ze\s*:" +endif +syn match fortranConstructName "\%(\" +syn match fortranConstructName "\%(\" +syn match fortranConstructName "\%(\" + +syn match fortranUnitName "\%(\<\%(end\s*\)\?\%(subroutine\|function\|module\|program\|submodule\)\s\+\)\@12<=\a\w*" +syn match fortranUnitHeader "\\ze\s*\%(!.*\)\?$" + +syn keyword fortranIntrinsic abs acos aimag aint anint asin atan atan2 cmplx conjg cos cosh exp ichar index int log log10 max min nint sin sinh sqrt tan tanh +syn keyword fortranIntrinsicR achar iachar transfer dble dprod dim lge lgt lle llt mod +syn keyword fortranIntrinsic command_argument_count get_command get_command_argument get_environment_variable is_iostat_end is_iostat_eor move_alloc new_line same_type_as extends_type_of +syn keyword fortranIntrinsic selected_real_kind selected_int_kind selected_logical_kind selected_char_kind next previous +syn keyword fortranIntrinsic acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 +syn keyword fortranIntrinsic adjustl adjustr all allocated any associated bit_size btest ceiling cshift date_and_time digits +syn keyword fortranIntrinsic dot_product eoshift exponent floor fraction iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc merge minexponent minloc +syn keyword fortranIntrinsic modulo mvbits nearest pack precision present radix random_number random_seed range repeat reshape rrspacing scale scan set_exponent shape spacing +" intrinsic names often used for variables in older Fortran code +syn match fortranIntrinsic '\<\%(count\|epsilon\|maxval\|minval\|product\|sum\|huge\|tiny\|char\)\>\ze\s*(' +syn keyword fortranIntrinsic spread system_clock transpose trim ubound unpack verify is_contiguous event_query +syn keyword fortranIntrinsic atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits +syn keyword fortranIntrinsic bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image +syn keyword fortranIntrinsic null cpu_time failed_images stopped_images image_status co_broadcast co_max co_min co_sum co_reduce +syn keyword fortranIntrinsic atomic_add atomic_and atomic_or atomic_xor atomic_fetch_add atomic_fetch_and atomic_fetch_or atomic_fetch_xor atomic_cas +syn keyword fortranIntrinsic ieee_arithmetic ieee_features ieee_exceptions +syn keyword fortranIntrinsic ieee_class ieee_copy_sign ieee_fma ieee_get_rounding_mode ieee_get_underflow_mode ieee_int ieee_is_finite +syn keyword fortranIntrinsic ieee_is_nan ieee_is_negative ieee_is_normal ieee_logb ieee_max ieee_max_mag ieee_max_num ieee_max_num_mag +syn keyword fortranIntrinsic ieee_min ieee_min_mag ieee_min_num ieee_min_num_mag ieee_next_after ieee_next_down ieee_next_up ieee_quiet_eq +syn keyword fortranIntrinsic ieee_quiet_ge ieee_quiet_gt ieee_quiet_le ieee_quiet_lt ieee_quiet_ne ieee_real ieee_rem ieee_rint ieee_scalb +syn keyword fortranIntrinsic ieee_selected_real_kind ieee_set_rounding_mode ieee_set_underflow_mode ieee_signaling_eq ieee_signaling_ge +syn keyword fortranIntrinsic ieee_signaling_gt ieee_signaling_le ieee_signaling_lt ieee_signaling_ne ieee_signbit ieee_support_datatype +syn keyword fortranIntrinsic ieee_support_denormal ieee_support_divide ieee_support_inf ieee_support_io ieee_support_nan ieee_support_rounding +syn keyword fortranIntrinsic ieee_support_sqrt ieee_support_subnormal ieee_support_standard ieee_support_underflow_control +syn keyword fortranIntrinsic ieee_unordered ieee_value ieee_get_flag ieee_get_halting_mode ieee_get_modes ieee_get_status +syn keyword fortranIntrinsic ieee_set_flag ieee_set_halting_mode ieee_set_modes ieee_set_status ieee_support_flag ieee_support_halting +syn keyword fortranIntrinsic iso_c_binding c_loc c_funloc c_sizeof c_associated c_f_pointer c_f_procpointer c_f_strpointer f_c_string +syn keyword fortranIntrinsic iso_fortran_env compiler_options compiler_version +syn keyword fortranIntrinsic out_of_range reduce random_init coshape get_team split tokenize +syn keyword fortranIntrinsic acosd asind atand atan2d cosd sind tand acospi asinpi atanpi atan2pi cospi sinpi tanpi +syn match fortranIntrinsic "\%(^\s*\|type *is *(\s*\)\@12\ze\s*(' +syn match fortranIntrinsic '\<\%(sign\|size\|team_number\)\>\ze\s*(' +" Obsolescent type-specific intrinsics +syn keyword fortranIntrinsicOb alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl +if exists("fortran_vendor_intrinsics") + syn keyword fortranIntrinsicVen algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh +endif + +syn keyword fortranType generic final enumerator import classof typeof team_type event_type lock_type notify_type +syn keyword fortranType ieee_flag_type ieee_modes_type ieee_status_type ieee_class_type ieee_round_type ieee_features_type +syn keyword fortranType c_ptr c_funptr elemental pure impure recursive non_recursive simple +syn match fortranType "^\s*\%(implicit\s\+\)\?\%(real\|double\s*precision\|integer\|logical\|complex\|character\|type\)\>" +syn match fortranTypeOb "^\s*\%(character\s*\)\@15<=\*" +syn match fortranType "^\s*\zsimplicit\s\+none\>" +syn match fortranType "\" +syn match fortranType "\%(\" +syn match fortranType "\<\%(end\s*\)\?interface\>" +syn match fortranType "\" +syn match fortranType "\<\%(end\s*\)\?enumeration\s\+type\>" +syn match fortranType "\<\%(end\s*\)\?\%(module\s\+\)\?procedure\>" +syn match fortranType "\%(simple \|pure \|impure \|recursive \|non_recursive \|elemental \|module \)\@17<=\%(real\|double precision\|integer\|logical\|complex\|character\)" +syn match fortranTypeR display "\" +syn match fortranTypeR display "\" +syn keyword fortranAttribute abstract allocatable bind codimension contiguous deferred dimension extends +syn keyword fortranAttribute external intent intrinsic non_intrinsic non_overridable nopass optional parameter pass +syn keyword fortranAttribute pointer private protected public save sequence target value volatile +syn match fortranAttribute "\\ze\s*\%(::\|,\|(\)" + +syn keyword fortranUnitHeader result operator assignment +syn match fortranUnitHeader "\<\%(end\s*\)\?\%(subroutine\|function\|module\|program\|submodule\)\>" +syn match fortranBlock "\<\%(end\s*\)\?\%(block\|critical\|associate\)\>" +syn match fortranCalled "\<\%(call\s\+\)\@7<=\a\w*" +syn match fortranRepeat "\" +syn keyword fortranRepeat concurrent +syn keyword fortranRepeatR while +syn match fortranRepeat "\" +syn keyword fortranRepeatOb forall +syn match fortranRepeatOb "\" + +syn keyword fortranTodo contained bug note debug todo fixme + +"Catch errors caused by too many right parentheses +syn region fortranParen transparent start="(" end=")" contains=ALLBUT,fortranParenError,@fortranCommentGroup,cIncluded,@spell +syn match fortranParenError ")" + +syn match fortranOperator "\.\s*n\?eqv\s*\." +syn match fortranOperator "\.\s*\%(and\|or\|not\)\s*\." +syn match fortranOperator "\%(+\|-\|/\|\*\)" +syn match fortranOperator "\%(\%(>\|<\)=\?\|==\|/=\|=\)" +syn match fortranOperator "\%(%\|?\|=>\)" +syn match fortranOperator "\%([\|]\)" +syn match fortranOperatorR "\.\s*[gl][et]\s*\." +syn match fortranOperatorR "\.\s*\%(eq\|ne\)\s*\." + +syn keyword fortranReadWrite print flush +syn match fortranReadWrite '\<\%(backspace\|close\|endfile\|inquire\|open\|read\|rewind\|wait\|write\)\ze\s*(' + +"If tabs are allowed then the left margin checks do not work +if exists("fortran_have_tabs") + syn match fortranTab "\t" transparent +else + syn match fortranTab "\t" +endif + +"Numbers of various sorts +" Integers +syn match fortranNumber display "\<\d\+\%(_\a\w*\)\?\>" +" floating point number, without a decimal point +syn match fortranFloatIll display "\<\d\+[deq][-+]\?\d\+\%(_\a\w*\)\?\>" +" floating point number, starting with a decimal point +syn match fortranFloatIll display "\.\d\+\%([deq][-+]\?\d\+\)\?\%(_\a\w*\)\?\>" +" floating point number, no digits after decimal +syn match fortranFloatIll display "\<\d\+\.\%([deq][-+]\?\d\+\)\?\%(_\a\w*\)\?\>" +" floating point number, D or Q exponents +syn match fortranFloatIll display "\<\d\+\.\d\+\%([dq][-+]\?\d\+\)\?\%(_\a\w*\)\?\>" +" floating point number +syn match fortranFloat display "\<\d\+\.\d\+\%(e[-+]\?\d\+\)\?\%(_\a\w*\)\?\>" +" binary number +syn match fortranBinary display "b["'][01]\+["']" +" octal number +syn match fortranOctal display "o["'][0-7]\+["']" +" hexadecimal number +syn match fortranHex display "z["'][0-9A-F]\+["']" +" Numbers in formats +syn match fortranFormatSpec display "\d*f\d\+\.\d\+" +syn match fortranFormatSpec display "\d*e[sn]\?\d\+\.\d\+\%(e\d+\>\)\?" +syn match fortranFormatSpec display "\d*\%(d\|q\|g\)\d\+\.\d\+\%(e\d+\)\?" +syn match fortranFormatSpec display "\d\+x\>" +" The next match cannot be used because it would pick up identifiers as well +" syn match fortranFormatSpec display "\<\%(a\|i\)\d\+" +" Numbers as labels +if (b:fortran_fixed_source == 1) + syn match fortranLabelNumber display "^\zs\d\{1,5}\ze\s" + syn match fortranLabelNumber display "^ \zs\d\{1,4}\ze\s" + syn match fortranLabelNumber display "^ \zs\d\{1,3}\ze\s" + syn match fortranLabelNumber display "^ \zs\d\d\?\ze\s" + syn match fortranLabelNumber display "^ \zs\d\ze\s" +else + syn match fortranLabelNumber display "^\s*\zs\d\{1,5}\ze\s*\a" + syn match fortranLabelNumberOb display "^\s*\zs\d\{1,5}\ze *end\s*\%(do\|if\)\>\ze" +endif +" Numbers as targets +syn match fortranTarget display "\%(\" +syn match fortranTargetOb display "\%(\" +syn match fortranTarget display "\%(\" + +syn match fortranBoolean "\.\s*\%(true\|false\)\s*\." + +syn keyword fortranKeyword call use only continue allocate deallocate nullify return cycle exit contains +syn match fortranKeyword "\" +syn match fortranKeyword "\<\%(error\s\+\)\?stop\>" +syn match fortranKeyword "\" +syn match fortranKeywordDel "\" +syn match fortranConditional "\<\%(end\s*\)\?\%(if\|where\|select\)\>" +syn match fortranConditional "\" +syn match fortranConditional "\<\%(case\|rank\|class\)\s\+default\>" +syn match fortranConditional "^\s*\zs\%(case\|rank\)\ze\s\+(" +syn match fortranConditional "\<\%(class\|type\)\s\+is\>" +syn match fortranConditionalDel "\" +syn match fortranImageControl "\<\%(change\|form\|end\)\s\+team\>" +syn match fortranImageControl "\" + +syn keyword fortranStorageClass in out inout +syn match fortranStorageClass '\<\%(kind\|len\)\>\ze\s*=' +syn match fortranStorageClass "^\s*data\>\ze\%(\s\+\a\)\@=" +syn match fortranStorageClassOb "\\%(\s*\%(/\|\a\)\)\@=" +syn match fortranStorageClassOb "\\%(\s*(\)\@=" + +syn keyword fortranConstant c_null_char c_alert c_backspace c_form_feed c_new_line c_carriage_return c_horizontal_tab c_vertical_tab c_ptrdiff_t +syn keyword fortranConstant c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr +syn keyword fortranConstant character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit stat_failed_image stat_locked stat_locked_other_image stat_stopped_image stat_unlocked stat_unlocked_failed_image +syn keyword fortranConstant int8 int16 int32 int64 real16 real32 real64 real128 character_kinds integer_kinds logical_kinds real_kinds iostat_inquire_internal_unit initial_team current_team parent_team +syn keyword fortranConstant ieee_invalid ieee_overflow ieee_divide_by_zero ieee_underflow ieee_inexact ieee_usual ieee_all +syn keyword fortranConstant ieee_signaling_nan ieee_quiet_nan ieee_negative_inf ieee_negative_normal ieee_negative_subnormal +syn keyword fortranConstant ieee_negative_zero ieee_positive_zero ieee_positive_subnormal ieee_positive_normal ieee_positive_inf +syn keyword fortranConstant ieee_other_value ieee_negative_denormal ieee_positive_denormal ieee_negative_subnormal +syn keyword fortranConstant ieee_positive_subnormal ieee_nearest ieee_to_zero ieee_up ieee_down ieee_away ieee_other ieee_datatype +syn keyword fortranConstant ieee_denormal ieee_divide ieee_halting ieee_inexact_flag ieee_inf ieee_invalid_flag ieee_nan +syn keyword fortranConstant ieee_rounding ieee_sqrt ieee_subnormal ieee_underflow_flag +syn match fortranConstant "\.\s*nil\s*\." + +" CUDA Fortran +if exists("fortran_CUDA") + syn match fortranTypeCUDA "\" + syn keyword fortranTypeCUDA host global device + syn keyword fortranTypeCUDA shared constant pinned texture + syn keyword fortranTypeCUDA dim1 dim2 dim3 dim4 + syn keyword fortranTypeCUDA cudadeviceprop cuda_count_kind cuda_stream_kind + syn keyword fortranTypeCUDA cudaEvent cudaFuncAttributes cudaArrayPtr + syn keyword fortranTypeCUDA cudaSymbol cudaChannelFormatDesc cudaPitchedPtr + syn keyword fortranTypeCUDA cudaExtent cudaMemcpy3DParms + syn keyword fortranTypeCUDA cudaFuncCachePreferNone cudaFuncCachePreferShared + syn keyword fortranTypeCUDA cudaFuncCachePreferL1 cudaLimitStackSize + syn keyword fortranTypeCUDA cudaLimitPrintfSize cudaLimitMallocHeapSize + syn keyword fortranTypeCUDA cudaSharedMemBankSizeDefault cudaSharedMemBankSizeFourByte cudaSharedMemBankSizeEightByte + syn keyword fortranTypeCUDA cudaEventDefault cudaEventBlockingSync cudaEventDisableTiming + syn keyword fortranTypeCUDA cudaMemcpyHostToDevice cudaMemcpyDeviceToHost + syn keyword fortranTypeCUDA cudaMemcpyDeviceToDevice + syn keyword fortranTypeCUDA cudaErrorNotReady cudaSuccess cudaErrorInvalidValue + syn keyword fortranTypeCUDA c_devptr + + syn match fortranStringCUDA "\" + syn match fortranStringCUDA "\" + syn match fortranStringCUDA "\" + syn match fortranStringCUDA "\" + + syn keyword fortranIntrinsicCUDA warpsize syncthreads syncthreads_and syncthreads_count syncthreads_or threadfence threadfence_block threadfence_system gpu_time allthreads anythread ballot + syn keyword fortranIntrinsicCUDA atomicadd atomicsub atomicmax atomicmin atomicand atomicor atomicxor atomicexch atomicinc atomicdec atomiccas sizeof __shfl __shfl_up __shfl_down __shfl_xor + syn keyword fortranIntrinsicCUDA cudaChooseDevice cudaDeviceGetCacheConfig cudaDeviceGetLimit cudaDeviceGetSharedMemConfig cudaDeviceReset cudaDeviceSetCacheConfig cudaDeviceSetLimit cudaDeviceSetSharedMemConfig cudaDeviceSynchronize cudaGetDevice cudaGetDeviceCount cudaGetDeviceProperties cudaSetDevice cudaSetDeviceFlags cudaSetValidDevices + syn keyword fortranIntrinsicCUDA cudaThreadExit cudaThreadSynchronize cudaGetLastError cudaGetErrorString cudaPeekAtLastError cudaStreamCreate cudaStreamDestroy cudaStreamQuery cudaStreamSynchronize cudaStreamWaitEvent cudaEventCreate cudaEventCreateWithFlags cudaEventDestroy cudaEventElapsedTime cudaEventQuery cudaEventRecord cudaEventSynchronize + syn keyword fortranIntrinsicCUDA cudaFuncGetAttributes cudaFuncSetCacheConfig cudaFuncSetSharedMemConfig cudaSetDoubleForDevice cudaSetDoubleForHost cudaFree cudaFreeArray cudaFreeHost cudaGetSymbolAddress cudaGetSymbolSize + syn keyword fortranIntrinsicCUDA cudaHostAlloc cudaHostGetDevicePointer cudaHostGetFlags cudaHostRegister cudaHostUnregister cudaMalloc cudaMallocArray cudaMallocHost cudaMallocPitch cudaMalloc3D cudaMalloc3DArray + syn keyword fortranIntrinsicCUDA cudaMemcpy cudaMemcpyArraytoArray cudaMemcpyAsync cudaMemcpyFromArray cudaMemcpyFromSymbol cudaMemcpyFromSymbolAsync cudaMemcpyPeer cudaMemcpyPeerAsync cudaMemcpyToArray cudaMemcpyToSymbol cudaMemcpyToSymbolAsync cudaMemcpy2D cudaMemcpy2DArrayToArray cudaMemcpy2DAsync cudaMemcpy2DFromArray cudaMemcpy2DToArray cudaMemcpy3D cudaMemcpy3DAsync + syn keyword fortranIntrinsicCUDA cudaMemGetInfo cudaMemset cudaMemset2D cudaMemset3D cudaDeviceCanAccessPeer cudaDeviceDisablePeerAccess cudaDeviceEnablePeerAccess cudaPointerGetAttributes cudaDriverGetVersion cudaRuntimeGetVersion +endif + +syn region none matchgroup=fortranType start="<<<" end=">>>" contains=ALLBUT,none + +syn cluster fortranCommentGroup contains=fortranTodo + +if (b:fortran_fixed_source == 1) + if !exists("fortran_have_tabs") + if exists("fortran_extended_line_length") + " Vendor extensions allow lines with a text width of 132 + syn match fortranSerialNumber excludenl "^.\{133,}$"lc=132 + else + " Standard requires fixed format to have a text width of 72, + " but all current compilers use 80 instead + syn match fortranSerialNumber excludenl "^.\{81,}$"lc=80 + endif + "Flag left margin errors + syn match fortranLabelError "^.\{-,4}[^0-9 ]" contains=fortranTab + syn match fortranLabelError "^.\{4}\d\S" + endif + syn match fortranComment excludenl "^[!c*].*$" contains=@fortranCommentGroup,@spell + syn match fortranLeftMargin transparent "^ \{5}" + syn match fortranContinueMark display "^.\{5}\S"lc=5 +else + syn match fortranContinueMark display "&" +endif + +syn match fortranComment excludenl "!.*$" contains=@fortranCommentGroup,@spell +syn match fortranOpenMP excludenl "^\s*\zs!\$\%(OMP\)\?&\?\s.*$" +syn match fortranEndStatement display ";" + +"cpp is often used with Fortran +syn match cPreProc "^\s*#\s*\%(define\|ifdef\)\>.*" +syn match cPreProc "^\s*#\s*\%(elif\|if\)\>.*" +syn match cPreProc "^\s*#\s*\%(ifndef\|undef\)\>.*" +syn match cPreCondit "^\s*#\s*\%(else\|endif\)\>.*" +syn region cIncluded contained start=+"[^("]+ skip=+\\\\\|\\"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber +syn match cIncluded contained "<[^>]*>" +syn match cInclude "^\s*#\s*include\>\s*["<]" contains=cIncluded + +"Synchronising limits assume that comment and continuation lines are not mixed +if exists("fortran_fold") + syn sync fromstart +elseif (b:fortran_fixed_source == 0) + syn sync linecont "&" minlines=30 +else + syn sync minlines=30 +endif + +if exists("fortran_fold") + + if has("folding") + setlocal foldmethod=syntax + endif + if (b:fortran_fixed_source == 1) + syn region fortranProgram transparent fold keepend start="^\s*program\s\+\z(\a\w*\)" skip="^\%([!c*]\|\s*#\).*$" excludenl end="\\)\?\|$\)" contains=ALLBUT,fortranModule + syn region fortranModule transparent fold keepend start="^\s*submodule\s\+(\a\w*\s*\%(:\a\w*\s*\)*)\s*\z\(\a\w*\)" skip="^\%([!c*]\|\s*#\).*$" excludenl end="\\)\?\|$\)" contains=ALLBUT,fortranProgram,fortranModule + syn region fortranModule transparent fold keepend start="^\s*module\s\+\%(procedure\)\@9!\z(\a\w*\)" skip="^\%([!c*]\|\s*#\).*$" excludenl end="\\)\?\|$\)" contains=ALLBUT,fortranProgram + syn region fortranFunction transparent fold keepend extend start="\ +" Last Change: 15 May 2006 + +" This file replaces the FoxPro for DOS v2.x syntax file +" maintained by Powing Tse +" +" Change Log: added support for FoxPro Codebook highlighting +" corrected highlighting of comments that do NOT start in col 1 +" corrected highlighting of comments at end of line (&&) +" +" +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" FoxPro Codebook Naming Conventions +syn match foxproCBConst "\<[c][A-Z][A-Za-z0-9_]*\>" +syn match foxproCBVar "\<[lgrt][acndlmf][A-Z][A-Za-z0-9_]*\>" +syn match foxproCBField "\<[a-z0-9]*\.[A-Za-z0-9_]*\>" +" PROPER CodeBook field names start with the data type and do NOT have _ +syn match foxproCBField "\<[A-Za-z0-9]*\.[acndlm][A-Z][A-Za-z0-9]*\>" +syn match foxproCBWin "\" +" CodeBook 2.0 defined objects as follows +" This uses the hotkey from the screen builder as the second character +syn match foxproCBObject "\<[lgr][bfthnkoli][A-Z][A-Za-z0-9_]*\>" +" A later version added the following conventions for objects +syn match foxproCBObject "\" +syn match foxproCBObject "\" +syn match foxproCBObject "\" +syn match foxproCBObject "\" +syn match foxproCBObject "\" +syn match foxproCBObject "\" +syn match foxproCBObject "\" +syn match foxproCBObject "\" +syn match foxproCBObject "\" +syn match foxproCBObject "\" + +syntax case ignore + +" Highlight special characters +syn match foxproSpecial "^\s*!" +syn match foxproSpecial "&" +syn match foxproSpecial ";\s*$" +syn match foxproSpecial "^\s*=" +syn match foxproSpecial "^\s*\\" +syn match foxproSpecial "^\s*\\\\" +syn match foxproSpecial "^\s*?" +syn match foxproSpecial "^\s*??" +syn match foxproSpecial "^\s*???" +syn match foxproSpecial "\\." + +" @ Statements +syn match foxproAtSymbol contained "^\s*@" +syn match foxproAtCmd contained "\\|\\|\\|\\|\\|\\|\\|\\|\\|\" +syn match foxproAtStart transparent "^\s*@.*" contains=ALL + +" preprocessor directives +syn match foxproPreProc "^\s*#\s*\(\\|\\|\\|\\)" +syn match foxproPreProc "^\s*#\s*\(\\|\\)" +syn match foxproPreProc "^\s*#\s*\" + +" Functions +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 +syn match foxproFunc "\\s*("me=e-1 + +" Commands +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\<=\>" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\/n" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\" +syn match foxproCmd "^\s*\\s*\" + +" Enclosed Block +syn match foxproEnBlk "^\s*\\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\" +syn match foxproEnBlk "^\s*\" + +" System Variables +syn keyword foxproSysVar _alignment _assist _beautify _box _calcmem _calcvalue +syn keyword foxproSysVar _cliptext _curobj _dblclick _diarydate _dos _foxdoc +syn keyword foxproSysVar _foxgraph _gengraph _genmenu _genpd _genscrn _genxtab +syn keyword foxproSysVar _indent _lmargin _mac _mline _padvance _pageno _pbpage +syn keyword foxproSysVar _pcolno _pcopies _pdriver _pdsetup _pecode _peject _pepage +syn keyword foxproSysVar _plength _plineno _ploffset _ppitch _pquality _pretext +syn keyword foxproSysVar _pscode _pspacing _pwait _rmargin _shell _spellchk +syn keyword foxproSysVar _startup _tabs _tally _text _throttle _transport _unix +syn keyword foxproSysVar _windows _wrap + +" Strings +syn region foxproString start=+"+ end=+"+ oneline +syn region foxproString start=+'+ end=+'+ oneline +syn region foxproString start=+\[+ end=+\]+ oneline + +" Constants +syn match foxproConst "\.t\." +syn match foxproConst "\.f\." + +"integer number, or floating point number without a dot and with "f". +syn match foxproNumber "\<[0-9]\+\>" +"floating point number, with dot, optional exponent +syn match foxproFloat "\<[0-9]\+\.[0-9]*\(e[-+]\=[0-9]\+\)\=\>" +"floating point number, starting with a dot, optional exponent +syn match foxproFloat "\.[0-9]\+\(e[-+]\=[0-9]\+\)\=\>" +"floating point number, without dot, with exponent +syn match foxproFloat "\<[0-9]\+e[-+]\=[0-9]\+\>" + +syn match foxproComment "^\s*\*.*" +syn match foxproComment "&&.*" + +"catch errors caused by wrong parenthesis +syn region foxproParen transparent start='(' end=')' contains=ALLBUT,foxproParenErr +syn match foxproParenErr ")" + +syn sync minlines=1 maxlines=3 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link foxproSpecial Special +hi def link foxproAtSymbol Special +hi def link foxproAtCmd Statement +hi def link foxproPreProc PreProc +hi def link foxproFunc Identifier +hi def link foxproCmd Statement +hi def link foxproEnBlk Type +hi def link foxproSysVar String +hi def link foxproString String +hi def link foxproConst Constant +hi def link foxproNumber Number +hi def link foxproFloat Float +hi def link foxproComment Comment +hi def link foxproParenErr Error +hi def link foxproCBConst PreProc +hi def link foxproCBField Special +hi def link foxproCBVar Identifier +hi def link foxproCBWin Special +hi def link foxproCBObject Identifier + + +let b:current_syntax = "foxpro" diff --git a/.config/vim/syntax/fpcmake.vim b/.config/vim/syntax/fpcmake.vim new file mode 100644 index 0000000..bbc6f1d --- /dev/null +++ b/.config/vim/syntax/fpcmake.vim @@ -0,0 +1,58 @@ +" Vim syntax file +" Language: Free Pascal Makefile Definition Files +" Maintainer: Doug Kearns +" Last Change: 2021 Apr 23 + +if exists("b:current_syntax") + finish +endif + +runtime! syntax/make.vim + +" NOTE: using start-of-line anchored syn-match groups is simpler than other +" alternatives when interacting with the sourced make.vim syntax groups + +" Sections +syn region fpcmakeSection matchgroup=fpcmakeSectionDelimiter start="^\s*\[" end="]" contains=fpcmakeSectionName + +syn keyword fpcmakeSectionName contained clean compiler default dist install +syn keyword fpcmakeSectionName contained lib package prerules require rules +syn keyword fpcmakeSectionName contained shared target + +" [clean] +syn match fpcmakeRule "^\s*\(units\|files\)\>" +" [compiler] +syn match fpcmakeRule "^\s*\(options\|version\|unitdir\|librarydir\|objectdir\)\>" +syn match fpcmakeRule "^\s*\(targetdir\|sourcedir\|unittargetdir\|includedir\)\>" +" [default] +syn match fpcmakeRule "^\s*\(cpu\|dir\|fpcdir\|rule\|target\)\>" +" [dist] +syn match fpcmakeRule "^\s*\(destdir\|zipname\|ziptarget\)\>" +" [install] +syn match fpcmakeRule "^\s*\(basedir\|datadir\|fpcpackage\|files\|prefix\)\>" +syn match fpcmakeRule "^\s*\(units\)\>" +" [package] +syn match fpcmakeRule "^\s*\(name\|version\|main\)\>" +" [requires] +syn match fpcmakeRule "^\s*\(fpcmake\|packages\|libc\|nortl\|unitdir\)\>" +syn match fpcmakeRule "^\s*\(packagedir\|tools\)\>" +" [shared] +syn match fpcmakeRule "^\s*\(build\|libname\|libversion\|libunits\)\>" +" [target] +syn match fpcmakeRule "^\s*\(dirs\|exampledirs\|examples\|loaders\|programs\)\>" +syn match fpcmakeRule "^\s*\(rsts\|units\)\>" + +" Comments +syn keyword fpcmakeTodo TODO FIXME XXX contained +syn match fpcmakeComment "#.*" contains=fpcmakeTodo,@Spell + +" Default highlighting +hi def link fpcmakeSectionDelimiter Delimiter +hi def link fpcmakeSectionName Type +hi def link fpcmakeComment Comment +hi def link fpcmakeTodo Todo +hi def link fpcmakeRule Identifier + +let b:current_syntax = "fpcmake" + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/.config/vim/syntax/framescript.vim b/.config/vim/syntax/framescript.vim new file mode 100644 index 0000000..8b16d04 --- /dev/null +++ b/.config/vim/syntax/framescript.vim @@ -0,0 +1,491 @@ +" Vim syntax file +" Language: FrameScript v4.0 +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2007-02-22 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn match framescriptOperator + \ '[+*/%=-]\|[><]=\=\|#[&|]' + +syn keyword framescriptTodo + \ contained + \ TODO FIXME XXX NOTE + +syn cluster framescriptCommentGroup + \ contains= + \ framescriptTodo, + \ @Spell + +syn match framescriptComment + \ display + \ contains=@framescriptCommentGroup + \ '//.*$' + +syn region framescriptComment + \ contains=@framescriptCommentGroup + \ matchgroup=framescriptCommentStart + \ start='/\*' + \ end='\*/' + +syn case ignore + +syn match framescriptInclude + \ display + \ contains=framescriptIncluded + \ "^\s*<#Include\>\s*'" + +syn region framescriptIncluded + \ contained + \ display + \ start=+'+ + \ skip=+\\\\\|\\'+ + \ end=+'+ + +syn match framescriptNumbers + \ display + \ transparent + \ contains= + \ framescriptInteger, + \ framescriptReal, + \ framescriptMetric, + \ framescriptCharacter + \ '\<\d\|\.\d' + +syn keyword framescriptBoolean + \ True False + +syn match framescriptInteger + \ contained + \ display + \ '\d\+\>' + +syn match framescriptInteger + \ contained + \ display + \ '\x\+H\>' + +syn match framescriptInteger + \ contained + \ display + \ '[01]\+B\>' + +syn match framescriptReal + \ contained + \ display + \ '\d\+\.\d*\|\.\d\+\>' + +syn match framescriptMetric + \ contained + \ display + \ '\%(\d\+\%(\.\d*\)\=\|\.\d\+\)\%(pts\|in\|"\|cm\|mm\|pica\)\>' + +syn match framescriptCharacter + \ contained + \ display + \ '\d\+S\>' + +syn region framescriptString + \ contains=framescriptStringSpecialChar,@Spell + \ start=+'+ + \ skip=+\\\\\|\\'+ + \ end=+'+ + +syn match framescriptStringSpecialChar + \ contained + \ display + \ "\\[\\']" + +syn keyword framescriptConstant + \ BackSlash + \ CharCR + \ CharLF + \ CharTAB + \ ClientDir + \ ClientName + \ FslVersionMajor + \ FslVersionMinor + \ InstallName + \ InstalledScriptList + \ MainScript + \ NULL + \ ObjEndOffset + \ ProductRevision + \ Quote + \ ThisScript + +syn keyword framescriptOperator + \ not + \ and + \ or + +syn keyword framescriptSessionVariables + \ ErrorCode + \ ErrorMsg + \ DeclareVarMode + \ PlatformEncodingMode + +syn keyword framescriptStructure + \ Event + \ EndEvent + +syn keyword framescriptStatement + \ Sub + \ EndSub + \ Run + \ Function + \ EndFunction + \ Set + \ Add + \ Apply + \ CallClient + \ Close + \ Copy + \ Cut + \ DialogBox + \ Delete + \ Demote + \ Display + \ DocCompare + \ Export + \ Find + \ LeaveLoop + \ LeaveScript + \ LeaveSub + \ LoopNext + \ Merge + \ MsgBox + \ Paste + \ PopClipboard + \ PushClipboard + \ Read + \ Replace + \ Return + \ Sort + \ Split + +syn keyword framescriptStatement + \ nextgroup=framescriptApplySubStatement skipwhite skipempty + \ Apply + +syn keyword framescriptApplySubStatement + \ contained + \ Pagelayout + \ TextProperties + +syn keyword framescriptStatement + \ nextgroup=framescriptClearSubStatement skipwhite skipempty + \ Clear + +syn keyword framescriptClearSubStatement + \ contained + \ ChangeBars + \ Text + +syn keyword framescriptStatement + \ nextgroup=framescriptCloseSubStatement skipwhite skipempty + \ Close + +syn keyword framescriptCloseSubStatement + \ contained + \ Book + \ Document + \ TextFile + +syn keyword framescriptStatement + \ nextgroup=framescriptExecSubStatement skipwhite skipempty + \ Exec + +syn keyword framescriptExecSubStatement + \ contained + \ Compile + \ Script + \ Wait + +syn keyword framescriptStatement + \ nextgroup=framescriptExecuteSubStatement skipwhite skipempty + \ Execute + +syn keyword framescriptExecuteSubStatement + \ contained + \ FrameCommand + \ Hypertext + \ StartUndoCheckPoint + \ EndUndoCheckPoint + \ ClearUndoHistory + +syn keyword framescriptStatement + \ nextgroup=framescriptGenerateSubStatement skipwhite skipempty + \ Generate + +syn keyword framescriptGenerateSubStatement + \ contained + \ Bookfile + +syn keyword framescriptStatement + \ nextgroup=framescriptGetSubStatement skipwhite skipempty + \ Get + +syn keyword framescriptGetSubStatement + \ contained + \ Member + \ Object + \ String + \ TextList + \ TextProperties + +syn keyword framescriptStatement + \ nextgroup=framescriptImportSubStatement skipwhite skipempty + \ Import + +syn keyword framescriptImportSubStatement + \ contained + \ File + \ Formats + \ ElementDefs + +syn keyword framescriptStatement + \ nextgroup=framescriptInstallSubStatement skipwhite skipempty + \ Install + \ Uninstall + +syn keyword framescriptInstallSubStatement + \ contained + \ ChangeBars + \ Text + +syn keyword framescriptStatement + \ nextgroup=framescriptNewSubStatement skipwhite skipempty + \ New + +syn keyword framescriptNewSubStatement + \ contained + \ AFrame + \ Footnote + \ Marker + \ TiApiClient + \ Variable + \ XRef + \ FormatChangeList + \ FormatRule + \ FmtRuleClause + \ Arc + \ Ellipse + \ Flow + \ Group + \ Inset + \ Line + \ Math + \ Polygon + \ Polyline + \ Rectangle + \ RoundRect + \ TextFrame + \ Textline + \ UnanchoredFrame + \ Command + \ Menu + \ MenuItemSeparator + \ Book + \ CharacterFormat + \ Color + \ ConditionFormat + \ ElementDef + \ FormatChangeList + \ MarkerType + \ MasterPage + \ ParagraphFormat + \ PgfFmt + \ ReferencePAge + \ RulingFormat + \ TableFormat + \ VariableFormat + \ XRefFormat + \ BodyPage + \ BookComponent + \ Paragraph + \ Element + \ Attribute + \ AttributeDef + \ AttributeList + \ AttributeDefList + \ ElementLoc + \ ElementRange + \ Table + \ TableRows + \ TableCols + \ Text + \ Integer + \ Real + \ Metric + \ String + \ Object + \ TextLoc + \ TextRange + \ IntList + \ UIntList + \ MetricList + \ StringList + \ PointList + \ TabList + \ PropertyList + \ LibVar + \ ScriptVar + \ SubVar + \ TextFile + +syn keyword framescriptStatement + \ nextgroup=framescriptOpenSubStatement skipwhite skipempty + \ Open + +syn keyword framescriptOpenSubStatement + \ contained + \ Document + \ Book + \ TextFile + +syn keyword framescriptStatement + \ nextgroup=framescriptPrintSubStatement skipwhite skipempty + \ Print + +syn keyword framescriptPrintSubStatement + \ contained + \ Document + \ Book + +syn keyword framescriptStatement + \ nextgroup=framescriptQuitSubStatement skipwhite skipempty + \ Quit + +syn keyword framescriptQuitSubStatement + \ contained + \ Session + +syn keyword framescriptStatement + \ nextgroup=framescriptRemoveSubStatement skipwhite skipempty + \ Remove + +syn keyword framescriptRemoveSubStatement + \ contained + \ Attribute + \ CommandObject + +syn keyword framescriptStatement + \ nextgroup=framescriptSaveSubStatement skipwhite skipempty + \ Save + +syn keyword framescriptSaveSubStatement + \ contained + \ Document + \ Book + +syn keyword framescriptStatement + \ nextgroup=framescriptSelectSubStatement skipwhite skipempty + \ Select + +syn keyword framescriptSelectSubStatement + \ contained + \ TableCells + +syn keyword framescriptStatement + \ nextgroup=framescriptStraddleSubStatement skipwhite skipempty + \ Straddle + +syn keyword framescriptStraddleSubStatement + \ contained + \ TableCells + +syn keyword framescriptStatement + \ nextgroup=framescriptUpdateSubStatement skipwhite skipempty + \ Update + +syn keyword framescriptUpdateSubStatement + \ contained + \ ReDisplay + \ Formatting + \ Hyphenating + \ ResetEquationsSettings + \ ResetRefFrames + \ RestartPgfNums + \ TextInset + \ Variables + \ XRefs + \ Book + +syn keyword framescriptStatement + \ nextgroup=framescriptWriteSubStatement skipwhite skipempty + \ Write + +syn keyword framescriptUpdateSubStatement + \ contained + \ Console + \ Display + +syn keyword framescriptRepeat + \ Loop + \ EndLoop + +syn keyword framescriptConditional + \ If + \ ElseIf + \ Else + \ EndIf + +syn keyword framescriptType + \ Local + \ GlobalVar + +let b:framescript_minlines = exists("framescript_minlines") + \ ? framescript_minlines : 15 +exec "syn sync ccomment framescriptComment minlines=" . b:framescript_minlines + +hi def link framescriptTodo Todo +hi def link framescriptComment Comment +hi def link framescriptCommentStart framescriptComment +hi def link framescriptInclude Include +hi def link framescriptIncluded String +hi def link framescriptBoolean Boolean +hi def link framescriptNumber Number +hi def link framescriptInteger framescriptNumber +hi def link framescriptReal framescriptNumber +hi def link framescriptMetric framescriptNumber +hi def link framescriptCharacter framescriptNumber +hi def link framescriptString String +hi def link framescriptStringSpecialChar SpecialChar +hi def link framescriptConstant Constant +hi def link framescriptOperator None +hi def link framescriptSessionVariables PreProc +hi def link framescriptStructure Structure +hi def link framescriptStatement Statement +hi def link framescriptSubStatement Type +hi def link framescriptApplySubStatement framescriptSubStatement +hi def link framescriptClearSubStatement framescriptSubStatement +hi def link framescriptCloseSubStatement framescriptSubStatement +hi def link framescriptExecSubStatement framescriptSubStatement +hi def link framescriptExecuteSubStatement framescriptSubStatement +hi def link framescriptGenerateSubStatement framescriptSubStatement +hi def link framescriptGetSubStatement framescriptSubStatement +hi def link framescriptImportSubStatement framescriptSubStatement +hi def link framescriptInstallSubStatement framescriptSubStatement +hi def link framescriptNewSubStatement framescriptSubStatement +hi def link framescriptOpenSubStatement framescriptSubStatement +hi def link framescriptPrintSubStatement framescriptSubStatement +hi def link framescriptQuitSubStatement framescriptSubStatement +hi def link framescriptRemoveSubStatement framescriptSubStatement +hi def link framescriptSaveSubStatement framescriptSubStatement +hi def link framescriptSelectSubStatement framescriptSubStatement +hi def link framescriptStraddleSubStatement framescriptSubStatement +hi def link framescriptUpdateSubStatement framescriptSubStatement +hi def link framescriptRepeat Repeat +hi def link framescriptConditional Conditional +hi def link framescriptType Type + +let b:current_syntax = "framescript" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/freebasic.vim b/.config/vim/syntax/freebasic.vim new file mode 100644 index 0000000..5c43289 --- /dev/null +++ b/.config/vim/syntax/freebasic.vim @@ -0,0 +1,674 @@ +" Vim syntax file +" Language: FreeBASIC +" Maintainer: Doug Kearns +" Previous Maintainer: Mark Manning +" Last Change: 2023 Aug 14 +" +" Description: +" +" Based originally on the work done by Allan Kelly +" Updated by Mark Manning +" Applied FreeBASIC support to the already excellent support +" for standard basic syntax (like QB). +" +" First version based on Micro$soft QBASIC circa +" 1989, as documented in 'Learn BASIC Now' by +" Halvorson&Rygmyr. Microsoft Press 1989. This syntax file +" not a complete implementation yet. Send suggestions to +" the maintainer. +" +" TODO: split this into separate dialect-based files, possibly with a common base +" +" Quit when a (custom) syntax file was already loaded (Taken from c.vim) +" +if exists("b:current_syntax") + finish +endif +" +" Dialect detection +" +let s:lang = freebasic#GetDialect() +" +" Whitespace Errors +" +if exists("freebasic_space_errors") + if !exists("freebasic_no_trail_space_error") + syn match freebasicSpaceError display excludenl "\s\+$" + endif + if !exists("freebasic_no_tab_space_error") + syn match freebasicSpaceError display " \+\t"me=e-1 + endif +endif +" +" Be sure to turn on the "case ignore" since current versions +" of freebasic support both upper as well as lowercase +" letters. - MEM 10/1/2006 +" +syn case ignore +" +" Do the Basic variables names first. This is because it +" is the most inclusive of the tests. Later on we change +" this so the identifiers are split up into the various +" types of identifiers like functions, basic commands and +" such. MEM 9/9/2006 +" +if s:lang =~# '\<\%(qb\|fblite\)\>' + syn iskeyword @,48-57,_,192-255,. + syn match freebasicIdentifier "\<\h\%(\w\|\.\)*\>" + syn match freebasicGenericFunction "\<\h\%(\w\|\.\)*\>\ze\s*(" +else + syn iskeyword @,48-57,_,192-255 + syn match freebasicIdentifier "\<\h\w*\>" + syn match freebasicGenericFunction "\<\h\w*\>\ze\s*(" +endif +" +" This list of keywords is taken directly from the FreeBASIC +" user's guide as presented by the FreeBASIC online site. +" +syn keyword freebasicArrays ERASE LBOUND PRESERVE REDIM UBOUND + +" array.bi +syn keyword freebasicArrays ARRAYLEN ARRAYSIZE +if s:lang == "fb" + syn keyword freebasicArrays ArrayConstDescriptorPtr ArrayDescriptorPtr FBARRAY +endif + +if s:lang == "qb" + syn keyword freebasicAsm __ASM + syn match freebasicAsm "\" +else + syn keyword freebasicAsm ASM + syn match freebasicAsm "\" +endif + +if s:lang == "qb" + syn keyword freebasicBitManipulation __BIT __BITRESET __BITSET __HIBYTE __HIWORD __LOBYTE __LOWORD +else + syn keyword freebasicBitManipulation BIT BITRESET BITSET HIBYTE HIWORD LOBYTE LOWORD +endif + +if s:lang != "fb" + syn keyword freebasicCompilerSwitches DEFDBL DEFINT DEFLNG DEFSNG DEFSTR +endif +if s:lang == "qb" + syn keyword freebasicCompilerSwitches __DEFBYTE __DEFLONGINT __DEFSHORT __DEFUBYTE __DEFUINT __DEFULONGINT __DEFUSHORT +elseif s:lang == "fblite" || s:lang == "deprecated" + syn keyword freebasicCompilerSwitches DEFBYTE DEFLONGINT DEFSHORT DEFUBYTE DEFUINT DEFUILONGINT DEFUSHORT +endif + +syn match freebasicCompilerSwitches "\" +syn match freebasicCompilerSwitches "\" + +syn keyword freebasicData DATA READ RESTORE + +syn keyword freebasicProgramFlow EXIT GOTO RETURN SLEEP +syn match freebasicProgramFlow "\" +if s:lang == "qb" + syn keyword freebasicProgramFlow __SLEEP +endif +if s:lang == "fblite" || s:lang == "qb" + syn keyword freebasicProgramFlow GOSUB +endif +if s:lang == "fb" || s:lang == "deprecated" + syn keyword freebasicProgramFlow SCOPE + syn match freebasicProgramFlow "\" +endif + +if s:lang == "fblite" || s:lang == "qb" + syn region freebasicConditional matchgroup=freebasicConditional start="\" end="\" transparent + syn region freebasicConditional matchgroup=freebasicConditional start="\" end="\" transparent +endif +syn keyword freebasicConditional IF THEN ELSE ELSEIF +if s:lang == "qb" + syn keyword freebasicConditional __IIF __WITH + syn match freebasicConditional "\" +else + syn keyword freebasicConditional IIF WITH + syn match freebasicConditional "\" +endif +syn match freebasicConditional "\" +syn match freebasicConditional "\" +syn match freebasicConditional "\" +syn match freebasicConditional "\" +syn match freebasicConditional "\" + +syn keyword freebasicConsole BEEP CLS CSRLIN LOCATE PRINT POS SPC TAB USING VIEW WIDTH +syn match freebasicConsole "?" + +syn keyword freebasicDataTypes SINGLE DOUBLE INTEGER LONG +syn match freebasicDataTypes "\" +syn keyword freebasicDataTypes AS DIM CONST ENUM SHARED TYPE +syn match freebasicDataTypes "\" +syn match freebasicDataTypes "\" +if s:lang == "qb" + syn keyword freebasicDataTypes __BOOLEAN __BYTE __LONGINT __SHORT __UBYTE __UINTEGER __ULONG __ULONGINT __UNSIGNED __USHORT __ZSTRING + syn match freebasicDataTypes "\<__WSTRING\>" + syn keyword freebasicDataTypes __EXPLICIT __EXTENDS __IMPLEMENTS __OBJECT __POINTER __PTR __SIZEOF __TYPEOF + syn keyword freebasicDataTypes __UNION + syn match freebasicDataTypes "\" +else + syn keyword freebasicDataTypes BOOLEAN BYTE LONGINT SHORT UBYTE UINTEGER ULONG ULONGINT UNSIGNED USHORT ZSTRING + syn match freebasicDataTypes "\" + syn keyword freebasicDataTypes EXPLICIT EXTENDS IMPLEMENTS OBJECT POINTER PTR SIZEOF TYPEOF + syn keyword freebasicDataTypes UNION + syn match freebasicDataTypes "\" +endif +if s:lang == "fb" + syn keyword freebasicDataTypes BASE CLASS THIS VAR +endif + +if s:lang == "qb" + syn match freebasicDateTime "\<\%(date\|time\)\$" +elseif s:lang == "fblite" || s:lang == "deprecated" + syn match freebasicDateTime "\<\%(date\|time\)\>\$\=" +else " fb + syn keyword freebasicDateTime DATE TIME +endif +syn keyword freebasicDateTime SETDATE SETTIME + +" datetime.bi +syn keyword freebasicDateTime DATEADD DATEDIFF DATEPART DATESERIAL DATEVALUE DAY HOUR ISDATE MINUTE +syn keyword freebasicDateTime MONTH MONTHNAME NOW SECOND TIMESERIAL TIMEVALUE +syn keyword freebasicDateTime TIMER YEAR WEEKDAY WEEKDAYNAME + +syn keyword freebasicDebug STOP +if s:lang == "qb" + syn keyword freebasicDebug __ASSERT __ASSERTWARN +else + syn keyword freebasicDebug ASSERT ASSERTWARN +endif + +syn keyword freebasicErrorHandling ERR ERL ERROR +if s:lang == "qb" + syn keyword freebasicErrorHandling __ERFN __ERMN + syn match freebasicErrorHandling "\" +else + syn keyword freebasicErrorHandling ERFN ERMN + syn match freebasicErrorHandling "\" +endif +if s:lang != "fb" + syn match freebasicErrorHandling "\" +endif + +syn match freebasicFiles "\" +syn match freebasicFiles "\" +syn match freebasicFiles "\" +syn match freebasicFiles "\" +syn keyword freebasicFiles ACCESS APPEND BINARY CLOSE EOF FREEFILE INPUT LOC +syn keyword freebasicFiles LOCK LOF OUTPUT RANDOM RESET SEEK UNLOCK WRITE +syn match freebasicFiles "\" +if s:lang == "qb" + syn keyword freebasicFiles __ENCODING +else + syn keyword freebasicFiles ENCODING WINPUT + syn match freebasicFiles "\" +endif + +" file.bi +syn keyword freebasicFiles FILEATTR FILECOPY FILEDATETIME FILEEXISTS FILEFLUSH FILELEN FILESETEOF + +syn keyword freebasicFunctions ALIAS BYREF BYVAL CDECL DECLARE LIB NAKED PASCAL STATIC STDCALL +syn match freebasicFunctions "\" +syn match freebasicFunctions "\" + +if s:lang == "fb" + syn keyword freebasicFunctions ABSTRACT OVERRIDE VIRTUAL __THISCALL + syn keyword freebasicFunctions CONSTRUCTOR DESTRUCTOR OPERATOR PROPERTY + syn match freebasicFunctions "\" + syn match freebasicFunctions "\" + syn match freebasicFunctions "\" + syn match freebasicFunctions "\" +else + syn keyword freebasicFunctions CALL +endif + +syn match freebasicGraphics "\" +syn keyword freebasicGraphics ADD ALPHA BLOAD BSAVE CIRCLE CLS COLOR DRAW GET +syn keyword freebasicGraphics LINE PAINT PALETTE PCOPY PMAP POINT +syn keyword freebasicGraphics PRESET PSET PUT SCREEN +syn keyword freebasicGraphics TRANS WINDOW +if s:lang == "qb" + syn keyword freebasicGraphics __FLIP __IMAGECONVERTROW __IMAGECREATE __IMAGEDESTROY __IMAGEINFO __POINTCOORD + syn keyword freebasicGraphics __RGB __RGBA __SCREENCOPY __SCREENCONTROL __SCREENEVENT __SCREENGLPROC __SCREENINFO + syn keyword freebasicGraphics __SCREENLIST __SCREENLOCK __SCREENPTR __SCREENRES __SCREENSET __SCREENSYNC + syn keyword freebasicGraphics __SCREENUNLOCK __WINDOWTITLE +else + syn keyword freebasicGraphics CUSTOM + syn keyword freebasicGraphics FLIP IMAGECONVERTROW IMAGECREATE IMAGEDESTROY IMAGEINFO POINTCOORD + syn keyword freebasicGraphics RGB RGBA SCREENCOPY SCREENCONTROL SCREENEVENT SCREENGLPROC SCREENINFO + syn keyword freebasicGraphics SCREENLIST SCREENLOCK SCREENPTR SCREENRES SCREENSET SCREENSYNC + syn keyword freebasicGraphics SCREENUNLOCK WINDOWTITLE +endif + +if s:lang != "qb" + syn match freebasicHardware "\" +endif +syn keyword freebasicHardware INP OUT WAIT LPOS LPRINT + +syn keyword freebasicMath ABS ATN COS EXP FIX FRAC INT LOG MOD RANDOMIZE RND SGN SIN SQR TAN + +if s:lang == "qb" + syn keyword freebasicMath __ACOS __ASIN __ATAN2 +else + syn keyword freebasicMath ACOS ASIN ATAN2 +endif + +if s:lang == "qb" + syn keyword freebasicMemory __ALLOCATE __CALLOCATE __DEALLOCATE __REALLOCATE +else + syn keyword freebasicMemory ALLOCATE CALLOCATE DEALLOCATE REALLOCATE + syn keyword freebasicMemory PEEK POKE CLEAR FB_MEMCOPY FB_MEMCOPYCLEAR FB_MEMMOVE SWAP SADD + syn keyword freebasicMemory FIELD FRE +endif + +syn keyword freebasicMisc LET TO +if s:lang == "qb" + syn keyword freebasicMisc __OFFSETOF +else + syn keyword freebasicMisc OFFSETOF +endif + +syn keyword freebasicModularizing CHAIN COMMON +if s:lang == "fb" + syn keyword freebasicModularizing EXTERN + syn match freebasicModularizing "\" + syn keyword freebasicModularizing PROTECTED +endif +if s:lang == "qb" + syn keyword freebasicModularizing __EXPORT __IMPORT __DYLIBFREE __DYLIBLOAD __DYLIBSYMBOL +else + syn keyword freebasicModularizing EXPORT IMPORT DYLIBFREE DYLIBLOAD DYLIBSYMBOL + syn keyword freebasicModularizing PRIVATE PUBLIC + syn keyword freebasicModularizing NAMESPACE + syn match freebasicModularizing "\" +endif + +if s:lang != "qb" + syn keyword freebasicMultithreading MUTEXCREATE MUTEXDESTROY MUTEXLOCK MUTEXUNLOCK THREADCREATE THREADWAIT + syn keyword freebasicMultithreading CONDBROADCAST CONDCREATE CONDDESTROY CONDSIGNAL CONDWAIT + syn keyword freebasicMultithreading THREADCALL THREADDETACH THREADSELF +endif + +syn keyword freebasicShell CHDIR KILL NAME MKDIR RMDIR RUN SETENVIRON +if s:lang == "qb" + syn keyword freebasicShell __CURDIR __DIR __EXEC __EXEPATH + syn match freebasicString "\<\%(command\|environ\)\$" +else + " fbio.bi + syn keyword freebasicShell ISREDIRECTED + syn keyword freebasicShell CURDIR DIR EXEC EXEPATH + syn match freebasicString "\<\%(command\|environ\)\>\$\=" +endif + +syn keyword freebasicEnviron SHELL SYSTEM + +syn keyword freebasicLoops FOR LOOP WHILE WEND DO STEP UNTIL NEXT +if s:lang == "qb" + syn keyword freebasicLoops __CONTINUE +else + syn keyword freebasicLoops CONTINUE +endif +" +" File numbers +" +syn match freebasicFilenumber "#\d\+" +syn match freebasicFilenumber "#\a[[:alpha:].]*[%&!#]\=" + +syn match freebasicMetacommand "$\s*\%(dynamic\|static\)" +syn match freebasicMetacommand "$\s*include\s*\%(once\)\=\s*:\s*'[^']\+'" +syn match freebasicMetacommand '$\s*include\s*\%(once\)\=\s*:\s*"[^"]\+"' +syn match freebasicMetacommand '$\s*lang\s*:\s*"[^"]\+"' +" +" Intrinsic defines +" +syn keyword freebasicPredefined __DATE__ __DATE_ISO__ +syn keyword freebasicPredefined __FB_64BIT__ __FB_ARGC__ __FB_ARG_COUNT__ __FB_ARG_EXTRACT__ __FB_ARG_LEFTOF__ +syn keyword freebasicPredefined __FB_ARG_RIGHTOF__ __FB_ARGV__ __FB_ARM__ __FB_ASM__ __FB_BACKEND__ +syn keyword freebasicPredefined __FB_BIGENDIAN__ __FB_BUILD_DATE__ __FB_BUILD_DATE_ISO__ __FB_BUILD_SHA1__ +syn keyword freebasicPredefined __FB_CYGWIN__ __FB_DARWIN__ __FB_DEBUG__ __FB_DOS__ __FB_ERR__ __FB_EVAL__ +syn keyword freebasicPredefined __FB_FPMODE__ __FB_FPU__ __FB_FREEBSD__ __FB_GCC__ __FB_GUI__ __FB_IIF__ __FB_JOIN__ +syn keyword freebasicPredefined __FB_LANG__ __FB_LINUX__ __FB_MAIN__ __FB_MIN_VERSION__ __FB_MT__ __FB_NETBSD__ +syn keyword freebasicPredefined __FB_OPENBSD__ __FB_OPTIMIZE__ __FB_OPTION_BYVAL__ __FB_OPTION_DYNAMIC__ +syn keyword freebasicPredefined __FB_OPTION_ESCAPE__ __FB_OPTION_EXPLICIT__ __FB_OPTION_GOSUB__ +syn keyword freebasicPredefined __FB_OPTION_PRIVATE__ __FB_OUT_DLL__ __FB_OUT_EXE__ __FB_OUT_LIB__ __FB_OUT_OBJ__ +syn keyword freebasicPredefined __FB_PCOS__ __FB_PPC__ __FB_QUERY_SYMBOL__ __FB_QUOTE__ __FB_SIGNATURE__ __FB_SSE__ +syn keyword freebasicPredefined __FB_UNIQUEID__ __FB_UNIQUEID_POP__ __FB_UNIQUEID_PUSH__ __FB_UNIX__ __FB_UNQUOTE__ +syn keyword freebasicPredefined __FB_VECTORIZE__ __FB_VER_MAJOR__ __FB_VER_MINOR__ __FB_VER_PATCH__ __FB_VERSION__ +syn keyword freebasicPredefined __FB_WIN32__ __FB_X86__ __FB_XBOX__ +syn keyword freebasicPredefined __FILE__ __FILE_NQ__ __FUNCTION__ __FUNCTION_NQ__ +syn keyword freebasicPredefined __LINE__ __PATH__ __TIME__ +" +" Preprocessor directives +" +syn match freebasicInclude "#\s*\%(inclib\|include\%(\s\+once\)\=\|libpath\)\>" + +syn match freebasicPreProcessor "#\s*assert\>" +syn match freebasicPreProcessor "#\s*cmdline\>" +syn match freebasicPreProcessor "#\s*\%(define\|undef\)\>" +syn match freebasicPreProcessor "#\s*\%(if\|ifdef\|ifndef\|else\|elseif\|endif\)\>" +syn match freebasicPreProcessor "#\s*\%(macro\|endmacro\)\>" +syn match freebasicPreProcessor "#\s*error\>" +syn match freebasicPreProcessor "#\s*lang\>" +syn match freebasicPreProcessor "#\s*line\>" +syn match freebasicPreProcessor "#\s*pragma\%(\s\+reserve\)\=\>" +syn match freebasicPreProcessor "#\s*\%(print\|dynamic\|static\)\>" +syn keyword freebasicPreProcessor DEFINED + +syn keyword freebasicString LEN +syn keyword freebasicString ASC +" string.bi +syn keyword freebasicString FORMAT +syn keyword freebasicString VAL +syn keyword freebasicString CVD CVI CVL CVS +syn keyword freebasicString INSTR +syn keyword freebasicString LSET RSET + +if s:lang == "qb" + syn match freebasicString "\\$\=" + syn keyword freebasicString WSPACE + syn match freebasicString "\\$\=" + syn keyword freebasicString WCHR + syn keyword freebasicString WBIN WHEX WOCT WSTR + syn match freebasicString "\<\%(bin\|hex\|oct\|str\)\>\$\=" + syn keyword freebasicString VALLNG VALINT VALUINT VALULNG + syn match freebasicString "\<\%(mkd\|mki\|mkl\|mks\)\>\$\=" + syn match freebasicString "\<\%(mklongint\|mkshort\)\>\$\=" + syn keyword freebasicString CVLONGINT CVSHORT + syn match freebasicString "\<\%(left\|mid\|right\|lcase\|ucase\|ltrim\|rtrim\)\>\$\=" + syn match freebasicString "\\$\=" + syn keyword freebasicString INSTRREV +endif + +syn keyword freebasicTypeCasting CDBL CINT CLNG CSNG +if s:lang == "qb" + syn keyword freebasicTypeCasting __CAST __CBOOL __CBYTE __CLNGINT __CPTR __CSHORT __CSIGN __CYBTE __CUINT __CULNG + syn keyword freebasicTypeCasting __CULNGINT __CUNSG __CUSHORT +else + syn keyword freebasicTypeCasting CAST CBOOL CBYTE CLNGINT CPTR CSHORT CSIGN CUBYTE CUINT CULNG CULNGINT CUNSG CUSHORT +endif + +syn match freebasicUserInput "\" +syn keyword freebasicUserInput INKEY INPUT +if s:lang == "qb" + syn keyword freebasicUserInput __GETJOYSTICK __GETKEY __GETMOUSE __MULTIKEY __SETMOUSE STICK STRIG +else + syn keyword freebasicUserInput GETJOYSTICK GETKEY GETMOUSE MULTIKEY SETMOUSE +endif +" +" Operators +" +" TODO: make these context sensitive to remove the overlap of common operators +" : alpha operators should probably always be highlighted +" -- DJK 20/11/19 +if s:lang == "qb" + syn match freebasicArithmeticOperator "\<\%(MOD\|__SHL\|__SHR\)\>" +else + syn match freebasicArithmeticOperator "\<\%(MOD\|SHL\|SHR\)\>" +endif +syn match freebasicBitwiseOperator "\<\%(AND\|EQV\|IMP\|NOT\|OR\|XOR\)\>" " freebaseLogical? +if s:lang == "qb" + syn match freebasicAssignmentOperator "\<\%(MOD\|AND\|EQV\|IMP\|OR\|XOR\|__SHL\|__SHR\)=\@=" " exclude trailing '=' +else + syn match freebasicAssignmentOperator "\<\%(MOD\|AND\|EQV\|IMP\|OR\|XOR\|SHL\|SHR\)=\@=" +endif +syn match freebasicShortcircuitOperator "\<\%(ANDALSO\|ORELSE\)\>" +if s:lang == "fb" + syn match freebasicMemoryOperator '\<\%(new\|delete\)\>' +endif +syn keyword freebasicPointerOperator STRPTR VARPTR +if s:lang == "qb" + syn keyword freebasicPointerOperator __PROCPTR +else + syn keyword freebasicPointerOperator PROCPTR +endif +syn match freebasicTypeOperator '\' +syn match freebasicTypeOperator '\.' nextgroup=freebasicIdentifier skipwhite +if s:lang == "fb" + syn match freebasicTypeOperator '->' nextgroup=freebasicIdentifier skipwhite +endif + +if exists("freebasic_operators") + syn match freebasicAssignmentOperator "=>\=\|[-+&/\\*^]=" + if s:lang == "qb" + syn match freebasicAssignmentOperator "\<\%(MOD\|AND\|EQV\|IMP\|OR\|XOR\|__SHL\|__SHR\)=" " include trailing '=' + else + syn match freebasicAssignmentOperator "\<\%(MOD\|AND\|EQV\|IMP\|OR\|XOR\|SHL\|SHR\)=" + endif + syn match freebasicArithmeticOperator "[-+&/\\*^]" + " syn match freebasicIndexingOperator "[[\]()]" " FIXME + syn match freebasicRelationalOperator "=\|<>\|<=\|<\|>=\|>" + syn match freebasicPreprocessorOperator '\%(^\s*\)\@' nextgroup=freebasicIdentifier skipwhite + endif +endif + +syn cluster freebasicOperator contains=freebasic.*Operator +" +" Catch errors caused by wrong parenthesis +" +" syn region freebasicParen transparent start='(' end=')' contains=ALLBUT,@freebasicParenGroup +" syn match freebasicParenError ")" +" syn match freebasicInParen contained "[{}]" +" syn cluster freebasicParenGroup contains=freebasicParenError,freebasicSpecial,freebasicTodo,freebasicUserCont,freebasicUserLabel,freebasicBitField +" +" Integer number +" +syn match freebasicHexError "&h\w*\>" +syn match freebasicOctalError "&o\w*\>" +syn match freebasicBinaryError "&b\w*\>" +syn match freebasicHex "&h\x\+\%([%L&U]\|UL\|LL\|ULL\)\=\>" +syn match freebasicOctal "&o\o\+\%([%L&U]\|UL\|LL\|ULL\)\=\>" +syn match freebasicBinary "&b[10]\+\%([%L&U]\|UL\|LL\|ULL\)\=\>" +syn match freebasicInteger "\<\d\+\%([%L&U]\|UL\|LL\|ULL\)\=\>" +" +" Floating point +" See: https://www.freebasic.net/forum/viewtopic.php?t=20323 +" +" Floating point number, with dot, optional exponent, optional suffix +" +syn match freebasicFloat "\<\d\+\.\d*\%([de][-+]\=\d*\)\=[f!#]\=" +" +" Floating point number, starting with a dot, optional exponent, optional suffix +" +syn match freebasicFloat "\.\d\+\%([de][-+]\=\d*\)\=[f!#]\=" +" +" Floating point number, without dot, with optional exponent, optional suffix +" +syn match freebasicFloat "\<\d\+\%([de][-+]\=\d*\)[f!#]\=" +" +" Floating point number, without dot, without exponent, with suffix +" +syn match freebasicFloat "\<\d\+[f!#]" +" +" Create the clusters +" +syn cluster freebasicNumber contains=freebasicHex,freebasicOctal,freebasicBinary,freebasicInteger,freebasicFloat +syn cluster freebasicNumberError contains=freebasicHexError,freebasicOctalError,freebasicBinaryError +" +" Booleans +" +if s:lang != "qb" + syn keyword freebasicBoolean TRUE FALSE +endif +" +" +" String and escape sequences +" +syn match freebasicSpecial contained "\\." +syn match freebasicSpecial contained "\\\d\{1,3}" +syn match freebasicSpecial contained "\\&h\x\{1,2}" +syn match freebasicSpecial contained "\\&o\o\{1,3}" +syn match freebasicSpecial contained "\\&b[01]\{1,8}" +syn match freebasicSpecial contained "\\u\x\{1,4}" +syn region freebasicString start='"' end='"' " TODO: Toggle contains on Option Escape in fblite and qb? -- DJK 20/11/19 +syn region freebasicString start='!\zs"' end='"' contains=freebasicSpecial +syn region freebasicString start='$\zs"' end='"' +" +" Line labels +" +if s:lang =~# '\<\%(qb\|fblite\)\>' + syn match freebasicLineLabel "^\s*\zs\h\%(\w\|\.\)*\ze\s*:" +else + syn match freebasicLineLabel "^\s*\zs\h\w*\ze\s*:" +endif +syn match freebasicLineNumber "^\s*\zs\d\+" +" +" Line continuations +" +" syn match freebasicLineContinuation "\<_\>" nextgroup=freebasicComment,freebasicPostLineContinuation skipwhite +syn keyword freebasicLineContinuation _ nextgroup=freebasicComment,freebasicPostLineContinuation skipwhite +syn match freebasicPostLineContinuation ".*" contained +" +" +" Type suffixes +if exists("freebasic_type_suffixes") && s:lang =~# '\<\%(qb\|fblite\)\>' + syn match freebasicTypeSuffix "\h\%(\w\|.\)*\zs[$%&!#]" +endif +" +" Comments +" +syn keyword freebasicTodo TODO FIXME XXX NOTE contained +syn region freebasicComment start="\" end="$" contains=freebasicTodo,@Spell,freebasicMetacommand +syn region freebasicComment start="'" end="$" contains=freebasicTodo,@Spell,freebasicMetacommand +syn region freebasicDoubleComment start="''" end="$" contains=freebasicTodo,@Spell + +if !exists("freebasic_no_comment_fold") + syn region freebasicMultilineComment start="/'" end="'/" contains=freebasicTodo,@Spell,freeBasicMultilineComment fold keepend extend + syn region freebasicMultilineComment2 start="^\s*'.*\n\%(\s*'\)\@=" end="^\s*'.*\n\%(\s*'\)\@!" contains=freebasicComment,freebasicDoubleComment keepend fold +else + syn region freebasicMultilineComment start="/'" end="'/" contains=freebasicTodo,@Spell,freeBasicMultilineComment +endif + +syn case match + +syn sync linebreaks=1 + +" +" The default methods for highlighting. Can be overridden later +" +hi def link freebasicArrays StorageClass +hi def link freebasicAsm Special +hi def link freebasicBitManipulation Operator +hi def link freebasicBoolean Boolean +if s:lang == "fb" + hi def link freebasicCompilerSwitches freebasicUnsupportedError +else + hi def link freebasicCompilerSwitches PreCondit +endif +hi def link freebasicConsole Special +hi def link freebasicData Special +hi def link freebasicDataTypes Type +hi def link freebasicDateTime Type +hi def link freebasicDebug Special +hi def link freebasicErrorHandling Special +hi def link freebasicFilenumber Special +hi def link freebasicFiles Special +hi def link freebasicFunctions Function +hi def link freebasicGraphics Function +hi def link freebasicHardware Special +hi def link freebasicLoops Repeat +hi def link freebasicMath Function +if s:lang == "fb" + hi def link freebasicMetacommand freebasicUnsupportedError +else + hi def link freebasicMetacommand SpecialComment +endif +hi def link freebasicMemory Function +hi def link freebasicMisc Special +hi def link freebasicModularizing Special +hi def link freebasicMultithreading Special +hi def link freebasicShell Special +hi def link freebasicEnviron Special +hi def link freebasicPointer Special +hi def link freebasicPredefined PreProc +hi def link freebasicPreProcessor PreProc +hi def link freebasicProgramFlow Statement +hi def link freebasicString String +hi def link freebasicTypeCasting Type +hi def link freebasicUserInput Statement +hi def link freebasicComment Comment +hi def link freebasicDoubleComment Comment +hi def link freebasicMultilineComment Comment +hi def link freebasicConditional Conditional +hi def link freebasicError Error +hi def link freebasicIdentifier Identifier +hi def link freebasicInclude Include +hi def link freebasicGenericFunction Function +hi def link freebasicLineContinuation Special +hi def link freebasicLineLabel LineNr +if s:lang == "fb" + hi def link freebasicLineNumber freebasicUnsupportedError +else + hi def link freebasicLineNumber LineNr +endif +hi def link freebasicMathOperator Operator + +hi def link freebasicHex Number +hi def link freebasicOctal Number +hi def link freebasicBinary Number +hi def link freebasicInteger Number +hi def link freebasicFloat Float + +hi def link freebasicHexError Error +hi def link freebasicOctalError Error +hi def link freebasicBinaryError Error + +hi def link freebasicAssignmentOperator Operator +hi def link freebasicArithmeticOperator Operator +hi def link freebasicIndexingOperator Operator +hi def link freebasicRelationalOperator Operator +hi def link freebasicBitwiseOperator Operator +hi def link freebasicShortcircuitOperator Operator +hi def link freebasicPreprocessorOperator Operator +hi def link freebasicPointerOperator Operator +if exists("freebasic_operators") + hi def link freebasicTypeOperator Operator +endif +hi def link freebasicMemoryOperator Operator + +hi def link freebasicSpaceError Error + +hi def link freebasicSpecial Special +hi def link freebasicTodo Todo + +hi def link freebasicUnsupported freebasicUnsupportedError +hi def link freebasicUnsupportedError Error + +unlet s:lang + +let b:current_syntax = "freebasic" + +" vim: ts=8 tw=132 fdm=marker diff --git a/.config/vim/syntax/fstab.vim b/.config/vim/syntax/fstab.vim new file mode 100644 index 0000000..442bc94 --- /dev/null +++ b/.config/vim/syntax/fstab.vim @@ -0,0 +1,529 @@ +" Vim syntax file +" Language: fstab file +" Maintainer: Radu Dineiu +" URL: https://raw.github.com/rid9/vim-fstab/master/syntax/fstab.vim +" Last Change: 2025 Aug 21 +" Version: 1.7.0 +" +" Credits: +" David Necas (Yeti) +" Stefano Zacchiroli +" Georgi Georgiev +" James Vega +" Elias Probst + +" Options: +" let fstab_unknown_fs_errors = 1 +" highlight unknown filesystems as errors +" +" let fstab_unknown_device_errors = 0 +" do not highlight unknown devices as errors +" +" Changelog: +" - 2025 Aug 21 added support for mtab + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" General +syn cluster fsGeneralCluster contains=fsComment +syn match fsComment /\s*#.*/ contains=@Spell +syn match fsOperator /[,=:#]/ + +" Device +syn cluster fsDeviceCluster contains=fsOperator,fsDeviceKeyword,fsDeviceError +syn match fsDeviceError /\%([^a-zA-Z0-9_\/#@:\.-]\|^\w\{-}\ze\W\)/ contained +syn keyword fsDeviceKeyword contained none proc linproc tmpfs devpts devtmpfs sysfs usbfs tracefs overlay +syn keyword fsDeviceKeyword contained LABEL nextgroup=fsDeviceLabel +syn keyword fsDeviceKeyword contained UUID nextgroup=fsDeviceUUID +syn keyword fsDeviceKeyword contained PARTLABEL nextgroup=fsDevicePARTLABEL +syn keyword fsDeviceKeyword contained PARTUUID nextgroup=fsDevicePARTUUID +syn keyword fsDeviceKeyword contained sshfs nextgroup=fsDeviceSshfs +syn match fsDeviceKeyword contained /^[a-zA-Z0-9.\-]\+\ze:/ +syn match fsDeviceLabel contained /=[^ \t]\+/hs=s+1 contains=fsOperator +syn match fsDeviceUUID contained /=[^ \t]\+/hs=s+1 contains=fsOperator +syn match fsDevicePARTLABEL contained /=[^ \t]\+/hs=s+1 contains=fsOperator +syn match fsDevicePARTUUID contained /=[^ \t]\+/hs=s+1 contains=fsOperator +syn match fsDeviceSshfs contained /#[_=[:alnum:]\.\/+-]\+@[a-z0-9._-]\+\a\{2}:[^ \t]\+/hs=s+1 contains=fsOperator + +" Mount Point +syn cluster fsMountPointCluster contains=fsMountPointKeyword,fsMountPointError +syn match fsMountPointError /\%([^ \ta-zA-Z0-9_\/#@\.-]\|\s\+\zs\w\{-}\ze\s\)/ contained +syn keyword fsMountPointKeyword contained none swap + +" Type +syn cluster fsTypeCluster contains=fsTypeKeyword,fsTypeUnknown +syn match fsTypeUnknown /\s\+\zs\w\+/ contained +syn keyword fsTypeKeyword contained adfs ados affs anon_inodefs atfs audiofs auto autofs bdev befs bfs btrfs binfmt_misc cd9660 ceph cfs cgroup cifs coda coherent configfs cpuset cramfs debugfs devfs devpts devtmpfs dlmfs e2compr ecryptfs efivarfs efs erofs exfat ext2 ext2fs ext3 ext4 f2fs fdesc ffs filecore fuse fuseblk fusectl gfs2 hfs hfsplus hpfs hugetlbfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix mqueue msdos ncpfs nfs nfs4 nfsd nilfs2 none ntfs ntfs3 null nwfs ocfs2 omfs overlay ovlfs pipefs portal proc procfs pstore ptyfs pvfs2 qnx4 qnx6 reiserfs ramfs romfs rpc_pipefs securityfs shm smbfs spufs squashfs sockfs sshfs std subfs swap sysfs sysv tcfs tmpfs tracefs ubifs udf ufs umap umsdos union usbfs userfs v9fs vfat virtiofs vs3fs vxfs wrapfs wvfs xenfs xenix xfs zisofs zonefs + +" Options +" ------- +" Options: General +syn cluster fsOptionsCluster contains=fsOperator,fsOptionsGeneral,fsOptionsKeywords,fsTypeUnknown +syn match fsOptionsNumber /\d\+/ +syn match fsOptionsNumberSigned /[-+]\?\d\+/ +syn match fsOptionsNumberOctal /[0-8]\+/ +syn match fsOptionsString /[a-zA-Z0-9_-]\+/ +syn keyword fsOptionsTrueFalse true false +syn keyword fsOptionsYesNo yes no +syn keyword fsOptionsYN y n +syn keyword fsOptions01 0 1 +syn cluster fsOptionsCheckCluster contains=fsOptionsExt2Check,fsOptionsFatCheck +syn keyword fsOptionsSize 512 1024 2048 +syn keyword fsOptionsGeneral async atime auto bind current defaults dev devgid devmode devmtime devuid dirsync exec force fstab kudzu loop managed mand move noatime noauto noclusterr noclusterw nodev nodevmtime nodiratime noexec nomand norelatime nosuid nosymfollow nouser owner pamconsole rbind rdonly relatime remount ro rq rw suid suiddir supermount sw sync union update user users wxallowed xx nofail failok lazytime +syn match fsOptionsGeneral /_netdev/ + +syn match fsOptionsKeywords contained /\/ +syn keyword fsOptionsKeywords contained acl bsddf minixdf debug grpid bsdgroups minixdf nocheck nogrpid oldalloc orlov sysvgroups nouid32 nobh user_xattr nouser_xattr + +" Options: ext3 +syn match fsOptionsKeywords contained /\/ +syn keyword fsOptionsUfsError contained panic lock umount repair + +" Options: usbfs +syn match fsOptionsKeywords contained /\<\%(dev\|bus\|list\)\%(id\|gid\)=/ nextgroup=fsOptionsNumber +syn match fsOptionsKeywords contained /\<\%(dev\|bus\|list\)mode=/ nextgroup=fsOptionsNumberOctal + +" Options: v9fs +syn match fsOptionsKeywords contained /\<\%(trans\)=/ nextgroup=fsOptionsV9Trans +syn keyword fsOptionsV9Trans unix tcp fd virtio rdma +syn match fsOptionsKeywords contained /\ +" Previous Maintainer: Haakon Riiser +" Last Change: Sat 29 Sep 2007 11:08:34 AM PDT +" +" Thanks to David Necas (Yeti) for adding Fvwm 2.4 support. +" +" 2006-05-09 gi1242: Rewrote fvwm2 syntax completely. Also since fvwm1 is now +" mostly obsolete, made the syntax file pick fvwm2 syntax by default. + +if exists("b:current_syntax") + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +" Fvwm configuration files are case insensitive +syn case ignore + +" Identifiers in Fvwm can contain most characters, so we only +" include the most common ones here. +setlocal iskeyword=_,-,+,.,a-z,A-Z,48-57 + +" Syntax items common to fvwm1 and fvwm2 config files +syn cluster fvwmConstants contains=fvwmEnvVar,fvwmNumber +syn match fvwmEnvVar "\$\w\+" +syn match fvwmNumber '\v<(\d+|0x[0-9a-f]+)>' + +syn match fvwmModConf nextgroup=fvwmModArg "\v^\s*\*\a+" +syn region fvwmModArg contained contains=fvwmString,fvwmRGBValue + \ start='.' skip='\\$' end='$' + +syn region fvwmString contains=fvwmBackslash start='"' + \ matchgroup=fvwmBackslash skip='\v\\"' end='"' +syn region fvwmString contains=fvwmBackslash start='`' + \ matchgroup=fvwmBackslash skip='\v\\`' end='`' +syn region fvwmString contains=fvwmBackslash start="'" + \ matchgroup=fvwmBackslash skip="\v\\'" end="'" +syn match fvwmBackslash contained '\\[^"'`]' + +syn match fvwmRGBValue "#\x\{3}" +syn match fvwmRGBValue "#\x\{6}" +syn match fvwmRGBValue "#\x\{9}" +syn match fvwmRGBValue "#\x\{12}" +syn match fvwmRGBValue "rgb:\x\{1,4}/\x\{1,4}/\x\{1,4}" + +syn region fvwmComment contains=@Spell + \ start='^\s*#\s' skip='\\$' end='$' +syn region fvwmComment start="\v^\s*#(\S|$)" skip='\\$' end='$' + +if (exists("b:fvwm_version") && b:fvwm_version == 1) + \ || (exists("use_fvwm_1") && use_fvwm_1) + + " + " Syntax highlighting for Fvwm1 files. + " + + " Moved from common syntax items + syn match fvwmModule "\' + syn match fvwmGradient contained '\v<[HVDBSCRY]Gradient>' + + " Styles + syn keyword fvwmKeyword nextgroup=fvwmStyleArgs skipwhite + \ Style WindowStyle + syn region fvwmStyleArgs contained transparent contains=fvwmStyleNames,@fvwmConstants,fvwmString,fvwmRGBValue + \ start='.' skip='\\$' end='$' + syn keyword fvwmStyleNames contained + \ BorderWidth HandleWidth NoIcon Icon MiniIcon + \ IconBox IconGrid IconFill IconSize NoTitle + \ Title TitleAtBottom TitleAtLeft TitleAtRight + \ TitleAtTop LeftTitleRotatedCW + \ LeftTitleRotatedCCW RightTitleRotatedCCW + \ RightTitleRotatedCW TopTitleRotated + \ TopTitleNotRotated BottomTitleRotated + \ BottomTitleNotRotated UseTitleDecorRotation + \ StippledTitle StippledTitleOff + \ IndexedWindowName ExactWindowName + \ IndexedIconName ExactIconName Borders + \ NoHandles Handles WindowListSkip + \ WindowListHit CirculateSkip CirculateHit + \ CirculateSkipShaded CirculateHitShaded Layer + \ StaysOnTop StaysOnBottom StaysPut Sticky + \ Slippery StickyAcrossPages StickyAcrossDesks + \ StartIconic StartNormal Color ForeColor + \ BackColor Colorset HilightFore HilightBack + \ HilightColorset BorderColorset + \ HilightBorderColorset IconTitleColorset + \ HilightIconTitleColorset + \ IconBackgroundColorset IconTitleRelief + \ IconBackgroundRelief IconBackgroundPadding + \ Font IconFont StartsOnDesk StartsOnPage + \ StartsAnyWhere StartsOnScreen + \ ManualPlacementHonorsStartsOnPage + \ ManualPlacementIgnoresStartsOnPage + \ CaptureHonorsStartsOnPage + \ CaptureIgnoresStartsOnPage + \ RecaptureHonorsStartsOnPage + \ RecaptureIgnoresStartsOnPage + \ StartsOnPageIncludesTransients + \ StartsOnPageIgnoresTransients IconTitle + \ NoIconTitle MwmButtons FvwmButtons MwmBorder + \ FvwmBorder MwmDecor NoDecorHint MwmFunctions + \ NoFuncHint HintOverride NoOverride NoButton + \ Button ResizeHintOverride NoResizeOverride + \ OLDecor NoOLDecor GNOMEUseHints + \ GNOMEIgnoreHints StickyIcon SlipperyIcon + \ StickyAcrossPagesIcon StickyAcrossDesksIcon + \ ManualPlacement CascadePlacement + \ MinOverlapPlacement + \ MinOverlapPercentPlacement + \ TileManualPlacement TileCascadePlacement + \ MinOverlapPlacementPenalties + \ MinOverlapPercentPlacementPenalties + \ DecorateTransient NakedTransient + \ DontRaiseTransient RaiseTransient + \ DontLowerTransient LowerTransient + \ DontStackTransientParent + \ StackTransientParent SkipMapping ShowMapping + \ ScatterWindowGroups KeepWindowGroupsOnDesk + \ UseDecor UseStyle NoPPosition UsePPosition + \ NoUSPosition UseUSPosition + \ NoTransientPPosition UseTransientPPosition + \ NoTransientUSPosition UseTransientUSPosition + \ NoIconPosition UseIconPosition Lenience + \ NoLenience ClickToFocus SloppyFocus + \ MouseFocus FocusFollowsMouse NeverFocus + \ ClickToFocusPassesClickOff + \ ClickToFocusPassesClick + \ ClickToFocusRaisesOff ClickToFocusRaises + \ MouseFocusClickRaises + \ MouseFocusClickRaisesOff GrabFocus + \ GrabFocusOff GrabFocusTransientOff + \ GrabFocusTransient FPFocusClickButtons + \ FPFocusClickModifiers + \ FPSortWindowlistByFocus FPClickRaisesFocused + \ FPClickDecorRaisesFocused + \ FPClickIconRaisesFocused + \ FPClickRaisesUnfocused + \ FPClickDecorRaisesUnfocused + \ FPClickIconRaisesUnfocused FPClickToFocus + \ FPClickDecorToFocus FPClickIconToFocus + \ FPEnterToFocus FPLeaveToUnfocus + \ FPFocusByProgram FPFocusByFunction + \ FPFocusByFunctionWarpPointer FPLenient + \ FPPassFocusClick FPPassRaiseClick + \ FPIgnoreFocusClickMotion + \ FPIgnoreRaiseClickMotion + \ FPAllowFocusClickFunction + \ FPAllowRaiseClickFunction FPGrabFocus + \ FPGrabFocusTransient FPOverrideGrabFocus + \ FPReleaseFocus FPReleaseFocusTransient + \ FPOverrideReleaseFocus StartsLowered + \ StartsRaised IgnoreRestack AllowRestack + \ FixedPosition VariablePosition + \ FixedUSPosition VariableUSPosition + \ FixedPPosition VariablePPosition FixedSize + \ VariableSize FixedUSSize VariableUSSize + \ FixedPSize VariablePSize Closable + \ Iconifiable Maximizable + \ AllowMaximizeFixedSize IconOverride + \ NoIconOverride NoActiveIconOverride + \ DepressableBorder FirmBorder MaxWindowSize + \ IconifyWindowGroups IconifyWindowGroupsOff + \ ResizeOpaque ResizeOutline BackingStore + \ BackingStoreOff BackingStoreWindowDefault + \ Opacity ParentalRelativity SaveUnder + \ SaveUnderOff WindowShadeShrinks + \ WindowShadeScrolls WindowShadeSteps + \ WindowShadeAlwaysLazy WindowShadeBusy + \ WindowShadeLazy EWMHDonateIcon + \ EWMHDontDonateIcon EWMHDonateMiniIcon + \ EWMHDontDonateMiniIcon EWMHMiniIconOverride + \ EWMHNoMiniIconOverride + \ EWMHUseStackingOrderHints + \ EWMHIgnoreStackingOrderHints + \ EWMHIgnoreStateHints EWMHUseStateHints + \ EWMHIgnoreStrutHints EWMHIgnoreWindowType + \ EWMHUseStrutHints + \ EWMHMaximizeIgnoreWorkingArea + \ EWMHMaximizeUseWorkingArea + \ EWMHMaximizeUseDynamicWorkingArea + \ EWMHPlacementIgnoreWorkingArea + \ EWMHPlacementUseWorkingArea + \ EWMHPlacementUseDynamicWorkingArea + \ MoveByProgramMethod Unmanaged State + \ StippledIconTitle StickyStippledTitle + \ StickyStippledIconTitle + \ PositionPlacement + \ UnderMousePlacementHonorsStartsOnPage + \ UnderMousePlacementIgnoresStartsOnPage + \ MinOverlapPlacementPenalties + \ MinOverlapPercentPlacementPenalties + \ MinWindowSize StartShaded + + " Cursor styles + syn keyword fvwmKeyword nextgroup=fvwmCursorStyle skipwhite + \ CursorStyle + syn case match + syn keyword fvwmCursorStyle contained + \ POSITION TITLE DEFAULT SYS MOVE RESIZE WAIT + \ MENU SELECT DESTROY TOP RIGHT BOTTOM LEFT + \ TOP_LEFT TOP_RIGHT BOTTOM_LEFT BOTTOM_RIGHT + \ TOP_EDGE RIGHT_EDGE BOTTOM_EDGE LEFT_EDGE + \ ROOT STROKE + syn case ignore + + " Menu style + syn keyword fvwmKeyword nextgroup=fvwmMStyleArgs skipwhite + \ MenuStyle + syn region fvwmMStyleArgs contained transparent contains=fvwmMStyleNames,@fvwmConstants,fvwmString,fvwmGradient,fvwmRGBValue + \ start='.' skip='\\$' end='$' + syn keyword fvwmMStyleNames contained + \ Fvwm Mwm Win BorderWidth Foreground + \ Background Greyed HilightBack HilightBackOff + \ ActiveFore ActiveForeOff MenuColorset + \ ActiveColorset GreyedColorset Hilight3DThick + \ Hilight3DThin Hilight3DOff + \ Hilight3DThickness Animation AnimationOff + \ Font MenuFace PopupDelay PopupOffset + \ TitleWarp TitleWarpOff TitleUnderlines0 + \ TitleUnderlines1 TitleUnderlines2 + \ SeparatorsLong SeparatorsShort + \ TrianglesSolid TrianglesRelief + \ PopupImmediately PopupDelayed + \ PopdownImmediately PopdownDelayed + \ PopupActiveArea DoubleClickTime SidePic + \ SideColor PopupAsRootMenu PopupAsSubmenu + \ PopupIgnore PopupClose RemoveSubmenus + \ HoldSubmenus SubmenusRight SubmenusLeft + \ SelectOnRelease ItemFormat + \ VerticalItemSpacing VerticalTitleSpacing + \ AutomaticHotkeys AutomaticHotkeysOff + \ TitleFont TitleColorset HilightTitleBack + + " Button style + syn keyword fvwmKeyword nextgroup=fvwmBNum skipwhite + \ ButtonStyle AddButtonStyle + syn match fvwmBNum contained + \ nextgroup=fvwmBState,fvwmBStyleArgs skipwhite + \ '\v<([0-9]|All|Left|Right|Reset)>' + syn keyword fvwmBState contained nextgroup=fvwmBStyleArgs skipwhite + \ ActiveUp ActiveDown InactiveUp InactiveDown + \ Active Inactive ToggledActiveUp + \ ToggledActiveDown ToggledInactiveUp + \ ToggledInactiveDown ToggledActive + \ ToggledInactive AllNormal AllToggled + \ AllActive AllInactive AllUp AllDown + syn region fvwmBStyleArgs contained contains=fvwmBStyleFlags,fvwmBStyleNames,fvwmGradient,fvwmRGBValue,@fvwmConstants,fvwmString + \ start='\S' skip='\\$' end='$' + syn keyword fvwmBStyleNames contained + \ Simple Default Solid Colorset Vector Pixmap + \ AdjustedPixmap ShrunkPixmap StretchedPixmap + \ TiledPixmap MiniIcon + syn keyword fvwmBStyleFlags contained + \ Raised Sunk Flat UseTitleStyle + \ UseBorderStyle + + " Border style + syn keyword fvwmKeyword skipwhite nextgroup=fvwmBdState,fvwmBdStyleArgs + \ BorderStyle + syn keyword fvwmBdState contained skipwhite nextgroup=fvwmBdStyleArgs + \ Active Inactive + syn region fvwmBdStyleArgs contained contains=fvwmBdStyNames,fvwmBdStyFlags + \ start='\S' skip='\\$' end='$' + syn keyword fvwmBdStyNames contained + \ TiledPixmap Colorset + syn keyword fvwmBdStyFlags contained + \ HiddenHandles NoInset Raised Sunk Flat + + " Title styles + syn keyword fvwmKeyword skipwhite nextgroup=fvwmTState,fvwmTStyleArgs + \ TitleStyle AddTitleStyle + syn keyword fvwmTState contained skipwhite nextgroup=fvwmTStyleArgs + \ ActiveUp ActiveDown InactiveUp InactiveDown + \ Active Inactive ToggledActiveUp + \ ToggledActiveDown ToggledInactiveUp + \ ToggledInactiveDown ToggledActive + \ ToggledInactive AllNormal AllToggled + \ AllActive AllInactive AllUp AllDown + syn region fvwmTStyleArgs contained contains=fvwmBStyleNames,fvwmTStyleNames,fvwmMPmapNames,fvwmTStyleFlags,fvwmGradient,fvwmRGBValue,@fvwmConstants + \ start='\S' skip='\\$' end='$' + syn keyword fvwmTStyleNames contained + \ MultiPixmap + syn keyword fvwmTStyleNames contained + \ LeftJustified Centered RightJustified Height + \ MinHeight + syn keyword fvwmMPmapNames contained + \ Main LeftMain RightMain UnderText LeftOfText + \ RightOfText LeftEnd RightEnd Buttons + \ LeftButtons RightButtons + syn keyword fvwmTStyleFlags contained + \ Raised Flat Sunk + + " Button state + syn keyword fvwmKeyword nextgroup=fvwmBStateArgs + \ ButtonState + syn region fvwmBStateArgs contained contains=fvwmBStateTF,fvwmBStateNames + \ start='.' skip='\\$' end='$' + syn keyword fvwmBStateNames contained ActiveDown Inactive InactiveDown + syn keyword fvwmBStateTF contained True False + + " Paths + syn keyword fvwmKeyword nextgroup=fvwmPath skipwhite + \ IconPath ImagePath LocalePath PixmapPath + \ ModulePath + syn match fvwmPath contained contains=fvwmEnvVar '\v.+$' + + " Window list command + syn keyword fvwmKeyword nextgroup=fvwmWLArgs skipwhite + \ WindowList + syn region fvwmWLArgs contained + \ contains=fvwmCondition,@fvwmConstants,fvwmString,fvwmWLOpts + \ start='.' skip='\\$' end='$' + syn keyword fvwmWLOpts contained + \ Geometry NoGeometry NoGeometryWithInfo + \ NoDeskNum NoNumInDeskTitle + \ NoCurrentDeskTitle MaxLabelWidth width + \ TitleForAllDesks Function funcname Desk + \ desknum CurrentDesk NoIcons Icons OnlyIcons + \ NoNormal Normal OnlyNormal NoSticky Sticky + \ OnlySticky NoStickyAcrossPages + \ StickyAcrossPages OnlyStickyAcrossPages + \ NoStickyAcrossDesks StickyAcrossDesks + \ OnlyStickyAcrossDesks NoOnTop OnTop + \ OnlyOnTop NoOnBottom OnBottom OnlyOnBottom + \ Layer UseListSkip OnlyListSkip NoDeskSort + \ ReverseOrder CurrentAtEnd IconifiedAtEnd + \ UseIconName Alphabetic NotAlphabetic + \ SortByResource SortByClass NoHotkeys + \ SelectOnRelease + + syn keyword fvwmSpecialFn StartFunction InitFunction RestartFunction + \ ExitFunction SessionInitFunction + \ SessionRestartFunction SessionExitFunction + \ MissingSubmenuFunction WindowListFunc + + syn keyword fvwmKeyword skipwhite nextgroup=fvwmKeyWin,fvwmKeyName + \ Key PointerKey + syn region fvwmKeyWin contained skipwhite nextgroup=fvwmKeyName + \ start='(' end=')' + syn case match + syn match fvwmKeyName contained skipwhite nextgroup=fvwmKeyContext + \ '\v<([a-zA-Z0-9]|F\d+|KP_\d)>' + syn keyword fvwmKeyName contained skipwhite nextgroup=fvwmKeyContext + \ BackSpace Begin Break Cancel Clear Delete + \ Down End Escape Execute Find Help Home + \ Insert KP_Add KP_Begin KP_Decimal KP_Delete + \ KP_Divide KP_Down KP_End KP_Enter KP_Equal + \ KP_Home KP_Insert KP_Left KP_Multiply + \ KP_Next KP_Page_Down KP_Page_Up KP_Prior + \ KP_Right KP_Separator KP_Space KP_Subtract + \ KP_Tab KP_Up Left Linefeed Menu Mode_switch + \ Next Num_Lock Page_Down Page_Up Pause Print + \ Prior Redo Return Right script_switch + \ Scroll_Lock Select Sys_Req Tab Undo Up space + \ exclam quotedbl numbersign dollar percent + \ ampersand apostrophe quoteright parenleft + \ parenright asterisk plus comma minus period + \ slash colon semicolon less equal greater + \ question at bracketleft backslash + \ bracketright asciicircum underscore grave + \ quoteleft braceleft bar braceright + \ asciitilde + + syn match fvwmKeyContext contained skipwhite nextgroup=fvwmKeyMods + \ '\v<[][RWDTS_F<^>vI0-9AM-]+>' + syn match fvwmKeyMods contained '\v[NCSMLA1-5]+' + syn case ignore + + syn keyword fvwmKeyword skipwhite nextgroup=fvwmMouseWin,fvwmMouseButton + \ Mouse + syn region fvwmMouseWin contained skipwhite nextgroup=fvwmMouseButton + \ start='(' end=')' + syn match fvwmMouseButton contained skipwhite nextgroup=fvwmKeyContext + \ '[0-5]' +endif + +" Define syntax highlighting groups + +" +" Common highlighting groups +" +hi def link fvwmComment Comment +hi def link fvwmEnvVar Macro +hi def link fvwmNumber Number +hi def link fvwmKeyword Keyword +hi def link fvwmPath Constant +hi def link fvwmModConf Macro +hi def link fvwmRGBValue Constant +hi def link fvwmString String +hi def link fvwmBackslash SpecialChar + + +" +" Highlighting groups for fvwm1 specific items +" +hi def link fvwmExec fvwmKeyword +hi def link fvwmKey fvwmKeyword +hi def link fvwmModule fvwmKeyword +hi def link fvwmFunction Function + +" +" Highlighting groups for fvwm2 specific items +" +hi def link fvwmSpecialFn Type +hi def link fvwmCursorStyle fvwmStyleNames +hi def link fvwmStyleNames Identifier +hi def link fvwmMStyleNames fvwmStyleNames +hi def link fvwmCSNames fvwmStyleNames +hi def link fvwmGradient fvwmStyleNames +hi def link fvwmCondNames fvwmStyleNames +hi def link fvwmTCNames fvwmStyleNames +hi def link fvwmTRNames fvwmStyleNames +hi def link fvwmWLOpts fvwmStyleNames + +hi def link fvwmBNum Number +hi def link fvwmBState Type +hi def link fvwmBStyleNames fvwmStyleNames +hi def link fvwmBStyleFlags Special + +hi def link fvwmBStateTF Constant +hi def link fvwmBStateNames fvwmStyleNames + +hi def link fvwmBdState fvwmBState +hi def link fvwmBdStyNames fvwmStyleNames +hi def link fvwmBdStyFlags fvwmBStyleFlags + +hi def link fvwmTState fvwmBState +hi def link fvwmTStyleNames fvwmStyleNames +hi def link fvwmMPmapNames fvwmBStyleFlags +hi def link fvwmTStyleFlags fvwmBStyleFlags + +hi def link fvwmDirection fvwmBStyleFlags + +hi def link fvwmKeyWin Constant +hi def link fvwmMouseWin fvwmKeyWin +hi def link fvwmKeyName Special +hi def link fvwmKeyContext fvwmKeyName +hi def link fvwmKeyMods fvwmKeyName +hi def link fvwmMouseButton fvwmKeyName + +hi def link fvwmMenuString String +hi def link fvwmIcon Type +hi def link fvwmShortcutKey SpecialChar + +hi def link fvwmModuleName Function + +let b:current_syntax = "fvwm" + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/.config/vim/syntax/fvwm2m4.vim b/.config/vim/syntax/fvwm2m4.vim new file mode 100644 index 0000000..e296273 --- /dev/null +++ b/.config/vim/syntax/fvwm2m4.vim @@ -0,0 +1,32 @@ +" Vim syntax file +" Language: FvwmM4 preprocessed Fvwm2 configuration files +" Maintainer: David Ne\v{c}as (Yeti) +" Last Change: 2002-06-02 +" URI: http://physics.muni.cz/~yeti/download/syntax/fvwmm4.vim + +" Setup +" quit when a syntax file was already loaded +if exists('b:current_syntax') + finish +endif + +" Let included files know they are included +if !exists('main_syntax') + let main_syntax = 'fvwm2m4' +endif + +" Include M4 syntax +runtime! syntax/m4.vim +unlet b:current_syntax + +" Include Fvwm2 syntax (Fvwm1 doesn't have M4 preprocessor) +runtime! syntax/fvwm.vim +unlet b:current_syntax + +" That's all! +let b:current_syntax = 'fvwm2m4' + +if main_syntax == 'fvwm2m4' + unlet main_syntax +endif + diff --git a/.config/vim/syntax/gdb.vim b/.config/vim/syntax/gdb.vim new file mode 100644 index 0000000..c15b96d --- /dev/null +++ b/.config/vim/syntax/gdb.vim @@ -0,0 +1,104 @@ +" Vim syntax file +" Language: GDB command files +" Maintainer: Claudio Fleiner +" URL: http://www.fleiner.com/vim/syntax/gdb.vim +" Last Change: 2021 Nov 15 +" Additional changes by Simon Sobisch + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword gdbInfo contained address architecture args breakpoints catch common copying dcache +syn keyword gdbInfo contained display files float frame functions handle line +syn keyword gdbInfo contained locals program registers scope set sharedlibrary signals +syn keyword gdbInfo contained source sources stack symbol target terminal threads +syn keyword gdbInfo contained syn keyword tracepoints types udot variables warranty watchpoints +syn match gdbInfo contained "all-registers" + + +syn keyword gdbStatement contained actions apply attach awatch backtrace break bt call catch cd clear collect commands +syn keyword gdbStatement contained complete condition continue delete detach directory disable disas[semble] disp[lay] down +syn keyword gdbStatement contained echo else enable end file finish frame handle hbreak help if ignore +syn keyword gdbStatement contained inspect jump kill list load maintenance make next nexti ni output overlay +syn keyword gdbStatement contained passcount path print printf ptype python pwd quit rbreak remote return run rwatch +syn keyword gdbStatement contained search section set sharedlibrary shell show si signal skip source step stepi stepping +syn keyword gdbStatement contained stop target tbreak tdump tfind thbreak thread tp trace tstart tstatus tstop +syn keyword gdbStatement contained tty und[isplay] unset until up watch whatis where while ws x +syn match gdbFuncDef "\.*" +syn match gdbStatementContainer "^\s*\S\+" contains=gdbStatement,gdbFuncDef +syn match gdbStatement "^\s*info" nextgroup=gdbInfo skipwhite skipempty + +" some commonly used abbreviations +syn keyword gdbStatement c cont p py + +syn region gdbDocument matchgroup=gdbFuncDef start="\.*$" matchgroup=gdbFuncDef end="^end\s*$" + +syn match gdbStatement "\" +syn match gdbStatement "\" +syn match gdbStatement "\" +syn match gdbStatement "\" +syn match gdbStatement "\" +syn match gdbStatement "\" +syn match gdbStatement "\" +syn match gdbStatement "\" +syn match gdbStatement "\" +syn match gdbStatement "\" +syn match gdbStatement "\" +syn match gdbStatement "\" +syn match gdbStatement "\" + +syn keyword gdbSet annotate architecture args check complaints confirm editing endian +syn keyword gdbSet environment gnutarget height history language listsize print prompt +syn keyword gdbSet radix remotebaud remotebreak remotecache remotedebug remotedevice remotelogbase +syn keyword gdbSet remotelogfile remotetimeout remotewritesize targetdebug variable verbose +syn keyword gdbSet watchdog width write +syn match gdbSet "\" +syn match gdbSet "\" +syn match gdbSet "\" +syn match gdbSet "\" +syn match gdbSet "\" +syn match gdbSet "\" +syn match gdbSet "\" +syn match gdbSet "\" + +syn match gdbComment "^\s*#.*" contains=@Spell + +syn match gdbVariable "\$\K\k*" + +" Strings and constants +syn region gdbString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell +syn match gdbCharacter "'[^']*'" contains=gdbSpecialChar,gdbSpecialCharError +syn match gdbCharacter "'\\''" contains=gdbSpecialChar +syn match gdbCharacter "'[^\\]'" +syn match gdbNumber "\<[0-9_]\+\>" +syn match gdbNumber "\<0x[0-9a-fA-F_]\+\>" + + +if !exists("gdb_minlines") + let gdb_minlines = 10 +endif +exec "syn sync ccomment gdbComment minlines=" . gdb_minlines + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link gdbFuncDef Function +hi def link gdbComment Comment +hi def link gdbStatement Statement +hi def link gdbString String +hi def link gdbCharacter Character +hi def link gdbVariable Identifier +hi def link gdbSet Constant +hi def link gdbInfo Type +hi def link gdbDocument Special +hi def link gdbNumber Number + +let b:current_syntax = "gdb" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8 diff --git a/.config/vim/syntax/gdmo.vim b/.config/vim/syntax/gdmo.vim new file mode 100644 index 0000000..009f402 --- /dev/null +++ b/.config/vim/syntax/gdmo.vim @@ -0,0 +1,83 @@ +" Vim syntax file +" Language: GDMO +" (ISO-10165-4; Guidelines for the Definition of Managed Object) +" Maintainer: Gyuman (Chester) Kim +" URL: http://classicalprogrammer.wikidot.com/local--files/vim-syntax-file-for-gdmo/gdmo.vim +" Last change: 8th June, 2011 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" keyword definitions +syn match gdmoCategory "MANAGED\s\+OBJECT\s\+CLASS" +syn keyword gdmoCategory NOTIFICATION ATTRIBUTE BEHAVIOUR PACKAGE ACTION +syn match gdmoCategory "NAME\s\+BINDING" +syn match gdmoRelationship "DERIVED\s\+FROM" +syn match gdmoRelationship "SUPERIOR\s\+OBJECT\s\+CLASS" +syn match gdmoRelationship "SUBORDINATE\s\+OBJECT\s\+CLASS" +syn match gdmoExtension "AND\s\+SUBCLASSES" +syn match gdmoDefinition "DEFINED\s\+AS" +syn match gdmoDefinition "REGISTERED\s\+AS" +syn match gdmoExtension "ORDER\s\+BY" +syn match gdmoReference "WITH\s\+ATTRIBUTE" +syn match gdmoReference "WITH\s\+INFORMATION\s\+SYNTAX" +syn match gdmoReference "WITH\s\+REPLY\s\+SYNTAX" +syn match gdmoReference "WITH\s\+ATTRIBUTE\s\+SYNTAX" +syn match gdmoExtension "AND\s\+ATTRIBUTE\s\+IDS" +syn match gdmoExtension "MATCHES\s\+FOR" +syn match gdmoReference "CHARACTERIZED\s\+BY" +syn match gdmoReference "CONDITIONAL\s\+PACKAGES" +syn match gdmoExtension "PRESENT\s\+IF" +syn match gdmoExtension "DEFAULT\s\+VALUE" +syn match gdmoExtension "PERMITTED\s\+VALUES" +syn match gdmoExtension "REQUIRED\s\+VALUES" +syn match gdmoExtension "NAMED\s\+BY" +syn keyword gdmoReference ATTRIBUTES NOTIFICATIONS ACTIONS +syn keyword gdmoExtension DELETE CREATE +syn keyword gdmoExtension EQUALITY SUBSTRINGS ORDERING +syn match gdmoExtension "REPLACE-WITH-DEFAULT" +syn match gdmoExtension "GET" +syn match gdmoExtension "GET-REPLACE" +syn match gdmoExtension "ADD-REMOVE" +syn match gdmoExtension "WITH-REFERENCE-OBJECT" +syn match gdmoExtension "WITH-AUTOMATIC-INSTANCE-NAMING" +syn match gdmoExtension "ONLY-IF-NO-CONTAINED-OBJECTS" + + +" Strings and constants +syn match gdmoSpecial contained "\\\d\d\d\|\\." +syn region gdmoString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=gdmoSpecial +syn match gdmoCharacter "'[^\\]'" +syn match gdmoSpecialCharacter "'\\.'" +syn match gdmoNumber "0[xX][0-9a-fA-F]\+\>" +syn match gdmoLineComment "--.*" +syn match gdmoLineComment "--.*--" + +syn match gdmoDefinition "^\s*[a-zA-Z][-a-zA-Z0-9_.\[\] \t{}]* *::="me=e-3 +syn match gdmoBraces "[{}]" + +syn sync ccomment gdmoComment + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link gdmoCategory Structure +hi def link gdmoRelationship Macro +hi def link gdmoDefinition Statement +hi def link gdmoReference Type +hi def link gdmoExtension Operator +hi def link gdmoBraces Function +hi def link gdmoSpecial Special +hi def link gdmoString String +hi def link gdmoCharacter Character +hi def link gdmoSpecialCharacter gdmoSpecial +hi def link gdmoComment Comment +hi def link gdmoLineComment gdmoComment +hi def link gdmoType Type + + +let b:current_syntax = "gdmo" + +" vim: ts=8 diff --git a/.config/vim/syntax/gdresource.vim b/.config/vim/syntax/gdresource.vim new file mode 100644 index 0000000..7e1a251 --- /dev/null +++ b/.config/vim/syntax/gdresource.vim @@ -0,0 +1,65 @@ +" Vim syntax file for Godot resource (scenes) +" Language: gdresource +" Maintainer: Maxim Kim +" Filenames: *.tscn, *.tres +" Website: https://github.com/habamax/vim-gdscript + +if exists("b:current_syntax") + finish +endif + +let s:keepcpo = &cpo +set cpo&vim + +syn match gdResourceNumber "\<0x\%(_\=\x\)\+\>" +syn match gdResourceNumber "\<0b\%(_\=[01]\)\+\>" +syn match gdResourceNumber "\<\d\%(_\=\d\)*\>" +syn match gdResourceNumber "\<\d\%(_\=\d\)*\%(e[+-]\=\d\%(_\=\d\)*\)\=\>" +syn match gdResourceNumber "\<\d\%(_\=\d\)*\.\%(e[+-]\=\d\%(_\=\d\)*\)\=\%(\W\|$\)\@=" +syn match gdResourceNumber "\%(^\|\W\)\@1<=\%(\d\%(_\=\d\)*\)\=\.\d\%(_\=\d\)*\%(e[+-]\=\d\%(_\=\d\)*\)\=\>" + +syn keyword gdResourceKeyword true false + +syn region gdResourceString + \ start=+[uU]\="+ end='"' skip='\\\\\|\\"' + \ contains=@Spell keepend + +" Section +syn region gdResourceSection matchgroup=gdResourceSectionDelimiter + \ start='^\[' end=']\s*$' + \ oneline keepend + \ contains=gdResourceSectionName,gdResourceSectionAttribute + +syn match gdResourceSectionName '\[\@<=\S\+' contained skipwhite +syn match gdResourceSectionAttribute '\S\+\s*=\s*\S\+' + \ skipwhite keepend contained + \ contains=gdResourceSectionAttributeName,gdResourceSectionAttributeValue +syn match gdResourceSectionAttributeName '\S\+\ze\(\s*=\)' skipwhite contained +syn match gdResourceSectionAttributeValue '\(=\s*\)\zs\S\+\ze' skipwhite + \ contained + \ contains=gdResourceString,gdResourceNumber,gdResourceKeyword + + +" Section body +syn match gdResourceAttribute '^\s*\S\+\s*=.*$' + \ skipwhite keepend + \ contains=gdResourceAttributeName,gdResourceAttributeValue + +syn match gdResourceAttributeName '\S\+\ze\(\s*=\)' skipwhite contained +syn match gdResourceAttributeValue '\(=\s*\)\zs.*$' skipwhite + \ contained + \ contains=gdResourceString,gdResourceNumber,gdResourceKeyword + + +hi def link gdResourceNumber Constant +hi def link gdResourceKeyword Constant +hi def link gdResourceSectionName Statement +hi def link gdResourceSectionDelimiter Delimiter +hi def link gdResourceSectionAttributeName Type +hi def link gdResourceAttributeName Identifier +hi def link gdResourceString String + +let b:current_syntax = "gdresource" + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/.config/vim/syntax/gdscript.vim b/.config/vim/syntax/gdscript.vim new file mode 100644 index 0000000..48af153 --- /dev/null +++ b/.config/vim/syntax/gdscript.vim @@ -0,0 +1,103 @@ +" Vim syntax file for Godot gdscript +" Language: gdscript +" Maintainer: Maxim Kim +" Website: https://github.com/habamax/vim-gdscript +" Filenames: *.gd + +if exists("b:current_syntax") + finish +endif + +let s:keepcpo = &cpo +set cpo&vim + +syntax sync maxlines=100 + +syn keyword gdscriptConditional if else elif match +syn keyword gdscriptRepeat for while break continue + +syn keyword gdscriptOperator is as not and or in + +syn match gdscriptBlockStart ":\s*$" + +syn keyword gdscriptKeyword null self owner parent tool +syn keyword gdscriptBoolean false true + +syn keyword gdscriptStatement remote master puppet remotesync mastersync puppetsync sync +syn keyword gdscriptStatement return pass +syn keyword gdscriptStatement static const enum +syn keyword gdscriptStatement breakpoint assert +syn keyword gdscriptStatement onready +syn keyword gdscriptStatement class_name extends + +syn keyword gdscriptType void bool int float String contained +syn match gdscriptType ":\s*\zs\h\w*" contained +syn match gdscriptType "->\s*\zs\h\w*" contained + +syn keyword gdscriptStatement var nextgroup=gdscriptTypeDecl skipwhite +syn keyword gdscriptStatement const nextgroup=gdscriptTypeDecl skipwhite +syn match gdscriptTypeDecl "\h\w*\s*:\s*\h\w*" contains=gdscriptType contained skipwhite +syn match gdscriptTypeDecl "->\s*\h\w*" contains=gdscriptType skipwhite + +syn keyword gdscriptStatement export nextgroup=gdscriptExportTypeDecl skipwhite +syn match gdscriptExportTypeDecl "(.\{-}[,)]" contains=gdscriptOperator,gdscriptType contained skipwhite + +syn keyword gdscriptStatement setget nextgroup=gdscriptSetGet,gdscriptSetGetSeparator skipwhite +syn match gdscriptSetGet "\h\w*" nextgroup=gdscriptSetGetSeparator display contained skipwhite +syn match gdscriptSetGetSeparator "," nextgroup=gdscriptSetGet display contained skipwhite + +syn keyword gdscriptStatement class func signal nextgroup=gdscriptFunctionName skipwhite +syn match gdscriptFunctionName "\h\w*" nextgroup=gdscriptFunctionParams display contained skipwhite +syn match gdscriptFunctionParams "(.*)" contains=gdscriptTypeDecl display contained skipwhite + +syn match gdscriptNode "\$\h\w*\%(/\h\w*\)*" + +syn match gdscriptComment "#.*$" contains=@Spell,gdscriptTodo + +syn region gdscriptString matchgroup=gdscriptQuotes + \ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1" + \ contains=gdscriptEscape,@Spell + +syn region gdscriptString matchgroup=gdscriptTripleQuotes + \ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend + \ contains=gdscriptEscape,@Spell + +syn match gdscriptEscape +\\[abfnrtv'"\\]+ contained +syn match gdscriptEscape "\\$" + +" Numbers +syn match gdscriptNumber "\<0x\%(_\=\x\)\+\>" +syn match gdscriptNumber "\<0b\%(_\=[01]\)\+\>" +syn match gdscriptNumber "\<\d\%(_\=\d\)*\>" +syn match gdscriptNumber "\<\d\%(_\=\d\)*\%(e[+-]\=\d\%(_\=\d\)*\)\=\>" +syn match gdscriptNumber "\<\d\%(_\=\d\)*\.\%(e[+-]\=\d\%(_\=\d\)*\)\=\%(\W\|$\)\@=" +syn match gdscriptNumber "\%(^\|\W\)\@1<=\%(\d\%(_\=\d\)*\)\=\.\d\%(_\=\d\)*\%(e[+-]\=\d\%(_\=\d\)*\)\=\>" + +" XXX, TODO, etc +syn keyword gdscriptTodo TODO XXX FIXME HACK NOTE BUG contained + +hi def link gdscriptStatement Statement +hi def link gdscriptKeyword Keyword +hi def link gdscriptConditional Conditional +hi def link gdscriptBoolean Boolean +hi def link gdscriptOperator Operator +hi def link gdscriptRepeat Repeat +hi def link gdscriptSetGet Function +hi def link gdscriptFunctionName Function +hi def link gdscriptBuiltinStruct Typedef +hi def link gdscriptComment Comment +hi def link gdscriptString String +hi def link gdscriptQuotes String +hi def link gdscriptTripleQuotes String +hi def link gdscriptEscape Special +hi def link gdscriptNode PreProc +hi def link gdscriptType Type +hi def link gdscriptNumber Number +hi def link gdscriptBlockStart Special +hi def link gdscriptTodo Todo + + +let b:current_syntax = "gdscript" + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/.config/vim/syntax/gdshader.vim b/.config/vim/syntax/gdshader.vim new file mode 100644 index 0000000..f0d9f7e --- /dev/null +++ b/.config/vim/syntax/gdshader.vim @@ -0,0 +1,57 @@ +" Vim syntax file for Godot shading language +" Language: gdshader +" Maintainer: Maxim Kim +" Filenames: *.gdshader + +if exists("b:current_syntax") + finish +endif + +syn keyword gdshaderConditional if else switch case default +syn keyword gdshaderRepeat for while do +syn keyword gdshaderStatement return discard +syn keyword gdshaderBoolean true false + +syn keyword gdshaderKeyword shader_type render_mode +syn keyword gdshaderKeyword in out inout +syn keyword gdshaderKeyword lowp mediump highp +syn keyword gdshaderKeyword uniform varying const +syn keyword gdshaderKeyword flat smooth + +syn keyword gdshaderType float vec2 vec3 vec4 +syn keyword gdshaderType uint uvec2 uvec3 uvec4 +syn keyword gdshaderType int ivec2 ivec3 ivec4 +syn keyword gdshaderType void bool +syn keyword gdshaderType bvec2 bvec3 bvec4 +syn keyword gdshaderType mat2 mat3 mat4 +syn keyword gdshaderType sampler2D isampler2D usampler2D samplerCube + +syn match gdshaderMember "\v<(\.)@<=[a-z_]+\w*>" +syn match gdshaderBuiltin "\v<[A-Z_]+[A-Z0-9_]*>" +syn match gdshaderFunction "\v<\w*>(\()@=" + +syn match gdshaderNumber "\v<\d+(\.)@!>" +syn match gdshaderFloat "\v<\d*\.\d+(\.)@!>" +syn match gdshaderFloat "\v<\d*\.=\d+(e-=\d+)@=" +syn match gdshaderExponent "\v(\d*\.=\d+)@<=e-=\d+>" + +syn match gdshaderComment "\v//.*$" contains=@Spell +syn region gdshaderComment start="/\*" end="\*/" contains=@Spell +syn keyword gdshaderTodo TODO FIXME XXX NOTE BUG HACK OPTIMIZE containedin=gdshaderComment + +hi def link gdshaderConditional Conditional +hi def link gdshaderRepeat Repeat +hi def link gdshaderStatement Statement +hi def link gdshaderBoolean Boolean +hi def link gdshaderKeyword Keyword +hi def link gdshaderMember Identifier +hi def link gdshaderBuiltin Identifier +hi def link gdshaderFunction Function +hi def link gdshaderType Type +hi def link gdshaderNumber Number +hi def link gdshaderFloat Float +hi def link gdshaderExponent Special +hi def link gdshaderComment Comment +hi def link gdshaderTodo Todo + +let b:current_syntax = "gdshader" diff --git a/.config/vim/syntax/gedcom.vim b/.config/vim/syntax/gedcom.vim new file mode 100644 index 0000000..cd09e0f --- /dev/null +++ b/.config/vim/syntax/gedcom.vim @@ -0,0 +1,53 @@ +" Vim syntax file +" Language: Gedcom +" Maintainer: Paul Johnson (pjcj@transeda.com) +" Version 1.059 - 23rd December 1999 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syntax case match + +syntax keyword gedcom_record ABBR ADDR ADOP ADR1 ADR2 AFN AGE AGNC ALIA ANCE +syntax keyword gedcom_record ANCI ANUL ASSO AUTH BAPL BAPM BARM BASM BIRT BLES +syntax keyword gedcom_record BLOB BURI CALN CAST CAUS CENS CHAN CHAR CHIL CHR +syntax keyword gedcom_record CHRA CITY CONC CONF CONL CONT COPR CORP CREM CTRY +syntax keyword gedcom_record DATA DEAT DESC DESI DEST DIV DIVF DSCR EDUC EMIG +syntax keyword gedcom_record ENDL ENGA EVEN FAM FAMC FAMF FAMS FCOM FILE FORM +syntax keyword gedcom_record GEDC GIVN GRAD HEAD HUSB IDNO IMMI INDI LANG MARB +syntax keyword gedcom_record MARC MARL MARR MARS MEDI NATI NATU NCHI NICK NMR +syntax keyword gedcom_record NOTE NPFX NSFX OBJE OCCU ORDI ORDN PAGE PEDI PHON +syntax keyword gedcom_record PLAC POST PROB PROP PUBL QUAY REFN RELA RELI REPO +syntax keyword gedcom_record RESI RESN RETI RFN RIN ROLE SEX SLGC SLGS SOUR +syntax keyword gedcom_record SPFX SSN STAE STAT SUBM SUBN SURN TEMP TEXT TIME +syntax keyword gedcom_record TITL TRLR TYPE VERS WIFE WILL +syntax keyword gedcom_record DATE nextgroup=gedcom_date +syntax keyword gedcom_record NAME nextgroup=gedcom_name + +syntax case ignore + +syntax region gedcom_id start="@" end="@" oneline contains=gedcom_ii, gedcom_in +syntax match gedcom_ii "\I\+" contained nextgroup=gedcom_in +syntax match gedcom_in "\d\+" contained +syntax region gedcom_name start="" end="$" skipwhite oneline contains=gedcom_cname, gedcom_surname contained +syntax match gedcom_cname "\i\+" contained +syntax match gedcom_surname "/\(\i\|\s\)*/" contained +syntax match gedcom_date "\d\{1,2}\s\+\(jan\|feb\|mar\|apr\|may\|jun\|jul\|aug\|sep\|oct\|nov\|dec\)\s\+\d\+" +syntax match gedcom_date ".*" contained + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link gedcom_record Statement +hi def link gedcom_id Comment +hi def link gedcom_ii PreProc +hi def link gedcom_in Type +hi def link gedcom_name PreProc +hi def link gedcom_cname Type +hi def link gedcom_surname Identifier +hi def link gedcom_date Constant + + +let b:current_syntax = "gedcom" diff --git a/.config/vim/syntax/gel.vim b/.config/vim/syntax/gel.vim new file mode 100644 index 0000000..5f38002 --- /dev/null +++ b/.config/vim/syntax/gel.vim @@ -0,0 +1,19 @@ +" Vim syntax file +" Language: TI Code Composer Studio General Extension Language +" Document: https://downloads.ti.com/ccs/esd/documents/users_guide/ccs_debug-gel.html +" Maintainer: Wu, Zhenyu +" Last Change: 2024 Dec 25 + +if exists("b:current_syntax") + finish +endif + +runtime! syntax/cpp.vim + +syn keyword gelStatement StartUp GEL_AddInputFile GEL_AddOutputFile GEL_AdvancedReset GEL_AsmStepInto GEL_AsmStepOver GEL_BreakPtAdd GEL_BreakPtDel GEL_BreakPtDisable GEL_BreakPtReset GEL_CancelTimer GEL_Connect GEL_Dialog GEL_DisableFileOutput GEL_DisableRealtime GEL_Disconnect GEL_EnableClock GEL_EnableFileOutput GEL_EnableRealtime GEL_EnableZeroFill GEL_EvalOnTarget GEL_GetBoolDebugProperty GEL_GetBoolDriverProperty GEL_GetBoolTargetDbProperty GEL_GetNumericDebugProperty GEL_GetNumericDriverProperty GEL_GetNumericTargetDbProperty GEL_GetStringDebugProperty GEL_GetStringDriverProperty GEL_GetStringTargetDbProperty GEL_Go GEL_Halt GEL_HandleTargetError GEL_HWBreakPtAdd GEL_HWBreakPtDel GEL_HWBreakPtDisable GEL_HWBreakPtReset GEL_IsConnected GEL_IsHalted GEL_IsInRealtimeMode GEL_IsResetSupported GEL_IsTimerSet GEL_Load GEL_LoadBin GEL_LoadGel GEL_LoadProgramOnly GEL_MapAdd GEL_MapAddStr GEL_MapDelete GEL_MapOff GEL_MapOn GEL_MapReset GEL_MatchesConnection GEL_MemoryFill GEL_MemoryListSupportedTypes GEL_MemoryLoad GEL_MemoryLoadData GEL_MemorySave GEL_MemorySaveBin GEL_MemorySaveCoff GEL_MemorySaveData GEL_MemorySaveHex GEL_PatchAssembly GEL_ProbePtAdd GEL_ProbePtDel GEL_ProbePtDisable GEL_ProbePtReset GEL_ReConnect GEL_RefreshWindows GEL_Reload GEL_RemoveDebugState GEL_RemoveInputFile GEL_RemoveOutputFile GEL_Reset GEL_Restart GEL_RestoreDebugState GEL_Run GEL_RunF GEL_SetBlockResetMode GEL_SetBoolDebugProperty GEL_SetClockEvent GEL_SetNumericDebugProperty GEL_SetSemihostingMainArgs GEL_SetStringDebugProperty GEL_SetTimer GEL_SetWaitInResetMode GEL_SrcStepInto GEL_SrcStepOver GEL_StepInto GEL_StepOut GEL_StepOver GEL_StrCat GEL_StrLen GEL_SubStr GEL_SymbolAdd GEL_SymbolAddOffset GEL_SymbolAddRel GEL_SymbolDisable GEL_SymbolEnable GEL_SymbolHideSection GEL_SymbolLoad GEL_SymbolLoadOffset GEL_SymbolLoadRel GEL_SymbolRemove GEL_SymbolShowSection GEL_SyncHalt GEL_SyncRun GEL_SyncStepInto GEL_SyncStepOut GEL_SyncStepOver GEL_System GEL_TargetTextOut GEL_TextOut GEL_Trace GEL_UnloadAllGels GEL_UnloadAllSymbols GEL_UnloadGel GEL_VerifyBinProgram GEL_VerifyProgram OnChildRunning OnFileLoaded OnHalt OnPreFileLoaded OnPreReset OnPreTargetConnect OnReset OnResetDetected OnRestart OnTargetConnect +syn keyword gelModifier hotmenu menuitem + +hi def link gelStatement Statement +hi def link gelModifier Type + +let b:current_syntax = "gel" diff --git a/.config/vim/syntax/gemtext.vim b/.config/vim/syntax/gemtext.vim new file mode 100644 index 0000000..8c2bd29 --- /dev/null +++ b/.config/vim/syntax/gemtext.vim @@ -0,0 +1,24 @@ +" Vim syntax file +" Language: Gemtext markup language +" Maintainer: Suneel Freimuth +" Latest Revision: 2020-11-21 +" Filenames: *.gmi + +if exists('b:current_syntax') + finish +endif + +syntax match Heading /^#\{1,3}.\+$/ +syntax match List /^\* / +syntax match LinkURL /^=>\s*\S\+/ +syntax match Quote /^>.\+/ +syntax region Preformatted start=/^```/ end=/```/ + +highlight default link Heading Special +highlight default link List Statement +highlight default link LinkURL Underlined +highlight default link Quote Constant +highlight default link Preformatted Identifier + +let b:current_syntax = 'gemtext' + diff --git a/.config/vim/syntax/gift.vim b/.config/vim/syntax/gift.vim new file mode 100644 index 0000000..3f8d631 --- /dev/null +++ b/.config/vim/syntax/gift.vim @@ -0,0 +1,216 @@ +" Vim syntax file +" +" Language: Moodle GIFT (General Import Format Template) +" Maintainer: Selim Temizer (http://selimtemizer.com) +" Creation: November 28, 2020 +" Latest Revision: December 21, 2020 +" Note: The order of entities in this file is important! + +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + + +setlocal conceallevel=1 + +"----------------------------------------------- +" GIFT entities + +syn match giftS "\~" contained "GIFT special characters +syn match giftS "=" contained +syn match giftS "#" contained +syn match giftS "{" contained +syn match giftS "}" contained +syn match giftS ":" contained + +syn match giftES "\\\~" contained conceal cchar=~ "GIFT escaped special characters +syn match giftES "\\=" contained conceal cchar== +syn match giftES "\\#" contained conceal cchar=# +syn match giftES "\\{" contained conceal cchar={ +syn match giftES "\\}" contained conceal cchar=} +syn match giftES "\\:" contained conceal cchar=: + +syn match giftEN "\\n" contained conceal cchar=n "GIFT escaped newline + +syn match giftFormat "\[html]" contained "GIFT formats +syn match giftFormat "\[plain]" contained +syn match giftFormat "\[moodle]" contained +syn match giftFormat "\[markdown]" contained + +"-------------------------------------------------------- +" HTML entities + +syn match giftH "<" contained "HTML characters that might need to be handled/escaped +syn match giftH ">" contained +syn match giftH "&" contained + +syn match giftEH "<" contained conceal cchar=< "HTML escaped characters +syn match giftEH ">" contained conceal cchar=> +syn match giftEH "&" contained conceal cchar=& +syn match giftEH " " contained conceal cchar=_ + +"------------------------------------------------------- +" Answer components: Feedback and general feedback + +syn match giftFB "#\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|#\|####\|}\)" contained contains=giftF "Feedback block +syn match giftF "#\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|#\|####\|}\)" contained contains=@giftCEF "Feedback + +syn match giftGFB "####\_.\{-}\(\_^\|[^\\]\)\ze}" contained contains=giftGF "General feedback block +syn match giftGF "####\zs\_.\{-}\(\_^\|[^\\]\)\ze}" contained contains=@giftCEF "General feedback + +"------------------------------------------------------ +" Answer components: Other components + +syn keyword giftTF T TRUE F FALSE contained + +syn match giftNum1 "[-+]\=[.0-9]\+" contained "Something matching a number + +syn match giftNum2 "[-+]\=[.0-9]\+\s*:\s*[-+]\=[.0-9]\+" contained contains=giftNum2D "Number with error margin +syn match giftNum2D ":" contained "Associated delimiter + +syn match giftNum3 "[-+]\=[.0-9]\+\s*\.\.\s*[-+]\=[.0-9]\+" contained contains=giftNum3D "Number as min/max range +syn match giftNum3D "\.\." contained "Associated delimiter + +syn match giftWeightB "%-*[0-9]\{1,2}\.\?[0-9]*%" contained contains=giftWeight "Weight block +syn match giftWeight "%\zs-*[0-9]\{1,2}\.\?[0-9]*\ze%" contained "Weight + +"----------------------------------------------------- +" Answer choices + +syn match giftWrongNum "\~\zs\_.\{-}\(\_^\|[^\\]\)\ze\(####\|}\)" contained contains=@giftCEFF "Wrong numeric choice +syn match giftRightNum "=\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)" contained contains=@giftCEFFW,@giftNums "Right numeric choice + +syn match giftWrong "\~\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)" contained contains=@giftCEFFW "Wrong choice +syn match giftRight "=\zs\_.\{-}\(\ze->\|\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)\)" contained contains=@giftCEFFW "Right choice +syn match giftMatchB "->\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)" contained contains=giftMatch "Match choice block +syn match giftMatch "->\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)" contained contains=@giftCE "Match choice + +"---------------------------------------------------- +" Answer + +syn match giftAnswer "{\_.\{-}\(\_^\|[^\\]\)}" contained keepend contains=@giftA "General answer +syn match giftAnswer "{}" contained "Minimal answer + +syn match giftAnswerNum "{\_[[:space:]]*#\_[^#]\_.\{-}\(\_^\|[^\\]\)}" contained keepend contains=@giftANum "Numeric answer +syn match giftAnswerNumD "{\zs\_[[:space:]]*#" contained "Associated delimiter + +"--------------------------------------------------- +" Question + +" The first pattern matches the last question at the end of the file (in case there is no empty line coming after). +" However, it slows down parsing (and especially scrolling up), therefore it is commented out. + +"syn match giftQuestion "[^{[:space:]]\_.\{-}\%$" keepend contains=@giftCEF,giftAnswer,giftAnswerNum + syn match giftQuestion "[^{[:space:]]\_.\{-}\n\(\s*\n\)\+" keepend contains=@giftCEF,giftAnswer,giftAnswerNum + +"-------------------------------------------------- +" Question name + +syn match giftName "::\_.\{-}::" contains=@giftCE,giftNameD "Question name +syn match giftNameD "::" contained "Associated delimiter + +"------------------------------------------------- +" Category + +syn match giftCategoryB "^\s*\$CATEGORY:.*\n\+" contains=giftCategory "Category block +syn match giftCategory "^\s*\$CATEGORY:\zs.*\ze\n" contained "Category + +"------------------------------------------------ +" Comments (may need to be the last entity) + +syn keyword giftTodo FIXME TODO NOTE FIX XXX contained + +syn match giftIdB "\[id:\(\\]\|[^][:cntrl:]]\)\+]" contained contains=giftId "Id block +syn match giftId "\[id:\zs\(\\]\|[^][:cntrl:]]\)\+\ze]" contained "Id + +syn match giftTagB "\[tag:\(\\]\|[^]<>`[:cntrl:]]\)\+]" contained contains=giftTag "Tag block +syn match giftTag "\[tag:\zs\(\\]\|[^]<>`[:cntrl:]]\)\+\ze]" contained "Tag + +syn match giftComment "^\s*//.*" contains=giftTodo,giftIdB,giftTagB + +"----------------------------------------------- +" Clusters + +"Comments and entities (to be escaped) +syn cluster giftCE contains=giftComment,giftS,giftES,giftEN,giftH,giftEH + +"The above plus format +syn cluster giftCEF contains=@giftCE,giftFormat + +"The above plus feedback block +syn cluster giftCEFF contains=@giftCEF,giftFB + +"The above plus weight block +syn cluster giftCEFFW contains=@giftCEFF,giftWeightB + +"Possible numerical representations +syn cluster giftNums contains=giftNum1,giftNum2,giftNum3 + +"Possible contents of answers +syn cluster giftA contains=giftComment,giftTF,giftWrong,giftRight,giftMatchB,giftFB,giftGFB + +"Possible contents of numerical answers +syn cluster giftANum contains=giftAnswerNumD,giftComment,@giftNums,giftWrongNum,giftRightNum,giftFB,giftGFB + +"----------------------------------------------- + +let b:current_syntax = "gift" + +"----------------------------------------------- + +hi Conceal ctermbg=NONE ctermfg=Blue guibg=NONE guifg=Blue +hi Feedback ctermbg=NONE ctermfg=DarkCyan guibg=NONE guifg=DarkCyan +hi GFeedback ctermbg=NONE ctermfg=DarkGreen guibg=NONE guifg=DarkGreen +hi WeightB ctermbg=NONE ctermfg=DarkYellow guibg=NONE guifg=DarkYellow + +"----------------------------------------------- + +hi def link giftS Error +hi def link giftES Conceal +hi def link giftEN Conceal +hi def link giftFormat LineNr + +hi def link giftH Error +hi def link giftEH Conceal + +hi def link giftFB PreProc +hi def link giftF Feedback +hi def link giftGFB Title +hi def link giftGF GFeedback + +hi def link giftTF Question +hi def link giftNum1 Question +hi def link giftNum2 Question +hi def link giftNum2D Special +hi def link giftNum3 Question +hi def link giftNum3D Special +hi def link giftWeightB WeightB +hi def link giftWeight Identifier + +hi def link giftWrongNum Constant +hi def link giftRightNum Question +hi def link giftWrong Constant +hi def link giftRight Question +hi def link giftMatchB ModeMsg +hi def link giftMatch Constant + +hi def link giftAnswer MoreMsg +hi def link giftAnswerNum MoreMsg +hi def link giftAnswerNumD Identifier + +hi def link giftQuestion Identifier + +hi def link giftName PreProc +hi def link giftNameD Directory + +hi def link giftCategoryB LineNr +hi def link giftCategory Directory + +hi def link giftTodo Todo +hi def link giftIdB LineNr +hi def link giftId Title +hi def link giftTagB LineNr +hi def link giftTag Constant +hi def link giftComment Comment diff --git a/.config/vim/syntax/git.vim b/.config/vim/syntax/git.vim new file mode 100644 index 0000000..51eb812 --- /dev/null +++ b/.config/vim/syntax/git.vim @@ -0,0 +1,111 @@ +" Vim syntax file +" Language: generic git output +" Maintainer: Tim Pope +" Last Change: 2023 Dec 28 + +if exists("b:current_syntax") + finish +endif + +syn case match +syn sync minlines=50 + +syn include @gitDiff syntax/diff.vim + +syn region gitHead start=/\%^\%(tag \|tree \|object \)\@=/ end=/^$/ contains=@NoSpell +syn region gitHead start=/\%(^commit\%( \x\{4,\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/ contains=@NoSpell +" git log --oneline +" minimize false positives by verifying contents of buffer +if getline(1) =~# '^\x\{7,\} ' && getline('$') =~# '^\x\{7,\} ' + syn match gitHashAbbrev /^\x\{7,\} \@=/ contains=@NoSpell +elseif getline(1) =~# '^[|\/\\_ ]\{-\}\*[|\/\\_ ]\{-\} \x\{7,\} ' + syn match gitHashAbbrev /^[|\/\\_ ]\{-\}\*[|\/\\_ ]\{-\} \zs\x\{7,\} \@=/ contains=@NoSpell +endif +" git log --graph +syn region gitGraph start=/\%(^[|\/\\_ ]*\*[|\/\\_ ]\{-\} commit\%( \x\{4,\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^\%([|\/\\_ ]*$\)\@=/ contains=@NoSpell +" git blame --porcelain +syn region gitHead start=/\%(^\x\{40,\} \d\+ \d\+\%( \d\+\)\=$\)\@=/ end=/^\t\@=/ contains=@NoSpell +" git ls-tree +syn match gitMode /^\d\{6\}\%( \%(blob\|tree\) \x\{4,\}\t\)\@=/ nextgroup=gitType skipwhite contains=@NoSpell +" git ls-files --stage +syn match gitMode /^\d\{6\}\%( \x\{4,\} [0-3]\t\)\@=/ nextgroup=gitHashStage skipwhite contains=@NoSpell +" .git/HEAD, .git/refs/ +syn match gitKeyword /\%^ref: \@=/ nextgroup=gitReference skipwhite contains=@NoSpell +syn match gitHash /\%^\x\{40,}\%$/ skipwhite contains=@NoSpell +" .git/logs/ +syn match gitReflog /^\x\{40,\} \x\{40,\} .\{-\}\d\+\s-\d\{4\}\t.*/ skipwhite contains=@NoSpell,gitReflogOld + +syn region gitDiff start=/^\%(diff --git \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold +syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\) \|$\)\@=/ contains=@gitDiff + +syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold +syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff +syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge +syn match gitDiffAdded "{+[^}]*+}" contained containedin=gitDiff +syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge +syn match gitDiffRemoved "\[-[^]]*-\]" contained containedin=gitDiff + +syn match gitKeyword /^commit \@=/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite contains=@NoSpell +syn match gitKeyword /^\%(object\|tree\|parent\|encoding\|gpgsig\%(-\w\+\)\=\|previous\) \@=/ contained containedin=gitHead nextgroup=gitHash skipwhite contains=@NoSpell +syn match gitKeyword /^Merge:/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite contains=@NoSpell +syn match gitIdentityKeyword /^\%(author\|committer\|tagger\) \@=/ contained containedin=gitHead nextgroup=gitIdentity skipwhite contains=@NoSpell +syn match gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite contains=@NoSpell +syn match gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite contains=@NoSpell + +syn match gitKeyword /^[*|\/\\_ ]\+\zscommit \@=/ contained containedin=gitGraph nextgroup=gitHashAbbrev skipwhite contains=@NoSpell +syn match gitKeyword /^[|\/\\_ ]\+\zs\%(object\|tree\|parent\|encoding\|gpgsig\%(-\w\+\)\=\|previous\) \@=/ contained containedin=gitGraph nextgroup=gitHash skipwhite contains=@NoSpell +syn match gitKeyword /^[|\/\\_ ]\+\zsMerge:/ contained containedin=gitGraph nextgroup=gitHashAbbrev skipwhite contains=@NoSpell +syn match gitIdentityKeyword /^[|\/\\_ ]\+\zs\%(author\|committer\|tagger\) \@=/ contained containedin=gitGraph nextgroup=gitIdentity skipwhite contains=@NoSpell +syn match gitIdentityHeader /^[|\/\\_ ]\+\zs\%(Author\|Commit\|Tagger\):/ contained containedin=gitGraph nextgroup=gitIdentity skipwhite contains=@NoSpell +syn match gitDateHeader /^[|\/\\_ ]\+\zs\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitGraph nextgroup=gitDate skipwhite contains=@NoSpell + +syn match gitKeyword /^type \@=/ contained containedin=gitHead nextgroup=gitType skipwhite contains=@NoSpell +syn match gitKeyword /^\%(summary\|boundary\|filename\|\%(author\|committer\)-\%(time\|tz\)\) \@=/ contained containedin=gitHead skipwhite contains=@NoSpell +syn match gitKeyword /^tag \@=/ contained containedin=gitHead nextgroup=gitReference skipwhite contains=@NoSpell +syn match gitIdentityKeyword /^\%(author\|committer\)-mail \@=/ contained containedin=gitHead nextgroup=gitEmail skipwhite contains=@NoSpell +syn match gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite contains=@NoSpell +syn match gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite contains=@NoSpell +syn match gitReflogMiddle /\S\+@{\d\+} (/he=e-2 nextgroup=gitIdentity contains=@NoSpell + +syn match gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite contains=@NoSpell +syn region gitEmail matchgroup=gitEmailDelimiter start=// keepend oneline contained containedin=gitIdentity contains=@NoSpell +syn match gitDate /\<\u\l\l \u\l\l \d\=\d \d\d:\d\d:\d\d \d\d\d\d [+-]\d\d\d\d/ contained contains=@NoSpell +syn match gitDate /-\=\d\+ [+-]\d\d\d\d\>/ contained contains=@NoSpell +syn match gitDate /\<\d\+ \l\+ ago\>/ contained contains=@NoSpell +syn match gitType /\<\%(tag\|commit\|tree\|blob\)\>/ contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell +syn match gitReference /\S\+\S\@!/ contained contains=@NoSpell +syn match gitHash /\<\x\{40,\}\>/ contained nextgroup=gitIdentity,gitHash skipwhite contains=@NoSpell +syn match gitReflogOld /^\x\{40,\} \@=/ contained nextgroup=gitReflogNew skipwhite contains=@NoSpell +syn match gitReflogNew /\<\x\{40,\} \@=/ contained nextgroup=gitIdentity skipwhite contains=@NoSpell +syn match gitHashAbbrev /\<\x\{4,\}\>/ contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell +syn match gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell +syn match gitHashStage /\<\x\{4,\}\>/ contained nextgroup=gitStage skipwhite contains=@NoSpell +syn match gitStage /\<\d\t\@=/ contained contains=@NoSpell + + +syn match gitNotesHeader /^Notes:\ze\n / + +hi def link gitDateHeader gitIdentityHeader +hi def link gitIdentityHeader gitIdentityKeyword +hi def link gitIdentityKeyword Label +hi def link gitNotesHeader gitKeyword +hi def link gitReflogHeader gitKeyword +hi def link gitKeyword Keyword +hi def link gitIdentity String +hi def link gitEmailDelimiter Delimiter +hi def link gitEmail Special +hi def link gitDate Number +hi def link gitMode Number +hi def link gitHashStage gitHash +hi def link gitHashAbbrev gitHash +hi def link gitReflogOld gitHash +hi def link gitReflogNew gitHash +hi def link gitHash Identifier +hi def link gitReflogMiddle gitReference +hi def link gitReference Function +hi def link gitStage gitType +hi def link gitType Type +hi def link gitDiffAdded diffAdded +hi def link gitDiffRemoved diffRemoved + +let b:current_syntax = "git" diff --git a/.config/vim/syntax/gitattributes.vim b/.config/vim/syntax/gitattributes.vim new file mode 100644 index 0000000..b6d997f --- /dev/null +++ b/.config/vim/syntax/gitattributes.vim @@ -0,0 +1,63 @@ +" Vim syntax file +" Language: git attributes +" Maintainer: ObserverOfTime +" Filenames: .gitattributes, *.git/info/attributes +" Last Change: 2022 Sep 09 + +if exists('b:current_syntax') + finish +endif + +let s:cpo_save = &cpoptions +set cpoptions&vim + +" Comment +syn keyword gitattributesTodo contained TODO FIXME XXX +syn match gitattributesComment /^\s*#.*/ contains=gitattributesTodo + +" Pattern +syn match gitattributesPattern /^\s*#\@!\(".\+"\|\S\+\)/ skipwhite + \ nextgroup=gitattributesAttrPrefixed,gitattributesAttrAssigned skipwhite + \ contains=gitattributesGlob,gitattributesRange,gitattributesSeparator +syn match gitattributesGlob /\\\@1 +" Filenames: *.git/COMMIT_EDITMSG +" Last Change: 2023 Dec 28 + +if exists("b:current_syntax") + finish +endif + +scriptencoding utf-8 + +syn case match +syn sync minlines=50 +syn sync linebreaks=1 + +if has("spell") + syn spell toplevel +endif + +syn include @gitcommitDiff syntax/diff.vim +syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|@@\@!\|[^[:alnum:]\ +-]\S\@!\)\@=/ fold contains=@gitcommitDiff + +if get(g:, 'gitcommit_summary_length') < 0 + syn match gitcommitSummary "^.*$" contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell +elseif get(g:, 'gitcommit_summary_length', 1) > 0 + exe 'syn match gitcommitSummary "^.*\%<' . (get(g:, 'gitcommit_summary_length', 50) + 1) . 'v." contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell' +endif +syn match gitcommitOverflow ".*" contained contains=@Spell +syn match gitcommitBlank "^.\+" contained contains=@Spell +syn match gitcommitFirstLine "\%^.*" nextgroup=gitcommitBlank,gitcommitComment skipnl + +let s:scissors = 0 +let s:l = search('^[#;@!$%^&|:] -\{24,\} >8 -\{24,\}$', 'cnW', '', 100) +if s:l == 0 + let s:l = line('$') +elseif getline(s:l)[0] !=# getline(s:l - 1)[0] + let s:scissors = 1 +endif +let s:comment = escape((matchstr(getline(s:l), '^[#;@!$%^&|:]\S\@!') . '#')[0], '^$.*[]~\"/') + +if s:scissors + let s:comment .= ' -\{24,\} >8 -\{24,\}$' + exe 'syn region gitcommitComment start="^' . s:comment . '" end="\%$" contains=gitcommitDiff' +else + exe 'syn match gitcommitComment "^' . s:comment . '.*"' +endif +exe 'syn match gitcommitTrailers "\n\@<=\n\%([[:alnum:]-]\+\s*:.*\|(cherry picked from commit .*\)\%(\n\s.*\|\n[[:alnum:]-]\+\s*:.*\|\n(cherry picked from commit .*\)*\%(\n\n*\%(' . s:comment . '\)\|\n*\%$\)\@="' + +unlet s:l s:comment s:scissors + +syn match gitcommitTrailerToken "^[[:alnum:]-]\+\s*:" contained containedin=gitcommitTrailers + +syn match gitcommitHash "\<\x\{40,}\>" contains=@NoSpell display +syn match gitcommitOnBranch "\%(^. \)\@<=On branch" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite +syn match gitcommitOnBranch "\%(^. \)\@<=Your branch .\{-\} '" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite +syn match gitcommitBranch "[^ ']\+" contained +syn match gitcommitNoBranch "\%(^. \)\@<=Not currently on any branch." contained containedin=gitcommitComment +syn match gitcommitHeader "\%(^. \)\@<=\S.*[::]\%(\n^$\)\@!$" contained containedin=gitcommitComment +syn region gitcommitAuthor matchgroup=gitCommitHeader start=/\%(^. \)\@<=\%(Author\|Committer\|Date\):/ end=/$/ keepend oneline contained containedin=gitcommitComment transparent +syn match gitcommitHeader "\%(^. \)\@<=commit\%( \x\{40,\}$\)\@=" contained containedin=gitcommitComment nextgroup=gitcommitHash skipwhite +syn match gitcommitNoChanges "\%(^. \)\@<=No changes$" contained containedin=gitcommitComment + +syn match gitcommitType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/::]*[^[:punct:][:space:]][::]\ze "he=e-1 contained containedin=gitcommitComment nextgroup=gitcommitFile skipwhite +syn match gitcommitFile ".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitArrow +syn match gitcommitArrow " -> " contained nextgroup=gitcommitFile +syn match gitcommitUntrackedFile "\%(^.\t\)\@<=[^::/]*\%(/.*\)\=$" contained containedin=gitcommitComment + +syn region gitcommitUntracked start=/^\z(.\) Untracked files:$/ end=/^\z1\=$\|^\z1\@!/ contains=gitcommitHeader containedin=gitcommitComment containedin=gitcommitComment contained transparent fold +syn region gitcommitDiscarded start=/^\z(.\) Change\%(s not staged for commit\|d but not updated\):$/ end=/^\z1\=$\|^\z1\@!/ contains=gitcommitHeader,gitcommitDiscardedType containedin=gitcommitComment containedin=gitcommitComment contained transparent fold +syn region gitcommitSelected start=/^\z(.\) Changes to be committed:$/ end=/^\z1$\|^\z1\@!/ contains=gitcommitHeader,gitcommitSelectedType containedin=gitcommitComment containedin=gitcommitComment contained transparent fold +syn region gitcommitUnmerged start=/^\z(.\) Unmerged paths:$/ end=/^\z1\=$\|^\z1\@!/ contains=gitcommitHeader,gitcommitUnmergedType containedin=gitcommitComment containedin=gitcommitComment contained transparent fold + +syn match gitcommitUntrackedFile "\%(^.\t\)\@<=.*" contained containedin=gitcommitUntracked + +syn match gitcommitDiscardedType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/::]*[^[:punct:][:space:]][::]\ze "he=e-1 contained nextgroup=gitcommitDiscardedFile skipwhite +syn match gitcommitSelectedType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/::]*[^[:punct:][:space:]][::]\ze "he=e-1 contained nextgroup=gitcommitSelectedFile skipwhite +syn match gitcommitUnmergedType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/::]*[^[:punct:][:space:]][::]\ze "he=e-1 contained nextgroup=gitcommitUnmergedFile skipwhite +syn match gitcommitDiscardedFile "\S.\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitDiscardedArrow +syn match gitcommitSelectedFile "\S.\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitSelectedArrow +syn match gitcommitUnmergedFile "\S.\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitUnmergedArrow +syn match gitcommitDiscardedArrow " -> " contained nextgroup=gitcommitDiscardedFile +syn match gitcommitSelectedArrow " -> " contained nextgroup=gitcommitSelectedFile +syn match gitcommitUnmergedArrow " -> " contained nextgroup=gitcommitUnmergedFile + +hi def link gitcommitSummary Keyword +hi def link gitcommitTrailerToken Label +hi def link gitcommitComment Comment +hi def link gitcommitHash Identifier +hi def link gitcommitOnBranch Comment +hi def link gitcommitBranch Special +hi def link gitcommitNoBranch gitCommitBranch +hi def link gitcommitDiscardedType gitcommitType +hi def link gitcommitSelectedType gitcommitType +hi def link gitcommitUnmergedType gitcommitType +hi def link gitcommitType Type +hi def link gitcommitNoChanges gitcommitHeader +hi def link gitcommitHeader PreProc +hi def link gitcommitUntrackedFile gitcommitFile +hi def link gitcommitDiscardedFile gitcommitFile +hi def link gitcommitSelectedFile gitcommitFile +hi def link gitcommitUnmergedFile gitcommitFile +hi def link gitcommitFile Constant +hi def link gitcommitDiscardedArrow gitcommitArrow +hi def link gitcommitSelectedArrow gitcommitArrow +hi def link gitcommitUnmergedArrow gitcommitArrow +hi def link gitcommitArrow gitcommitComment +"hi def link gitcommitOverflow Error +hi def link gitcommitBlank Error + +let b:current_syntax = "gitcommit" diff --git a/.config/vim/syntax/gitconfig.vim b/.config/vim/syntax/gitconfig.vim new file mode 100644 index 0000000..e5eaf10 --- /dev/null +++ b/.config/vim/syntax/gitconfig.vim @@ -0,0 +1,36 @@ +" Vim syntax file +" Language: git config file +" Maintainer: Tim Pope +" Filenames: gitconfig, .gitconfig, *.git/config +" Last Change: 2019 Dec 05 + +if exists("b:current_syntax") + finish +endif + +syn case ignore +syn sync minlines=10 + +syn match gitconfigComment "[#;].*" contains=@Spell +syn match gitconfigSection "\%(^\s*\)\@<=\[[a-z0-9.-]\+\]" +syn match gitconfigSection '\%(^\s*\)\@<=\[[a-z0-9.-]\+ \+\"\%([^\\"]\|\\.\)*"\]' +syn match gitconfigVariable "\%(^\s*\)\@<=\a[a-z0-9-]*\%(\s*\%([=#;]\|$\)\)\@=" nextgroup=gitconfigAssignment skipwhite +syn region gitconfigAssignment matchgroup=gitconfigNone start=+=\s*+ skip=+\\+ end=+\s*$+ contained contains=gitconfigBoolean,gitconfigNumber,gitConfigString,gitConfigEscape,gitConfigError,gitconfigComment keepend +syn keyword gitconfigBoolean true false yes no contained +syn match gitconfigNumber "\<\d\+\>" contained +syn region gitconfigString matchgroup=gitconfigDelim start=+"+ skip=+\\+ end=+"+ matchgroup=gitconfigError end=+[^\\"]\%#\@!$+ contained contains=gitconfigEscape,gitconfigEscapeError +syn match gitconfigError +\\.+ contained +syn match gitconfigEscape +\\[\\"ntb]+ contained +syn match gitconfigEscape +\\$+ contained + +hi def link gitconfigComment Comment +hi def link gitconfigSection Keyword +hi def link gitconfigVariable Identifier +hi def link gitconfigBoolean Boolean +hi def link gitconfigNumber Number +hi def link gitconfigString String +hi def link gitconfigDelim Delimiter +hi def link gitconfigEscape Special +hi def link gitconfigError Error + +let b:current_syntax = "gitconfig" diff --git a/.config/vim/syntax/gitignore.vim b/.config/vim/syntax/gitignore.vim new file mode 100644 index 0000000..8e6d098 --- /dev/null +++ b/.config/vim/syntax/gitignore.vim @@ -0,0 +1,29 @@ +" Vim syntax file +" Language: git ignore +" Maintainer: ObserverOfTime +" Filenames: .gitignore, *.git/info/exclude +" Last Change: 2022 Sep 10 + +if exists('b:current_syntax') + finish +endif + +" Comment +syn keyword gitignoreTodo contained TODO FIXME XXX +syn match gitignoreComment /^#.*/ contains=gitignoreTodo + +" Pattern +syn match gitignorePattern /^#\@!.*$/ contains=gitignoreNegation,gitignoreGlob,gitignoreRange,gitignoreSeparator +syn match gitignoreNegation /^!/ contained +syn match gitignoreGlob /\\\@1 +" (former Maintainer: Teemu Matilainen ) +" Last Change: 2017 Oct 05 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" this seems to be the best way, for now. +syntax sync fromstart + +" ---- common stuff + +syn match gitoliteGroup '@\S\+' + +syn match gitoliteComment '#.*' contains=gitoliteTodo +syn keyword gitoliteTodo TODO FIXME XXX NOT contained + +" ---- main section + +" catch template-data syntax appearing outside template-data section +syn match gitoliteRepoError '^\s*repo.*=' +syn match gitoliteRepoError '^\s*\S\+\s*=' " this gets overridden later when first word is a perm, don't worry + +" normal gitolite group and repo lines +syn match gitoliteGroupLine '^\s*@\S\+\s*=\s*\S.*$' contains=gitoliteGroup,gitoliteComment +syn match gitoliteRepoLine '^\s*repo\s\+[^=]*$' contains=gitoliteRepo,gitoliteGroup,gitoliteComment +syn keyword gitoliteRepo repo contained + +syn keyword gitoliteSpecialRepo CREATOR + +" normal gitolite rule lines +syn match gitoliteRuleLine '^\s*\(-\|C\|R\|RW+\?C\?D\?\)\s[^#]*' contains=gitoliteRule,gitoliteCreateRule,gitoliteDenyRule,gitoliteRefex,gitoliteUsers,gitoliteGroup +syn match gitoliteRule '\(^\s*\)\@<=\(-\|C\|R\|RW+\?C\?D\?\)\s\@=' contained +syn match gitoliteRefex '\(^\s*\(-\|R\|RW+\?C\?D\?\)\s\+\)\@<=\S.\{-}\(\s*=\)\@=' contains=gitoliteSpecialRefex +syn match gitoliteSpecialRefex 'NAME/' +syn match gitoliteSpecialRefex '/USER/' +syn match gitoliteCreateRule '\(^\s*C\s.*=\s*\)\@<=\S[^#]*[^# ]' contained contains=gitoliteGroup +syn match gitoliteDenyRule '\(^\s*-\s.*=\s*\)\@<=\S[^#]*[^# ]' contained + +" normal gitolite config (and similar) lines +syn match gitoliteConfigLine '^\s*\(config\|option\|include\|subconf\)\s[^#]*' contains=gitoliteConfigKW,gitoliteConfigKey,gitoliteConfigVal,gitoliteComment +syn keyword gitoliteConfigKW config option include subconf contained +syn match gitoliteConfigKey '\(\(config\|option\)\s\+\)\@<=[^ =]*' contained +syn match gitoliteConfigVal '\(=\s*\)\@<=\S.*' contained + +" ---- template-data section + +syn region gitoliteTemplateLine matchgroup=PreProc start='^=begin template-data$' end='^=end$' contains=gitoliteTplRepoLine,gitoliteTplRoleLine,gitoliteGroup,gitoliteComment,gitoliteTplError + +syn match gitoliteTplRepoLine '^\s*repo\s\+\S.*=.*' contained contains=gitoliteTplRepo,gitoliteTplTemplates,gitoliteGroup +syn keyword gitoliteTplRepo repo contained +syn match gitoliteTplTemplates '\(=\s*\)\@<=\S.*' contained contains=gitoliteGroup,gitoliteComment + +syn match gitoliteTplRoleLine '^\s*\S\+\s*=\s*.*' contained contains=gitoliteTplRole,gitoliteGroup,gitoliteComment +syn match gitoliteTplRole '\S\+\s*='he=e-1 contained + +" catch normal gitolite rules appearing in template-data section +syn match gitoliteTplError '^\s*repo[^=]*$' contained +syn match gitoliteTplError '^\s*\(-\|R\|RW+\?C\?D\?\)\s'he=e-1 contained +syn match gitoliteTplError '^\s*\(config\|option\|include\|subconf\)\s'he=e-1 contained +syn match gitoliteTplError '^\s*@\S\+\s*=' contained contains=NONE + +hi def link gitoliteGroup Identifier +hi def link gitoliteComment Comment +hi def link gitoliteTodo ToDo +hi def link gitoliteRepoError Error +hi def link gitoliteGroupLine PreProc +hi def link gitoliteRepo Keyword +hi def link gitoliteSpecialRepo PreProc +hi def link gitoliteRule Keyword +hi def link gitoliteCreateRule PreProc +hi def link gitoliteDenyRule WarningMsg +hi def link gitoliteRefex Constant +hi def link gitoliteSpecialRefex PreProc +hi def link gitoliteConfigKW Keyword +hi def link gitoliteConfigKey Identifier +hi def link gitoliteConfigVal String +hi def link gitoliteTplRepo Keyword +hi def link gitoliteTplTemplates Constant +hi def link gitoliteTplRole Constant +hi def link gitoliteTplError Error + +let b:current_syntax = "gitolite" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/gitrebase.vim b/.config/vim/syntax/gitrebase.vim new file mode 100644 index 0000000..13f157b --- /dev/null +++ b/.config/vim/syntax/gitrebase.vim @@ -0,0 +1,62 @@ +" Vim syntax file +" Language: git rebase --interactive +" Maintainer: Tim Pope +" Filenames: git-rebase-todo +" Last Change: 2022 Jan 05 + +if exists("b:current_syntax") + finish +endif + +syn case match + +let s:c = escape((matchstr(getline('$'), '^[#;@!$%^&|:]\S\@!') . '#')[0], '^$.*[]~\"/') + +syn match gitrebaseHash "\v<\x{7,}>" contained contains=@NoSpell +syn match gitrebaseCommit "\v<\x{7,}>" nextgroup=gitrebaseSummary skipwhite contains=@NoSpell +syn match gitrebasePick "\v^p%(ick)=>" nextgroup=gitrebaseCommit skipwhite +syn match gitrebaseReword "\v^r%(eword)=>" nextgroup=gitrebaseCommit skipwhite +syn match gitrebaseEdit "\v^e%(dit)=>" nextgroup=gitrebaseCommit skipwhite +syn match gitrebaseSquash "\v^s%(quash)=>" nextgroup=gitrebaseCommit skipwhite +syn match gitrebaseFixup "\v^f%(ixup)=>" nextgroup=gitrebaseCommit skipwhite +syn match gitrebaseExec "\v^%(x|exec)>" nextgroup=gitrebaseCommand skipwhite +syn match gitrebaseBreak "\v^b%(reak)=>" +syn match gitrebaseDrop "\v^d%(rop)=>" nextgroup=gitrebaseCommit skipwhite +syn match gitrebaseNoop "\v^noop>" +syn match gitrebaseMerge "\v^m(erge)=>" nextgroup=gitrebaseMergeOption,gitrebaseName skipwhite +syn match gitrebaseLabel "\v^l(abel)=>" nextgroup=gitrebaseName skipwhite +syn match gitrebaseReset "\v^(t|reset)=>" nextgroup=gitrebaseName skipwhite +syn match gitrebaseSummary ".*" contains=gitrebaseHash contained +syn match gitrebaseCommand ".*" contained +exe 'syn match gitrebaseComment " \@<=' . s:c . ' empty$" containedin=gitrebaseSummary contained' +exe 'syn match gitrebaseComment "^\s*' . s:c . '.*" contains=gitrebaseHash' +syn match gitrebaseSquashError "\v%^%(s%(quash)=>|f%(ixup)=>)" nextgroup=gitrebaseCommit skipwhite +syn match gitrebaseMergeOption "\v-[Cc]>" nextgroup=gitrebaseMergeCommit skipwhite contained +syn match gitrebaseMergeCommit "\v<\x{7,}>" nextgroup=gitrebaseName skipwhite contained +syn match gitrebaseName "\v[^[:space:].*?i:^~/-]\S+" nextgroup=gitrebaseMergeComment skipwhite contained +exe 'syn match gitrebaseMergeComment "' . s:c . '" nextgroup=gitrebaseSummary skipwhite contained' + +unlet s:c + +hi def link gitrebaseCommit gitrebaseHash +hi def link gitrebaseHash Identifier +hi def link gitrebasePick Type +hi def link gitrebaseReword Conditional +hi def link gitrebaseEdit PreProc +hi def link gitrebaseSquash Statement +hi def link gitrebaseFixup Repeat +hi def link gitrebaseExec Operator +hi def link gitrebaseBreak Macro +hi def link gitrebaseDrop Comment +hi def link gitrebaseNoop Comment +hi def link gitrebaseMerge Exception +hi def link gitrebaseLabel Label +hi def link gitrebaseReset Keyword +hi def link gitrebaseSummary String +hi def link gitrebaseComment Comment +hi def link gitrebaseSquashError Error +hi def link gitrebaseMergeCommit gitrebaseCommit +hi def link gitrebaseMergeComment gitrebaseComment +hi def link gitrebaseName Tag + +let b:current_syntax = "gitrebase" diff --git a/.config/vim/syntax/gitsendemail.vim b/.config/vim/syntax/gitsendemail.vim new file mode 100644 index 0000000..8fdf683 --- /dev/null +++ b/.config/vim/syntax/gitsendemail.vim @@ -0,0 +1,23 @@ +" Vim syntax file +" Language: git send-email message +" Maintainer: Tim Pope +" Filenames: .gitsendemail.* +" Last Change: 2016 Aug 29 + +if exists("b:current_syntax") + finish +endif + +runtime! syntax/mail.vim +unlet! b:current_syntax +syn include @gitsendemailDiff syntax/diff.vim +syn region gitsendemailDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^-- %/ fold contains=@gitsendemailDiff + +syn case match + +syn match gitsendemailComment "\%^From.*#.*" +syn match gitsendemailComment "^GIT:.*" + +hi def link gitsendemailComment Comment + +let b:current_syntax = "gitsendemail" diff --git a/.config/vim/syntax/gkrellmrc.vim b/.config/vim/syntax/gkrellmrc.vim new file mode 100644 index 0000000..f005ca2 --- /dev/null +++ b/.config/vim/syntax/gkrellmrc.vim @@ -0,0 +1,75 @@ +" Vim syntax file +" This is a GENERATED FILE. Please always refer to source file at the URI below. +" Language: gkrellm theme files `gkrellmrc' +" Maintainer: David Ne\v{c}as (Yeti) +" Last Change: 2003-04-30 +" URL: http://trific.ath.cx/Ftp/vim/syntax/gkrellmrc.vim + +" Setup +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +setlocal iskeyword=_,-,a-z,A-Z,48-57 + +syn case match + +" Base constructs +syn match gkrellmrcComment "#.*$" contains=gkrellmrcFixme +syn keyword gkrellmrcFixme FIXME TODO XXX NOT contained +syn region gkrellmrcString start=+"+ skip=+\\\\\|\\"+ end=+"+ oneline +syn match gkrellmrcNumber "^-\=\(\d\+\)\=\.\=\d\+" +syn match gkrellmrcNumber "\W-\=\(\d\+\)\=\.\=\d\+"lc=1 +syn keyword gkrellmrcConstant none +syn match gkrellmrcRGBColor "#\(\x\{12}\|\x\{9}\|\x\{6}\|\x\{3}\)\>" + +" Keywords +syn keyword gkrellmrcBuiltinExt cpu_nice_color cpu_nice_grid_color krell_depth krell_expand krell_left_margin krell_right_margin krell_x_hot krell_yoff mem_krell_buffers_depth mem_krell_buffers_expand mem_krell_buffers_x_hot mem_krell_buffers_yoff mem_krell_cache_depth mem_krell_cache_expand mem_krell_cache_x_hot mem_krell_cache_yoff sensors_bg_volt timer_bg_timer +syn keyword gkrellmrcGlobal allow_scaling author chart_width_ref theme_alternatives +syn keyword gkrellmrcSetCmd set_image_border set_integer set_string +syn keyword gkrellmrcGlobal bg_slider_meter_border bg_slider_panel_border +syn keyword gkrellmrcGlobal frame_bottom_height frame_left_width frame_right_width frame_top_height frame_left_chart_overlap frame_right_chart_overlap frame_left_panel_overlap frame_right_panel_overlap frame_left_spacer_overlap frame_right_spacer_overlap spacer_overlap_off cap_images_off +syn keyword gkrellmrcGlobal frame_bottom_border frame_left_border frame_right_border frame_top_border spacer_top_border spacer_bottom_border frame_left_chart_border frame_right_chart_border frame_left_panel_border frame_right_panel_border +syn keyword gkrellmrcGlobal chart_in_color chart_in_color_grid chart_out_color chart_out_color_grid +syn keyword gkrellmrcGlobal bg_separator_height bg_grid_mode +syn keyword gkrellmrcGlobal rx_led_x rx_led_y tx_led_x tx_led_y +syn keyword gkrellmrcGlobal decal_mail_frames decal_mail_delay +syn keyword gkrellmrcGlobal decal_alarm_frames decal_warn_frames +syn keyword gkrellmrcGlobal krell_slider_depth krell_slider_expand krell_slider_x_hot +syn keyword gkrellmrcGlobal button_panel_border button_meter_border +syn keyword gkrellmrcGlobal large_font normal_font small_font +syn keyword gkrellmrcGlobal spacer_bottom_height spacer_top_height spacer_bottom_height_chart spacer_top_height_chart spacer_bottom_height_meter spacer_top_height_meter +syn keyword gkrellmrcExpandMode left right bar-mode left-scaled right-scaled bar-mode-scaled +syn keyword gkrellmrcMeterName apm cal clock fs host mail mem swap timer sensors uptime +syn keyword gkrellmrcChartName cpu proc disk inet and net +syn match gkrellmrcSpecialClassName "\*" +syn keyword gkrellmrcStyleCmd StyleMeter StyleChart StylePanel +syn keyword gkrellmrcStyleItem textcolor alt_textcolor font alt_font transparency border label_position margin margins left_margin right_margin top_margin bottom_margin krell_depth krell_yoff krell_x_hot krell_expand krell_left_margin krell_right_margin + +" Define the default highlighting + +hi def link gkrellmrcComment Comment +hi def link gkrellmrcFixme Todo + +hi def link gkrellmrcString gkrellmrcConstant +hi def link gkrellmrcNumber gkrellmrcConstant +hi def link gkrellmrcRGBColor gkrellmrcConstant +hi def link gkrellmrcExpandMode gkrellmrcConstant +hi def link gkrellmrcConstant Constant + +hi def link gkrellmrcMeterName gkrellmrcClass +hi def link gkrellmrcChartName gkrellmrcClass +hi def link gkrellmrcSpecialClassName gkrellmrcClass +hi def link gkrellmrcClass Type + +hi def link gkrellmrcGlobal gkrellmrcItem +hi def link gkrellmrcBuiltinExt gkrellmrcItem +hi def link gkrellmrcStyleItem gkrellmrcItem +hi def link gkrellmrcItem Function + +hi def link gkrellmrcSetCmd Special +hi def link gkrellmrcStyleCmd Statement + + +let b:current_syntax = "gkrellmrc" diff --git a/.config/vim/syntax/gleam.vim b/.config/vim/syntax/gleam.vim new file mode 100644 index 0000000..e89ab56 --- /dev/null +++ b/.config/vim/syntax/gleam.vim @@ -0,0 +1,98 @@ +" Vim syntax file +" Language: Gleam +" Maintainer: Kirill Morozov +" Based On: https://github.com/gleam-lang/gleam.vim +" Last Change: 2025 Apr 20 +" 2025 May 15 Add @Spell clusters #17324 + +if exists("b:current_syntax") + finish +endif +let b:current_syntax = "gleam" + +syntax case match + +" Keywords +syntax keyword gleamConditional case if +syntax keyword gleamConstant const +syntax keyword gleamDebug echo +syntax keyword gleamException panic assert todo +syntax keyword gleamInclude import +syntax keyword gleamKeyword as let use +syntax keyword gleamStorageClass pub opaque +syntax keyword gleamType type + +" Number +"" Int +syntax match gleamNumber "\<-\=\%(0\|\%(\d\|\d_\d\)\+\)\>" + +"" Binary +syntax match gleamNumber "\<-\=0[bB]_\?\%([01]\|[01]_[01]\)\+\>" + +"" Octet +syntax match gleamNumber "\<-\=0[oO]\?_\?\%(\o\|\o_\o\)\+\>" + +"" Hexadecimal +syntax match gleamNumber "\<-\=0[xX]_\?\%(\x\|\x_\x\)\+\>" + +"" Float +syntax match gleamFloat "\(0*[1-9][0-9_]*\|0\)\.\(0*[1-9][0-9_]*\|0\)\(e-\=0*[1-9][0-9_]*\)\=" + +" String +syntax region gleamString start=/"/ end=/"/ contains=gleamSpecial,@Spell +syntax match gleamSpecial '\\.' contained + +" Operators +"" Basic +syntax match gleamOperator "[-+/*]\.\=\|[%=]" + +"" Arrows + Pipeline +syntax match gleamOperator "<-\|[-|]>" + +"" Bool +syntax match gleamOperator "&&\|||" + +"" Comparison +syntax match gleamOperator "[<>]=\=\.\=\|[=!]=" + +"" Misc +syntax match gleamOperator "\.\.\|<>\||" + +" Type +syntax match gleamIdentifier "\<[A-Z][a-zA-Z0-9]*\>" contains=@NoSpell + +" Attribute +syntax match gleamPreProc "@[a-z][a-z_]*" contains=@NoSpell + +" Function definition +syntax keyword gleamKeyword fn nextgroup=gleamFunction skipwhite skipempty +syntax match gleamFunction "[a-z][a-z0-9_]*\ze\s*(" skipwhite skipnl contains=@NoSpell + +" Comments +syntax region gleamComment start="//" end="$" contains=gleamTodo,@Spell +syntax region gleamSpecialComment start="///" end="$" contains=@Spell +syntax region gleamSpecialComment start="////" end="$" contains=@Spell +syntax keyword gleamTodo contained TODO FIXME XXX NB NOTE + +" Highlight groups +highlight link gleamComment Comment +highlight link gleamConditional Conditional +highlight link gleamConstant Constant +highlight link gleamDebug Debug +highlight link gleamException Exception +highlight link gleamFloat Float +highlight link gleamFunction Function +highlight link gleamIdentifier Identifier +highlight link gleamInclude Include +highlight link gleamKeyword Keyword +highlight link gleamNumber Number +highlight link gleamOperator Operator +highlight link gleamPreProc PreProc +highlight link gleamSpecial Special +highlight link gleamSpecialComment SpecialComment +highlight link gleamStorageClass StorageClass +highlight link gleamString String +highlight link gleamTodo Todo +highlight link gleamType Type + +" vim: sw=2 sts=2 et diff --git a/.config/vim/syntax/glsl.vim b/.config/vim/syntax/glsl.vim new file mode 100644 index 0000000..06ffcba --- /dev/null +++ b/.config/vim/syntax/glsl.vim @@ -0,0 +1,752 @@ +" Language: OpenGL Shading Language +" Maintainer: Gregory Anders +" Last Modified: 2024 Jul 21 +" Upstream: https://github.com/tikhomirov/vim-glsl + +if exists('b:current_syntax') + finish +endif + +" Statements +syn keyword glslConditional if else switch case default +syn keyword glslRepeat for while do +syn keyword glslStatement discard return break continue + +" Comments +syn keyword glslTodo contained TODO FIXME XXX NOTE +syn region glslCommentL start="//" skip="\\$" end="$" keepend contains=glslTodo,@Spell +syn region glslComment matchgroup=glslCommentStart start="/\*" end="\*/" extend contains=glslTodo,@Spell + +" Preprocessor +syn region glslPreCondit start="^\s*#\s*\(if\|ifdef\|ifndef\|else\|elif\|endif\)" skip="\\$" end="$" keepend +syn region glslDefine start="^\s*#\s*\(define\|undef\)" skip="\\$" end="$" keepend +syn keyword glslTokenConcat ## +syn keyword glslPredefinedMacro __LINE__ __FILE__ __VERSION__ GL_ES +syn region glslPreProc start="^\s*#\s*\(error\|pragma\|extension\|version\|line\)" skip="\\$" end="$" keepend +syn region glslInclude start="^\s*#\s*include" skip="\\$" end="$" keepend + +" Folding Blocks +syn region glslCurlyBlock start="{" end="}" transparent fold +syn region glslParenBlock start="(" end=")" transparent fold + +" Boolean Constants +syn keyword glslBoolean true false + +" Integer Numbers +syn match glslDecimalInt display "\<\(0\|[1-9]\d*\)[uU]\?" +syn match glslOctalInt display "\<0\o\+[uU]\?" +syn match glslHexInt display "\<0[xX]\x\+[uU]\?" + +" Float Numbers +syn match glslFloat display "\<\d\+\.\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\=" +syn match glslFloat display "\<\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\=" +syn match glslFloat display "\<\d\+[eE][+-]\=\d\+\(lf\|LF\|f\|F\)\=" +syn match glslFloat display "\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\=" + +" Swizzles +syn match glslSwizzle display /\.[xyzw]\{1,4\}\>/ +syn match glslSwizzle display /\.[rgba]\{1,4\}\>/ +syn match glslSwizzle display /\.[stpq]\{1,4\}\>/ + +" Structure +syn keyword glslStructure struct nextgroup=glslIdentifier skipwhite skipempty + +syn match glslIdentifier contains=glslIdentifierPrime "\%([a-zA-Z_]\)\%([a-zA-Z0-9_]\)*" display contained + +" Types +syn keyword glslType accelerationStructureEXT +syn keyword glslType atomic_uint +syn keyword glslType bool +syn keyword glslType bvec2 +syn keyword glslType bvec3 +syn keyword glslType bvec4 +syn keyword glslType dmat2 +syn keyword glslType dmat2x2 +syn keyword glslType dmat2x3 +syn keyword glslType dmat2x4 +syn keyword glslType dmat3 +syn keyword glslType dmat3x2 +syn keyword glslType dmat3x3 +syn keyword glslType dmat3x4 +syn keyword glslType dmat4 +syn keyword glslType dmat4x2 +syn keyword glslType dmat4x3 +syn keyword glslType dmat4x4 +syn keyword glslType double +syn keyword glslType dvec2 +syn keyword glslType dvec3 +syn keyword glslType dvec4 +syn keyword glslType float +syn keyword glslType iimage1D +syn keyword glslType iimage1DArray +syn keyword glslType iimage2D +syn keyword glslType iimage2DArray +syn keyword glslType iimage2DMS +syn keyword glslType iimage2DMSArray +syn keyword glslType iimage2DRect +syn keyword glslType iimage3D +syn keyword glslType iimageBuffer +syn keyword glslType iimageCube +syn keyword glslType iimageCubeArray +syn keyword glslType image1D +syn keyword glslType image1DArray +syn keyword glslType image2D +syn keyword glslType image2DArray +syn keyword glslType image2DMS +syn keyword glslType image2DMSArray +syn keyword glslType image2DRect +syn keyword glslType image3D +syn keyword glslType imageBuffer +syn keyword glslType imageCube +syn keyword glslType imageCubeArray +syn keyword glslType int +syn keyword glslType isampler1D +syn keyword glslType isampler1DArray +syn keyword glslType isampler2D +syn keyword glslType isampler2DArray +syn keyword glslType isampler2DMS +syn keyword glslType isampler2DMSArray +syn keyword glslType isampler2DRect +syn keyword glslType isampler3D +syn keyword glslType isamplerBuffer +syn keyword glslType isamplerCube +syn keyword glslType isamplerCubeArray +syn keyword glslType ivec2 +syn keyword glslType ivec3 +syn keyword glslType ivec4 +syn keyword glslType mat2 +syn keyword glslType mat2x2 +syn keyword glslType mat2x3 +syn keyword glslType mat2x4 +syn keyword glslType mat3 +syn keyword glslType mat3x2 +syn keyword glslType mat3x3 +syn keyword glslType mat3x4 +syn keyword glslType mat4 +syn keyword glslType mat4x2 +syn keyword glslType mat4x3 +syn keyword glslType mat4x4 +syn keyword glslType rayQueryEXT +syn keyword glslType sampler1D +syn keyword glslType sampler1DArray +syn keyword glslType sampler1DArrayShadow +syn keyword glslType sampler1DShadow +syn keyword glslType sampler2D +syn keyword glslType sampler2DArray +syn keyword glslType sampler2DArrayShadow +syn keyword glslType sampler2DMS +syn keyword glslType sampler2DMSArray +syn keyword glslType sampler2DRect +syn keyword glslType sampler2DRectShadow +syn keyword glslType sampler2DShadow +syn keyword glslType sampler3D +syn keyword glslType samplerBuffer +syn keyword glslType samplerCube +syn keyword glslType samplerCubeArray +syn keyword glslType samplerCubeArrayShadow +syn keyword glslType samplerCubeShadow +syn keyword glslType uimage1D +syn keyword glslType uimage1DArray +syn keyword glslType uimage2D +syn keyword glslType uimage2DArray +syn keyword glslType uimage2DMS +syn keyword glslType uimage2DMSArray +syn keyword glslType uimage2DRect +syn keyword glslType uimage3D +syn keyword glslType uimageBuffer +syn keyword glslType uimageCube +syn keyword glslType uimageCubeArray +syn keyword glslType uint +syn keyword glslType usampler1D +syn keyword glslType usampler1DArray +syn keyword glslType usampler2D +syn keyword glslType usampler2DArray +syn keyword glslType usampler2DMS +syn keyword glslType usampler2DMSArray +syn keyword glslType usampler2DRect +syn keyword glslType usampler3D +syn keyword glslType usamplerBuffer +syn keyword glslType usamplerCube +syn keyword glslType usamplerCubeArray +syn keyword glslType uvec2 +syn keyword glslType uvec3 +syn keyword glslType uvec4 +syn keyword glslType vec2 +syn keyword glslType vec3 +syn keyword glslType vec4 +syn keyword glslType void + +" Qualifiers +syn keyword glslQualifier align +syn keyword glslQualifier attribute +syn keyword glslQualifier binding +syn keyword glslQualifier buffer +syn keyword glslQualifier callableDataEXT +syn keyword glslQualifier callableDataInEXT +syn keyword glslQualifier ccw +syn keyword glslQualifier centroid +syn keyword glslQualifier centroid varying +syn keyword glslQualifier coherent +syn keyword glslQualifier column_major +syn keyword glslQualifier const +syn keyword glslQualifier cw +syn keyword glslQualifier depth_any +syn keyword glslQualifier depth_greater +syn keyword glslQualifier depth_less +syn keyword glslQualifier depth_unchanged +syn keyword glslQualifier early_fragment_tests +syn keyword glslQualifier equal_spacing +syn keyword glslQualifier flat +syn keyword glslQualifier fractional_even_spacing +syn keyword glslQualifier fractional_odd_spacing +syn keyword glslQualifier highp +syn keyword glslQualifier hitAttributeEXT +syn keyword glslQualifier in +syn keyword glslQualifier index +syn keyword glslQualifier inout +syn keyword glslQualifier invariant +syn keyword glslQualifier invocations +syn keyword glslQualifier isolines +syn keyword glslQualifier layout +syn keyword glslQualifier line_strip +syn keyword glslQualifier lines +syn keyword glslQualifier lines_adjacency +syn keyword glslQualifier local_size_x +syn keyword glslQualifier local_size_y +syn keyword glslQualifier local_size_z +syn keyword glslQualifier location +syn keyword glslQualifier lowp +syn keyword glslQualifier max_vertices +syn keyword glslQualifier mediump +syn keyword glslQualifier nonuniformEXT +syn keyword glslQualifier noperspective +syn keyword glslQualifier offset +syn keyword glslQualifier origin_upper_left +syn keyword glslQualifier out +syn keyword glslQualifier packed +syn keyword glslQualifier patch +syn keyword glslQualifier pixel_center_integer +syn keyword glslQualifier point_mode +syn keyword glslQualifier points +syn keyword glslQualifier precise +syn keyword glslQualifier precision +syn keyword glslQualifier quads +syn keyword glslQualifier r11f_g11f_b10f +syn keyword glslQualifier r16 +syn keyword glslQualifier r16_snorm +syn keyword glslQualifier r16f +syn keyword glslQualifier r16i +syn keyword glslQualifier r16ui +syn keyword glslQualifier r32f +syn keyword glslQualifier r32i +syn keyword glslQualifier r32ui +syn keyword glslQualifier r8 +syn keyword glslQualifier r8_snorm +syn keyword glslQualifier r8i +syn keyword glslQualifier r8ui +syn keyword glslQualifier rayPayloadEXT +syn keyword glslQualifier rayPayloadInEXT +syn keyword glslQualifier readonly +syn keyword glslQualifier restrict +syn keyword glslQualifier rg16 +syn keyword glslQualifier rg16_snorm +syn keyword glslQualifier rg16f +syn keyword glslQualifier rg16i +syn keyword glslQualifier rg16ui +syn keyword glslQualifier rg32f +syn keyword glslQualifier rg32i +syn keyword glslQualifier rg32ui +syn keyword glslQualifier rg8 +syn keyword glslQualifier rg8_snorm +syn keyword glslQualifier rg8i +syn keyword glslQualifier rg8ui +syn keyword glslQualifier rgb10_a2 +syn keyword glslQualifier rgb10_a2ui +syn keyword glslQualifier rgba16 +syn keyword glslQualifier rgba16_snorm +syn keyword glslQualifier rgba16f +syn keyword glslQualifier rgba16i +syn keyword glslQualifier rgba16ui +syn keyword glslQualifier rgba32f +syn keyword glslQualifier rgba32i +syn keyword glslQualifier rgba32ui +syn keyword glslQualifier rgba8 +syn keyword glslQualifier rgba8_snorm +syn keyword glslQualifier rgba8i +syn keyword glslQualifier rgba8ui +syn keyword glslQualifier row_major +syn keyword glslQualifier sample +syn keyword glslQualifier shaderRecordEXT +syn keyword glslQualifier shared +syn keyword glslQualifier smooth +syn keyword glslQualifier std140 +syn keyword glslQualifier std430 +syn keyword glslQualifier stream +syn keyword glslQualifier triangle_strip +syn keyword glslQualifier triangles +syn keyword glslQualifier triangles_adjacency +syn keyword glslQualifier uniform +syn keyword glslQualifier varying +syn keyword glslQualifier vertices +syn keyword glslQualifier volatile +syn keyword glslQualifier writeonly +syn keyword glslQualifier xfb_buffer +syn keyword glslQualifier xfb_offset +syn keyword glslQualifier xfb_stride + +" Built-in Constants +syn keyword glslBuiltinConstant gl_CullDistance +syn keyword glslBuiltinConstant gl_HitKindBackFacingTriangleEXT +syn keyword glslBuiltinConstant gl_HitKindFrontFacingTriangleEXT +syn keyword glslBuiltinConstant gl_MaxAtomicCounterBindings +syn keyword glslBuiltinConstant gl_MaxAtomicCounterBufferSize +syn keyword glslBuiltinConstant gl_MaxClipDistances +syn keyword glslBuiltinConstant gl_MaxClipPlanes +syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounterBuffers +syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounters +syn keyword glslBuiltinConstant gl_MaxCombinedClipAndCullDistances +syn keyword glslBuiltinConstant gl_MaxCombinedImageUniforms +syn keyword glslBuiltinConstant gl_MaxCombinedImageUnitsAndFragmentOutputs +syn keyword glslBuiltinConstant gl_MaxCombinedShaderOutputResources +syn keyword glslBuiltinConstant gl_MaxCombinedTextureImageUnits +syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounterBuffers +syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounters +syn keyword glslBuiltinConstant gl_MaxComputeImageUniforms +syn keyword glslBuiltinConstant gl_MaxComputeTextureImageUnits +syn keyword glslBuiltinConstant gl_MaxComputeUniformComponents +syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupCount +syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupSize +syn keyword glslBuiltinConstant gl_MaxCullDistances +syn keyword glslBuiltinConstant gl_MaxDrawBuffers +syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounterBuffers +syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounters +syn keyword glslBuiltinConstant gl_MaxFragmentImageUniforms +syn keyword glslBuiltinConstant gl_MaxFragmentInputComponents +syn keyword glslBuiltinConstant gl_MaxFragmentInputVectors +syn keyword glslBuiltinConstant gl_MaxFragmentUniformComponents +syn keyword glslBuiltinConstant gl_MaxFragmentUniformVectors +syn keyword glslBuiltinConstant gl_MaxGeometryAtomicCounterBuffers +syn keyword glslBuiltinConstant gl_MaxGeometryAtomicCounters +syn keyword glslBuiltinConstant gl_MaxGeometryImageUniforms +syn keyword glslBuiltinConstant gl_MaxGeometryInputComponents +syn keyword glslBuiltinConstant gl_MaxGeometryOutputComponents +syn keyword glslBuiltinConstant gl_MaxGeometryOutputVertices +syn keyword glslBuiltinConstant gl_MaxGeometryTextureImageUnits +syn keyword glslBuiltinConstant gl_MaxGeometryTotalOutputComponents +syn keyword glslBuiltinConstant gl_MaxGeometryUniformComponents +syn keyword glslBuiltinConstant gl_MaxGeometryVaryingComponents +syn keyword glslBuiltinConstant gl_MaxImageSamples +syn keyword glslBuiltinConstant gl_MaxImageUnits +syn keyword glslBuiltinConstant gl_MaxLights +syn keyword glslBuiltinConstant gl_MaxPatchVertices +syn keyword glslBuiltinConstant gl_MaxProgramTexelOffset +syn keyword glslBuiltinConstant gl_MaxSamples +syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounterBuffers +syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounters +syn keyword glslBuiltinConstant gl_MaxTessControlImageUniforms +syn keyword glslBuiltinConstant gl_MaxTessControlInputComponents +syn keyword glslBuiltinConstant gl_MaxTessControlOutputComponents +syn keyword glslBuiltinConstant gl_MaxTessControlTextureImageUnits +syn keyword glslBuiltinConstant gl_MaxTessControlTotalOutputComponents +syn keyword glslBuiltinConstant gl_MaxTessControlUniformComponents +syn keyword glslBuiltinConstant gl_MaxTessEvaluationAtomicCounterBuffers +syn keyword glslBuiltinConstant gl_MaxTessEvaluationAtomicCounters +syn keyword glslBuiltinConstant gl_MaxTessEvaluationImageUniforms +syn keyword glslBuiltinConstant gl_MaxTessEvaluationInputComponents +syn keyword glslBuiltinConstant gl_MaxTessEvaluationOutputComponents +syn keyword glslBuiltinConstant gl_MaxTessEvaluationTextureImageUnits +syn keyword glslBuiltinConstant gl_MaxTessEvaluationUniformComponents +syn keyword glslBuiltinConstant gl_MaxTessGenLevel +syn keyword glslBuiltinConstant gl_MaxTessPatchComponents +syn keyword glslBuiltinConstant gl_MaxTextureCoords +syn keyword glslBuiltinConstant gl_MaxTextureImageUnits +syn keyword glslBuiltinConstant gl_MaxTextureUnits +syn keyword glslBuiltinConstant gl_MaxTransformFeedbackBuffers +syn keyword glslBuiltinConstant gl_MaxTransformFeedbackInterleavedComponents +syn keyword glslBuiltinConstant gl_MaxVaryingComponents +syn keyword glslBuiltinConstant gl_MaxVaryingFloats +syn keyword glslBuiltinConstant gl_MaxVaryingVectors +syn keyword glslBuiltinConstant gl_MaxVertexAtomicCounterBuffers +syn keyword glslBuiltinConstant gl_MaxVertexAtomicCounters +syn keyword glslBuiltinConstant gl_MaxVertexAttribs +syn keyword glslBuiltinConstant gl_MaxVertexImageUniforms +syn keyword glslBuiltinConstant gl_MaxVertexOutputComponents +syn keyword glslBuiltinConstant gl_MaxVertexOutputVectors +syn keyword glslBuiltinConstant gl_MaxVertexTextureImageUnits +syn keyword glslBuiltinConstant gl_MaxVertexUniformComponents +syn keyword glslBuiltinConstant gl_MaxVertexUniformVectors +syn keyword glslBuiltinConstant gl_MaxViewports +syn keyword glslBuiltinConstant gl_MinProgramTexelOffset +syn keyword glslBuiltinConstant gl_RayFlagsCullBackFacingTrianglesEXT +syn keyword glslBuiltinConstant gl_RayFlagsCullFrontFacingTrianglesEXT +syn keyword glslBuiltinConstant gl_RayFlagsCullNoOpaqueEXT +syn keyword glslBuiltinConstant gl_RayFlagsCullOpaqueEXT +syn keyword glslBuiltinConstant gl_RayFlagsNoOpaqueEXT +syn keyword glslBuiltinConstant gl_RayFlagsNoneEXT +syn keyword glslBuiltinConstant gl_RayFlagsOpaqueEXT +syn keyword glslBuiltinConstant gl_RayFlagsSkipClosestHitShaderEXT +syn keyword glslBuiltinConstant gl_RayFlagsTerminateOnFirstHitEXT +syn keyword glslBuiltinConstant gl_RayQueryCandidateIntersectionAABBEXT +syn keyword glslBuiltinConstant gl_RayQueryCandidateIntersectionTriangleEXT +syn keyword glslBuiltinConstant gl_RayQueryCommittedIntersectionGeneratedEXT +syn keyword glslBuiltinConstant gl_RayQueryCommittedIntersectionNoneEXT +syn keyword glslBuiltinConstant gl_RayQueryCommittedIntersectionTriangleEXT + +" Built-in Variables +syn keyword glslBuiltinVariable gl_BackColor +syn keyword glslBuiltinVariable gl_BackLightModelProduct +syn keyword glslBuiltinVariable gl_BackLightProduct +syn keyword glslBuiltinVariable gl_BackLightProduct +syn keyword glslBuiltinVariable gl_BackMaterial +syn keyword glslBuiltinVariable gl_BackSecondaryColor +syn keyword glslBuiltinVariable gl_ClipDistance +syn keyword glslBuiltinVariable gl_ClipPlane +syn keyword glslBuiltinVariable gl_ClipVertex +syn keyword glslBuiltinVariable gl_Color +syn keyword glslBuiltinVariable gl_DepthRange +syn keyword glslBuiltinVariable gl_EyePlaneQ +syn keyword glslBuiltinVariable gl_EyePlaneR +syn keyword glslBuiltinVariable gl_EyePlaneS +syn keyword glslBuiltinVariable gl_EyePlaneT +syn keyword glslBuiltinVariable gl_Fog +syn keyword glslBuiltinVariable gl_FogCoord +syn keyword glslBuiltinVariable gl_FogFragCoord +syn keyword glslBuiltinVariable gl_FragColor +syn keyword glslBuiltinVariable gl_FragCoord +syn keyword glslBuiltinVariable gl_FragData +syn keyword glslBuiltinVariable gl_FragDepth +syn keyword glslBuiltinVariable gl_FrontColor +syn keyword glslBuiltinVariable gl_FrontFacing +syn keyword glslBuiltinVariable gl_FrontLightModelProduct +syn keyword glslBuiltinVariable gl_FrontLightProduct +syn keyword glslBuiltinVariable gl_FrontMaterial +syn keyword glslBuiltinVariable gl_FrontSecondaryColor +syn keyword glslBuiltinVariable gl_GeometryIndexEXT +syn keyword glslBuiltinVariable gl_GlobalInvocationID +syn keyword glslBuiltinVariable gl_HelperInvocation +syn keyword glslBuiltinVariable gl_HitKindEXT +syn keyword glslBuiltinVariable gl_HitTEXT +syn keyword glslBuiltinVariable gl_IncomingRayFlagsEXT +syn keyword glslBuiltinVariable gl_InstanceCustomIndexEXT +syn keyword glslBuiltinVariable gl_InstanceID +syn keyword glslBuiltinVariable gl_InstanceID +syn keyword glslBuiltinVariable gl_InvocationID +syn keyword glslBuiltinVariable gl_LaunchIDEXT +syn keyword glslBuiltinVariable gl_LaunchSizeEXT +syn keyword glslBuiltinVariable gl_Layer +syn keyword glslBuiltinVariable gl_LightModel +syn keyword glslBuiltinVariable gl_LightSource +syn keyword glslBuiltinVariable gl_LocalInvocationID +syn keyword glslBuiltinVariable gl_LocalInvocationIndex +syn keyword glslBuiltinVariable gl_ModelViewMatrix +syn keyword glslBuiltinVariable gl_ModelViewMatrixInverse +syn keyword glslBuiltinVariable gl_ModelViewMatrixInverseTranspose +syn keyword glslBuiltinVariable gl_ModelViewMatrixTranspose +syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrix +syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrixInverse +syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrixInverseTranspose +syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrixTranspose +syn keyword glslBuiltinVariable gl_MultiTexCoord0 +syn keyword glslBuiltinVariable gl_MultiTexCoord1 +syn keyword glslBuiltinVariable gl_MultiTexCoord2 +syn keyword glslBuiltinVariable gl_MultiTexCoord3 +syn keyword glslBuiltinVariable gl_MultiTexCoord4 +syn keyword glslBuiltinVariable gl_MultiTexCoord5 +syn keyword glslBuiltinVariable gl_MultiTexCoord6 +syn keyword glslBuiltinVariable gl_MultiTexCoord7 +syn keyword glslBuiltinVariable gl_Normal +syn keyword glslBuiltinVariable gl_NormalMatrix +syn keyword glslBuiltinVariable gl_NormalScale +syn keyword glslBuiltinVariable gl_NumSamples +syn keyword glslBuiltinVariable gl_NumWorkGroups +syn keyword glslBuiltinVariable gl_ObjectPlaneQ +syn keyword glslBuiltinVariable gl_ObjectPlaneR +syn keyword glslBuiltinVariable gl_ObjectPlaneS +syn keyword glslBuiltinVariable gl_ObjectPlaneT +syn keyword glslBuiltinVariable gl_ObjectRayDirectionEXT +syn keyword glslBuiltinVariable gl_ObjectRayOriginEXT +syn keyword glslBuiltinVariable gl_ObjectToWorld3x4EXT +syn keyword glslBuiltinVariable gl_ObjectToWorldEXT +syn keyword glslBuiltinVariable gl_PatchVerticesIn +syn keyword glslBuiltinVariable gl_Point +syn keyword glslBuiltinVariable gl_PointCoord +syn keyword glslBuiltinVariable gl_PointSize +syn keyword glslBuiltinVariable gl_Position +syn keyword glslBuiltinVariable gl_PrimitiveID +syn keyword glslBuiltinVariable gl_PrimitiveID +syn keyword glslBuiltinVariable gl_PrimitiveIDIn +syn keyword glslBuiltinVariable gl_ProjectionMatrix +syn keyword glslBuiltinVariable gl_ProjectionMatrixInverse +syn keyword glslBuiltinVariable gl_ProjectionMatrixInverseTranspose +syn keyword glslBuiltinVariable gl_ProjectionMatrixTranspose +syn keyword glslBuiltinVariable gl_RayTmaxEXT +syn keyword glslBuiltinVariable gl_RayTminEXT +syn keyword glslBuiltinVariable gl_SampleID +syn keyword glslBuiltinVariable gl_SampleMask +syn keyword glslBuiltinVariable gl_SampleMaskIn +syn keyword glslBuiltinVariable gl_SamplePosition +syn keyword glslBuiltinVariable gl_SecondaryColor +syn keyword glslBuiltinVariable gl_TessCoord +syn keyword glslBuiltinVariable gl_TessLevelInner +syn keyword glslBuiltinVariable gl_TessLevelOuter +syn keyword glslBuiltinVariable gl_TexCoord +syn keyword glslBuiltinVariable gl_TextureEnvColor +syn keyword glslBuiltinVariable gl_TextureMatrix +syn keyword glslBuiltinVariable gl_TextureMatrixInverse +syn keyword glslBuiltinVariable gl_TextureMatrixInverseTranspose +syn keyword glslBuiltinVariable gl_TextureMatrixTranspose +syn keyword glslBuiltinVariable gl_Vertex +syn keyword glslBuiltinVariable gl_VertexID +syn keyword glslBuiltinVariable gl_VertexIndex +syn keyword glslBuiltinVariable gl_ViewportIndex +syn keyword glslBuiltinVariable gl_WorkGroupID +syn keyword glslBuiltinVariable gl_WorkGroupSize +syn keyword glslBuiltinVariable gl_WorldRayDirectionEXT +syn keyword glslBuiltinVariable gl_WorldRayOriginEXT +syn keyword glslBuiltinVariable gl_WorldToObject3x4EXT +syn keyword glslBuiltinVariable gl_WorldToObjectEXT +syn keyword glslBuiltinVariable gl_in +syn keyword glslBuiltinVariable gl_out + +" Built-in Functions +syn keyword glslBuiltinFunction EmitStreamVertex +syn keyword glslBuiltinFunction EmitVertex +syn keyword glslBuiltinFunction EndPrimitive +syn keyword glslBuiltinFunction EndStreamPrimitive +syn keyword glslBuiltinFunction abs +syn keyword glslBuiltinFunction acos +syn keyword glslBuiltinFunction acosh +syn keyword glslBuiltinFunction all +syn keyword glslBuiltinFunction any +syn keyword glslBuiltinFunction asin +syn keyword glslBuiltinFunction asinh +syn keyword glslBuiltinFunction atan +syn keyword glslBuiltinFunction atanh +syn keyword glslBuiltinFunction atomicAdd +syn keyword glslBuiltinFunction atomicAnd +syn keyword glslBuiltinFunction atomicCompSwap +syn keyword glslBuiltinFunction atomicCounter +syn keyword glslBuiltinFunction atomicCounterDecrement +syn keyword glslBuiltinFunction atomicCounterIncrement +syn keyword glslBuiltinFunction atomicExchange +syn keyword glslBuiltinFunction atomicMax +syn keyword glslBuiltinFunction atomicMin +syn keyword glslBuiltinFunction atomicOr +syn keyword glslBuiltinFunction atomicXor +syn keyword glslBuiltinFunction barrier +syn keyword glslBuiltinFunction bitCount +syn keyword glslBuiltinFunction bitfieldExtract +syn keyword glslBuiltinFunction bitfieldInsert +syn keyword glslBuiltinFunction bitfieldReverse +syn keyword glslBuiltinFunction ceil +syn keyword glslBuiltinFunction clamp +syn keyword glslBuiltinFunction cos +syn keyword glslBuiltinFunction cosh +syn keyword glslBuiltinFunction cross +syn keyword glslBuiltinFunction dFdx +syn keyword glslBuiltinFunction dFdxCoarse +syn keyword glslBuiltinFunction dFdxFine +syn keyword glslBuiltinFunction dFdy +syn keyword glslBuiltinFunction dFdyCoarse +syn keyword glslBuiltinFunction dFdyFine +syn keyword glslBuiltinFunction degrees +syn keyword glslBuiltinFunction determinant +syn keyword glslBuiltinFunction distance +syn keyword glslBuiltinFunction dot +syn keyword glslBuiltinFunction equal +syn keyword glslBuiltinFunction executeCallableEXT +syn keyword glslBuiltinFunction exp +syn keyword glslBuiltinFunction exp2 +syn keyword glslBuiltinFunction faceforward +syn keyword glslBuiltinFunction findLSB +syn keyword glslBuiltinFunction findMSB +syn keyword glslBuiltinFunction floatBitsToInt +syn keyword glslBuiltinFunction floatBitsToUint +syn keyword glslBuiltinFunction floor +syn keyword glslBuiltinFunction fma +syn keyword glslBuiltinFunction fract +syn keyword glslBuiltinFunction frexp +syn keyword glslBuiltinFunction ftransform +syn keyword glslBuiltinFunction fwidth +syn keyword glslBuiltinFunction fwidthCoarse +syn keyword glslBuiltinFunction fwidthFine +syn keyword glslBuiltinFunction greaterThan +syn keyword glslBuiltinFunction greaterThanEqual +syn keyword glslBuiltinFunction groupMemoryBarrier +syn keyword glslBuiltinFunction ignoreIntersectionEXT +syn keyword glslBuiltinFunction imageAtomicAdd +syn keyword glslBuiltinFunction imageAtomicAnd +syn keyword glslBuiltinFunction imageAtomicCompSwap +syn keyword glslBuiltinFunction imageAtomicExchange +syn keyword glslBuiltinFunction imageAtomicMax +syn keyword glslBuiltinFunction imageAtomicMin +syn keyword glslBuiltinFunction imageAtomicOr +syn keyword glslBuiltinFunction imageAtomicXor +syn keyword glslBuiltinFunction imageLoad +syn keyword glslBuiltinFunction imageSize +syn keyword glslBuiltinFunction imageStore +syn keyword glslBuiltinFunction imulExtended +syn keyword glslBuiltinFunction intBitsToFloat +syn keyword glslBuiltinFunction interpolateAtCentroid +syn keyword glslBuiltinFunction interpolateAtOffset +syn keyword glslBuiltinFunction interpolateAtSample +syn keyword glslBuiltinFunction inverse +syn keyword glslBuiltinFunction inversesqrt +syn keyword glslBuiltinFunction isinf +syn keyword glslBuiltinFunction isnan +syn keyword glslBuiltinFunction ldexp +syn keyword glslBuiltinFunction length +syn keyword glslBuiltinFunction lessThan +syn keyword glslBuiltinFunction lessThanEqual +syn keyword glslBuiltinFunction log +syn keyword glslBuiltinFunction log2 +syn keyword glslBuiltinFunction matrixCompMult +syn keyword glslBuiltinFunction max +syn keyword glslBuiltinFunction memoryBarrier +syn keyword glslBuiltinFunction memoryBarrierAtomicCounter +syn keyword glslBuiltinFunction memoryBarrierBuffer +syn keyword glslBuiltinFunction memoryBarrierImage +syn keyword glslBuiltinFunction memoryBarrierShared +syn keyword glslBuiltinFunction min +syn keyword glslBuiltinFunction mix +syn keyword glslBuiltinFunction mod +syn keyword glslBuiltinFunction modf +syn keyword glslBuiltinFunction noise1 +syn keyword glslBuiltinFunction noise2 +syn keyword glslBuiltinFunction noise3 +syn keyword glslBuiltinFunction noise4 +syn keyword glslBuiltinFunction normalize +syn keyword glslBuiltinFunction not +syn keyword glslBuiltinFunction notEqual +syn keyword glslBuiltinFunction outerProduct +syn keyword glslBuiltinFunction packDouble2x32 +syn keyword glslBuiltinFunction packHalf2x16 +syn keyword glslBuiltinFunction packSnorm2x16 +syn keyword glslBuiltinFunction packSnorm4x8 +syn keyword glslBuiltinFunction packUnorm2x16 +syn keyword glslBuiltinFunction packUnorm4x8 +syn keyword glslBuiltinFunction pow +syn keyword glslBuiltinFunction radians +syn keyword glslBuiltinFunction rayQueryConfirmIntersectionEXT +syn keyword glslBuiltinFunction rayQueryGenerateIntersectionEXT +syn keyword glslBuiltinFunction rayQueryGetIntersectionBarycentricsEXT +syn keyword glslBuiltinFunction rayQueryGetIntersectionCandidateAABBOpaqueEXT +syn keyword glslBuiltinFunction rayQueryGetIntersectionFrontFaceEXT +syn keyword glslBuiltinFunction rayQueryGetIntersectionGeometryIndexEXT +syn keyword glslBuiltinFunction rayQueryGetIntersectionInstanceCustomIndexEXT +syn keyword glslBuiltinFunction rayQueryGetIntersectionInstanceIdEXT +syn keyword glslBuiltinFunction rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT +syn keyword glslBuiltinFunction rayQueryGetIntersectionObjectRayDirectionEXT +syn keyword glslBuiltinFunction rayQueryGetIntersectionObjectRayOriginEXT +syn keyword glslBuiltinFunction rayQueryGetIntersectionObjectToWorldEXT +syn keyword glslBuiltinFunction rayQueryGetIntersectionPrimitiveIndexEXT +syn keyword glslBuiltinFunction rayQueryGetIntersectionTEXT +syn keyword glslBuiltinFunction rayQueryGetIntersectionTypeEXT +syn keyword glslBuiltinFunction rayQueryGetIntersectionWorldToObjectEXT +syn keyword glslBuiltinFunction rayQueryGetRayFlagsEXT +syn keyword glslBuiltinFunction rayQueryGetRayTMinEXT +syn keyword glslBuiltinFunction rayQueryGetWorldRayDirectionEXT +syn keyword glslBuiltinFunction rayQueryGetWorldRayOriginEXT +syn keyword glslBuiltinFunction rayQueryInitializeEXT +syn keyword glslBuiltinFunction rayQueryProceedEXT +syn keyword glslBuiltinFunction rayQueryTerminateEXT +syn keyword glslBuiltinFunction reflect +syn keyword glslBuiltinFunction refract +syn keyword glslBuiltinFunction reportIntersectionEXT +syn keyword glslBuiltinFunction round +syn keyword glslBuiltinFunction roundEven +syn keyword glslBuiltinFunction shadow1D +syn keyword glslBuiltinFunction shadow1DLod +syn keyword glslBuiltinFunction shadow1DProj +syn keyword glslBuiltinFunction shadow1DProjLod +syn keyword glslBuiltinFunction shadow2D +syn keyword glslBuiltinFunction shadow2DLod +syn keyword glslBuiltinFunction shadow2DProj +syn keyword glslBuiltinFunction shadow2DProjLod +syn keyword glslBuiltinFunction sign +syn keyword glslBuiltinFunction sin +syn keyword glslBuiltinFunction sinh +syn keyword glslBuiltinFunction smoothstep +syn keyword glslBuiltinFunction sqrt +syn keyword glslBuiltinFunction step +syn keyword glslBuiltinFunction tan +syn keyword glslBuiltinFunction tanh +syn keyword glslBuiltinFunction terminateRayEXT +syn keyword glslBuiltinFunction texelFetch +syn keyword glslBuiltinFunction texelFetchOffset +syn keyword glslBuiltinFunction texture +syn keyword glslBuiltinFunction texture1D +syn keyword glslBuiltinFunction texture1DLod +syn keyword glslBuiltinFunction texture1DProj +syn keyword glslBuiltinFunction texture1DProjLod +syn keyword glslBuiltinFunction texture2D +syn keyword glslBuiltinFunction texture2DLod +syn keyword glslBuiltinFunction texture2DProj +syn keyword glslBuiltinFunction texture2DProjLod +syn keyword glslBuiltinFunction texture3D +syn keyword glslBuiltinFunction texture3DLod +syn keyword glslBuiltinFunction texture3DProj +syn keyword glslBuiltinFunction texture3DProjLod +syn keyword glslBuiltinFunction textureCube +syn keyword glslBuiltinFunction textureCubeLod +syn keyword glslBuiltinFunction textureGather +syn keyword glslBuiltinFunction textureGatherOffset +syn keyword glslBuiltinFunction textureGatherOffsets +syn keyword glslBuiltinFunction textureGrad +syn keyword glslBuiltinFunction textureGradOffset +syn keyword glslBuiltinFunction textureLod +syn keyword glslBuiltinFunction textureLodOffset +syn keyword glslBuiltinFunction textureOffset +syn keyword glslBuiltinFunction textureProj +syn keyword glslBuiltinFunction textureProjGrad +syn keyword glslBuiltinFunction textureProjGradOffset +syn keyword glslBuiltinFunction textureProjLod +syn keyword glslBuiltinFunction textureProjLodOffset +syn keyword glslBuiltinFunction textureProjOffset +syn keyword glslBuiltinFunction textureQueryLevels +syn keyword glslBuiltinFunction textureQueryLod +syn keyword glslBuiltinFunction textureSize +syn keyword glslBuiltinFunction traceRayEXT +syn keyword glslBuiltinFunction transpose +syn keyword glslBuiltinFunction trunc +syn keyword glslBuiltinFunction uaddCarry +syn keyword glslBuiltinFunction uintBitsToFloat +syn keyword glslBuiltinFunction umulExtended +syn keyword glslBuiltinFunction unpackDouble2x32 +syn keyword glslBuiltinFunction unpackHalf2x16 +syn keyword glslBuiltinFunction unpackSnorm2x16 +syn keyword glslBuiltinFunction unpackSnorm4x8 +syn keyword glslBuiltinFunction unpackUnorm2x16 +syn keyword glslBuiltinFunction unpackUnorm4x8 +syn keyword glslBuiltinFunction usubBorrow + +hi def link glslConditional Conditional +hi def link glslRepeat Repeat +hi def link glslStatement Statement +hi def link glslTodo Todo +hi def link glslCommentL glslComment +hi def link glslCommentStart glslComment +hi def link glslComment Comment +hi def link glslPreCondit PreCondit +hi def link glslDefine Define +hi def link glslTokenConcat glslPreProc +hi def link glslPredefinedMacro Macro +hi def link glslPreProc PreProc +hi def link glslInclude Include +hi def link glslBoolean Boolean +hi def link glslDecimalInt glslInteger +hi def link glslOctalInt glslInteger +hi def link glslHexInt glslInteger +hi def link glslInteger Number +hi def link glslFloat Float +hi def link glslIdentifierPrime glslIdentifier +hi def link glslIdentifier Identifier +hi def link glslStructure Structure +hi def link glslType Type +hi def link glslQualifier StorageClass +hi def link glslBuiltinConstant Constant +hi def link glslBuiltinFunction Function +hi def link glslBuiltinVariable Identifier +hi def link glslSwizzle Identifier + +let b:current_syntax = 'glsl' diff --git a/.config/vim/syntax/gnash.vim b/.config/vim/syntax/gnash.vim new file mode 100644 index 0000000..cce522d --- /dev/null +++ b/.config/vim/syntax/gnash.vim @@ -0,0 +1,96 @@ +" Vim syntax file +" Maintainer: Thilo Six +" Contact: +" http://www.vim.org/maillist.php#vim-dev +" +" Description: highlight gnash configuration files +" http://www.gnu.org/software/gnash/manual/gnashuser.html#gnashrc +" File: runtime/syntax/gnash.vim +" Last Change: 2012 May 19 +" Modeline: vim: ts=8:sw=2:sts=2: +" +" Credits: derived from Nikolai Weibulls readline.vim +" +" License: VIM License +" Vim is Charityware, see ":help Uganda" +" + +" quit when a syntax file was already loaded +if exists("b:current_syntax") || &compatible + finish +endif + +syn case match +syn keyword GnashTodo contained TODO FIXME XXX NOTE + +" Comments +syn match GnashComment "^#.*$" contains=@Spell,GnashTodo +syn match GnashComment "\s#.*$" contains=@Spell,GnashTodo + +syn match GnashNumber display '\<\d\+\>' + +syn case ignore +syn keyword GnashOn ON YES TRUE +syn keyword GnashOff OFF NO FALSE + +syn match GnashSet '^\s*set\>' +syn match GnashSet '^\s*append\>' + +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' +syn match GnashKeyword '\' + +hi def link GnashOn Identifier +hi def link GnashOff Preproc +hi def link GnashComment Comment +hi def link GnashTodo Todo +hi def link GnashNumber Type +hi def link GnashSet String +hi def link GnashKeyword Keyword + +let b:current_syntax = "gnash" + diff --git a/.config/vim/syntax/gnuplot.vim b/.config/vim/syntax/gnuplot.vim new file mode 100644 index 0000000..b5092d7 --- /dev/null +++ b/.config/vim/syntax/gnuplot.vim @@ -0,0 +1,549 @@ +" Vim syntax file +" Language: gnuplot 4.7.0 +" Maintainer: Josh Wainwright +" Last Maintainer: Andrew Rasmussen andyras@users.sourceforge.net +" Original Maintainer: John Hoelzel johnh51@users.sourceforge.net +" Last Change: 2021 Nov 16 +" additional changes from PR #8949 +" Filenames: *.gnu *.plt *.gpi *.gih *.gp *.gnuplot scripts: #!*gnuplot +" URL: http://www.vim.org/scripts/script.php?script_id=4873 +" Original URL: http://johnh51.get.to/vim/syntax/gnuplot.vim + +" thanks to "David Necas (Yeti)" + +" credit also to Jim Eberle +" for the script http://www.vim.org/scripts/script.php?script_id=1737 + +" some shortened names to make demo files look clean... jeh. 11/2000 +" demos -> 3.8i ... jeh. 5/2003 - a work in progress... +" added current commands, keywords, variables, todos, macros... amr 2014-02-24 + +" For vim version 5.x: Clear all syntax items +" For vim version 6.x: Quit when a syntax file was already loaded + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" ---- Special characters ---- " + +" no harm in just matching any \[char] within double quotes, right? +syn match gnuplotSpecial "\\." contained +" syn match gnuplotSpecial "\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[a-z\\]" contained + +" measurements in the units in, cm and pt are special +syn match gnuplotUnit "\d+in" +syn match gnuplotUnit "\d+cm" +syn match gnuplotUnit "\d+pt" + +" external (shell) commands are special +syn region gnuplotExternal start="^\s*!" end="$" + +" ---- Comments ---- " + +syn region gnuplotComment start="#" end="$" contains=gnuplotTodo,@Spell + +" ---- Constants ---- " + +" strings +syn region gnuplotString start=+"+ skip=+\\"+ end=+"+ contains=gnuplotSpecial,@Spell +syn region gnuplotString start="'" end="'" contains=@Spell + +" built-in variables +syn keyword gnuplotNumber GNUTERM GPVAL_TERM GPVAL_TERMOPTIONS GPVAL_SPLOT +syn keyword gnuplotNumber GPVAL_OUTPUT GPVAL_ENCODING GPVAL_VERSION +syn keyword gnuplotNumber GPVAL_PATCHLEVEL GPVAL_COMPILE_OPTIONS +syn keyword gnuplotNumber GPVAL_MULTIPLOT GPVAL_PLOT GPVAL_VIEW_ZSCALE +syn keyword gnuplotNumber GPVAL_TERMINALS GPVAL_pi GPVAL_NaN +syn keyword gnuplotNumber GPVAL_ERRNO GPVAL_ERRMSG GPVAL_PWD +syn keyword gnuplotNumber pi NaN GPVAL_LAST_PLOT GPVAL_TERM_WINDOWID +syn keyword gnuplotNumber GPVAL_X_MIN GPVAL_X_MAX GPVAL_X_LOG +syn keyword gnuplotNumber GPVAL_DATA_X_MIN GPVAL_DATA_X_MAX GPVAL_Y_MIN +syn keyword gnuplotNumber GPVAL_Y_MAX GPVAL_Y_LOG GPVAL_DATA_Y_MIN +syn keyword gnuplotNumber GPVAL_DATA_Y_MAX GPVAL_X2_MIN GPVAL_X2_MAX +syn keyword gnuplotNumber GPVAL_X2_LOG GPVAL_DATA_X2_MIN GPVAL_DATA_X2_MAX +syn keyword gnuplotNumber GPVAL_Y2_MIN GPVAL_Y2_MAX GPVAL_Y2_LOG +syn keyword gnuplotNumber GPVAL_DATA_Y2_MIN GPVAL_DATA_Y2_MAX GPVAL_Z_MIN +syn keyword gnuplotNumber GPVAL_Z_MAX GPVAL_Z_LOG GPVAL_DATA_Z_MIN +syn keyword gnuplotNumber GPVAL_DATA_Z_MAX GPVAL_CB_MIN GPVAL_CB_MAX +syn keyword gnuplotNumber GPVAL_CB_LOG GPVAL_DATA_CB_MIN GPVAL_DATA_CB_MAX +syn keyword gnuplotNumber GPVAL_T_MIN GPVAL_T_MAX GPVAL_T_LOG GPVAL_U_MIN +syn keyword gnuplotNumber GPVAL_U_MAX GPVAL_U_LOG GPVAL_V_MIN GPVAL_V_MAX +syn keyword gnuplotNumber GPVAL_V_LOG GPVAL_R_MIN GPVAL_R_LOG +syn keyword gnuplotNumber GPVAL_TERM_XMIN GPVAL_TERM_XMAX GPVAL_TERM_YMIN +syn keyword gnuplotNumber GPVAL_TERM_YMAX GPVAL_TERM_XSIZE +syn keyword gnuplotNumber GPVAL_TERM_YSIZE GPVAL_VIEW_MAP GPVAL_VIEW_ROT_X +syn keyword gnuplotNumber GPVAL_VIEW_ROT_Z GPVAL_VIEW_SCALE + +" function name variables +syn match gnuplotNumber "GPFUN_\h*" + +" stats variables +syn keyword gnuplotNumber STATS_records STATS_outofrange STATS_invalid +syn keyword gnuplotNumber STATS_blank STATS_blocks STATS_columns STATS_min +syn keyword gnuplotNumber STATS_max STATS_index_min STATS_index_max +syn keyword gnuplotNumber STATS_lo_quartile STATS_median STATS_up_quartile +syn keyword gnuplotNumber STATS_mean STATS_stddev STATS_sum STATS_sumsq +syn keyword gnuplotNumber STATS_correlation STATS_slope STATS_intercept +syn keyword gnuplotNumber STATS_sumxy STATS_pos_min_y STATS_pos_max_y +syn keyword gnuplotNumber STATS_mean STATS_stddev STATS_mean_x STATS_sum_x +syn keyword gnuplotNumber STATS_stddev_x STATS_sumsq_x STATS_min_x +syn keyword gnuplotNumber STATS_max_x STATS_median_x STATS_lo_quartile_x +syn keyword gnuplotNumber STATS_up_quartile_x STATS_index_min_x +syn keyword gnuplotNumber STATS_index_max_x STATS_mean_y STATS_stddev_y +syn keyword gnuplotNumber STATS_sum_y STATS_sumsq_y STATS_min_y +syn keyword gnuplotNumber STATS_max_y STATS_median_y STATS_lo_quartile_y +syn keyword gnuplotNumber STATS_up_quartile_y STATS_index_min_y +syn keyword gnuplotNumber STATS_index_max_y STATS_correlation STATS_sumxy + +" deprecated fit variables +syn keyword gnuplotError FIT_LIMIT FIT_MAXITER FIT_START_LAMBDA +syn keyword gnuplotError FIT_LAMBDA_FACTOR FIT_LOG FIT_SCRIPT + +" numbers, from c.vim + +" integer number, or floating point number without a dot and with "f". +syn case ignore +syn match gnuplotNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" + +" floating point number, with dot, optional exponent +syn match gnuplotFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" + +" floating point number, starting with a dot, optional exponent +syn match gnuplotFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" + +" floating point number, without dot, with exponent +syn match gnuplotFloat "\<\d\+e[-+]\=\d\+[fl]\=\>" + +" hex number +syn match gnuplotNumber "\<0x\x\+\(u\=l\=\|lu\)\>" +syn case match + +" flag an octal number with wrong digits by not highlighting +syn match gnuplotOctalError "\<0\o*[89]" + +" ---- Identifiers: Functions ---- " + +" numerical functions +syn keyword gnuplotFunc abs acos acosh airy arg asin asinh atan atan2 +syn keyword gnuplotFunc atanh EllipticK EllipticE EllipticPi besj0 besj1 +syn keyword gnuplotFunc besy0 besy1 ceil cos cosh erf erfc exp expint +syn keyword gnuplotFunc floor gamma ibeta inverf igamma imag invnorm int +syn keyword gnuplotFunc lambertw lgamma log log10 norm rand real sgn sin +syn keyword gnuplotFunc sin sinh sqrt tan tanh voigt + +" string functions +syn keyword gnuplotFunc gprintf sprintf strlen strstrt substr strftime +syn keyword gnuplotFunc strptime system word words + +" other functions +syn keyword gnuplotFunc column columnhead columnheader defined exists +syn keyword gnuplotFunc hsv2rgb stringcolumn timecolumn tm_hour tm_mday +syn keyword gnuplotFunc tm_min tm_mon tm_sec tm_wday tm_yday tm_year +syn keyword gnuplotFunc time valid value + +" ---- Statements ---- " + +" common (builtin) variable names +syn keyword gnuplotKeyword x y t u v z s + +" conditionals +syn keyword gnuplotConditional if else + +" repeats +syn keyword gnuplotRepeat do for while + +" operators +syn match gnuplotOperator "[-+*/^|&?:]" +syn match gnuplotOperator "\*\*" +syn match gnuplotOperator "&&" +syn match gnuplotOperator "||" + +" Keywords + +" keywords for 'fit' command +syn keyword gnuplotKeyword via z x:z x:z:s x:y:z:s +syn keyword gnuplotKeyword x:y:t:z:s x:y:t:u:z:s x:y:t:u:v:z:s + +" keywords for 'plot' command +" 'axes' keyword +syn keyword gnuplotKeyword axes x1y1 x1y2 x2y1 x2y2 +" 'binary' keyword +syn keyword gnuplotKeyword binary matrix general array record format endian +syn keyword gnuplotKeyword filetype avs edf png scan transpose dx dy dz +syn keyword gnuplotKeyword flipx flipy flipz origin center rotate using +syn keyword gnuplotKeyword perpendicular skip every +" datafile keywords +syn keyword gnuplotKeyword binary nonuniform matrix index every using +syn keyword gnuplotKeyword smooth volatile noautoscale every index +" 'smooth' keywords +syn keyword gnuplotKeyword unique frequency cumulative cnormal kdensity +syn keyword gnuplotKeyword csplines acsplines bezer sbezier +" deprecated 'thru' keyword +syn keyword gnuplotError thru +" 'using' keyword +syn keyword gnuplotKeyword using u xticlabels yticlabels zticlabels +syn keyword gnuplotKeyword x2ticlabels y2ticlabels xtic ytic ztic +" 'errorbars' keywords +syn keyword gnuplotKeyword errorbars xerrorbars yerrorbars xyerrorbars +" 'errorlines' keywords +syn keyword gnuplotKeyword errorlines xerrorlines yerrorlines xyerrorlines +" 'title' keywords +syn keyword gnuplotKeyword title t tit notitle columnheader at beginning +syn keyword gnuplotKeyword end +" 'with' keywords +syn keyword gnuplotKeyword with w linestyle ls linetype lt linewidth +syn keyword gnuplotKeyword lw linecolor lc pointtype pt pointsize ps +syn keyword gnuplotKeyword fill fs nohidden3d nocontours nosurface palette +" styles for 'with' +syn keyword gnuplotKeyword lines l points p linespoints lp surface dots +syn keyword gnuplotKeyword impulses labels vectors steps fsteps histeps +syn keyword gnuplotKeyword errorbars errorlines financebars xerrorbars +syn keyword gnuplotKeyword xerrorlines xyerrorbars yerrorbars yerrorlines +syn keyword gnuplotKeyword boxes boxerrorbars boxxyerrorbars boxplot +syn keyword gnuplotKeyword candlesticks circles ellipses filledcurves +syn keyword gnuplotKeyword histogram image rgbimage rgbalpha pm3d variable + +" keywords for 'save' command +syn keyword gnuplotKeyword save functions func variables all var terminal +syn keyword gnuplotKeyword term set + +" keywords for 'set/show' command +" set angles +syn keyword gnuplotKeyword angles degrees deg radians rad +" set arrow +syn keyword gnuplotKeyword arrow from to rto length angle arrowstyle as +syn keyword gnuplotKeyword nohead head backhead heads size filled empty +syn keyword gnuplotKeyword nofilled front back linestyle linetype linewidth +" set autoscale +" TODO regexp here +syn keyword gnuplotKeyword autoscale x y z cb x2 y2 zy min max fixmin +syn keyword gnuplotKeyword fixmax fix keepfix noextend +" set bars +syn keyword gnuplotKeyword bars small large fullwidth front back +" set bind +syn keyword gnuplotKeyword bind +" set margins +" TODO regexp +syn keyword gnuplotKeyword margin bmargin lmargin rmargin tmargin +" set border +syn keyword gnuplotKeyword border front back +" set boxwidth +syn keyword gnuplotKeyword boxwidth absolute relative +" deprecated set clabel +syn keyword gnuplotError clabel +" set clip +syn keyword gnuplotKeyword clip points one two +" set cntrlabel +syn keyword gnuplotKeyword cntrlabel format font start interval onecolor +" set cntrparam +syn keyword gnuplotKeyword cntrparam linear cubicspline bspline points +syn keyword gnuplotKeyword order levels auto discrete incremental +" set colorbox +syn keyword gnuplotKeyword colorbox vertical horizontal default user origin +syn keyword gnuplotKeyword size front back noborder bdefault border +" show colornames +syn keyword gnuplotKeyword colornames +" set contour +syn keyword gnuplotKeyword contour base surface both +" set datafile +syn keyword gnuplotKeyword datafile fortran nofpe_trap missing separator +syn keyword gnuplotKeyword whitespace tab comma commentschars binary +" set decimalsign +syn keyword gnuplotKeyword decimalsign locale +" set dgrid3d +syn keyword gnuplotKeyword dgrid3d splines qnorm gauss cauchy exp box hann +syn keyword gnuplotKeyword kdensity +" set dummy +syn keyword gnuplotKeyword dummy +" set encoding +syn keyword gnuplotKeyword encoding default iso_8859_1 iso_8859_15 +syn keyword gnuplotKeyword iso_8859_2 iso_8859_9 koi8r koi8u cp437 cp850 +syn keyword gnuplotKeyword cp852 cp950 cp1250 cp1251 cp1254 sjis utf8 +" set fit +syn keyword gnuplotKeyword fit logfile default quiet noquiet results brief +syn keyword gnuplotKeyword verbose errorvariables noerrorvariables +syn keyword gnuplotKeyword errorscaling noerrorscaling prescale noprescale +syn keyword gnuplotKeyword maxiter none limit limit_abs start-lambda script +syn keyword gnuplotKeyword lambda-factor +" set fontpath +syn keyword gnuplotKeyword fontpath +" set format +syn keyword gnuplotKeyword format +" show functions +syn keyword gnuplotKeyword functions +" set grid +syn keyword gnuplotKeyword grid polar layerdefault xtics ytics ztics x2tics +syn keyword gnuplotKeyword y2tics cbtics mxtics mytics mztics mx2tics +syn keyword gnuplotKeyword my2tics mcbtics xmtics ymtics zmtics x2mtics +syn keyword gnuplotKeyword y2mtics cbmtics noxtics noytics noztics nox2tics +syn keyword gnuplotKeyword noy2tics nocbtics nomxtics nomytics nomztics +syn keyword gnuplotKeyword nomx2tics nomy2tics nomcbtics +" set hidden3d +syn keyword gnuplotKeyword hidden3d offset trianglepattern undefined +syn keyword gnuplotKeyword altdiagonal noaltdiagonal bentover nobentover +syn keyword gnuplotKeyword noundefined +" set historysize +syn keyword gnuplotKeyword historysize +" set isosamples +syn keyword gnuplotKeyword isosamples +" set key +syn keyword gnuplotKeyword key on off inside outside at left right center +syn keyword gnuplotKeyword top bottom vertical horizontal Left Right +syn keyword gnuplotKeyword opaque noopaque reverse noreverse invert maxrows +syn keyword gnuplotKeyword noinvert samplen spacing width height autotitle +syn keyword gnuplotKeyword noautotitle title enhanced noenhanced font +syn keyword gnuplotKeyword textcolor box nobox linetype linewidth maxcols +" set label +syn keyword gnuplotKeyword label left center right rotate norotate by font +syn keyword gnuplotKeyword front back textcolor point nopoint offset boxed +syn keyword gnuplotKeyword hypertext +" set linetype +syn keyword gnuplotKeyword linetype +" set link +syn keyword gnuplotKeyword link via inverse +" set loadpath +syn keyword gnuplotKeyword loadpath +" set locale +syn keyword gnuplotKeyword locale +" set logscale +syn keyword gnuplotKeyword logscale log +" set macros +syn keyword gnuplotKeyword macros +" set mapping +syn keyword gnuplotKeyword mapping cartesian spherical cylindrical +" set mouse +syn keyword gnuplotKeyword mouse doubleclick nodoubleclick zoomcoordinates +syn keyword gnuplotKeyword nozoomcoordinates ruler noruler at polardistance +syn keyword gnuplotKeyword nopolardistance deg tan format clipboardformat +syn keyword gnuplotKeyword mouseformat labels nolabels zoomjump nozoomjump +syn keyword gnuplotKeyword verbose noverbose +" set multiplot +syn keyword gnuplotKeyword multiplot title font layout rowsfirst downwards +syn keyword gnuplotKeyword downwards upwards scale offset +" set object +syn keyword gnuplotKeyword object behind fillcolor fc fs rectangle ellipse +syn keyword gnuplotKeyword circle polygon at center size units xy xx yy to +syn keyword gnuplotKeyword from +" set offsets +syn keyword gnuplotKeyword offsets +" set origin +syn keyword gnuplotKeyword origin +" set output +syn keyword gnuplotKeyword output +" set parametric +syn keyword gnuplotKeyword parametric +" show plot +syn keyword gnuplotKeyword plot add2history +" set pm3d +syn keyword gnuplotKeyword hidden3d interpolate scansautomatic scansforward +syn keyword gnuplotKeyword scansbackward depthorder flush begin center end +syn keyword gnuplotKeyword ftriangles noftriangles clip1in clip4in mean map +syn keyword gnuplotKeyword corners2color geomean harmean rms median min max +syn keyword gnuplotKeyword c1 c2 c3 c4 pm3d at nohidden3d implicit explicit +" set palette +syn keyword gnuplotKeyword palette gray color gamma rgbformulae defined +syn keyword gnuplotKeyword file functions cubehelix start cycles saturation +syn keyword gnuplotKeyword model RGB HSV CMY YIQ XYZ positive negative +syn keyword gnuplotKeyword nops_allcF ps_allcF maxcolors float int gradient +syn keyword gnuplotKeyword fit2rgbformulae rgbformulae +" set pointintervalbox +syn keyword gnuplotKeyword pointintervalbox +" set pointsize +syn keyword gnuplotKeyword pointsize +" set polar +syn keyword gnuplotKeyword polar +" set print +syn keyword gnuplotKeyword print append +" set psdir +syn keyword gnuplotKeyword psdir +" set raxis +syn keyword gnuplotKeyword raxis rrange rtics +" set samples +syn keyword gnuplotKeyword samples +" set size +syn keyword gnuplotKeyword size square nosquare ratio noratio +" set style +syn keyword gnuplotKeyword style arrow auto back border boxplot +syn keyword gnuplotKeyword candlesticks circle clustered columnstacked data +syn keyword gnuplotKeyword default ellipse empty fill[ed] financebars +syn keyword gnuplotKeyword fraction front function gap graph head[s] +syn keyword gnuplotKeyword histogram increment labels lc line linecolor +syn keyword gnuplotKeyword linetype linewidth lt lw noborder nofilled +syn keyword gnuplotKeyword nohead nooutliers nowedge off opaque outliers +syn keyword gnuplotKeyword palette pattern pi pointinterval pointsize +syn keyword gnuplotKeyword pointtype ps pt radius range rectangle +syn keyword gnuplotKeyword rowstacked screen separation size solid sorted +syn keyword gnuplotKeyword textbox units unsorted userstyles wedge +syn keyword gnuplotKeyword x x2 xx xy yy +" set surface +syn keyword gnuplotKeyword surface implicit explicit +" set table +syn keyword gnuplotKeyword table +" set terminal (list of terminals) +syn keyword gnuplotKeyword terminal term push pop aed512 aed767 aifm aqua +syn keyword gnuplotKeyword be cairo cairolatex canvas cgm context corel +syn keyword gnuplotKeyword debug dumb dxf dxy800a eepic emf emxvga epscairo +syn keyword gnuplotKeyword epslatex epson_180dpi excl fig ggi gif gpic hpgl +syn keyword gnuplotKeyword grass hp2623a hp2648 hp500c hpljii hppj imagen +syn keyword gnuplotKeyword jpeg kyo latex linux lua mf mif mp next openstep +syn keyword gnuplotKeyword pbm pdf pdfcairo pm png pngcairo postscript +syn keyword gnuplotKeyword pslatex pstex pstricks qms qt regis sun svg svga +syn keyword gnuplotKeyword tek40 tek410x texdraw tgif tikz tkcanvas tpic +syn keyword gnuplotKeyword vgagl vws vx384 windows wx wxt x11 xlib +" keywords for 'set terminal' +syn keyword gnuplotKeyword color monochrome dashlength dl eps pdf fontscale +syn keyword gnuplotKeyword standalone blacktext colortext colourtext header +syn keyword gnuplotKeyword noheader mono color solid dashed notransparent +syn keyword gnuplotKeyword crop crop background input rounded butt square +syn keyword gnuplotKeyword size fsize standalone name jsdir defaultsize +syn keyword gnuplotKeyword timestamp notimestamp colour mitered beveled +syn keyword gnuplotKeyword round squared palfuncparam blacktext nec_cp6 +syn keyword gnuplotKeyword mppoints inlineimages externalimages defaultfont +syn keyword gnuplotKeyword aspect feed nofeed rotate small tiny standalone +syn keyword gnuplotKeyword oldstyle newstyle level1 leveldefault level3 +syn keyword gnuplotKeyword background nobackground solid clip noclip +syn keyword gnuplotKeyword colortext colourtext epson_60dpi epson_lx800 +syn keyword gnuplotKeyword okidata starc tandy_60dpi dpu414 nec_cp6 draft +syn keyword gnuplotKeyword medium large normal landscape portrait big +syn keyword gnuplotKeyword inches pointsmax textspecial texthidden +syn keyword gnuplotKeyword thickness depth version acceleration giant +syn keyword gnuplotKeyword delay loop optimize nooptimize pspoints +syn keyword gnuplotKeyword FNT9X17 FNT13X25 interlace nointerlace courier +syn keyword gnuplotKeyword originreset nooriginreset gparrows nogparrows +syn keyword gnuplotKeyword picenvironment nopicenvironment tightboundingbox +syn keyword gnuplotKeyword notightboundingbox charsize gppoints nogppoints +syn keyword gnuplotKeyword fontscale textscale fulldoc nofulldoc standalone +syn keyword gnuplotKeyword preamble header tikzplot tikzarrows notikzarrows +syn keyword gnuplotKeyword cmykimages externalimages noexternalimages +syn keyword gnuplotKeyword polyline vectors magnification psnfss nopsnfss +syn keyword gnuplotKeyword psnfss-version7 prologues a4paper amstex fname +syn keyword gnuplotKeyword fsize server persist widelines interlace +syn keyword gnuplotKeyword truecolor notruecolor defaultplex simplex duplex +syn keyword gnuplotKeyword nofontfiles adobeglyphnames noadobeglyphnames +syn keyword gnuplotKeyword nostandalone metric textrigid animate nopspoints +syn keyword gnuplotKeyword hpdj FNT5X9 roman emtex rgbimages bitmap +syn keyword gnuplotKeyword nobitmap providevars nointerlace add delete +syn keyword gnuplotKeyword auxfile hacktext unit raise palfuncparam +syn keyword gnuplotKeyword noauxfile nohacktext nounit noraise ctrl noctrl +syn keyword gnuplotKeyword close widget fixed dynamic tek40xx vttek +syn keyword gnuplotKeyword kc-tek40xx km-tek40xx bitgraph perltk +syn keyword gnuplotKeyword interactive red green blue interpolate mode +syn keyword gnuplotKeyword position ctrlq replotonresize position noctrlq +syn keyword gnuplotKeyword noreplotonresize +" set termoption +syn keyword gnuplotKeyword termoption font fontscale solid dashed +" set tics +syn keyword gnuplotKeyword tics add axis border mirror nomirror in out +syn keyword gnuplotKeyword scale rotate norotate by offset nooffset left +syn keyword gnuplotKeyword autojustify format font textcolor right center +" deprecated set ticslevel +syn keyword gnuplotError ticslevel ticscale +" set timestamp +syn keyword gnuplotKeyword timestamp top bottom offset font +" set timefmt +syn keyword gnuplotKeyword timefmt +" set title +syn keyword gnuplotKeyword title offset font textcolor tc +" set ranges +syn keyword gnuplotKeyword trange urange vrange +" show variables +syn keyword gnuplotKeyword variables +" show version +syn keyword gnuplotKeyword version +" set view +syn keyword gnuplotKeyword view map equal noequal xy xyz +" set x2data +syn keyword gnuplotKeyword xdata ydata zdata x2data y2data cbdata xdtics +syn keyword gnuplotKeyword ydtics zdtics x2dtics y2dtics cbdtics xzeroaxis +syn keyword gnuplotKeyword yzeroaxis zzeroaxis x2zeroaxis y2zeroaxis +syn keyword gnuplotKeyword cbzeroaxis time geographic +" set label +syn keyword gnuplotKeyword xlabel ylabel zlabel x2label y2label cblabel +syn keyword gnuplotKeyword offset font textcolor by parallel +" set range +syn keyword gnuplotKeyword xrange yrange zrange x2range y2range cbrange +" set xyplane +syn keyword gnuplotKeyword xyplane +" set zeroaxis +" set zero +syn keyword gnuplotKeyword zero +" set zeroaxis +syn keyword gnuplotKeyword zeroaxis + +" keywords for 'stats' command +syn keyword gnuplotKeyword nooutput + +" keywords for 'test' command +syn keyword gnuplotKeyword terminal palette rgb rbg grb gbr brg bgr + +" The transparent gnuplot keyword cannot use 'syn keyword' as transparent +" has a special meaning in :syntax commands. +syn match gnuplotKeyword "\" + +" ---- Macros ---- " + +syn match gnuplotMacro "@\w*" + +" ---- Todos ---- " + +syn keyword gnuplotTodo contained TODO FIXME XXX + +" ---- Types: gnuplot commands ---- " + +" I set the commands as Types to distinguish them visually from keywords for the +" commands. This comes at the end of the syntax file because some commands +" are redundant with keywords. It's probably too much trouble to go and +" create special regions for each redundant keyword/command pair, which means +" that some keywords (e.g. 'p') will be highlighted as commands. + +syn keyword gnuplotStatement cd call clear evaluate exit fit help history +syn keyword gnuplotStatement load lower pause plot p print pwd quit raise +syn keyword gnuplotStatement refresh replot rep reread reset save set show +syn keyword gnuplotStatement shell splot spstats stats system test undefine +syn keyword gnuplotStatement unset update + +" ---- Define the default highlighting ---- " +" Only when an item doesn't have highlighting yet + +" ---- Comments ---- " +hi def link gnuplotComment Comment + +" ---- Constants ---- " +hi def link gnuplotString String +hi def link gnuplotNumber Number +hi def link gnuplotFloat Float + +" ---- Identifiers ---- " +hi def link gnuplotIdentifier Identifier + +" ---- Statements ---- " +hi def link gnuplotConditional Conditional +hi def link gnuplotRepeat Repeat +hi def link gnuplotKeyword Keyword +hi def link gnuplotOperator Operator + +" ---- PreProcs ---- " +hi def link gnuplotMacro Macro + +" ---- Types ---- " +hi def link gnuplotStatement Type +hi def link gnuplotFunc Identifier + +" ---- Specials ---- " +hi def link gnuplotSpecial Special +hi def link gnuplotUnit Special +hi def link gnuplotExternal Special + +" ---- Errors ---- " +hi def link gnuplotError Error +hi def link gnuplotOctalError Error + +" ---- Todos ---- " +hi def link gnuplotTodo Todo + + +let b:current_syntax = "gnuplot" + +" vim: ts=8 diff --git a/.config/vim/syntax/go.vim b/.config/vim/syntax/go.vim new file mode 100644 index 0000000..feed964 --- /dev/null +++ b/.config/vim/syntax/go.vim @@ -0,0 +1,561 @@ +" Copyright 2009 The Go Authors. All rights reserved. +" Use of this source code is governed by a BSD-style +" license that can be found in the LICENSE file. +" +" go.vim: Vim syntax file for Go. +" Language: Go +" Maintainer: Billie Cleek +" Latest Revision: 2024-04-13 +" 2024-03-17: - fix goPackageComment highlight (by Vim Project) +" License: BSD-style. See LICENSE file in source repository. +" Repository: https://github.com/fatih/vim-go + +" Quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:keepcpo = &cpo +set cpo&vim + +function! s:FoldEnable(...) abort + if a:0 > 0 + return index(s:FoldEnable(), a:1) > -1 + endif + return get(g:, 'go_fold_enable', ['block', 'import', 'varconst', 'package_comment']) +endfunction + +function! s:HighlightArrayWhitespaceError() abort + return get(g:, 'go_highlight_array_whitespace_error', 0) +endfunction + +function! s:HighlightChanWhitespaceError() abort + return get(g:, 'go_highlight_chan_whitespace_error', 0) +endfunction + +function! s:HighlightExtraTypes() abort + return get(g:, 'go_highlight_extra_types', 0) +endfunction + +function! s:HighlightSpaceTabError() abort + return get(g:, 'go_highlight_space_tab_error', 0) +endfunction + +function! s:HighlightTrailingWhitespaceError() abort + return get(g:, 'go_highlight_trailing_whitespace_error', 0) +endfunction + +function! s:HighlightOperators() abort + return get(g:, 'go_highlight_operators', 0) +endfunction + +function! s:HighlightFunctions() abort + return get(g:, 'go_highlight_functions', 0) +endfunction + +function! s:HighlightFunctionParameters() abort + return get(g:, 'go_highlight_function_parameters', 0) +endfunction + +function! s:HighlightFunctionCalls() abort + return get(g:, 'go_highlight_function_calls', 0) +endfunction + +function! s:HighlightFields() abort + return get(g:, 'go_highlight_fields', 0) +endfunction + +function! s:HighlightTypes() abort + return get(g:, 'go_highlight_types', 0) +endfunction + +function! s:HighlightBuildConstraints() abort + return get(g:, 'go_highlight_build_constraints', 0) +endfunction + +function! s:HighlightStringSpellcheck() abort + return get(g:, 'go_highlight_string_spellcheck', 1) +endfunction + +function! s:HighlightFormatStrings() abort + return get(g:, 'go_highlight_format_strings', 1) +endfunction + +function! s:HighlightGenerateTags() abort + return get(g:, 'go_highlight_generate_tags', 0) +endfunction + +function! s:HighlightVariableAssignments() abort + return get(g:, 'go_highlight_variable_assignments', 0) +endfunction + +function! s:HighlightVariableDeclarations() abort + return get(g:, 'go_highlight_variable_declarations', 0) +endfunction + +syn case match + +syn keyword goPackage package +syn keyword goImport import contained +syn keyword goVar var contained +syn keyword goConst const contained + +hi def link goPackage Statement +hi def link goImport Statement +hi def link goVar Keyword +hi def link goConst Keyword +hi def link goDeclaration Keyword + +" Keywords within functions +syn keyword goStatement defer go goto return break continue fallthrough +syn keyword goConditional if else switch select +syn keyword goLabel case default +syn keyword goRepeat for range + +hi def link goStatement Statement +hi def link goConditional Conditional +hi def link goLabel Label +hi def link goRepeat Repeat + +" Predefined types +syn keyword goType chan map bool string error any comparable +syn keyword goSignedInts int int8 int16 int32 int64 rune +syn keyword goUnsignedInts byte uint uint8 uint16 uint32 uint64 uintptr +syn keyword goFloats float32 float64 +syn keyword goComplexes complex64 complex128 + +hi def link goType Type +hi def link goSignedInts Type +hi def link goUnsignedInts Type +hi def link goFloats Type +hi def link goComplexes Type + +" Predefined functions and values +syn keyword goBuiltins append cap clear close complex copy delete imag len +syn keyword goBuiltins make max min new panic print println real recover +syn keyword goBoolean true false +syn keyword goPredefinedIdentifiers nil iota + +hi def link goBuiltins Identifier +hi def link goPredefinedIdentifiers Constant +" Boolean links to Constant by default by vim: goBoolean and goPredefinedIdentifiers +" will be highlighted the same, but having the separate groups allows users to +" have separate highlighting for them if they desire. +hi def link goBoolean Boolean + +" Comments; their contents +syn keyword goTodo contained TODO FIXME XXX BUG +syn cluster goCommentGroup contains=goTodo + +syn region goComment start="//" end="$" contains=goGenerate,@goCommentGroup,@Spell +if s:FoldEnable('comment') + syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell fold + syn match goComment "\v(^\s*//.*\n)+" contains=goGenerate,@goCommentGroup,@Spell fold +else + syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell +endif + +hi def link goComment Comment +hi def link goTodo Todo + +if s:HighlightGenerateTags() + syn match goGenerateVariables contained /\%(\$GOARCH\|\$GOOS\|\$GOFILE\|\$GOLINE\|\$GOPACKAGE\|\$DOLLAR\)\>/ + syn region goGenerate start="^\s*//go:generate" end="$" contains=goGenerateVariables + hi def link goGenerate PreProc + hi def link goGenerateVariables Special +endif + +" Go escapes +syn match goEscapeOctal display contained "\\[0-7]\{3}" +syn match goEscapeC display contained +\\[abfnrtv\\'"]+ +syn match goEscapeX display contained "\\x\x\{2}" +syn match goEscapeU display contained "\\u\x\{4}" +syn match goEscapeBigU display contained "\\U\x\{8}" +syn match goEscapeError display contained +\\[^0-7xuUabfnrtv\\'"]+ + +hi def link goEscapeOctal goSpecialString +hi def link goEscapeC goSpecialString +hi def link goEscapeX goSpecialString +hi def link goEscapeU goSpecialString +hi def link goEscapeBigU goSpecialString +hi def link goSpecialString Special +hi def link goEscapeError Error + +" Strings and their contents +syn cluster goStringGroup contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU,goEscapeError +if s:HighlightStringSpellcheck() + syn region goString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@goStringGroup,@Spell + syn region goRawString start=+`+ end=+`+ contains=@Spell +else + syn region goString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@goStringGroup + syn region goRawString start=+`+ end=+`+ +endif + +syn match goImportString /^\%(\s\+\|import \)\(\h\w* \)\?\zs"[^"]\+"/ contained containedin=goImport + +if s:HighlightFormatStrings() + " [n] notation is valid for specifying explicit argument indexes + " 1. Match a literal % not preceded by a %. + " 2. Match any number of -, #, 0, space, or + + " 3. Match * or [n]* or any number or nothing before a . + " 4. Match * or [n]* or any number or nothing after a . + " 5. Match [n] or nothing before a verb + " 6. Match a formatting verb + syn match goFormatSpecifier /\ + \%([^%]\%(%%\)*\)\ + \@<=%[-#0 +]*\ + \%(\%(\%(\[\d\+\]\)\=\*\)\|\d\+\)\=\ + \%(\.\%(\%(\%(\[\d\+\]\)\=\*\)\|\d\+\)\=\)\=\ + \%(\[\d\+\]\)\=[vTtbcdoqxXUeEfFgGspw]/ contained containedin=goString,goRawString + hi def link goFormatSpecifier goSpecialString +endif + +hi def link goImportString String +hi def link goString String +hi def link goRawString String + +" Characters; their contents +syn cluster goCharacterGroup contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU +syn region goCharacter start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@goCharacterGroup + +hi def link goCharacter Character + +" Regions +syn region goParen start='(' end=')' transparent +if s:FoldEnable('block') + syn region goBlock start="{" end="}" transparent fold +else + syn region goBlock start="{" end="}" transparent +endif + +" import +if s:FoldEnable('import') + syn region goImport start='import (' end=')' transparent fold contains=goImport,goImportString,goComment + syn match goImport /^import ()/ transparent fold contains=goImport +else + syn region goImport start='import (' end=')' transparent contains=goImport,goImportString,goComment + syn match goImport /^import ()/ transparent contains=goImport +endif + +" var, const +if s:FoldEnable('varconst') + syn region goVar start='var (' end='^\s*)$' transparent fold + \ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goParamName,goParamType,goSimpleParams,goPointerOperator + syn match goVar /var ()/ transparent fold + \ contains=goVar + syn region goConst start='const (' end='^\s*)$' transparent fold + \ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goParamName,goParamType,goSimpleParams,goPointerOperator + syn match goConst /const ()/ transparent fold + \ contains=goConst +else + syn region goVar start='var (' end='^\s*)$' transparent + \ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goParamName,goParamType,goSimpleParams,goPointerOperator + syn match goVar /var ()/ transparent + \ contains=goVar + syn region goConst start='const (' end='^\s*)$' transparent + \ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goParamName,goParamType,goSimpleParams,goPointerOperator + syn match goConst /const ()/ transparent + \ contains=goConst +endif + +" Single-line var, const, and import. +syn match goSingleDecl /\%(import\|var\|const\) [^(]\@=/ contains=goImport,goVar,goConst + +" Integers +syn match goDecimalInt "\<-\=\%(0\|\%(\d\|\d_\d\)\+\)\>" +syn match goHexadecimalInt "\<-\=0[xX]_\?\%(\x\|\x_\x\)\+\>" +syn match goOctalInt "\<-\=0[oO]\?_\?\%(\o\|\o_\o\)\+\>" +syn match goBinaryInt "\<-\=0[bB]_\?\%([01]\|[01]_[01]\)\+\>" + +hi def link goDecimalInt Integer +hi def link goDecimalError Error +hi def link goHexadecimalInt Integer +hi def link goHexadecimalError Error +hi def link goOctalInt Integer +hi def link goOctalError Error +hi def link goBinaryInt Integer +hi def link goBinaryError Error +hi def link Integer Number + +" Floating point +"float_lit = decimal_float_lit | hex_float_lit . +" +"decimal_float_lit = decimal_digits "." [ decimal_digits ] [ decimal_exponent ] | +" decimal_digits decimal_exponent | +" "." decimal_digits [ decimal_exponent ] . +"decimal_exponent = ( "e" | "E" ) [ "+" | "-" ] decimal_digits . +" +"hex_float_lit = "0" ( "x" | "X" ) hex_mantissa hex_exponent . +"hex_mantissa = [ "_" ] hex_digits "." [ hex_digits ] | +" [ "_" ] hex_digits | +" "." hex_digits . +"hex_exponent = ( "p" | "P" ) [ "+" | "-" ] decimal_digits . +" decimal floats with a decimal point +syn match goFloat "\<-\=\%(0\|\%(\d\|\d_\d\)\+\)\.\%(\%(\%(\d\|\d_\d\)\+\)\=\%([Ee][-+]\=\%(\d\|\d_\d\)\+\)\=\>\)\=" +syn match goFloat "\s\zs-\=\.\%(\d\|\d_\d\)\+\%(\%([Ee][-+]\=\%(\d\|\d_\d\)\+\)\>\)\=" +" decimal floats without a decimal point +syn match goFloat "\<-\=\%(0\|\%(\d\|\d_\d\)\+\)[Ee][-+]\=\%(\d\|\d_\d\)\+\>" +" hexadecimal floats with a decimal point +syn match goHexadecimalFloat "\<-\=0[xX]\%(_\x\|\x\)\+\.\%(\%(\x\|\x_\x\)\+\)\=\%([Pp][-+]\=\%(\d\|\d_\d\)\+\)\=\>" +syn match goHexadecimalFloat "\<-\=0[xX]\.\%(\x\|\x_\x\)\+\%([Pp][-+]\=\%(\d\|\d_\d\)\+\)\=\>" +" hexadecimal floats without a decimal point +syn match goHexadecimalFloat "\<-\=0[xX]\%(_\x\|\x\)\+[Pp][-+]\=\%(\d\|\d_\d\)\+\>" + +hi def link goFloat Float +hi def link goHexadecimalFloat Float + +" Imaginary literals +syn match goImaginaryDecimal "\<-\=\%(0\|\%(\d\|\d_\d\)\+\)i\>" +syn match goImaginaryHexadecimal "\<-\=0[xX]_\?\%(\x\|\x_\x\)\+i\>" +syn match goImaginaryOctal "\<-\=0[oO]\?_\?\%(\o\|\o_\o\)\+i\>" +syn match goImaginaryBinary "\<-\=0[bB]_\?\%([01]\|[01]_[01]\)\+i\>" + +" imaginary decimal floats with a decimal point +syn match goImaginaryFloat "\<-\=\%(0\|\%(\d\|\d_\d\)\+\)\.\%(\%(\%(\d\|\d_\d\)\+\)\=\%([Ee][-+]\=\%(\d\|\d_\d\)\+\)\=\)\=i\>" +syn match goImaginaryFloat "\s\zs-\=\.\%(\d\|\d_\d\)\+\%([Ee][-+]\=\%(\d\|\d_\d\)\+\)\=i\>" +" imaginary decimal floats without a decimal point +syn match goImaginaryFloat "\<-\=\%(0\|\%(\d\|\d_\d\)\+\)[Ee][-+]\=\%(\d\|\d_\d\)\+i\>" +" imaginary hexadecimal floats with a decimal point +syn match goImaginaryHexadecimalFloat "\<-\=0[xX]\%(_\x\|\x\)\+\.\%(\%(\x\|\x_\x\)\+\)\=\%([Pp][-+]\=\%(\d\|\d_\d\)\+\)\=i\>" +syn match goImaginaryHexadecimalFloat "\<-\=0[xX]\.\%(\x\|\x_\x\)\+\%([Pp][-+]\=\%(\d\|\d_\d\)\+\)\=i\>" +" imaginary hexadecimal floats without a decimal point +syn match goImaginaryHexadecimalFloat "\<-\=0[xX]\%(_\x\|\x\)\+[Pp][-+]\=\%(\d\|\d_\d\)\+i\>" + +hi def link goImaginaryDecimal Number +hi def link goImaginaryHexadecimal Number +hi def link goImaginaryOctal Number +hi def link goImaginaryBinary Number +hi def link goImaginaryFloat Float +hi def link goImaginaryHexadecimalFloat Float + +" Spaces after "[]" +if s:HighlightArrayWhitespaceError() + syn match goSpaceError display "\%(\[\]\)\@<=\s\+" +endif + +" Spacing errors around the 'chan' keyword +if s:HighlightChanWhitespaceError() + " receive-only annotation on chan type + " + " \(\\)\@\)\@\)\@=" + + " send-only annotation on chan type + " + " \(<-\)\@ (only pick chan when it doesn't come after an arrow) + " this prevents picking up '<-chan <-chan' but not 'chan <-' + syn match goSpaceError display "\%(\%(<-\)\@\)\@<=\s\+\%(<-\)\@=" + + " value-ignoring receives in a few contexts + syn match goSpaceError display "\%(\%(^\|[={(,;]\)\s*<-\)\@<=\s\+" +endif + +" Extra types commonly seen +if s:HighlightExtraTypes() + syn match goExtraType /\/ + syn match goExtraType /\/ + syn match goExtraType /\/ + syn match goExtraType /\/ + syn match goExtraType /\/ +endif + +" Space-tab error +if s:HighlightSpaceTabError() + syn match goSpaceError display " \+\t"me=e-1 +endif + +" Trailing white space error +if s:HighlightTrailingWhitespaceError() + syn match goSpaceError display excludenl "\s\+$" +endif + +hi def link goExtraType Type +hi def link goSpaceError Error + + + +" included from: https://github.com/athom/more-colorful.vim/blob/master/after/syntax/go.vim +" +" Comments; their contents +syn keyword goTodo contained NOTE +hi def link goTodo Todo + +syn match goVarArgs /\.\.\./ + +" Operators; +if s:HighlightOperators() + " match single-char operators: - + % < > ! & | ^ * = + " and corresponding two-char operators: -= += %= <= >= != &= |= ^= *= == + syn match goOperator /[-+%<>!&|^*=]=\?/ + " match / and /= + syn match goOperator /\/\%(=\|\ze[^/*]\)/ + " match two-char operators: << >> &^ + " and corresponding three-char operators: <<= >>= &^= + syn match goOperator /\%(<<\|>>\|&^\)=\?/ + " match remaining two-char operators: := && || <- ++ -- + syn match goOperator /:=\|||\|<-\|++\|--/ + " match ~ + syn match goOperator /\~/ + " match ... + + hi def link goPointerOperator goOperator + hi def link goVarArgs goOperator +endif +hi def link goOperator Operator + +" -> type constraint opening bracket +" |-> start non-counting group +" || -> any word character +" || | -> at least one, as many as possible +" || | | -> start non-counting group +" || | | | -> match ~ +" || | | | | -> at most once +" || | | | | | -> allow a slice type +" || | | | | | | -> any word character +" || | | | | | | | -> start a non-counting group +" || | | | | | | | | -> that matches word characters and | +" || | | | | | | | | | -> close the non-counting group +" || | | | | | | | | | | -> close the non-counting group +" || | | | | | | | | | | |-> any number of matches +" || | | | | | | | | | | || -> start a non-counting group +" || | | | | | | | | | | || | -> a comma and whitespace +" || | | | | | | | | | | || | | -> at most once +" || | | | | | | | | | | || | | | -> close the non-counting group +" || | | | | | | | | | | || | | | | -> at least one of those non-counting groups, as many as possible +" || | | | | | -------- | | | | || | | | | | -> type constraint closing bracket +" || | | | | || | | | | | || | | | | | | +syn match goTypeParams /\[\%(\w\+\s\+\%(\~\?\%(\[]\)\?\w\%(\w\||\)\)*\%(,\s*\)\?\)\+\]/ nextgroup=goSimpleParams,goDeclType contained + +" Functions; +if s:HighlightFunctions() || s:HighlightFunctionParameters() + syn match goDeclaration /\/ nextgroup=goReceiver,goFunction,goSimpleParams skipwhite skipnl + syn match goReceiverDecl /(\s*\zs\%(\%(\w\+\s\+\)\?\*\?\w\+\%(\[\%(\%(\[\]\)\?\w\+\%(,\s*\)\?\)\+\]\)\?\)\ze\s*)/ contained contains=goReceiverVar,goReceiverType,goPointerOperator + syn match goReceiverVar /\w\+\ze\s\+\%(\w\|\*\)/ nextgroup=goPointerOperator,goReceiverType skipwhite skipnl contained + syn match goPointerOperator /\*/ nextgroup=goReceiverType contained skipwhite skipnl + syn match goFunction /\w\+/ nextgroup=goSimpleParams,goTypeParams contained skipwhite skipnl + syn match goReceiverType /\w\+\%(\[\%(\%(\[\]\)\?\w\+\%(,\s*\)\?\)\+\]\)\?\ze\s*)/ contained + if s:HighlightFunctionParameters() + syn match goSimpleParams /(\%(\w\|\_s\|[*\.\[\],\{\}<>-]\)*)/ contained contains=goParamName,goType nextgroup=goFunctionReturn skipwhite skipnl + syn match goFunctionReturn /(\%(\w\|\_s\|[*\.\[\],\{\}<>-]\)*)/ contained contains=goParamName,goType skipwhite skipnl + syn match goParamName /\w\+\%(\s*,\s*\w\+\)*\ze\s\+\%(\w\|\.\|\*\|\[\)/ contained nextgroup=goParamType skipwhite skipnl + syn match goParamType /\%([^,)]\|\_s\)\+,\?/ contained nextgroup=goParamName skipwhite skipnl + \ contains=goVarArgs,goType,goSignedInts,goUnsignedInts,goFloats,goComplexes,goDeclType,goBlock + hi def link goReceiverVar goParamName + hi def link goParamName Identifier + endif + syn match goReceiver /(\s*\%(\w\+\s\+\)\?\*\?\s*\w\+\%(\[\%(\%(\[\]\)\?\w\+\%(,\s*\)\?\)\+\]\)\?\s*)\ze\s*\w/ contained nextgroup=goFunction contains=goReceiverDecl skipwhite skipnl +else + syn keyword goDeclaration func +endif +hi def link goFunction Function + +" Function calls; +if s:HighlightFunctionCalls() + syn match goFunctionCall /\w\+\ze\%(\[\%(\%(\[]\)\?\w\+\(,\s*\)\?\)\+\]\)\?(/ contains=goBuiltins,goDeclaration +endif +hi def link goFunctionCall Type + +" Fields; +if s:HighlightFields() + " 1. Match a sequence of word characters coming after a '.' + " 2. Require the following but dont match it: ( \@= see :h E59) + " - The symbols: / - + * % OR + " - The symbols: [] {} <> ) OR + " - The symbols: \n \r space OR + " - The symbols: , : . + " 3. Have the start of highlight (hs) be the start of matched + " pattern (s) offsetted one to the right (+1) (see :h E401) + syn match goField /\.\w\+\ + \%(\%([\/\-\+*%]\)\|\ + \%([\[\]{}<\>\)]\)\|\ + \%([\!=\^|&]\)\|\ + \%([\n\r\ ]\)\|\ + \%([,\:.]\)\)\@=/hs=s+1 +endif +hi def link goField Identifier + +" Structs & Interfaces; +if s:HighlightTypes() + syn match goTypeConstructor /\<\w\+{\@=/ + syn match goTypeDecl /\/ nextgroup=goTypeName skipwhite skipnl + syn match goTypeName /\w\+/ contained nextgroup=goDeclType,goTypeParams skipwhite skipnl + syn match goDeclType /\<\%(interface\|struct\)\>/ skipwhite skipnl + hi def link goReceiverType Type +else + syn keyword goDeclType struct interface + syn keyword goDeclaration type +endif +hi def link goTypeConstructor Type +hi def link goTypeName Type +hi def link goTypeDecl Keyword +hi def link goDeclType Keyword + +" Variable Assignments +if s:HighlightVariableAssignments() + syn match goVarAssign /\v[_.[:alnum:]]+(,\s*[_.[:alnum:]]+)*\ze(\s*([-^+|^\/%&]|\*|\<\<|\>\>|\&\^)?\=[^=])/ + hi def link goVarAssign Special +endif + +" Variable Declarations +if s:HighlightVariableDeclarations() + syn match goVarDefs /\v\w+(,\s*\w+)*\ze(\s*:\=)/ + hi def link goVarDefs Special +endif + +" Build Constraints +if s:HighlightBuildConstraints() + syn match goBuildKeyword display contained "+build\|go:build" + " Highlight the known values of GOOS, GOARCH, and other +build options. + syn keyword goBuildDirectives contained + \ android darwin dragonfly freebsd linux nacl netbsd openbsd plan9 + \ solaris windows 386 amd64 amd64p32 arm armbe arm64 arm64be ppc64 + \ ppc64le mips mipsle mips64 mips64le mips64p32 mips64p32le ppc + \ s390 s390x sparc sparc64 cgo ignore race + + " Other words in the build directive are build tags not listed above, so + " avoid highlighting them as comments by using a matchgroup just for the + " start of the comment. + " The rs=s+2 option lets the \s*+build portion be part of the inner region + " instead of the matchgroup so it will be highlighted as a goBuildKeyword. + syn region goBuildComment matchgroup=goBuildCommentStart + \ start="//\(\s*+build\s\|go:build\)"rs=s+2 end="$" + \ contains=goBuildKeyword,goBuildDirectives + hi def link goBuildCommentStart Comment + hi def link goBuildDirectives Type + hi def link goBuildKeyword PreProc +endif + +if s:HighlightBuildConstraints() || s:FoldEnable('package_comment') + " One or more line comments that are followed immediately by a "package" + " declaration are treated like package documentation, so these must be + " matched as comments to avoid looking like working build constraints. + " The he, me, and re options let the "package" itself be highlighted by + " the usual rules. + exe 'syn region goPackageComment start=/\v(\/\/.*\n)+\s*package\s/' + \ . ' end=/\v\n\s*package\s/he=e-8,me=e-8,re=e-8' + \ . ' contains=@goCommentGroup,@Spell' + \ . (s:FoldEnable('package_comment') ? ' fold' : '') + exe 'syn region goPackageComment start=/\v^\s*\/\*.*\n(.*\n)*\s*\*\/\npackage\s/' + \ . ' end=/\v\*\/\n\s*package\s/he=e-8,me=e-8,re=e-8' + \ . ' contains=@goCommentGroup,@Spell' + \ . (s:FoldEnable('package_comment') ? ' fold' : '') + hi def link goPackageComment Comment +endif + +" :GoCoverage commands +hi def link goCoverageNormalText Comment + +" Search backwards for a global declaration to start processing the syntax. +"syn sync match goSync grouphere NONE /^\(const\|var\|type\|func\)\>/ + +" There's a bug in the implementation of grouphere. For now, use the +" following as a more expensive/less precise workaround. +syn sync minlines=500 + +let b:current_syntax = "go" + +let &cpo = s:keepcpo +unlet s:keepcpo + +" vim: sw=2 sts=2 et diff --git a/.config/vim/syntax/goaccess.vim b/.config/vim/syntax/goaccess.vim new file mode 100644 index 0000000..4ca8f6d --- /dev/null +++ b/.config/vim/syntax/goaccess.vim @@ -0,0 +1,34 @@ +" Vim syntax file +" Language: GoAccess configuration +" Maintainer: Adam Monsen +" Last Change: 2024 Aug 1 +" Remark: see https://goaccess.io/man#configuration +" +" The GoAccess configuration file syntax is line-separated settings. Settings +" are space-separated key value pairs. Comments are any line starting with a +" hash mark. +" Example: https://github.com/allinurl/goaccess/blob/master/config/goaccess.conf +" +" This syntax definition supports todo/fixme highlighting in comments, and +" special (Keyword) highlighting if a setting's value is 'true' or 'false'. +" +" TODO: a value is required, so use extreme highlighting (e.g. bright red +" background) if a setting is missing a value. + +if exists("b:current_syntax") + finish +endif + +syn match goaccessSettingName '^[a-z-]\+' nextgroup=goaccessSettingValue +syn match goaccessSettingValue '\s\+.\+$' contains=goaccessKeyword +syn match goaccessComment "^#.*$" contains=goaccessTodo,@Spell +syn keyword goaccessTodo TODO FIXME contained +syn keyword goaccessKeyword true false contained + +hi def link goaccessSettingName Type +hi def link goaccessSettingValue String +hi def link goaccessComment Comment +hi def link goaccessTodo Todo +hi def link goaccessKeyword Keyword + +let b:current_syntax = "goaccess" diff --git a/.config/vim/syntax/godoc.vim b/.config/vim/syntax/godoc.vim new file mode 100644 index 0000000..0603f51 --- /dev/null +++ b/.config/vim/syntax/godoc.vim @@ -0,0 +1,19 @@ +" Vim syntax file +" Language: Godoc (generated documentation for go) +" Maintainer: David Barnett (https://github.com/google/vim-ft-go) +" Last Change: 2014 Aug 16 + +if exists('b:current_syntax') + finish +endif + +syn case match +syn match godocTitle "^\([A-Z][A-Z ]*\)$" + + +hi def link godocTitle Title + + +let b:current_syntax = 'godoc' + +" vim: sw=2 sts=2 et diff --git a/.config/vim/syntax/gp.vim b/.config/vim/syntax/gp.vim new file mode 100644 index 0000000..89f2d3f --- /dev/null +++ b/.config/vim/syntax/gp.vim @@ -0,0 +1,88 @@ +" Vim syntax file +" Language: gp (version 2.15) +" Maintainer: Karim Belabas +" Last change: 2023 Aug 22 +" URL: http://pari.math.u-bordeaux.fr + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" control statements +syntax keyword gpStatement break return next +syntax keyword gpConditional if iferr +syntax keyword gpRepeat until while for forcomposite fordiv +syntax keyword gpRepeat fordivfactored foreach forell forfactored +syntax keyword gpRepeat forpart forperm forprime forprimestep forqfvec +syntax keyword gpRepeat forsquarefree forstep forsubgroup forsubset +syntax keyword gpRepeat forvec +syntax keyword gpRepeat parfor parforeach parforprime parforprimestep +syntax keyword gpRepeat parforvec +" storage class +syntax keyword gpScope my local global export exportall +" defaults +syntax keyword gpInterfaceKey breakloop colors compatible +syntax keyword gpInterfaceKey datadir debug debugfiles debugmem +syntax keyword gpInterfaceKey echo factor_add_primes factor_proven format +syntax keyword gpInterfaceKey graphcolormap graphcolors +syntax keyword gpInterfaceKey help histfile histsize +syntax keyword gpInterfaceKey lines linewrap log logfile nbthreads +syntax keyword gpInterfaceKey new_galois_format output parisize parisizemax +syntax keyword gpInterfaceKey path plothsizes prettyprinter primelimit prompt +syntax keyword gpInterfaceKey prompt_cont psfile readline realbitprecision +syntax keyword gpInterfaceKey realprecision recover secure seriesprecision +syntax keyword gpInterfaceKey simplify sopath strictmatch TeXstyle +syntax keyword gpInterfaceKey threadsize threadsizemax timer + +syntax match gpInterface "^\s*\\[a-z].*" +syntax keyword gpInterface default +syntax keyword gpInput read input + +" functions +syntax match gpFunRegion "^\s*[a-zA-Z][_a-zA-Z0-9]*(.*)\s*=\s*[^ \t=]"me=e-1 contains=gpFunction,gpArgs +syntax match gpFunRegion "^\s*[a-zA-Z][_a-zA-Z0-9]*(.*)\s*=\s*$" contains=gpFunction,gpArgs +syntax match gpArgs contained "[a-zA-Z][_a-zA-Z0-9]*" +syntax match gpFunction contained "^\s*[a-zA-Z][_a-zA-Z0-9]*("me=e-1 + +" String and Character constants +" Highlight special (backslash'ed) characters differently +syntax match gpSpecial contained "\\[ent\\]" +syntax region gpString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=gpSpecial + +"comments +syntax region gpComment start="/\*" end="\*/" contains=gpTodo +syntax match gpComment "\\\\.*" contains=gpTodo +syntax keyword gpTodo contained TODO +syntax sync ccomment gpComment minlines=10 + +"catch errors caused by wrong parenthesis +syntax region gpParen transparent start='(' end=')' contains=ALLBUT,gpParenError,gpTodo,gpFunction,gpArgs,gpSpecial +syntax match gpParenError ")" +syntax match gpInParen contained "[{}]" + +hi def link gpConditional Conditional +hi def link gpRepeat Repeat +hi def link gpError Error +hi def link gpParenError gpError +hi def link gpInParen gpError +hi def link gpStatement Statement +hi def link gpString String +hi def link gpComment Comment +hi def link gpInterface Type +hi def link gpInput Type +hi def link gpInterfaceKey Statement +hi def link gpFunction Function +hi def link gpScope Type +" contained ones +hi def link gpSpecial Special +hi def link gpTodo Todo +hi def link gpArgs Type + +let b:current_syntax = "gp" +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8 diff --git a/.config/vim/syntax/gpg.vim b/.config/vim/syntax/gpg.vim new file mode 100644 index 0000000..f132a52 --- /dev/null +++ b/.config/vim/syntax/gpg.vim @@ -0,0 +1,191 @@ +" Vim syntax file +" Language: gpg(1) configuration file +" Maintainer: This runtime file is looking for a maintainer. +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2024-02-11 +" Updated: +" 2023-01-23 @ObserverOfTime: added a couple of keywords +" 2023-03-21 Todd Zullinger : sync with gnupg-2.4.0 +" 2024-02-10 Daniel Kahn Gillmor : +" mark use-embedded-filename as warning for security reasons + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +setlocal iskeyword+=- + +syn keyword gpgTodo contained FIXME TODO XXX NOTE + +syn region gpgComment contained display oneline start='#' end='$' + \ contains=gpgTodo,gpgID,@Spell + +syn match gpgID contained display '\<\(0x\)\=\x\{8,}\>' + +syn match gpgBegin display '^' skipwhite nextgroup=gpgComment,gpgOption,gpgOptionDeprecated,gpgCommand + +syn keyword gpgCommand contained skipwhite nextgroup=gpgArg + \ change-passphrase check-sig check-signatures + \ check-sigs delete-keys delete-secret-and-public-keys + \ delete-secret-keys desig-revoke export + \ export-secret-keys export-secret-ssh-key + \ export-secret-subkeys export-ssh-key list-key + \ list-keys list-packets list-public-keys + \ list-secret-keys list-sig list-signatures list-sigs + \ passwd send-keys fetch-keys + \ generate-designated-revocation generate-revocation + \ gen-prime gen-random gen-revoke locate-external-keys + \ locate-keys lsign-key options print-md quick-add-key + \ quick-addkey quick-add-uid quick-adduid + \ quick-generate-key quick-gen-key quick-lsign-key + \ quick-revoke-sig quick-revoke-uid quick-revuid + \ quick-set-expire quick-set-primary-uid quick-sign-key + \ quick-update-pref receive-keys recv-keys refresh-keys + \ search-keys show-key show-keys sign-key tofu-policy + +syn keyword gpgCommand contained skipwhite nextgroup=gpgArgError + \ card-edit card-status change-pin check-trustdb + \ clear-sign clearsign dearmor dearmour decrypt + \ decrypt-files detach-sign encrypt encrypt-files + \ edit-card edit-key enarmor enarmour export-ownertrust + \ fast-import import import-ownertrust key-edit + \ fingerprint fix-trustdb full-generate-key + \ full-gen-key generate-key gen-key gpgconf-list + \ gpgconf-test list-config list-gcrypt-config + \ list-trustdb no-options print-mds + \ rebuild-keydb-caches server sign store symmetric + \ update-trustdb verify verify-files + +syn keyword gpgOption contained skipwhite nextgroup=gpgArg + \ aead-algo agent-program attribute-fd attribute-file + \ auto-key-locate bzip2-compress-level cert-digest-algo + \ cert-notation cert-policy-url charset chuid + \ chunk-size cipher-algo command-fd command-file + \ comment compatibility-flags completes-needed + \ compliance compress-algo compression-algo + \ compress-level ctapi-driver debug + \ debug-allow-large-chunks debug-level + \ debug-set-iobuf-size default-cert-check-level + \ default-cert-expire default-cert-level default-key + \ default-keyserver-url default-new-key-algo + \ default-preference-list default-recipient + \ default-sig-expire digest-algo dirmngr-program + \ disable-cipher-algo disable-pubkey-algo display + \ display-charset encrypt-to exec-path export-filter + \ export-options faked-system-time force-ownertrust + \ gpg-agent-info group hidden-encrypt-to + \ hidden-recipient hidden-recipient-file homedir + \ import-filter import-options input-size-hint + \ keyboxd-program keyid-format key-origin keyring + \ keyserver keyserver-options known-notation lc-ctype + \ lc-messages limit-card-insert-tries list-filter + \ list-options local-user log-file logger-fd + \ logger-file marginals-needed max-cert-depth + \ max-output min-cert-level min-rsa-length output + \ override-session-key override-session-key-fd + \ passphrase passphrase-fd passphrase-file + \ passphrase-repeat pcsc-driver + \ personal-aead-preferences personal-cipher-preferences + \ personal-cipher-prefs personal-compress-preferences + \ personal-compress-prefs personal-digest-preferences + \ photo-viewer pinentry-mode primary-keyring + \ reader-port recipient recipient-file remote-user + \ request-origin s2k-cipher-algo s2k-count + \ s2k-digest-algo s2k-mode secret-keyring sender + \ set-filename set-filesize set-notation set-policy-url + \ sig-keyserver-url sig-notation sign-with + \ sig-policy-url status-fd status-file temp-directory + \ tofu-db-format tofu-default-policy trustdb-name + \ trusted-key trust-model try-secret-key ttyname + \ ttytype ungroup user verify-options weak-digest + \ xauthority + +syn keyword gpgOption contained skipwhite nextgroup=gpgArgError + \ allow-freeform-uid allow-multiple-messages + \ allow-multisig-verification allow-non-selfsigned-uid + \ allow-old-cipher-algos allow-secret-key-import + \ allow-weak-digest-algos allow-weak-key-signatures + \ always-trust armor armour ask-cert-expire + \ ask-cert-level ask-sig-expire auto-check-trustdb + \ auto-key-import auto-key-retrieve batch + \ bzip2-decompress-lowmem compress-keys compress-sigs + \ debug-all debug-iolbf debug-quick-random + \ default-comment default-recipient-self disable-ccid + \ disable-dirmngr disable-dsa2 disable-large-rsa + \ disable-mdc disable-signer-uid dry-run dump-options + \ dump-option-table emit-version enable-dsa2 + \ enable-large-rsa enable-progress-filter + \ enable-special-filenames encrypt-to-default-key + \ escape-from-lines exit-on-status-write-error expert + \ fast-list-mode file-is-digest fixed-list-mode + \ forbid-gen-key force-aead force-mdc force-ocb + \ force-sign-key force-v3-sigs force-v4-certs + \ for-your-eyes-only full-timestrings gnupg help + \ honor-http-proxy ignore-crc-error ignore-mdc-error + \ ignore-time-conflict ignore-valid-from + \ include-key-block interactive legacy-list-mode + \ list-only lock-multiple lock-never lock-once + \ mangle-dos-filenames merge-only mimemode multifile no + \ no-allow-freeform-uid no-allow-multiple-messages + \ no-allow-non-selfsigned-uid no-armor no-armour + \ no-ask-cert-expire no-ask-cert-level + \ no-ask-sig-expire no-auto-check-trustdb + \ no-auto-key-import no-auto-key-locate + \ no-auto-key-retrieve no-autostart + \ no-auto-trust-new-key no-batch no-comments + \ no-default-keyring no-default-recipient + \ no-disable-mdc no-emit-version no-encrypt-to + \ no-escape-from-lines no-expensive-trust-checks + \ no-expert no-force-mdc no-force-v3-sigs + \ no-force-v4-certs no-for-your-eyes-only no-greeting + \ no-groups no-include-key-block no-keyring no-literal + \ no-mangle-dos-filenames no-mdc-warning + \ no-permission-warning no-pgp2 no-pgp6 no-pgp7 no-pgp8 + \ no-random-seed-file no-require-backsigs + \ no-require-cross-certification no-require-secmem + \ no-rfc2440-text no-secmem-warning no-show-notation + \ no-show-photos no-show-policy-url no-sig-cache + \ no-sk-comments no-skip-hidden-recipients + \ no-symkey-cache not-dash-escaped no-textmode + \ no-throw-keyids no-tty no-use-agent + \ no-utf8-strings no-verbose + \ no-version only-sign-text-ids openpgp + \ override-compliance-check pgp6 pgp7 pgp8 + \ preserve-permissions print-dane-records quiet + \ require-backsigs require-compliance + \ require-cross-certification require-secmem rfc2440 + \ rfc2440-text rfc4880 rfc4880bis show-keyring + \ show-notation show-photos show-policy-url + \ show-session-key sk-comments skip-hidden-recipients + \ skip-verify textmode throw-keyids try-all-secrets + \ unwrap use-agent use-keyboxd + \ use-only-openpgp-card utf8-strings verbose version + \ warranty with-colons with-fingerprint + \ with-icao-spelling with-key-data with-keygrip + \ with-key-origin with-key-screening with-secret + \ with-sig-check with-sig-list with-subkey-fingerprint + \ with-subkey-fingerprints with-tofu-info with-wkd-hash + \ yes + +" depcrated for security reasons +syn keyword gpgOptionDeprecated contained skipwhite nextgroup=gpgArgError + \ use-embedded-filename no-use-embedded-filename + +syn match gpgArg contained display '\S\+\(\s\+\S\+\)*' contains=gpgID +syn match gpgArgError contained display '\S\+\(\s\+\S\+\)*' + +hi def link gpgComment Comment +hi def link gpgTodo Todo +hi def link gpgID Number +hi def link gpgOption Keyword +hi def link gpgOptionDeprecated WarningMsg +hi def link gpgCommand Error +hi def link gpgArgError Error + +let b:current_syntax = "gpg" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/gprof.vim b/.config/vim/syntax/gprof.vim new file mode 100644 index 0000000..d2c5cb4 --- /dev/null +++ b/.config/vim/syntax/gprof.vim @@ -0,0 +1,70 @@ +" Vim syntax file +" Language: Syntax for Gprof Output +" Maintainer: Dominique Pelle +" Last Change: 2021 Sep 19 + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +syn spell notoplevel +syn case match +syn sync minlines=100 + +" Flat profile +syn match gprofFlatProfileTitle + \ "^Flat profile:$" +syn region gprofFlatProfileHeader + \ start="^Each sample counts as.*" + \ end="^ time.*name\s*$" +syn region gprofFlatProfileTrailer + \ start="^\s*%\s\+the percentage of the total running time.*" + \ end="^\s*the gprof listing if it were to be printed\." + +" Call graph +syn match gprofCallGraphTitle "Call graph (explanation follows)" +syn region gprofCallGraphHeader + \ start="^granularity: each sample hit covers.*" + \ end="^\s*index % time\s\+self\s\+children\s\+called\s\+name$" +syn match gprofCallGraphFunction "\<\(\d\+\.\d\+\s\+\)\{3}\([0-9+]\+\)\?\s\+[a-zA-Z_<].*\ze\[" +syn match gprofCallGraphSeparator "^-\+$" +syn region gprofCallGraphTrailer + \ start="This table describes the call tree of the program" + \ end="^\s*the cycle\.$" + +" Index +syn region gprofIndex + \ start="^Index by function name$" + \ end="\%$" + +syn match gprofIndexFunctionTitle "^Index by function name$" + +syn match gprofNumbers "^\s*[0-9 ./+]\+" +syn match gprofFunctionIndex "\[\d\+\]" +syn match gprofSpecial "<\(spontaneous\|cycle \d\+\)>" + +hi def link gprofFlatProfileTitle Title +hi def link gprofFlatProfileHeader Comment +hi def link gprofFlatProfileFunction Number +hi def link gprofFlatProfileTrailer Comment + +hi def link gprofCallGraphTitle Title +hi def link gprofCallGraphHeader Comment +hi def link gprofFlatProfileFunction Number +hi def link gprofCallGraphFunction Special +hi def link gprofCallGraphTrailer Comment +hi def link gprofCallGraphSeparator Label + +hi def link gprofFunctionIndex Label +hi def link gprofSpecial SpecialKey +hi def link gprofNumbers Number + +hi def link gprofIndexFunctionTitle Title + +let b:current_syntax = "gprof" + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/.config/vim/syntax/grads.vim b/.config/vim/syntax/grads.vim new file mode 100644 index 0000000..50be14b --- /dev/null +++ b/.config/vim/syntax/grads.vim @@ -0,0 +1,73 @@ +" Vim syntax file +" Language: grads (GrADS scripts) +" Maintainer: Stefan Fronzek (sfronzek at gmx dot net) +" Last change: 13 Feb 2004 + +" Grid Analysis and Display System (GrADS); http://grads.iges.org/grads +" This syntax file defines highlighting for only very few features of +" the GrADS scripting language. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" GrADS is entirely case-insensitive. +syn case ignore + +" The keywords + +syn keyword gradsStatement if else endif break exit return +syn keyword gradsStatement while endwhile say prompt pull function +syn keyword gradsStatement subwrd sublin substr read write close +" String + +syn region gradsString start=+'+ end=+'+ + +" Integer number +syn match gradsNumber "[+-]\=\<[0-9]\+\>" + +" Operator + +"syn keyword gradsOperator | ! % & != >= +"syn match gradsOperator "[^\.]not[^a-zA-Z]" + +" Variables + +syn keyword gradsFixVariables lat lon lev result rec rc +syn match gradsglobalVariables "_[a-zA-Z][a-zA-Z0-9]*" +syn match gradsVariables "[a-zA-Z][a-zA-Z0-9]*" +syn match gradsConst "#[A-Z][A-Z_]+" + +" Comments + +syn match gradsComment "\*.*" + +" Typical Typos + +" for C programmers: +" syn match gradsTypos "==" +" syn match gradsTypos "!=" + +" Define the default highlighting. +" Only when an item doesn't hgs highlighting+yet + +hi def link gradsStatement Statement + +hi def link gradsString String +hi def link gradsNumber Number + +hi def link gradsFixVariables Special +hi def link gradsVariables Identifier +hi def link gradsglobalVariables Special +hi def link gradsConst Special + +hi def link gradsClassMethods Function + +hi def link gradsOperator Operator +hi def link gradsComment Comment + +hi def link gradsTypos Error + + +let b:current_syntax = "grads" diff --git a/.config/vim/syntax/graphql.vim b/.config/vim/syntax/graphql.vim new file mode 100644 index 0000000..01d5ca2 --- /dev/null +++ b/.config/vim/syntax/graphql.vim @@ -0,0 +1,90 @@ +" Vim syntax file +" Language: graphql +" Maintainer: Jon Parise +" Filenames: *.graphql *.graphqls *.gql +" URL: https://github.com/jparise/vim-graphql +" License: MIT +" Last Change: 2024 Dec 21 + +if !exists('main_syntax') + if exists('b:current_syntax') + finish + endif + let main_syntax = 'graphql' +endif + +syn case match + +syn match graphqlComment "#.*$" contains=@Spell + +syn match graphqlOperator "=" display +syn match graphqlOperator "!" display +syn match graphqlOperator "|" display +syn match graphqlOperator "&" display +syn match graphqlOperator "\M..." display + +syn keyword graphqlBoolean true false +syn keyword graphqlNull null +syn match graphqlNumber "-\=\<\%(0\|[1-9]\d*\)\%(\.\d\+\)\=\%([eE][-+]\=\d\+\)\=\>" display +syn region graphqlString start=+"+ skip=+\\\\\|\\"+ end=+"\|$+ +syn region graphqlString start=+"""+ skip=+\\"""+ end=+"""+ + +syn keyword graphqlKeyword repeatable nextgroup=graphqlKeyword skipwhite +syn keyword graphqlKeyword on nextgroup=graphqlType,graphqlDirectiveLocation skipwhite + +syn keyword graphqlStructure enum scalar type union nextgroup=graphqlType skipwhite +syn keyword graphqlStructure input interface subscription nextgroup=graphqlType skipwhite +syn keyword graphqlStructure implements nextgroup=graphqlType skipwhite +syn keyword graphqlStructure query mutation fragment nextgroup=graphqlName skipwhite +syn keyword graphqlStructure directive nextgroup=graphqlDirective skipwhite +syn keyword graphqlStructure extend nextgroup=graphqlStructure skipwhite +syn keyword graphqlStructure schema nextgroup=graphqlFold skipwhite + +syn match graphqlDirective "\<@\h\w*\>" display +syn match graphqlVariable "\<\$\h\w*\>" display +syn match graphqlName "\<\h\w*\>" display +syn match graphqlType "\<_*\u\w*\>" display + +" https://spec.graphql.org/October2021/#ExecutableDirectiveLocation +syn keyword graphqlDirectiveLocation QUERY MUTATION SUBSCRIPTION FIELD +syn keyword graphqlDirectiveLocation FRAGMENT_DEFINITION FRAGMENT_SPREAD +syn keyword graphqlDirectiveLocation INLINE_FRAGMENT VARIABLE_DEFINITION +" https://spec.graphql.org/October2021/#TypeSystemDirectiveLocation +syn keyword graphqlDirectiveLocation SCHEMA SCALAR OBJECT FIELD_DEFINITION +syn keyword graphqlDirectiveLocation ARGUMENT_DEFINITION INTERFACE UNION +syn keyword graphqlDirectiveLocation ENUM ENUM_VALUE INPUT_OBJECT +syn keyword graphqlDirectiveLocation INPUT_FIELD_DEFINITION + +syn keyword graphqlMetaFields __schema __type __typename + +syn region graphqlFold matchgroup=graphqlBraces start="{" end="}" transparent fold contains=ALLBUT,graphqlStructure +syn region graphqlList matchgroup=graphqlBraces start="\[" end="]" transparent contains=ALLBUT,graphqlDirective,graphqlStructure + +if main_syntax ==# 'graphql' + syn sync minlines=500 +endif + +hi def link graphqlComment Comment +hi def link graphqlOperator Operator + +hi def link graphqlBraces Delimiter + +hi def link graphqlBoolean Boolean +hi def link graphqlNull Keyword +hi def link graphqlNumber Number +hi def link graphqlString String + +hi def link graphqlDirective PreProc +hi def link graphqlDirectiveLocation Special +hi def link graphqlName Identifier +hi def link graphqlMetaFields Special +hi def link graphqlKeyword Keyword +hi def link graphqlStructure Structure +hi def link graphqlType Type +hi def link graphqlVariable Identifier + +let b:current_syntax = 'graphql' + +if main_syntax ==# 'graphql' + unlet main_syntax +endif diff --git a/.config/vim/syntax/gretl.vim b/.config/vim/syntax/gretl.vim new file mode 100644 index 0000000..671142a --- /dev/null +++ b/.config/vim/syntax/gretl.vim @@ -0,0 +1,85 @@ +" Vim syntax file +" Language: gretl (http://gretl.sf.net) +" Maintainer: Vaidotas Zemlys +" Last Change: 2006 Apr 30 +" Filenames: *.inp *.gretl +" URL: http://uosis.mif.vu.lt/~zemlys/vim-syntax/gretl.vim + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +setlocal iskeyword=@,48-57,_,. + +syn case match + +" Constant +" string enclosed in double quotes +syn region gString start=/"/ skip=/\\\\\|\\"/ end=/"/ +" number with no fractional part or exponent +syn match gNumber /\d\+/ +" floating point number with integer and fractional parts and optional exponent +syn match gFloat /\d\+\.\d*\([Ee][-+]\=\d\+\)\=/ +" floating point number with no integer part and optional exponent +syn match gFloat /\.\d\+\([Ee][-+]\=\d\+\)\=/ +" floating point number with no fractional part and optional exponent +syn match gFloat /\d\+[Ee][-+]\=\d\+/ + +" Gretl commands +syn keyword gCommands add addobs addto adf append ar arch arma break boxplot chow coeffsum coint coint2 corc corr corrgm criteria critical cusum data delete diff else end endif endloop eqnprint equation estimate fcast fcasterr fit freq function funcerr garch genr gnuplot graph hausman hccm help hilu hsk hurst if import include info kpss label labels lad lags ldiff leverage lmtest logistic logit logs loop mahal meantest mle modeltab mpols multiply nls nulldata ols omit omitfrom open outfile panel pca pergm plot poisson pooled print printf probit pvalue pwe quit remember rename reset restrict rhodiff rmplot run runs scatters sdiff set setobs setmiss shell sim smpl spearman square store summary system tabprint testuhat tobit transpos tsls var varlist vartest vecm vif wls + +"Gretl genr functions +syn keyword gGenrFunc log exp sin cos tan atan diff ldiff sdiff mean sd min max sort int ln coeff abs rho sqrt sum nobs firstobs lastobs normal uniform stderr cum missing ok misszero corr vcv var sst cov median zeromiss pvalue critical obsnum mpow dnorm cnorm gamma lngamma resample hpfilt bkfilt fracdiff varnum isvector islist nelem + +" Identifier +" identifier with leading letter and optional following keyword characters +syn match gIdentifier /\a\k*/ + +" Variable with leading $ +syn match gVariable /\$\k*/ +" Arrow +syn match gArrow /<-/ + +" Special +syn match gDelimiter /[,;:]/ + +" Error +syn region gRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError,gBCstart,gBCend +syn region gRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError +syn region gRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError +syn match gError /[)\]}]/ +syn match gBraceError /[)}]/ contained +syn match gCurlyError /[)\]]/ contained +syn match gParenError /[\]}]/ contained + +" Comment +syn match gComment /#.*/ +syn match gBCstart /(\*/ +syn match gBCend /\*)/ + +syn region gBlockComment matchgroup=gCommentStart start="(\*" end="\*)" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link gComment Comment +hi def link gCommentStart Comment +hi def link gBlockComment Comment +hi def link gString String +hi def link gNumber Number +hi def link gBoolean Boolean +hi def link gFloat Float +hi def link gCommands Repeat +hi def link gGenrFunc Type +hi def link gDelimiter Delimiter +hi def link gError Error +hi def link gBraceError Error +hi def link gCurlyError Error +hi def link gParenError Error +hi def link gIdentifier Normal +hi def link gVariable Identifier +hi def link gArrow Repeat + +let b:current_syntax="gretl" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/groff.vim b/.config/vim/syntax/groff.vim new file mode 100644 index 0000000..c076c8d --- /dev/null +++ b/.config/vim/syntax/groff.vim @@ -0,0 +1,10 @@ +" VIM syntax file +" Language: groff +" Maintainer: John Marshall +" Previous Maintainer: Pedro Alejandro López-Valencia +" Last Change: 2003-05-08-12:41:13 GMT-5. + +" This uses the nroff.vim syntax file. +let b:main_syntax = "nroff" +let b:nroff_is_groff = 1 +runtime! syntax/nroff.vim diff --git a/.config/vim/syntax/groovy.vim b/.config/vim/syntax/groovy.vim new file mode 100644 index 0000000..3509401 --- /dev/null +++ b/.config/vim/syntax/groovy.vim @@ -0,0 +1,452 @@ +" Vim syntax file +" Language: Groovy +" Original Author: Alessio Pace +" Maintainer: Tobias Rapp +" Version: 0.1.18 +" URL: http://www.vim.org/scripts/script.php?script_id=945 +" Last Change: 2021 Feb 03 +" 2025 Apr 27 by Vim Project correct Vim script spelling + +" THE ORIGINAL AUTHOR'S NOTES: +" +" This is my very first Vim script, I hope to have +" done it the right way. +" +" I must directly or indirectly thank the author of java.vim and ruby.vim: +" I copied from them most of the stuff :-) +" +" Relies on html.vim + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +" +" HOWTO USE IT (INSTALL) when not part of the distribution: +" +" 1) copy the file in the (global or user's $HOME/.vim/syntax/) syntax folder +" +" 2) add this line to recognize groovy files by filename extension: +" +" au BufNewFile,BufRead *.groovy setf groovy +" in the global vim filetype.vim file or inside $HOME/.vim/filetype.vim +" +" 3) add this part to recognize by content groovy script (no extension needed :-) +" +" if did_filetype() +" finish +" endif +" if getline(1) =~ '^#!.*[/\\]groovy\>' +" setf groovy +" endif +" +" in the global scripts.vim file or in $HOME/.vim/scripts.vim +" +" 4) open/write a .groovy file or a groovy script :-) +" +" Let me know if you like it or send me patches, so that I can improve it +" when I have time + +" quit when a syntax file was already loaded +if !exists("main_syntax") + if exists("b:current_syntax") + finish + endif + " we define it here so that included files can test for it + let main_syntax='groovy' +endif + +let s:cpo_save = &cpo +set cpo&vim + +" ########################## +" Java stuff taken from java.vim +" some characters that cannot be in a groovy program (outside a string) +" syn match groovyError "[\\@`]" +"syn match groovyError "<<<\|\.\.\|=>\|<>\|||=\|&&=\|[^-]->\|\*\/" +"syn match groovyOK "\.\.\." + +" keyword definitions +syn keyword groovyExternal native package +syn match groovyExternal "\\(\s\+static\>\)\?" +syn keyword groovyError goto const +syn keyword groovyConditional if else switch +syn keyword groovyRepeat while for do +syn keyword groovyBoolean true false +syn keyword groovyConstant null +syn keyword groovyTypedef this super +syn keyword groovyOperator new instanceof +syn keyword groovyType boolean char byte short int long float double +syn keyword groovyType void +syn keyword groovyType Integer Double Date Boolean Float String Array Vector List +syn keyword groovyStatement return +syn keyword groovyStorageClass static synchronized transient volatile final strictfp serializable +syn keyword groovyExceptions throw try catch finally +syn keyword groovyAssert assert +syn keyword groovyMethodDecl synchronized throws +syn keyword groovyClassDecl extends implements interface +" to differentiate the keyword class from MyClass.class we use a match here +syn match groovyTypedef "\.\s*\"ms=s+1 +syn keyword groovyClassDecl enum +syn match groovyClassDecl "^class\>" +syn match groovyClassDecl "[^.]\s*\"ms=s+1 +syn keyword groovyBranch break continue nextgroup=groovyUserLabelRef skipwhite +syn match groovyUserLabelRef "\k\+" contained +syn keyword groovyScopeDecl public protected private abstract + + +if exists("groovy_highlight_groovy_lang_ids") || exists("groovy_highlight_groovy_lang") || exists("groovy_highlight_all") + " groovy.lang.* + syn keyword groovyLangClass Closure MetaMethod GroovyObject + + syn match groovyJavaLangClass "\" + syn keyword groovyJavaLangClass Cloneable Comparable Runnable Serializable Boolean Byte Class Object + syn keyword groovyJavaLangClass Character CharSequence ClassLoader Compiler + " syn keyword groovyJavaLangClass Integer Double Float Long + syn keyword groovyJavaLangClass InheritableThreadLocal Math Number Object Package Process + syn keyword groovyJavaLangClass Runtime RuntimePermission InheritableThreadLocal + syn keyword groovyJavaLangClass SecurityManager Short StrictMath StackTraceElement + syn keyword groovyJavaLangClass StringBuffer Thread ThreadGroup + syn keyword groovyJavaLangClass ThreadLocal Throwable Void ArithmeticException + syn keyword groovyJavaLangClass ArrayIndexOutOfBoundsException AssertionError + syn keyword groovyJavaLangClass ArrayStoreException ClassCastException + syn keyword groovyJavaLangClass ClassNotFoundException + syn keyword groovyJavaLangClass CloneNotSupportedException Exception + syn keyword groovyJavaLangClass IllegalAccessException + syn keyword groovyJavaLangClass IllegalArgumentException + syn keyword groovyJavaLangClass IllegalMonitorStateException + syn keyword groovyJavaLangClass IllegalStateException + syn keyword groovyJavaLangClass IllegalThreadStateException + syn keyword groovyJavaLangClass IndexOutOfBoundsException + syn keyword groovyJavaLangClass InstantiationException InterruptedException + syn keyword groovyJavaLangClass NegativeArraySizeException NoSuchFieldException + syn keyword groovyJavaLangClass NoSuchMethodException NullPointerException + syn keyword groovyJavaLangClass NumberFormatException RuntimeException + syn keyword groovyJavaLangClass SecurityException StringIndexOutOfBoundsException + syn keyword groovyJavaLangClass UnsupportedOperationException + syn keyword groovyJavaLangClass AbstractMethodError ClassCircularityError + syn keyword groovyJavaLangClass ClassFormatError Error ExceptionInInitializerError + syn keyword groovyJavaLangClass IllegalAccessError InstantiationError + syn keyword groovyJavaLangClass IncompatibleClassChangeError InternalError + syn keyword groovyJavaLangClass LinkageError NoClassDefFoundError + syn keyword groovyJavaLangClass NoSuchFieldError NoSuchMethodError + syn keyword groovyJavaLangClass OutOfMemoryError StackOverflowError + syn keyword groovyJavaLangClass ThreadDeath UnknownError UnsatisfiedLinkError + syn keyword groovyJavaLangClass UnsupportedClassVersionError VerifyError + syn keyword groovyJavaLangClass VirtualMachineError + + syn keyword groovyJavaLangObject clone equals finalize getClass hashCode + syn keyword groovyJavaLangObject notify notifyAll toString wait + + hi def link groovyLangClass groovyConstant + hi def link groovyJavaLangClass groovyExternal + hi def link groovyJavaLangObject groovyConstant + syn cluster groovyTop add=groovyJavaLangObject,groovyJavaLangClass,groovyLangClass + syn cluster groovyClasses add=groovyJavaLangClass,groovyLangClass +endif + + +" Groovy stuff +syn match groovyOperator "\.\." +syn match groovyOperator "<\{2,3}" +syn match groovyOperator ">\{2,3}" +syn match groovyOperator "->" +syn match groovyLineComment '^\%1l#!.*' " Shebang line +syn match groovyExceptions "\\|\<[A-Z]\{1,}[a-zA-Z0-9]*Exception\>" + +" Groovy JDK stuff +syn keyword groovyJDKBuiltin as def in +syn keyword groovyJDKOperOverl div minus plus abs round power multiply +syn keyword groovyJDKMethods each call inject sort print println +syn keyword groovyJDKMethods getAt putAt size push pop toList getText writeLine eachLine readLines +syn keyword groovyJDKMethods withReader withStream withWriter withPrintWriter write read leftShift +syn keyword groovyJDKMethods withWriterAppend readBytes splitEachLine +syn keyword groovyJDKMethods newInputStream newOutputStream newPrintWriter newReader newWriter +syn keyword groovyJDKMethods compareTo next previous isCase +syn keyword groovyJDKMethods times step toInteger upto any collect dump every find findAll grep +syn keyword groovyJDKMethods inspect invokeMethods join +syn keyword groovyJDKMethods getErr getIn getOut waitForOrKill +syn keyword groovyJDKMethods count tokenize asList flatten immutable intersect reverse reverseEach +syn keyword groovyJDKMethods subMap append asWritable eachByte eachLine eachFile +syn cluster groovyTop add=groovyJDKBuiltin,groovyJDKOperOverl,groovyJDKMethods + +" no useful I think, so I comment it.. +"if filereadable(expand(":p:h")."/groovyid.vim") + " source :p:h/groovyid.vim +"endif + +if exists("groovy_space_errors") + if !exists("groovy_no_trail_space_error") + syn match groovySpaceError "\s\+$" + endif + if !exists("groovy_no_tab_space_error") + syn match groovySpaceError " \+\t"me=e-1 + endif +endif + +" it is a better case construct than java.vim to match groovy syntax +syn region groovyLabelRegion transparent matchgroup=groovyLabel start="\" matchgroup=NONE end=":\|$" contains=groovyNumber,groovyString,groovyLangClass,groovyJavaLangClass +syn match groovyUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=groovyLabel +syn keyword groovyLabel default + +if !exists("groovy_allow_cpp_keywords") + syn keyword groovyError auto delete extern friend inline redeclared + syn keyword groovyError register signed sizeof struct template typedef union + syn keyword groovyError unsigned operator +endif + +" The following cluster contains all groovy groups except the contained ones +syn cluster groovyTop add=groovyExternal,groovyError,groovyError,groovyBranch,groovyLabelRegion,groovyLabel,groovyConditional,groovyRepeat,groovyBoolean,groovyConstant,groovyTypedef,groovyOperator,groovyType,groovyType,groovyStatement,groovyStorageClass,groovyAssert,groovyExceptions,groovyMethodDecl,groovyClassDecl,groovyClassDecl,groovyClassDecl,groovyScopeDecl,groovyError,groovyError2,groovyUserLabel,groovyLangObject + + +" Comments +syn keyword groovyTodo contained TODO FIXME XXX +if exists("groovy_comment_strings") + syn region groovyCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=groovySpecial,groovyCommentStar,groovySpecialChar,@Spell + syn region groovyComment2String contained start=+"+ end=+$\|"+ contains=groovySpecial,groovySpecialChar,@Spell + syn match groovyCommentCharacter contained "'\\[^']\{1,6\}'" contains=groovySpecialChar + syn match groovyCommentCharacter contained "'\\''" contains=groovySpecialChar + syn match groovyCommentCharacter contained "'[^\\]'" + syn cluster groovyCommentSpecial add=groovyCommentString,groovyCommentCharacter,groovyNumber + syn cluster groovyCommentSpecial2 add=groovyComment2String,groovyCommentCharacter,groovyNumber +endif +syn region groovyComment start="/\*" end="\*/" contains=@groovyCommentSpecial,groovyTodo,@Spell +syn match groovyCommentStar contained "^\s*\*[^/]"me=e-1 +syn match groovyCommentStar contained "^\s*\*$" +syn match groovyLineComment "//.*" contains=@groovyCommentSpecial2,groovyTodo,@Spell +hi def link groovyCommentString groovyString +hi def link groovyComment2String groovyString +hi def link groovyCommentCharacter groovyCharacter + +syn cluster groovyTop add=groovyComment,groovyLineComment + +if !exists("groovy_ignore_groovydoc") && main_syntax != 'jsp' + syntax case ignore + " syntax coloring for groovydoc comments (HTML) + " syntax include @groovyHtml :p:h/html.vim + syntax include @groovyHtml runtime! syntax/html.vim + unlet b:current_syntax + syntax spell default " added by Bram + syn region groovyDocComment start="/\*\*" end="\*/" keepend contains=groovyCommentTitle,@groovyHtml,groovyDocTags,groovyTodo,@Spell + syn region groovyCommentTitle contained matchgroup=groovyDocComment start="/\*\*" matchgroup=groovyCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@groovyHtml,groovyCommentStar,groovyTodo,@Spell,groovyDocTags + + syn region groovyDocTags contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}" + syn match groovyDocTags contained "@\(see\|param\|exception\|throws\|since\)\s\+\S\+" contains=groovyDocParam + syn match groovyDocParam contained "\s\S\+" + syn match groovyDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>" + syntax case match +endif + +" match the special comment /**/ +syn match groovyComment "/\*\*/" + +" Strings and constants +syn match groovySpecialError contained "\\." +syn match groovySpecialCharError contained "[^']" +syn match groovySpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\|\$\)" +syn match groovyRegexChar contained "\\." +syn region groovyString start=+"+ end=+"+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr +syn region groovyString start=+'+ end=+'+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell +syn region groovyString start=+"""+ end=+"""+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr +syn region groovyString start=+'''+ end=+'''+ contains=groovySpecialChar,groovySpecialError,@Spell +if exists("groovy_regex_strings") + " regex strings interfere with the division operator and thus are disabled + " by default + syn region groovyString start='/[^/*]' end='/' contains=groovySpecialChar,groovyRegexChar,groovyELExpr +endif +" syn region groovyELExpr start=+${+ end=+}+ keepend contained +syn match groovyELExpr /\${.\{-}}/ contained +" Fix: force use of the NFA regexp engine (2), see GitHub issue #7280 +syn match groovyELExpr /\%#=2\$[a-zA-Z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE_][a-zA-Z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE0-9_.]*/ contained +hi def link groovyELExpr Identifier + +" TODO: better matching. I am waiting to understand how it really works in groovy +" syn region groovyClosureParamsBraces start=+|+ end=+|+ contains=groovyClosureParams +" syn match groovyClosureParams "[ a-zA-Z0-9_*]\+" contained +" hi def link groovyClosureParams Identifier + +" next line disabled, it can cause a crash for a long line +"syn match groovyStringError +"\([^"\\]\|\\.\)*$+ + +" disabled: in groovy strings or characters are written the same +" syn match groovyCharacter "'[^']*'" contains=groovySpecialChar,groovySpecialCharError +" syn match groovyCharacter "'\\''" contains=groovySpecialChar +" syn match groovyCharacter "'[^\\]'" +syn match groovyNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" +syn match groovyNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" +syn match groovyNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" +syn match groovyNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" + +" unicode characters +syn match groovySpecial "\\u\d\{4\}" + +syn cluster groovyTop add=groovyString,groovyCharacter,groovyNumber,groovySpecial,groovyStringError + +if exists("groovy_highlight_functions") + if groovy_highlight_functions == "indent" + syn match groovyFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=groovyScopeDecl,groovyType,groovyStorageClass,@groovyClasses + syn region groovyFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=groovyScopeDecl,groovyType,groovyStorageClass,@groovyClasses + syn match groovyFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=groovyScopeDecl,groovyType,groovyStorageClass,@groovyClasses + syn region groovyFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=groovyScopeDecl,groovyType,groovyStorageClass,@groovyClasses + else + " This line catches method declarations at any indentation>0, but it assumes + " two things: + " 1. class names are always capitalized (ie: Button) + " 2. method names are never capitalized (except constructors, of course) + syn region groovyFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|final\|native\|synchronized\)\s\+\)*\(\(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\([A-Za-z_][A-Za-z0-9_$]*\.\)*[A-Z][A-Za-z0-9_$]*\)\(<[^>]*>\)\=\(\[\]\)*\s\+[a-z][A-Za-z0-9_$]*\|[A-Z][A-Za-z0-9_$]*\)\s*([^0-9]+ end=+)+ contains=groovyScopeDecl,groovyType,groovyStorageClass,groovyComment,groovyLineComment,@groovyClasses + endif + syn match groovyBraces "[{}]" + syn cluster groovyTop add=groovyFuncDef,groovyBraces +endif + +if exists("groovy_highlight_debug") + + " Strings and constants + syn match groovyDebugSpecial contained "\\\d\d\d\|\\." + syn region groovyDebugString contained start=+"+ end=+"+ contains=groovyDebugSpecial + syn match groovyDebugStringError +"\([^"\\]\|\\.\)*$+ + syn match groovyDebugCharacter contained "'[^\\]'" + syn match groovyDebugSpecialCharacter contained "'\\.'" + syn match groovyDebugSpecialCharacter contained "'\\''" + syn match groovyDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" + syn match groovyDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" + syn match groovyDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" + syn match groovyDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" + syn keyword groovyDebugBoolean contained true false + syn keyword groovyDebugType contained null this super + syn region groovyDebugParen start=+(+ end=+)+ contained contains=groovyDebug.*,groovyDebugParen + + " to make this work you must define the highlighting for these groups + syn match groovyDebug "\\|\<[A-Z]\{1,}[a-zA-Z0-9]*Exception\>" + + +if !exists("groovy_minlines") + let groovy_minlines = 10 +endif +exec "syn sync ccomment groovyComment minlines=" . groovy_minlines + + +" ################### +" Groovy stuff +" syn match groovyOperator "|[ ,a-zA-Z0-9_*]\+|" + +" All groovy valid tokens +" syn match groovyTokens ";\|,\|<=>\|<>\|:\|:=\|>\|>=\|=\|==\|<\|<=\|!=\|/\|/=\|\.\.|\.\.\.\|\~=\|\~==" +" syn match groovyTokens "\*=\|&\|&=\|\*\|->\|\~\|+\|-\|/\|?\|<<<\|>>>\|<<\|>>" + +" Must put explicit these ones because groovy.vim mark them as errors otherwise +" syn match groovyTokens "<=>\|<>\|==\~" +"syn cluster groovyTop add=groovyTokens + +" Mark these as operators + +" Highlight brackets +" syn match groovyBraces "[{}]" +" syn match groovyBraces "[\[\]]" +" syn match groovyBraces "[\|]" + +if exists("groovy_mark_braces_in_parens_as_errors") + syn match groovyInParen contained "[{}]" + hi def link groovyInParen groovyError + syn cluster groovyTop add=groovyInParen +endif + +" catch errors caused by wrong parenthesis +syn region groovyParenT transparent matchgroup=groovyParen start="(" end=")" contains=@groovyTop,groovyParenT1 +syn region groovyParenT1 transparent matchgroup=groovyParen1 start="(" end=")" contains=@groovyTop,groovyParenT2 contained +syn region groovyParenT2 transparent matchgroup=groovyParen2 start="(" end=")" contains=@groovyTop,groovyParenT contained +syn match groovyParenError ")" +hi def link groovyParenError groovyError + +" catch errors caused by wrong square parenthesis +syn region groovyParenT transparent matchgroup=groovyParen start="\[" end="\]" contains=@groovyTop,groovyParenT1 +syn region groovyParenT1 transparent matchgroup=groovyParen1 start="\[" end="\]" contains=@groovyTop,groovyParenT2 contained +syn region groovyParenT2 transparent matchgroup=groovyParen2 start="\[" end="\]" contains=@groovyTop,groovyParenT contained +syn match groovyParenError "\]" + +" ############################### +" java.vim default highlighting +hi def link groovyFuncDef Function +hi def link groovyBraces Function +hi def link groovyBranch Conditional +hi def link groovyUserLabelRef groovyUserLabel +hi def link groovyLabel Label +hi def link groovyUserLabel Label +hi def link groovyConditional Conditional +hi def link groovyRepeat Repeat +hi def link groovyExceptions Exception +hi def link groovyAssert Statement +hi def link groovyStorageClass StorageClass +hi def link groovyMethodDecl groovyStorageClass +hi def link groovyClassDecl groovyStorageClass +hi def link groovyScopeDecl groovyStorageClass +hi def link groovyBoolean Boolean +hi def link groovySpecial Special +hi def link groovySpecialError Error +hi def link groovySpecialCharError Error +hi def link groovyString String +hi def link groovyRegexChar String +hi def link groovyCharacter Character +hi def link groovySpecialChar SpecialChar +hi def link groovyNumber Number +hi def link groovyError Error +hi def link groovyStringError Error +hi def link groovyStatement Statement +hi def link groovyOperator Operator +hi def link groovyComment Comment +hi def link groovyDocComment Comment +hi def link groovyLineComment Comment +hi def link groovyConstant Constant +hi def link groovyTypedef Typedef +hi def link groovyTodo Todo + +hi def link groovyCommentTitle SpecialComment +hi def link groovyDocTags Special +hi def link groovyDocParam Function +hi def link groovyCommentStar groovyComment + +hi def link groovyType Type +hi def link groovyExternal Include + +hi def link htmlComment Special +hi def link htmlCommentPart Special +hi def link groovySpaceError Error +hi def link groovyJDKBuiltin Special +hi def link groovyJDKOperOverl Operator +hi def link groovyJDKMethods Function + + +let b:current_syntax = "groovy" +if main_syntax == 'groovy' + unlet main_syntax +endif + +let b:spell_options="contained" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 diff --git a/.config/vim/syntax/group.vim b/.config/vim/syntax/group.vim new file mode 100644 index 0000000..f62a4a1 --- /dev/null +++ b/.config/vim/syntax/group.vim @@ -0,0 +1,52 @@ +" Vim syntax file +" Language: group(5) user group file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2012-08-05 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn match groupBegin display '^' nextgroup=groupName + +syn match groupName contained display '[^:]\+' + \ nextgroup=groupPasswordColon + +syn match groupPasswordColon contained display ':' + \ nextgroup=groupPassword,groupShadow + +syn match groupPassword contained display '[^:]*' + \ nextgroup=groupGIDColon + +syn match groupShadow contained display '[x*]' nextgroup=groupGIDColon + +syn match groupGIDColon contained display ':' nextgroup=groupGID + +syn match groupGID contained display '\d*' + \ nextgroup=groupUserListColon + +syn match groupUserListColon contained display ':' nextgroup=groupUserList + +syn match groupUserList contained '[^,]\+' + \ nextgroup=groupUserListSep + +syn match groupUserListSep contained display ',' nextgroup=groupUserList + +hi def link groupDelimiter Normal +hi def link groupName Identifier +hi def link groupPasswordColon groupDelimiter +hi def link groupPassword Number +hi def link groupShadow Special +hi def link groupGIDColon groupDelimiter +hi def link groupGID Number +hi def link groupUserListColon groupDelimiter +hi def link groupUserList Identifier +hi def link groupUserListSep groupDelimiter + +let b:current_syntax = "group" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/grub.vim b/.config/vim/syntax/grub.vim new file mode 100644 index 0000000..3743ae3 --- /dev/null +++ b/.config/vim/syntax/grub.vim @@ -0,0 +1,93 @@ +" Vim syntax file +" Language: grub(8) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword grubTodo contained TODO FIXME XXX NOTE + +syn region grubComment display oneline start='^#' end='$' + \ contains=grubTodo,@Spell + +syn match grubDevice display + \ '(\([fh]d\d\|\d\+\|0x\x\+\)\(,\d\+\)\=\(,\l\)\=)' + +syn match grubBlock display '\(\d\+\)\=+\d\+\(,\(\d\+\)\=+\d\+\)*' + +syn match grubNumbers display '+\=\<\d\+\|0x\x\+\>' + +syn match grubBegin display '^' + \ nextgroup=@grubCommands,grubComment skipwhite + +syn cluster grubCommands contains=grubCommand,grubTitleCommand + +syn keyword grubCommand contained default fallback hiddenmenu timeout + +syn keyword grubTitleCommand contained title nextgroup=grubTitle skipwhite + +syn match grubTitle contained display '.*' + +syn keyword grubCommand contained bootp color device dhcp hide ifconfig + \ pager partnew parttype password rarp serial setkey + \ terminal tftpserver unhide blocklist boot cat + \ chainloader cmp configfile debug displayapm + \ displaymem embed find fstest geometry halt help + \ impsprobe initrd install ioprobe kernel lock + \ makeactive map md5crypt module modulenounzip pause + \ quit reboot read root rootnoverify savedefault setup + \ testload testvbe uppermem vbeprobe + +syn keyword grubSpecial saved + +syn match grubBlink display 'blink-' +syn keyword grubBlack black +syn keyword grubBlue blue +syn keyword grubGreen green +syn keyword grubRed red +syn keyword grubMagenta magenta +syn keyword grubBrown brown yellow +syn keyword grubWhite white +syn match grubLightGray display 'light-gray' +syn match grubLightBlue display 'light-blue' +syn match grubLightGreen display 'light-green' +syn match grubLightCyan display 'light-cyan' +syn match grubLightRed display 'light-red' +syn match grubLightMagenta display 'light-magenta' +syn match grubDarkGray display 'dark-gray' + +hi def link grubComment Comment +hi def link grubTodo Todo +hi def link grubNumbers Number +hi def link grubDevice Identifier +hi def link grubBlock Identifier +hi def link grubCommand Keyword +hi def link grubTitleCommand grubCommand +hi def link grubTitle String +hi def link grubSpecial Special + +hi def grubBlink cterm=inverse +hi def grubBlack ctermfg=Black ctermbg=White guifg=Black guibg=White +hi def grubBlue ctermfg=DarkBlue guifg=DarkBlue +hi def grubGreen ctermfg=DarkGreen guifg=DarkGreen +hi def grubRed ctermfg=DarkRed guifg=DarkRed +hi def grubMagenta ctermfg=DarkMagenta guifg=DarkMagenta +hi def grubBrown ctermfg=Brown guifg=Brown +hi def grubWhite ctermfg=White ctermbg=Black guifg=White guibg=Black +hi def grubLightGray ctermfg=LightGray guifg=LightGray +hi def grubLightBlue ctermfg=LightBlue guifg=LightBlue +hi def grubLightGreen ctermfg=LightGreen guifg=LightGreen +hi def grubLightCyan ctermfg=LightCyan guifg=LightCyan +hi def grubLightRed ctermfg=LightRed guifg=LightRed +hi def grubLightMagenta ctermfg=LightMagenta guifg=LightMagenta +hi def grubDarkGray ctermfg=DarkGray guifg=DarkGray + +let b:current_syntax = "grub" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/gsp.vim b/.config/vim/syntax/gsp.vim new file mode 100644 index 0000000..6270b2a --- /dev/null +++ b/.config/vim/syntax/gsp.vim @@ -0,0 +1,54 @@ +" Vim syntax file +" Language: GSP - GNU Server Pages (v. 0.86) +" Created By: Nathaniel Harward nharward@yahoo.com +" Last Changed: 2012 Jan 08 by Thilo Six +" Filenames: *.gsp +" URL: http://www.constructicon.com/~nharward/vim/syntax/gsp.vim + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +if !exists("main_syntax") + let main_syntax = 'gsp' +endif + +" Source HTML syntax +runtime! syntax/html.vim +unlet b:current_syntax + +syn case match + +" Include Java syntax +syn include @gspJava syntax/java.vim + +let s:cpo_save = &cpo +set cpo&vim + +" Add as an HTML tag name along with its args +syn keyword htmlTagName contained java +syn keyword htmlArg contained type file page + +" Redefine some HTML things to include (and highlight) gspInLine code in +" places where it's likely to be found +syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,gspInLine +syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,gspInLine +syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=javaScriptExpression,@htmlPreproc,gspInLine +syn region htmlEndTag start=++ contains=htmlTagN,htmlTagError,gspInLine +syn region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster,gspInLine +syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster,gspInLine +syn match htmlTagN contained +[^>]*\>" end=""me=e-7 contains=@gspJava,htmlTag +syn region gspInLine matchgroup=htmlError start="`" end="`" contains=@gspJava + +let b:current_syntax = "gsp" + +if main_syntax == 'gsp' + unlet main_syntax +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/gtkrc.vim b/.config/vim/syntax/gtkrc.vim new file mode 100644 index 0000000..9c1bc2a --- /dev/null +++ b/.config/vim/syntax/gtkrc.vim @@ -0,0 +1,126 @@ +" Vim syntax file +" This is a GENERATED FILE. Please always refer to source file at the URI below. +" Language: Gtk+ theme files `gtkrc' +" Maintainer: David Ne\v{c}as (Yeti) +" Last Change: 2002-10-31 +" URL: http://trific.ath.cx/Ftp/vim/syntax/gtkrc.vim + +" Setup +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +setlocal iskeyword=_,-,a-z,A-Z,48-57 + +syn case match + +" Base constructs +syn match gtkrcComment "#.*$" contains=gtkrcFixme +syn keyword gtkrcFixme FIXME TODO XXX NOT contained +syn region gtkrcACString start=+"+ skip=+\\\\\|\\"+ end=+"+ oneline contains=gtkrcWPathSpecial,gtkrcClassName,gtkrcClassNameGnome contained +syn region gtkrcBString start=+"+ skip=+\\\\\|\\"+ end=+"+ oneline contains=gtkrcKeyMod contained +syn region gtkrcString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=gtkrcStockName,gtkrcPathSpecial,gtkrcRGBColor +syn match gtkrcPathSpecial "" contained +syn match gtkrcWPathSpecial "[*?.]" contained +syn match gtkrcNumber "^\(\d\+\)\=\.\=\d\+" +syn match gtkrcNumber "\W\(\d\+\)\=\.\=\d\+"lc=1 +syn match gtkrcRGBColor "#\(\x\{12}\|\x\{9}\|\x\{6}\|\x\{3}\)" contained +syn cluster gtkrcPRIVATE add=gtkrcFixme,gtkrcPathSpecial,gtkrcWPathSpecial,gtkrcRGBColor,gtkrcACString + +" Keywords +syn keyword gtkrcInclude include +syn keyword gtkrcPathSet module_path pixmap_path +syn keyword gtkrcTop binding style +syn keyword gtkrcTop widget widget_class nextgroup=gtkrcACString skipwhite +syn keyword gtkrcTop class nextgroup=gtkrcACString skipwhite +syn keyword gtkrcBind bind nextgroup=gtkrcBString skipwhite +syn keyword gtkrcStateName NORMAL INSENSITIVE PRELIGHT ACTIVE SELECTED +syn keyword gtkrcPriorityName HIGHEST RC APPLICATION GTK LOWEST +syn keyword gtkrcPriorityName highest rc application gtk lowest +syn keyword gtkrcTextDirName LTR RTL +syn keyword gtkrcStyleKeyword fg bg fg_pixmap bg_pixmap bg_text base font font_name fontset stock text +syn match gtkrcKeyMod "<\(alt\|ctrl\|control\|mod[1-5]\|release\|shft\|shift\)>" contained +syn cluster gtkrcPRIVATE add=gtkrcKeyMod + +" Enums and engine words +syn keyword gtkrcKeyword engine image +syn keyword gtkrcImage arrow_direction border detail file gap_border gap_end_border gap_end_file gap_file gap_side gap_side gap_start_border gap_start_file orientation overlay_border overlay_file overlay_stretch recolorable shadow state stretch thickness +syn keyword gtkrcConstant TRUE FALSE NONE IN OUT LEFT RIGHT TOP BOTTOM UP DOWN VERTICAL HORIZONTAL ETCHED_IN ETCHED_OUT +syn keyword gtkrcFunction function nextgroup=gtkrcFunctionEq skipwhite +syn match gtkrcFunctionEq "=" nextgroup=gtkrcFunctionName contained skipwhite +syn keyword gtkrcFunctionName ARROW BOX BOX_GAP CHECK CROSS DIAMOND EXTENSION FLAT_BOX FOCUS HANDLE HLINE OPTION OVAL POLYGON RAMP SHADOW SHADOW_GAP SLIDER STRING TAB VLINE contained +syn cluster gtkrcPRIVATE add=gtkrcFunctionName,gtkrcFunctionEq + +" Class names +syn keyword gtkrcClassName GtkAccelLabel GtkAdjustment GtkAlignment GtkArrow GtkAspectFrame GtkBin GtkBox GtkButton GtkButtonBox GtkCList GtkCTree GtkCalendar GtkCheckButton GtkCheckMenuItem GtkColorSelection GtkColorSelectionDialog GtkCombo GtkContainer GtkCurve GtkData GtkDialog GtkDrawingArea GtkEditable GtkEntry GtkEventBox GtkFileSelection GtkFixed GtkFontSelection GtkFontSelectionDialog GtkFrame GtkGammaCurve GtkHBox GtkHButtonBox GtkHPaned GtkHRuler GtkHScale GtkHScrollbar GtkHSeparator GtkHandleBox GtkImage GtkImageMenuItem GtkInputDialog GtkInvisible GtkItem GtkItemFactory GtkLabel GtkLayout GtkList GtkListItem GtkMenu GtkMenuBar GtkMenuItem GtkMenuShell GtkMessageDialog GtkMisc GtkNotebook GtkObject GtkOptionMenu GtkPacker GtkPaned GtkPixmap GtkPlug GtkPreview GtkProgress GtkProgressBar GtkRadioButton GtkRadioMenuItem GtkRange GtkRuler GtkScale GtkScrollbar GtkScrolledWindow GtkSeparatorMenuItem GtkSocket GtkSpinButton GtkStatusbar GtkTable GtkTearoffMenuItem GtkText GtkTextBuffer GtkTextMark GtkTextTag GtkTextView GtkTipsQuery GtkToggleButton GtkToolbar GtkTooltips GtkTree GtkTreeView GtkTreeItem GtkVBox GtkVButtonBox GtkVPaned GtkVRuler GtkVScale GtkVScrollbar GtkVSeparator GtkViewport GtkWidget GtkWindow GtkWindowGroup contained +syn keyword gtkrcClassName AccelLabel Adjustment Alignment Arrow AspectFrame Bin Box Button ButtonBox CList CTree Calendar CheckButton CheckMenuItem ColorSelection ColorSelectionDialog Combo Container Curve Data Dialog DrawingArea Editable Entry EventBox FileSelection Fixed FontSelection FontSelectionDialog Frame GammaCurve HBox HButtonBox HPaned HRuler HScale HScrollbar HSeparator HandleBox Image ImageMenuItem InputDialog Invisible Item ItemFactory Label Layout List ListItem Menu MenuBar MenuItem MenuShell MessageDialog Misc Notebook Object OptionMenu Packer Paned Pixmap Plug Preview Progress ProgressBar RadioButton RadioMenuItem Range Ruler Scale Scrollbar ScrolledWindow SeparatorMenuItem Socket SpinButton Statusbar Table TearoffMenuItem Text TextBuffer TextMark TextTag TextView TipsQuery ToggleButton Toolbar Tooltips Tree TreeView TreeItem VBox VButtonBox VPaned VRuler VScale VScrollbar VSeparator Viewport Widget Window WindowGroup contained +syn keyword gtkrcClassNameGnome GnomeAbout GnomeAnimator GnomeApp GnomeAppBar GnomeCalculator GnomeCanvas GnomeCanvasEllipse GnomeCanvasGroup GnomeCanvasImage GnomeCanvasItem GnomeCanvasLine GnomeCanvasPolygon GnomeCanvasRE GnomeCanvasRect GnomeCanvasText GnomeCanvasWidget GnomeClient GnomeColorPicker GnomeDEntryEdit GnomeDateEdit GnomeDialog GnomeDock GnomeDockBand GnomeDockItem GnomeDockLayout GnomeDruid GnomeDruidPage GnomeDruidPageFinish GnomeDruidPageStandard GnomeDruidPageStart GnomeEntry GnomeFileEntry GnomeFontPicker GnomeFontSelector GnomeHRef GnomeIconEntry GnomeIconList GnomeIconSelection GnomeIconTextItem GnomeLess GnomeMDI GnomeMDIChild GnomeMDIGenericChild GnomeMessageBox GnomeNumberEntry GnomePaperSelector GnomePixmap GnomePixmapEntry GnomeProcBar GnomePropertyBox GnomeScores GnomeSpell GnomeStock GtkClock GtkDial GtkPixmapMenuItem GtkTed contained +syn cluster gtkrcPRIVATE add=gtkrcClassName,gtkrcClassNameGnome + +" Stock item names +syn keyword gtkrcStockName gtk-add gtk-apply gtk-bold gtk-cancel gtk-cdrom gtk-clear gtk-close gtk-convert gtk-copy gtk-cut gtk-delete gtk-dialog-error gtk-dialog-info gtk-dialog-question gtk-dialog-warning gtk-dnd gtk-dnd-multiple gtk-execute gtk-find gtk-find-and-replace gtk-floppy gtk-goto-bottom gtk-goto-first gtk-goto-last gtk-goto-top gtk-go-back gtk-go-down gtk-go-forward gtk-go-up gtk-help gtk-home gtk-index gtk-italic gtk-jump-to gtk-justify-center gtk-justify-fill gtk-justify-left gtk-justify-right gtk-missing-image gtk-new gtk-no gtk-ok gtk-open gtk-paste gtk-preferences gtk-print gtk-print-preview gtk-properties gtk-quit gtk-redo gtk-refresh gtk-remove gtk-revert-to-saved gtk-save gtk-save-as gtk-select-color gtk-select-font gtk-sort-ascending gtk-sort-descending gtk-spell-check gtk-stop gtk-strikethrough gtk-undelete gtk-underline gtk-undo gtk-yes gtk-zoom-100 gtk-zoom-fit gtk-zoom-in gtk-zoom-out contained +syn cluster gtkrcPRIVATE add=gtkrcStockName + +" Gtk Settings +syn keyword gtkrcSettingsName gtk-double-click-time gtk-cursor-blink gtk-cursor-blink-time gtk-split-cursor gtk-theme-name gtk-key-theme-name gtk-menu-bar-accel gtk-dnd-drag-threshold gtk-font-name gtk-color-palette gtk-entry-select-on-focus gtk-can-change-accels gtk-toolbar-style gtk-toolbar-icon-size +syn cluster gtkrcPRIVATE add=gtkrcSettingsName + +" Catch errors caused by wrong parenthesization +syn region gtkrcParen start='(' end=')' transparent contains=ALLBUT,gtkrcParenError,@gtkrcPRIVATE +syn match gtkrcParenError ")" +syn region gtkrcBrace start='{' end='}' transparent contains=ALLBUT,gtkrcBraceError,@gtkrcPRIVATE +syn match gtkrcBraceError "}" +syn region gtkrcBracket start='\[' end=']' transparent contains=ALLBUT,gtkrcBracketError,@gtkrcPRIVATE +syn match gtkrcBracketError "]" + +" Synchronization +syn sync minlines=50 +syn sync match gtkrcSyncClass groupthere NONE "^\s*class\>" + +" Define the default highlighting + +hi def link gtkrcComment Comment +hi def link gtkrcFixme Todo + +hi def link gtkrcInclude Preproc + +hi def link gtkrcACString gtkrcString +hi def link gtkrcBString gtkrcString +hi def link gtkrcString String +hi def link gtkrcNumber Number +hi def link gtkrcStateName gtkrcConstant +hi def link gtkrcPriorityName gtkrcConstant +hi def link gtkrcTextDirName gtkrcConstant +hi def link gtkrcSettingsName Function +hi def link gtkrcStockName Function +hi def link gtkrcConstant Constant + +hi def link gtkrcPathSpecial gtkrcSpecial +hi def link gtkrcWPathSpecial gtkrcSpecial +hi def link gtkrcRGBColor gtkrcSpecial +hi def link gtkrcKeyMod gtkrcSpecial +hi def link gtkrcSpecial Special + +hi def link gtkrcTop gtkrcKeyword +hi def link gtkrcPathSet gtkrcKeyword +hi def link gtkrcStyleKeyword gtkrcKeyword +hi def link gtkrcFunction gtkrcKeyword +hi def link gtkrcBind gtkrcKeyword +hi def link gtkrcKeyword Keyword + +hi def link gtkrcClassNameGnome gtkrcGtkClass +hi def link gtkrcClassName gtkrcGtkClass +hi def link gtkrcFunctionName gtkrcGtkClass +hi def link gtkrcGtkClass Type + +hi def link gtkrcImage gtkrcOtherword +hi def link gtkrcOtherword Function + +hi def link gtkrcParenError gtkrcError +hi def link gtkrcBraceError gtkrcError +hi def link gtkrcBracketError gtkrcError +hi def link gtkrcError Error + + +let b:current_syntax = "gtkrc" diff --git a/.config/vim/syntax/gvpr.vim b/.config/vim/syntax/gvpr.vim new file mode 100644 index 0000000..a737891 --- /dev/null +++ b/.config/vim/syntax/gvpr.vim @@ -0,0 +1,85 @@ +" Vim syntax file +" Language: Graphviz program +" Maintainer: Matthew Fernandez +" Last Change: Tue, 28 Jul 2020 17:20:44 -0700 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword gvArg ARGC ARGV +syn keyword gvBeg BEGIN BEG_G N E END END_G +syn keyword gvFunc + \ graph fstsubg isDirect isStrict isSubg nEdges nNodes nxtsubg subg + \ degreeOf fstnode indegreeOf isNode isSubnode node nxtnode nxtnode_sg + \ outDegreeOf subnode + \ edge edge_sg fstedge fstedge_sg fstin fstin_sg fstout fstout_sg isEdge + \ isEdge_sg isSubedge nxtedge nxtedge_sg nxtin nxtin_sg nxtout nxtout_sg opp + \ subedge + \ freadG fwriteG readG write[] writeG + \ aget aset clone cloneG compOf copy[] copyA delete[] fstAttr getDflt hasAttr + \ induce isAttr isIn kindOf lock[] nxtAttr setDflt + \ canon gsub html index ishtml length llOf match[] rindex split[] sprintf + \ sscanf strcmp sub substr tokens tolower toupper urOf xOf yOf + \ closeF openF print[] printf scanf readL + \ atan2 cos exp log MAX MIN pow sin[] sqrt + \ in[] unset + \ colorx exit[] rand srand system +syn keyword gvCons + \ NULL TV_bfs TV_dfs TV_en TV_flat TV_fwd TV_ne TV_prepostdfs TV_prepostfwd + \ TV_prepostrev TV_postdfs TV_postfwd tv_postrev TV_rev +syn keyword gvType char double float int long unsigned void + \ string + \ edge_t graph_t node_t obj_t +syn match gvVar + \ "\$\(\(F\|G\|NG\|O\|T\|tgtname\|tvedge\|tvnext\|tvroot\|tvtype\)\>\)\?\(\<\)\@!" +syn keyword gvWord break continue else for forr if return switch while + +" numbers adapted from c.vim's cNumbers and friends +syn match gvNums transparent "\<\d\|\.\d" contains=gvNumber,gvFloat,gvOctal +syn match gvNumber contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>" +syn match gvNumber contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" +syn match gvOctal contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=gvOctalZero +syn match gvOctalZero contained "\<0" +syn match gvFloat contained "\d\+f" +syn match gvFloat contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" +syn match gvFloat contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +syn match gvFloat contained "\d\+e[-+]\=\d\+[fl]\=\>" + +syn region gvString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=gvFormat,gvSpecial extend +syn region gvString start="'" skip="\\\\\|\\'" end="'" contains=gvFormat,gvSpecial extend + +" adapted from c.vim's cFormat for c_no_c99 +syn match gvFormat "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained + +syn match gvSpecial "\\." contained + +syn region gvCComment start="//" skip="\\$" end="$" keepend +syn region gvCPPComment start="#" skip="\\$" end="$" keepend +syn region gvCXXComment start="/\*" end="\*/" fold + +hi def link gvArg Identifier +hi def link gvBeg Keyword +hi def link gvFloat Number +hi def link gvFunc Identifier +hi def link gvCons Number +hi def link gvNumber Number +hi def link gvType Type +hi def link gvVar Statement +hi def link gvWord Keyword + +hi def link gvString String +hi def link gvFormat Special +hi def link gvSpecial Special + +hi def link gvCComment Comment +hi def link gvCPPComment Comment +hi def link gvCXXComment Comment + +let b:current_syntax = "gvpr" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/gyp.vim b/.config/vim/syntax/gyp.vim new file mode 100644 index 0000000..14c07b8 --- /dev/null +++ b/.config/vim/syntax/gyp.vim @@ -0,0 +1,49 @@ +" Vim syntax file +" Language: GYP +" Maintainer: ObserverOfTime +" Filenames: *.gyp,*.gypi +" Last Change: 2022 Sep 27 + +if !exists('g:main_syntax') + if exists('b:current_syntax') && b:current_syntax ==# 'gyp' + finish + endif + let g:main_syntax = 'gyp' +endif + +" Based on JSON syntax +runtime! syntax/json.vim + +" Single quotes are allowed +syn clear jsonStringSQError + +syn match jsonKeywordMatch /'\([^']\|\\\'\)\+'[[:blank:]\r\n]*\:/ contains=jsonKeyword +if has('conceal') && (!exists('g:vim_json_conceal') || g:vim_json_conceal==1) + syn region jsonKeyword matchgroup=jsonQuote start=/'/ end=/'\ze[[:blank:]\r\n]*\:/ concealends contained +else + syn region jsonKeyword matchgroup=jsonQuote start=/'/ end=/'\ze[[:blank:]\r\n]*\:/ contained +endif + +syn match jsonStringMatch /'\([^']\|\\\'\)\+'\ze[[:blank:]\r\n]*[,}\]]/ contains=jsonString +if has('conceal') && (!exists('g:vim_json_conceal') || g:vim_json_conceal==1) + syn region jsonString oneline matchgroup=jsonQuote start=/'/ skip=/\\\\\|\\'/ end=/'/ concealends contains=jsonEscape contained +else + syn region jsonString oneline matchgroup=jsonQuote start=/'/ skip=/\\\\\|\\'/ end=/'/ contains=jsonEscape contained +endif + +" Trailing commas are allowed +if !exists('g:vim_json_warnings') || g:vim_json_warnings==1 + syn clear jsonTrailingCommaError +endif + +" Python-style comments are allowed +syn match jsonComment /#.*$/ contains=jsonTodo,@Spell +syn keyword jsonTodo FIXME NOTE TODO XXX TBD contained + +hi def link jsonComment Comment +hi def link jsonTodo Todo + +let b:current_syntax = 'gyp' +if g:main_syntax ==# 'gyp' + unlet g:main_syntax +endif diff --git a/.config/vim/syntax/haml.vim b/.config/vim/syntax/haml.vim new file mode 100644 index 0000000..c14b88f --- /dev/null +++ b/.config/vim/syntax/haml.vim @@ -0,0 +1,109 @@ +" Vim syntax file +" Language: Haml +" Maintainer: Tim Pope +" Filenames: *.haml +" Last Change: 2019 Dec 05 + +if exists("b:current_syntax") + finish +endif + +if !exists("main_syntax") + let main_syntax = 'haml' +endif +let b:ruby_no_expensive = 1 + +runtime! syntax/html.vim +unlet! b:current_syntax +silent! syn include @hamlSassTop syntax/sass.vim +unlet! b:current_syntax +syn include @hamlRubyTop syntax/ruby.vim + +syn case match + +syn region rubyCurlyBlock start="{" end="}" contains=@hamlRubyTop contained +syn cluster hamlRubyTop add=rubyCurlyBlock + +syn cluster hamlComponent contains=hamlAttributes,hamlAttributesHash,hamlClassChar,hamlIdChar,hamlObject,hamlDespacer,hamlSelfCloser,hamlRuby,hamlPlainChar,hamlInterpolatable +syn cluster hamlEmbeddedRuby contains=hamlAttributesHash,hamlObject,hamlRuby,hamlRubyFilter +syn cluster hamlTop contains=hamlBegin,hamlPlainFilter,hamlRubyFilter,hamlSassFilter,hamlComment,hamlHtmlComment + +syn match hamlBegin "^\s*\%([<>]\|&[^=~ ]\)\@!" nextgroup=hamlTag,hamlClassChar,hamlIdChar,hamlRuby,hamlPlainChar,hamlInterpolatable + +syn match hamlTag "%\w\+\%(:\w\+\)\=" contained contains=htmlTagName,htmlSpecialTagName nextgroup=@hamlComponent +syn region hamlAttributes matchgroup=hamlAttributesDelimiter start="(" end=")" contained contains=htmlArg,hamlAttributeString,hamlAttributeVariable,htmlEvent,htmlCssDefinition nextgroup=@hamlComponent +syn region hamlAttributesHash matchgroup=hamlAttributesDelimiter start="{" end="}" contained contains=@hamlRubyTop nextgroup=@hamlComponent +syn region hamlObject matchgroup=hamlObjectDelimiter start="\[" end="\]" contained contains=@hamlRubyTop nextgroup=@hamlComponent +syn match hamlDespacer "[<>]" contained nextgroup=hamlDespacer,hamlSelfCloser,hamlRuby,hamlPlainChar,hamlInterpolatable +syn match hamlSelfCloser "/" contained +syn match hamlClassChar "\." contained nextgroup=hamlClass +syn match hamlIdChar "#{\@!" contained nextgroup=hamlId +syn match hamlClass "\%(\w\|-\|\:\)\+" contained nextgroup=@hamlComponent +syn match hamlId "\%(\w\|-\)\+" contained nextgroup=@hamlComponent +syn region hamlDocType start="^\s*!!!" end="$" + +syn region hamlRuby matchgroup=hamlRubyOutputChar start="[!&]\==\|\~" skip=",\s*$" end="$" contained contains=@hamlRubyTop keepend +syn region hamlRuby matchgroup=hamlRubyChar start="-" skip=",\s*$" end="$" contained contains=@hamlRubyTop keepend +syn match hamlPlainChar "\\" contained +syn region hamlInterpolatable matchgroup=hamlInterpolatableChar start="!\===\|!=\@!" end="$" keepend contained contains=hamlInterpolation,hamlInterpolationEscape,@hamlHtmlTop +syn region hamlInterpolatable matchgroup=hamlInterpolatableChar start="&==\|&=\@!" end="$" keepend contained contains=hamlInterpolation,hamlInterpolationEscape +syn region hamlInterpolation matchgroup=hamlInterpolationDelimiter start="#{" end="}" contains=@hamlRubyTop containedin=javascriptStringS,javascriptStringD +syn match hamlInterpolationEscape "\\\@" contained contains=@hamlRubyTop + +syn region hamlAttributeString start=+\%(=\s*\)\@<='+ skip=+\%(\\\\\)*\\'+ end=+'+ contains=hamlInterpolation,hamlInterpolationEscape +syn region hamlAttributeString start=+\%(=\s*\)\@<="+ skip=+\%(\\\\\)*\\"+ end=+"+ contains=hamlInterpolation,hamlInterpolationEscape +syn match hamlAttributeVariable "\%(=\s*\)\@<=\%(@@\=\|\$\)\=\w\+" contained + +syn match hamlHelper "\[^]]*]" contained containedin=hamlHtmlComment + +hi def link hamlSelfCloser Special +hi def link hamlDespacer Special +hi def link hamlClassChar Special +hi def link hamlIdChar Special +hi def link hamlTag Special +hi def link hamlClass Type +hi def link hamlId Identifier +hi def link hamlPlainChar Special +hi def link hamlInterpolatableChar hamlRubyChar +hi def link hamlRubyOutputChar hamlRubyChar +hi def link hamlRubyChar Special +hi def link hamlInterpolationDelimiter Delimiter +hi def link hamlInterpolationEscape Special +hi def link hamlAttributeString String +hi def link hamlAttributeVariable Identifier +hi def link hamlDocType PreProc +hi def link hamlFilter PreProc +hi def link hamlAttributesDelimiter Delimiter +hi def link hamlObjectDelimiter Delimiter +hi def link hamlHelper Function +hi def link hamlHtmlComment hamlComment +hi def link hamlComment Comment +hi def link hamlIEConditional SpecialComment +hi def link hamlError Error + +let b:current_syntax = "haml" + +if main_syntax == "haml" + unlet main_syntax +endif + +" vim:set sw=2: diff --git a/.config/vim/syntax/hamster.vim b/.config/vim/syntax/hamster.vim new file mode 100644 index 0000000..975562d --- /dev/null +++ b/.config/vim/syntax/hamster.vim @@ -0,0 +1,370 @@ +" Vim syntax file +" Language: Hamster Scripting Language +" Maintainer: David Fishburn +" Last Change: Sun Oct 24 2004 7:11:50 PM +" Version: 2.0.6.0 + +" Description: Hamster Classic +" Hamster is a local server for news and mail. It's a windows-32-bit-program. +" It allows the use of multiple news- and mailserver and combines them to one +" mail- and newsserver for the news/mail-client. It load faster than a normal +" newsreader because many threads can run simultaneous. It contains scorefile +" for news and mail, a built-in script language, the GUI allows translation to +" other languages, it can be used in a network and that's not all features... +" +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +syn keyword hamsterSpecial abs +syn keyword hamsterSpecial artaddheader +syn keyword hamsterSpecial artalloc +syn keyword hamsterSpecial artdelheader +syn keyword hamsterSpecial artfree +syn keyword hamsterSpecial artgetbody +syn keyword hamsterSpecial artgetheader +syn keyword hamsterSpecial artgetheaders +syn keyword hamsterSpecial artgettext +syn keyword hamsterSpecial artheaderexists +syn keyword hamsterSpecial artload +syn keyword hamsterSpecial artsave +syn keyword hamsterSpecial artsetbody +syn keyword hamsterSpecial artsetheader +syn keyword hamsterSpecial artsetheaders +syn keyword hamsterSpecial artsettext +syn keyword hamsterSpecial assert +syn keyword hamsterSpecial atadd +syn keyword hamsterSpecial atclear +syn keyword hamsterSpecial atcount +syn keyword hamsterSpecial ateverymins +syn keyword hamsterSpecial atexecute +syn keyword hamsterSpecial atfrom +syn keyword hamsterSpecial atondays +syn keyword hamsterSpecial atsubfunction +syn keyword hamsterSpecial atuntil +syn keyword hamsterSpecial beep +syn keyword hamsterSpecial break +syn keyword hamsterSpecial chr +syn keyword hamsterSpecial clearxcounter +syn keyword hamsterSpecial clipread +syn keyword hamsterSpecial clipwrite +syn keyword hamsterSpecial const +syn keyword hamsterSpecial constenum +syn keyword hamsterSpecial continue +syn keyword hamsterSpecial copy +syn keyword hamsterSpecial debug +syn keyword hamsterSpecial dec +syn keyword hamsterSpecial decodebase64 +syn keyword hamsterSpecial decodeqp +syn keyword hamsterSpecial decodetime +syn keyword hamsterSpecial decxcounter +syn keyword hamsterSpecial delete +syn keyword hamsterSpecial deletehostsentry +syn keyword hamsterSpecial digest +syn keyword hamsterSpecial dirchange +syn keyword hamsterSpecial dircurrent +syn keyword hamsterSpecial direxists +syn keyword hamsterSpecial dirmake +syn keyword hamsterSpecial dirremove +syn keyword hamsterSpecial dirsystem +syn keyword hamsterSpecial dirwindows +syn keyword hamsterSpecial diskfreekb +syn keyword hamsterSpecial dllcall +syn keyword hamsterSpecial dllfree +syn keyword hamsterSpecial dlllasterror +syn keyword hamsterSpecial dllload +syn keyword hamsterSpecial dump +syn keyword hamsterSpecial encodetime +syn keyword hamsterSpecial entercontext +syn keyword hamsterSpecial errcatch +syn keyword hamsterSpecial errline +syn keyword hamsterSpecial errlineno +syn keyword hamsterSpecial errmodule +syn keyword hamsterSpecial errmsg +syn keyword hamsterSpecial errnum +syn keyword hamsterSpecial error +syn keyword hamsterSpecial errsender +syn keyword hamsterSpecial eval +syn keyword hamsterSpecial eventclose +syn keyword hamsterSpecial eventcreate +syn keyword hamsterSpecial eventmultiplewait +syn keyword hamsterSpecial eventpulse +syn keyword hamsterSpecial eventreset +syn keyword hamsterSpecial eventset +syn keyword hamsterSpecial eventwait +syn keyword hamsterSpecial execute +syn keyword hamsterSpecial false +syn keyword hamsterSpecial filecopy +syn keyword hamsterSpecial filedelete +syn keyword hamsterSpecial fileexists +syn keyword hamsterSpecial filemove +syn keyword hamsterSpecial filerename +syn keyword hamsterSpecial filesize +syn keyword hamsterSpecial filetime +syn keyword hamsterSpecial getenv +syn keyword hamsterSpecial getprocessidentifier +syn keyword hamsterSpecial getuptimedays +syn keyword hamsterSpecial getuptimehours +syn keyword hamsterSpecial getuptimemins +syn keyword hamsterSpecial getuptimesecs +syn keyword hamsterSpecial gosub +syn keyword hamsterSpecial goto +syn keyword hamsterSpecial hex +syn keyword hamsterSpecial icase +syn keyword hamsterSpecial iif +syn keyword hamsterSpecial inc +syn keyword hamsterSpecial incxcounter +syn keyword hamsterSpecial inidelete +syn keyword hamsterSpecial inierasesection +syn keyword hamsterSpecial iniread +syn keyword hamsterSpecial iniwrite +syn keyword hamsterSpecial inputbox +syn keyword hamsterSpecial inputpw +syn keyword hamsterSpecial int +syn keyword hamsterSpecial isint +syn keyword hamsterSpecial isstr +syn keyword hamsterSpecial leavecontext +syn keyword hamsterSpecial len +syn keyword hamsterSpecial listadd +syn keyword hamsterSpecial listalloc +syn keyword hamsterSpecial listappend +syn keyword hamsterSpecial listbox +syn keyword hamsterSpecial listclear +syn keyword hamsterSpecial listcount +syn keyword hamsterSpecial listdelete +syn keyword hamsterSpecial listdirs +syn keyword hamsterSpecial listexists +syn keyword hamsterSpecial listfiles +syn keyword hamsterSpecial listfiles +syn keyword hamsterSpecial listfree +syn keyword hamsterSpecial listget +syn keyword hamsterSpecial listgetkey +syn keyword hamsterSpecial listgettag +syn keyword hamsterSpecial listgettext +syn keyword hamsterSpecial listindexof +syn keyword hamsterSpecial listinsert +syn keyword hamsterSpecial listload +syn keyword hamsterSpecial listrasentries +syn keyword hamsterSpecial listsave +syn keyword hamsterSpecial listset +syn keyword hamsterSpecial listsetkey +syn keyword hamsterSpecial listsettag +syn keyword hamsterSpecial listsettext +syn keyword hamsterSpecial listsort +syn keyword hamsterSpecial localhostaddr +syn keyword hamsterSpecial localhostname +syn keyword hamsterSpecial lookuphostaddr +syn keyword hamsterSpecial lookuphostname +syn keyword hamsterSpecial lowercase +syn keyword hamsterSpecial memalloc +syn keyword hamsterSpecial memforget +syn keyword hamsterSpecial memfree +syn keyword hamsterSpecial memgetint +syn keyword hamsterSpecial memgetstr +syn keyword hamsterSpecial memsetint +syn keyword hamsterSpecial memsetstr +syn keyword hamsterSpecial memsize +syn keyword hamsterSpecial memvarptr +syn keyword hamsterSpecial msgbox +syn keyword hamsterSpecial ord +syn keyword hamsterSpecial paramcount +syn keyword hamsterSpecial paramstr +syn keyword hamsterSpecial popupbox +syn keyword hamsterSpecial pos +syn keyword hamsterSpecial print +syn keyword hamsterSpecial quit +syn keyword hamsterSpecial random +syn keyword hamsterSpecial randomize +syn keyword hamsterSpecial rasdial +syn keyword hamsterSpecial rasgetconnection +syn keyword hamsterSpecial rasgetip +syn keyword hamsterSpecial rashangup +syn keyword hamsterSpecial rasisconnected +syn keyword hamsterSpecial re_extract +syn keyword hamsterSpecial re_match +syn keyword hamsterSpecial re_parse +syn keyword hamsterSpecial re_split +syn keyword hamsterSpecial replace +syn keyword hamsterSpecial return +syn keyword hamsterSpecial runscript +syn keyword hamsterSpecial scriptpriority +syn keyword hamsterSpecial set +syn keyword hamsterSpecial sethostsentry_byaddr +syn keyword hamsterSpecial sethostsentry_byname +syn keyword hamsterSpecial setxcounter +syn keyword hamsterSpecial sgn +syn keyword hamsterSpecial shell +syn keyword hamsterSpecial sleep +syn keyword hamsterSpecial stopthread +syn keyword hamsterSpecial str +syn keyword hamsterSpecial syserrormessage +syn keyword hamsterSpecial testmailfilterline +syn keyword hamsterSpecial testnewsfilterline +syn keyword hamsterSpecial ticks +syn keyword hamsterSpecial time +syn keyword hamsterSpecial timegmt +syn keyword hamsterSpecial trace +syn keyword hamsterSpecial trim +syn keyword hamsterSpecial true +syn keyword hamsterSpecial uppercase +syn keyword hamsterSpecial utf7toucs16 +syn keyword hamsterSpecial utf8toucs32 +syn keyword hamsterSpecial var +syn keyword hamsterSpecial varset +syn keyword hamsterSpecial warning +syn keyword hamsterSpecial xcounter + +" common functions +syn keyword hamsterFunction addlog +syn keyword hamsterFunction decodemimeheaderstring +syn keyword hamsterFunction decodetolocalcharset +syn keyword hamsterFunction gettasksactive +syn keyword hamsterFunction gettasksrun +syn keyword hamsterFunction gettaskswait +syn keyword hamsterFunction hamaddgroup +syn keyword hamsterFunction hamaddlog +syn keyword hamsterFunction hamaddpull +syn keyword hamsterFunction hamartcount +syn keyword hamsterFunction hamartdeletemid +syn keyword hamsterFunction hamartdeletemidingroup +syn keyword hamsterFunction hamartdeletenringroup +syn keyword hamsterFunction hamartimport +syn keyword hamsterFunction hamartlocatemid +syn keyword hamsterFunction hamartlocatemidingroup +syn keyword hamsterFunction hamartnomax +syn keyword hamsterFunction hamartnomin +syn keyword hamsterFunction hamarttext +syn keyword hamsterFunction hamarttextexport +syn keyword hamsterFunction hamchangepassword +syn keyword hamsterFunction hamcheckpurge +syn keyword hamsterFunction hamdelgroup +syn keyword hamsterFunction hamdelpull +syn keyword hamsterFunction hamdialogaddpull +syn keyword hamsterFunction hamdialogeditdirs +syn keyword hamsterFunction hamdialogmailkillfilelog +syn keyword hamsterFunction hamdialognewskillfilelog +syn keyword hamsterFunction hamdialogscripts +syn keyword hamsterFunction hamenvelopefrom +syn keyword hamsterFunction hamexepath +syn keyword hamsterFunction hamfetchmail +syn keyword hamsterFunction hamflush +syn keyword hamsterFunction hamgetstatus +syn keyword hamsterFunction hamgroupclose +syn keyword hamsterFunction hamgroupcount +syn keyword hamsterFunction hamgroupindex +syn keyword hamsterFunction hamgroupname +syn keyword hamsterFunction hamgroupnamebyhandle +syn keyword hamsterFunction hamgroupopen +syn keyword hamsterFunction hamgroupspath +syn keyword hamsterFunction hamhscpath +syn keyword hamsterFunction hamhsmpath +syn keyword hamsterFunction hamimapserver +syn keyword hamsterFunction hamisidle +syn keyword hamsterFunction hamlogspath +syn keyword hamsterFunction hammailexchange +syn keyword hamsterFunction hammailpath +syn keyword hamsterFunction hammailsoutpath +syn keyword hamsterFunction hammainfqdn +syn keyword hamsterFunction hammainwindow +syn keyword hamsterFunction hammessage +syn keyword hamsterFunction hammidfqdn +syn keyword hamsterFunction hamnewmail +syn keyword hamsterFunction hamnewserrpath +syn keyword hamsterFunction hamnewsjobsadd +syn keyword hamsterFunction hamnewsjobscheckactive +syn keyword hamsterFunction hamnewsjobsclear +syn keyword hamsterFunction hamnewsjobsdelete +syn keyword hamsterFunction hamnewsjobsfeed +syn keyword hamsterFunction hamnewsjobsgetcounter +syn keyword hamsterFunction hamnewsjobsgetparam +syn keyword hamsterFunction hamnewsjobsgetpriority +syn keyword hamsterFunction hamnewsjobsgetserver +syn keyword hamsterFunction hamnewsjobsgettype +syn keyword hamsterFunction hamnewsjobspost +syn keyword hamsterFunction hamnewsjobspostdef +syn keyword hamsterFunction hamnewsjobspull +syn keyword hamsterFunction hamnewsjobspulldef +syn keyword hamsterFunction hamnewsjobssetpriority +syn keyword hamsterFunction hamnewsjobsstart +syn keyword hamsterFunction hamnewsoutpath +syn keyword hamsterFunction hamnewspost +syn keyword hamsterFunction hamnewspull +syn keyword hamsterFunction hamnntpserver +syn keyword hamsterFunction hampassreload +syn keyword hamsterFunction hampath +syn keyword hamsterFunction hampop3server +syn keyword hamsterFunction hampostmaster +syn keyword hamsterFunction hampurge +syn keyword hamsterFunction hamrasdial +syn keyword hamsterFunction hamrashangup +syn keyword hamsterFunction hamrcpath +syn keyword hamsterFunction hamrebuildgloballists +syn keyword hamsterFunction hamrebuildhistory +syn keyword hamsterFunction hamrecoserver +syn keyword hamsterFunction hamreloadconfig +syn keyword hamsterFunction hamreloadipaccess +syn keyword hamsterFunction hamresetcounters +syn keyword hamsterFunction hamrotatelog +syn keyword hamsterFunction hamscorelist +syn keyword hamsterFunction hamscoretest +syn keyword hamsterFunction hamsendmail +syn keyword hamsterFunction hamsendmailauth +syn keyword hamsterFunction hamserverpath +syn keyword hamsterFunction hamsetlogin +syn keyword hamsterFunction hamshutdown +syn keyword hamsterFunction hamsmtpserver +syn keyword hamsterFunction hamstopalltasks +syn keyword hamsterFunction hamthreadcount +syn keyword hamsterFunction hamtrayicon +syn keyword hamsterFunction hamusenetacc +syn keyword hamsterFunction hamversion +syn keyword hamsterFunction hamwaitidle +syn keyword hamsterFunction raslasterror +syn keyword hamsterFunction rfctimezone +syn keyword hamsterFunction settasklimiter + +syn keyword hamsterStatement if +syn keyword hamsterStatement else +syn keyword hamsterStatement elseif +syn keyword hamsterStatement endif +syn keyword hamsterStatement do +syn keyword hamsterStatement loop +syn keyword hamsterStatement while +syn keyword hamsterStatement endwhile +syn keyword hamsterStatement repeat +syn keyword hamsterStatement until +syn keyword hamsterStatement for +syn keyword hamsterStatement endfor +syn keyword hamsterStatement sub +syn keyword hamsterStatement endsub +syn keyword hamsterStatement label + + +" Strings and characters: +syn region hamsterString start=+"+ end=+"+ contains=@Spell +syn region hamsterString start=+'+ end=+'+ contains=@Spell + +" Numbers: +syn match hamsterNumber "-\=\<\d*\.\=[0-9_]\>" + +" Comments: +syn region hamsterHashComment start=/#/ end=/$/ contains=@Spell +syn cluster hamsterComment contains=hamsterHashComment +syn sync ccomment hamsterHashComment + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link hamsterHashComment Comment +hi def link hamsterSpecial Special +hi def link hamsterStatement Statement +hi def link hamsterString String +hi def link hamsterFunction Function + + +let b:current_syntax = "hamster" + +" vim:sw=4 diff --git a/.config/vim/syntax/hare.vim b/.config/vim/syntax/hare.vim new file mode 100644 index 0000000..992b7b9 --- /dev/null +++ b/.config/vim/syntax/hare.vim @@ -0,0 +1,268 @@ +vim9script + +# Vim syntax file. +# Language: Hare +# Maintainer: Amelia Clarke +# Last Change: 2025 Sep 06 +# Upstream: https://git.sr.ht/~sircmpwn/hare.vim + +if exists('b:current_syntax') + finish +endif + +# Syntax {{{1 +syn case match +syn iskeyword @,48-57,@-@,_ + +# Reserved keywords. +syn cluster hareReserved contains=hareBoolean,hareBuiltin,hareConditional,hareConstant,hareDefine,hareInclude,hareKeyword,hareLabel,hareOperator,hareRepeat,hareStorageClass,hareStructure,hareType,hareTypedef + +# Types {{{2 +syn cluster hareType contains=hareErrorFlag,harePointer,hareSlice,hareStorageClass,hareStructure,hareTaggedUnion,hareType +syn keyword hareType bool +syn keyword hareType done +syn keyword hareType f32 f64 +syn keyword hareType i8 i16 i32 i64 int +syn keyword hareType never +syn keyword hareType nomem +syn keyword hareType opaque +syn keyword hareType rune str +syn keyword hareType u8 u16 u32 u64 uint uintptr +syn keyword hareType void + +# C ABI. +syn keyword hareType valist + +# Slice and array types. +syn region hareSlice matchgroup=hareSlice start='\[' end=']' contained containedin=hareBuiltinTypeCall,hareTaggedUnion contains=TOP nextgroup=@hareType skipempty skipwhite +syn match hareSlice '\[[*_]]' contains=hareSliceBounds nextgroup=@hareType skipempty skipwhite +syn match hareSliceBounds '[*_]' contained display + +# Other types. +syn keyword hareStorageClass nullable nextgroup=harePointer skipempty skipwhite +syn keyword hareStructure enum struct union + +# Declarations {{{2 +syn keyword hareDefine def +syn keyword hareInclude use +syn keyword hareKeyword const nextgroup=@hareType skipempty skipwhite +syn keyword hareKeyword export static +syn keyword hareKeyword fn nextgroup=@hareFunction skipempty skipwhite +syn keyword hareKeyword let +syn keyword hareTypedef type nextgroup=hareTypeIdentifier skipempty skipwhite + +# Function declarations. +syn cluster hareFunction contains=hareFunction,hareFuncParams +syn match hareFunction '\v<\h\w*%(::\h\w*)*>' contained contains=@hareIdentifier nextgroup=hareFuncParams skipempty skipwhite +syn region hareFuncParams matchgroup=hareFuncParams start='(' end=')' contained contains=TOP nextgroup=@hareType skipempty skipwhite + +# Type declarations. +# FIXME: Does not yet account for type declarations with multiple bindings. +syn match hareTypeIdentifier '\v<\h\w*%(::\h\w*)*>' contained contains=hareIdentifier nextgroup=hareTypeEquals skipempty skipwhite transparent +syn match hareTypeEquals '=' contained nextgroup=@hareType skipempty skipwhite transparent + +# Identifiers. +syn match hareIdentifier '\v<\h\w*%(::\h\w*)*>' contains=@hareIdentifier nextgroup=@harePostfix skipempty skipwhite +syn cluster hareIdentifier contains=hareDelimiter,hareName +syn match hareName '\<\h\w*\>' contained contains=@hareReserved transparent + +# Attributes {{{3 +syn keyword hareAttribute @init @fini @test +syn keyword hareAttribute @offset nextgroup=hareAttrParens skipempty skipwhite +syn keyword hareAttribute @packed +syn keyword hareAttribute @symbol nextgroup=hareAttrParens skipempty skipwhite +syn keyword hareAttribute @threadlocal + +# Match the parens after attributes. +syn region hareAttrParens matchgroup=hareAttrParens start='(' end=')' contained contains=TOP + +# Expressions {{{2 +syn keyword hareConditional else +syn keyword hareConditional if nextgroup=hareCondParens skipempty skipwhite +syn keyword hareConditional match switch nextgroup=@hareCondition skipempty skipwhite +syn keyword hareKeyword break continue return yield +syn keyword hareKeyword defer +syn keyword hareLabel case nextgroup=@hareType skipempty skipwhite +syn keyword hareOperator as is nextgroup=@hareType skipempty skipwhite +syn keyword hareRepeat for nextgroup=@hareCondition skipempty skipwhite + +# Match the parens in conditionals and for-loops. +syn cluster hareCondition contains=hareCondLabel,hareCondParens +syn match hareCondLabel ':\h\w*\>' contained contains=hareUserLabel nextgroup=hareCondParens skipempty skipwhite transparent +syn region hareCondParens matchgroup=hareCondParens start='(' end=')' contained contains=TOP + +# Builtins {{{3 +syn keyword hareBuiltin abort assert nextgroup=hareBuiltinCall skipempty skipwhite +syn keyword hareBuiltin align nextgroup=hareBuiltinTypeCall skipempty skipwhite +syn keyword hareBuiltin alloc free nextgroup=hareBuiltinCall skipempty skipwhite +syn keyword hareBuiltin append insert delete nextgroup=hareBuiltinCall skipempty skipwhite +syn keyword hareBuiltin len offset nextgroup=hareBuiltinCall skipempty skipwhite + +# C ABI. +syn keyword hareBuiltin vastart vaarg vaend nextgroup=hareBuiltinCall skipempty skipwhite + +# Highlight `size` as a builtin only if it is followed by an open paren. +syn match hareType '\' +syn match hareBuiltin '\]=\?' +syn match hareSymbolOperator '=>' + +# Additive and multiplicative arithmetic. +syn match hareSymbolOperator '[-+*/%]=\?' + +# Bit-shifting arithmetic. +syn match hareSymbolOperator '\%(<<\|>>\)=\?' + +# Bitwise arithmetic. +syn match hareSymbolOperator '[&^|]=\?' +syn match hareSymbolOperator '\~' + +# Logical arithmetic. +syn match hareSymbolOperator '\%(&&\|^^\|||\)=\?' + +# Highlight `!`, `*`, and `|` correctly in types. +syn match hareErrorFlag '!' contained containedin=hareBuiltinTypeCall,hareTaggedUnion nextgroup=@hareType skipempty skipwhite +syn match harePointer '*' contained containedin=hareBuiltinTypeCall,hareTaggedUnion nextgroup=@hareType skipempty skipwhite +syn match hareTaggedUnionBar '|' contained containedin=hareTaggedUnion + +# Postfix expressions {{{3 +# TODO: Match postfix expressions after literals. +syn cluster harePostfix contains=hareCast,hareErrorCheck,hareFieldAccess,hareFuncCall,hareIndex + +# Casts and type hints. +syn match hareCast ':' nextgroup=@hareType skipempty skipwhite + +# Error handling. +syn match hareErrorCheck '!=\@!' contained nextgroup=@harePostfix skipempty skipwhite +syn match hareErrorCheck '?' nextgroup=@harePostfix skipempty skipwhite + +# Field access. +syn match hareFieldAccess '\.\w\+\>' contained contains=hareName,hareNumber nextgroup=@harePostfix skipempty skipwhite + +# Function calls. +syn region hareFuncCall matchgroup=hareFuncCall start='(' end=')' contained contains=TOP nextgroup=@harePostfix skipempty skipwhite + +# Indexing and slicing. +syn region hareIndex matchgroup=hareIndex start='\[' end=']' contained contains=TOP nextgroup=@harePostfix skipempty skipwhite + +# Nested expressions. +syn region hareParens matchgroup=hareParens start='(' end=')' contains=TOP nextgroup=@harePostfix skipempty skipwhite + +# Tagged union and tuple types. +syn region hareTaggedUnion matchgroup=hareTaggedUnion start='(' end=')' contained containedin=hareBuiltinTypeCall,hareTaggedUnion contains=TOP + +# Literals {{{3 +syn keyword hareBoolean true false +syn keyword hareConstant null + +# Integers. +syn match hareNumber '\v<%(0|[1-9]%(_?\d)*)%([Ee]\+?\d+)?%([iu]%(8|16|32|64)?|z)?>' +syn match hareNumber '\v<0b[01]%(_?[01])*%([iu]%(8|16|32|64)?|z)?>' +syn match hareNumber '\v<0o\o%(_?\o)*%([iu]%(8|16|32|64)?|z)?>' +syn match hareNumber '\v<0x\x%(_?\x)*%([iu]%(8|16|32|64)?|z)?>' + +# Floats. +syn match hareFloat '\v<%(0|[1-9]%(_?\d)*)\.\d%(_?\d)*%([Ee][+-]?\d+)?%(f32|f64)?>' +syn match hareFloat '\v<%(0|[1-9]%(_?\d)*)%([Ee][+-]?\d+)?%(f32|f64)>' +syn match hareFloat '\v<%(0|[1-9]%(_?\d)*)[Ee]-\d+>' +syn match hareFloat '\v<0x\x%(_?\x)*%(\.\x%(_?\x)*)?[Pp][+-]?\d+%(f32|f64)?>' + +# Rune and string literals. +syn region hareRune start="'" skip="\\'" end="'" contains=hareEscape +syn region hareString start='"' skip='\\"' end='"' contains=hareEscape,hareFormat +syn region hareString start='`' end='`' contains=hareFormat + +# Escape sequences. +syn match hareEscape '\\[0abfnrtv\\'"]' contained +syn match hareEscape '\v\\%(x\x{2}|u\x{4}|U\x{8})' contained display + +# Format sequences. +syn match hareFormat '\v\{\d*%(:%(\.?\d+|[- +=Xbefgox]|F[.2ESUs]|_%(\_.|\\%([0abfnrtv\'"]|x\x{2}|u\x{4}|U\x{8})))*)?}' contained contains=hareEscape +syn match hareFormat '{\d*%\d*}' contained display +syn match hareFormat '{{\|}}' contained + +# Miscellaneous {{{2 + +# Annotations. +syn region hareAnnotation start='#\[' end=']' contains=hareAnnotationIdentifier +syn match hareAnnotationIdentifier '\v<\h\w*%(::\h\w*)*>' contained contains=@hareIdentifier nextgroup=hareAnnotationParens skipempty skipwhite transparent +syn region hareAnnotationParens matchgroup=hareAnnotationParens start='(' end=')' contained contains=TOP + +# Blocks. +syn region hareBlock matchgroup=hareBlock start='{' end='}' contains=TOP fold nextgroup=@harePostfix skipempty skipwhite + +# Comments. +syn region hareComment start='//' end='$' contains=@hareComment keepend +syn cluster hareComment contains=hareCommentCode,hareCommentRef,hareTodo,@Spell +syn region hareCommentCode start='\t\zs' end='$' contained contains=@NoSpell display +syn match hareCommentRef '\v\[\[\h\w*%(::\h\w*)*%(::)?]]' contained contains=@NoSpell display +syn keyword hareTodo FIXME TODO XXX contained + +# Delimiters. +syn match hareDelimiter '::' + +# Labels. +syn match hareUserLabel ':\h\w*\>' contains=hareName + +# Default highlighting {{{1 +hi def link hareAnnotation PreProc +hi def link hareAnnotationParens hareAnnotation +hi def link hareAttribute PreProc +hi def link hareBoolean Boolean +hi def link hareBuiltin Operator +hi def link hareComment Comment +hi def link hareCommentCode hareComment +hi def link hareCommentRef SpecialComment +hi def link hareConditional Conditional +hi def link hareConstant Constant +hi def link hareDefine Define +hi def link hareDelimiter Delimiter +hi def link hareErrorFlag hareStorageClass +hi def link hareErrorCheck Special +hi def link hareEscape SpecialChar +hi def link hareFloat Float +hi def link hareFormat SpecialChar +hi def link hareFunction Function +hi def link hareInclude Include +hi def link hareKeyword Keyword +hi def link hareLabel Label +hi def link hareNumber Number +hi def link hareOperator Operator +hi def link harePointer hareStorageClass +hi def link hareRepeat Repeat +hi def link hareRune Character +hi def link hareSliceBounds harePointer +hi def link hareStorageClass StorageClass +hi def link hareString String +hi def link hareStructure Structure +hi def link hareTodo Todo +hi def link hareType Type +hi def link hareTypedef Typedef +hi def link hareUserLabel Identifier + +# Optionally highlight symbolic operators. +if get(g:, 'hare_symbol_operators') + hi! def link hareSymbolOperator hareOperator +else + hi! def link hareSymbolOperator NONE +endif + +# Highlight incorrect whitespace by default. +syn match hareSpaceError '\s\+$' containedin=ALL display +syn match hareSpaceError ' \+\ze\t' display +if get(g:, 'hare_space_error', 1) + hi! def link hareSpaceError Error +else + hi! def link hareSpaceError NONE +endif + +b:current_syntax = 'hare' + +# vim: fdm=marker et sts=2 sw=2 ts=8 tw=80 diff --git a/.config/vim/syntax/haredoc.vim b/.config/vim/syntax/haredoc.vim new file mode 100644 index 0000000..adf15bc --- /dev/null +++ b/.config/vim/syntax/haredoc.vim @@ -0,0 +1,43 @@ +vim9script + +# Vim syntax file. +# Language: Haredoc (Hare documentation format) +# Maintainer: Amelia Clarke +# Last Change: 2025 Aug 14 +# Upstream: https://git.sr.ht/~sircmpwn/hare.vim + +if exists('b:current_syntax') + finish +endif + +# Syntax {{{1 +syn case match +syn iskeyword @,48-57,_ + +# Embedded code samples. +syn region haredocCode start='\t\zs' end='$' contains=@NoSpell display + +# References to other declarations and modules. +syn match haredocRef '\v\[\[\h\w*%(::\h\w*)*%(::)?]]' contains=@NoSpell display + +# Miscellaneous. +syn keyword haredocTodo FIXME TODO XXX + +# Default highlighting {{{1 +hi def link haredocCode Comment +hi def link haredocRef Special +hi def link haredocTodo Todo + +# Highlight incorrect whitespace by default. +syn match haredocSpaceError '\s\+$' containedin=ALL display +syn match haredocSpaceError '^ \zs \+\ze\t' containedin=ALL display +syn match haredocSpaceError '[^ ]\zs \+\ze\t' containedin=ALL display +if get(g:, 'hare_space_error', 1) + hi! def link haredocSpaceError Error +else + hi! def link haredocSpaceError NONE +endif + +b:current_syntax = 'haredoc' + +# vim: fdm=marker et sts=2 sw=2 ts=8 tw=80 diff --git a/.config/vim/syntax/haskell.vim b/.config/vim/syntax/haskell.vim new file mode 100644 index 0000000..509aa25 --- /dev/null +++ b/.config/vim/syntax/haskell.vim @@ -0,0 +1,194 @@ +" Vim syntax file +" Language: Haskell +" Maintainer: Haskell Cafe mailinglist +" Last Change: 2024 Mar 28 by Enrico Maria De Angelis +" Original Author: John Williams +" +" Thanks to Ryan Crumley for suggestions and John Meacham for +" pointing out bugs. Also thanks to Ian Lynagh and Donald Bruce Stewart +" for providing the inspiration for the inclusion of the handling +" of C preprocessor directives, and for pointing out a bug in the +" end-of-line comment handling. +" +" Options-assign a value to these variables to turn the option on: +" +" hs_highlight_delimiters - Highlight delimiter characters--users +" with a light-colored background will +" probably want to turn this on. +" hs_highlight_boolean - Treat True and False as keywords. +" hs_highlight_types - Treat names of primitive types as keywords. +" hs_highlight_more_types - Treat names of other common types as keywords. +" hs_highlight_debug - Highlight names of debugging functions. +" hs_allow_hash_operator - Don't highlight seemingly incorrect C +" preprocessor directives but assume them to be +" operators +" +" 2004 Feb 19: Added C preprocessor directive handling, corrected eol comments +" cleaned away literate haskell support (should be entirely in +" lhaskell.vim) +" 2004 Feb 20: Cleaned up C preprocessor directive handling, fixed single \ +" in eol comment character class +" 2004 Feb 23: Made the leading comments somewhat clearer where it comes +" to attribution of work. +" 2008 Dec 15: Added comments as contained element in import statements + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" (Qualified) identifiers (no default highlighting) +syn match ConId "\(\<[A-Z][a-zA-Z0-9_']*\.\)*\<[A-Z][a-zA-Z0-9_']*\>" contains=@NoSpell +syn match VarId "\(\<[A-Z][a-zA-Z0-9_']*\.\)*\<[a-z][a-zA-Z0-9_']*\>" contains=@NoSpell + +" Infix operators--most punctuation characters and any (qualified) identifier +" enclosed in `backquotes`. An operator starting with : is a constructor, +" others are variables (e.g. functions). +syn match hsVarSym "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[-!#$%&\*\+/<=>\?@\\^|~.][-!#$%&\*\+/<=>\?@\\^|~:.]*" +syn match hsConSym "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=:[-!#$%&\*\+./<=>\?@\\^|~:]*" +syn match hsVarSym "`\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[a-z][a-zA-Z0-9_']*`" +syn match hsConSym "`\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[A-Z][a-zA-Z0-9_']*`" + +" (Non-qualified) identifiers which start with # are labels +syn match hsLabel "#[a-z][a-zA-Z0-9_']*\>" + +" Reserved symbols--cannot be overloaded. +syn match hsDelimiter "(\|)\|\[\|\]\|,\|;\|{\|}" + +" Strings and constants +syn match hsSpecialChar contained "\\\([0-9]\+\|o[0-7]\+\|x[0-9a-fA-F]\+\|[\"\\'&\\abfnrtv]\|^[A-Z^_\[\\\]]\)" +syn match hsSpecialChar contained "\\\(NUL\|SOH\|STX\|ETX\|EOT\|ENQ\|ACK\|BEL\|BS\|HT\|LF\|VT\|FF\|CR\|SO\|SI\|DLE\|DC1\|DC2\|DC3\|DC4\|NAK\|SYN\|ETB\|CAN\|EM\|SUB\|ESC\|FS\|GS\|RS\|US\|SP\|DEL\)" +syn match hsSpecialCharError contained "\\&\|'''\+" +syn region hsString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=hsSpecialChar,@NoSpell +syn match hsCharacter "[^a-zA-Z0-9_']'\([^\\]\|\\[^']\+\|\\'\)'"lc=1 contains=hsSpecialChar,hsSpecialCharError +syn match hsCharacter "^'\([^\\]\|\\[^']\+\|\\'\)'" contains=hsSpecialChar,hsSpecialCharError +syn match hsNumber "\v<[0-9]%(_*[0-9])*>|<0[xX]_*[0-9a-fA-F]%(_*[0-9a-fA-F])*>|<0[oO]_*%(_*[0-7])*>|<0[bB]_*[01]%(_*[01])*>" +syn match hsFloat "\v<[0-9]%(_*[0-9])*\.[0-9]%(_*[0-9])*%(_*[eE][-+]?[0-9]%(_*[0-9])*)?>|<[0-9]%(_*[0-9])*_*[eE][-+]?[0-9]%(_*[0-9])*>|<0[xX]_*[0-9a-fA-F]%(_*[0-9a-fA-F])*\.[0-9a-fA-F]%(_*[0-9a-fA-F])*%(_*[pP][-+]?[0-9]%(_*[0-9])*)?>|<0[xX]_*[0-9a-fA-F]%(_*[0-9a-fA-F])*_*[pP][-+]?[0-9]%(_*[0-9])*>" + +" Keyword definitions. +syn keyword hsModule module +syn match hsImportGroup "\.*" contains=hsImport,hsImportModuleName,hsImportMod,hsLineComment,hsBlockComment,hsImportList,@NoSpell nextgroup=hsImport +syn keyword hsImport import contained nextgroup=hsImportModuleName +syn match hsImportModuleName '\<[A-Z][A-Za-z.]*' contained +syn region hsImportList start='(' skip='([^)]\{-})' end=')' keepend contained contains=ConId,VarId,hsDelimiter,hsBlockComment,hsTypedef,@NoSpell + +syn keyword hsImportMod contained as qualified hiding +syn keyword hsInfix infix infixl infixr +syn keyword hsStructure class data deriving instance default where +syn keyword hsTypedef type +syn keyword hsNewtypedef newtype +syn keyword hsTypeFam family +syn keyword hsStatement mdo do case of let in +syn keyword hsConditional if then else + +" Not real keywords, but close. +if exists("hs_highlight_boolean") + " Boolean constants from the standard prelude. + syn keyword hsBoolean True False +endif +if exists("hs_highlight_types") + " Primitive types from the standard prelude and libraries. + syn keyword hsType Int Integer Char Bool Float Double IO Void Addr Array String +endif +if exists("hs_highlight_more_types") + " Types from the standard prelude libraries. + syn keyword hsType Maybe Either Ratio Complex Ordering IOError IOResult ExitCode + syn keyword hsMaybe Nothing + syn keyword hsExitCode ExitSuccess + syn keyword hsOrdering GT LT EQ +endif +if exists("hs_highlight_debug") + " Debugging functions from the standard prelude. + syn keyword hsDebug undefined error trace +endif + + +" Comments +syn match hsLineComment "---*\([^-!#$%&\*\+./<=>\?@\\^|~].*\)\?$" contains=hsTodo,@Spell +syn region hsBlockComment start="{-" end="-}" contains=hsBlockComment,hsTodo,@Spell +syn region hsPragma start="{-#" end="#-}" + +syn keyword hsTodo contained FIXME TODO XXX NOTE + +" C Preprocessor directives. Shamelessly ripped from c.vim and trimmed +" First, see whether to flag directive-like lines or not +if (!exists("hs_allow_hash_operator")) + syn match cError display "^\s*\(%:\|#\).*$" +endif +" Accept %: for # (C99) +syn region cPreCondit start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=cComment,cCppString,cCommentError +syn match cPreCondit display "^\s*\(%:\|#\)\s*\(else\|endif\)\>" +syn region cCppOut start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2 +syn region cCppOut2 contained start="0" end="^\s*\(%:\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=cCppSkip +syn region cCppSkip contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cCppSkip +syn region cIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match cIncluded display contained "<[^>]*>" +syn match cInclude display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded +syn cluster cPreProcGroup contains=cPreCondit,cIncluded,cInclude,cDefine,cCppOut,cCppOut2,cCppSkip,cCommentStartError +syn region cDefine matchgroup=cPreCondit start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" +syn region cPreProc matchgroup=cPreCondit start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend + +syn region cComment matchgroup=cCommentStart start="/\*" end="\*/" contains=cCommentStartError,cSpaceError contained +syntax match cCommentError display "\*/" contained +syntax match cCommentStartError display "/\*"me=e-1 contained +syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial contained + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link hsModule hsStructure +hi def link hsImport Include +hi def link hsImportMod hsImport +hi def link hsInfix PreProc +hi def link hsStructure Structure +hi def link hsStatement Statement +hi def link hsConditional Conditional +hi def link hsSpecialChar SpecialChar +hi def link hsTypedef Typedef +hi def link hsNewtypedef Typedef +hi def link hsVarSym hsOperator +hi def link hsConSym hsOperator +hi def link hsOperator Operator +hi def link hsTypeFam Structure +if exists("hs_highlight_delimiters") +" Some people find this highlighting distracting. +hi def link hsDelimiter Delimiter +endif +hi def link hsSpecialCharError Error +hi def link hsString String +hi def link hsCharacter Character +hi def link hsNumber Number +hi def link hsFloat Float +hi def link hsConditional Conditional +hi def link hsLiterateComment hsComment +hi def link hsBlockComment hsComment +hi def link hsLineComment hsComment +hi def link hsComment Comment +hi def link hsTodo Todo +hi def link hsPragma SpecialComment +hi def link hsBoolean Boolean +hi def link hsType Type +hi def link hsMaybe hsEnumConst +hi def link hsOrdering hsEnumConst +hi def link hsEnumConst Constant +hi def link hsDebug Debug +hi def link hsLabel Special + +hi def link cCppString hsString +hi def link cCommentStart hsComment +hi def link cCommentError hsError +hi def link cCommentStartError hsError +hi def link cInclude Include +hi def link cPreProc PreProc +hi def link cDefine Macro +hi def link cIncluded hsString +hi def link cError Error +hi def link cPreCondit PreCondit +hi def link cComment Comment +hi def link cCppSkip cCppOut +hi def link cCppOut2 cCppOut +hi def link cCppOut Comment + +let b:current_syntax = "haskell" + +" Options for vi: ts=8 sw=2 sts=2 nowrap noexpandtab ft=vim diff --git a/.config/vim/syntax/haste.vim b/.config/vim/syntax/haste.vim new file mode 100644 index 0000000..79e9f5e --- /dev/null +++ b/.config/vim/syntax/haste.vim @@ -0,0 +1,142 @@ +" Vim syntax file +" Language: HASTE - a language for VLSI IC programming +" Maintainer: M. Tranchero - maurizio.tranchero?gmail.com +" Credits: some parts have been taken from vhdl, verilog, and C syntax +" files +" Version: 0.9 +" Last Change: 0.9 improvement of haste numbers detection +" Change: 0.8 error matching for wrong hierarchical connections +" Change: 0.7 added more rules to highlight pre-processor directives + +" HASTE +if exists("b:current_syntax") + finish +endif +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" case is significant +syn case match + +" HASTE keywords +syn keyword hasteStatement act alias arb array begin bitvec +syn keyword hasteStatement bitwidth boolvec broad case +syn keyword hasteStatement cast chan const dataprobe do edge +syn keyword hasteStatement else end export false ff fi file +syn keyword hasteStatement fit for forever func if import +syn keyword hasteStatement inprobe is les main narb narrow +syn keyword hasteStatement negedge od of or outprobe pas +syn keyword hasteStatement posedge probe proc ram ramreg +syn keyword hasteStatement repeat rom romreg sample sel si +syn keyword hasteStatement sign sizeof skip stop then true +syn keyword hasteStatement type until var wait wire +syn keyword hasteFutureExt Z ffe partial +syn keyword hasteVerilog buf reg while + +" Special match for "if", "or", and "else" since "else if" +" and other "else+if" combination shouldn't be highlighted. +" The right keyword is "or" +syn match hasteStatement "\<\(if\|then\|else\|fi\)\>" +syn match hasteNone "\$" +syn match hasteNone "\\s" +syn match hasteNone "\\s" +syn match hasteNone "\\s" +syn match hasteStatement "\<\(case\|is\|si\)\>" +syn match hasteStatement "\<\(repeat\|until\)\>" +syn match hasteStatement "\<\(forever\|do\|od\)\>" +syn match hasteStatement "\<\(for\|do\|od\)\>" +syn match hasteStatement "\<\(do\|or\|od\)\>" +syn match hasteStatement "\<\(sel\|les\)\>" +syn match hasteError "\<\d\+[_a-zA-Z]\+\>" +syn match hasteError "\(\([[:alnum:]]\+\s*(\s\+\|)\s*,\)\)\s*\([[:alnum:]]\+\s*(\)" + +" Predifined Haste types +syn keyword hasteType bool + +" Values for standard Haste types +" syn match hasteVector "\'[0L1HXWZU\-\?]\'" + +syn match hasteVector "0b\"[01_]\+\"" +syn match hasteVector "0x\"[0-9a-f_]\+\"" +syn match hasteCharacter "'.'" +" syn region hasteString start=+"+ end=+"+ +syn match hasteIncluded display contained "<[^>]*>" +syn match hasteIncluded display contained "<[^"]*>" +syn region hasteInclude start="^\s*#include\>\s*" end="$" contains=hasteIncluded,hasteString + +" integer numbers +syn match hasteNumber "\d\+\^[[:alnum:]]*[-+]\{0,1\}[[:alnum:]]*" +syn match hasteNumber "-\=\<\d\+\(\^[+\-]\=\d\+\)\>" +syn match hasteNumber "-\=\<\d\+\>" +" syn match hasteNumber "0*2#[01_]\+#\(\^[+\-]\=\d\+\)\=" +" syn match hasteNumber "0*16#[0-9a-f_]\+#\(\^[+\-]\=\d\+\)\=" +" operators +syn keyword hasteSeparators & , . \| +syn keyword hasteExecution \|\| ; @ +syn keyword hasteOperator := ? ! : +syn keyword hasteTypeConstr "[" << >> .. "]" ~ +syn keyword hasteExprOp < <= >= > = # <> + - * == ## +syn keyword hasteMisc ( ) 0x 0b +" +syn match hasteSeparators "[&:\|,.]" +syn match hasteOperator ":=" +syn match hasteOperator ":" +syn match hasteOperator "?" +syn match hasteOperator "!" +syn match hasteExecution "||" +syn match hasteExecution ";" +syn match hasteExecution "@" +syn match hasteType "\[\[" +syn match hasteType "\]\]" +syn match hasteType "<<" +syn match hasteType ">>" +syn match hasteExprOp "<" +syn match hasteExprOp "<=" +syn match hasteExprOp ">=" +syn match hasteExprOp ">" +syn match hasteExprOp "<>" +syn match hasteExprOp "=" +syn match hasteExprOp "==" +syn match hasteExprOp "##" +" syn match hasteExprOp "#" +syn match hasteExprOp "*" +syn match hasteExprOp "+" + +syn region hasteComment start="/\*" end="\*/" contains=@Spell +syn region hasteComment start="{" end="}" contains=@Spell +syn match hasteComment "//.*" contains=@Spell + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link hasteSpecial Special +hi def link hasteStatement Statement +hi def link hasteCharacter String +hi def link hasteString String +hi def link hasteVector String +hi def link hasteBoolean String +hi def link hasteComment Comment +hi def link hasteNumber String +hi def link hasteTime String +hi def link hasteType Type +hi def link hasteGlobal Error +hi def link hasteError Error +hi def link hasteAttribute Type +" +hi def link hasteSeparators Special +hi def link hasteExecution Special +hi def link hasteTypeConstr Special +hi def link hasteOperator Type +hi def link hasteExprOp Type +hi def link hasteMisc String +hi def link hasteFutureExt Error +hi def link hasteVerilog Error +hi def link hasteDefine Macro +hi def link hasteInclude Include +" hi def link hastePreProc Preproc +" hi def link hastePreProcVar Special + +let b:current_syntax = "haste" + +" vim: ts=8 diff --git a/.config/vim/syntax/hastepreproc.vim b/.config/vim/syntax/hastepreproc.vim new file mode 100644 index 0000000..f08bf3f --- /dev/null +++ b/.config/vim/syntax/hastepreproc.vim @@ -0,0 +1,38 @@ +" Vim syntax file +" Language: Haste preprocessor files +" Maintainer: M. Tranchero - maurizio.tranchero@gmail.com +" Credits: some parts have been taken from vhdl, verilog, and C syntax +" files +" Version: 0.5 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif +" Read the haste syntax to start with +runtime! syntax/haste.vim +unlet b:current_syntax + +" case is significant +syn case match + +" C pre-processor directives +syn match hastepreprocVar display "\$[[:alnum:]_]*" +syn region hastepreprocVar start="\${" end="}" contains=hastepreprocVar +" +"syn region hastepreproc start="#\[\s*tg[:alnum:]*" end="]#" contains=hastepreprocVar,hastepreproc,hastepreprocError,@Spell +syn region hastepreproc start="#\[\s*\(\|tgfor\|tgif\)" end="$" contains=hastepreprocVar,hastepreproc,@Spell +syn region hastepreproc start="}\s\(else\)\s{" end="$" contains=hastepreprocVar,hastepreproc,@Spell +syn region hastepreproc start="^\s*#\s*\(ifndef\|ifdef\|else\|endif\)\>" end="$" contains=@hastepreprocGroup,@Spell +syn region hastepreproc start="\s*##\s*\(define\|undef\)\>" end="$" contains=@hastepreprocGroup,@Spell +syn match hastepreproc "}\{0,1}\s*]#" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link hastepreproc Preproc +hi def link hastepreprocVar Special +hi def link hastepreprocError Error + +let b:current_syntax = "hastepreproc" + +" vim: ts=8 diff --git a/.config/vim/syntax/hb.vim b/.config/vim/syntax/hb.vim new file mode 100644 index 0000000..7bff1df --- /dev/null +++ b/.config/vim/syntax/hb.vim @@ -0,0 +1,89 @@ +" Vim syntax file +" Language: Hyper Builder +" Maintainer: Alejandro Forero Cuervo +" URL: http://bachue.com/hb/vim/syntax/hb.vim +" Last Change: 2012 Jan 08 by Thilo Six + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Read the HTML syntax to start with +"syn include @HTMLStuff :p:h/htmlhb.vim + +"this would be nice but we are supposed not to do it +"set mps=<:> + +"syn region HBhtmlString contained start=+"+ end=+"+ contains=htmlSpecialChar +"syn region HBhtmlString contained start=+'+ end=+'+ contains=htmlSpecialChar + +"syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*" + +syn match htmlSpecialChar "&[^;]*;" contained + +syn match HBhtmlTagSk contained "[A-Za-z]*" + +syn match HBhtmlTagS contained "<\s*\(hb\s*\.\s*\(sec\|min\|hour\|day\|mon\|year\|input\|html\|time\|getcookie\|streql\|url-enc\)\|wall\s*\.\s*\(show\|info\|id\|new\|rm\|count\)\|auth\s*\.\s*\(chk\|add\|find\|user\)\|math\s*\.\s*exp\)\s*\([^.A-Za-z0-9]\|$\)" contains=HBhtmlTagSk transparent + +syn match HBhtmlTagN contained "[A-Za-z0-9\/\-]\+" + +syn match HBhtmlTagB contained "<\s*[A-Za-z0-9\/\-]\+\(\s*\.\s*[A-Za-z0-9\/\-]\+\)*" contains=HBhtmlTagS,HBhtmlTagN + +syn region HBhtmlTag contained start=+<+ end=+>+ contains=HBhtmlTagB,HBDirectiveError + +syn match HBFileName ".*" contained + +syn match HBDirectiveKeyword ":\s*\(include\|lib\|set\|out\)\s\+" contained + +syn match HBDirectiveError "^:.*$" contained + +"syn match HBDirectiveBlockEnd "^:\s*$" contained + +"syn match HBDirectiveOutHead "^:\s*out\s\+\S\+.*" contained contains=HBDirectiveKeyword,HBFileName + +"syn match HBDirectiveSetHead "^:\s*set\s\+\S\+.*" contained contains=HBDirectiveKeyword,HBFileName + +syn match HBInvalidLine "^.*$" + +syn match HBDirectiveInclude "^:\s*include\s\+\S\+.*$" contains=HBFileName,HBDirectiveKeyword + +syn match HBDirectiveLib "^:\s*lib\s\+\S\+.*$" contains=HBFileName,HBDirectiveKeyword + +syn region HBText matchgroup=HBDirectiveKeyword start=/^:\(set\|out\)\s*\S\+.*$/ end=/^:\s*$/ contains=HBDirectiveError,htmlSpecialChar,HBhtmlTag keepend + +"syn match HBLine "^:.*$" contains=HBDirectiveInclude,HBDirectiveLib,HBDirectiveError,HBDirectiveSet,HBDirectiveOut + +syn match HBComment "^#.*$" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link HBhtmlString String +hi def link HBhtmlTagN Function +hi def link htmlSpecialChar String + +hi def link HBInvalidLine Error +hi def link HBFoobar Comment +hi HBFileName guibg=lightgray guifg=black +hi def link HBDirectiveError Error +hi def link HBDirectiveBlockEnd HBDirectiveKeyword +hi HBDirectiveKeyword guibg=lightgray guifg=darkgreen +hi def link HBComment Comment +hi def link HBhtmlTagSk Statement + + +syn sync match Normal grouphere NONE "^:\s*$" +syn sync match Normal grouphere NONE "^:\s*lib\s\+[^ \t]\+$" +syn sync match Normal grouphere NONE "^:\s*include\s\+[^ \t]\+$" +"syn sync match Block grouphere HBDirectiveSet "^#:\s*set\s\+[^ \t]\+" +"syn sync match Block grouphere HBDirectiveOut "^#:\s*out\s\+[^ \t]\+" + +let b:current_syntax = "hb" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8 diff --git a/.config/vim/syntax/hcl.vim b/.config/vim/syntax/hcl.vim new file mode 100644 index 0000000..fc1fc5a --- /dev/null +++ b/.config/vim/syntax/hcl.vim @@ -0,0 +1,81 @@ +" Vim syntax file +" Language: HCL +" Maintainer: Gregory Anders +" Upstream: https://github.com/hashivim/vim-terraform +" Last Change: 2024-09-03 +" License: ISC +" +" Copyright (c) 2014-2016 Mark Cornick +" +" Permission to use, copy, modify, and/or distribute this software for any purpose +" with or without fee is hereby granted, provided that the above copyright notice +" and this permission notice appear in all copies. +" +" THE SOFTWARE IS PROVIDED 'AS IS' AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +" REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +" FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +" INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +" OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +" THIS SOFTWARE. + +if exists('b:current_syntax') + finish +endif + +syn iskeyword a-z,A-Z,48-57,_,- + +syn case match + +" A block is introduced by a type, some number of labels - which are either +" strings or identifiers - and an opening curly brace. Match the type. +syn match hclBlockType /^\s*\zs\K\k*\ze\s\+\(\("\K\k*"\|\K\k*\)\s\+\)*{/ + +" An attribute name is an identifier followed by an equals sign. +syn match hclAttributeAssignment /\(\K\k*\.\)*\K\k*\s\+=\s/ contains=hclAttributeName +syn match hclAttributeName /\<\K\k*\>/ contained + +syn keyword hclValueBool true false + +syn keyword hclTodo contained TODO FIXME XXX BUG +syn region hclComment start="/\*" end="\*/" contains=hclTodo,@Spell +syn region hclComment start="#" end="$" contains=hclTodo,@Spell +syn region hclComment start="//" end="$" contains=hclTodo,@Spell + +""" misc. +syn match hclValueDec "\<[0-9]\+\([kKmMgG]b\?\)\?\>" +syn match hclValueHexaDec "\<0x[0-9a-f]\+\([kKmMgG]b\?\)\?\>" +syn match hclBraces "[\[\]]" + +""" skip \" and \\ in strings. +syn region hclValueString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=hclStringInterp +syn region hclStringInterp matchgroup=hclBraces start=/\(^\|[^$]\)\$\zs{/ end=/}/ contained contains=ALLBUT,hclAttributeName +syn region hclHereDocText start=/<<-\?\z([a-z0-9A-Z]\+\)/ end=/^\s*\z1/ contains=hclStringInterp + +"" Functions. +syn match hclFunction "[a-z0-9]\+(\@=" + +""" HCL2 +syn keyword hclRepeat for in +syn keyword hclConditional if +syn keyword hclValueNull null + +" enable block folding +syn region hclBlockBody matchgroup=hclBraces start="{" end="}" fold transparent + +hi def link hclComment Comment +hi def link hclTodo Todo +hi def link hclBraces Delimiter +hi def link hclAttributeName Identifier +hi def link hclBlockType Type +hi def link hclValueBool Boolean +hi def link hclValueDec Number +hi def link hclValueHexaDec Number +hi def link hclValueString String +hi def link hclHereDocText String +hi def link hclFunction Function +hi def link hclRepeat Repeat +hi def link hclConditional Conditional +hi def link hclValueNull Constant + +let b:current_syntax = 'hcl' diff --git a/.config/vim/syntax/help.vim b/.config/vim/syntax/help.vim new file mode 100644 index 0000000..6bae1fb --- /dev/null +++ b/.config/vim/syntax/help.vim @@ -0,0 +1,314 @@ +" Vim syntax file +" Language: Vim help file +" Maintainer: Doug Kearns +" Last Change: 2025 Oct 19 +" Former Maintainer: Bram Moolenaar + +" Quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn iskeyword @,48-57,_,192-255 + +if !exists('g:help_example_languages') + let g:help_example_languages = #{ vim: 'vim', vim9: 'vim' } +endif + +syn match helpHeadline "^[A-Z.][-A-Z0-9 .,()_']*?\=\ze\(\s\+\*\|$\)" +syn match helpSectionDelim "^===.*===$" +syn match helpSectionDelim "^---.*--$" + +if has("conceal") + syn region helpExample matchgroup=helpIgnore + \ start="\%(^\| \)>[a-z0-9]*$" end="^[^ \t]"me=e-1 end="^<" concealends + else + syn region helpExample matchgroup=helpIgnore + \ start="\%(^\| \)>[a-z0-9]*$" end="^[^ \t]"me=e-1 end="^<" +endif + +for [s:lang, s:syntax] in g:help_example_languages->items() + unlet! b:current_syntax + + if s:lang == "vim9" + let b:vimsyn_force_vim9 = v:true + endif + + " silent! to prevent E403 + execute 'silent! syn include' $'@helpExampleHighlight_{s:lang}' + \ $'syntax/{s:syntax}.vim' + + if s:lang == "vim9" + unlet b:vimsyn_force_vim9 + endif + + execute $'syn region helpExampleHighlight_{s:lang} matchgroup=helpIgnore' + \ $'start=/\%(^\| \)>{s:lang}$/' + \ 'end=/^[^ \t]/me=e-1 end=/^" + \ contains=@vimLegacyTop,vimComment,vimLineComment + syn cluster helpExampleHighlight_vim9 add=vim9LegacyHeader_HelpExample +endif + +" builtin.txt +syn region helpReturnType + \ start="^\t\tReturn type: " + \ end="^$" + \ contains=@vimType,helpHyperTextJump,helpSpecial + \ transparent +syn match helpSpecial contained "{type}" containedin=vimCompoundType + +" various.txt +syn region helpExCommand_Version + \ start="^:ve\[rsion]\t\t" + \ end="\n\ze\n:ve\[rsion] {nr}" + \ contains=helpHyperTextEntry,helpHyperTextJump,helpOption + +if has("ebcdic") + syn match helpHyperTextJump "\\\@enf{}^L:=lbghNEpti+cC/(uUwWkmMjJ)*#P]N\s"ms=s+2,me=e-1 +syn match helpSpecial "{[-a-zA-Z0-9'"*+/:%#=[\]<>.,]\+}" +syn match helpSpecial "\s\[[-a-z^A-Z0-9_]\{2,}]"ms=s+1 +syn match helpSpecial "<[-a-zA-Z0-9_]\+>" +syn match helpSpecial "" +syn match helpSpecial "<[SCM]-.>" +syn match helpNormal "<---*>" +syn match helpSpecial "\[range]" +syn match helpSpecial "\[line]" +syn match helpSpecial "\[count]" +syn match helpSpecial "\[offset]" +syn match helpSpecial "\[cmd]" +syn match helpNormal "vim9\[cmd]" +syn match helpSpecial "\[num]" +syn match helpSpecial "\[+num]" +syn match helpSpecial "\[-num]" +syn match helpSpecial "\[+cmd]" +syn match helpSpecial "\[++opt]" +syn match helpSpecial "\[++once]" +syn match helpSpecial "\[++nested]" +syn match helpSpecial "\[++t]" +syn match helpSpecial "\[arg]" +syn match helpSpecial "\[arguments]" +syn match helpSpecial "\[ident]" +syn match helpSpecial "\[addr]" +syn match helpSpecial "\[group]" +" Don't highlight [converted] and others that do not have a tag +syn match helpNormal "\[\(readonly\|fifo\|socket\|converted\|crypted\)]" + +syn match helpSpecial "CTRL-." +syn match helpSpecial "CTRL-<\a\+>" +syn match helpSpecial "CTRL-SHIFT-." +syn match helpSpecial "CTRL-Break" +syn match helpSpecial "CTRL-PageUp" +syn match helpSpecial "CTRL-PageDown" +syn match helpSpecial "CTRL-Insert" +syn match helpSpecial "CTRL-Del" +syn match helpSpecial "CTRL-{char}" +syn region helpNotVi start="{Vi[: ]" start="{not" start="{only" end="}" contains=helpLeadBlank,helpHyperTextJump +syn match helpLeadBlank "^\s\+" contained + +" Highlight group items in their own color. +syn match helpComment "\t[* ]Comment\t\+[a-z].*" +syn match helpConstant "\t[* ]Constant\t\+[a-z].*" +syn match helpString "\t[* ]String\t\+[a-z].*" +syn match helpCharacter "\t[* ]Character\t\+[a-z].*" +syn match helpNumber "\t[* ]Number\t\+[a-z].*" +syn match helpBoolean "\t[* ]Boolean\t\+[a-z].*" +syn match helpFloat "\t[* ]Float\t\+[a-z].*" +syn match helpIdentifier "\t[* ]Identifier\t\+[a-z].*" +syn match helpFunction "\t[* ]Function\t\+[a-z].*" +syn match helpStatement "\t[* ]Statement\t\+[a-z].*" +syn match helpConditional "\t[* ]Conditional\t\+[a-z].*" +syn match helpRepeat "\t[* ]Repeat\t\+[a-z].*" +syn match helpLabel "\t[* ]Label\t\+[a-z].*" +syn match helpOperator "\t[* ]Operator\t\+["a-z].*" +syn match helpKeyword "\t[* ]Keyword\t\+[a-z].*" +syn match helpException "\t[* ]Exception\t\+[a-z].*" +syn match helpPreProc "\t[* ]PreProc\t\+[a-z].*" +syn match helpInclude "\t[* ]Include\t\+[a-z].*" +syn match helpDefine "\t[* ]Define\t\+[a-z].*" +syn match helpMacro "\t[* ]Macro\t\+[a-z].*" +syn match helpPreCondit "\t[* ]PreCondit\t\+[a-z].*" +syn match helpType "\t[* ]Type\t\+[a-z].*" +syn match helpStorageClass "\t[* ]StorageClass\t\+[a-z].*" +syn match helpStructure "\t[* ]Structure\t\+[a-z].*" +syn match helpTypedef "\t[* ]Typedef\t\+[Aa-z].*" +syn match helpSpecial "\t[* ]Special\t\+[a-z].*" +syn match helpSpecialChar "\t[* ]SpecialChar\t\+[a-z].*" +syn match helpTag "\t[* ]Tag\t\+[a-z].*" +syn match helpDelimiter "\t[* ]Delimiter\t\+[a-z].*" +syn match helpSpecialComment "\t[* ]SpecialComment\t\+[a-z].*" +syn match helpDebug "\t[* ]Debug\t\+[a-z].*" +syn match helpUnderlined "\t[* ]Underlined\t\+[a-z].*" +syn match helpBold "\t[* ]Bold\t\+[a-z].*" +syn match helpItalic "\t[* ]Italic\t\+[a-z].*" +syn match helpBoldItalic "\t[* ]BoldItalic\t\+[a-z].*" +syn match helpError "\t[* ]Error\t\+[a-z].*" +syn match helpTodo "\t[* ]Todo\t\+[a-z].*" + +syn match helpURL `\v<(((https?|ftp|gopher)://|(mailto|file|news):)[^'" \t<>{}]+|(www|web|w3)[a-z0-9_-]*\.[a-z0-9._-]+\.[^'" \t<>{}]+)[a-zA-Z0-9/]` + +syn match helpDiffAdded "\t[* ]Added\t\+[a-z].*" +syn match helpDiffChanged "\t[* ]Changed\t\+[a-z].*" +syn match helpDiffRemoved "\t[* ]Removed\t\+[a-z].*" + +" Additionally load a language-specific syntax file "help_ab.vim". +let s:i = match(expand("%"), '\.\a\ax$') +if s:i > 0 + exe "runtime syntax/help_" . strpart(expand("%"), s:i + 1, 2) . ".vim" +endif +unlet s:i + +syn sync minlines=40 + + +" Define the default highlighting. +" Only used when an item doesn't have highlighting yet +hi def link helpIgnore Ignore +hi def link helpHyperTextJump Identifier +hi def link helpBar Ignore +hi def link helpBacktick Ignore +hi def link helpStar Ignore +hi def link helpHyperTextEntry String +hi def link helpHeadline Statement +hi def link helpHeader PreProc +hi def link helpSectionDelim PreProc +hi def link helpVim Identifier +hi def link helpCommand Comment +hi def link helpExample Comment +hi def link helpOption Type +hi def link helpNotVi Special +hi def link helpSpecial Special +hi def link helpNote Todo +hi def link helpWarning Todo +hi def link helpDeprecated Todo + +hi def link helpComment Comment +hi def link helpConstant Constant +hi def link helpString String +hi def link helpCharacter Character +hi def link helpNumber Number +hi def link helpBoolean Boolean +hi def link helpFloat Float +hi def link helpIdentifier Identifier +hi def link helpFunction Function +hi def link helpStatement Statement +hi def link helpConditional Conditional +hi def link helpRepeat Repeat +hi def link helpLabel Label +hi def link helpOperator Operator +hi def link helpKeyword Keyword +hi def link helpException Exception +hi def link helpPreProc PreProc +hi def link helpInclude Include +hi def link helpDefine Define +hi def link helpMacro Macro +hi def link helpPreCondit PreCondit +hi def link helpType Type +hi def link helpStorageClass StorageClass +hi def link helpStructure Structure +hi def link helpTypedef Typedef +hi def link helpSpecialChar SpecialChar +hi def link helpTag Tag +hi def link helpDelimiter Delimiter +hi def link helpSpecialComment SpecialComment +hi def link helpDebug Debug +hi def link helpUnderlined Underlined +hi def link helpBold Bold +hi def link helpItalic Italic +hi def link helpBoldItalic BoldItalic +hi def link helpError Error +hi def link helpTodo Todo +hi def link helpURL String +hi def link helpDiffAdded Added +hi def link helpDiffChanged Changed +hi def link helpDiffRemoved Removed + +if has('textprop') && expand('%:p') =~ '[/\\]doc[/\\]syntax.txt' + " highlight groups with their respective color + import 'dist/vimhelp.vim' + call vimhelp.HighlightGroups() +endif + +let b:current_syntax = "help" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/help_it.vim b/.config/vim/syntax/help_it.vim new file mode 100644 index 0000000..e76851d --- /dev/null +++ b/.config/vim/syntax/help_it.vim @@ -0,0 +1,17 @@ +" Vim syntax file +" Language: Italian Vim program help files *.itx +" Maintainer: The Vim Project +" Last Change: 2024 Oct 16 +" +" This script is sourced from syntax/help.vim. + +syn keyword helpNote nota Nota NOTA nota: Nota: NOTA: notare Notare NOTARE notare: Notare: NOTARE: +syn match helpNote "\c(nota\(:\|\>\)"ms=s+1 +syn match helpSpecial "Nma"me=e-2 +syn match helpSpecial "Nme"me=e-2 +syn match helpSpecial "Nmi"me=e-2 +syn match helpSpecial "Nmo"me=e-2 +syn match helpSpecial "\[interv.]" +syn region helpNotVi start="{non" start="{solo" start="{disponibile" end="}" contains=helpLeadBlank,helpHyperTextJump + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/help_ru.vim b/.config/vim/syntax/help_ru.vim new file mode 100644 index 0000000..d393405 --- /dev/null +++ b/.config/vim/syntax/help_ru.vim @@ -0,0 +1,67 @@ +" Vim syntax file +" Language: Russian Vim program help files *.rux +" Maintainer: Restorer, +" Last Change: 2025 Jul 07 +" + +" Проверяем язык локали и установки опции 'helplang' +" Если не русский, то выходим из скрипта. +if (v:lang !~? 'ru' || v:lang !~? 'russian') && &helplang !~? 'ru' + finish +endif + +" Определение синтаксиса русских гиперссылок +syntax match helpHyperTextJump "\\\@" +" Определение синтаксиса наименования справочника +syntax match helpVim "\<СПРАВОЧНИК ПО РЕДАКТОРУ VIM\>" +" Определение синтаксиса наименования руководства пользователя +syntax match helpVim "\<РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ ПО РЕДАКТОРУ VIM\>" +" Определение синтаксиса автора справочника, руководства пользователя +syntax match helpAutor "^\s\+\<автор\%[ы:] .*$" +" Определение синтаксиса примечаний в тексте, начала примеров и т. п. +syntax keyword helpNote Примечание\. Совет\. Пример\. Прмимер, Примеры: +syntax keyword helpWarning Внимание! +syntax keyword helpDeprecated Недействующий Недействующая Недействующее +syntax keyword helpDeprecated недейстующиий недействующая недействующее +syntax keyword helpDeprecated Устаревший Устаревшая Устаревшее +syntax keyword helpDeprecated устаревший устаревшая устаревшее +" Определение синтаксиса Ex-команд в документации Vim (старый стиль) +syntax match helpCommand ~\":\w\+\%[!]\"~hs=s+1,he=e-1 +" Определение синтаксиса специальных обозначений +syntax match helpSpecial "{[-а-яёА-ЯЁ0-9'":%#=[\]<>.,]\+}" +syntax match helpSpecial "{[-а-яёА-ЯЁ0-9'"*+/:%#=[\]<>.,_]\+}" +syntax match helpSpecial "\s\[[-а-яё^А-ЯЁ0-9_]\{2,}]"ms=s+1 +syntax match helpSpecial "<[-а-яёА-ЯЁ0-9_]\+>" +syntax match helpSpecial "\[диапазон]" +syntax match helpSpecial "\[счётчик]" +syntax match helpSpecial "\[число]" +syntax match helpSpecial "\[+число]" +syntax match helpSpecial "\[-число]" +syntax match helpSpecial "\[кол-во]" +syntax match helpSpecial "\[строка]" +syntax match helpSpecial "\[смещение]" +syntax match helpSpecial "\[параметр]" +syntax match helpSpecial "\[параметры]" +syntax match helpSpecial "CTRL-{символ}" +syntax region helpNotVi start="{Доступно только" start="{В редкторе Vim" start="{В редакторе Vi" end="}" contains=helpLeadBlank,helpHyperTextJump +" Определение синтаксиса примечаний переводчика +syntax region helpTrnsNote start="\[Примеч\. перев\. — " end="\]\." contains=helpComment +" Группа подсветки синтаксиса Ex-команд внутри строки документации Vim +hi def link helpCommand VimCommand +" Группа подсветки синтаксиса примеров в документации Vim +hi def link helpExample SpecialComment +"hi def link helpExample PreCondit +" Группа подсветки синтаксиса примечаний переводчика +hi def link helpTrnsNote Comment +" Группа подсветки синтаксиса автора справочника, руководства пользователя +hi def link helpAutor HelpVim +" +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/hercules.vim b/.config/vim/syntax/hercules.vim new file mode 100644 index 0000000..d305707 --- /dev/null +++ b/.config/vim/syntax/hercules.vim @@ -0,0 +1,119 @@ +" Vim syntax file +" Language: Hercules +" Maintainer: Dana Edwards +" Extensions: *.vc,*.ev,*.rs +" Last change: Nov. 9, 2001 +" Comment: Hercules physical IC design verification software ensures +" that an IC's physical design matches its logical design and +" satisfies manufacturing rules. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Ignore case +syn case ignore + +" Hercules runset sections +syn keyword herculesType header assign_property alias assign +syn keyword herculesType options preprocess_options +syn keyword herculesType explode_options technology_options +syn keyword herculesType drc_options database_options +syn keyword herculesType text_options lpe_options evaccess_options +syn keyword herculesType check_point compare_group environment +syn keyword herculesType grid_check include layer_stats load_group +syn keyword herculesType restart run_only self_intersect set snap +syn keyword herculesType system variable waiver + +" Hercules commands +syn keyword herculesStatement attach_property boolean cell_extent +syn keyword herculesStatement common_hierarchy connection_points +syn keyword herculesStatement copy data_filter alternate delete +syn keyword herculesStatement explode explode_all fill_pattern find_net +syn keyword herculesStatement flatten +syn keyword herculesStatement level negate polygon_features push +syn keyword herculesStatement rectangles relocate remove_overlap reverse select +syn keyword herculesStatement select_cell select_contains select_edge select_net size +syn keyword herculesStatement text_polygon text_property vertex area cut +syn keyword herculesStatement density enclose external inside_edge +syn keyword herculesStatement internal notch vectorize center_to_center +syn keyword herculesStatement length mask_align moscheck rescheck +syn keyword herculesStatement analysis buildsub init_lpe_db capacitor +syn keyword herculesStatement device gendev nmos pmos diode npn pnp +syn keyword herculesStatement resistor set_param save_property +syn keyword herculesStatement connect disconnect text text_boolean +syn keyword herculesStatement replace_text create_ports label graphics +syn keyword herculesStatement save_netlist_database lpe_stats netlist +syn keyword herculesStatement spice graphics_property graphics_netlist +syn keyword herculesStatement write_milkyway multi_rule_enclose +syn keyword herculesStatement if error_property equate compare +syn keyword herculesStatement antenna_fix c_thru dev_connect_check +syn keyword herculesStatement dev_net_count device_count net_filter +syn keyword herculesStatement net_path_check ratio process_text_opens + +" Hercules keywords +syn keyword herculesStatement black_box_file block compare_dir equivalence +syn keyword herculesStatement format gdsin_dir group_dir group_dir_usage +syn keyword herculesStatement inlib layout_path outlib output_format +syn keyword herculesStatement output_layout_path schematic schematic_format +syn keyword herculesStatement scheme_file output_block else +syn keyword herculesStatement and or not xor andoverlap inside outside by to +syn keyword herculesStatement with connected connected_all texted_with texted +syn keyword herculesStatement by_property cutting edge_touch enclosing inside +syn keyword herculesStatement inside_hole interact touching vertex + +" Hercules comments +syn region herculesComment start="/\*" skip="/\*" end="\*/" contains=herculesTodo +syn match herculesComment "//.*" contains=herculesTodo + +" Preprocessor directives +syn match herculesPreProc "^#.*" +syn match herculesPreProc "^@.*" +syn match herculesPreProc "macros" + +" Hercules COMMENT option +syn match herculesCmdCmnt "comment.*=.*" + +" Spacings, Resolutions, Ranges, Ratios, etc. +syn match herculesNumber "-\=\<[0-9]\+L\=\>\|0[xX][0-9]\+\>" + +" Parenthesis sanity checker +syn region herculesZone matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" transparent contains=ALLBUT,herculesError,herculesBraceError,herculesCurlyError +syn region herculesZone matchgroup=Delimiter start="{" matchgroup=Delimiter end="}" transparent contains=ALLBUT,herculesError,herculesBraceError,herculesParenError +syn region herculesZone matchgroup=Delimiter start="\[" matchgroup=Delimiter end="]" transparent contains=ALLBUT,herculesError,herculesCurlyError,herculesParenError +syn match herculesError "[)\]}]" +syn match herculesBraceError "[)}]" contained +syn match herculesCurlyError "[)\]]" contained +syn match herculesParenError "[\]}]" contained + +" Hercules output format +"syn match herculesOutput "([0-9].*)" +"syn match herculesOutput "([0-9].*\;.*)" +syn match herculesOutput "perm\s*=.*(.*)" +syn match herculesOutput "temp\s*=\s*" +syn match herculesOutput "error\s*=\s*(.*)" + +"Modify the following as needed. The trade-off is performance versus functionality. +syn sync lines=100 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link herculesStatement Statement +hi def link herculesType Type +hi def link herculesComment Comment +hi def link herculesPreProc PreProc +hi def link herculesTodo Todo +hi def link herculesOutput Include +hi def link herculesCmdCmnt Identifier +hi def link herculesNumber Number +hi def link herculesBraceError herculesError +hi def link herculesCurlyError herculesError +hi def link herculesParenError herculesError +hi def link herculesError Error + + +let b:current_syntax = "hercules" + +" vim: ts=8 diff --git a/.config/vim/syntax/hex.vim b/.config/vim/syntax/hex.vim new file mode 100644 index 0000000..35edf08 --- /dev/null +++ b/.config/vim/syntax/hex.vim @@ -0,0 +1,89 @@ +" Vim syntax file +" Language: Intel HEX +" Maintainer: Markus Heidelberg +" Previous version: Sams Ricahrd +" Last Change: 2015 Feb 24 + +" Each record (line) is built as follows: +" +" field digits states +" +" +----------+ +" | start | 1 (':') hexRecStart +" +----------+ +" | count | 2 hexDataByteCount +" +----------+ +" | address | 4 hexNoAddress, hexDataAddress, (hexAddressFieldUnknown) +" +----------+ +" | type | 2 hexRecType, (hexRecTypeUnknown) +" +----------+ +" | data | 0..510 hexDataOdd, hexDataEven, hexExtendedAddress, hexStartAddress, (hexDataFieldUnknown, hexDataUnexpected) +" +----------+ +" | checksum | 2 hexChecksum +" +----------+ +" +" States in parentheses in the upper format description indicate that they +" should not appear in a valid file. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn match hexRecStart "^:" + +syn match hexDataByteCount "^:[0-9a-fA-F]\{2}" contains=hexRecStart nextgroup=hexAddress + +syn match hexAddress "[0-9a-fA-F]\{4}" transparent contained nextgroup=hexRecTypeUnknown,hexRecType +" The address field groups include the record type field in the last 2 +" characters, the proper match for highlighting follows below. +syn match hexAddressFieldUnknown "^:[0-9a-fA-F]\{8}" contains=hexDataByteCount nextgroup=hexDataFieldUnknown,hexChecksum +syn match hexDataAddress "^:[0-9a-fA-F]\{6}00" contains=hexDataByteCount nextgroup=hexDataOdd,hexChecksum +syn match hexNoAddress "^:[0-9a-fA-F]\{6}01" contains=hexDataByteCount nextgroup=hexDataUnexpected,hexChecksum +syn match hexNoAddress "^:[0-9a-fA-F]\{6}0[24]" contains=hexDataByteCount nextgroup=hexExtendedAddress +syn match hexNoAddress "^:[0-9a-fA-F]\{6}0[35]" contains=hexDataByteCount nextgroup=hexStartAddress + +syn match hexRecTypeUnknown "[0-9a-fA-F]\{2}" contained +syn match hexRecType "0[0-5]" contained + +syn match hexDataFieldUnknown "[0-9a-fA-F]\{2}" contained nextgroup=hexDataFieldUnknown,hexChecksum +" alternating highlight per byte for easier reading +syn match hexDataOdd "[0-9a-fA-F]\{2}" contained nextgroup=hexDataEven,hexChecksum +syn match hexDataEven "[0-9a-fA-F]\{2}" contained nextgroup=hexDataOdd,hexChecksum +" data bytes which should not exist +syn match hexDataUnexpected "[0-9a-fA-F]\{2}" contained nextgroup=hexDataUnexpected,hexChecksum +" Data digit pair regex usage also results in only highlighting the checksum +" if the number of data characters is even. + +" special data fields +syn match hexExtendedAddress "[0-9a-fA-F]\{4}" contained nextgroup=hexDataUnexpected,hexChecksum +syn match hexStartAddress "[0-9a-fA-F]\{8}" contained nextgroup=hexDataUnexpected,hexChecksum + +syn match hexChecksum "[0-9a-fA-F]\{2}$" contained + +" Folding Data Records below an Extended Segment/Linear Address Record +syn region hexExtAdrBlock start="^:[0-9a-fA-F]\{7}[24]" skip="^:[0-9a-fA-F]\{7}0" end="^:"me=s-1 fold transparent + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default methods for highlighting. Can be overridden later +hi def link hexRecStart hexRecType +hi def link hexDataByteCount Constant +hi def hexAddressFieldUnknown term=italic cterm=italic gui=italic +hi def link hexDataAddress Comment +hi def link hexNoAddress DiffAdd +hi def link hexRecTypeUnknown hexRecType +hi def link hexRecType WarningMsg +hi def hexDataFieldUnknown term=italic cterm=italic gui=italic +hi def hexDataOdd term=bold cterm=bold gui=bold +hi def hexDataEven term=NONE cterm=NONE gui=NONE +hi def link hexDataUnexpected Error +hi def link hexExtendedAddress hexDataAddress +hi def link hexStartAddress hexDataAddress +hi def link hexChecksum DiffChange + + +let b:current_syntax = "hex" + +" vim: ts=8 diff --git a/.config/vim/syntax/hgcommit.vim b/.config/vim/syntax/hgcommit.vim new file mode 100644 index 0000000..e9f31be --- /dev/null +++ b/.config/vim/syntax/hgcommit.vim @@ -0,0 +1,30 @@ +" Vim syntax file +" Language: hg/sl (Mercurial / Sapling) commit file +" Maintainer: Ken Takata +" Max Coplan +" Last Change: 2022-12-08 +" License: VIM License +" URL: https://github.com/k-takata/hg-vim + +if exists("b:current_syntax") + finish +endif + +syn match hgcommitComment "^\%(SL\|HG\): .*$" contains=@NoSpell +syn match hgcommitUser "^\%(SL\|HG\): user: \zs.*$" contains=@NoSpell contained containedin=hgcommitComment +syn match hgcommitBranch "^\%(SL\|HG\): branch \zs.*$" contains=@NoSpell contained containedin=hgcommitComment +syn match hgcommitAdded "^\%(SL\|HG\): \zsadded .*$" contains=@NoSpell contained containedin=hgcommitComment +syn match hgcommitChanged "^\%(SL\|HG\): \zschanged .*$" contains=@NoSpell contained containedin=hgcommitComment +syn match hgcommitRemoved "^\%(SL\|HG\): \zsremoved .*$" contains=@NoSpell contained containedin=hgcommitComment + +syn region hgcommitDiff start=/\%(^\(SL\|HG\): diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|@@\@!\|[^[:alnum:]\ +-]\S\@!\)\@=/ fold contains=@hgcommitDiff +syn include @hgcommitDiff syntax/shared/hgcommitDiff.vim + +hi def link hgcommitComment Comment +hi def link hgcommitUser String +hi def link hgcommitBranch String +hi def link hgcommitAdded Identifier +hi def link hgcommitChanged Special +hi def link hgcommitRemoved Constant + +let b:current_syntax = "hgcommit" diff --git a/.config/vim/syntax/hitest.vim b/.config/vim/syntax/hitest.vim new file mode 100644 index 0000000..27b8eab --- /dev/null +++ b/.config/vim/syntax/hitest.vim @@ -0,0 +1,10 @@ +" Vim syntax file +" Language: none; used to see highlighting +" Maintainer: github user lacygoill +" Last Change: 2023 Mar 08 + +" To see your current highlight settings, do +" :so $VIMRUNTIME/syntax/hitest.vim + +import 'dist/vimhighlight.vim' +call vimhighlight.HighlightTest() diff --git a/.config/vim/syntax/hlsplaylist.vim b/.config/vim/syntax/hlsplaylist.vim new file mode 100644 index 0000000..245eee2 --- /dev/null +++ b/.config/vim/syntax/hlsplaylist.vim @@ -0,0 +1,120 @@ +" Vim syntax file +" Language: HLS Playlist +" Maintainer: Benoît Ryder +" Latest Revision: 2022-09-23 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Comment line +syn match hlsplaylistComment "^#\(EXT\)\@!.*$" +" Segment URL +syn match hlsplaylistUrl "^[^#].*$" + +" Unknown tags, assume an attribute list or nothing +syn match hlsplaylistTagUnknown "^#EXT[^:]*$" +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagUnknown start="^#EXT[^:]*\ze:" end="$" keepend contains=hlsplaylistAttributeList + +" Basic Tags +syn match hlsplaylistTagHeader "^#EXTM3U$" +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-VERSION\ze:" end="$" keepend contains=hlsplaylistValueInt + +" Media or Multivariant Playlist Tags +syn match hlsplaylistTagHeader "^#EXT-X-INDEPENDENT-SEGMENTS$" +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagDelimiter start="^#EXT-X-START\ze:" end="$" keepend contains=hlsplaylistAttributeList +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-DEFINE\ze:" end="$" keepend contains=hlsplaylistAttributeList + +" Media Playlist Tags +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-TARGETDURATION\ze:" end="$" keepend contains=hlsplaylistValueFloat +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-MEDIA-SEQUENCE\ze:" end="$" keepend contains=hlsplaylistValueInt +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-DISCONTINUITY-SEQUENCE\ze:" end="$" keepend contains=hlsplaylistValueInt +syn match hlsplaylistTagDelimiter "^#EXT-X-ENDLIST$" +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-PLAYLIST-TYPE\ze:" end="$" keepend contains=hlsplaylistAttributeEnum +syn match hlsplaylistTagStandard "^#EXT-X-I-FRAME-ONLY$" +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-PART-INF\ze:" end="$" keepend contains=hlsplaylistAttributeList +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-SERVER-CONTROL\ze:" end="$" keepend contains=hlsplaylistAttributeList + +" Media Segment Tags +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXTINF\ze:" end="$" keepend contains=hlsplaylistValueFloat,hlsplaylistExtInfDesc +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-BYTERANGE\ze:" end="$" keepend contains=hlsplaylistValueInt +syn match hlsplaylistTagDelimiter "^#EXT-X-DISCONTINUITY$" +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-KEY\ze:" end="$" keepend contains=hlsplaylistAttributeList +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-MAP\ze:" end="$" keepend contains=hlsplaylistAttributeList +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-PROGRAM-DATE-TIME\ze:" end="$" keepend contains=hlsplaylistValueDateTime +syn match hlsplaylistTagDelimiter "^#EXT-X-GAP$" +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-BITRATE\ze:" end="$" keepend contains=hlsplaylistValueFloat +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-PART\ze:" end="$" keepend contains=hlsplaylistAttributeList + +" Media Metadata Tags +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-DATERANGE\ze:" end="$" keepend contains=hlsplaylistAttributeList +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-SKIP\ze:" end="$" keepend contains=hlsplaylistAttributeList +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-PRELOAD-HINT\ze:" end="$" keepend contains=hlsplaylistAttributeList +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-RENDITION-REPORT\ze:" end="$" keepend contains=hlsplaylistAttributeList + +" Multivariant Playlist Tags +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-MEDIA\ze:" end="$" keepend contains=hlsplaylistAttributeList +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-STREAM-INF\ze:" end="$" keepend contains=hlsplaylistAttributeList +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-I-FRAME-STREAM-INF\ze:" end="$" keepend contains=hlsplaylistAttributeList +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-SESSION-DATA\ze:" end="$" keepend contains=hlsplaylistAttributeList +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-SESSION-KEY\ze:" end="$" keepend contains=hlsplaylistAttributeList +syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-CONTENT-STEERING\ze:" end="$" keepend contains=hlsplaylistAttributeList + +" Attributes +syn region hlsplaylistAttributeList start=":" end="$" keepend contained + \ contains=hlsplaylistAttributeName,hlsplaylistAttributeInt,hlsplaylistAttributeHex,hlsplaylistAttributeFloat,hlsplaylistAttributeString,hlsplaylistAttributeEnum,hlsplaylistAttributeResolution,hlsplaylistAttributeUri +" Common attributes +syn match hlsplaylistAttributeName "[A-Za-z-]\+\ze=" contained +syn match hlsplaylistAttributeEnum "=\zs[A-Za-z][A-Za-z0-9-_]*" contained +syn match hlsplaylistAttributeString +=\zs"[^"]*"+ contained +syn match hlsplaylistAttributeInt "=\zs\d\+" contained +syn match hlsplaylistAttributeFloat "=\zs-\?\d*\.\d*" contained +syn match hlsplaylistAttributeHex "=\zs0[xX]\d*" contained +syn match hlsplaylistAttributeResolution "=\zs\d\+x\d\+" contained +" Allow different highligting for URI attributes +syn region hlsplaylistAttributeUri matchgroup=hlsplaylistAttributeName start="\zsURI\ze" end="\(,\|$\)" contained contains=hlsplaylistUriQuotes +syn region hlsplaylistUriQuotes matchgroup=hlsplaylistAttributeString start=+"+ end=+"+ keepend contained contains=hlsplaylistUriValue +syn match hlsplaylistUriValue /[^" ]\+/ contained +" Individual values +syn match hlsplaylistValueInt "[0-9]\+" contained +syn match hlsplaylistValueFloat "\(\d\+\|\d*\.\d*\)" contained +syn match hlsplaylistExtInfDesc ",\zs.*$" contained +syn match hlsplaylistValueDateTime "\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\(\.\d*\)\?\(Z\|\d\d:\?\d\d\)$" contained + + +" Define default highlighting + +hi def link hlsplaylistComment Comment +hi def link hlsplaylistUrl NONE + +hi def link hlsplaylistTagHeader Special +hi def link hlsplaylistTagStandard Define +hi def link hlsplaylistTagDelimiter Delimiter +hi def link hlsplaylistTagStatement Statement +hi def link hlsplaylistTagUnknown Special + +hi def link hlsplaylistUriQuotes String +hi def link hlsplaylistUriValue Underlined +hi def link hlsplaylistAttributeQuotes String +hi def link hlsplaylistAttributeName Identifier +hi def link hlsplaylistAttributeInt Number +hi def link hlsplaylistAttributeHex Number +hi def link hlsplaylistAttributeFloat Float +hi def link hlsplaylistAttributeString String +hi def link hlsplaylistAttributeEnum Constant +hi def link hlsplaylistAttributeResolution Constant +hi def link hlsplaylistValueInt Number +hi def link hlsplaylistValueFloat Float +hi def link hlsplaylistExtInfDesc String +hi def link hlsplaylistValueDateTime Constant + + +let b:current_syntax = "hlsplaylist" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: sts=2 sw=2 et diff --git a/.config/vim/syntax/hog.vim b/.config/vim/syntax/hog.vim new file mode 100644 index 0000000..24aa203 --- /dev/null +++ b/.config/vim/syntax/hog.vim @@ -0,0 +1,208 @@ +" Vim syntax file +" Language: hog (Snort.conf + .rules) +" Maintainer: Victor Roemer, . +" Last Change: 2019 Sep 22 +" 2012 Oct 24 -> Originalish release +" 2019 Sep 22 -> included PR 3069 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +setlocal iskeyword-=: +setlocal iskeyword+=- +syn case ignore + +" Hog ruletype crap +syn keyword HogRuleType ruletype nextgroup=HogRuleTypeName skipwhite +syn match HogRuleTypeName "[[:alnum:]_]\+" contained nextgroup=HogRuleTypeBody skipwhite +syn region HogRuleTypeBody start="{" end="}" contained contains=HogRuleTypeType,HogOutput fold +syn keyword HogRuleTypeType type contained + +" Hog Configurables +syn keyword HogPreproc preprocessor nextgroup=HogConfigName skipwhite +syn keyword HogConfig config nextgroup=HogConfigName skipwhite +syn keyword HogOutput output nextgroup=HogConfigName skipwhite +syn match HogConfigName "[[:alnum:]_-]\+" contained nextgroup=HogConfigOpts skipwhite +syn region HogConfigOpts start=":" skip="\\.\{-}$\|^\s*#.\{-}$\|^\s*$" end="$" fold keepend contained contains=HogSpecial,HogNumber,HogIPAddr,HogVar,HogComment + +" Event filter's and threshold's +syn region HogEvFilter start="event_filter\|threshold" skip="\\.\{-}$\|^\s*#.\{-}$\|^\s*$" end="$" fold transparent keepend contains=HogEvFilterKeyword,HogEvFilterOptions,HogComment +syn keyword HogEvFilterKeyword skipwhite event_filter threshold +syn keyword HogEvFilterOptions skipwhite type nextgroup=HogEvFilterTypes +syn keyword HogEvFilterTypes skipwhite limit threshold both contained +syn keyword HogEvFilterOptions skipwhite track nextgroup=HogEvFilterTrack +syn keyword HogEvFilterTrack skipwhite by_src by_dst contained +syn keyword HogEvFilterOptions skipwhite gen_id sig_id count seconds nextgroup=HogNumber + +" Suppressions +syn region HogEvFilter start="suppress" skip="\\.\{-}$\|^\s*#.\{-}$\|^\s*$" end="$" fold transparent keepend contains=HogSuppressKeyword,HogComment +syn keyword HogSuppressKeyword skipwhite suppress +syn keyword HogSuppressOptions skipwhite gen_id sig_id nextgroup=HogNumber +syn keyword HogSuppressOptions skipwhite track nextgroup=HogEvFilterTrack +syn keyword HogSuppressOptions skipwhite ip nextgroup=HogIPAddr + +" Attribute table +syn keyword HogAttribute attribute_table nextgroup=HogAttributeFile +syn match HogAttributeFile contained ".*$" contains=HogVar,HogAttributeType,HogComment +syn keyword HogAttributeType filename + +" Hog includes +syn keyword HogInclude include nextgroup=HogIncludeFile skipwhite +syn match HogIncludeFile ".*$" contained contains=HogVar,HogComment + +" Hog dynamic libraries +syn keyword HogDylib dynamicpreprocessor dynamicengine dynamicdetection nextgroup=HogDylibFile skipwhite +syn match HogDylibFile "\s.*$" contained contains=HogVar,HogDylibType,HogComment +syn keyword HogDylibType directory file contained + +" Variable dereferenced with '$' +syn match HogVar "\$[[:alnum:]_]\+" + +", Variables declared with 'var' +syn keyword HogVarType var nextgroup=HogVarSet skipwhite +syn match HogVarSet "[[:alnum:]_]\+" display contained nextgroup=HogVarValue skipwhite +syn match HogVarValue ".*$" contained contains=HogString,HogNumber,HogVar,HogComment + +" Variables declared with 'ipvar' +syn keyword HogIPVarType ipvar nextgroup=HogIPVarSet skipwhite +syn match HogIPVarSet "[[:alnum:]_]\+" display contained nextgroup=HogIPVarList,HogSpecial skipwhite +syn region HogIPVarList start="\[" end="]" contains=HogIPVarList,HogIPAddr,HogVar,HogOpNot + +" Variables declared with 'portvar' +syn keyword HogPortVarType portvar nextgroup=HogPortVarSet skipwhite +syn match HogPortVarSet "[[:alnum:]_]\+" display contained nextgroup=HogPortVarList,HogPort,HogOpRange,HogOpNot,HogSpecial skipwhite +syn region HogPortVarList start="\[" end="]" contains=HogPortVarList,HogVar,HogOpNot,HogPort,HogOpRange,HogOpNot +syn match HogPort "\<\%(\d\+\|any\)\>" display contains=HogOpRange nextgroup=HogOpRange + +" Generic stuff +syn match HogIPAddr contained "\<\%(\d\{1,3}\(\.\d\{1,3}\)\{3}\|any\)\>" nextgroup=HogIPCidr +syn match HogIPAddr contained "\<\d\{1,3}\(\.\d\{1,3}\)\{3}\>" nextgroup=HogIPCidr +syn match HogIPCidr contained "\/\([0-2][0-9]\=\|3[0-2]\=\)" +syn region HogHexEsc contained start='|' end='|' oneline +syn region HogString contained start='"' end='"' extend oneline contains=HogHexEsc +syn match HogNumber contained display "\<\d\+\>" +syn match HogNumber contained display "\<\d\+\>" +syn match HogNumber contained display "0x\x\+\>" +syn keyword HogSpecial contained true false yes no default all any +syn keyword HogSpecialAny contained any +syn match HogOpNot "!" contained +syn match HogOpRange ":" contained + +" Rules +syn keyword HogRuleAction activate alert drop block dynamic log pass reject sdrop sblock skipwhite nextgroup=HogRuleProto,HogRuleBlock +syn keyword HogRuleProto ip tcp tcp-pkt tcp-stream udp icmp http ftp tls smb dns dcerpc ssh smtp imap msn modbus dnp3 enip nfs ikev2 ntp skipwhite contained nextgroup=HogRuleSrcIP +syn match HogRuleSrcIP "\S\+" transparent skipwhite contained contains=HogIPVarList,HogIPAddr,HogVar,HogOpNot nextgroup=HogRuleSrcPort +syn match HogRuleSrcPort "\S\+" transparent skipwhite contained contains=HogPortVarList,HogVar,HogPort,HogOpRange,HogOpNot nextgroup=HogRuleDir +syn match HogRuleDir "->\|<>" skipwhite contained nextgroup=HogRuleDstIP +syn match HogRuleDstIP "\S\+" transparent skipwhite contained contains=HogIPVarList,HogIPAddr,HogVar,HogOpNot nextgroup=HogRuleDstPort +syn match HogRuleDstPort "\S\+" transparent skipwhite contained contains=HogPortVarList,HogVar,HogPort,HogOpRange,HogOpNot nextgroup=HogRuleBlock +syn region HogRuleBlock start="(" end=")" transparent skipwhite contained contains=HogRuleOption,HogComment fold +",HogString,HogComment,HogVar,HogOptNot +"syn region HogRuleOption start="\" end="\ze;" skipwhite contained contains=HogNumber +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP msg gid sid rev classtype priority metadata target content nocase rawbytes +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP depth startswith offset distance within http_client_body http_cookie http_raw_cookie http_header +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP http_raw_header http_request_line http_method http_uri http_raw_uri http_protocol http_response_line http_stat_code http_stat_msg +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP http_user_agent http_accept http_accept_enc http_accept_lang http_connection http_content_type http_content_len +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP http_referer http_start http_header_names http_server_body http_host http_raw_host +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP filename fileext filemagic filestore filemd5 filesha1 filesha256 filesize +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP dns_query tls_cert_subject tls_cert_issuer tls_cert_serial tls_cert_fingerprint +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP tls_sni tls_cert_notbefore tls_cert_notafter tls_cert_expired tls_cert_valid +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP tls.version tls.subject tls.issuerdn tls.fingerprint tls.store ja3_hash ja3_string +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP modbus dnp3_func dnp3_ind dnp3_obj dnp3_data enip_command cip_service +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP app-layer-protocol app-layer-event xbits iprep lua luajit +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP fast_pattern prefilter uricontent urilen isdataat pcre pkt_data file_data base64_decode base64_data +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP byte_test byte_jump byte_extract ftpdata_command ftpbounce asn1 cvs dce_iface dce_opnum dce_stub_data +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP sip_method sip_stat_code sip_header sip_body gtp_type gtp_info gtp_version ssl_version +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP ssl_state fragoffset ttl tos id ipopts geoip fragbits dsize flags flow flowbits flowint seq ack window +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP itype icode icmp_id icmp_seq rpc ip_proto sameip stream_reassemble stream_size +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP logto session resp react tag activates activated_by count replace detection_filter +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP threshold reference sd_pattern file_type file_group + +syn region HogRuleSROP start=':' end=";" transparent keepend contained contains=HogRuleChars,HogString,HogNumber +syn match HogRuleChars "\%(\k\|\.\|?\|=\|/\|%\|&\)\+" contained +syn match HogURLChars "\%(\.\|?\|=\)\+" contained + +" Hog File Type Rules +syn match HogFileType /^\s*file.*$/ transparent contains=HogFileTypeOpt,HogFileFROP +syn keyword HogFileTypeOpt skipwhite contained nextgroup=HogRuleFROP file type ver category id rev content offset msg group +syn region HogFileFROP start=':' end=";" transparent keepend contained contains=NotASemicoln +syn match NotASemiColn ".*$" contained + + +" Comments +syn keyword HogTodo XXX TODO NOTE contained +syn match HogTodo "Step\s\+#\=\d\+" contained +syn region HogComment start="#" end="$" contains=HogTodo,@Spell + +syn case match + +if !exists("hog_minlines") + let hog_minlines = 100 +endif +exec "syn sync minlines=" . hog_minlines + +hi link HogRuleType Statement +hi link HogRuleTypeName Type +hi link HogRuleTypeType Keyword + +hi link HogPreproc Statement +hi link HogConfig Statement +hi link HogOutput Statement +hi link HogConfigName Type + +"hi link HogEvFilter +hi link HogEvFilterKeyword Statement +hi link HogSuppressKeyword Statement +hi link HogEvFilterTypes Constant +hi link HogEvFilterTrack Constant + +hi link HogAttribute Statement +hi link HogAttributeFile String +hi link HogAttributeType Statement + +hi link HogInclude Statement +hi link HogIncludeFile String + +hi link HogDylib Statement +hi link HogDylibType Statement +hi link HogDylibFile String + +" Variables +" var +hi link HogVar Identifier +hi link HogVarType Keyword +hi link HogVarSet Identifier +hi link HogVarValue String +" ipvar +hi link HogIPVarType Keyword +hi link HogIPVarSet Identifier +" portvar +hi link HogPortVarType Keyword +hi link HogPortVarSet Identifier +hi link HogPort Constant + +hi link HogTodo Todo +hi link HogComment Comment +hi link HogString String +hi link HogHexEsc PreProc +hi link HogNumber Number +hi link HogSpecial Constant +hi link HogSpecialAny Constant +hi link HogIPAddr Constant +hi link HogIPCidr Constant +hi link HogOpNot Operator +hi link HogOpRange Operator + +hi link HogRuleAction Statement +hi link HogRuleProto Identifier +hi link HogRuleDir Operator +hi link HogRuleOption Keyword +hi link HogRuleChars String + +hi link HogFileType HogRuleAction +hi link HogFileTypeOpt HogRuleOption +hi link NotASemiColn HogRuleChars + +let b:current_syntax = "hog" diff --git a/.config/vim/syntax/hollywood.vim b/.config/vim/syntax/hollywood.vim new file mode 100644 index 0000000..16df9fa --- /dev/null +++ b/.config/vim/syntax/hollywood.vim @@ -0,0 +1,186 @@ +" Vim syntax file +" Language: Hollywood 10.0 +" Maintainer: Ola Söder +" First Author: Tom Crecelius +" Last Change: 2024 Jun 20 +" Highlighting Issues: +" Depending on your colour schema, Strings or Comments might be highlighted in +" a way, you don't like. If so, try one of the following settings after +" opening a hollywood script: +" +" :hi link hwString MoreMsg +" :hi link hwString NonText +" :hi link hwString String +" +" and for comments: +" +" :hi link hwComment MoreMsg +" :hi link hwComment NonText +" :hi link hwComment Comment +" +" Remember the setting you like and change the corresponding definition at +" the bottom of this file. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +if !exists("hw_version") + let hw_version = 10 + let hw_subversion = 0 +elseif !exists("hw_subversion") + let hw_subversion = 0 +endif + +syn case match + +" syncing method +syn sync minlines=100 + +" catch errors caused by wrong parenthesis and wrong curly brackets or +" keywords placed outside their respective blocks +syn region hwParen transparent start='(' end=')' contains=ALLBUT,hwParenError,hwTodo,hwSpecial,hwIfEndIf,hwElseIf,hwElse,hwBlock,hwLoopBlock,hwIn,hwStatement,hwStep,hwFallThrough,hwLineStatement +syn region hwTableBlock transparent matchgroup=hwTable start="{" end="}" contains=ALLBUT,hwBraceError,hwTodo,hwSpecial,hwIfEndIf,hwElseIf,hwElse,hwBlock,hwLoopBlock,hwIn,hwStatement,hwStep,hwFallThrough,hwLineStatement + +syn match hwParenError ")" +syn match hwBraceError "}" +syn match hwError "\<\%(If\|End\|Else\|ElseIf\|Then\|Until\|In\|EndIf\|EndSwitch\|FallThrough\|Case\|Default\|Wend\|Until\|Forever\)\>" + +" Function ... End +syn region hwFunctionBlock transparent matchgroup=hwFunction start="\" end="\" contains=ALLBUT,hwTodo,hwSpecial,hwElseIf,hwElse,hwIn,hwStep,hwFallThrough,hwLineStatement + +" If .. Then +syn region hwIfThen transparent matchgroup=hwCond start="\" end="\\{-}"me=e-4 oneline skipwhite skipempty +" Then ... Else +syn region hwThenElse transparent matchgroup=hwCond start="\" end="$" end="\" contains=hwFunction,hwUserFunction,hwElseIf,hwStatement,hwConstant containedin=hwIfThen oneline skipwhite skipempty + +" If .. EndIf +syn region hwIfEndIf transparent matchgroup=hwCond start="\\(\(.\{-}Then.\{-}\)\@!\)" end="\" contains=ALLBUT,hwTodo,hwSpecial,hwIn,hwStep,hwLineStatement skipwhite skipempty +" Else ... EndIf +syn region hwElseEndIf contained transparent matchgroup=hwCond start="\" end="\"me=e-5 contains=ALLBUT,hwTodo,hwSpecial,hwElseIf,hwElseEndIf,hwIn,hwStep,hwFallThrough,hwLineStatement + +" Then +"syn keyword hwLineStatement Then contained +" Forever +syn keyword hwLineStatement Forever contained +" Do +syn keyword hwLineStatement Do contained +" ElseIf +syn keyword hwElseIf ElseIf contained + + +" Switch ... EndSwitch +syn region hwSwitchEnd transparent matchgroup=hwCond start="\" end="\" contains=hwCase,hwDefCase skipwhite skipempty + +" Case ... : +syn region hwCase transparent matchgroup=hwCond start="\" end="\"me=e-9 end="\:"me=e-8 end="\"me=e-4 contains=ALLBUT,hwTodo,hwSpecial,hwElseIf,hwElseEndIf,hwLineStatement,hwIn,hwStep skipwhite skipempty +" Default: +syn region hwDefCase transparent matchgroup=hwCond start="\" end="\"me=e-9 contains=ALLBUT,hwTodo,hwSpecial,hwElseIf,hwElseEndIf,hwIn,hwStep,hwCase,hwDefCase,hwFallThrough,hwLineStatement skipwhite skipempty + +syn keyword hwFallThrough contained FallThrough + +" Block ... EndBlock +syn region hwBlock transparent matchgroup=hwStatement start="\" end="\" contains=ALLBUT,hwTodo,hwSpecial,hwElseIf,hwElse,hwIn,hwStep,hwLineStatement + +" Repeat ... Until/Forever +syn region hwLoopBlock transparent matchgroup=hwRepeat start="\" end="\" end="\" contains=ALLBUT,hwTodo,hwSpecial,hwElseIf,hwElse,hwIn,hwStep,hwLineStatement + +" While ... Wend/Do +syn region hwLoopBlock transparent matchgroup=hwRepeat start="\" end="\" end="\" contains=ALLBUT,hwTodo,hwSpecial,hwElseIf,hwElse,hwIn,hwStep,hwLineStatement skipwhite skipempty + +" For .. To +syn region hwForTo transparent matchgroup=hwRepeat start="\" end="\"me=e-2 skipwhite skipempty nextgroup=hwToNext + +" To .. Next +syn region hwToNext transparent matchgroup=hwRepeat start="\" end="\" contains=ALLBUT,hwTodo,hwSpecial,hwElseIf,hwElse,hwIn,hwLineStatement skipwhite skipempty + +" For .. In +syn region hwForIn transparent matchgroup=hwRepeat start="\\(\(.\{-}To.\{-}\)\@!\)" end="\"me=e-2, skipwhite skipempty nextgroup=hwInNext + +" In .. Next +syn region hwInNext transparent matchgroup=hwRepeat start="\" end="\" contains=ALLBUT,hwTodo,hwSpecial,hwElseIf,hwElse,hwLineStatement skipwhite skipempty + +syn keyword hwStep contained Step +syn keyword hwIn contained In + +" other keywords +syn keyword hwStatement Return Break Continue +syn keyword hwStatement Goto Gosub Dim DimStr Const Local Global +syn match hwLabel "::\I\i*::" +syn match hwOperator "\%(&\|\*\|+\|-\|\.\||\|//\|/\|:\|<\|=\|>\|<>\|<=\|=>\|\^\|\~\|\\\|\\|\\|\\|\\)" +syn keyword hwConstant Nil +syn keyword hwConstant True False +" predefined preprocessing commands +syn match hwPreProcessor "@\<\%(ANIM\|APPAUTHOR\|APPCOPYRIGHT\|APPDESCRIPTION\|APPICON\|APPIDENTIFIER\|APPTITLE\|APPVERSION\|BACKFILL\|BGPIC\|BRUSH\|CATALOG\|DIRECTORY\|DISPLAY\|ELSE\|ELSEIF\|ENDIF\|ERROR\|FILE\|FONT\|ICON\|IF\|INCLUDE\|LINKER\|MENU\|MUSIC\|OPTIONS\|PALETTE\|REQUIRE\|SAMPLE\|SCREEN\|SPRITE\|VERSION\|VIDEO\|WARNING\)\>"ms=s+1 +" predefined constants +syn match hwConstant "#\<\%(ACTIVEWINDOW\|ADF_ANIM\|ADF_FX\|ADF_MOVEOBJECT\|ALL\|ALPHABETICAL\|ALPHACHANNEL\|ALPHANUMERICAL\|AMIGAICON_DEVICE\|AMIGAICON_DISK\|AMIGAICON_DRAWER\|AMIGAICON_GARBAGE\|AMIGAICON_HIDE\|AMIGAICON_KICKSTART\|AMIGAICON_NONE\|AMIGAICON_PROJECT\|AMIGAICON_SETPOSITION\|AMIGAICON_SETTITLE\|AMIGAICON_SHOW\|AMIGAICON_TOOL\|ANIM\|ANIMSTREAM\|ANIMTYPE_RASTER\|ANIMTYPE_VECTOR\|ANMFMT_GIF\|ANMFMT_IFF\|ANMFMT_MJPEG\|ANTIALIAS\|AQUA\|ARC\|ASYNCDRAW\|ASYNCOBJ\|ATTRACTIVE\|ATTRADAPTER\|ATTRALPHAINTENSITY\|ATTRBGPIC\|ATTRBITRATE\|ATTRBORDERBOTTOM\|ATTRBORDERLEFT\|ATTRBORDERLESS\|ATTRBORDERPEN\|ATTRBORDERRIGHT\|ATTRBORDERTOP\|ATTRBULLETPEN\|ATTRCANSEEK\|ATTRCLIPREGION\|ATTRCOUNT\|ATTRCURFRAME\|ATTRCURSORX\|ATTRCURSORY\|ATTRCURSUBSONG\|ATTRCYCLE\|ATTRDENSITY\|ATTRDEPTH\|ATTRDISPLAY\|ATTRDITHERMODE\|ATTRDOUBLEBUFFER\|ATTRDRIVER\|ATTRDURATION\|ATTRELAPSE\|ATTRENCODING\|ATTRFIXED\|ATTRFONTAA\|ATTRFONTASCENDER\|ATTRFONTCHARMAP\|ATTRFONTDEPTH\|ATTRFONTDESCENDER\|ATTRFONTENGINE\|ATTRFONTNAME\|ATTRFONTPALETTE\|ATTRFONTSCALABLE\|ATTRFONTSIZE\|ATTRFONTTRANSPARENTPEN\|ATTRFONTTYPE\|ATTRFORMAT\|ATTRFRAMEDELAY\|ATTRFUNCTION\|ATTRGROUP\|ATTRHARDWARE\|ATTRHASALPHA\|ATTRHASMASK\|ATTRHEIGHT\|ATTRHOSTDEPTH\|ATTRHOSTHEIGHT\|ATTRHOSTMONITORS\|ATTRHOSTSCALE\|ATTRHOSTSCALEX\|ATTRHOSTSCALEY\|ATTRHOSTTASKBAR\|ATTRHOSTTITLEBARHEIGHT\|ATTRHOSTWIDTH\|ATTRID\|ATTRIMMERSIVEMODE\|ATTRINTERPOLATE\|ATTRKEYBOARD\|ATTRLAYERID\|ATTRLAYERS\|ATTRLAYERSON\|ATTRLOADER\|ATTRMARGINLEFT\|ATTRMARGINRIGHT\|ATTRMASKMODE\|ATTRMAXHEIGHT\|ATTRMAXIMIZED\|ATTRMAXWIDTH\|ATTRMENU\|ATTRMODE\|ATTRMONITOR\|ATTRNOCLOSE\|ATTRNOHIDE\|ATTRNOMODESWITCH\|ATTRNUMENTRIES\|ATTRNUMFRAMES\|ATTRNUMSUBSONGS\|ATTRONSCREEN\|ATTRORIENTATION\|ATTROUTPUTDEVICE\|ATTRPALETTE\|ATTRPALETTEMODE\|ATTRPAUSED\|ATTRPEN\|ATTRPITCH\|ATTRPLAYING\|ATTRPOINTER\|ATTRPOSITION\|ATTRPUBSCREEN\|ATTRRAWHEIGHT\|ATTRRAWWIDTH\|ATTRRAWXPOS\|ATTRRAWYPOS\|ATTRSCALEHEIGHT\|ATTRSCALEMODE\|ATTRSCALESWITCH\|ATTRSCALEWIDTH\|ATTRSHADOWPEN\|ATTRSIZE\|ATTRSIZEABLE\|ATTRSPRITES\|ATTRSTANDARD\|ATTRSTATE\|ATTRSYSTEMBARS\|ATTRTEXT\|ATTRTITLE\|ATTRTRANSPARENTCOLOR\|ATTRTRANSPARENTPEN\|ATTRTYPE\|ATTRUSERDATA\|ATTRVISIBLE\|ATTRWIDTH\|ATTRXDPI\|ATTRXPOS\|ATTRXSERVER\|ATTRYDPI\|ATTRYPOS\|ATTRZPOS\|BARS\|BAUD_115200\|BAUD_1200\|BAUD_19200\|BAUD_2400\|BAUD_300\|BAUD_38400\|BAUD_460800\|BAUD_4800\|BAUD_57600\|BAUD_600\|BAUD_9600\|BEEPERROR\|BEEPINFORMATION\|BEEPQUESTION\|BEEPSYSTEM\|BEEPWARNING\|BGPIC\|BGPICPART\|BIGENDIAN\|BIGSINE\|BITMAP_DEFAULT\|BLACK\|BLEND\|BLUE\|BOLD\|BOOLEAN\|BORDER\|BOTTOM\|BOTTOMOUT\|BOUNCE\|BOX\|BRUSH\|BRUSH_VS_BOX\|BRUSHPART\|BULLET_ARROW\|BULLET_BOX\|BULLET_CHECKMARK\|BULLET_CIRCLE\|BULLET_CROSS\|BULLET_DASH\|BULLET_DIAMOND\|BULLET_LALPHA\|BULLET_LALPHADOUBLE\|BULLET_LALPHASINGLE\|BULLET_LROMAN\|BULLET_LROMANDOUBLE\|BULLET_LROMANSINGLE\|BULLET_NONE\|BULLET_NUMERIC\|BULLET_NUMERICDOUBLE\|BULLET_NUMERICSINGLE\|BULLET_UALPHA\|BULLET_UALPHADOUBLE\|BULLET_UALPHASINGLE\|BULLET_UROMAN\|BULLET_UROMANDOUBLE\|BULLET_UROMANSINGLE\|BYTE\|CAPBUTT\|CAPROUND\|CAPSQUARE\|CARDBOTTOM\|CARDTOP\|CENTER\|CHARMAP_ADOBECUSTOM\|CHARMAP_ADOBEEXPERT\|CHARMAP_ADOBELATIN1\|CHARMAP_ADOBESTANDARD\|CHARMAP_APPLEROMAN\|CHARMAP_BIG5\|CHARMAP_DEFAULT\|CHARMAP_JOHAB\|CHARMAP_MSSYMBOL\|CHARMAP_OLDLATIN2\|CHARMAP_SJIS\|CHARMAP_UNICODE\|CHARMAP_WANSUNG\|CHIPMEMORY\|CIRCLE\|CLIENT\|CLIPBOARD_EMPTY\|CLIPBOARD_IMAGE\|CLIPBOARD_SOUND\|CLIPBOARD_TEXT\|CLIPBOARD_UNKNOWN\|CLIPREGION\|CLOCKWIPE\|CLOSEWINDOW\|CONICAL\|COPYFILE_FAILED\|COPYFILE_OVERWRITE\|COPYFILE_STATUS\|COPYFILE_UNPROTECT\|COUNTBOTH\|COUNTDIRECTORIES\|COUNTFILES\|COUNTRY_AFGHANISTAN\|COUNTRY_ALANDISLANDS\|COUNTRY_ALBANIA\|COUNTRY_ALGERIA\|COUNTRY_AMERICANSAMOA\|COUNTRY_ANDORRA\|COUNTRY_ANGOLA\|COUNTRY_ANGUILLA\|COUNTRY_ANTARCTICA\|COUNTRY_ANTIGUAANDBARBUDA\|COUNTRY_ARGENTINA\|COUNTRY_ARMENIA\|COUNTRY_ARUBA\|COUNTRY_AUSTRALIA\|COUNTRY_AUSTRIA\|COUNTRY_AZERBAIJAN\|COUNTRY_BAHAMAS\|COUNTRY_BAHRAIN\|COUNTRY_BANGLADESH\|COUNTRY_BARBADOS\|COUNTRY_BELARUS\|COUNTRY_BELGIUM\|COUNTRY_BELIZE\|COUNTRY_BENIN\|COUNTRY_BERMUDA\|COUNTRY_BESISLANDS\|COUNTRY_BHUTAN\|COUNTRY_BOLIVIA\|COUNTRY_BOSNIAANDHERZEGOVINA\|COUNTRY_BOTSWANA\|COUNTRY_BOUVETISLAND\|COUNTRY_BRAZIL\|COUNTRY_BRUNEI\|COUNTRY_BULGARIA\|COUNTRY_BURKINAFASO\|COUNTRY_BURUNDI\|COUNTRY_CAMBODIA\|COUNTRY_CAMEROON\|COUNTRY_CANADA\|COUNTRY_CAPEVERDE\|COUNTRY_CAYMANISLANDS\|COUNTRY_CENTRALAFRICANREPUBLIC\|COUNTRY_CHAD\|COUNTRY_CHILE\|COUNTRY_CHINA\|COUNTRY_CHRISTMASISLAND\|COUNTRY_COCOSISLANDS\|COUNTRY_COLOMBIA\|COUNTRY_COMOROS\|COUNTRY_CONGO\|COUNTRY_COOKISLANDS\|COUNTRY_COSTARICA\|COUNTRY_CROATIA\|COUNTRY_CUBA\|COUNTRY_CURACAO\|COUNTRY_CYPRUS\|COUNTRY_CZECHREPUBLIC\|COUNTRY_DENMARK\|COUNTRY_DJIBOUTI\|COUNTRY_DOMINICA\|COUNTRY_DOMINICANREPUBLIC\|COUNTRY_DRCONGO\|COUNTRY_ECUADOR\|COUNTRY_EGYPT\|COUNTRY_ELSALVADOR\|COUNTRY_EQUATORIALGUINEA\|COUNTRY_ERITREA\|COUNTRY_ESTONIA\|COUNTRY_ETHIOPIA\|COUNTRY_FALKLANDISLANDS\|COUNTRY_FAROEISLANDS\|COUNTRY_FIJI\|COUNTRY_FINLAND\|COUNTRY_FRANCE\|COUNTRY_FRENCHGUIANA\|COUNTRY_FRENCHPOLYNESIA\|COUNTRY_GABON\|COUNTRY_GAMBIA\|COUNTRY_GEORGIA\|COUNTRY_GERMANY\|COUNTRY_GHANA\|COUNTRY_GIBRALTAR\|COUNTRY_GREECE\|COUNTRY_GREENLAND\|COUNTRY_GRENADA\|COUNTRY_GUADELOUPE\|COUNTRY_GUAM\|COUNTRY_GUATEMALA\|COUNTRY_GUERNSEY\|COUNTRY_GUINEA\|COUNTRY_GUINEABISSAU\|COUNTRY_GUYANA\|COUNTRY_HAITI\|COUNTRY_HOLYSEE\|COUNTRY_HONDURAS\|COUNTRY_HONGKONG\|COUNTRY_HUNGARY\|COUNTRY_ICELAND\|COUNTRY_INDIA\|COUNTRY_INDONESIA\|COUNTRY_IRAN\|COUNTRY_IRAQ\|COUNTRY_IRELAND\|COUNTRY_ISLEOFMAN\|COUNTRY_ISRAEL\|COUNTRY_ITALY\|COUNTRY_IVORYCOAST\|COUNTRY_JAMAICA\|COUNTRY_JAPAN\|COUNTRY_JERSEY\|COUNTRY_JORDAN\|COUNTRY_KAZAKHSTAN\|COUNTRY_KENYA\|COUNTRY_KIRIBATI\|COUNTRY_KUWAIT\|COUNTRY_KYRGYZSTAN\|COUNTRY_LAOS\|COUNTRY_LATVIA\|COUNTRY_LEBANON\|COUNTRY_LESOTHO\|COUNTRY_LIBERIA\|COUNTRY_LIBYA\|COUNTRY_LIECHTENSTEIN\|COUNTRY_LITHUANIA\|COUNTRY_LUXEMBOURG\|COUNTRY_MACAO\|COUNTRY_MACEDONIA\|COUNTRY_MADAGASCAR\|COUNTRY_MALAWI\|COUNTRY_MALAYSIA\|COUNTRY_MALDIVES\|COUNTRY_MALI\|COUNTRY_MALTA\|COUNTRY_MARSHALLISLANDS\|COUNTRY_MARTINIQUE\|COUNTRY_MAURITANIA\|COUNTRY_MAURITIUS\|COUNTRY_MAYOTTE\|COUNTRY_MEXICO\|COUNTRY_MICRONESIA\|COUNTRY_MOLDOVA\|COUNTRY_MONACO\|COUNTRY_MONGOLIA\|COUNTRY_MONTENEGRO\|COUNTRY_MONTSERRAT\|COUNTRY_MOROCCO\|COUNTRY_MOZAMBIQUE\|COUNTRY_MYANMAR\|COUNTRY_NAMIBIA\|COUNTRY_NAURU\|COUNTRY_NEPAL\|COUNTRY_NETHERLANDS\|COUNTRY_NEWCALEDONIA\|COUNTRY_NEWZEALAND\|COUNTRY_NICARAGUA\|COUNTRY_NIGER\|COUNTRY_NIGERIA\|COUNTRY_NIUE\|COUNTRY_NORFOLKISLAND\|COUNTRY_NORTHKOREA\|COUNTRY_NORWAY\|COUNTRY_OMAN\|COUNTRY_PAKISTAN\|COUNTRY_PALAU\|COUNTRY_PALESTINE\|COUNTRY_PANAMA\|COUNTRY_PAPUANEWGUINEA\|COUNTRY_PARAGUAY\|COUNTRY_PERU\|COUNTRY_PHILIPPINES\|COUNTRY_PITCAIRN\|COUNTRY_POLAND\|COUNTRY_PORTUGAL\|COUNTRY_PUERTORICO\|COUNTRY_QATAR\|COUNTRY_REUNION\|COUNTRY_ROMANIA\|COUNTRY_RUSSIA\|COUNTRY_RWANDA\|COUNTRY_SAINTBARTHELEMY\|COUNTRY_SAINTHELENA\|COUNTRY_SAINTKITTSANDNEVIS\|COUNTRY_SAINTLUCIA\|COUNTRY_SAINTVINCENT\|COUNTRY_SAMOA\|COUNTRY_SANMARINO\|COUNTRY_SAOTOMEANDPRINCIPE\|COUNTRY_SAUDIARABIA\|COUNTRY_SENEGAL\|COUNTRY_SERBIA\|COUNTRY_SEYCHELLES\|COUNTRY_SIERRALEONE\|COUNTRY_SINGAPORE\|COUNTRY_SLOVAKIA\|COUNTRY_SLOVENIA\|COUNTRY_SOLOMONISLANDS\|COUNTRY_SOMALIA\|COUNTRY_SOUTHAFRICA\|COUNTRY_SOUTHKOREA\|COUNTRY_SOUTHSUDAN\|COUNTRY_SPAIN\|COUNTRY_SRILANKA\|COUNTRY_SUDAN\|COUNTRY_SURINAME\|COUNTRY_SWAZILAND\|COUNTRY_SWEDEN\|COUNTRY_SWITZERLAND\|COUNTRY_SYRIA\|COUNTRY_TAIWAN\|COUNTRY_TAJIKISTAN\|COUNTRY_TANZANIA\|COUNTRY_THAILAND\|COUNTRY_TIMOR\|COUNTRY_TOGO\|COUNTRY_TONGA\|COUNTRY_TRINIDADANDTOBAGO\|COUNTRY_TUNISIA\|COUNTRY_TURKEY\|COUNTRY_TURKMENISTAN\|COUNTRY_TUVALU\|COUNTRY_UAE\|COUNTRY_UGANDA\|COUNTRY_UK\|COUNTRY_UKRAINE\|COUNTRY_UNKNOWN\|COUNTRY_URUGUAY\|COUNTRY_USA\|COUNTRY_UZBEKISTAN\|COUNTRY_VANUATU\|COUNTRY_VENEZUELA\|COUNTRY_VIETNAM\|COUNTRY_YEMEN\|COUNTRY_ZAMBIA\|COUNTSEPARATE\|CR_DEAD\|CR_RUNNING\|CR_SUSPENDED\|CROSSFADE\|CRUSHBOTTOM\|CRUSHLEFT\|CRUSHRIGHT\|CRUSHTOP\|DAMPED\|DATA_5\|DATA_6\|DATA_7\|DATA_8\|DATEDAY\|DATELOCAL\|DATELOCALNATIVE\|DATEMONTH\|DATETIME\|DATEUTC\|DATEYEAR\|DEFAULTICON\|DEFAULTSPEED\|DEINTERLACE_DEFAULT\|DEINTERLACE_DOUBLE\|DELETEFILE_FAILED\|DELETEFILE_STATUS\|DELETEFILE_UNPROTECT\|DENSITY_HIGH\|DENSITY_LOW\|DENSITY_MEDIUM\|DENSITY_NONE\|DIAGONAL\|DIRECTORY\|DIRMONITOR_ADD\|DIRMONITOR_CHANGE\|DIRMONITOR_REMOVE\|DISPLAY\|DISPMODE_ASK\|DISPMODE_FAKEFULLSCREEN\|DISPMODE_FULLSCREEN\|DISPMODE_FULLSCREENSCALE\|DISPMODE_MODEREQUESTER\|DISPMODE_MODESWITCH\|DISPMODE_SYSTEMSCALE\|DISPMODE_WINDOWED\|DISPSTATE_CLOSED\|DISPSTATE_MINIMIZED\|DISPSTATE_OPEN\|DISSOLVE\|DITHERMODE_FLOYDSTEINBERG\|DITHERMODE_NONE\|DOSTYPE_DIRECTORY\|DOSTYPE_FILE\|DOUBLE\|DOUBLEBUFFER\|DOWNLOADFILE_STATUS\|DTR_OFF\|DTR_ON\|DURATION_LONG\|DURATION_SHORT\|EDGE\|ELLIPSE\|ENCODING_AMIGA\|ENCODING_ISO8859_1\|ENCODING_RAW\|ENCODING_UTF8\|EOF\|ERR_8OR16BITONLY\|ERR_ACCELERATOR\|ERR_ADDAPPICON\|ERR_ADDAPPWIN\|ERR_ADDSYSEVENT\|ERR_ADDTASK\|ERR_ADFFREEDISP\|ERR_ADFWRONGDISP\|ERR_AFILEPROP\|ERR_AHI\|ERR_ALLOCALPHA\|ERR_ALLOCCHANNEL\|ERR_ALLOCCHUNKY\|ERR_ALLOCMASK\|ERR_ALRDYDECLRD\|ERR_ALREADYASYNC\|ERR_ALSAPCM\|ERR_AMIGAGUIDE\|ERR_ANIMDISK\|ERR_ANIMFRAME\|ERR_ANTIALIAS\|ERR_APPLET\|ERR_APPLETVERSION\|ERR_APPLICATION\|ERR_ARGS\|ERR_ARRAYDECLA\|ERR_ASSERTFAILED\|ERR_ATSUI\|ERR_AUDIOCONVERTER\|ERR_BACKFILL\|ERR_BAD8SVX\|ERR_BADBASE64\|ERR_BADBYTECODE\|ERR_BADCALLBACKRET\|ERR_BADCONSTANT\|ERR_BADDIMENSIONS\|ERR_BADENCODING\|ERR_BADINTEGER\|ERR_BADIP\|ERR_BADLAYERTYPE\|ERR_BADPLATFORM\|ERR_BADSIGNATURE\|ERR_BADUPVALUES\|ERR_BADURL\|ERR_BADWAVE\|ERR_BADYIELD\|ERR_BEGINREFRESH\|ERR_BGPICBUTTON\|ERR_BGPICPALETTE\|ERR_BGPICTYPE\|ERR_BITMAP\|ERR_BLKWOENDBLK\|ERR_BRACECLOSE\|ERR_BRACEOPEN\|ERR_BRACKETCLOSE\|ERR_BRACKETOPEN\|ERR_BRUSHLINK\|ERR_BRUSHSIZE\|ERR_BRUSHTYPE\|ERR_CACHEERROR\|ERR_CASECST\|ERR_CHANGEDIR\|ERR_CHANNELRANGE\|ERR_CHRCSTEMPTY\|ERR_CHRCSTLEN\|ERR_CLIPFORMAT\|ERR_CLIPOPEN\|ERR_CLIPREAD\|ERR_CLIPWRITE\|ERR_CLOSEDDISPLAY\|ERR_CLOSEFILE\|ERR_CMDASVAR\|ERR_CMPUNSUPPORTED\|ERR_COLORSPACE\|ERR_COMMENTSTRUCT\|ERR_COMMODITY\|ERR_COMPLEXEXPR\|ERR_COMPLEXPATTERN\|ERR_COMPLEXWHILE\|ERR_CONCAT\|ERR_CONFIG\|ERR_CONFIG2\|ERR_CONITEMS\|ERR_CONSOLEARG\|ERR_CONTEXTMENU\|ERR_COORDSRANGE\|ERR_COREFOUNDATION\|ERR_CORETEXT\|ERR_CREATEDIR\|ERR_CREATEDOCKY\|ERR_CREATEEVENT\|ERR_CREATEGC\|ERR_CREATEICON\|ERR_CREATEMENU\|ERR_CREATEPORT\|ERR_CREATESHORTCUT\|ERR_CSTDOUBLEDEF\|ERR_CTRLSTRUCT\|ERR_CYIELD\|ERR_DATATYPEALPHA\|ERR_DATATYPESAVE\|ERR_DATATYPESAVE2\|ERR_DBLENCODING\|ERR_DBPALETTE\|ERR_DBTRANSWIN\|ERR_DBVIDEOLAYER\|ERR_DDAUTOSCALE\|ERR_DDMOBILE\|ERR_DDRECVIDEO\|ERR_DEADRESUME\|ERR_DEFFONT\|ERR_DELETEFILE\|ERR_DEMO\|ERR_DEMO2\|ERR_DEMO3\|ERR_DEPTHMISMATCH\|ERR_DEPTHRANGE\|ERR_DESERIALIZE\|ERR_DIFFDEPTH\|ERR_DIFFENCODING\|ERR_DINPUT\|ERR_DIRECTSHOW\|ERR_DIRLOCK\|ERR_DISPLAYADAPTERSUPPORT\|ERR_DISPLAYDESKTOP\|ERR_DISPLAYDESKTOPPAL\|ERR_DISPLAYSIZE\|ERR_DISPMINIMIZED\|ERR_DLOPEN\|ERR_DOUBLEDECLA\|ERR_DOUBLEMENU\|ERR_DRAWPATH\|ERR_DSOUNDNOTIFY\|ERR_DSOUNDNOTIPOS\|ERR_DSOUNDPLAY\|ERR_ELSEIFAFTERELSE\|ERR_ELSETWICE\|ERR_ELSEWOIF\|ERR_EMPTYMENUTREE\|ERR_EMPTYOBJ\|ERR_EMPTYPATH\|ERR_EMPTYSCRIPT\|ERR_EMPTYTABLE\|ERR_ENDBLKWOBLK\|ERR_ENDDOUBLEBUFFER\|ERR_ENDFUNCWOFUNC\|ERR_ENDIFWOIF\|ERR_ENDSWCHWOSWCH\|ERR_ENDWITHWOWITH\|ERR_EQUALEXPECTED\|ERR_ERRORCALLED\|ERR_ESCREPLACE\|ERR_EVNTEXPCTED\|ERR_EXAMINE\|ERR_EXECUTE\|ERR_EXETYPE\|ERR_FGRABVIDSTATE\|ERR_FIELDINIT\|ERR_FILEEXIST\|ERR_FILEFORMAT\|ERR_FILENOTFOUND\|ERR_FILESIZE\|ERR_FINDACTIVITY\|ERR_FINDANIM\|ERR_FINDANIMSTREAM\|ERR_FINDAPPLICATION\|ERR_FINDARRAY\|ERR_FINDASYNCDRAW\|ERR_FINDASYNCOBJ\|ERR_FINDBGPIC\|ERR_FINDBRUSH\|ERR_FINDBUTTON\|ERR_FINDCLIENT\|ERR_FINDCLIPREGION\|ERR_FINDCST\|ERR_FINDDIR\|ERR_FINDDISPLAY\|ERR_FINDFILE\|ERR_FINDFONT\|ERR_FINDFONT2\|ERR_FINDICON\|ERR_FINDINTERVAL\|ERR_FINDLAYER\|ERR_FINDLAYERDATA\|ERR_FINDMEMBLK\|ERR_FINDMENU\|ERR_FINDMENUITEM\|ERR_FINDMONITOR\|ERR_FINDMOVE\|ERR_FINDMUSIC\|ERR_FINDOBJECTDATA\|ERR_FINDPALETTE\|ERR_FINDPATH\|ERR_FINDPLUGIN\|ERR_FINDPOINTER\|ERR_FINDPORT\|ERR_FINDSAMPLE\|ERR_FINDSELECTOR\|ERR_FINDSERIAL\|ERR_FINDSERVER\|ERR_FINDSPRITE\|ERR_FINDTEXTOBJECT\|ERR_FINDTIMEOUT\|ERR_FINDTIMER\|ERR_FINDUDPOBJECT\|ERR_FINDVIDEO\|ERR_FIRSTPREPROC\|ERR_FONTFORMAT\|ERR_FONTPATH\|ERR_FONTPATH2\|ERR_FORBIDMODAL\|ERR_FOREVERWOREPEAT\|ERR_FORWONEXT\|ERR_FRAMEGRABBER\|ERR_FREEABGPIC\|ERR_FREEADISPLAY\|ERR_FREECURPOINTER\|ERR_FT2\|ERR_FTPAUTH\|ERR_FTPERROR\|ERR_FULLSCREEN\|ERR_FUNCARGS\|ERR_FUNCDECLA\|ERR_FUNCEXPECTED\|ERR_FUNCJMP\|ERR_FUNCREMOVED\|ERR_FUNCTABLEARG\|ERR_FUNCWOENDFUNC\|ERR_GETDISKOBJ\|ERR_GETIFADDRS\|ERR_GETMONITORINFO\|ERR_GETSHORTCUT\|ERR_GRABSCREEN\|ERR_GROUPNAMEUSED\|ERR_GTK\|ERR_GUIGFX\|ERR_HEXPOINT\|ERR_HOSTNAME\|ERR_HTTPERROR\|ERR_HTTPTE\|ERR_HWBMCLOSEDISP\|ERR_HWBRUSH\|ERR_HWBRUSHFUNC\|ERR_HWDBFREEDISP\|ERR_ICONDIMS\|ERR_ICONENTRY\|ERR_ICONPARMS\|ERR_ICONSIZE\|ERR_ICONSTANDARD\|ERR_ICONVECTOR\|ERR_IFWOENDIF\|ERR_IMAGEERROR\|ERR_INCOMPATBRUSH\|ERR_INISYNTAX\|ERR_INITSERIAL\|ERR_INTERNAL\|ERR_INTERNAL1\|ERR_INTEXPECTED\|ERR_INVALIDDATE\|ERR_INVALIDUTF8\|ERR_INVALIDUTF8ARG\|ERR_INVCAPIDX\|ERR_INVINSERT\|ERR_INVNEXTKEY\|ERR_INVPATCAP\|ERR_INVREPLACE\|ERR_JAVA\|ERR_JAVAMETHOD\|ERR_JOYSTICK\|ERR_KEYFILE\|ERR_KEYNOTFOUND\|ERR_KEYWORD\|ERR_KICKSTART\|ERR_LABELDECLA\|ERR_LABELDOUBLE\|ERR_LABINFOR\|ERR_LABINFUNC\|ERR_LABINIF\|ERR_LABINWHILE\|ERR_LABMAINBLK\|ERR_LAYERRANGE\|ERR_LAYERSOFF\|ERR_LAYERSON\|ERR_LAYERSUPPORT\|ERR_LAYERSUPPORT2\|ERR_LAYERSWITCH\|ERR_LEGACYPTMOD\|ERR_LFSYNTAX\|ERR_LINKFONT\|ERR_LINKPLUGIN\|ERR_LOADFRAME\|ERR_LOADICON\|ERR_LOADPICTURE\|ERR_LOADPICTURE2\|ERR_LOADPLUGIN\|ERR_LOADSOUND\|ERR_LOADVIDEO\|ERR_LOCK\|ERR_LOCK2\|ERR_LOCKBMAP\|ERR_LOCKEDOBJ\|ERR_LOOPRANGE\|ERR_LOWFREQ\|ERR_MAGICKEY\|ERR_MALFORMPAT1\|ERR_MALFORMPAT2\|ERR_MASKNALPHA\|ERR_MAXLINES\|ERR_MAXLOCALS\|ERR_MAXPARAMS\|ERR_MAXUPVALS\|ERR_MEDIAFOUNDATION\|ERR_MEM\|ERR_MEMCODE\|ERR_MEMCST\|ERR_MEMRANGE\|ERR_MENUATTACHED\|ERR_MENUCOMPLEXITY\|ERR_MISSINGBRACKET\|ERR_MISSINGFIELD\|ERR_MISSINGOPBRACK\|ERR_MISSINGPARAMTR\|ERR_MISSINGSEPARTR\|ERR_MIXMUSMOD\|ERR_MOBILE\|ERR_MODIFYAANIM\|ERR_MODIFYABG\|ERR_MODIFYABGPIC\|ERR_MODIFYABR\|ERR_MODIFYPSMP\|ERR_MODIFYSPRITE\|ERR_MODIFYSPRITE2\|ERR_MONITORDIR\|ERR_MONITORFULLSCREEN\|ERR_MONITORRANGE\|ERR_MOVEFILE\|ERR_MSGPORT\|ERR_MULDISMOBILE\|ERR_MULTIBGPIC\|ERR_MULTIDISPLAYS\|ERR_MUSFMTSUPPORT\|ERR_MUSNOTPAUSED\|ERR_MUSNOTPLYNG\|ERR_MUSNOTPLYNG2\|ERR_MUSPAUSED\|ERR_MUSPLAYING\|ERR_NAMETOOLONG\|ERR_NAMEUSED\|ERR_NEEDAPPLICATION\|ERR_NEEDCOMPOSITE\|ERR_NEEDMORPHOS2\|ERR_NEEDOS41\|ERR_NEEDPALETTEIMAGE\|ERR_NEGCOORDS\|ERR_NEWHWPLUGIN\|ERR_NEXTWOFOR\|ERR_NOABSPATH\|ERR_NOACCESS\|ERR_NOALPHA\|ERR_NOANMLAYER\|ERR_NOAPPLET\|ERR_NOARGBVISUAL\|ERR_NOBLOCKBREAK\|ERR_NOCALLBACK\|ERR_NOCHANNEL\|ERR_NOCHAR\|ERR_NOCLIPREG\|ERR_NOCOLON\|ERR_NOCOMMA\|ERR_NOCOMPRESS\|ERR_NOCONSTANTS\|ERR_NOCONTEXTMENU\|ERR_NOCOORDCST\|ERR_NODIRPATTERN\|ERR_NODISLAYERS\|ERR_NODISPMODES\|ERR_NODOUBLEBUFFER\|ERR_NOFALLTHROUGH\|ERR_NOFILTERNAME\|ERR_NOFMBHANDLER\|ERR_NOFUNCTION\|ERR_NOHWFUNC\|ERR_NOJOYATPORT\|ERR_NOKEYWORDS\|ERR_NOLAYERS\|ERR_NOLOOP\|ERR_NOLOOPCONT\|ERR_NOMASKBRUSH\|ERR_NOMENU\|ERR_NOMIMEVIEWER\|ERR_NOMUSICCB\|ERR_NONE\|ERR_NONSUSPENDEDRESUME\|ERR_NOPALETTE\|ERR_NOPALETTEIMAGE\|ERR_NOPALETTEMODE\|ERR_NORETVAL\|ERR_NOREXX\|ERR_NOSPRITES\|ERR_NOTADIR\|ERR_NOTENOUGHPIXELS\|ERR_NOTIGER\|ERR_NOTPROTRACKER\|ERR_NOTRANSPARENCY\|ERR_NOTXTLAYER\|ERR_NUMBEREXPECTED\|ERR_NUMCALLBACK\|ERR_NUMCONCAT\|ERR_NUMEXPECTED\|ERR_NUMSTRCMP\|ERR_NUMTABLEARG\|ERR_OLDAPPLET\|ERR_OPENANIM\|ERR_OPENANIM2\|ERR_OPENAUDIO\|ERR_OPENFONT\|ERR_OPENLIB\|ERR_OPENSERIAL\|ERR_OPENSOCKET\|ERR_OPENSOUND\|ERR_OPENSOUND2\|ERR_OUTOFRANGE\|ERR_PAKFORMAT\|ERR_PALETTEFILL\|ERR_PALETTEMODE\|ERR_PALSCREEN\|ERR_PEERNAME\|ERR_PENRANGE\|ERR_PERCENTFORMAT\|ERR_PERCENTFORMATSTR\|ERR_PIPE\|ERR_PIXELFORMAT\|ERR_PIXELRANGE\|ERR_PLAYERCOMP\|ERR_PLAYVIDEO\|ERR_PLUGINARCH\|ERR_PLUGINDOUBLET\|ERR_PLUGINSUPPORT\|ERR_PLUGINSYMBOL\|ERR_PLUGINTYPE\|ERR_PLUGINVER\|ERR_POINTERFORMAT\|ERR_POINTERIMG\|ERR_PORTNOTAVAIL\|ERR_PREPROCSYM\|ERR_PROTMETATABLE\|ERR_PUBSCREEN\|ERR_QUICKTIME\|ERR_RADIOTOGGLEMENU\|ERR_RANDOMIZE\|ERR_READ\|ERR_READFILE\|ERR_READFUNC\|ERR_READONLY\|ERR_READRANGE\|ERR_READTABLE\|ERR_READVIDEOPIXELS\|ERR_RECVCLOSED\|ERR_RECVTIMEOUT\|ERR_RECVUNKNOWN\|ERR_REGCLASS\|ERR_REGISTRYREAD\|ERR_REGISTRYWRITE\|ERR_REMADLAYER\|ERR_RENAME\|ERR_RENDER\|ERR_RENDERADLAYER\|ERR_RENDERCALLBACK\|ERR_RENDERER\|ERR_REPEATWOUNTIL\|ERR_REQAUTH\|ERR_REQUIREFIELD\|ERR_REQUIREPLUGIN\|ERR_REQUIRETAGFMT\|ERR_RETWOGOSUB\|ERR_REVDWORD\|ERR_REWINDDIR\|ERR_REXXERR\|ERR_SATELLITE\|ERR_SATFREEDISP\|ERR_SAVEANIM\|ERR_SAVEICON\|ERR_SAVEIMAGE\|ERR_SAVEPNG\|ERR_SAVERALPHA\|ERR_SAVESAMPLE\|ERR_SCALEBGPIC\|ERR_SCREEN\|ERR_SCREENMODE\|ERR_SCREENSIZE\|ERR_SCRPIXFMT\|ERR_SEEK\|ERR_SEEKFILE\|ERR_SEEKFORMAT\|ERR_SEEKRANGE\|ERR_SELECTALPHACHANNEL\|ERR_SELECTANIM\|ERR_SELECTBG\|ERR_SELECTBGPIC\|ERR_SELECTBGPIC2\|ERR_SELECTBRUSH\|ERR_SELECTMASK\|ERR_SEMAPHORE\|ERR_SENDDATA\|ERR_SENDMESSAGE\|ERR_SENDTIMEOUT\|ERR_SENDUNKNOWN\|ERR_SERIALIO\|ERR_SERIALIZE\|ERR_SERIALIZETYPE\|ERR_SETADAPTER\|ERR_SETENV\|ERR_SETFILEATTR\|ERR_SETFILECOMMENT\|ERR_SETFILEDATE\|ERR_SETMENU\|ERR_SHORTIF\|ERR_SIGNAL\|ERR_SMODEALPHA\|ERR_SMPRANGE\|ERR_SOCKET\|ERR_SOCKNAME\|ERR_SOCKOPT\|ERR_SORTFUNC\|ERR_SPRITELINK\|ERR_SPRITEONSCREEN\|ERR_SPRITEONSCREEN2\|ERR_SQBRACKETCLOSE\|ERR_SQBRACKETOPEN\|ERR_STACK\|ERR_STAT\|ERR_STRCALLBACK\|ERR_STREAMASSAMPLE\|ERR_STREXPECTED\|ERR_STRINGCST\|ERR_STRINGEXPECTED\|ERR_STRORNUM\|ERR_STRTABLEARG\|ERR_STRTOOSHORT\|ERR_SURFACE\|ERR_SWCHWOENDSWCH\|ERR_SYNTAXERROR\|ERR_SYNTAXLEVELS\|ERR_SYSBUTTON\|ERR_SYSIMAGE\|ERR_SYSTOOOLD\|ERR_TABCALLBACK\|ERR_TABEXPECTED\|ERR_TABEXPECTED2\|ERR_TABEXPECTED3\|ERR_TABLEDECLA\|ERR_TABLEINDEX\|ERR_TABLEORNIL\|ERR_TABLEOVERFLOW\|ERR_TAGEXPECTED\|ERR_TASKSETUP\|ERR_TEXTARG\|ERR_TEXTCONVERT\|ERR_TEXTCONVERT2\|ERR_TEXTSYNTAX\|ERR_TEXTURE\|ERR_TFIMAGE\|ERR_TFVANIM\|ERR_TFVBGPICBRUSH\|ERR_TFVBRUSH\|ERR_TFVBRUSHBGPIC\|ERR_THREAD\|ERR_THREADEXPECTED\|ERR_TIMER\|ERR_TOKENEXPECTED\|ERR_TOOMANYARGS\|ERR_TOOMANYCAPTURES\|ERR_TOOSMALL2\|ERR_TRANSBGMOBILE\|ERR_TRANSBRUSH\|ERR_TRAYICON\|ERR_TRIALCOMPILE\|ERR_TRIALINCLUDE\|ERR_TRIALLIMIT\|ERR_TRIALSAVEVID\|ERR_UDEXPECTED\|ERR_UNBALANCEDPAT\|ERR_UNEXPECTEDEOF\|ERR_UNEXPECTEDSYM\|ERR_UNFINISHEDCAPTURE\|ERR_UNIMPLCMD\|ERR_UNKNOWN\|ERR_UNKNOWNANMOUT\|ERR_UNKNOWNATTR\|ERR_UNKNOWNCMD\|ERR_UNKNOWNCOND\|ERR_UNKNOWNFILTER\|ERR_UNKNOWNICNOUT\|ERR_UNKNOWNIMGOUT\|ERR_UNKNOWNMIMETYPE\|ERR_UNKNOWNMUSFMT\|ERR_UNKNOWNPALETTE\|ERR_UNKNOWNSEC\|ERR_UNKNOWNSEQ\|ERR_UNKNOWNSMPOUT\|ERR_UNKNOWNTAG\|ERR_UNKNUMFMT\|ERR_UNKPROTOCOL\|ERR_UNKTEXTFMT\|ERR_UNMPARENTHESES\|ERR_UNSETENV\|ERR_UNSUPPORTEDFEAT\|ERR_UNTERMINTDSTR\|ERR_UNTILWOREPEAT\|ERR_UPDATEICON\|ERR_UPLOADFORBIDDEN\|ERR_USERABORT\|ERR_VALUEEXPECTED\|ERR_VAREXPECTED\|ERR_VARLENGTH\|ERR_VARSYNTAX\|ERR_VECGFXPLUGIN\|ERR_VECTORANIM\|ERR_VECTORBRUSH\|ERR_VERSION\|ERR_VFONT\|ERR_VFONTTYPE\|ERR_VIDATTACHED\|ERR_VIDEOFRAME\|ERR_VIDEOINIT\|ERR_VIDEOLAYER\|ERR_VIDEOLAYERDRV\|ERR_VIDEOSTRATEGY\|ERR_VIDEOTRANS\|ERR_VIDLAYERFUNC\|ERR_VIDNOTPAUSED\|ERR_VIDNOTPLAYING\|ERR_VIDPAUSED\|ERR_VIDPLAYING\|ERR_VIDRECMULTI\|ERR_VIDRECTRANS\|ERR_VIDSTOPPED\|ERR_VISUALINFO\|ERR_VMMISMATCH\|ERR_WARPOS\|ERR_WENDWOWHILE\|ERR_WHILEWOWEND\|ERR_WINDOW\|ERR_WITHWOENDWITH\|ERR_WRITE\|ERR_WRITEFILE\|ERR_WRITEJPEG\|ERR_WRITEONLY\|ERR_WRONGCLIPREG\|ERR_WRONGCMDRECVIDEO\|ERR_WRONGDTYPE\|ERR_WRONGFLOAT\|ERR_WRONGHEX\|ERR_WRONGID\|ERR_WRONGOP\|ERR_WRONGOPCST\|ERR_WRONGSPRITESIZE\|ERR_WRONGUSAGE\|ERR_WRONGVSTRATEGY\|ERR_XCURSOR\|ERR_XDISPLAY\|ERR_XF86VIDMODEEXT\|ERR_XFIXES\|ERR_YIELD\|ERR_ZERODIVISION\|ERR_ZLIBDATA\|ERR_ZLIBIO\|ERR_ZLIBSTREAM\|ERR_ZLIBVERSION\|EVENTHANDLER\|FADE\|FASTMEMORY\|FASTSPEED\|FILE\|FILEATTR_ARCHIVE\|FILEATTR_DELETE_USR\|FILEATTR_EXECUTE_GRP\|FILEATTR_EXECUTE_OTH\|FILEATTR_EXECUTE_USR\|FILEATTR_HIDDEN\|FILEATTR_NORMAL\|FILEATTR_PURE\|FILEATTR_READ_GRP\|FILEATTR_READ_OTH\|FILEATTR_READ_USR\|FILEATTR_READONLY\|FILEATTR_SCRIPT\|FILEATTR_SYSTEM\|FILEATTR_WRITE_GRP\|FILEATTR_WRITE_OTH\|FILEATTR_WRITE_USR\|FILETYPE_ANIM\|FILETYPE_ICON\|FILETYPE_IMAGE\|FILETYPE_SOUND\|FILETYPE_VIDEO\|FILETYPEFLAGS_ALPHA\|FILETYPEFLAGS_FPS\|FILETYPEFLAGS_QUALITY\|FILETYPEFLAGS_SAVE\|FILLCOLOR\|FILLGRADIENT\|FILLNONE\|FILLRULEEVENODD\|FILLRULEWINDING\|FILLTEXTURE\|FLOAT\|FLOW_HARDWARE\|FLOW_OFF\|FLOW_XON_XOFF\|FONT\|FONTENGINE_INBUILT\|FONTENGINE_NATIVE\|FONTSLANT_ITALIC\|FONTSLANT_OBLIQUE\|FONTSLANT_ROMAN\|FONTTYPE_BITMAP\|FONTTYPE_COLOR\|FONTTYPE_VECTOR\|FONTWEIGHT_BLACK\|FONTWEIGHT_BOLD\|FONTWEIGHT_BOOK\|FONTWEIGHT_DEMIBOLD\|FONTWEIGHT_EXTRABLACK\|FONTWEIGHT_EXTRABOLD\|FONTWEIGHT_EXTRALIGHT\|FONTWEIGHT_HEAVY\|FONTWEIGHT_LIGHT\|FONTWEIGHT_MEDIUM\|FONTWEIGHT_NORMAL\|FONTWEIGHT_REGULAR\|FONTWEIGHT_SEMIBOLD\|FONTWEIGHT_THIN\|FONTWEIGHT_ULTRABLACK\|FONTWEIGHT_ULTRABOLD\|FONTWEIGHT_ULTRALIGHT\|FRAMEMODE_FULL\|FRAMEMODE_SINGLE\|FREESPACE\|FTPASCII\|FTPBINARY\|FUCHSIA\|FUNCTION\|GRAY\|GREEN\|HBLINDS128\|HBLINDS16\|HBLINDS32\|HBLINDS64\|HBLINDS8\|HCLOSECURTAIN\|HCLOSEGATE\|HEXNUMERICAL\|HFLIPCOIN\|HFLOWBOTTOM\|HFLOWTOP\|HIDEBRUSH\|HIDELAYER\|HKEY_CLASSES_ROOT\|HKEY_CURRENT_CONFIG\|HKEY_CURRENT_USER\|HKEY_LOCAL_MACHINE\|HKEY_USERS\|HLINES\|HLINES2\|HLOWFLIPCOIN\|HOLLYWOOD\|HOPENCURTAIN\|HOPENGATE\|HSPLIT\|HSTRANGEPUSH\|HSTRETCHCENTER\|HSTRIPES\|HSTRIPES16\|HSTRIPES2\|HSTRIPES32\|HSTRIPES4\|HSTRIPES64\|HSTRIPES8\|HW_64BIT\|HW_AMIGA\|HW_AMIGAOS3\|HW_AMIGAOS4\|HW_ANDROID\|HW_AROS\|HW_IOS\|HW_LINUX\|HW_LITTLE_ENDIAN\|HW_MACOS\|HW_MORPHOS\|HW_REVISION\|HW_VERSION\|HW_WARPOS\|HW_WINDOWS\|ICNFMT_HOLLYWOOD\|ICON\|IMAGETYPE_RASTER\|IMAGETYPE_VECTOR\|IMGFMT_BMP\|IMGFMT_GIF\|IMGFMT_ILBM\|IMGFMT_JPEG\|IMGFMT_NATIVE\|IMGFMT_PLUGIN\|IMGFMT_PNG\|IMGFMT_TIFF\|IMGFMT_UNKNOWN\|IMMERSIVE_LEANBACK\|IMMERSIVE_NONE\|IMMERSIVE_NORMAL\|IMMERSIVE_STICKY\|INACTIVEWINDOW\|INF\|INSERTBRUSH\|INTEGER\|INTERVAL\|IO_BUFFERED\|IO_FAKE64\|IO_LITTLEENDIAN\|IO_SIGNED\|IO_UNBUFFERED\|IO_UNSIGNED\|IPAUTO\|IPUNKNOWN\|IPV4\|IPV6\|ITALIC\|JOINBEVEL\|JOINMITER\|JOINROUND\|JOYDOWN\|JOYDOWNLEFT\|JOYDOWNRIGHT\|JOYLEFT\|JOYNODIR\|JOYRIGHT\|JOYUP\|JOYUPLEFT\|JOYUPRIGHT\|JUSTIFIED\|KEEPASPRAT\|KEEPPOSITION\|LANGUAGE_ABKHAZIAN\|LANGUAGE_AFAR\|LANGUAGE_AFRIKAANS\|LANGUAGE_AKAN\|LANGUAGE_ALBANIAN\|LANGUAGE_AMHARIC\|LANGUAGE_ARABIC\|LANGUAGE_ARAGONESE\|LANGUAGE_ARMENIAN\|LANGUAGE_ASSAMESE\|LANGUAGE_AVARIC\|LANGUAGE_AVESTAN\|LANGUAGE_AYMARA\|LANGUAGE_AZERBAIJANI\|LANGUAGE_BAMBARA\|LANGUAGE_BASHKIR\|LANGUAGE_BASQUE\|LANGUAGE_BELARUSIAN\|LANGUAGE_BENGALI\|LANGUAGE_BIHARI\|LANGUAGE_BISLAMA\|LANGUAGE_BOSNIAN\|LANGUAGE_BRETON\|LANGUAGE_BULGARIAN\|LANGUAGE_BURMESE\|LANGUAGE_CATALAN\|LANGUAGE_CENTRALKHMER\|LANGUAGE_CHAMORRO\|LANGUAGE_CHECHEN\|LANGUAGE_CHICHEWA\|LANGUAGE_CHINESE\|LANGUAGE_CHURCHSLAVIC\|LANGUAGE_CHUVASH\|LANGUAGE_CORNISH\|LANGUAGE_CORSICAN\|LANGUAGE_CREE\|LANGUAGE_CROATIAN\|LANGUAGE_CZECH\|LANGUAGE_DANISH\|LANGUAGE_DIVEHI\|LANGUAGE_DUTCH\|LANGUAGE_DZONGKHA\|LANGUAGE_ENGLISH\|LANGUAGE_ESPERANTO\|LANGUAGE_ESTONIAN\|LANGUAGE_EWE\|LANGUAGE_FAROESE\|LANGUAGE_FIJIAN\|LANGUAGE_FINNISH\|LANGUAGE_FRENCH\|LANGUAGE_FULAH\|LANGUAGE_GAELIC\|LANGUAGE_GALICIAN\|LANGUAGE_GANDA\|LANGUAGE_GEORGIAN\|LANGUAGE_GERMAN\|LANGUAGE_GREEK\|LANGUAGE_GREENLANDIC\|LANGUAGE_GUARANI\|LANGUAGE_GUJARATI\|LANGUAGE_HAITIAN\|LANGUAGE_HAUSA\|LANGUAGE_HEBREW\|LANGUAGE_HERERO\|LANGUAGE_HINDI\|LANGUAGE_HIRIMOTU\|LANGUAGE_HUNGARIAN\|LANGUAGE_ICELANDIC\|LANGUAGE_IDO\|LANGUAGE_IGBO\|LANGUAGE_INDONESIAN\|LANGUAGE_INTERLINGUA\|LANGUAGE_INTERLINGUE\|LANGUAGE_INUKTITUT\|LANGUAGE_INUPIAQ\|LANGUAGE_IRISH\|LANGUAGE_ITALIAN\|LANGUAGE_JAPANESE\|LANGUAGE_JAVANESE\|LANGUAGE_KANNADA\|LANGUAGE_KANURI\|LANGUAGE_KASHMIRI\|LANGUAGE_KAZAKH\|LANGUAGE_KIKUYU\|LANGUAGE_KINYARWANDA\|LANGUAGE_KIRGHIZ\|LANGUAGE_KOMI\|LANGUAGE_KONGO\|LANGUAGE_KOREAN\|LANGUAGE_KUANYAMA\|LANGUAGE_KURDISH\|LANGUAGE_LAO\|LANGUAGE_LATIN\|LANGUAGE_LATVIAN\|LANGUAGE_LIMBURGAN\|LANGUAGE_LINGALA\|LANGUAGE_LITHUANIAN\|LANGUAGE_LUBAKATANGA\|LANGUAGE_LUXEMBOURGISH\|LANGUAGE_MACEDONIAN\|LANGUAGE_MALAGASY\|LANGUAGE_MALAY\|LANGUAGE_MALAYALAM\|LANGUAGE_MALTESE\|LANGUAGE_MANX\|LANGUAGE_MAORI\|LANGUAGE_MARATHI\|LANGUAGE_MARSHALLESE\|LANGUAGE_MONGOLIAN\|LANGUAGE_NAURU\|LANGUAGE_NAVAJO\|LANGUAGE_NDONGA\|LANGUAGE_NEPALI\|LANGUAGE_NORTHERNSAMI\|LANGUAGE_NORTHNDEBELE\|LANGUAGE_NORWEGIAN\|LANGUAGE_NORWEGIANBOKMAL\|LANGUAGE_NORWEGIANNYNORSK\|LANGUAGE_OCCITAN\|LANGUAGE_OJIBWA\|LANGUAGE_ORIYA\|LANGUAGE_OROMO\|LANGUAGE_OSSETIAN\|LANGUAGE_PALI\|LANGUAGE_PANJABI\|LANGUAGE_PASHTO\|LANGUAGE_PERSIAN\|LANGUAGE_POLISH\|LANGUAGE_PORTUGUESE\|LANGUAGE_QUECHUA\|LANGUAGE_ROMANIAN\|LANGUAGE_ROMANSH\|LANGUAGE_RUNDI\|LANGUAGE_RUSSIAN\|LANGUAGE_SAMOAN\|LANGUAGE_SANGO\|LANGUAGE_SANSKRIT\|LANGUAGE_SARDINIAN\|LANGUAGE_SERBIAN\|LANGUAGE_SHONA\|LANGUAGE_SICHUANYI\|LANGUAGE_SINDHI\|LANGUAGE_SINHALA\|LANGUAGE_SLOVAK\|LANGUAGE_SLOVENIAN\|LANGUAGE_SOMALI\|LANGUAGE_SOUTHERNSOTHO\|LANGUAGE_SOUTHNDEBELE\|LANGUAGE_SPANISH\|LANGUAGE_SUNDANESE\|LANGUAGE_SWAHILI\|LANGUAGE_SWATI\|LANGUAGE_SWEDISH\|LANGUAGE_TAGALOG\|LANGUAGE_TAHITIAN\|LANGUAGE_TAJIK\|LANGUAGE_TAMIL\|LANGUAGE_TATAR\|LANGUAGE_TELUGU\|LANGUAGE_THAI\|LANGUAGE_TIBETAN\|LANGUAGE_TIGRINYA\|LANGUAGE_TONGA\|LANGUAGE_TSONGA\|LANGUAGE_TSWANA\|LANGUAGE_TURKISH\|LANGUAGE_TURKMEN\|LANGUAGE_TWI\|LANGUAGE_UIGHUR\|LANGUAGE_UKRAINIAN\|LANGUAGE_UNKNOWN\|LANGUAGE_URDU\|LANGUAGE_UZBEK\|LANGUAGE_VENDA\|LANGUAGE_VIETNAMESE\|LANGUAGE_WALLOON\|LANGUAGE_WELSH\|LANGUAGE_WESTERNFRISIAN\|LANGUAGE_WOLOF\|LANGUAGE_XHOSA\|LANGUAGE_YIDDISH\|LANGUAGE_YORUBA\|LANGUAGE_ZHUANG\|LANGUAGE_ZULU\|LAYER\|LAYER_VS_BOX\|LAYERBUTTON\|LEFT\|LEFTOUT\|LIGHTUSERDATA\|LIME\|LINE\|LINEAR\|LITTLEENDIAN\|LONG\|LOWERCURVE\|MAROON\|MASK\|MASKAND\|MASKINVISIBLE\|MASKOR\|MASKVANILLACOPY\|MASKVISIBLE\|MASKXOR\|MEMORY\|MENU\|MENUITEM_DISABLED\|MENUITEM_RADIO\|MENUITEM_SELECTED\|MENUITEM_TOGGLE\|MILLISECONDS\|MODE_READ\|MODE_READWRITE\|MODE_WRITE\|MODLALT\|MODLCOMMAND\|MODLCONTROL\|MODLSHIFT\|MODRALT\|MODRCOMMAND\|MODRCONTROL\|MODRSHIFT\|MONO16\|MONO8\|MONOSPACE\|MOVEFILE_COPY\|MOVEFILE_COPYFAILED\|MOVEFILE_DELETE\|MOVEFILE_DELETEFAILED\|MOVEFILE_UNPROTECT\|MOVELIST\|MOVEWINDOW\|MUSIC\|NAN\|NATIVE\|NATIVEENDIAN\|NAVY\|NETWORKCONNECTION\|NETWORKSERVER\|NETWORKUDP\|NEXTFRAME\|NEXTFRAME2\|NIL\|NOCOLOR\|NONE\|NOPEN\|NORMAL\|NORMALSPEED\|NOTRANSPARENCY\|NUMBER\|NUMERICAL\|OLIVE\|ONBUTTONCLICK\|ONBUTTONCLICKALL\|ONBUTTONOVER\|ONBUTTONOVERALL\|ONBUTTONRIGHTCLICK\|ONBUTTONRIGHTCLICKALL\|ONKEYDOWN\|ONKEYDOWNALL\|ORIENTATION_LANDSCAPE\|ORIENTATION_LANDSCAPEREV\|ORIENTATION_NONE\|ORIENTATION_PORTRAIT\|ORIENTATION_PORTRAITREV\|PALETTE\|PALETTE_AGA\|PALETTE_CGA\|PALETTE_DEFAULT\|PALETTE_EGA\|PALETTE_GRAY128\|PALETTE_GRAY16\|PALETTE_GRAY256\|PALETTE_GRAY32\|PALETTE_GRAY4\|PALETTE_GRAY64\|PALETTE_GRAY8\|PALETTE_MACINTOSH\|PALETTE_MONOCHROME\|PALETTE_OCS\|PALETTE_WINDOWS\|PALETTE_WORKBENCH\|PALETTEMODE_PEN\|PALETTEMODE_REMAP\|PARITY_EVEN\|PARITY_NONE\|PARITY_ODD\|PERMREQ_READEXTERNAL\|PERMREQ_WRITEEXTERNAL\|PI\|PIXELZOOM1\|PIXELZOOM2\|PLOT\|PLUGINCAPS_ANIM\|PLUGINCAPS_AUDIOADAPTER\|PLUGINCAPS_CONVERT\|PLUGINCAPS_DIRADAPTER\|PLUGINCAPS_DISPLAYADAPTER\|PLUGINCAPS_EXTENSION\|PLUGINCAPS_FILEADAPTER\|PLUGINCAPS_ICON\|PLUGINCAPS_IMAGE\|PLUGINCAPS_IPCADAPTER\|PLUGINCAPS_LIBRARY\|PLUGINCAPS_NETWORKADAPTER\|PLUGINCAPS_REQUESTERADAPTER\|PLUGINCAPS_REQUIRE\|PLUGINCAPS_SAVEANIM\|PLUGINCAPS_SAVEICON\|PLUGINCAPS_SAVEIMAGE\|PLUGINCAPS_SAVESAMPLE\|PLUGINCAPS_SERIALIZE\|PLUGINCAPS_SOUND\|PLUGINCAPS_TIMERADAPTER\|PLUGINCAPS_VECTOR\|PLUGINCAPS_VIDEO\|POINTER\|POLYGON\|PRGTYPE_APPLET\|PRGTYPE_PROGRAM\|PRGTYPE_SCRIPT\|PRINT\|PURPLE\|PUSHBOTTOM\|PUSHLEFT\|PUSHRIGHT\|PUSHTOP\|PUZZLE\|QUADRECT\|QUARTERS\|RADIAL\|RANDOMEFFECT\|RANDOMPARAMETER\|RECEIVEALL\|RECEIVEBYTES\|RECEIVEDATA_PACKET\|RECEIVELINE\|RECTBACKCENTER\|RECTBACKEAST\|RECTBACKNORTH\|RECTBACKNORTHEAST\|RECTBACKNORTHWEST\|RECTBACKSOUTH\|RECTBACKSOUTHEAST\|RECTBACKSOUTHWEST\|RECTBACKWEST\|RECTCENTER\|RECTEAST\|RECTNORTH\|RECTNORTHEAST\|RECTNORTHWEST\|RECTSOUTH\|RECTSOUTHEAST\|RECTSOUTHWEST\|RECTWEST\|RED\|REMOVELAYER\|REQ_CAMERA\|REQ_GALLERY\|REQ_HIDEICONS\|REQ_MULTISELECT\|REQ_NORMAL\|REQ_SAVEMODE\|REQICON_ERROR\|REQICON_INFORMATION\|REQICON_NONE\|REQICON_QUESTION\|REQICON_WARNING\|REVEALBOTTOM\|REVEALLEFT\|REVEALRIGHT\|REVEALTOP\|RIGHT\|RIGHTOUT\|ROLLLEFT\|ROLLTOP\|RTS_OFF\|RTS_ON\|SAMPLE\|SANS\|SCALEMODE_AUTO\|SCALEMODE_LAYER\|SCALEMODE_NONE\|SCROLLBOTTOM\|SCROLLEAST\|SCROLLLEFT\|SCROLLNORTH\|SCROLLNORTHEAST\|SCROLLNORTHWEST\|SCROLLRIGHT\|SCROLLSOUTH\|SCROLLSOUTHEAST\|SCROLLSOUTHWEST\|SCROLLTOP\|SCROLLWEST\|SECONDS\|SEEK_BEGINNING\|SEEK_CURRENT\|SEEK_END\|SELMODE_COMBO\|SELMODE_LAYERS\|SELMODE_NORMAL\|SERIAL\|SERIF\|SERVER\|SHADOW\|SHAPE\|SHDWEAST\|SHDWNORTH\|SHDWNORTHEAST\|SHDWNORTHWEST\|SHDWSOUTH\|SHDWSOUTHEAST\|SHDWSOUTHWEST\|SHDWWEST\|SHORT\|SILVER\|SIMPLEBUTTON\|SINE\|SIZEWINDOW\|SLIDEBOTTOM\|SLIDELEFT\|SLIDERIGHT\|SLIDETOP\|SLOWSPEED\|SMOOTHOUT\|SMPFMT_WAVE\|SNAPDESKTOP\|SNAPDISPLAY\|SNAPWINDOW\|SPIRAL\|SPRITE\|SPRITE_VS_BOX\|SPRITE_VS_BRUSH\|STAR\|STDERR\|STDIN\|STDOUT\|STDPTR_BUSY\|STDPTR_CUSTOM\|STDPTR_SYSTEM\|STEREO16\|STEREO8\|STOP_1\|STOP_2\|STRETCHBOTTOM\|STRETCHLEFT\|STRETCHRIGHT\|STRETCHTOP\|STRING\|STRUDEL\|SUN\|SWISS\|TABLE\|TEAL\|TEXTOBJECT\|TEXTOUT\|THREAD\|TICKS\|TIMEOUT\|TIMER\|TOP\|TOPOUT\|TRUETYPE_DEFAULT\|TURNDOWNBOTTOM\|TURNDOWNLEFT\|TURNDOWNRIGHT\|TURNDOWNTOP\|UDPCLIENT\|UDPNONE\|UDPOBJECT\|UDPSERVER\|UNDERLINED\|UNDO\|UPLOADFILE_RESPONSE\|UPLOADFILE_STATUS\|UPNDOWN\|UPPERCURVE\|USEDSPACE\|USELAYERPOSITION\|USERDATA\|VANILLACOPY\|VBLINDS128\|VBLINDS16\|VBLINDS32\|VBLINDS64\|VBLINDS8\|VCLOSECURTAIN\|VCLOSEGATE\|VECTORPATH\|VFLIPCOIN\|VFLOWLEFT\|VFLOWRIGHT\|VIDDRV_HOLLYWOOD\|VIDDRV_OS\|VIDEO\|VIEWMODE_DATE\|VIEWMODE_ICONS\|VIEWMODE_NAME\|VIEWMODE_NONE\|VIEWMODE_SIZE\|VIEWMODE_TYPE\|VLINES\|VLINES2\|VLOWFLIPCOIN\|VOID\|VOPENCURTAIN\|VOPENGATE\|VSPLIT\|VSTRANGEPUSH\|VSTRETCHCENTER\|VSTRIPES\|VSTRIPES16\|VSTRIPES2\|VSTRIPES32\|VSTRIPES4\|VSTRIPES64\|VSTRIPES8\|WALLPAPERLEFT\|WALLPAPERTOP\|WATER1\|WATER2\|WATER3\|WATER4\|WHITE\|WORD\|YELLOW\|ZOOMCENTER\|ZOOMEAST\|ZOOMIN\|ZOOMNORTH\|ZOOMNORTHEAST\|ZOOMNORTHWEST\|ZOOMOUT\|ZOOMSOUTH\|ZOOMSOUTHEAST\|ZOOMSOUTHWEST\|ZOOMWEST\)\>" +" Hollywood Functions +syn keyword hwFunction Abs ACos ActivateDisplay Add AddArcToPath AddBoxToPath AddCircleToPath AddEllipseToPath AddFontPath AddIconImage AddMove AddStr AddTab AddTextToPath AllocConsoleColor AllocMem AllocMemFromPointer AllocMemFromVirtualFile AppendPath ApplyPatch Arc ArcDistortBrush ARGB ArrayToStr Asc ASin Assert AsyncDrawFrame ATan ATan2 BarrelDistortBrush Base64Str Beep BeepConsole BeginAnimStream BeginDoubleBuffer BeginRefresh BGPicToBrush BinStr BitClear BitComplement BitSet BitTest BitXor Blue BlurBrush Box BreakEventHandler BreakWhileMouseOn BrushToBGPic BrushToGray BrushToMonochrome BrushToPenArray BrushToRGBArray ByteAsc ByteChr ByteLen ByteOffset ByteStrStr ByteVal CallJavaMethod CancelAsyncDraw CancelAsyncOperation CanonizePath Cast Ceil ChangeApplicationIcon ChangeBrushTransparency ChangeDirectory ChangeDisplayMode ChangeDisplaySize ChangeInterval CharcoalBrush CharOffset CharWidth CheckEvent CheckEvents Chr Circle ClearClipboard ClearConsole ClearConsoleStyle ClearEvents ClearInterval ClearMove ClearObjectData ClearPath ClearScreen ClearSerialQueue ClearTimeout CloseAmigaGuide CloseAnim CloseAudio CloseCatalog CloseConnection CloseConsole CloseDirectory CloseDisplay CloseFile CloseFont CloseMusic ClosePath CloseResourceMonitor CloseSerialPort CloseServer CloseUDPObject CloseVideo Cls CollectGarbage Collision ColorRequest CompareDates CompareStr CompressFile Concat ConfigureJoystick ConsolePrint ConsolePrintChr ConsolePrintNR ConsolePrompt ContinueAsyncOperation ContrastBrush ContrastPalette ConvertStr ConvertToBrush CopyAnim CopyBGPic CopyBrush CopyConsoleWindow CopyFile CopyLayer CopyMem CopyObjectData CopyPalette CopyPath CopyPens CopySample CopySprite CopyTable CopyTextObject Cos CountDirectoryEntries CountJoysticks CountStr CRC32 CRC32Str CreateAnim CreateBGPic CreateBorderBrush CreateBrush CreateButton CreateClipRegion CreateConsoleWindow CreateCoroutine CreateDisplay CreateFont CreateGradientBGPic CreateGradientBrush CreateIcon CreateKeyDown CreateLayer CreateList CreateMenu CreateMusic CreatePalette CreatePointer CreatePort CreateRainbowBGPic CreateRexxPort CreateSample CreateServer CreateShadowBrush CreateShortcut CreateSprite CreateTextObject CreateTexturedBGPic CreateTexturedBrush CreateUDPObject CropBrush CtrlCQuit CurveTo CyclePalette DateToTimestamp DateToUTC DebugOutput DebugPrint DebugPrintNR DebugPrompt DebugStr DebugVal DecomposeConsoleChr DecompressFile DecreasePointer DefineVirtualFile DefineVirtualFileFromString Deg DeleteAlphaChannel DeleteButton DeleteConsoleChr DeleteConsoleLine DeleteFile DeleteMask DeletePrefs DeselectMenuItem DeserializeTable DirectoryItems DisableAdvancedConsole DisableButton DisableEvent DisableEventHandler DisableLayers DisableLineHook DisableMenuItem DisablePlugin DisablePrecalculation DisableVWait DisplayAnimFrame DisplayBGPic DisplayBGPicPart DisplayBGPicPartFX DisplayBrush DisplayBrushFX DisplayBrushPart DisplaySprite DisplayTextObject DisplayTextObjectFX DisplayTransitionFX DisplayVideoFrame Div DoMove DownloadFile DrawConsoleBorder DrawConsoleBox DrawConsoleHLine DrawConsoleVLine DrawPath DumpButtons DumpLayers DumpMem DumpVideo DumpVideoTime EdgeBrush Ellipse EmbossBrush EmptyStr EnableAdvancedConsole EnableButton EnableEvent EnableEventHandler EnableLayers EnableLineHook EnableMenuItem EnablePlugin EnablePrecalculation EnableVWait End EndDoubleBuffer EndianSwap EndRefresh EndSelect EndsWith Eof EraseConsole Error EscapeQuit Eval Execute Exists ExitOnError Exp ExtendBrush ExtractPalette FileAttributes FileLength FileLines FilePart FilePos FileRequest FileSize FileToString FillMem FillMusicBuffer FindStr FinishAnimStream FinishAsyncDraw FlashConsole Flip FlipBrush FlipSprite FloodFill Floor FlushFile FlushMusicBuffer FlushSerialPort FontRequest ForcePathUse ForceSound ForceVideoDriver ForceVideoMode ForEach ForEachI FormatConsoleLine FormatDate FormatNumber FormatStr Frac FreeAnim FreeBGPic FreeBrush FreeClipRegion FreeConsoleColor FreeConsoleWindow FreeDisplay FreeEventCache FreeGlyphCache FreeIcon FreeLayers FreeMem FreeMenu FreeModule FreePalette FreePath FreePointer FreeSample FreeSprite FreeTextObject FrExp FullPath GammaBrush GammaPalette GCInfo GetAllocConsoleColor GetAnimFrame GetApplicationInfo GetApplicationList GetAsset GetAttribute GetAvailableFonts GetBaudRate GetBestPen GetBrushLink GetBrushPen GetBulletColor GetCatalogString GetChannels GetCharMaps GetClipboard GetCommandLine GetConnectionIP GetConnectionPort GetConnectionProtocol GetConsoleBackground GetConsoleChr GetConsoleColor GetConsoleControlChr GetConsoleCursor GetConsoleOrigin GetConsoleSize GetConsoleStr GetConsoleStyle GetConsoleWindow GetConstant GetCoroutineStatus GetCountryInfo GetCurrentDirectory GetCurrentPoint GetDash GetDataBits GetDate GetDateNum GetDefaultAdapter GetDefaultEncoding GetDefaultLoader GetDirectoryEntry GetDisplayModes GetDTR GetEnv GetErrorName GetEventCode GetFileArgument GetFileAttributes GetFillRule GetFillStyle GetFlowControl GetFontColor GetFontStyle GetFormStyle GetFPSLimit GetFreePen GetFrontScreen GetHostName GetIconProperties GetItem GetKerningPair GetLanguageInfo GetLastError GetLayerAtPos GetLayerGroupMembers GetLayerGroups GetLayerPen GetLayerStyle GetLineCap GetLineJoin GetLineWidth GetLocaleInfo GetLocalInterfaces GetLocalIP GetLocalPort GetLocalProtocol GetMACAddress GetMemoryInfo GetMemPointer GetMemString GetMetaTable GetMiterLimit GetMonitors GetObjectData GetObjects GetObjectType GetPalettePen GetParity GetPathExtents GetPatternPosition GetPen GetPlugins GetProgramDirectory GetProgramInfo GetPubScreens GetRandomColor GetRandomFX GetRawArguments GetRealColor GetRTS GetSampleData GetSerializeMode GetShortcutPath GetSongPosition GetStartDirectory GetStopBits GetSystemCountry GetSystemInfo GetSystemLanguage GetTempFileName GetTime GetTimer GetTimestamp GetTimeZone GetType GetVersion GetVideoFrame GetVolumeInfo GetVolumeName GetWeekday Gosub Goto GrabDesktop Green GroupLayer HasItem HaveConsole HaveFreeChannel HaveItem HaveObject HaveObjectData HavePlugin HaveVolume HexStr HideConsoleCursor HideDisplay HideKeyboard HideLayer HideLayerFX HidePointer HideScreen Hypot IgnoreCase IIf ImageRequest IncreasePointer InitConsoleColor InKeyStr InsertConsoleChr InsertConsoleLine InsertConsoleStr InsertItem InsertLayer InsertSample InsertStr InstallEventHandler Int Intersection InvertAlphaChannel InvertBrush InvertMask InvertPalette IPairs IsAbsolutePath IsAlNum IsAlpha IsAnim IsAnimPlaying IsBrushEmpty IsChannelPlaying IsCntrl IsDigit IsDirectory IsFinite IsGraph IsInf IsKeyDown IsLeftMouse IsLower IsMenuItemDisabled IsMenuItemSelected IsMidMouse IsModule IsMusic IsMusicPlaying IsNan IsNil IsOnline IsPathEmpty IsPicture IsPrint IsPunct IsRightMouse IsSample IsSamplePlaying IsSound IsSpace IsTableEmpty IsUnicode IsUpper IsVideo IsVideoPlaying IsXDigit JoyAxisX JoyAxisY JoyAxisZ JoyButton JoyDir JoyFire Label JoyHat LayerExists LayerGroupExists LayerToBack LayerToFront Ld LdExp LeftMouseQuit LeftStr LegacyControl Limit Line LineTo ListItems ListRequest Ln LoadAnim LoadAnimFrame LoadBGPic LoadBrush LoadIcon LoadModule LoadPalette LoadPlugin LoadPrefs LoadSample LoadSprite Locate Log LowerStr MakeButton MakeConsoleChr MakeDate MakeDirectory MakeHostPath MatchPattern Matrix2D Max MD5 MD5Str MemToTable MergeLayers MidStr Min MixBrush MixRGB MixSample Mod ModifyAnimFrames ModifyButton ModifyKeyDown ModifyLayerFrames ModulateBrush ModulatePalette MonitorDirectory MouseX MouseY MoveAnim MoveBrush MoveConsoleWindow MoveDisplay MoveFile MoveLayer MovePointer MoveSprite MoveTextObject MoveTo Mul NearlyEqual NextDirectoryEntry NextFrame NextItem NormalizePath NPrint OilPaintBrush OpenAmigaGuide OpenAnim OpenAudio OpenCatalog OpenConnection OpenConsole OpenDirectory OpenDisplay OpenFile OpenFont OpenMusic OpenResourceMonitor OpenSerialPort OpenURL OpenVideo Pack PadNum Pairs PaletteToGray ParseDate PathItems PathPart PathRequest PathToBrush PatternFindStr PatternFindStrDirect PatternFindStrShort PatternReplaceStr PauseLayer PauseModule PauseMusic PauseTimer PauseVideo Peek PeekClipboard PenArrayToBrush PerformSelector PermissionRequest PerspectiveDistortBrush Pi PixelateBrush PlayAnim PlayAnimDisk PlayLayer PlayModule PlayMusic PlaySample PlaySubsong PlayVideo Plot Poke PolarDistortBrush PollSerialQueue Polygon PopupMenu Pow Print QuantizeBrush Rad RaiseOnError RasterizeBrush RawDiv RawEqual RawGet RawSet ReadBrushPixel ReadByte ReadBytes ReadChr ReadConsoleKey ReadConsoleStr ReadDirectory ReadFloat ReadFunction ReadInt ReadLine ReadMem ReadPen ReadPixel ReadRegistryKey ReadSerialData ReadShort ReadString ReadTable ReceiveData ReceiveUDPData Red ReduceAlphaChannel RefreshConsole RefreshDisplay RefreshLayer RelCurveTo RelLineTo RelMoveTo RemapBrush RemoveBrushPalette RemoveButton RemoveIconImage RemoveItem RemoveKeyDown RemoveLayer RemoveLayerFX RemoveLayers RemoveSprite RemoveSprites Rename RenderLayer RepeatStr ReplaceColors ReplaceStr ResetKeyStates ResetTabs ResetTimer ResolveHostName ResumeCoroutine ResumeLayer ResumeModule ResumeMusic ResumeTimer ResumeVideo ReverseFindStr ReverseStr RewindDirectory RGB RGBArrayToBrush RightStr Rnd RndF RndStrong Rol Ror RotateBrush RotateLayer RotateTextObject Round Rt Run RunCallback RunRexxScript Sar SaveAnim SaveBrush SaveIcon SavePalette SavePrefs SaveSample SaveSnapshot ScaleAnim ScaleBGPic ScaleBrush ScaleLayer ScaleSprite ScaleTextObject ScrollConsole Seek SeekLayer SeekMusic SeekVideo SelectAlphaChannel SelectAnim SelectBGPic SelectBrush SelectConsoleWindow SelectDisplay SelectLayer SelectMask SelectMenuItem SelectPalette SendApplicationMessage SendData SendMessage SendRexxCommand SendUDPData SepiaToneBrush SerializeTable SetAllocConsoleColor SetAlphaIntensity SetAnimFrameDelay SetAttribute SetBaudRate SetBorderPen SetBrushDepth SetBrushPalette SetBrushPen SetBrushTransparency SetBrushTransparentPen SetBulletColor SetBulletPen SetChannelVolume SetClipboard SetClipRegion SetConsoleBackground SetConsoleColor SetConsoleCursor SetConsoleOptions SetConsoleStyle SetConsoleTitle SetCycleTable SetDash SetDataBits SetDefaultAdapter SetDefaultEncoding SetDefaultLoader SetDepth SetDisplayAttributes SetDitherMode SetDrawPen SetDrawTagsDefault SetDTR SetEnv SetEventTimeout SetFileAttributes SetFileEncoding SetFillRule SetFillStyle SetFlowControl SetFont SetFontColor SetFontStyle SetFormStyle SetFPSLimit SetGradientPalette SetIconProperties SetInterval SetIOMode SetLayerAnchor SetLayerBorder SetLayerDepth SetLayerFilter SetLayerLight SetLayerName SetLayerPalette SetLayerPen SetLayerShadow SetLayerStyle SetLayerTint SetLayerTransparency SetLayerTransparentPen SetLayerVolume SetLayerZPos SetLineCap SetLineJoin SetLineWidth SetListItems SetMargins SetMaskMode SetMasterVolume SetMetaTable SetMiterLimit SetMusicVolume SetNetworkProtocol SetNetworkTimeout SetObjectData SetPalette SetPaletteDepth SetPaletteMode SetPalettePen SetPaletteTransparentPen SetPanning SetParity SetPen SetPitch SetPointer SetRTS SetScreenTitle SetSerializeMode SetSerializeOptions SetShadowPen SetSpriteZPos SetStandardIconImage SetStandardPalette SetStopBits SetSubtitle SetTimeout SetTimerElapse SetTitle SetTransparentPen SetTransparentThreshold SetTrayIcon SetVarType SetVectorEngine SetVideoPosition SetVideoSize SetVideoVolume SetVolume SetWBIcon Sgn SharpenBrush Shl ShowConsoleCursor ShowDisplay ShowKeyboard ShowLayer ShowLayerFX ShowNotification ShowPointer ShowRinghioMessage ShowScreen ShowToast Shr Sin Sleep SolarizeBrush SolarizePalette Sort SplitStr Sqrt StartConsoleColorMode StartPath StartSubPath StartsWith StartTimer StopAnim StopChannel StopLayer StopModule StopMusic StopSample StopTimer StopVideo StringRequest StringToFile StripStr StrLen StrStr StrToArray Sub SwapLayers SwirlBrush SystemRequest TableItems TableToMem Tan TextExtent TextHeight TextOut TextWidth TimerElapsed TimestampToDate TintBrush TintPalette ToHostName ToIP ToNumber ToString TouchConsoleWindow ToUserData TransformBox TransformBrush TransformLayer TransformPoint TransformTextObject TranslateLayer TranslatePath TrimBrush TrimStr UndefineVirtualStringFile Undo UndoFX UngroupLayer UnleftStr UnmidStr Unpack UnrightStr UnsetEnv UploadFile UpperStr Usage UseCarriageReturn UseFont UTCToDate Val ValidateDate ValidateStr Vibrate VWait Wait WaitAnimEnd WaitEvent WaitKeyDown WaitLeftMouse WaitMidMouse WaitMusicEnd WaitPatternPosition WaitRightMouse WaitSampleEnd WaitSongPosition WaitTimer WaterRippleBrush WhileKeyDown WhileMouseDown WhileMouseOn WhileRightMouseDown Wrap WriteAnimFrame WriteBrushPixel WriteByte WriteBytes WriteChr WriteFloat WriteFunction WriteInt WriteLine WriteMem WritePen WriteRegistryKey WriteSerialData WriteShort WriteString WriteTable YieldCoroutine + +" user-defined constants +syn match hwUserConstant "#\<\(\u\|_\|-\|\d\)\+\>\$\?" +" user-defined functions +syn match hwUserFunction "\("me=e-1 + +" Comments +syn keyword hwTodo contained TODO FIXME XXX +syn match hwComment ";.*$" contains=hwTodo,@Spell +syn region hwComment matchgroup=hwComment start="/\*" end="\*/" contains=hwTodo,@Spell + + +" Strings +syn match hwSpecial contained #\\[\\abfnrtvz'"]\|\\x[[:xdigit:]]\{2}\|\\[[:digit:]]\{,3}# +syn region hwString start=+'+hs=s+1 end=+'+he=e-1 skip=+\\\\\|\\'+ contains=hwSpecial,@Spell +syn region hwString start=+"+hs=s+1 end=+"+he=e-1 skip=+\\\\\|\\"+ contains=hwSpecial,@Spell + +" integer number +syn match hwNumber "\<\d\+\>" +" floating point number, with dot, optional exponent +syn match hwNumber "\<\d\+\.\d*\%([eE][-+]\=\d\+\)\=\>" +" floating point number, starting with a dot, optional exponent +syn match hwNumber "\.\d\+\%([eE][-+]\=\d\+\)\=\>" +" floating point number, without dot, with exponent +syn match hwNumber "\<\d\+[eE][-+]\=\d\+\>" + +" hex numbers +syn match hwNumber "\<0[xX]\x\+\>" +syn match hwNumber "\<0[xX][[:xdigit:].]\+\%([pP][-+]\=\d\+\)\=\>" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link hwPreProcessor PreProc +hi def link hwStatement Statement +hi def link hwFallThrough Statement +hi def link hwRepeat Repeat +hi def link hwFor Repeat +hi def link hwString PmenuSel +hi def link hwNumber Number +hi def link hwOperator Operator +hi def link hwStep Operator +hi def link hwIn Operator +hi def link hwUserConstant Constant +hi def link hwConstant Constant +hi def link hwLineStatement Conditional +hi def link hwCond Conditional +hi def link hwElseIf Conditional +hi def link hwFunction Function +hi def link hwUserFunction Function +hi def link hwComment MoreMsg +hi def link hwTodo Todo +hi def link hwTable Structure +hi def link hwError Error +hi def link hwParenError Error +hi def link hwBraceError Error +hi def link hwSpecial SpecialChar +hi def link hwLabel Label + + +let b:current_syntax = "hollywood" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: et ts=8 sw=2 diff --git a/.config/vim/syntax/hostconf.vim b/.config/vim/syntax/hostconf.vim new file mode 100644 index 0000000..593ed72 --- /dev/null +++ b/.config/vim/syntax/hostconf.vim @@ -0,0 +1,147 @@ +" Vim syntax file +" Language: host.conf(5) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2007-06-25 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword hostconfTodo + \ contained + \ TODO + \ FIXME + \ XXX + \ NOTE + +syn match hostconfComment + \ display + \ contained + \ '\s*#.*' + \ contains=hostconfTodo, + \ @Spell + +syn match hostconfBegin + \ display + \ '^' + \ nextgroup=hostconfComment,hostconfKeyword + \ skipwhite + +syn keyword hostconfKeyword + \ contained + \ order + \ nextgroup=hostconfLookupOrder + \ skipwhite + +let s:orders = ['bind', 'hosts', 'nis'] + +function s:permute_suffixes(list) + if empty(a:list) + return [] + elseif len(a:list) == 1 + return a:list[0] + else + let i = 0 + let n = len(a:list) + let sub_permutations = [] + while i < n + let list_copy = copy(a:list) + let removed = list_copy[i] + call remove(list_copy, i) + call add(sub_permutations, [removed, s:permute_suffixes(list_copy)]) + let i += 1 + endwhile + return sub_permutations + endif +endfunction + +function s:generate_suffix_groups(list_of_order_of_orders, context, trailing_context) + for order_of_orders in a:list_of_order_of_orders + let order = order_of_orders[0] + let trailing_context = a:trailing_context . toupper(order[0]) . order[1:] + let nextgroup = 'hostconfLookupOrder' . trailing_context + let nextgroup_delimiter = nextgroup . 'Delimiter' + let group = 'hostconfLookupOrder' . a:context + execute 'syn keyword' group 'contained' order 'nextgroup=' . nextgroup_delimiter 'skipwhite' + execute 'syn match' nextgroup_delimiter 'contained display "," nextgroup=' . nextgroup 'skipwhite' + if a:context != "" + execute 'hi def link' group 'hostconfLookupOrder' + endif + execute 'hi def link' nextgroup_delimiter 'hostconfLookupOrderDelimiter' + let context = trailing_context + if type(order_of_orders[1]) == type([]) + call s:generate_suffix_groups(order_of_orders[1], context, trailing_context) + else + execute 'syn keyword hostconfLookupOrder' . context 'contained' order_of_orders[-1] + execute 'hi def link hostconfLookupOrder' . context 'hostconfLookupOrder' + endif + endfor +endfunction + +call s:generate_suffix_groups(s:permute_suffixes(s:orders), "", "") + +delfunction s:generate_suffix_groups +delfunction s:permute_suffixes + +syn keyword hostconfKeyword + \ contained + \ trim + \ nextgroup=hostconfDomain + \ skipwhite + +syn match hostconfDomain + \ contained + \ '\.[^:;,[:space:]]\+' + \ nextgroup=hostconfDomainDelimiter + \ skipwhite + +syn match hostconfDomainDelimiter + \ contained + \ display + \ '[:;,]' + \ nextgroup=hostconfDomain + \ skipwhite + +syn keyword hostconfKeyword + \ contained + \ multi + \ nospoof + \ spoofalert + \ reorder + \ nextgroup=hostconfBoolean + \ skipwhite + +syn keyword hostconfBoolean + \ contained + \ on + \ off + +syn keyword hostconfKeyword + \ contained + \ spoof + \ nextgroup=hostconfSpoofValue + \ skipwhite + +syn keyword hostconfSpoofValue + \ contained + \ off + \ nowarn + \ warn + +hi def link hostconfTodo Todo +hi def link hostconfComment Comment +hi def link hostconfKeyword Keyword +hi def link hostconfLookupOrder Identifier +hi def link hostconfLookupOrderDelimiter Delimiter +hi def link hostconfDomain String +hi def link hostconfDomainDelimiter Delimiter +hi def link hostconfBoolean Boolean +hi def link hostconfSpoofValue hostconfBoolean + +let b:current_syntax = "hostconf" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/hostsaccess.vim b/.config/vim/syntax/hostsaccess.vim new file mode 100644 index 0000000..7201816 --- /dev/null +++ b/.config/vim/syntax/hostsaccess.vim @@ -0,0 +1,23 @@ +" Vim syntax file +" Language: hosts.deny, hosts.allow configuration files +" Maintainer: Thilo Six +" Last Change: 2011 May 01 +" Derived From: conf.vim +" Credits: Bram Moolenaar +" +" This file is there to get at least a minimal highlighting. +" A later version may be improved. + + +" Quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" For a starter we just use conf.vim for highlighting +runtime! syntax/conf.vim +unlet b:current_syntax + + +let b:current_syntax = "hostsaccess" +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/html.vim b/.config/vim/syntax/html.vim new file mode 100644 index 0000000..0e615b7 --- /dev/null +++ b/.config/vim/syntax/html.vim @@ -0,0 +1,414 @@ +" Vim syntax file +" Language: HTML +" Maintainer: Doug Kearns +" Previous Maintainers: Jorge Maldonado Ventura +" Claudio Fleiner +" Last Change: 2023 Nov 28 +" 2024 Jul 30 by Vim Project: increase syn-sync-minlines to 250 +" 2025 May 10 by Vim Project: update comment + +" See :help html.vim for some comments and a description of the options + +" quit when a syntax file was already loaded +if !exists("main_syntax") + if exists("b:current_syntax") + finish + endif + let main_syntax = 'html' +endif + +let s:cpo_save = &cpo +set cpo&vim + +syntax spell toplevel + +syn include @htmlXml syntax/xml.vim +unlet b:current_syntax + +syn case ignore + +" mark illegal characters +syn match htmlError "[<>&]" + +" tags +syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc +syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc +syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=javaScriptExpression,@htmlPreproc +syn region htmlEndTag start=++ contains=htmlTagN,htmlTagError +syn region htmlTag start=+<[^/]+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster +syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster +syn match htmlTagN contained +]<"ms=s+1 + +" tag names +syn keyword htmlTagName contained address applet area a base basefont +syn keyword htmlTagName contained big blockquote br caption center +syn keyword htmlTagName contained cite code dd dfn dir div dl dt font +syn keyword htmlTagName contained form hr html img +syn keyword htmlTagName contained input isindex kbd li link map menu +syn keyword htmlTagName contained meta ol option param pre p samp span +syn keyword htmlTagName contained select small strike sub sup +syn keyword htmlTagName contained table td textarea th tr tt ul var xmp +syn match htmlTagName contained "\<\%(b\|i\|u\|h[1-6]\|em\|strong\|head\|body\|title\)\>" + +" new html 4.0 tags +syn keyword htmlTagName contained abbr acronym bdo button col colgroup +syn keyword htmlTagName contained del fieldset iframe ins label legend +syn keyword htmlTagName contained object optgroup q s tbody tfoot thead + +" new html 5 tags +syn keyword htmlTagName contained article aside audio bdi canvas data +syn keyword htmlTagName contained datalist details dialog embed figcaption +syn keyword htmlTagName contained figure footer header hgroup keygen main +syn keyword htmlTagName contained mark menuitem meter nav output picture +syn keyword htmlTagName contained progress rb rp rt rtc ruby search section +syn keyword htmlTagName contained slot source summary template time track +syn keyword htmlTagName contained video wbr + +" svg and math tags +syn keyword htmlMathTagName contained math +syn keyword htmlSvgTagName contained svg + +syn region htmlMath start="" end="" contains=@htmlXml transparent keepend +syn region htmlSvg start="" end="" contains=@htmlXml transparent keepend + +syn cluster xmlTagHook add=htmlMathTagName,htmlSvgTagName + +" legal arg names +syn keyword htmlArg contained action +syn keyword htmlArg contained align alink alt archive background bgcolor +syn keyword htmlArg contained border bordercolor cellpadding +syn keyword htmlArg contained cellspacing checked class clear code codebase color +syn keyword htmlArg contained cols colspan content coords enctype face +syn keyword htmlArg contained gutter height hspace id +syn keyword htmlArg contained link lowsrc marginheight +syn keyword htmlArg contained marginwidth maxlength method name prompt +syn keyword htmlArg contained rel rev rows rowspan scrolling selected shape +syn keyword htmlArg contained size src start target text type url +syn keyword htmlArg contained usemap ismap valign value vlink vspace width wrap +syn match htmlArg contained "\<\%(http-equiv\|href\|title\)="me=e-1 + +syn keyword htmlArg contained role + +" ARIA attributes {{{1 +let s:aria =<< trim END + activedescendant + atomic + autocomplete + braillelabel + brailleroledescription + busy + checked + colcount + colindex + colindextext + colspan + controls + current + describedby + description + details + disabled + errormessage + expanded + flowto + haspopup + hidden + invalid + keyshortcuts + label + labelledby + level + live + modal + multiline + multiselectable + orientation + owns + placeholder + posinset + pressed + readonly + relevant + required + roledescription + rowcount + rowindex + rowindextext + rowspan + selected + setsize + sort + valuemax + valuemin + valuenow + valuetext +END +let s:aria_deprecated =<< trim END + dropeffect + grabbed +END + +call extend(s:aria, s:aria_deprecated) +exe 'syn match htmlArg contained "\%#=1\join('\|') .. '\)\>"' +unlet s:aria s:aria_deprecated +" }}} + +" Netscape extensions +syn keyword htmlTagName contained frame noframes frameset nobr blink +syn keyword htmlTagName contained layer ilayer nolayer spacer +syn keyword htmlArg contained frameborder noresize pagex pagey above below +syn keyword htmlArg contained left top visibility clip id noshade +syn match htmlArg contained "\" + +" Microsoft extensions +syn keyword htmlTagName contained marquee + +" html 4.0 arg names +syn match htmlArg contained "\<\%(accept-charset\|label\)\>" +syn keyword htmlArg contained abbr accept accesskey axis char charoff charset +syn keyword htmlArg contained cite classid codetype compact data datetime +syn keyword htmlArg contained declare defer dir disabled for frame +syn keyword htmlArg contained headers hreflang lang language longdesc +syn keyword htmlArg contained multiple nohref nowrap object profile readonly +syn keyword htmlArg contained rules scheme scope span standby style +syn keyword htmlArg contained summary tabindex valuetype version + +" html 5 arg names +syn keyword htmlArg contained allow autocapitalize as blocking decoding +syn keyword htmlArg contained enterkeyhint imagesizes imagesrcset inert +syn keyword htmlArg contained integrity is itemid itemprop itemref itemscope +syn keyword htmlArg contained itemtype loading nomodule ping playsinline +syn keyword htmlArg contained referrerpolicy slot allowfullscreen async +syn keyword htmlArg contained autocomplete autofocus autoplay challenge +syn keyword htmlArg contained contenteditable contextmenu controls crossorigin +syn keyword htmlArg contained default dirname download draggable dropzone form +syn keyword htmlArg contained formaction formenctype formmethod formnovalidate +syn keyword htmlArg contained formtarget hidden high icon inputmode keytype +syn keyword htmlArg contained kind list loop low max min minlength muted nonce +syn keyword htmlArg contained novalidate open optimum pattern placeholder +syn keyword htmlArg contained poster preload radiogroup required reversed +syn keyword htmlArg contained sandbox spellcheck sizes srcset srcdoc srclang +syn keyword htmlArg contained step title translate typemustmatch +syn match htmlArg contained "\+ contains=@Spell +else + " The HTML 5.2 syntax 8.2.4.41: bogus comment is parser error; browser skips until next > + syn region htmlComment start=++ contains=htmlCommentError keepend + " Idem 8.2.4.42,51: Comment starts with + " Idem 8.2.4.43,44: Except and are parser errors + " Idem 8.2.4.52: dash-dash-bang (--!>) is error ignored by parser, also closes comment + syn region htmlComment matchgroup=htmlComment start=+ is all right + syn match htmlCommentNested contained "\@!" + syn match htmlCommentError contained "[^>+ keepend + +" server-parsed commands +syn region htmlPreProc start=++ contains=htmlPreStmt,htmlPreError,htmlPreAttr +syn match htmlPreStmt contained "\)" + syn region htmlCssDefinition matchgroup=htmlArg start='style="' keepend matchgroup=htmlString end='"' contains=css.*Attr,css.*Prop,cssComment,cssLength,cssColor,cssURL,cssImportant,cssError,cssString,@htmlPreproc + hi def link htmlStyleArg htmlString +endif + +if main_syntax == "html" + " synchronizing (does not always work if a comment includes legal + " html tags, but doing it right would mean to always start + " at the first line, which is too slow) + syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]" + syn sync match htmlHighlight groupthere javaScript "\%(\n\s*/ +syn match logXmlCData // +syn match logXmlEntity /&#\?\w\+;/ + +" Levels +"--------------------------------------------------------------------------- +syn keyword logLvFatal FATAL Fatal fatal +syn keyword logLvEmergency EMERG[ENCY] Emerg[ency] emerg[ency] +syn keyword logLvAlert ALERT Alert alert +syn keyword logLvCritical CRIT[ICAL] Crit[ical] crit[ical] +syn keyword logLvError E ERR[ORS] Err[ors] err[ors] +syn keyword logLvFail F FAIL[ED] Fail[ed] fail[ed] FAILURE Failure failure +syn keyword logLvFault FAULT Fault fault +syn keyword logLvNack NACK Nack nack NAK Nak nak +syn keyword logLvWarning W WARN[ING] Warn[ing] warn[ing] +syn keyword logLvBad BAD Bad bad +syn keyword logLvNotice NOTICE Notice notice +syn keyword logLvInfo I INFO Info info +syn keyword logLvDebug D DEBUG Debug debug DBG Dbg dbg +syn keyword logLvTrace TRACE Trace trace +syn keyword logLvVerbose V VERBOSE Verbose verbose +syn keyword logLvPass PASS[ED] Pass[ed] pass[ed] +syn keyword logLvSuccess SUCCEED[ED] Succeed[ed] succeed[ed] SUCCESS Success success + +" Composite log levels e.g. *_INFO +syn match logLvFatal display '\<\u\+_FATAL\>' +syn match logLvEmergency display '\<\u\+_EMERG\(ENCY\)\?\>' +syn match logLvAlert display '\<\u\+_ALERT\>' +syn match logLvCritical display '\<\u\+_CRIT\(ICAL\)\?\>' +syn match logLvError display '\<\u\+_ERR\(OR\)\?\>' +syn match logLvFail display '\<\u\+_FAIL\(URE\)\?\>' +syn match logLvWarning display '\<\u\+_WARN\(ING\)\?\>' +syn match logLvNotice display '\<\u\+_NOTICE\>' +syn match logLvInfo display '\<\u\+_INFO\>' +syn match logLvDebug display '\<\u\+_DEBUG\>' +syn match logLvTrace display '\<\u\+_TRACE\>' + +syn cluster logLvs contains=LogLvFatal,LogLvEmergency,LogLvAlert,LogLvCritical,LogLvError,LogLvFail,LogLvFault,LogLvNack,LogLvWarning,LogLvBad,LogLvNotice,LogLvInfo,LogLvDebug,LogLvTrace,LogLvVerbose,LogLvPass,LogLvSuccess + +" Highlight links +"--------------------------------------------------------------------------- +hi def link logNumber Number +hi def link logNumberHex Number +hi def link logNumberBin Number +hi def link logNumberOct Number +hi def link logNumberFloat Float + +hi def link logBoolean Boolean +hi def link logNull Constant +hi def link logString String + +hi def link logDate Type +hi def link logTime Operator +hi def link logTimeZone Operator +hi def link logDuration Operator + +hi def link logUrl Underlined +hi def link logIPV4 Underlined +hi def link logIPV6 Underlined +hi def link logMacAddress Underlined +hi def link logUUID Label +hi def link logMD5 Label +hi def link logSHA Label +hi def link logFilePath Structure + +hi def link logJavaError ErrorMsg + +hi def link logSysColumns Statement +hi def link logSysProcess Function + +hi def link logXmlHeader Function +hi def link logXmlDoctype Function +hi def link logXmlTag Identifier +hi def link logXmlAttribute Type +hi def link logXmlNamespace Include +hi def link logXmlComment Comment +hi def link logXmlCData String +hi def link logXmlEntity Special + +hi def link logOperator Special +hi def link logBrackets Special +hi def link logSeparator Comment + +hi def link LogLvFatal ErrorMsg +hi def link LogLvEmergency ErrorMsg +hi def link LogLvAlert ErrorMsg +hi def link LogLvCritical ErrorMsg +hi def link LogLvError ErrorMsg +hi def link LogLvFail ErrorMsg +hi def link LogLvFault ErrorMsg +hi def link LogLvNack ErrorMsg +hi def link LogLvWarning WarningMsg +hi def link LogLvBad WarningMsg +hi def link LogLvNotice Exception +hi def link LogLvInfo LogBlue +hi def link LogLvDebug Debug +hi def link LogLvTrace Special +hi def link LogLvVerbose Special +hi def link LogLvPass LogGreen +hi def link LogLvSuccess LogGreen + +" Custom highlight group +" ------------------------------ +hi logGreen ctermfg=lightgreen guifg=#a4c672 +hi logBlue ctermfg=lightblue guifg=#92bcfc + + +let b:current_syntax = 'log' diff --git a/.config/vim/syntax/loginaccess.vim b/.config/vim/syntax/loginaccess.vim new file mode 100644 index 0000000..650e067 --- /dev/null +++ b/.config/vim/syntax/loginaccess.vim @@ -0,0 +1,96 @@ +" Vim syntax file +" Language: login.access(5) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword loginaccessTodo contained TODO FIXME XXX NOTE + +syn region loginaccessComment display oneline start='^#' end='$' + \ contains=loginaccessTodo,@Spell + +syn match loginaccessBegin display '^' + \ nextgroup=loginaccessPermission, + \ loginaccessComment skipwhite + +syn match loginaccessPermission contained display '[^#]' + \ contains=loginaccessPermError + \ nextgroup=loginaccessUserSep + +syn match loginaccessPermError contained display '[^+-]' + +syn match loginaccessUserSep contained display ':' + \ nextgroup=loginaccessUsers, + \ loginaccessAllUsers, + \ loginaccessExceptUsers + +syn match loginaccessUsers contained display '[^, \t:]\+' + \ nextgroup=loginaccessUserIntSep, + \ loginaccessOriginSep + +syn match loginaccessAllUsers contained display '\' + \ nextgroup=loginaccessUserIntSep, + \ loginaccessOriginSep + +syn match loginaccessLocalUsers contained display '\' + \ nextgroup=loginaccessUserIntSep, + \ loginaccessOriginSep + +syn match loginaccessExceptUsers contained display '\' + \ nextgroup=loginaccessUserIntSep, + \ loginaccessOriginSep + +syn match loginaccessUserIntSep contained display '[, \t]' + \ nextgroup=loginaccessUsers, + \ loginaccessAllUsers, + \ loginaccessExceptUsers + +syn match loginaccessOriginSep contained display ':' + \ nextgroup=loginaccessOrigins, + \ loginaccessAllOrigins, + \ loginaccessExceptOrigins + +syn match loginaccessOrigins contained display '[^, \t]\+' + \ nextgroup=loginaccessOriginIntSep + +syn match loginaccessAllOrigins contained display '\' + \ nextgroup=loginaccessOriginIntSep + +syn match loginaccessLocalOrigins contained display '\' + \ nextgroup=loginaccessOriginIntSep + +syn match loginaccessExceptOrigins contained display '\' + \ nextgroup=loginaccessOriginIntSep + +syn match loginaccessOriginIntSep contained display '[, \t]' + \ nextgroup=loginaccessOrigins, + \ loginaccessAllOrigins, + \ loginaccessExceptOrigins + +hi def link loginaccessTodo Todo +hi def link loginaccessComment Comment +hi def link loginaccessPermission Type +hi def link loginaccessPermError Error +hi def link loginaccessUserSep Delimiter +hi def link loginaccessUsers Identifier +hi def link loginaccessAllUsers Macro +hi def link loginaccessLocalUsers Macro +hi def link loginaccessExceptUsers Operator +hi def link loginaccessUserIntSep loginaccessUserSep +hi def link loginaccessOriginSep loginaccessUserSep +hi def link loginaccessOrigins Identifier +hi def link loginaccessAllOrigins Macro +hi def link loginaccessLocalOrigins Macro +hi def link loginaccessExceptOrigins loginaccessExceptUsers +hi def link loginaccessOriginIntSep loginaccessUserSep + +let b:current_syntax = "loginaccess" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/logindefs.vim b/.config/vim/syntax/logindefs.vim new file mode 100644 index 0000000..51fa199 --- /dev/null +++ b/.config/vim/syntax/logindefs.vim @@ -0,0 +1,195 @@ +" Vim syntax file for login.defs(5) +" Language: login.defs(5) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2010-11-29 +" 2024 Jul 12 by Vim Project: Update keywords + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn match logindefsBegin display '^' + \ nextgroup= + \ logindefsComment, + \ @logindefsKeyword + \ skipwhite + +syn region logindefsComment display oneline start='^\s*#' end='$' + \ contains=logindefsTodo,@Spell + +syn keyword logindefsTodo contained TODO FIXME XXX NOTE + +syn cluster logindefsKeyword contains= + \ logindefsBooleanKeyword, + \ logindefsEncryptKeyword, + \ logindefsNumberKeyword, + \ logindefsPathKeyword, + \ logindefsPathsKeyword, + \ logindefsStringKeyword + +syn keyword logindefsBooleanKeyword contained + \ CHFN_AUTH + \ CHSH_AUTH + \ CREATE_HOME + \ DEFAULT_HOME + \ FAILLOG_ENAB + \ FORCE_SHADOW + \ GRANT_AUX_GROUP_SUBIDS + \ LASTLOG_ENAB + \ LOG_OK_LOGINS + \ LOG_UNKFAIL_ENAB + \ MAIL_CHECK_ENAB + \ MD5_CRYPT_ENAB + \ OBSCURE_CHECKS_ENAB + \ PASS_ALWAYS_WARN + \ PORTTIME_CHECKS_ENAB + \ QUOTAS_ENAB + \ SU_WHEEL_ONLY + \ SYSLOG_SG_ENAB + \ SYSLOG_SU_ENAB + \ USERGROUPS_ENAB + \ nextgroup=logindefsBoolean skipwhite + +syn keyword logindefsBoolean contained yes no + +syn keyword logindefsEncryptKeyword contained + \ ENCRYPT_METHOD + \ HMAC_CRYPTO_ALGO + \ nextgroup=logindefsEncryptMethod skipwhite + +syn keyword logindefsEncryptMethod contained + \ BCRYPT + \ DES + \ MD5 + \ SHA256 + \ SHA512 + \ YESCRYPT + +syn keyword logindefsNumberKeyword contained + \ BCRYPT_MAX_ROUNDS + \ BCRYPT_MIN_ROUNDS + \ ERASECHAR + \ FAIL_DELAY + \ GID_MAX + \ GID_MIN + \ KILLCHAR + \ LOGIN_RETRIES + \ LOGIN_TIMEOUT + \ MAX_MEMBERS_PER_GROUP + \ PASS_CHANGE_TRIES + \ PASS_MAX_DAYS + \ PASS_MIN_DAYS + \ PASS_WARN_AGE + \ PASS_MAX_LEN + \ PASS_MIN_LEN + \ SHA_CRYPT_MAX_ROUNDS + \ SHA_CRYPT_MIN_ROUNDS + \ SUB_GID_COUNT + \ SUB_GID_MAX + \ SUB_GID_MIN + \ SUB_UID_COUNT + \ SUB_UID_MAX + \ SUB_UID_MIN + \ SYS_GID_MAX + \ SYS_GID_MIN + \ SYS_UID_MAX + \ SYS_UID_MIN + \ UID_MAX + \ UID_MIN + \ ULIMIT + \ YESCRYPT_COST_FACTOR + \ nextgroup=@logindefsNumber skipwhite + +syn keyword logindefsNumberKeyword contained + \ HOME_MODE + \ TTYPERM + \ UMASK + \ nextgroup=logindefsOctal,logindefsOctalError skipwhite + +syn cluster logindefsNumber contains= + \ logindefsDecimal, + \ logindefsHex, + \ logindefsOctal, + \ logindefsOctalError + +syn match logindefsDecimal contained '\<\d\+\>' + +syn match logindefsHex contained display '\<0x\x\+\>' + +syn match logindefsOctal contained display '\<0\o\+\>' + \ contains=logindefsOctalZero +syn match logindefsOctalZero contained display '\<0' + +syn match logindefsOctalError contained display '\<0\o*[89]\d*\>' + +syn keyword logindefsPathKeyword contained + \ ENVIRON_FILE + \ FAKE_SHELL + \ FTMP_FILE + \ HUSHLOGIN_FILE + \ ISSUE_FILE + \ MAIL_DIR + \ MAIL_FILE + \ NOLOGINS_FILE + \ NONEXISTENT + \ SULOG_FILE + \ TTYTYPE_FILE + \ nextgroup=logindefsPath skipwhite + +syn match logindefsPath contained '[[:graph:]]\+' + +syn keyword logindefsPathsKeyword contained + \ CONSOLE + \ ENV_PATH + \ ENV_SUPATH + \ MOTD_FILE + \ nextgroup=logindefsPaths skipwhite + +syn match logindefsPaths contained '[^:]\+' + \ nextgroup=logindefsPathDelim + +syn match logindefsPathDelim contained ':' nextgroup=logindefsPaths + +syn keyword logindefsStringKeyword contained + \ CHFN_RESTRICT + \ CONSOLE_GROUPS + \ ENV_HZ + \ ENV_TZ + \ LOGIN_STRING + \ PREVENT_NO_AUTH + \ SU_NAME + \ TTYGROUP + \ USERDEL_CMD + \ nextgroup=logindefsString skipwhite + +syn match logindefsString contained '[[:graph:]]\+' + +hi def link logindefsComment Comment +hi def link logindefsTodo Todo +hi def link logindefsKeyword Keyword +hi def link logindefsBooleanKeyword logindefsKeyword +hi def link logindefsEncryptKeyword logindefsKeyword +hi def link logindefsNumberKeyword logindefsKeyword +hi def link logindefsPathKeyword logindefsKeyword +hi def link logindefsPathsKeyword logindefsKeyword +hi def link logindefsStringKeyword logindefsKeyword +hi def link logindefsBoolean Boolean +hi def link logindefsEncryptMethod Type +hi def link logindefsNumber Number +hi def link logindefsDecimal logindefsNumber +hi def link logindefsHex logindefsNumber +hi def link logindefsOctal logindefsNumber +hi def link logindefsOctalZero PreProc +hi def link logindefsOctalError Error +hi def link logindefsPath String +hi def link logindefsPaths logindefsPath +hi def link logindefsPathDelim Delimiter +hi def link logindefsString String + +let b:current_syntax = "logindefs" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/logtalk.vim b/.config/vim/syntax/logtalk.vim new file mode 100644 index 0000000..2c6c82a --- /dev/null +++ b/.config/vim/syntax/logtalk.vim @@ -0,0 +1,455 @@ +" Vim syntax file +" +" Language: Logtalk +" Maintainer: Paulo Moura +" Last Change: December 16, 2023 + + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Logtalk is case sensitive: + +syn case match + + +" Logtalk variables + +syn match logtalkVariable "\<\(\u\|_\)\(\w\)*\>" + + +" Logtalk clause functor + +syn match logtalkOperator ":-" + + +" Logtalk quoted atoms and strings + +syn region logtalkString start=+"+ skip=+\\"+ end=+"+ contains=logtalkEscapeSequence +syn region logtalkAtom start=+'+ skip=+\\'+ end=+'+ contains=logtalkEscapeSequence + +syn match logtalkEscapeSequence contained "\\\([\\abfnrtv\"\']\|\(x[a-fA-F0-9]\+\|[0-7]\+\)\\\)" + + +" Logtalk message sending operators + +syn match logtalkOperator "::" +syn match logtalkOperator "\(0'\)\@" + +syn match logtalkBuiltIn "\<\(for\|retract\)all\ze(" + +syn match logtalkBuiltIn "\" +syn match logtalkKeyword "\" +syn match logtalkKeyword "\" +syn match logtalkKeyword "\" +syn match logtalkOperator "->" +syn match logtalkKeyword "\" +syn match logtalkKeyword "\<\(uninstantiation\|type\|domain\|existence\|permission\|representation\|evaluation\|resource\|syntax\)_error\ze(" + + +" Term unification + +syn match logtalkOperator "\(0'\)\@" +syn match logtalkOperator "@>=" + + +" Term creation and decomposition + +syn match logtalkKeyword "\" + + +" Arithmetic evaluation + +syn match logtalkOperator "\" + + +" Arithmetic comparison + +syn match logtalkOperator "=:=" +syn match logtalkOperator "=\\=" +syn match logtalkOperator "\(0'\)\@" +syn match logtalkOperator ">=" + + +" Stream selection and control + +syn match logtalkKeyword "\<\(curren\|se\)t_\(in\|out\)put\ze(" +syn match logtalkKeyword "\" +syn match logtalkKeyword "\" +syn match logtalkKeyword "\" + + +" Term input/output + +syn match logtalkKeyword "\" + + +" Atomic term processing + +syn match logtalkKeyword "\" + + +" Sorting + +syn match logtalkKeyword "\<\(key\)\?sort\ze(" + + +" Evaluable functors + +syn match logtalkOperator "\(0'\)\@" +syn match logtalkKeyword "\" +syn match logtalkKeyword "\" +syn match logtalkKeyword "\" +syn match logtalkKeyword "\" +syn match logtalkKeyword "\>" +syn match logtalkOperator "<<" +syn match logtalkOperator "/\\" +syn match logtalkOperator "\\/" +syn match logtalkOperator "0'\@" +syn match logtalkNumber "\<\d\+\.\d\+\>" +syn match logtalkNumber "\<\d\+[eE][-+]\=\d\+\>" +syn match logtalkNumber "\<\d\+\.\d\+[eE][-+]\=\d\+\>" +syn match logtalkNumber "0'[\\]\?." +syn match logtalkNumber "\<0b[0-1]\+\>" +syn match logtalkNumber "\<0o\o\+\>" +syn match logtalkNumber "\<0x\x\+\>" + + +" Logtalk end-of-clause + +syn match logtalkOperator "\(0'\)\@ +" Last Change: Wed Aug 19 1998 +" URL: http://lotos.csi.uottawa.ca/~damyot/vim/lotos.vim +" This file is an adaptation of pascal.vim by Mario Eusebio +" I'm not sure I understand all of the syntax highlight language, +" but this file seems to do the job for standard LOTOS. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +"Comments in LOTOS are between (* and *) +syn region lotosComment start="(\*" end="\*)" contains=lotosTodo + +"Operators [], [...], >>, ->, |||, |[...]|, ||, ;, !, ?, :, =, ,, := +syn match lotosDelimiter "[][]" +syn match lotosDelimiter ">>" +syn match lotosDelimiter "->" +syn match lotosDelimiter "\[>" +syn match lotosDelimiter "[|;!?:=,]" + +"Regular keywords +syn keyword lotosStatement specification endspec process endproc +syn keyword lotosStatement where behaviour behavior +syn keyword lotosStatement any let par accept choice hide of in +syn keyword lotosStatement i stop exit noexit + +"Operators from the Abstract Data Types in IS8807 +syn keyword lotosOperator eq ne succ and or xor implies iff +syn keyword lotosOperator not true false +syn keyword lotosOperator Insert Remove IsIn NotIn Union Ints +syn keyword lotosOperator Minus Includes IsSubsetOf +syn keyword lotosOperator lt le ge gt 0 + +"Sorts in IS8807 +syn keyword lotosSort Boolean Bool FBoolean FBool Element +syn keyword lotosSort Set String NaturalNumber Nat HexString +syn keyword lotosSort HexDigit DecString DecDigit +syn keyword lotosSort OctString OctDigit BitString Bit +syn keyword lotosSort Octet OctetString + +"Keywords for ADTs +syn keyword lotosType type endtype library endlib sorts formalsorts +syn keyword lotosType eqns formaleqns opns formalopns forall ofsort is +syn keyword lotosType for renamedby actualizedby sortnames opnnames +syn keyword lotosType using + +syn sync lines=250 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link lotosStatement Statement +hi def link lotosProcess Label +hi def link lotosOperator Operator +hi def link lotosSort Function +hi def link lotosType Type +hi def link lotosComment Comment +hi def link lotosDelimiter String + + +let b:current_syntax = "lotos" + +" vim: ts=8 diff --git a/.config/vim/syntax/lout.vim b/.config/vim/syntax/lout.vim new file mode 100644 index 0000000..b26a7bc --- /dev/null +++ b/.config/vim/syntax/lout.vim @@ -0,0 +1,135 @@ +" Vim syntax file +" Language: Lout +" Maintainer: Christian V. J. Brüssow +" Last Change: So 12 Feb 2012 15:15:03 CET +" Filenames: *.lout,*.lt +" URL: http://www.cvjb.de/comp/vim/lout.vim + +" $Id: lout.vim,v 1.4 2012/02/12 15:16:17 bruessow Exp $ +" +" Lout: Basser Lout document formatting system. + +" Many Thanks to... +" +" 2012-02-12: +" Thilo Six send a patch for cpoptions. +" See the discussion at http://thread.gmane.org/gmane.editors.vim.devel/32151 + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save=&cpo +set cpo&vim + +" Lout is case sensitive +syn case match + +" Synchronization, I know it is a huge number, but normal texts can be +" _very_ long ;-) +syn sync lines=1000 + +" Characters allowed in keywords +" I don't know if 128-255 are allowed in ANS-FORHT +setlocal iskeyword=@,48-57,.,@-@,_,192-255 + +" Some special keywords +syn keyword loutTodo contained TODO lout Lout LOUT +syn keyword loutDefine def macro + +" Some big structures +syn keyword loutKeyword @Begin @End @Figure @Tab +syn keyword loutKeyword @Book @Doc @Document @Report +syn keyword loutKeyword @Introduction @Abstract @Appendix +syn keyword loutKeyword @Chapter @Section @BeginSections @EndSections + +" All kind of Lout keywords +syn match loutFunction '\<@[^ \t{}]\+\>' + +" Braces -- Don`t edit these lines! +syn match loutMBraces '[{}]' +syn match loutIBraces '[{}]' +syn match loutBBrace '[{}]' +syn match loutBIBraces '[{}]' +syn match loutHeads '[{}]' + +" Unmatched braces. +syn match loutBraceError '}' + +" End of multi-line definitions, like @Document, @Report and @Book. +syn match loutEOmlDef '^//$' + +" Grouping of parameters and objects. +syn region loutObject transparent matchgroup=Delimiter start='{' matchgroup=Delimiter end='}' contains=ALLBUT,loutBraceError + +" The NULL object has a special meaning +syn keyword loutNULL {} + +" Comments +syn region loutComment start='\#' end='$' contains=loutTodo + +" Double quotes +syn region loutSpecial start=+"+ skip=+\\\\\|\\"+ end=+"+ + +" ISO-LATIN-1 characters created with @Char, or Adobe symbols +" created with @Sym +syn match loutSymbols '@\(\(Char\)\|\(Sym\)\)\s\+[A-Za-z]\+' + +" Include files +syn match loutInclude '@IncludeGraphic\s\+\k\+' +syn region loutInclude start='@\(\(SysInclude\)\|\(IncludeGraphic\)\|\(Include\)\)\s*{' end='}' + +" Tags +syn match loutTag '@\(\(Tag\)\|\(PageMark\)\|\(PageOf\)\|\(NumberOf\)\)\s\+\k\+' +syn region loutTag start='@Tag\s*{' end='}' + +" Equations +syn match loutMath '@Eq\s\+\k\+' +syn region loutMath matchgroup=loutMBraces start='@Eq\s*{' matchgroup=loutMBraces end='}' contains=ALLBUT,loutBraceError +" +" Fonts +syn match loutItalic '@I\s\+\k\+' +syn region loutItalic matchgroup=loutIBraces start='@I\s*{' matchgroup=loutIBraces end='}' contains=ALLBUT,loutBraceError +syn match loutBold '@B\s\+\k\+' +syn region loutBold matchgroup=loutBBraces start='@B\s*{' matchgroup=loutBBraces end='}' contains=ALLBUT,loutBraceError +syn match loutBoldItalic '@BI\s\+\k\+' +syn region loutBoldItalic matchgroup=loutBIBraces start='@BI\s*{' matchgroup=loutBIBraces end='}' contains=ALLBUT,loutBraceError +syn region loutHeadings matchgroup=loutHeads start='@\(\(Title\)\|\(Caption\)\)\s*{' matchgroup=loutHeads end='}' contains=ALLBUT,loutBraceError + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default methods for highlighting. Can be overrriden later. +hi def link loutTodo Todo +hi def link loutDefine Define +hi def link loutEOmlDef Define +hi def link loutFunction Function +hi def link loutBraceError Error +hi def link loutNULL Special +hi def link loutComment Comment +hi def link loutSpecial Special +hi def link loutSymbols Character +hi def link loutInclude Include +hi def link loutKeyword Keyword +hi def link loutTag Tag +hi def link loutMath Number + +hi def link loutMBraces loutMath +hi loutItalic term=italic cterm=italic gui=italic +hi def link loutIBraces loutItalic +hi loutBold term=bold cterm=bold gui=bold +hi def link loutBBraces loutBold +hi loutBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic +hi def link loutBIBraces loutBoldItalic +hi loutHeadings term=bold cterm=bold guifg=indianred +hi def link loutHeads loutHeadings + + +let b:current_syntax = "lout" + +let &cpo=s:cpo_save +unlet s:cpo_save + +" vim:ts=8:sw=4:nocindent:smartindent: diff --git a/.config/vim/syntax/lpc.vim b/.config/vim/syntax/lpc.vim new file mode 100644 index 0000000..7d85fce --- /dev/null +++ b/.config/vim/syntax/lpc.vim @@ -0,0 +1,447 @@ +" Vim syntax file +" Language: LPC +" Maintainer: Shizhu Pan +" URL: http://poet.tomud.com/pub/lpc.vim.bz2 +" Last Change: 2016 Aug 31 +" Comments: If you are using Vim 6.2 or later, see :h lpc.vim for +" file type recognizing, if not, you had to use modeline. + + +" Nodule: This is the start nodule. {{{1 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Nodule: Keywords {{{1 + +" LPC keywords +" keywords should always be highlighted so "contained" is not used. +syn cluster lpcKeywdGrp contains=lpcConditional,lpcLabel,lpcOperator,lpcRepeat,lpcStatement,lpcModifier,lpcReserved + +syn keyword lpcConditional if else switch +syn keyword lpcLabel case default +syn keyword lpcOperator catch efun in inherit +syn keyword lpcRepeat do for foreach while +syn keyword lpcStatement break continue return + +syn match lpcEfunError /efun[^:]/ display + +" Illegal to use keyword as function +" It's not working, maybe in the next version. +syn keyword lpcKeywdError contained if for foreach return switch while + +" These are keywords only because they take lvalue or type as parameter, +" so these keywords should only be used as function but cannot be names of +" user-defined functions. +syn keyword lpcKeywdFunc new parse_command sscanf time_expression + +" Nodule: Type and modifiers {{{1 + +" Type names list. + +" Special types +syn keyword lpcType void mixed unknown +" Scalar/Value types. +syn keyword lpcType int float string +" Pointer types. +syn keyword lpcType array buffer class function mapping object +" Other types. +if exists("lpc_compat_32") + syn keyword lpcType closure status funcall +else + syn keyword lpcError closure status + syn keyword lpcType multiset +endif + +" Type modifier. +syn keyword lpcModifier nomask private public +syn keyword lpcModifier varargs virtual + +" sensible modifiers +if exists("lpc_pre_v22") + syn keyword lpcReserved nosave protected ref + syn keyword lpcModifier static +else + syn keyword lpcError static + syn keyword lpcModifier nosave protected ref +endif + +" Nodule: Applies {{{1 + +" Match a function declaration or function pointer +syn match lpcApplyDecl excludenl /->\h\w*(/me=e-1 contains=lpcApplies transparent display + +" We should note that in func_spec.c the efun definition syntax is so +" complicated that I use such a long regular expression to describe. +syn match lpcLongDecl excludenl /\(\s\|\*\)\h\+\s\h\+(/me=e-1 contains=@lpcEfunGroup,lpcType,@lpcKeywdGrp transparent display + +" this is form for all functions +" ->foo() form had been excluded +syn match lpcFuncDecl excludenl /\h\w*(/me=e-1 contains=lpcApplies,@lpcEfunGroup,lpcKeywdError transparent display + +" The (: :) parenthesis or $() forms a function pointer +syn match lpcFuncName /(:\s*\h\+\s*:)/me=e-1 contains=lpcApplies,@lpcEfunGroup transparent display contained +syn match lpcFuncName /(:\s*\h\+,/ contains=lpcApplies,@lpcEfunGroup transparent display contained +syn match lpcFuncName /\$(\h\+)/ contains=lpcApplies,@lpcEfunGroup transparent display contained + +" Applies list. +" system applies +syn keyword lpcApplies contained __INIT clean_up create destructor heart_beat id init move_or_destruct reset +" interactive +syn keyword lpcApplies contained catch_tell logon net_dead process_input receive_message receive_snoop telnet_suboption terminal_type window_size write_prompt +" master applies +syn keyword lpcApplies contained author_file compile_object connect crash creator_file domain_file epilog error_handler flag get_bb_uid get_root_uid get_save_file_name log_error make_path_absolute object_name preload privs_file retrieve_ed_setup save_ed_setup slow_shutdown +syn keyword lpcApplies contained valid_asm valid_bind valid_compile_to_c valid_database valid_hide valid_link valid_object valid_override valid_read valid_save_binary valid_seteuid valid_shadow valid_socket valid_write +" parsing +syn keyword lpcApplies contained inventory_accessible inventory_visible is_living parse_command_adjectiv_id_list parse_command_adjective_id_list parse_command_all_word parse_command_id_list parse_command_plural_id_list parse_command_prepos_list parse_command_users parse_get_environment parse_get_first_inventory parse_get_next_inventory parser_error_message + + +" Nodule: Efuns {{{1 + +syn cluster lpcEfunGroup contains=lpc_efuns,lpcOldEfuns,lpcNewEfuns,lpcKeywdFunc + +" Compat32 efuns +if exists("lpc_compat_32") + syn keyword lpc_efuns contained closurep heart_beat_info m_delete m_values m_indices query_once_interactive strstr +else + syn match lpcErrFunc /#`\h\w*/ + " Shell compatible first line comment. + syn region lpcCommentFunc start=/^#!/ end=/$/ +endif + +" pre-v22 efuns which are removed in newer versions. +syn keyword lpcOldEfuns contained tail dump_socket_status + +" new efuns after v22 should be added here! +syn keyword lpcNewEfuns contained socket_status + +" LPC efuns list. +" DEBUG efuns Not included. +" New efuns should NOT be added to this list, see v22 efuns above. +" Efuns list {{{2 +syn keyword lpc_efuns contained acos add_action all_inventory all_previous_objects allocate allocate_buffer allocate_mapping apply arrayp asin atan author_stats +syn keyword lpc_efuns contained bind break_string bufferp +syn keyword lpc_efuns contained cache_stats call_other call_out call_out_info call_stack capitalize catch ceil check_memory children classp clear_bit clone_object clonep command commands copy cos cp crc32 crypt ctime +syn keyword lpc_efuns contained db_close db_commit db_connect db_exec db_fetch db_rollback db_status debug_info debugmalloc debug_message deep_inherit_list deep_inventory destruct disable_commands disable_wizard domain_stats dumpallobj dump_file_descriptors dump_prog +syn keyword lpc_efuns contained each ed ed_cmd ed_start enable_commands enable_wizard environment error errorp eval_cost evaluate exec exp explode export_uid external_start +syn keyword lpc_efuns contained fetch_variable file_length file_name file_size filter filter_array filter_mapping find_call_out find_living find_object find_player first_inventory floatp floor flush_messages function_exists function_owner function_profile functionp functions +syn keyword lpc_efuns contained generate_source get_char get_config get_dir geteuid getuid +syn keyword lpc_efuns contained heart_beats +syn keyword lpc_efuns contained id_matrix implode in_edit in_input inherit_list inherits input_to interactive intp +syn keyword lpc_efuns contained keys +syn keyword lpc_efuns contained link living livings load_object localtime log log10 lookat_rotate lower_case lpc_info +syn keyword lpc_efuns contained malloc_check malloc_debug malloc_status map map_array map_delete map_mapping mapp master match_path max_eval_cost member_array memory_info memory_summary message mkdir moncontrol move_object mud_status +syn keyword lpc_efuns contained named_livings network_stats next_bit next_inventory notify_fail nullp +syn keyword lpc_efuns contained objectp objects oldcrypt opcprof origin +syn keyword lpc_efuns contained parse_add_rule parse_add_synonym parse_command parse_dump parse_init parse_my_rules parse_refresh parse_remove parse_sentence pluralize pointerp pow present previous_object printf process_string process_value program_info +syn keyword lpc_efuns contained query_ed_mode query_heart_beat query_host_name query_idle query_ip_name query_ip_number query_ip_port query_load_average query_notify_fail query_privs query_replaced_program query_shadowing query_snoop query_snooping query_verb +syn keyword lpc_efuns contained random read_buffer read_bytes read_file receive reclaim_objects refs regexp reg_assoc reload_object remove_action remove_call_out remove_interactive remove_shadow rename repeat_string replace_program replace_string replaceable reset_eval_cost resolve restore_object restore_variable rm rmdir rotate_x rotate_y rotate_z rusage +syn keyword lpc_efuns contained save_object save_variable say scale set_author set_bit set_eval_limit set_heart_beat set_hide set_light set_living_name set_malloc_mask set_privs set_reset set_this_player set_this_user seteuid shadow shallow_inherit_list shout shutdown sin sizeof snoop socket_accept socket_acquire socket_address socket_bind socket_close socket_connect socket_create socket_error socket_listen socket_release socket_write sort_array sprintf sqrt stat store_variable strcmp stringp strlen strsrch +syn keyword lpc_efuns contained tan tell_object tell_room terminal_colour test_bit this_interactive this_object this_player this_user throw time to_float to_int trace traceprefix translate typeof +syn keyword lpc_efuns contained undefinedp unique_array unique_mapping upper_case uptime userp users +syn keyword lpc_efuns contained values variables virtualp +syn keyword lpc_efuns contained wizardp write write_buffer write_bytes write_file + +" Nodule: Constants {{{1 + +" LPC Constants. +" like keywords, constants are always highlighted, be careful to choose only +" the constants we used to add to this list. +syn keyword lpcConstant __ARCH__ __COMPILER__ __DIR__ __FILE__ __OPTIMIZATION__ __PORT__ __VERSION__ +" Defines in options.h are all predefined in LPC sources surrounding by +" two underscores. Do we need to include all of that? +syn keyword lpcConstant __SAVE_EXTENSION__ __HEARTBEAT_INTERVAL__ +" from the documentation we know that these constants remains only for +" backward compatibility and should not be used any more. +syn keyword lpcConstant HAS_ED HAS_PRINTF HAS_RUSAGE HAS_DEBUG_LEVEL +syn keyword lpcConstant MUD_NAME F__THIS_OBJECT + +" Nodule: Todo for this file. {{{1 + +" TODO : need to check for LPC4 syntax and other series of LPC besides +" v22, b21 and l32, if you had a good idea, contact me at poet@mudbuilder.net +" and I will be appreciated about that. + +" Notes about some FAQ: +" +" About variables : We adopts the same behavior for C because almost all the +" LPC programmers are also C programmers, so we don't need separate settings +" for C and LPC. That is the reason why I don't change variables like +" "c_no_utf"s to "lpc_no_utf"s. +" +" Copy : Some of the following seems to be copied from c.vim but not quite +" the same in details because the syntax for C and LPC is different. +" +" Color scheme : this syntax file had been thouroughly tested to work well +" for all of the dark-backgrounded color schemes Vim has provided officially, +" and it should be quite Ok for all of the bright-backgrounded color schemes, +" of course it works best for the color scheme that I am using, download it +" from http://poet.tomud.com/pub/ps_color.vim.bz2 if you want to try it. +" + +" Nodule: String and Character {{{1 + + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match lpcSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)" +if !exists("c_no_utf") + syn match lpcSpecial display contained "\\\(u\x\{4}\|U\x\{8}\)" +endif + +" LPC version of sprintf() format, +syn match lpcFormat display "%\(\d\+\)\=[-+ |=#@:.]*\(\d\+\)\=\('\I\+'\|'\I*\\'\I*'\)\=[OsdicoxXf]" contained +syn match lpcFormat display "%%" contained +syn region lpcString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=lpcSpecial,lpcFormat +" lpcCppString: same as lpcString, but ends at end of line +syn region lpcCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=lpcSpecial,lpcFormat + +" LPC preprocessor for the text formatting short cuts +" Thanks to Dr. Charles E. Campbell +" he suggests the best way to do this. +syn region lpcTextString start=/@\z(\h\w*\)$/ end=/^\z1/ contains=lpcSpecial +syn region lpcArrayString start=/@@\z(\h\w*\)$/ end=/^\z1/ contains=lpcSpecial + +" Character +syn match lpcCharacter "L\='[^\\]'" +syn match lpcCharacter "L'[^']*'" contains=lpcSpecial +syn match lpcSpecialError "L\='\\[^'\"?\\abefnrtv]'" +syn match lpcSpecialCharacter "L\='\\['\"?\\abefnrtv]'" +syn match lpcSpecialCharacter display "L\='\\\o\{1,3}'" +syn match lpcSpecialCharacter display "'\\x\x\{1,2}'" +syn match lpcSpecialCharacter display "L'\\x\x\+'" + +" Nodule: White space {{{1 + +" when wanted, highlight trailing white space +if exists("c_space_errors") + if !exists("c_no_trail_space_error") + syn match lpcSpaceError display excludenl "\s\+$" + endif + if !exists("c_no_tab_space_error") + syn match lpcSpaceError display " \+\t"me=e-1 + endif +endif + +" Nodule: Parenthesis and brackets {{{1 + +" catch errors caused by wrong parenthesis and brackets +syn cluster lpcParenGroup contains=lpcParenError,lpcIncluded,lpcSpecial,lpcCommentSkip,lpcCommentString,lpcComment2String,@lpcCommentGroup,lpcCommentStartError,lpcUserCont,lpcUserLabel,lpcBitField,lpcCommentSkip,lpcOctalZero,lpcCppOut,lpcCppOut2,lpcCppSkip,lpcFormat,lpcNumber,lpcFloat,lpcOctal,lpcOctalError,lpcNumbersCom +syn region lpcParen transparent start='(' end=')' contains=ALLBUT,@lpcParenGroup,lpcCppParen,lpcErrInBracket,lpcCppBracket,lpcCppString,@lpcEfunGroup,lpcApplies,lpcKeywdError +" lpcCppParen: same as lpcParen but ends at end-of-line; used in lpcDefine +syn region lpcCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@lpcParenGroup,lpcErrInBracket,lpcParen,lpcBracket,lpcString,@lpcEfunGroup,lpcApplies,lpcKeywdError +syn match lpcParenError display ")" +syn match lpcParenError display "\]" +" for LPC: +" Here we should consider the array ({ }) parenthesis and mapping ([ ]) +" parenthesis and multiset (< >) parenthesis. +syn match lpcErrInParen display contained "[^^]{"ms=s+1 +syn match lpcErrInParen display contained "\(}\|\]\)[^)]"me=e-1 +syn region lpcBracket transparent start='\[' end=']' contains=ALLBUT,@lpcParenGroup,lpcErrInParen,lpcCppParen,lpcCppBracket,lpcCppString,@lpcEfunGroup,lpcApplies,lpcFuncName,lpcKeywdError +" lpcCppBracket: same as lpcParen but ends at end-of-line; used in lpcDefine +syn region lpcCppBracket transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@lpcParenGroup,lpcErrInParen,lpcParen,lpcBracket,lpcString,@lpcEfunGroup,lpcApplies,lpcFuncName,lpcKeywdError +syn match lpcErrInBracket display contained "[);{}]" + +" Nodule: Numbers {{{1 + +" integer number, or floating point number without a dot and with "f". +syn case ignore +syn match lpcNumbers display transparent "\<\d\|\.\d" contains=lpcNumber,lpcFloat,lpcOctalError,lpcOctal +" Same, but without octal error (for comments) +syn match lpcNumbersCom display contained transparent "\<\d\|\.\d" contains=lpcNumber,lpcFloat,lpcOctal +syn match lpcNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>" +" hex number +syn match lpcNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" +" Flag the first zero of an octal number as something special +syn match lpcOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=lpcOctalZero +syn match lpcOctalZero display contained "\<0" +syn match lpcFloat display contained "\d\+f" +" floating point number, with dot, optional exponent +syn match lpcFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" +" floating point number, starting with a dot, optional exponent +syn match lpcFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +" floating point number, without dot, with exponent +syn match lpcFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" +" flag an octal number with wrong digits +syn match lpcOctalError display contained "0\o*[89]\d*" +syn case match + +" Nodule: Comment string {{{1 + +" lpcCommentGroup allows adding matches for special things in comments +syn keyword lpcTodo contained TODO FIXME XXX +syn cluster lpcCommentGroup contains=lpcTodo + +if exists("c_comment_strings") + " A comment can contain lpcString, lpcCharacter and lpcNumber. + syntax match lpcCommentSkip contained "^\s*\*\($\|\s\+\)" + syntax region lpcCommentString contained start=+L\=\\\@" skip="\\$" end="$" end="//"me=s-1 contains=lpcComment,lpcCppString,lpcCharacter,lpcCppParen,lpcParenError,lpcNumbers,lpcCommentError,lpcSpaceError +syn match lpcPreCondit display "^\s*#\s*\(else\|endif\)\>" +if !exists("c_no_if0") + syn region lpcCppOut start="^\s*#\s*if\s\+0\+\>" end=".\|$" contains=lpcCppOut2 + syn region lpcCppOut2 contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=lpcSpaceError,lpcCppSkip + syn region lpcCppSkip contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=lpcSpaceError,lpcCppSkip +endif +syn region lpcIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match lpcIncluded display contained "<[^>]*>" +syn match lpcInclude display "^\s*#\s*include\>\s*["<]" contains=lpcIncluded +syn match lpcLineSkip "\\$" +syn cluster lpcPreProcGroup contains=lpcPreCondit,lpcIncluded,lpcInclude,lpcDefine,lpcErrInParen,lpcErrInBracket,lpcUserLabel,lpcSpecial,lpcOctalZero,lpcCppOut,lpcCppOut2,lpcCppSkip,lpcFormat,lpcNumber,lpcFloat,lpcOctal,lpcOctalError,lpcNumbersCom,lpcString,lpcCommentSkip,lpcCommentString,lpcComment2String,@lpcCommentGroup,lpcCommentStartError,lpcParen,lpcBracket,lpcMulti,lpcKeywdError +syn region lpcDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@lpcPreProcGroup + +if exists("lpc_pre_v22") + syn region lpcPreProc start="^\s*#\s*\(pragma\>\|echo\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@lpcPreProcGroup +else + syn region lpcPreProc start="^\s*#\s*\(pragma\>\|echo\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@lpcPreProcGroup +endif + +" Nodule: User labels {{{1 + +" Highlight Labels +" User labels in LPC is not allowed, only "case x" and "default" is supported +syn cluster lpcMultiGroup contains=lpcIncluded,lpcSpecial,lpcCommentSkip,lpcCommentString,lpcComment2String,@lpcCommentGroup,lpcCommentStartError,lpcUserCont,lpcUserLabel,lpcBitField,lpcOctalZero,lpcCppOut,lpcCppOut2,lpcCppSkip,lpcFormat,lpcNumber,lpcFloat,lpcOctal,lpcOctalError,lpcNumbersCom,lpcCppParen,lpcCppBracket,lpcCppString,lpcKeywdError +syn region lpcMulti transparent start='\(case\|default\|public\|protected\|private\)' skip='::' end=':' contains=ALLBUT,@lpcMultiGroup + +syn cluster lpcLabelGroup contains=lpcUserLabel +syn match lpcUserCont display "^\s*lpc:$" contains=@lpcLabelGroup + +" Don't want to match anything +syn match lpcUserLabel display "lpc" contained + +" Nodule: Initializations {{{1 + +if exists("c_minlines") + let b:c_minlines = c_minlines +else + if !exists("c_no_if0") + let b:c_minlines = 50 " #if 0 constructs can be long + else + let b:c_minlines = 15 " mostly for () constructs + endif +endif +exec "syn sync ccomment lpcComment minlines=" . b:c_minlines + +" Make sure these options take place since we no longer depend on file type +" plugin for C +setlocal cindent +setlocal fo-=t fo+=croql +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// + +" Win32 can filter files in the browse dialog +if has("gui_win32") && !exists("b:browsefilter") + let b:browsefilter = "LPC Source Files (*.c *.d *.h)\t*.c;*.d;*.h\n" . + \ "LPC Data Files (*.scr *.o *.dat)\t*.scr;*.o;*.dat\n" . + \ "Text Documentation (*.txt)\t*.txt\n" . + \ "All Files (*.*)\t*.*\n" +endif + +" Nodule: Highlight links {{{1 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link lpcModifier lpcStorageClass + +hi def link lpcQuotedFmt lpcFormat +hi def link lpcFormat lpcSpecial +hi def link lpcCppString lpcString " Cpp means + " C Pre-Processor +hi def link lpcCommentL lpcComment +hi def link lpcCommentStart lpcComment +hi def link lpcUserLabel lpcLabel +hi def link lpcSpecialCharacter lpcSpecial +hi def link lpcOctal lpcPreProc +hi def link lpcOctalZero lpcSpecial " LPC will treat octal numbers + " as decimals, programmers should + " be aware of that. +hi def link lpcEfunError lpcError +hi def link lpcKeywdError lpcError +hi def link lpcOctalError lpcError +hi def link lpcParenError lpcError +hi def link lpcErrInParen lpcError +hi def link lpcErrInBracket lpcError +hi def link lpcCommentError lpcError +hi def link lpcCommentStartError lpcError +hi def link lpcSpaceError lpcError +hi def link lpcSpecialError lpcError +hi def link lpcErrFunc lpcError + +if exists("lpc_pre_v22") + hi def link lpcOldEfuns lpc_efuns + hi def link lpcNewEfuns lpcError +else + hi def link lpcOldEfuns lpcReserved + hi def link lpcNewEfuns lpc_efuns +endif +hi def link lpc_efuns lpcFunction + +hi def link lpcReserved lpcPreProc +hi def link lpcTextString lpcString " This should be preprocessors, but +hi def link lpcArrayString lpcPreProc " let's make some difference + " between text and array + +hi def link lpcIncluded lpcString +hi def link lpcCommentString lpcString +hi def link lpcComment2String lpcString +hi def link lpcCommentSkip lpcComment +hi def link lpcCommentFunc lpcComment + +hi def link lpcCppSkip lpcCppOut +hi def link lpcCppOut2 lpcCppOut +hi def link lpcCppOut lpcComment + +" Standard type below +hi def link lpcApplies Special +hi def link lpcCharacter Character +hi def link lpcComment Comment +hi def link lpcConditional Conditional +hi def link lpcConstant Constant +hi def link lpcDefine Macro +hi def link lpcError Error +hi def link lpcFloat Float +hi def link lpcFunction Function +hi def link lpcIdentifier Identifier +hi def link lpcInclude Include +hi def link lpcLabel Label +hi def link lpcNumber Number +hi def link lpcOperator Operator +hi def link lpcPreCondit PreCondit +hi def link lpcPreProc PreProc +hi def link lpcRepeat Repeat +hi def link lpcStatement Statement +hi def link lpcStorageClass StorageClass +hi def link lpcString String +hi def link lpcStructure Structure +hi def link lpcSpecial LineNr +hi def link lpcTodo Todo +hi def link lpcType Type + + +" Nodule: This is the end nodule. {{{1 + +let b:current_syntax = "lpc" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim:ts=8:nosta:sw=2:ai:si: +" vim600:set fdm=marker: }}}1 diff --git a/.config/vim/syntax/lprolog.vim b/.config/vim/syntax/lprolog.vim new file mode 100644 index 0000000..85c3537 --- /dev/null +++ b/.config/vim/syntax/lprolog.vim @@ -0,0 +1,124 @@ +" Vim syntax file +" Language: LambdaProlog (Teyjus) +" Filenames: *.mod *.sig +" Maintainer: Markus Mottl +" URL: http://www.ocaml.info/vim/syntax/lprolog.vim +" Last Change: 2006 Feb 05 +" 2001 Apr 26 - Upgraded for new Vim version +" 2000 Jun 5 - Initial release + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Lambda Prolog is case sensitive. +syn case match + +syn match lprologBrackErr "\]" +syn match lprologParenErr ")" + +syn cluster lprologContained contains=lprologTodo,lprologModuleName,lprologTypeNames,lprologTypeName + +" Enclosing delimiters +syn region lprologEncl transparent matchgroup=lprologKeyword start="(" matchgroup=lprologKeyword end=")" contains=ALLBUT,@lprologContained,lprologParenErr +syn region lprologEncl transparent matchgroup=lprologKeyword start="\[" matchgroup=lprologKeyword end="\]" contains=ALLBUT,@lprologContained,lprologBrackErr + +" General identifiers +syn match lprologIdentifier "\<\(\w\|[-+*/\\^<>=`'~?@#$&!_]\)*\>" +syn match lprologVariable "\<\(\u\|_\)\(\w\|[-+*/\\^<>=`'~?@#$&!]\)*\>" + +syn match lprologOperator "/" + +" Comments +syn region lprologComment start="/\*" end="\*/" contains=lprologComment,lprologTodo +syn region lprologComment start="%" end="$" contains=lprologTodo +syn keyword lprologTodo contained TODO FIXME XXX + +syn match lprologInteger "\<\d\+\>" +syn match lprologReal "\<\(\d\+\)\=\.\d+\>" +syn region lprologString start=+"+ skip=+\\\\\|\\"+ end=+"+ + +" Clause definitions +syn region lprologClause start="^\w\+" end=":-\|\." + +" Modules +syn region lprologModule matchgroup=lprologKeyword start="^\" matchgroup=lprologKeyword end="\." + +" Types +syn match lprologKeyword "^\" skipwhite nextgroup=lprologTypeNames +syn region lprologTypeNames matchgroup=lprologBraceErr start="\<\w\+\>" matchgroup=lprologKeyword end="\." contained contains=lprologTypeName,lprologOperator +syn match lprologTypeName "\<\w\+\>" contained + +" Keywords +syn keyword lprologKeyword end import accumulate accum_sig +syn keyword lprologKeyword local localkind closed sig +syn keyword lprologKeyword kind exportdef useonly +syn keyword lprologKeyword infixl infixr infix prefix +syn keyword lprologKeyword prefixr postfix postfixl + +syn keyword lprologSpecial pi sigma is true fail halt stop not + +" Operators +syn match lprologSpecial ":-" +syn match lprologSpecial "->" +syn match lprologSpecial "=>" +syn match lprologSpecial "\\" +syn match lprologSpecial "!" + +syn match lprologSpecial "," +syn match lprologSpecial ";" +syn match lprologSpecial "&" + +syn match lprologOperator "+" +syn match lprologOperator "-" +syn match lprologOperator "*" +syn match lprologOperator "\~" +syn match lprologOperator "\^" +syn match lprologOperator "<" +syn match lprologOperator ">" +syn match lprologOperator "=<" +syn match lprologOperator ">=" +syn match lprologOperator "::" +syn match lprologOperator "=" + +syn match lprologOperator "\." +syn match lprologOperator ":" +syn match lprologOperator "|" + +syn match lprologCommentErr "\*/" + +syn sync minlines=50 +syn sync maxlines=500 + + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link lprologComment Comment +hi def link lprologTodo Todo + +hi def link lprologKeyword Keyword +hi def link lprologSpecial Special +hi def link lprologOperator Operator +hi def link lprologIdentifier Normal + +hi def link lprologInteger Number +hi def link lprologReal Number +hi def link lprologString String + +hi def link lprologCommentErr Error +hi def link lprologBrackErr Error +hi def link lprologParenErr Error + +hi def link lprologModuleName Special +hi def link lprologTypeName Identifier + +hi def link lprologVariable Keyword +hi def link lprologAtom Normal +hi def link lprologClause Type + + +let b:current_syntax = "lprolog" + +" vim: ts=8 diff --git a/.config/vim/syntax/lscript.vim b/.config/vim/syntax/lscript.vim new file mode 100644 index 0000000..3c4a0ff --- /dev/null +++ b/.config/vim/syntax/lscript.vim @@ -0,0 +1,200 @@ +" Vim syntax file +" Language: LotusScript +" Maintainer: Taryn East (taryneast@hotmail.com) +" Last Change: 2003 May 11 + +" This is a rough amalgamation of the visual basic syntax file, and the UltraEdit +" and Textpad syntax highlighters. +" It's not too brilliant given that a) I've never written a syntax.vim file before +" and b) I'm not so crash hot at LotusScript either. If you see any problems +" feel free to email me with them. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" LotusScript is case insensitive +syn case ignore + +" These are Notes thingies that had an equivalent in the vb highlighter +" or I was already familiar with them +syn keyword lscriptStatement ActivateApp As And Base Beep Call Case ChDir ChDrive Class +syn keyword lscriptStatement Const Dim Declare DefCur DefDbl DefInt DefLng DefSng DefStr +syn keyword lscriptStatement DefVar Do Else %Else ElseIf %ElseIf End %End Erase Event Exit +syn keyword lscriptStatement Explicit FileCopy FALSE For ForAll Function Get GoTo GoSub +syn keyword lscriptStatement If %If In Is Kill Let List Lock Loop MkDir +syn keyword lscriptStatement Name Next New NoCase NoPitch Not Nothing NULL +syn keyword lscriptStatement On Option Or PI Pitch Preserve Private Public +syn keyword lscriptStatement Property Public Put +syn keyword lscriptStatement Randomize ReDim Reset Resume Return RmDir +syn keyword lscriptStatement Select SendKeys SetFileAttr Set Static Sub Then To TRUE +syn keyword lscriptStatement Type Unlock Until While WEnd With Write XOr + +syn keyword lscriptDatatype Array Currency Double Integer Long Single String String$ Variant + +syn keyword lscriptNotesType Field Button Navigator +syn keyword lscriptNotesType NotesACL NotesACLEntry NotesAgent NotesDatabase NotesDateRange +syn keyword lscriptNotesType NotesDateTime NotesDbDirectory NotesDocument +syn keyword lscriptNotesType NotesDocumentCollection NotesEmbeddedObject NotesForm +syn keyword lscriptNotesType NotesInternational NotesItem NotesLog NotesName NotesNewsLetter +syn keyword lscriptNotesType NotesMIMEEntry NotesOutline NotesOutlineEntry NotesRegistration +syn keyword lscriptNotesType NotesReplication NotesRichTextItem NotesRichTextParagraphStyle +syn keyword lscriptNotesType NotesRichTextStyle NotesRichTextTab +syn keyword lscriptNotesType NotesSession NotesTimer NotesView NotesViewColumn NotesViewEntry +syn keyword lscriptNotesType NotesViewEntryCollection NotesViewNavigator NotesUIDatabase +syn keyword lscriptNotesType NotesUIDocument NotesUIView NotesUIWorkspace + +syn keyword lscriptNotesConst ACLLEVEL_AUTHOR ACLLEVEL_DEPOSITOR ACLLEVEL_DESIGNER +syn keyword lscriptNotesConst ACLLEVEL_EDITOR ACLLEVEL_MANAGER ACLLEVEL_NOACCESS +syn keyword lscriptNotesConst ACLLEVEL_READER ACLTYPE_MIXED_GROUP ACLTYPE_PERSON +syn keyword lscriptNotesConst ACLTYPE_PERSON_GROUP ACLTYPE_SERVER ACLTYPE_SERVER_GROUP +syn keyword lscriptNotesConst ACLTYPE_UNSPECIFIED ACTIONCD ALIGN_CENTER +syn keyword lscriptNotesConst ALIGN_FULL ALIGN_LEFT ALIGN_NOWRAP ALIGN_RIGHT +syn keyword lscriptNotesConst ASSISTANTINFO ATTACHMENT AUTHORS COLOR_BLACK +syn keyword lscriptNotesConst COLOR_BLUE COLOR_CYAN COLOR_DARK_BLUE COLOR_DARK_CYAN +syn keyword lscriptNotesConst COLOR_DARK_GREEN COLOR_DARK_MAGENTA COLOR_DARK_RED +syn keyword lscriptNotesConst COLOR_DARK_YELLOW COLOR_GRAY COLOR_GREEN COLOR_LIGHT_GRAY +syn keyword lscriptNotesConst COLOR_MAGENTA COLOR_RED COLOR_WHITE COLOR_YELLOW +syn keyword lscriptNotesConst DATABASE DATETIMES DB_REPLICATION_PRIORITY_HIGH +syn keyword lscriptNotesConst DB_REPLICATION_PRIORITY_LOW DB_REPLICATION_PRIORITY_MED +syn keyword lscriptNotesConst DB_REPLICATION_PRIORITY_NOTSET EFFECTS_EMBOSS +syn keyword lscriptNotesConst EFFECTS_EXTRUDE EFFECTS_NONE EFFECTS_SHADOW +syn keyword lscriptNotesConst EFFECTS_SUBSCRIPT EFFECTS_SUPERSCRIPT EMBED_ATTACHMENT +syn keyword lscriptNotesConst EMBED_OBJECT EMBED_OBJECTLINK EMBEDDEDOBJECT ERRORITEM +syn keyword lscriptNotesConst EV_ALARM EV_COMM EV_MAIL EV_MISC EV_REPLICA EV_RESOURCE +syn keyword lscriptNotesConst EV_SECURITY EV_SERVER EV_UNKNOWN EV_UPDATE FONT_COURIER +syn keyword lscriptNotesConst FONT_HELV FONT_ROMAN FORMULA FT_DATABASE FT_DATE_ASC +syn keyword lscriptNotesConst FT_DATE_DES FT_FILESYSTEM FT_FUZZY FT_SCORES FT_STEMS +syn keyword lscriptNotesConst FT_THESAURUS HTML ICON ID_CERTIFIER ID_FLAT +syn keyword lscriptNotesConst ID_HIERARCHICAL LSOBJECT MIME_PART NAMES NOTESLINKS +syn keyword lscriptNotesConst NOTEREFS NOTES_DESKTOP_CLIENT NOTES_FULL_CLIENT +syn keyword lscriptNotesConst NOTES_LIMITED_CLIENT NUMBERS OTHEROBJECT +syn keyword lscriptNotesConst OUTLINE_CLASS_DATABASE OUTLINE_CLASS_DOCUMENT +syn keyword lscriptNotesConst OUTLINE_CLASS_FOLDER OUTLINE_CLASS_FORM +syn keyword lscriptNotesConst OUTLINE_CLASS_FRAMESET OUTLINE_CLASS_NAVIGATOR +syn keyword lscriptNotesConst OUTLINE_CLASS_PAGE OUTLINE_CLASS_UNKNOWN +syn keyword lscriptNotesConst OUTLINE_CLASS_VIEW OUTLINE_OTHER_FOLDERS_TYPE +syn keyword lscriptNotesConst OUTLINE_OTHER_UNKNOWN_TYPE OUTLINE_OTHER_VIEWS_TYPE +syn keyword lscriptNotesConst OUTLINE_TYPE_ACTION OUTLINE_TYPE_NAMEDELEMENT +syn keyword lscriptNotesConst OUTLINE_TYPE_NOTELINK OUTLINE_TYPE_URL PAGINATE_BEFORE +syn keyword lscriptNotesConst PAGINATE_DEFAULT PAGINATE_KEEP_TOGETHER +syn keyword lscriptNotesConst PAGINATE_KEEP_WITH_NEXT PICKLIST_CUSTOM PICKLIST_NAMES +syn keyword lscriptNotesConst PICKLIST_RESOURCES PICKLIST_ROOMS PROMPT_OK PROMPT_OKCANCELCOMBO +syn keyword lscriptNotesConst PROMPT_OKCANCELEDIT PROMPT_OKCANCELEDITCOMBO PROMPT_OKCANCELLIST +syn keyword lscriptNotesConst PROMPT_OKCANCELLISTMULT PROMPT_PASSWORD PROMPT_YESNO +syn keyword lscriptNotesConst PROMPT_YESNOCANCEL QUERYCD READERS REPLICA_CANDIDATE +syn keyword lscriptNotesConst RICHTEXT RULER_ONE_CENTIMETER RULER_ONE_INCH SEV_FAILURE +syn keyword lscriptNotesConst SEV_FATAL SEV_NORMAL SEV_WARNING1 SEV_WARNING2 +syn keyword lscriptNotesConst SIGNATURE SPACING_DOUBLE SPACING_ONE_POINT_50 +syn keyword lscriptNotesConst SPACING_SINGLE STYLE_NO_CHANGE TAB_CENTER TAB_DECIMAL +syn keyword lscriptNotesConst TAB_LEFT TAB_RIGHT TARGET_ALL_DOCS TARGET_ALL_DOCS_IN_VIEW +syn keyword lscriptNotesConst TARGET_NEW_DOCS TARGET_NEW_OR_MODIFIED_DOCS TARGET_NONE +syn keyword lscriptNotesConst TARGET_RUN_ONCE TARGET_SELECTED_DOCS TARGET_UNREAD_DOCS_IN_VIEW +syn keyword lscriptNotesConst TEMPLATE TEMPLATE_CANDIDATE TEXT TRIGGER_AFTER_MAIL_DELIVERY +syn keyword lscriptNotesConst TRIGGER_BEFORE_MAIL_DELIVERY TRIGGER_DOC_PASTED +syn keyword lscriptNotesConst TRIGGER_DOC_UPDATE TRIGGER_MANUAL TRIGGER_NONE +syn keyword lscriptNotesConst TRIGGER_SCHEDULED UNAVAILABLE UNKNOWN USERDATA +syn keyword lscriptNotesConst USERID VC_ALIGN_CENTER VC_ALIGN_LEFT VC_ALIGN_RIGHT +syn keyword lscriptNotesConst VC_ATTR_PARENS VC_ATTR_PUNCTUATED VC_ATTR_PERCENT +syn keyword lscriptNotesConst VC_FMT_ALWAYS VC_FMT_CURRENCY VC_FMT_DATE VC_FMT_DATETIME +syn keyword lscriptNotesConst VC_FMT_FIXED VC_FMT_GENERAL VC_FMT_HM VC_FMT_HMS +syn keyword lscriptNotesConst VC_FMT_MD VC_FMT_NEVER VC_FMT_SCIENTIFIC +syn keyword lscriptNotesConst VC_FMT_SOMETIMES VC_FMT_TIME VC_FMT_TODAYTIME VC_FMT_YM +syn keyword lscriptNotesConst VC_FMT_YMD VC_FMT_Y4M VC_FONT_BOLD VC_FONT_ITALIC +syn keyword lscriptNotesConst VC_FONT_STRIKEOUT VC_FONT_UNDERLINE VC_SEP_COMMA +syn keyword lscriptNotesConst VC_SEP_NEWLINE VC_SEP_SEMICOLON VC_SEP_SPACE +syn keyword lscriptNotesConst VIEWMAPDATA VIEWMAPLAYOUT VW_SPACING_DOUBLE +syn keyword lscriptNotesConst VW_SPACING_ONE_POINT_25 VW_SPACING_ONE_POINT_50 +syn keyword lscriptNotesConst VW_SPACING_ONE_POINT_75 VW_SPACING_SINGLE + +syn keyword lscriptFunction Abs Asc Atn Atn2 ACos ASin +syn keyword lscriptFunction CCur CDat CDbl Chr Chr$ CInt CLng Command Command$ +syn keyword lscriptFunction Cos CSng CStr +syn keyword lscriptFunction CurDir CurDir$ CVar Date Date$ DateNumber DateSerial DateValue +syn keyword lscriptFunction Day Dir Dir$ Environ$ Environ EOF Error Error$ Evaluate Exp +syn keyword lscriptFunction FileAttr FileDateTime FileLen Fix Format Format$ FreeFile +syn keyword lscriptFunction GetFileAttr GetThreadInfo Hex Hex$ Hour +syn keyword lscriptFunction IMESetMode IMEStatus Input Input$ InputB InputB$ +syn keyword lscriptFunction InputBP InputBP$ InputBox InputBox$ InStr InStrB InStrBP InstrC +syn keyword lscriptFunction IsA IsArray IsDate IsElement IsList IsNumeric +syn keyword lscriptFunction IsObject IsResponse IsScalar IsUnknown LCase LCase$ +syn keyword lscriptFunction Left Left$ LeftB LeftB$ LeftC +syn keyword lscriptFunction LeftBP LeftBP$ Len LenB LenBP LenC Loc LOF Log +syn keyword lscriptFunction LSet LTrim LTrim$ MessageBox Mid Mid$ MidB MidB$ MidC +syn keyword lscriptFunction Minute Month Now Oct Oct$ Responses Right Right$ +syn keyword lscriptFunction RightB RightB$ RightBP RightBP$ RightC Round Rnd RSet RTrim RTrim$ +syn keyword lscriptFunction Second Seek Sgn Shell Sin Sleep Space Space$ Spc Sqr Str Str$ +syn keyword lscriptFunction StrConv StrLeft StrleftBack StrRight StrRightBack +syn keyword lscriptFunction StrCompare Tab Tan Time Time$ TimeNumber Timer +syn keyword lscriptFunction TimeValue Trim Trim$ Today TypeName UCase UCase$ +syn keyword lscriptFunction UniversalID Val Weekday Year + +syn keyword lscriptMethods AppendToTextList ArrayAppend ArrayReplace ArrayGetIndex +syn keyword lscriptMethods Append Bind Close +"syn keyword lscriptMethods Contains +syn keyword lscriptMethods CopyToDatabase CopyAllItems Count CurrentDatabase Delete Execute +syn keyword lscriptMethods GetAllDocumentsByKey GetDatabase GetDocumentByKey +syn keyword lscriptMethods GetDocumentByUNID GetFirstDocument GetFirstItem +syn keyword lscriptMethods GetItems GetItemValue GetNthDocument GetView +syn keyword lscriptMethods IsEmpty IsNull %Include Items +syn keyword lscriptMethods Line LBound LoadMsgText Open Print +syn keyword lscriptMethods RaiseEvent ReplaceItemValue Remove RemoveItem Responses +syn keyword lscriptMethods Save Stop UBound UnprocessedDocuments Write + +syn keyword lscriptEvents Compare OnError + +"************************************************************************************* +"These are Notes thingies that I'm not sure how to classify as they had no vb equivalent +" At a wild guess I'd put them as Functions... +" if anyone sees something really out of place... tell me! + +syn keyword lscriptFunction Access Alias Any Bin Bin$ Binary ByVal +syn keyword lscriptFunction CodeLock CodeLockCheck CodeUnlock CreateLock +syn keyword lscriptFunction CurDrive CurDrive$ DataType DestroyLock Eqv +syn keyword lscriptFunction Erl Err Fraction From FromFunction FullTrim +syn keyword lscriptFunction Imp Int Lib Like ListTag LMBCS LSServer Me +syn keyword lscriptFunction Mod MsgDescription MsgText Output Published +syn keyword lscriptFunction Random Read Shared Step UChr UChr$ Uni Unicode +syn keyword lscriptFunction Until Use UseLSX UString UString$ Width Yield + + +syn keyword lscriptTodo contained TODO + +"integer number, or floating point number without a dot. +syn match lscriptNumber "\<\d\+\>" +"floating point number, with dot +syn match lscriptNumber "\<\d\+\.\d*\>" +"floating point number, starting with a dot +syn match lscriptNumber "\.\d\+\>" + +" String and Character constants +syn region lscriptString start=+"+ end=+"+ +syn region lscriptComment start="REM" end="$" contains=lscriptTodo +syn region lscriptComment start="'" end="$" contains=lscriptTodo +syn region lscriptLineNumber start="^\d" end="\s" +syn match lscriptTypeSpecifier "[a-zA-Z0-9][\$%&!#]"ms=s+1 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi lscriptNotesType term=underline ctermfg=DarkGreen guifg=SeaGreen gui=bold + +hi def link lscriptNotesConst lscriptNotesType +hi def link lscriptLineNumber Comment +hi def link lscriptDatatype Type +hi def link lscriptNumber Number +hi def link lscriptError Error +hi def link lscriptStatement Statement +hi def link lscriptString String +hi def link lscriptComment Comment +hi def link lscriptTodo Todo +hi def link lscriptFunction Identifier +hi def link lscriptMethods PreProc +hi def link lscriptEvents Special +hi def link lscriptTypeSpecifier Type + + +let b:current_syntax = "lscript" + +" vim: ts=8 diff --git a/.config/vim/syntax/lsl.vim b/.config/vim/syntax/lsl.vim new file mode 100644 index 0000000..3b2baa0 --- /dev/null +++ b/.config/vim/syntax/lsl.vim @@ -0,0 +1,277 @@ +" Vim syntax file +" Language: Linden Scripting Language +" Maintainer: Timo Frenay +" Last Change: 2012 Apr 30 + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +" Initializations +syn case match + +" Keywords +syn keyword lslKeyword default do else for if jump return state while + +" Types +syn keyword lslType float integer key list quaternion rotation string vector + +" Labels +syn match lslLabel +@\h\w*+ display + +" Constants +syn keyword lslConstant +\ ACTIVE AGENT AGENT_ALWAYS_RUN AGENT_ATTACHMENTS AGENT_AWAY AGENT_BUSY +\ AGENT_CROUCHING AGENT_FLYING AGENT_IN_AIR AGENT_MOUSELOOK AGENT_ON_OBJECT +\ AGENT_SCRIPTED AGENT_SITTING AGENT_TYPING AGENT_WALKING ALL_SIDES ANIM_ON +\ ATTACH_BACK ATTACH_BELLY ATTACH_CHEST ATTACH_CHIN ATTACH_HEAD +\ ATTACH_HUD_BOTTOM ATTACH_HUD_BOTTOM_LEFT ATTACH_HUD_BOTTOM_RIGHT +\ ATTACH_HUD_CENTER_1 ATTACH_HUD_CENTER_2 ATTACH_HUD_TOP_CENTER +\ ATTACH_HUD_TOP_LEFT ATTACH_HUD_TOP_RIGHT ATTACH_LEAR ATTACH_LEYE ATTACH_LFOOT +\ ATTACH_LHAND ATTACH_LHIP ATTACH_LLARM ATTACH_LLLEG ATTACH_LPEC +\ ATTACH_LSHOULDER ATTACH_LUARM ATTACH_LULEG ATTACH_MOUTH ATTACH_NOSE +\ ATTACH_PELVIS ATTACH_REAR ATTACH_REYE ATTACH_RFOOT ATTACH_RHAND ATTACH_RHIP +\ ATTACH_RLARM ATTACH_RLLEG ATTACH_RPEC ATTACH_RSHOULDER ATTACH_RUARM +\ ATTACH_RULEG CAMERA_ACTIVE CAMERA_BEHINDNESS_ANGLE CAMERA_BEHINDNESS_LAG +\ CAMERA_DISTANCE CAMERA_FOCUS CAMERA_FOCUS_LAG CAMERA_FOCUS_LOCKED +\ CAMERA_FOCUS_OFFSET CAMERA_FOCUS_THRESHOLD CAMERA_PITCH CAMERA_POSITION +\ CAMERA_POSITION_LAG CAMERA_POSITION_LOCKED CAMERA_POSITION_THRESHOLD +\ CHANGED_ALLOWED_DROP CHANGED_COLOR CHANGED_INVENTORY CHANGED_LINK +\ CHANGED_OWNER CHANGED_REGION CHANGED_SCALE CHANGED_SHAPE CHANGED_TELEPORT +\ CHANGED_TEXTURE CLICK_ACTION_BUY CLICK_ACTION_NONE CLICK_ACTION_OPEN +\ CLICK_ACTION_OPEN_MEDIA CLICK_ACTION_PAY CLICK_ACTION_PLAY CLICK_ACTION_SIT +\ CLICK_ACTION_TOUCH CONTROL_BACK CONTROL_DOWN CONTROL_FWD CONTROL_LBUTTON +\ CONTROL_LEFT CONTROL_ML_LBUTTON CONTROL_RIGHT CONTROL_ROT_LEFT +\ CONTROL_ROT_RIGHT CONTROL_UP DATA_BORN DATA_NAME DATA_ONLINE DATA_PAYINFO +\ DATA_RATING DATA_SIM_POS DATA_SIM_RATING DATA_SIM_STATUS DEBUG_CHANNEL +\ DEG_TO_RAD EOF FALSE HTTP_BODY_MAXLENGTH HTTP_BODY_TRUNCATED HTTP_METHOD +\ HTTP_MIMETYPE HTTP_VERIFY_CERT INVENTORY_ALL INVENTORY_ANIMATION +\ INVENTORY_BODYPART INVENTORY_CLOTHING INVENTORY_GESTURE INVENTORY_LANDMARK +\ INVENTORY_NONE INVENTORY_NOTECARD INVENTORY_OBJECT INVENTORY_SCRIPT +\ INVENTORY_SOUND INVENTORY_TEXTURE LAND_LARGE_BRUSH LAND_LEVEL LAND_LOWER +\ LAND_MEDIUM_BRUSH LAND_NOISE LAND_RAISE LAND_REVERT LAND_SMALL_BRUSH +\ LAND_SMOOTH LINK_ALL_CHILDREN LINK_ALL_OTHERS LINK_ROOT LINK_SET LINK_THIS +\ LIST_STAT_GEOMETRIC_MEAN LIST_STAT_MAX LIST_STAT_MEAN LIST_STAT_MEDIAN +\ LIST_STAT_MIN LIST_STAT_NUM_COUNT LIST_STAT_RANGE LIST_STAT_STD_DEV +\ LIST_STAT_SUM LIST_STAT_SUM_SQUARES LOOP MASK_BASE MASK_EVERYONE MASK_GROUP +\ MASK_NEXT MASK_OWNER NULL_KEY OBJECT_CREATOR OBJECT_DESC OBJECT_GROUP +\ OBJECT_NAME OBJECT_OWNER OBJECT_POS OBJECT_ROT OBJECT_UNKNOWN_DETAIL +\ OBJECT_VELOCITY PARCEL_COUNT_GROUP PARCEL_COUNT_OTHER PARCEL_COUNT_OWNER +\ PARCEL_COUNT_SELECTED PARCEL_COUNT_TEMP PARCEL_COUNT_TOTAL PARCEL_DETAILS_AREA +\ PARCEL_DETAILS_DESC PARCEL_DETAILS_GROUP PARCEL_DETAILS_NAME +\ PARCEL_DETAILS_OWNER PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY +\ PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS PARCEL_FLAG_ALLOW_CREATE_OBJECTS +\ PARCEL_FLAG_ALLOW_DAMAGE PARCEL_FLAG_ALLOW_FLY +\ PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY PARCEL_FLAG_ALLOW_GROUP_SCRIPTS +\ PARCEL_FLAG_ALLOW_LANDMARK PARCEL_FLAG_ALLOW_SCRIPTS +\ PARCEL_FLAG_ALLOW_TERRAFORM PARCEL_FLAG_LOCAL_SOUND_ONLY +\ PARCEL_FLAG_RESTRICT_PUSHOBJECT PARCEL_FLAG_USE_ACCESS_GROUP +\ PARCEL_FLAG_USE_ACCESS_LIST PARCEL_FLAG_USE_BAN_LIST +\ PARCEL_FLAG_USE_LAND_PASS_LIST PARCEL_MEDIA_COMMAND_AGENT +\ PARCEL_MEDIA_COMMAND_AUTO_ALIGN PARCEL_MEDIA_COMMAND_DESC +\ PARCEL_MEDIA_COMMAND_LOOP PARCEL_MEDIA_COMMAND_LOOP_SET +\ PARCEL_MEDIA_COMMAND_PAUSE PARCEL_MEDIA_COMMAND_PLAY PARCEL_MEDIA_COMMAND_SIZE +\ PARCEL_MEDIA_COMMAND_STOP PARCEL_MEDIA_COMMAND_TEXTURE +\ PARCEL_MEDIA_COMMAND_TIME PARCEL_MEDIA_COMMAND_TYPE +\ PARCEL_MEDIA_COMMAND_UNLOAD PARCEL_MEDIA_COMMAND_URL PASSIVE +\ PAYMENT_INFO_ON_FILE PAYMENT_INFO_USED PAY_DEFAULT PAY_HIDE PERM_ALL PERM_COPY +\ PERM_MODIFY PERM_MOVE PERM_TRANSFER PERMISSION_ATTACH PERMISSION_CHANGE_LINKS +\ PERMISSION_CONTROL_CAMERA PERMISSION_DEBIT PERMISSION_TAKE_CONTROLS +\ PERMISSION_TRACK_CAMERA PERMISSION_TRIGGER_ANIMATION PI PI_BY_TWO PING_PONG +\ PRIM_BUMP_BARK PRIM_BUMP_BLOBS PRIM_BUMP_BRICKS PRIM_BUMP_BRIGHT +\ PRIM_BUMP_CHECKER PRIM_BUMP_CONCRETE PRIM_BUMP_DARK PRIM_BUMP_DISKS +\ PRIM_BUMP_GRAVEL PRIM_BUMP_LARGETILE PRIM_BUMP_NONE PRIM_BUMP_SHINY +\ PRIM_BUMP_SIDING PRIM_BUMP_STONE PRIM_BUMP_STUCCO PRIM_BUMP_SUCTION +\ PRIM_BUMP_TILE PRIM_BUMP_WEAVE PRIM_BUMP_WOOD PRIM_CAST_SHADOWS PRIM_COLOR +\ PRIM_FLEXIBLE PRIM_FULLBRIGHT PRIM_HOLE_CIRCLE PRIM_HOLE_DEFAULT +\ PRIM_HOLE_SQUARE PRIM_HOLE_TRIANGLE PRIM_MATERIAL PRIM_MATERIAL_FLESH +\ PRIM_MATERIAL_GLASS PRIM_MATERIAL_LIGHT PRIM_MATERIAL_METAL +\ PRIM_MATERIAL_PLASTIC PRIM_MATERIAL_RUBBER PRIM_MATERIAL_STONE +\ PRIM_MATERIAL_WOOD PRIM_PHANTOM PRIM_PHYSICS PRIM_POINT_LIGHT PRIM_POSITION +\ PRIM_ROTATION PRIM_SCULPT_TYPE_CYLINDER PRIM_SCULPT_TYPE_PLANE +\ PRIM_SCULPT_TYPE_SPHERE PRIM_SCULPT_TYPE_TORUS PRIM_SHINY_HIGH PRIM_SHINY_LOW +\ PRIM_SHINY_MEDIUM PRIM_SHINY_NONE PRIM_SIZE PRIM_TEMP_ON_REZ PRIM_TEXGEN +\ PRIM_TEXGEN_DEFAULT PRIM_TEXGEN_PLANAR PRIM_TEXTURE PRIM_TYPE PRIM_TYPE_BOX +\ PRIM_TYPE_BOX PRIM_TYPE_CYLINDER PRIM_TYPE_CYLINDER PRIM_TYPE_LEGACY +\ PRIM_TYPE_PRISM PRIM_TYPE_PRISM PRIM_TYPE_RING PRIM_TYPE_SCULPT +\ PRIM_TYPE_SPHERE PRIM_TYPE_SPHERE PRIM_TYPE_TORUS PRIM_TYPE_TORUS +\ PRIM_TYPE_TUBE PRIM_TYPE_TUBE PSYS_PART_BEAM_MASK PSYS_PART_BOUNCE_MASK +\ PSYS_PART_DEAD_MASK PSYS_PART_EMISSIVE_MASK PSYS_PART_END_ALPHA +\ PSYS_PART_END_COLOR PSYS_PART_END_SCALE PSYS_PART_FLAGS +\ PSYS_PART_FOLLOW_SRC_MASK PSYS_PART_FOLLOW_VELOCITY_MASK +\ PSYS_PART_INTERP_COLOR_MASK PSYS_PART_INTERP_SCALE_MASK PSYS_PART_MAX_AGE +\ PSYS_PART_RANDOM_ACCEL_MASK PSYS_PART_RANDOM_VEL_MASK PSYS_PART_START_ALPHA +\ PSYS_PART_START_COLOR PSYS_PART_START_SCALE PSYS_PART_TARGET_LINEAR_MASK +\ PSYS_PART_TARGET_POS_MASK PSYS_PART_TRAIL_MASK PSYS_PART_WIND_MASK +\ PSYS_SRC_ACCEL PSYS_SRC_ANGLE_BEGIN PSYS_SRC_ANGLE_END +\ PSYS_SRC_BURST_PART_COUNT PSYS_SRC_BURST_RADIUS PSYS_SRC_BURST_RATE +\ PSYS_SRC_BURST_SPEED_MAX PSYS_SRC_BURST_SPEED_MIN PSYS_SRC_INNERANGLE +\ PSYS_SRC_MAX_AGE PSYS_SRC_OMEGA PSYS_SRC_OUTERANGLE PSYS_SRC_PATTERN +\ PSYS_SRC_PATTERN_ANGLE PSYS_SRC_PATTERN_ANGLE_CONE +\ PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY PSYS_SRC_PATTERN_DROP +\ PSYS_SRC_PATTERN_EXPLODE PSYS_SRC_TARGET_KEY PSYS_SRC_TEXTURE PUBLIC_CHANNEL +\ RAD_TO_DEG REGION_FLAG_ALLOW_DAMAGE REGION_FLAG_ALLOW_DIRECT_TELEPORT +\ REGION_FLAG_BLOCK_FLY REGION_FLAG_BLOCK_TERRAFORM +\ REGION_FLAG_DISABLE_COLLISIONS REGION_FLAG_DISABLE_PHYSICS +\ REGION_FLAG_FIXED_SUN REGION_FLAG_RESTRICT_PUSHOBJECT REGION_FLAG_SANDBOX +\ REMOTE_DATA_CHANNEL REMOTE_DATA_REPLY REMOTE_DATA_REQUEST REVERSE ROTATE SCALE +\ SCRIPTED SMOOTH SQRT2 STATUS_BLOCK_GRAB STATUS_CAST_SHADOWS STATUS_DIE_AT_EDGE +\ STATUS_PHANTOM STATUS_PHYSICS STATUS_RETURN_AT_EDGE STATUS_ROTATE_X +\ STATUS_ROTATE_Y STATUS_ROTATE_Z STATUS_SANDBOX STRING_TRIM STRING_TRIM_HEAD +\ STRING_TRIM_TAIL TRUE TWO_PI TYPE_FLOAT TYPE_INTEGER TYPE_INVALID TYPE_KEY +\ TYPE_ROTATION TYPE_STRING TYPE_VECTOR VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY +\ VEHICLE_ANGULAR_DEFLECTION_TIMESCALE VEHICLE_ANGULAR_FRICTION_TIMESCALE +\ VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE VEHICLE_ANGULAR_MOTOR_DIRECTION +\ VEHICLE_ANGULAR_MOTOR_TIMESCALE VEHICLE_BANKING_EFFICIENCY VEHICLE_BANKING_MIX +\ VEHICLE_BANKING_TIMESCALE VEHICLE_BUOYANCY VEHICLE_FLAG_CAMERA_DECOUPLED +\ VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT VEHICLE_FLAG_HOVER_TERRAIN_ONLY +\ VEHICLE_FLAG_HOVER_UP_ONLY VEHICLE_FLAG_HOVER_WATER_ONLY +\ VEHICLE_FLAG_LIMIT_MOTOR_UP VEHICLE_FLAG_LIMIT_ROLL_ONLY +\ VEHICLE_FLAG_MOUSELOOK_BANK VEHICLE_FLAG_MOUSELOOK_STEER +\ VEHICLE_FLAG_NO_DEFLECTION_UP VEHICLE_HOVER_EFFICIENCY VEHICLE_HOVER_HEIGHT +\ VEHICLE_HOVER_TIMESCALE VEHICLE_LINEAR_DEFLECTION_EFFICIENCY +\ VEHICLE_LINEAR_DEFLECTION_TIMESCALE VEHICLE_LINEAR_FRICTION_TIMESCALE +\ VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE VEHICLE_LINEAR_MOTOR_TIMESCALE +\ VEHICLE_LINEAR_MOTOR_DIRECTION VEHICLE_LINEAR_MOTOR_OFFSET +\ VEHICLE_REFERENCE_FRAME VEHICLE_TYPE_AIRPLANE VEHICLE_TYPE_BALLOON +\ VEHICLE_TYPE_BOAT VEHICLE_TYPE_CAR VEHICLE_TYPE_NONE VEHICLE_TYPE_SLED +\ VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY VEHICLE_VERTICAL_ATTRACTION_TIMESCALE +\ ZERO_ROTATION ZERO_VECTOR + +" Events +syn keyword lslEvent +\ attach at_rot_target at_target changed collision collision_end collision_start +\ control dataserver email http_response land_collision land_collision_end +\ land_collision_start link_message listen money moving_end moving_start +\ not_at_rot_target no_sensor object_rez on_rez remote_data run_time_permissions +\ sensor state_entry state_exit timer touch touch_end touch_start not_at_target + +" Functions +syn keyword lslFunction +\ llAbs llAcos llAddToLandBanList llAddToLandPassList llAdjustSoundVolume +\ llAllowInventoryDrop llAngleBetween llApplyImpulse llApplyRotationalImpulse +\ llAsin llAtan2 llAttachToAvatar llAvatarOnSitTarget llAxes2Rot llAxisAngle2Rot +\ llBase64ToInteger llBase64ToString llBreakAllLinks llBreakLink llCSV2List +\ llCeil llClearCameraParams llCloseRemoteDataChannel llCloud llCollisionFilter +\ llCollisionSound llCollisionSprite llCos llCreateLink llDeleteSubList +\ llDeleteSubString llDetachFromAvatar llDetectedGrab llDetectedGroup +\ llDetectedKey llDetectedLinkNumber llDetectedName llDetectedOwner +\ llDetectedPos llDetectedRot llDetectedType llDetectedVel llDialog llDie +\ llDumpList2String llEdgeOfWorld llEjectFromLand llEmail llEscapeURL +\ llEuler2Rot llFabs llFloor llForceMouselook llFrand llGetAccel llGetAgentInfo +\ llGetAgentSize llGetAlpha llGetAndResetTime llGetAnimation llGetAnimationList +\ llGetAttached llGetBoundingBox llGetCameraPos llGetCameraRot llGetCenterOfMass +\ llGetColor llGetCreator llGetDate llGetEnergy llGetForce llGetFreeMemory +\ llGetGMTclock llGetGeometricCenter llGetInventoryCreator llGetInventoryKey +\ llGetInventoryName llGetInventoryNumber llGetInventoryPermMask +\ llGetInventoryType llGetKey llGetLandOwnerAt llGetLinkKey llGetLinkName +\ llGetLinkNumber llGetListEntryType llGetListLength llGetLocalPos llGetLocalRot +\ llGetMass llGetNextEmail llGetNotecardLine llGetNumberOfNotecardLines +\ llGetNumberOfPrims llGetNumberOfSides llGetObjectDesc llGetObjectDetails +\ llGetObjectMass llGetObjectName llGetObjectPermMask llGetObjectPrimCount +\ llGetOmega llGetOwner llGetOwnerKey llGetParcelDetails llGetParcelFlags +\ llGetParcelMaxPrims llGetParcelPrimCount llGetParcelPrimOwners +\ llGetPermissions llGetPermissionsKey llGetPos llGetPrimitiveParams +\ llGetRegionCorner llGetRegionFPS llGetRegionFlags llGetRegionName +\ llGetRegionTimeDilation llGetRootPosition llGetRootRotation llGetRot +\ llGetScale llGetScriptName llGetScriptState llGetSimulatorHostname +\ llGetStartParameter llGetStatus llGetSubString llGetSunDirection llGetTexture +\ llGetTextureOffset llGetTextureRot llGetTextureScale llGetTime llGetTimeOfDay +\ llGetTimestamp llGetTorque llGetUnixTime llGetVel llGetWallclock +\ llGiveInventory llGiveInventoryList llGiveMoney llGodLikeRezObject llGround +\ llGroundContour llGroundNormal llGroundRepel llGroundSlope llHTTPRequest +\ llInsertString llInstantMessage llIntegerToBase64 llKey2Name llList2CSV +\ llList2Float llList2Integer llList2Key llList2List llList2ListStrided +\ llList2Rot llList2String llList2Vector llListFindList llListInsertList +\ llListRandomize llListReplaceList llListSort llListStatistics llListen +\ llListenControl llListenRemove llLoadURL llLog llLog10 llLookAt llLoopSound +\ llLoopSoundMaster llLoopSoundSlave llMD5String llMakeExplosion llMakeFire +\ llMakeFountain llMakeSmoke llMapDestination llMessageLinked llMinEventDelay +\ llModPow llModifyLand llMoveToTarget llOffsetTexture llOpenRemoteDataChannel +\ llOverMyLand llOwnerSay llParcelMediaCommandList llParcelMediaQuery +\ llParseString2List llParseStringKeepNulls llParticleSystem llPassCollisions +\ llPassTouches llPlaySound llPlaySoundSlave llPointAt llPow llPreloadSound +\ llPushObject llRefreshPrimURL llRegionSay llReleaseCamera llReleaseControls +\ llRemoteDataReply llRemoteDataSetRegion llRemoteLoadScript +\ llRemoteLoadScriptPin llRemoveFromLandBanList llRemoveFromLandPassList +\ llRemoveInventory llRemoveVehicleFlags llRequestAgentData +\ llRequestInventoryData llRequestPermissions llRequestSimulatorData +\ llResetLandBanList llResetLandPassList llResetOtherScript llResetScript +\ llResetTime llRezAtRoot llRezObject llRot2Angle llRot2Axis llRot2Euler +\ llRot2Fwd llRot2Left llRot2Up llRotBetween llRotLookAt llRotTarget +\ llRotTargetRemove llRotateTexture llRound llSameGroup llSay llScaleTexture +\ llScriptDanger llSendRemoteData llSensor llSensorRemove llSensorRepeat +\ llSetAlpha llSetBuoyancy llSetCameraAtOffset llSetCameraEyeOffset +\ llSetCameraParams llSetClickAction llSetColor llSetDamage llSetForce +\ llSetForceAndTorque llSetHoverHeight llSetInventoryPermMask llSetLinkAlpha +\ llSetLinkColor llSetLinkPrimitiveParams llSetLinkTexture llSetLocalRot +\ llSetObjectDesc llSetObjectName llSetObjectPermMask llSetParcelMusicURL +\ llSetPayPrice llSetPos llSetPrimURL llSetPrimitiveParams +\ llSetRemoteScriptAccessPin llSetRot llSetScale llSetScriptState llSetSitText +\ llSetSoundQueueing llSetSoundRadius llSetStatus llSetText llSetTexture +\ llSetTextureAnim llSetTimerEvent llSetTorque llSetTouchText llSetVehicleFlags +\ llSetVehicleFloatParam llSetVehicleRotationParam llSetVehicleType +\ llSetVehicleVectorParam llShout llSin llSitTarget llSleep llSound +\ llSoundPreload llSqrt llStartAnimation llStopAnimation llStopHover +\ llStopLookAt llStopMoveToTarget llStopPointAt llStopSound llStringLength +\ llStringToBase64 llStringTrim llSubStringIndex llTakeCamera llTakeControls +\ llTan llTarget llTargetOmega llTargetRemove llTeleportAgentHome llToLower +\ llToUpper llTriggerSound llTriggerSoundLimited llUnSit llUnescapeURL llVecDist +\ llVecMag llVecNorm llVolumeDetect llWater llWhisper llWind llXorBase64Strings +\ llXorBase64StringsCorrect + +" Operators +syn match lslOperator +[-!%&*+/<=>^|~]+ display + +" Numbers +syn match lslNumber +-\=\%(\<\d\+\|\%(\<\d\+\)\=\.\d\+\)\%([Ee][-+]\=\d\+\)\=\>\|\<0x\x\+\>+ display + +" Vectors and rotations +syn match lslVectorRot +<[-\t +.0-9A-Za-z_]\+\%(,[-\t +.0-9A-Za-z_]\+\)\{2,3}>+ contains=lslNumber display + +" Vector and rotation properties +syn match lslProperty +\.\@<=[sxyz]\>+ display + +" Strings +syn region lslString start=+"+ skip=+\\.+ end=+"+ contains=lslSpecialChar,@Spell +syn match lslSpecialChar +\\.+ contained display + +" Keys +syn match lslKey +"\x\{8}-\x\{4}-\x\{4}-\x\{4}-\x\{12}"+ display + +" Parentheses, braces and brackets +syn match lslBlock +[][(){}]+ display + +" Typecast operators +syn match lslTypecast +(\%(float\|integer\|key\|list\|quaternion\|rotation\|string\|vector\))+ contains=lslType display + +" Comments +syn match lslComment +//.*+ contains=@Spell + +" Define the default highlighting. +hi def link lslKeyword Keyword +hi def link lslType Type +hi def link lslLabel Label +hi def link lslConstant Constant +hi def link lslEvent PreProc +hi def link lslFunction Function +hi def link lslOperator Operator +hi def link lslNumber Number +hi def link lslVectorRot Special +hi def link lslProperty Identifier +hi def link lslString String +hi def link lslSpecialChar SpecialChar +hi def link lslKey Special +hi def link lslBlock Special +hi def link lslTypecast Operator +hi def link lslComment Comment + +let b:current_syntax = "lsl" + +let &cpo = s:keepcpo +unlet s:keepcpo + +" vim: ts=8 diff --git a/.config/vim/syntax/lss.vim b/.config/vim/syntax/lss.vim new file mode 100644 index 0000000..eceaf75 --- /dev/null +++ b/.config/vim/syntax/lss.vim @@ -0,0 +1,123 @@ +" Vim syntax file +" Language: Lynx 2.7.1 style file +" Maintainer: Scott Bigham +" Last Change: 2004 Oct 06 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" This setup is probably atypical for a syntax highlighting file, because +" most of it is not really intended to be overridable. Instead, the +" highlighting is supposed to correspond to the highlighting specified by +" the .lss file entries themselves; ie. the "bold" keyword should be bold, +" the "red" keyword should be red, and so forth. The exceptions to this +" are comments, of course, and the initial keyword identifying the affected +" element, which will inherit the usual Identifier highlighting. + +syn match lssElement "^[^:]\+" nextgroup=lssMono + +syn match lssMono ":[^:]\+" contained nextgroup=lssFgColor contains=lssReverse,lssUnderline,lssBold,lssStandout + +syn keyword lssBold bold contained +syn keyword lssReverse reverse contained +syn keyword lssUnderline underline contained +syn keyword lssStandout standout contained + +syn match lssFgColor ":[^:]\+" contained nextgroup=lssBgColor contains=lssRedFg,lssBlueFg,lssGreenFg,lssBrownFg,lssMagentaFg,lssCyanFg,lssLightgrayFg,lssGrayFg,lssBrightredFg,lssBrightgreenFg,lssYellowFg,lssBrightblueFg,lssBrightmagentaFg,lssBrightcyanFg + +syn case ignore +syn keyword lssRedFg red contained +syn keyword lssBlueFg blue contained +syn keyword lssGreenFg green contained +syn keyword lssBrownFg brown contained +syn keyword lssMagentaFg magenta contained +syn keyword lssCyanFg cyan contained +syn keyword lssLightgrayFg lightgray contained +syn keyword lssGrayFg gray contained +syn keyword lssBrightredFg brightred contained +syn keyword lssBrightgreenFg brightgreen contained +syn keyword lssYellowFg yellow contained +syn keyword lssBrightblueFg brightblue contained +syn keyword lssBrightmagentaFg brightmagenta contained +syn keyword lssBrightcyanFg brightcyan contained +syn case match + +syn match lssBgColor ":[^:]\+" contained contains=lssRedBg,lssBlueBg,lssGreenBg,lssBrownBg,lssMagentaBg,lssCyanBg,lssLightgrayBg,lssGrayBg,lssBrightredBg,lssBrightgreenBg,lssYellowBg,lssBrightblueBg,lssBrightmagentaBg,lssBrightcyanBg,lssWhiteBg + +syn case ignore +syn keyword lssRedBg red contained +syn keyword lssBlueBg blue contained +syn keyword lssGreenBg green contained +syn keyword lssBrownBg brown contained +syn keyword lssMagentaBg magenta contained +syn keyword lssCyanBg cyan contained +syn keyword lssLightgrayBg lightgray contained +syn keyword lssGrayBg gray contained +syn keyword lssBrightredBg brightred contained +syn keyword lssBrightgreenBg brightgreen contained +syn keyword lssYellowBg yellow contained +syn keyword lssBrightblueBg brightblue contained +syn keyword lssBrightmagentaBg brightmagenta contained +syn keyword lssBrightcyanBg brightcyan contained +syn keyword lssWhiteBg white contained +syn case match + +syn match lssComment "#.*$" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link lssComment Comment +hi def link lssElement Identifier + +hi def lssBold term=bold cterm=bold +hi def lssReverse term=reverse cterm=reverse +hi def lssUnderline term=underline cterm=underline +hi def lssStandout term=standout cterm=standout + +hi def lssRedFg ctermfg=red +hi def lssBlueFg ctermfg=blue +hi def lssGreenFg ctermfg=green +hi def lssBrownFg ctermfg=brown +hi def lssMagentaFg ctermfg=magenta +hi def lssCyanFg ctermfg=cyan +hi def lssGrayFg ctermfg=gray +if $COLORTERM == "rxvt" + " On rxvt's, bright colors are activated by setting the bold attribute. + hi def lssLightgrayFg ctermfg=gray cterm=bold + hi def lssBrightredFg ctermfg=red cterm=bold + hi def lssBrightgreenFg ctermfg=green cterm=bold + hi def lssYellowFg ctermfg=yellow cterm=bold + hi def lssBrightblueFg ctermfg=blue cterm=bold + hi def lssBrightmagentaFg ctermfg=magenta cterm=bold + hi def lssBrightcyanFg ctermfg=cyan cterm=bold +else + hi def lssLightgrayFg ctermfg=lightgray + hi def lssBrightredFg ctermfg=lightred + hi def lssBrightgreenFg ctermfg=lightgreen + hi def lssYellowFg ctermfg=yellow + hi def lssBrightblueFg ctermfg=lightblue + hi def lssBrightmagentaFg ctermfg=lightmagenta + hi def lssBrightcyanFg ctermfg=lightcyan +endif + +hi def lssRedBg ctermbg=red +hi def lssBlueBg ctermbg=blue +hi def lssGreenBg ctermbg=green +hi def lssBrownBg ctermbg=brown +hi def lssMagentaBg ctermbg=magenta +hi def lssCyanBg ctermbg=cyan +hi def lssLightgrayBg ctermbg=lightgray +hi def lssGrayBg ctermbg=gray +hi def lssBrightredBg ctermbg=lightred +hi def lssBrightgreenBg ctermbg=lightgreen +hi def lssYellowBg ctermbg=yellow +hi def lssBrightblueBg ctermbg=lightblue +hi def lssBrightmagentaBg ctermbg=lightmagenta +hi def lssBrightcyanBg ctermbg=lightcyan +hi def lssWhiteBg ctermbg=white ctermfg=black + +let b:current_syntax = "lss" + +" vim: ts=8 diff --git a/.config/vim/syntax/lua.vim b/.config/vim/syntax/lua.vim new file mode 100644 index 0000000..f5851d0 --- /dev/null +++ b/.config/vim/syntax/lua.vim @@ -0,0 +1,443 @@ +" Vim syntax file +" Language: Lua 4.0, Lua 5.0, Lua 5.1, Lua 5.2 and Lua 5.3 +" Maintainer: Marcus Aurelius Farias +" First Author: Carlos Augusto Teixeira Mendes +" Last Change: 2025 Feb 25 +" Options: lua_version = 4 or 5 +" lua_subversion = 0 (for 4.0 or 5.0) +" or 1, 2, 3 (for 5.1, 5.2 or 5.3) +" the default is 5.3 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" keep in sync with ftplugin/lua.vim +if !exists("lua_version") + " Default is lua 5.3 + let lua_version = 5 + let lua_subversion = 3 +elseif !exists("lua_subversion") + " lua_version exists, but lua_subversion doesn't. In this case set it to 0 + let lua_subversion = 0 +endif + +syn case match + +" syncing method +syn sync minlines=1000 + +if lua_version >= 5 + syn keyword luaMetaMethod __add __sub __mul __div __pow __unm __concat + syn keyword luaMetaMethod __eq __lt __le + syn keyword luaMetaMethod __index __newindex __call + syn keyword luaMetaMethod __metatable __mode __gc __tostring +endif + +if lua_version > 5 || (lua_version == 5 && lua_subversion >= 1) + syn keyword luaMetaMethod __mod __len +endif + +if lua_version > 5 || (lua_version == 5 && lua_subversion >= 2) + syn keyword luaMetaMethod __pairs +endif + +if lua_version > 5 || (lua_version == 5 && lua_subversion >= 3) + syn keyword luaMetaMethod __idiv __name + syn keyword luaMetaMethod __band __bor __bxor __bnot __shl __shr +endif + +if lua_version > 5 || (lua_version == 5 && lua_subversion >= 4) + syn keyword luaMetaMethod __close +endif + +" catch errors caused by wrong parenthesis and wrong curly brackets or +" keywords placed outside their respective blocks + +syn region luaParen transparent start='(' end=')' contains=TOP,luaParenError +syn match luaParenError ")" +syn match luaError "}" +syn match luaError "\<\%(end\|else\|elseif\|then\|until\|in\)\>" + +" Function declaration +syn region luaFunctionBlock transparent matchgroup=luaFunction start="\" end="\" contains=TOP + +" else +syn keyword luaCondElse matchgroup=luaCond contained containedin=luaCondEnd else + +" then ... end +syn region luaCondEnd contained transparent matchgroup=luaCond start="\" end="\" contains=TOP + +" elseif ... then +syn region luaCondElseif contained containedin=luaCondEnd transparent matchgroup=luaCond start="\" end="\" contains=TOP + +" if ... then +syn region luaCondStart transparent matchgroup=luaCond start="\" end="\"me=e-4 contains=TOP nextgroup=luaCondEnd skipwhite skipempty + +" do ... end +syn region luaBlock transparent matchgroup=luaStatement start="\" end="\" contains=TOP +" repeat ... until +syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\" end="\" contains=TOP + +" while ... do +syn region luaWhile transparent matchgroup=luaRepeat start="\" end="\"me=e-2 contains=TOP nextgroup=luaBlock skipwhite skipempty + +" for ... do and for ... in ... do +syn region luaFor transparent matchgroup=luaRepeat start="\" end="\"me=e-2 contains=TOP nextgroup=luaBlock skipwhite skipempty + +syn keyword luaFor contained containedin=luaFor in + +" other keywords +syn keyword luaStatement return local break +if lua_version > 5 || (lua_version == 5 && lua_subversion >= 2) + syn keyword luaStatement goto + syn match luaLabel "::\I\i*::" +endif + +" operators +syn keyword luaOperator and or not + +if (lua_version == 5 && lua_subversion >= 3) || lua_version > 5 + syn match luaSymbolOperator "[#<>=~^&|*/%+-]\|\.\{2,3}" +elseif lua_version == 5 && (lua_subversion == 1 || lua_subversion == 2) + syn match luaSymbolOperator "[#<>=~^*/%+-]\|\.\{2,3}" +else + syn match luaSymbolOperator "[<>=~^*/+-]\|\.\{2,3}" +endif + +" comments +syn keyword luaTodo contained TODO FIXME XXX +syn match luaComment "--.*$" contains=luaTodo,@Spell +if lua_version == 5 && lua_subversion == 0 + syn region luaComment matchgroup=luaCommentDelimiter start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment,@Spell + syn region luaInnerComment contained transparent start="\[\[" end="\]\]" +elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1) + " Comments in Lua 5.1: --[[ ... ]], [=[ ... ]=], [===[ ... ]===], etc. + syn region luaComment matchgroup=luaCommentDelimiter start="--\[\z(=*\)\[" end="\]\z1\]" contains=luaTodo,@Spell +endif + +" first line may start with #! +syn match luaComment "\%^#!.*" + +syn keyword luaConstant nil +if lua_version > 4 + syn keyword luaConstant true false +endif + +" strings +syn match luaSpecial contained #\\[\\abfnrtv'"[\]]\|\\[[:digit:]]\{,3}# +if lua_version == 5 + if lua_subversion == 0 + syn region luaString2 matchgroup=luaStringDelimiter start=+\[\[+ end=+\]\]+ contains=luaString2,@Spell + else + if lua_subversion >= 2 + syn match luaSpecial contained #\\z\|\\x[[:xdigit:]]\{2}# + endif + if lua_subversion >= 3 + syn match luaSpecial contained #\\u{[[:xdigit:]]\+}# + endif + syn region luaString2 matchgroup=luaStringDelimiter start="\[\z(=*\)\[" end="\]\z1\]" contains=@Spell + endif +endif +syn region luaString matchgroup=luaStringDelimiter start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial,@Spell +syn region luaString matchgroup=luaStringDelimiter start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial,@Spell + +" integer number +syn match luaNumber "\<\d\+\>" +" floating point number, with dot, optional exponent +syn match luaNumber "\<\d\+\.\d*\%([eE][-+]\=\d\+\)\=" +" floating point number, starting with a dot, optional exponent +syn match luaNumber "\.\d\+\%([eE][-+]\=\d\+\)\=\>" +" floating point number, without dot, with exponent +syn match luaNumber "\<\d\+[eE][-+]\=\d\+\>" + +" hex numbers +if lua_version >= 5 + if lua_subversion == 1 + syn match luaNumber "\<0[xX]\x\+\>" + elseif lua_subversion >= 2 + syn match luaNumber "\<0[xX][[:xdigit:].]\+\%([pP][-+]\=\d\+\)\=\>" + endif +endif + +" tables +syn region luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=TOP,luaStatement + +" methods +syntax match luaFunc ":\@<=\k\+" + +" built-in functions +syn keyword luaFunc assert collectgarbage dofile error next +syn keyword luaFunc print rawget rawset self tonumber tostring type _VERSION + +if lua_version == 4 + syn keyword luaFunc _ALERT _ERRORMESSAGE gcinfo + syn keyword luaFunc call copytagmethods dostring + syn keyword luaFunc foreach foreachi getglobal getn + syn keyword luaFunc gettagmethod globals newtag + syn keyword luaFunc setglobal settag settagmethod sort + syn keyword luaFunc tag tinsert tremove + syn keyword luaFunc _INPUT _OUTPUT _STDIN _STDOUT _STDERR + syn keyword luaFunc openfile closefile flush seek + syn keyword luaFunc setlocale execute remove rename tmpname + syn keyword luaFunc getenv date clock exit + syn keyword luaFunc readfrom writeto appendto read write + syn keyword luaFunc PI abs sin cos tan asin + syn keyword luaFunc acos atan atan2 ceil floor + syn keyword luaFunc mod frexp ldexp sqrt min max log + syn keyword luaFunc log10 exp deg rad random + syn keyword luaFunc randomseed strlen strsub strlower strupper + syn keyword luaFunc strchar strrep ascii strbyte + syn keyword luaFunc format strfind gsub + syn keyword luaFunc getinfo getlocal setlocal setcallhook setlinehook +elseif lua_version == 5 + syn keyword luaFunc getmetatable setmetatable + syn keyword luaFunc ipairs pairs + syn keyword luaFunc pcall xpcall + syn keyword luaFunc _G loadfile rawequal require + if lua_subversion == 0 + syn keyword luaFunc getfenv setfenv + syn keyword luaFunc loadstring unpack + syn keyword luaFunc gcinfo loadlib LUA_PATH _LOADED _REQUIREDNAME + else + syn keyword luaFunc load select + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + if lua_subversion == 1 + syn keyword luaFunc getfenv setfenv + syn keyword luaFunc loadstring module unpack + syn match luaFunc /\/ + syn match luaFunc /\/ + elseif lua_subversion >= 2 + syn keyword luaFunc _ENV rawlen + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + endif + + if lua_subversion >= 3 + syn match luaFunc /\/ + endif + if lua_subversion >= 4 + syn keyword luaFunc warn + syn match luaFunc /\/ + endif + syn match luaFunc /\/ + endif + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + if lua_subversion == 0 + syn match luaFunc /\/ + else + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + endif + if lua_subversion >= 3 + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + endif + + if lua_subversion == 0 + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + elseif lua_subversion == 1 + syn match luaFunc /\/ + elseif lua_subversion >= 2 + syn match luaFunc /\/ + syn match luaFunc /\/ + if lua_subversion >= 3 + syn match luaFunc /\/ + endif + endif + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + + if lua_subversion == 2 + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + endif + + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + if lua_subversion < 3 + syn match luaFunc /\/ + endif + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + if lua_subversion == 0 + syn match luaFunc /\/ + syn match luaFunc /\/ + elseif lua_subversion == 1 + syn match luaFunc /\/ + endif + if lua_subversion >= 1 + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + if lua_subversion == 1 || lua_subversion == 2 + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + endif + endif + syn match luaFunc /\/ + syn match luaFunc /\/ + if lua_subversion < 3 + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + else + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + endif + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + if lua_subversion == 1 + syn match luaFunc /\/ + syn match luaFunc /\/ + endif + if lua_subversion >= 1 + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + if lua_subversion >= 2 + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + syn match luaFunc /\/ + endif + if lua_subversion >= 4 + syn match luaFunc /\/ + endif + endif +endif + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link luaStatement Statement +hi def link luaRepeat Repeat +hi def link luaFor Repeat +hi def link luaString String +hi def link luaString2 String +hi def link luaStringDelimiter luaString +hi def link luaNumber Number +hi def link luaOperator Operator +hi def link luaSymbolOperator luaOperator +hi def link luaConstant Constant +hi def link luaCond Conditional +hi def link luaCondElse Conditional +hi def link luaFunction Function +hi def link luaMetaMethod Function +hi def link luaComment Comment +hi def link luaCommentDelimiter luaComment +hi def link luaTodo Todo +hi def link luaTable Structure +hi def link luaError Error +hi def link luaParenError Error +hi def link luaSpecial SpecialChar +hi def link luaFunc Identifier +hi def link luaLabel Label + + +let b:current_syntax = "lua" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: et ts=8 sw=2 diff --git a/.config/vim/syntax/luau.vim b/.config/vim/syntax/luau.vim new file mode 100644 index 0000000..59eccac --- /dev/null +++ b/.config/vim/syntax/luau.vim @@ -0,0 +1,15 @@ +" Vim syntax file +" Language: Luau +" Maintainer: None yet +" Last Change: 2023 Apr 30 + +if exists("b:current_syntax") + finish +endif + +" Luau is a superset of lua +runtime! syntax/lua.vim + +let b:current_syntax = "luau" + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/.config/vim/syntax/lynx.vim b/.config/vim/syntax/lynx.vim new file mode 100644 index 0000000..fcaf923 --- /dev/null +++ b/.config/vim/syntax/lynx.vim @@ -0,0 +1,151 @@ +" Vim syntax file +" Language: Lynx Web Browser Configuration (lynx.cfg) +" Maintainer: Doug Kearns +" Last Change: 2023 Nov 09 + +" Lynx 2.8.9 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn match lynxStart "^" skipwhite nextgroup=lynxOption + +syn match lynxComment "\%(^\|\s\+\)#.*" contains=lynxTodo + +syn keyword lynxTodo TODO NOTE FIXME XXX contained + +syn match lynxDelimiter ":" skipwhite nextgroup=lynxBoolean,lynxHttpProtocol,lynxNumber,lynxNone,lynxRCOption + +syn case ignore +syn keyword lynxBoolean TRUE FALSE ON OFF contained +syn keyword lynxNone NONE contained +syn case match + +syn match lynxNumber "-\=\<\d\+\>" contained +syn match lynxHttpProtocol "\<1\.[01]\>" contained + +"{{{ Options +syn case ignore +syn keyword lynxOption ACCEPT_ALL_COOKIES ALERTSECS + \ ALWAYS_RESUBMIT_POSTS ALWAYS_TRUSTED_EXEC ANONFTP_PASSWORD + \ ASSUMED_COLOR ASSUMED_DOC_CHARSET_CHOICE ASSUME_CHARSET + \ ASSUME_LOCAL_CHARSET ASSUME_UNREC_CHARSET AUTO_SESSION + \ AUTO_UNCACHE_DIRLISTS BAD_HTML BIBP_BIBHOST BIBP_GLOBAL_SERVER + \ BLOCK_MULTI_BOOKMARKS BOLD_H1 BOLD_HEADERS BOLD_NAME_ANCHORS + \ BOOKMARK_FILE BROKEN_FTP_EPSV BROKEN_FTP_RETR BZIP2_PATH + \ CASE_SENSITIVE_ALWAYS_ON CASE_SENSITIVE_SEARCHING CHARACTER_SET + \ CHARSETS_DIRECTORY CHARSET_SWITCH_RULES CHECKMAIL CHMOD_PATH + \ COLLAPSE_BR_TAGS COLOR COLOR_STYLE COMPRESS_PATH CONNECT_TIMEOUT + \ COOKIE_ACCEPT_DOMAINS COOKIE_FILE COOKIE_LOOSE_INVALID_DOMAINS + \ COOKIE_QUERY_INVALID_DOMAINS COOKIE_REJECT_DOMAINS COOKIE_SAVE_FILE + \ COOKIE_STRICT_INVALID_DOMAINS COPY_PATH CSO_PROXY CSWING_PATH + \ DEBUGSECS DEFAULT_BOOKMARK_FILE DEFAULT_CACHE_SIZE DEFAULT_COLORS + \ DEFAULT_EDITOR DEFAULT_INDEX_FILE DEFAULT_KEYPAD_MODE + \ DEFAULT_KEYPAD_MODE_IS_NUMBERS_AS_ARROWS DEFAULT_USER_MODE + \ DEFAULT_VIRTUAL_MEMORY_SIZE DELAYSECS DIRED_MENU DIR_LIST_ORDER + \ DIR_LIST_STYLE DISPLAY DISPLAY_CHARSET_CHOICE DOWNLOADER EMACS_KEYS + \ EMACS_KEYS_ALWAYS_ON ENABLE_LYNXRC ENABLE_SCROLLBACK EXTERNAL + \ FILE_EDITOR FILE_SORTING_METHOD FINGER_PROXY FOCUS_WINDOW + \ FORCE_8BIT_TOUPPER FORCE_COOKIE_PROMPT FORCE_EMPTY_HREFLESS_A + \ FORCE_SSL_COOKIES_SECURE FORCE_SSL_PROMPT FORMS_OPTIONS FTP_FORMAT + \ FTP_PASSIVE FTP_PROXY GLOBAL_EXTENSION_MAP GLOBAL_MAILCAP + \ GOPHER_PROXY GOTOBUFFER GZIP_PATH HELPFILE HIDDEN_LINK_MARKER + \ HISTORICAL_COMMENTS HTMLSRC_ATTRNAME_XFORM HTMLSRC_TAGNAME_XFORM + \ HTTPS_PROXY HTTP_PROXY INCLUDE INFLATE_PATH INFOSECS INSTALL_PATH + \ JUMPBUFFER JUMPFILE JUMP_PROMPT JUSTIFY JUSTIFY_MAX_VOID_PERCENT + \ KBLAYOUT KEYBOARD_LAYOUT KEYMAP KEYPAD_MODE + \ LEFTARROW_IN_TEXTFIELD_PROMPT LINEEDIT_MODE LIST_FORMAT + \ LIST_NEWS_DATES LIST_NEWS_NUMBERS LOCALE_CHARSET LOCALHOST_ALIAS + \ LOCAL_DOMAIN LOCAL_EXECUTION_LINKS_ALWAYS_ON + \ LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE LYNXCGI_DOCUMENT_ROOT + \ LYNXCGI_ENVIRONMENT LYNX_HOST_NAME LYNX_SIG_FILE MAIL_ADRS + \ MAIL_SYSTEM_ERROR_LOGGING MAKE_LINKS_FOR_ALL_IMAGES + \ MAKE_PSEUDO_ALTS_FOR_INLINES MAX_COOKIES_BUFFER MAX_COOKIES_DOMAIN + \ MAX_COOKIES_GLOBAL MESSAGESECS MINIMAL_COMMENTS MKDIR_PATH + \ MULTI_BOOKMARK MULTI_BOOKMARK_SUPPORT MV_PATH NCR_IN_BOOKMARKS + \ NESTED_TABLES NEWSPOST_PROXY NEWSREPLY_PROXY NEWS_CHUNK_SIZE + \ NEWS_MAX_CHUNK NEWS_POSTING NEWS_PROXY NNTPSERVER NNTP_PROXY + \ NONRESTARTING_SIGWINCH NO_DOT_FILES NO_FILE_REFERER + \ NO_FORCED_CORE_DUMP NO_FROM_HEADER NO_ISMAP_IF_USEMAP NO_MARGINS + \ NO_PAUSE NO_PROXY NO_REFERER_HEADER NO_TABLE_CENTER NO_TITLE + \ NUMBER_FIELDS_ON_LEFT NUMBER_LINKS_ON_LEFT OUTGOING_MAIL_CHARSET + \ PARTIAL PARTIAL_THRES PERSISTENT_COOKIES PERSONAL_EXTENSION_MAP + \ PERSONAL_MAILCAP PERSONAL_MAIL_ADDRESS POSITIONABLE_EDITOR + \ PREFERRED_CHARSET PREFERRED_ENCODING PREFERRED_LANGUAGE + \ PREFERRED_MEDIA_TYPES PREPEND_BASE_TO_SOURCE + \ PREPEND_CHARSET_TO_SOURCE PRETTYSRC PRETTYSRC_SPEC + \ PRETTYSRC_VIEW_NO_ANCHOR_NUMBERING PRINTER QUIT_DEFAULT_YES RAW_MODE + \ READ_TIMEOUT REFERER_WITH_QUERY REPLAYSECS REUSE_TEMPFILES + \ RLOGIN_PATH RM_PATH RMDIR_PATH RULE RULESFILE + \ RUN_ALL_EXECUTION_LINKS RUN_EXECUTION_LINKS_LOCAL SAVE_SPACE + \ SCAN_FOR_BURIED_NEWS_REFS SCREEN_SIZE SCROLLBAR SCROLLBAR_ARROW + \ SEEK_FRAG_AREA_IN_CUR SEEK_FRAG_MAP_IN_CUR SELECT_POPUPS + \ SEND_USERAGENT SESSION_FILE SESSION_LIMIT SET_COOKIES SETFONT_PATH + \ SHOW_COLOR SHOW_CURSOR SHOW_DOTFILES SHOW_KB_NAME SHOW_KB_RATE + \ SNEWSPOST_PROXY SNEWSREPLY_PROXY SNEWS_PROXY SOFT_DQUOTES + \ SOURCE_CACHE SOURCE_CACHE_FOR_ABORTED SSL_CERT_FILE STARTFILE + \ STATUS_BUFFER_SIZE STRIP_DOTDOT_URLS SUBSTITUTE_UNDERSCORES + \ SUB_BOOKMARKS SUFFIX SUFFIX_ORDER SYSLOG_REQUESTED_URLS SYSLOG_TEXT + \ SYSTEM_EDITOR SYSTEM_MAIL SYSTEM_MAIL_FLAGS TAGSOUP TAR_PATH + \ TELNET_PATH TEXTFIELDS_NEED_ACTIVATION TIMEOUT TN3270_PATH + \ TOUCH_PATH TRIM_INPUT_FIELDS TRUSTED_EXEC TRUSTED_LYNXCGI + \ UNCOMPRESS_PATH UNDERLINE_LINKS UNZIP_PATH UPLOADER + \ URL_DOMAIN_PREFIXES URL_DOMAIN_SUFFIXES USERAGENT USER_MODE + \ USE_FIXED_RECORDS USE_MOUSE USE_SELECT_POPUPS UUDECODE_PATH + \ VERBOSE_IMAGES VIEWER VISITED_LINKS VI_KEYS VI_KEYS_ALWAYS_ON + \ WAIS_PROXY XHTML_PARSING XLOADIMAGE_COMMAND ZCAT_PATH ZIP_PATH + \ TRIM_BLANK_LINES GUESS_SCHEME HTTP_PROTOCOL HTML5_CHARSETS + \ TRIM_BLANK_LINES PREFERRED_CONTENT_TYPE SSL_CLIENT_CERT_FILE + \ SSL_CLIENT_KEY_FILE MAX_URI_SIZE UNIQUE_URLS MESSAGE_LANGUAGE + \ CONV_JISX0201KANA WAIT_VIEWER_TERMINATION BLAT_MAIL ALT_BLAT_MAIL + \ DONT_WRAP_PRE TRACK_INTERNAL_LINKS FORCE_HTML HIDDENLINKS SHORT_URL + \ LISTONLY LIST_INLINE LOCALHOST WITH_BACKSPACES + \ contained nextgroup=lynxDelimiter +syn keyword lynxRCOption accept_all_cookies assume_charset auto_session + \ bookmark_file case_sensitive_searching character_set + \ collapse_br_tags cookie_accept_domains cookie_file + \ cookie_loose_invalid_domains cookie_query_invalid_domains + \ cookie_reject_domains cookie_strict_invalid_domain + \ cookie_strict_invalid_domains dir_list_style display emacs_keys + \ file_editor file_sorting_method force_cookie_prompt force_ssl_prompt + \ ftp_passive html5_charsets http_protocol kblayout keypad_mode + \ lineedit_mode locale_charset make_links_for_all_images + \ make_pseudo_alts_for_inlines multi_bookmark no_pause + \ personal_mail_address preferred_charset preferred_encoding + \ preferred_language preferred_media_types raw_mode + \ run_all_execution_links run_execution_links_local + \ run_execution_links_on_local_files scrollbar select_popups + \ send_useragent session_file set_cookies show_color show_cursor + \ show_dotfiles show_kb_rate sub_bookmarks tagsoup underline_links + \ useragent user_mode verbose_images vi_keys visited_links + \ contained nextgroup=lynxDelimiter +syn case match +" }}} + +" cfg2html.pl formatting directives +syn match lynxFormatDir "^\.h\d\s.*$" +syn match lynxFormatDir "^\.\%(ex\|nf\)\%(\s\+\d\+\)\=$" +syn match lynxFormatDir "^\.fi$" +syn match lynxFormatDir "^\.url\>" + +hi def link lynxBoolean Boolean +hi def link lynxComment Comment +hi def link lynxDelimiter Special +hi def link lynxFormatDir Special +hi def link lynxHttpProtocol Constant +hi def link lynxNone Constant +hi def link lynxNumber Number +hi def link lynxOption Identifier +hi def link lynxRCOption lynxOption +hi def link lynxTodo Todo + +let b:current_syntax = "lynx" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: diff --git a/.config/vim/syntax/lyrics.vim b/.config/vim/syntax/lyrics.vim new file mode 100644 index 0000000..48a5b11 --- /dev/null +++ b/.config/vim/syntax/lyrics.vim @@ -0,0 +1,43 @@ +" Vim syntax file +" Language: LyRiCs +" Maintainer: ObserverOfTime +" Filenames: *.lrc +" Last Change: 2025 Jan 13 + +if exists('b:current_syntax') + finish +endif + +let s:cpo_save = &cpoptions +set cpoptions&vim + +syn case ignore + +" Errors +syn match lrcError /^.\+$/ + +" ID tags +syn match lrcTag /^\s*\[\a\+:.\+\]\s*$/ contains=lrcTagName,lrcTagValue +syn match lrcTagName contained nextgroup=lrcTagValue + \ /\[\zs\(al\|ar\|au\|by\|encoding\|la\|id\|length\|offset\|re\|ti\|ve\)\ze:/ +syn match lrcTagValue /:\zs.\+\ze\]/ contained + +" Lyrics +syn match lrcLyricTime /^\s*\(\[\d\d:\d\d\.\d\d\d\?\]\)\+/ + \ contains=lrcNumber nextgroup=lrcLyricLine +syn match lrcLyricLine /.*$/ contained contains=lrcWordTime,@Spell +syn match lrcWordTime /<\d\d:\d\d\.\d\d>/ contained contains=lrcNumber,@NoSpell +syn match lrcNumber /[+-]\=\d\+/ contained + +hi def link lrcLyricTime Label +hi def link lrcNumber Number +hi def link lrcTag PreProc +hi def link lrcTagName Identifier +hi def link lrcTagValue String +hi def link lrcWordTime Special +hi def link lrcError Error + +let b:current_syntax = 'lyrics' + +let &cpoptions = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/m17ndb.vim b/.config/vim/syntax/m17ndb.vim new file mode 100644 index 0000000..8d63e6f --- /dev/null +++ b/.config/vim/syntax/m17ndb.vim @@ -0,0 +1,28 @@ +" Vim syntax file +" Language: m17n database +" Maintainer: David Mandelberg +" Last Change: 2025 Feb 21 +" +" https://www.nongnu.org/m17n/manual-en/m17nDBFormat.html describes the +" syntax, but some of its regexes don't match the code. read_element() in +" https://git.savannah.nongnu.org/cgit/m17n/m17n-lib.git/tree/src/plist.c +" seems to be a better place to understand the syntax. + +if exists("b:current_syntax") + finish +endif +let b:current_syntax = "m17ndb" + +syn match m17ndbSymbol /\([^\x00- ()"\\]\|\\\_.\)\+/ +syn match m17ndbComment ";.*$" contains=@Spell +syn match m17ndbInteger "-\?[0-9]\+" +syn match m17ndbInteger "[0#]x[0-9A-Fa-f]\+" +syn match m17ndbCharacter "?\(\_[^\\]\|\\\_.\)" +syn region m17ndbText start=/\Z"/ skip=/\\\\\|\\"/ end=/"/ +syn region m17ndbPlist matchgroup=m17ndbParen start="(" end=")" fold contains=ALL + +hi def link m17ndbCharacter Character +hi def link m17ndbComment Comment +hi def link m17ndbInteger Number +hi def link m17ndbParen Delimiter +hi def link m17ndbText String diff --git a/.config/vim/syntax/m3build.vim b/.config/vim/syntax/m3build.vim new file mode 100644 index 0000000..1a378e8 --- /dev/null +++ b/.config/vim/syntax/m3build.vim @@ -0,0 +1,177 @@ +" Vim syntax file +" Language: Modula-3 Makefile +" Maintainer: Doug Kearns +" Last Change: 2021 April 15 + +if exists("b:current_syntax") + finish +endif + +runtime! syntax/m3quake.vim + +" Identifiers +syn match m3buildPredefinedVariable "\<\%(TARGET\|OS_TYPE\|BUILD_DIR\|PKG_USE\|WDROOT\)\>" + +" Build Procedures {{{1 +" Generated from cm3/m3-sys/cm3/src/M3Build.m3 +syn keyword m3buildProcedure HasCBackend + +" (* packages & locations *) +syn keyword m3buildProcedure Pkg +syn keyword m3buildProcedure override +syn keyword m3buildProcedure path_of +syn keyword m3buildProcedure pkg_subdir + +" (* names *) +syn keyword m3buildProcedure program_name +syn keyword m3buildProcedure library_name + +" (* calls in the generated .M3EXPORT files *) +syn keyword m3buildProcedure _define_lib +syn keyword m3buildProcedure _define_pgm +syn keyword m3buildProcedure _import_template +syn keyword m3buildProcedure _import_m3lib +syn keyword m3buildProcedure _import_otherlib +syn keyword m3buildProcedure _map_add_interface +syn keyword m3buildProcedure _map_add_generic_interface +syn keyword m3buildProcedure _map_add_module +syn keyword m3buildProcedure _map_add_generic_module +syn keyword m3buildProcedure _map_add_c +syn keyword m3buildProcedure _map_add_h +syn keyword m3buildProcedure _map_add_s + +" (* compiler options *) +syn keyword m3buildProcedure m3_debug +syn keyword m3buildProcedure m3_optimize +syn keyword m3buildProcedure build_shared +syn keyword m3buildProcedure build_standalone + +" (* derived files *) +syn keyword m3buildProcedure m3_compile_only +syn keyword m3buildProcedure m3_finish_up + +" (* predefined system libraries *) +syn keyword m3buildProcedure import_sys_lib + +" (* options *) +syn keyword m3buildProcedure m3_option +syn keyword m3buildProcedure remove_m3_option + +" (* deleting *) +syn keyword m3buildProcedure deriveds + +" (* imports *) +syn keyword m3buildProcedure include_dir +syn keyword m3buildProcedure include_pkg +syn keyword m3buildProcedure import +syn keyword m3buildProcedure import_version +syn keyword m3buildProcedure import_obj +syn keyword m3buildProcedure import_lib + +" (* objects *) +syn keyword m3buildProcedure pgm_object + +" (* sources *) +syn keyword m3buildProcedure source +syn keyword m3buildProcedure pgm_source +syn keyword m3buildProcedure interface +syn keyword m3buildProcedure Interface +syn keyword m3buildProcedure implementation +syn keyword m3buildProcedure module +syn keyword m3buildProcedure Module +syn keyword m3buildProcedure h_source +syn keyword m3buildProcedure c_source +syn keyword m3buildProcedure s_source +syn keyword m3buildProcedure ship_source + +" (* generics *) +syn keyword m3buildProcedure generic_interface +syn keyword m3buildProcedure Generic_interface +syn keyword m3buildProcedure generic_implementation +syn keyword m3buildProcedure Generic_implementation +syn keyword m3buildProcedure generic_module +syn keyword m3buildProcedure Generic_module +syn keyword m3buildProcedure build_generic_intf +syn keyword m3buildProcedure build_generic_impl + +" (* derived sources *) +syn keyword m3buildProcedure derived_interface +syn keyword m3buildProcedure derived_implementation +syn keyword m3buildProcedure derived_c +syn keyword m3buildProcedure derived_h + +" (* hiding/exporting *) +syn keyword m3buildProcedure hide_interface +syn keyword m3buildProcedure hide_generic_interface +syn keyword m3buildProcedure hide_generic_implementation +syn keyword m3buildProcedure export_interface +syn keyword m3buildProcedure export_generic_interface +syn keyword m3buildProcedure export_generic_implementation + +" (* templates *) +syn keyword m3buildProcedure template + +" (* library building *) +syn keyword m3buildProcedure library +syn keyword m3buildProcedure Library + +" (* program building *) +syn keyword m3buildProcedure program +syn keyword m3buildProcedure Program +syn keyword m3buildProcedure c_program +syn keyword m3buildProcedure C_program + +" (* man pages *) +syn keyword m3buildProcedure manPage +syn keyword m3buildProcedure ManPage + +" (* emacs *) +syn keyword m3buildProcedure Gnuemacs +syn keyword m3buildProcedure CompiledGnuemacs + +" (* "-find" support *) +syn keyword m3buildProcedure find_unit +syn keyword m3buildProcedure enum_units + +" (* export functions *) +syn keyword m3buildProcedure install_sources +syn keyword m3buildProcedure install_derived +syn keyword m3buildProcedure install_derived_link +syn keyword m3buildProcedure install_derived_symbolic_link +syn keyword m3buildProcedure install_derived_hard_link +syn keyword m3buildProcedure install_link_to_derived +syn keyword m3buildProcedure install_symbolic_link_to_derived +syn keyword m3buildProcedure install_hard_link_to_derived +syn keyword m3buildProcedure install_symbolic_link +syn keyword m3buildProcedure install_file + +" (* installation functions *) +syn keyword m3buildProcedure BindExport +syn keyword m3buildProcedure BinExport +syn keyword m3buildProcedure LibdExport +syn keyword m3buildProcedure LibExport +syn keyword m3buildProcedure EmacsdExport +syn keyword m3buildProcedure EmacsExport +syn keyword m3buildProcedure DocdExport +syn keyword m3buildProcedure DocExport +syn keyword m3buildProcedure MandExport +syn keyword m3buildProcedure ManExport +syn keyword m3buildProcedure HtmlExport +syn keyword m3buildProcedure RootExport +syn keyword m3buildProcedure RootdExport + +" (* misc *) +syn keyword m3buildProcedure gen_m3exports +syn keyword m3buildProcedure generate_tfile +syn keyword m3buildProcedure delete_file +syn keyword m3buildProcedure link_file +syn keyword m3buildProcedure symbolic_link_file +syn keyword m3buildProcedure hard_link_file +" }}} + +hi def link m3buildPredefinedVariable Identifier +hi def link m3buildProcedure Function + +let b:current_syntax = "m3build" + +" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: diff --git a/.config/vim/syntax/m3quake.vim b/.config/vim/syntax/m3quake.vim new file mode 100644 index 0000000..c202d90 --- /dev/null +++ b/.config/vim/syntax/m3quake.vim @@ -0,0 +1,74 @@ +" Vim syntax file +" Language: Modula-3 Quake +" Maintainer: Doug Kearns +" Last Change: 2021 April 15 + +if exists("b:current_syntax") + finish +endif + +" Keywords +syn keyword m3quakeKeyword else end foreach if in is local or proc readonly +syn keyword m3quakeKeyword return + +" Builtin procedures {{{ +" Generated from m3-sys/m3quake/src/QMachine.m3 +syn keyword m3quakeProcedure arglist cp_if defined empty equal error escape +syn keyword m3quakeProcedure exec cm3_exec file format include make_dir +syn keyword m3quakeProcedure normalize path stale try_exec try_cm3_exec +syn keyword m3quakeProcedure unlink_file write datetime date datestamp +syn keyword m3quakeProcedure TRACE_INSTR eval_func hostname + +syn keyword m3quakeProcedure pushd popd cd getwd + +syn keyword m3quakeProcedure quake + +syn keyword m3quakeProcedure q_exec q_exec_put q_exec_get + +syn keyword m3quakeProcedure fs_exists fs_readable fs_writable fs_executable +syn keyword m3quakeProcedure fs_isdir fs_isfile fs_contents fs_putfile +syn keyword m3quakeProcedure fs_mkdir fs_touch fs_lsdirs fs_lsfiles fs_rmdir +syn keyword m3quakeProcedure fs_rmfile fs_rmrec fs_cp + +syn keyword m3quakeProcedure pn_valid pn_decompose pn_compose pn_absolute +syn keyword m3quakeProcedure pn_prefix pn_last pn_base pn_lastbase pn_lastext +syn keyword m3quakeProcedure pn_join pn_join2 pn_replace_ext pn_parent +syn keyword m3quakeProcedure pn_current + +syn keyword m3quakeProcedure len + +syn keyword m3quakeProcedure split sub skipl skipr squeeze compress pos +syn keyword m3quakeProcedure tcontains bool encode decode subst_chars +syn keyword m3quakeProcedure del_chars subst subst_env add_prefix add_suffix +" }}} + +" Identifiers +syn match m3quakeEnvVariable "$\h\w\+" + +" Operators +syn match m3quakeOperator "&" +syn match m3quakeOperator "\<\%(contains\|not\|and\|or\)\>" + +" Strings +syn match m3quakeEscape "\\[\\nrtbf"]" contained display +syn region m3quakeString start=+"+ end=+"+ contains=m3quakeEscape + +" Comments +syn keyword m3quakeTodo TODO FIXME XXX contained +syn region m3quakeComment start="%" end="$" contains=m3quakeTodo,@Spell +syn region m3quakeComment start="/\*" end="\*/" contains=m3quakeTodo,@Spell + +" Default highlighting +hi def link m3quakeCommand Statement +hi def link m3quakeComment Comment +hi def link m3quakeEnvVariable Identifier +hi def link m3quakeEscape Special +hi def link m3quakeKeyword Keyword +hi def link m3quakeOperator Operator +hi def link m3quakeProcedure Function +hi def link m3quakeString String +hi def link m3quakeTodo Todo + +let b:current_syntax = "m3quake" + +" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: diff --git a/.config/vim/syntax/m4.vim b/.config/vim/syntax/m4.vim new file mode 100644 index 0000000..c993e58 --- /dev/null +++ b/.config/vim/syntax/m4.vim @@ -0,0 +1,105 @@ +" Vim syntax file +" Language: M4 +" Maintainer: Claudio Fleiner (claudio@fleiner.com) +" Last Change: 2022 Jun 12 +" 2025 Sep 2 by Vim project: fix a few syntax issues #18192 +" 2025 Sep 5 by Vim project: introduce m4Disabled region #18200 +" 2025 Sep 6 by Vim project: remove m4Function heuristics #18211 +" 2025 Sep 6 by Vim project: remove m4Type and m4Function #18223 +" 2025 Sep 15 by Vim project: highlight m4Parameters #18306 + +" quit when a syntax file was already loaded +if !exists("main_syntax") + if exists("b:current_syntax") + finish + endif + " we define it here so that included files can test for it + let main_syntax='m4' +endif + +" Reference: The Open Group Base Specifications, M4 +" https://pubs.opengroup.org/onlinepubs/9799919799/ + +" Early definition of a cluster +syn cluster m4Top contains=NONE + +" Quoting in M4: +" – Quotes are nestable; +" – The delimiters can be redefined with changequote(); here we only handle +" the default pair: ` ... '; +" – Quoted text in M4 is rescanned, not treated as a literal string. +" Therefore the region is marked transparent so contained items retain +" their normal highlighting. +syn region m4Quoted + \ matchgroup=m4QuoteDelim + \ start=+`+ + \ end=+'+ + \ contains=@m4Top + \ transparent +syn cluster m4Top add=m4Quoted + +" Comments in M4: +" – According to the Open Group Base Specification, comments start with +" a (#) and end at , unless redefined with changecom(). +" We only handle the default here. +" – Comments in M4 are not like in most languages: they do not remove the text, +" they simply prevent any macros from being expanded, while the text remains +" in the output. This region therefore disables any other matches. +" – Comments themselves are disabled when quoted. +syn region m4Disabled start=+#+ end=+$+ containedin=ALLBUT,m4Quoted,m4ParamCount + +" Macros in M4: +" – Name tokens consist of the longest possible sequence of letters, digits, +" and underscores, where the first character is not a digit. +" – In GNU M4, this can be altered with changeword(). +" – Any name token may be defined as a macro and quoting prevents expansion. +" Thus correct highlighting requires running M4. + +" Parameters in M4: +" $0 = macro name; $1..$9 = positional (single digit only); $# = count; +" $* = args comma-joined; $@ = args quoted+comma; "${" = unspecified. +syn match m4ParamZero contained "\$0" +syn match m4ParamPos contained "\$[1-9]" +syn match m4ParamCount contained "\$#" +syn match m4ParamAll contained "\$[@*]" +syn match m4ParamBad contained '\${' +syn cluster m4Top add=m4ParamZero,m4ParamPos,m4ParamCount,m4ParamAll,m4ParamBad + +" define the rest of M4 syntax +syn match m4Comment "\<\(m4_\)\=dnl\>.*" contains=SpellErrors +syn match m4Constants "\<\(m4_\)\=__file__" +syn match m4Constants "\<\(m4_\)\=__line__" +syn keyword m4Constants divnum sysval m4_divnum m4_sysval +syn region m4Paren matchgroup=m4Delimiter start="(" end=")" contained contains=@m4Top +syn region m4Command matchgroup=m4Define start="\<\(m4_\)\=\(define\|defn\|pushdef\)(" end=")" contains=@m4Top +syn region m4Command matchgroup=m4Preproc start="\<\(m4_\)\=\(include\|sinclude\)("he=e-1 end=")" contains=@m4Top +syn region m4Command matchgroup=m4Statement start="\<\(m4_\)\=\(syscmd\|esyscmd\|ifdef\|ifelse\|indir\|builtin\|shift\|errprint\|m4exit\|changecom\|changequote\|changeword\|m4wrap\|debugfile\|divert\|undivert\)("he=e-1 end=")" contains=@m4Top +syn region m4Command matchgroup=m4Builtin start="\<\(m4_\)\=\(len\|index\|regexp\|substr\|translit\|patsubst\|format\|incr\|decr\|eval\|maketemp\)("he=e-1 end=")" contains=@m4Top +syn keyword m4Statement divert undivert +syn region m4Command matchgroup=m4Define start="\<\(m4_\)\=\(undefine\|popdef\)("he=e-1 end=")" contains=@m4Top +syn cluster m4Top add=m4Comment,m4Constants,m4Paren,m4Command,m4Statement + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link m4QuoteDelim Delimiter +hi def link m4Delimiter Delimiter +hi def link m4Comment Comment +hi def link m4ParamZero Macro +hi def link m4ParamPos Special +hi def link m4ParamCount Keyword +hi def link m4ParamAll Keyword +hi def link m4ParamBad Error +hi def link m4Keyword Keyword +hi def link m4Define Define +hi def link m4Statement Statement +hi def link m4Preproc PreProc +hi def link m4Constants Constant +hi def link m4Builtin Statement + +let b:current_syntax = "m4" + +if main_syntax == 'm4' + unlet main_syntax +endif + +" vim: ts=4 diff --git a/.config/vim/syntax/mail.vim b/.config/vim/syntax/mail.vim new file mode 100644 index 0000000..9beeba6 --- /dev/null +++ b/.config/vim/syntax/mail.vim @@ -0,0 +1,117 @@ +" Vim syntax file +" Language: Mail file +" Previous Maintainer: Felix von Leitner +" Maintainer: GI , where a='gi1242+vim', b='gmail', c='com' +" Last Change: Thu 25 Jan 2024 10:34:02 AM EST + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn spell toplevel + +" The mail header is recognized starting with a "keyword:" line and ending +" with an empty line or other line that can't be in the header. All lines of +" the header are highlighted. Headers of quoted messages (quoted with >) are +" also highlighted. + +" Syntax clusters +syn cluster mailHeaderFields contains=mailHeaderKey,mailSubject,mailHeaderEmail,@mailLinks +syn cluster mailLinks contains=mailURL,mailEmail +syn cluster mailQuoteExps contains=mailQuoteExp1,mailQuoteExp2,mailQuoteExp3,mailQuoteExp4,mailQuoteExp5,mailQuoteExp6 + +syn case match +" For "From " matching case is required. The "From " is not matched in quoted +" emails +" According to RFC 2822 any printable ASCII character can appear in a field +" name, except ':'. +syn region mailHeader contains=@mailHeaderFields,@NoSpell start="^From .*\d\d\d\d$" skip="^\s" end="\v^[!-9;-~]*([^!-~]|$)"me=s-1 fold +syn match mailHeaderKey contained contains=mailEmail,@NoSpell "^From\s.*\d\d\d\d$" + +" Nothing else depends on case. +syn case ignore + +" Headers in properly quoted (with "> " or ">") emails are matched +syn region mailHeader keepend contains=@mailHeaderFields,@mailQuoteExps,@NoSpell start="^\z(\(> \?\)*\)\v(newsgroups|x-([a-z\-])*|path|xref|message-id|from|((in-)?reply-)?to|b?cc|subject|return-path|received|date|replied):" skip="^\z1\s" end="\v^\z1[!-9;-~]*([^!-~]|$)"me=s-1 end="\v^\z1@!"me=s-1 end="\v^\z1(\> ?)+"me=s-1 fold + +" Usenet headers +syn match mailHeaderKey contained contains=mailHeaderEmail,mailEmail,@NoSpell "\v(^(\> ?)*)@<=(Newsgroups|Followup-To|Message-ID|Supersedes|Control):.*$" + + +syn region mailHeaderKey contained contains=mailHeaderEmail,mailEmail,@mailQuoteExps,@NoSpell start="\v(^(\> ?)*)@<=(to|b?cc):" skip=",$" end="$" +syn match mailHeaderKey contained contains=mailHeaderEmail,mailEmail,@NoSpell "\v(^(\> ?)*)@<=(from|reply-to):.*$" fold +syn match mailHeaderKey contained contains=@NoSpell "\v(^(\> ?)*)@<=date:" +syn match mailSubject contained "\v^subject:.*$" fold +syn match mailSubject contained contains=@NoSpell "\v(^(\> ?)+)@<=subject:.*$" + +" Anything in the header between < and > is an email address +syn match mailHeaderEmail contained contains=@NoSpell "<.\{-}>" + +" Mail Signatures. (Begin with "-- ", end with change in quote level) +syn region mailSignature keepend contains=@mailLinks,@mailQuoteExps start="^--\s$" end="^$" end="^\(> \?\)\+"me=s-1 fold +syn region mailSignature keepend contains=@mailLinks,@mailQuoteExps,@NoSpell start="^\z(\(> \?\)\+\)--\s$" end="^\z1$" end="^\z1\@!"me=s-1 end="^\z1\(> \?\)\+"me=s-1 fold + +" Treat verbatim Text special. +syn region mailVerbatim contains=@NoSpell keepend start="^#v+$" end="^#v-$" fold +syn region mailVerbatim contains=@mailQuoteExps,@NoSpell keepend start="^\z(\(> \?\)\+\)#v+$" end="\z1#v-$" fold + +" URLs start with a known protocol or www,web,w3. +syn match mailURL contains=@NoSpell `\v<(((https?|ftp|gopher)://|(mailto|file|news):)[^' <>"]+|(www|web|w3)[a-z0-9_-]*\.[a-z0-9._-]+\.[^' <>"]+)[a-z0-9/]` +syn match mailEmail contains=@NoSpell "\v[_=a-z\./+0-9-]+\@[a-z0-9._-]+\a{2}" + +" Don't spell emojis +syn match mailEmoji contains=@NoSpell "\%#=2\v[\U1f300-\U1f64f\U1f900-\U1f9ff]" + +" Make sure quote markers in regions (header / signature) have correct color +syn match mailQuoteExp1 contained "\v^(\> ?)" +syn match mailQuoteExp2 contained "\v^(\> ?){2}" +syn match mailQuoteExp3 contained "\v^(\> ?){3}" +syn match mailQuoteExp4 contained "\v^(\> ?){4}" +syn match mailQuoteExp5 contained "\v^(\> ?){5}" +syn match mailQuoteExp6 contained "\v^(\> ?){6}" + +" Even and odd quoted lines. Order is important here! +syn region mailQuoted6 keepend contains=mailVerbatim,mailHeader,@mailLinks,mailSignature,@NoSpell start="^\z(\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{5}\([a-z]\+>\|[]|}>]\)\)" end="^\z1\@!" fold +syn region mailQuoted5 keepend contains=mailQuoted6,mailVerbatim,mailHeader,@mailLinks,mailSignature,@NoSpell start="^\z(\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{4}\([a-z]\+>\|[]|}>]\)\)" end="^\z1\@!" fold +syn region mailQuoted4 keepend contains=mailQuoted5,mailQuoted6,mailVerbatim,mailHeader,@mailLinks,mailSignature,@NoSpell start="^\z(\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{3}\([a-z]\+>\|[]|}>]\)\)" end="^\z1\@!" fold +syn region mailQuoted3 keepend contains=mailQuoted4,mailQuoted5,mailQuoted6,mailVerbatim,mailHeader,@mailLinks,mailSignature,@NoSpell start="^\z(\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{2}\([a-z]\+>\|[]|}>]\)\)" end="^\z1\@!" fold +syn region mailQuoted2 keepend contains=mailQuoted3,mailQuoted4,mailQuoted5,mailQuoted6,mailVerbatim,mailHeader,@mailLinks,mailSignature,@NoSpell start="^\z(\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{1}\([a-z]\+>\|[]|}>]\)\)" end="^\z1\@!" fold +syn region mailQuoted1 keepend contains=mailQuoted2,mailQuoted3,mailQuoted4,mailQuoted5,mailQuoted6,mailVerbatim,mailHeader,@mailLinks,mailSignature,@NoSpell start="^\z([a-z]\+>\|[]|}>]\)" end="^\z1\@!" fold + +" Need to sync on the header. Assume we can do that within 100 lines +if exists("mail_minlines") + exec "syn sync minlines=" . mail_minlines +else + syn sync minlines=100 +endif + +" Define the default highlighting. +hi def link mailVerbatim Special +hi def link mailHeader PreProc +hi def link mailHeaderKey Type +hi def link mailSignature Comment +hi def link mailHeaderEmail mailEmail +hi def link mailEmail String +hi def link mailURL Constant +hi def link mailSubject Statement +hi def link mailQuoted1 Function +hi def link mailQuoted3 mailQuoted1 +hi def link mailQuoted5 mailQuoted1 +hi def link mailQuoted2 Identifier +hi def link mailQuoted4 mailQuoted2 +hi def link mailQuoted6 mailQuoted2 +hi def link mailQuoteExp1 mailQuoted1 +hi def link mailQuoteExp2 mailQuoted2 +hi def link mailQuoteExp3 mailQuoted3 +hi def link mailQuoteExp4 mailQuoted4 +hi def link mailQuoteExp5 mailQuoted5 +hi def link mailQuoteExp6 mailQuoted6 + +let b:current_syntax = "mail" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/mailaliases.vim b/.config/vim/syntax/mailaliases.vim new file mode 100644 index 0000000..a5282aa --- /dev/null +++ b/.config/vim/syntax/mailaliases.vim @@ -0,0 +1,71 @@ +" Vim syntax file +" Language: aliases(5) local alias database file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2008-04-14 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword mailaliasesTodo contained TODO FIXME XXX NOTE + +syn region mailaliasesComment display oneline start='^\s*#' end='$' + \ contains=mailaliasesTodo,@Spell + +syn match mailaliasesBegin display '^' + \ nextgroup=mailaliasesName, + \ mailaliasesComment + +syn match mailaliasesName contained '[[:alnum:]\._-]\+' + \ nextgroup=mailaliasesColon + +syn region mailaliasesName contained oneline start=+"+ + \ skip=+\\\\\|\\"+ end=+"+ + \ nextgroup=mailaliasesColon + +syn match mailaliasesColon contained ':' + \ nextgroup=@mailaliasesValue + \ skipwhite skipnl + +syn cluster mailaliasesValue contains=mailaliasesValueAddress, + \ mailaliasesValueFile, + \ mailaliasesValueCommand, + \ mailaliasesValueInclude + +syn match mailaliasesValueAddress contained '[^ \t/|,]\+' + \ nextgroup=mailaliasesValueSep + \ skipwhite skipnl + +syn match mailaliasesValueFile contained '/[^,]*' + \ nextgroup=mailaliasesValueSep + \ skipwhite skipnl + +syn match mailaliasesValueCommand contained '|[^,]*' + \ nextgroup=mailaliasesValueSep + \ skipwhite skipnl + +syn match mailaliasesValueInclude contained ':include:[^,]*' + \ nextgroup=mailaliasesValueSep + \ skipwhite skipnl + +syn match mailaliasesValueSep contained ',' + \ nextgroup=@mailaliasesValue + \ skipwhite skipnl + +hi def link mailaliasesTodo Todo +hi def link mailaliasesComment Comment +hi def link mailaliasesName Identifier +hi def link mailaliasesColon Delimiter +hi def link mailaliasesValueAddress String +hi def link mailaliasesValueFile String +hi def link mailaliasesValueCommand String +hi def link mailaliasesValueInclude PreProc +hi def link mailaliasesValueSep Delimiter + +let b:current_syntax = "mailaliases" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/mailcap.vim b/.config/vim/syntax/mailcap.vim new file mode 100644 index 0000000..bd23040 --- /dev/null +++ b/.config/vim/syntax/mailcap.vim @@ -0,0 +1,35 @@ +" Vim syntax file +" Language: Mailcap configuration file +" Maintainer: Doug Kearns +" Last Change: 2013 Jun 01 + +if exists("b:current_syntax") + finish +endif + +syn match mailcapComment "^#.*" + +syn region mailcapString start=+"+ end=+"+ contains=mailcapSpecial oneline + +syn match mailcapDelimiter "\\\@" +syn match mailcapFieldname "\<\(compose\|composetyped\|print\|edit\|test\|x11-bitmap\|nametemplate\|textualnewlines\|description\|x-\w+\)\>\ze\s*=" +syn match mailcapTypeField "^\(text\|image\|audio\|video\|application\|message\|multipart\|model\|x-[[:graph:]]\+\)\(/\(\*\|[[:graph:]]\+\)\)\=\ze\s*;" +syn case match + +hi def link mailcapComment Comment +hi def link mailcapDelimiter Delimiter +hi def link mailcapFlag Statement +hi def link mailcapFieldname Statement +hi def link mailcapSpecial Identifier +hi def link mailcapTypeField Type +hi def link mailcapString String + +let b:current_syntax = "mailcap" + +" vim: ts=8 diff --git a/.config/vim/syntax/make.vim b/.config/vim/syntax/make.vim new file mode 100644 index 0000000..338150f --- /dev/null +++ b/.config/vim/syntax/make.vim @@ -0,0 +1,193 @@ +" Vim syntax file +" Language: Makefile +" Maintainer: Roland Hieber , +" Previous Maintainer: Claudio Fleiner +" URL: https://github.com/vim/vim/blob/master/runtime/syntax/make.vim +" Last Change: 2022 Nov 06 +" 2025 Apr 15 by Vim project: rework Make flavor detection (#17089) +" 2025 Oct 12 by Vim project: update makeDefine highlighting (#18403) +" 2025 Oct 25 by Vim project: update makeTargetinDefine highlighting (#18570) + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" enable GNU extension when b:make_flavor is not set—detection failed or Makefile is POSIX-compliant +let s:make_flavor = 'gnu' + +" some special characters +syn match makeSpecial "^\s*[@+-]\+" +syn match makeNextLine "\\\n\s*" + +" catch unmatched define/endef keywords. endef only matches it is by itself on a line, possibly followed by a commend +syn region makeDefine start="^\s*define\s" end="^\s*endef\s*\(#.*\)\?$" + \ contains=makeStatement,makeIdent,makePreCondit,makeDefine,makeComment,makeTargetinDefine + +if get(b:, 'make_flavor', s:make_flavor) == 'microsoft' + " Microsoft Makefile specials + syn case ignore + syn match makeInclude "^!\s*include\s.*$" + syn match makePreCondit "^!\s*\(cmdswitches\|error\|message\|include\|if\|ifdef\|ifndef\|else\|else\s*if\|else\s*ifdef\|else\s*ifndef\|endif\|undef\)\>" + syn case match +endif + +" identifiers; treat $$X like $X inside makeDefine +syn match makeIdent "\$\$\w*" +syn match makeIdent "\$\$\$\$\w*" containedin=makeDefine +syn match makeIdent "\$[^({]" +syn match makeIdent "\$\$[^({]" containedin=makeDefine +syn match makeIdent "^ *[^:#= \t]*\s*[:+?!*]="me=e-2 +syn match makeIdent "^ *[^:#= \t]*\s*::="me=e-3 +syn match makeIdent "^ *[^:#= \t]*\s*="me=e-1 +syn match makeIdent "%" +if get(b:, 'make_flavor', s:make_flavor) == 'microsoft' + syn region makeIdent start="\$(" end=")" contains=makeStatement,makeIdent + syn region makeIdent start="\${" end="}" contains=makeStatement,makeIdent + syn region makeIdent start="\$\$(" end=")" containedin=makeDefine contains=makeStatement,makeIdent + syn region makeIdent start="\$\${" end="}" containedin=makeDefine contains=makeStatement,makeIdent +else + syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent + syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent + syn region makeIdent start="\$\$(" skip="\\)\|\\\\" end=")" containedin=makeDefine contains=makeStatement,makeIdent + syn region makeIdent start="\$\${" skip="\\}\|\\\\" end="}" containedin=makeDefine contains=makeStatement,makeIdent +endif + +" Makefile.in variables +syn match makeConfig "@[A-Za-z0-9_]\+@" + +" make targets +syn match makeImplicit "^\.[A-Za-z0-9_./\t -]\+\s*:$"me=e-1 +syn match makeImplicit "^\.[A-Za-z0-9_./\t -]\+\s*:[^=]"me=e-2 + +syn region makeTargetinDefine transparent matchgroup=makeTargetinDefine + \ start="^[~A-Za-z0-9_./$(){}%-][A-Za-z0-9_./\t ${}()%-]*&\?:\?:\{1,2}[^:=]"rs=e-1 + \ end="[^\\]$" + \ keepend +syn match makeTargetinDefine "^[~A-Za-z0-9_./$(){}%*@-][A-Za-z0-9_./\t $(){}%*@-]*&\?::\=\s*$" + \ contains=makeIdent,makeSpecTarget,makeComment + +syn region makeTarget transparent matchgroup=makeTarget + \ start="^[~A-Za-z0-9_./$(){}%-][A-Za-z0-9_./\t ${}()%-]*&\?:\?:\{1,2}[^:=]"rs=e-1 + \ end="[^\\]$" + \ keepend contains=makeIdent,makeSpecTarget,makeNextLine,makeComment,makeDString + \ skipnl nextGroup=makeCommands +syn match makeTarget "^[~A-Za-z0-9_./$(){}%*@-][A-Za-z0-9_./\t $(){}%*@-]*&\?::\=\s*$" + \ contains=makeIdent,makeSpecTarget,makeComment + \ skipnl nextgroup=makeCommands,makeCommandError + +syn region makeSpecTarget transparent matchgroup=makeSpecTarget + \ start="^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|NOTPARALLEL\|POSIX\)\>\s*:\{1,2}[^:=]"rs=e-1 + \ end="[^\\]$" keepend + \ contains=makeIdent,makeSpecTarget,makeNextLine,makeComment skipnl nextGroup=makeCommands +syn match makeSpecTarget "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|NOTPARALLEL\|POSIX\)\>\s*::\=\s*$" + \ contains=makeIdent,makeComment + \ skipnl nextgroup=makeCommands,makeCommandError + +if get(b:, 'make_flavor', s:make_flavor) == 'bsd' + syn region makeSpecTarget transparent matchgroup=makeSpecTarget + \ start="^\.DELETE_ON_ERROR\>\s*:\{1,2}[^:=]"rs=e-1 + \ end="[^\\]$" keepend + \ contains=makeIdent,makeSpecTarget,makeNextLine,makeComment skipnl nextGroup=makeCommands + syn match makeSpecTarget "^\.DELETE_ON_ERROR\>\s*::\=\s*$" + \ contains=makeIdent,makeComment + \ skipnl nextgroup=makeCommands,makeCommandError +elseif get(b:, 'make_flavor', s:make_flavor) == 'gnu' + syn region makeSpecTarget transparent matchgroup=makeSpecTarget + \ start="^\.\(EXPORT_ALL_VARIABLES\|DELETE_ON_ERROR\|INTERMEDIATE\|KEEP_STATE\|LIBPATTERNS\|ONESHELL\|SECONDARY\)\>\s*:\{1,2}[^:=]"rs=e-1 + \ end="[^\\]$" keepend + \ contains=makeIdent,makeSpecTarget,makeNextLine,makeComment skipnl nextGroup=makeCommands + syn match makeSpecTarget "^\.\(EXPORT_ALL_VARIABLES\|DELETE_ON_ERROR\|INTERMEDIATE\|KEEP_STATE\|LIBPATTERNS\|ONESHELL\|SECONDARY\)\>\s*::\=\s*$" + \ contains=makeIdent,makeComment + \ skipnl nextgroup=makeCommands,makeCommandError +endif + +syn match makeCommandError "^\s\+\S.*" contained +syn region makeCommands contained start=";"hs=s+1 start="^\t" + \ end="^[^\t#]"me=e-1,re=e-1 end="^$" + \ contains=makeCmdNextLine,makeSpecial,makeComment,makeIdent,makePreCondit,makeDefine,makeDString,makeSString + \ nextgroup=makeCommandError +syn match makeCmdNextLine "\\\n."he=e-1 contained + +" some directives +syn match makeInclude "^ *[-s]\=include\s.*$" +syn match makeExport "^ *\(export\|unexport\)\>" +if get(b:, 'make_flavor', s:make_flavor) == 'gnu' + " Statements / Functions (GNU make) + syn match makePreCondit "^ *\(ifn\=\(eq\|def\)\>\|else\(\s\+ifn\=\(eq\|def\)\)\=\>\|endif\>\)" + syn match makeStatement "^ *vpath\>" + syn match makeOverride "^ *override\>" + syn match makeStatement contained "[({]\(abspath\|addprefix\|addsuffix\|and\|basename\|call\|dir\|error\|eval\|file\|filter-out\|filter\|findstring\|firstword\|flavor\|foreach\|guile\|if\|info\|intcmp\|join\|lastword\|let\|notdir\|or\|origin\|patsubst\|realpath\|shell\|sort\|strip\|subst\|suffix\|value\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1 +endif + +" Comment +if !exists("make_no_comments") + if get(b:, 'make_flavor', s:make_flavor) == 'microsoft' + syn match makeComment "#.*" contains=@Spell,makeTodo + else + syn region makeComment start="#" end="^$" end="[^\\]$" keepend contains=@Spell,makeTodo + syn match makeComment "#$" contains=@Spell + endif +endif +syn keyword makeTodo TODO FIXME XXX contained + +" match escaped quotes and any other escaped character +" except for $, as a backslash in front of a $ does +" not make it a standard character, but instead it will +" still act as the beginning of a variable +" The escaped char is not highlightet currently +syn match makeEscapedChar "\\[^$]" + + +syn region makeDString start=+\(\\\)\@ +" URL: https://github.com/jhradilek/vim-syntax +" Last Change: 11 February 2013 +" Description: A syntax file for the Mallard markup language according to +" Mallard 1.0 DRAFT as of 2013-02-11. + +if exists("b:current_syntax") + finish +endif + +do Syntax xml +syn cluster xmlTagHook add=mallardTagName +syn spell toplevel +syn case match + +syn keyword mallardTagName app cite cmd code col colgroup comment contained +syn keyword mallardTagName credit desc em email example figure contained +syn keyword mallardTagName file gui guiseq info input item key contained +syn keyword mallardTagName keyseq license link links list listing contained +syn keyword mallardTagName media name note output p page quote contained +syn keyword mallardTagName revision screen section span steps contained +syn keyword mallardTagName subtitle synopsis sys table tbody td contained +syn keyword mallardTagName terms tfoot thead title tr tree var contained +syn keyword mallardTagName years contained + +syn region mallardComment start="" end=""me=e-10 contains=xmlTag,xmlNamespace,xmlTagName,xmlEndTag,xmlRegion,xmlEntity,@Spell keepend +syn region mallardEmphasis start="" end=""me=e-5 contains=xmlTag,xmlNamespace,xmlTagName,xmlEndTag,xmlRegion,xmlEntity,@Spell keepend +syn region mallardTitle start="" end=""me=e-8 contains=xmlTag,xmlNamespace,xmlTagName,xmlEndTag,xmlRegion,xmlEntity,@Spell keepend + +hi def link mallardComment Comment +hi def link mallardTagName Statement +hi def link mallardTitle Title +hi def mallardEmphasis term=italic cterm=italic gui=italic + +let b:current_syntax = "mallard" diff --git a/.config/vim/syntax/man.vim b/.config/vim/syntax/man.vim new file mode 100644 index 0000000..dfbb35a --- /dev/null +++ b/.config/vim/syntax/man.vim @@ -0,0 +1,58 @@ +" Vim syntax file +" Language: Man page +" Maintainer: Jason Franklin +" Previous Maintainer: SungHyun Nam +" Previous Maintainer: Gautam H. Mudunuri +" Version Info: +" Last Change: 2020 Sep 19 + +" Additional highlighting by Johannes Tanzler : +" * manSubHeading +" * manSynopsis (only for sections 2 and 3) + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Get the CTRL-H syntax to handle backspaced text +runtime! syntax/ctrlh.vim + +syn case ignore + +" See notes about hyphenation in s:ParseIntoPageAndSection of +" autoload/dist/man.vim. +syn match manReference "\%(\f\+[\u2010-]\%(\n\|\r\n\=\)\s\+\)\=\f\+([1-9]\l*)" +syn match manSectionHeading "^\a.*$" +syn match manSubHeading "^\s\{3\}\a.*$" +syn match manOptionDesc "^\s*[+-][a-z0-9]\S*" +syn match manLongOptionDesc "^\s*--[a-z0-9-]\S*" +" syn match manHistory "^[a-z].*last change.*$" + +syn match manHeader '\%1l.*' +exe 'syn match manFooter ''\%' . line('$') . 'l.*''' + +if getline(1) =~ '^[a-zA-Z_]\+([23])' + syntax include @cCode :p:h/c.vim + syn match manCFuncDefinition display "\<\h\w*\>\s*("me=e-1 contained + syn region manSynopsis start="^SYNOPSIS"hs=s+8 end="^\u\+\s*$"me=e-12 keepend contains=manSectionHeading,@cCode,manCFuncDefinition +endif + + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link manHeader Title +hi def link manFooter PreProc + +hi def link manSectionHeading Statement +hi def link manOptionDesc Constant +hi def link manLongOptionDesc Constant +hi def link manReference PreProc +hi def link manSubHeading Function +hi def link manCFuncDefinition Function + + +let b:current_syntax = "man" + +" vim:ts=8 sts=2 sw=2: diff --git a/.config/vim/syntax/manconf.vim b/.config/vim/syntax/manconf.vim new file mode 100644 index 0000000..2c17568 --- /dev/null +++ b/.config/vim/syntax/manconf.vim @@ -0,0 +1,117 @@ +" Vim syntax file +" Language: man.conf(5) - man configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword manconfTodo contained TODO FIXME XXX NOTE + +syn region manconfComment display oneline start='^#' end='$' + \ contains=manconfTodo,@Spell + +if !has("win32") && $OSTYPE =~ 'bsd' + syn match manconfBegin display '^' + \ nextgroup=manconfKeyword,manconfSection, + \ manconfComment skipwhite + + syn keyword manconfKeyword contained _build _crunch + \ nextgroup=manconfExtCmd skipwhite + + syn keyword manconfKeyword contained _suffix + \ nextgroup=manconfExt skipwhite + + syn keyword manconfKeyword contained _crunch + + syn keyword manconfKeyword contained _subdir _version _whatdb + \ nextgroup=manconfPaths skipwhite + + syn match manconfExtCmd contained display '\.\S\+' + \ nextgroup=manconfPaths skipwhite + + syn match manconfSection contained '[^#_ \t]\S*' + \ nextgroup=manconfPaths skipwhite + + syn keyword manconfSection contained _default + \ nextgroup=manconfPaths skipwhite + + syn match manconfPaths contained display '\S\+' + \ nextgroup=manconfPaths skipwhite + + syn match manconfExt contained display '\.\S\+' + + hi def link manconfExtCmd Type + hi def link manconfSection Identifier + hi def link manconfPaths String +else + syn match manconfBegin display '^' + \ nextgroup=manconfBoolean,manconfKeyword, + \ manconfDecompress,manconfComment skipwhite + + syn keyword manconfBoolean contained FSSTND FHS NOAUTOPATH NOCACHE + + syn keyword manconfKeyword contained MANBIN + \ nextgroup=manconfPath skipwhite + + syn keyword manconfKeyword contained MANPATH MANPATH_MAP + \ nextgroup=manconfFirstPath skipwhite + + syn keyword manconfKeyword contained APROPOS WHATIS TROFF NROFF JNROFF EQN + \ NEQN JNEQN TBL COL REFER PIC VGRIND GRAP + \ PAGER BROWSER HTMLPAGER CMP CAT COMPRESS + \ DECOMPRESS MANDEFOPTIONS + \ nextgroup=manconfCommand skipwhite + + syn keyword manconfKeyword contained COMPRESS_EXT + \ nextgroup=manconfExt skipwhite + + syn keyword manconfKeyword contained MANSECT + \ nextgroup=manconfManSect skipwhite + + syn match manconfPath contained display '\S\+' + + syn match manconfFirstPath contained display '\S\+' + \ nextgroup=manconfSecondPath skipwhite + + syn match manconfSecondPath contained display '\S\+' + + syn match manconfCommand contained display '\%(/[^/ \t]\+\)\+' + \ nextgroup=manconfCommandOpt skipwhite + + syn match manconfCommandOpt contained display '\S\+' + \ nextgroup=manconfCommandOpt skipwhite + + syn match manconfExt contained display '\.\S\+' + + syn match manconfManSect contained '[^:]\+' nextgroup=manconfManSectSep + + syn match manconfManSectSep contained ':' nextgroup=manconfManSect + + syn match manconfDecompress contained '\.\S\+' + \ nextgroup=manconfCommand skipwhite + + hi def link manconfBoolean Boolean + hi def link manconfPath String + hi def link manconfFirstPath manconfPath + hi def link manconfSecondPath manconfPath + hi def link manconfCommand String + hi def link manconfCommandOpt Special + hi def link manconfManSect Identifier + hi def link manconfManSectSep Delimiter + hi def link manconfDecompress Type +endif + +hi def link manconfTodo Todo +hi def link manconfComment Comment +hi def link manconfKeyword Keyword +hi def link manconfExt Type + +let b:current_syntax = "manconf" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/manual.vim b/.config/vim/syntax/manual.vim new file mode 100644 index 0000000..8388336 --- /dev/null +++ b/.config/vim/syntax/manual.vim @@ -0,0 +1,30 @@ +" Vim syntax support file +" Maintainer: The Vim Project +" Last Change: 2023 Aug 10 +" Former Maintainer: Bram Moolenaar + +" This file is used for ":syntax manual". +" It installs the Syntax autocommands, but no the FileType autocommands. + +if !has("syntax") + finish +endif + +" Load the Syntax autocommands and set the default methods for highlighting. +if !exists("syntax_on") + so :p:h/synload.vim +endif + +let syntax_manual = 1 + +" Overrule the connection between FileType and Syntax autocommands. This sets +" the syntax when the file type is detected, without changing the value. +augroup syntaxset + au! FileType * exe "set syntax=" . &syntax +augroup END + +" If the GUI is already running, may still need to install the FileType menu. +" Don't do it when the 'M' flag is included in 'guioptions'. +if has("menu") && has("gui_running") && !exists("did_install_syntax_menu") && &guioptions !~# 'M' + source $VIMRUNTIME/menu.vim +endif diff --git a/.config/vim/syntax/maple.vim b/.config/vim/syntax/maple.vim new file mode 100644 index 0000000..b0bd9aa --- /dev/null +++ b/.config/vim/syntax/maple.vim @@ -0,0 +1,624 @@ +" Vim syntax file +" Language: Maple V (based on release 4) +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer:Charles E. Campbell +" Last Change: Mar 26, 2019 +" 2024 Feb 19 by Vim Project (announce adoption) +" Version: 17 +" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_MAPLE +" +" Package Function Selection: {{{1 +" Because there are a lot of packages, and because of the potential for namespace +" clashes, this version of needs the user to select which, if any, +" package functions should be highlighted. Select your packages and put into your +" <.vimrc> none or more of the lines following let ...=1 lines: +" +" if exists("mvpkg_all") +" ... +" endif +" +" *OR* let mvpkg_all=1 + +" This syntax file contains all the keywords and top-level packages of Maple 9.5 +" but only the contents of packages of Maple V Release 4, and the top-level +" routines of Release 4. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Iskeyword Effects: {{{1 +if (v:version == 704 && has("patch-7.4.1142")) || v:version > 704 + syn iskeyword $,48-57,_,a-z,@-Z +else + setl isk=$,48-57,_,a-z,@-Z +endif + +" Package Selection: {{{1 +" allow user to simply select all packages for highlighting +if exists("mvpkg_all") + let mv_DEtools = 1 + let mv_Galois = 1 + let mv_GaussInt = 1 + let mv_LREtools = 1 + let mv_combinat = 1 + let mv_combstruct = 1 + let mv_difforms = 1 + let mv_finance = 1 + let mv_genfunc = 1 + let mv_geometry = 1 + let mv_grobner = 1 + let mv_group = 1 + let mv_inttrans = 1 + let mv_liesymm = 1 + let mv_linalg = 1 + let mv_logic = 1 + let mv_networks = 1 + let mv_numapprox = 1 + let mv_numtheory = 1 + let mv_orthopoly = 1 + let mv_padic = 1 + let mv_plots = 1 + let mv_plottools = 1 + let mv_powseries = 1 + let mv_process = 1 + let mv_simplex = 1 + let mv_stats = 1 + let mv_student = 1 + let mv_sumtools = 1 + let mv_tensor = 1 + let mv_totorder = 1 +endif + +" Parenthesis/curly/brace sanity checker: {{{1 +syn case match + +" parenthesis/curly/brace sanity checker +syn region mvZone matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" transparent contains=ALLBUT,mvError,mvBraceError,mvCurlyError +syn region mvZone matchgroup=Delimiter start="{" matchgroup=Delimiter end="}" transparent contains=ALLBUT,mvError,mvBraceError,mvParenError +syn region mvZone matchgroup=Delimiter start="\[" matchgroup=Delimiter end="]" transparent contains=ALLBUT,mvError,mvCurlyError,mvParenError +syn match mvError "[)\]}]" +syn match mvBraceError "[)}]" contained +syn match mvCurlyError "[)\]]" contained +syn match mvParenError "[\]}]" contained +syn match mvComma "[,;:]" +syn match mvSemiError "[;:]" contained +syn match mvDcolon "::" + +" Maple Packages, updated for Maple 9.5 +syn keyword mvPackage algcurves ArrayTools Cache codegen +syn keyword mvPackage CodeGeneration CodeTools combinat combstruct +syn keyword mvPackage ContextMenu CurveFitting DEtools diffalg +syn keyword mvPackage difforms DiscreteTransforms Domains ExternalCalling +syn keyword mvPackage FileTools finance GaussInt genfunc +syn keyword mvPackage geom3d geometry gfun Groebner +syn keyword mvPackage group hashmset IntegerRelations inttrans +syn keyword mvPackage LargeExpressions LibraryTools liesymm linalg +syn keyword mvPackage LinearAlgebra LinearFunctionalSystems LinearOperators +syn keyword mvPackage ListTools Logic LREtools Maplets +syn keyword mvPackage MathematicalFunctions MathML Matlab +syn keyword mvPackage MatrixPolynomialAlgebra MmaTranslator networks +syn keyword mvPackage numapprox numtheory Optimization OreTools +syn keyword mvPackage Ore_algebra OrthogonalSeries orthopoly padic +syn keyword mvPackage PDEtools plots plottools PolynomialIdeals +syn keyword mvPackage PolynomialTools powseries process QDifferenceEquations +syn keyword mvPackage RandomTools RationalNormalForms RealDomain RootFinding +syn keyword mvPackage ScientificConstants ScientificErrorAnalysis simplex +syn keyword mvPackage Slode SNAP Sockets SoftwareMetrics +syn keyword mvPackage SolveTools Spread stats StringTools +syn keyword mvPackage Student student sumtools SumTools +syn keyword mvPackage tensor TypeTools Units VariationalCalculus +syn keyword mvPackage VectorCalculus Worksheet XMLTools + +" Language Support: {{{1 +syn keyword mvTodo contained COMBAK FIXME TODO XXX +if exists("g:mapleversion") && g:mapleversion < 9 + syn region mvString start=+`+ skip=+``+ end=+`+ keepend contains=mvTodo,@Spell + syn region mvString start=+"+ skip=+""+ end=+"+ keepend contains=@Spell + syn region mvDelayEval start=+'+ end=+'+ keepend contains=ALLBUT,mvError,mvBraceError,mvCurlyError,mvParenError,mvSemiError + syn match mvVarAssign "[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:=" contains=mvAssign + syn match mvAssign ":=" contained +else + syn region mvName start=+`+ skip=+``+ end=+`+ keepend contains=mvTodo + syn region mvString start=+"+ skip=+""+ end=+"+ keepend contains=@Spell + syn region mvDelayEval start=+'+ end=+'+ keepend contains=ALLBUT,mvError,mvBraceError,mvCurlyError,mvParenError + syn match mvDelim "[;:]" display + syn match mvAssign ":=" +endif + +" Lower-Priority Operators: {{{1 +syn match mvOper "\." + +" Number handling: {{{1 +syn match mvNumber "\<\d\+" " integer + syn match mvNumber "[-+]\=\.\d\+" " . integer +syn match mvNumber "\<\d\+\.\d\+" " integer . integer +syn match mvNumber "\<\d\+\." " integer . +syn match mvNumber "\<\d\+\.\." contains=mvRange " integer .. + +syn match mvNumber "\<\d\+e[-+]\=\d\+" " integer e [-+] integer +syn match mvNumber "[-+]\=\.\d\+e[-+]\=\d\+" " . integer e [-+] integer +syn match mvNumber "\<\d\+\.\d*e[-+]\=\d\+" " integer . [integer] e [-+] integer + +syn match mvNumber "[-+]\d\+" " integer +syn match mvNumber "[-+]\d\+\.\d\+" " integer . integer +syn match mvNumber "[-+]\d\+\." " integer . +syn match mvNumber "[-+]\d\+\.\." contains=mvRange " integer .. + +syn match mvNumber "[-+]\d\+e[-+]\=\d\+" " integer e [-+] integer +syn match mvNumber "[-+]\d\+\.\d*e[-+]\=\d\+" " integer . [integer] e [-+] integer + +syn match mvRange "\.\." + +" Operators: {{{1 +syn keyword mvOper and not or xor implies union intersect subset minus mod +syn match mvOper "<>\|[<>]=\|[<>]\|=" +syn match mvOper "&+\|&-\|&\*\|&\/\|&" +syn match mvError "\.\.\." + +" MapleV Statements: ? statement {{{1 + +" MapleV Statements: ? statement +" Split into booleans, conditionals, operators, repeat-logic, etc +syn keyword mvBool true false FAIL +syn keyword mvCond elif else fi if then +syn match mvCond "end\s\+if" + +syn keyword mvRepeat by for in to +syn keyword mvRepeat do from od while +syn match mvRepeat "end\s\+do" + +syn keyword mvSpecial NULL +syn match mvSpecial "\[\]\|{}" + +if exists("g:mapleversion") && g:mapleversion < 9 + syn keyword mvStatement Order fail options read save + syn keyword mvStatement break local point remember stop + syn keyword mvStatement done mod proc restart with + syn keyword mvStatement end mods quit return + syn keyword mvStatement error next +else + syn keyword mvStatement option options read save + syn keyword mvStatement break local remember stop + syn keyword mvStatement done mod proc restart + syn keyword mvStatement end mods quit return + syn keyword mvStatement error next try catch + syn keyword mvStatement finally assuming global export + syn keyword mvStatement module description use +endif + +" Builtin Constants: ? constants {{{1 +syn keyword mvConstant Catalan I gamma infinity +syn keyword mvConstant Pi + +" Comments: DEBUG, if in a comment, is specially highlighted. {{{1 +syn keyword mvDebug contained DEBUG +syn cluster mvCommentGroup contains=mvTodo,mvDebug,@Spell +syn match mvComment "#.*$" contains=@mvCommentGroup + +" Basic Library Functions: ? index[function] +syn keyword mvLibrary $ @ @@ ERROR +syn keyword mvLibrary AFactor KelvinHer arctan factor log rhs +syn keyword mvLibrary AFactors KelvinKei arctanh factors log10 root +syn keyword mvLibrary AiryAi KelvinKer argument fclose lprint roots +syn keyword mvLibrary AiryBi LambertW array feof map round +syn keyword mvLibrary AngerJ Lcm assign fflush map2 rsolve +syn keyword mvLibrary Berlekamp LegendreE assigned filepos match savelib +syn keyword mvLibrary BesselI LegendreEc asspar fixdiv matrix scanf +syn keyword mvLibrary BesselJ LegendreEc1 assume float max searchtext +syn keyword mvLibrary BesselK LegendreF asubs floor maximize sec +syn keyword mvLibrary BesselY LegendreKc asympt fnormal maxnorm sech +syn keyword mvLibrary Beta LegendreKc1 attribute fopen maxorder select +syn keyword mvLibrary C LegendrePi bernstein forget member seq +syn keyword mvLibrary Chi LegendrePic branches fortran min series +syn keyword mvLibrary Ci LegendrePic1 bspline fprintf minimize setattribute +syn keyword mvLibrary CompSeq Li cat frac minpoly shake +syn keyword mvLibrary Content Linsolve ceil freeze modp showprofile +syn keyword mvLibrary D MOLS chrem fremove modp1 showtime +syn keyword mvLibrary DESol Maple_floats close frontend modp2 sign +syn keyword mvLibrary Det MeijerG close fscanf modpol signum +syn keyword mvLibrary Diff Norm coeff fsolve mods simplify +syn keyword mvLibrary Dirac Normal coeffs galois msolve sin +syn keyword mvLibrary DistDeg Nullspace coeftayl gc mtaylor singular +syn keyword mvLibrary Divide Power collect gcd mul sinh +syn keyword mvLibrary Ei Powmod combine gcdex nextprime sinterp +syn keyword mvLibrary Eigenvals Prem commutat genpoly nops solve +syn keyword mvLibrary EllipticCE Primfield comparray harmonic norm sort +syn keyword mvLibrary EllipticCK Primitive compoly has normal sparse +syn keyword mvLibrary EllipticCPi Primpart conjugate hasfun numboccur spline +syn keyword mvLibrary EllipticE ProbSplit content hasoption numer split +syn keyword mvLibrary EllipticF Product convergs hastype op splits +syn keyword mvLibrary EllipticK Psi convert heap open sprem +syn keyword mvLibrary EllipticModulus Quo coords history optimize sprintf +syn keyword mvLibrary EllipticNome RESol copy hypergeom order sqrfree +syn keyword mvLibrary EllipticPi Randpoly cos iFFT parse sqrt +syn keyword mvLibrary Eval Randprime cosh icontent pclose sscanf +syn keyword mvLibrary Expand Ratrecon cost identity pclose ssystem +syn keyword mvLibrary FFT Re cot igcd pdesolve stack +syn keyword mvLibrary Factor Rem coth igcdex piecewise sturm +syn keyword mvLibrary Factors Resultant csc ilcm plot sturmseq +syn keyword mvLibrary FresnelC RootOf csch ilog plot3d subs +syn keyword mvLibrary FresnelS Roots csgn ilog10 plotsetup subsop +syn keyword mvLibrary Fresnelf SPrem dawson implicitdiff pochhammer substring +syn keyword mvLibrary Fresnelg Searchtext define indets pointto sum +syn keyword mvLibrary Frobenius Shi degree index poisson surd +syn keyword mvLibrary GAMMA Si denom indexed polar symmdiff +syn keyword mvLibrary GaussAGM Smith depends indices polylog symmetric +syn keyword mvLibrary Gaussejord Sqrfree diagonal inifcn polynom system +syn keyword mvLibrary Gausselim Ssi diff ininame powmod table +syn keyword mvLibrary Gcd StruveH dilog initialize prem tan +syn keyword mvLibrary Gcdex StruveL dinterp insert prevprime tanh +syn keyword mvLibrary HankelH1 Sum disassemble int primpart testeq +syn keyword mvLibrary HankelH2 Svd discont interface print testfloat +syn keyword mvLibrary Heaviside TEXT discrim interp printf thaw +syn keyword mvLibrary Hermite Trace dismantle invfunc procbody thiele +syn keyword mvLibrary Im WeberE divide invztrans procmake time +syn keyword mvLibrary Indep WeierstrassP dsolve iostatus product translate +syn keyword mvLibrary Interp WeierstrassPPrime eliminate iperfpow proot traperror +syn keyword mvLibrary Inverse WeierstrassSigma ellipsoid iquo property trigsubs +syn keyword mvLibrary Irreduc WeierstrassZeta entries iratrecon protect trunc +syn keyword mvLibrary Issimilar Zeta eqn irem psqrt type +syn keyword mvLibrary JacobiAM abs erf iroot quo typematch +syn keyword mvLibrary JacobiCD add erfc irreduc radnormal unames +syn keyword mvLibrary JacobiCN addcoords eulermac iscont radsimp unapply +syn keyword mvLibrary JacobiCS addressof eval isdifferentiable rand unassign +syn keyword mvLibrary JacobiDC algebraic evala isolate randomize unload +syn keyword mvLibrary JacobiDN algsubs evalapply ispoly randpoly unprotect +syn keyword mvLibrary JacobiDS alias evalb isqrfree range updatesR4 +syn keyword mvLibrary JacobiNC allvalues evalc isqrt rationalize userinfo +syn keyword mvLibrary JacobiND anames evalf issqr ratrecon value +syn keyword mvLibrary JacobiNS antisymm evalfint latex readbytes vector +syn keyword mvLibrary JacobiSC applyop evalgf lattice readdata verify +syn keyword mvLibrary JacobiSD arccos evalhf lcm readlib whattype +syn keyword mvLibrary JacobiSN arccosh evalm lcoeff readline with +syn keyword mvLibrary JacobiTheta1 arccot evaln leadterm readstat writebytes +syn keyword mvLibrary JacobiTheta2 arccoth evalr length realroot writedata +syn keyword mvLibrary JacobiTheta3 arccsc exp lexorder recipoly writeline +syn keyword mvLibrary JacobiTheta4 arccsch expand lhs rem writestat +syn keyword mvLibrary JacobiZeta arcsec expandoff limit remove writeto +syn keyword mvLibrary KelvinBei arcsech expandon ln residue zip +syn keyword mvLibrary KelvinBer arcsin extract lnGAMMA resultant ztrans +syn keyword mvLibrary KelvinHei arcsinh + + +" == PACKAGES ======================================================= {{{1 +" Note: highlighting of package functions is now user-selectable by package. + +" Package: DEtools differential equations tools {{{2 +if exists("mv_DEtools") + syn keyword mvPkg_DEtools DEnormal Dchangevar autonomous dfieldplot reduceOrder untranslate + syn keyword mvPkg_DEtools DEplot PDEchangecoords convertAlg indicialeq regularsp varparam + syn keyword mvPkg_DEtools DEplot3d PDEplot convertsys phaseportrait translate +endif + +" Package: Domains: create domains of computation {{{2 +if exists("mv_Domains") +endif + +" Package: GF: Galois Fields {{{2 +if exists("mv_GF") + syn keyword mvPkg_Galois galois +endif + +" Package: GaussInt: Gaussian Integers {{{2 +if exists("mv_GaussInt") + syn keyword mvPkg_GaussInt GIbasis GIfactor GIissqr GInorm GIquadres GIsmith + syn keyword mvPkg_GaussInt GIchrem GIfactors GIlcm GInormal GIquo GIsqrfree + syn keyword mvPkg_GaussInt GIdivisor GIgcd GImcmbine GIorder GIrem GIsqrt + syn keyword mvPkg_GaussInt GIfacpoly GIgcdex GInearest GIphi GIroots GIunitnormal + syn keyword mvPkg_GaussInt GIfacset GIhermite GInodiv GIprime GIsieve +endif + +" Package: LREtools: manipulate linear recurrence relations {{{2 +if exists("mv_LREtools") + syn keyword mvPkg_LREtools REcontent REprimpart REtodelta delta hypergeomsols ratpolysols + syn keyword mvPkg_LREtools REcreate REreduceorder REtoproc dispersion polysols shift + syn keyword mvPkg_LREtools REplot REtoDE constcoeffsol +endif + +" Package: combinat: combinatorial functions {{{2 +if exists("mv_combinat") + syn keyword mvPkg_combinat Chi composition graycode numbcomb permute randperm + syn keyword mvPkg_combinat bell conjpart inttovec numbcomp powerset stirling1 + syn keyword mvPkg_combinat binomial decodepart lastpart numbpart prevpart stirling2 + syn keyword mvPkg_combinat cartprod encodepart multinomial numbperm randcomb subsets + syn keyword mvPkg_combinat character fibonacci nextpart partition randpart vectoint + syn keyword mvPkg_combinat choose firstpart +endif + +" Package: combstruct: combinatorial structures {{{2 +if exists("mv_combstruct") + syn keyword mvPkg_combstruct allstructs draw iterstructs options specification structures + syn keyword mvPkg_combstruct count finished nextstruct +endif + +" Package: difforms: differential forms {{{2 +if exists("mv_difforms") + syn keyword mvPkg_difforms const defform formpart parity scalarpart wdegree + syn keyword mvPkg_difforms d form mixpar scalar simpform wedge +endif + +" Package: finance: financial mathematics {{{2 +if exists("mv_finance") + syn keyword mvPkg_finance amortization cashflows futurevalue growingperpetuity mv_finance presentvalue + syn keyword mvPkg_finance annuity effectiverate growingannuity levelcoupon perpetuity yieldtomaturity + syn keyword mvPkg_finance blackscholes +endif + +" Package: genfunc: rational generating functions {{{2 +if exists("mv_genfunc") + syn keyword mvPkg_genfunc rgf_charseq rgf_expand rgf_hybrid rgf_pfrac rgf_sequence rgf_term + syn keyword mvPkg_genfunc rgf_encode rgf_findrecur rgf_norm rgf_relate rgf_simp termscale +endif + +" Package: geometry: Euclidean geometry {{{2 +if exists("mv_geometry") + syn keyword mvPkg_geometry circle dsegment hyperbola parabola segment triangle + syn keyword mvPkg_geometry conic ellipse line point square +endif + +" Package: grobner: Grobner bases {{{2 +if exists("mv_grobner") + syn keyword mvPkg_grobner finduni gbasis leadmon normalf solvable spoly + syn keyword mvPkg_grobner finite gsolve +endif + +" Package: group: permutation and finitely-presented groups {{{2 +if exists("mv_group") + syn keyword mvPkg_group DerivedS areconjugate cosets grouporder issubgroup permrep + syn keyword mvPkg_group LCS center cosrep inter mulperms pres + syn keyword mvPkg_group NormalClosure centralizer derived invperm normalizer subgrel + syn keyword mvPkg_group RandElement convert grelgroup isabelian orbit type + syn keyword mvPkg_group Sylow core groupmember isnormal permgroup +endif + +" Package: inttrans: integral transforms {{{2 +if exists("mv_inttrans") + syn keyword mvPkg_inttrans addtable fouriercos hankel invfourier invlaplace mellin + syn keyword mvPkg_inttrans fourier fouriersin hilbert invhilbert laplace +endif + +" Package: liesymm: Lie symmetries {{{2 +if exists("mv_liesymm") + syn keyword mvPkg_liesymm &^ TD depvars getform mixpar vfix + syn keyword mvPkg_liesymm &mod annul determine hasclosure prolong wcollect + syn keyword mvPkg_liesymm Eta autosimp dvalue hook reduce wdegree + syn keyword mvPkg_liesymm Lie close extvars indepvars setup wedgeset + syn keyword mvPkg_liesymm Lrank d getcoeff makeforms translate wsubs +endif + +" Package: linalg: Linear algebra {{{2 +if exists("mv_linalg") + syn keyword mvPkg_linalg GramSchmidt coldim equal indexfunc mulcol singval + syn keyword mvPkg_linalg JordanBlock colspace exponential innerprod multiply smith + syn keyword mvPkg_linalg LUdecomp colspan extend intbasis norm stack + syn keyword mvPkg_linalg QRdecomp companion ffgausselim inverse normalize submatrix + syn keyword mvPkg_linalg addcol cond fibonacci ismith orthog subvector + syn keyword mvPkg_linalg addrow copyinto forwardsub issimilar permanent sumbasis + syn keyword mvPkg_linalg adjoint crossprod frobenius iszero pivot swapcol + syn keyword mvPkg_linalg angle curl gausselim jacobian potential swaprow + syn keyword mvPkg_linalg augment definite gaussjord jordan randmatrix sylvester + syn keyword mvPkg_linalg backsub delcols geneqns kernel randvector toeplitz + syn keyword mvPkg_linalg band delrows genmatrix laplacian rank trace + syn keyword mvPkg_linalg basis det grad leastsqrs references transpose + syn keyword mvPkg_linalg bezout diag hadamard linsolve row vandermonde + syn keyword mvPkg_linalg blockmatrix diverge hermite matadd rowdim vecpotent + syn keyword mvPkg_linalg charmat dotprod hessian matrix rowspace vectdim + syn keyword mvPkg_linalg charpoly eigenval hilbert minor rowspan vector + syn keyword mvPkg_linalg cholesky eigenvect htranspose minpoly scalarmul wronskian + syn keyword mvPkg_linalg col entermatrix ihermite +endif + +" Package: logic: Boolean logic {{{2 +if exists("mv_logic") + syn keyword mvPkg_logic MOD2 bsimp distrib environ randbool tautology + syn keyword mvPkg_logic bequal canon dual frominert satisfy toinert +endif + +" Package: networks: graph networks {{{2 +if exists("mv_networks") + syn keyword mvPkg_networks acycpoly connect dinic graph mincut show + syn keyword mvPkg_networks addedge connectivity djspantree graphical mindegree shrink + syn keyword mvPkg_networks addvertex contract dodecahedron gsimp neighbors span + syn keyword mvPkg_networks adjacency countcuts draw gunion new spanpoly + syn keyword mvPkg_networks allpairs counttrees duplicate head octahedron spantree + syn keyword mvPkg_networks ancestor cube edges icosahedron outdegree tail + syn keyword mvPkg_networks arrivals cycle ends incidence path tetrahedron + syn keyword mvPkg_networks bicomponents cyclebase eweight incident petersen tuttepoly + syn keyword mvPkg_networks charpoly daughter flow indegree random vdegree + syn keyword mvPkg_networks chrompoly degreeseq flowpoly induce rank vertices + syn keyword mvPkg_networks complement delete fundcyc isplanar rankpoly void + syn keyword mvPkg_networks complete departures getlabel maxdegree shortpathtree vweight + syn keyword mvPkg_networks components diameter girth +endif + +" Package: numapprox: numerical approximation {{{2 +if exists("mv_numapprox") + syn keyword mvPkg_numapprox chebdeg chebsort fnorm laurent minimax remez + syn keyword mvPkg_numapprox chebmult chebyshev hornerform laurent pade taylor + syn keyword mvPkg_numapprox chebpade confracform infnorm minimax +endif + +" Package: numtheory: number theory {{{2 +if exists("mv_numtheory") + syn keyword mvPkg_numtheory B cyclotomic invcfrac mcombine nthconver primroot + syn keyword mvPkg_numtheory F divisors invphi mersenne nthdenom quadres + syn keyword mvPkg_numtheory GIgcd euler isolve minkowski nthnumer rootsunity + syn keyword mvPkg_numtheory J factorEQ isprime mipolys nthpow safeprime + syn keyword mvPkg_numtheory L factorset issqrfree mlog order sigma + syn keyword mvPkg_numtheory M fermat ithprime mobius pdexpand sq2factor + syn keyword mvPkg_numtheory bernoulli ifactor jacobi mroot phi sum2sqr + syn keyword mvPkg_numtheory bigomega ifactors kronecker msqrt pprimroot tau + syn keyword mvPkg_numtheory cfrac imagunit lambda nearestp prevprime thue + syn keyword mvPkg_numtheory cfracpol index legendre nextprime +endif + +" Package: orthopoly: orthogonal polynomials {{{2 +if exists("mv_orthopoly") + syn keyword mvPkg_orthopoly G H L P T U +endif + +" Package: padic: p-adic numbers {{{2 +if exists("mv_padic") + syn keyword mvPkg_padic evalp function orderp ratvaluep rootp valuep + syn keyword mvPkg_padic expansion lcoeffp ordp +endif + +" Package: plots: graphics package {{{2 +if exists("mv_plots") + syn keyword mvPkg_plots animate coordplot3d gradplot3d listplot3d polarplot setoptions3d + syn keyword mvPkg_plots animate3d cylinderplot implicitplot loglogplot polygonplot spacecurve + syn keyword mvPkg_plots changecoords densityplot implicitplot3d logplot polygonplot3d sparsematrixplot + syn keyword mvPkg_plots complexplot display inequal matrixplot polyhedraplot sphereplot + syn keyword mvPkg_plots complexplot3d display3d listcontplot odeplot replot surfdata + syn keyword mvPkg_plots conformal fieldplot listcontplot3d pareto rootlocus textplot + syn keyword mvPkg_plots contourplot fieldplot3d listdensityplot pointplot semilogplot textplot3d + syn keyword mvPkg_plots contourplot3d gradplot listplot pointplot3d setoptions tubeplot + syn keyword mvPkg_plots coordplot +endif + +" Package: plottools: basic graphical objects {{{2 +if exists("mv_plottools") + syn keyword mvPkg_plottools arc curve dodecahedron hyperbola pieslice semitorus + syn keyword mvPkg_plottools arrow cutin ellipse icosahedron point sphere + syn keyword mvPkg_plottools circle cutout ellipticArc line polygon tetrahedron + syn keyword mvPkg_plottools cone cylinder hemisphere octahedron rectangle torus + syn keyword mvPkg_plottools cuboid disk hexahedron +endif + +" Package: powseries: formal power series {{{2 +if exists("mv_powseries") + syn keyword mvPkg_powseries compose multiply powcreate powlog powsolve reversion + syn keyword mvPkg_powseries evalpow negative powdiff powpoly powsqrt subtract + syn keyword mvPkg_powseries inverse powadd powexp powseries quotient tpsform + syn keyword mvPkg_powseries multconst powcos powint powsin +endif + +" Package: process: (Unix)-multi-processing {{{2 +if exists("mv_process") + syn keyword mvPkg_process block fork pclose pipe popen wait + syn keyword mvPkg_process exec kill +endif + +" Package: simplex: linear optimization {{{2 +if exists("mv_simplex") + syn keyword mvPkg_simplex NONNEGATIVE cterm dual maximize pivoteqn setup + syn keyword mvPkg_simplex basis define_zero equality minimize pivotvar standardize + syn keyword mvPkg_simplex convexhull display feasible pivot ratio +endif + +" Package: stats: statistics {{{2 +if exists("mv_stats") + syn keyword mvPkg_stats anova describe fit random statevalf statplots +endif + +" Package: student: student calculus {{{2 +if exists("mv_student") + syn keyword mvPkg_student D Product distance isolate middlesum rightsum + syn keyword mvPkg_student Diff Sum equate leftbox midpoint showtangent + syn keyword mvPkg_student Doubleint Tripleint extrema leftsum minimize simpson + syn keyword mvPkg_student Int changevar integrand makeproc minimize slope + syn keyword mvPkg_student Limit combine intercept maximize powsubs trapezoid + syn keyword mvPkg_student Lineint completesquare intparts middlebox rightbox value + syn keyword mvPkg_student Point +endif + +" Package: sumtools: indefinite and definite sums {{{2 +if exists("mv_sumtools") + syn keyword mvPkg_sumtools Hypersum extended_gosper hyperrecursion hyperterm sumrecursion sumtohyper + syn keyword mvPkg_sumtools Sumtohyper gosper hypersum simpcomb +endif + +" Package: tensor: tensor computations and General Relativity {{{2 +if exists("mv_tensor") + syn keyword mvPkg_tensor Christoffel1 Riemann connexF display_allGR get_compts partial_diff + syn keyword mvPkg_tensor Christoffel2 RiemannF contract dual get_rank permute_indices + syn keyword mvPkg_tensor Einstein Weyl convertNP entermetric invars petrov + syn keyword mvPkg_tensor Jacobian act cov_diff exterior_diff invert prod + syn keyword mvPkg_tensor Killing_eqns antisymmetrize create exterior_prod lin_com raise + syn keyword mvPkg_tensor Levi_Civita change_basis d1metric frame lower symmetrize + syn keyword mvPkg_tensor Lie_diff commutator d2metric geodesic_eqns npcurve tensorsGR + syn keyword mvPkg_tensor Ricci compare directional_diff get_char npspin transform + syn keyword mvPkg_tensor Ricciscalar conj displayGR +endif + +" Package: totorder: total orders on names {{{2 +if exists("mv_totorder") + syn keyword mvPkg_totorder forget init ordering tassume tis +endif +" ===================================================================== + +" Highlighting: Define the default highlighting. {{{1 +" Only when an item doesn't have highlighting yet +if !exists("skip_maplev_syntax_inits") + + " Maple->Maple Links {{{2 + hi def link mvBraceError mvError + hi def link mvCurlyError mvError + hi def link mvDebug mvTodo + hi def link mvParenError mvError + hi def link mvPkg_DEtools mvPkgFunc + hi def link mvPkg_Galois mvPkgFunc + hi def link mvPkg_GaussInt mvPkgFunc + hi def link mvPkg_LREtools mvPkgFunc + hi def link mvPkg_combinat mvPkgFunc + hi def link mvPkg_combstruct mvPkgFunc + hi def link mvPkg_difforms mvPkgFunc + hi def link mvPkg_finance mvPkgFunc + hi def link mvPkg_genfunc mvPkgFunc + hi def link mvPkg_geometry mvPkgFunc + hi def link mvPkg_grobner mvPkgFunc + hi def link mvPkg_group mvPkgFunc + hi def link mvPkg_inttrans mvPkgFunc + hi def link mvPkg_liesymm mvPkgFunc + hi def link mvPkg_linalg mvPkgFunc + hi def link mvPkg_logic mvPkgFunc + hi def link mvPkg_networks mvPkgFunc + hi def link mvPkg_numapprox mvPkgFunc + hi def link mvPkg_numtheory mvPkgFunc + hi def link mvPkg_orthopoly mvPkgFunc + hi def link mvPkg_padic mvPkgFunc + hi def link mvPkg_plots mvPkgFunc + hi def link mvPkg_plottools mvPkgFunc + hi def link mvPkg_powseries mvPkgFunc + hi def link mvPkg_process mvPkgFunc + hi def link mvPkg_simplex mvPkgFunc + hi def link mvPkg_stats mvPkgFunc + hi def link mvPkg_student mvPkgFunc + hi def link mvPkg_sumtools mvPkgFunc + hi def link mvPkg_tensor mvPkgFunc + hi def link mvPkg_totorder mvPkgFunc + hi def link mvRange mvOper + hi def link mvSemiError mvError + hi def link mvDelim Delimiter + + " Maple->Standard Links {{{2 + hi def link mvAssign Delimiter + hi def link mvBool Boolean + hi def link mvComma Delimiter + hi def link mvComment Comment + hi def link mvCond Conditional + hi def link mvConstant Number + hi def link mvDelayEval Label + hi def link mvDcolon Delimiter + hi def link mvError Error + hi def link mvLibrary Statement + hi def link mvNumber Number + hi def link mvOper Operator + hi def link mvAssign Delimiter + hi def link mvPackage Type + hi def link mvPkgFunc Function + hi def link mvPktOption Special + hi def link mvRepeat Repeat + hi def link mvSpecial Special + hi def link mvStatement Statement + hi def link mvName String + hi def link mvString String + hi def link mvTodo Todo + +endif + +" Current Syntax: {{{1 +let b:current_syntax = "maple" +" vim: ts=20 fdm=marker diff --git a/.config/vim/syntax/markdown.vim b/.config/vim/syntax/markdown.vim new file mode 100644 index 0000000..44187ff --- /dev/null +++ b/.config/vim/syntax/markdown.vim @@ -0,0 +1,200 @@ +" Vim syntax file +" Language: Markdown +" Maintainer: Tim Pope +" Filenames: *.markdown +" Last Change: 2022 Oct 13 + +if exists("b:current_syntax") + finish +endif + +if !exists('main_syntax') + let main_syntax = 'markdown' +endif + +if has('folding') + let s:foldmethod = &l:foldmethod + let s:foldtext = &l:foldtext +endif +let s:iskeyword = &l:iskeyword + +runtime! syntax/html.vim +unlet! b:current_syntax + +if !exists('g:markdown_fenced_languages') + let g:markdown_fenced_languages = [] +endif +let s:done_include = {} +for s:type in map(copy(g:markdown_fenced_languages),'matchstr(v:val,"[^=]*$")') + if has_key(s:done_include, matchstr(s:type,'[^.]*')) + continue + endif + if s:type =~ '\.' + let b:{matchstr(s:type,'[^.]*')}_subtype = matchstr(s:type,'\.\zs.*') + endif + syn case match + exe 'syn include @markdownHighlight_'.tr(s:type,'.','_').' syntax/'.matchstr(s:type,'[^.]*').'.vim' + unlet! b:current_syntax + let s:done_include[matchstr(s:type,'[^.]*')] = 1 +endfor +unlet! s:type +unlet! s:done_include + +syn spell toplevel +if exists('s:foldmethod') && s:foldmethod !=# &l:foldmethod + let &l:foldmethod = s:foldmethod + unlet s:foldmethod +endif +if exists('s:foldtext') && s:foldtext !=# &l:foldtext + let &l:foldtext = s:foldtext + unlet s:foldtext +endif +if s:iskeyword !=# &l:iskeyword + let &l:iskeyword = s:iskeyword +endif +unlet s:iskeyword + +if !exists('g:markdown_minlines') + let g:markdown_minlines = 50 +endif +execute 'syn sync minlines=' . g:markdown_minlines +syn sync linebreaks=1 +syn case ignore + +syn match markdownValid '[<>]\c[a-z/$!]\@!' transparent contains=NONE +syn match markdownValid '&\%(#\=\w*;\)\@!' transparent contains=NONE + +syn match markdownLineStart "^[<@]\@!" nextgroup=@markdownBlock,htmlSpecialChar + +syn cluster markdownBlock contains=markdownH1,markdownH2,markdownH3,markdownH4,markdownH5,markdownH6,markdownBlockquote,markdownListMarker,markdownOrderedListMarker,markdownCodeBlock,markdownRule +syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop,markdownError,markdownValid + +syn match markdownH1 "^.\+\n=\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink +syn match markdownH2 "^.\+\n-\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink + +syn match markdownHeadingRule "^[=-]\+$" contained + +syn region markdownH1 matchgroup=markdownH1Delimiter start=" \{,3}#\s" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained +syn region markdownH2 matchgroup=markdownH2Delimiter start=" \{,3}##\s" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained +syn region markdownH3 matchgroup=markdownH3Delimiter start=" \{,3}###\s" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained +syn region markdownH4 matchgroup=markdownH4Delimiter start=" \{,3}####\s" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained +syn region markdownH5 matchgroup=markdownH5Delimiter start=" \{,3}#####\s" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained +syn region markdownH6 matchgroup=markdownH6Delimiter start=" \{,3}######\s" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained + +syn match markdownBlockquote ">\%(\s\|$\)" contained nextgroup=@markdownBlock + +syn region markdownCodeBlock start="^\n\( \{4,}\|\t\)" end="^\ze \{,3}\S.*$" keepend + +" TODO: real nesting +syn match markdownListMarker "\%(\t\| \{0,4\}\)[-*+]\%(\s\+\S\)\@=" contained +syn match markdownOrderedListMarker "\%(\t\| \{0,4}\)\<\d\+\.\%(\s\+\S\)\@=" contained + +syn match markdownRule "\* *\* *\*[ *]*$" contained +syn match markdownRule "- *- *-[ -]*$" contained + +syn match markdownLineBreak " \{2,\}$" + +syn region markdownIdDeclaration matchgroup=markdownLinkDelimiter start="^ \{0,3\}!\=\[" end="\]:" oneline keepend nextgroup=markdownUrl skipwhite +syn match markdownUrl "\S\+" nextgroup=markdownUrlTitle skipwhite contained +syn region markdownUrl matchgroup=markdownUrlDelimiter start="<" end=">" oneline keepend nextgroup=markdownUrlTitle skipwhite contained +syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+"+ end=+"+ keepend contained +syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+'+ end=+'+ keepend contained +syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+(+ end=+)+ keepend contained + +syn region markdownLinkText matchgroup=markdownLinkTextDelimiter start="!\=\[\%(\_[^][]*\%(\[\_[^][]*\]\_[^][]*\)*]\%( \=[[(]\)\)\@=" end="\]\%( \=[[(]\)\@=" nextgroup=markdownLink,markdownId skipwhite contains=@markdownInline,markdownLineStart +syn region markdownLink matchgroup=markdownLinkDelimiter start="(" end=")" contains=markdownUrl keepend contained +syn region markdownId matchgroup=markdownIdDelimiter start="\[" end="\]" keepend contained +syn region markdownAutomaticLink matchgroup=markdownUrlDelimiter start="<\%(\w\+:\|[[:alnum:]_+-]\+@\)\@=" end=">" keepend oneline + +let s:concealends = '' +if has('conceal') && get(g:, 'markdown_syntax_conceal', 1) == 1 + let s:concealends = ' concealends' +endif +exe 'syn region markdownItalic matchgroup=markdownItalicDelimiter start="\*\S\@=" end="\S\@<=\*\|^$" skip="\\\*" contains=markdownLineStart,@Spell' . s:concealends +exe 'syn region markdownItalic matchgroup=markdownItalicDelimiter start="\w\@#+.!-]" +syn match markdownError "\w\@<=_\w\@=" + +hi def link markdownH1 htmlH1 +hi def link markdownH2 htmlH2 +hi def link markdownH3 htmlH3 +hi def link markdownH4 htmlH4 +hi def link markdownH5 htmlH5 +hi def link markdownH6 htmlH6 +hi def link markdownHeadingRule markdownRule +hi def link markdownH1Delimiter markdownHeadingDelimiter +hi def link markdownH2Delimiter markdownHeadingDelimiter +hi def link markdownH3Delimiter markdownHeadingDelimiter +hi def link markdownH4Delimiter markdownHeadingDelimiter +hi def link markdownH5Delimiter markdownHeadingDelimiter +hi def link markdownH6Delimiter markdownHeadingDelimiter +hi def link markdownHeadingDelimiter Delimiter +hi def link markdownOrderedListMarker markdownListMarker +hi def link markdownListMarker htmlTagName +hi def link markdownBlockquote Comment +hi def link markdownRule PreProc + +hi def link markdownFootnote Typedef +hi def link markdownFootnoteDefinition Typedef + +hi def link markdownLinkText htmlLink +hi def link markdownIdDeclaration Typedef +hi def link markdownId Type +hi def link markdownAutomaticLink markdownUrl +hi def link markdownUrl Float +hi def link markdownUrlTitle String +hi def link markdownIdDelimiter markdownLinkDelimiter +hi def link markdownUrlDelimiter htmlTag +hi def link markdownUrlTitleDelimiter Delimiter + +hi def link markdownItalic htmlItalic +hi def link markdownItalicDelimiter markdownItalic +hi def link markdownBold htmlBold +hi def link markdownBoldDelimiter markdownBold +hi def link markdownBoldItalic htmlBoldItalic +hi def link markdownBoldItalicDelimiter markdownBoldItalic +hi def link markdownStrike htmlStrike +hi def link markdownStrikeDelimiter markdownStrike +hi def link markdownCodeDelimiter Delimiter + +hi def link markdownEscape Special +hi def link markdownError Error + +let b:current_syntax = "markdown" +if main_syntax ==# 'markdown' + unlet main_syntax +endif + +" vim:set sw=2: diff --git a/.config/vim/syntax/masm.vim b/.config/vim/syntax/masm.vim new file mode 100644 index 0000000..dc9a292 --- /dev/null +++ b/.config/vim/syntax/masm.vim @@ -0,0 +1,560 @@ +" Vim syntax file +" Language: Microsoft Macro Assembler (80x86) +" Orig Author: Rob Brady +" Maintainer: Wu Yongwei +" Last Change: 2023-12-20 10:20:04 +0800 + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn iskeyword @,48-57,_,36,60,62,63,@-@ + +syn case ignore + + +syn match masmIdentifier "[@a-z_$?][@a-z0-9_$?<>]*" +syn match masmLabel "^\s*[@a-z_$?][@a-z0-9_$?]*:"he=e-1 + +syn match masmDecimal "[-+]\?\d\+[dt]\?" +syn match masmBinary "[-+]\?[0-1]\+[by]" "put this before hex or 0bfh dies! +syn match masmOctal "[-+]\?[0-7]\+[oq]" +syn match masmHexadecimal "[-+]\?[0-9]\x*h" +syn match masmFloatRaw "[-+]\?[0-9]\x*r" +syn match masmFloat "[-+]\?\d\+\.\(\d*\(E[-+]\?\d\+\)\?\)\?" + +syn match masmComment ";.*" contains=@Spell +syn region masmComment start=+COMMENT\s*\z(\S\)+ end=+\z1.*+ contains=@Spell +syn region masmString start=+'+ end=+'+ oneline contains=@Spell +syn region masmString start=+"+ end=+"+ oneline contains=@Spell + +syn region masmTitleArea start=+\" +syn match masmOperator "CARRY?" +syn match masmOperator "OVERFLOW?" +syn match masmOperator "PARITY?" +syn match masmOperator "SIGN?" +syn match masmOperator "ZERO?" +syn keyword masmDirective ALIAS ASSUME CATSTR COMM DB DD DF DOSSEG DQ DT +syn keyword masmDirective DW ECHO ELSE ELSEIF ELSEIF1 ELSEIF2 ELSEIFB +syn keyword masmDirective ELSEIFDEF ELSEIFDIF ELSEIFDIFI ELSEIFE +syn keyword masmDirective ELSEIFIDN ELSEIFIDNI ELSEIFNB ELSEIFNDEF END +syn keyword masmDirective ENDIF ENDM ENDP ENDS EQU EVEN EXITM EXTERN +syn keyword masmDirective EXTERNDEF EXTRN FOR FORC GOTO GROUP IF IF1 IF2 +syn keyword masmDirective IFB IFDEF IFDIF IFDIFI IFE IFIDN IFIDNI IFNB +syn keyword masmDirective IFNDEF INCLUDE INCLUDELIB INSTR INVOKE IRP +syn keyword masmDirective IRPC LABEL LOCAL MACRO NAME OPTION ORG PAGE +syn keyword masmDirective POPCONTEXT PROC PROTO PUBLIC PURGE PUSHCONTEXT +syn keyword masmDirective RECORD REPEAT REPT SEGMENT SIZESTR STRUC +syn keyword masmDirective STRUCT SUBSTR SUBTITLE SUBTTL TEXTEQU TITLE +syn keyword masmDirective TYPEDEF UNION WHILE +syn match masmDirective "\.8086\>" +syn match masmDirective "\.8087\>" +syn match masmDirective "\.NO87\>" +syn match masmDirective "\.186\>" +syn match masmDirective "\.286\>" +syn match masmDirective "\.286C\>" +syn match masmDirective "\.286P\>" +syn match masmDirective "\.287\>" +syn match masmDirective "\.386\>" +syn match masmDirective "\.386C\>" +syn match masmDirective "\.386P\>" +syn match masmDirective "\.387\>" +syn match masmDirective "\.486\>" +syn match masmDirective "\.486P\>" +syn match masmDirective "\.586\>" +syn match masmDirective "\.586P\>" +syn match masmDirective "\.686\>" +syn match masmDirective "\.686P\>" +syn match masmDirective "\.K3D\>" +syn match masmDirective "\.MMX\>" +syn match masmDirective "\.XMM\>" +syn match masmDirective "\.ALPHA\>" +syn match masmDirective "\.DOSSEG\>" +syn match masmDirective "\.SEQ\>" +syn match masmDirective "\.CODE\>" +syn match masmDirective "\.CONST\>" +syn match masmDirective "\.DATA\>" +syn match masmDirective "\.DATA?" +syn match masmDirective "\.EXIT\>" +syn match masmDirective "\.FARDATA\>" +syn match masmDirective "\.FARDATA?" +syn match masmDirective "\.MODEL\>" +syn match masmDirective "\.STACK\>" +syn match masmDirective "\.STARTUP\>" +syn match masmDirective "\.IF\>" +syn match masmDirective "\.ELSE\>" +syn match masmDirective "\.ELSEIF\>" +syn match masmDirective "\.ENDIF\>" +syn match masmDirective "\.REPEAT\>" +syn match masmDirective "\.UNTIL\>" +syn match masmDirective "\.UNTILCXZ\>" +syn match masmDirective "\.WHILE\>" +syn match masmDirective "\.ENDW\>" +syn match masmDirective "\.BREAK\>" +syn match masmDirective "\.CONTINUE\>" +syn match masmDirective "\.ERR\>" +syn match masmDirective "\.ERR1\>" +syn match masmDirective "\.ERR2\>" +syn match masmDirective "\.ERRB\>" +syn match masmDirective "\.ERRDEF\>" +syn match masmDirective "\.ERRDIF\>" +syn match masmDirective "\.ERRDIFI\>" +syn match masmDirective "\.ERRE\>" +syn match masmDirective "\.ERRIDN\>" +syn match masmDirective "\.ERRIDNI\>" +syn match masmDirective "\.ERRNB\>" +syn match masmDirective "\.ERRNDEF\>" +syn match masmDirective "\.ERRNZ\>" +syn match masmDirective "\.LALL\>" +syn match masmDirective "\.SALL\>" +syn match masmDirective "\.XALL\>" +syn match masmDirective "\.LFCOND\>" +syn match masmDirective "\.SFCOND\>" +syn match masmDirective "\.TFCOND\>" +syn match masmDirective "\.CREF\>" +syn match masmDirective "\.NOCREF\>" +syn match masmDirective "\.XCREF\>" +syn match masmDirective "\.LIST\>" +syn match masmDirective "\.NOLIST\>" +syn match masmDirective "\.XLIST\>" +syn match masmDirective "\.LISTALL\>" +syn match masmDirective "\.LISTIF\>" +syn match masmDirective "\.NOLISTIF\>" +syn match masmDirective "\.LISTMACRO\>" +syn match masmDirective "\.NOLISTMACRO\>" +syn match masmDirective "\.LISTMACROALL\>" +syn match masmDirective "\.FPO\>" +syn match masmDirective "\.RADIX\>" +syn match masmDirective "\.SAFESEH\>" +syn match masmDirective "%OUT\>" +syn match masmDirective "ALIGN\>" +syn match masmOption "ALIGN([0-9]\+)" + +syn keyword masmRegister AX BX CX DX SI DI BP SP +syn keyword masmRegister CS DS SS ES FS GS +syn keyword masmRegister AH BH CH DH AL BL CL DL +syn keyword masmRegister EAX EBX ECX EDX ESI EDI EBP ESP +syn keyword masmRegister CR0 CR2 CR3 CR4 +syn keyword masmRegister DR0 DR1 DR2 DR3 DR6 DR7 +syn keyword masmRegister TR3 TR4 TR5 TR6 TR7 +syn match masmRegister "ST([0-7])" + +" x86-64 registers +syn keyword masmRegister RAX RBX RCX RDX RSI RDI RBP RSP +syn keyword masmRegister R8 R9 R10 R11 R12 R13 R14 R15 +syn keyword masmRegister R8D R9D R10D R11D R12D R13D R14D R15D +syn keyword masmRegister R8W R9W R10W R11W R12W R13W R14W R15W +syn keyword masmRegister R8B R9B R10B R11B R12B R13B R14B R15B + +" SSE/AVX registers +syn match masmRegister "\(X\|Y\|Z\)MM[12]\?[0-9]\>" +syn match masmRegister "\(X\|Y\|Z\)MM3[01]\>" + +" Instruction prefixes +syn keyword masmOpcode LOCK REP REPE REPNE REPNZ REPZ + +" 8086/8088 opcodes +syn keyword masmOpcode AAA AAD AAM AAS ADC ADD AND CALL CBW CLC CLD +syn keyword masmOpcode CLI CMC CMP CMPS CMPSB CMPSW CWD DAA DAS DEC +syn keyword masmOpcode DIV ESC HLT IDIV IMUL IN INC INT INTO IRET +syn keyword masmOpcode JCXZ JMP LAHF LDS LEA LES LODS LODSB LODSW +syn keyword masmOpcode LOOP LOOPE LOOPEW LOOPNE LOOPNEW LOOPNZ +syn keyword masmOpcode LOOPNZW LOOPW LOOPZ LOOPZW MOV MOVS MOVSB +syn keyword masmOpcode MOVSW MUL NEG NOP NOT OR OUT POP POPF PUSH +syn keyword masmOpcode PUSHF RCL RCR RET RETF RETN ROL ROR SAHF SAL +syn keyword masmOpcode SAR SBB SCAS SCASB SCASW SHL SHR STC STD STI +syn keyword masmOpcode STOS STOSB STOSW SUB TEST WAIT XCHG XLAT XLATB +syn keyword masmOpcode XOR +syn match masmOpcode "J\(P[EO]\|\(N\?\([ABGL]E\?\|[CEOPSZ]\)\)\)\>" + +" 80186 opcodes +syn keyword masmOpcode BOUND ENTER INS INSB INSW LEAVE OUTS OUTSB +syn keyword masmOpcode OUTSW POPA PUSHA PUSHW + +" 80286 opcodes +syn keyword masmOpcode ARPL LAR LSL SGDT SIDT SLDT SMSW STR VERR VERW + +" 80286/80386 privileged opcodes +syn keyword masmOpcode CLTS LGDT LIDT LLDT LMSW LTR + +" 80386 opcodes +syn keyword masmOpcode BSF BSR BT BTC BTR BTS CDQ CMPSD CWDE INSD +syn keyword masmOpcode IRETD IRETDF IRETF JECXZ LFS LGS LODSD LOOPD +syn keyword masmOpcode LOOPED LOOPNED LOOPNZD LOOPZD LSS MOVSD MOVSX +syn keyword masmOpcode MOVZX OUTSD POPAD POPFD PUSHAD PUSHD PUSHFD +syn keyword masmOpcode SCASD SHLD SHRD STOSD +syn match masmOpcode "SET\(P[EO]\|\(N\?\([ABGL]E\?\|[CEOPSZ]\)\)\)\>" + +" 80486 opcodes +syn keyword masmOpcode BSWAP CMPXCHG INVD INVLPG WBINVD XADD + +" Floating-point opcodes as of 487 +syn keyword masmOpFloat F2XM1 FABS FADD FADDP FBLD FBSTP FCHS FCLEX +syn keyword masmOpFloat FNCLEX FCOM FCOMP FCOMPP FCOS FDECSTP FDISI +syn keyword masmOpFloat FNDISI FDIV FDIVP FDIVR FDIVRP FENI FNENI +syn keyword masmOpFloat FFREE FIADD FICOM FICOMP FIDIV FIDIVR FILD +syn keyword masmOpFloat FIMUL FINCSTP FINIT FNINIT FIST FISTP FISUB +syn keyword masmOpFloat FISUBR FLD FLDCW FLDENV FLDLG2 FLDLN2 FLDL2E +syn keyword masmOpFloat FLDL2T FLDPI FLDZ FLD1 FMUL FMULP FNOP FPATAN +syn keyword masmOpFloat FPREM FPREM1 FPTAN FRNDINT FRSTOR FSAVE FNSAVE +syn keyword masmOpFloat FSCALE FSETPM FSIN FSINCOS FSQRT FST FSTCW +syn keyword masmOpFloat FNSTCW FSTENV FNSTENV FSTP FSTSW FNSTSW FSUB +syn keyword masmOpFloat FSUBP FSUBR FSUBRP FTST FUCOM FUCOMP FUCOMPP +syn keyword masmOpFloat FWAIT FXAM FXCH FXTRACT FYL2X FYL2XP1 + +" Floating-point opcodes in Pentium and later processors +syn keyword masmOpFloat FCMOVE FCMOVNE FCMOVB FCMOVBE FCMOVNB FCMOVNBE +syn keyword masmOpFloat FCMOVU FCMOVNU FCOMI FUCOMI FCOMIP FUCOMIP +syn keyword masmOpFloat FXSAVE FXRSTOR + +" MMX opcodes (Pentium w/ MMX, Pentium II, and later) +syn keyword masmOpcode MOVD MOVQ PACKSSWB PACKSSDW PACKUSWB +syn keyword masmOpcode PUNPCKHBW PUNPCKHWD PUNPCKHDQ +syn keyword masmOpcode PUNPCKLBW PUNPCKLWD PUNPCKLDQ +syn keyword masmOpcode PADDB PADDW PADDD PADDSB PADDSW PADDUSB PADDUSW +syn keyword masmOpcode PSUBB PSUBW PSUBD PSUBSB PSUBSW PSUBUSB PSUBUSW +syn keyword masmOpcode PMULHW PMULLW PMADDWD +syn keyword masmOpcode PCMPEQB PCMPEQW PCMPEQD PCMPGTB PCMPGTW PCMPGTD +syn keyword masmOpcode PAND PANDN POR PXOR +syn keyword masmOpcode PSLLW PSLLD PSLLQ PSRLW PSRLD PSRLQ PSRAW PSRAD +syn keyword masmOpcode EMMS + +" SSE opcodes (Pentium III and later) +syn keyword masmOpcode MOVAPS MOVUPS MOVHPS MOVHLPS MOVLPS MOVLHPS +syn keyword masmOpcode MOVMSKPS MOVSS +syn keyword masmOpcode ADDPS ADDSS SUBPS SUBSS MULPS MULSS DIVPS DIVSS +syn keyword masmOpcode RCPPS RCPSS SQRTPS SQRTSS RSQRTPS RSQRTSS +syn keyword masmOpcode MAXPS MAXSS MINPS MINSS +syn keyword masmOpcode CMPPS CMPSS COMISS UCOMISS +syn keyword masmOpcode ANDPS ANDNPS ORPS XORPS +syn keyword masmOpcode SHUFPS UNPCKHPS UNPCKLPS +syn keyword masmOpcode CVTPI2PS CVTSI2SS CVTPS2PI CVTTPS2PI +syn keyword masmOpcode CVTSS2SI CVTTSS2SI +syn keyword masmOpcode LDMXCSR STMXCSR +syn keyword masmOpcode PAVGB PAVGW PEXTRW PINSRW PMAXUB PMAXSW +syn keyword masmOpcode PMINUB PMINSW PMOVMSKB PMULHUW PSADBW PSHUFW +syn keyword masmOpcode MASKMOVQ MOVNTQ MOVNTPS SFENCE +syn keyword masmOpcode PREFETCHT0 PREFETCHT1 PREFETCHT2 PREFETCHNTA + +" SSE2 opcodes (Pentium 4 and later) +syn keyword masmOpcode MOVAPD MOVUPD MOVHPD MOVLPD MOVMSKPD MOVSD +syn keyword masmOpcode ADDPD ADDSD SUBPD SUBSD MULPD MULSD DIVPD DIVSD +syn keyword masmOpcode SQRTPD SQRTSD MAXPD MAXSD MINPD MINSD +syn keyword masmOpcode ANDPD ANDNPD ORPD XORPD +syn keyword masmOpcode CMPPD CMPSD COMISD UCOMISD +syn keyword masmOpcode SHUFPD UNPCKHPD UNPCKLPD +syn keyword masmOpcode CVTPD2PI CVTTPD2PI CVTPI2PD CVTPD2DQ +syn keyword masmOpcode CVTTPD2DQ CVTDQ2PD CVTPS2PD CVTPD2PS +syn keyword masmOpcode CVTSS2SD CVTSD2SS CVTSD2SI CVTTSD2SI CVTSI2SD +syn keyword masmOpcode CVTDQ2PS CVTPS2DQ CVTTPS2DQ +syn keyword masmOpcode MOVDQA MOVDQU MOVQ2DQ MOVDQ2Q PMULUDQ +syn keyword masmOpcode PADDQ PSUBQ PSHUFLW PSHUFHW PSHUFD +syn keyword masmOpcode PSLLDQ PSRLDQ PUNPCKHQDQ PUNPCKLQDQ +syn keyword masmOpcode CLFLUSH LFENCE MFENCE PAUSE MASKMOVDQU +syn keyword masmOpcode MOVNTPD MOVNTDQ MOVNTI + +" SSE3 opcodes (Pentium 4 w/ Hyper-Threading and later) +syn keyword masmOpcode FISTTP LDDQU ADDSUBPS ADDSUBPD +syn keyword masmOpcode HADDPS HSUBPS HADDPD HSUBPD +syn keyword masmOpcode MOVSHDUP MOVSLDUP MOVDDUP MONITOR MWAIT + +" SSSE3 opcodes (Core and later) +syn keyword masmOpcode PSIGNB PSIGNW PSIGND PABSB PABSW PABSD +syn keyword masmOpcode PALIGNR PSHUFB PMULHRSW PMADDUBSW +syn keyword masmOpcode PHSUBW PHSUBD PHSUBSW PHADDW PHADDD PHADDSW + +" SSE 4.1 opcodes (Penryn and later) +syn keyword masmOpcode MPSADBW PHMINPOSUW PMULDQ PMULLD DPPS DPPD +syn keyword masmOpcode BLENDPS BLENDPD BLENDVPS BLENDVPD +syn keyword masmOpcode PBLENDVB PBLENDW +syn keyword masmOpcode PMINSB PMAXSB PMINSD PMAXSD +syn keyword masmOpcode PMINUW PMAXUW PMINUD PMAXUD +syn keyword masmOpcode ROUNDPS ROUNDSS ROUNDPD ROUNDSD +syn keyword masmOpcode INSERTPS PINSRB PINSRD PINSRQ +syn keyword masmOpcode EXTRACTPS PEXTRB PEXTRD PEXTRQ +syn keyword masmOpcode PMOVSXBW PMOVZXBW PMOVSXBD PMOVZXBD +syn keyword masmOpcode PMOVSXBQ PMOVZXBQ PMOVSXWD PMOVZXWD +syn keyword masmOpcode PMOVSXWQ PMOVZXWQ PMOVSXDQ PMOVZXDQ +syn keyword masmOpcode PTEST PCMPEQQ PACKUSDW MOVNTDQA + +" SSE 4.2 opcodes (Nehalem and later) +syn keyword masmOpcode PCMPESTRI PCMPESTRM PCMPISTRI PCMPISTRM PCMPGTQ +syn keyword masmOpcode CRC32 POPCNT LZCNT + +" AES-NI (Westmere (2010) and later) +syn keyword masmOpcode AESENC AESENCLAST AESDEC AESDECLAST +syn keyword masmOpcode AESKEYGENASSIST AESIMC PCLMULQDQ + +" AVX (Sandy Bridge (2011) and later) +syn keyword masmOpcode VBROADCASTSS VBROADCASTSD VBROADCASTF128 +syn keyword masmOpcode VINSERTF128 VEXTRACTF128 VMASKMOVPS VMASKMOVPD +syn keyword masmOpcode VPERMILPS VPERMILPD VPERM2F128 +syn keyword masmOpcode VZEROALL VZEROUPPER + +" AVX-2 (Haswell and later) +syn keyword masmOpcode VPBROADCASTB VPBROADCASTW VPBROADCASTD +syn keyword masmOpcode VPBROADCASTQ VBROADCASTI128 +syn keyword masmOpcode VINSERTI128 VEXTRACTI128 +syn keyword masmOpcode VGATHERDPD VGATHERQPD VGATHERDPS VGATHERQPS +syn keyword masmOpcode VPGATHERDD VPGATHERDQ VPGATHERQD VPGATHERQQ +syn keyword masmOpcode VPMASKMOVD VPMASKMOVQ +syn keyword masmOpcode PERMPS VPERMD VPERMPD VPERMQ VPERM2I128 +syn keyword masmOpcode VPBLENDD VPSLLVD VPSLLVQ VPSRLVD VPSRLVQ +syn keyword masmOpcode VPSRAVD + +" AVX-512 (Knights Landing/Skylake-X and later) +syn keyword masmOpcode KAND KANDN KMOV KUNPCK KNOT KOR KORTEST +syn keyword masmOpcode KSHIFTL KSHIFTR KXNOR KXOR KADD KTEST +syn keyword masmOpcode VBLENDMPD VBLENDMPS +syn keyword masmOpcode VPBLENDMD VPBLENDMQ VPBLENDMB VPBLENDMW +syn keyword masmOpcode VPCMPD VPCMPUD VPCMPQ VPCMPUQ +syn keyword masmOpcode VPCMPB VPCMPUB VPCMPW VPCMPUW +syn keyword masmOpcode VPTESTMD VPTESTMQ VPTESTNMD VPTESTNMQ +syn keyword masmOpcode VPTESTMB VPTESTMW VPTESTNMB VPTESTNMW +syn keyword masmOpcode VCOMPRESSPD VCOMPRESSPS VPCOMPRESSD VPCOMPRESSQ +syn keyword masmOpcode VEXPANDPD VEXPANDPS VPEXPANDD VPEXPANDQ +syn keyword masmOpcode VPERMB VPERMW VPERMT2B VPERMT2W VPERMI2PD +syn keyword masmOpcode VPERMI2PS VPERMI2D VPERMI2Q VPERMI2B VPERMI2W +syn keyword masmOpcode VPERMT2PS VPERMT2PD VPERMT2D VPERMT2Q +syn keyword masmOpcode VSHUFF32x4 VSHUFF64x2 VSHUFI32x4 VSHUFI64x2 +syn keyword masmOpcode VPMULTISHIFTQB VPTERNLOGD VPTERNLOGQ +syn keyword masmOpcode VPMOVQD VPMOVSQD VPMOVUSQD VPMOVQW VPMOVSQW +syn keyword masmOpcode VPMOVUSQW VPMOVQB VPMOVSQB VPMOVUSQB VPMOVDW +syn keyword masmOpcode VPMOVSDW VPMOVUSDW VPMOVDB VPMOVSDB VPMOVUSDB +syn keyword masmOpcode VPMOVWB VPMOVSWB VPMOVUSWB +syn keyword masmOpcode VCVTPS2UDQ VCVTPD2UDQ VCVTTPS2UDQ VCVTTPD2UDQ +syn keyword masmOpcode VCVTSS2USI VCVTSD2USI VCVTTSS2USI VCVTTSD2USI +syn keyword masmOpcode VCVTPS2QQ VCVTPD2QQ VCVTPS2UQQ VCVTPD2UQQ +syn keyword masmOpcode VCVTTPS2QQ VCVTTPD2QQ VCVTTPS2UQQ VCVTTPD2UQQ +syn keyword masmOpcode VCVTUDQ2PS VCVTUDQ2PD VCVTUSI2PS VCVTUSI2PD +syn keyword masmOpcode VCVTUSI2SD VCVTUSI2SS VCVTUQQ2PS VCVTUQQ2PD +syn keyword masmOpcode VCVTQQ2PD VCVTQQ2PS VGETEXPPD +syn keyword masmOpcode VGETEXPPS VGETEXPSD VGETEXPSS +syn keyword masmOpcode VGETMANTPD VGETMANTPS VGETMANTSD VGETMANTSS +syn keyword masmOpcode VFIXUPIMMPD VFIXUPIMMPS VFIXUPIMMSD VFIXUPIMMSS +syn keyword masmOpcode VRCP14PD VRCP14PS VRCP14SD VRCP14SS +syn keyword masmOpcode VRNDSCALEPS VRNDSCALEPD VRNDSCALESS VRNDSCALESD +syn keyword masmOpcode VRSQRT14PD VRSQRT14PS VRSQRT14SD VRSQRT14SS +syn keyword masmOpcode VSCALEFPS VSCALEFPD VSCALEFSS VSCALEFSD +syn keyword masmOpcode VBROADCASTI32X2 VBROADCASTI32X4 VBROADCASTI32X8 +syn keyword masmOpcode VBROADCASTI64X2 VBROADCASTI64X4 +syn keyword masmOpcode VALIGND VALIGNQ VDBPSADBW VPABSQ VPMAXSQ +syn keyword masmOpcode VPMAXUQ VPMINSQ VPMINUQ VPROLD VPROLVD VPROLQ +syn keyword masmOpcode VPROLVQ VPRORD VPRORVD VPRORQ VPRORVQ +syn keyword masmOpcode VPSCATTERDD VPSCATTERDQ VPSCATTERQD VPSCATTERQQ +syn keyword masmOpcode VSCATTERDPS VSCATTERDPD VSCATTERQPS VSCATTERQPD +syn keyword masmOpcode VPCONFLICTD VPCONFLICTQ VPLZCNTD VPLZCNTQ +syn keyword masmOpcode VPBROADCASTMB2Q VPBROADCASTMW2D +syn keyword masmOpcode VEXP2PD VEXP2PS +syn keyword masmOpcode VRCP28PD VRCP28PS VRCP28SD VRCP28SS +syn keyword masmOpcode VRSQRT28PD VRSQRT28PS VRSQRT28SD VRSQRT28SS +syn keyword masmOpcode VGATHERPF0DPS VGATHERPF0QPS VGATHERPF0DPD +syn keyword masmOpcode VGATHERPF0QPD VGATHERPF1DPS VGATHERPF1QPS +syn keyword masmOpcode VGATHERPF1DPD VGATHERPF1QPD VSCATTERPF0DPS +syn keyword masmOpcode VSCATTERPF0QPS VSCATTERPF0DPD VSCATTERPF0QPD +syn keyword masmOpcode VSCATTERPF1DPS VSCATTERPF1QPS VSCATTERPF1DPD +syn keyword masmOpcode VSCATTERPF1QPD +syn keyword masmOpcode V4FMADDPS V4FMADDSS V4FNMADDPS V4FNMADDSS +syn keyword masmOpcode VP4DPWSSD VP4DPWSSDS +syn keyword masmOpcode VFPCLASSPS VFPCLASSPD VFPCLASSSS VFPCLASSSD +syn keyword masmOpcode VRANGEPS VRANGEPD VRANGESS VRANGESD +syn keyword masmOpcode VREDUCEPS VREDUCEPD VREDUCESS VREDUCESD +syn keyword masmOpcode VPMOVM2D VPMOVM2Q VPMOVM2B VPMOVM2W VPMOVD2M +syn keyword masmOpcode VPMOVQ2M VPMOVB2M VPMOVW2M VPMULLQ +syn keyword masmOpcode VPCOMPRESSB VPCOMPRESSW VPEXPANDB VPEXPANDW +syn keyword masmOpcode VPSHLD VPSHLDV VPSHRD VPSHRDV +syn keyword masmOpcode VPDPBUSD VPDPBUSDS VPDPWSSD VPDPWSSDS +syn keyword masmOpcode VPMADD52LUQ VPMADD52HUQ +syn keyword masmOpcode VPOPCNTD VPOPCNTQ VPOPCNTB VPOPCNTW +syn keyword masmOpcode VPSHUFBITQMB VP2INTERSECTD VP2INTERSECTQ +syn keyword masmOpcode VGF2P8AFFINEINVQB VGF2P8AFFINEQB +syn keyword masmOpcode VGF2P8MULB VPCLMULQDQ +syn keyword masmOpcode VAESDEC VAESDECLAST VAESENC VAESENCLAST +syn keyword masmOpcode VCVTNE2PS2BF16 VCVTNEPS2BF16 VDPBF16PS +syn keyword masmOpcode VADDPH VADDSH VSUBPH VSUBSH VMULPH VMULSH +syn keyword masmOpcode VDIVPH VDIVSH VSQRTPH VSQRTSH +syn keyword masmOpcode VFMADD132PH VFMADD213PH VFMADD231PH +syn keyword masmOpcode VFMADD132SH VFMADD213SH VFMADD231SH +syn keyword masmOpcode VFNMADD132PH VFNMADD213PH VFNMADD231PH +syn keyword masmOpcode VFNMADD132SH VFNMADD213SH VFNMADD231SH +syn keyword masmOpcode VFMSUB132PH VFMSUB213PH VFMSUB231PH +syn keyword masmOpcode VFMSUB132SH VFMSUB213SH VFMSUB231SH +syn keyword masmOpcode VFNMSUB132PH VFNMSUB213PH VFNMSUB231PH +syn keyword masmOpcode VFNMSUB132SH VFNMSUB213SH VFNMSUB231SH +syn keyword masmOpcode VFMADDSUB132PH VFMADDSUB213PH VFMADDSUB231PH +syn keyword masmOpcode VFMSUBADD132PH VFMSUBADD213PH VFMSUBADD231PH +syn keyword masmOpcode VREDUCEPH VREDUCESH VRNDSCALEPH VRNDSCALESH +syn keyword masmOpcode VSCALEFPH VSCALEFSH VFMULCPH VFMULCSH VFCMULCPH +syn keyword masmOpcode VFCMULCSH VFMADDCPH VFMADDCSH VFCMADDCPH +syn keyword masmOpcode VFCMADDCSH VRCPPH VRCPSH VRSQRTPH VRSQRTSH +syn keyword masmOpcode VCMPPH VCMPSH VCOMISH VUCOMISH VMAXPH VMAXSH +syn keyword masmOpcode VMINPH VMINSH VFPCLASSPH VFPCLASSSH +syn keyword masmOpcode VCVTW2PH VCVTUW2PH VCVTDQ2PH VCVTUDQ2PH +syn keyword masmOpcode VCVTQQ2PH VCVTUQQ2PH VCVTPS2PHX VCVTPD2PH +syn keyword masmOpcode VCVTSI2SH VCVTUSI2SH VCVTSS2SH VCVTSD2SH +syn keyword masmOpcode VCVTPH2W VCVTTPH2W VCVTPH2UW VCVTTPH2UW +syn keyword masmOpcode VCVTPH2DQ VCVTTPH2DQ VCVTPH2UDQ VCVTTPH2UDQ +syn keyword masmOpcode VCVTPH2QQ VCVTTPH2QQ VCVTPH2UQQ VCVTTPH2UQQ +syn keyword masmOpcode VCVTPH2PSX VCVTPH2PD VCVTSH2SI VCVTTSH2SI +syn keyword masmOpcode VCVTSH2USI VCVTTSH2USI VCVTSH2SS VCVTSH2SD +syn keyword masmOpcode VGETEXPPH VGETEXPSH VGETMANTPH VGETMANTSH +syn keyword masmOpcode VMOVSH VMOVW VADDPD VADDPS VADDSD VADDSS +syn keyword masmOpcode VANDPD VANDPS VANDNPD VANDNPS +syn keyword masmOpcode VCMPPD VCMPPS VCMPSD VCMPSS +syn keyword masmOpcode VCOMISD VCOMISS VDIVPD VDIVPS VDIVSD VDIVSS +syn keyword masmOpcode VCVTDQ2PD VCVTDQ2PS VCVTPD2DQ VCVTPD2PS +syn keyword masmOpcode VCVTPH2PS VCVTPS2PH VCVTPS2DQ VCVTPS2PD +syn keyword masmOpcode VCVTSD2SI VCVTSD2SS VCVTSI2SD VCVTSI2SS +syn keyword masmOpcode VCVTSS2SD VCVTSS2SI VCVTTPD2DQ VCVTTPS2DQ +syn keyword masmOpcode VCVTTSD2SI VCVTTSS2SI VMAXPD VMAXPS +syn keyword masmOpcode VMAXSD VMAXSS VMINPD VMINPS VMINSD VMINSS +syn keyword masmOpcode VMOVAPD VMOVAPS VMOVD VMOVQ VMOVDDUP +syn keyword masmOpcode VMOVHLPS VMOVHPD VMOVHPS VMOVLHPS VMOVLPD +syn keyword masmOpcode VMOVLPS VMOVNTDQA VMOVNTDQ VMOVNTPD VMOVNTPS +syn keyword masmOpcode VMOVSD VMOVSHDUP VMOVSLDUP VMOVSS VMOVUPD +syn keyword masmOpcode VMOVUPS VMOVDQA VMOVDQA32 VMOVDQA64 +syn keyword masmOpcode VMOVDQU VMOVDQU8 VMOVDQU16 VMOVDQU32 VMOVDQU64 +syn keyword masmOpcode VMULPD VMULPS +syn keyword masmOpcode VMULSD VMULSS VORPD VORPS VSQRTPD VSQRTPS +syn keyword masmOpcode VSQRTSD VSQRTSS VSUBPD VSUBPS VSUBSD VSUBSS +syn keyword masmOpcode VUCOMISD VUCOMISS VUNPCKHPD VUNPCKHPS VUNPCKLPD +syn keyword masmOpcode VUNPCKLPS VXORPD VXORPS VEXTRACTPS VINSERTPS +syn keyword masmOpcode VPEXTRB VPEXTRW VPEXTRD VPEXTRQ VPINSRB VPINSRW +syn keyword masmOpcode VPINSRD VPINSRQ VPACKSSWB VPACKSSDW VPACKUSDW +syn keyword masmOpcode VPACKUSWB VPADDB VPADDW VPADDD VPADDQ VPADDSB +syn keyword masmOpcode VPADDSW VPADDUSB VPADDUSW VPAND VPANDD VPANDQ +syn keyword masmOpcode VPANDND VPANDNQ VPAVGB VPAVGW VPCMPEQB VPCMPEQW +syn keyword masmOpcode VPCMPEQD VPCMPEQQ VPCMPGTB VPCMPGTW VPCMPGTD +syn keyword masmOpcode VPCMPGTQ VPMAXSB VPMAXSW VPMAXSD VPMAXSQ +syn keyword masmOpcode VPMAXUB VPMAXUW VPMAXUD VPMAXUQ VPMINSB VPMINSW +syn keyword masmOpcode VPMINSD VPMINSQ VPMINUB VPMINUW VPMINUD VPMINUQ +syn keyword masmOpcode VPMOVSXBW VPMOVSXBD VPMOVSXBQ VPMOVSXWD +syn keyword masmOpcode VPMOVSXWQ VPMOVSXDQ VPMOVZXBW VPMOVZXBD +syn keyword masmOpcode VPMOVZXBQ VPMOVZXWD VPMOVZXWQ VPMOVZXDQ VPMULDQ +syn keyword masmOpcode VPMULUDQ VPMULHRSW VPMULHUW VPMULHW VPMULLD +syn keyword masmOpcode VPMULLQ VPMULLW VPORD VPORQ VPSUBB VPSUBW +syn keyword masmOpcode VPSUBD VPSUBQ VPSUBSB VPSUBSW VPSUBUSB VPSUBUSW +syn keyword masmOpcode VPUNPCKHBW VPUNPCKHWD VPUNPCKHDQ VPUNPCKHQDQ +syn keyword masmOpcode VPUNPCKLBW VPUNPCKLWD VPUNPCKLDQ VPUNPCKLQDQ +syn keyword masmOpcode VPXOR VPXORD VPXORQ +syn keyword masmOpcode VPSADBW VPSHUFB VPSHUFHW VPSHUFLW +syn keyword masmOpcode VPSHUFD VPSLLDQ VPSLLW VPSLLD VPSLLQ VPSRAW +syn keyword masmOpcode VPSRAD VPSRAQ VPSRLDQ VPSRLW VPSRLD VPSRLQ +syn keyword masmOpcode VPSLLVW VPSRLVW VPSHUFPD VPSHUFPS VEXTRACTF32X4 +syn keyword masmOpcode VEXTRACTF64X2 VEXTRACTF32X8 VEXTRACTF64X4 +syn keyword masmOpcode VEXTRACTI32X4 VEXTRACTI64X2 VEXTRACTI32X8 +syn keyword masmOpcode VEXTRACTI64X4 VINSERTF32x4 VINSERTF64X2 +syn keyword masmOpcode VINSERTF32X8 VINSERTF64x4 VINSERTI32X4 +syn keyword masmOpcode VINSERTI64X2 VINSERTI32X8 VINSERTI64X4 +syn keyword masmOpcode VPABSB VPABSW VPABSD VPABSQ VPALIGNR +syn keyword masmOpcode VPMADDUBSW VPMADDWD +syn keyword masmOpcode VFMADD132PD VFMADD213PD VFMADD231PD +syn keyword masmOpcode VFMADD132PS VFMADD213PS VFMADD231PS +syn keyword masmOpcode VFMADD132SD VFMADD213SD VFMADD231SD +syn keyword masmOpcode VFMADD132SS VFMADD213SS VFMADD231SS +syn keyword masmOpcode VFMADDSUB132PD VFMADDSUB213PD VFMADDSUB231PD +syn keyword masmOpcode VFMADDSUB132PS VFMADDSUB213PS VFMADDSUB231PS +syn keyword masmOpcode VFMSUBADD132PD VFMSUBADD213PD VFMSUBADD231PD +syn keyword masmOpcode VFMSUBADD132PS VFMSUBADD213PS VFMSUBADD231PS +syn keyword masmOpcode VFMSUB132PD VFMSUB213PD VFMSUB231PD +syn keyword masmOpcode VFMSUB132PS VFMSUB213PS VFMSUB231PS +syn keyword masmOpcode VFMSUB132SD VFMSUB213SD VFMSUB231SD +syn keyword masmOpcode VFMSUB132SS VFMSUB213SS VFMSUB231SS +syn keyword masmOpcode VFNMADD132PD VFNMADD213PD VFNMADD231PD +syn keyword masmOpcode VFNMADD132PS VFNMADD213PS VFNMADD231PS +syn keyword masmOpcode VFNMADD132SD VFNMADD213SD VFNMADD231SD +syn keyword masmOpcode VFNMADD132SS VFNMADD213SS VFNMADD231SS +syn keyword masmOpcode VFNMSUB132PD VFNMSUB213PD VFNMSUB231PD +syn keyword masmOpcode VFNMSUB132PS VFNMSUB213PS VFNMSUB231PS +syn keyword masmOpcode VFNMSUB132SD VFNMSUB213SD VFNMSUB231SD +syn keyword masmOpcode VFNMSUB132SS VFNMSUB213SS VFNMSUB231SS +syn keyword masmOpcode VPSRAVW VPSRAVQ + +" Other opcodes in Pentium and later processors +syn keyword masmOpcode CMPXCHG8B CPUID UD2 MOVSXD +syn keyword masmOpcode RSM RDMSR WRMSR RDPMC RDTSC SYSENTER SYSEXIT +syn match masmOpcode "CMOV\(P[EO]\|\(N\?\([ABGL]E\?\|[CEOPSZ]\)\)\)\>" + +" Not really used by MASM, but useful for viewing GCC-generated assembly code +" in Intel syntax +syn match masmHexadecimal "[-+]\?0[Xx]\x*" +syn keyword masmOpcode MOVABS + +" The default highlighting +hi def link masmLabel PreProc +hi def link masmComment Comment +hi def link masmDirective Statement +hi def link masmType Type +hi def link masmOperator Type +hi def link masmOption Special +hi def link masmRegister Special +hi def link masmString String +hi def link masmText String +hi def link masmTitle Title +hi def link masmOpcode Statement +hi def link masmOpFloat Statement + +hi def link masmHexadecimal Number +hi def link masmDecimal Number +hi def link masmOctal Number +hi def link masmBinary Number +hi def link masmFloatRaw Number +hi def link masmFloat Number + +hi def link masmIdentifier Identifier + +syntax sync minlines=50 + +let b:current_syntax = "masm" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 diff --git a/.config/vim/syntax/mason.vim b/.config/vim/syntax/mason.vim new file mode 100644 index 0000000..e1638ec --- /dev/null +++ b/.config/vim/syntax/mason.vim @@ -0,0 +1,85 @@ +" Vim syntax file +" Language: Mason (Perl embedded in HTML) +" Maintainer: vim-perl +" Homepage: https://github.com/vim-perl/vim-perl +" Bugs/requests: https://github.com/vim-perl/vim-perl/issues +" License: Vim License (see :help license) +" Last Change: 2021 Oct 10 +" Contributors: Hinrik Örn Sigurðsson +" Andrew Smith +" +" TODO: +" - Fix <%text> blocks to show HTML tags but ignore Mason tags. +" + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" The HTML syntax file included below uses this variable. +" +if !exists("main_syntax") + let main_syntax = 'mason' +endif + +" First pull in the HTML syntax. +" +runtime! syntax/html.vim +unlet b:current_syntax + +syn cluster htmlPreproc add=@masonTop + +" Now pull in the Perl syntax. +" +syn include @perlTop syntax/perl.vim +unlet b:current_syntax +syn include @podTop syntax/pod.vim + +" It's hard to reduce down to the correct sub-set of Perl to highlight in some +" of these cases so I've taken the safe option of just using perlTop in all of +" them. If you have any suggestions, please let me know. +" +syn region masonPod start="^=[a-z]" end="^=cut" keepend contained contains=@podTop +syn cluster perlTop remove=perlBraces +syn region masonLine matchgroup=Delimiter start="^%" end="$" keepend contains=@perlTop +syn region masonPerlComment start="#" end="\%(%>\)\@=\|$" contained contains=perlTodo,@Spell +syn region masonExpr matchgroup=Delimiter start="<%" end="%>" contains=@perlTop,masonPerlComment +syn region masonPerl matchgroup=Delimiter start="<%perl>" end="" contains=masonPod,@perlTop +syn region masonComp keepend matchgroup=Delimiter start="<&\s*\%([-._/[:alnum:]]\+:\)\?[-._/[:alnum:]]*" end="&>" contains=@perlTop +syn region masonComp keepend matchgroup=Delimiter skipnl start="<&|\s*\%([-._/[:alnum:]]\+:\)\?[-._/[:alnum:]]*" end="&>" contains=@perlTop nextgroup=masonCompContent +syn region masonCompContent matchgroup=Delimiter start="" end="" contained contains=@masonTop + +syn region masonArgs matchgroup=Delimiter start="<%args>" end="" contains=masonPod,@perlTop + +syn region masonInit matchgroup=Delimiter start="<%init>" end="" contains=masonPod,@perlTop +syn region masonCleanup matchgroup=Delimiter start="<%cleanup>" end="" contains=masonPod,@perlTop +syn region masonOnce matchgroup=Delimiter start="<%once>" end="" contains=masonPod,@perlTop +syn region masonClass matchgroup=Delimiter start="<%class>" end="" contains=masonPod,@perlTop +syn region masonShared matchgroup=Delimiter start="<%shared>" end="" contains=masonPod,@perlTop + +syn region masonDef matchgroup=Delimiter start="<%def\s*[-._/[:alnum:]]\+\s*>" end="" contains=@htmlTop +syn region masonMethod matchgroup=Delimiter start="<%method\s*[-._/[:alnum:]]\+\s*>" end="" contains=@htmlTop + +syn region masonFlags matchgroup=Delimiter start="<%flags>" end="" contains=masonPod,@perlTop +syn region masonAttr matchgroup=Delimiter start="<%attr>" end="" contains=masonPod,@perlTop + +syn region masonFilter matchgroup=Delimiter start="<%filter>" end="" contains=masonPod,@perlTop + +syn region masonDoc matchgroup=Delimiter start="<%doc>" end="" +syn region masonText matchgroup=Delimiter start="<%text>" end="" + +syn cluster masonTop contains=masonLine,masonExpr,masonPerl,masonComp,masonArgs,masonInit,masonCleanup,masonOnce,masonShared,masonDef,masonMethod,masonFlags,masonAttr,masonFilter,masonDoc,masonText + +" Set up default highlighting. Almost all of this is done in the included +" syntax files. +hi def link masonDoc Comment +hi def link masonPod Comment +hi def link podOrdinary masonPod +hi def link masonPerlComment perlComment + +let b:current_syntax = "mason" + +if main_syntax == 'mason' + unlet main_syntax +endif diff --git a/.config/vim/syntax/master.vim b/.config/vim/syntax/master.vim new file mode 100644 index 0000000..f89c5b2 --- /dev/null +++ b/.config/vim/syntax/master.vim @@ -0,0 +1,37 @@ +" Vim syntax file +" Language: Focus Master File +" Maintainer: Rob Brady +" Last Change: $Date: 2004/06/13 15:54:03 $ +" URL: http://www.datatone.com/~robb/vim/syntax/master.vim +" $Revision: 1.1 $ + +" this is a very simple syntax file - I will be improving it +" add entire DEFINE syntax + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case match + +" A bunch of useful keywords +syn keyword masterKeyword FILENAME SUFFIX SEGNAME SEGTYPE PARENT FIELDNAME +syn keyword masterKeyword FIELD ALIAS USAGE INDEX MISSING ON +syn keyword masterKeyword FORMAT CRFILE CRKEY +syn keyword masterDefine DEFINE DECODE EDIT +syn region masterString start=+"+ end=+"+ +syn region masterString start=+'+ end=+'+ +syn match masterComment "\$.*" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link masterKeyword Keyword +hi def link masterComment Comment +hi def link masterString String + + +let b:current_syntax = "master" + +" vim: ts=8 diff --git a/.config/vim/syntax/matlab.vim b/.config/vim/syntax/matlab.vim new file mode 100644 index 0000000..5202809 --- /dev/null +++ b/.config/vim/syntax/matlab.vim @@ -0,0 +1,119 @@ +" Vim syntax file +" Language: Matlab +" Maintainer: Alex Burka +" Credits: Preben 'Peppe' Guldberg +" Maurizio Tranchero - maurizio(.)tranchero(@)gmail(.)com +" Original author: Mario Eusebio +" Last Change: June 10 2019 +" added highlight rule for double-quoted string literals +" Change History: +" - double-quoted string literals added +" - now highlights cell-mode separator comments +" - 'global' and 'persistent' keyword are now recognized + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn keyword matlabStatement return +syn keyword matlabLabel case switch +syn keyword matlabConditional else elseif end if otherwise +syn keyword matlabRepeat do for while +" MT_ADDON - added exception-specific keywords +syn keyword matlabExceptions try catch +syn keyword matlabOO classdef properties events methods + +syn keyword matlabTodo contained TODO +syn keyword matlabScope global persistent + +" If you do not want these operators lit, uncommment them and the "hi link" below +syn match matlabArithmeticOperator "[-+]" +syn match matlabArithmeticOperator "\.\=[*/\\^]" +syn match matlabRelationalOperator "[=~]=" +syn match matlabRelationalOperator "[<>]=\=" +syn match matlabLogicalOperator "[&|~]" + +syn match matlabLineContinuation "\.\{3}" + +"syn match matlabIdentifier "\<\a\w*\>" + +" String +" MT_ADDON - added 'skip' in order to deal with 'tic' escaping sequence +syn region matlabString start=+'+ end=+'+ oneline skip=+''+ +syn region matlabStringArray start=+"+ end=+"+ oneline skip=+""+ + +" If you don't like tabs +syn match matlabTab "\t" + +" Standard numbers +syn match matlabNumber "\<\d\+[ij]\=\>" +" floating point number, with dot, optional exponent +syn match matlabFloat "\<\d\+\(\.\d*\)\=\([edED][-+]\=\d\+\)\=[ij]\=\>" +" floating point number, starting with a dot, optional exponent +syn match matlabFloat "\.\d\+\([edED][-+]\=\d\+\)\=[ij]\=\>" + +" Transpose character and delimiters: Either use just [...] or (...) aswell +syn match matlabDelimiter "[][]" +"syn match matlabDelimiter "[][()]" +syn match matlabTransposeOperator "[])a-zA-Z0-9.]'"lc=1 + +syn match matlabSemicolon ";" + +syn match matlabComment "%.*$" contains=matlabTodo,matlabTab +" MT_ADDON - correctly highlights words after '...' as comments +syn match matlabComment "\.\.\..*$" contains=matlabTodo,matlabTab +syn region matlabMultilineComment start=+%{+ end=+%}+ contains=matlabTodo,matlabTab +syn match matlabCellComment "^%%.*$" + +syn keyword matlabOperator break zeros default margin round ones rand +syn keyword matlabOperator ceil floor size clear zeros eye mean std cov + +syn keyword matlabFunction error eval function + +syn keyword matlabImplicit abs acos atan asin cos cosh exp log prod sum +syn keyword matlabImplicit log10 max min sign sin sinh sqrt tan reshape + +syn match matlabError "-\=\<\d\+\.\d\+\.[^*/\\^]" +syn match matlabError "-\=\<\d\+\.\d\+[eEdD][-+]\=\d\+\.\([^*/\\^]\)" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link matlabTransposeOperator matlabOperator +hi def link matlabOperator Operator +hi def link matlabLineContinuation Special +hi def link matlabLabel Label +hi def link matlabConditional Conditional +hi def link matlabExceptions Conditional +hi def link matlabRepeat Repeat +hi def link matlabTodo Todo +hi def link matlabString String +hi def link matlabStringArray String +hi def link matlabDelimiter Identifier +hi def link matlabTransposeOther Identifier +hi def link matlabNumber Number +hi def link matlabFloat Float +hi def link matlabFunction Function +hi def link matlabError Error +hi def link matlabImplicit matlabStatement +hi def link matlabStatement Statement +hi def link matlabOO Statement +hi def link matlabSemicolon SpecialChar +hi def link matlabComment Comment +hi def link matlabMultilineComment Comment +hi def link matlabCellComment Todo +hi def link matlabScope Type + +hi def link matlabArithmeticOperator matlabOperator +hi def link matlabRelationalOperator matlabOperator +hi def link matlabLogicalOperator matlabOperator + +"optional highlighting +"hi def link matlabIdentifier Identifier +"hi def link matlabTab Error + + +let b:current_syntax = "matlab" + +"EOF vim: ts=8 noet tw=100 sw=8 sts=0 diff --git a/.config/vim/syntax/maxima.vim b/.config/vim/syntax/maxima.vim new file mode 100644 index 0000000..46e1e4f --- /dev/null +++ b/.config/vim/syntax/maxima.vim @@ -0,0 +1,261 @@ +" Vim syntax file +" Language: Maxima (symbolic algebra program) +" Maintainer: Robert Dodier (robert.dodier@gmail.com) +" Last Change: April 6, 2006 +" Version: 1 +" Adapted mostly from xmath.vim +" Number formats adapted from r.vim +" +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn sync lines=1000 + +" parenthesis sanity checker +syn region maximaZone matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" transparent contains=ALLBUT,maximaError,maximaBraceError,maximaCurlyError +syn region maximaZone matchgroup=Delimiter start="{" matchgroup=Delimiter end="}" transparent contains=ALLBUT,maximaError,maximaBraceError,maximaParenError +syn region maximaZone matchgroup=Delimiter start="\[" matchgroup=Delimiter end="]" transparent contains=ALLBUT,maximaError,maximaCurlyError,maximaParenError +syn match maximaError "[)\]}]" +syn match maximaBraceError "[)}]" contained +syn match maximaCurlyError "[)\]]" contained +syn match maximaParenError "[\]}]" contained +syn match maximaComma "[\[\](),;]" +syn match maximaComma "\.\.\.$" + +" A bunch of useful maxima keywords +syn keyword maximaConditional if then else elseif and or not +syn keyword maximaRepeat do for thru + +" ---------------------- BEGIN LIST OF ALL FUNCTIONS (EXCEPT KEYWORDS) ---------------------- +syn keyword maximaFunc abasep abs absboxchar absint acos acosh acot acoth acsc +syn keyword maximaFunc acsch activate activecontexts addcol additive addrow adim +syn keyword maximaFunc adjoint af aform airy algebraic algepsilon algexact algsys +syn keyword maximaFunc alg_type alias aliases allbut all_dotsimp_denoms allroots allsym +syn keyword maximaFunc alphabetic antid antidiff antisymmetric append appendfile +syn keyword maximaFunc apply apply1 apply2 applyb1 apropos args array arrayapply +syn keyword maximaFunc arrayinfo arraymake arrays asec asech asin asinh askexp +syn keyword maximaFunc askinteger asksign assoc assoc_legendre_p assoc_legendre_q assume +syn keyword maximaFunc assume_pos assume_pos_pred assumescalar asymbol asympa at atan +syn keyword maximaFunc atan2 atanh atensimp atom atomgrad atrig1 atvalue augcoefmatrix +syn keyword maximaFunc av backsubst backtrace bashindices batch batchload bc2 bdvac +syn keyword maximaFunc berlefact bern bernpoly bessel besselexpand bessel_i bessel_j +syn keyword maximaFunc bessel_k bessel_y beta bezout bffac bfhzeta bfloat bfloatp +syn keyword maximaFunc bfpsi bfpsi0 bftorat bftrunc bfzeta bimetric binomial block +syn keyword maximaFunc bothcoef box boxchar break breakup bug_report build_info buildq +syn keyword maximaFunc burn cabs canform canten carg cartan catch cauchysum cbffac +syn keyword maximaFunc cdisplay cf cfdisrep cfexpand cflength cframe_flag cgeodesic +syn keyword maximaFunc changename changevar charpoly checkdiv check_overlaps christof +syn keyword maximaFunc clear_rules closefile closeps cmetric cnonmet_flag coeff +syn keyword maximaFunc coefmatrix cograd col collapse columnvector combine commutative +syn keyword maximaFunc comp2pui compfile compile compile_file components concan concat +syn keyword maximaFunc conj conjugate conmetderiv cons constant constantp cont2part +syn keyword maximaFunc content context contexts contortion contract contragrad coord +syn keyword maximaFunc copylist copymatrix cos cosh cosnpiflag cot coth covdiff +syn keyword maximaFunc covect create_list csc csch csetup ctaylor ctaypov ctaypt +syn keyword maximaFunc ctayswitch ctayvar ct_coords ct_coordsys ctorsion_flag ctransform +syn keyword maximaFunc ctrgsimp current_let_rule_package dblint deactivate debugmode +syn keyword maximaFunc declare declare_translated declare_weight decsym +syn keyword maximaFunc default_let_rule_package defcon define define_variable defint +syn keyword maximaFunc defmatch defrule deftaylor del delete deleten delta demo +syn keyword maximaFunc demoivre denom dependencies depends derivabbrev derivdegree +syn keyword maximaFunc derivlist derivsubst describe desolve determinant detout +syn keyword maximaFunc diagmatrix diagmatrixp diagmetric diff dim dimension direct +syn keyword maximaFunc disolate disp dispcon dispflag dispform dispfun display +syn keyword maximaFunc display2d display_format_internal disprule dispterms distrib +syn keyword maximaFunc divide divsum doallmxops domain domxexpt domxmxops domxnctimes +syn keyword maximaFunc dontfactor doscmxops doscmxplus dot0nscsimp dot0simp dot1simp +syn keyword maximaFunc dotassoc dotconstrules dotdistrib dotexptsimp dotident dotscrules +syn keyword maximaFunc dotsimp dpart dscalar %e echelon %edispflag eigenvalues +syn keyword maximaFunc eigenvectors eighth einstein eivals eivects ele2comp +syn keyword maximaFunc ele2polynome ele2pui elem eliminate elliptic_e elliptic_ec +syn keyword maximaFunc elliptic_eu elliptic_f elliptic_kc elliptic_pi ematrix %emode +syn keyword maximaFunc endcons entermatrix entertensor entier %enumer equal equalp erf +syn keyword maximaFunc erfflag errcatch error errormsg error_size error_syms +syn keyword maximaFunc %e_to_numlog euler ev eval evenp every evflag evfun evundiff +syn keyword maximaFunc example exp expand expandwrt expandwrt_denom expandwrt_factored +syn keyword maximaFunc explose expon exponentialize expop express expt exptdispflag +syn keyword maximaFunc exptisolate exptsubst extdiff extract_linear_equations ezgcd +syn keyword maximaFunc facexpand factcomb factlim factor factorflag factorial factorout +syn keyword maximaFunc factorsum facts false fast_central_elements fast_linsolve +syn keyword maximaFunc fasttimes fb feature featurep features fft fib fibtophi fifth +syn keyword maximaFunc filename_merge file_search file_search_demo file_search_lisp +syn keyword maximaFunc file_search_maxima file_type fillarray findde first fix flatten +syn keyword maximaFunc flipflag float float2bf floatnump flush flush1deriv flushd +syn keyword maximaFunc flushnd forget fortindent fortran fortspaces fourcos fourexpand +syn keyword maximaFunc fourier fourint fourintcos fourintsin foursimp foursin fourth +syn keyword maximaFunc fpprec fpprintprec frame_bracket freeof fullmap fullmapl +syn keyword maximaFunc fullratsimp fullratsubst funcsolve functions fundef funmake funp +syn keyword maximaFunc gamma %gamma gammalim gauss gcd gcdex gcfactor gdet genfact +syn keyword maximaFunc genindex genmatrix gensumnum get getchar gfactor gfactorsum +syn keyword maximaFunc globalsolve go gradef gradefs gramschmidt grind grobner_basis +syn keyword maximaFunc gschmit hach halfangles hermite hipow hodge horner i0 i1 +syn keyword maximaFunc *read-base* ic1 ic2 icc1 icc2 ic_convert ichr1 ichr2 icounter +syn keyword maximaFunc icurvature ident idiff idim idummy idummyx ieqn ieqnprint ifb +syn keyword maximaFunc ifc1 ifc2 ifg ifgi ifr iframe_bracket_form iframes ifri ift +syn keyword maximaFunc igeodesic_coords igeowedge_flag ikt1 ikt2 ilt imagpart imetric +syn keyword maximaFunc inchar indexed_tensor indices inf %inf infeval infinity infix +syn keyword maximaFunc inflag infolists init_atensor init_ctensor inm inmc1 inmc2 +syn keyword maximaFunc innerproduct in_netmath inpart inprod inrt integerp integrate +syn keyword maximaFunc integrate_use_rootsof integration_constant_counter interpolate +syn keyword maximaFunc intfaclim intopois intosum intpolabs intpolerror intpolrel +syn keyword maximaFunc invariant1 invariant2 inverse_jacobi_cd inverse_jacobi_cn +syn keyword maximaFunc inverse_jacobi_cs inverse_jacobi_dc inverse_jacobi_dn +syn keyword maximaFunc inverse_jacobi_ds inverse_jacobi_nc inverse_jacobi_nd +syn keyword maximaFunc inverse_jacobi_ns inverse_jacobi_sc inverse_jacobi_sd +syn keyword maximaFunc inverse_jacobi_sn invert is ishow isolate isolate_wrt_times +syn keyword maximaFunc isqrt itr j0 j1 jacobi jacobi_cd jacobi_cn jacobi_cs jacobi_dc +syn keyword maximaFunc jacobi_dn jacobi_ds jacobi_nc jacobi_nd jacobi_ns jacobi_sc +syn keyword maximaFunc jacobi_sd jacobi_sn jn kdels kdelta keepfloat kill killcontext +syn keyword maximaFunc kinvariant kostka kt labels lambda laplace lassociative last +syn keyword maximaFunc lc2kdt lc_l lcm lc_u ldefint ldisp ldisplay leinstein length +syn keyword maximaFunc let letrat let_rule_packages letrules letsimp levi_civita lfg +syn keyword maximaFunc lfreeof lg lgtreillis lhospitallim lhs liediff limit limsubst +syn keyword maximaFunc linear linechar linel linenum linsolve linsolve_params +syn keyword maximaFunc linsolvewarn listarith listarray listconstvars listdummyvars +syn keyword maximaFunc list_nc_monomials listoftens listofvars listp lmxchar load +syn keyword maximaFunc loadfile loadprint local log logabs logarc logconcoeffp +syn keyword maximaFunc logcontract logexpand lognegint lognumer logsimp lopow +syn keyword maximaFunc lorentz_gauge lpart lratsubst lriem lriemann lsum ltreillis +syn keyword maximaFunc m1pbranch macroexpansion mainvar make_array makebox makefact +syn keyword maximaFunc makegamma makelist make_random_state make_transform map mapatom +syn keyword maximaFunc maperror maplist matchdeclare matchfix matrix matrix_element_add +syn keyword maximaFunc matrix_element_mult matrix_element_transpose matrixmap matrixp +syn keyword maximaFunc mattrace max maxapplydepth maxapplyheight maxnegex maxposex +syn keyword maximaFunc maxtayorder member min %minf minfactorial minor mod +syn keyword maximaFunc mode_check_errorp mode_checkp mode_check_warnp mode_declare +syn keyword maximaFunc mode_identity modulus mon2schur mono monomial_dimensions +syn keyword maximaFunc multi_elem multinomial multi_orbit multiplicative multiplicities +syn keyword maximaFunc multi_pui multsym multthru myoptions nc_degree ncexpt ncharpoly +syn keyword maximaFunc negdistrib negsumdispflag newcontext newdet newton niceindices +syn keyword maximaFunc niceindicespref ninth nm nmc noeval nolabels nonmetricity +syn keyword maximaFunc nonscalar nonscalarp noun noundisp nounify nouns np npi +syn keyword maximaFunc nptetrad nroots nterms ntermst nthroot ntrig num numberp numer +syn keyword maximaFunc numerval numfactor nusum obase oddp ode2 op openplot_curves +syn keyword maximaFunc operatorp opproperties opsubst optimize optimprefix optionset +syn keyword maximaFunc orbit ordergreat ordergreatp orderless orderlessp outative +syn keyword maximaFunc outchar outermap outofpois packagefile pade part part2cont +syn keyword maximaFunc partfrac partition partpol partswitch permanent permut petrov +syn keyword maximaFunc pfeformat pi pickapart piece playback plog plot2d plot2d_ps +syn keyword maximaFunc plot3d plot_options poisdiff poisexpt poisint poislim poismap +syn keyword maximaFunc poisplus poissimp poisson poissubst poistimes poistrim polarform +syn keyword maximaFunc polartorect polynome2ele posfun potential powerdisp powers +syn keyword maximaFunc powerseries pred prederror primep print printpois printprops +syn keyword maximaFunc prodhack prodrac product programmode prompt properties props +syn keyword maximaFunc propvars pscom psdraw_curve psexpand psi pui pui2comp pui2ele +syn keyword maximaFunc pui2polynome pui_direct puireduc put qput qq quad_qag quad_qagi +syn keyword maximaFunc quad_qags quad_qawc quad_qawf quad_qawo quad_qaws quanc8 quit +syn keyword maximaFunc qunit quotient radcan radexpand radsubstflag random rank +syn keyword maximaFunc rassociative rat ratalgdenom ratchristof ratcoef ratdenom +syn keyword maximaFunc ratdenomdivide ratdiff ratdisrep rateinstein ratepsilon ratexpand +syn keyword maximaFunc ratfac ratmx ratnumer ratnump ratp ratprint ratriemann ratsimp +syn keyword maximaFunc ratsimpexpons ratsubst ratvars ratweight ratweights ratweyl +syn keyword maximaFunc ratwtlvl read readonly realonly realpart realroots rearray +syn keyword maximaFunc rectform recttopolar rediff refcheck rem remainder remarray +syn keyword maximaFunc rembox remcomps remcon remcoord remfun remfunction remlet +syn keyword maximaFunc remove remrule remsym remvalue rename reset residue resolvante +syn keyword maximaFunc resolvante_alternee1 resolvante_bipartite resolvante_diedrale +syn keyword maximaFunc resolvante_klein resolvante_klein3 resolvante_produit_sym +syn keyword maximaFunc resolvante_unitaire resolvante_vierer rest resultant return +syn keyword maximaFunc reveal reverse revert revert2 rhs ric ricci riem riemann +syn keyword maximaFunc rinvariant risch rmxchar rncombine %rnum_list romberg rombergabs +syn keyword maximaFunc rombergit rombergmin rombergtol room rootsconmode rootscontract +syn keyword maximaFunc rootsepsilon round row run_testsuite save savedef savefactors +syn keyword maximaFunc scalarmatrixp scalarp scalefactors scanmap schur2comp sconcat +syn keyword maximaFunc scsimp scurvature sec sech second setcheck setcheckbreak +syn keyword maximaFunc setelmx set_plot_option set_random_state setup_autoload +syn keyword maximaFunc set_up_dot_simplifications setval seventh sf show showcomps +syn keyword maximaFunc showratvars showtime sign signum similaritytransform simpsum +syn keyword maximaFunc simtran sin sinh sinnpiflag sixth solve solvedecomposes +syn keyword maximaFunc solveexplicit solvefactors solve_inconsistent_error solvenullwarn +syn keyword maximaFunc solveradcan solvetrigwarn somrac sort sparse spherical_bessel_j +syn keyword maximaFunc spherical_bessel_y spherical_hankel1 spherical_hankel2 +syn keyword maximaFunc spherical_harmonic splice sqfr sqrt sqrtdispflag sstatus +syn keyword maximaFunc stardisp status string stringout sublis sublis_apply_lambda +syn keyword maximaFunc sublist submatrix subst substinpart substpart subvarp sum +syn keyword maximaFunc sumcontract sumexpand sumhack sumsplitfact supcontext symbolp +syn keyword maximaFunc symmetric symmetricp system tan tanh taylor taylordepth +syn keyword maximaFunc taylorinfo taylor_logexpand taylor_order_coefficients taylorp +syn keyword maximaFunc taylor_simplifier taylor_truncate_polynomials taytorat tcl_output +syn keyword maximaFunc tcontract tellrat tellsimp tellsimpafter tensorkill tentex tenth +syn keyword maximaFunc tex %th third throw time timer timer_devalue timer_info +syn keyword maximaFunc tldefint tlimit tlimswitch todd_coxeter to_lisp totaldisrep +syn keyword maximaFunc totalfourier totient tpartpol tr trace trace_options +syn keyword maximaFunc transcompile translate translate_file transpose transrun +syn keyword maximaFunc tr_array_as_ref tr_bound_function_applyp treillis treinat +syn keyword maximaFunc tr_file_tty_messagesp tr_float_can_branch_complex +syn keyword maximaFunc tr_function_call_default triangularize trigexpand trigexpandplus +syn keyword maximaFunc trigexpandtimes triginverses trigrat trigreduce trigsign trigsimp +syn keyword maximaFunc tr_numer tr_optimize_max_loop tr_semicompile tr_state_vars true +syn keyword maximaFunc trunc truncate tr_warn_bad_function_calls tr_warn_fexpr +syn keyword maximaFunc tr_warnings_get tr_warn_meval tr_warn_mode tr_warn_undeclared +syn keyword maximaFunc tr_warn_undefined_variable tr_windy ttyoff ueivects ufg ug +syn keyword maximaFunc ultraspherical undiff uniteigenvectors unitvector unknown unorder +syn keyword maximaFunc unsum untellrat untimer untrace uric uricci uriem uriemann +syn keyword maximaFunc use_fast_arrays uvect values vect_cross vectorpotential +syn keyword maximaFunc vectorsimp verb verbify verbose weyl with_stdout writefile +syn keyword maximaFunc xgraph_curves xthru zerobern zeroequiv zeromatrix zeta zeta%pi +syn match maximaOp "[\*\/\+\-\#\!\~\^\=\:\<\>\@]" +" ---------------------- END LIST OF ALL FUNCTIONS (EXCEPT KEYWORDS) ---------------------- + + +syn case match + +" Labels (supports maxima's goto) +syn match maximaLabel "^\s*<[a-zA-Z_][a-zA-Z0-9%_]*>" + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match maximaSpecial contained "\\\d\d\d\|\\." +syn region maximaString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=maximaSpecial +syn match maximaCharacter "'[^\\]'" +syn match maximaSpecialChar "'\\.'" + +" number with no fractional part or exponent +syn match maximaNumber /\<\d\+\>/ +" floating point number with integer and fractional parts and optional exponent +syn match maximaFloat /\<\d\+\.\d*\([BbDdEeSs][-+]\=\d\+\)\=\>/ +" floating point number with no integer part and optional exponent +syn match maximaFloat /\<\.\d\+\([BbDdEeSs][-+]\=\d\+\)\=\>/ +" floating point number with no fractional part and optional exponent +syn match maximaFloat /\<\d\+[BbDdEeSs][-+]\=\d\+\>/ + +" Comments: +" maxima supports /* ... */ (like C) +syn keyword maximaTodo contained TODO Todo DEBUG +syn region maximaCommentBlock start="/\*" end="\*/" contains=maximaString,maximaTodo,maximaCommentBlock + +" synchronizing +syn sync match maximaSyncComment grouphere maximaCommentBlock "/*" +syn sync match maximaSyncComment groupthere NONE "*/" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link maximaBraceError maximaError +hi def link maximaCmd maximaStatement +hi def link maximaCurlyError maximaError +hi def link maximaFuncCmd maximaStatement +hi def link maximaParenError maximaError + +" The default methods for highlighting. Can be overridden later +hi def link maximaCharacter Character +hi def link maximaComma Function +hi def link maximaCommentBlock Comment +hi def link maximaConditional Conditional +hi def link maximaError Error +hi def link maximaFunc Delimiter +hi def link maximaOp Delimiter +hi def link maximaLabel PreProc +hi def link maximaNumber Number +hi def link maximaFloat Float +hi def link maximaRepeat Repeat +hi def link maximaSpecial Type +hi def link maximaSpecialChar SpecialChar +hi def link maximaStatement Statement +hi def link maximaString String +hi def link maximaTodo Todo + + +let b:current_syntax = "maxima" diff --git a/.config/vim/syntax/mbsync.vim b/.config/vim/syntax/mbsync.vim new file mode 100644 index 0000000..7275d65 --- /dev/null +++ b/.config/vim/syntax/mbsync.vim @@ -0,0 +1,220 @@ +" Vim syntax file +" Language: mbsyncrc +" Maintainer: Pierrick Guillaume +" Last Change: 2025 Apr 13 +" 2025 Jun 04 by Vim project: match TLSType configuration variable +" +" Syntax support for mbsync config file + +" This file is based on the mbsync manual (isync v1.4.4) +" https://isync.sourceforge.io/mbsync.html + +if exists('b:current_syntax') + finish +endif + +let b:current_syntax = 'mbsync' + +let s:cpo_save = &cpo +set cpo&vim + +syn match mbsError '.*' + +syn match mbsCommentL '^#.*$' + +" Properties {{{ + +syn match mbsNumber '[0-9]\+' display contained +syn match mbsPath '\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@!-]\|\\.\)\+' display contained +syn match mbsPath '"\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@! -]\|\\.\)\+"' display contained +syn match mbsName '\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@!-]\|\\.\)\+' display contained +syn match mbsName '"\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@! -]\|\\.\)\+"' display contained +syn match mbsCommand '+\?.*$' display contained contains=mbsCommandPrompt +syn match mbsCommandPrompt '+' display contained +syn region mbsString start=+"+ skip=+\\"+ end=+"+ display contained +syn match mbsSizeUnit '[kKmMbB]' display contained +syn match mbsSize '[0-9]\+' display contained contains=mbsNumber nextgroup=mbsSizeUnit +syn keyword mbsBool yes no contained + +" }}} + + +" Stores {{{ +" Global Store Config Items +syn match mbsGlobConfPath '^Path\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent +syn match mbsGlobConfMaxSize '^MaxSize\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsSize transparent +syn match mbsGlobConfMapInbox '^MapInbox\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent +syn match mbsGlobConfFlatten '^Flatten\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent +syn match mbsGlobConfTrash '^Trash\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent +syn match mbsGlobConfTrashNO '^TrashNewOnly\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsBool transparent +syn match mbsGlobConfTrashRN '^TrashRemoteNew\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsBool transparent +syn keyword mbsGlobConfItemK Path MaxSize MapInbox Flatten Trash TrashNewOnly TrashRemoteNew contained + +syn cluster mbsGlobConfItem contains=mbsGlobConfPath,mbsGlobConfMaxSize,mbsGlobConfMapInbox,mbsGlobConfFlatten,mbsCommentL,mbsGlobConfTrash.* + + +" MaildirStore +syn match mbsMdSConfStMaildirStore '^MaildirStore\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsName transparent +syn match mbsMdSConfStAltMap '^AltMap\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsBool transparent +syn match mbsMdsConfStInbox '^Inbox\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsPath transparent +syn match mbsMdsConfStInfoDelimiter '^InfoDelimiter\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsPath transparent +syn keyword mbsMdSConfSubFoldersOpt Verbatim Legacy contained +syn match mbsMdSConfSubFoldersOpt 'Maildir++' display contained +syn match mbsMdsConfStSubFolders '^SubFolders\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsMdSConfSubFoldersOpt transparent + +syn cluster mbsMdSConfItem contains=mbsMdSConfSt.* + +syn keyword mbsMdSConfItemK MaildirStore AltMap Inbox InfoDelimiter SubFolders contained + +syn region mbsMaildirStore start="^MaildirStore" end="^$" end='\%$' contains=@mbsGlobConfItem,mbsCommentL,@mbsMdSConfItem,mbsError transparent + + +" IMAP4Accounts +syn match mbsIAConfStIMAPAccount '^IMAPAccount\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsName transparent +syn match mbsIAConfStHost '^Host\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent +syn match mbsIAConfStPort '^Port\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsNumber transparent +syn match mbsIAConfStTimeout '^Timeout\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsNumber transparent +syn match mbsIAConfStUser '^User\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent +syn match mbsIAConfStUserCmd '^UserCmd\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsCommand transparent +syn match mbsIAConfStPass '^Pass\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent +syn match mbsIAConfStPassCmd '^PassCmd\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsCommand transparent +syn match mbsIAConfStUseKeychain '^UseKeychain\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsBool transparent +syn match mbsIAConfStTunnel '^Tunnel\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsCommand transparent +syn match mbsIAConfStAuthMechs '^AuthMechs\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent +syn keyword mbsIAConfTLSTypeOpt None STARTTLS IMAPS contained +syn match mbsIAConfStSSLType '^SSLType\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsIAConfTLSTypeOpt transparent +syn match mbsIAConfStTLSType '^TLSType\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsIAConfTLSTypeOpt transparent +syn match mbsIAConfSSLVersionsOpt '\%(SSLv3\|TLSv1\%(.[123]\)\?\)\%(\s\+\%(SSLv3\|TLSv1\%(.[123]\)\?\)\)*' contained +syn match mbsIAConfStSSLVersions '^SSLVersions\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsIAConfSSLVersionsOpt transparent +syn match mbsIAConfStSystemCertificates '^SystemCertificates\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsBool transparent +syn match mbsIAConfStCertificateFile '^CertificateFile\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent +syn match mbsIAConfStClientCertificate '^ClientCertificate\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent +syn match mbsIAConfStClientKey '^ClientKey\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent +syn match mbsIAConfStCipherString '^CipherString\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsString transparent +syn match mbsIAConfStPipelineDepth '^PipelineDepth\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsNumber transparent +syn match mbsIAConfStDisableExtensions '^DisableExtensions\?\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent + +syn cluster mbsIAConfItem contains=mbsIAConfSt.* + +syn keyword mbsIAConfItemK + \ IMAPAccount Host Port Timeout User UserCmd Pass PassCmd UseKeychain Tunnel + \ AuthMechs SSLType TLSType SSLVersions SystemCertificates CertificateFile ClientCertificate + \ ClientKey CipherString PipelineDepth DisableExtension[s] contained + +syn region mbsIMAP4AccontsStore start="^IMAPAccount" end="^$" end="\%$" contains=@mbsGlobConfItem,mbsCommentL,@mbsIAConfItem,mbsError transparent + + +" IMAPStores +syn match mbsISConfStIMAPStore '^IMAPStore\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsName transparent +syn match mbsISConfStAccount '^Account\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsName transparent +syn match mbsISConfStUseNamespace '^UseNamespace\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsBool transparent +syn match mbsISConfStPathDelimiter '^PathDelimiter\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsPath transparent +syn match mbsISConfStSubscribedOnly '^SubscribedOnly\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsBool transparent + +syn cluster mbsISConfItem contains=mbsISConfSt.* + +syn keyword mbsISConfItemK IMAPStore Account UseNamespace PathDelimiter SubscribedOnly contained + +syn region mbsIMAPStore start="^IMAPStore" end="^$" end="\%$" contains=@mbsGlobConfItem,mbsCommentL,@mbsISConfItem,mbsError transparent + +" }}} + +" Channels {{{ + +syn match mbsCConfStChannel '^Channel\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsName transparent +syn region mbsCConfProxOpt matchgroup=mbsCConfProxOptOp start=':' matchgroup=mbsCConfProxOptOp end=':' contained contains=mbsName nextgroup=mbsPath keepend +syn match mbsCConfStFar '^Far\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfProxOpt transparent +syn match mbsCConfStNear '^Near\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfProxOpt transparent +syn match mbsCConfPatternOptOp '[*%!]' display contained +syn match mbsCConfPatternOpt '.*$' display contained contains=mbsCConfPatternOptOp +syn match mbsCConfStPattern '^Patterns\?\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfPatternOpt transparent +syn match mbsCConfStMaxSize '^MaxSize\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsSize transparent +syn match mbsCConfStMaxMessages '^MaxMessages\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsNumber transparent +syn match mbsCConfStExpireUnread '^ExpireUnread\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsBool transparent +syn match mbsCConfSyncOpt 'None\|All\|\%(\s\+\%(Pull\|Push\|New\|ReNew\|Delete\|Flags\)\)\+' display contained +syn match mbsCConfStSync '^Sync\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfSyncOpt transparent +syn keyword mbsCConfManipOpt None Far Near Both contained +syn match mbsCConfStCreate '^Create\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfManipOpt transparent +syn match mbsCConfStRemove '^Remove\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfManipOpt transparent +syn match mbsCConfStExpunge '^Expunge\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfManipOpt transparent +syn match mbsCConfStCopyArrivalDate '^CopyArrivalDate\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsBool transparent +syn match mbsCConfSyncStateOpt '\*\|.*$' display contained contains=mbsCConfSyncStateOptOp,mbsPath transparent +syn match mbsCConfSyncStateOptOp '\*' display contained +syn match mbsCConfStSyncState '^SyncState\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfSyncStateOpt transparent + +syn cluster mbsCConfItem contains=mbsCConfSt.* + +syn keyword mbsCConfItemK + \ Channel Far Near Pattern[s] MaxSize MaxMessages ExpireUnread Sync Create + \ Remove Expunge CopyArrivalDate SyncState contained + +syn region mbsChannel start="^Channel" end="^$" end="\%$" contains=@mbsCConfItem,mbsCommentL,mbsError transparent + +" }}} + +" Groups {{{ + +syn match mbsGConfGroupOpt '\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@!-]\|\\.\)\+' display contained contains=mbsName nextgroup=mbsGConfChannelOpt +syn match mbsGConfStGroup '^Group\s\+\ze.*$' contains=mbsGConfItemK contained nextgroup=mbsGConfGroupOpt transparent +syn match mbsGConfChannelOpt '.*$' display contained +syn match mbsGConfStChannel '^Channels\?\s\+\ze.*$' contains=mbsGConfItemK contained nextgroup=mbsGConfChannelOpt transparent + +syn cluster mbsGConfItem contains=mbsGConfSt.* + +syn keyword mbsGConfItemK Group Channel[s] contained + +syn region mbsGroup start="^Group" end="^$" end="\%$" contains=@mbsGConfItem,mbsError transparent + +" }}} + +" Global Options {{{ + +syn match mbsFSync '^FSync\s\+\ze.*$' contains=mbsGlobOptItemK nextgroup=mbsBool transparent +syn match mbsFieldDelimiter '^FieldDelimiter\s\+\ze.*$' contains=mbsGlobOptItemK nextgroup=mbsPath transparent +syn match mbsBufferLimit '^BufferLimit\s\+\ze.*$' contains=mbsGlobOptItemK nextgroup=mbsSize transparent + +syn keyword mbsGlobOptItemK FSync FieldDelimiter BufferLimit contained +" }}} + +" Highlights {{{ + +hi def link mbsError Error + +hi def link mbsCommentL Comment + +hi def link mbsNumber Number +hi def link mbsSizeUnit Type +hi def link mbsPath String +hi def link mbsString String +hi def link mbsCommand String +hi def link mbsCommandPrompt Operator +hi def link mbsName Constant +hi def link mbsBool Boolean + +hi def link mbsGlobConfItemK Statement + +hi def link mbsMdSConfItemK Statement +hi def link mbsMdSConfSubFoldersOpt Keyword + +hi def link mbsIAConfItemK Statement +hi def link mbsIAConfTLSTypeOpt Keyword +hi def link mbsIAConfSSLVersionsOpt Keyword + +hi def link mbsISConfItemK Statement + +hi def link mbsCConfItemK Statement +hi def link mbsCConfProxOptOp Operator +hi def link mbsCConfPatternOpt String +hi def link mbsCConfPatternOptOp Operator +hi def link mbsCConfSyncOpt Keyword +hi def link mbsCConfManipOpt Keyword +hi def link mbsCConfSyncStateOptOp Operator + +hi def link mbsGConfItemK Statement +hi def link mbsGConfChannelOpt String + +hi def link mbsGlobOptItemK Statement +" }}} + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/mediawiki.vim b/.config/vim/syntax/mediawiki.vim new file mode 100644 index 0000000..8ac30b9 --- /dev/null +++ b/.config/vim/syntax/mediawiki.vim @@ -0,0 +1,292 @@ +" mediawiki.vim (formerly named Wikipedia.vim) +" +" Vim syntax file +" Language: MediaWiki +" Maintainer: Avid Seeker +" Home: http://en.wikipedia.org/wiki/Wikipedia:Text_editor_support#Vim +" Last Change: 2024 Jul 14 +" Credits: [[User:Unforgettableid]] [[User:Aepd87]], [[User:Danny373]], [[User:Ingo Karkat]], et al. +" +" Published on Wikipedia in 2003-04 and declared authorless. +" +" Based on the HTML syntax file. Probably too closely based, in fact. +" There may well be name collisions everywhere, but ignorance is bliss, +" so they say. +" + +if exists("b:current_syntax") + finish +endif + +syntax case ignore +syntax spell toplevel + +" Mark illegal characters +sy match htmlError "[<>&]" + +" Tags +sy region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,@htmlPreproc +sy region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,@htmlPreproc +sy match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=@htmlPreproc +sy region htmlEndTag start=++ contains=htmlTagN,htmlTagError +sy region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster +sy match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster +sy match htmlTagN contained +]<"ms=s+1 + +" Allowed HTML tag names +sy keyword htmlTagName contained big blockquote br caption center cite code +sy keyword htmlTagName contained dd del div dl dt font hr ins li +sy keyword htmlTagName contained ol p pre rb rp rt ruby s small span strike sub +sy keyword htmlTagName contained sup table td th tr tt ul var +sy match htmlTagName contained "\<\(b\|i\|u\|h[1-6]\|em\|strong\)\>" +" Allowed Wiki tag names +sy keyword htmlTagName contained math nowiki references source syntaxhighlight + +" Allowed arg names +sy keyword htmlArg contained align lang dir width height nowrap bgcolor clear +sy keyword htmlArg contained noshade cite datetime size face color type start +sy keyword htmlArg contained value compact summary border frame rules +sy keyword htmlArg contained cellspacing cellpadding valign char charoff +sy keyword htmlArg contained colgroup col span abbr axis headers scope rowspan +sy keyword htmlArg contained colspan id class name style title + +" Special characters +sy match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};" + +" Comments +sy region htmlComment start=++ contains=htmlCommentPart,htmlCommentError +sy match htmlCommentError contained "[^>+ + +if !exists("html_no_rendering") + sy cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,@htmlPreproc + + sy region htmlBold start="" end=""me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic + sy region htmlBold start="" end=""me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic + sy region htmlBoldUnderline contained start="" end=""me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic + sy region htmlBoldItalic contained start="" end=""me=e-4 contains=@htmlTop,htmlBoldItalicUnderline + sy region htmlBoldItalic contained start="" end=""me=e-5 contains=@htmlTop,htmlBoldItalicUnderline + sy region htmlBoldUnderlineItalic contained start="" end=""me=e-4 contains=@htmlTop + sy region htmlBoldUnderlineItalic contained start="" end=""me=e-5 contains=@htmlTop + sy region htmlBoldItalicUnderline contained start="" end=""me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic + + sy region htmlUnderline start="" end=""me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic + sy region htmlUnderlineBold contained start="" end=""me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic + sy region htmlUnderlineBold contained start="" end=""me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic + sy region htmlUnderlineItalic contained start="" end=""me=e-4 contains=@htmlTop,htmlUnderlineItalicBold + sy region htmlUnderlineItalic contained start="" end=""me=e-5 contains=@htmlTop,htmlUnderlineItalicBold + sy region htmlUnderlineItalicBold contained start="" end=""me=e-4 contains=@htmlTop + sy region htmlUnderlineItalicBold contained start="" end=""me=e-9 contains=@htmlTop + sy region htmlUnderlineBoldItalic contained start="" end=""me=e-4 contains=@htmlTop + sy region htmlUnderlineBoldItalic contained start="" end=""me=e-5 contains=@htmlTop + + sy region htmlItalic start="" end=""me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline + sy region htmlItalic start="" end=""me=e-5 contains=@htmlTop + sy region htmlItalicBold contained start="" end=""me=e-4 contains=@htmlTop,htmlItalicBoldUnderline + sy region htmlItalicBold contained start="" end=""me=e-9 contains=@htmlTop,htmlItalicBoldUnderline + sy region htmlItalicBoldUnderline contained start="" end=""me=e-4 contains=@htmlTop + sy region htmlItalicUnderline contained start="" end=""me=e-4 contains=@htmlTop,htmlItalicUnderlineBold + sy region htmlItalicUnderlineBold contained start="" end=""me=e-4 contains=@htmlTop + sy region htmlItalicUnderlineBold contained start="" end=""me=e-9 contains=@htmlTop + + sy region htmlH1 start="" end=""me=e-5 contains=@htmlTop + sy region htmlH2 start="" end=""me=e-5 contains=@htmlTop + sy region htmlH3 start="" end=""me=e-5 contains=@htmlTop + sy region htmlH4 start="" end=""me=e-5 contains=@htmlTop + sy region htmlH5 start="" end=""me=e-5 contains=@htmlTop + sy region htmlH6 start="" end=""me=e-5 contains=@htmlTop +endif + + +" No htmlTop and wikiPre inside HTML preformatted areas, because +" MediaWiki renders everything in there literally (HTML tags and +" entities, too):
     tags work as the combination of  and
    +" the standard HTML 
     tag: the content will preformatted, and it
    +" will not be parsed, but shown as in the wikitext source.
    +"
    +" With wikiPre, indented lines would be rendered differently from
    +" unindented lines.
    +sy match htmlPreTag       /[^>]*>/         contains=htmlTag
    +sy match htmlPreEndTag    /<\/pre>/       contains=htmlEndTag
    +sy match wikiNowikiTag    //      contains=htmlTag
    +sy match wikiNowikiEndTag /<\/nowiki>/    contains=htmlEndTag
    +sy match wikiSourceTag    /]\+>/ contains=htmlTag
    +sy match wikiSourceEndTag /<\/source>/    contains=htmlEndTag
    +sy match wikiSyntaxHLTag    /]\+>/ contains=htmlTag
    +sy match wikiSyntaxHLEndTag /<\/syntaxhighlight>/    contains=htmlEndTag
    +
    +" Note: Cannot use 'start="
    "rs=e', so still have the 
     tag
    +" highlighted correctly via separate sy-match. Unfortunately, this will
    +" also highlight 
     tags inside the preformatted region.
    +sy region htmlPre    start="[^>]*>"                 end="<\/pre>"me=e-6    contains=htmlPreTag
    +sy region wikiNowiki start=""              end="<\/nowiki>"me=e-9 contains=wikiNowikiTag
    +sy region wikiSource start="]\+>"         keepend end="<\/source>"me=e-9 contains=wikiSourceTag
    +sy region wikiSyntaxHL start="]\+>" keepend end="<\/syntaxhighlight>"me=e-18 contains=wikiSyntaxHLTag
    +
    +sy include @TeX syntax/tex.vim
    +unlet b:current_syntax
    +sy region wikiTeX matchgroup=htmlTag start="" end="<\/math>"  contains=@texMathZoneGroup,wikiNowiki,wikiNowikiEndTag
    +sy region wikiRef matchgroup=htmlTag start=""  end="<\/ref>"   contains=wikiNowiki,wikiNowikiEndTag
    +
    +sy cluster wikiText contains=wikiLink,wikiTemplate,wikiNowiki,wikiNowikiEndTag,wikiItalic,wikiBold,wikiBoldAndItalic
    +
    +" Tables
    +sy cluster wikiTableFormat contains=wikiTemplate,htmlString,htmlArg,htmlValue
    +sy region wikiTable matchgroup=wikiTableSeparator start="{|" end="|}" contains=wikiTableHeaderLine,wikiTableCaptionLine,wikiTableNewRow,wikiTableHeadingCell,wikiTableNormalCell,@wikiText
    +sy match  wikiTableSeparator /^!/ contained
    +sy match  wikiTableSeparator /^|/ contained
    +sy match  wikiTableSeparator /^|[+-]/ contained
    +sy match  wikiTableSeparator /||/ contained
    +sy match  wikiTableSeparator /!!/ contained
    +sy match  wikiTableFormatEnd /[!|]/ contained
    +sy match  wikiTableHeadingCell /\(^!\|!!\)\([^!|]*|\)\?.*/ contains=wikiTableSeparator,@wikiText,wikiTableHeadingFormat
    +" Require at least one '=' in the format, to avoid spurious matches (e.g.
    +" the | in [[foo|bar]] might be taken as the final |, indicating the beginning
    +" of the cell). The same is done for wikiTableNormalFormat below.
    +sy match  wikiTableHeadingFormat /\%(^!\|!!\)[^!|]\+=[^!|]\+\([!|]\)\(\1\)\@!/me=e-1 contains=@wikiTableFormat,wikiTableSeparator nextgroup=wikiTableFormatEnd
    +sy match  wikiTableNormalCell /\(^|\|||\)\([^|]*|\)\?.*/ contains=wikiTableSeparator,@wikiText,wikiTableNormalFormat
    +sy match  wikiTableNormalFormat /\(^|\|||\)[^|]\+=[^|]\+||\@!/me=e-1 contains=@wikiTableFormat,wikiTableSeparator nextgroup=wikiTableFormatEnd
    +sy match  wikiTableHeaderLine /\(^{|\)\@<=.*$/ contained contains=@wikiTableFormat
    +sy match  wikiTableCaptionLine /^|+.*$/ contained contains=wikiTableSeparator,@wikiText
    +sy match  wikiTableNewRow /^|-.*$/ contained contains=wikiTableSeparator,@wikiTableFormat
    +
    +sy cluster wikiTop contains=@Spell,wikiLink,wikiNowiki,wikiNowikiEndTag
    +
    +sy region wikiItalic        start=+'\@\[\]]\+/hs=s+2 contained
    +sy region wikiTemplate start="{{" end="}}" keepend extend contains=wikiNowiki,wikiNowikiEndTag,wikiTemplateName,wikiTemplateParam,wikiTemplate,wikiLink
    +sy region wikiTemplateParam start="{{{\s*\d" end="}}}" extend contains=wikiTemplateName
    +
    +sy match wikiParaFormatChar /^[\:|\*|;|#]\+/
    +sy match wikiParaFormatChar /^-----*/
    +sy match wikiPre            /^\ .*$/         contains=wikiNowiki,wikiNowikiEndTag
    +
    +" HTML highlighting
    +
    +hi def link htmlTag            Function
    +hi def link htmlEndTag         Identifier
    +hi def link htmlArg            Type
    +hi def link htmlTagName        htmlStatement
    +hi def link htmlSpecialTagName Exception
    +hi def link htmlValue          String
    +hi def link htmlSpecialChar    Special
    +
    +if !exists("html_no_rendering")
    +  hi def link htmlTitle Title
    +  hi def link htmlH1    htmlTitle
    +  hi def link htmlH2    htmlTitle
    +  hi def link htmlH3    htmlTitle
    +  hi def link htmlH4    htmlTitle
    +  hi def link htmlH5    htmlTitle
    +  hi def link htmlH6    htmlTitle
    +
    +  hi def link htmlPreProc          PreProc
    +  hi def link htmlHead             htmlPreProc
    +  hi def link htmlPreProcAttrName  htmlPreProc
    +  hi def link htmlPreStmt          htmlPreProc
    +
    +  hi def link htmlSpecial          Special
    +  hi def link htmlCssDefinition    htmlSpecial
    +  hi def link htmlEvent            htmlSpecial
    +  hi def link htmlSpecialChar      htmlSpecial
    +
    +  hi def link htmlComment          Comment
    +  hi def link htmlCommentPart      htmlComment
    +  hi def link htmlCssStyleComment  htmlComment
    +
    +  hi def link htmlString           String
    +  hi def link htmlPreAttr          htmlString
    +  hi def link htmlValue            htmlString
    +
    +  hi def link htmlError            Error
    +  hi def link htmlBadArg           htmlError
    +  hi def link htmlBadTag           htmlError
    +  hi def link htmlCommentError     htmlError
    +  hi def link htmlPreError         htmlError
    +  hi def link htmlPreProcAttrError htmlError
    +  hi def link htmlTagError         htmlError
    +
    +  hi def link htmlStatement        Statement
    +
    +  hi def link htmlConstant         Constant
    +
    +  hi def link htmlBoldItalicUnderline htmlBoldUnderlineItalic
    +  hi def link htmlUnderlineItalicBold htmlBoldUnderlineItalic
    +  hi def link htmlUnderlineBoldItalic htmlBoldUnderlineItalic
    +  hi def link htmlItalicBoldUnderline htmlBoldUnderlineItalic
    +  hi def link htmlItalicUnderlineBold htmlBoldUnderlineItalic
    +
    +  hi def link htmlItalicBold          htmlBoldItalic
    +  hi def link htmlItalicUnderline     htmlUnderlineItalic
    +  hi def link htmlUnderlineBold       htmlBoldUnderline
    +
    +  hi def link htmlLink Underlined
    +
    +  if !exists("html_style_rendering")
    +    hi def htmlBold                term=bold                  cterm=bold                  gui=bold
    +    hi def htmlBoldUnderline       term=bold,underline        cterm=bold,underline        gui=bold,underline
    +    hi def htmlBoldItalic          term=bold,italic           cterm=bold,italic           gui=bold,italic
    +    hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
    +    hi def htmlUnderline           term=underline             cterm=underline             gui=underline
    +    hi def htmlUnderlineItalic     term=italic,underline      cterm=italic,underline      gui=italic,underline
    +    hi def htmlItalic              term=italic                cterm=italic                gui=italic
    +  endif
    +endif
    +
    +" Wiki highlighting
    +
    +hi def link wikiItalic        htmlItalic
    +hi def link wikiBold          htmlBold
    +hi def link wikiBoldItalic    htmlBoldItalic
    +hi def link wikiItalicBold    htmlBoldItalic
    +hi def link wikiBoldAndItalic htmlBoldItalic
    +
    +hi def link wikiH1 htmlTitle
    +hi def link wikiH2 htmlTitle
    +hi def link wikiH3 htmlTitle
    +hi def link wikiH4 htmlTitle
    +hi def link wikiH5 htmlTitle
    +hi def link wikiH6 htmlTitle
    +
    +hi def link wikiLink           htmlLink
    +hi def link wikiTemplate       htmlSpecial
    +hi def link wikiTemplateParam  htmlSpecial
    +hi def link wikiTemplateName   Type
    +hi def link wikiParaFormatChar htmlSpecial
    +hi def link wikiPre            htmlConstant
    +hi def link wikiRef            htmlComment
    +
    +hi def link htmlPre            wikiPre
    +hi def link wikiSource         wikiPre
    +hi def link wikiSyntaxHL       wikiPre
    +
    +hi def link wikiTableSeparator Statement
    +hi def link wikiTableFormatEnd wikiTableSeparator
    +hi def link wikiTableHeadingCell htmlBold
    +
    +let b:current_syntax = "mediawiki"
    diff --git a/.config/vim/syntax/mel.vim b/.config/vim/syntax/mel.vim
    new file mode 100644
    index 0000000..f0f1bca
    --- /dev/null
    +++ b/.config/vim/syntax/mel.vim
    @@ -0,0 +1,108 @@
    +" Vim syntax file
    +" Language:	MEL (Maya Extension Language)
    +" Maintainer:	Robert Minsk 
    +" Last Change:	May 27 1999
    +" Based on:	Bram Moolenaar  C syntax file
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" when wanted, highlight trailing white space and spaces before tabs
    +if exists("mel_space_errors")
    +  sy match	melSpaceError	"\s\+$"
    +  sy match	melSpaceError	" \+\t"me=e-1
    +endif
    +
    +" A bunch of usefull MEL keyworks
    +sy keyword	melBoolean	true false yes no on off
    +
    +sy keyword	melFunction	proc
    +sy match	melIdentifier	"\$\(\a\|_\)\w*"
    +
    +sy keyword	melStatement	break continue return
    +sy keyword	melConditional	if else switch
    +sy keyword	melRepeat	while for do in
    +sy keyword	melLabel	case default
    +sy keyword	melOperator	size eval env exists whatIs
    +sy keyword	melKeyword	alias
    +sy keyword	melException	catch error warning
    +
    +sy keyword	melInclude	source
    +
    +sy keyword	melType		int float string vector matrix
    +sy keyword	melStorageClass	global
    +
    +sy keyword	melDebug	trace
    +
    +sy keyword	melTodo		contained TODO FIXME XXX
    +
    +" MEL data types
    +sy match	melCharSpecial	contained "\\[ntr\\"]"
    +sy match	melCharError	contained "\\[^ntr\\"]"
    +
    +sy region	melString	start=+"+ skip=+\\"+ end=+"+ contains=melCharSpecial,melCharError
    +
    +sy case ignore
    +sy match	melInteger	"\<\d\+\(e[-+]\=\d\+\)\=\>"
    +sy match	melFloat	"\<\d\+\(e[-+]\=\d\+\)\=f\>"
    +sy match	melFloat	"\<\d\+\.\d*\(e[-+]\=\d\+\)\=f\=\>"
    +sy match	melFloat	"\.\d\+\(e[-+]\=\d\+\)\=f\=\>"
    +sy case match
    +
    +sy match	melCommaSemi	contained "[,;]"
    +sy region	melMatrixVector	start=/<>/ contains=melInteger,melFloat,melIdentifier,melCommaSemi
    +
    +sy cluster	melGroup	contains=melFunction,melStatement,melConditional,melLabel,melKeyword,melStorageClass,melTODO,melCharSpecial,melCharError,melCommaSemi
    +
    +" catch errors caused by wrong parenthesis
    +sy region	melParen	transparent start='(' end=')' contains=ALLBUT,@melGroup,melParenError,melInParen
    +sy match	melParenError	")"
    +sy match	melInParen	contained "[{}]"
    +
    +" comments
    +sy region	melComment	start="/\*" end="\*/" contains=melTodo,melSpaceError
    +sy match	melComment	"//.*" contains=melTodo,melSpaceError
    +sy match	melCommentError "\*/"
    +
    +sy region	melQuestionColon matchgroup=melConditional transparent start='?' end=':' contains=ALLBUT,@melGroup
    +
    +if !exists("mel_minlines")
    +  let mel_minlines=15
    +endif
    +exec "sy sync ccomment melComment minlines=" . mel_minlines
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link melBoolean	Boolean
    +hi def link melFunction	Function
    +hi def link melIdentifier	Identifier
    +hi def link melStatement	Statement
    +hi def link melConditional Conditional
    +hi def link melRepeat	Repeat
    +hi def link melLabel	Label
    +hi def link melOperator	Operator
    +hi def link melKeyword	Keyword
    +hi def link melException	Exception
    +hi def link melInclude	Include
    +hi def link melType	Type
    +hi def link melStorageClass StorageClass
    +hi def link melDebug	Debug
    +hi def link melTodo	Todo
    +hi def link melCharSpecial SpecialChar
    +hi def link melString	String
    +hi def link melInteger	Number
    +hi def link melFloat	Float
    +hi def link melMatrixVector Float
    +hi def link melComment	Comment
    +hi def link melError	Error
    +hi def link melSpaceError	melError
    +hi def link melCharError	melError
    +hi def link melParenError	melError
    +hi def link melInParen	melError
    +hi def link melCommentError melError
    +
    +
    +let b:current_syntax = "mel"
    diff --git a/.config/vim/syntax/mermaid.vim b/.config/vim/syntax/mermaid.vim
    new file mode 100644
    index 0000000..5a9a217
    --- /dev/null
    +++ b/.config/vim/syntax/mermaid.vim
    @@ -0,0 +1,131 @@
    +" Vim syntax file
    +" Language:     Mermaid
    +" Maintainer:   Craig MacEahern 
    +" Filenames:    *.mmd
    +" Last Change:  2023 Dec 26
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syntax iskeyword @,48-57,192-255,$,_,-,:
    +syntax keyword mermaidKeyword
    +	\ _blank
    +	\ _self
    +	\ _parent
    +	\ _top
    +	\ ::icon
    +	\ accDescr
    +	\ accTitle
    +	\ actor
    +	\ activate
    +	\ alt
    +	\ and
    +	\ as
    +	\ autonumber
    +	\ branch
    +	\ break
    +	\ callback
    +	\ checkout
    +	\ class
    +	\ classDef
    +	\ classDiagram
    +	\ click
    +	\ commit
    +	\ commitgitGraph
    +	\ critical
    +	\ dataFormat
    +	\ dateFormat
    +	\ deactivate
    +	\ direction
    +	\ element
    +	\ else
    +	\ end
    +	\ erDiagram
    +	\ flowchart
    +	\ gantt
    +	\ gitGraph
    +	\ graph
    +	\ journey
    +	\ link
    +	\ LR
    +	\ TD
    +	\ TB
    +	\ RL
    +	\ loop
    +	\ merge
    +	\ mindmap root
    +	\ Note
    +	\ Note right of
    +	\ Note left of
    +	\ Note over
    +	\ note
    +	\ note right of
    +	\ note left of
    +	\ note over
    +	\ opt
    +	\ option
    +	\ par
    +	\ participant
    +	\ pie
    +	\ rect
    +	\ requirement
    +	\ rgb
    +	\ section
    +	\ sequenceDiagram
    +	\ state
    +	\ stateDiagram
    +	\ stateDiagram-v2
    +	\ style
    +	\ subgraph
    +	\ title
    +highlight link mermaidKeyword Keyword
    +
    +syntax match mermaidStatement "|"
    +syntax match mermaidStatement "\~\~\~"
    +syntax match mermaidStatement "--"
    +syntax match mermaidStatement "\%(<|\|[<*o]\)\?\%(--\|\.\.\)\%(|>\|[>*o]\)\?"
    +syntax match mermaidStatement "-\{2,4}[>ox-]"
    +syntax match mermaidStatement "\.-[>ox]"
    +syntax match mermaidStatement "-\."
    +syntax match mermaidStatement "-\.\{1,3}-"
    +syntax match mermaidStatement "=="
    +syntax match mermaidStatement "=\{2,4}[>ox=]"
    +syntax match mermaidStatement "&"
    +syntax match mermaidStatement "--\?[>x)]>\?[+-]\?"
    +syntax match mermaidStatement "x--x"
    +syntax match mermaidStatement "o--o\?"
    +syntax match mermaidStatement "<-->\?"
    +syntax match mermaidStatement ":::"
    +syntax match mermaidStatement "||--o{"
    +highlight link mermaidStatement Statement
    +
    +" FIXME: This unexpectedly matches flow chart node `id1(text)` or others.
    +"syntax match mermaidIdentifier "[\+-]\?\w\+(.*)[\$\*]\?"
    +"highlight link mermaidIdentifier Identifier
    +
    +syntax match mermaidType "[\+-\#\~]\?\c\%(const\s\+\|\*\s*\)*\%(unsigned\s\+\)\?\%(int\|u\?int\%(8\|16\|32\|64\)_t\|char\|long\|long\s\+long\)\>\%(\s\+const\|\s*[\*&]\)*"
    +syntax match mermaidType "[\+-\#\~]\?\c\%(const\s\+\|\*\s*\)*\%(double\|float\|String\|bool\)\>\%(\s\+const\|\s*[\*&]\)*"
    +syntax match mermaidType "[\+-\#\~]\?\cBigDecimal\>"
    +syntax match mermaidType "[\+-\#\~]\?\cList\~.\+\~"
    +syntax match mermaidType "<<\w\+>>"
    +highlight link mermaidType Type
    +
    +syntax match mermaidComment "%%.*$"
    +highlight link mermaidComment Comment
    +
    +syntax region mermaidDirective start="%%{" end="\}%%"
    +highlight link mermaidDirective PreProc
    +
    +syntax region mermaidString start=/"/ skip=/\\"/ end=/"/
    +highlight link mermaidString String
    +
    +let b:current_syntax = "mermaid"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim:set sw=2:
    diff --git a/.config/vim/syntax/meson.vim b/.config/vim/syntax/meson.vim
    new file mode 100644
    index 0000000..4eaf696
    --- /dev/null
    +++ b/.config/vim/syntax/meson.vim
    @@ -0,0 +1,162 @@
    +" Vim syntax file
    +" Language:	Meson
    +" License:	VIM License
    +" Maintainer:	Nirbheek Chauhan 
    +"		Liam Beguin 
    +" Last Change:	2023 May 27
    +" Credits:	Zvezdan Petkovic 
    +"		Neil Schemenauer 
    +"		Dmitry Vasiliev
    +"
    +"		This version is copied and edited from python.vim
    +"		It's very basic, and doesn't do many things I'd like it to
    +"		For instance, it should show errors for syntax that is valid in
    +"		Python but not in Meson.
    +"
    +" Optional highlighting can be controlled using these variables.
    +"
    +"   let meson_space_error_highlight = 1
    +"
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" We need nocompatible mode in order to continue lines with backslashes.
    +" Original setting will be restored.
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +" http://mesonbuild.com/Syntax.html
    +syn keyword mesonConditional	elif else if endif
    +syn keyword mesonRepeat		foreach endforeach
    +syn keyword mesonOperator	and not or in
    +syn keyword mesonStatement	continue break
    +
    +syn match   mesonComment	"#.*$" contains=mesonTodo,@Spell
    +syn keyword mesonTodo		FIXME NOTE NOTES TODO XXX contained
    +
    +" Strings can either be single quoted or triple counted across multiple lines,
    +" but always with a '
    +syn region  mesonString
    +      \ start="\z('\)" end="\z1" skip="\\\\\|\\\z1"
    +      \ contains=mesonEscape,@Spell
    +syn region  mesonString
    +      \ start="\z('''\)" end="\z1" keepend
    +      \ contains=mesonEscape,mesonSpaceError,@Spell
    +
    +syn match   mesonEscape	"\\[abfnrtv'\\]" contained
    +syn match   mesonEscape	"\\\o\{1,3}" contained
    +syn match   mesonEscape	"\\x\x\{2}" contained
    +syn match   mesonEscape	"\%(\\u\x\{4}\|\\U\x\{8}\)" contained
    +" Meson allows case-insensitive Unicode IDs: http://www.unicode.org/charts/
    +syn match   mesonEscape	"\\N{\a\+\%(\s\a\+\)*}" contained
    +syn match   mesonEscape	"\\$"
    +
    +" Meson only supports integer numbers
    +" http://mesonbuild.com/Syntax.html#numbers
    +syn match   mesonNumber	"\<\d\+\>"
    +syn match   mesonNumber	"\<0x\x\+\>"
    +syn match   mesonNumber	"\<0o\o\+\>"
    +
    +" booleans
    +syn keyword mesonBoolean	false true
    +
    +" Built-in functions
    +syn keyword mesonBuiltin
    +  \ add_global_arguments
    +  \ add_global_link_arguments
    +  \ add_languages
    +  \ add_project_arguments
    +  \ add_project_dependencies
    +  \ add_project_link_arguments
    +  \ add_test_setup
    +  \ alias_target
    +  \ assert
    +  \ benchmark
    +  \ both_libraries
    +  \ build_machine
    +  \ build_target
    +  \ configuration_data
    +  \ configure_file
    +  \ custom_target
    +  \ declare_dependency
    +  \ dependency
    +  \ disabler
    +  \ environment
    +  \ error
    +  \ executable
    +  \ files
    +  \ find_library
    +  \ find_program
    +  \ generator
    +  \ get_option
    +  \ get_variable
    +  \ gettext
    +  \ host_machine
    +  \ import
    +  \ include_directories
    +  \ install_data
    +  \ install_headers
    +  \ install_man
    +  \ install_subdir
    +  \ install_symlink
    +  \ install_emptydir
    +  \ is_disabler
    +  \ is_variable
    +  \ jar
    +  \ join_paths
    +  \ library
    +  \ meson
    +  \ message
    +  \ option
    +  \ project
    +  \ run_command
    +  \ run_target
    +  \ set_variable
    +  \ shared_library
    +  \ shared_module
    +  \ static_library
    +  \ structured_sources
    +  \ subdir
    +  \ subdir_done
    +  \ subproject
    +  \ summary
    +  \ target_machine
    +  \ test
    +  \ unset_variable
    +  \ vcs_tag
    +  \ warning
    +  \ range
    +  \ debug
    +
    +if exists("meson_space_error_highlight")
    +  " trailing whitespace
    +  syn match   mesonSpaceError	display excludenl "\s\+$"
    +  " mixed tabs and spaces
    +  syn match   mesonSpaceError	display " \+\t"
    +  syn match   mesonSpaceError	display "\t\+ "
    +endif
    +
    +" The default highlight links.  Can be overridden later.
    +hi def link mesonStatement	Statement
    +hi def link mesonConditional	Conditional
    +hi def link mesonRepeat		Repeat
    +hi def link mesonOperator	Operator
    +hi def link mesonComment	Comment
    +hi def link mesonTodo		Todo
    +hi def link mesonString		String
    +hi def link mesonEscape		Special
    +hi def link mesonNumber		Number
    +hi def link mesonBuiltin	Function
    +hi def link mesonBoolean	Boolean
    +if exists("meson_space_error_highlight")
    +  hi def link mesonSpaceError	Error
    +endif
    +
    +let b:current_syntax = "meson"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim:set sw=2 sts=2 ts=8 noet:
    diff --git a/.config/vim/syntax/messages.vim b/.config/vim/syntax/messages.vim
    new file mode 100644
    index 0000000..8b970aa
    --- /dev/null
    +++ b/.config/vim/syntax/messages.vim
    @@ -0,0 +1,74 @@
    +" Vim syntax file
    +" Language:         /var/log/messages file
    +" Maintainer:       Yakov Lerner 
    +" Latest Revision:  2008-06-29
    +" Changes:          2008-06-29 support for RFC3339 tuimestamps James Vega
    +" 		    2016 Jan 19: messagesDate changed by Bram
    +" 		    2021 Jan 27: messagesHourRFC3339 changed from #946
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn match   messagesBegin       display '^' nextgroup=messagesDate,messagesDateRFC3339
    +
    +syn match   messagesDate        contained display '[[:lower:][:upper:]][[:lower:][:upper:]][[:lower:][:upper:]] [ 0-9]\d *'
    +                                \ nextgroup=messagesHour
    +
    +syn match   messagesHour        contained display '\d\d:\d\d:\d\d\s*'
    +                                \ nextgroup=messagesHost
    +
    +syn match   messagesDateRFC3339 contained display '\d\{4}-\d\d-\d\d'
    +                                \ nextgroup=messagesRFC3339T
    +
    +syn match   messagesRFC3339T    contained display '\cT'
    +                                \ nextgroup=messagesHourRFC3339
    +
    +syn match   messagesHourRFC3339 contained display '\c\d\d:\d\d:\d\d\(\.\d\+\)\=\([+-]\d\d:\d\d\|Z\)\s*'
    +                                \ nextgroup=messagesHost
    +
    +syn match   messagesHost        contained display '\S*\s*'
    +                                \ nextgroup=messagesLabel
    +
    +syn match   messagesLabel       contained display '\s*[^:]*:\s*'
    +                                \ nextgroup=messagesText contains=messagesKernel,messagesPID
    +
    +syn match   messagesPID         contained display '\[\zs\d\+\ze\]'
    +
    +syn match   messagesKernel      contained display 'kernel:'
    +
    +
    +syn match   messagesIP          '\d\+\.\d\+\.\d\+\.\d\+'
    +
    +syn match   messagesURL         '\w\+://\S\+'
    +
    +syn match   messagesText        contained display '.*'
    +                                \ contains=messagesNumber,messagesIP,messagesURL,messagesError
    +
    +syn match   messagesNumber      contained '0x[0-9a-fA-F]*\|\[<[0-9a-f]\+>\]\|\<\d[0-9a-fA-F]*'
    +
    +syn match   messagesError       contained '\c.*\<\(FATAL\|ERROR\|ERRORS\|FAILED\|FAILURE\).*'
    +
    +
    +hi def link messagesDate        Constant
    +hi def link messagesHour        Type
    +hi def link messagesDateRFC3339 Constant
    +hi def link messagesHourRFC3339 Type
    +hi def link messagesRFC3339T    Normal
    +hi def link messagesHost        Identifier
    +hi def link messagesLabel       Operator
    +hi def link messagesPID         Constant
    +hi def link messagesKernel      Special
    +hi def link messagesError       ErrorMsg
    +hi def link messagesIP          Constant
    +hi def link messagesURL         Underlined
    +hi def link messagesText        Normal
    +hi def link messagesNumber      Number
    +
    +let b:current_syntax = "messages"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/mf.vim b/.config/vim/syntax/mf.vim
    new file mode 100644
    index 0000000..d1faa19
    --- /dev/null
    +++ b/.config/vim/syntax/mf.vim
    @@ -0,0 +1,308 @@
    +vim9script
    +
    +# Vim syntax file
    +# Language:           METAFONT
    +# Maintainer:         Nicola Vitacolonna 
    +# Former Maintainers: Andreas Scherer 
    +# Latest Revision:    2022 Aug 12
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +# Deprecation warnings: to be removed eventually
    +if exists("g:plain_mf_macros")
    +  echomsg "[mf] g:plain_mf_macros is deprecated: use g:mf_plain_macros instead."
    +endif
    +if exists("g:plain_mf_modes")
    +  echomsg "[mf] g:plain_mf_modes is deprecated: use g:mf_plain_modes instead."
    +endif
    +if exists("g:other_mf_macros")
    +  echomsg "[mf] g:other_mf_macros is deprecated: use g:mf_other_macros instead."
    +endif
    +
    +syn iskeyword @,_
    +
    +# METAFONT 'primitives' as defined in chapter 25 of 'The METAFONTbook'
    +# Page 210: 'boolean expressions'
    +syn keyword mfBoolExp        and charexists false known not odd or true unknown
    +
    +# Page 210: 'numeric expression'
    +syn keyword mfNumExp         ASCII angle cosd directiontime floor hex length
    +syn keyword mfNumExp         mexp mlog normaldeviate oct sind sqrt totalweight
    +syn keyword mfNumExp         turningnumber uniformdeviate xpart xxpart xypart
    +syn keyword mfNumExp         ypart yxpart yypart
    +
    +# Page 211: 'internal quantities'
    +syn keyword mfInternal       autorounding boundarychar charcode chardp chardx
    +syn keyword mfInternal       chardy charext charht charic charwd day designsize
    +syn keyword mfInternal       fillin fontmaking granularity hppp jobname month
    +syn keyword mfInternal       pausing proofing showstopping smoothing time
    +syn keyword mfInternal       tracingcapsules tracingchoices tracingcommands
    +syn keyword mfInternal       tracingedges tracingequations tracingmacros
    +syn keyword mfInternal       tracingonline tracingoutput tracingpens
    +syn keyword mfInternal       tracingrestores tracingspecs tracingstats
    +syn keyword mfInternal       tracingtitles turningcheck vppp warningcheck
    +syn keyword mfInternal       xoffset year yoffset
    +
    +# Page 212: 'pair expressions'
    +syn keyword mfPairExp        of penoffset point postcontrol precontrol rotated
    +syn keyword mfPairExp        scaled shifted slanted transformed xscaled yscaled
    +syn keyword mfPairExp        zscaled
    +
    +# Page 213: 'path expressions'
    +syn keyword mfPathExp        atleast controls curl cycle makepath reverse
    +syn keyword mfPathExp        subpath tension
    +
    +# Page 214: 'pen expressions'
    +syn keyword mfPenExp         makepen nullpen pencircle
    +
    +# Page 214: 'picture expressions'
    +syn keyword mfPicExp         nullpicture
    +
    +# Page 214: 'string expressions'
    +syn keyword mfStringExp      char decimal readstring str substring
    +
    +# Page 217: 'commands and statements'
    +syn keyword mfCommand        addto also at batchmode contour cull delimiters
    +syn keyword mfCommand        display doublepath dropping dump end errhelp
    +syn keyword mfCommand        errmessage errorstopmode everyjob from interim
    +syn keyword mfCommand        inwindow keeping let message newinternal
    +syn keyword mfCommand        nonstopmode numspecial openwindow outer randomseed
    +syn keyword mfCommand        save scrollmode shipout show showdependencies
    +syn keyword mfCommand        showstats showtoken showvariable special to withpen
    +syn keyword mfCommand        withweight
    +
    +# Page 56: 'types'
    +syn keyword mfType           boolean numeric pair path pen picture string
    +syn keyword mfType           transform
    +
    +# Page 155: 'grouping'
    +syn keyword mfStatement      begingroup endgroup
    +
    +# Page 165: 'definitions'
    +syn keyword mfDefinition     def enddef expr primary primarydef secondary
    +syn keyword mfDefinition     secondarydef suffix tertiary tertiarydef text
    +syn keyword mfDefinition     vardef
    +
    +# Page 169: 'conditions and loops'
    +syn keyword mfCondition      else elseif endfor exitif fi for forever
    +syn keyword mfCondition      forsuffixes if step until
    +
    +# Other primitives listed in the index
    +syn keyword mfPrimitive      charlist endinput expandafter extensible fontdimen
    +syn keyword mfPrimitive      headerbyte inner input intersectiontimes kern
    +syn keyword mfPrimitive      ligtable quote scantokens skipto
    +
    +# Implicit suffix parameters
    +syn match   mfSuffixParam    "@#\|#@\|@"
    +
    +# These are just tags, but given their special status, we
    +# highlight them as variables
    +syn keyword mfVariable       x y
    +
    +# Keywords defined by plain.mf (defined on pp.262-278)
    +if get(g:, "mf_plain_macros", get(g:, "plain_mf_macros", 1))
    +  syn keyword mfDef          addto_currentpicture beginchar capsule_def
    +  syn keyword mfDef          change_width clear_pen_memory clearit clearpen
    +  syn keyword mfDef          clearxy culldraw cullit cutdraw
    +  syn keyword mfDef          define_blacker_pixels define_corrected_pixels
    +  syn keyword mfDef          define_good_x_pixels define_good_y_pixels
    +  syn keyword mfDef          define_horizontal_corrected_pixels define_pixels
    +  syn keyword mfDef          define_whole_blacker_pixels define_whole_pixels
    +  syn keyword mfDef          define_whole_vertical_blacker_pixels
    +  syn keyword mfDef          define_whole_vertical_pixels downto draw drawdot
    +  syn keyword mfDef          endchar erase exitunless fill filldraw fix_units
    +  syn keyword mfDef          flex font_coding_scheme font_extra_space
    +  syn keyword mfDef          font_identifier font_normal_shrink
    +  syn keyword mfDef          font_normal_space font_normal_stretch font_quad
    +  syn keyword mfDef          font_size font_slant font_x_height gfcorners gobble
    +  syn keyword mfDef          hide imagerules interact italcorr killtext
    +  syn keyword mfDef          loggingall lowres_fix makebox makegrid maketicks
    +  syn keyword mfDef          mode_def mode_setup nodisplays notransforms numtok
    +  syn keyword mfDef          openit penrazor pensquare penstroke pickup
    +  syn keyword mfDef          proofoffset proofrule range reflectedabout
    +  syn keyword mfDef          rotatedaround screenchars screenrule screenstrokes
    +  syn keyword mfDef          shipit showit smode stop superellipse takepower
    +  syn keyword mfDef          tracingall tracingnone undraw undrawdot unfill
    +  syn keyword mfDef          unfilldraw upto z
    +  syn match   mfDef          "???"
    +  syn keyword mfVardef       bot byte ceiling counterclockwise cutoff decr dir
    +  syn keyword mfVardef       direction directionpoint grayfont hround incr
    +  syn keyword mfVardef       interpath inverse labelfont labels lft magstep
    +  # Note: nodot is not a vardef, it is used as in makelabel.lft.nodot("5",z5)
    +  # (METAFONT only)
    +  syn keyword mfVardef       makelabel max min nodot penlabels penpos
    +  syn keyword mfVardef       proofrulethickness round rt savepen slantfont solve
    +  syn keyword mfVardef       tensepath titlefont top unitvector vround whatever
    +  syn match   mpVardef       "\"
    +  syn keyword mfPrimaryDef   div dotprod gobbled mod
    +  syn keyword mfSecondaryDef intersectionpoint
    +  syn keyword mfTertiaryDef  softjoin thru
    +  syn keyword mfNewInternal  blacker currentwindow displaying eps epsilon
    +  syn keyword mfNewInternal  infinity join_radius number_of_modes o_correction
    +  syn keyword mfNewInternal  pen_bot pen_lft pen_rt pen_top pixels_per_inch
    +  syn keyword mfNewInternal  screen_cols screen_rows tolerance
    +  # Predefined constants
    +  syn keyword mfConstant     base_name base_version blankpicture ditto down
    +  syn keyword mfConstant     fullcircle halfcircle identity left lowres origin
    +  syn keyword mfConstant     penspeck proof quartercircle right rulepen smoke
    +  syn keyword mfConstant     unitpixel unitsquare up
    +  # Other predefined variables
    +  syn keyword mfVariable     aspect_ratio currentpen extra_beginchar
    +  syn keyword mfVariable     extra_endchar currentpen_path currentpicture
    +  syn keyword mfVariable     currenttransform d extra_setup h localfont mag mode
    +  syn keyword mfVariable     mode_name w
    +  # let statements:
    +  syn keyword mfnumExp       abs
    +  syn keyword mfPairExp      rotatedabout
    +  syn keyword mfCommand      bye relax
    +endif
    +
    +# By default, METAFONT loads modes.mf, too
    +if get(g:, "plain_mf_modes", get(g:, "mf_plain_modes", 1))
    +  syn keyword mfConstant     APSSixMed AgfaFourZeroZero AgfaThreeFourZeroZero
    +  syn keyword mfConstant     AtariNineFive AtariNineSix AtariSLMEightZeroFour
    +  syn keyword mfConstant     AtariSMOneTwoFour CItohEightFiveOneZero
    +  syn keyword mfConstant     CItohThreeOneZero CanonBJCSixZeroZero CanonCX
    +  syn keyword mfConstant     CanonEX CanonLBPLX CanonLBPTen CanonSX ChelgraphIBX
    +  syn keyword mfConstant     CompugraphicEightSixZeroZero
    +  syn keyword mfConstant     CompugraphicNineSixZeroZero DD DEClarge DECsmall
    +  syn keyword mfConstant     DataDiscNew EightThree EpsonAction
    +  syn keyword mfConstant     EpsonLQFiveZeroZeroLo EpsonLQFiveZeroZeroMed
    +  syn keyword mfConstant     EpsonMXFX EpsonSQEightSevenZero EpsonStylusPro
    +  syn keyword mfConstant     EpsonStylusProHigh EpsonStylusProLow
    +  syn keyword mfConstant     EpsonStylusProMed FourFour GThreefax HPDeskJet
    +  syn keyword mfConstant     HPLaserJetIIISi IBMFourTwoFiveZero IBMFourTwoOneSix
    +  syn keyword mfConstant     IBMFourTwoThreeZero IBMFourZeroOneNine
    +  syn keyword mfConstant     IBMFourZeroThreeNine IBMFourZeroTwoNine
    +  syn keyword mfConstant     IBMProPrinter IBMSixOneFiveFour IBMSixSixSevenZero
    +  syn keyword mfConstant     IBMThreeEightOneTwo IBMThreeEightTwoZero
    +  syn keyword mfConstant     IBMThreeOneNineThree IBMThreeOneSevenNine
    +  syn keyword mfConstant     IBMUlfHolleberg LASevenFive LNOthreR LNOthree
    +  syn keyword mfConstant     LNZeroOne LNZeroThree LPSFourZero LPSTwoZero
    +  syn keyword mfConstant     LexmarkFourZeroThreeNine LexmarkOptraR
    +  syn keyword mfConstant     LexmarkOptraS LinotypeLThreeThreeZero
    +  syn keyword mfConstant     LinotypeOneZeroZero LinotypeOneZeroZeroLo
    +  syn keyword mfConstant     LinotypeThreeZeroZeroHi MacTrueSize NeXTprinter
    +  syn keyword mfConstant     NeXTscreen NecTwoZeroOne Newgen NineOne
    +  syn keyword mfConstant     OCESixSevenFiveZeroPS OneTwoZero OneZeroZero
    +  syn keyword mfConstant     PrintwareSevenTwoZeroIQ Prism QMSOneSevenTwoFive
    +  syn keyword mfConstant     QMSOneSevenZeroZero QMSTwoFourTwoFive RicohA
    +  syn keyword mfConstant     RicohFortyEighty RicohFourZeroEightZero RicohLP
    +  syn keyword mfConstant     SparcPrinter StarNLOneZero VAXstation VTSix
    +  syn keyword mfConstant     VarityperFiveZeroSixZeroW
    +  syn keyword mfConstant     VarityperFourThreeZeroZeroHi
    +  syn keyword mfConstant     VarityperFourThreeZeroZeroLo
    +  syn keyword mfConstant     VarityperFourTwoZeroZero VarityperSixZeroZero
    +  syn keyword mfConstant     XeroxDocutech XeroxEightSevenNineZero
    +  syn keyword mfConstant     XeroxFourZeroFiveZero XeroxNineSevenZeroZero
    +  syn keyword mfConstant     XeroxPhaserSixTwoZeroZeroDP XeroxThreeSevenZeroZero
    +  syn keyword mfConstant     Xerox_world agfafzz agfatfzz amiga aps apssixhi
    +  syn keyword mfConstant     aselect atariezf atarinf atarins atariotf bitgraph
    +  syn keyword mfConstant     bjtenex bjtzzex bjtzzl bjtzzs boise canonbjc
    +  syn keyword mfConstant     canonex canonlbp cg cgl cgnszz citohtoz corona crs
    +  syn keyword mfConstant     cthreeten cx datadisc declarge decsmall deskjet
    +  syn keyword mfConstant     docutech dover dp dpdfezzz eighthre elvira epscszz
    +  syn keyword mfConstant     epsdraft epsdrft epsdrftl epsfast epsfastl epshi
    +  syn keyword mfConstant     epslo epsmed epsmedl epson epsonact epsonfx epsonl
    +  syn keyword mfConstant     epsonlo epsonlol epsonlq epsonsq epstylus epstylwr
    +  syn keyword mfConstant     epstyplo epstypmd epstypml epstypro epswlo epswlol
    +  syn keyword mfConstant     esphi fourfour gpx gtfax gtfaxhi gtfaxl gtfaxlo
    +  syn keyword mfConstant     gtfaxlol help hifax highfax hplaser hprugged ibm_a
    +  syn keyword mfConstant     ibmd ibmega ibmegal ibmfzon ibmfztn ibmpp ibmppl
    +  syn keyword mfConstant     ibmsoff ibmteot ibmtetz ibmtont ibmtosn ibmtosnl
    +  syn keyword mfConstant     ibmvga ibx imagen imagewriter itoh itohl itohtoz
    +  syn keyword mfConstant     itohtozl iw jetiiisi kyocera laserjet laserjetfive
    +  syn keyword mfConstant     laserjetfivemp laserjetfour laserjetfourthousand
    +  syn keyword mfConstant     laserjetfourzerozerozero laserjethi laserjetlo
    +  syn keyword mfConstant     laserjettwoonezerozero
    +  syn keyword mfConstant     laserjettwoonezerozerofastres lasermaster
    +  syn keyword mfConstant     laserwriter lasf lexmarkr lexmarks lexmarku
    +  syn keyword mfConstant     linohalf linohi linolo linolttz linoone linosuper
    +  syn keyword mfConstant     linothree linothreelo linotzzh ljfive ljfivemp
    +  syn keyword mfConstant     ljfour ljfzzz ljfzzzfr ljlo ljtozz ljtozzfr lmaster
    +  syn keyword mfConstant     lnotr lnzo lps lpstz lqhires lqlores lqmed lqmedl
    +  syn keyword mfConstant     lqmedres lview lviewl lwpro macmag mactrue modes_mf
    +  syn keyword mfConstant     ncd nec nechi neclm nectzo newdd newddl nexthi
    +  syn keyword mfConstant     nextscreen nextscrn nineone nullmode ocessfz
    +  syn keyword mfConstant     okidata okidatal okifourten okifte okihi onetz
    +  syn keyword mfConstant     onezz pcprevw pcscreen phaser phaserfs phasertf
    +  syn keyword mfConstant     phasertfl phasertl pixpt printware prntware
    +  syn keyword mfConstant     proprinter qms qmsesz qmsostf qmsoszz qmstftf ricoh
    +  syn keyword mfConstant     ricoha ricohlp ricohsp sherpa sparcptr starnlt
    +  syn keyword mfConstant     starnltl styletwo stylewr stylewri stylewriter sun
    +  syn keyword mfConstant     supre swtwo toshiba ultre varityper vs vtftzz
    +  syn keyword mfConstant     vtftzzhi vtftzzlo vtfzszw vtszz xpstzz xpstzzl
    +  syn keyword mfConstant     xrxesnz xrxfzfz xrxnszz xrxtszz
    +  syn keyword mfDef          BCPL_string coding_scheme font_face_byte
    +  syn keyword mfDef          font_family landscape
    +  syn keyword mfDef          mode_extra_info mode_help mode_param
    +  syn keyword mfNewInternal  blacker_min
    +endif
    +
    +# Some other basic macro names, e.g., from cmbase, logo, etc.
    +if get(g:, "mf_other_macros", get(g:, "other_mf_macros", 1))
    +  syn keyword mfDef          beginlogochar
    +  syn keyword mfDef          font_setup
    +  syn keyword mfPrimitive    generate
    +endif
    +
    +# Numeric tokens
    +syn match     mfNumeric      "[-]\=\d\+"
    +syn match     mfNumeric      "[-]\=\.\d\+"
    +syn match     mfNumeric      "[-]\=\d\+\.\d\+"
    +
    +# METAFONT lengths
    +syn match     mfLength       "\<\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\>"
    +syn match     mfLength       "[-]\=\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
    +syn match     mfLength       "[-]\=\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
    +syn match     mfLength       "[-]\=\d\+\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
    +
    +# String constants
    +syn match     mfOpenString   /"[^"]*/
    +syn region    mfString       oneline keepend start=+"+ end=+"+
    +
    +# Comments:
    +syn keyword   mfTodoComment  contained TODO FIXME XXX DEBUG NOTE
    +syn match     mfComment      "%.*$" contains=mfTodoComment,@Spell
    +
    +# synchronizing
    +syn sync maxlines=100
    +
    +# Define the default highlighting
    +hi def link mfBoolExp      Statement
    +hi def link mfNumExp       Statement
    +hi def link mfPairExp      Statement
    +hi def link mfPathExp      Statement
    +hi def link mfPenExp       Statement
    +hi def link mfPicExp       Statement
    +hi def link mfStringExp    Statement
    +hi def link mfInternal     Identifier
    +hi def link mfCommand      Statement
    +hi def link mfType         Type
    +hi def link mfStatement    Statement
    +hi def link mfDefinition   Statement
    +hi def link mfCondition    Conditional
    +hi def link mfPrimitive    Statement
    +hi def link mfDef          Function
    +hi def link mfVardef       mfDef
    +hi def link mfPrimaryDef   mfDef
    +hi def link mfSecondaryDef mfDef
    +hi def link mfTertiaryDef  mfDef
    +hi def link mfCoord        Identifier
    +hi def link mfPoint        Identifier
    +hi def link mfNumeric      Number
    +hi def link mfLength       Number
    +hi def link mfComment      Comment
    +hi def link mfString       String
    +hi def link mfOpenString   Todo
    +hi def link mfSuffixParam  Label
    +hi def link mfNewInternal  mfInternal
    +hi def link mfVariable     Identifier
    +hi def link mfConstant     Constant
    +hi def link mfTodoComment  Todo
    +
    +b:current_syntax = "mf"
    +
    +# vim: sw=2 fdm=marker
    diff --git a/.config/vim/syntax/mgl.vim b/.config/vim/syntax/mgl.vim
    new file mode 100644
    index 0000000..f7bc617
    --- /dev/null
    +++ b/.config/vim/syntax/mgl.vim
    @@ -0,0 +1,117 @@
    +" Vim syntax file
    +" Language:	MGL
    +" Version: 1.0
    +" Last Change:	2006 Feb 21
    +" Maintainer:  Gero Kuhlmann 
    +"
    +" $Id: mgl.vim,v 1.1 2006/02/21 22:08:20 vimboss Exp $
    +"
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +
    +syn sync lines=250
    +
    +syn keyword mglBoolean		true false
    +syn keyword mglConditional	if else then
    +syn keyword mglConstant		nil
    +syn keyword mglPredefined	maxint
    +syn keyword mglLabel		case goto label
    +syn keyword mglOperator		to downto in of with
    +syn keyword mglOperator		and not or xor div mod
    +syn keyword mglRepeat		do for repeat while to until
    +syn keyword mglStatement	procedure function break continue return restart
    +syn keyword mglStatement	program begin end const var type
    +syn keyword mglStruct		record
    +syn keyword mglType		integer string char boolean char ipaddr array
    +
    +
    +" String
    +if !exists("mgl_one_line_string")
    +  syn region  mglString matchgroup=mglString start=+'+ end=+'+ contains=mglStringEscape
    +  syn region  mglString matchgroup=mglString start=+"+ end=+"+ contains=mglStringEscapeGPC
    +else
    +  "wrong strings
    +  syn region  mglStringError matchgroup=mglStringError start=+'+ end=+'+ end=+$+ contains=mglStringEscape
    +  syn region  mglStringError matchgroup=mglStringError start=+"+ end=+"+ end=+$+ contains=mglStringEscapeGPC
    +  "right strings
    +  syn region  mglString matchgroup=mglString start=+'+ end=+'+ oneline contains=mglStringEscape
    +  syn region  mglString matchgroup=mglString start=+"+ end=+"+ oneline contains=mglStringEscapeGPC
    +end
    +syn match   mglStringEscape	contained "''"
    +syn match   mglStringEscapeGPC	contained '""'
    +
    +
    +if exists("mgl_symbol_operator")
    +  syn match   mglSymbolOperator		"[+\-/*=\%]"
    +  syn match   mglSymbolOperator		"[<>]=\="
    +  syn match   mglSymbolOperator		"<>"
    +  syn match   mglSymbolOperator		":="
    +  syn match   mglSymbolOperator		"[()]"
    +  syn match   mglSymbolOperator		"\.\."
    +  syn match   mglMatrixDelimiter	"(."
    +  syn match   mglMatrixDelimiter	".)"
    +  syn match   mglMatrixDelimiter	"[][]"
    +endif
    +
    +syn match  mglNumber	"-\=\<\d\+\>"
    +syn match  mglHexNumber	"\$[0-9a-fA-F]\+\>"
    +syn match  mglCharacter	"\#[0-9]\+\>"
    +syn match  mglIpAddr	"[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\>"
    +
    +syn region mglComment	start="(\*"  end="\*)"
    +syn region mglComment	start="{"  end="}"
    +syn region mglComment	start="//"  end="$"
    +
    +if !exists("mgl_no_functions")
    +  syn keyword mglFunction	dispose new
    +  syn keyword mglFunction	get load print select
    +  syn keyword mglFunction	odd pred succ
    +  syn keyword mglFunction	chr ord abs sqr
    +  syn keyword mglFunction	exit
    +  syn keyword mglOperator	at timeout
    +endif
    +
    +
    +syn region mglPreProc	start="(\*\$"  end="\*)"
    +syn region mglPreProc	start="{\$"  end="}"
    +
    +syn keyword mglException	try except raise
    +syn keyword mglPredefined	exception
    +
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link mglBoolean		Boolean
    +hi def link mglComment		Comment
    +hi def link mglConditional		Conditional
    +hi def link mglConstant		Constant
    +hi def link mglException		Exception
    +hi def link mglFunction		Function
    +hi def link mglLabel		Label
    +hi def link mglMatrixDelimiter	Identifier
    +hi def link mglNumber		Number
    +hi def link mglHexNumber		Number
    +hi def link mglCharacter		Number
    +hi def link mglIpAddr		Number
    +hi def link mglOperator		Operator
    +hi def link mglPredefined		mglFunction
    +hi def link mglPreProc		PreProc
    +hi def link mglRepeat		Repeat
    +hi def link mglStatement		Statement
    +hi def link mglString		String
    +hi def link mglStringEscape	Special
    +hi def link mglStringEscapeGPC	Special
    +hi def link mglStringError		Error
    +hi def link mglStruct		mglStatement
    +hi def link mglSymbolOperator	mglOperator
    +hi def link mglType		Type
    +
    +
    +
    +let b:current_syntax = "mgl"
    +
    +" vim: ts=8 sw=2
    diff --git a/.config/vim/syntax/mgp.vim b/.config/vim/syntax/mgp.vim
    new file mode 100644
    index 0000000..7227804
    --- /dev/null
    +++ b/.config/vim/syntax/mgp.vim
    @@ -0,0 +1,69 @@
    +" Vim syntax file
    +" Language:     mgp - MaGic Point
    +" Maintainer:   Gerfried Fuchs 
    +" Filenames:    *.mgp
    +" Last Change:  25 Apr 2001
    +" URL:		http://alfie.ist.org/vim/syntax/mgp.vim
    +"
    +" Comments are very welcome - but please make sure that you are commenting on
    +" the latest version of this file.
    +" SPAM is _NOT_ welcome - be ready to be reported!
    +
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +
    +syn match mgpLineSkip "\\$"
    +
    +" all the commands that are currently recognized
    +syn keyword mgpCommand contained size fore back bgrad left leftfill center
    +syn keyword mgpCommand contained right shrink lcutin rcutin cont xfont vfont
    +syn keyword mgpCommand contained tfont tmfont tfont0 bar image newimage
    +syn keyword mgpCommand contained prefix icon bimage default tab vgap hgap
    +syn keyword mgpCommand contained pause mark again system filter endfilter
    +syn keyword mgpCommand contained vfcap tfdir deffont font embed endembed
    +syn keyword mgpCommand contained noop pcache include
    +
    +" charset is not yet supported :-)
    +" syn keyword mgpCommand contained charset
    +
    +syn region mgpFile     contained start=+"+ skip=+\\\\\|\\"+ end=+"+
    +syn match mgpValue     contained "\d\+"
    +syn match mgpSize      contained "\d\+x\d\+"
    +syn match mgpLine      +^%.*$+ contains=mgpCommand,mgpFile,mgpSize,mgpValue
    +
    +" Comments
    +syn match mgpPercent   +^%%.*$+
    +syn match mgpHash      +^#.*$+
    +
    +" these only work alone
    +syn match mgpPage      +^%page$+
    +syn match mgpNoDefault +^%nodefault$+
    +
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link mgpLineSkip	Special
    +
    +hi def link mgpHash	mgpComment
    +hi def link mgpPercent	mgpComment
    +hi def link mgpComment	Comment
    +
    +hi def link mgpCommand	Identifier
    +
    +hi def link mgpLine	Type
    +
    +hi def link mgpFile	String
    +hi def link mgpSize	Number
    +hi def link mgpValue	Number
    +
    +hi def link mgpPage	mgpDefine
    +hi def link mgpNoDefault	mgpDefine
    +hi def link mgpDefine	Define
    +
    +
    +let b:current_syntax = "mgp"
    diff --git a/.config/vim/syntax/mib.vim b/.config/vim/syntax/mib.vim
    new file mode 100644
    index 0000000..6062d50
    --- /dev/null
    +++ b/.config/vim/syntax/mib.vim
    @@ -0,0 +1,57 @@
    +" Vim syntax file
    +" Language:        Vim syntax file for SNMPv1 and SNMPv2 MIB and SMI files
    +" Maintainer:      Martin Smat 
    +" Original Author: David Pascoe 
    +" Written:     	   Wed Jan 28 14:37:23 GMT--8:00 1998
    +" Last Changed:    Mon Mar 23 2010
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +setlocal iskeyword=@,48-57,_,128-167,224-235,-
    +
    +syn keyword mibImplicit ACCESS ANY AUGMENTS BEGIN BIT BITS BOOLEAN CHOICE
    +syn keyword mibImplicit COMPONENTS CONTACT-INFO DEFINITIONS DEFVAL
    +syn keyword mibImplicit DESCRIPTION DISPLAY-HINT END ENTERPRISE EXTERNAL FALSE
    +syn keyword mibImplicit FROM GROUP IMPLICIT IMPLIED IMPORTS INDEX
    +syn keyword mibImplicit LAST-UPDATED MANDATORY-GROUPS MAX-ACCESS
    +syn keyword mibImplicit MIN-ACCESS MODULE MODULE-COMPLIANCE MODULE-IDENTITY
    +syn keyword mibImplicit NOTIFICATION-GROUP NOTIFICATION-TYPE NOTIFICATIONS
    +syn keyword mibImplicit NULL OBJECT-GROUP OBJECT-IDENTITY OBJECT-TYPE
    +syn keyword mibImplicit OBJECTS OF OPTIONAL ORGANIZATION REFERENCE
    +syn keyword mibImplicit REVISION SEQUENCE SET SIZE STATUS SYNTAX
    +syn keyword mibImplicit TEXTUAL-CONVENTION TRAP-TYPE TRUE UNITS VARIABLES
    +syn keyword mibImplicit WRITE-SYNTAX
    +syn keyword mibValue accessible-for-notify current DisplayString
    +syn keyword mibValue deprecated mandatory not-accessible obsolete optional
    +syn keyword mibValue read-create read-only read-write write-only INTEGER
    +syn keyword mibValue Counter Gauge IpAddress OCTET STRING experimental mib-2
    +syn keyword mibValue TimeTicks RowStatus TruthValue UInteger32 snmpModules
    +syn keyword mibValue Integer32 Counter32 TestAndIncr TimeStamp InstancePointer
    +syn keyword mibValue OBJECT IDENTIFIER Gauge32 AutonomousType Counter64
    +syn keyword mibValue PhysAddress TimeInterval MacAddress StorageType RowPointer
    +syn keyword mibValue TDomain TAddress ifIndex
    +
    +" Epilogue SMI extensions
    +syn keyword mibEpilogue FORCE-INCLUDE EXCLUDE cookie get-function set-function
    +syn keyword mibEpilogue test-function get-function-async set-function-async
    +syn keyword mibEpilogue test-function-async next-function next-function-async
    +syn keyword mibEpilogue leaf-name
    +syn keyword mibEpilogue DEFAULT contained
    +
    +syn match  mibOperator  "::="
    +syn match  mibComment   "\ *--.\{-}\(--\|$\)"
    +syn match  mibNumber    "\<['0-9a-fA-FhH]*\>"
    +syn region mibDescription start="\"" end="\"" contains=DEFAULT
    +
    +hi def link mibImplicit	     Statement
    +hi def link mibOperator      Statement
    +hi def link mibComment       Comment
    +hi def link mibConstants     String
    +hi def link mibNumber        Number
    +hi def link mibDescription   Identifier
    +hi def link mibEpilogue	     SpecialChar
    +hi def link mibValue         Structure
    +
    +let b:current_syntax = "mib"
    diff --git a/.config/vim/syntax/mix.vim b/.config/vim/syntax/mix.vim
    new file mode 100644
    index 0000000..564d344
    --- /dev/null
    +++ b/.config/vim/syntax/mix.vim
    @@ -0,0 +1,84 @@
    +" Vim syntax file
    +" Language:	MIX (Donald Knuth's assembly language used in TAOCP)
    +" Maintainer:	Wu Yongwei 
    +" Filenames:	*.mixal *.mix
    +" Last Change:  2017-11-26 15:21:36 +0800
    +
    +" Quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn case ignore
    +
    +" Special processing of ALF directive: implementations vary whether quotation
    +" marks are needed
    +syn match mixAlfParam		#\s\{1,2\}"\?[^"]\{,5\}"\?# contains=mixString nextgroup=mixEndComment contained
    +
    +" Region for parameters
    +syn match mixParam		#[-+*/:=0-9a-z,()"]\+# contains=mixIdentifier,mixSpecial,mixNumber,mixString,mixLabel nextgroup=mixEndComment contained
    +
    +" Comment at the line end
    +syn match mixEndComment		".*" contains=mixRegister contained
    +
    +" Identifier; must go before literals
    +syn match mixIdentifier		"[a-z0-9_]\+" contained
    +
    +" Literals
    +syn match mixSpecial		"[-+*/:=]" contained
    +syn match mixNumber		"[0-9]\+\>" contained
    +syn region mixString		start=+"+ skip=+\\"+ end=+"+ contained
    +
    +" Labels
    +syn match mixLabel		"^[a-z0-9_]\{,10\}\s\+" nextgroup=mixAlfSpecial,mixOpcode,mixDirective
    +syn match mixLabel		"[0-9][BF]" contained
    +
    +" Comments
    +syn match mixComment		"^\*.*" contains=mixRegister
    +
    +" Directives
    +syn keyword mixDirective 	ORIG EQU CON END nextgroup=mixParam contained skipwhite
    +syn keyword mixDirective 	ALF nextgroup=mixAlfParam contained
    +
    +" Opcodes
    +syn keyword mixOpcode	NOP HLT NUM CHAR FLOT FIX nextgroup=mixEndComment contained
    +syn keyword mixOpcode	FADD FSUB FMUL FDIV FCMP MOVE ADD SUB MUL DIV IOC IN OUT JRED JBUS JMP JSJ JOV JNOV JL JE JG JLE JNE JGE SLA SRA SLAX SRAX SLC SRC nextgroup=mixParam contained skipwhite
    +syn keyword mixOpcode	SLB SRB JAE JAO JXE JXO nextgroup=mixParam contained skipwhite
    +
    +syn match mixOpcode	"LD[AX1-6]N\?\>" nextgroup=mixParam contained skipwhite
    +syn match mixOpcode	"ST[AX1-6JZ]\>" nextgroup=mixParam contained skipwhite
    +syn match mixOpcode	"EN[TN][AX1-6]\>" nextgroup=mixParam contained skipwhite
    +syn match mixOpcode	"INC[AX1-6]\>" nextgroup=mixParam contained skipwhite
    +syn match mixOpcode	"DEC[AX1-6]\>" nextgroup=mixParam contained skipwhite
    +syn match mixOpcode	"CMP[AX1-6]\>" nextgroup=mixParam contained skipwhite
    +syn match mixOpcode	"J[AX1-6]N\?[NZP]\>" nextgroup=mixParam contained skipwhite
    +
    +" Switch back to being case sensitive
    +syn case match
    +
    +" Registers (only to be used in comments now)
    +syn keyword mixRegister	rA rX rI1 rI2 rI3 rI4 rI5 rI6 rJ contained
    +
    +" The default highlighting
    +hi def link mixRegister		Special
    +hi def link mixLabel		Define
    +hi def link mixComment		Comment
    +hi def link mixEndComment	Comment
    +hi def link mixDirective	Keyword
    +hi def link mixOpcode		Keyword
    +
    +hi def link mixSpecial		Special
    +hi def link mixNumber		Number
    +hi def link mixString		String
    +hi def link mixAlfParam		String
    +hi def link mixIdentifier	Identifier
    +
    +let b:current_syntax = "mix"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/mma.vim b/.config/vim/syntax/mma.vim
    new file mode 100644
    index 0000000..802cbe5
    --- /dev/null
    +++ b/.config/vim/syntax/mma.vim
    @@ -0,0 +1,321 @@
    +" Vim syntax file
    +" Language:     Mathematica
    +" Maintainer:   steve layland 
    +" Last Change:  2012 Feb 03 by Thilo Six
    +"               2024 May 24 by Riley Bruins  (remove 'commentstring')
    +" Source:       http://members.wri.com/layland/vim/syntax/mma.vim
    +"               http://vim.sourceforge.net/scripts/script.php?script_id=1273
    +" Id:           $Id: mma.vim,v 1.4 2006/04/14 20:40:38 vimboss Exp $
    +" NOTE:
    +"
    +" Empty .m files will automatically be presumed as Matlab files
    +" unless you have the following in your .vimrc:
    +"
    +"       let filetype_m="mma"
    +"
    +" I also recommend setting the default 'Comment' highlighting to something
    +" other than the color used for 'Function', since both are plentiful in
    +" most mathematica files, and they are often the same color (when using
    +" background=dark).
    +"
    +" Credits:
    +" o  Original Mathematica syntax version written by
    +"    Wolfgang Waltenberger 
    +" o  Some ideas like the CommentStar,CommentTitle were adapted
    +"    from the Java vim syntax file by Claudio Fleiner.  Thanks!
    +" o  Everything else written by steve 
    +"
    +" Bugs:
    +" o  Vim 6.1 didn't really have support for character classes
    +"    of other named character classes.  For example, [\a\d]
    +"    didn't work.  Therefore, a lot of this code uses explicit
    +"    character classes instead: [0-9a-zA-Z]
    +"
    +" TODO:
    +"   folding
    +"   fix nesting
    +"   finish populating popular symbols
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +    finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +" Group Definitions:
    +syntax cluster mmaNotes contains=mmaTodo,mmaFixme
    +syntax cluster mmaComments contains=mmaComment,mmaFunctionComment,mmaItem,mmaFunctionTitle,mmaCommentStar
    +syntax cluster mmaCommentStrings contains=mmaLooseQuote,mmaCommentString,mmaUnicode
    +syntax cluster mmaStrings contains=@mmaCommentStrings,mmaString
    +syntax cluster mmaTop contains=mmaOperator,mmaGenericFunction,mmaPureFunction,mmaVariable
    +
    +" Predefined Constants:
    +"   to list all predefined Symbols would be too insane...
    +"   it's probably smarter to define a select few, and get the rest from
    +"   context if absolutely necessary.
    +"   TODO - populate this with other often used Symbols
    +
    +" standard fixed symbols:
    +syntax keyword mmaVariable True False None Automatic All Null C General
    +
    +" mathematical constants:
    +syntax keyword mmaVariable Pi I E Infinity ComplexInfinity Indeterminate GoldenRatio EulerGamma Degree Catalan Khinchin Glaisher
    +
    +" stream data / atomic heads:
    +syntax keyword mmaVariable Byte Character Expression Number Real String Word EndOfFile Integer Symbol
    +
    +" sets:
    +syntax keyword mmaVariable Integers Complexes Reals Booleans Rationals
    +
    +" character classes:
    +syntax keyword mmaPattern DigitCharacter LetterCharacter WhitespaceCharacter WordCharacter EndOfString StartOfString EndOfLine StartOfLine WordBoundary
    +
    +" SelectionMove directions/units:
    +syntax keyword mmaVariable Next Previous After Before Character Word Expression TextLine CellContents Cell CellGroup EvaluationCell ButtonCell GeneratedCell Notebook
    +syntax keyword mmaVariable CellTags CellStyle CellLabel
    +
    +" TableForm positions:
    +syntax keyword mmaVariable Above Below Left Right
    +
    +" colors:
    +syntax keyword mmaVariable Black Blue Brown Cyan Gray Green Magenta Orange Pink Purple Red White Yellow
    +
    +" function attributes
    +syntax keyword mmaVariable Protected Listable OneIdentity Orderless Flat Constant NumericFunction Locked ReadProtected HoldFirst HoldRest HoldAll HoldAllComplete SequenceHold NHoldFirst NHoldRest NHoldAll Temporary Stub
    +
    +" Comment Sections:
    +"   this:
    +"   :that:
    +syntax match mmaItem "\%(^[( |*\t]*\)\@<=\%(:\+\|\w\)\w\+\%( \w\+\)\{0,3}:" contained contains=@mmaNotes
    +
    +" Comment Keywords:
    +syntax keyword mmaTodo TODO NOTE HEY contained
    +syntax match mmaTodo "X\{3,}" contained
    +syntax keyword mmaFixme FIX[ME] FIXTHIS BROKEN contained
    +syntax match mmaFixme "BUG\%( *\#\=[0-9]\+\)\=" contained
    +" yay pirates...
    +syntax match mmaFixme "\%(Y\=A\+R\+G\+\|GRR\+\|CR\+A\+P\+\)\%(!\+\)\=" contained
    +
    +" EmPHAsis:
    +" this unnecessary, but whatever :)
    +syntax match mmaemPHAsis "\%(^\|\s\)\([_/]\)[a-zA-Z0-9]\+\%([- \t':]\+[a-zA-Z0-9]\+\)*\1\%(\s\|$\)" contained contains=mmaemPHAsis
    +syntax match mmaemPHAsis "\%(^\|\s\)(\@]\@!" contains=mmaOperator
    +"pattern default:
    +syntax match mmaPattern ": *[^ ,]\+[\], ]\@=" contains=@mmaCommentStrings,@mmaTop,mmaOperator
    +"pattern head/test:
    +syntax match mmaPattern "[A-Za-z0-9`]*_\+\%(\a\+\)\=\%(?([^)]\+)\|?[^\]},]\+\)\=" contains=@mmaTop,@mmaCommentStrings,mmaPatternError
    +
    +" Operators:
    +"   /: ^= ^:=   UpValue
    +"   /;          Conditional
    +"   := =        DownValue
    +"   == === ||
    +"   != =!= &&   Logic
    +"   >= <= < >
    +"   += -= *=
    +"   /= ++ --    Math
    +"   ^*
    +"   -> :>       Rules
    +"   @@ @@@      Apply
    +"   /@ //@      Map
    +"   /. //.      Replace
    +"   // @        Function application
    +"   <> ~~       String/Pattern join
    +"   ~           infix operator
    +"   . :         Pattern operators
    +syntax match mmaOperator "\%(@\{1,3}\|//[.@]\=\)"
    +syntax match mmaOperator "\%(/[;:@.]\=\|\^\=:\==\)"
    +syntax match mmaOperator "\%([-:=]\=>\|<=\=\)"
    +"syntax match mmaOperator "\%(++\=\|--\=\|[/+-*]=\|[^*]\)"
    +syntax match mmaOperator "[*+=^.:?-]"
    +syntax match mmaOperator "\%(\~\~\=\)"
    +syntax match mmaOperator "\%(=\{2,3}\|=\=!=\|||\=\|&&\|!\)" contains=ALLBUT,mmaPureFunction
    +
    +" Symbol Tags:
    +"   "SymbolName::item"
    +"syntax match mmaSymbol "`\=[a-zA-Z$]\+[0-9a-zA-Z$]*\%(`\%([a-zA-Z$]\+[0-9a-zA-Z$]*\)\=\)*" contained
    +syntax match mmaMessage "`\=\([a-zA-Z$]\+[0-9a-zA-Z$]*\)\%(`\%([a-zA-Z$]\+[0-9a-zA-Z$]*\)\=\)*::\a\+" contains=mmaMessageType
    +syntax match mmaMessageType "::\a\+"hs=s+2 contained
    +
    +" Pure Functions:
    +syntax match mmaPureFunction "#\%(#\|\d\+\)\="
    +syntax match mmaPureFunction "&"
    +
    +" Named Functions:
    +" Since everything is pretty much a function, get this straight
    +" from context
    +syntax match mmaGenericFunction "[A-Za-z0-9`]\+\s*\%([@[]\|/:\|/\=/@\)\@=" contains=mmaOperator
    +syntax match mmaGenericFunction "\~\s*[^~]\+\s*\~"hs=s+1,he=e-1 contains=mmaOperator,mmaBoring
    +syntax match mmaGenericFunction "//\s*[A-Za-z0-9`]\+"hs=s+2 contains=mmaOperator
    +
    +" Numbers:
    +syntax match mmaNumber "\<\%(\d\+\.\=\d*\|\d*\.\=\d\+\)\>"
    +syntax match mmaNumber "`\d\+\%(\d\@!\.\|\>\)"
    +
    +" Special Characters:
    +"   \[Name]     named character
    +"   \ooo        octal
    +"   \.xx        2 digit hex
    +"   \:xxxx      4 digit hex (multibyte unicode)
    +syntax match mmaUnicode "\\\[\w\+\d*\]"
    +syntax match mmaUnicode "\\\%(\x\{3}\|\.\x\{2}\|:\x\{4}\)"
    +
    +" Syntax Errors:
    +syntax match mmaError "\*)" containedin=ALLBUT,@mmaComments,@mmaStrings
    +syntax match mmaError "\%([/]{3,}\|[&:|+*?~-]\{3,}\|[.=]\{4,}\|_\@<=\.\{2,}\|`\{2,}\)" containedin=ALLBUT,@mmaComments,@mmaStrings
    +
    +" Punctuation:
    +" things that shouldn't really be highlighted, or highlighted
    +" in they're own group if you _really_ want. :)
    +"  ( ) { }
    +" TODO - use Delimiter group?
    +syntax match mmaBoring "[(){}]" contained
    +
    +" ------------------------------------
    +"    future explorations...
    +" ------------------------------------
    +" Function Arguments:
    +"   anything between brackets []
    +"   (fold)
    +"syntax region mmaArgument start="\[" end="\]" containedin=ALLBUT,@mmaComments,@mmaStrings transparent fold
    +
    +" Lists:
    +"   (fold)
    +"syntax region mmaLists start="{" end="}" containedin=ALLBUT,@mmaComments,@mmaStrings transparent fold
    +
    +" Regions:
    +"   (fold)
    +"syntax region mmaRegion start="(\*\+[^<]* \*)" containedin=ALLBUT,@mmaStrings transparent fold keepend
    +
    +" show fold text
    +"set foldtext=MmaFoldText()
    +
    +"function MmaFoldText()
    +"    let line = getline(v:foldstart)
    +"
    +"    let lines = v:foldend-v:foldstart+1
    +"
    +"    let sub = substitute(line, '(\*\+|\*\+)|[-*_]\+', '', 'g')
    +"
    +"    if match(line, '(\*') != -1
    +"        let lines = lines.' line comment'
    +"    else
    +"        let lines = lines.' lines'
    +"    endif
    +"
    +"    return v:folddashes.' '.lines.' '.sub
    +"endf
    +
    +"this is slow for computing folds, but it does so accurately
    +syntax sync fromstart
    +
    +" but this seems to do alright for non fold syntax coloring.
    +" for folding, however, it doesn't get the nesting right.
    +" TODO - find sync group for multiline modules? ick...
    +
    +" sync multi line comments
    +"syntax sync match syncComments groupthere NONE "\*)"
    +"syntax sync match syncComments groupthere mmaComment "(\*"
    +
    +"set foldmethod=syntax
    +"set foldnestmax=1
    +"set foldminlines=15
    +
    +
    +" NOTE - the following links are not guaranteed to
    +" look good under all colorschemes.  You might need to
    +" :so $VIMRUNTIME/syntax/hitest.vim and tweak these to
    +" look good in yours
    +
    +
    +hi def link mmaComment           Comment
    +hi def link mmaCommentStar       Comment
    +hi def link mmaFunctionComment   Comment
    +hi def link mmaLooseQuote        Comment
    +hi def link mmaGenericFunction   Function
    +hi def link mmaVariable          Identifier
    +"    hi def link mmaSymbol            Identifier
    +hi def link mmaOperator          Operator
    +hi def link mmaPatternOp         Operator
    +hi def link mmaPureFunction      Operator
    +hi def link mmaString            String
    +hi def link mmaCommentString     String
    +hi def link mmaUnicode           String
    +hi def link mmaMessage           Type
    +hi def link mmaNumber            Type
    +hi def link mmaPattern           Type
    +hi def link mmaError             Error
    +hi def link mmaFixme             Error
    +hi def link mmaPatternError      Error
    +hi def link mmaTodo              Todo
    +hi def link mmaemPHAsis          Special
    +hi def link mmaFunctionTitle     Special
    +hi def link mmaMessageType       Special
    +hi def link mmaItem              Preproc
    +
    +
    +let b:current_syntax = "mma"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/mmix.vim b/.config/vim/syntax/mmix.vim
    new file mode 100644
    index 0000000..0590767
    --- /dev/null
    +++ b/.config/vim/syntax/mmix.vim
    @@ -0,0 +1,152 @@
    +" Vim syntax file
    +" Language:	MMIX
    +" Maintainer:	Dirk Hüsken, 
    +" Last Change:	2012 Jun 01
    +" 		(Dominique Pelle added @Spell)
    +" Filenames:	*.mms
    +" URL: http://homepages.uni-tuebingen.de/student/dirk.huesken/vim/syntax/mmix.vim
    +
    +" Limitations:	Comments must start with either % or //
    +"		(preferably %, Knuth-Style)
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn case ignore
    +
    +" MMIX data types
    +syn keyword mmixType	byte wyde tetra octa
    +
    +" different literals...
    +syn match decNumber		"[0-9]*"
    +syn match octNumber		"0[0-7][0-7]\+"
    +syn match hexNumber		"#[0-9a-fA-F]\+"
    +syn region mmixString		start=+"+ skip=+\\"+ end=+"+ contains=@Spell
    +syn match mmixChar		"'.'"
    +
    +" ...and more special MMIX stuff
    +syn match mmixAt		"@"
    +syn keyword mmixSegments	Data_Segment Pool_Segment Stack_Segment
    +
    +syn match mmixIdentifier	"[a-z_][a-z0-9_]*"
    +
    +" labels (for branches etc)
    +syn match mmixLabel		"^[a-z0-9_:][a-z0-9_]*"
    +syn match mmixLabel		"[0-9][HBF]"
    +
    +" pseudo-operations
    +syn keyword mmixPseudo		is loc greg
    +
    +" comments
    +syn match mmixComment		"%.*" contains=@Spell
    +syn match mmixComment		"//.*" contains=@Spell
    +syn match mmixComment		"^\*.*" contains=@Spell
    +
    +
    +syn keyword mmixOpcode	trap fcmp fun feql fadd fix fsub fixu
    +syn keyword mmixOpcode	fmul fcmpe fune feqle fdiv fsqrt frem fint
    +
    +syn keyword mmixOpcode	floti flotui sfloti sflotui i
    +syn keyword mmixOpcode	muli mului divi divui
    +syn keyword mmixOpcode	addi addui subi subui
    +syn keyword mmixOpcode	2addui 4addui 8addui 16addui
    +syn keyword mmixOpcode	cmpi cmpui negi negui
    +syn keyword mmixOpcode	sli slui sri srui
    +syn keyword mmixOpcode	bnb bzb bpb bodb
    +syn keyword mmixOpcode	bnnb bnzb bnpb bevb
    +syn keyword mmixOpcode	pbnb pbzb pbpb pbodb
    +syn keyword mmixOpcode	pbnnb pbnzb pbnpb pbevb
    +syn keyword mmixOpcode	csni cszi cspi csodi
    +syn keyword mmixOpcode	csnni csnzi csnpi csevi
    +syn keyword mmixOpcode	zsni zszi zspi zsodi
    +syn keyword mmixOpcode	zsnni zsnzi zsnpi zsevi
    +syn keyword mmixOpcode	ldbi ldbui ldwi ldwui
    +syn keyword mmixOpcode	ldti ldtui ldoi ldoui
    +syn keyword mmixOpcode	ldsfi ldhti cswapi ldunci
    +syn keyword mmixOpcode	ldvtsi preldi pregoi goi
    +syn keyword mmixOpcode	stbi stbui stwi stwui
    +syn keyword mmixOpcode	stti sttui stoi stoui
    +syn keyword mmixOpcode	stsfi sthti stcoi stunci
    +syn keyword mmixOpcode	syncdi presti syncidi pushgoi
    +syn keyword mmixOpcode	ori orni nori xori
    +syn keyword mmixOpcode	andi andni nandi nxori
    +syn keyword mmixOpcode	bdifi wdifi tdifi odifi
    +syn keyword mmixOpcode	muxi saddi mori mxori
    +syn keyword mmixOpcode	muli mului divi divui
    +
    +syn keyword mmixOpcode	flot flotu sflot sflotu
    +syn keyword mmixOpcode	mul mulu div divu
    +syn keyword mmixOpcode	add addu sub subu
    +syn keyword mmixOpcode	2addu 4addu 8addu 16addu
    +syn keyword mmixOpcode	cmp cmpu neg negu
    +syn keyword mmixOpcode	sl slu sr sru
    +syn keyword mmixOpcode	bn bz bp bod
    +syn keyword mmixOpcode	bnn bnz bnp bev
    +syn keyword mmixOpcode	pbn pbz pbp pbod
    +syn keyword mmixOpcode	pbnn pbnz pbnp pbev
    +syn keyword mmixOpcode	csn csz csp csod
    +syn keyword mmixOpcode	csnn csnz csnp csev
    +syn keyword mmixOpcode	zsn zsz zsp zsod
    +syn keyword mmixOpcode	zsnn zsnz zsnp zsev
    +syn keyword mmixOpcode	ldb ldbu ldw ldwu
    +syn keyword mmixOpcode	ldt ldtu ldo ldou
    +syn keyword mmixOpcode	ldsf ldht cswap ldunc
    +syn keyword mmixOpcode	ldvts preld prego go
    +syn keyword mmixOpcode	stb stbu stw stwu
    +syn keyword mmixOpcode	stt sttu sto stou
    +syn keyword mmixOpcode	stsf stht stco stunc
    +syn keyword mmixOpcode	syncd prest syncid pushgo
    +syn keyword mmixOpcode	or orn nor xor
    +syn keyword mmixOpcode	and andn nand nxor
    +syn keyword mmixOpcode	bdif wdif tdif odif
    +syn keyword mmixOpcode	mux sadd mor mxor
    +
    +syn keyword mmixOpcode	seth setmh setml setl inch incmh incml incl
    +syn keyword mmixOpcode	orh ormh orml orl andh andmh andml andnl
    +syn keyword mmixOpcode	jmp pushj geta put
    +syn keyword mmixOpcode	pop resume save unsave sync swym get trip
    +syn keyword mmixOpcode	set lda
    +
    +" switch back to being case sensitive
    +syn case match
    +
    +" general-purpose and special-purpose registers
    +syn match mmixRegister		"$[0-9]*"
    +syn match mmixRegister		"r[A-Z]"
    +syn keyword mmixRegister	rBB rTT rWW rXX rYY rZZ
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +" The default methods for highlighting.  Can be overridden later
    +hi def link mmixAt		Type
    +hi def link mmixPseudo	Type
    +hi def link mmixRegister	Special
    +hi def link mmixSegments	Type
    +
    +hi def link mmixLabel	Special
    +hi def link mmixComment	Comment
    +hi def link mmixOpcode	Keyword
    +
    +hi def link hexNumber	Number
    +hi def link decNumber	Number
    +hi def link octNumber	Number
    +
    +hi def link mmixString	String
    +hi def link mmixChar	String
    +
    +hi def link mmixType	Type
    +hi def link mmixIdentifier	Normal
    +hi def link mmixSpecialComment Comment
    +
    +" My default color overrides:
    +" hi mmixSpecialComment ctermfg=red
    +"hi mmixLabel ctermfg=lightcyan
    +" hi mmixType ctermbg=black ctermfg=brown
    +
    +
    +let b:current_syntax = "mmix"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/mmp.vim b/.config/vim/syntax/mmp.vim
    new file mode 100644
    index 0000000..d0b9f7c
    --- /dev/null
    +++ b/.config/vim/syntax/mmp.vim
    @@ -0,0 +1,49 @@
    +" Vim syntax file
    +" Language:	Symbian meta-makefile definition (MMP)
    +" Maintainer:	Ron Aaron 
    +" Last Change:	2007/11/07
    +" URL: http://ronware.org/wiki/vim/mmp
    +" Filetypes:	*.mmp
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn case ignore
    +
    +syn match mmpComment	"//.*"
    +syn region mmpComment start="/\*" end="\*\/"
    +
    +syn keyword mmpKeyword	aif asspabi assplibrary aaspexports baseaddress
    +syn keyword mmpKeyword	debuglibrary deffile document epocheapsize
    +syn keyword mmpKeyword	epocprocesspriority epocstacksize exportunfrozen
    +syn keyword mmpStorage	lang library linkas macro nostrictdef option
    +syn keyword mmpStorage	resource source sourcepath srcdbg startbitmap
    +syn keyword mmpStorage	start end staticlibrary strictdepend systeminclude
    +syn keyword mmpStorage	systemresource target targettype targetpath uid
    +syn keyword mmpStorage	userinclude win32_library
    +
    +syn match mmpIfdef	"\#\(include\|ifdef\|ifndef\|if\|endif\|else\|elif\)"
    +
    +syn match   mmpNumber	"\d+"
    +syn match   mmpNumber	"0x\x\+"
    +
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +if !exists("did_mmp_syntax_inits")
    +  let did_mmp_syntax_inits=1
    +
    +  hi def link mmpComment	Comment
    +  hi def link mmpKeyword	Keyword
    +  hi def link mmpStorage	StorageClass
    +  hi def link mmpString	String
    +  hi def link mmpNumber	Number
    +  hi def link mmpOrdinal	Operator
    +  hi def link mmpIfdef	PreCondit
    +endif
    +
    +let b:current_syntax = "mmp"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/modconf.vim b/.config/vim/syntax/modconf.vim
    new file mode 100644
    index 0000000..76b36ed
    --- /dev/null
    +++ b/.config/vim/syntax/modconf.vim
    @@ -0,0 +1,44 @@
    +" Vim syntax file
    +" Language:             modules.conf(5) configuration file
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2007-10-25
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +setlocal iskeyword+=-
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn keyword modconfTodo         FIXME TODO XXX NOTE
    +
    +syn region  modconfComment      start='#' skip='\\$' end='$'
    +                                \ contains=modconfTodo,@Spell
    +
    +syn keyword modconfConditional  if else elseif endif
    +
    +syn keyword modconfPreProc      alias define include keep prune
    +                                \ post-install post-remove pre-install
    +                                \ pre-remove persistdir blacklist
    +
    +syn keyword modconfKeyword      add above below install options probe probeall
    +                                \ remove
    +
    +syn keyword modconfIdentifier   depfile insmod_opt path generic_stringfile
    +                                \ pcimapfile isapnpmapfile usbmapfile
    +                                \ parportmapfile ieee1394mapfile pnpbiosmapfile
    +syn match   modconfIdentifier   'path\[[^]]\+\]'
    +
    +hi def link modconfTodo         Todo
    +hi def link modconfComment      Comment
    +hi def link modconfConditional  Conditional
    +hi def link modconfPreProc      PreProc
    +hi def link modconfKeyword      Keyword
    +hi def link modconfIdentifier   Identifier
    +
    +let b:current_syntax = "modconf"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/model.vim b/.config/vim/syntax/model.vim
    new file mode 100644
    index 0000000..2df380c
    --- /dev/null
    +++ b/.config/vim/syntax/model.vim
    @@ -0,0 +1,45 @@
    +" Vim syntax file
    +" Language:	Model
    +" Maintainer:	The Vim Project 
    +" Last Change:	2023 Aug 10
    +" Former Maintainer:	Bram Moolenaar 
    +
    +" very basic things only (based on the vgrindefs file).
    +" If you use this language, please improve it, and send patches!
    +
    +" Quit when a (custom) syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" A bunch of keywords
    +syn keyword modelKeyword abs and array boolean by case cdnl char copied dispose
    +syn keyword modelKeyword div do dynamic else elsif end entry external FALSE false
    +syn keyword modelKeyword fi file for formal fortran global if iff ift in integer include
    +syn keyword modelKeyword inline is lbnd max min mod new NIL nil noresult not notin od of
    +syn keyword modelKeyword or procedure public read readln readonly record recursive rem rep
    +syn keyword modelKeyword repeat res result return set space string subscript such then TRUE
    +syn keyword modelKeyword true type ubnd union until varies while width
    +
    +" Special keywords
    +syn keyword modelBlock beginproc endproc
    +
    +" Comments
    +syn region modelComment start="\$" end="\$" end="$"
    +
    +" Strings
    +syn region modelString start=+"+ end=+"+
    +
    +" Character constant (is this right?)
    +syn match modelString "'."
    +
    +" Define the default highlighting.
    +" Only used when an item doesn't have highlighting yet
    +hi def link modelKeyword	Statement
    +hi def link modelBlock		PreProc
    +hi def link modelComment	Comment
    +hi def link modelString		String
    +
    +let b:current_syntax = "model"
    +
    +" vim: ts=8 sw=2
    diff --git a/.config/vim/syntax/modsim3.vim b/.config/vim/syntax/modsim3.vim
    new file mode 100644
    index 0000000..ce35033
    --- /dev/null
    +++ b/.config/vim/syntax/modsim3.vim
    @@ -0,0 +1,97 @@
    +" Vim syntax file
    +" Language:	Modsim III, by compuware corporation (www.compuware.com)
    +" Maintainer:	Philipp Jocham 
    +" Extension:	*.mod
    +" Last Change:	2001 May 10
    +"
    +" 2001 March 24:
    +"  - Modsim III is a registered trademark from compuware corporation
    +"  - made compatible with Vim 6.0
    +"
    +" 1999 Apr 22 : Changed modsim3Literal from region to match
    +"
    +" very basic things only (based on the modula2 and c files).
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +
    +" syn case match " case sensitiv match is default
    +
    +" A bunch of keywords
    +syn keyword modsim3Keyword ACTID ALL AND AS ASK
    +syn keyword modsim3Keyword BY CALL CASE CLASS CONST DIV
    +syn keyword modsim3Keyword DOWNTO DURATION ELSE ELSIF EXIT FALSE FIXED FOR
    +syn keyword modsim3Keyword FOREACH FORWARD IF IN INHERITED INOUT
    +syn keyword modsim3Keyword INTERRUPT LOOP
    +syn keyword modsim3Keyword MOD MONITOR NEWVALUE
    +syn keyword modsim3Keyword NONMODSIM NOT OBJECT OF ON OR ORIGINAL OTHERWISE OUT
    +syn keyword modsim3Keyword OVERRIDE PRIVATE PROTO REPEAT
    +syn keyword modsim3Keyword RETURN REVERSED SELF STRERR TELL
    +syn keyword modsim3Keyword TERMINATE THISMETHOD TO TRUE TYPE UNTIL VALUE VAR
    +syn keyword modsim3Keyword WAIT WAITFOR WHEN WHILE WITH
    +
    +" Builtin functions and procedures
    +syn keyword modsim3Builtin ABS ACTIVATE ADDMONITOR CAP CHARTOSTR CHR CLONE
    +syn keyword modsim3Builtin DEACTIVATE DEC DISPOSE FLOAT GETMONITOR HIGH INC
    +syn keyword modsim3Builtin INPUT INSERT INTTOSTR ISANCESTOR LOW LOWER MAX MAXOF
    +syn keyword modsim3Builtin MIN MINOF NEW OBJTYPEID OBJTYPENAME OBJVARID ODD
    +syn keyword modsim3Builtin ONERROR ONEXIT ORD OUTPUT POSITION PRINT REALTOSTR
    +syn keyword modsim3Builtin REPLACE REMOVEMONITOR ROUND SCHAR SIZEOF SPRINT
    +syn keyword modsim3Builtin STRLEN STRTOCHAR STRTOINT STRTOREAL SUBSTR TRUNC
    +syn keyword modsim3Builtin UPDATEVALUE UPPER VAL
    +
    +syn keyword modsim3BuiltinNoParen HALT TRACE
    +
    +" Special keywords
    +syn keyword modsim3Block PROCEDURE METHOD MODULE MAIN DEFINITION IMPLEMENTATION
    +syn keyword modsim3Block BEGIN END
    +
    +syn keyword modsim3Include IMPORT FROM
    +
    +syn keyword modsim3Type ANYARRAY ANYOBJ ANYREC ARRAY BOOLEAN CHAR INTEGER
    +syn keyword modsim3Type LMONITORED LRMONITORED NILARRAY NILOBJ NILREC REAL
    +syn keyword modsim3Type RECORD RMONITOR RMONITORED STRING
    +
    +" catch errros cause by wrong parenthesis
    +" slight problem with "( *)" or "(* )". Hints?
    +syn region modsim3Paren	transparent start='(' end=')' contains=ALLBUT,modsim3ParenError
    +syn match modsim3ParenError ")"
    +
    +" Comments
    +syn region modsim3Comment1 start="{" end="}" contains=modsim3Comment1,modsim3Comment2
    +syn region modsim3Comment2 start="(\*" end="\*)" contains=modsim3Comment1,modsim3Comment2
    +" highlighting is wrong for constructs like "{  (*  }  *)",
    +" which are allowed in Modsim III, but
    +" I think something like that shouldn't be used anyway.
    +
    +" Strings
    +syn region modsim3String start=+"+ end=+"+
    +
    +" Literals
    +"syn region modsim3Literal start=+'+ end=+'+
    +syn match modsim3Literal "'[^']'\|''''"
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +" The default methods for highlighting.  Can be overridden later
    +hi def link modsim3Keyword	Statement
    +hi def link modsim3Block		Statement
    +hi def link modsim3Comment1	Comment
    +hi def link modsim3Comment2	Comment
    +hi def link modsim3String		String
    +hi def link modsim3Literal	Character
    +hi def link modsim3Include	Statement
    +hi def link modsim3Type		Type
    +hi def link modsim3ParenError	Error
    +hi def link modsim3Builtin	Function
    +hi def link modsim3BuiltinNoParen	Function
    +
    +
    +let b:current_syntax = "modsim3"
    +
    +" vim: ts=8 sw=2
    +
    diff --git a/.config/vim/syntax/modula2.vim b/.config/vim/syntax/modula2.vim
    new file mode 100644
    index 0000000..3c1346e
    --- /dev/null
    +++ b/.config/vim/syntax/modula2.vim
    @@ -0,0 +1,23 @@
    +" Vim syntax file
    +" Language:		Modula-2
    +" Maintainer:		Doug Kearns 
    +" Previous Maintainer:	pf@artcom0.north.de (Peter Funk)
    +" Last Change:		2024 Jan 04
    +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +let dialect = modula2#GetDialect()
    +exe "runtime! syntax/modula2/opt/" .. dialect .. ".vim"
    +
    +let b:current_syntax = "modula2"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim: nowrap sw=2 sts=2 ts=8 noet:
    diff --git a/.config/vim/syntax/modula3.vim b/.config/vim/syntax/modula3.vim
    new file mode 100644
    index 0000000..67243db
    --- /dev/null
    +++ b/.config/vim/syntax/modula3.vim
    @@ -0,0 +1,145 @@
    +" Vim syntax file
    +" Language:		Modula-3
    +" Maintainer:		Doug Kearns 
    +" Previous Maintainer:	Timo Pedersen 
    +" Last Change:		2022 Oct 31
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Whitespace errors {{{1
    +if exists("modula3_space_errors")
    +  if !exists("modula3_no_trail_space_error")
    +    syn match modula3SpaceError display excludenl "\s\+$"
    +  endif
    +  if !exists("modula3_no_tab_space_error")
    +    syn match modula3SpaceError display " \+\t"me=e-1
    +  endif
    +endif
    +
    +" Keywords {{{1
    +syn keyword modula3Keyword ANY ARRAY AS BITS BRANDED BY CASE CONST
    +syn keyword modula3Keyword DEFINITION EVAL EXIT EXCEPT EXCEPTION EXIT
    +syn keyword modula3Keyword EXPORTS FINALLY FROM GENERIC IMPORT LOCK METHOD
    +syn keyword modula3Keyword OF RAISE RAISES READONLY RECORD REF
    +syn keyword modula3Keyword RETURN SET TRY TYPE TYPECASE UNSAFE 
    +syn keyword modula3Keyword VALUE VAR WITH
    +
    +syn match modula3keyword "\"
    +
    +" Special keywords, block delimiters etc
    +syn keyword modula3Block PROCEDURE FUNCTION MODULE INTERFACE REPEAT THEN
    +syn keyword modula3Block BEGIN END OBJECT METHODS OVERRIDES RECORD REVEAL
    +syn keyword modula3Block WHILE UNTIL DO TO IF FOR ELSIF ELSE LOOP
    +
    +" Reserved identifiers {{{1
    +syn keyword modula3Identifier ABS ADR ADRSIZE BITSIZE BYTESIZE CEILING DEC
    +syn keyword modula3Identifier DISPOSE FIRST FLOAT FLOOR INC ISTYPE LAST
    +syn keyword modula3Identifier LOOPHOLE MAX MIN NARROW NEW NUMBER ORD ROUND
    +syn keyword modula3Identifier SUBARRAY TRUNC TYPECODE VAL
    +
    +" Predefined types {{{1
    +syn keyword modula3Type ADDRESS BOOLEAN CARDINAL CHAR EXTENDED INTEGER
    +syn keyword modula3Type LONGCARD LONGINT LONGREAL MUTEX NULL REAL REFANY TEXT
    +syn keyword modula3Type WIDECHAR
    +
    +syn match modula3Type "\<\%(UNTRACED\s\+\)\=ROOT\>"
    +
    +" Operators {{{1
    +syn keyword modula3Operator DIV MOD
    +syn keyword modula3Operator IN
    +syn keyword modula3Operator NOT AND OR
    +
    +" TODO: exclude = from declarations
    +if exists("modula3_operators")
    +  syn match modula3Operator "\^"
    +  syn match modula3Operator "[-+/*]"
    +  syn match modula3Operator "&"
    +  syn match modula3Operator "<=\|<:\@!\|>=\|>"
    +  syn match modula3Operator ":\@"
    +
    +  if exists("modula3_number_errors")
    +    syn match modula3IntegerError "\<\d\d\=_\x\+L\=\>"
    +  endif
    +
    +  let s:digits = "0123456789ABCDEF"
    +  for s:radix in range(2, 16)
    +    exe $'syn match modula3Integer "\<{s:radix}_[{s:digits[:s:radix - 1]}]\+L\=\>"'
    +  endfor
    +  unlet s:digits s:radix
    +
    +  " Reals
    +  syn match modula3Real	 "\<\d\+\.\d\+\%([EDX][+-]\=\d\+\)\=\>"
    +
    +syn case match
    +
    +" Strings and characters {{{2
    +
    +" String escape sequences
    +syn match modula3Escape "\\['"ntrf]" contained display
    +" TODO: limit to <= 377 (255)
    +syn match modula3Escape "\\\o\{3}"   contained display
    +syn match modula3Escape "\\\\"	     contained display
    +
    +" Characters
    +syn match modula3Character "'\%([^']\|\\.\|\\\o\{3}\)'" contains=modula3Escape
    +
    +" Strings
    +syn region modula3String start=+"+ end=+"+ contains=modula3Escape
    +
    +" Pragmas {{{1
    +" EXTERNAL INLINE ASSERT TRACE FATAL UNUSED OBSOLETE CALLBACK EXPORTED PRAGMA NOWARN LINE LL LL.sup SPEC
    +" Documented: INLINE ASSERT TRACE FATAL UNUSED OBSOLETE NOWARN
    +syn region modula3Pragma start="<\*" end="\*>"
    +
    +" Comments {{{1
    +if !exists("modula3_no_comment_fold")
    +  syn region modula3Comment start="(\*" end="\*)" contains=modula3Comment,@Spell fold
    +  syn region modula3LineCommentBlock start="^\s*(\*.*\*)\s*\n\%(^\s*(\*.*\*)\s*$\)\@=" end="^\s*(\*.*\*)\s*\n\%(^\s*(\*.*\*)\s*$\)\@!" contains=modula3Comment transparent fold keepend
    +else
    +  syn region modula3Comment start="(\*" end="\*)" contains=modula3Comment,@Spell
    +endif
    +
    +" Syncing "{{{1
    +syn sync minlines=100
    +
    +" Default highlighting {{{1
    +hi def link modula3Block	Statement
    +hi def link modula3Boolean	Boolean
    +hi def link modula3Character	Character
    +hi def link modula3Comment	Comment
    +hi def link modula3Escape	Special
    +hi def link modula3Identifier	Keyword
    +hi def link modula3Integer	Number
    +hi def link modula3Keyword	Statement
    +hi def link modula3Nil		Constant
    +hi def link modula3IntegerError	Error
    +hi def link modula3Operator	Operator
    +hi def link modula3Pragma	PreProc
    +hi def link modula3Real		Float
    +hi def link modula3String	String
    +hi def link modula3Type		Type		"}}}
    +
    +let b:current_syntax = "modula3"
    +
    +" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
    diff --git a/.config/vim/syntax/mojo.vim b/.config/vim/syntax/mojo.vim
    new file mode 100644
    index 0000000..b7dae24
    --- /dev/null
    +++ b/.config/vim/syntax/mojo.vim
    @@ -0,0 +1,316 @@
    +" Vim syntax file
    +" Language:	Mojo
    +" Maintainer:	Mahmoud Abduljawad 
    +" Last Change:	2023 Sep 09
    +" Credits:	Mahmoud Abduljawad 
    +"         	Neil Schemenauer 
    +"		Dmitry Vasiliev
    +"
    +"		This is based on Vim Python highlighting
    +"
    +"		- introduced highlighting of doctests
    +"		- updated keywords, built-ins, and exceptions
    +"		- corrected regular expressions for
    +"
    +"		  * functions
    +"		  * decorators
    +"		  * strings
    +"		  * escapes
    +"		  * numbers
    +"		  * space error
    +"
    +"		- corrected synchronization
    +"		- more highlighting is ON by default, except
    +"		- space error highlighting is OFF by default
    +"
    +" Optional highlighting can be controlled using these variables.
    +"
    +"   let mojo_no_builtin_highlight = 1
    +"   let mojo_no_doctest_code_highlight = 1
    +"   let mojo_no_doctest_highlight = 1
    +"   let mojo_no_exception_highlight = 1
    +"   let mojo_no_number_highlight = 1
    +"   let mojo_space_error_highlight = 1
    +"
    +" All the options above can be switched on together.
    +"
    +"   let mojo_highlight_all = 1
    +"
    +" The use of Python 2 compatible syntax highlighting can be enforced.
    +" The straddling code (Python 2 and 3 compatible), up to Python 3.5,
    +" will be also supported.
    +"
    +"   let mojo_use_python2_syntax = 1
    +"
    +" This option will exclude all modern Python 3.6 or higher features.
    +"
    +
    +" quit when a syntax file was already loaded.
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" We need nocompatible mode in order to continue lines with backslashes.
    +" Original setting will be restored.
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +if exists("mojo_no_doctest_highlight")
    +  let mojo_no_doctest_code_highlight = 1
    +endif
    +
    +if exists("mojo_highlight_all")
    +  if exists("mojo_no_builtin_highlight")
    +    unlet mojo_no_builtin_highlight
    +  endif
    +  if exists("mojo_no_doctest_code_highlight")
    +    unlet mojo_no_doctest_code_highlight
    +  endif
    +  if exists("mojo_no_doctest_highlight")
    +    unlet mojo_no_doctest_highlight
    +  endif
    +  if exists("mojo_no_exception_highlight")
    +    unlet mojo_no_exception_highlight
    +  endif
    +  if exists("mojo_no_number_highlight")
    +    unlet mojo_no_number_highlight
    +  endif
    +  let mojo_space_error_highlight = 1
    +endif
    +
    +" These keywords are based on Python syntax highlight, and adds to it struct,
    +" fn, alias, var, let
    +"
    +syn keyword mojoStatement	False None True
    +syn keyword mojoStatement	as assert break continue del global
    +syn keyword mojoStatement	lambda nonlocal pass return with yield
    +syn keyword mojoStatement	class def nextgroup=mojoFunction skipwhite
    +syn keyword mojoStatement	struct fn nextgroup=mojoFunction skipwhite
    +syn keyword mojoStatement	alias var let
    +syn keyword mojoConditional	elif else if
    +syn keyword mojoRepeat		for while
    +syn keyword mojoOperator	and in is not or
    +syn keyword mojoException	except finally raise try
    +syn keyword mojoInclude		from import
    +syn keyword mojoAsync		async await
    +
    +" Soft keywords
    +" These keywords do not mean anything unless used in the right context.
    +" See https://docs.python.org/3/reference/lexical_analysis.html#soft-keywords
    +" for more on this.
    +syn match   mojoConditional   "^\s*\zscase\%(\s\+.*:.*$\)\@="
    +syn match   mojoConditional   "^\s*\zsmatch\%(\s\+.*:\s*\%(#.*\)\=$\)\@="
    +
    +" Decorators
    +" A dot must be allowed because of @MyClass.myfunc decorators.
    +syn match   mojoDecorator	"@" display contained
    +syn match   mojoDecoratorName	"@\s*\h\%(\w\|\.\)*" display contains=pythonDecorator
    +
    +" Python 3.5 introduced the use of the same symbol for matrix multiplication:
    +" https://www.python.org/dev/peps/pep-0465/.  We now have to exclude the
    +" symbol from highlighting when used in that context.
    +" Single line multiplication.
    +syn match   mojoMatrixMultiply
    +      \ "\%(\w\|[])]\)\s*@"
    +      \ contains=ALLBUT,mojoDecoratorName,mojoDecorator,mojoFunction,mojoDoctestValue
    +      \ transparent
    +" Multiplication continued on the next line after backslash.
    +syn match   mojoMatrixMultiply
    +      \ "[^\\]\\\s*\n\%(\s*\.\.\.\s\)\=\s\+@"
    +      \ contains=ALLBUT,mojoDecoratorName,mojoDecorator,mojoFunction,mojoDoctestValue
    +      \ transparent
    +" Multiplication in a parenthesized expression over multiple lines with @ at
    +" the start of each continued line; very similar to decorators and complex.
    +syn match   mojoMatrixMultiply
    +      \ "^\s*\%(\%(>>>\|\.\.\.\)\s\+\)\=\zs\%(\h\|\%(\h\|[[(]\).\{-}\%(\w\|[])]\)\)\s*\n\%(\s*\.\.\.\s\)\=\s\+@\%(.\{-}\n\%(\s*\.\.\.\s\)\=\s\+@\)*"
    +      \ contains=ALLBUT,mojoDecoratorName,mojoDecorator,mojoFunction,mojoDoctestValue
    +      \ transparent
    +
    +syn match   mojoFunction	"\h\w*" display contained
    +
    +syn match   mojoComment	"#.*$" contains=mojoTodo,@Spell
    +syn keyword mojoTodo		FIXME NOTE NOTES TODO XXX contained
    +
    +" Triple-quoted strings can contain doctests.
    +syn region  mojoString matchgroup=mojoQuotes
    +      \ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
    +      \ contains=mojoEscape,@Spell
    +syn region  mojoString matchgroup=mojoTripleQuotes
    +      \ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend
    +      \ contains=mojoEscape,mojoSpaceError,mojoDoctest,@Spell
    +syn region  mojoRawString matchgroup=mojoQuotes
    +      \ start=+[uU]\=[rR]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
    +      \ contains=@Spell
    +syn region  mojoRawString matchgroup=pythonTripleQuotes
    +      \ start=+[uU]\=[rR]\z('''\|"""\)+ end="\z1" keepend
    +      \ contains=pythonSpaceError,mojoDoctest,@Spell
    +
    +syn match   mojoEscape	+\\[abfnrtv'"\\]+ contained
    +syn match   mojoEscape	"\\\o\{1,3}" contained
    +syn match   mojoEscape	"\\x\x\{2}" contained
    +syn match   mojoEscape	"\%(\\u\x\{4}\|\\U\x\{8}\)" contained
    +" Python allows case-insensitive Unicode IDs: http://www.unicode.org/charts/
    +syn match   mojoEscape	"\\N{\a\+\%(\s\a\+\)*}" contained
    +syn match   mojoEscape	"\\$"
    +
    +" It is very important to understand all details before changing the
    +" regular expressions below or their order.
    +" The word boundaries are *not* the floating-point number boundaries
    +" because of a possible leading or trailing decimal point.
    +" The expressions below ensure that all valid number literals are
    +" highlighted, and invalid number literals are not.  For example,
    +"
    +" - a decimal point in '4.' at the end of a line is highlighted,
    +" - a second dot in 1.0.0 is not highlighted,
    +" - 08 is not highlighted,
    +" - 08e0 or 08j are highlighted,
    +"
    +" and so on, as specified in the 'Python Language Reference'.
    +" https://docs.python.org/reference/lexical_analysis.html#numeric-literals
    +if !exists("mojo_no_number_highlight")
    +  " numbers (including complex)
    +  syn match   mojoNumber	"\<0[oO]\%(_\=\o\)\+\>"
    +  syn match   mojoNumber	"\<0[xX]\%(_\=\x\)\+\>"
    +  syn match   mojoNumber	"\<0[bB]\%(_\=[01]\)\+\>"
    +  syn match   mojoNumber	"\<\%([1-9]\%(_\=\d\)*\|0\+\%(_\=0\)*\)\>"
    +  syn match   mojoNumber	"\<\d\%(_\=\d\)*[jJ]\>"
    +  syn match   mojoNumber	"\<\d\%(_\=\d\)*[eE][+-]\=\d\%(_\=\d\)*[jJ]\=\>"
    +  syn match   mojoNumber
    +        \ "\<\d\%(_\=\d\)*\.\%([eE][+-]\=\d\%(_\=\d\)*\)\=[jJ]\=\%(\W\|$\)\@="
    +  syn match   mojoNumber
    +        \ "\%(^\|\W\)\zs\%(\d\%(_\=\d\)*\)\=\.\d\%(_\=\d\)*\%([eE][+-]\=\d\%(_\=\d\)*\)\=[jJ]\=\>"
    +endif
    +
    +" The built-ins are added in the same order of appearance in Mojo stdlib docs
    +" https://docs.modular.com/mojo/lib.html
    +"
    +if !exists("mojo_no_builtin_highlight")
    +  " Built-in functions
    +  syn keyword mojoBuiltin	slice constrained debug_assert put_new_line print
    +  syn keyword mojoBuiltin	print_no_newline len range rebind element_type 
    +  syn keyword mojoBuiltin	ord chr atol isdigit index address string
    +  " Built-in types
    +  syn keyword mojoType		Byte ListLiteral CoroutineContext Coroutine DType
    +  syn keyword mojoType		dtype type invalid bool int8 si8 unit8 ui8 int16 
    +  syn keyword mojoType		si16 unit16 ui16 int32 si32 uint32 ui32 int64 
    +  syn keyword mojoType		si64 uint64 ui64 bfloat16 bf16 float16 f16 float32
    +  syn keyword mojoType		f32 float64 f64 Error FloatLiteral Int Attr SIMD 
    +  syn keyword mojoType		Int8 UInt8 Int16 UInt16 Int32 UInt32 Int64 UInt64
    +  syn keyword mojoType		Float16 Float32 Float64 element_type _65x13_type
    +  syn keyword mojoType		String StringLiteral StringRef Tuple AnyType
    +  syn keyword mojoType		NoneType None Lifetime
    +  " avoid highlighting attributes as builtins
    +  syn match   mojoAttribute	/\.\h\w*/hs=s+1
    +	\ contains=ALLBUT,mojoBuiltin,mojoFunction,mojoAsync
    +	\ transparent
    +endif
    +
    +" From the 'Python Library Reference' class hierarchy at the bottom.
    +" http://docs.python.org/library/exceptions.html
    +if !exists("mojo_no_exception_highlight")
    +  " builtin base exceptions (used mostly as base classes for other exceptions)
    +  syn keyword mojoExceptions	BaseException Exception
    +  syn keyword mojoExceptions	ArithmeticError BufferError LookupError
    +  " builtin exceptions (actually raised)
    +  syn keyword mojoExceptions	AssertionError AttributeError EOFError
    +  syn keyword mojoExceptions	FloatingPointError GeneratorExit ImportError
    +  syn keyword mojoExceptions	IndentationError IndexError KeyError
    +  syn keyword mojoExceptions	KeyboardInterrupt MemoryError
    +  syn keyword mojoExceptions	ModuleNotFoundError NameError
    +  syn keyword mojoExceptions	NotImplementedError OSError OverflowError
    +  syn keyword mojoExceptions	RecursionError ReferenceError RuntimeError
    +  syn keyword mojoExceptions	StopAsyncIteration StopIteration SyntaxError
    +  syn keyword mojoExceptions	SystemError SystemExit TabError TypeError
    +  syn keyword mojoExceptions	UnboundLocalError UnicodeDecodeError
    +  syn keyword mojoExceptions	UnicodeEncodeError UnicodeError
    +  syn keyword mojoExceptions	UnicodeTranslateError ValueError
    +  syn keyword mojoExceptions	ZeroDivisionError
    +  " builtin exception aliases for OSError
    +  syn keyword mojoExceptions	EnvironmentError IOError WindowsError
    +  " builtin OS exceptions in Python 3
    +  syn keyword mojoExceptions	BlockingIOError BrokenPipeError
    +  syn keyword mojoExceptions	ChildProcessError ConnectionAbortedError
    +  syn keyword mojoExceptions	ConnectionError ConnectionRefusedError
    +  syn keyword mojoExceptions	ConnectionResetError FileExistsError
    +  syn keyword mojoExceptions	FileNotFoundError InterruptedError
    +  syn keyword mojoExceptions	IsADirectoryError NotADirectoryError
    +  syn keyword mojoExceptions	PermissionError ProcessLookupError TimeoutError
    +  " builtin warnings
    +  syn keyword mojoExceptions	BytesWarning DeprecationWarning FutureWarning
    +  syn keyword mojoExceptions	ImportWarning PendingDeprecationWarning
    +  syn keyword mojoExceptions	ResourceWarning RuntimeWarning
    +  syn keyword mojoExceptions	SyntaxWarning UnicodeWarning
    +  syn keyword mojoExceptions	UserWarning Warning
    +endif
    +
    +if exists("mojo_space_error_highlight")
    +  " trailing whitespace
    +  syn match   mojoSpaceError	display excludenl "\s\+$"
    +  " mixed tabs and spaces
    +  syn match   mojoSpaceError	display " \+\t"
    +  syn match   mojoSpaceError	display "\t\+ "
    +endif
    +
    +" Do not spell doctests inside strings.
    +" Notice that the end of a string, either ''', or """, will end the contained
    +" doctest too.  Thus, we do *not* need to have it as an end pattern.
    +if !exists("mojo_no_doctest_highlight")
    +  if !exists("mojo_no_doctest_code_highlight")
    +    syn region mojoDoctest
    +	  \ start="^\s*>>>\s" end="^\s*$"
    +	  \ contained contains=ALLBUT,mojoDoctest,mojoFunction,@Spell
    +    syn region mojoDoctestValue
    +	  \ start=+^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\++ end="$"
    +	  \ contained
    +  else
    +    syn region mojoDoctest
    +	  \ start="^\s*>>>" end="^\s*$"
    +	  \ contained contains=@NoSpell
    +  endif
    +endif
    +
    +" Sync at the beginning of class, function, or method definition.
    +syn sync match mojoSync grouphere NONE "^\%(def\|class\)\s\+\h\w*\s*[(:]"
    +
    +" The default highlight links.  Can be overridden later.
    +hi def link mojoStatement		Statement
    +hi def link mojoConditional		Conditional
    +hi def link mojoRepeat			Repeat
    +hi def link mojoOperator		Operator
    +hi def link mojoException		Exception
    +hi def link mojoInclude			Include
    +hi def link mojoAsync			Statement
    +hi def link mojoDecorator		Define
    +hi def link mojoDecoratorName		Function
    +hi def link mojoFunction		Function
    +hi def link mojoComment			Comment
    +hi def link mojoTodo			Todo
    +hi def link mojoString			String
    +hi def link mojoRawString		String
    +hi def link mojoQuotes			String
    +hi def link mojoTripleQuotes		mojoQuotes
    +hi def link mojoEscape			Special
    +if !exists("mojo_no_number_highlight")
    +  hi def link mojoNumber		Number
    +endif
    +if !exists("mojo_no_builtin_highlight")
    +  hi def link mojoBuiltin		Function
    +  hi def link mojoType			Type
    +endif
    +if !exists("mojo_no_exception_highlight")
    +  hi def link mojoExceptions		Structure
    +endif
    +if exists("mojo_space_error_highlight")
    +  hi def link mojoSpaceError		Error
    +endif
    +if !exists("mojo_no_doctest_highlight")
    +  hi def link mojoDoctest		Special
    +  hi def link mojoDoctestValue	Define
    +endif
    +
    +let b:current_syntax = "mojo"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim:set sw=2 sts=2 ts=8 noet:
    diff --git a/.config/vim/syntax/monk.vim b/.config/vim/syntax/monk.vim
    new file mode 100644
    index 0000000..3af8101
    --- /dev/null
    +++ b/.config/vim/syntax/monk.vim
    @@ -0,0 +1,217 @@
    +" Vim syntax file
    +" Language: Monk (See-Beyond Technologies)
    +" Maintainer: Mike Litherland 
    +" Last Change: 2012 Feb 03 by Thilo Six
    +
    +" This syntax file is good enough for my needs, but others
    +" may desire more features.  Suggestions and bug reports
    +" are solicited by the author (above).
    +
    +" Originally based on the Scheme syntax file by:
    +
    +" Maintainer:	Dirk van Deun 
    +" Last Change:	April 30, 1998
    +
    +" In fact it's almost identical. :)
    +
    +" The original author's notes:
    +" This script incorrectly recognizes some junk input as numerals:
    +" parsing the complete system of Scheme numerals using the pattern
    +" language is practically impossible: I did a lax approximation.
    +
    +" Initializing:
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn case ignore
    +
    +" Fascist highlighting: everything that doesn't fit the rules is an error...
    +
    +syn match	monkError	oneline    ![^ \t()";]*!
    +syn match	monkError	oneline    ")"
    +
    +" Quoted and backquoted stuff
    +
    +syn region monkQuoted matchgroup=Delimiter start="['`]" end=![ \t()";]!me=e-1 contains=ALLBUT,monkStruc,monkSyntax,monkFunc
    +
    +syn region monkQuoted matchgroup=Delimiter start="['`](" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
    +syn region monkQuoted matchgroup=Delimiter start="['`]#(" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
    +
    +syn region monkStrucRestricted matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
    +syn region monkStrucRestricted matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
    +
    +syn region monkUnquote matchgroup=Delimiter start="," end=![ \t()";]!me=e-1 contains=ALLBUT,monkStruc,monkSyntax,monkFunc
    +syn region monkUnquote matchgroup=Delimiter start=",@" end=![ \t()";]!me=e-1 contains=ALLBUT,monkStruc,monkSyntax,monkFunc
    +
    +syn region monkUnquote matchgroup=Delimiter start=",(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
    +syn region monkUnquote matchgroup=Delimiter start=",@(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
    +
    +syn region monkUnquote matchgroup=Delimiter start=",#(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
    +syn region monkUnquote matchgroup=Delimiter start=",@#(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
    +
    +" R5RS Scheme Functions and Syntax:
    +
    +setlocal iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
    +
    +syn keyword monkSyntax lambda and or if cond case define let let* letrec
    +syn keyword monkSyntax begin do delay set! else =>
    +syn keyword monkSyntax quote quasiquote unquote unquote-splicing
    +syn keyword monkSyntax define-syntax let-syntax letrec-syntax syntax-rules
    +
    +syn keyword monkFunc not boolean? eq? eqv? equal? pair? cons car cdr set-car!
    +syn keyword monkFunc set-cdr! caar cadr cdar cddr caaar caadr cadar caddr
    +syn keyword monkFunc cdaar cdadr cddar cdddr caaaar caaadr caadar caaddr
    +syn keyword monkFunc cadaar cadadr caddar cadddr cdaaar cdaadr cdadar cdaddr
    +syn keyword monkFunc cddaar cddadr cdddar cddddr null? list? list length
    +syn keyword monkFunc append reverse list-ref memq memv member assq assv assoc
    +syn keyword monkFunc symbol? symbol->string string->symbol number? complex?
    +syn keyword monkFunc real? rational? integer? exact? inexact? = < > <= >=
    +syn keyword monkFunc zero? positive? negative? odd? even? max min + * - / abs
    +syn keyword monkFunc quotient remainder modulo gcd lcm numerator denominator
    +syn keyword monkFunc floor ceiling truncate round rationalize exp log sin cos
    +syn keyword monkFunc tan asin acos atan sqrt expt make-rectangular make-polar
    +syn keyword monkFunc real-part imag-part magnitude angle exact->inexact
    +syn keyword monkFunc inexact->exact number->string string->number char=?
    +syn keyword monkFunc char-ci=? char? char-ci>? char<=?
    +syn keyword monkFunc char-ci<=? char>=? char-ci>=? char-alphabetic? char?
    +syn keyword monkFunc char-numeric? char-whitespace? char-upper-case?
    +syn keyword monkFunc char-lower-case?
    +syn keyword monkFunc char->integer integer->char char-upcase char-downcase
    +syn keyword monkFunc string? make-string string string-length string-ref
    +syn keyword monkFunc string-set! string=? string-ci=? string? string-ci>? string<=? string-ci<=? string>=?
    +syn keyword monkFunc string-ci>=? substring string-append vector? make-vector
    +syn keyword monkFunc vector vector-length vector-ref vector-set! procedure?
    +syn keyword monkFunc apply map for-each call-with-current-continuation
    +syn keyword monkFunc call-with-input-file call-with-output-file input-port?
    +syn keyword monkFunc output-port? current-input-port current-output-port
    +syn keyword monkFunc open-input-file open-output-file close-input-port
    +syn keyword monkFunc close-output-port eof-object? read read-char peek-char
    +syn keyword monkFunc write display newline write-char call/cc
    +syn keyword monkFunc list-tail string->list list->string string-copy
    +syn keyword monkFunc string-fill! vector->list list->vector vector-fill!
    +syn keyword monkFunc force with-input-from-file with-output-to-file
    +syn keyword monkFunc char-ready? load transcript-on transcript-off eval
    +syn keyword monkFunc dynamic-wind port? values call-with-values
    +syn keyword monkFunc monk-report-environment null-environment
    +syn keyword monkFunc interaction-environment
    +
    +" Keywords specific to STC's implementation
    +
    +syn keyword monkFunc $event-clear $event-parse $event->string $make-event-map
    +syn keyword monkFunc $resolve-event-definition change-pattern copy copy-strip
    +syn keyword monkFunc count-data-children count-map-children count-rep data-map
    +syn keyword monkFunc duplicate duplicate-strip file-check file-lookup get
    +syn keyword monkFunc insert list-lookup node-has-data? not-verify path?
    +syn keyword monkFunc path-defined-as-repeating? path-nodeclear path-nodedepth
    +syn keyword monkFunc path-nodename path-nodeparentname path->string path-valid?
    +syn keyword monkFunc regex string->path timestamp uniqueid verify
    +
    +" Keywords from the Monk function library (from e*Gate 4.1 programmers ref)
    +syn keyword monkFunc allcap? capitalize char-punctuation? char-substitute
    +syn keyword monkFunc char-to-char conv count-used-children degc->degf
    +syn keyword monkFunc diff-two-dates display-error empty-string? fail_id
    +syn keyword monkFunc fail_id_if fail_translation fail_translation_if
    +syn keyword monkFunc find-get-after find-get-before get-timestamp julian-date?
    +syn keyword monkFunc julian->standard leap-year? map-string not-empty-string?
    +syn keyword monkFunc standard-date? standard->julian string-begins-with?
    +syn keyword monkFunc string-contains? string-ends-with? string-search-from-left
    +syn keyword monkFunc string-search-from-right string->ssn strip-punct
    +syn keyword monkFunc strip-string substring=? symbol-table-get symbol-table-put
    +syn keyword monkFunc trim-string-left trim-string-right valid-decimal?
    +syn keyword monkFunc valid-integer? verify-type
    +
    +" Writing out the complete description of Scheme numerals without
    +" using variables is a day's work for a trained secretary...
    +" This is a useful lax approximation:
    +
    +syn match	monkNumber	oneline    "[-#+0-9.][-#+/0-9a-f@i.boxesfdl]*"
    +syn match	monkError	oneline    ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t()";][^ \t()";]*!
    +
    +syn match	monkOther	oneline    ![+-][ \t()";]!me=e-1
    +syn match	monkOther	oneline    ![+-]$!
    +" ... so that a single + or -, inside a quoted context, would not be
    +" interpreted as a number (outside such contexts, it's a monkFunc)
    +
    +syn match	monkDelimiter	oneline    !\.[ \t()";]!me=e-1
    +syn match	monkDelimiter	oneline    !\.$!
    +" ... and a single dot is not a number but a delimiter
    +
    +" Simple literals:
    +
    +syn match	monkBoolean	oneline    "#[tf]"
    +syn match	monkError	oneline    !#[tf][^ \t()";]\+!
    +
    +syn match	monkChar	oneline    "#\\"
    +syn match	monkChar	oneline    "#\\."
    +syn match	monkError	oneline    !#\\.[^ \t()";]\+!
    +syn match	monkChar	oneline    "#\\space"
    +syn match	monkError	oneline    !#\\space[^ \t()";]\+!
    +syn match	monkChar	oneline    "#\\newline"
    +syn match	monkError	oneline    !#\\newline[^ \t()";]\+!
    +
    +" This keeps all other stuff unhighlighted, except *stuff* and :
    +
    +syn match	monkOther	oneline    ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*,
    +syn match	monkError	oneline    ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
    +
    +syn match	monkOther	oneline    "\.\.\."
    +syn match	monkError	oneline    !\.\.\.[^ \t()";]\+!
    +" ... a special identifier
    +
    +syn match	monkConstant	oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[ \t()";],me=e-1
    +syn match	monkConstant	oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*$,
    +syn match	monkError	oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
    +
    +syn match	monkConstant	oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t()";],me=e-1
    +syn match	monkConstant	oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$,
    +syn match	monkError	oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
    +
    +" Monk input and output structures
    +syn match	monkSyntax	oneline    "\(\~input\|\[I\]->\)[^ \t]*"
    +syn match	monkFunc	oneline    "\(\~output\|\[O\]->\)[^ \t]*"
    +
    +" Non-quoted lists, and strings:
    +
    +syn region monkStruc matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALL
    +syn region monkStruc matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALL
    +
    +syn region	monkString	start=+"+  skip=+\\[\\"]+ end=+"+
    +
    +" Comments:
    +
    +syn match	monkComment	";.*$"
    +
    +" Synchronization and the wrapping up...
    +
    +syn sync match matchPlace grouphere NONE "^[^ \t]"
    +" ... i.e. synchronize on a line that starts at the left margin
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link monkSyntax		Statement
    +hi def link monkFunc		Function
    +
    +hi def link monkString		String
    +hi def link monkChar		Character
    +hi def link monkNumber		Number
    +hi def link monkBoolean		Boolean
    +
    +hi def link monkDelimiter	Delimiter
    +hi def link monkConstant	Constant
    +
    +hi def link monkComment		Comment
    +hi def link monkError		Error
    +
    +
    +let b:current_syntax = "monk"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/moo.vim b/.config/vim/syntax/moo.vim
    new file mode 100644
    index 0000000..6f2dd59
    --- /dev/null
    +++ b/.config/vim/syntax/moo.vim
    @@ -0,0 +1,173 @@
    +" Vim syntax file
    +" Language:	MOO
    +" Maintainer:	Timo Frenay 
    +" Last Change:	2020 Oct 19
    +" Note:		Requires Vim 6.0 or above
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Initializations
    +syn case ignore
    +
    +" C-style comments
    +syn match mooUncommentedError display ~\*/~
    +syn match mooCStyleCommentError display ~/\ze\*~ contained
    +syn region mooCStyleComment matchgroup=mooComment start=~/\*~ end=~\*/~ contains=mooCStyleCommentError
    +
    +" Statements
    +if exists("moo_extended_cstyle_comments")
    +  syn match mooIdentifier display ~\%(\%(/\*.\{-}\*/\s*\)*\)\@>\<\h\w*\>~ contained transparent contains=mooCStyleComment,@mooKeyword,mooType,mooVariable
    +else
    +  syn match mooIdentifier display ~\<\h\w*\>~ contained transparent contains=@mooKeyword,mooType,mooVariable
    +endif
    +syn keyword mooStatement break continue else elseif endfor endfork endif endtry endwhile finally for if try
    +syn keyword mooStatement except fork while nextgroup=mooIdentifier skipwhite
    +syn keyword mooStatement return nextgroup=mooString skipwhite
    +
    +" Operators
    +syn keyword mooOperatorIn in
    +
    +" Error constants
    +syn keyword mooAny ANY
    +syn keyword mooErrorConstant E_ARGS E_INVARG E_DIV E_FLOAT E_INVIND E_MAXREC E_NACC E_NONE E_PERM E_PROPNF E_QUOTA E_RANGE E_RECMOVE E_TYPE E_VARNF E_VERBNF
    +
    +" Builtin variables
    +syn match mooType display ~\<\%(ERR\|FLOAT\|INT\|LIST\|NUM\|OBJ\|STR\)\>~
    +syn match mooVariable display ~\<\%(args\%(tr\)\=\|caller\|dobj\%(str\)\=\|iobj\%(str\)\=\|player\|prepstr\|this\|verb\)\>~
    +
    +" Strings
    +syn match mooStringError display ~[^\t -[\]-~]~ contained
    +syn match mooStringSpecialChar display ~\\["\\]~ contained
    +if !exists("moo_no_regexp")
    +  " Regular expressions
    +  syn match mooRegexp display ~%%~ contained containedin=mooString,mooRegexpParentheses transparent contains=NONE
    +  syn region mooRegexpParentheses display matchgroup=mooRegexpOr start=~%(~ skip=~%%~ end=~%)~ contained containedin=mooString,mooRegexpParentheses transparent oneline
    +  syn match mooRegexpOr display ~%|~ contained containedin=mooString,mooRegexpParentheses
    +endif
    +if !exists("moo_no_pronoun_sub")
    +  " Pronoun substitutions
    +  syn match mooPronounSub display ~%%~ contained containedin=mooString transparent contains=NONE
    +  syn match mooPronounSub display ~%[#dilnopqrst]~ contained containedin=mooString
    +  syn match mooPronounSub display ~%\[#[dilnt]\]~ contained containedin=mooString
    +  syn match mooPronounSub display ~%(\h\w*)~ contained containedin=mooString
    +  syn match mooPronounSub display ~%\[[dilnt]\h\w*\]~ contained containedin=mooString
    +  syn match mooPronounSub display ~%<\%([dilnt]:\)\=\a\+>~ contained containedin=mooString
    +endif
    +if exists("moo_unmatched_quotes")
    +  syn region mooString matchgroup=mooStringError start=~"~ end=~$~ contains=@mooStringContents keepend
    +  syn region mooString start=~"~ skip=~\\.~ end=~"~ contains=@mooStringContents oneline keepend
    +else
    +  syn region mooString start=~"~ skip=~\\.~ end=~"\|$~ contains=@mooStringContents keepend
    +endif
    +
    +" Numbers and object numbers
    +syn match mooNumber display ~\%(\%(\<\d\+\)\=\.\d\+\|\<\d\+\)\%(e[+\-]\=\d\+\)\=\>~
    +syn match mooObject display ~#-\=\d\+\>~
    +
    +" Properties and verbs
    +if exists("moo_builtin_properties")
    +  "Builtin properties
    +  syn keyword mooBuiltinProperty contents f location name owner programmer r w wizard contained containedin=mooPropRef
    +endif
    +if exists("moo_extended_cstyle_comments")
    +  syn match mooPropRef display ~\.\s*\%(\%(/\*.\{-}\*/\s*\)*\)\@>\h\w*\>~ transparent contains=mooCStyleComment,@mooKeyword
    +  syn match mooVerbRef display ~:\s*\%(\%(/\*.\{-}\*/\s*\)*\)\@>\h\w*\>~ transparent contains=mooCStyleComment,@mooKeyword
    +else
    +  syn match mooPropRef display ~\.\s*\h\w*\>~ transparent contains=@mooKeyword
    +  syn match mooVerbRef display ~:\s*\h\w*\>~ transparent contains=@mooKeyword
    +endif
    +
    +" Builtin functions, core properties and core verbs
    +if exists("moo_extended_cstyle_comments")
    +  syn match mooBuiltinFunction display ~\<\h\w*\s*\%(\%(/\*.\{-}\*/\s*\)*\)\@>\ze(~ contains=mooCStyleComment
    +  syn match mooCorePropOrVerb display ~\$\s*\%(\%(/\*.\{-}\*/\s*\)*\)\@>\%(in\>\)\@!\h\w*\>~ contains=mooCStyleComment,@mooKeyword
    +else
    +  syn match mooBuiltinFunction display ~\<\h\w*\s*\ze(~ contains=NONE
    +  syn match mooCorePropOrVerb display ~\$\s*\%(in\>\)\@!\h\w*\>~ contains=@mooKeyword
    +endif
    +if exists("moo_unknown_builtin_functions")
    +  syn match mooUnknownBuiltinFunction ~\<\h\w*\>~ contained containedin=mooBuiltinFunction contains=mooKnownBuiltinFunction
    +  " Known builtin functions as of version 1.8.1 of the server
    +  " Add your own extensions to this group if you like
    +  syn keyword mooKnownBuiltinFunction abs acos add_property add_verb asin atan binary_hash boot_player buffered_output_length callers caller_perms call_function ceil children chparent clear_property connected_players connected_seconds connection_name connection_option connection_options cos cosh create crypt ctime db_disk_size decode_binary delete_property delete_verb disassemble dump_database encode_binary equal eval exp floatstr floor flush_input force_input function_info idle_seconds index is_clear_property is_member is_player kill_task length listappend listdelete listen listeners listinsert listset log log10 match max max_object memory_usage min move notify object_bytes open_network_connection output_delimiters parent pass players properties property_info queued_tasks queue_info raise random read recycle renumber reset_max_object resume rindex rmatch seconds_left server_log server_version setadd setremove set_connection_option set_player_flag set_property_info set_task_perms set_verb_args set_verb_code set_verb_info shutdown sin sinh sqrt strcmp string_hash strsub substitute suspend tan tanh task_id task_stack ticks_left time tofloat toint toliteral tonum toobj tostr trunc typeof unlisten valid value_bytes value_hash verbs verb_args verb_code verb_info contained
    +endif
    +
    +" Enclosed expressions
    +syn match mooUnenclosedError display ~[')\]|}]~
    +syn match mooParenthesesError display ~[';\]|}]~ contained
    +syn region mooParentheses start=~(~ end=~)~ transparent contains=@mooEnclosedContents,mooParenthesesError
    +syn match mooBracketsError display ~[');|}]~ contained
    +syn region mooBrackets start=~\[~ end=~\]~ transparent contains=@mooEnclosedContents,mooBracketsError
    +syn match mooBracesError display ~[');\]|]~ contained
    +syn region mooBraces start=~{~ end=~}~ transparent contains=@mooEnclosedContents,mooBracesError
    +syn match mooQuestionError display ~[');\]}]~ contained
    +syn region mooQuestion start=~?~ end=~|~ transparent contains=@mooEnclosedContents,mooQuestionError
    +syn match mooCatchError display ~[);\]|}]~ contained
    +syn region mooCatch matchgroup=mooExclamation start=~`~ end=~'~ transparent contains=@mooEnclosedContents,mooCatchError,mooExclamation
    +if exists("moo_extended_cstyle_comments")
    +  syn match mooExclamation display ~[\t !%&(*+,\-/<=>?@[^`{|]\@!=\@!~ contained contains=mooCStyleComment
    +else
    +  syn match mooExclamation display ~[\t !%&(*+,\-/<=>?@[^`{|]\@?@^|]\@?~ transparent contains=mooCStyleComment
    +else
    +  syn match mooScattering ~[,{]\@<=\s*?~ transparent contains=NONE
    +endif
    +
    +" Clusters
    +syn cluster mooKeyword contains=mooStatement,mooOperatorIn,mooAny,mooErrorConstant
    +syn cluster mooStringContents contains=mooStringError,mooStringSpecialChar
    +syn cluster mooEnclosedContents contains=TOP,mooUnenclosedError,mooComment,mooNonCode
    +
    +" Define the default highlighting.
    +hi def link mooUncommentedError Error
    +hi def link mooCStyleCommentError Error
    +hi def link mooCStyleComment Comment
    +hi def link mooStatement Statement
    +hi def link mooOperatorIn Operator
    +hi def link mooAny Constant " link this to Keyword if you want
    +hi def link mooErrorConstant Constant
    +hi def link mooType Type
    +hi def link mooVariable Type
    +hi def link mooStringError Error
    +hi def link mooStringSpecialChar SpecialChar
    +hi def link mooRegexpOr SpecialChar
    +hi def link mooPronounSub SpecialChar
    +hi def link mooString String
    +hi def link mooNumber Number
    +hi def link mooObject Number
    +hi def link mooBuiltinProperty Type
    +hi def link mooBuiltinFunction Function
    +hi def link mooUnknownBuiltinFunction Error
    +hi def link mooKnownBuiltinFunction Function
    +hi def link mooCorePropOrVerb Identifier
    +hi def link mooUnenclosedError Error
    +hi def link mooParenthesesError Error
    +hi def link mooBracketsError Error
    +hi def link mooBracesError Error
    +hi def link mooQuestionError Error
    +hi def link mooCatchError Error
    +hi def link mooExclamation Exception
    +hi def link mooComment Comment
    +hi def link mooNonCode PreProc
    +
    +let b:current_syntax = "moo"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/mp.vim b/.config/vim/syntax/mp.vim
    new file mode 100644
    index 0000000..36c07e6
    --- /dev/null
    +++ b/.config/vim/syntax/mp.vim
    @@ -0,0 +1,273 @@
    +vim9script
    +
    +# Vim syntax file
    +# Language:           MetaPost
    +# Maintainer:         Nicola Vitacolonna 
    +# Former Maintainers: Andreas Scherer 
    +# Latest Revision:    2022 Aug 12
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +# Deprecation warnings: to be removed eventually
    +if exists("g:plain_mp_macros")
    +  echomsg "[mp] g:plain_mp_macros is deprecated: use g:mp_plain_macros instead."
    +endif
    +if exists("mfplain_mp_macros")
    +  echomsg "[mp] g:mfplain_mp_macros is deprecated: use g:mp_mfplain_macros instead."
    +endif
    +if exists("other_mp_macros")
    +  echomsg "[mp] g:other_mp_macros is deprecated: use g:mp_other_macros instead."
    +endif
    +
    +# Store the current values of METAFONT global options
    +const mf_plain_macros = get(g:, "mf_plain_macros", get(g:, "plain_mf_macros", -1))
    +const mf_plain_modes  = get(g:, "mf_plain_modes",  get(g:, "plain_mf_modes",  -1))
    +const mf_other_macros = get(g:, "mf_other_macros", get(g:, "other_mf_macros", -1))
    +
    +g:mf_plain_macros = 0 # plain.mf has no special meaning for MetaPost
    +g:mf_plain_modes  = 0 # No METAFONT modes
    +g:mf_other_macros = 0 # cmbase.mf, logo.mf, ... neither
    +
    +# Read the METAFONT syntax to start with
    +runtime! syntax/mf.vim
    +unlet b:current_syntax # Necessary for syn include below
    +
    +# Restore the value of existing global variables
    +if mf_plain_macros == -1
    +  unlet g:mf_plain_macros
    +else
    +  g:plain_mf_macros = mf_plain_macros
    +endif
    +if mf_plain_modes == -1
    +  unlet g:mf_plain_modes
    +else
    +  g:mf_plain_modes = mf_plain_modes
    +endif
    +if mf_other_macros == -1
    +  unlet g:mf_other_macros
    +else
    +  g:mf_other_macros = mf_other_macros
    +endif
    +
    +# Use TeX highlighting inside verbatimtex/btex... etex
    +syn include @MPTeX syntax/tex.vim
    +unlet b:current_syntax
    +# These are defined as keywords rather than using matchgroup
    +# in order to make them available to syntaxcomplete.
    +syn keyword mpTeXdelim       btex etex verbatimtex contained
    +syn region mpTeXinsert matchgroup=mpTeXdelim start=/\\|\/ end=/\/ keepend contains=@MPTeX,mpTeXdelim
    +
    +# iskeyword must be set after the syn include above, because tex.vim sets `syn
    +# iskeyword`. Note that keywords do not contain numbers (numbers are
    +# subscripts)
    +syntax iskeyword @,_
    +
    +# MetaPost primitives not found in METAFONT
    +syn keyword mpBoolExp        bounded clipped filled stroked textual arclength
    +syn keyword mpNumExp         arctime blackpart bluepart colormodel cyanpart
    +syn keyword mpNumExp         fontsize greenpart greypart magentapart redpart
    +syn keyword mpPairExp        yellowpart llcorner lrcorner ulcorner urcorner
    +syn keyword mpPathExp        envelope pathpart
    +syn keyword mpPenExp         penpart
    +syn keyword mpPicExp         dashpart glyph infont
    +syn keyword mpStringExp      fontpart readfrom textpart
    +syn keyword mpType           cmykcolor color rgbcolor
    +# Other MetaPost primitives listed in the manual
    +syn keyword mpPrimitive      mpxbreak within
    +# Internal quantities not found in METAFONT
    +# (Table 6 in MetaPost: A User's Manual)
    +syn keyword mpInternal       defaultcolormodel hour minute linecap linejoin
    +syn keyword mpInternal       miterlimit mpprocset mpversion numberprecision
    +syn keyword mpInternal       numbersystem outputfilename outputformat
    +syn keyword mpInternal       outputformatoptions outputtemplate prologues
    +syn keyword mpInternal       restoreclipcolor tracinglostchars troffmode
    +syn keyword mpInternal       truecorners
    +# List of commands not found in METAFONT (from MetaPost: A User's Manual)
    +syn keyword mpCommand        clip closefrom dashed filenametemplate fontmapfile
    +syn keyword mpCommand        fontmapline setbounds withcmykcolor withcolor
    +syn keyword mpCommand        withgreyscale withoutcolor withpostscript
    +syn keyword mpCommand        withprescript withrgbcolor write
    +# METAFONT internal variables not found in MetaPost
    +syn keyword notDefined       autorounding chardx chardy fillin granularity
    +syn keyword notDefined       proofing smoothing tracingedges tracingpens
    +syn keyword notDefined       turningcheck xoffset yoffset
    +# Suffix defined only in METAFONT:
    +syn keyword notDefined       nodot
    +# Other not implemented primitives (see MetaPost: A User's Manual, §C.1)
    +syn keyword notDefined       cull display openwindow numspecial totalweight
    +syn keyword notDefined       withweight
    +
    +# Keywords defined by plain.mp
    +if get(g:, "mp_plain_macros", get(g:, "plain_mp_macros", 1)) || get(b:, "mp_metafun", get(g:, "mp_metafun", 0))
    +  syn keyword mpDef          beginfig clear_pen_memory clearit clearpen clearpen
    +  syn keyword mpDef          clearxy colorpart cutdraw downto draw drawarrow
    +  syn keyword mpDef          drawdblarrow drawdot drawoptions endfig erase
    +  syn keyword mpDef          exitunless fill filldraw flex gobble hide interact
    +  syn keyword mpDef          label loggingall makelabel numtok penstroke pickup
    +  syn keyword mpDef          range reflectedabout rotatedaround shipit
    +  syn keyword mpDef          stop superellipse takepower tracingall tracingnone
    +  syn keyword mpDef          undraw undrawdot unfill unfilldraw upto
    +  syn match   mpDef          "???"
    +  syn keyword mpVardef       arrowhead bbox bot buildcycle byte ceiling center
    +  syn keyword mpVardef       counterclockwise decr dir direction directionpoint
    +  syn keyword mpVardef       dotlabel dotlabels image incr interpath inverse
    +  syn keyword mpVardef       labels lft magstep max min penlabels penpos round
    +  syn keyword mpVardef       rt savepen solve tensepath thelabel top unitvector
    +  syn keyword mpVardef       whatever z
    +  syn keyword mpPrimaryDef   div dotprod gobbled mod
    +  syn keyword mpSecondaryDef intersectionpoint
    +  syn keyword mpTertiaryDef  cutafter cutbefore softjoin thru
    +  syn keyword mpNewInternal  ahangle ahlength bboxmargin beveled butt defaultpen
    +  syn keyword mpNewInternal  defaultscale dotlabeldiam eps epsilon infinity
    +  syn keyword mpNewInternal  join_radius labeloffset mitered pen_bot pen_lft
    +  syn keyword mpNewInternal  pen_rt pen_top rounded squared tolerance
    +  # Predefined constants
    +  syn keyword mpConstant     EOF background base_name base_version black
    +  syn keyword mpConstant     blankpicture blue ditto down evenly fullcircle
    +  syn keyword mpConstant     green halfcircle identity left origin penrazor
    +  syn keyword mpConstant     penspeck pensquare quartercircle red right
    +  syn keyword mpConstant     unitsquare up white withdots
    +  # Other predefined variables
    +  syn keyword mpVariable     currentpen currentpen_path currentpicture cuttings
    +  syn keyword mpVariable     defaultfont extra_beginfig extra_endfig
    +  syn keyword mpVariable     laboff labxf labyf laboff labxf labyf
    +  syn match   mpVariable     /\.\%(lft\|rt\|bot\|top\|ulft\|urt\|llft\|lrt\)\>/
    +  # let statements:
    +  syn keyword mpnumExp       abs
    +  syn keyword mpDef          rotatedabout
    +  syn keyword mpCommand      bye relax
    +  # on and off are not technically keywords, but it is nice to highlight them
    +  # inside dashpattern().
    +  syn keyword mpOnOff        off on contained
    +  syn keyword mpDash         dashpattern contained
    +  syn region  mpDashPattern start="dashpattern\s*" end=")"he=e-1 contains=mfNumeric,mfLength,mpOnOff,mpDash
    +endif
    +
    +# Keywords defined by mfplain.mp
    +if get(g:, "mp_mfplain_macros", get(g:, "mfplain_mp_macros", 0))
    +  syn keyword mpDef          beginchar capsule_def change_width
    +  syn keyword mpDef          define_blacker_pixels define_corrected_pixels
    +  syn keyword mpDef          define_good_x_pixels define_good_y_pixels
    +  syn keyword mpDef          define_horizontal_corrected_pixels define_pixels
    +  syn keyword mpDef          define_whole_blacker_pixels define_whole_pixels
    +  syn keyword mpDef          define_whole_vertical_blacker_pixels
    +  syn keyword mpDef          define_whole_vertical_pixels endchar
    +  syn keyword mpDef          font_coding_scheme font_extra_space font_identifier
    +  syn keyword mpDef          font_normal_shrink font_normal_space
    +  syn keyword mpDef          font_normal_stretch font_quad font_size font_slant
    +  syn keyword mpDef          font_x_height italcorr labelfont lowres_fix makebox
    +  syn keyword mpDef          makegrid maketicks mode_def mode_setup proofrule
    +  syn keyword mpDef          smode
    +  syn keyword mpVardef       hround proofrulethickness vround
    +  syn keyword mpNewInternal  blacker o_correction
    +  syn keyword mpVariable     extra_beginchar extra_endchar extra_setup rulepen
    +  # plus some no-ops, also from mfplain.mp
    +  syn keyword mpDef          cull cullit gfcorners imagerules nodisplays
    +  syn keyword mpDef          notransforms openit proofoffset screenchars
    +  syn keyword mpDef          screenrule screenstrokes showit
    +  syn keyword mpVardef       grayfont slantfont titlefont
    +  syn keyword mpVariable     currenttransform
    +  syn keyword mpConstant     unitpixel
    +  # These are not listed in the MetaPost manual, and some are ignored by
    +  # MetaPost, but are nonetheless defined in mfplain.mp
    +  syn keyword mpDef          killtext
    +  syn match   mpVardef       "\"
    +  syn keyword mpVariable     aspect_ratio localfont mag mode mode_name
    +  syn keyword mpVariable     proofcolor
    +  syn keyword mpConstant     lowres proof smoke
    +  syn keyword mpNewInternal  autorounding bp_per_pixel granularity
    +  syn keyword mpNewInternal  number_of_modes proofing smoothing turningcheck
    +endif
    +
    +# Keywords defined by all base macro packages:
    +# - (r)boxes.mp
    +# - format.mp
    +# - graph.mp
    +# - marith.mp
    +# - sarith.mp
    +# - string.mp
    +# - TEX.mp
    +if get(g:, "mp_other_macros", get(g:, "other_mp_macros", 1))
    +  # boxes and rboxes
    +  syn keyword mpDef          boxjoin drawboxed drawboxes drawunboxed
    +  syn keyword mpNewInternal  circmargin defaultdx defaultdy rbox_radius
    +  syn keyword mpVardef       boxit bpath circleit fixpos fixsize generic_declare
    +  syn keyword mpVardef       generic_redeclare generisize pic rboxit str_prefix
    +  # format
    +  syn keyword mpVardef       Mformat format init_numbers roundd
    +  syn keyword mpVariable     Fe_base Fe_plus
    +  syn keyword mpConstant     Ten_to
    +  # graph
    +  syn keyword mpDef          Gfor Gxyscale OUT auto begingraph endgraph gdata
    +  syn keyword mpDef          gdraw gdrawarrow gdrawdblarrow gfill plot
    +  syn keyword mpVardef       augment autogrid frame gdotlabel glabel grid itick
    +  syn keyword mpVardef       otick
    +  syn keyword mpVardef       Mreadpath setcoords setrange
    +  syn keyword mpNewInternal  Gmarks Gminlog Gpaths linear log
    +  syn keyword mpVariable     Autoform Gemarks Glmarks Gumarks
    +  syn keyword mpConstant     Gtemplate
    +  syn match   mpVariable     /Gmargin\.\%(low\|high\)/
    +  # marith
    +  syn keyword mpVardef       Mabs Meform Mexp Mexp_str Mlog Mlog_Str Mlog_str
    +  syn keyword mpPrimaryDef   Mdiv Mmul
    +  syn keyword mpSecondaryDef Madd Msub
    +  syn keyword mpTertiaryDef  Mleq
    +  syn keyword mpNewInternal  Mten Mzero
    +  # sarith
    +  syn keyword mpVardef       Sabs Scvnum
    +  syn keyword mpPrimaryDef   Sdiv Smul
    +  syn keyword mpSecondaryDef Sadd Ssub
    +  syn keyword mpTertiaryDef  Sleq Sneq
    +  # string
    +  syn keyword mpVardef       cspan isdigit loptok
    +  # TEX
    +  syn keyword mpVardef       TEX TEXPOST TEXPRE
    +endif
    +
    +if get(b:, "mp_metafun", get(g:, "mp_metafun", 0))
    +  # MetaFun additions to MetaPost base file
    +  syn keyword mpConstant cyan magenta yellow
    +  syn keyword mpConstant penspec
    +  syn keyword mpNumExp   graypart greycolor graycolor
    +
    +  # Highlight TeX keywords (for MetaPost embedded in ConTeXt documents)
    +  syn match   mpTeXKeyword  '\\[a-zA-Z@]\+'
    +
    +  syn keyword mpPrimitive runscript
    +
    +  runtime! syntax/shared/context-data-metafun.vim
    +
    +  hi def link metafunCommands   Statement
    +  hi def link metafunInternals  Identifier
    +endif
    +
    +# Define the default highlighting
    +hi def link mpTeXdelim     mpPrimitive
    +hi def link mpBoolExp      mfBoolExp
    +hi def link mpNumExp       mfNumExp
    +hi def link mpPairExp      mfPairExp
    +hi def link mpPathExp      mfPathExp
    +hi def link mpPenExp       mfPenExp
    +hi def link mpPicExp       mfPicExp
    +hi def link mpStringExp    mfStringExp
    +hi def link mpInternal     mfInternal
    +hi def link mpCommand      mfCommand
    +hi def link mpType         mfType
    +hi def link mpPrimitive    mfPrimitive
    +hi def link mpDef          mfDef
    +hi def link mpVardef       mpDef
    +hi def link mpPrimaryDef   mpDef
    +hi def link mpSecondaryDef mpDef
    +hi def link mpTertiaryDef  mpDef
    +hi def link mpNewInternal  mpInternal
    +hi def link mpVariable     mfVariable
    +hi def link mpConstant     mfConstant
    +hi def link mpOnOff        mpPrimitive
    +hi def link mpDash         mpPrimitive
    +hi def link mpTeXKeyword   Identifier
    +
    +b:current_syntax = "mp"
    +
    +# vim: sw=2 fdm=marker
    diff --git a/.config/vim/syntax/mplayerconf.vim b/.config/vim/syntax/mplayerconf.vim
    new file mode 100644
    index 0000000..84ad2da
    --- /dev/null
    +++ b/.config/vim/syntax/mplayerconf.vim
    @@ -0,0 +1,128 @@
    +" Vim syntax file
    +" Language:             mplayer(1) configuration file
    +" Maintainer:           Dmitri Vereshchagin 
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2015-01-24
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +setlocal iskeyword+=-
    +
    +syn keyword mplayerconfTodo     contained TODO FIXME XXX NOTE
    +
    +syn region mplayerconfComment   display oneline start='#' end='$'
    +                                \ contains=mplayerconfTodo,@Spell
    +
    +syn keyword mplayerconfPreProc  include
    +
    +syn keyword mplayerconfBoolean  yes no true false
    +
    +syn match   mplayerconfNumber   '\<\d\+\>'
    +
    +syn keyword mplayerconfOption   hardframedrop nomouseinput bandwidth dumpstream
    +                                \ rtsp-stream-over-tcp tv overlapsub
    +                                \ sub-bg-alpha subfont-outline unicode format
    +                                \ vo edl cookies fps zrfd af-adv nosound
    +                                \ audio-density passlogfile vobsuboutindex autoq
    +                                \ autosync benchmark colorkey nocolorkey edlout
    +                                \ enqueue fixed-vo framedrop h identify input
    +                                \ lircconf list-options loop menu menu-cfg
    +                                \ menu-root nojoystick nolirc nortc playlist
    +                                \ quiet really-quiet shuffle skin slave
    +                                \ softsleep speed sstep use-stdin aid alang
    +                                \ audio-demuxer audiofile audiofile-cache
    +                                \ cdrom-device cache cdda channels chapter
    +                                \ cookies-file demuxer dumpaudio dumpfile
    +                                \ dumpvideo dvbin dvd-device dvdangle forceidx
    +                                \ frames hr-mp3-seek idx ipv4-only-proxy
    +                                \ loadidx mc mf ni nobps noextbased
    +                                \ passwd prefer-ipv4 prefer-ipv6 rawaudio
    +                                \ rawvideo saveidx sb srate ss tskeepbroken
    +                                \ tsprog tsprobe user user-agent vid vivo
    +                                \ dumpjacosub dumpmicrodvdsub dumpmpsub dumpsami
    +                                \ dumpsrtsub dumpsub ffactor flip-hebrew font
    +                                \ forcedsubsonly fribidi-charset ifo noautosub
    +                                \ osdlevel sid slang spuaa spualign spugauss
    +                                \ sub sub-bg-color sub-demuxer sub-fuzziness
    +                                \ sub-no-text-pp subalign subcc subcp subdelay
    +                                \ subfile subfont-autoscale subfont-blur
    +                                \ subfont-encoding subfont-osd-scale
    +                                \ subfont-text-scale subfps subpos subwidth
    +                                \ utf8 vobsub vobsubid abs ao aofile aop delay
    +                                \ mixer nowaveheader aa bpp brightness contrast
    +                                \ dfbopts display double dr dxr2 fb fbmode
    +                                \ fbmodeconfig forcexv fs fsmode-dontuse fstype
    +                                \ geometry guiwid hue jpeg monitor-dotclock
    +                                \ monitor-hfreq monitor-vfreq monitoraspect
    +                                \ nograbpointer nokeepaspect noxv ontop panscan
    +                                \ rootwin saturation screenw stop-xscreensaver
    +                                \ vm vsync wid xineramascreen z zrbw zrcrop
    +                                \ zrdev zrhelp zrnorm zrquality zrvdec zrxdoff
    +                                \ ac af afm aspect flip lavdopts noaspect
    +                                \ noslices novideo oldpp pp pphelp ssf stereo
    +                                \ sws vc vfm x xvidopts xy y zoom vf vop
    +                                \ audio-delay audio-preload endpos ffourcc
    +                                \ include info noautoexpand noskip o oac of
    +                                \ ofps ovc skiplimit v vobsubout vobsuboutid
    +                                \ lameopts lavcopts nuvopts xvidencopts a52drc
    +                                \ adapter af-add af-clr af-del af-pre
    +                                \ allow-dangerous-playlist-parsing ass
    +                                \ ass-border-color ass-bottom-margin ass-color
    +                                \ ass-font-scale ass-force-style ass-hinting
    +                                \ ass-line-spacing ass-styles ass-top-margin
    +                                \ ass-use-margins ausid bluray-angle
    +                                \ bluray-device border border-pos-x border-pos-y
    +                                \ cache-min cache-seek-min capture codecpath
    +                                \ codecs-file correct-pts crash-debug
    +                                \ doubleclick-time dvd-speed edl-backward-delay
    +                                \ edl-start-pts embeddedfonts fafmttag
    +                                \ field-dominance fontconfig force-avi-aspect
    +                                \ force-key-frames frameno-file fullscreen gamma
    +                                \ gui gui-include gui-wid heartbeat-cmd
    +                                \ heartbeat-interval hr-edl-seek
    +                                \ http-header-fields idle ignore-start
    +                                \ key-fifo-size list-properties menu-chroot
    +                                \ menu-keepdir menu-startup mixer-channel
    +                                \ monitor-orientation monitorpixelaspect
    +                                \ mouse-movements msgcharset msgcolor msglevel
    +                                \ msgmodule name noar nocache noconfig
    +                                \ noconsolecontrols nocorrect-pts nodouble
    +                                \ noedl-start-pts noencodedups
    +                                \ noflip-hebrew-commas nogui noidx noodml
    +                                \ nostop-xscreensaver nosub noterm-osd
    +                                \ osd-duration osd-fractions panscanrange
    +                                \ pausing playing-msg priority profile
    +                                \ progbar-align psprobe pvr radio referrer
    +                                \ refreshrate reuse-socket rtc rtc-device
    +                                \ rtsp-destination rtsp-port
    +                                \ rtsp-stream-over-http screenh show-profile
    +                                \ softvol softvol-max sub-paths subfont
    +                                \ term-osd-esc title tvscan udp-ip udp-master
    +                                \ udp-port udp-seek-threshold udp-slave
    +                                \ unrarexec use-filedir-conf use-filename-title
    +                                \ vf-add vf-clr vf-del vf-pre volstep volume
    +                                \ zrhdec zrydoff
    +
    +syn region  mplayerconfString   display oneline start=+"+ end=+"+
    +syn region  mplayerconfString   display oneline start=+'+ end=+'+
    +
    +syn region  mplayerconfProfile  display oneline start='^\s*\[' end='\]'
    +
    +hi def link mplayerconfTodo     Todo
    +hi def link mplayerconfComment  Comment
    +hi def link mplayerconfPreProc  PreProc
    +hi def link mplayerconfBoolean  Boolean
    +hi def link mplayerconfNumber   Number
    +hi def link mplayerconfOption   Keyword
    +hi def link mplayerconfString   String
    +hi def link mplayerconfProfile  Special
    +
    +let b:current_syntax = "mplayerconf"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/mrxvtrc.vim b/.config/vim/syntax/mrxvtrc.vim
    new file mode 100644
    index 0000000..2ef434d
    --- /dev/null
    +++ b/.config/vim/syntax/mrxvtrc.vim
    @@ -0,0 +1,282 @@
    +" Description	: Vim syntax file for mrxvtrc (for mrxvt-0.5.0 and up)
    +" Created	: Wed 26 Apr 2006 01:20:53 AM CDT
    +" Modified	: Thu 02 Feb 2012 08:37:45 PM EST
    +" Maintainer	: GI , where a='gi1242+vim', b='gmail', c='com'
    +
    +" Quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn case match
    +
    +" Errors
    +syn match	mrxvtrcError	contained	'\v\S+'
    +
    +" Comments
    +syn match	mrxvtrcComment	contains=@Spell '^\s*[!#].*$'
    +syn match	mrxvtrcComment	'\v^\s*[#!]\s*\w+[.*]\w+.*:.*'
    +
    +"
    +" Options.
    +"
    +syn match	mrxvtrcClass	'\v^\s*\w+[.*]'
    +	    \ nextgroup=mrxvtrcOptions,mrxvtrcProfile,@mrxvtrcPOpts,mrxvtrcError
    +
    +" Boolean options
    +syn keyword	mrxvtrcOptions	contained nextgroup=mrxvtrcBColon,mrxvtrcError
    +				\ highlightTabOnBell syncTabTitle hideTabbar
    +				\ autohideTabbar bottomTabbar hideButtons
    +				\ syncTabIcon veryBoldFont maximized
    +				\ fullscreen reverseVideo loginShell
    +				\ jumpScroll scrollBar scrollbarRight
    +				\ scrollbarFloating scrollTtyOutputInhibit
    +				\ scrollTtyKeypress transparentForce
    +				\ transparentScrollbar transparentMenubar
    +				\ transparentTabbar tabUsePixmap utmpInhibit
    +				\ visualBell mapAlert meta8
    +				\ mouseWheelScrollPage multibyte_cursor
    +				\ tripleclickwords showMenu xft xftNomFont
    +				\ xftSlowOutput xftAntialias xftHinting
    +				\ xftAutoHint xftGlobalAdvance cmdAllTabs
    +				\ protectSecondary thai borderLess
    +				\ overrideRedirect broadcast smartResize
    +				\ pointerBlank cursorBlink noSysConfig
    +				\ disableMacros linuxHomeEndKey sessionMgt
    +				\ boldColors smoothResize useFifo veryBright
    +syn match	mrxvtrcOptions	contained nextgroup=mrxvtrcBColon,mrxvtrcError
    +				\ '\v'
    +syn match	mrxvtrcBColon	contained skipwhite
    +				\ nextgroup=mrxvtrcBoolVal,mrxvtrcError ':'
    +syn case ignore
    +syn keyword	mrxvtrcBoolVal	contained skipwhite nextgroup=mrxvtrcError
    +				\ 0 1 yes no on off true false
    +syn case match
    +
    +" Color options
    +syn keyword	mrxvtrcOptions	contained nextgroup=mrxvtrcCColon,mrxvtrcError
    +				\ ufBackground textShadow tabForeground
    +				\ itabForeground tabBackground itabBackground
    +				\ scrollColor troughColor highlightColor
    +				\ cursorColor cursorColor2 pointerColor
    +				\ borderColor tintColor
    +syn match	mrxvtrcOptions	contained nextgroup=mrxvtrcCColon,mrxvtrcError
    +				\ '\v'
    +syn match	mrxvtrcCColon	contained skipwhite
    +				\ nextgroup=mrxvtrcColorVal ':'
    +syn match	mrxvtrcColorVal	contained skipwhite nextgroup=mrxvtrcError
    +				\ '\v#[0-9a-fA-F]{6}'
    +
    +" Numeric options
    +syn keyword	mrxvtrcOptions	contained nextgroup=mrxvtrcNColon,mrxvtrcError
    +				\ maxTabWidth minVisibleTabs
    +				\ scrollbarThickness xftmSize xftSize desktop
    +				\ externalBorder internalBorder lineSpace
    +				\ pointerBlankDelay cursorBlinkInterval
    +				\ shading backgroundFade bgRefreshInterval
    +				\ fading opacity opacityDegree xftPSize
    +syn match	mrxvtrcNColon	contained skipwhite
    +				\ nextgroup=mrxvtrcNumVal,mrxvtrcError ':'
    +syn match	mrxvtrcNumVal	contained skipwhite nextgroup=mrxvtrcError
    +				\ '\v[+-]?<(0[0-7]+|\d+|0x[0-9a-f]+)>'
    +
    +" String options
    +syn keyword	mrxvtrcOptions	contained nextgroup=mrxvtrcSColon,mrxvtrcError
    +				\ tabTitle termName title clientName iconName
    +				\ bellCommand backspaceKey deleteKey
    +				\ printPipe cutChars answerbackString
    +				\ smClientID geometry path boldFont xftFont
    +				\ xftmFont xftPFont inputMethod
    +				\ greektoggle_key menu menubarPixmap
    +				\ scrollbarPixmap tabbarPixmap appIcon
    +				\ multichar_encoding initProfileList
    +syn match	mrxvtrcOptions	contained nextgroup=mrxvtrcSColon,mrxvtrcError
    +				\ '\v'
    +syn match	mrxvtrcSColon	contained skipwhite nextgroup=mrxvtrcStrVal ':'
    +syn match	mrxvtrcStrVal	contained '\v\S.*'
    +
    +" Profile options
    +syn cluster	mrxvtrcPOpts	contains=mrxvtrcPSOpts,mrxvtrcPCOpts,mrxvtrcPNOpts
    +syn match	mrxvtrcProfile	contained nextgroup=@mrxvtrcPOpts,mrxvtrcError
    +				\ '\vprofile\d+\.'
    +syn keyword	mrxvtrcPSOpts	contained nextgroup=mrxvtrcSColon,mrxvtrcError
    +				\ tabTitle command holdExitText holdExitTitle
    +				\ Pixmap workingDirectory titleFormat
    +				\ winTitleFormat
    +syn keyword	mrxvtrcPCOpts	contained nextgroup=mrxvtrcCColon,mrxvtrcError
    +				\ background foreground
    +syn keyword	mrxvtrcPNOpts	contained nextgroup=mrxvtrcNColon,mrxvtrcError
    +				\ holdExit saveLines
    +
    +" scrollbarStyle
    +syn match	mrxvtrcOptions	contained skipwhite
    +				\ nextgroup=mrxvtrcSBstyle,mrxvtrcError
    +				\ '\v'
    +
    +"
    +" Highlighting groups
    +"
    +hi def link mrxvtrcError	Error
    +hi def link mrxvtrcComment	Comment
    +
    +hi def link mrxvtrcClass	Statement
    +hi def link mrxvtrcOptions	mrxvtrcClass
    +hi def link mrxvtrcBColon	mrxvtrcClass
    +hi def link mrxvtrcCColon	mrxvtrcClass
    +hi def link mrxvtrcNColon	mrxvtrcClass
    +hi def link mrxvtrcSColon	mrxvtrcClass
    +hi def link mrxvtrcProfile	mrxvtrcClass
    +hi def link mrxvtrcPSOpts	mrxvtrcClass
    +hi def link mrxvtrcPCOpts	mrxvtrcClass
    +hi def link mrxvtrcPNOpts	mrxvtrcClass
    +
    +hi def link mrxvtrcBoolVal	Boolean
    +hi def link mrxvtrcStrVal	String
    +hi def link mrxvtrcColorVal	Constant
    +hi def link mrxvtrcNumVal	Number
    +
    +hi def link mrxvtrcSBstyle	mrxvtrcStrVal
    +hi def link mrxvtrcSBalign	mrxvtrcStrVal
    +hi def link mrxvtrcTSmode	mrxvtrcStrVal
    +hi def link mrxvtrcGrkKbd	mrxvtrcStrVal
    +hi def link mrxvtrcXftWt	mrxvtrcStrVal
    +hi def link mrxvtrcXftSl	mrxvtrcStrVal
    +hi def link mrxvtrcXftWd	mrxvtrcStrVal
    +hi def link mrxvtrcXftHt	mrxvtrcStrVal
    +hi def link mrxvtrcPedit	mrxvtrcStrVal
    +hi def link mrxvtrcMod		mrxvtrcStrVal
    +hi def link mrxvtrcSelSty	mrxvtrcStrVal
    +
    +hi def link mrxvtrcMacro	Identifier
    +hi def link mrxvtrcKey		mrxvtrcClass
    +hi def link mrxvtrcTitle	mrxvtrcStrVal
    +hi def link mrxvtrcShell	Special
    +hi def link mrxvtrcCmd		PreProc
    +hi def link mrxvtrcSubwin	mrxvtrcStrVal
    +
    +let b:current_syntax = "mrxvtrc"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/msidl.vim b/.config/vim/syntax/msidl.vim
    new file mode 100644
    index 0000000..57eaeca
    --- /dev/null
    +++ b/.config/vim/syntax/msidl.vim
    @@ -0,0 +1,84 @@
    +" Vim syntax file
    +" Language:     MS IDL (Microsoft dialect of Interface Description Language)
    +" Maintainer:   Vadim Zeitlin 
    +" Last Change:  2012 Feb 12 by Thilo Six
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +" Misc basic
    +syn match   msidlId		"[a-zA-Z][a-zA-Z0-9_]*"
    +syn match   msidlUUID		"{\?[[:xdigit:]]\{8}-\([[:xdigit:]]\{4}-\)\{3}[[:xdigit:]]\{12}}\?"
    +syn region  msidlString		start=/"/  skip=/\\\(\\\\\)*"/	end=/"/
    +syn match   msidlLiteral	"\d\+\(\.\d*\)\="
    +syn match   msidlLiteral	"\.\d\+"
    +syn match   msidlSpecial	contained "[]\[{}:]"
    +
    +" Comments
    +syn keyword msidlTodo		contained TODO FIXME XXX
    +syn region  msidlComment	start="/\*"  end="\*/" contains=msidlTodo
    +syn match   msidlComment	"//.*" contains=msidlTodo
    +syn match   msidlCommentError	"\*/"
    +
    +" C style Preprocessor
    +syn region  msidlIncluded	contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+
    +syn match   msidlIncluded	contained "<[^>]*>"
    +syn match   msidlInclude	"^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=msidlIncluded,msidlString
    +syn region  msidlPreCondit	start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)"  skip="\\$"	end="$" contains=msidlComment,msidlCommentError
    +syn region  msidlDefine		start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=msidlLiteral, msidlString
    +
    +" Attributes
    +syn keyword msidlAttribute      contained in out propget propput propputref retval
    +syn keyword msidlAttribute      contained aggregatable appobject binadable coclass control custom default defaultbind defaultcollelem defaultvalue defaultvtable dispinterface displaybind dual entry helpcontext helpfile helpstring helpstringdll hidden id immediatebind lcid library licensed nonbrowsable noncreatable nonextensible oleautomation optional object public readonly requestedit restricted source string uidefault usesgetlasterror vararg version
    +syn match   msidlAttribute      /uuid(.*)/he=s+4 contains=msidlUUID
    +syn match   msidlAttribute      /helpstring(.*)/he=s+10 contains=msidlString
    +syn region  msidlAttributes     start="\[" end="]" keepend contains=msidlSpecial,msidlString,msidlAttribute,msidlComment,msidlCommentError
    +
    +" Keywords
    +syn keyword msidlEnum		enum
    +syn keyword msidlImport		import importlib
    +syn keyword msidlStruct		interface library coclass
    +syn keyword msidlTypedef	typedef
    +
    +" Types
    +syn keyword msidlStandardType   byte char double float hyper int long short void wchar_t
    +syn keyword msidlStandardType   BOOL BSTR HRESULT VARIANT VARIANT_BOOL
    +syn region  msidlSafeArray      start="SAFEARRAY(" end=")" contains=msidlStandardType
    +
    +syn sync lines=50
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link msidlInclude		Include
    +hi def link msidlPreProc		PreProc
    +hi def link msidlPreCondit		PreCondit
    +hi def link msidlDefine		Macro
    +hi def link msidlIncluded		String
    +hi def link msidlString		String
    +hi def link msidlComment		Comment
    +hi def link msidlTodo		Todo
    +hi def link msidlSpecial		SpecialChar
    +hi def link msidlLiteral		Number
    +hi def link msidlUUID		Number
    +
    +hi def link msidlImport		Include
    +hi def link msidlEnum		StorageClass
    +hi def link msidlStruct		Structure
    +hi def link msidlTypedef		Typedef
    +hi def link msidlAttribute		StorageClass
    +
    +hi def link msidlStandardType	Type
    +hi def link msidlSafeArray		Type
    +
    +
    +let b:current_syntax = "msidl"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +" vi: set ts=8 sw=4:
    diff --git a/.config/vim/syntax/msmessages.vim b/.config/vim/syntax/msmessages.vim
    new file mode 100644
    index 0000000..5faee97
    --- /dev/null
    +++ b/.config/vim/syntax/msmessages.vim
    @@ -0,0 +1,132 @@
    +" Vim syntax file
    +" Language:	MS Message Text files (*.mc)
    +" Maintainer:	Kevin Locke 
    +" Last Change:	2008 April 09
    +" Location:	http://kevinlocke.name/programs/vim/syntax/msmessages.vim
    +
    +" See format description at 
    +" This file is based on the rc.vim and c.vim
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Common MS Messages keywords
    +syn case ignore
    +syn keyword msmessagesIdentifier MessageIdTypedef
    +syn keyword msmessagesIdentifier SeverityNames
    +syn keyword msmessagesIdentifier FacilityNames
    +syn keyword msmessagesIdentifier LanguageNames
    +syn keyword msmessagesIdentifier OutputBase
    +
    +syn keyword msmessagesIdentifier MessageId
    +syn keyword msmessagesIdentifier Severity
    +syn keyword msmessagesIdentifier Facility
    +syn keyword msmessagesIdentifier OutputBase
    +
    +syn match msmessagesIdentifier /\/ nextgroup=msmessagesIdentEq skipwhite
    +syn match msmessagesIdentEq transparent /=/ nextgroup=msmessagesIdentDef skipwhite contained
    +syn match msmessagesIdentDef display /\w\+/ contained
    +" Note:  The Language keyword is highlighted as part of an msmessagesLangEntry
    +
    +" Set value
    +syn case match
    +syn region msmessagesSet	start="(" end=")" transparent fold contains=msmessagesName keepend
    +syn match msmessagesName /\w\+/ nextgroup=msmessagesSetEquals skipwhite contained
    +syn match msmessagesSetEquals /=/ display transparent nextgroup=msmessagesNumVal skipwhite contained
    +syn match msmessagesNumVal	display transparent "\<\d\|\.\d" contains=msmessagesNumber,msmessagesFloat,msmessagesOctalError,msmessagesOctal nextgroup=msmessagesValSep
    +syn match msmessagesValSep /:/ display nextgroup=msmessagesNameDef contained
    +syn match msmessagesNameDef /\w\+/ display contained
    +
    +
    +" Comments are converted to C source (by removing leading ;)
    +" So we highlight the comments as C
    +syn include @msmessagesC syntax/c.vim
    +unlet b:current_syntax
    +syn region msmessagesCComment matchgroup=msmessagesComment start=/;/ end=/$/ contains=@msmessagesC keepend
    +
    +" String and Character constants
    +" Highlight special characters (those which have a escape) differently
    +syn case ignore
    +syn region msmessagesLangEntry start=/\\s*=\s*\S\+\s*$/hs=e+1 end=/^\./ contains=msmessagesFormat,msmessagesLangEntryEnd,msmessagesLanguage keepend
    +syn match msmessagesLanguage /\"
    +"hex number
    +syn match msmessagesNumber	display contained "\<0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
    +" Flag the first zero of an octal number as something special
    +syn match msmessagesOctal	display contained "\<0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=msmessagesOctalZero
    +syn match msmessagesOctalZero	display contained "\<0"
    +" flag an octal number with wrong digits
    +syn match msmessagesOctalError	display contained "\<0\o*[89]\d*"
    +syn match msmessagesFloat	display contained "\d\+f"
    +"floating point number, with dot, optional exponent
    +syn match msmessagesFloat	display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
    +"floating point number, starting with a dot, optional exponent
    +syn match msmessagesFloat	display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
    +"floating point number, without dot, with exponent
    +syn match msmessagesFloat	display contained "\d\+e[-+]\=\d\+[fl]\=\>"
    +"hexadecimal floating point number, optional leading digits, with dot, with exponent
    +syn match msmessagesFloat	display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>"
    +"hexadecimal floating point number, with leading digits, optional dot, with exponent
    +syn match msmessagesFloat	display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>"
    +
    +" Types (used in MessageIdTypedef statement)
    +syn case match
    +syn keyword msmessagesType	int long short char
    +syn keyword msmessagesType	signed unsigned
    +syn keyword msmessagesType	size_t ssize_t sig_atomic_t
    +syn keyword msmessagesType	int8_t int16_t int32_t int64_t
    +syn keyword msmessagesType	uint8_t uint16_t uint32_t uint64_t
    +syn keyword msmessagesType	int_least8_t int_least16_t int_least32_t int_least64_t
    +syn keyword msmessagesType	uint_least8_t uint_least16_t uint_least32_t uint_least64_t
    +syn keyword msmessagesType	int_fast8_t int_fast16_t int_fast32_t int_fast64_t
    +syn keyword msmessagesType	uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
    +syn keyword msmessagesType	intptr_t uintptr_t
    +syn keyword msmessagesType	intmax_t uintmax_t
    +" Add some Windows datatypes that will be common in msmessages files
    +syn keyword msmessagesType	BYTE CHAR SHORT SIZE_T SSIZE_T TBYTE TCHAR UCHAR USHORT
    +syn keyword msmessagesType	DWORD DWORDLONG DWORD32 DWORD64
    +syn keyword msmessagesType	INT INT32 INT64 UINT UINT32 UINT64
    +syn keyword msmessagesType	LONG LONGLONG LONG32 LONG64
    +syn keyword msmessagesType	ULONG ULONGLONG ULONG32 ULONG64
    +
    +" Sync to language entries, since they should be most common
    +syn sync match msmessagesLangSync grouphere msmessagesLangEntry "\
    +" URL:		http://www.isp.de/data/msql.vim
    +" Email:	Subject: send syntax_vim.tgz
    +" Last Change:	2001 May 10
    +"
    +" Options	msql_sql_query = 1 for SQL syntax highligthing inside strings
    +"		msql_minlines = x     to sync at least x lines backwards
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +if !exists("main_syntax")
    +  let main_syntax = 'msql'
    +endif
    +
    +runtime! syntax/html.vim
    +unlet b:current_syntax
    +
    +syn cluster htmlPreproc add=msqlRegion
    +
    +syn case match
    +
    +" Internal Variables
    +syn keyword msqlIntVar ERRMSG contained
    +
    +" Env Variables
    +syn keyword msqlEnvVar SERVER_SOFTWARE SERVER_NAME SERVER_URL GATEWAY_INTERFACE contained
    +syn keyword msqlEnvVar SERVER_PROTOCOL SERVER_PORT REQUEST_METHOD PATH_INFO  contained
    +syn keyword msqlEnvVar PATH_TRANSLATED SCRIPT_NAME QUERY_STRING REMOTE_HOST contained
    +syn keyword msqlEnvVar REMOTE_ADDR AUTH_TYPE REMOTE_USER CONTEN_TYPE  contained
    +syn keyword msqlEnvVar CONTENT_LENGTH HTTPS HTTPS_KEYSIZE HTTPS_SECRETKEYSIZE  contained
    +syn keyword msqlEnvVar HTTP_ACCECT HTTP_USER_AGENT HTTP_IF_MODIFIED_SINCE  contained
    +syn keyword msqlEnvVar HTTP_FROM HTTP_REFERER contained
    +
    +" Inlclude lLite
    +syn include @msqlLite :p:h/lite.vim
    +
    +" Msql Region
    +syn region msqlRegion matchgroup=Delimiter start="D]" end=">" contains=@msqlLite,msql.*
    +
    +" sync
    +if exists("msql_minlines")
    +  exec "syn sync minlines=" . msql_minlines
    +else
    +  syn sync minlines=100
    +endif
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link msqlComment		Comment
    +hi def link msqlString		String
    +hi def link msqlNumber		Number
    +hi def link msqlFloat		Float
    +hi def link msqlIdentifier	Identifier
    +hi def link msqlGlobalIdentifier	Identifier
    +hi def link msqlIntVar		Identifier
    +hi def link msqlEnvVar		Identifier
    +hi def link msqlFunctions		Function
    +hi def link msqlRepeat		Repeat
    +hi def link msqlConditional	Conditional
    +hi def link msqlStatement		Statement
    +hi def link msqlType		Type
    +hi def link msqlInclude		Include
    +hi def link msqlDefine		Define
    +hi def link msqlSpecialChar	SpecialChar
    +hi def link msqlParentError	Error
    +hi def link msqlTodo		Todo
    +hi def link msqlOperator		Operator
    +hi def link msqlRelation		Operator
    +
    +
    +let b:current_syntax = "msql"
    +
    +if main_syntax == 'msql'
    +  unlet main_syntax
    +endif
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/mss.vim b/.config/vim/syntax/mss.vim
    new file mode 100644
    index 0000000..de95d1d
    --- /dev/null
    +++ b/.config/vim/syntax/mss.vim
    @@ -0,0 +1,23 @@
    +" Vim syntax file
    +" Language:	Vivado mss file
    +" Maintainer:	The Vim Project 
    +" Last Change:	2024 Oct 22
    +" Document:	https://docs.amd.com/r/2020.2-English/ug1400-vitis-embedded/Microprocessor-Software-Specification-MSS
    +" Maintainer:	Wu, Zhenyu 
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn case ignore
    +syn match	mssComment	"#.*$" contains=@Spell
    +syn keyword	mssKeyword	BEGIN END PARAMETER
    +syn keyword	mssType		OS PROCESSOR DRIVER LIBRARY
    +syn keyword	mssConstant	VERSION PROC_INSTANCE HW_INSTANCE OS_NAME OS_VER DRIVER_NAME DRIVER_VER LIBRARY_NAME LIBRARY_VER STDIN STDOUT XMDSTUB_PERIPHERAL ARCHIVER COMPILER COMPILER_FLAGS EXTRA_COMPILER_FLAGS
    +
    +hi def link mssComment		Comment
    +hi def link mssKeyword		Keyword
    +hi def link mssType		Type
    +hi def link mssConstant		Constant
    +
    +let b:current_syntax = "mss"
    diff --git a/.config/vim/syntax/mupad.vim b/.config/vim/syntax/mupad.vim
    new file mode 100644
    index 0000000..df87ad1
    --- /dev/null
    +++ b/.config/vim/syntax/mupad.vim
    @@ -0,0 +1,284 @@
    +" Vim syntax file
    +" Language:    MuPAD source
    +" Maintainer:  Dave Silvia 
    +" Filenames:   *.mu
    +" Date:        6/30/2004
    +
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Set default highlighting to Win2k
    +if !exists("mupad_cmdextversion")
    +  let mupad_cmdextversion = 2
    +endif
    +
    +syn case match
    +
    +syn match mupadComment	"//\p*$"
    +syn region mupadComment	start="/\*"	end="\*/"
    +
    +syn region mupadString	start="\""	skip=/\\"/	end="\""
    +
    +syn match mupadOperator		"(\|)\|:=\|::\|:\|;"
    +" boolean
    +syn keyword mupadOperator	and	or	not	xor
    +syn match mupadOperator		"==>\|\<=\>"
    +
    +" Informational
    +syn keyword mupadSpecial		FILEPATH	NOTEBOOKFILE	NOTEBOOKPATH
    +" Set-able, e.g., DIGITS:=10
    +syn keyword mupadSpecial		DIGITS		HISTORY		LEVEL
    +syn keyword mupadSpecial		MAXLEVEL	MAXDEPTH	ORDER
    +syn keyword mupadSpecial		TEXTWIDTH
    +" Set-able, e.g., PRETTYPRINT:=TRUE
    +syn keyword mupadSpecial		PRETTYPRINT
    +" Set-able, e.g., LIBPATH:="C:\\MuPAD Pro\\mylibdir" or LIBPATH:="/usr/MuPAD Pro/mylibdir"
    +syn keyword mupadSpecial		LIBPATH		PACKAGEPATH
    +syn keyword mupadSpecial		READPATH	TESTPATH	WRITEPATH
    +" Symbols and Constants
    +syn keyword mupadDefine		FAIL		NIL
    +syn keyword mupadDefine		TRUE		FALSE		UNKNOWN
    +syn keyword mupadDefine		complexInfinity		infinity
    +syn keyword mupadDefine		C_	CATALAN	E	EULER	I	PI	Q_	R_
    +syn keyword mupadDefine		RD_INF	RD_NINF	undefined	unit	universe	Z_
    +" print() directives
    +syn keyword mupadDefine		Unquoted	NoNL	KeepOrder	Typeset
    +" domain specifics
    +syn keyword mupadStatement	domain	begin	end_domain	end
    +syn keyword mupadIdentifier	inherits	category	axiom	info	doc interface
    +" basic programming statements
    +syn keyword mupadStatement	proc	begin	end_proc
    +syn keyword mupadUnderlined	name	local	option	save
    +syn keyword mupadConditional	if	then	elif	else	end_if
    +syn keyword mupadConditional	case	of	do	break	end_case
    +syn keyword mupadRepeat		for	do	next	break	end_for
    +syn keyword mupadRepeat		while	do	next break end_while
    +syn keyword mupadRepeat		repeat	next break until	end_repeat
    +" domain packages/libraries
    +syn keyword mupadType			detools	import	linalg	numeric	numlib	plot	polylib
    +syn match mupadType				'\'
    +
    +"syn keyword mupadFunction	contains
    +" Functions dealing with prime numbers
    +syn keyword mupadFunction	phi	invphi	mersenne	nextprime	numprimedivisors
    +syn keyword mupadFunction	pollard	prevprime	primedivisors
    +" Functions operating on Lists, Matrices, Sets, ...
    +syn keyword mupadFunction	array	_index
    +" Evaluation
    +syn keyword mupadFunction	float contains
    +" stdlib
    +syn keyword mupadFunction	_exprseq	_invert	_lazy_and	_lazy_or	_negate
    +syn keyword mupadFunction	_stmtseq	_invert	intersect	minus		union
    +syn keyword mupadFunction	Ci	D	Ei	O	Re	Im	RootOf	Si
    +syn keyword mupadFunction	Simplify
    +syn keyword mupadFunction	abs	airyAi	airyBi	alias	unalias	anames	append
    +syn keyword mupadFunction	arcsin	arccos	arctan	arccsc	arcsec	arccot
    +syn keyword mupadFunction	arcsinh	arccosh	arctanh	arccsch	arcsech	arccoth
    +syn keyword mupadFunction	arg	args	array	assert	assign	assignElements
    +syn keyword mupadFunction	assume	assuming	asympt	bernoulli
    +syn keyword mupadFunction	besselI	besselJ	besselK	besselY	beta	binomial	bool
    +syn keyword mupadFunction	bytes	card
    +syn keyword mupadFunction	ceil	floor	round	trunc
    +syn keyword mupadFunction	coeff	coerce	collect	combine	copyClosure
    +syn keyword mupadFunction	conjugate	content	context	contfrac
    +syn keyword mupadFunction	debug	degree	degreevec	delete	_delete	denom
    +syn keyword mupadFunction	densematrix	diff	dilog	dirac	discont	div	_div
    +syn keyword mupadFunction	divide	domtype	doprint	erf	erfc	error	eval	evalassign
    +syn keyword mupadFunction	evalp	exp	expand	export	unexport	expose	expr
    +syn keyword mupadFunction	expr2text	external	extnops	extop	extsubsop
    +syn keyword mupadFunction	fact	fact2	factor	fclose	finput	fname	fopen	fprint
    +syn keyword mupadFunction	fread	ftextinput	readbitmap	readdata	pathname
    +syn keyword mupadFunction	protocol	read	readbytes	write	writebytes
    +syn keyword mupadFunction	float	frac	frame	_frame	frandom	freeze	unfreeze
    +syn keyword mupadFunction	funcenv	gamma	gcd	gcdex	genident	genpoly
    +syn keyword mupadFunction	getpid	getprop	ground	has	hastype	heaviside	help
    +syn keyword mupadFunction	history	hold	hull	hypergeom	icontent	id
    +syn keyword mupadFunction	ifactor	igamma	igcd	igcdex	ilcm	in	_in
    +syn keyword mupadFunction	indets	indexval	info	input	int	int2text
    +syn keyword mupadFunction	interpolate	interval	irreducible	is
    +syn keyword mupadFunction	isprime	isqrt	iszero	ithprime	kummerU	lambertW
    +syn keyword mupadFunction	last	lasterror	lcm	lcoeff	ldegree	length
    +syn keyword mupadFunction	level	lhs	rhs	limit	linsolve	lllint
    +syn keyword mupadFunction	lmonomial	ln	loadmod	loadproc	log	lterm
    +syn keyword mupadFunction	match	map	mapcoeffs	maprat	matrix	max	min
    +syn keyword mupadFunction	mod	modp	mods	monomials	multcoeffs	new
    +syn keyword mupadFunction	newDomain	_next	nextprime	nops
    +syn keyword mupadFunction	norm	normal	nterms	nthcoeff	nthmonomial	nthterm
    +syn keyword mupadFunction	null	numer	ode	op	operator	package
    +syn keyword mupadFunction	pade	partfrac	patchlevel	pdivide
    +syn keyword mupadFunction	piecewise	plot	plotfunc2d	plotfunc3d
    +syn keyword mupadFunction	poly	poly2list	polylog	powermod	print
    +syn keyword mupadFunction	product	protect	psi	quit	_quit	radsimp	random	rationalize
    +syn keyword mupadFunction	rec	rectform	register	reset	return	revert
    +syn keyword mupadFunction	rewrite	select	series	setuserinfo	share	sign	signIm
    +syn keyword mupadFunction	simplify
    +syn keyword mupadFunction	sin	cos	tan	csc	sec	cot
    +syn keyword mupadFunction	sinh	cosh	tanh	csch	sech	coth
    +syn keyword mupadFunction	slot	solve
    +syn keyword mupadFunction	pdesolve	matlinsolve	matlinsolveLU	toeplitzSolve
    +syn keyword mupadFunction	vandermondeSolve	fsolve	odesolve	odesolve2
    +syn keyword mupadFunction	polyroots	polysysroots	odesolveGeometric
    +syn keyword mupadFunction	realroot	realroots	mroots	lincongruence
    +syn keyword mupadFunction	msqrts
    +syn keyword mupadFunction	sort	split	sqrt	strmatch	strprint
    +syn keyword mupadFunction	subs	subset	subsex	subsop	substring	sum
    +syn keyword mupadFunction	surd	sysname	sysorder	system	table	taylor	tbl2text
    +syn keyword mupadFunction	tcoeff	testargs	testeq	testtype	text2expr
    +syn keyword mupadFunction	text2int	text2list	text2tbl	rtime	time
    +syn keyword mupadFunction	traperror	type	unassume	unit	universe
    +syn keyword mupadFunction	unloadmod	unprotect	userinfo	val	version
    +syn keyword mupadFunction	warning	whittakerM	whittakerW	zeta	zip
    +
    +" graphics  plot::
    +syn keyword mupadFunction	getDefault	setDefault	copy	modify	Arc2d	Arrow2d
    +syn keyword mupadFunction	Arrow3d	Bars2d	Bars3d	Box	Boxplot	Circle2d	Circle3d
    +syn keyword mupadFunction	Cone	Conformal	Curve2d	Curve3d	Cylinder	Cylindrical
    +syn keyword mupadFunction	Density	Ellipse2d	Function2d	Function3d	Hatch
    +syn keyword mupadFunction	Histogram2d	HOrbital	Implicit2d	Implicit3d
    +syn keyword mupadFunction	Inequality	Iteration	Line2d	Line3d	Lsys	Matrixplot
    +syn keyword mupadFunction	MuPADCube	Ode2d	Ode3d	Parallelogram2d	Parallelogram3d
    +syn keyword mupadFunction	Piechart2d	Piechart3d	Point2d	Point3d	Polar
    +syn keyword mupadFunction	Polygon2d	Polygon3d	Raster	Rectangle	Sphere
    +syn keyword mupadFunction	Ellipsoid	Spherical	Sum	Surface	SurfaceSet
    +syn keyword mupadFunction	SurfaceSTL	Tetrahedron	Hexahedron	Octahedron
    +syn keyword mupadFunction	Dodecahedron	Icosahedron	Text2d	Text3d	Tube	Turtle
    +syn keyword mupadFunction	VectorField2d	XRotate	ZRotate	Canvas	CoordinateSystem2d
    +syn keyword mupadFunction	CoordinateSystem3d	Group2d	Group3d	Scene2d	Scene3d	ClippingBox
    +syn keyword mupadFunction	Rotate2d	Rotate3d	Scale2d	Scale3d	Transform2d
    +syn keyword mupadFunction	Transform3d	Translate2d	Translate3d	AmbientLight
    +syn keyword mupadFunction	Camera	DistantLight	PointLight	SpotLight
    +
    +" graphics Attributes
    +" graphics  Output Attributes
    +syn keyword mupadIdentifier	OutputFile	OutputOptions
    +" graphics  Defining Attributes
    +syn keyword mupadIdentifier	Angle	AngleRange	AngleBegin	AngleEnd
    +syn keyword mupadIdentifier	Area	Axis	AxisX	AxisY	AxisZ	Base	Top
    +syn keyword mupadIdentifier	BaseX	TopX	BaseY	TopY	BaseZ	TopZ
    +syn keyword mupadIdentifier	BaseRadius	TopRadius	Cells
    +syn keyword mupadIdentifier	Center	CenterX	CenterY	CenterZ
    +syn keyword mupadIdentifier	Closed	ColorData	CommandList	Contours	CoordinateType
    +syn keyword mupadIdentifier	Data	DensityData	DensityFunction	From	To
    +syn keyword mupadIdentifier	FromX	ToX	FromY	ToY	FromZ	ToZ
    +syn keyword mupadIdentifier	Function	FunctionX	FunctionY	FunctionZ
    +syn keyword mupadIdentifier	Function1	Function2	Baseline
    +syn keyword mupadIdentifier	Generations	RotationAngle	IterationRules	StartRule StepLength
    +syn keyword mupadIdentifier	TurtleRules	Ground	Heights	Moves	Inequalities
    +syn keyword mupadIdentifier	InputFile	Iterations	StartingPoint
    +syn keyword mupadIdentifier	LineColorFunction	FillColorFunction
    +syn keyword mupadIdentifier	Matrix2d	Matrix3d
    +syn keyword mupadIdentifier	MeshList	MeshListType	MeshListNormals
    +syn keyword mupadIdentifier	MagneticQuantumNumber	MomentumQuantumNumber	PrincipalQuantumNumber
    +syn keyword mupadIdentifier	Name	Normal	NormalX	NormalY	NormalZ
    +syn keyword mupadIdentifier	ParameterName	ParameterBegin	ParameterEnd	ParameterRange
    +syn keyword mupadIdentifier	Points2d	Points3d	Radius	RadiusFunction
    +syn keyword mupadIdentifier	Position	PositionX	PositionY	PositionZ
    +syn keyword mupadIdentifier	Scale	ScaleX	ScaleY	ScaleZ Shift	ShiftX	ShiftY	ShiftZ
    +syn keyword mupadIdentifier	SemiAxes	SemiAxisX	SemiAxisY	SemiAxisZ
    +syn keyword mupadIdentifier	Tangent1	Tangent1X	Tangent1Y	Tangent1Z
    +syn keyword mupadIdentifier	Tangent2	Tangent2X	Tangent2Y	Tangent2Z
    +syn keyword mupadIdentifier	Text	TextOrientation	TextRotation
    +syn keyword mupadIdentifier	UName	URange	UMin	UMax	VName	VRange	VMin	VMax
    +syn keyword mupadIdentifier	XName	XRange	XMin	XMax	YName	YRange	YMin	YMax
    +syn keyword mupadIdentifier	ZName	ZRange	ZMin	ZMax	ViewingBox
    +syn keyword mupadIdentifier	ViewingBoxXMin	ViewingBoxXMax	ViewingBoxXRange
    +syn keyword mupadIdentifier	ViewingBoxYMin	ViewingBoxYMax	ViewingBoxYRange
    +syn keyword mupadIdentifier	ViewingBoxZMin	ViewingBoxZMax	ViewingBoxZRange
    +syn keyword mupadIdentifier	Visible
    +" graphics  Axis Attributes
    +syn keyword mupadIdentifier	Axes	AxesInFront	AxesLineColor	AxesLineWidth
    +syn keyword mupadIdentifier	AxesOrigin	AxesOriginX	AxesOriginY	AxesOriginZ
    +syn keyword mupadIdentifier	AxesTips	AxesTitleAlignment
    +syn keyword mupadIdentifier	AxesTitleAlignmentX	AxesTitleAlignmentY	AxesTitleAlignmentZ
    +syn keyword mupadIdentifier	AxesTitles	XAxisTitle	YAxisTitle	ZAxisTitle
    +syn keyword mupadIdentifier	AxesVisible	XAxisVisible	YAxisVisible	ZAxisVisible
    +syn keyword mupadIdentifier	YAxisTitleOrientation
    +" graphics  Tick Marks Attributes
    +syn keyword mupadIdentifier	TicksAnchor	XTicksAnchor	YTicksAnchor	ZTicksAnchor
    +syn keyword mupadIdentifier	TicksAt	XTicksAt	YTicksAt	ZTicksAt
    +syn keyword mupadIdentifier	TicksBetween	XTicksBetween	YTicksBetween	ZTicksBetween
    +syn keyword mupadIdentifier	TicksDistance	XTicksDistance	YTicksDistance	ZTicksDistance
    +syn keyword mupadIdentifier	TicksNumber	XTicksNumber	YTicksNumber	ZTicksNumber
    +syn keyword mupadIdentifier	TicksVisible	XTicksVisible	YTicksVisible	ZTicksVisible
    +syn keyword mupadIdentifier	TicksLength	TicksLabelStyle
    +syn keyword mupadIdentifier	XTicksLabelStyle	YTicksLabelStyle	ZTicksLabelStyle
    +syn keyword mupadIdentifier	TicksLabelsVisible
    +syn keyword mupadIdentifier	XTicksLabelsVisible	YTicksLabelsVisible	ZTicksLabelsVisible
    +" graphics  Grid Lines Attributes
    +syn keyword mupadIdentifier	GridInFront	GridLineColor	SubgridLineColor
    +syn keyword mupadIdentifier	GridLineStyle	SubgridLineStyle GridLineWidth	SubgridLineWidth
    +syn keyword mupadIdentifier	GridVisible	XGridVisible	YGridVisible	ZGridVisible
    +syn keyword mupadIdentifier	SubgridVisible	XSubgridVisible	YSubgridVisible	ZSubgridVisible
    +" graphics  Animation Attributes
    +syn keyword mupadIdentifier	Frames	TimeRange	TimeBegin	TimeEnd
    +syn keyword mupadIdentifier	VisibleAfter	VisibleBefore	VisibleFromTo
    +syn keyword mupadIdentifier	VisibleAfterEnd	VisibleBeforeBegin
    +" graphics  Annotation Attributes
    +syn keyword mupadIdentifier	Footer	Header	FooterAlignment	HeaderAlignment
    +syn keyword mupadIdentifier	HorizontalAlignment	TitleAlignment	VerticalAlignment
    +syn keyword mupadIdentifier	Legend	LegendEntry	LegendText
    +syn keyword mupadIdentifier	LegendAlignment	LegendPlacement	LegendVisible
    +syn keyword mupadIdentifier	Title	Titles
    +syn keyword mupadIdentifier	TitlePosition	TitlePositionX	TitlePositionY	TitlePositionZ
    +" graphics  Layout Attributes
    +syn keyword mupadIdentifier	Bottom	Left	Height	Width	Layout	Rows	Columns
    +syn keyword mupadIdentifier	Margin	BottomMargin	TopMargin	LeftMargin	RightMargin
    +syn keyword mupadIdentifier	OutputUnits	Spacing
    +" graphics  Calculation Attributes
    +syn keyword mupadIdentifier	AdaptiveMesh	DiscontinuitySearch	Mesh	SubMesh
    +syn keyword mupadIdentifier	UMesh	USubMesh	VMesh	VSubMesh
    +syn keyword mupadIdentifier	XMesh	XSubMesh	YMesh	YSubMesh	Zmesh
    +" graphics  Camera and Lights Attributes
    +syn keyword mupadIdentifier	CameraCoordinates	CameraDirection
    +syn keyword mupadIdentifier	CameraDirectionX	CameraDirectionY	CameraDirectionZ
    +syn keyword mupadIdentifier	FocalPoint	FocalPointX	FocalPointY	FocalPointZ
    +syn keyword mupadIdentifier	LightColor	Lighting	LightIntensity	OrthogonalProjection
    +syn keyword mupadIdentifier	SpotAngle	ViewingAngle
    +syn keyword mupadIdentifier	Target	TargetX	TargetY	TargetZ
    +" graphics  Presentation Style and Fonts Attributes
    +syn keyword mupadIdentifier	ArrowLength
    +syn keyword mupadIdentifier	AxesTitleFont	FooterFont	HeaderFont	LegendFont
    +syn keyword mupadIdentifier	TextFont	TicksLabelFont	TitleFont
    +syn keyword mupadIdentifier	BackgroundColor	BackgroundColor2	BackgroundStyle
    +syn keyword mupadIdentifier	BackgroundTransparent	Billboarding	BorderColor	BorderWidth
    +syn keyword mupadIdentifier	BoxCenters	BoxWidths	DrawMode Gap	XGap	YGap
    +syn keyword mupadIdentifier	Notched	NotchWidth	Scaling	YXRatio	ZXRatio
    +syn keyword mupadIdentifier	VerticalAsymptotesVisible	VerticalAsymptotesStyle
    +syn keyword mupadIdentifier	VerticalAsymptotesColor	VerticalAsymptotesWidth
    +" graphics  Line Style Attributes
    +syn keyword mupadIdentifier	LineColor	LineColor2	LineColorType	LineStyle
    +syn keyword mupadIdentifier	LinesVisible	ULinesVisible	VLinesVisible	XLinesVisible
    +syn keyword mupadIdentifier	YLinesVisible	LineWidth	MeshVisible
    +" graphics  Point Style Attributes
    +syn keyword mupadIdentifier	PointColor	PointSize	PointStyle	PointsVisible
    +" graphics  Surface Style Attributes
    +syn keyword mupadIdentifier	BarStyle	Shadows	Color	Colors	FillColor	FillColor2
    +syn keyword mupadIdentifier	FillColorTrue	FillColorFalse	FillColorUnknown	FillColorType
    +syn keyword mupadIdentifier	Filled	FillPattern	FillPatterns	FillStyle
    +syn keyword mupadIdentifier	InterpolationStyle	Shading	UseNormals
    +" graphics  Arrow Style Attributes
    +syn keyword mupadIdentifier	TipAngle	TipLength	TipStyle	TubeDiameter
    +syn keyword mupadIdentifier	Tubular
    +" graphics  meta-documentation Attributes
    +syn keyword mupadIdentifier	objectGroupsListed
    +
    +
    +hi def link mupadComment		Comment
    +hi def link mupadString		String
    +hi def link mupadOperator		Operator
    +hi def link mupadSpecial		Special
    +hi def link mupadStatement		Statement
    +hi def link mupadUnderlined	Underlined
    +hi def link mupadConditional	Conditional
    +hi def link mupadRepeat		Repeat
    +hi def link mupadFunction		Function
    +hi def link mupadType		Type
    +hi def link mupadDefine		Define
    +hi def link mupadIdentifier	Identifier
    +
    +let b:current_syntax = 'mupad'
    +
    +" TODO  More comprehensive listing.
    diff --git a/.config/vim/syntax/murphi.vim b/.config/vim/syntax/murphi.vim
    new file mode 100644
    index 0000000..347e17f
    --- /dev/null
    +++ b/.config/vim/syntax/murphi.vim
    @@ -0,0 +1,126 @@
    +" Vim syntax file
    +" Language: Murphi model checking language
    +" Maintainer: Matthew Fernandez 
    +" Last Change: 2019 Aug 27
    +" Version: 2
    +" Remark: Originally authored by Diego Ongaro  
    +
    +if version < 600
    +  syntax clear
    +elseif exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Keywords are case insensitive.
    +" Keep these in alphabetical order.
    +syntax case ignore
    +syn keyword murphiKeyword       alias
    +syn keyword murphiStructure     array
    +syn keyword murphiKeyword       assert
    +syn keyword murphiKeyword       begin
    +syn keyword murphiType          boolean
    +syn keyword murphiKeyword       by
    +syn keyword murphiLabel         case
    +syn keyword murphiKeyword       clear
    +syn keyword murphiLabel         const
    +syn keyword murphiRepeat        do
    +syn keyword murphiConditional   else
    +syn keyword murphiConditional   elsif
    +syn keyword murphiKeyword       end
    +syn keyword murphiKeyword       endalias
    +syn keyword murphiRepeat        endexists
    +syn keyword murphiRepeat        endfor
    +syn keyword murphiRepeat        endforall
    +syn keyword murphiKeyword       endfunction
    +syn keyword murphiConditional   endif
    +syn keyword murphiKeyword       endprocedure
    +syn keyword murphiStructure     endrecord
    +syn keyword murphiKeyword       endrule
    +syn keyword murphiKeyword       endruleset
    +syn keyword murphiKeyword       endstartstate
    +syn keyword murphiConditional   endswitch
    +syn keyword murphiRepeat        endwhile
    +syn keyword murphiStructure     enum
    +syn keyword murphiKeyword       error
    +syn keyword murphiRepeat        exists
    +syn keyword murphiBoolean       false
    +syn keyword murphiRepeat        for
    +syn keyword murphiRepeat        forall
    +syn keyword murphiKeyword       function
    +syn keyword murphiConditional   if
    +syn keyword murphiKeyword       in
    +syn keyword murphiKeyword       interleaved
    +syn keyword murphiLabel         invariant
    +syn keyword murphiFunction      ismember
    +syn keyword murphiFunction      isundefined
    +syn keyword murphiKeyword       log
    +syn keyword murphiStructure     of
    +syn keyword murphiType          multiset
    +syn keyword murphiFunction      multisetadd
    +syn keyword murphiFunction      multisetcount
    +syn keyword murphiFunction      multisetremove
    +syn keyword murphiFunction      multisetremovepred
    +syn keyword murphiKeyword       procedure
    +syn keyword murphiKeyword       program
    +syn keyword murphiKeyword       put
    +syn keyword murphiStructure     record
    +syn keyword murphiKeyword       return
    +syn keyword murphiLabel         rule
    +syn keyword murphiLabel         ruleset
    +syn keyword murphiType          scalarset
    +syn keyword murphiLabel         startstate
    +syn keyword murphiConditional   switch
    +syn keyword murphiConditional   then
    +syn keyword murphiRepeat        to
    +syn keyword murphiKeyword       traceuntil
    +syn keyword murphiBoolean       true
    +syn keyword murphiLabel         type
    +syn keyword murphiKeyword       undefine
    +syn keyword murphiStructure     union
    +syn keyword murphiLabel         var
    +syn keyword murphiRepeat        while
    +
    +syn keyword murphiTodo contained todo xxx fixme
    +syntax case match
    +
    +" Integers.
    +syn match murphiNumber "\<\d\+\>"
    +
    +" Operators and special characters.
    +syn match murphiOperator "[\+\-\*\/%&|=!<>:\?]\|\."
    +syn match murphiDelimiter "\(:=\@!\|[;,]\)"
    +syn match murphiSpecial "[()\[\]]"
    +
    +" Double equal sign is a common error: use one equal sign for equality testing.
    +syn match murphiError "==[^>]"he=e-1
    +" Double && and || are errors.
    +syn match murphiError "&&\|||"
    +
    +" Strings. This is defined so late so that it overrides previous matches.
    +syn region murphiString start=+"+ end=+"+
    +
    +" Comments. This is defined so late so that it overrides previous matches.
    +syn region murphiComment start="--" end="$" contains=murphiTodo
    +syn region murphiComment start="/\*" end="\*/" contains=murphiTodo
    +
    +" Link the rules to some groups.
    +hi def link murphiComment        Comment
    +hi def link murphiString         String
    +hi def link murphiNumber         Number
    +hi def link murphiBoolean        Boolean
    +hi def link murphiIdentifier     Identifier
    +hi def link murphiFunction       Function
    +hi def link murphiStatement      Statement
    +hi def link murphiConditional    Conditional
    +hi def link murphiRepeat         Repeat
    +hi def link murphiLabel          Label
    +hi def link murphiOperator       Operator
    +hi def link murphiKeyword        Keyword
    +hi def link murphiType           Type
    +hi def link murphiStructure      Structure
    +hi def link murphiSpecial        Special
    +hi def link murphiDelimiter      Delimiter
    +hi def link murphiError          Error
    +hi def link murphiTodo           Todo
    +
    +let b:current_syntax = "murphi"
    diff --git a/.config/vim/syntax/mush.vim b/.config/vim/syntax/mush.vim
    new file mode 100644
    index 0000000..efaae50
    --- /dev/null
    +++ b/.config/vim/syntax/mush.vim
    @@ -0,0 +1,215 @@
    +" MUSHcode syntax file
    +" Maintainer: Rick Bird 
    +" Based on vim Syntax file by: Bek Oberin 
    +" Last Updated: Fri Nov 04 20:28:15 2005
    +"
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +
    +" regular mush functions
    +
    +syntax keyword mushFunction contained @@ abs accent accname acos add after align
    +syntax keyword mushFunction contained allof alphamax alphamin and andflags
    +syntax keyword mushFunction contained andlflags andlpowers andpowers ansi aposs art
    +syntax keyword mushFunction contained asin atan atan2 atrlock attrcnt band baseconv
    +syntax keyword mushFunction contained beep before blank2tilde bnand bnot bor bound
    +syntax keyword mushFunction contained brackets break bxor cand cansee capstr case
    +syntax keyword mushFunction contained caseall cat ceil center checkpass children
    +syntax keyword mushFunction contained chr clone cmds cnetpost comp con config conn
    +syntax keyword mushFunction contained controls convsecs convtime convutcsecs cor
    +syntax keyword mushFunction contained cos create ctime ctu dec decrypt default
    +syntax keyword mushFunction contained delete die dig digest dist2d dist3d div
    +syntax keyword mushFunction contained division divscope doing downdiv dynhelp e
    +syntax keyword mushFunction contained edefault edit element elements elist elock
    +syntax keyword mushFunction contained emit empire empower encrypt endtag entrances
    +syntax keyword mushFunction contained eq escape etimefmt eval exit exp extract fdiv
    +syntax keyword mushFunction contained filter filterbool findable first firstof
    +syntax keyword mushFunction contained flags flip floor floordiv fmod fold
    +syntax keyword mushFunction contained folderstats followers following foreach
    +syntax keyword mushFunction contained fraction fullname functions get get_eval grab
    +syntax keyword mushFunction contained graball grep grepi gt gte hasattr hasattrp
    +syntax keyword mushFunction contained hasattrpval hasattrval hasdivpower hasflag
    +syntax keyword mushFunction contained haspower haspowergroup hastype height hidden
    +syntax keyword mushFunction contained home host hostname html idle idlesecs
    +syntax keyword mushFunction contained idle_average idle_times idle_total if ifelse
    +syntax keyword mushFunction contained ilev iname inc index indiv indivall insert
    +syntax keyword mushFunction contained inum ipaddr isdaylight isdbref isint isnum
    +syntax keyword mushFunction contained isword itemize items iter itext last lattr
    +syntax keyword mushFunction contained lcon lcstr ldelete ldivisions left lemit
    +syntax keyword mushFunction contained level lexits lflags link list lit ljust lmath
    +syntax keyword mushFunction contained ln lnum loc localize locate lock loctree log
    +syntax keyword mushFunction contained lparent lplayers lports lpos lsearch lsearchr
    +syntax keyword mushFunction contained lstats lt lte lthings lvcon lvexits lvplayers
    +syntax keyword mushFunction contained lvthings lwho mail maildstats mailfrom
    +syntax keyword mushFunction contained mailfstats mailstats mailstatus mailsubject
    +syntax keyword mushFunction contained mailtime map match matchall max mean median
    +syntax keyword mushFunction contained member merge mid min mix mod modulo modulus
    +syntax keyword mushFunction contained money mtime mudname mul munge mwho name nand
    +syntax keyword mushFunction contained nattr ncon nearby neq nexits next nor not
    +syntax keyword mushFunction contained nplayers nsemit nslemit nsoemit nspemit
    +syntax keyword mushFunction contained nsremit nszemit nthings null num nvcon
    +syntax keyword mushFunction contained nvexits nvplayers nvthings obj objeval objid
    +syntax keyword mushFunction contained objmem oemit ooref open or ord orflags
    +syntax keyword mushFunction contained orlflags orlpowers orpowers owner parent
    +syntax keyword mushFunction contained parse pcreate pemit pi pickrand playermem
    +syntax keyword mushFunction contained pmatch poll ports pos poss power powergroups
    +syntax keyword mushFunction contained powers powover program prompt pueblo quitprog
    +syntax keyword mushFunction contained quota r rand randword recv regedit regeditall
    +syntax keyword mushFunction contained regeditalli regediti regmatch regmatchi
    +syntax keyword mushFunction contained regrab regraball regraballi regrabi regrep
    +syntax keyword mushFunction contained regrepi remainder remit remove repeat replace
    +syntax keyword mushFunction contained rest restarts restarttime reswitch
    +syntax keyword mushFunction contained reswitchall reswitchalli reswitchi reverse
    +syntax keyword mushFunction contained revwords right rjust rloc rnum room root
    +syntax keyword mushFunction contained round s scan scramble search secs secure sent
    +syntax keyword mushFunction contained set setdiff setinter setq setr setunion sha0
    +syntax keyword mushFunction contained shl shr shuffle sign signal sin sort sortby
    +syntax keyword mushFunction contained soundex soundlike soundslike space spellnum
    +syntax keyword mushFunction contained splice sql sqlescape sqrt squish ssl
    +syntax keyword mushFunction contained starttime stats stddev step strcat strinsert
    +syntax keyword mushFunction contained stripaccents stripansi strlen strmatch
    +syntax keyword mushFunction contained strreplace sub subj switch switchall t table
    +syntax keyword mushFunction contained tag tagwrap tan tel terminfo textfile
    +syntax keyword mushFunction contained tilde2blank time timefmt timestring tr
    +syntax keyword mushFunction contained trigger trim trimpenn trimtiny trunc type u
    +syntax keyword mushFunction contained ucstr udefault ufun uldefault ulocal updiv
    +syntax keyword mushFunction contained utctime v vadd val valid vcross vdim vdot
    +syntax keyword mushFunction contained version visible vmag vmax vmin vmul vsub
    +syntax keyword mushFunction contained vtattr vtcount vtcreate vtdestroy vtlcon
    +syntax keyword mushFunction contained vtloc vtlocate vtmaster vtname vtref vttel
    +syntax keyword mushFunction contained vunit wait where width wipe wordpos words
    +syntax keyword mushFunction contained wrap xcon xexits xget xor xplayers xthings
    +syntax keyword mushFunction contained xvcon xvexits xvplayers xvthings zemit zfun
    +syntax keyword mushFunction contained zmwho zone zwho
    +
    +" only highligh functions when they have an in-bracket immediately after
    +syntax match mushFunctionBrackets  "\i*(" contains=mushFunction
    +"
    +" regular mush commands
    +syntax keyword mushAtCommandList contained @ALLHALT @ALLQUOTA @ASSERT @ATRCHOWN @ATRLOCK @ATTRIBUTE @BOOT 
    +syntax keyword mushAtCommandList contained @BREAK @CEMIT @CHANNEL @CHAT @CHOWN @CHOWNALL @CHZONE @CHZONEALL 
    +syntax keyword mushAtCommandList contained @CLOCK @CLONE @COBJ @COMMAND @CONFIG @CPATTR @CREATE @CRPLOG @DBCK
    +syntax keyword mushAtCommandList contained @DECOMPILE @DESTROY @DIG @DISABLE @DIVISION @DOING @DOLIST @DRAIN 
    +syntax keyword mushAtCommandList contained @DUMP @EDIT @ELOCK @EMIT @EMPOWER @ENABLE @ENTRANCES @EUNLOCK @FIND 
    +syntax keyword mushAtCommandList contained @FIRSTEXIT @FLAG @FORCE @FUNCTION @EDIT @GREP @HALT @HIDE @HOOK @KICK 
    +syntax keyword mushAtCommandList contained @LEMIT @LEVEL @LINK @LIST @LISTMOTD @LOCK @LOG @LOGWIPE @LSET @MAIL @MALIAS 
    +syntax keyword mushAtCommandList contained @MAP @MOTD @MVATTR @NAME @NEWPASSWORD @NOTIFY @NSCEMIT @NSEMIT @NSLEMIT 
    +syntax keyword mushAtCommandList contained @NSOEMIT @NSPEMIT @NSPEMIT @NSREMIT @NSZEMIT @NUKE @OEMIT @OPEN @PARENT @PASSWORD
    +syntax keyword mushAtCommandList contained @PCREATE @PEMIT @POLL @POOR @POWERLEVEL @PROGRAM @PROMPT @PS @PURGE @QUOTA 
    +syntax keyword mushAtCommandList contained @READCACHE @RECYCLE @REJECTMOTD @REMIT @RESTART @SCAN @SEARCH @SELECT @SET 
    +syntax keyword mushAtCommandList contained @SHUTDOWN @SITELOCK @SNOOP @SQL @SQUOTA @STATS @SWITCH @SWEEP @SWITCH @TELEPORT 
    +syntax keyword mushAtCommandList contained @TRIGGER @ULOCK @UNDESTROY @UNLINK @UNLOCK @UNRECYCLE @UPTIME @UUNLOCK @VERB 
    +syntax keyword mushAtCommandList contained @VERSION @WAIT @WALL @WARNINGS @WCHECK @WHEREIS @WIPE @ZCLONE @ZEMIT
    +syntax match mushCommand  "@\i\I*" contains=mushAtCommandList
    +
    +
    +syntax keyword mushCommand AHELP ANEWS ATTRIB_SET BRIEF BRIEF BUY CHANGES DESERT
    +syntax keyword mushCommand DISMISS DROP EMPTY ENTER EXAMINE FOLLOW GET GIVE GOTO 
    +syntax keyword mushCommand HELP HUH_COMMAND INVENTORY INVENTORY LOOK LEAVE LOOK
    +syntax keyword mushCommand GOTO NEWS PAGE PAGE POSE RULES SAY SCORE SEMIPOSE 
    +syntax keyword mushCommand SPECIALNEWS TAKE TEACH THINK UNFOLLOW USE WHISPER WHISPER
    +syntax keyword mushCommand WARN_ON_MISSING WHISPER WITH
    +
    +syntax match mushSpecial     "\*\|!\|=\|-\|\\\|+"
    +syntax match mushSpecial2 contained     "\*"
    +
    +syn region    mushString         start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=mushSpecial,mushSpecial2,@Spell
    +
    +
    +syntax match mushIdentifier   "&[^ ]\+"
    +
    +syntax match mushVariable   "%r\|%t\|%cr\|%[A-Za-z0-9]\+\|%#\|##\|here"
    +
    +" numbers
    +syntax match mushNumber	+[0-9]\++
    +
    +" A comment line starts with a or # or " at the start of the line
    +" or an @@
    +syntax keyword mushTodo contained	TODO FIXME XXX
    +syntax cluster mushCommentGroup contains=mushTodo
    +syntax match	mushComment	"^\s*@@.*$"	contains=mushTodo
    +syntax match mushComment "^#[^define|^ifdef|^else|^pragma|^ifndef|^echo|^elif|^undef|^warning].*$" contains=mushTodo
    +syntax match mushComment "^#$" contains=mushTodo
    +syntax region mushComment        matchgroup=mushCommentStart start="/@@" end="@@/" contains=@mushCommentGroup,mushCommentStartError,mushCommentString,@Spell
    +syntax region mushCommentString  contained start=+L\=\\\@" skip="\\$" end="$" end="//"me=s-1 contains=mushComment
    +syn match       mushPreCondit      display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
    +
    +syn cluster     mushPreProcGroup   contains=mushPreCondit,mushIncluded,mushInclude,mushDefine,mushSpecial,mushString,mushCommentSkip,mushCommentString,@mushCommentGroup,mushCommentStartError
    +
    +syn region      mushIncluded       display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
    +syn match       mushIncluded       display contained "<[^>]*>"
    +syn match       mushInclude        display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=mushIncluded
    +syn region	mushDefine		start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@mushPreProcGroup,@Spell
    +syn region	mushPreProc	start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@mushPreProcGroup
    +
    +
    +syntax region	mushFuncBoundaries start="\[" end="\]" contains=mushFunction,mushFlag,mushAttributes,mushNumber,mushCommand,mushVariable,mushSpecial2
    +
    +" FLAGS
    +syntax keyword mushFlag PLAYER ABODE BUILDER CHOWN_OK DARK FLOATING
    +syntax keyword mushFlag GOING HAVEN INHERIT JUMP_OK KEY LINK_OK MONITOR
    +syntax keyword mushFlag NOSPOOF OPAQUE QUIET STICKY TRACE UNFINDABLE VISUAL
    +syntax keyword mushFlag WIZARD PARENT_OK ZONE AUDIBLE CONNECTED DESTROY_OK
    +syntax keyword mushFlag ENTER_OK HALTED IMMORTAL LIGHT MYOPIC PUPPET TERSE
    +syntax keyword mushFlag ROBOT SAFE TRANSPARENT VERBOSE CONTROL_OK COMMANDS
    +
    +syntax keyword mushAttribute aahear aclone aconnect adesc adfail adisconnect
    +syntax keyword mushAttribute adrop aefail aenter afail agfail ahear akill
    +syntax keyword mushAttribute aleave alfail alias amhear amove apay arfail
    +syntax keyword mushAttribute asucc atfail atport aufail ause away charges
    +syntax keyword mushAttribute cost desc dfail drop ealias efail enter fail
    +syntax keyword mushAttribute filter forwardlist gfail idesc idle infilter
    +syntax keyword mushAttribute inprefix kill lalias last lastsite leave lfail
    +syntax keyword mushAttribute listen move odesc odfail odrop oefail oenter
    +syntax keyword mushAttribute ofail ogfail okill oleave olfail omove opay
    +syntax keyword mushAttribute orfail osucc otfail otport oufail ouse oxenter
    +syntax keyword mushAttribute oxleave oxtport pay prefix reject rfail runout
    +syntax keyword mushAttribute semaphore sex startup succ tfail tport ufail
    +syntax keyword mushAttribute use va vb vc vd ve vf vg vh vi vj vk vl vm vn
    +syntax keyword mushAttribute vo vp vq vr vs vt vu vv vw vx vy vz
    +
    +
    +
    +" The default methods for highlighting.  Can be overridden later
    +hi def link mushAttribute  Constant
    +hi def link mushCommand    Function
    +hi def link mushNumber     Number
    +hi def link mushSetting    PreProc
    +hi def link mushFunction   Statement
    +hi def link mushVariable   Identifier
    +hi def link mushSpecial    Special
    +hi def link mushTodo       Todo
    +hi def link mushFlag       Special
    +hi def link mushIdentifier Identifier
    +hi def link mushDefine     Macro
    +hi def link mushPreProc    PreProc
    +hi def link mushPreProcGroup PreProc 
    +hi def link mushPreCondit PreCondit
    +hi def link mushIncluded cString
    +hi def link mushInclude Include
    +
    +
    +
    +" Comments
    +hi def link mushCommentStart mushComment
    +hi def link mushComment    Comment
    +hi def link mushCommentString mushString
    +
    +
    +
    +let b:current_syntax = "mush"
    +
    +" mush: ts=17
    diff --git a/.config/vim/syntax/muttrc.vim b/.config/vim/syntax/muttrc.vim
    new file mode 100644
    index 0000000..34ebc4f
    --- /dev/null
    +++ b/.config/vim/syntax/muttrc.vim
    @@ -0,0 +1,847 @@
    +" Vim syntax file
    +" Language:	Mutt setup files
    +" Original:	Preben 'Peppe' Guldberg 
    +" Maintainer:	Luna Celeste 
    +" Last Change:	14 Aug 2023
    +" 2025 May 19 re-include missing mutt Keywords #17344
    +
    +" This file covers mutt version 2.2.10
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +" Set the keyword characters
    +setlocal isk=@,48-57,_,-
    +
    +" handling optional variables
    +if !exists("use_mutt_sidebar")
    +  let use_mutt_sidebar=0
    +endif
    +
    +syn match muttrcComment		"^# .*$" contains=@Spell
    +syn match muttrcComment		"^#[^ ].*$"
    +syn match muttrcComment		"^#$"
    +syn match muttrcComment		"[^\\]#.*$"lc=1
    +
    +" Escape sequences (back-tick and pipe goes here too)
    +syn match muttrcEscape		+\\[#tnr"'Cc ]+
    +syn match muttrcEscape		+[`|]+
    +syn match muttrcEscape		+\\$+
    +
    +" The variables takes the following arguments
    +"syn match  muttrcString		contained "=\s*[^ #"'`]\+"lc=1 contains=muttrcEscape
    +syn region muttrcString		contained keepend start=+"+ms=e skip=+\\"+ end=+"+ contains=muttrcEscape,muttrcCommand,muttrcAction,muttrcShellString
    +syn region muttrcString		contained keepend start=+'+ms=e skip=+\\'+ end=+'+ contains=muttrcEscape,muttrcCommand,muttrcAction
    +syn match muttrcStringNL	contained skipwhite skipnl "\s*\\$" nextgroup=muttrcString,muttrcStringNL
    +
    +syn region muttrcShellString	matchgroup=muttrcEscape keepend start=+`+ skip=+\\`+ end=+`+ contains=muttrcVarStr,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcCommand
    +
    +syn match  muttrcRXChars	contained /[^\\][][.*?+]\+/hs=s+1
    +syn match  muttrcRXChars	contained /[][|()][.*?+]*/
    +syn match  muttrcRXChars	contained /['"]^/ms=s+1
    +syn match  muttrcRXChars	contained /$['"]/me=e-1
    +syn match  muttrcRXChars	contained /\\/
    +" Why does muttrcRXString2 work with one \ when muttrcRXString requires two?
    +syn region muttrcRXString	contained skipwhite start=+'+ skip=+\\'+ end=+'+ contains=muttrcRXChars
    +syn region muttrcRXString	contained skipwhite start=+"+ skip=+\\"+ end=+"+ contains=muttrcRXChars
    +syn region muttrcRXString	contained skipwhite start=+[^ 	"'^]+ skip=+\\\s+ end=+\s+re=e-1 contains=muttrcRXChars
    +" For some reason, skip refuses to match backslashes here...
    +syn region muttrcRXString	contained matchgroup=muttrcRXChars skipwhite start=+\^+ end=+[^\\]\s+re=e-1 contains=muttrcRXChars
    +syn region muttrcRXString	contained matchgroup=muttrcRXChars skipwhite start=+\^+ end=+$\s+ contains=muttrcRXChars
    +syn region muttrcRXString2	contained skipwhite start=+'+ skip=+\'+ end=+'+ contains=muttrcRXChars
    +syn region muttrcRXString2	contained skipwhite start=+"+ skip=+\"+ end=+"+ contains=muttrcRXChars
    +
    +" these must be kept synchronized with muttrcRXString, but are intended for
    +" muttrcRXHooks
    +syn region muttrcRXHookString	contained keepend skipwhite start=+'+ skip=+\\'+ end=+'+ contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL
    +syn region muttrcRXHookString	contained keepend skipwhite start=+"+ skip=+\\"+ end=+"+ contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL
    +syn region muttrcRXHookString	contained keepend skipwhite start=+[^ 	"'^]+ skip=+\\\s+ end=+\s+re=e-1 contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL
    +syn region muttrcRXHookString	contained keepend skipwhite start=+\^+ end=+[^\\]\s+re=e-1 contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL
    +syn region muttrcRXHookString	contained keepend matchgroup=muttrcRXChars skipwhite start=+\^+ end=+$\s+ contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL
    +syn match muttrcRXHookStringNL contained skipwhite skipnl "\s*\\$" nextgroup=muttrcRXHookString,muttrcRXHookStringNL
    +
    +" these are exclusively for args lists (e.g. -rx pat pat pat ...)
    +syn region muttrcRXPat		contained keepend skipwhite start=+'+ skip=+\\'+ end=+'\s*+ contains=muttrcRXString nextgroup=muttrcRXPat
    +syn region muttrcRXPat		contained keepend skipwhite start=+"+ skip=+\\"+ end=+"\s*+ contains=muttrcRXString nextgroup=muttrcRXPat
    +syn match muttrcRXPat		contained /[^-'"#!]\S\+/ skipwhite contains=muttrcRXChars nextgroup=muttrcRXPat
    +syn match muttrcRXDef 		contained "-rx\s\+" skipwhite nextgroup=muttrcRXPat
    +
    +syn match muttrcSpecial		+\(['"]\)!\1+
    +
    +syn match muttrcSetStrAssignment contained skipwhite /=\s*\%(\\\?\$\)\?[0-9A-Za-z_-]\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr contains=muttrcVariable,muttrcEscapedVariable
    +syn region muttrcSetStrAssignment contained skipwhite keepend start=+=\s*"+hs=s+1 end=+"+ skip=+\\"+ nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr contains=muttrcString
    +syn region muttrcSetStrAssignment contained skipwhite keepend start=+=\s*'+hs=s+1 end=+'+ skip=+\\'+ nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr contains=muttrcString
    +syn match muttrcSetBoolAssignment contained skipwhite /=\s*\\\?\$\w\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr contains=muttrcVariable,muttrcEscapedVariable
    +syn match muttrcSetBoolAssignment contained skipwhite /=\s*\%(yes\|no\)/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn match muttrcSetBoolAssignment contained skipwhite /=\s*"\%(yes\|no\)"/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn match muttrcSetBoolAssignment contained skipwhite /=\s*'\%(yes\|no\)'/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn match muttrcSetQuadAssignment contained skipwhite /=\s*\\\?\$\w\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr contains=muttrcVariable,muttrcEscapedVariable
    +syn match muttrcSetQuadAssignment contained skipwhite /=\s*\%(ask-\)\?\%(yes\|no\)/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn match muttrcSetQuadAssignment contained skipwhite /=\s*"\%(ask-\)\?\%(yes\|no\)"/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn match muttrcSetQuadAssignment contained skipwhite /=\s*'\%(ask-\)\?\%(yes\|no\)'/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn match muttrcSetNumAssignment contained skipwhite /=\s*\\\?\$\w\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr contains=muttrcVariable,muttrcEscapedVariable
    +syn match muttrcSetNumAssignment contained skipwhite /=\s*\d\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn match muttrcSetNumAssignment contained skipwhite /=\s*"\d\+"/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn match muttrcSetNumAssignment contained skipwhite /=\s*'\d\+'/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +
    +" Now catch some email addresses and headers (purified version from mail.vim)
    +syn match muttrcEmail		"[a-zA-Z0-9._-]\+@[a-zA-Z0-9./-]\+"
    +syn match muttrcHeader		"\<\c\%(From\|To\|C[Cc]\|B[Cc][Cc]\|Reply-To\|Subject\|Return-Path\|Received\|Date\|Replied\|Attach\)\>:\="
    +
    +syn match   muttrcKeySpecial	contained +\%(\\[Cc'"]\|\^\|\\[01]\d\{2}\)+
    +syn match   muttrcKey		contained "\S\+"			contains=muttrcKeySpecial,muttrcKeyName
    +syn region  muttrcKey		contained start=+"+ skip=+\\\\\|\\"+ end=+"+	contains=muttrcKeySpecial,muttrcKeyName
    +syn region  muttrcKey		contained start=+'+ skip=+\\\\\|\\'+ end=+'+	contains=muttrcKeySpecial,muttrcKeyName
    +syn match   muttrcKeyName	contained "\"
    +syn match   muttrcKeyName	contained "\\[trne]"
    +syn match   muttrcKeyName	contained "\c<\%(BackSpace\|BackTab\|Delete\|Down\|End\|Enter\|Esc\|Home\|Insert\|Left\|PageDown\|PageUp\|Return\|Right\|Space\|Tab\|Up\)>"
    +syn match   muttrcKeyName	contained ""
    +
    +syn keyword muttrcVarBool	skipwhite contained 
    +			\ allow_8bit allow_ansi arrow_cursor ascii_chars askbcc askcc attach_split
    +			\ auto_tag autoedit auto_subscribe background_edit background_confirm_quit beep beep_new
    +			\ bounce_delivered braille_friendly browser_abbreviate_mailboxes browser_sticky_cursor
    +			\ change_folder_next check_mbox_size check_new collapse_unread compose_confirm_detach_first
    +			\ confirmappend confirmcreate copy_decode_weed count_alternatives crypt_autoencrypt crypt_autopgp
    +			\ crypt_autosign crypt_autosmime crypt_confirmhook crypt_protected_headers_read
    +			\ crypt_protected_headers_save crypt_protected_headers_write crypt_opportunistic_encrypt
    +			\ crypt_opportunistic_encrypt_strong_keys crypt_replyencrypt crypt_replysign
    +			\ crypt_replysignencrypted crypt_timestamp crypt_use_gpgme crypt_use_pka cursor_overlay
    +			\ delete_untag digest_collapse duplicate_threads edit_hdrs edit_headers encode_from
    +			\ envelope_from fast_reply fcc_before_send fcc_clear flag_safe followup_to force_name forw_decode
    +			\ forw_decrypt forw_quote forward_decode forward_quote hdrs header
    +			\ header_color_partial help hidden_host hide_limited hide_missing hide_thread_subject
    +			\ hide_top_limited hide_top_missing history_remove_dups honor_disposition idn_decode idn_encode
    +			\ ignore_linear_white_space ignore_list_reply_to imap_check_subscribed imap_condstore imap_deflate
    +			\ imap_list_subscribed imap_passive imap_peek imap_qresync imap_servernoise
    +			\ implicit_autoview include_encrypted include_onlyfirst keep_flagged local_date_header
    +			\ mail_check_recent mail_check_stats mailcap_sanitize maildir_check_cur
    +			\ maildir_header_cache_verify maildir_trash mark_old markers menu_move_off
    +			\ menu_scroll message_cache_clean meta_key metoo mh_purge mime_forward_decode
    +			\ mime_type_query_first muttlisp_inline_eval narrow_tree pager_stop pgp_auto_decode
    +			\ pgp_auto_traditional pgp_autoencrypt pgp_autoinline pgp_autosign
    +			\ pgp_check_exit pgp_check_gpg_decrypt_status_fd pgp_create_traditional
    +			\ pgp_ignore_subkeys pgp_long_ids pgp_replyencrypt pgp_replyinline
    +			\ pgp_replysign pgp_replysignencrypted pgp_retainable_sigs pgp_self_encrypt
    +			\ pgp_self_encrypt_as pgp_show_unusable pgp_strict_enc pgp_use_gpg_agent
    +			\ pipe_decode pipe_decode_weed pipe_split pop_auth_try_all pop_last postpone_encrypt
    +			\ postpone_encrypt_as print_decode print_decode_weed print_split prompt_after read_only
    +			\ reflow_space_quotes reflow_text reflow_wrap reply_self resolve
    +			\ resume_draft_files resume_edited_draft_files reverse_alias reverse_name
    +			\ reverse_realname rfc2047_parameters save_address save_empty save_name score
    +			\ sidebar_folder_indent sidebar_new_mail_only sidebar_next_new_wrap
    +			\ sidebar_relative_shortpath_indent sidebar_short_path sidebar_sort sidebar_use_mailbox_shortcuts
    +			\ sidebar_visible sig_on_top sig_dashes size_show_bytes size_show_fraction size_show_mb
    +			\ size_units_on_left smart_wrap smime_ask_cert_label smime_decrypt_use_default_key
    +			\ smime_is_default smime_self_encrypt smime_self_encrypt_as sort_re
    +			\ ssl_force_tls ssl_use_sslv2 ssl_use_sslv3 ssl_use_tlsv1 ssl_use_tlsv1_3 ssl_usesystemcerts
    +			\ ssl_verify_dates ssl_verify_host ssl_verify_partial_chains status_on_top
    +			\ strict_mime strict_threads suspend text_flowed thorough_search
    +			\ thread_received tilde ts_enabled tunnel_is_secure uncollapse_jump use_8bitmime use_domain
    +			\ use_envelope_from use_from use_idn use_ipv6 uncollapse_new user_agent
    +			\ wait_key weed wrap_search write_bcc
    +			\ nextgroup=muttrcSetBoolAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +
    +syn keyword muttrcVarBool	skipwhite contained 
    +			\ noallow_8bit noallow_ansi noarrow_cursor noascii_chars noaskbcc noaskcc
    +			\ noattach_split noauto_tag noautoedit noauto_subscribe nobackground_edit
    +			\ nobackground_confirm_quit nobeep nobeep_new nobounce_delivered
    +			\ nobraille_friendly nobrowser_abbreviate_mailboxes nobrowser_sticky_cursor nochange_folder_next
    +			\ nocheck_mbox_size nocheck_new nocompose_confirm_detach_first nocollapse_unread noconfirmappend
    +			\ noconfirmcreate nocopy_decode_weed nocount_alternatives nocrypt_autoencrypt nocrypt_autopgp
    +			\ nocrypt_autosign nocrypt_autosmime nocrypt_confirmhook nocrypt_protected_headers_read
    +			\ nocrypt_protected_headers_save nocrypt_protected_headers_write nocrypt_opportunistic_encrypt
    +			\ nocrypt_opportunistic_encrypt_strong_keys nocrypt_replyencrypt nocrypt_replysign
    +			\ nocrypt_replysignencrypted nocrypt_timestamp nocrypt_use_gpgme nocrypt_use_pka nocursor_overlay
    +			\ nodelete_untag nodigest_collapse noduplicate_threads noedit_hdrs noedit_headers
    +			\ noencode_from noenvelope_from nofast_reply nofcc_before_send nofcc_clear noflag_safe
    +			\ nofollowup_to noforce_name noforw_decode noforw_decrypt noforw_quote
    +			\ noforward_decode noforward_quote nohdrs noheader
    +			\ noheader_color_partial nohelp nohidden_host nohide_limited nohide_missing
    +			\ nohide_thread_subject nohide_top_limited nohide_top_missing
    +			\ nohistory_remove_dups nohonor_disposition noidn_decode noidn_encode
    +			\ noignore_linear_white_space noignore_list_reply_to noimap_check_subscribed
    +			\ noimap_condstore noimap_deflate noimap_list_subscribed noimap_passive noimap_peek
    +			\ noimap_qresync noimap_servernoise noimplicit_autoview noinclude_encrypted noinclude_onlyfirst
    +			\ nokeep_flagged nolocal_date_header nomail_check_recent nomail_check_stats nomailcap_sanitize
    +			\ nomaildir_check_cur nomaildir_header_cache_verify nomaildir_trash nomark_old
    +			\ nomarkers nomenu_move_off nomenu_scroll nomessage_cache_clean nometa_key
    +			\ nometoo nomh_purge nomime_forward_decode nomime_type_query_first nomuttlisp_inline_eval
    +			\ nonarrow_tree nopager_stop nopgp_auto_decode nopgp_auto_traditional nopgp_autoencrypt
    +			\ nopgp_autoinline nopgp_autosign nopgp_check_exit
    +			\ nopgp_check_gpg_decrypt_status_fd nopgp_create_traditional
    +			\ nopgp_ignore_subkeys nopgp_long_ids nopgp_replyencrypt nopgp_replyinline
    +			\ nopgp_replysign nopgp_replysignencrypted nopgp_retainable_sigs
    +			\ nopgp_self_encrypt nopgp_self_encrypt_as nopgp_show_unusable
    +			\ nopgp_strict_enc nopgp_use_gpg_agent nopipe_decode nopipe_decode_weed nopipe_split
    +			\ nopop_auth_try_all nopop_last nopostpone_encrypt nopostpone_encrypt_as
    +			\ noprint_decode noprint_decode_weed noprint_split noprompt_after noread_only
    +			\ noreflow_space_quotes noreflow_text noreflow_wrap noreply_self noresolve
    +			\ noresume_draft_files noresume_edited_draft_files noreverse_alias
    +			\ noreverse_name noreverse_realname norfc2047_parameters nosave_address
    +			\ nosave_empty nosave_name noscore nosidebar_folder_indent
    +			\ nosidebar_new_mail_only nosidebar_next_new_wrap nosidebar_relative_shortpath_indent
    +			\ nosidebar_short_path nosidebar_sort nosidebar_visible nosidebar_use_mailbox_shortcuts
    +			\ nosig_dashes nosig_on_top nosize_show_bytes nosize_show_fraction nosize_show_mb
    +			\ nosize_units_on_left nosmart_wrap nosmime_ask_cert_label nosmime_decrypt_use_default_key
    +			\ nosmime_is_default nosmime_self_encrypt nosmime_self_encrypt_as nosort_re nossl_force_tls
    +			\ nossl_use_sslv2 nossl_use_sslv3 nossl_use_tlsv1 nossl_use_tlsv1_3 nossl_usesystemcerts
    +			\ nossl_verify_dates nossl_verify_host nossl_verify_partial_chains
    +			\ nostatus_on_top nostrict_mime nostrict_threads nosuspend notext_flowed
    +			\ nothorough_search nothread_received notilde nots_enabled notunnel_is_secure nouncollapse_jump
    +			\ nouse_8bitmime nouse_domain nouse_envelope_from nouse_from nouse_idn
    +			\ nouse_ipv6 nouncollapse_new nouser_agent nowait_key noweed nowrap_search
    +			\ nowrite_bcc
    +			\ nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +
    +syn keyword muttrcVarBool	skipwhite contained
    +			\ invallow_8bit invallow_ansi invarrow_cursor invascii_chars invaskbcc
    +			\ invaskcc invattach_split invauto_tag invautoedit invauto_subscribe nobackground_edit
    +			\ nobackground_confirm_quit invbeep invbeep_new invbounce_delivered invbraille_friendly
    +			\ invbrowser_abbreviate_mailboxes invbrowser_sticky_cursor invchange_folder_next
    +			\ invcheck_mbox_size invcheck_new invcollapse_unread invcompose_confirm_detach_first
    +			\ invconfirmappend invcopy_decode_weed invconfirmcreate invcount_alternatives invcrypt_autopgp
    +			\ invcrypt_autoencrypt invcrypt_autosign invcrypt_autosmime invcrypt_confirmhook
    +			\ invcrypt_protected_headers_read invcrypt_protected_headers_save invcrypt_protected_headers_write
    +			\ invcrypt_opportunistic_encrypt invcrypt_opportunistic_encrypt_strong_keys invcrypt_replysign
    +			\ invcrypt_replyencrypt invcrypt_replysignencrypted invcrypt_timestamp invcrypt_use_gpgme
    +			\ invcrypt_use_pka invcursor_overlay invdelete_untag invdigest_collapse invduplicate_threads
    +			\ invedit_hdrs invedit_headers invencode_from invenvelope_from invfast_reply
    +			\ invfcc_before_send invfcc_clear invflag_safe invfollowup_to invforce_name invforw_decode
    +			\ invforw_decrypt invforw_quote invforward_decode
    +			\ invforward_quote invhdrs invheader invheader_color_partial invhelp
    +			\ invhidden_host invhide_limited invhide_missing invhide_thread_subject
    +			\ invhide_top_limited invhide_top_missing invhistory_remove_dups
    +			\ invhonor_disposition invidn_decode invidn_encode
    +			\ invignore_linear_white_space invignore_list_reply_to
    +			\ invimap_check_subscribed invimap_condstore invimap_deflate invimap_list_subscribed
    +			\ invimap_passive invimap_peek invimap_qresync invimap_servernoise invimplicit_autoview
    +			\ invinclude_encrypted invinclude_onlyfirst invkeep_flagged invlocal_date_header
    +			\ invmail_check_recent invmail_check_stats invmailcap_sanitize invmaildir_check_cur
    +			\ invmaildir_header_cache_verify invmaildir_trash invmark_old invmarkers invmenu_move_off
    +			\ invmenu_scroll invmessage_cache_clean invmeta_key invmetoo invmh_purge
    +			\ invmime_forward_decode invmime_type_query_first invmuttlisp_inline_eval invnarrow_tree
    +			\ invpager_stop invpgp_auto_decode invpgp_auto_traditional invpgp_autoencrypt
    +			\ invpgp_autoinline invpgp_autosign invpgp_check_exit
    +			\ invpgp_check_gpg_decrypt_status_fd invpgp_create_traditional
    +			\ invpgp_ignore_subkeys invpgp_long_ids invpgp_replyencrypt invpgp_replyinline
    +			\ invpgp_replysign invpgp_replysignencrypted invpgp_retainable_sigs
    +			\ invpgp_self_encrypt invpgp_self_encrypt_as invpgp_show_unusable
    +			\ invpgp_strict_enc invpgp_use_gpg_agent invpipe_decode invpipe_decode_weed invpipe_split
    +			\ invpop_auth_try_all invpop_last invpostpone_encrypt invpostpone_encrypt_as
    +			\ invprint_decode invprint_decode_weed invprint_split invprompt_after invread_only
    +			\ invreflow_space_quotes invreflow_text invreflow_wrap invreply_self invresolve
    +			\ invresume_draft_files invresume_edited_draft_files invreverse_alias
    +			\ invreverse_name invreverse_realname invrfc2047_parameters invsave_address
    +			\ invsave_empty invsave_name invscore invsidebar_folder_indent
    +			\ invsidebar_new_mail_only invsidebar_next_new_wrap invsidebar_relative_shortpath_indent
    +			\ invsidebar_short_path invsidebar_sort sidebar_use_mailbox_shortcuts invsidebar_visible
    +			\ invsig_dashes invsig_on_top invsize_show_bytes invsize_show_fraction invsize_show_mb
    +			\ invsize_units_on_left invsmart_wrap invsmime_ask_cert_label invsmime_decrypt_use_default_key
    +			\ invsmime_is_default invsmime_self_encrypt invsmime_self_encrypt_as invsort_re invssl_force_tls
    +			\ invssl_use_sslv2 invssl_use_sslv3 invssl_use_tlsv1 invssl_use_tlsv1_3 invssl_usesystemcerts
    +			\ invssl_verify_dates invssl_verify_host invssl_verify_partial_chains
    +			\ invstatus_on_top invstrict_mime invstrict_threads invsuspend invtext_flowed
    +			\ invthorough_search invthread_received invtilde invts_enabled invtunnel_is_secure
    +			\ invuncollapse_jump invuse_8bitmime invuse_domain invuse_envelope_from
    +			\ invuse_from invuse_idn invuse_ipv6 invuncollapse_new invuser_agent
    +			\ invwait_key invweed invwrap_search invwrite_bcc
    +			\ nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +
    +syn keyword muttrcVarQuad	skipwhite contained
    +			\ abort_nosubject abort_unmodified abort_noattach bounce copy crypt_verify_sig
    +			\ delete fcc_attach forward_attachments forward_decrypt forward_edit honor_followup_to include
    +			\ mime_forward mime_forward_rest mime_fwd move pgp_mime_auto pgp_verify_sig pop_delete
    +			\ pop_reconnect postpone print quit recall reply_to send_multipart_alternative ssl_starttls
    +			\ nextgroup=muttrcSetQuadAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +
    +syn keyword muttrcVarQuad	skipwhite contained
    +			\ noabort_nosubject noabort_unmodified noabort_noattach nobounce nocopy
    +			\ nocrypt_verify_sig nodelete nofcc_attach noforward_attachments noforward_decrypt noforward_edit
    +			\ nohonor_followup_to noinclude nomime_forward nomime_forward_rest nomime_fwd nomove
    +			\ nopgp_mime_auto nopgp_verify_sig nopop_delete nopop_reconnect nopostpone
    +			\ noprint noquit norecall noreply_to nosend_multipart_alternative nossl_starttls
    +			\ nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +
    +syn keyword muttrcVarQuad	skipwhite contained
    +			\ invabort_nosubject invabort_unmodified invabort_noattach invbounce invcopy
    +			\ invcrypt_verify_sig invdelete invfcc_attach invforward_attachments invforward_decrypt
    +			\ invforward_edit invhonor_followup_to invinclude invmime_forward invmime_forward_rest
    +			\ invmime_fwd invmove invpgp_mime_auto invpgp_verify_sig invpop_delete
    +			\ invpop_reconnect invpostpone invprint invquit invrecall invreply_to
    +			\ invsend_multipart_alternative invssl_starttls
    +			\ nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +
    +syn keyword muttrcVarNum	skipwhite contained
    +			\ connect_timeout error_history history imap_fetch_chunk_size imap_keepalive imap_pipeline_depth
    +			\ imap_poll_timeout mail_check mail_check_stats_interval menu_context net_inc
    +			\ pager_context pager_index_lines pager_skip_quoted_context pgp_timeout pop_checkinterval read_inc
    +			\ save_history score_threshold_delete score_threshold_flag
    +			\ score_threshold_read search_context sendmail_wait sidebar_width sleep_time
    +			\ smime_timeout ssl_min_dh_prime_bits time_inc timeout wrap wrap_headers
    +			\ wrapmargin write_inc
    +			\ nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +
    +syn match muttrcFormatErrors contained /%./
    +
    +syn match muttrcStrftimeEscapes contained /%[AaBbCcDdeFGgHhIjklMmnpRrSsTtUuVvWwXxYyZz+%]/
    +syn match muttrcStrftimeEscapes contained /%E[cCxXyY]/
    +syn match muttrcStrftimeEscapes contained /%O[BdeHImMSuUVwWy]/
    +
    +syn region muttrcIndexFormatStr	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcIndexFormatEscapes,muttrcIndexFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcIndexFormatStr	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcIndexFormatEscapes,muttrcIndexFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcQueryFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcQueryFormatEscapes,muttrcQueryFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcAliasFormatStr	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcAliasFormatEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcAliasFormatStr	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcAliasFormatEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcAttachFormatStr	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcAttachFormatEscapes,muttrcAttachFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcAttachFormatStr	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcAttachFormatEscapes,muttrcAttachFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcComposeFormatStr	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcComposeFormatEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcComposeFormatStr	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcComposeFormatEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcFolderFormatStr	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcFolderFormatEscapes,muttrcFolderFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcFolderFormatStr	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcFolderFormatEscapes,muttrcFolderFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcMixFormatStr	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcMixFormatEscapes,muttrcMixFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcMixFormatStr	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcMixFormatEscapes,muttrcMixFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcPGPFormatStr	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPGPFormatEscapes,muttrcPGPFormatConditionals,muttrcFormatErrors,muttrcPGPTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcPGPFormatStr	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPGPFormatEscapes,muttrcPGPFormatConditionals,muttrcFormatErrors,muttrcPGPTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcPGPCmdFormatStr	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPGPCmdFormatEscapes,muttrcPGPCmdFormatConditionals,muttrcVariable,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcPGPCmdFormatStr	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPGPCmdFormatEscapes,muttrcPGPCmdFormatConditionals,muttrcVariable,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcStatusFormatStr	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcStatusFormatEscapes,muttrcStatusFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcStatusFormatStr	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcStatusFormatEscapes,muttrcStatusFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcPGPGetKeysFormatStr	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPGPGetKeysFormatEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcPGPGetKeysFormatStr	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPGPGetKeysFormatEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcSmimeFormatStr	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcSmimeFormatEscapes,muttrcSmimeFormatConditionals,muttrcVariable,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcSmimeFormatStr	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcSmimeFormatEscapes,muttrcSmimeFormatConditionals,muttrcVariable,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcStrftimeFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcStrftimeEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn region muttrcStrftimeFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcStrftimeEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +
    +" The following info was pulled from hdr_format_str in hdrline.c
    +syn match muttrcIndexFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[aAbBcCdDeEfFHilLmMnNOPsStTuvXyYZ%]/
    +syn match muttrcIndexFormatEscapes contained /%[>|*]./
    +syn match muttrcIndexFormatConditionals contained /%?[EFHlLMNOXyY]?/ nextgroup=muttrcFormatConditionals2
    +" The following info was pulled from alias_format_str in addrbook.c
    +syn match muttrcAliasFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[afnrt%]/
    +" The following info was pulled from query_format_str in query.c
    +syn match muttrcQueryFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[acent%]/
    +syn match muttrcQueryFormatConditionals contained /%?[e]?/ nextgroup=muttrcFormatConditionals2
    +" The following info was pulled from mutt_attach_fmt in recvattach.c
    +syn match muttrcAttachFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[CcDdeFfImMnQstTuX%]/
    +syn match muttrcAttachFormatEscapes contained /%[>|*]./
    +syn match muttrcAttachFormatConditionals contained /%?[CcdDefInmMQstTuX]?/ nextgroup=muttrcFormatConditionals2
    +syn match muttrcFormatConditionals2 contained /[^?]*?/
    +" The following info was pulled from compose_format_str in compose.c
    +syn match muttrcComposeFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[ahlv%]/
    +syn match muttrcComposeFormatEscapes contained /%[>|*]./
    +" The following info was pulled from folder_format_str in browser.c
    +syn match muttrcFolderFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[CDdfFglNstu%]/
    +syn match muttrcFolderFormatEscapes contained /%[>|*]./
    +syn match muttrcFolderFormatConditionals contained /%?[N]?/
    +" The following info was pulled from mix_entry_fmt in remailer.c
    +syn match muttrcMixFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[ncsa%]/
    +syn match muttrcMixFormatConditionals contained /%?[ncsa]?/
    +" The following info was pulled from crypt_entry_fmt in crypt-gpgme.c 
    +" and pgp_entry_fmt in pgpkey.c (note that crypt_entry_fmt supports 
    +" 'p', but pgp_entry_fmt does not).
    +syn match muttrcPGPFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[nkualfctp%]/
    +syn match muttrcPGPFormatConditionals contained /%?[nkualfct]?/
    +" The following info was pulled from _mutt_fmt_pgp_command in 
    +" pgpinvoke.c
    +syn match muttrcPGPCmdFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[pfsar%]/
    +syn match muttrcPGPCmdFormatConditionals contained /%?[pfsar]?/ nextgroup=muttrcFormatConditionals2
    +" The following info was pulled from status_format_str in status.c
    +syn match muttrcStatusFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[bdfFhlLmMnopPRrsStuvV%]/
    +syn match muttrcStatusFormatEscapes contained /%[>|*]./
    +syn match muttrcStatusFormatConditionals contained /%?[bdFlLmMnoptuV]?/ nextgroup=muttrcFormatConditionals2
    +" This matches the documentation, but directly contradicts the code 
    +" (according to the code, this should be identical to the 
    +" muttrcPGPCmdFormatEscapes
    +syn match muttrcPGPGetKeysFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[r%]/
    +" The following info was pulled from _mutt_fmt_smime_command in 
    +" smime.c
    +syn match muttrcSmimeFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[Cciskaf%]/
    +syn match muttrcSmimeFormatConditionals contained /%?[Cciskaf]?/ nextgroup=muttrcFormatConditionals2
    +
    +syn region muttrcTimeEscapes contained start=+%{+ end=+}+ contains=muttrcStrftimeEscapes
    +syn region muttrcTimeEscapes contained start=+%\[+ end=+\]+ contains=muttrcStrftimeEscapes
    +syn region muttrcTimeEscapes contained start=+%(+ end=+)+ contains=muttrcStrftimeEscapes
    +syn region muttrcTimeEscapes contained start=+%<+ end=+>+ contains=muttrcStrftimeEscapes
    +syn region muttrcPGPTimeEscapes contained start=+%\[+ end=+\]+ contains=muttrcStrftimeEscapes
    +
    +syn keyword muttrcVarStr	contained skipwhite attribution index_format message_format pager_format nextgroup=muttrcVarEqualsIdxFmt
    +syn match muttrcVarEqualsIdxFmt contained skipwhite "=" nextgroup=muttrcIndexFormatStr
    +syn keyword muttrcVarStr	contained skipwhite alias_format nextgroup=muttrcVarEqualsAliasFmt
    +syn match muttrcVarEqualsAliasFmt contained skipwhite "=" nextgroup=muttrcAliasFormatStr
    +syn keyword muttrcVarStr	contained skipwhite attach_format nextgroup=muttrcVarEqualsAttachFmt
    +syn match muttrcVarEqualsAttachFmt contained skipwhite "=" nextgroup=muttrcAttachFormatStr
    +syn keyword muttrcVarStr	contained skipwhite background_format nextgroup=muttrcVarEqualsBackgroundFormatFmt
    +syn match muttrcVarEqualsBackgroundFormatFmt contained skipwhite "=" nextgroup=muttrcBackgroundFormatStr
    +syn keyword muttrcVarStr	contained skipwhite compose_format nextgroup=muttrcVarEqualsComposeFmt
    +syn match muttrcVarEqualsComposeFmt contained skipwhite "=" nextgroup=muttrcComposeFormatStr
    +syn keyword muttrcVarStr	contained skipwhite folder_format nextgroup=muttrcVarEqualsFolderFmt
    +syn match muttrcVarEqualsFolderFmt contained skipwhite "=" nextgroup=muttrcFolderFormatStr
    +syn keyword muttrcVarStr	contained skipwhite message_id_format nextgroup=muttrcVarEqualsMessageIdFmt
    +syn match muttrcVarEqualsMessageIdFmt contained skipwhite "=" nextgroup=muttrcMessageIdFormatStr
    +syn keyword muttrcVarStr	contained skipwhite mix_entry_format nextgroup=muttrcVarEqualsMixFmt
    +syn match muttrcVarEqualsMixFmt contained skipwhite "=" nextgroup=muttrcMixFormatStr
    +syn keyword muttrcVarStr	contained skipwhite pgp_entry_format nextgroup=muttrcVarEqualsPGPFmt
    +syn match muttrcVarEqualsPGPFmt contained skipwhite "=" nextgroup=muttrcPGPFormatStr
    +syn keyword muttrcVarStr	contained skipwhite query_format nextgroup=muttrcVarEqualsQueryFmt
    +syn match muttrcVarEqualsQueryFmt contained skipwhite "=" nextgroup=muttrcQueryFormatStr
    +syn keyword muttrcVarStr	contained skipwhite pgp_decode_command pgp_verify_command pgp_decrypt_command pgp_clearsign_command pgp_sign_command pgp_encrypt_sign_command pgp_encrypt_only_command pgp_import_command pgp_export_command pgp_verify_key_command pgp_list_secring_command pgp_list_pubring_command nextgroup=muttrcVarEqualsPGPCmdFmt
    +syn match muttrcVarEqualsPGPCmdFmt contained skipwhite "=" nextgroup=muttrcPGPCmdFormatStr
    +syn keyword muttrcVarStr	contained skipwhite ts_icon_format ts_status_format status_format nextgroup=muttrcVarEqualsStatusFmt
    +syn match muttrcVarEqualsStatusFmt contained skipwhite "=" nextgroup=muttrcStatusFormatStr
    +syn keyword muttrcVarStr	contained skipwhite pgp_getkeys_command nextgroup=muttrcVarEqualsPGPGetKeysFmt
    +syn match muttrcVarEqualsPGPGetKeysFmt contained skipwhite "=" nextgroup=muttrcPGPGetKeysFormatStr
    +syn keyword muttrcVarStr	contained skipwhite smime_decrypt_command smime_verify_command smime_verify_opaque_command smime_sign_command smime_sign_opaque_command smime_encrypt_command smime_pk7out_command smime_get_cert_command smime_get_signer_cert_command smime_import_cert_command smime_get_cert_email_command nextgroup=muttrcVarEqualsSmimeFmt
    +syn match muttrcVarEqualsSmimeFmt contained skipwhite "=" nextgroup=muttrcSmimeFormatStr
    +syn keyword muttrcVarStr	contained skipwhite date_format nextgroup=muttrcVarEqualsStrftimeFmt
    +syn match muttrcVarEqualsStrftimeFmt contained skipwhite "=" nextgroup=muttrcStrftimeFormatStr
    +
    +syn match muttrcVPrefix		contained /[?&]/ nextgroup=muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +
    +syn match muttrcVarStr		contained skipwhite 'my_[a-zA-Z0-9_]\+' nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn keyword muttrcVarStr	contained skipwhite
    +			\ abort_noattach_regexp alias_file assumed_charset attach_charset attach_save_dir attach_sep
    +			\ attribution_locale certificate_file charset config_charset content_type
    +			\ crypt_protected_headers_subject default_hook display_filter dotlock_program dsn_notify
    +		        \ dsn_return editor entropy_file envelope_from_address escape fcc_delimiter folder forw_format
    +		        \ forward_attribution_intro forward_attribution_trailer forward_format from gecos_mask
    +		        \ hdr_format header_cache header_cache_compress header_cache_pagesize history_file
    +		        \ hostname imap_authenticators imap_delim_chars imap_headers imap_idle imap_login
    +		        \ imap_oauth_refresh_command imap_pass imap_user indent_str indent_string ispell locale
    +		        \ mailcap_path mark_macro_prefix mask mbox mbox_type message_cachedir mh_seq_flagged
    +		        \ mh_seq_replied mh_seq_unseen mime_type_query_command mixmaster msg_format new_mail_command
    +		        \ pager pgp_default_key pgp_decryption_okay pgp_good_sign pgp_mime_signature_description
    +		        \ pgp_mime_signature_filename pgp_sign_as pgp_sort_keys pipe_sep pop_authenticators
    +		        \ pop_host pop_oauth_refresh_command pop_pass pop_user post_indent_str post_indent_string
    +		        \ postpone_encrypt_as postponed preconnect print_cmd print_command query_command
    +		        \ quote_regexp realname record reply_regexp send_charset send_multipart_alternative_filter
    +		        \ sendmail shell sidebar_delim
    +		        \ sidebar_delim_chars sidebar_divider_char sidebar_format sidebar_indent_string
    +		        \ sidebar_sort_method signature simple_search smileys smime_ca_location smime_certificates
    +		        \ smime_default_key smime_encrypt_with smime_keys smime_sign_as smime_sign_digest_alg
    +		        \ smtp_authenticators smtp_oauth_refresh_command smtp_pass smtp_url sort sort_alias
    +		        \ sort_aux sort_browser sort_thread_groups spam_separator spoolfile ssl_ca_certificates_file
    +		        \ ssl_ciphers ssl_client_cert ssl_verify_host_override status_chars tmpdir to_chars trash
    +		        \ ts_icon_format ts_status_format tunnel visual
    +			\ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +
    +" Present in 1.4.2.1 (pgp_create_traditional was a bool then)
    +syn keyword muttrcVarBool	contained skipwhite imap_force_ssl noimap_force_ssl invimap_force_ssl nextgroup=muttrcSetBoolAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +"syn keyword muttrcVarQuad	contained pgp_create_traditional nopgp_create_traditional invpgp_create_traditional
    +syn keyword muttrcVarStr	contained skipwhite alternates nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +
    +syn keyword muttrcMenu		contained alias attach browser compose editor index pager postpone pgp mix query generic
    +syn match muttrcMenuList "\S\+" contained contains=muttrcMenu
    +syn match muttrcMenuCommas /,/ contained
    +
    +syn keyword muttrcHooks		contained skipwhite account-hook charset-hook iconv-hook index-format-hook message-hook folder-hook mbox-hook save-hook fcc-hook fcc-save-hook send-hook send2-hook reply-hook crypt-hook
    +
    +syn keyword muttrcCommand	skipwhite
    +			\ alternative_order auto_view cd exec hdr_order iconv-hook ignore index-format-hook mailboxes
    +			\ mailto_allow mime_lookup my_hdr pgp-hook push run score sidebar_whitelist source
    +			\ unalternative_order unalternative_order unauto_view ungroup unhdr_order
    +			\ unignore unmailboxes unmailto_allow unmime_lookup unmono unmy_hdr unscore
    +			\ unsidebar_whitelist
    +syn keyword muttrcCommand	skipwhite charset-hook nextgroup=muttrcRXString
    +syn keyword muttrcCommand	skipwhite unhook nextgroup=muttrcHooks
    +
    +syn keyword muttrcCommand 	skipwhite spam nextgroup=muttrcSpamPattern
    +syn region muttrcSpamPattern	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPattern nextgroup=muttrcString,muttrcStringNL
    +syn region muttrcSpamPattern	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPattern nextgroup=muttrcString,muttrcStringNL
    +
    +syn keyword muttrcCommand 	skipwhite nospam nextgroup=muttrcNoSpamPattern
    +syn region muttrcNoSpamPattern	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPattern
    +syn region muttrcNoSpamPattern	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPattern
    +
    +syn match muttrcAttachmentsMimeType contained "[*a-z0-9_-]\+/[*a-z0-9._-]\+\s*" skipwhite nextgroup=muttrcAttachmentsMimeType
    +syn match muttrcAttachmentsFlag contained "[+-]\%([AI]\|inline\|attachment\)\s\+" skipwhite nextgroup=muttrcAttachmentsMimeType
    +syn match muttrcAttachmentsLine "^\s*\%(un\)\?attachments\s\+" skipwhite nextgroup=muttrcAttachmentsFlag
    +
    +syn match muttrcUnHighlightSpace contained "\%(\s\+\|\\$\)"
    +
    +syn keyword muttrcAsterisk	contained *
    +syn keyword muttrcListsKeyword	lists skipwhite nextgroup=muttrcGroupDef,muttrcComment
    +syn keyword muttrcListsKeyword	unlists skipwhite nextgroup=muttrcAsterisk,muttrcComment
    +
    +syn keyword muttrcSubscribeKeyword	subscribe nextgroup=muttrcGroupDef,muttrcComment
    +syn keyword muttrcSubscribeKeyword	unsubscribe nextgroup=muttrcAsterisk,muttrcComment
    +
    +syn keyword muttrcAlternateKeyword contained alternates unalternates
    +syn region muttrcAlternatesLine keepend start=+^\s*\%(un\)\?alternates\s+ skip=+\\$+ end=+$+ contains=muttrcAlternateKeyword,muttrcGroupDef,muttrcRXPat,muttrcUnHighlightSpace,muttrcComment
    +
    +" muttrcVariable includes a prefix because partial strings are considered
    +" valid.
    +syn match muttrcVariable	contained "\\\@]\+" contains=muttrcEmail
    +syn match muttrcFunction	contained "\<\%(attach\|bounce\|copy\|delete\|display\|flag\|forward\|mark\|parent\|pipe\|postpone\|print\|purge\|recall\|resend\|root\|save\|send\|tag\|undelete\)-message\>"
    +syn match muttrcFunction	contained "\<\%(delete\|next\|previous\|read\|tag\|break\|undelete\)-thread\>"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\<\%(backward\|capitalize\|downcase\|forward\|kill\|upcase\)-word\>"
    +syn match muttrcFunction	contained "\<\%(delete\|filter\|first\|last\|next\|pipe\|previous\|print\|save\|select\|tag\|undelete\)-entry\>"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\<\%(un\)\?setenv\>"
    +syn match muttrcFunction	contained "\"
    +syn match muttrcFunction	contained "\<\%(backspace\|backward-char\|bol\|bottom\|bottom-page\|buffy-cycle\|check-stats\|clear-flag\|complete\%(-query\)\?\|compose-to-sender\|copy-file\|create-alias\|detach-file\|eol\|exit\|extract-keys\|\%(imap-\)\?fetch-mail\|forget-passphrase\|forward-char\|group-reply\|help\|ispell\|jump\|limit\|list-action\|list-reply\|mail\|mail-key\|mark-as-new\|middle-page\|new-mime\|noop\|pgp-menu\|query\|query-append\|quit\|quote-char\|read-subthread\|redraw-screen\|refresh\|rename-file\|reply\|select-new\|set-flag\|shell-escape\|skip-headers\|skip-quoted\|sort\|subscribe\|sync-mailbox\|top\|top-page\|transpose-chars\|unsubscribe\|untag-pattern\|verify-key\|what-key\|write-fcc\)\>"
    +syn keyword muttrcFunction	contained imap-logout-all
    +if use_mutt_sidebar == 1
    +    syn match muttrcFunction    contained "\]\{-}>" contains=muttrcBadAction,muttrcFunction,muttrcKeyName
    +
    +syn keyword muttrcCommand	set     skipwhite nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn keyword muttrcCommand	unset   skipwhite nextgroup=muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn keyword muttrcCommand	reset   skipwhite nextgroup=muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +syn keyword muttrcCommand	toggle  skipwhite nextgroup=muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
    +
    +" First, functions that take regular expressions:
    +syn match  muttrcRXHookNot	contained /!\s*/ skipwhite nextgroup=muttrcRXHookString,muttrcRXHookStringNL
    +syn match  muttrcRXHooks	/\<\%(account\|folder\)-hook\>/ skipwhite nextgroup=muttrcRXHookNot,muttrcRXHookString,muttrcRXHookStringNL
    +
    +" Now, functions that take patterns
    +syn match muttrcPatHookNot	contained /!\s*/ skipwhite nextgroup=muttrcPattern
    +syn match muttrcPatHooks	/\<\%(mbox\|crypt\)-hook\>/ skipwhite nextgroup=muttrcPatHookNot,muttrcPattern
    +syn match muttrcPatHooks	/\<\%(message\|reply\|send\|send2\|save\|\|fcc\%(-save\)\?\)-hook\>/ skipwhite nextgroup=muttrcPatHookNot,muttrcOptPattern
    +
    +syn match muttrcIndexFormatHookName contained /\S\+/ skipwhite nextgroup=muttrcPattern,muttrcString
    +syn match muttrcIndexFormatHook /index-format-hook/ skipwhite nextgroup=muttrcIndexFormatHookName,muttrcString
    +
    +syn match muttrcBindFunction	contained /\S\+\>/ skipwhite contains=muttrcFunction
    +syn match muttrcBindFunctionNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcBindFunction,muttrcBindFunctionNL
    +syn match muttrcBindKey		contained /\S\+/ skipwhite contains=muttrcKey nextgroup=muttrcBindFunction,muttrcBindFunctionNL
    +syn match muttrcBindKeyNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcBindKey,muttrcBindKeyNL
    +syn match muttrcBindMenuList	contained /\S\+/ skipwhite contains=muttrcMenu,muttrcMenuCommas nextgroup=muttrcBindKey,muttrcBindKeyNL
    +syn match muttrcBindMenuListNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcBindMenuList,muttrcBindMenuListNL
    +syn keyword muttrcCommand	skipwhite bind nextgroup=muttrcBindMenuList,muttrcBindMenuListNL
    +
    +syn region muttrcMacroDescr	contained keepend skipwhite start=+\s*\S+ms=e skip=+\\ + end=+ \|$+me=s
    +syn region muttrcMacroDescr	contained keepend skipwhite start=+'+ms=e skip=+\\'+ end=+'+me=s
    +syn region muttrcMacroDescr	contained keepend skipwhite start=+"+ms=e skip=+\\"+ end=+"+me=s
    +syn match muttrcMacroDescrNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcMacroDescr,muttrcMacroDescrNL
    +syn region muttrcMacroBody	contained skipwhite start="\S" skip='\\ \|\\$' end=' \|$' contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcCommand,muttrcAction nextgroup=muttrcMacroDescr,muttrcMacroDescrNL
    +syn region muttrcMacroBody matchgroup=Type contained skipwhite start=+'+ms=e skip=+\\'+ end=+'\|\%(\%(\\\\\)\@]\+>/ contains=muttrcEmail nextgroup=muttrcAliasComma
    +syn match muttrcAliasEncEmailNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasEncEmail,muttrcAliasEncEmailNL
    +syn match muttrcAliasNameNoParens contained /[^<(@]\+\s\+/ nextgroup=muttrcAliasEncEmail,muttrcAliasEncEmailNL
    +syn region muttrcAliasName	contained matchgroup=Type start=/(/ end=/)/ skipwhite
    +syn match muttrcAliasNameNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasName,muttrcAliasNameNL
    +syn match muttrcAliasENNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasEmail,muttrcAliasEncEmail,muttrcAliasNameNoParens,muttrcAliasENNL
    +syn match muttrcAliasKey	contained /\s*[^- \t]\S\+/ skipwhite nextgroup=muttrcAliasEmail,muttrcAliasEncEmail,muttrcAliasNameNoParens,muttrcAliasENNL
    +syn match muttrcAliasNL		contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasGroupDef,muttrcAliasKey,muttrcAliasNL
    +syn keyword muttrcCommand	skipwhite alias nextgroup=muttrcAliasGroupDef,muttrcAliasKey,muttrcAliasNL
    +
    +syn match muttrcUnAliasKey	contained "\s*\w\+\s*" skipwhite nextgroup=muttrcUnAliasKey,muttrcUnAliasNL
    +syn match muttrcUnAliasNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcUnAliasKey,muttrcUnAliasNL
    +syn keyword muttrcCommand	skipwhite unalias nextgroup=muttrcUnAliasKey,muttrcUnAliasNL
    +
    +syn match muttrcSimplePat contained "!\?\^\?[~][ADEFgGklNOpPQRSTuUvV=$]"
    +syn match muttrcSimplePat contained "!\?\^\?[~][mnXz]\s*\%([<>-][0-9]\+[kM]\?\|[0-9]\+[kM]\?[-]\%([0-9]\+[kM]\?\)\?\)"
    +syn match muttrcSimplePat contained "!\?\^\?[~][dr]\s*\%(\%(-\?[0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)*\)\|\%(\%([0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)*\)-\%([0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)\?\)\?\)\|\%([<>=][0-9]\+[ymwd]\)\|\%(`[^`]\+`\)\|\%(\$[a-zA-Z0-9_-]\+\)\)" contains=muttrcShellString,muttrcVariable
    +syn match muttrcSimplePat contained "!\?\^\?[~][bBcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatRXContainer
    +syn match muttrcSimplePat contained "!\?\^\?[%][bBcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatString
    +syn match muttrcSimplePat contained "!\?\^\?[=][bcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatString
    +syn region muttrcSimplePat contained keepend start=+!\?\^\?[~](+ end=+)+ contains=muttrcSimplePat
    +"syn match muttrcSimplePat contained /'[^~=%][^']*/ contains=muttrcRXString
    +syn region muttrcSimplePatString contained keepend start=+"+ end=+"+ skip=+\\"+
    +syn region muttrcSimplePatString contained keepend start=+'+ end=+'+ skip=+\\'+
    +syn region muttrcSimplePatString contained keepend start=+[^ 	"']+ skip=+\\ + end=+\s+re=e-1
    +syn region muttrcSimplePatRXContainer contained keepend start=+"+ end=+"+ skip=+\\"+ contains=muttrcRXString
    +syn region muttrcSimplePatRXContainer contained keepend start=+'+ end=+'+ skip=+\\'+ contains=muttrcRXString
    +syn region muttrcSimplePatRXContainer contained keepend start=+[^ 	"']+ skip=+\\ + end=+\s+re=e-1 contains=muttrcRXString
    +syn match muttrcSimplePatMetas contained /[(|)]/
    +
    +syn match muttrcOptSimplePat contained skipwhite /[~=%!(^].*/ contains=muttrcSimplePat,muttrcSimplePatMetas
    +syn match muttrcOptSimplePat contained skipwhite /[^~=%!(^].*/ contains=muttrcRXString
    +syn region muttrcOptPattern contained matchgroup=Type keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcOptSimplePat,muttrcUnHighlightSpace nextgroup=muttrcString,muttrcStringNL
    +syn region muttrcOptPattern contained matchgroup=Type keepend skipwhite start=+'+ skip=+\\'+ end=+'+ contains=muttrcOptSimplePat,muttrcUnHighlightSpace nextgroup=muttrcString,muttrcStringNL
    +syn region muttrcOptPattern contained keepend skipwhite start=+[~](+ end=+)+ skip=+\\)+ contains=muttrcSimplePat nextgroup=muttrcString,muttrcStringNL
    +syn match muttrcOptPattern contained skipwhite /[~][A-Za-z]/ contains=muttrcSimplePat nextgroup=muttrcString,muttrcStringNL
    +syn match muttrcOptPattern contained skipwhite /[.]/ nextgroup=muttrcString,muttrcStringNL
    +" Keep muttrcPattern and muttrcOptPattern synchronized
    +syn region muttrcPattern contained matchgroup=Type keepend skipwhite start=+"+ skip=+\\"+ end=+"+ contains=muttrcSimplePat,muttrcUnHighlightSpace,muttrcSimplePatMetas
    +syn region muttrcPattern contained matchgroup=Type keepend skipwhite start=+'+ skip=+\\'+ end=+'+ contains=muttrcSimplePat,muttrcUnHighlightSpace,muttrcSimplePatMetas
    +syn region muttrcPattern contained keepend skipwhite start=+[~](+ end=+)+ skip=+\\)+ contains=muttrcSimplePat
    +syn region muttrcPattern contained keepend skipwhite start=+[~][<>](+ end=+)+ skip=+\\)+ contains=muttrcSimplePat
    +syn match muttrcPattern contained skipwhite /[~][A-Za-z]/ contains=muttrcSimplePat
    +syn match muttrcPattern contained skipwhite /[.]/
    +syn region muttrcPatternInner contained keepend start=+"[~=%!(^]+ms=s+1 skip=+\\"+ end=+"+me=e-1 contains=muttrcSimplePat,muttrcUnHighlightSpace,muttrcSimplePatMetas
    +syn region muttrcPatternInner contained keepend start=+'[~=%!(^]+ms=s+1 skip=+\\'+ end=+'+me=e-1 contains=muttrcSimplePat,muttrcUnHighlightSpace,muttrcSimplePatMetas
    +
    +" Colour definitions takes object, foreground and background arguments (regexps excluded).
    +syn match muttrcColorMatchCount	contained "[0-9]\+"
    +syn match muttrcColorMatchCountNL contained skipwhite skipnl "\s*\\$" nextgroup=muttrcColorMatchCount,muttrcColorMatchCountNL
    +syn region muttrcColorRXPat	contained start=+\s*'+ skip=+\\'+ end=+'\s*+ keepend skipwhite contains=muttrcRXString2 nextgroup=muttrcColorMatchCount,muttrcColorMatchCountNL
    +syn region muttrcColorRXPat	contained start=+\s*"+ skip=+\\"+ end=+"\s*+ keepend skipwhite contains=muttrcRXString2 nextgroup=muttrcColorMatchCount,muttrcColorMatchCountNL
    +syn keyword muttrcColorField	skipwhite contained
    +			\ attachment body bold error hdrdefault header index indicator markers message
    +			\ normal prompt quoted search sidebar-divider sidebar-flagged sidebar-highlight
    +			\ sidebar-indicator sidebar-new sidebar-spoolfile signature status tilde tree
    +			\ underline
    +syn match   muttrcColorField	contained "\"
    +if use_mutt_sidebar == 1
    +    syn keyword muttrcColorField contained sidebar_new
    +endif
    +syn keyword muttrcColor	contained black blue cyan default green magenta red white yellow
    +syn keyword muttrcColor	contained brightblack brightblue brightcyan brightdefault brightgreen brightmagenta brightred brightwhite brightyellow
    +syn match   muttrcColor	contained "\<\%(bright\)\=color\d\{1,3}\>"
    +" Now for the structure of the color line
    +syn match muttrcColorRXNL	contained skipnl "\s*\\$" nextgroup=muttrcColorRXPat,muttrcColorRXNL
    +syn match muttrcColorBG 	contained /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorRXPat,muttrcColorRXNL
    +syn match muttrcColorBGNL	contained skipnl "\s*\\$" nextgroup=muttrcColorBG,muttrcColorBGNL
    +syn match muttrcColorFG 	contained /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorBG,muttrcColorBGNL
    +syn match muttrcColorFGNL	contained skipnl "\s*\\$" nextgroup=muttrcColorFG,muttrcColorFGNL
    +syn match muttrcColorContext 	contained /\s*[$]\?\w\+/ contains=muttrcColorField,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorFG,muttrcColorFGNL
    +syn match muttrcColorNL 	contained skipnl "\s*\\$" nextgroup=muttrcColorContext,muttrcColorNL
    +syn match muttrcColorKeyword	contained /^\s*color\s\+/ nextgroup=muttrcColorContext,muttrcColorNL
    +syn region muttrcColorLine keepend start=/^\s*color\s\+\%(index\|header\)\@!/ skip=+\\$+ end=+$+ contains=muttrcColorKeyword,muttrcComment,muttrcUnHighlightSpace
    +" Now for the structure of the color index line
    +syn match muttrcPatternNL	contained skipnl "\s*\\$" nextgroup=muttrcPattern,muttrcPatternNL
    +syn match muttrcColorBGI	contained /\s*[$]\?\w\+\s*/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcPattern,muttrcPatternNL
    +syn match muttrcColorBGNLI	contained skipnl "\s*\\$" nextgroup=muttrcColorBGI,muttrcColorBGNLI
    +syn match muttrcColorFGI	contained /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorBGI,muttrcColorBGNLI
    +syn match muttrcColorFGNLI	contained skipnl "\s*\\$" nextgroup=muttrcColorFGI,muttrcColorFGNLI
    +syn match muttrcColorContextI	contained /\s*\/ contains=muttrcUnHighlightSpace nextgroup=muttrcColorFGI,muttrcColorFGNLI
    +syn match muttrcColorNLI	contained skipnl "\s*\\$" nextgroup=muttrcColorContextI,muttrcColorNLI
    +syn match muttrcColorKeywordI	contained skipwhite /\/ nextgroup=muttrcColorContextI,muttrcColorNLI
    +syn region muttrcColorLine keepend skipwhite start=/\/ skip=+\\$+ end=+$+ contains=muttrcColorKeywordI,muttrcComment,muttrcUnHighlightSpace
    +" Now for the structure of the color header line
    +syn match muttrcRXPatternNL	contained skipnl "\s*\\$" nextgroup=muttrcRXString,muttrcRXPatternNL
    +syn match muttrcColorBGH	contained /\s*[$]\?\w\+\s*/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcRXString,muttrcRXPatternNL
    +syn match muttrcColorBGNLH	contained skipnl "\s*\\$" nextgroup=muttrcColorBGH,muttrcColorBGNLH
    +syn match muttrcColorFGH	contained /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorBGH,muttrcColorBGNLH
    +syn match muttrcColorFGNLH	contained skipnl "\s*\\$" nextgroup=muttrcColorFGH,muttrcColorFGNLH
    +syn match muttrcColorContextH	contained /\s*\/ contains=muttrcUnHighlightSpace nextgroup=muttrcColorFGH,muttrcColorFGNLH
    +syn match muttrcColorNLH	contained skipnl "\s*\\$" nextgroup=muttrcColorContextH,muttrcColorNLH
    +syn match muttrcColorKeywordH	contained skipwhite /\/ nextgroup=muttrcColorContextH,muttrcColorNLH
    +syn region muttrcColorLine keepend skipwhite start=/\/ skip=+\\$+ end=+$+ contains=muttrcColorKeywordH,muttrcComment,muttrcUnHighlightSpace
    +" And now color's brother:
    +syn region muttrcUnColorPatterns contained skipwhite start=+\s*'+ end=+'+ skip=+\\'+ contains=muttrcPattern nextgroup=muttrcUnColorPatterns,muttrcUnColorPatNL
    +syn region muttrcUnColorPatterns contained skipwhite start=+\s*"+ end=+"+ skip=+\\"+ contains=muttrcPattern nextgroup=muttrcUnColorPatterns,muttrcUnColorPatNL
    +syn match muttrcUnColorPatterns contained skipwhite /\s*[^'"\s]\S\*/ contains=muttrcPattern nextgroup=muttrcUnColorPatterns,muttrcUnColorPatNL
    +syn match muttrcUnColorPatNL	contained skipwhite skipnl /\s*\\$/ nextgroup=muttrcUnColorPatterns,muttrcUnColorPatNL
    +syn match muttrcUnColorAll	contained skipwhite /[*]/
    +syn match muttrcUnColorAPNL	contained skipwhite skipnl /\s*\\$/ nextgroup=muttrcUnColorPatterns,muttrcUnColorAll,muttrcUnColorAPNL
    +syn match muttrcUnColorIndex	contained skipwhite /\s*index\s\+/ nextgroup=muttrcUnColorPatterns,muttrcUnColorAll,muttrcUnColorAPNL
    +syn match muttrcUnColorIndexNL	contained skipwhite skipnl /\s*\\$/ nextgroup=muttrcUnColorIndex,muttrcUnColorIndexNL
    +syn match muttrcUnColorKeyword	contained skipwhite /^\s*uncolor\s\+/ nextgroup=muttrcUnColorIndex,muttrcUnColorIndexNL
    +syn region muttrcUnColorLine keepend start=+^\s*uncolor\s+ skip=+\\$+ end=+$+ contains=muttrcUnColorKeyword,muttrcComment,muttrcUnHighlightSpace
    +
    +" Mono are almost like color (ojects inherited from color)
    +syn keyword muttrcMonoAttrib	contained bold none normal reverse standout underline
    +syn keyword muttrcMono		contained mono		skipwhite nextgroup=muttrcColorField
    +syn match   muttrcMonoLine	"^\s*mono\s\+\S\+"	skipwhite nextgroup=muttrcMonoAttrib contains=muttrcMono
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link muttrcComment		Comment
    +hi def link muttrcEscape		SpecialChar
    +hi def link muttrcRXChars		SpecialChar
    +hi def link muttrcString		String
    +hi def link muttrcRXString		String
    +hi def link muttrcRXString2	String
    +hi def link muttrcSpecial		Special
    +hi def link muttrcHooks		Type
    +hi def link muttrcGroupFlag	Type
    +hi def link muttrcGroupDef		Macro
    +hi def link muttrcAddrDef		muttrcGroupFlag
    +hi def link muttrcRXDef		muttrcGroupFlag
    +hi def link muttrcRXPat		String
    +hi def link muttrcAliasGroupName	Macro
    +hi def link muttrcAliasKey	        Identifier
    +hi def link muttrcUnAliasKey	Identifier
    +hi def link muttrcAliasEncEmail	Identifier
    +hi def link muttrcAliasParens	Type
    +hi def link muttrcSetNumAssignment	Number
    +hi def link muttrcSetBoolAssignment	Boolean
    +hi def link muttrcSetQuadAssignment	Boolean
    +hi def link muttrcSetStrAssignment	String
    +hi def link muttrcEmail		Special
    +hi def link muttrcVariableInner	Special
    +hi def link muttrcEscapedVariable	String
    +hi def link muttrcHeader		Type
    +hi def link muttrcKeySpecial	SpecialChar
    +hi def link muttrcKey		Type
    +hi def link muttrcKeyName		SpecialChar
    +hi def link muttrcVarBool		Identifier
    +hi def link muttrcVarQuad		Identifier
    +hi def link muttrcVarNum		Identifier
    +hi def link muttrcVarStr		Identifier
    +hi def link muttrcMenu		Identifier
    +hi def link muttrcCommand		Keyword
    +hi def link muttrcMacroDescr	String
    +hi def link muttrcAction		Macro
    +hi def link muttrcBadAction	Error
    +hi def link muttrcBindFunction	Error
    +hi def link muttrcBindMenuList	Error
    +hi def link muttrcFunction		Macro
    +hi def link muttrcGroupKeyword	muttrcCommand
    +hi def link muttrcGroupLine	Error
    +hi def link muttrcSubscribeKeyword	muttrcCommand
    +hi def link muttrcSubscribeLine	Error
    +hi def link muttrcListsKeyword	muttrcCommand
    +hi def link muttrcListsLine	Error
    +hi def link muttrcAlternateKeyword	muttrcCommand
    +hi def link muttrcAlternatesLine	Error
    +hi def link muttrcAttachmentsLine	muttrcCommand
    +hi def link muttrcAttachmentsFlag	Type
    +hi def link muttrcAttachmentsMimeType	String
    +hi def link muttrcColorLine	Error
    +hi def link muttrcColorContext	Error
    +hi def link muttrcColorContextI	Identifier
    +hi def link muttrcColorContextH	Identifier
    +hi def link muttrcColorKeyword	muttrcCommand
    +hi def link muttrcColorKeywordI	muttrcColorKeyword
    +hi def link muttrcColorKeywordH	muttrcColorKeyword
    +hi def link muttrcColorField	Identifier
    +hi def link muttrcColor		Type
    +hi def link muttrcColorFG		Error
    +hi def link muttrcColorFGI		Error
    +hi def link muttrcColorFGH		Error
    +hi def link muttrcColorBG		Error
    +hi def link muttrcColorBGI		Error
    +hi def link muttrcColorBGH		Error
    +hi def link muttrcMonoAttrib	muttrcColor
    +hi def link muttrcMono		muttrcCommand
    +hi def link muttrcSimplePat	Identifier
    +hi def link muttrcSimplePatString	Macro
    +hi def link muttrcSimplePatMetas	Special
    +hi def link muttrcPattern		Error
    +hi def link muttrcUnColorLine	Error
    +hi def link muttrcUnColorKeyword	muttrcCommand
    +hi def link muttrcUnColorIndex	Identifier
    +hi def link muttrcShellString	muttrcEscape
    +hi def link muttrcRXHooks		muttrcCommand
    +hi def link muttrcRXHookNot	Type
    +hi def link muttrcPatHooks		muttrcCommand
    +hi def link muttrcIndexFormatHookName	muttrcCommand
    +hi def link muttrcIndexFormatHook	 muttrcCommand
    +hi def link muttrcPatHookNot	Type
    +hi def link muttrcFormatConditionals2 Type
    +hi def link muttrcIndexFormatStr	muttrcString
    +hi def link muttrcIndexFormatEscapes muttrcEscape
    +hi def link muttrcIndexFormatConditionals muttrcFormatConditionals2
    +hi def link muttrcAliasFormatStr	muttrcString
    +hi def link muttrcAliasFormatEscapes muttrcEscape
    +hi def link muttrcAttachFormatStr	muttrcString
    +hi def link muttrcAttachFormatEscapes muttrcEscape
    +hi def link muttrcAttachFormatConditionals muttrcFormatConditionals2
    +hi def link muttrcBackgroundFormatStr	muttrcString
    +hi def link muttrcComposeFormatStr	muttrcString
    +hi def link muttrcComposeFormatEscapes muttrcEscape
    +hi def link muttrcFolderFormatStr	muttrcString
    +hi def link muttrcFolderFormatEscapes muttrcEscape
    +hi def link muttrcFolderFormatConditionals muttrcFormatConditionals2
    +hi def link muttrcMessageIdFormatStr	muttrcString
    +hi def link muttrcMixFormatStr	muttrcString
    +hi def link muttrcMixFormatEscapes muttrcEscape
    +hi def link muttrcMixFormatConditionals muttrcFormatConditionals2
    +hi def link muttrcPGPFormatStr	muttrcString
    +hi def link muttrcPGPFormatEscapes muttrcEscape
    +hi def link muttrcPGPFormatConditionals muttrcFormatConditionals2
    +hi def link muttrcPGPCmdFormatStr	muttrcString
    +hi def link muttrcPGPCmdFormatEscapes muttrcEscape
    +hi def link muttrcPGPCmdFormatConditionals muttrcFormatConditionals2
    +hi def link muttrcStatusFormatStr	muttrcString
    +hi def link muttrcStatusFormatEscapes muttrcEscape
    +hi def link muttrcStatusFormatConditionals muttrcFormatConditionals2
    +hi def link muttrcPGPGetKeysFormatStr	muttrcString
    +hi def link muttrcPGPGetKeysFormatEscapes muttrcEscape
    +hi def link muttrcSmimeFormatStr	muttrcString
    +hi def link muttrcSmimeFormatEscapes muttrcEscape
    +hi def link muttrcSmimeFormatConditionals muttrcFormatConditionals2
    +hi def link muttrcTimeEscapes	muttrcEscape
    +hi def link muttrcPGPTimeEscapes	muttrcEscape
    +hi def link muttrcStrftimeEscapes	Type
    +hi def link muttrcStrftimeFormatStr muttrcString
    +hi def link muttrcBindMenuListNL	SpecialChar
    +hi def link muttrcMacroDescrNL	SpecialChar
    +hi def link muttrcMacroBodyNL	SpecialChar
    +hi def link muttrcMacroKeyNL	SpecialChar
    +hi def link muttrcMacroMenuListNL	SpecialChar
    +hi def link muttrcColorMatchCountNL SpecialChar
    +hi def link muttrcColorNL		SpecialChar
    +hi def link muttrcColorRXNL	SpecialChar
    +hi def link muttrcColorBGNL	SpecialChar
    +hi def link muttrcColorFGNL	SpecialChar
    +hi def link muttrcAliasNameNL	SpecialChar
    +hi def link muttrcAliasENNL	SpecialChar
    +hi def link muttrcAliasNL		SpecialChar
    +hi def link muttrcUnAliasNL	SpecialChar
    +hi def link muttrcAliasGroupDefNL	SpecialChar
    +hi def link muttrcAliasEncEmailNL	SpecialChar
    +hi def link muttrcPatternNL	SpecialChar
    +hi def link muttrcUnColorPatNL	SpecialChar
    +hi def link muttrcUnColorAPNL	SpecialChar
    +hi def link muttrcUnColorIndexNL	SpecialChar
    +hi def link muttrcStringNL		SpecialChar
    +
    +
    +let b:current_syntax = "muttrc"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +"EOF	vim: ts=8 noet tw=100 sw=8 sts=0 ft=vim
    diff --git a/.config/vim/syntax/mysql.vim b/.config/vim/syntax/mysql.vim
    new file mode 100644
    index 0000000..49b5331
    --- /dev/null
    +++ b/.config/vim/syntax/mysql.vim
    @@ -0,0 +1,312 @@
    +" Vim syntax file
    +" Language:     mysql
    +" Maintainer:   Kenneth J. Pronovici 
    +" Filenames:    *.mysql
    +" URL:          ftp://cedar-solutions.com/software/mysql.vim (https://github.com/pronovic/vim-syntax/blob/master/mysql.vim)
    +" Note:         The definitions below are taken from the mysql user manual as of April 2002, for version 3.23 and have been updated
    +"               in July 2024 with the docs for version 8.4
    +" Last Change:  2016 Apr 11
    +"  2024-07-21:  update MySQL functions as of MySQL 8.4 (by Vim Project)
    +" 
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Always ignore case
    +syn case ignore
    +
    +" General keywords which don't fall into other categories
    +syn keyword mysqlKeyword         action add after aggregate all alter as asc auto_increment avg_row_length
    +syn keyword mysqlKeyword         both by
    +syn keyword mysqlKeyword         cascade change character check checksum column columns comment constraint create cross
    +syn keyword mysqlKeyword         current_date current_time current_timestamp
    +syn keyword mysqlKeyword         data database databases day day_hour day_minute day_second
    +syn keyword mysqlKeyword         default delayed delay_key_write delete desc describe distinct distinctrow drop
    +syn keyword mysqlKeyword         enclosed escape escaped explain
    +syn keyword mysqlKeyword         fields file first flush for foreign from full function
    +syn keyword mysqlKeyword         global grant grants group
    +syn keyword mysqlKeyword         having heap high_priority hosts hour hour_minute hour_second
    +syn keyword mysqlKeyword         identified ignore index infile inner insert insert_id into isam
    +syn keyword mysqlKeyword         join
    +syn keyword mysqlKeyword         key keys kill last_insert_id leading left limit lines load local lock logs long
    +syn keyword mysqlKeyword         low_priority
    +syn keyword mysqlKeyword         match max_rows middleint min_rows minute minute_second modify month myisam
    +syn keyword mysqlKeyword         natural no
    +syn keyword mysqlKeyword         on optimize option optionally order outer outfile
    +syn keyword mysqlKeyword         pack_keys partial password primary privileges procedure process processlist
    +syn keyword mysqlKeyword         read references reload rename replace restrict returns revoke right row rows
    +syn keyword mysqlKeyword         second select show shutdown soname sql_big_result sql_big_selects sql_big_tables sql_log_off
    +syn keyword mysqlKeyword         sql_log_update sql_low_priority_updates sql_select_limit sql_small_result sql_warnings starting
    +syn keyword mysqlKeyword         status straight_join string
    +syn keyword mysqlKeyword         table tables temporary terminated to trailing type
    +syn keyword mysqlKeyword         unique unlock unsigned update usage use using
    +syn keyword mysqlKeyword         values varbinary variables varying
    +syn keyword mysqlKeyword         where with write
    +syn keyword mysqlKeyword         year_month
    +syn keyword mysqlKeyword         zerofill
    +
    +" Special values
    +syn keyword mysqlSpecial         false null true
    +
    +" Strings (single- and double-quote)
    +syn region mysqlString           start=+"+  skip=+\\\\\|\\"+  end=+"+
    +syn region mysqlString           start=+'+  skip=+\\\\\|\\'+  end=+'+
    +
    +" Numbers and hexidecimal values
    +syn match mysqlNumber            "-\=\<[0-9]*\>"
    +syn match mysqlNumber            "-\=\<[0-9]*\.[0-9]*\>"
    +syn match mysqlNumber            "-\=\<[0-9][0-9]*e[+-]\=[0-9]*\>"
    +syn match mysqlNumber            "-\=\<[0-9]*\.[0-9]*e[+-]\=[0-9]*\>"
    +syn match mysqlNumber            "\<0x[abcdefABCDEF0-9]*\>"
    +
    +" User variables
    +syn match mysqlVariable          "@\a*[A-Za-z0-9]*\([._]*[A-Za-z0-9]\)*"
    +
    +" Escaped column names
    +syn match mysqlEscaped           "`[^`]*`"
    +
    +" Comments (c-style, mysql-style and modified sql-style)
    +syn region mysqlComment          start="/\*"  end="\*/"
    +syn match mysqlComment           "#.*"
    +syn match mysqlComment           "--\_s.*"
    +syn sync ccomment mysqlComment
    +
    +" Column types
    +"
    +" This gets a bit ugly.  There are two different problems we have to
    +" deal with.
    +"
    +" The first problem is that some keywords like 'float' can be used
    +" both with and without specifiers, i.e. 'float', 'float(1)' and
    +" 'float(@var)' are all valid.  We have to account for this and we
    +" also have to make sure that garbage like floatn or float_(1) is not
    +" highlighted.
    +"
    +" The second problem is that some of these keywords are included in
    +" function names.  For instance, year() is part of the name of the
    +" dayofyear() function, and the dec keyword (no parenthesis) is part of
    +" the name of the decode() function.
    +
    +syn keyword mysqlType            tinyint smallint mediumint int integer bigint
    +syn keyword mysqlType            date datetime time bit bool
    +syn keyword mysqlType            tinytext mediumtext longtext text
    +syn keyword mysqlType            tinyblob mediumblob longblob blob
    +syn region mysqlType             start="float\W" end="."me=s-1
    +syn region mysqlType             start="float$" end="."me=s-1
    +syn region mysqlType             start="\
    +" Version:     1.0
    +" Source:      https://github.com/pr3d4t0r/n1ql-vim-syntax
    +"
    +" License:     Vim is Charityware.  n1ql.vim syntax is Charityware.
    +"              (c) Copyright 2017 by Eugene Ciurana / pr3d4t0r.  Licensed
    +"              under the standard VIM LICENSE - Vim command :help uganda.txt
    +"              for details.
    +"
    +" Questions, comments:  
    +"                       https://ciurana.eu/pgp, https://keybase.io/pr3d4t0r
    +"
    +" vim: set fileencoding=utf-8:
    +
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +
    +syn case ignore
    +
    +syn keyword n1qlSpecial DATASTORES
    +syn keyword n1qlSpecial DUAL
    +syn keyword n1qlSpecial FALSE
    +syn keyword n1qlSpecial INDEXES
    +syn keyword n1qlSpecial KEYSPACES
    +syn keyword n1qlSpecial MISSING
    +syn keyword n1qlSpecial NAMESPACES
    +syn keyword n1qlSpecial NULL
    +syn keyword n1qlSpecial TRUE
    +
    +
    +"
    +" *** keywords ***
    +"
    +syn keyword n1qlKeyword ALL
    +syn keyword n1qlKeyword ANY
    +syn keyword n1qlKeyword ASC
    +syn keyword n1qlKeyword BEGIN
    +syn keyword n1qlKeyword BETWEEN
    +syn keyword n1qlKeyword BREAK
    +syn keyword n1qlKeyword BUCKET
    +syn keyword n1qlKeyword CALL
    +syn keyword n1qlKeyword CASE
    +syn keyword n1qlKeyword CAST
    +syn keyword n1qlKeyword CLUSTER
    +syn keyword n1qlKeyword COLLATE
    +syn keyword n1qlKeyword COLLECTION
    +syn keyword n1qlKeyword CONNECT
    +syn keyword n1qlKeyword CONTINUE
    +syn keyword n1qlKeyword CORRELATE
    +syn keyword n1qlKeyword COVER
    +syn keyword n1qlKeyword DATABASE
    +syn keyword n1qlKeyword DATASET
    +syn keyword n1qlKeyword DATASTORE
    +syn keyword n1qlKeyword DECLARE
    +syn keyword n1qlKeyword DECREMENT
    +syn keyword n1qlKeyword DERIVED
    +syn keyword n1qlKeyword DESC
    +syn keyword n1qlKeyword DESCRIBE
    +syn keyword n1qlKeyword DO
    +syn keyword n1qlKeyword EACH
    +syn keyword n1qlKeyword ELEMENT
    +syn keyword n1qlKeyword ELSE
    +syn keyword n1qlKeyword END
    +syn keyword n1qlKeyword EVERY
    +syn keyword n1qlKeyword EXCLUDE
    +syn keyword n1qlKeyword EXISTS
    +syn keyword n1qlKeyword FETCH
    +syn keyword n1qlKeyword FIRST
    +syn keyword n1qlKeyword FLATTEN
    +syn keyword n1qlKeyword FOR
    +syn keyword n1qlKeyword FORCE
    +syn keyword n1qlKeyword FROM
    +syn keyword n1qlKeyword FUNCTION
    +syn keyword n1qlKeyword GROUP
    +syn keyword n1qlKeyword GSI
    +syn keyword n1qlKeyword HAVING
    +syn keyword n1qlKeyword IF
    +syn keyword n1qlKeyword IGNORE
    +syn keyword n1qlKeyword INCLUDE
    +syn keyword n1qlKeyword INCREMENT
    +syn keyword n1qlKeyword INDEX
    +syn keyword n1qlKeyword INITIAL
    +syn keyword n1qlKeyword INLINE
    +syn keyword n1qlKeyword INNER
    +syn keyword n1qlKeyword INTO
    +syn keyword n1qlKeyword KEY
    +syn keyword n1qlKeyword KEYS
    +syn keyword n1qlKeyword KEYSPACE
    +syn keyword n1qlKeyword KNOWN
    +syn keyword n1qlKeyword LAST
    +syn keyword n1qlKeyword LET
    +syn keyword n1qlKeyword LETTING
    +syn keyword n1qlKeyword LIMIT
    +syn keyword n1qlKeyword LOOP
    +syn keyword n1qlKeyword LSM
    +syn keyword n1qlKeyword MAP
    +syn keyword n1qlKeyword MAPPING
    +syn keyword n1qlKeyword MATCHED
    +syn keyword n1qlKeyword MATERIALIZED
    +syn keyword n1qlKeyword MERGE
    +syn keyword n1qlKeyword NAMESPACE
    +syn keyword n1qlKeyword NEST
    +syn keyword n1qlKeyword OPTION
    +syn keyword n1qlKeyword ORDER
    +syn keyword n1qlKeyword OUTER
    +syn keyword n1qlKeyword OVER
    +syn keyword n1qlKeyword PARSE
    +syn keyword n1qlKeyword PARTITION
    +syn keyword n1qlKeyword PASSWORD
    +syn keyword n1qlKeyword PATH
    +syn keyword n1qlKeyword POOL
    +syn keyword n1qlKeyword PRIMARY
    +syn keyword n1qlKeyword PRIVATE
    +syn keyword n1qlKeyword PRIVILEGE
    +syn keyword n1qlKeyword PROCEDURE
    +syn keyword n1qlKeyword PUBLIC
    +syn keyword n1qlKeyword REALM
    +syn keyword n1qlKeyword REDUCE
    +syn keyword n1qlKeyword RETURN
    +syn keyword n1qlKeyword RETURNING
    +syn keyword n1qlKeyword ROLE
    +syn keyword n1qlKeyword SATISFIES
    +syn keyword n1qlKeyword SCHEMA
    +syn keyword n1qlKeyword SELF
    +syn keyword n1qlKeyword SEMI
    +syn keyword n1qlKeyword SHOW
    +syn keyword n1qlKeyword START
    +syn keyword n1qlKeyword STATISTICS
    +syn keyword n1qlKeyword SYSTEM
    +syn keyword n1qlKeyword THEN
    +syn keyword n1qlKeyword TRANSACTION
    +syn keyword n1qlKeyword TRIGGER
    +syn keyword n1qlKeyword UNDER
    +syn keyword n1qlKeyword UNKNOWN
    +syn keyword n1qlKeyword UNSET
    +syn keyword n1qlKeyword USE
    +syn keyword n1qlKeyword USER
    +syn keyword n1qlKeyword USING
    +syn keyword n1qlKeyword VALIDATE
    +syn keyword n1qlKeyword VALUE
    +syn keyword n1qlKeyword VALUED
    +syn keyword n1qlKeyword VALUES
    +syn keyword n1qlKeyword VIEW
    +syn keyword n1qlKeyword WHEN
    +syn keyword n1qlKeyword WHERE
    +syn keyword n1qlKeyword WHILE
    +syn keyword n1qlKeyword WITHIN
    +syn keyword n1qlKeyword WORK
    +
    +
    +"
    +" *** functions ***
    +"
    +syn keyword n1qlOperator ABS
    +syn keyword n1qlOperator ACOS
    +syn keyword n1qlOperator ARRAY_AGG
    +syn keyword n1qlOperator ARRAY_APPEND
    +syn keyword n1qlOperator ARRAY_AVG
    +syn keyword n1qlOperator ARRAY_CONCAT
    +syn keyword n1qlOperator ARRAY_CONTAINS
    +syn keyword n1qlOperator ARRAY_COUNT
    +syn keyword n1qlOperator ARRAY_DISTINCT
    +syn keyword n1qlOperator ARRAY_FLATTEN
    +syn keyword n1qlOperator ARRAY_IFNULL
    +syn keyword n1qlOperator ARRAY_INSERT
    +syn keyword n1qlOperator ARRAY_INTERSECT
    +syn keyword n1qlOperator ARRAY_LENGTH
    +syn keyword n1qlOperator ARRAY_MAX
    +syn keyword n1qlOperator ARRAY_MIN
    +syn keyword n1qlOperator ARRAY_POSITION
    +syn keyword n1qlOperator ARRAY_PREPEND
    +syn keyword n1qlOperator ARRAY_PUT
    +syn keyword n1qlOperator ARRAY_RANGE
    +syn keyword n1qlOperator ARRAY_REMOVE
    +syn keyword n1qlOperator ARRAY_REPEAT
    +syn keyword n1qlOperator ARRAY_REPLACE
    +syn keyword n1qlOperator ARRAY_REVERSE
    +syn keyword n1qlOperator ARRAY_SORT
    +syn keyword n1qlOperator ARRAY_START
    +syn keyword n1qlOperator ARRAY_SUM
    +syn keyword n1qlOperator ARRAY_SYMDIFF
    +syn keyword n1qlOperator ARRAY_UNION
    +syn keyword n1qlOperator ASIN
    +syn keyword n1qlOperator ATAN
    +syn keyword n1qlOperator ATAN2
    +syn keyword n1qlOperator AVG
    +syn keyword n1qlOperator BASE64
    +syn keyword n1qlOperator BASE64_DECODE
    +syn keyword n1qlOperator BASE64_ENCODE
    +syn keyword n1qlOperator CEIL
    +syn keyword n1qlOperator CLOCK_LOCAL
    +syn keyword n1qlOperator CLOCK_STR
    +syn keyword n1qlOperator CLOCK_TZ
    +syn keyword n1qlOperator CLOCK_UTC
    +syn keyword n1qlOperator CLOCL_MILLIS
    +syn keyword n1qlOperator CONTAINS
    +syn keyword n1qlOperator COS
    +syn keyword n1qlOperator COUNT
    +syn keyword n1qlOperator DATE_ADD_MILLIS
    +syn keyword n1qlOperator DATE_ADD_STR
    +syn keyword n1qlOperator DATE_DIFF_MILLIS
    +syn keyword n1qlOperator DATE_DIFF_STR
    +syn keyword n1qlOperator DATE_FORMAT_STR
    +syn keyword n1qlOperator DATE_PART_MILLIS
    +syn keyword n1qlOperator DATE_PART_STR
    +syn keyword n1qlOperator DATE_RANGE_MILLIS
    +syn keyword n1qlOperator DATE_RANGE_STR
    +syn keyword n1qlOperator DATE_TRUC_STR
    +syn keyword n1qlOperator DATE_TRUNC_MILLIS
    +syn keyword n1qlOperator DECODE_JSON
    +syn keyword n1qlOperator DEGREES
    +syn keyword n1qlOperator DURATION_TO_STR
    +syn keyword n1qlOperator E
    +syn keyword n1qlOperator ENCODED_SIZE
    +syn keyword n1qlOperator ENCODE_JSON
    +syn keyword n1qlOperator EXP
    +syn keyword n1qlOperator FLOOR
    +syn keyword n1qlOperator GREATEST
    +syn keyword n1qlOperator IFINF
    +syn keyword n1qlOperator IFMISSING
    +syn keyword n1qlOperator IFMISSINGORNULL
    +syn keyword n1qlOperator IFNAN
    +syn keyword n1qlOperator IFNANORINF
    +syn keyword n1qlOperator IFNULL
    +syn keyword n1qlOperator INITCAP
    +syn keyword n1qlOperator ISARRAY
    +syn keyword n1qlOperator ISATOM
    +syn keyword n1qlOperator ISBOOLEAN
    +syn keyword n1qlOperator ISNUMBER
    +syn keyword n1qlOperator ISOBJECT
    +syn keyword n1qlOperator ISSTRING
    +syn keyword n1qlOperator LEAST
    +syn keyword n1qlOperator LENGTH
    +syn keyword n1qlOperator LN
    +syn keyword n1qlOperator LOG
    +syn keyword n1qlOperator LOWER
    +syn keyword n1qlOperator LTRIM
    +syn keyword n1qlOperator MAX
    +syn keyword n1qlOperator META
    +syn keyword n1qlOperator MILLIS
    +syn keyword n1qlOperator MILLIS_TO_LOCAL
    +syn keyword n1qlOperator MILLIS_TO_STR
    +syn keyword n1qlOperator MILLIS_TO_TZ
    +syn keyword n1qlOperator MILLIS_TO_UTC
    +syn keyword n1qlOperator MILLIS_TO_ZONE_NAME
    +syn keyword n1qlOperator MIN
    +syn keyword n1qlOperator MISSINGIF
    +syn keyword n1qlOperator NANIF
    +syn keyword n1qlOperator NEGINFIF
    +syn keyword n1qlOperator NOW_LOCAL
    +syn keyword n1qlOperator NOW_MILLIS
    +syn keyword n1qlOperator NOW_STR
    +syn keyword n1qlOperator NOW_TZ
    +syn keyword n1qlOperator NOW_UTC
    +syn keyword n1qlOperator NULLIF
    +syn keyword n1qlOperator OBJECT_ADD
    +syn keyword n1qlOperator OBJECT_CONCAT
    +syn keyword n1qlOperator OBJECT_INNER_PAIRS
    +syn keyword n1qlOperator OBJECT_INNER_VALUES
    +syn keyword n1qlOperator OBJECT_LENGTH
    +syn keyword n1qlOperator OBJECT_NAMES
    +syn keyword n1qlOperator OBJECT_PAIRS
    +syn keyword n1qlOperator OBJECT_PUT
    +syn keyword n1qlOperator OBJECT_REMOVE
    +syn keyword n1qlOperator OBJECT_RENAME
    +syn keyword n1qlOperator OBJECT_REPLACE
    +syn keyword n1qlOperator OBJECT_UNWRAP
    +syn keyword n1qlOperator OBJECT_VALUES
    +syn keyword n1qlOperator PI
    +syn keyword n1qlOperator POLY_LENGTH
    +syn keyword n1qlOperator POSINIF
    +syn keyword n1qlOperator POSITION
    +syn keyword n1qlOperator POWER
    +syn keyword n1qlOperator RADIANS
    +syn keyword n1qlOperator RANDOM
    +syn keyword n1qlOperator REGEXP_CONTAINS
    +syn keyword n1qlOperator REGEXP_LIKE
    +syn keyword n1qlOperator REGEXP_POSITION
    +syn keyword n1qlOperator REGEXP_REPLACE
    +syn keyword n1qlOperator REPEAT
    +syn keyword n1qlOperator REPLACE
    +syn keyword n1qlOperator REVERSE
    +syn keyword n1qlOperator ROUND
    +syn keyword n1qlOperator RTRIM
    +syn keyword n1qlOperator SIGN
    +syn keyword n1qlOperator SIN
    +syn keyword n1qlOperator SPLIT
    +syn keyword n1qlOperator SQRT
    +syn keyword n1qlOperator STR_TO_DURATION
    +syn keyword n1qlOperator STR_TO_MILLIS
    +syn keyword n1qlOperator STR_TO_TZ
    +syn keyword n1qlOperator STR_TO_UTC
    +syn keyword n1qlOperator STR_TO_ZONE_NAME
    +syn keyword n1qlOperator SUBSTR
    +syn keyword n1qlOperator SUFFIXES
    +syn keyword n1qlOperator SUM
    +syn keyword n1qlOperator TAN
    +syn keyword n1qlOperator TITLE
    +syn keyword n1qlOperator TOARRAY
    +syn keyword n1qlOperator TOATOM
    +syn keyword n1qlOperator TOBOOLEAN
    +syn keyword n1qlOperator TOKENS
    +syn keyword n1qlOperator TONUMBER
    +syn keyword n1qlOperator TOOBJECT
    +syn keyword n1qlOperator TOSTRING
    +syn keyword n1qlOperator TRIM
    +syn keyword n1qlOperator TRUNC
    +syn keyword n1qlOperator TYPE
    +syn keyword n1qlOperator UPPER
    +syn keyword n1qlOperator UUID
    +syn keyword n1qlOperator WEEKDAY_MILLIS
    +syn keyword n1qlOperator WEEKDAY_STR
    +
    +
    +"
    +" *** operators ***
    +"
    +syn keyword n1qlOperator AND
    +syn keyword n1qlOperator AS
    +syn keyword n1qlOperator BY
    +syn keyword n1qlOperator DISTINCT
    +syn keyword n1qlOperator EXCEPT
    +syn keyword n1qlOperator ILIKE
    +syn keyword n1qlOperator IN
    +syn keyword n1qlOperator INTERSECT
    +syn keyword n1qlOperator IS
    +syn keyword n1qlOperator JOIN
    +syn keyword n1qlOperator LEFT
    +syn keyword n1qlOperator LIKE
    +syn keyword n1qlOperator MINUS
    +syn keyword n1qlOperator NEST
    +syn keyword n1qlOperator NESTING
    +syn keyword n1qlOperator NOT
    +syn keyword n1qlOperator OFFSET
    +syn keyword n1qlOperator ON
    +syn keyword n1qlOperator OR
    +syn keyword n1qlOperator OUT
    +syn keyword n1qlOperator RIGHT
    +syn keyword n1qlOperator SOME
    +syn keyword n1qlOperator TO
    +syn keyword n1qlOperator UNION
    +syn keyword n1qlOperator UNIQUE
    +syn keyword n1qlOperator UNNEST
    +syn keyword n1qlOperator VIA
    +syn keyword n1qlOperator WITH
    +syn keyword n1qlOperator XOR
    +
    +
    +"
    +" *** statements ***
    +"
    +syn keyword n1qlStatement ALTER
    +syn keyword n1qlStatement ANALYZE
    +syn keyword n1qlStatement BUILD
    +syn keyword n1qlStatement COMMIT
    +syn keyword n1qlStatement CREATE
    +syn keyword n1qlStatement DELETE
    +syn keyword n1qlStatement DROP
    +syn keyword n1qlStatement EXECUTE
    +syn keyword n1qlStatement EXPLAIN
    +syn keyword n1qlStatement GRANT
    +syn keyword n1qlStatement INFER
    +syn keyword n1qlStatement INSERT
    +syn keyword n1qlStatement MERGE
    +syn keyword n1qlStatement PREPARE
    +syn keyword n1qlStatement RENAME
    +syn keyword n1qlStatement REVOKE
    +syn keyword n1qlStatement ROLLBACK
    +syn keyword n1qlStatement SELECT
    +syn keyword n1qlStatement SET
    +syn keyword n1qlStatement TRUNCATE
    +syn keyword n1qlStatement UPDATE
    +syn keyword n1qlStatement UPSERT
    +
    +
    +"
    +" *** types ***
    +"
    +syn keyword n1qlType ARRAY
    +syn keyword n1qlType BINARY
    +syn keyword n1qlType BOOLEAN
    +syn keyword n1qlType NUMBER
    +syn keyword n1qlType OBJECT
    +syn keyword n1qlType RAW
    +syn keyword n1qlType STRING
    +
    +
    +"
    +" *** strings and characters ***
    +"
    +syn region n1qlString start=+"+  skip=+\\\\\|\\"+  end=+"+
    +syn region n1qlString start=+'+  skip=+\\\\\|\\'+  end=+'+
    +syn region n1qlBucketSpec start=+`+  skip=+\\\\\|\\'+  end=+`+
    +
    +
    +"
    +" *** numbers ***
    +"
    +syn match n1qlNumber        "-\=\<\d*\.\=[0-9_]\>"
    +
    +
    +"
    +" *** comments ***
    +"
    +syn region n1qlComment start="/\*"  end="\*/" contains=n1qlTODO
    +syn match n1qlComment  "--.*$" contains=n1qlTODO
    +syn sync ccomment      n1qlComment
    +
    +
    +"
    +" *** TODO ***
    +"
    +syn keyword n1qlTODO contained TODO FIXME XXX DEBUG NOTE
    +
    +
    +"
    +" *** enable ***
    +"
    +hi def link n1qlBucketSpec Underlined
    +hi def link n1qlComment    Comment
    +hi def link n1qlKeyword    Macro
    +hi def link n1qlOperator   Function
    +hi def link n1qlSpecial    Special
    +hi def link n1qlStatement  Statement
    +hi def link n1qlString     String
    +hi def link n1qlTODO       Todo
    +hi def link n1qlType       Type
    +
    +let b:current_syntax = "n1ql"
    diff --git a/.config/vim/syntax/named.vim b/.config/vim/syntax/named.vim
    new file mode 100644
    index 0000000..292d1b2
    --- /dev/null
    +++ b/.config/vim/syntax/named.vim
    @@ -0,0 +1,229 @@
    +" Vim syntax file
    +" Language:	BIND configuration file
    +" Maintainer:	Nick Hibma 
    +" Last Change:	2019 Oct 08
    +" Filenames:	named.conf, rndc.conf
    +" Location:	http://www.van-laarhoven.org/vim/syntax/named.vim
    +"
    +" Previously maintained by glory hump  and updated by Marcin
    +" Dalecki.
    +"
    +" This file could do with a lot of improvements, so comments are welcome.
    +" Please submit the named.conf (segment) with any comments.
    +"
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn case match
    +
    +setlocal iskeyword=.,-,48-58,A-Z,a-z,_
    +
    +syn sync match namedSync grouphere NONE "^(zone|controls|acl|key)"
    +
    +let s:save_cpo = &cpo
    +set cpo-=C
    +
    +" BIND configuration file
    +
    +syn match	namedComment	"//.*"
    +syn match	namedComment	"#.*"
    +syn region	namedComment	start="/\*" end="\*/"
    +syn region	namedString	start=/"/ end=/"/ contained
    +" --- omitted trailing semicolon
    +syn match	namedError	/[^;{#]$/
    +
    +" --- top-level keywords
    +
    +syn keyword	namedInclude	include nextgroup=namedString skipwhite
    +syn keyword	namedKeyword	acl key nextgroup=namedIntIdent skipwhite
    +syn keyword	namedKeyword	server nextgroup=namedIdentifier skipwhite
    +syn keyword	namedKeyword	controls nextgroup=namedSection skipwhite
    +syn keyword	namedKeyword	trusted-keys nextgroup=namedIntSection skipwhite
    +syn keyword	namedKeyword	logging nextgroup=namedLogSection skipwhite
    +syn keyword	namedKeyword	options nextgroup=namedOptSection skipwhite
    +syn keyword	namedKeyword	zone nextgroup=namedZoneString skipwhite
    +
    +" --- Identifier: name of following { ... } Section
    +syn match	namedIdentifier	contained /\k\+/ nextgroup=namedSection skipwhite
    +" --- IntIdent: name of following IntSection
    +syn match	namedIntIdent	contained /"\=\k\+"\=/ nextgroup=namedIntSection skipwhite
    +
    +" --- Section: { ... } clause
    +syn region	namedSection	contained start=+{+ end=+};+ contains=namedSection,namedIntKeyword
    +
    +" --- IntSection: section that does not contain other sections
    +syn region	namedIntSection	contained start=+{+ end=+}+ contains=namedIntKeyword,namedError,namedComment
    +
    +" --- IntKeyword: keywords contained within `{ ... }' sections only
    +" + these keywords are contained within `key' and `acl' sections
    +syn keyword	namedIntKeyword	contained key algorithm
    +syn keyword	namedIntKeyword	contained secret nextgroup=namedString skipwhite
    +
    +" + these keywords are contained within `server' section only
    +syn keyword	namedIntKeyword	contained bogus support-ixfr nextgroup=namedBool,namedNotBool skipwhite
    +syn keyword	namedIntKeyword	contained transfers nextgroup=namedNumber,namedNotNumber skipwhite
    +syn keyword	namedIntKeyword	contained transfer-format
    +syn keyword	namedIntKeyword	contained keys nextgroup=namedIntSection skipwhite
    +
    +" + these keywords are contained within `controls' section only
    +syn keyword	namedIntKeyword	contained inet nextgroup=namedIPaddr,namedIPerror skipwhite
    +syn keyword	namedIntKeyword	contained unix nextgroup=namedString skipwhite
    +syn keyword	namedIntKeyword	contained port perm owner group nextgroup=namedNumber,namedNotNumber skipwhite
    +syn keyword	namedIntKeyword	contained allow nextgroup=namedIntSection skipwhite
    +
    +" + these keywords are contained within `update-policy' section only
    +syn keyword	namedIntKeyword	contained grant nextgroup=namedString skipwhite
    +syn keyword	namedIntKeyword	contained name self subdomain wildcard nextgroup=namedString skipwhite
    +syn keyword	namedIntKeyword	TXT A PTR NS SOA A6 CNAME MX ANY skipwhite
    +
    +" --- options
    +syn region	namedOptSection	contained start=+{+ end=+};+ contains=namedOption,namedCNOption,namedComment,namedParenError
    +
    +syn keyword	namedOption	contained version directory
    +\		nextgroup=namedString skipwhite
    +syn keyword	namedOption	contained named-xfer dump-file pid-file
    +\		nextgroup=namedString skipwhite
    +syn keyword	namedOption	contained mem-statistics-file statistics-file
    +\		nextgroup=namedString skipwhite
    +syn keyword	namedOption	contained auth-nxdomain deallocate-on-exit
    +\		nextgroup=namedBool,namedNotBool skipwhite
    +syn keyword	namedOption	contained dialup fake-iquery fetch-glue
    +\		nextgroup=namedBool,namedNotBool skipwhite
    +syn keyword	namedOption	contained has-old-clients host-statistics
    +\		nextgroup=namedBool,namedNotBool skipwhite
    +syn keyword	namedOption	contained maintain-ixfr-base multiple-cnames
    +\		nextgroup=namedBool,namedNotBool skipwhite
    +syn keyword	namedOption	contained notify recursion rfc2308-type1
    +\		nextgroup=namedBool,namedNotBool skipwhite
    +syn keyword	namedOption	contained use-id-pool treat-cr-as-space
    +\		nextgroup=namedBool,namedNotBool skipwhite
    +syn keyword	namedOption	contained also-notify forwarders
    +\		nextgroup=namedIPlist skipwhite
    +syn keyword	namedOption	contained forward check-names
    +syn keyword	namedOption	contained allow-query allow-transfer allow-recursion
    +\		nextgroup=namedAML skipwhite
    +syn keyword	namedOption	contained blackhole listen-on
    +\		nextgroup=namedIntSection skipwhite
    +syn keyword	namedOption	contained lame-ttl max-transfer-time-in
    +\		nextgroup=namedNumber,namedNotNumber skipwhite
    +syn keyword	namedOption	contained max-ncache-ttl min-roots
    +\		nextgroup=namedNumber,namedNotNumber skipwhite
    +syn keyword	namedOption	contained serial-queries transfers-in
    +\		nextgroup=namedNumber,namedNotNumber skipwhite
    +syn keyword	namedOption	contained transfers-out transfers-per-ns
    +syn keyword	namedOption	contained transfer-format
    +syn keyword	namedOption	contained transfer-source
    +\		nextgroup=namedIPaddr,namedIPerror skipwhite
    +syn keyword	namedOption	contained max-ixfr-log-size
    +\		nextgroup=namedNumber,namedNotNumber skipwhite
    +syn keyword	namedOption	contained coresize datasize files stacksize
    +syn keyword	namedOption	contained cleaning-interval interface-interval statistics-interval heartbeat-interval
    +\		nextgroup=namedNumber,namedNotNumber skipwhite
    +syn keyword	namedOption	contained topology sortlist rrset-order
    +\		nextgroup=namedIntSection skipwhite
    +
    +syn match	namedOption	contained /\/ nextgroup=namedSpareDot
    +syn match	namedDomain	contained /"\."/ms=s+1,me=e-1
    +syn match	namedSpareDot	contained /\./
    +
    +" --- syntax errors
    +syn match	namedIllegalDom	contained /"\S*[^-A-Za-z0-9.[:space:]]\S*"/ms=s+1,me=e-1
    +syn match	namedIPerror	contained /\<\S*[^0-9.[:space:];]\S*/
    +syn match	namedEParenError	contained +{+
    +syn match	namedParenError	+}\([^;]\|$\)+
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link namedComment	Comment
    +hi def link namedInclude	Include
    +hi def link namedKeyword	Keyword
    +hi def link namedIntKeyword	Keyword
    +hi def link namedIdentifier	Identifier
    +hi def link namedIntIdent	Identifier
    +
    +hi def link namedString	String
    +hi def link namedBool	Type
    +hi def link namedNotBool	Error
    +hi def link namedNumber	Number
    +hi def link namedNotNumber	Error
    +
    +hi def link namedOption	namedKeyword
    +hi def link namedLogOption	namedKeyword
    +hi def link namedCNOption	namedKeyword
    +hi def link namedQSKeywords	Type
    +hi def link namedCNKeywords	Type
    +hi def link namedLogCategory	Type
    +hi def link namedIPaddr	Number
    +hi def link namedDomain	Identifier
    +hi def link namedZoneOpt	namedKeyword
    +hi def link namedZoneType	Type
    +hi def link namedParenError	Error
    +hi def link namedEParenError	Error
    +hi def link namedIllegalDom	Error
    +hi def link namedIPerror	Error
    +hi def link namedSpareDot	Error
    +hi def link namedError	Error
    +
    +
    +let &cpo = s:save_cpo
    +unlet s:save_cpo
    +
    +let b:current_syntax = "named"
    +
    +" vim: ts=17
    diff --git a/.config/vim/syntax/nanorc.vim b/.config/vim/syntax/nanorc.vim
    new file mode 100644
    index 0000000..606ac7f
    --- /dev/null
    +++ b/.config/vim/syntax/nanorc.vim
    @@ -0,0 +1,243 @@
    +" Vim syntax file
    +" Language:             nanorc(5) - GNU nano configuration file
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2006-04-19
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn keyword nanorcTodo          contained TODO FIXME XXX NOTE
    +
    +syn region  nanorcComment       display oneline start='^\s*#' end='$'
    +                                \ contains=nanorcTodo,@Spell
    +
    +syn match   nanorcBegin         display '^'
    +                                \ nextgroup=nanorcKeyword,nanorcComment
    +                                \ skipwhite
    +
    +syn keyword nanorcKeyword       contained set unset
    +                                \ nextgroup=nanorcBoolOption,
    +                                \ nanorcStringOption,nanorcNumberOption
    +                                \ skipwhite
    +
    +syn keyword nanorcKeyword       contained syntax
    +                                \ nextgroup=nanorcSynGroupName skipwhite
    +
    +syn keyword nanorcKeyword       contained color
    +                                \ nextgroup=@nanorcFGColor skipwhite
    +
    +syn keyword nanorcBoolOption    contained autoindent backup const cut
    +                                \ historylog morespace mouse multibuffer
    +                                \ noconvert nofollow nohelp nowrap preserve
    +                                \ rebinddelete regexp smarthome smooth suspend
    +                                \ tempfile view
    +
    +syn keyword nanorcStringOption  contained backupdir brackets operatingdir
    +                                \ punct quotestr speller whitespace
    +                                \ nextgroup=nanorcString skipwhite
    +
    +syn keyword nanorcNumberOption  contained fill tabsize
    +                                \ nextgroup=nanorcNumber skipwhite
    +
    +syn region  nanorcSynGroupName  contained display oneline start=+"+
    +                                \ end=+"\ze\%([[:blank:]]\|$\)+
    +                                \ nextgroup=nanorcRegexes skipwhite
    +
    +syn match   nanorcString        contained display '".*"'
    +
    +syn region  nanorcRegexes       contained display oneline start=+"+
    +                                \ end=+"\ze\%([[:blank:]]\|$\)+
    +                                \ nextgroup=nanorcRegexes skipwhite
    +
    +syn match   nanorcNumber        contained display '[+-]\=\<\d\+\>'
    +
    +syn cluster nanorcFGColor       contains=nanorcFGWhite,nanorcFGBlack,
    +                                \ nanorcFGRed,nanorcFGBlue,nanorcFGGreen,
    +                                \ nanorcFGYellow,nanorcFGMagenta,nanorcFGCyan,
    +                                \ nanorcFGBWhite,nanorcFGBBlack,nanorcFGBRed,
    +                                \ nanorcFGBBlue,nanorcFGBGreen,nanorcFGBYellow,
    +                                \ nanorcFGBMagenta,nanorcFGBCyan
    +
    +syn keyword nanorcFGWhite       contained white
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGBlack       contained black
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGRed         contained red
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGBlue        contained blue
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGGreen       contained green
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGYellow      contained yellow
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGMagenta     contained magenta
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGCyan        contained cyan
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGBWhite      contained brightwhite
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGBBlack      contained brightblack
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGBRed        contained brightred
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGBBlue       contained brightblue
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGBGreen      contained brightgreen
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGBYellow     contained brightyellow
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGBMagenta    contained brightmagenta
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn keyword nanorcFGBCyan       contained brightcyan
    +                                \ nextgroup=@nanorcFGSpec skipwhite
    +
    +syn cluster nanorcBGColor       contains=nanorcBGWhite,nanorcBGBlack,
    +                                \ nanorcBGRed,nanorcBGBlue,nanorcBGGreen,
    +                                \ nanorcBGYellow,nanorcBGMagenta,nanorcBGCyan,
    +                                \ nanorcBGBWhite,nanorcBGBBlack,nanorcBGBRed,
    +                                \ nanorcBGBBlue,nanorcBGBGreen,nanorcBGBYellow,
    +                                \ nanorcBGBMagenta,nanorcBGBCyan
    +
    +syn keyword nanorcBGWhite       contained white
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGBlack       contained black
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGRed         contained red
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGBlue        contained blue
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGGreen       contained green
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGYellow      contained yellow
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGMagenta     contained magenta
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGCyan        contained cyan
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGBWhite      contained brightwhite
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGBBlack      contained brightblack
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGBRed        contained brightred
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGBBlue       contained brightblue
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGBGreen      contained brightgreen
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGBYellow     contained brightyellow
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGBMagenta    contained brightmagenta
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn keyword nanorcBGBCyan       contained brightcyan
    +                                \ nextgroup=@nanorcBGSpec skipwhite
    +
    +syn match   nanorcBGColorSep    contained ',' nextgroup=@nanorcBGColor
    +
    +syn cluster nanorcFGSpec        contains=nanorcBGColorSep,nanorcRegexes,
    +                                \ nanorcStartRegion
    +
    +syn cluster nanorcBGSpec        contains=nanorcRegexes,nanorcStartRegion
    +
    +syn keyword nanorcStartRegion   contained start nextgroup=nanorcStartRegionEq
    +
    +syn match   nanorcStartRegionEq contained '=' nextgroup=nanorcRegion
    +
    +syn region  nanorcRegion        contained display oneline start=+"+
    +                                \ end=+"\ze\%([[:blank:]]\|$\)+
    +                                \ nextgroup=nanorcEndRegion skipwhite
    +
    +syn keyword nanorcEndRegion     contained end nextgroup=nanorcStartRegionEq
    +
    +syn match   nanorcEndRegionEq   contained '=' nextgroup=nanorcRegex
    +
    +syn region  nanorcRegex         contained display oneline start=+"+
    +                                \ end=+"\ze\%([[:blank:]]\|$\)+
    +
    +hi def link nanorcTodo          Todo
    +hi def link nanorcComment       Comment
    +hi def link nanorcKeyword       Keyword
    +hi def link nanorcBoolOption    Identifier
    +hi def link nanorcStringOption  Identifier
    +hi def link nanorcNumberOption  Identifier
    +hi def link nanorcSynGroupName  String
    +hi def link nanorcString        String
    +hi def link nanorcRegexes       nanorcString
    +hi def link nanorcNumber        Number
    +hi def      nanorcFGWhite       ctermfg=Gray guifg=Gray
    +hi def      nanorcFGBlack       ctermfg=Black guifg=Black
    +hi def      nanorcFGRed         ctermfg=DarkRed guifg=DarkRed
    +hi def      nanorcFGBlue        ctermfg=DarkBlue guifg=DarkBlue
    +hi def      nanorcFGGreen       ctermfg=DarkGreen guifg=DarkGreen
    +hi def      nanorcFGYellow      ctermfg=Brown guifg=Brown
    +hi def      nanorcFGMagenta     ctermfg=DarkMagenta guifg=DarkMagenta
    +hi def      nanorcFGCyan        ctermfg=DarkCyan guifg=DarkCyan
    +hi def      nanorcFGBWhite      ctermfg=White guifg=White
    +hi def      nanorcFGBBlack      ctermfg=DarkGray guifg=DarkGray
    +hi def      nanorcFGBRed        ctermfg=Red guifg=Red
    +hi def      nanorcFGBBlue       ctermfg=Blue guifg=Blue
    +hi def      nanorcFGBGreen      ctermfg=Green guifg=Green
    +hi def      nanorcFGBYellow     ctermfg=Yellow guifg=Yellow
    +hi def      nanorcFGBMagenta    ctermfg=Magenta guifg=Magenta
    +hi def      nanorcFGBCyan       ctermfg=Cyan guifg=Cyan
    +hi def link nanorcBGColorSep    Normal
    +hi def      nanorcBGWhite       ctermbg=Gray guibg=Gray
    +hi def      nanorcBGBlack       ctermbg=Black guibg=Black
    +hi def      nanorcBGRed         ctermbg=DarkRed guibg=DarkRed
    +hi def      nanorcBGBlue        ctermbg=DarkBlue guibg=DarkBlue
    +hi def      nanorcBGGreen       ctermbg=DarkGreen guibg=DarkGreen
    +hi def      nanorcBGYellow      ctermbg=Brown guibg=Brown
    +hi def      nanorcBGMagenta     ctermbg=DarkMagenta guibg=DarkMagenta
    +hi def      nanorcBGCyan        ctermbg=DarkCyan guibg=DarkCyan
    +hi def      nanorcBGBWhite      ctermbg=White guibg=White
    +hi def      nanorcBGBBlack      ctermbg=DarkGray guibg=DarkGray
    +hi def      nanorcBGBRed        ctermbg=Red guibg=Red
    +hi def      nanorcBGBBlue       ctermbg=Blue guibg=Blue
    +hi def      nanorcBGBGreen      ctermbg=Green guibg=Green
    +hi def      nanorcBGBYellow     ctermbg=Yellow guibg=Yellow
    +hi def      nanorcBGBMagenta    ctermbg=Magenta guibg=Magenta
    +hi def      nanorcBGBCyan       ctermbg=Cyan guibg=Cyan
    +hi def link nanorcStartRegion   Type
    +hi def link nanorcStartRegionEq Operator
    +hi def link nanorcRegion        nanorcString
    +hi def link nanorcEndRegion     Type
    +hi def link nanorcEndRegionEq   Operator
    +hi def link nanorcRegex         nanoRegexes
    +
    +let b:current_syntax = "nanorc"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/nasm.vim b/.config/vim/syntax/nasm.vim
    new file mode 100644
    index 0000000..22d7c27
    --- /dev/null
    +++ b/.config/vim/syntax/nasm.vim
    @@ -0,0 +1,1192 @@
    +" Vim syntax file
    +" Language:	NASM - The Netwide Assembler (v0.98)
    +" Maintainer:	Andrii Sokolov	
    +" Original Author:	Manuel M.H. Stol	
    +" Former Maintainer:	Manuel M.H. Stol	
    +" Contributors:
    +" 	Leonard König  (C string highlighting),
    +" 	Peter Stanhope  (Add missing 64-bit mode registers)
    +" 	Frédéric Hamel  (F16c support, partial AVX
    +" 						     support, other)
    +"	sarvel  (Complete set of supported instructions)
    +" Last Change:	2024 Oct 8
    +" NASM Home:	http://www.nasm.us/
    +
    +
    +" Setup Syntax:
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +"  Assembler syntax is case insensetive
    +syn case ignore
    +
    +
    +" Vim search and movement commands on identifers
    +"  Comments at start of a line inside which to skip search for indentifiers
    +setlocal comments=:;
    +"  Identifier Keyword characters (defines \k)
    +setlocal iskeyword=@,48-57,#,$,.,?,@-@,_,~
    +
    +
    +" Comments:
    +syn region  nasmComment		start=";" keepend end="$" contains=@nasmGrpInComments
    +syn region  nasmSpecialComment	start=";\*\*\*" keepend end="$"
    +syn keyword nasmInCommentTodo	contained TODO FIXME XXX[XXXXX]
    +syn cluster nasmGrpInComments	contains=nasmInCommentTodo
    +syn cluster nasmGrpComments	contains=@nasmGrpInComments,nasmComment,nasmSpecialComment
    +
    +
    +
    +" Label Identifiers:
    +"  in NASM: 'Everything is a Label'
    +"  Definition Label = label defined by %[i]define or %[i]assign
    +"  Identifier Label = label defined as first non-keyword on a line or %[i]macro
    +syn match   nasmLabelError	"$\=\(\d\+\K\|[#.@]\|\$\$\k\)\k*\>"
    +syn match   nasmLabel		"\<\(\h\|[?@]\)\k*\>"
    +syn match   nasmLabel		"[\$\~]\(\h\|[?@]\)\k*\>"lc=1
    +"  Labels starting with one or two '.' are special
    +syn match   nasmLocalLabel	"\<\.\(\w\|[#$?@~]\)\k*\>"
    +syn match   nasmLocalLabel	"\<\$\.\(\w\|[#$?@~]\)\k*\>"ms=s+1
    +if !exists("nasm_no_warn")
    +  syn match  nasmLabelWarn	"\<\~\=\$\=[_.][_.\~]*\>"
    +endif
    +if exists("nasm_loose_syntax")
    +  syn match   nasmSpecialLabel	"\<\.\.@\k\+\>"
    +  syn match   nasmSpecialLabel	"\<\$\.\.@\k\+\>"ms=s+1
    +  if !exists("nasm_no_warn")
    +    syn match   nasmLabelWarn	"\<\$\=\.\.@\(\d\|[#$\.~]\)\k*\>"
    +  endif
    +  " disallow use of nasm internal label format
    +  syn match   nasmLabelError	"\<\$\=\.\.@\d\+\.\k*\>"
    +else
    +  syn match   nasmSpecialLabel	"\<\.\.@\(\h\|[?@]\)\k*\>"
    +  syn match   nasmSpecialLabel	"\<\$\.\.@\(\h\|[?@]\)\k*\>"ms=s+1
    +endif
    +"  Labels can be dereferenced with '$' to destinguish them from reserved words
    +syn match   nasmLabelError	"\<\$\K\k*\s*:"
    +syn match   nasmLabelError	"^\s*\$\K\k*\>"
    +syn match   nasmLabelError	"\<\~\s*\(\k*\s*:\|\$\=\.\k*\)"
    +
    +
    +
    +" Constants:
    +syn match   nasmStringError	+["'`]+
    +" NASM is case sensitive here: eg. u-prefix allows for 4-digit, U-prefix for
    +" 8-digit Unicode characters
    +syn case match
    +" one-char escape-sequences
    +syn match   nasmCStringEscape  display contained "\\[’"‘\\\?abtnvfre]"
    +" hex and octal numbers
    +syn match   nasmCStringEscape  display contained "\\\(x\x\{2}\|\o\{1,3}\)"
    +" Unicode characters
    +syn match   nasmCStringEscape	display contained "\\\(u\x\{4}\|U\x\{8}\)"
    +" ISO C99 format strings (copied from cFormat in runtime/syntax/c.vim)
    +syn match   nasmCStringFormat	display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
    +syn match   nasmCStringFormat	display "%%" contained
    +syn match   nasmString		+\("[^"]\{-}"\|'[^']\{-}'\)+
    +" Highlight C escape- and format-sequences within ``-strings
    +syn match   nasmCString	+\(`[^`]\{-}`\)+ contains=nasmCStringEscape,nasmCStringFormat extend
    +syn case ignore
    +syn match   nasmBinNumber	"\<\([01][01_]*[by]\|0[by][01_]\+\)\>"
    +syn match   nasmBinNumber	"\<\~\([01][01_]*[by]\|0[by][01_]\+\)\>"lc=1
    +syn match   nasmOctNumber	"\<\(\o[0-7_]*[qo]\|0[qo][0-7_]\+\)\>"
    +syn match   nasmOctNumber	"\<\~\(\o[0-7_]*[qo]\|0[qo][0-7_]\+\)\>"lc=1
    +syn match   nasmDecNumber	"\<\(\d[0-9_]*\|\d[0-9_]*d\|0d[0-9_]\+\)\>"
    +syn match   nasmDecNumber	"\<\~\(\d[0-9_]*\|\d[0-9_]*d\|0d[0-9_]\+\)\>"lc=1
    +syn match   nasmHexNumber	"\<\(\d[0-9a-f_]*h\|0[xh][0-9a-f_]\+\|\$\d[0-9a-f_]*\)\>"
    +syn match   nasmHexNumber	"\<\~\(\d[0-9a-f_]*h\|0[xh][0-9a-f_]\+\|\$\d[0-9a-f_]*\)\>"lc=1
    +syn match   nasmBinFloat	"\<\(0[by][01_]*\.[01_]*\(p[+-]\=[0-9_]*\)\=\)\|\(0[by][01_]*p[+-]\=[0-9_]*\)\>"
    +syn match   nasmOctFloat	"\<\(0[qo][0-7_]*\.[0-7_]*\(p[+-]\=[0-9_]*\)\=\)\|\(0[qo][0-7_]*p[+-]\=[0-9_]*\)\>"
    +syn match   nasmDecFloat	"\<\(\d[0-9_]*\.[0-9_]*\(e[+-]\=[0-9_]*\)\=\)\|\(\d[0-9_]*e[+-]\=[0-9_]*\)\>"
    +syn match   nasmHexFloat	"\<\(0[xh][0-9a-f_]\+\.[0-9a-f_]*\(p[+-]\=[0-9_]*\)\=\)\|\(0[xh][0-9a-f_]\+p[+-]\=[0-9_]*\)\>"
    +syn keyword nasmSpecFloat	Inf NaN SNaN QNaN __?Infinity?__ __?NaN?__ __?SNaN?__ __?QNaN?__
    +syn match   nasmBcdConst	"\<\(\d[0-9_]*p\|0p[0-9_]\+\)\>"
    +syn match   nasmNumberError	"\<\~\s*\d\+\.\d*\(e[+-]\=\d\+\)\=\>"
    +
    +
    +" Netwide Assembler Storage Directives:
    +"  Storage types
    +syn keyword nasmTypeError	DF EXTRN FWORD RESF TBYTE
    +syn keyword nasmType		FAR NEAR SHORT
    +syn keyword nasmType		BYTE WORD DWORD QWORD DQWORD HWORD DHWORD TWORD
    +syn keyword nasmType		CDECL FASTCALL NONE PASCAL STDCALL
    +syn keyword nasmStorage		DB DW DD DQ DT DO DY DZ
    +syn keyword nasmStorage		RESB RESW RESD RESQ REST RESO RESY RESZ
    +syn keyword nasmStorage		EXTERN GLOBAL COMMON
    +"  Structured storage types
    +syn match   nasmTypeError	"\<\(AT\|I\=\(END\)\=\(STRUCT\=\|UNION\)\|I\=END\)\>"
    +syn match   nasmStructureLabel	contained "\<\(AT\|I\=\(END\)\=\(STRUCT\=\|UNION\)\|I\=END\)\>"
    +"   structures cannot be nested (yet) -> use: 'keepend' and 're='
    +syn cluster nasmGrpCntnStruc	contains=ALLBUT,@nasmGrpInComments,nasmMacroDef,@nasmGrpInMacros,@nasmGrpInPreCondits,nasmStructureDef,@nasmGrpInStrucs
    +syn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="^\s*STRUCT\>"hs=e-5 end="^\s*ENDSTRUCT\>"re=e-9 contains=@nasmGrpCntnStruc
    +syn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="^\s*STRUC\>"hs=e-4  end="^\s*ENDSTRUC\>"re=e-8  contains=@nasmGrpCntnStruc
    +syn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="\" end="\" contains=@nasmGrpCntnStruc,nasmInStructure
    +"   union types are not part of nasm (yet)
    +"syn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnStruc
    +"syn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="\" end="\" contains=@nasmGrpCntnStruc,nasmInStructure
    +syn match   nasmInStructure	contained "^\s*AT\>"hs=e-1
    +syn cluster nasmGrpInStrucs	contains=nasmStructure,nasmInStructure,nasmStructureLabel
    +
    +
    +
    +" PreProcessor Instructions:
    +" NAsm PreProcs start with %, but % is not a character
    +syn match   nasmPreProcError	"%{\=\(%\=\k\+\|%%\+\k*\|[+-]\=\d\+\)}\="
    +if exists("nasm_loose_syntax")
    +  syn cluster nasmGrpNxtCtx	contains=nasmStructureLabel,nasmLabel,nasmLocalLabel,nasmSpecialLabel,nasmLabelError,nasmPreProcError
    +else
    +  syn cluster nasmGrpNxtCtx	contains=nasmStructureLabel,nasmLabel,nasmLabelError,nasmPreProcError
    +endif
    +
    +"  Multi-line macro
    +syn cluster nasmGrpCntnMacro	contains=ALLBUT,@nasmGrpInComments,nasmStructureDef,@nasmGrpInStrucs,nasmMacroDef,@nasmGrpPreCondits,nasmMemReference,nasmInMacPreCondit,nasmInMacStrucDef
    +syn region  nasmMacroDef	matchgroup=nasmMacro keepend start="^\s*%macro\>"hs=e-5 start="^\s*%imacro\>"hs=e-6 end="^\s*%endmacro\>"re=e-9 contains=@nasmGrpCntnMacro,nasmInMacStrucDef
    +if exists("nasm_loose_syntax")
    +  syn match  nasmInMacLabel	contained "%\(%\k\+\>\|{%\k\+}\)"
    +  syn match  nasmInMacLabel	contained "%\($\+\(\w\|[#\.?@~]\)\k*\>\|{$\+\(\w\|[#\.?@~]\)\k*}\)"
    +  syn match  nasmInMacPreProc	contained "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=nasmStructureLabel,nasmLabel,nasmInMacParam,nasmLocalLabel,nasmSpecialLabel,nasmLabelError,nasmPreProcError
    +  if !exists("nasm_no_warn")
    +    syn match nasmInMacLblWarn	contained "%\(%[$\.]\k*\>\|{%[$\.]\k*}\)"
    +    syn match nasmInMacLblWarn	contained "%\($\+\(\d\|[#\.@~]\)\k*\|{\$\+\(\d\|[#\.@~]\)\k*}\)"
    +    hi link nasmInMacCatLabel	nasmInMacLblWarn
    +  else
    +    hi link nasmInMacCatLabel	nasmInMacLabel
    +  endif
    +else
    +  syn match  nasmInMacLabel	contained "%\(%\(\w\|[#?@~]\)\k*\>\|{%\(\w\|[#?@~]\)\k*}\)"
    +  syn match  nasmInMacLabel	contained "%\($\+\(\h\|[?@]\)\k*\>\|{$\+\(\h\|[?@]\)\k*}\)"
    +  hi link nasmInMacCatLabel	nasmLabelError
    +endif
    +syn match   nasmInMacCatLabel	contained "\d\K\k*"lc=1
    +syn match   nasmInMacLabel	contained "\d}\k\+"lc=2
    +if !exists("nasm_no_warn")
    +  syn match  nasmInMacLblWarn	contained "%\(\($\+\|%\)[_~][._~]*\>\|{\($\+\|%\)[_~][._~]*}\)"
    +endif
    +syn match   nasmInMacPreProc	contained "^\s*%pop\>"hs=e-3
    +syn match   nasmInMacPreProc	contained "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=@nasmGrpNxtCtx
    +"   structures cannot be nested (yet) -> use: 'keepend' and 're='
    +syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="^\s*STRUCT\>"hs=e-5 end="^\s*ENDSTRUCT\>"re=e-9 contains=@nasmGrpCntnMacro
    +syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="^\s*STRUC\>"hs=e-4  end="^\s*ENDSTRUC\>"re=e-8  contains=@nasmGrpCntnMacro
    +syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="\" end="\" contains=@nasmGrpCntnMacro,nasmInStructure
    +"   union types are not part of nasm (yet)
    +"syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnMacro
    +"syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="\" end="\" contains=@nasmGrpCntnMacro,nasmInStructure
    +syn region  nasmInMacPreConDef	contained transparent matchgroup=nasmInMacPreCondit start="^\s*%ifnidni\>"hs=e-7 start="^\s*%if\(idni\|n\(ctx\|def\|idn\|num\|str\)\)\>"hs=e-6 start="^\s*%if\(ctx\|def\|idn\|nid\|num\|str\)\>"hs=e-5 start="^\s*%ifid\>"hs=e-4 start="^\s*%if\>"hs=e-2 end="%endif\>" contains=@nasmGrpCntnMacro,nasmInMacPreCondit,nasmInPreCondit
    +" Todo: allow STRUC/ISTRUC to be used inside preprocessor conditional block
    +syn match   nasmInMacPreCondit	contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx
    +syn match   nasmInMacPreCondit	contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx
    +syn match   nasmInMacPreCondit	contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx
    +syn match   nasmInMacParamNum	contained "\<\d\+\.list\>"me=e-5
    +syn match   nasmInMacParamNum	contained "\<\d\+\.nolist\>"me=e-7
    +syn match   nasmInMacDirective	contained "\.\(no\)\=list\>"
    +syn match   nasmInMacMacro	contained transparent "macro\s"lc=5 skipwhite nextgroup=nasmStructureLabel
    +syn match   nasmInMacMacro	contained "^\s*%rotate\>"hs=e-6
    +syn match   nasmInMacParam	contained "%\([+-]\=\d\+\|{[+-]\=\d\+}\)"
    +"   nasm conditional macro operands/arguments
    +"   Todo: check feasebility; add too nasmGrpInMacros, etc.
    +"syn match   nasmInMacCond	contained "\<\(N\=\([ABGL]E\=\|[CEOSZ]\)\|P[EO]\=\)\>"
    +syn cluster nasmGrpInMacros	contains=nasmMacro,nasmInMacMacro,nasmInMacParam,nasmInMacParamNum,nasmInMacDirective,nasmInMacLabel,nasmInMacLblWarn,nasmInMacMemRef,nasmInMacPreConDef,nasmInMacPreCondit,nasmInMacPreProc,nasmInMacStrucDef
    +
    +"   Context pre-procs that are better used inside a macro
    +if exists("nasm_ctx_outside_macro")
    +  syn region nasmPreConditDef	transparent matchgroup=nasmCtxPreCondit start="^\s*%ifnctx\>"hs=e-6 start="^\s*%ifctx\>"hs=e-5 end="%endif\>" contains=@nasmGrpCntnPreCon
    +  syn match  nasmCtxPreProc	"^\s*%pop\>"hs=e-3
    +  if exists("nasm_loose_syntax")
    +    syn match   nasmCtxLocLabel	"%$\+\(\w\|[#.?@~]\)\k*\>"
    +  else
    +    syn match   nasmCtxLocLabel	"%$\+\(\h\|[?@]\)\k*\>"
    +  endif
    +  syn match nasmCtxPreProc	"^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=@nasmGrpNxtCtx
    +  syn match nasmCtxPreCondit	contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx
    +  syn match nasmCtxPreCondit	contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx
    +  syn match nasmCtxPreCondit	contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx
    +  if exists("nasm_no_warn")
    +    hi link nasmCtxPreCondit	nasmPreCondit
    +    hi link nasmCtxPreProc	nasmPreProc
    +    hi link nasmCtxLocLabel	nasmLocalLabel
    +  else
    +    hi link nasmCtxPreCondit	nasmPreProcWarn
    +    hi link nasmCtxPreProc	nasmPreProcWarn
    +    hi link nasmCtxLocLabel	nasmLabelWarn
    +  endif
    +endif
    +
    +"  Conditional assembly
    +syn cluster nasmGrpCntnPreCon	contains=ALLBUT,@nasmGrpInComments,@nasmGrpInMacros,@nasmGrpInStrucs
    +syn region  nasmPreConditDef	transparent matchgroup=nasmPreCondit start="^\s*%ifnidni\>"hs=e-7 start="^\s*%if\(idni\|n\(def\|idn\|num\|str\)\)\>"hs=e-6 start="^\s*%if\(def\|idn\|nid\|num\|str\)\>"hs=e-5 start="^\s*%ifid\>"hs=e-4 start="^\s*%if\>"hs=e-2 end="%endif\>" contains=@nasmGrpCntnPreCon
    +syn match   nasmInPreCondit	contained "^\s*%el\(if\|se\)\>"hs=e-4
    +syn match   nasmInPreCondit	contained "^\s*%elifid\>"hs=e-6
    +syn match   nasmInPreCondit	contained "^\s*%elif\(def\|idn\|nid\|num\|str\)\>"hs=e-7
    +syn match   nasmInPreCondit	contained "^\s*%elif\(n\(def\|idn\|num\|str\)\|idni\)\>"hs=e-8
    +syn match   nasmInPreCondit	contained "^\s*%elifnidni\>"hs=e-9
    +syn cluster nasmGrpInPreCondits	contains=nasmPreCondit,nasmInPreCondit,nasmCtxPreCondit
    +syn cluster nasmGrpPreCondits	contains=nasmPreConditDef,@nasmGrpInPreCondits,nasmCtxPreProc,nasmCtxLocLabel
    +
    +"  Other pre-processor statements
    +syn match   nasmPreProc		"^\s*%\(rep\|use\)\>"hs=e-3
    +syn match   nasmPreProc		"^\s*%line\>"hs=e-4
    +syn match   nasmPreProc		"^\s*%\(clear\|error\|fatal\)\>"hs=e-5
    +syn match   nasmPreProc		"^\s*%\(endrep\|strlen\|substr\)\>"hs=e-6
    +syn match   nasmPreProc		"^\s*%\(exitrep\|warning\)\>"hs=e-7
    +syn match   nasmDefine		"^\s*%undef\>"hs=e-5
    +syn match   nasmDefine		"^\s*%\(assign\|define\)\>"hs=e-6
    +syn match   nasmDefine		"^\s*%i\(assign\|define\)\>"hs=e-7
    +syn match   nasmDefine		"^\s*%unmacro\>"hs=e-7
    +syn match   nasmInclude		"^\s*%include\>"hs=e-7
    +" Todo: Treat the line tail after %fatal, %error, %warning as text
    +
    +"  Multiple pre-processor instructions on single line detection (obsolete)
    +"syn match   nasmPreProcError	+^\s*\([^\t "%';][^"%';]*\|[^\t "';][^"%';]\+\)%\a\+\>+
    +syn cluster nasmGrpPreProcs	contains=nasmMacroDef,@nasmGrpInMacros,@nasmGrpPreCondits,nasmPreProc,nasmDefine,nasmInclude,nasmPreProcWarn,nasmPreProcError
    +
    +
    +
    +" Register Identifiers:
    +"  Register operands:
    +syn match   nasmGen08Register	"\<[A-D][HL]\>"
    +syn match   nasmGen16Register	"\<\([A-D]X\|[DS]I\|[BS]P\)\>"
    +syn match   nasmGen32Register	"\"
    +syn match   nasmGen64Register	"\"
    +syn match   nasmExtRegister     "\<\([SB]PL\|[SD]IL\)\>"
    +syn match   nasmSegRegister	"\<[C-GS]S\>"
    +syn match   nasmSpcRegister	"\"
    +syn match   nasmFpuRegister	"\"
    +syn match   nasmMmxRegister	"\"
    +syn match   nasmAvxRegister	"\<[XYZ]MM\d\{1,2}\>"
    +syn match   nasmCtrlRegister	"\"
    +syn match   nasmDebugRegister	"\"
    +syn match   nasmTestRegister	"\"
    +syn match   nasmRegisterError	"\<\(CR[15-9]\|DR[4-58-9]\|TR[0-28-9]\)\>"
    +syn match   nasmRegisterError	"\<[XYZ]MM\(3[2-9]\|[04-9]\d\)\>"
    +syn match   nasmRegisterError	"\\)"
    +syn match   nasmRegisterError	"\"
    +"  Memory reference operand (address):
    +syn match   nasmMemRefError	"[[\]]"
    +syn cluster nasmGrpCntnMemRef	contains=ALLBUT,@nasmGrpComments,@nasmGrpPreProcs,@nasmGrpInStrucs,nasmMemReference,nasmMemRefError
    +syn match   nasmInMacMemRef	contained "\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmInMacLabel,nasmInMacLblWarn,nasmInMacParam
    +syn match   nasmMemReference	"\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmCtxLocLabel
    +
    +
    +
    +" Netwide Assembler Directives:
    +"  Compilation constants
    +syn keyword nasmConstant	__BITS__ __DATE__ __FILE__ __FORMAT__ __LINE__
    +syn keyword nasmConstant	__NASM_MAJOR__ __NASM_MINOR__ __NASM_VERSION__
    +syn keyword nasmConstant	__TIME__
    +"  Instruction modifiers
    +syn match   nasmInstrModifier	"\(^\|:\)\s*[C-GS]S\>"ms=e-1
    +syn keyword nasmInstrModifier	A16 A32 O16 O32
    +syn match   nasmInstrModifier	"\"lc=5,ms=e-1
    +"   the 'to' keyword is not allowed for fpu-pop instructions (yet)
    +"syn match   nasmInstrModifier	"\"lc=6,ms=e-1
    +"  NAsm directives
    +syn keyword nasmRepeat		TIMES
    +syn keyword nasmDirective	ALIGN[B] INCBIN EQU NOSPLIT SPLIT
    +syn keyword nasmDirective	ABSOLUTE BITS SECTION SEGMENT DEFAULT
    +syn keyword nasmDirective	ENDSECTION ENDSEGMENT
    +syn keyword nasmDirective	__SECT__
    +"  Macro created standard directives: (requires %include)
    +syn case match
    +syn keyword nasmStdDirective	ENDPROC EPILOGUE LOCALS PROC PROLOGUE USES
    +syn keyword nasmStdDirective	ENDIF ELSE ELIF ELSIF IF
    +"syn keyword nasmStdDirective	BREAK CASE DEFAULT ENDSWITCH SWITCH
    +"syn keyword nasmStdDirective	CASE OF ENDCASE
    +syn keyword nasmStdDirective	ENDFOR ENDWHILE FOR REPEAT UNTIL WHILE EXIT
    +syn case ignore
    +"  Format specific directives: (all formats)
    +"  (excluded: extension directives to section, global, common and extern)
    +syn keyword nasmFmtDirective	ORG
    +syn keyword nasmFmtDirective	EXPORT IMPORT GROUP UPPERCASE SEG WRT
    +syn keyword nasmFmtDirective	LIBRARY
    +syn case match
    +syn keyword nasmFmtDirective	_GLOBAL_OFFSET_TABLE_ __GLOBAL_OFFSET_TABLE_
    +syn keyword nasmFmtDirective	..start ..got ..gotoff ..gotpc ..plt ..sym
    +syn case ignore
    +
    +" Instruction errors:
    +"  Instruction modifiers
    +syn match   nasmInstructnError	"\"
    +" Standard Instructions:
    +syn match   nasmInstructnError	"\<\(F\=CMOV\|SET\|J\)N\=\a\{0,2}\>"
    +syn match   nasmInstructnError	"\"
    +syn keyword nasmInstructnError	CMPS MOVS LCS LODS STOS XLAT
    +syn match   nasmInstructnError	"\\s*[^:]"he=e-1
    +"  Input and Output
    +syn keyword nasmInstructnError	INS OUTS
    +"  Standard MMX instructions: (requires MMX1 unit)
    +syn match   nasmInstructnError	"\"
    +syn match   nasmInstructnError	"\"
    +" Streaming SIMD Extension Packed Instructions: (requires SSE unit)
    +syn match   nasmInstructnError	"\"
    +" AVX Instructions
    +syn match   nasmInstructnError  "\"
    +
    +
    +" Instructions:
    +" Standard
    +syn keyword nasmInstructionStandard AAA AAD AAM AAS ADC
    +syn keyword nasmInstructionStandard ADD AND ARPL 
    +syn keyword nasmInstructionStandard BOUND BSF BSR BSWAP BT
    +syn keyword nasmInstructionStandard BTC BTR BTS CALL CBW
    +syn keyword nasmInstructionStandard CDQ CDQE CLC CLD CLI
    +syn keyword nasmInstructionStandard CLTS CMC CMP CMPSB CMPSD
    +syn keyword nasmInstructionStandard CMPSQ CMPSW CMPXCHG CMPXCHG486 CMPXCHG8B
    +syn keyword nasmInstructionStandard CMPXCHG16B CPUID CQO
    +syn keyword nasmInstructionStandard CWD CWDE DAA DAS DEC
    +syn keyword nasmInstructionStandard DIV EMMS ENTER EQU
    +syn keyword nasmInstructionStandard F2XM1 FABS FADD FADDP FBLD
    +syn keyword nasmInstructionStandard FBSTP FCHS FCLEX FCMOVB FCMOVBE
    +syn keyword nasmInstructionStandard FCMOVE FCMOVNB FCMOVNBE FCMOVNE FCMOVNU
    +syn keyword nasmInstructionStandard FCMOVU FCOM FCOMI FCOMIP FCOMP
    +syn keyword nasmInstructionStandard FCOMPP FCOS FDECSTP FDISI FDIV
    +syn keyword nasmInstructionStandard FDIVP FDIVR FDIVRP FEMMS FENI
    +syn keyword nasmInstructionStandard FFREE FFREEP FIADD FICOM FICOMP
    +syn keyword nasmInstructionStandard FIDIV FIDIVR FILD FIMUL FINCSTP
    +syn keyword nasmInstructionStandard FINIT FIST FISTP FISTTP FISUB
    +syn keyword nasmInstructionStandard FISUBR FLD FLD1 FLDCW FLDENV
    +syn keyword nasmInstructionStandard FLDL2E FLDL2T FLDLG2 FLDLN2 FLDPI
    +syn keyword nasmInstructionStandard FLDZ FMUL FMULP FNCLEX FNDISI
    +syn keyword nasmInstructionStandard FNENI FNINIT FNOP FNSAVE FNSTCW
    +syn keyword nasmInstructionStandard FNSTENV FNSTSW FPATAN FPREM FPREM1
    +syn keyword nasmInstructionStandard FPTAN FRNDINT FRSTOR FSAVE FSCALE
    +syn keyword nasmInstructionStandard FSETPM FSIN FSINCOS FSQRT FST
    +syn keyword nasmInstructionStandard FSTCW FSTENV FSTP FSTSW FSUB
    +syn keyword nasmInstructionStandard FSUBP FSUBR FSUBRP FTST FUCOM
    +syn keyword nasmInstructionStandard FUCOMI FUCOMIP FUCOMP FUCOMPP FXAM
    +syn keyword nasmInstructionStandard FXCH FXTRACT FYL2X FYL2XP1 HLT
    +syn keyword nasmInstructionStandard IBTS ICEBP IDIV IMUL IN
    +syn keyword nasmInstructionStandard INC INSB INSD INSW INT
    +syn keyword nasmInstructionStandard INTO
    +syn keyword nasmInstructionStandard INVD INVPCID INVLPG INVLPGA IRET
    +syn keyword nasmInstructionStandard IRETD IRETQ IRETW JCXZ JECXZ
    +syn keyword nasmInstructionStandard JRCXZ JMP JMPE LAHF LAR
    +syn keyword nasmInstructionStandard LDS LEA LEAVE LES LFENCE
    +syn keyword nasmInstructionStandard LFS LGDT LGS LIDT LLDT
    +syn keyword nasmInstructionStandard LMSW LOADALL LOADALL286 LODSB LODSD
    +syn keyword nasmInstructionStandard LODSQ LODSW LOOP LOOPE LOOPNE
    +syn keyword nasmInstructionStandard LOOPNZ LOOPZ LSL LSS LTR
    +syn keyword nasmInstructionStandard MFENCE MONITOR MONITORX MOV MOVD
    +syn keyword nasmInstructionStandard MOVQ MOVSB MOVSD MOVSQ MOVSW
    +syn keyword nasmInstructionStandard MOVSX MOVSXD MOVSX MOVZX MUL
    +syn keyword nasmInstructionStandard MWAIT MWAITX NEG NOP NOT
    +syn keyword nasmInstructionStandard OR OUT OUTSB OUTSD OUTSW
    +syn keyword nasmInstructionStandard PACKSSDW PACKSSWB PACKUSWB PADDB PADDD
    +syn keyword nasmInstructionStandard PADDSB PADDSW PADDUSB PADDUSW
    +syn keyword nasmInstructionStandard PADDW PAND PANDN PAUSE 
    +syn keyword nasmInstructionStandard PAVGUSB PCMPEQB PCMPEQD PCMPEQW PCMPGTB
    +syn keyword nasmInstructionStandard PCMPGTD PCMPGTW PF2ID PFACC
    +syn keyword nasmInstructionStandard PFADD PFCMPEQ PFCMPGE PFCMPGT PFMAX
    +syn keyword nasmInstructionStandard PFMIN PFMUL PFRCP PFRCPIT1 PFRCPIT2
    +syn keyword nasmInstructionStandard PFRSQIT1 PFRSQRT PFSUB PFSUBR PI2FD
    +syn keyword nasmInstructionStandard PMADDWD PMULHRWA
    +syn keyword nasmInstructionStandard PMULHW PMULLW 
    +syn keyword nasmInstructionStandard POP POPA POPAD
    +syn keyword nasmInstructionStandard POPAW POPF POPFD POPFQ POPFW
    +syn keyword nasmInstructionStandard POR PREFETCH PREFETCHW PSLLD PSLLQ
    +syn keyword nasmInstructionStandard PSLLW PSRAD PSRAW PSRLD PSRLQ
    +syn keyword nasmInstructionStandard PSRLW PSUBB PSUBD PSUBSB 
    +syn keyword nasmInstructionStandard PSUBSW PSUBUSB PSUBUSW PSUBW PUNPCKHBW
    +syn keyword nasmInstructionStandard PUNPCKHDQ PUNPCKHWD PUNPCKLBW PUNPCKLDQ PUNPCKLWD
    +syn keyword nasmInstructionStandard PUSH PUSHA PUSHAD PUSHAW PUSHF
    +syn keyword nasmInstructionStandard PUSHFD PUSHFQ PUSHFW PXOR RCL
    +syn keyword nasmInstructionStandard RCR 
    +syn keyword nasmInstructionStandard RDTSCP RET RETF RETN RETW
    +syn keyword nasmInstructionStandard RETFW RETNW RETD RETFD RETND
    +syn keyword nasmInstructionStandard RETQ RETFQ RETNQ ROL ROR
    +syn keyword nasmInstructionStandard RSM RSTS
    +syn keyword nasmInstructionStandard SAHF SAL SALC SAR SBB
    +syn keyword nasmInstructionStandard SCASB SCASD SCASQ SCASW SFENCE
    +syn keyword nasmInstructionStandard SGDT SHL SHLD SHR SHRD
    +syn keyword nasmInstructionStandard SIDT SLDT SKINIT SMI 
    +syn keyword nasmInstructionStandard SMSW STC STD STI
    +syn keyword nasmInstructionStandard STOSB STOSD STOSQ STOSW STR
    +syn keyword nasmInstructionStandard SUB SWAPGS
    +syn keyword nasmInstructionStandard SYSCALL SYSENTER SYSEXIT SYSRET TEST
    +syn keyword nasmInstructionStandard UD0 UD1 UD2B UD2 UD2A
    +syn keyword nasmInstructionStandard UMOV VERR VERW FWAIT WBINVD
    +syn keyword nasmInstructionStandard XADD XBTS XCHG
    +syn keyword nasmInstructionStandard XLATB XLAT XOR CMOVA CMOVAE
    +syn keyword nasmInstructionStandard CMOVB CMOVBE CMOVC CMOVE CMOVG
    +syn keyword nasmInstructionStandard CMOVGE CMOVL CMOVLE CMOVNA CMOVNAE
    +syn keyword nasmInstructionStandard CMOVNB CMOVNBE CMOVNC CMOVNE CMOVNG
    +syn keyword nasmInstructionStandard CMOVNGE CMOVNL CMOVNLE CMOVNO CMOVNP
    +syn keyword nasmInstructionStandard CMOVNS CMOVNZ CMOVO CMOVP CMOVPE
    +syn keyword nasmInstructionStandard CMOVPO CMOVS CMOVZ JA JAE
    +syn keyword nasmInstructionStandard JB JBE JC JCXZ JE
    +syn keyword nasmInstructionStandard JECXZ JG JGE JL JLE
    +syn keyword nasmInstructionStandard JNA JNAE JNB JNBE JNC
    +syn keyword nasmInstructionStandard JNE JNG JNGE JNL JNLE
    +syn keyword nasmInstructionStandard JNO JNP JNS JNZ JO
    +syn keyword nasmInstructionStandard JP JPE JPO JRCXZ JS
    +syn keyword nasmInstructionStandard JZ SETA SETAE SETB SETBE
    +syn keyword nasmInstructionStandard SETC SETE SETG SETGE SETL
    +syn keyword nasmInstructionStandard SETLE SETNA SETNAE SETNB SETNBE
    +syn keyword nasmInstructionStandard SETNC SETNE SETNG SETNGE SETNL
    +syn keyword nasmInstructionStandard SETNLE SETNO SETNP SETNS SETNZ
    +syn keyword nasmInstructionStandard SETO SETP SETPE SETPO SETS
    +syn keyword nasmInstructionStandard SETZ 
    +" SIMD
    +syn keyword nasmInstructionSIMD ADDPS ADDSS ANDNPS ANDPS CMPEQPS
    +syn keyword nasmInstructionSIMD CMPEQSS CMPLEPS CMPLESS CMPLTPS CMPLTSS
    +syn keyword nasmInstructionSIMD CMPNEQPS CMPNEQSS CMPNLEPS CMPNLESS CMPNLTPS
    +syn keyword nasmInstructionSIMD CMPNLTSS CMPORDPS CMPORDSS CMPUNORDPS CMPUNORDSS
    +syn keyword nasmInstructionSIMD CMPPS CMPSS COMISS CVTPI2PS CVTPS2PI
    +syn keyword nasmInstructionSIMD CVTSI2SS CVTSS2SI CVTTPS2PI CVTTSS2SI DIVPS
    +syn keyword nasmInstructionSIMD DIVSS LDMXCSR MAXPS MAXSS MINPS
    +syn keyword nasmInstructionSIMD MINSS MOVAPS MOVHPS MOVLHPS MOVLPS
    +syn keyword nasmInstructionSIMD MOVHLPS MOVMSKPS MOVNTPS MOVSS MOVUPS
    +syn keyword nasmInstructionSIMD MULPS MULSS ORPS RCPPS RCPSS
    +syn keyword nasmInstructionSIMD RSQRTPS RSQRTSS SHUFPS SQRTPS SQRTSS
    +syn keyword nasmInstructionSIMD STMXCSR SUBPS SUBSS UCOMISS UNPCKHPS
    +syn keyword nasmInstructionSIMD UNPCKLPS XORPS
    +" SSE
    +syn keyword nasmInstructionSSE FXRSTOR FXRSTOR64 FXSAVE FXSAVE64
    +" XSAVE
    +syn keyword nasmInstructionXSAVE XGETBV XSETBV XSAVE XSAVE64 XSAVEC
    +syn keyword nasmInstructionXSAVE XSAVEC64 XSAVEOPT XSAVEOPT64 XSAVES XSAVES64
    +syn keyword nasmInstructionXSAVE XRSTOR XRSTOR64 XRSTORS XRSTORS64
    +" MEM
    +syn keyword nasmInstructionMEM PREFETCHNTA PREFETCHT0 PREFETCHT1 PREFETCHT2 PREFETCHIT0
    +syn keyword nasmInstructionMEM PREFETCHIT1 SFENCE
    +" MMX
    +syn keyword nasmInstructionMMX MASKMOVQ MOVNTQ PAVGB PAVGW PEXTRW
    +syn keyword nasmInstructionMMX PINSRW PMAXSW PMAXUB PMINSW PMINUB
    +syn keyword nasmInstructionMMX PMOVMSKB PMULHUW PSADBW PSHUFW
    +" 3DNOW
    +syn keyword nasmInstruction3DNOW PF2IW PFNACC PFPNACC PI2FW PSWAPD
    +" SSE2
    +syn keyword nasmInstructionSSE2 MASKMOVDQU CLFLUSH MOVNTDQ MOVNTI MOVNTPD
    +syn keyword nasmInstructionSSE2 LFENCE MFENCE
    +" WMMX
    +syn keyword nasmInstructionWMMX MOVD MOVDQA MOVDQU MOVDQ2Q MOVQ
    +syn keyword nasmInstructionWMMX MOVQ2DQ PACKSSWB PACKSSDW PACKUSWB PADDB
    +syn keyword nasmInstructionWMMX PADDW PADDD PADDQ PADDSB PADDSW
    +syn keyword nasmInstructionWMMX PADDUSB PADDUSW PAND PANDN PAVGB
    +syn keyword nasmInstructionWMMX PAVGW PCMPEQB PCMPEQW PCMPEQD PCMPGTB
    +syn keyword nasmInstructionWMMX PCMPGTW PCMPGTD PEXTRW PINSRW PMADDWD
    +syn keyword nasmInstructionWMMX PMAXSW PMAXUB PMINSW PMINUB PMOVMSKB
    +syn keyword nasmInstructionWMMX PMULHUW PMULHW PMULLW PMULUDQ POR
    +syn keyword nasmInstructionWMMX PSADBW PSHUFD PSHUFHW PSHUFLW PSLLDQ
    +syn keyword nasmInstructionWMMX PSLLW PSLLD PSLLQ PSRAW PSRAD
    +syn keyword nasmInstructionWMMX PSRLDQ PSRLW PSRLD PSRLQ PSUBB
    +syn keyword nasmInstructionWMMX PSUBW PSUBD PSUBQ PSUBSB PSUBSW
    +syn keyword nasmInstructionWMMX PSUBUSB PSUBUSW PUNPCKHBW PUNPCKHWD PUNPCKHDQ
    +syn keyword nasmInstructionWMMX PUNPCKHQDQ PUNPCKLBW PUNPCKLWD PUNPCKLDQ PUNPCKLQDQ
    +syn keyword nasmInstructionWMMX PXOR
    +" WSSD
    +syn keyword nasmInstructionWSSD ADDPD ADDSD ANDNPD ANDPD CMPEQPD
    +syn keyword nasmInstructionWSSD CMPEQSD CMPLEPD CMPLESD CMPLTPD CMPLTSD
    +syn keyword nasmInstructionWSSD CMPNEQPD CMPNEQSD CMPNLEPD CMPNLESD CMPNLTPD
    +syn keyword nasmInstructionWSSD CMPNLTSD CMPORDPD CMPORDSD CMPUNORDPD CMPUNORDSD
    +syn keyword nasmInstructionWSSD CMPPD CMPSD COMISD CVTDQ2PD CVTDQ2PS
    +syn keyword nasmInstructionWSSD CVTPD2DQ CVTPD2PI CVTPD2PS CVTPI2PD CVTPS2DQ
    +syn keyword nasmInstructionWSSD CVTPS2PD CVTSD2SI CVTSD2SS CVTSI2SD CVTSS2SD
    +syn keyword nasmInstructionWSSD CVTTPD2PI CVTTPD2DQ CVTTPS2DQ CVTTSD2SI DIVPD
    +syn keyword nasmInstructionWSSD DIVSD MAXPD MAXSD MINPD MINSD
    +syn keyword nasmInstructionWSSD MOVAPD MOVHPD MOVLPD MOVMSKPD MOVSD
    +syn keyword nasmInstructionWSSD MOVUPD MULPD MULSD ORPD SHUFPD
    +syn keyword nasmInstructionWSSD SQRTPD SQRTSD SUBPD SUBSD UCOMISD
    +syn keyword nasmInstructionWSSD UNPCKHPD UNPCKLPD XORPD
    +" PRESSCOT
    +syn keyword nasmInstructionPRESSCOT ADDSUBPD ADDSUBPS HADDPD HADDPS HSUBPD
    +syn keyword nasmInstructionPRESSCOT HSUBPS LDDQU MOVDDUP MOVSHDUP MOVSLDUP
    +" VMXSVM
    +syn keyword nasmInstructionVMXSVM CLGI STGI VMCALL VMCLEAR VMFUNC
    +syn keyword nasmInstructionVMXSVM VMLAUNCH VMLOAD VMMCALL VMPTRLD VMPTRST
    +syn keyword nasmInstructionVMXSVM VMREAD VMRESUME VMRUN VMSAVE VMWRITE
    +syn keyword nasmInstructionVMXSVM VMXOFF VMXON
    +" PTVMX
    +syn keyword nasmInstructionPTVMX INVEPT INVVPID
    +" SEVSNPAMD
    +syn keyword nasmInstructionSEVSNPAMD PVALIDATE RMPADJUST VMGEXIT
    +" TEJAS
    +syn keyword nasmInstructionTEJAS PABSB PABSW PABSD PALIGNR PHADDW
    +syn keyword nasmInstructionTEJAS PHADDD PHADDSW PHSUBW PHSUBD PHSUBSW
    +syn keyword nasmInstructionTEJAS PMADDUBSW PMULHRSW PSHUFB PSIGNB PSIGNW
    +syn keyword nasmInstructionTEJAS PSIGND
    +" AMD_SSE4A
    +syn keyword nasmInstructionAMD_SSE4A EXTRQ INSERTQ MOVNTSD MOVNTSS
    +" BARCELONA
    +syn keyword nasmInstructionBARCELONA LZCNT 
    +" PENRY
    +syn keyword nasmInstructionPENRY BLENDPD BLENDPS BLENDVPD BLENDVPS DPPD
    +syn keyword nasmInstructionPENRY DPPS EXTRACTPS INSERTPS MOVNTDQA MPSADBW
    +syn keyword nasmInstructionPENRY PACKUSDW PBLENDVB PBLENDW PCMPEQQ PEXTRB
    +syn keyword nasmInstructionPENRY PEXTRD PEXTRQ PEXTRW PHMINPOSUW PINSRB
    +syn keyword nasmInstructionPENRY PINSRD PINSRQ PMAXSB PMAXSD PMAXUD
    +syn keyword nasmInstructionPENRY PMAXUW PMINSB PMINSD PMINUD PMINUW
    +syn keyword nasmInstructionPENRY PMOVSXBW PMOVSXBD PMOVSXBQ PMOVSXWD PMOVSXWQ
    +syn keyword nasmInstructionPENRY PMOVSXDQ PMOVZXBW PMOVZXBD PMOVZXBQ PMOVZXWD
    +syn keyword nasmInstructionPENRY PMOVZXWQ PMOVZXDQ PMULDQ PMULLD PTEST
    +syn keyword nasmInstructionPENRY ROUNDPD ROUNDPS ROUNDSD ROUNDSS
    +" NEHALEM
    +syn keyword nasmInstructionNEHALEM CRC32 PCMPESTRI PCMPESTRM PCMPISTRI PCMPISTRM
    +syn keyword nasmInstructionNEHALEM PCMPGTQ POPCNT
    +" SMX
    +syn keyword nasmInstructionSMX GETSEC 
    +" GEODE_3DNOW
    +syn keyword nasmInstructionGEODE_3DNOW PFRCPV PFRSQRTV
    +" INTEL_NEW
    +syn keyword nasmInstructionINTEL_NEW MOVBE 
    +" AES
    +syn keyword nasmInstructionAES AESENC AESENCLAST AESDEC AESDECLAST AESIMC
    +syn keyword nasmInstructionAES AESKEYGENASSIST
    +" AVX_AES
    +syn keyword nasmInstructionAVX_AES VAESENC VAESENCLAST VAESDEC VAESDECLAST VAESIMC
    +syn keyword nasmInstructionAVX_AES VAESKEYGENASSIST
    +" INTEL_PUB
    +syn keyword nasmInstructionINTEL_PUB VAESENC VAESENCLAST VAESDEC VAESDECLAST VAESENC
    +syn keyword nasmInstructionINTEL_PUB VAESENCLAST VAESDEC VAESDECLAST VAESENC VAESENCLAST
    +syn keyword nasmInstructionINTEL_PUB VAESDEC VAESDECLAST
    +" AVX
    +syn keyword nasmInstructionAVX VADDPD VADDPS VADDSD VADDSS VADDSUBPD
    +syn keyword nasmInstructionAVX VADDSUBPS VANDPD VANDPS VANDNPD VANDNPS
    +syn keyword nasmInstructionAVX VBLENDPD VBLENDPS VBLENDVPD VBLENDVPS VBROADCASTSS
    +syn keyword nasmInstructionAVX VBROADCASTSD VBROADCASTF128 VCMPEQ_OSPD VCMPEQPD VCMPLT_OSPD
    +syn keyword nasmInstructionAVX VCMPLTPD VCMPLE_OSPD VCMPLEPD VCMPUNORD_QPD VCMPUNORDPD
    +syn keyword nasmInstructionAVX VCMPNEQ_UQPD VCMPNEQPD VCMPNLT_USPD VCMPNLTPD VCMPNLE_USPD
    +syn keyword nasmInstructionAVX VCMPNLEPD VCMPORD_QPD VCMPORDPD VCMPEQ_UQPD VCMPNGE_USPD
    +syn keyword nasmInstructionAVX VCMPNGEPD VCMPNGT_USPD VCMPNGTPD VCMPFALSE_OQPD VCMPFALSEPD
    +syn keyword nasmInstructionAVX VCMPNEQ_OQPD VCMPGE_OSPD VCMPGEPD VCMPGT_OSPD VCMPGTPD
    +syn keyword nasmInstructionAVX VCMPTRUE_UQPD VCMPTRUEPD VCMPEQ_OSPD VCMPLT_OQPD VCMPLE_OQPD
    +syn keyword nasmInstructionAVX VCMPUNORD_SPD VCMPNEQ_USPD VCMPNLT_UQPD VCMPNLE_UQPD VCMPORD_SPD
    +syn keyword nasmInstructionAVX VCMPEQ_USPD VCMPNGE_UQPD VCMPNGT_UQPD VCMPFALSE_OSPD VCMPNEQ_OSPD
    +syn keyword nasmInstructionAVX VCMPGE_OQPD VCMPGT_OQPD VCMPTRUE_USPD VCMPPD VCMPEQ_OSPS
    +syn keyword nasmInstructionAVX VCMPEQPS VCMPLT_OSPS VCMPLTPS VCMPLE_OSPS VCMPLEPS
    +syn keyword nasmInstructionAVX VCMPUNORD_QPS VCMPUNORDPS VCMPNEQ_UQPS VCMPNEQPS VCMPNLT_USPS
    +syn keyword nasmInstructionAVX VCMPNLTPS VCMPNLE_USPS VCMPNLEPS VCMPORD_QPS VCMPORDPS
    +syn keyword nasmInstructionAVX VCMPEQ_UQPS VCMPNGE_USPS VCMPNGEPS VCMPNGT_USPS VCMPNGTPS
    +syn keyword nasmInstructionAVX VCMPFALSE_OQPS VCMPFALSEPS VCMPNEQ_OQPS VCMPGE_OSPS VCMPGEPS
    +syn keyword nasmInstructionAVX VCMPGT_OSPS VCMPGTPS VCMPTRUE_UQPS VCMPTRUEPS VCMPEQ_OSPS
    +syn keyword nasmInstructionAVX VCMPLT_OQPS VCMPLE_OQPS VCMPUNORD_SPS VCMPNEQ_USPS VCMPNLT_UQPS
    +syn keyword nasmInstructionAVX VCMPNLE_UQPS VCMPORD_SPS VCMPEQ_USPS VCMPNGE_UQPS VCMPNGT_UQPS
    +syn keyword nasmInstructionAVX VCMPFALSE_OSPS VCMPNEQ_OSPS VCMPGE_OQPS VCMPGT_OQPS VCMPTRUE_USPS
    +syn keyword nasmInstructionAVX VCMPPS VCMPEQ_OSSD VCMPEQSD VCMPLT_OSSD VCMPLTSD
    +syn keyword nasmInstructionAVX VCMPLE_OSSD VCMPLESD VCMPUNORD_QSD VCMPUNORDSD VCMPNEQ_UQSD
    +syn keyword nasmInstructionAVX VCMPNEQSD VCMPNLT_USSD VCMPNLTSD VCMPNLE_USSD VCMPNLESD
    +syn keyword nasmInstructionAVX VCMPORD_QSD VCMPORDSD VCMPEQ_UQSD VCMPNGE_USSD VCMPNGESD
    +syn keyword nasmInstructionAVX VCMPNGT_USSD VCMPNGTSD VCMPFALSE_OQSD VCMPFALSESD VCMPNEQ_OQSD
    +syn keyword nasmInstructionAVX VCMPGE_OSSD VCMPGESD VCMPGT_OSSD VCMPGTSD VCMPTRUE_UQSD
    +syn keyword nasmInstructionAVX VCMPTRUESD VCMPEQ_OSSD VCMPLT_OQSD VCMPLE_OQSD VCMPUNORD_SSD
    +syn keyword nasmInstructionAVX VCMPNEQ_USSD VCMPNLT_UQSD VCMPNLE_UQSD VCMPORD_SSD VCMPEQ_USSD
    +syn keyword nasmInstructionAVX VCMPNGE_UQSD VCMPNGT_UQSD VCMPFALSE_OSSD VCMPNEQ_OSSD VCMPGE_OQSD
    +syn keyword nasmInstructionAVX VCMPGT_OQSD VCMPTRUE_USSD VCMPSD VCMPEQ_OSSS VCMPEQSS
    +syn keyword nasmInstructionAVX VCMPLT_OSSS VCMPLTSS VCMPLE_OSSS VCMPLESS VCMPUNORD_QSS
    +syn keyword nasmInstructionAVX VCMPUNORDSS VCMPNEQ_UQSS VCMPNEQSS VCMPNLT_USSS VCMPNLTSS
    +syn keyword nasmInstructionAVX VCMPNLE_USSS VCMPNLESS VCMPORD_QSS VCMPORDSS VCMPEQ_UQSS
    +syn keyword nasmInstructionAVX VCMPNGE_USSS VCMPNGESS VCMPNGT_USSS VCMPNGTSS VCMPFALSE_OQSS
    +syn keyword nasmInstructionAVX VCMPFALSESS VCMPNEQ_OQSS VCMPGE_OSSS VCMPGESS VCMPGT_OSSS
    +syn keyword nasmInstructionAVX VCMPGTSS VCMPTRUE_UQSS VCMPTRUESS VCMPEQ_OSSS VCMPLT_OQSS
    +syn keyword nasmInstructionAVX VCMPLE_OQSS VCMPUNORD_SSS VCMPNEQ_USSS VCMPNLT_UQSS VCMPNLE_UQSS
    +syn keyword nasmInstructionAVX VCMPORD_SSS VCMPEQ_USSS VCMPNGE_UQSS VCMPNGT_UQSS VCMPFALSE_OSSS
    +syn keyword nasmInstructionAVX VCMPNEQ_OSSS VCMPGE_OQSS VCMPGT_OQSS VCMPTRUE_USSS VCMPSS
    +syn keyword nasmInstructionAVX VCOMISD VCOMISS VCVTDQ2PD VCVTDQ2PS VCVTPD2DQ
    +syn keyword nasmInstructionAVX VCVTPD2PS VCVTPS2DQ VCVTPS2PD VCVTSD2SI VCVTSD2SS
    +syn keyword nasmInstructionAVX VCVTSI2SD VCVTSI2SS VCVTSS2SD VCVTSS2SI VCVTTPD2DQ
    +syn keyword nasmInstructionAVX VCVTTPS2DQ VCVTTSD2SI VCVTTSS2SI VDIVPD VDIVPS
    +syn keyword nasmInstructionAVX VDIVSD VDIVSS VDPPD VDPPS VEXTRACTF128
    +syn keyword nasmInstructionAVX VEXTRACTPS VHADDPD VHADDPS VHSUBPD VHSUBPS
    +syn keyword nasmInstructionAVX VINSERTF128 VINSERTPS VLDDQU VLDQQU VLDDQU
    +syn keyword nasmInstructionAVX VLDMXCSR VMASKMOVDQU VMASKMOVPS VMASKMOVPD VMAXPD
    +syn keyword nasmInstructionAVX VMAXPS VMAXSD VMAXSS VMINPD VMINPS
    +syn keyword nasmInstructionAVX VMINSD VMINSS VMOVAPD VMOVAPS VMOVD
    +syn keyword nasmInstructionAVX VMOVQ VMOVDDUP VMOVDQA VMOVQQA VMOVDQA
    +syn keyword nasmInstructionAVX VMOVDQU VMOVQQU VMOVDQU VMOVHLPS VMOVHPD
    +syn keyword nasmInstructionAVX VMOVHPS VMOVLHPS VMOVLPD VMOVLPS VMOVMSKPD
    +syn keyword nasmInstructionAVX VMOVMSKPS VMOVNTDQ VMOVNTQQ VMOVNTDQ VMOVNTDQA
    +syn keyword nasmInstructionAVX VMOVNTPD VMOVNTPS VMOVSD VMOVSHDUP VMOVSLDUP
    +syn keyword nasmInstructionAVX VMOVSS VMOVUPD VMOVUPS VMPSADBW VMULPD
    +syn keyword nasmInstructionAVX VMULPS VMULSD VMULSS VORPD VORPS
    +syn keyword nasmInstructionAVX VPABSB VPABSW VPABSD VPACKSSWB VPACKSSDW
    +syn keyword nasmInstructionAVX VPACKUSWB VPACKUSDW VPADDB VPADDW VPADDD
    +syn keyword nasmInstructionAVX VPADDQ VPADDSB VPADDSW VPADDUSB VPADDUSW
    +syn keyword nasmInstructionAVX VPALIGNR VPAND VPANDN VPAVGB VPAVGW
    +syn keyword nasmInstructionAVX VPBLENDVB VPBLENDW VPCMPESTRI VPCMPESTRM VPCMPISTRI
    +syn keyword nasmInstructionAVX VPCMPISTRM VPCMPEQB VPCMPEQW VPCMPEQD VPCMPEQQ
    +syn keyword nasmInstructionAVX VPCMPGTB VPCMPGTW VPCMPGTD VPCMPGTQ VPERMILPD
    +syn keyword nasmInstructionAVX VPERMILPS VPERM2F128 VPEXTRB VPEXTRW VPEXTRD
    +syn keyword nasmInstructionAVX VPEXTRQ VPHADDW VPHADDD VPHADDSW VPHMINPOSUW
    +syn keyword nasmInstructionAVX VPHSUBW VPHSUBD VPHSUBSW VPINSRB VPINSRW
    +syn keyword nasmInstructionAVX VPINSRD VPINSRQ VPMADDWD VPMADDUBSW VPMAXSB
    +syn keyword nasmInstructionAVX VPMAXSW VPMAXSD VPMAXUB VPMAXUW VPMAXUD
    +syn keyword nasmInstructionAVX VPMINSB VPMINSW VPMINSD VPMINUB VPMINUW
    +syn keyword nasmInstructionAVX VPMINUD VPMOVMSKB VPMOVSXBW VPMOVSXBD VPMOVSXBQ
    +syn keyword nasmInstructionAVX VPMOVSXWD VPMOVSXWQ VPMOVSXDQ VPMOVZXBW VPMOVZXBD
    +syn keyword nasmInstructionAVX VPMOVZXBQ VPMOVZXWD VPMOVZXWQ VPMOVZXDQ VPMULHUW
    +syn keyword nasmInstructionAVX VPMULHRSW VPMULHW VPMULLW VPMULLD VPMULUDQ
    +syn keyword nasmInstructionAVX VPMULDQ VPOR VPSADBW VPSHUFB VPSHUFD
    +syn keyword nasmInstructionAVX VPSHUFHW VPSHUFLW VPSIGNB VPSIGNW VPSIGND
    +syn keyword nasmInstructionAVX VPSLLDQ VPSRLDQ VPSLLW VPSLLD VPSLLQ
    +syn keyword nasmInstructionAVX VPSRAW VPSRAD VPSRLW VPSRLD VPSRLQ
    +syn keyword nasmInstructionAVX VPTEST VPSUBB VPSUBW VPSUBD VPSUBQ
    +syn keyword nasmInstructionAVX VPSUBSB VPSUBSW VPSUBUSB VPSUBUSW VPUNPCKHBW
    +syn keyword nasmInstructionAVX VPUNPCKHWD VPUNPCKHDQ VPUNPCKHQDQ VPUNPCKLBW VPUNPCKLWD
    +syn keyword nasmInstructionAVX VPUNPCKLDQ VPUNPCKLQDQ VPXOR VRCPPS VRCPSS
    +syn keyword nasmInstructionAVX VRSQRTPS VRSQRTSS VROUNDPD VROUNDPS VROUNDSD
    +syn keyword nasmInstructionAVX VROUNDSS VSHUFPD VSHUFPS VSQRTPD VSQRTPS
    +syn keyword nasmInstructionAVX VSQRTSD VSQRTSS VSTMXCSR VSUBPD VSUBPS
    +syn keyword nasmInstructionAVX VSUBSD VSUBSS VTESTPS VTESTPD VUCOMISD
    +syn keyword nasmInstructionAVX VUCOMISS VUNPCKHPD VUNPCKHPS VUNPCKLPD VUNPCKLPS
    +syn keyword nasmInstructionAVX VXORPD VXORPS VZEROALL VZEROUPPER
    +" INTEL_CMUL
    +syn keyword nasmInstructionINTEL_CMUL PCLMULLQLQDQ PCLMULHQLQDQ PCLMULLQHQDQ PCLMULHQHQDQ PCLMULQDQ
    +" INTEL_AVX_CMUL
    +syn keyword nasmInstructionINTEL_AVX_CMUL VPCLMULLQLQDQ VPCLMULHQLQDQ VPCLMULLQHQDQ VPCLMULHQHQDQ VPCLMULQDQ
    +syn keyword nasmInstructionINTEL_AVX_CMUL VPCLMULLQLQDQ VPCLMULHQLQDQ VPCLMULLQHQDQ VPCLMULHQHQDQ VPCLMULQDQ
    +syn keyword nasmInstructionINTEL_AVX_CMUL VPCLMULLQLQDQ VPCLMULHQLQDQ VPCLMULLQHQDQ VPCLMULHQHQDQ VPCLMULQDQ
    +syn keyword nasmInstructionINTEL_AVX_CMUL VPCLMULLQLQDQ VPCLMULHQLQDQ VPCLMULLQHQDQ VPCLMULHQHQDQ VPCLMULQDQ
    +syn keyword nasmInstructionINTEL_AVX_CMUL VPCLMULLQLQDQ VPCLMULHQLQDQ VPCLMULLQHQDQ VPCLMULHQHQDQ VPCLMULQDQ
    +" INTEL_FMA
    +syn keyword nasmInstructionINTEL_FMA VFMADD132PS VFMADD132PD VFMADD312PS VFMADD312PD VFMADD213PS
    +syn keyword nasmInstructionINTEL_FMA VFMADD213PD VFMADD123PS VFMADD123PD VFMADD231PS VFMADD231PD
    +syn keyword nasmInstructionINTEL_FMA VFMADD321PS VFMADD321PD VFMADDSUB132PS VFMADDSUB132PD VFMADDSUB312PS
    +syn keyword nasmInstructionINTEL_FMA VFMADDSUB312PD VFMADDSUB213PS VFMADDSUB213PD VFMADDSUB123PS VFMADDSUB123PD
    +syn keyword nasmInstructionINTEL_FMA VFMADDSUB231PS VFMADDSUB231PD VFMADDSUB321PS VFMADDSUB321PD VFMSUB132PS
    +syn keyword nasmInstructionINTEL_FMA VFMSUB132PD VFMSUB312PS VFMSUB312PD VFMSUB213PS VFMSUB213PD
    +syn keyword nasmInstructionINTEL_FMA VFMSUB123PS VFMSUB123PD VFMSUB231PS VFMSUB231PD VFMSUB321PS
    +syn keyword nasmInstructionINTEL_FMA VFMSUB321PD VFMSUBADD132PS VFMSUBADD132PD VFMSUBADD312PS VFMSUBADD312PD
    +syn keyword nasmInstructionINTEL_FMA VFMSUBADD213PS VFMSUBADD213PD VFMSUBADD123PS VFMSUBADD123PD VFMSUBADD231PS
    +syn keyword nasmInstructionINTEL_FMA VFMSUBADD231PD VFMSUBADD321PS VFMSUBADD321PD VFNMADD132PS VFNMADD132PD
    +syn keyword nasmInstructionINTEL_FMA VFNMADD312PS VFNMADD312PD VFNMADD213PS VFNMADD213PD VFNMADD123PS
    +syn keyword nasmInstructionINTEL_FMA VFNMADD123PD VFNMADD231PS VFNMADD231PD VFNMADD321PS VFNMADD321PD
    +syn keyword nasmInstructionINTEL_FMA VFNMSUB132PS VFNMSUB132PD VFNMSUB312PS VFNMSUB312PD VFNMSUB213PS
    +syn keyword nasmInstructionINTEL_FMA VFNMSUB213PD VFNMSUB123PS VFNMSUB123PD VFNMSUB231PS VFNMSUB231PD
    +syn keyword nasmInstructionINTEL_FMA VFNMSUB321PS VFNMSUB321PD VFMADD132SS VFMADD132SD VFMADD312SS
    +syn keyword nasmInstructionINTEL_FMA VFMADD312SD VFMADD213SS VFMADD213SD VFMADD123SS VFMADD123SD
    +syn keyword nasmInstructionINTEL_FMA VFMADD231SS VFMADD231SD VFMADD321SS VFMADD321SD VFMSUB132SS
    +syn keyword nasmInstructionINTEL_FMA VFMSUB132SD VFMSUB312SS VFMSUB312SD VFMSUB213SS VFMSUB213SD
    +syn keyword nasmInstructionINTEL_FMA VFMSUB123SS VFMSUB123SD VFMSUB231SS VFMSUB231SD VFMSUB321SS
    +syn keyword nasmInstructionINTEL_FMA VFMSUB321SD VFNMADD132SS VFNMADD132SD VFNMADD312SS VFNMADD312SD
    +syn keyword nasmInstructionINTEL_FMA VFNMADD213SS VFNMADD213SD VFNMADD123SS VFNMADD123SD VFNMADD231SS
    +syn keyword nasmInstructionINTEL_FMA VFNMADD231SD VFNMADD321SS VFNMADD321SD VFNMSUB132SS VFNMSUB132SD
    +syn keyword nasmInstructionINTEL_FMA VFNMSUB312SS VFNMSUB312SD VFNMSUB213SS VFNMSUB213SD VFNMSUB123SS
    +syn keyword nasmInstructionINTEL_FMA VFNMSUB123SD VFNMSUB231SS VFNMSUB231SD VFNMSUB321SS VFNMSUB321SD
    +" INTEL_POST32
    +syn keyword nasmInstructionINTEL_POST32 RDFSBASE RDGSBASE RDRAND WRFSBASE WRGSBASE
    +syn keyword nasmInstructionINTEL_POST32 VCVTPH2PS VCVTPS2PH ADCX ADOX RDSEED
    +" SUPERVISOR
    +syn keyword nasmInstructionSUPERVISOR CLAC STAC
    +" VIA_SECURITY
    +syn keyword nasmInstructionVIA_SECURITY XSTORE XCRYPTECB XCRYPTCBC XCRYPTCTR XCRYPTCFB
    +syn keyword nasmInstructionVIA_SECURITY XCRYPTOFB MONTMUL XSHA1 XSHA256
    +" AMD_PROFILING
    +syn keyword nasmInstructionAMD_PROFILING LLWPCB SLWPCB LWPVAL LWPINS
    +" XOP_FMA4
    +syn keyword nasmInstructionXOP_FMA4 VFMADDPD VFMADDPS VFMADDSD VFMADDSS VFMADDSUBPD
    +syn keyword nasmInstructionXOP_FMA4 VFMADDSUBPS VFMSUBADDPD VFMSUBADDPS VFMSUBPD VFMSUBPS
    +syn keyword nasmInstructionXOP_FMA4 VFMSUBSD VFMSUBSS VFNMADDPD VFNMADDPS VFNMADDSD
    +syn keyword nasmInstructionXOP_FMA4 VFNMADDSS VFNMSUBPD VFNMSUBPS VFNMSUBSD VFNMSUBSS
    +syn keyword nasmInstructionXOP_FMA4 VFRCZPD VFRCZPS VFRCZSD VFRCZSS VPCMOV
    +syn keyword nasmInstructionXOP_FMA4 VPCOMB VPCOMD VPCOMQ VPCOMUB VPCOMUD
    +syn keyword nasmInstructionXOP_FMA4 VPCOMUQ VPCOMUW VPCOMW VPHADDBD VPHADDBQ
    +syn keyword nasmInstructionXOP_FMA4 VPHADDBW VPHADDDQ VPHADDUBD VPHADDUBQ VPHADDUBW
    +syn keyword nasmInstructionXOP_FMA4 VPHADDUDQ VPHADDUWD VPHADDUWQ VPHADDWD VPHADDWQ
    +syn keyword nasmInstructionXOP_FMA4 VPHSUBBW VPHSUBDQ VPHSUBWD VPMACSDD VPMACSDQH
    +syn keyword nasmInstructionXOP_FMA4 VPMACSDQL VPMACSSDD VPMACSSDQH VPMACSSDQL VPMACSSWD
    +syn keyword nasmInstructionXOP_FMA4 VPMACSSWW VPMACSWD VPMACSWW VPMADCSSWD VPMADCSWD
    +syn keyword nasmInstructionXOP_FMA4 VPPERM VPROTB VPROTD VPROTQ VPROTW
    +syn keyword nasmInstructionXOP_FMA4 VPSHAB VPSHAD VPSHAQ VPSHAW VPSHLB
    +syn keyword nasmInstructionXOP_FMA4 VPSHLD VPSHLQ VPSHLW
    +" AVX2
    +syn keyword nasmInstructionAVX2 VMPSADBW VPABSB VPABSW VPABSD VPACKSSWB
    +syn keyword nasmInstructionAVX2 VPACKSSDW VPACKUSDW VPACKUSWB VPADDB VPADDW
    +syn keyword nasmInstructionAVX2 VPADDD VPADDQ VPADDSB VPADDSW VPADDUSB
    +syn keyword nasmInstructionAVX2 VPADDUSW VPALIGNR VPAND VPANDN VPAVGB
    +syn keyword nasmInstructionAVX2 VPAVGW VPBLENDVB VPBLENDW VPCMPEQB VPCMPEQW
    +syn keyword nasmInstructionAVX2 VPCMPEQD VPCMPEQQ VPCMPGTB VPCMPGTW VPCMPGTD
    +syn keyword nasmInstructionAVX2 VPCMPGTQ VPHADDW VPHADDD VPHADDSW VPHSUBW
    +syn keyword nasmInstructionAVX2 VPHSUBD VPHSUBSW VPMADDUBSW VPMADDWD VPMAXSB
    +syn keyword nasmInstructionAVX2 VPMAXSW VPMAXSD VPMAXUB VPMAXUW VPMAXUD
    +syn keyword nasmInstructionAVX2 VPMINSB VPMINSW VPMINSD VPMINUB VPMINUW
    +syn keyword nasmInstructionAVX2 VPMINUD VPMOVMSKB VPMOVSXBW VPMOVSXBD VPMOVSXBQ
    +syn keyword nasmInstructionAVX2 VPMOVSXWD VPMOVSXWQ VPMOVSXDQ VPMOVZXBW VPMOVZXBD
    +syn keyword nasmInstructionAVX2 VPMOVZXBQ VPMOVZXWD VPMOVZXWQ VPMOVZXDQ VPMULDQ
    +syn keyword nasmInstructionAVX2 VPMULHRSW VPMULHUW VPMULHW VPMULLW VPMULLD
    +syn keyword nasmInstructionAVX2 VPMULUDQ VPOR VPSADBW VPSHUFB VPSHUFD
    +syn keyword nasmInstructionAVX2 VPSHUFHW VPSHUFLW VPSIGNB VPSIGNW VPSIGND
    +syn keyword nasmInstructionAVX2 VPSLLDQ VPSLLW VPSLLD VPSLLQ VPSRAW
    +syn keyword nasmInstructionAVX2 VPSRAD VPSRLDQ VPSRLW VPSRLD VPSRLQ
    +syn keyword nasmInstructionAVX2 VPSUBB VPSUBW VPSUBD VPSUBQ VPSUBSB
    +syn keyword nasmInstructionAVX2 VPSUBSW VPSUBUSB VPSUBUSW VPUNPCKHBW VPUNPCKHWD
    +syn keyword nasmInstructionAVX2 VPUNPCKHDQ VPUNPCKHQDQ VPUNPCKLBW VPUNPCKLWD VPUNPCKLDQ
    +syn keyword nasmInstructionAVX2 VPUNPCKLQDQ VPXOR VMOVNTDQA VBROADCASTSS VBROADCASTSD
    +syn keyword nasmInstructionAVX2 VBROADCASTI128 VPBLENDD VPBROADCASTB VPBROADCASTW VPBROADCASTD
    +syn keyword nasmInstructionAVX2 VPBROADCASTQ VPERMD VPERMPD VPERMPS VPERMQ
    +syn keyword nasmInstructionAVX2 VPERM2I128 VEXTRACTI128 VINSERTI128 VPMASKMOVD VPMASKMOVQ
    +syn keyword nasmInstructionAVX2 VPMASKMOVD VPMASKMOVQ VPSLLVD VPSLLVQ VPSLLVD
    +syn keyword nasmInstructionAVX2 VPSLLVQ VPSRAVD VPSRLVD VPSRLVQ VPSRLVD
    +syn keyword nasmInstructionAVX2 VPSRLVQ VGATHERDPD VGATHERQPD VGATHERDPD VGATHERQPD
    +syn keyword nasmInstructionAVX2 VGATHERDPS VGATHERQPS VGATHERDPS VGATHERQPS VPGATHERDD
    +syn keyword nasmInstructionAVX2 VPGATHERQD VPGATHERDD VPGATHERQD VPGATHERDQ VPGATHERQQ
    +syn keyword nasmInstructionAVX2 VPGATHERDQ VPGATHERQQ
    +" TRANSACTIONS
    +syn keyword nasmInstructionTRANSACTIONS XABORT XBEGIN XEND XTEST
    +" BMI_ABM
    +syn keyword nasmInstructionBMI_ABM ANDN BEXTR BLCI BLCIC BLSI
    +syn keyword nasmInstructionBMI_ABM BLSIC BLCFILL BLSFILL BLCMSK BLSMSK
    +syn keyword nasmInstructionBMI_ABM BLSR BLCS BZHI MULX PDEP
    +syn keyword nasmInstructionBMI_ABM PEXT RORX SARX SHLX SHRX
    +syn keyword nasmInstructionBMI_ABM TZCNT TZMSK T1MSKC PREFETCHWT1
    +" MPE
    +syn keyword nasmInstructionMPE BNDMK BNDCL BNDCU BNDCN BNDMOV
    +syn keyword nasmInstructionMPE BNDLDX BNDSTX
    +" SHA
    +syn keyword nasmInstructionSHA SHA1MSG1 SHA1MSG2 SHA1NEXTE SHA1RNDS4 SHA256MSG1
    +syn keyword nasmInstructionSHA SHA256MSG2 SHA256RNDS2 VSHA512MSG1 VSHA512MSG2 VSHA512RNDS2
    +" SM3
    +syn keyword nasmInstructionSM3 VSM3MSG1 VSM3MSG2 VSM3RNDS2
    +" SM4
    +syn keyword nasmInstructionSM4 VSM4KEY4 VSM4RNDS4
    +" AVX_NOEXCEPT
    +syn keyword nasmInstructionAVX_NOEXCEPT VBCSTNEBF16PS VBCSTNESH2PS VCVTNEEBF162PS VCVTNEEPH2PS VCVTNEOBF162PS
    +syn keyword nasmInstructionAVX_NOEXCEPT VCVTNEOPH2PS VCVTNEPS2BF16
    +" AVX_VECTOR_NN
    +syn keyword nasmInstructionAVX_VECTOR_NN VPDPBSSD VPDPBSSDS VPDPBSUD VPDPBSUDS VPDPBUUD
    +syn keyword nasmInstructionAVX_VECTOR_NN VPDPBUUDS
    +" AVX_IFMA
    +syn keyword nasmInstructionAVX_IFMA VPMADD52HUQ VPMADD52LUQ
    +" AVX512_MASK
    +syn keyword nasmInstructionAVX512_MASK KADDB KADDD KADDQ KADDW KANDB
    +syn keyword nasmInstructionAVX512_MASK KANDD KANDNB KANDND KANDNQ KANDNW
    +syn keyword nasmInstructionAVX512_MASK KANDQ KANDW KMOVB KMOVD KMOVQ
    +syn keyword nasmInstructionAVX512_MASK KMOVW KNOTB KNOTD KNOTQ KNOTW
    +syn keyword nasmInstructionAVX512_MASK KORB KORD KORQ KORW KORTESTB
    +syn keyword nasmInstructionAVX512_MASK KORTESTD KORTESTQ KORTESTW KSHIFTLB KSHIFTLD
    +syn keyword nasmInstructionAVX512_MASK KSHIFTLQ KSHIFTLW KSHIFTRB KSHIFTRD KSHIFTRQ
    +syn keyword nasmInstructionAVX512_MASK KSHIFTRW KTESTB KTESTD KTESTQ KTESTW
    +syn keyword nasmInstructionAVX512_MASK KUNPCKBW KUNPCKDQ KUNPCKWD KXNORB KXNORD
    +syn keyword nasmInstructionAVX512_MASK KXNORQ KXNORW KXORB KXORD KXORQ
    +syn keyword nasmInstructionAVX512_MASK KXORW
    +" AVX512_MASK_REG
    +syn keyword nasmInstructionAVX512_MASK_REG KADD KAND KANDN KAND KMOV
    +syn keyword nasmInstructionAVX512_MASK_REG KNOT KOR KORTEST KSHIFTL KSHIFTR
    +syn keyword nasmInstructionAVX512_MASK_REG KTEST KUNPCK KXNOR KXOR
    +" AVX512
    +syn keyword nasmInstructionAVX512 VADDPD VADDPS VADDSD VADDSS VALIGND
    +syn keyword nasmInstructionAVX512 VALIGNQ VANDNPD VANDNPS VANDPD VANDPS
    +syn keyword nasmInstructionAVX512 VBLENDMPD VBLENDMPS VBROADCASTF32X2 VBROADCASTF32X4 VBROADCASTF32X8
    +syn keyword nasmInstructionAVX512 VBROADCASTF64X2 VBROADCASTF64X4 VBROADCASTI32X2 VBROADCASTI32X4 VBROADCASTI32X8
    +syn keyword nasmInstructionAVX512 VBROADCASTI64X2 VBROADCASTI64X4 VBROADCASTSD VBROADCASTSS VCMPEQPD
    +syn keyword nasmInstructionAVX512 VCMPEQPS VCMPEQSD VCMPEQSS VCMPEQ_OQPD VCMPEQ_OQPS
    +syn keyword nasmInstructionAVX512 VCMPEQ_OQSD VCMPEQ_OQSS VCMPLTPD VCMPLTPS VCMPLTSD
    +syn keyword nasmInstructionAVX512 VCMPLTSS VCMPLT_OSPD VCMPLT_OSPS VCMPLT_OSSD VCMPLT_OSSS
    +syn keyword nasmInstructionAVX512 VCMPLEPD VCMPLEPS VCMPLESD VCMPLESS VCMPLE_OSPD
    +syn keyword nasmInstructionAVX512 VCMPLE_OSPS VCMPLE_OSSD VCMPLE_OSSS VCMPUNORDPD VCMPUNORDPS
    +syn keyword nasmInstructionAVX512 VCMPUNORDSD VCMPUNORDSS VCMPUNORD_QPD VCMPUNORD_QPS VCMPUNORD_QSD
    +syn keyword nasmInstructionAVX512 VCMPUNORD_QSS VCMPNEQPD VCMPNEQPS VCMPNEQSD VCMPNEQSS
    +syn keyword nasmInstructionAVX512 VCMPNEQ_UQPD VCMPNEQ_UQPS VCMPNEQ_UQSD VCMPNEQ_UQSS VCMPNLTPD
    +syn keyword nasmInstructionAVX512 VCMPNLTPS VCMPNLTSD VCMPNLTSS VCMPNLT_USPD VCMPNLT_USPS
    +syn keyword nasmInstructionAVX512 VCMPNLT_USSD VCMPNLT_USSS VCMPNLEPD VCMPNLEPS VCMPNLESD
    +syn keyword nasmInstructionAVX512 VCMPNLESS VCMPNLE_USPD VCMPNLE_USPS VCMPNLE_USSD VCMPNLE_USSS
    +syn keyword nasmInstructionAVX512 VCMPORDPD VCMPORDPS VCMPORDSD VCMPORDSS VCMPORD_QPD
    +syn keyword nasmInstructionAVX512 VCMPORD_QPS VCMPORD_QSD VCMPORD_QSS VCMPEQ_UQPD VCMPEQ_UQPS
    +syn keyword nasmInstructionAVX512 VCMPEQ_UQSD VCMPEQ_UQSS VCMPNGEPD VCMPNGEPS VCMPNGESD
    +syn keyword nasmInstructionAVX512 VCMPNGESS VCMPNGE_USPD VCMPNGE_USPS VCMPNGE_USSD VCMPNGE_USSS
    +syn keyword nasmInstructionAVX512 VCMPNGTPD VCMPNGTPS VCMPNGTSD VCMPNGTSS VCMPNGT_USPD
    +syn keyword nasmInstructionAVX512 VCMPNGT_USPS VCMPNGT_USSD VCMPNGT_USSS VCMPFALSEPD VCMPFALSEPS
    +syn keyword nasmInstructionAVX512 VCMPFALSESD VCMPFALSESS VCMPFALSE_OQPD VCMPFALSE_OQPS VCMPFALSE_OQSD
    +syn keyword nasmInstructionAVX512 VCMPFALSE_OQSS VCMPNEQ_OQPD VCMPNEQ_OQPS VCMPNEQ_OQSD VCMPNEQ_OQSS
    +syn keyword nasmInstructionAVX512 VCMPGEPD VCMPGEPS VCMPGESD VCMPGESS VCMPGE_OSPD
    +syn keyword nasmInstructionAVX512 VCMPGE_OSPS VCMPGE_OSSD VCMPGE_OSSS VCMPGTPD VCMPGTPS
    +syn keyword nasmInstructionAVX512 VCMPGTSD VCMPGTSS VCMPGT_OSPD VCMPGT_OSPS VCMPGT_OSSD
    +syn keyword nasmInstructionAVX512 VCMPGT_OSSS VCMPTRUEPD VCMPTRUEPS VCMPTRUESD VCMPTRUESS
    +syn keyword nasmInstructionAVX512 VCMPTRUE_UQPD VCMPTRUE_UQPS VCMPTRUE_UQSD VCMPTRUE_UQSS VCMPEQ_OSPD
    +syn keyword nasmInstructionAVX512 VCMPEQ_OSPS VCMPEQ_OSSD VCMPEQ_OSSS VCMPLT_OQPD VCMPLT_OQPS
    +syn keyword nasmInstructionAVX512 VCMPLT_OQSD VCMPLT_OQSS VCMPLE_OQPD VCMPLE_OQPS VCMPLE_OQSD
    +syn keyword nasmInstructionAVX512 VCMPLE_OQSS VCMPUNORD_SPD VCMPUNORD_SPS VCMPUNORD_SSD VCMPUNORD_SSS
    +syn keyword nasmInstructionAVX512 VCMPNEQ_USPD VCMPNEQ_USPS VCMPNEQ_USSD VCMPNEQ_USSS VCMPNLT_UQPD
    +syn keyword nasmInstructionAVX512 VCMPNLT_UQPS VCMPNLT_UQSD VCMPNLT_UQSS VCMPNLE_UQPD VCMPNLE_UQPS
    +syn keyword nasmInstructionAVX512 VCMPNLE_UQSD VCMPNLE_UQSS VCMPORD_SPD VCMPORD_SPS VCMPORD_SSD
    +syn keyword nasmInstructionAVX512 VCMPORD_SSS VCMPEQ_USPD VCMPEQ_USPS VCMPEQ_USSD VCMPEQ_USSS
    +syn keyword nasmInstructionAVX512 VCMPNGE_UQPD VCMPNGE_UQPS VCMPNGE_UQSD VCMPNGE_UQSS VCMPNGT_UQPD
    +syn keyword nasmInstructionAVX512 VCMPNGT_UQPS VCMPNGT_UQSD VCMPNGT_UQSS VCMPFALSE_OSPD VCMPFALSE_OSPS
    +syn keyword nasmInstructionAVX512 VCMPFALSE_OSSD VCMPFALSE_OSSS VCMPNEQ_OSPD VCMPNEQ_OSPS VCMPNEQ_OSSD
    +syn keyword nasmInstructionAVX512 VCMPNEQ_OSSS VCMPGE_OQPD VCMPGE_OQPS VCMPGE_OQSD VCMPGE_OQSS
    +syn keyword nasmInstructionAVX512 VCMPGT_OQPD VCMPGT_OQPS VCMPGT_OQSD VCMPGT_OQSS VCMPTRUE_USPD
    +syn keyword nasmInstructionAVX512 VCMPTRUE_USPS VCMPTRUE_USSD VCMPTRUE_USSS VCMPPD VCMPPS
    +syn keyword nasmInstructionAVX512 VCMPSD VCMPSS VCOMISD VCOMISS VCOMPRESSPD
    +syn keyword nasmInstructionAVX512 VCOMPRESSPS VCVTDQ2PD VCVTDQ2PS VCVTPD2DQ VCVTPD2PS
    +syn keyword nasmInstructionAVX512 VCVTPD2QQ VCVTPD2UDQ VCVTPD2UQQ VCVTPH2PS VCVTPS2DQ
    +syn keyword nasmInstructionAVX512 VCVTPS2PD VCVTPS2PH VCVTPS2QQ VCVTPS2UDQ VCVTPS2UQQ
    +syn keyword nasmInstructionAVX512 VCVTQQ2PD VCVTQQ2PS VCVTSD2SI VCVTSD2SS VCVTSD2USI
    +syn keyword nasmInstructionAVX512 VCVTSI2SD VCVTSI2SS VCVTSS2SD VCVTSS2SI VCVTSS2USI
    +syn keyword nasmInstructionAVX512 VCVTTPD2DQ VCVTTPD2QQ VCVTTPD2UDQ VCVTTPD2UQQ VCVTTPS2DQ
    +syn keyword nasmInstructionAVX512 VCVTTPS2QQ VCVTTPS2UDQ VCVTTPS2UQQ VCVTTSD2SI VCVTTSD2USI
    +syn keyword nasmInstructionAVX512 VCVTTSS2SI VCVTTSS2USI VCVTUDQ2PD VCVTUDQ2PS VCVTUQQ2PD
    +syn keyword nasmInstructionAVX512 VCVTUQQ2PS VCVTUSI2SD VCVTUSI2SS VDBPSADBW VDIVPD
    +syn keyword nasmInstructionAVX512 VDIVPS VDIVSD VDIVSS VEXP2PD VEXP2PS
    +syn keyword nasmInstructionAVX512 VEXPANDPD VEXPANDPS VEXTRACTF32X4 VEXTRACTF32X8 VEXTRACTF64X2
    +syn keyword nasmInstructionAVX512 VEXTRACTF64X4 VEXTRACTI32X4 VEXTRACTI32X8 VEXTRACTI64X2 VEXTRACTI64X4
    +syn keyword nasmInstructionAVX512 VEXTRACTPS VFIXUPIMMPD VFIXUPIMMPS VFIXUPIMMSD VFIXUPIMMSS
    +syn keyword nasmInstructionAVX512 VFMADD132PD VFMADD132PS VFMADD132SD VFMADD132SS VFMADD213PD
    +syn keyword nasmInstructionAVX512 VFMADD213PS VFMADD213SD VFMADD213SS VFMADD231PD VFMADD231PS
    +syn keyword nasmInstructionAVX512 VFMADD231SD VFMADD231SS VFMADDSUB132PD VFMADDSUB132PS VFMADDSUB213PD
    +syn keyword nasmInstructionAVX512 VFMADDSUB213PS VFMADDSUB231PD VFMADDSUB231PS VFMSUB132PD VFMSUB132PS
    +syn keyword nasmInstructionAVX512 VFMSUB132SD VFMSUB132SS VFMSUB213PD VFMSUB213PS VFMSUB213SD
    +syn keyword nasmInstructionAVX512 VFMSUB213SS VFMSUB231PD VFMSUB231PS VFMSUB231SD VFMSUB231SS
    +syn keyword nasmInstructionAVX512 VFMSUBADD132PD VFMSUBADD132PS VFMSUBADD213PD VFMSUBADD213PS VFMSUBADD231PD
    +syn keyword nasmInstructionAVX512 VFMSUBADD231PS VFNMADD132PD VFNMADD132PS VFNMADD132SD VFNMADD132SS
    +syn keyword nasmInstructionAVX512 VFNMADD213PD VFNMADD213PS VFNMADD213SD VFNMADD213SS VFNMADD231PD
    +syn keyword nasmInstructionAVX512 VFNMADD231PS VFNMADD231SD VFNMADD231SS VFNMSUB132PD VFNMSUB132PS
    +syn keyword nasmInstructionAVX512 VFNMSUB132SD VFNMSUB132SS VFNMSUB213PD VFNMSUB213PS VFNMSUB213SD
    +syn keyword nasmInstructionAVX512 VFNMSUB213SS VFNMSUB231PD VFNMSUB231PS VFNMSUB231SD VFNMSUB231SS
    +syn keyword nasmInstructionAVX512 VFPCLASSPD VFPCLASSPS VFPCLASSSD VFPCLASSSS VGATHERDPD
    +syn keyword nasmInstructionAVX512 VGATHERDPS VGATHERPF0DPD VGATHERPF0DPS VGATHERPF0QPD VGATHERPF0QPS
    +syn keyword nasmInstructionAVX512 VGATHERPF1DPD VGATHERPF1DPS VGATHERPF1QPD VGATHERPF1QPS VGATHERQPD
    +syn keyword nasmInstructionAVX512 VGATHERQPS VGETEXPPD VGETEXPPS VGETEXPSD VGETEXPSS
    +syn keyword nasmInstructionAVX512 VGETMANTPD VGETMANTPS VGETMANTSD VGETMANTSS VINSERTF32X4
    +syn keyword nasmInstructionAVX512 VINSERTF32X8 VINSERTF64X2 VINSERTF64X4 VINSERTI32X4 VINSERTI32X8
    +syn keyword nasmInstructionAVX512 VINSERTI64X2 VINSERTI64X4 VINSERTPS VMAXPD VMAXPS
    +syn keyword nasmInstructionAVX512 VMAXSD VMAXSS VMINPD VMINPS VMINSD
    +syn keyword nasmInstructionAVX512 VMINSS VMOVAPD VMOVAPS VMOVD VMOVDDUP
    +syn keyword nasmInstructionAVX512 VMOVDQA32 VMOVDQA64 VMOVDQU16 VMOVDQU32 VMOVDQU64
    +syn keyword nasmInstructionAVX512 VMOVDQU8 VMOVHLPS VMOVHPD VMOVHPS VMOVLHPS
    +syn keyword nasmInstructionAVX512 VMOVLPD VMOVLPS VMOVNTDQ VMOVNTDQA VMOVNTPD
    +syn keyword nasmInstructionAVX512 VMOVNTPS VMOVQ VMOVSD VMOVSHDUP VMOVSLDUP
    +syn keyword nasmInstructionAVX512 VMOVSS VMOVUPD VMOVUPS VMULPD VMULPS
    +syn keyword nasmInstructionAVX512 VMULSD VMULSS VORPD VORPS VPABSB
    +syn keyword nasmInstructionAVX512 VPABSD VPABSQ VPABSW VPACKSSDW VPACKSSWB
    +syn keyword nasmInstructionAVX512 VPACKUSDW VPACKUSWB VPADDB VPADDD VPADDQ
    +syn keyword nasmInstructionAVX512 VPADDSB VPADDSW VPADDUSB VPADDUSW VPADDW
    +syn keyword nasmInstructionAVX512 VPALIGNR VPANDD VPANDND VPANDNQ VPANDQ
    +syn keyword nasmInstructionAVX512 VPAVGB VPAVGW VPBLENDMB VPBLENDMD VPBLENDMQ
    +syn keyword nasmInstructionAVX512 VPBLENDMW VPBROADCASTB VPBROADCASTD VPBROADCASTMB2Q VPBROADCASTMW2D
    +syn keyword nasmInstructionAVX512 VPBROADCASTQ VPBROADCASTW VPCMPEQB VPCMPEQD VPCMPEQQ
    +syn keyword nasmInstructionAVX512 VPCMPEQW VPCMPGTB VPCMPGTD VPCMPGTQ VPCMPGTW
    +syn keyword nasmInstructionAVX512 VPCMPEQB VPCMPEQD VPCMPEQQ VPCMPEQUB VPCMPEQUD
    +syn keyword nasmInstructionAVX512 VPCMPEQUQ VPCMPEQUW VPCMPEQW VPCMPGEB VPCMPGED
    +syn keyword nasmInstructionAVX512 VPCMPGEQ VPCMPGEUB VPCMPGEUD VPCMPGEUQ VPCMPGEUW
    +syn keyword nasmInstructionAVX512 VPCMPGEW VPCMPGTB VPCMPGTD VPCMPGTQ VPCMPGTUB
    +syn keyword nasmInstructionAVX512 VPCMPGTUD VPCMPGTUQ VPCMPGTUW VPCMPGTW VPCMPLEB
    +syn keyword nasmInstructionAVX512 VPCMPLED VPCMPLEQ VPCMPLEUB VPCMPLEUD VPCMPLEUQ
    +syn keyword nasmInstructionAVX512 VPCMPLEUW VPCMPLEW VPCMPLTB VPCMPLTD VPCMPLTQ
    +syn keyword nasmInstructionAVX512 VPCMPLTUB VPCMPLTUD VPCMPLTUQ VPCMPLTUW VPCMPLTW
    +syn keyword nasmInstructionAVX512 VPCMPNEQB VPCMPNEQD VPCMPNEQQ VPCMPNEQUB VPCMPNEQUD
    +syn keyword nasmInstructionAVX512 VPCMPNEQUQ VPCMPNEQUW VPCMPNEQW VPCMPNGTB VPCMPNGTD
    +syn keyword nasmInstructionAVX512 VPCMPNGTQ VPCMPNGTUB VPCMPNGTUD VPCMPNGTUQ VPCMPNGTUW
    +syn keyword nasmInstructionAVX512 VPCMPNGTW VPCMPNLEB VPCMPNLED VPCMPNLEQ VPCMPNLEUB
    +syn keyword nasmInstructionAVX512 VPCMPNLEUD VPCMPNLEUQ VPCMPNLEUW VPCMPNLEW VPCMPNLTB
    +syn keyword nasmInstructionAVX512 VPCMPNLTD VPCMPNLTQ VPCMPNLTUB VPCMPNLTUD VPCMPNLTUQ
    +syn keyword nasmInstructionAVX512 VPCMPNLTUW VPCMPNLTW VPCMPB VPCMPD VPCMPQ
    +syn keyword nasmInstructionAVX512 VPCMPUB VPCMPUD VPCMPUQ VPCMPUW VPCMPW
    +syn keyword nasmInstructionAVX512 VPCOMPRESSD VPCOMPRESSQ VPCONFLICTD VPCONFLICTQ VPERMB
    +syn keyword nasmInstructionAVX512 VPERMD VPERMI2B VPERMI2D VPERMI2PD VPERMI2PS
    +syn keyword nasmInstructionAVX512 VPERMI2Q VPERMI2W VPERMILPD VPERMILPS VPERMPD
    +syn keyword nasmInstructionAVX512 VPERMPS VPERMQ VPERMT2B VPERMT2D VPERMT2PD
    +syn keyword nasmInstructionAVX512 VPERMT2PS VPERMT2Q VPERMT2W VPERMW VPEXPANDD
    +syn keyword nasmInstructionAVX512 VPEXPANDQ VPEXTRB VPEXTRD VPEXTRQ VPEXTRW
    +syn keyword nasmInstructionAVX512 VPGATHERDD VPGATHERDQ VPGATHERQD VPGATHERQQ VPINSRB
    +syn keyword nasmInstructionAVX512 VPINSRD VPINSRQ VPINSRW VPLZCNTD VPLZCNTQ
    +syn keyword nasmInstructionAVX512 VPMADD52HUQ VPMADD52LUQ VPMADDUBSW VPMADDWD VPMAXSB
    +syn keyword nasmInstructionAVX512 VPMAXSD VPMAXSQ VPMAXSW VPMAXUB VPMAXUD
    +syn keyword nasmInstructionAVX512 VPMAXUQ VPMAXUW VPMINSB VPMINSD VPMINSQ
    +syn keyword nasmInstructionAVX512 VPMINSW VPMINUB VPMINUD VPMINUQ VPMINUW
    +syn keyword nasmInstructionAVX512 VPMOVB2M VPMOVD2M VPMOVDB VPMOVDW VPMOVM2B
    +syn keyword nasmInstructionAVX512 VPMOVM2D VPMOVM2Q VPMOVM2W VPMOVQ2M VPMOVQB
    +syn keyword nasmInstructionAVX512 VPMOVQD VPMOVQW VPMOVSDB VPMOVSDW VPMOVSQB
    +syn keyword nasmInstructionAVX512 VPMOVSQD VPMOVSQW VPMOVSWB VPMOVSXBD VPMOVSXBQ
    +syn keyword nasmInstructionAVX512 VPMOVSXBW VPMOVSXDQ VPMOVSXWD VPMOVSXWQ VPMOVUSDB
    +syn keyword nasmInstructionAVX512 VPMOVUSDW VPMOVUSQB VPMOVUSQD VPMOVUSQW VPMOVUSWB
    +syn keyword nasmInstructionAVX512 VPMOVW2M VPMOVWB VPMOVZXBD VPMOVZXBQ VPMOVZXBW
    +syn keyword nasmInstructionAVX512 VPMOVZXDQ VPMOVZXWD VPMOVZXWQ VPMULDQ VPMULHRSW
    +syn keyword nasmInstructionAVX512 VPMULHUW VPMULHW VPMULLD VPMULLQ VPMULLW
    +syn keyword nasmInstructionAVX512 VPMULTISHIFTQB VPMULUDQ VPORD VPORQ VPROLD
    +syn keyword nasmInstructionAVX512 VPROLQ VPROLVD VPROLVQ VPRORD VPRORQ
    +syn keyword nasmInstructionAVX512 VPRORVD VPRORVQ VPSADBW VPSCATTERDD VPSCATTERDQ
    +syn keyword nasmInstructionAVX512 VPSCATTERQD VPSCATTERQQ VPSHUFB VPSHUFD VPSHUFHW
    +syn keyword nasmInstructionAVX512 VPSHUFLW VPSLLD VPSLLDQ VPSLLQ VPSLLVD
    +syn keyword nasmInstructionAVX512 VPSLLVQ VPSLLVW VPSLLW VPSRAD VPSRAQ
    +syn keyword nasmInstructionAVX512 VPSRAVD VPSRAVQ VPSRAVW VPSRAW VPSRLD
    +syn keyword nasmInstructionAVX512 VPSRLDQ VPSRLQ VPSRLVD VPSRLVQ VPSRLVW
    +syn keyword nasmInstructionAVX512 VPSRLW VPSUBB VPSUBD VPSUBQ VPSUBSB
    +syn keyword nasmInstructionAVX512 VPSUBSW VPSUBUSB VPSUBUSW VPSUBW VPTERNLOGD
    +syn keyword nasmInstructionAVX512 VPTERNLOGQ VPTESTMB VPTESTMD VPTESTMQ VPTESTMW
    +syn keyword nasmInstructionAVX512 VPTESTNMB VPTESTNMD VPTESTNMQ VPTESTNMW VPUNPCKHBW
    +syn keyword nasmInstructionAVX512 VPUNPCKHDQ VPUNPCKHQDQ VPUNPCKHWD VPUNPCKLBW VPUNPCKLDQ
    +syn keyword nasmInstructionAVX512 VPUNPCKLQDQ VPUNPCKLWD VPXORD VPXORQ VRANGEPD
    +syn keyword nasmInstructionAVX512 VRANGEPS VRANGESD VRANGESS VRCP14PD VRCP14PS
    +syn keyword nasmInstructionAVX512 VRCP14SD VRCP14SS VRCP28PD VRCP28PS VRCP28SD
    +syn keyword nasmInstructionAVX512 VRCP28SS VREDUCEPD VREDUCEPS VREDUCESD VREDUCESS
    +syn keyword nasmInstructionAVX512 VRNDSCALEPD VRNDSCALEPS VRNDSCALESD VRNDSCALESS VRSQRT14PD
    +syn keyword nasmInstructionAVX512 VRSQRT14PS VRSQRT14SD VRSQRT14SS VRSQRT28PD VRSQRT28PS
    +syn keyword nasmInstructionAVX512 VRSQRT28SD VRSQRT28SS VSCALEFPD VSCALEFPS VSCALEFSD
    +syn keyword nasmInstructionAVX512 VSCALEFSS VSCATTERDPD VSCATTERDPS VSCATTERPF0DPD VSCATTERPF0DPS
    +syn keyword nasmInstructionAVX512 VSCATTERPF0QPD VSCATTERPF0QPS VSCATTERPF1DPD VSCATTERPF1DPS VSCATTERPF1QPD
    +syn keyword nasmInstructionAVX512 VSCATTERPF1QPS VSCATTERQPD VSCATTERQPS VSHUFF32X4 VSHUFF64X2
    +syn keyword nasmInstructionAVX512 VSHUFI32X4 VSHUFI64X2 VSHUFPD VSHUFPS VSQRTPD
    +syn keyword nasmInstructionAVX512 VSQRTPS VSQRTSD VSQRTSS VSUBPD VSUBPS
    +syn keyword nasmInstructionAVX512 VSUBSD VSUBSS VUCOMISD VUCOMISS VUNPCKHPD
    +syn keyword nasmInstructionAVX512 VUNPCKHPS VUNPCKLPD VUNPCKLPS VXORPD VXORPS
    +" PROTECTION
    +syn keyword nasmInstructionPROTECTION RDPKRU WRPKRU
    +" RDPID
    +syn keyword nasmInstructionRDPID RDPID 
    +" NMEM
    +syn keyword nasmInstructionNMEM CLFLUSHOPT CLWB PCOMMIT
    +syn keyword nasmInstructionNMEM CLZERO
    +" INTEL_EXTENSIONS
    +syn keyword nasmInstructionINTEL_EXTENSIONS CLDEMOTE MOVDIRI MOVDIR64B PCONFIG TPAUSE
    +syn keyword nasmInstructionINTEL_EXTENSIONS UMONITOR UMWAIT WBNOINVD
    +" GALOISFIELD
    +syn keyword nasmInstructionGALOISFIELD GF2P8AFFINEINVQB VGF2P8AFFINEINVQB GF2P8AFFINEQB VGF2P8AFFINEQB GF2P8MULB
    +syn keyword nasmInstructionGALOISFIELD VGF2P8MULB
    +" AVX512_BMI
    +syn keyword nasmInstructionAVX512_BMI VPCOMPRESSB VPCOMPRESSW VPEXPANDB VPEXPANDW VPSHLDW
    +syn keyword nasmInstructionAVX512_BMI VPSHLDD VPSHLDQ VPSHLDVW VPSHLDVD VPSHLDVQ
    +syn keyword nasmInstructionAVX512_BMI VPSHRDW VPSHRDD VPSHRDQ VPSHRDVW VPSHRDVD
    +syn keyword nasmInstructionAVX512_BMI VPSHRDVQ
    +" AVX512_VNNI
    +syn keyword nasmInstructionAVX512_VNNI VPDPBUSD VPDPBUSDS VPDPWSSD VPDPWSSDS
    +" AVX512_BITALG
    +syn keyword nasmInstructionAVX512_BITALG VPOPCNTB VPOPCNTW VPOPCNTD VPOPCNTQ VPSHUFBITQMB
    +" AVX512_FMA
    +syn keyword nasmInstructionAVX512_FMA V4FMADDPS V4FNMADDPS V4FMADDSS V4FNMADDSS
    +" AVX512_DP
    +syn keyword nasmInstructionAVX512_DP V4DPWSSDS V4DPWSSD
    +" SGX
    +syn keyword nasmInstructionSGX ENCLS ENCLU ENCLV
    +" CET
    +syn keyword nasmInstructionCET CLRSSBSY ENDBR32 ENDBR64 INCSSPD INCSSPQ
    +syn keyword nasmInstructionCET RDSSPD RDSSPQ RSTORSSP SAVEPREVSSP SETSSBSY
    +syn keyword nasmInstructionCET WRUSSD WRUSSQ WRSSD WRSSQ
    +" INTEL_EXTENSION
    +syn keyword nasmInstructionINTEL_EXTENSION ENQCMD ENQCMDS PCONFIG SERIALIZE WBNOINVD
    +syn keyword nasmInstructionINTEL_EXTENSION XRESLDTRK XSUSLDTRK
    +" AVX512_BF16
    +syn keyword nasmInstructionAVX512_BF16 VCVTNE2PS2BF16 VCVTNEPS2BF16 VDPBF16PS
    +" AVX512_MASK_INTERSECT
    +syn keyword nasmInstructionAVX512_MASK_INTERSECT VP2INTERSECTD 
    +" AMX
    +syn keyword nasmInstructionAMX LDTILECFG STTILECFG TDPBF16PS TDPBSSD TDPBSUD
    +syn keyword nasmInstructionAMX TDPBUSD TDPBUUD TILELOADD TILELOADDT1 TILERELEASE
    +syn keyword nasmInstructionAMX TILESTORED TILEZERO
    +" AVX512_FP16
    +syn keyword nasmInstructionAVX512_FP16 VADDPH VADDSH VCMPPH VCMPSH VCOMISH
    +syn keyword nasmInstructionAVX512_FP16 VCVTDQ2PH VCVTPD2PH VCVTPH2DQ VCVTPH2PD VCVTPH2PS
    +syn keyword nasmInstructionAVX512_FP16 VCVTPH2PSX VCVTPH2QQ VCVTPH2UDQ VCVTPH2UQQ VCVTPH2UW
    +syn keyword nasmInstructionAVX512_FP16 VCVTPH2W VCVTPS2PH VCVTQQ2PH VCVTSD2SH VCVTSH2SD
    +syn keyword nasmInstructionAVX512_FP16 VCVTSH2SI VCVTSH2SS VCVTSH2USI VCVTSI2SH VCVTSS2SH
    +syn keyword nasmInstructionAVX512_FP16 VCVTTPH2DQ VCVTTPH2QQ VCVTTPH2UDQ VCVTTPH2UQQ VCVTTPH2UW
    +syn keyword nasmInstructionAVX512_FP16 VCVTTPH2W VCVTTSH2SI VCVTTSH2USI VCVTUDQ2PH VCVTUQQ2PH
    +syn keyword nasmInstructionAVX512_FP16 VCVTUSI2SH VCVTUSI2SS VCVTUW2PH VCVTW2PH VDIVPH
    +syn keyword nasmInstructionAVX512_FP16 VDIVSH VFCMADDCPH VFMADDCPH VFCMADDCSH VFMADDCSH
    +syn keyword nasmInstructionAVX512_FP16 VFCMULCPCH VFMULCPCH VFCMULCSH VFMULCSH VFMADDSUB132PH
    +syn keyword nasmInstructionAVX512_FP16 VFMADDSUB213PH VFMADDSUB231PH VFMSUBADD132PH VFMSUBADD213PH VFMSUBADD231PH
    +syn keyword nasmInstructionAVX512_FP16 VPMADD132PH VPMADD213PH VPMADD231PH VFMADD132PH VFMADD213PH
    +syn keyword nasmInstructionAVX512_FP16 VFMADD231PH VPMADD132SH VPMADD213SH VPMADD231SH VPNMADD132SH
    +syn keyword nasmInstructionAVX512_FP16 VPNMADD213SH VPNMADD231SH VPMSUB132PH VPMSUB213PH VPMSUB231PH
    +syn keyword nasmInstructionAVX512_FP16 VFMSUB132PH VFMSUB213PH VFMSUB231PH VPMSUB132SH VPMSUB213SH
    +syn keyword nasmInstructionAVX512_FP16 VPMSUB231SH VPNMSUB132SH VPNMSUB213SH VPNMSUB231SH VFPCLASSPH
    +syn keyword nasmInstructionAVX512_FP16 VFPCLASSSH VGETEXPPH VGETEXPSH VGETMANTPH VGETMANTSH
    +syn keyword nasmInstructionAVX512_FP16 VGETMAXPH VGETMAXSH VGETMINPH VGETMINSH VMOVSH
    +syn keyword nasmInstructionAVX512_FP16 VMOVW VMULPH VMULSH VRCPPH VRCPSH
    +syn keyword nasmInstructionAVX512_FP16 VREDUCEPH VREDUCESH VENDSCALEPH VENDSCALESH VRSQRTPH
    +syn keyword nasmInstructionAVX512_FP16 VRSQRTSH VSCALEFPH VSCALEFSH VSQRTPH VSQRTSH
    +syn keyword nasmInstructionAVX512_FP16 VSUBPH VSUBSH VUCOMISH
    +" RAO-INT
    +syn keyword nasmInstructionRAO_INT AADD AAND AXOR
    +" USERINT
    +syn keyword nasmInstructionUSERINT CLUI SENDUIPI STUI TESTUI UIRET
    +" CMPCCXADD
    +syn keyword nasmInstructionCMPCCXADD CMPOXADD CMPNOXADD CMPBXADD CMPNBXADD CMPZXADD
    +syn keyword nasmInstructionCMPCCXADD CMPNZXADD CMPBEXADD CMPNBEXADD CMPSXADD CMPNSXADD
    +syn keyword nasmInstructionCMPCCXADD CMPPXADD CMPNPXADD CMPLXADD CMPNLXADD CMPLEXADD
    +syn keyword nasmInstructionCMPCCXADD CMPNLEXADD
    +" FRET
    +syn keyword nasmInstructionFRET ERETS ERETU LKGS
    +" WRMSRNS_MSRLIST
    +syn keyword nasmInstructionWRMSRNS_MSRLIST WRMSRNS RDMSRLIST WRMSRLIST
    +" HRESET
    +syn keyword nasmInstructionHRESET HRESET 
    +" PTWRITE
    +syn keyword nasmInstructionPTWRITE PTWRITE 
    +" HINTNOP
    +syn keyword nasmInstructionHINTNOP HINT_NOP0 HINT_NOP1 HINT_NOP2 HINT_NOP3 HINT_NOP4
    +syn keyword nasmInstructionHINTNOP HINT_NOP5 HINT_NOP6 HINT_NOP7 HINT_NOP8 HINT_NOP9
    +syn keyword nasmInstructionHINTNOP HINT_NOP10 HINT_NOP11 HINT_NOP12 HINT_NOP13 HINT_NOP14
    +syn keyword nasmInstructionHINTNOP HINT_NOP15 HINT_NOP16 HINT_NOP17 HINT_NOP18 HINT_NOP19
    +syn keyword nasmInstructionHINTNOP HINT_NOP20 HINT_NOP21 HINT_NOP22 HINT_NOP23 HINT_NOP24
    +syn keyword nasmInstructionHINTNOP HINT_NOP25 HINT_NOP26 HINT_NOP27 HINT_NOP28 HINT_NOP29
    +syn keyword nasmInstructionHINTNOP HINT_NOP30 HINT_NOP31 HINT_NOP32 HINT_NOP33 HINT_NOP34
    +syn keyword nasmInstructionHINTNOP HINT_NOP35 HINT_NOP36 HINT_NOP37 HINT_NOP38 HINT_NOP39
    +syn keyword nasmInstructionHINTNOP HINT_NOP40 HINT_NOP41 HINT_NOP42 HINT_NOP43 HINT_NOP44
    +syn keyword nasmInstructionHINTNOP HINT_NOP45 HINT_NOP46 HINT_NOP47 HINT_NOP48 HINT_NOP49
    +syn keyword nasmInstructionHINTNOP HINT_NOP50 HINT_NOP51 HINT_NOP52 HINT_NOP53 HINT_NOP54
    +syn keyword nasmInstructionHINTNOP HINT_NOP55 HINT_NOP56 HINT_NOP57 HINT_NOP58 HINT_NOP59
    +syn keyword nasmInstructionHINTNOP HINT_NOP60 HINT_NOP61 HINT_NOP62 HINT_NOP63
    +"  Cyrix instructions (requires Cyrix processor)
    +syn keyword nasmCrxInstruction	PADDSIW PAVEB PDISTIB PMAGW PMULHRWC PMULHRIW
    +syn keyword nasmCrxInstruction	PMVGEZB PMVLZB PMVNZB PMVZB PSUBSIW
    +syn keyword nasmCrxInstruction	RDSHR RSDC RSLDT SMINT SMINTOLD SVDC SVLDT SVTS
    +syn keyword nasmCrxInstruction	WRSHR BB0_RESET BB1_RESET
    +syn keyword nasmCrxInstruction	CPU_WRITE CPU_READ DMINT RDM PMACHRIW
    +
    +" Debugging Instructions: (privileged)
    +syn keyword nasmDbgInstruction	INT1 INT3 RDMSR RDTSC RDPMC WRMSR INT01 INT03
    +
    +
    +" Synchronize Syntax:
    +syn sync clear
    +syn sync minlines=50		"for multiple region nesting
    +syn sync match  nasmSync	grouphere nasmMacroDef "^\s*%i\=macro\>"me=s-1
    +syn sync match	nasmSync	grouphere NONE	       "^\s*%endmacro\>"
    +
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +" Sub Links:
    +hi def link nasmInMacDirective	nasmDirective
    +hi def link nasmInMacLabel		nasmLocalLabel
    +hi def link nasmInMacLblWarn	nasmLabelWarn
    +hi def link nasmInMacMacro		nasmMacro
    +hi def link nasmInMacParam		nasmMacro
    +hi def link nasmInMacParamNum	nasmDecNumber
    +hi def link nasmInMacPreCondit	nasmPreCondit
    +hi def link nasmInMacPreProc	nasmPreProc
    +hi def link nasmInPreCondit	nasmPreCondit
    +hi def link nasmInStructure	nasmStructure
    +hi def link nasmStructureLabel	nasmStructure
    +
    +" Comment Group:
    +hi def link nasmComment		Comment
    +hi def link nasmSpecialComment	SpecialComment
    +hi def link nasmInCommentTodo	Todo
    +
    +" Constant Group:
    +hi def link nasmString		String
    +hi def link nasmCString	String
    +hi def link nasmStringError	Error
    +hi def link nasmCStringEscape	SpecialChar
    +hi def link nasmCStringFormat	SpecialChar
    +hi def link nasmBinNumber		Number
    +hi def link nasmOctNumber		Number
    +hi def link nasmDecNumber		Number
    +hi def link nasmHexNumber		Number
    +hi def link nasmBinFloat		Float
    +hi def link nasmOctFloat		Float
    +hi def link nasmDecFloat		Float
    +hi def link nasmHexFloat		Float
    +hi def link nasmSpecFloat		Float
    +hi def link nasmBcdConst		Float
    +hi def link nasmNumberError	Error
    +
    +" Identifier Group:
    +hi def link nasmLabel		Identifier
    +hi def link nasmLocalLabel		Identifier
    +hi def link nasmSpecialLabel	Special
    +hi def link nasmLabelError		Error
    +hi def link nasmLabelWarn		Todo
    +
    +" PreProc Group:
    +hi def link nasmPreProc		PreProc
    +hi def link nasmDefine		Define
    +hi def link nasmInclude		Include
    +hi def link nasmMacro		Macro
    +hi def link nasmPreCondit		PreCondit
    +hi def link nasmPreProcError	Error
    +hi def link nasmPreProcWarn	Todo
    +
    +" Type Group:
    +hi def link nasmType		Type
    +hi def link nasmStorage		StorageClass
    +hi def link nasmStructure		Structure
    +hi def link nasmTypeError		Error
    +
    +" Directive Group:
    +hi def link nasmConstant		Constant
    +hi def link nasmInstrModifier	Operator
    +hi def link nasmRepeat		Repeat
    +hi def link nasmDirective		Keyword
    +hi def link nasmStdDirective	Operator
    +hi def link nasmFmtDirective	Keyword
    +
    +" Register Group:
    +hi def link nasmRegisterError	Error
    +hi def link nasmCtrlRegister	Special
    +hi def link nasmDebugRegister	Debug
    +hi def link nasmTestRegister	Special
    +hi def link nasmRegisterError	Error
    +hi def link nasmMemRefError	Error
    +
    +" Instruction Group:
    +hi def link nasmInstructnError	Error
    +hi def link nasmCrxInstruction	Special
    +hi def link nasmDbgInstruction	Debug
    +hi def link nasmInstructionStandard Statement
    +hi def link nasmInstructionSIMD Statement
    +hi def link nasmInstructionSSE Statement
    +hi def link nasmInstructionXSAVE Statement
    +hi def link nasmInstructionMEM Statement
    +hi def link nasmInstructionMMX Statement
    +hi def link nasmInstruction3DNOW Statement
    +hi def link nasmInstructionSSE2 Statement
    +hi def link nasmInstructionWMMX Statement
    +hi def link nasmInstructionWSSD Statement
    +hi def link nasmInstructionPRESSCOT Statement
    +hi def link nasmInstructionVMXSVM Statement
    +hi def link nasmInstructionPTVMX Statement
    +hi def link nasmInstructionSEVSNPAMD Statement
    +hi def link nasmInstructionTEJAS Statement
    +hi def link nasmInstructionAMD_SSE4A Statement
    +hi def link nasmInstructionBARCELONA Statement
    +hi def link nasmInstructionPENRY Statement
    +hi def link nasmInstructionNEHALEM Statement
    +hi def link nasmInstructionSMX Statement
    +hi def link nasmInstructionGEODE_3DNOW Statement
    +hi def link nasmInstructionINTEL_NEW Statement
    +hi def link nasmInstructionAES Statement
    +hi def link nasmInstructionAVX_AES Statement
    +hi def link nasmInstructionINTEL_PUB Statement
    +hi def link nasmInstructionAVX Statement
    +hi def link nasmInstructionINTEL_CMUL Statement
    +hi def link nasmInstructionINTEL_AVX_CMUL Statement
    +hi def link nasmInstructionINTEL_FMA Statement
    +hi def link nasmInstructionINTEL_POST32 Statement
    +hi def link nasmInstructionSUPERVISOR Statement
    +hi def link nasmInstructionVIA_SECURITY Statement
    +hi def link nasmInstructionAMD_PROFILING Statement
    +hi def link nasmInstructionXOP_FMA4 Statement
    +hi def link nasmInstructionAVX2 Statement
    +hi def link nasmInstructionTRANSACTIONS Statement
    +hi def link nasmInstructionBMI_ABM Statement
    +hi def link nasmInstructionMPE Statement
    +hi def link nasmInstructionSHA Statement
    +hi def link nasmInstructionSM3 Statement
    +hi def link nasmInstructionSM4 Statement
    +hi def link nasmInstructionAVX_NOEXCEPT Statement
    +hi def link nasmInstructionAVX_VECTOR_NN Statement
    +hi def link nasmInstructionAVX_IFMA Statement
    +hi def link nasmInstructionAVX512_MASK Statement
    +hi def link nasmInstructionAVX512_MASK_REG Statement
    +hi def link nasmInstructionAVX512 Statement
    +hi def link nasmInstructionPROTECTION Statement
    +hi def link nasmInstructionRDPID Statement
    +hi def link nasmInstructionNMEM Statement
    +hi def link nasmInstructionINTEL_EXTENSIONS Statement
    +hi def link nasmInstructionGALOISFIELD Statement
    +hi def link nasmInstructionAVX512_BMI Statement
    +hi def link nasmInstructionAVX512_VNNI Statement
    +hi def link nasmInstructionAVX512_BITALG Statement
    +hi def link nasmInstructionAVX512_FMA Statement
    +hi def link nasmInstructionAVX512_DP Statement
    +hi def link nasmInstructionSGX Statement
    +hi def link nasmInstructionCET Statement
    +hi def link nasmInstructionINTEL_EXTENSION Statement
    +hi def link nasmInstructionAVX512_BF16 Statement
    +hi def link nasmInstructionAVX512_MASK_INTERSECT Statement
    +hi def link nasmInstructionAMX Statement
    +hi def link nasmInstructionAVX512_FP16 Statement
    +hi def link nasmInstructionRAO_INT Statement
    +hi def link nasmInstructionUSERINT Statement
    +hi def link nasmInstructionCMPCCXADD Statement
    +hi def link nasmInstructionFRET Statement
    +hi def link nasmInstructionWRMSRNS_MSRLIST Statement
    +hi def link nasmInstructionHRESET Statement
    +hi def link nasmInstructionHINTNOP Statement
    +hi def link nasmInstructionPTWRITE Statement
    +
    +let b:current_syntax = "nasm"
    +
    +" vim:ts=8 sw=4
    diff --git a/.config/vim/syntax/nastran.vim b/.config/vim/syntax/nastran.vim
    new file mode 100644
    index 0000000..239fd6e
    --- /dev/null
    +++ b/.config/vim/syntax/nastran.vim
    @@ -0,0 +1,181 @@
    +" Vim syntax file
    +" Language: NASTRAN input/DMAP
    +" Maintainer: Tom Kowalski 
    +" Last change: April 27, 2001
    +"  Thanks to the authors and maintainers of fortran.vim.
    +"		Since DMAP shares some traits with fortran, this syntax file
    +"		is based on the fortran.vim syntax file.
    +"----------------------------------------------------------------------
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +" DMAP is not case dependent
    +syn case ignore
    +"
    +"--------------------DMAP SYNTAX---------------------------------------
    +"
    +" -------Executive Modules and Statements
    +"
    +syn keyword nastranDmapexecmod	       call dbview delete end equiv equivx exit
    +syn keyword nastranDmapexecmod	       file message purge purgex return subdmap
    +syn keyword nastranDmapType	       type
    +syn keyword nastranDmapLabel  go to goto
    +syn keyword nastranDmapRepeat  if else elseif endif then
    +syn keyword nastranDmapRepeat  do while
    +syn region nastranDmapString  start=+"+ end=+"+ oneline
    +syn region nastranDmapString  start=+'+ end=+'+ oneline
    +" If you don't like initial tabs in dmap (or at all)
    +"syn match nastranDmapIniTab  "^\t.*$"
    +"syn match nastranDmapTab   "\t"
    +
    +" Any integer
    +syn match nastranDmapNumber  "-\=\<[0-9]\+\>"
    +" floating point number, with dot, optional exponent
    +syn match nastranDmapFloat  "\<[0-9]\+\.[0-9]*\([edED][-+]\=[0-9]\+\)\=\>"
    +" floating point number, starting with a dot, optional exponent
    +syn match nastranDmapFloat  "\.[0-9]\+\([edED][-+]\=[0-9]\+\)\=\>"
    +" floating point number, without dot, with exponent
    +syn match nastranDmapFloat  "\<[0-9]\+[edED][-+]\=[0-9]\+\>"
    +
    +syn match nastranDmapLogical "\(true\|false\)"
    +
    +syn match nastranDmapPreCondit  "^#define\>"
    +syn match nastranDmapPreCondit  "^#include\>"
    +"
    +" -------Comments may be contained in another line.
    +"
    +syn match nastranDmapComment "^[\$].*$"
    +syn match nastranDmapComment "\$.*$"
    +syn match nastranDmapComment "^[\$].*$" contained
    +syn match nastranDmapComment "\$.*$"  contained
    +" Treat all past 72nd column as a comment. Do not work with tabs!
    +" Breaks down when 72-73rd column is in another match (eg number or keyword)
    +syn match  nastranDmapComment  "^.\{-72}.*$"lc=72 contained
    +
    +"
    +" -------Utility Modules
    +"
    +syn keyword nastranDmapUtilmod	       append copy dbc dbdict dbdir dmin drms1
    +syn keyword nastranDmapUtilmod	       dtiin eltprt ifp ifp1 inputt2 inputt4 lamx
    +syn keyword nastranDmapUtilmod	       matgen matgpr matmod matpch matprn matprt
    +syn keyword nastranDmapUtilmod	       modtrl mtrxin ofp output2 output4 param
    +syn keyword nastranDmapUtilmod	       paraml paramr prtparam pvt scalar
    +syn keyword nastranDmapUtilmod	       seqp setval tabedit tabprt tabpt vec vecplot
    +syn keyword nastranDmapUtilmod	       xsort
    +"
    +" -------Matrix Modules
    +"
    +syn keyword nastranDmapMatmod	       add add5 cead dcmp decomp diagonal fbs merge
    +syn keyword nastranDmapMatmod	       mpyad norm read reigl smpyad solve solvit
    +syn keyword nastranDmapMatmod	       trnsp umerge umerge1 upartn dmiin partn
    +syn region  nastranDmapMatmod	       start=+^ *[Dd][Mm][Ii]+ end=+[\/]+
    +"
    +" -------Implicit Functions
    +"
    +syn keyword nastranDmapImplicit abs acos acosh andl asin asinh atan atan2
    +syn keyword nastranDmapImplicit atanh atanh2 char clen clock cmplx concat1
    +syn keyword nastranDmapImplicit concat2 concat3 conjg cos cosh dble diagoff
    +syn keyword nastranDmapImplicit diagon dim dlablank dlxblank dprod eqvl exp
    +syn keyword nastranDmapImplicit getdiag getsys ichar imag impl index indexstr
    +syn keyword nastranDmapImplicit int itol leq lge lgt lle llt lne log log10
    +syn keyword nastranDmapImplicit logx ltoi mcgetsys mcputsys max min mod neqvl
    +syn keyword nastranDmapImplicit nint noop normal notl numeq numge numgt numle
    +syn keyword nastranDmapImplicit numlt numne orl pi precison putdiag putsys
    +syn keyword nastranDmapImplicit rand rdiagon real rtimtogo setcore sign sin
    +syn keyword nastranDmapImplicit sinh sngl sprod sqrt substrin tan tanh
    +syn keyword nastranDmapImplicit timetogo wlen xorl
    +"
    +"
    +"--------------------INPUT FILE SYNTAX---------------------------------------
    +"
    +"
    +" -------Nastran Statement
    +"
    +syn keyword nastranNastranCard		 nastran
    +"
    +" -------The File Management Section (FMS)
    +"
    +syn region nastranFMSCard start=+^ *[Aa][Cc][Qq][Uu][Ii]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Aa][Ss][Ss][Ii][Gg]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Cc][oO][Nn][Nn][Ee]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Dd][Bb][Cc][Ll][Ee]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Dd][Bb][Dd][Ii][Cc]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Dd][Bb][Dd][Ii][Rr]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Dd][Bb][Ff][Ii][Xx]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Dd][Bb][Ll][Oo][Aa]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Dd][Bb][Ll][Oo][Cc]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Dd][Bb][Ss][Ee][Tt]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Dd][Bb][Uu][Nn][Ll]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Dd][Bb][Uu][Pp][Dd]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Dd][Ee][Ff][Ii][Nn]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Ee][Nn][Dd][Jj][Oo]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Ee][Xx][Pp][Aa][Nn]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Ii][Nn][Cc][Ll][Uu]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Ii][Nn][Ii][Tt]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Pp][Rr][Oo][Jj]+ end=+$+  oneline
    +syn region nastranFMSCard start=+^ *[Rr][Ee][Ss][Tt]+ end=+$+  oneline
    +syn match   nastranDmapUtilmod	   "^ *[Rr][Ee][Ss][Tt][Aa].*,.*," contains=nastranDmapComment
    +"
    +" -------Executive Control Section
    +"
    +syn region nastranECSCard start=+^ *[Aa][Ll][Tt][Ee][Rr]+ end=+$+  oneline
    +syn region nastranECSCard start=+^ *[Aa][Pp][Pp]+ end=+$+  oneline
    +syn region nastranECSCard start=+^ *[Cc][Oo][Mm][Pp][Ii]+ end=+$+  oneline
    +syn region nastranECSCard start=+^ *[Dd][Ii][Aa][Gg] + end=+$+  oneline
    +syn region nastranECSCard start=+^ *[Ee][Cc][Hh][Oo]+ end=+$+  oneline
    +syn region nastranECSCard start=+^ *[Ee][Nn][Dd][Aa][Ll]+ end=+$+  oneline
    +syn region nastranECSCard start=+^ *[Ii][Dd]+ end=+$+  oneline
    +syn region nastranECSCard start=+^ *[Ii][Nn][Cc][Ll][Uu]+ end=+$+  oneline
    +syn region nastranECSCard start=+^ *[Ll][Ii][Nn][Kk]+ end=+$+  oneline
    +syn region nastranECSCard start=+^ *[Mm][Aa][Ll][Tt][Ee]+ end=+$+  oneline
    +syn region nastranECSCard start=+^ *[Ss][Oo][Ll] + end=+$+  oneline
    +syn region nastranECSCard start=+^ *[Tt][Ii][Mm][Ee]+ end=+$+  oneline
    +"
    +" -------Delimiters
    +"
    +syn match nastranDelimiter "[Cc][Ee][Nn][Dd]" contained
    +syn match nastranDelimiter "[Bb][Ee][Gg][Ii][Nn]" contained
    +syn match nastranDelimiter " *[Bb][Uu][Ll][Kk]" contained
    +syn match nastranDelimiter "[Ee][Nn][Dd] *[dD][Aa][Tt][Aa]" contained
    +"
    +" -------Case Control section
    +"
    +syn region nastranCC start=+^ *[Cc][Ee][Nn][Dd]+ end=+^ *[Bb][Ee][Gg][Ii][Nn]+ contains=nastranDelimiter,nastranBulkData,nastranDmapComment
    +
    +"
    +" -------Bulk Data section
    +"
    +syn region nastranBulkData start=+ *[Bb][Uu][Ll][Kk] *$+ end=+^ [Ee][Nn][Dd] *[Dd]+ contains=nastranDelimiter,nastranDmapComment
    +"
    +" -------The following cards may appear in multiple sections of the file
    +"
    +syn keyword nastranUtilCard ECHOON ECHOOFF INCLUDE PARAM
    +
    +
    +" The default methods for highlighting.  Can be overridden later
    +hi def link nastranDmapexecmod	     Statement
    +hi def link nastranDmapType	     Type
    +hi def link nastranDmapPreCondit	     Error
    +hi def link nastranDmapUtilmod	     PreProc
    +hi def link nastranDmapMatmod	     nastranDmapUtilmod
    +hi def link nastranDmapString	     String
    +hi def link nastranDmapNumber	     Constant
    +hi def link nastranDmapFloat	     nastranDmapNumber
    +hi def link nastranDmapInitTab	     nastranDmapNumber
    +hi def link nastranDmapTab		     nastranDmapNumber
    +hi def link nastranDmapLogical	     nastranDmapExecmod
    +hi def link nastranDmapImplicit	     Identifier
    +hi def link nastranDmapComment	     Comment
    +hi def link nastranDmapRepeat	     nastranDmapexecmod
    +hi def link nastranNastranCard	     nastranDmapPreCondit
    +hi def link nastranECSCard		     nastranDmapUtilmod
    +hi def link nastranFMSCard		     nastranNastranCard
    +hi def link nastranCC		     nastranDmapexecmod
    +hi def link nastranDelimiter	     Special
    +hi def link nastranBulkData	     nastranDmapType
    +hi def link nastranUtilCard	     nastranDmapexecmod
    +
    +let b:current_syntax = "nastran"
    +
    +"EOF vim: ts=8 noet tw=120 sw=8 sts=0
    diff --git a/.config/vim/syntax/natural.vim b/.config/vim/syntax/natural.vim
    new file mode 100644
    index 0000000..be529f2
    --- /dev/null
    +++ b/.config/vim/syntax/natural.vim
    @@ -0,0 +1,201 @@
    +" Vim syntax file
    +"
    +" Language:	NATURAL
    +" Version:	2.1.0.5
    +" Maintainer:	Marko von Oppen 
    +" Last Changed:	2012-02-05 18:50:43
    +" Support:	http://www.von-oppen.com/
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +setlocal iskeyword+=-,*,#,+,_,/
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +" NATURAL is case insensitive
    +syntax case ignore
    +
    +" preprocessor
    +syn keyword naturalInclude	include nextgroup=naturalObjName skipwhite
    +
    +" define data
    +syn keyword naturalKeyword	define data end-define
    +syn keyword naturalKeyword	independent global parameter local redefine view
    +syn keyword naturalKeyword	const[ant] init initial
    +
    +" loops
    +syn keyword naturalLoop		read end-read end-work find end-find histogram end-histogram
    +syn keyword naturalLoop		end-all sort end-sort sorted descending ascending
    +syn keyword naturalRepeat	repeat end-repeat while until for step end-for
    +syn keyword naturalKeyword	in file with field starting from ending at thru by isn where
    +syn keyword naturalError	on error end-error
    +syn keyword naturalKeyword	accept reject end-enddata number unique retain as release
    +syn keyword naturalKeyword	start end-start break end-break physical page top sequence
    +syn keyword naturalKeyword	end-toppage end-endpage end-endfile before processing
    +syn keyword naturalKeyword	end-before
    +
    +" conditionals
    +syn keyword naturalConditional	if then else end-if end-norec
    +syn keyword naturalConditional	decide end-decide value when condition none any
    +
    +" assignment / calculation
    +syn keyword naturalKeyword	reset assign move left right justified compress to into edited
    +syn keyword naturalKeyword	add subtract multiply divide compute name
    +syn keyword naturalKeyword	all giving remainder rounded leaving space numeric
    +syn keyword naturalKeyword	examine full replace giving separate delimiter modified
    +syn keyword naturalKeyword	suspend identical suppress
    +
    +" program flow
    +syn keyword naturalFlow		callnat fetch return enter escape bottom top stack formatted
    +syn keyword naturalFlow		command call
    +syn keyword naturalflow		end-subroutine routine
    +
    +" file operations
    +syn keyword naturalKeyword	update store get delete end transaction work once close
    +
    +" other keywords
    +syn keyword naturalKeyword	first every of no record[s] found ignore immediate
    +syn keyword naturalKeyword	set settime key control stop terminate
    +
    +" in-/output
    +syn keyword naturalKeyword	write display input reinput notitle nohdr map newpage
    +syn keyword naturalKeyword	alarm text help eject index window base size
    +syn keyword naturalKeyword	format printer skip lines
    +
    +" functions
    +syn keyword naturalKeyword	abs atn cos exp frac int log sgn sin sqrt tan val old
    +syn keyword naturalKeyword	pos
    +
    +" report mode keywords
    +syn keyword naturalRMKeyword	same loop obtain indexed do doend
    +
    +" Subroutine name
    +syn keyword naturalFlow		perform subroutine nextgroup=naturalFunction skipwhite
    +syn match   naturalFunction	"\<[a-z][-_a-z0-9]*\>"
    +
    +syn keyword naturalFlow		using nextgroup=naturalKeyword,naturalObjName skipwhite
    +syn match   naturalObjName	"\<[a-z][-_a-z0-9]\{,7}\>"
    +
    +" Labels
    +syn match   naturalLabel	"\<[+#a-z][-_#a-z0-9]*\."
    +syn match   naturalRef		"\<[+#a-z][-_#a-z0-9]*\>\.\<[+#a-z][*]\=[-_#a-z0-9]*\>"
    +
    +" mark keyword special handling
    +syn keyword naturalKeyword	mark nextgroup=naturalMark skipwhite
    +syn match   naturalMark		"\<\*[a-z][-_#.a-z0-9]*\>"
    +
    +" System variables
    +syn match   naturalSysVar	"\<\*[a-z][-a-z0-9]*\>"
    +
    +"integer number, or floating point number without a dot.
    +syn match   naturalNumber	"\<-\=\d\+\>"
    +"floating point number, with dot
    +syn match   naturalNumber	"\<-\=\d\+\.\d\+\>"
    +"floating point number, starting with a dot
    +syn match   naturalNumber	"\.\d\+"
    +
    +" Formats in write statement
    +syn match   naturalFormat	"\<\d\+[TX]\>"
    +
    +" String and Character contstants
    +syn match   naturalString	"H'\x\+'"
    +syn region  naturalString	start=+"+ end=+"+
    +syn region  naturalString	start=+'+ end=+'+
    +
    +" Type definition
    +syn match   naturalAttribute	"\<[-a-z][a-z]=[-a-z0-9_\.,]\+\>"
    +syn match   naturalType		contained "\<[ABINP]\d\+\(,\d\+\)\=\>"
    +syn match   naturalType		contained "\<[CL]\>"
    +
    +" "TODO" / other comments
    +syn keyword naturalTodo		contained todo test
    +syn match   naturalCommentMark	contained "[a-z][^ \t/:|]*\(\s[^ \t/:'"|]\+\)*:\s"he=e-1
    +
    +" comments
    +syn region  naturalComment	start="/\*" end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
    +syn region  naturalComment	start="^\*[ *]" end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
    +syn region  naturalComment	start="^\d\{4} \*[\ \*]"lc=5 end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
    +syn match   naturalComment	"^\*$"
    +syn match   naturalComment	"^\d\{4} \*$"lc=5
    +" /* is legal syntax in parentheses e.g. "#ident(label./*)"
    +syn region  naturalPComment	contained start="/\*\s*[^),]"  end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
    +
    +" operators
    +syn keyword naturalOperator	and or not eq ne gt lt ge le mask scan modified
    +
    +" constants
    +syn keyword naturalBoolean	true false
    +syn match   naturalLineNo	"^\d\{4}"
    +
    +" identifiers
    +syn match   naturalIdent	"\<[+#a-z][-_#a-z0-9]*\>[^\.']"me=e-1
    +syn match   naturalIdent	"\<[+#a-z][-_#a-z0-9]*$"
    +syn match   naturalLegalIdent	"[+#a-z][-_#a-z0-9]*/[-_#a-z0-9]*"
    +
    +" parentheses
    +syn region  naturalPar		matchgroup=naturalParGui start="(" end=")" contains=naturalLabel,naturalRef,naturalOperator,@naturalConstant,naturalType,naturalSysVar,naturalPar,naturalLineNo,naturalPComment
    +syn match   naturalLineRef	"(\d\{4})"
    +
    +" build syntax groups
    +syntax cluster naturalConstant	contains=naturalString,naturalNumber,naturalAttribute,naturalBoolean
    +
    +" folding
    +if v:version >= 600
    +  set foldignore=*
    +endif
    +
    +
    +" The default methods for highlighting.  Can be overridden later
    +
    +" Constants
    +hi def link naturalFormat		Constant
    +hi def link naturalAttribute	Constant
    +hi def link naturalNumber		Number
    +hi def link naturalString		String
    +hi def link naturalBoolean		Boolean
    +
    +" All kinds of keywords
    +hi def link naturalConditional	Conditional
    +hi def link naturalRepeat		Repeat
    +hi def link naturalLoop		Repeat
    +hi def link naturalFlow		Keyword
    +hi def link naturalError		Keyword
    +hi def link naturalKeyword		Keyword
    +hi def link naturalOperator	Operator
    +hi def link naturalParGui		Operator
    +
    +" Labels
    +hi def link naturalLabel		Label
    +hi def link naturalRefLabel	Label
    +
    +" Comments
    +hi def link naturalPComment	Comment
    +hi def link naturalComment		Comment
    +hi def link naturalTodo		Todo
    +hi def link naturalCommentMark	PreProc
    +
    +hi def link naturalInclude		Include
    +hi def link naturalSysVar		Identifier
    +hi def link naturalLineNo		LineNr
    +hi def link naturalLineRef		Error
    +hi def link naturalSpecial		Special
    +hi def link naturalComKey		Todo
    +
    +" illegal things
    +hi def link naturalRMKeyword	Error
    +hi def link naturalLegalIdent	Error
    +
    +hi def link naturalType		Type
    +hi def link naturalFunction	Function
    +hi def link naturalObjName		PreProc
    +
    +
    +let b:current_syntax = "natural"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim:set ts=8 sw=8 noet ft=vim list:
    diff --git a/.config/vim/syntax/ncf.vim b/.config/vim/syntax/ncf.vim
    new file mode 100644
    index 0000000..0027fd4
    --- /dev/null
    +++ b/.config/vim/syntax/ncf.vim
    @@ -0,0 +1,247 @@
    +" Vim syntax file
    +" Language:     Novell "NCF" Batch File
    +" Maintainer:   Jonathan J. Miner 
    +" Last Change:	Tue, 04 Sep 2001 16:20:33 CDT
    +" $Id: ncf.vim,v 1.1 2004/06/13 16:31:58 vimboss Exp $
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +    finish
    +endif
    +
    +syn case ignore
    +
    +syn keyword ncfCommands		mount load unload
    +syn keyword ncfBoolean		on off
    +syn keyword ncfCommands		set nextgroup=ncfSetCommands
    +syn keyword ncfTimeTypes	Reference Primary Secondary Single
    +syn match ncfLoad       "\(unl\|l\)oad .*"lc=4 contains=ALLBUT,Error
    +syn match ncfMount      "mount .*"lc=5 contains=ALLBUT,Error
    +
    +syn match ncfComment    "^\ *rem.*$"
    +syn match ncfComment    "^\ *;.*$"
    +syn match ncfComment    "^\ *#.*$"
    +
    +syn match ncfSearchPath "search \(add\|del\) " nextgroup=ncfPath
    +syn match ncfPath       "\<[^: ]\+:\([A-Za-z0-9._]\|\\\)*\>"
    +syn match ncfServerName "^file server name .*$"
    +syn match ncfIPXNet     "^ipx internal net"
    +
    +" String
    +syn region ncfString    start=+"+  end=+"+
    +syn match ncfContString "= \(\(\.\{0,1}\(OU=\|O=\)\{0,1}[A-Z_]\+\)\+;\{0,1}\)\+"lc=2
    +
    +syn match ncfHexNumber  "\<\d\(\d\+\|[A-F]\+\)*\>"
    +syn match ncfNumber     "\<\d\+\.\{0,1}\d*\>"
    +syn match ncfIPAddr     "\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}"
    +syn match ncfTime       "\(+|=\)\{0,1}\d\{1,2}:\d\{1,2}:\d\{1,2}"
    +syn match ncfDSTTime    "([^ ]\+ [^ ]\+ \(FIRST\|LAST\)\s*\d\{1,2}:\d\{1,2}:\d\{1,2} \(AM\|PM\))"
    +syn match ncfTimeZone   "[A-Z]\{3}\d[A-Z]\{3}"
    +
    +syn match ncfLogins     "^\([Dd]is\|[Ee]n\)able login[s]*"
    +syn match ncfScript     "[^ ]*\.ncf"
    +
    +"  SET Commands that take a Number following
    +syn match ncfSetCommandsNum "\(Alert Message Nodes\)\s*="
    +syn match ncfSetCommandsNum "\(Auto Restart After Abend\)\s*="
    +syn match ncfSetCommandsNum "\(Auto Restart After Abend Delay Time\)\s*="
    +syn match ncfSetCommandsNum "\(Compression Daily Check Starting Hour\)\s*="
    +syn match ncfSetCommandsNum "\(Compression Daily Check Stop Hour\)\s*="
    +syn match ncfSetCommandsNum "\(Concurrent Remirror Requests\)\s*="
    +syn match ncfSetCommandsNum "\(Convert Compressed to Uncompressed Option\)\s*="
    +syn match ncfSetCommandsNum "\(Days Untouched Before Compression\)\s*="
    +syn match ncfSetCommandsNum "\(Decompress Free Space Warning Interval\)\s*="
    +syn match ncfSetCommandsNum "\(Decompress Percent Disk Space Free to Allow Commit\)\s*="
    +syn match ncfSetCommandsNum "\(Deleted Files Compression Option\)\s*="
    +syn match ncfSetCommandsNum "\(Directory Cache Allocation Wait Time\)\s*="
    +syn match ncfSetCommandsNum "\(Enable IPX Checksums\)\s*="
    +syn match ncfSetCommandsNum "\(Garbage Collection Interval\)\s*="
    +syn match ncfSetCommandsNum "\(IPX NetBIOS Replication Option\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Concurrent Compressions\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Concurrent Directory Cache Writes\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Concurrent Disk Cache Writes\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Directory Cache Buffers\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Extended Attributes per File or Path\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum File Locks\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum File Locks Per Connection\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Interrupt Events\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Number of Directory Handles\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Number of Internal Directory Handles\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Outstanding NCP Searches\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Packet Receive Buffers\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Physical Receive Packet Size\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Record Locks\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Record Locks Per Connection\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Service Processes\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Subdirectory Tree Depth\)\s*="
    +syn match ncfSetCommandsNum "\(Maximum Transactions\)\s*="
    +syn match ncfSetCommandsNum "\(Minimum Compression Percentage Gain\)\s*="
    +syn match ncfSetCommandsNum "\(Minimum Directory Cache Buffers\)\s*="
    +syn match ncfSetCommandsNum "\(Minimum File Cache Buffers\)\s*="
    +syn match ncfSetCommandsNum "\(Minimum File Cache Report Threshold\)\s*="
    +syn match ncfSetCommandsNum "\(Minimum Free Memory for Garbage Collection\)\s*="
    +syn match ncfSetCommandsNum "\(Minimum Packet Receive Buffers\)\s*="
    +syn match ncfSetCommandsNum "\(Minimum Service Processes\)\s*="
    +syn match ncfSetCommandsNum "\(NCP Packet Signature Option\)\s*="
    +syn match ncfSetCommandsNum "\(NDS Backlink Interval\)\s*="
    +syn match ncfSetCommandsNum "\(NDS Client NCP Retries\)\s*="
    +syn match ncfSetCommandsNum "\(NDS External Reference Life Span\)\s*="
    +syn match ncfSetCommandsNum "\(NDS Inactivity Synchronization Interval\)\s*="
    +syn match ncfSetCommandsNum "\(NDS Janitor Interval\)\s*="
    +syn match ncfSetCommandsNum "\(New Service Process Wait Time\)\s*="
    +syn match ncfSetCommandsNum "\(Number of Frees for Garbage Collection\)\s*="
    +syn match ncfSetCommandsNum "\(Number of Watchdog Packets\)\s*="
    +syn match ncfSetCommandsNum "\(Pseudo Preemption Count\)\s*="
    +syn match ncfSetCommandsNum "\(Read Ahead LRU Sitting Time Threshold\)\s*="
    +syn match ncfSetCommandsNum "\(Remirror Block Size\)\s*="
    +syn match ncfSetCommandsNum "\(Reserved Buffers Below 16 Meg\)\s*="
    +syn match ncfSetCommandsNum "\(Server Log File Overflow Size\)\s*="
    +syn match ncfSetCommandsNum "\(Server Log File State\)\s*="
    +syn match ncfSetCommandsNum "\(SMP Polling Count\)\s*="
    +syn match ncfSetCommandsNum "\(SMP Stack Size\)\s*="
    +syn match ncfSetCommandsNum "\(TIMESYNC Polling Count\)\s*="
    +syn match ncfSetCommandsNum "\(TIMESYNC Polling Interval\)\s*="
    +syn match ncfSetCommandsNum "\(TIMESYNC Synchronization Radius\)\s*="
    +syn match ncfSetCommandsNum "\(TIMESYNC Write Value\)\s*="
    +syn match ncfSetCommandsNum "\(Volume Log File Overflow Size\)\s*="
    +syn match ncfSetCommandsNum "\(Volume Log File State\)\s*="
    +syn match ncfSetCommandsNum "\(Volume Low Warning Reset Threshold\)\s*="
    +syn match ncfSetCommandsNum "\(Volume Low Warning Threshold\)\s*="
    +syn match ncfSetCommandsNum "\(Volume TTS Log File Overflow Size\)\s*="
    +syn match ncfSetCommandsNum "\(Volume TTS Log File State\)\s*="
    +syn match ncfSetCommandsNum "\(Worker Thread Execute In a Row Count\)\s*="
    +
    +" SET Commands that take a Boolean (ON/OFF)
    +
    +syn match ncfSetCommandsBool "\(Alloc Memory Check Flag\)\s*="
    +syn match ncfSetCommandsBool "\(Allow Audit Passwords\)\s*="
    +syn match ncfSetCommandsBool "\(Allow Change to Client Rights\)\s*="
    +syn match ncfSetCommandsBool "\(Allow Deletion of Active Directories\)\s*="
    +syn match ncfSetCommandsBool "\(Allow Invalid Pointers\)\s*="
    +syn match ncfSetCommandsBool "\(Allow LIP\)\s*="
    +syn match ncfSetCommandsBool "\(Allow Unencrypted Passwords\)\s*="
    +syn match ncfSetCommandsBool "\(Allow Unowned Files To Be Extended\)\s*="
    +syn match ncfSetCommandsBool "\(Auto Register Memory Above 16 Megabytes\)\s*="
    +syn match ncfSetCommandsBool "\(Auto TTS Backout Flag\)\s*="
    +syn match ncfSetCommandsBool "\(Automatically Repair Bad Volumes\)\s*="
    +syn match ncfSetCommandsBool "\(Check Equivalent to Me\)\s*="
    +syn match ncfSetCommandsBool "\(Command Line Prompt Default Choice\)\s*="
    +syn match ncfSetCommandsBool "\(Console Display Watchdog Logouts\)\s*="
    +syn match ncfSetCommandsBool "\(Daylight Savings Time Status\)\s*="
    +syn match ncfSetCommandsBool "\(Developer Option\)\s*="
    +syn match ncfSetCommandsBool "\(Display Incomplete IPX Packet Alerts\)\s*="
    +syn match ncfSetCommandsBool "\(Display Lost Interrupt Alerts\)\s*="
    +syn match ncfSetCommandsBool "\(Display NCP Bad Component Warnings\)\s*="
    +syn match ncfSetCommandsBool "\(Display NCP Bad Length Warnings\)\s*="
    +syn match ncfSetCommandsBool "\(Display Old API Names\)\s*="
    +syn match ncfSetCommandsBool "\(Display Relinquish Control Alerts\)\s*="
    +syn match ncfSetCommandsBool "\(Display Spurious Interrupt Alerts\)\s*="
    +syn match ncfSetCommandsBool "\(Enable Deadlock Detection\)\s*="
    +syn match ncfSetCommandsBool "\(Enable Disk Read After Write Verify\)\s*="
    +syn match ncfSetCommandsBool "\(Enable File Compression\)\s*="
    +syn match ncfSetCommandsBool "\(Enable IO Handicap Attribute\)\s*="
    +syn match ncfSetCommandsBool "\(Enable SECURE.NCF\)\s*="
    +syn match ncfSetCommandsBool "\(Fast Volume Mounts\)\s*="
    +syn match ncfSetCommandsBool "\(Global Pseudo Preemption\)\s*="
    +syn match ncfSetCommandsBool "\(Halt System on Invalid Parameters\)\s*="
    +syn match ncfSetCommandsBool "\(Ignore Disk Geometry\)\s*="
    +syn match ncfSetCommandsBool "\(Immediate Purge of Deleted Files\)\s*="
    +syn match ncfSetCommandsBool "\(NCP File Commit\)\s*="
    +syn match ncfSetCommandsBool "\(NDS Trace File Length to Zero\)\s*="
    +syn match ncfSetCommandsBool "\(NDS Trace to File\)\s*="
    +syn match ncfSetCommandsBool "\(NDS Trace to Screen\)\s*="
    +syn match ncfSetCommandsBool "\(New Time With Daylight Savings Time Status\)\s*="
    +syn match ncfSetCommandsBool "\(Read Ahead Enabled\)\s*="
    +syn match ncfSetCommandsBool "\(Read Fault Emulation\)\s*="
    +syn match ncfSetCommandsBool "\(Read Fault Notification\)\s*="
    +syn match ncfSetCommandsBool "\(Reject NCP Packets with Bad Components\)\s*="
    +syn match ncfSetCommandsBool "\(Reject NCP Packets with Bad Lengths\)\s*="
    +syn match ncfSetCommandsBool "\(Replace Console Prompt with Server Name\)\s*="
    +syn match ncfSetCommandsBool "\(Reply to Get Nearest Server\)\s*="
    +syn match ncfSetCommandsBool "\(SMP Developer Option\)\s*="
    +syn match ncfSetCommandsBool "\(SMP Flush Processor Cache\)\s*="
    +syn match ncfSetCommandsBool "\(SMP Intrusive Abend Mode\)\s*="
    +syn match ncfSetCommandsBool "\(SMP Memory Protection\)\s*="
    +syn match ncfSetCommandsBool "\(Sound Bell for Alerts\)\s*="
    +syn match ncfSetCommandsBool "\(TIMESYNC Configured Sources\)\s*="
    +syn match ncfSetCommandsBool "\(TIMESYNC Directory Tree Mode\)\s*="
    +syn match ncfSetCommandsBool "\(TIMESYNC Hardware Clock\)\s*="
    +syn match ncfSetCommandsBool "\(TIMESYNC RESET\)\s*="
    +syn match ncfSetCommandsBool "\(TIMESYNC Restart Flag\)\s*="
    +syn match ncfSetCommandsBool "\(TIMESYNC Service Advertising\)\s*="
    +syn match ncfSetCommandsBool "\(TIMESYNC Write Parameters\)\s*="
    +syn match ncfSetCommandsBool "\(TTS Abort Dump Flag\)\s*="
    +syn match ncfSetCommandsBool "\(Upgrade Low Priority Threads\)\s*="
    +syn match ncfSetCommandsBool "\(Volume Low Warn All Users\)\s*="
    +syn match ncfSetCommandsBool "\(Write Fault Emulation\)\s*="
    +syn match ncfSetCommandsBool "\(Write Fault Notification\)\s*="
    +
    +" Set Commands that take a "string" -- NOT QUOTED
    +
    +syn match ncfSetCommandsStr "\(Default Time Server Type\)\s*="
    +syn match ncfSetCommandsStr "\(SMP NetWare Kernel Mode\)\s*="
    +syn match ncfSetCommandsStr "\(Time Zone\)\s*="
    +syn match ncfSetCommandsStr "\(TIMESYNC ADD Time Source\)\s*="
    +syn match ncfSetCommandsStr "\(TIMESYNC REMOVE Time Source\)\s*="
    +syn match ncfSetCommandsStr "\(TIMESYNC Time Source\)\s*="
    +syn match ncfSetCommandsStr "\(TIMESYNC Type\)\s*="
    +
    +" SET Commands that take a "Time"
    +
    +syn match ncfSetCommandsTime "\(Command Line Prompt Time Out\)\s*="
    +syn match ncfSetCommandsTime "\(Delay Before First Watchdog Packet\)\s*="
    +syn match ncfSetCommandsTime "\(Delay Between Watchdog Packets\)\s*="
    +syn match ncfSetCommandsTime "\(Directory Cache Buffer NonReferenced Delay\)\s*="
    +syn match ncfSetCommandsTime "\(Dirty Directory Cache Delay Time\)\s*="
    +syn match ncfSetCommandsTime "\(Dirty Disk Cache Delay Time\)\s*="
    +syn match ncfSetCommandsTime "\(File Delete Wait Time\)\s*="
    +syn match ncfSetCommandsTime "\(Minimum File Delete Wait Time\)\s*="
    +syn match ncfSetCommandsTime "\(Mirrored Devices Are Out of Sync Message Frequency\)\s*="
    +syn match ncfSetCommandsTime "\(New Packet Receive Buffer Wait Time\)\s*="
    +syn match ncfSetCommandsTime "\(TTS Backout File Truncation Wait Time\)\s*="
    +syn match ncfSetCommandsTime "\(TTS UnWritten Cache Wait Time\)\s*="
    +syn match ncfSetCommandsTime "\(Turbo FAT Re-Use Wait Time\)\s*="
    +syn match ncfSetCommandsTime "\(Daylight Savings Time Offset\)\s*="
    +
    +syn match ncfSetCommandsTimeDate "\(End of Daylight Savings Time\)\s*="
    +syn match ncfSetCommandsTimeDate "\(Start of Daylight Savings Time\)\s*="
    +
    +syn match ncfSetCommandsBindCon "\(Bindery Context\)\s*=" nextgroup=ncfContString
    +
    +syn cluster ncfSetCommands contains=ncfSetCommandsNum,ncfSetCommandsBool,ncfSetCommandsStr,ncfSetCommandsTime,ncfSetCommandsTimeDate,ncfSetCommandsBindCon
    +
    +
    +if exists("ncf_highlight_unknowns")
    +    syn match Error "[^ \t]*" contains=ALL
    +endif
    +
    +
    +" The default methods for highlighting.  Can be overridden later
    +hi def link ncfCommands		Statement
    +hi def link ncfSetCommands	ncfCommands
    +hi def link ncfLogins		ncfCommands
    +hi def link ncfString		String
    +hi def link ncfContString	ncfString
    +hi def link ncfComment		Comment
    +hi def link ncfImplicit		Type
    +hi def link ncfBoolean		Boolean
    +hi def link ncfScript		Identifier
    +hi def link ncfNumber		Number
    +hi def link ncfIPAddr		ncfNumber
    +hi def link ncfHexNumber		ncfNumber
    +hi def link ncfTime		ncfNumber
    +hi def link ncfDSTTime		ncfNumber
    +hi def link ncfPath		Constant
    +hi def link ncfServerName	Special
    +hi def link ncfIPXNet		ncfServerName
    +hi def link ncfTimeTypes		Constant
    +hi def link ncfSetCommandsNum	   ncfSetCommands
    +hi def link ncfSetCommandsBool	   ncfSetCommands
    +hi def link ncfSetCommandsStr	   ncfSetCommands
    +hi def link ncfSetCommandsTime	   ncfSetCommands
    +hi def link ncfSetCommandsTimeDate  ncfSetCommands
    +hi def link ncfSetCommandsBindCon   ncfSetCommands
    +
    +
    +
    +let b:current_syntax = "ncf"
    diff --git a/.config/vim/syntax/neomuttlog.vim b/.config/vim/syntax/neomuttlog.vim
    new file mode 100644
    index 0000000..27f7349
    --- /dev/null
    +++ b/.config/vim/syntax/neomuttlog.vim
    @@ -0,0 +1,69 @@
    +" Vim syntax file
    +" Language:  NeoMutt log files
    +" Maintainer:  Richard Russon 
    +" Last Change:  2024 Oct 12
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syntax match neolog_date     "\v^\[\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d\] *" conceal
    +syntax match neolog_version  "\v"
    +syntax match neolog_banner   "\v^\[\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d\] .*" contains=neolog_date,neolog_version
    +syntax match neolog_function "\v%26v\i+\(\)"
    +
    +syntax match neolog_perror_key  "\v%22v\ " conceal transparent
    +syntax match neolog_error_key   "\v%22v\ " conceal transparent
    +syntax match neolog_warning_key "\v%22v\ " conceal transparent
    +syntax match neolog_message_key "\v%22v\ " conceal transparent
    +syntax match neolog_debug1_key  "\v%22v\<1\> " conceal transparent
    +syntax match neolog_debug2_key  "\v%22v\<2\> " conceal transparent
    +syntax match neolog_debug3_key  "\v%22v\<3\> " conceal transparent
    +syntax match neolog_debug4_key  "\v%22v\<4\> " conceal transparent
    +syntax match neolog_debug5_key  "\v%22v\<5\> " conceal transparent
    +syntax match neolog_notify_key  "\v%22v\ " conceal transparent
    +
    +syntax match neolog_perror  "\v%22v\ .*" contains=neolog_perror_key,neolog_function
    +syntax match neolog_error   "\v%22v\ .*" contains=neolog_error_key,neolog_function
    +syntax match neolog_warning "\v%22v\ .*" contains=neolog_warning_key,neolog_function
    +syntax match neolog_message "\v%22v\ .*" contains=neolog_message_key,neolog_function
    +syntax match neolog_debug1  "\v%22v\<1\> .*" contains=neolog_debug1_key,neolog_function
    +syntax match neolog_debug2  "\v%22v\<2\> .*" contains=neolog_debug2_key,neolog_function
    +syntax match neolog_debug3  "\v%22v\<3\> .*" contains=neolog_debug3_key,neolog_function
    +syntax match neolog_debug4  "\v%22v\<4\> .*" contains=neolog_debug4_key,neolog_function
    +syntax match neolog_debug5  "\v%22v\<5\> .*" contains=neolog_debug5_key,neolog_function
    +syntax match neolog_notify  "\v%22v\ .*" contains=neolog_notify_key,neolog_function
    +
    +if !exists('g:neolog_disable_default_colors')
    +  highlight neolog_date     ctermfg=cyan    guifg=#40ffff
    +  highlight neolog_banner   ctermfg=magenta guifg=#ff00ff
    +  highlight neolog_version  cterm=reverse   gui=reverse
    +  highlight neolog_function                 guibg=#282828
    +
    +  highlight neolog_perror  ctermfg=red    guifg=#ff8080
    +  highlight neolog_error   ctermfg=red    guifg=#ff8080
    +  highlight neolog_warning ctermfg=yellow guifg=#ffff80
    +  highlight neolog_message ctermfg=green  guifg=#80ff80
    +  highlight neolog_debug1  ctermfg=white  guifg=#ffffff
    +  highlight neolog_debug2  ctermfg=white  guifg=#ffffff
    +  highlight neolog_debug3  ctermfg=grey   guifg=#c0c0c0
    +  highlight neolog_debug4  ctermfg=grey   guifg=#c0c0c0
    +  highlight neolog_debug5  ctermfg=grey   guifg=#c0c0c0
    +  highlight neolog_notify  ctermfg=grey   guifg=#c0c0c0
    +endif
    +
    +highlight link neolog_perror_key  neolog_perror
    +highlight link neolog_error_key   neolog_error
    +highlight link neolog_warning_key neolog_warning
    +highlight link neolog_message_key neolog_message
    +highlight link neolog_debug1_key  neolog_debug1
    +highlight link neolog_debug2_key  neolog_debug2
    +highlight link neolog_debug3_key  neolog_debug3
    +highlight link neolog_debug4_key  neolog_debug4
    +highlight link neolog_debug5_key  neolog_debug5
    +highlight link neolog_notify_key  neolog_notify
    +
    +let b:current_syntax = "neomuttlog"
    +
    +" vim: ts=2 et tw=100 sw=2 sts=0 ft=vim
    diff --git a/.config/vim/syntax/neomuttrc.vim b/.config/vim/syntax/neomuttrc.vim
    new file mode 100644
    index 0000000..815e160
    --- /dev/null
    +++ b/.config/vim/syntax/neomuttrc.vim
    @@ -0,0 +1,911 @@
    +" Vim syntax file
    +" Language:	NeoMutt setup files
    +" Maintainer:	Richard Russon 
    +" Previous Maintainer:	Guillaume Brogi 
    +" Last Change:	2024 Oct 12
    +" Original version based on syntax/muttrc.vim
    +
    +" This file covers NeoMutt 2024-10-02
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +" Set the keyword characters
    +setlocal isk=@,48-57,_,-
    +
    +" handling optional variables
    +syntax match muttrcComment	"^# .*$" contains=@Spell
    +syntax match muttrcComment	"^#[^ ].*$"
    +syntax match muttrcComment	"^#$"
    +syntax match muttrcComment	"[^\\]#.*$"lc=1 contains=@Spell
    +
    +" Escape sequences (back-tick and pipe goes here too)
    +syntax match muttrcEscape	+\\[#tnr"'Cc ]+
    +syntax match muttrcEscape	+[`|]+
    +syntax match muttrcEscape	+\\$+
    +
    +" The variables takes the following arguments
    +syntax region muttrcString	contained keepend start=+"+ms=e skip=+\\"+ end=+"+ contains=muttrcEscape,muttrcCommand,muttrcAction,muttrcShellString
    +syntax region muttrcString	contained keepend start=+'+ms=e skip=+\\'+ end=+'+ contains=muttrcEscape,muttrcCommand,muttrcAction
    +syntax match muttrcStringNL	contained skipwhite skipnl "\s*\\$" nextgroup=muttrcString,muttrcStringNL
    +
    +syntax region muttrcShellString	matchgroup=muttrcEscape keepend start=+`+ skip=+\\`+ end=+`+ contains=muttrcVarString,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcCommand
    +
    +syntax match  muttrcRXChars	contained /[^\\][][.*?+]\+/hs=s+1
    +syntax match  muttrcRXChars	contained /[][|()][.*?+]*/
    +syntax match  muttrcRXChars	contained /['"]^/ms=s+1
    +syntax match  muttrcRXChars	contained /$['"]/me=e-1
    +syntax match  muttrcRXChars	contained /\\/
    +" Why does muttrcRXString2 work with one \ when muttrcRXString requires two?
    +syntax region muttrcRXString	contained skipwhite start=+'+ skip=+\\'+ end=+'+ contains=muttrcRXChars
    +syntax region muttrcRXString	contained skipwhite start=+"+ skip=+\\"+ end=+"+ contains=muttrcRXChars
    +syntax region muttrcRXString	contained skipwhite start=+[^	 "'^]+ skip=+\\\s+ end=+\s+re=e-1 contains=muttrcRXChars
    +" For some reason, skip refuses to match backslashes here...
    +syntax region muttrcRXString	contained matchgroup=muttrcRXChars skipwhite start=+\^+ end=+[^\\]\s+re=e-1 contains=muttrcRXChars
    +syntax region muttrcRXString	contained matchgroup=muttrcRXChars skipwhite start=+\^+ end=+$\s+ contains=muttrcRXChars
    +syntax region muttrcRXString2	contained skipwhite start=+'+ skip=+\'+ end=+'+ contains=muttrcRXChars
    +syntax region muttrcRXString2	contained skipwhite start=+"+ skip=+\"+ end=+"+ contains=muttrcRXChars
    +
    +" these must be kept synchronized with muttrcRXString, but are intended for muttrcRXHooks
    +syntax region muttrcRXHookString	contained keepend skipwhite start=+'+ skip=+\\'+ end=+'+ contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL
    +syntax region muttrcRXHookString	contained keepend skipwhite start=+"+ skip=+\\"+ end=+"+ contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL
    +syntax region muttrcRXHookString	contained keepend skipwhite start=+[^	 "'^]+ skip=+\\\s+ end=+\s+re=e-1 contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL
    +syntax region muttrcRXHookString	contained keepend skipwhite start=+\^+ end=+[^\\]\s+re=e-1 contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL
    +syntax region muttrcRXHookString	contained keepend matchgroup=muttrcRXChars skipwhite start=+\^+ end=+$\s+ contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL
    +syntax match muttrcRXHookStringNL	contained skipwhite skipnl "\s*\\$" nextgroup=muttrcRXHookString,muttrcRXHookStringNL
    +
    +" these are exclusively for args lists (e.g. -rx pat pat pat ...)
    +syntax region muttrcRXPat	contained keepend skipwhite start=+'+ skip=+\\'+ end=+'\s*+ contains=muttrcRXString nextgroup=muttrcRXPat
    +syntax region muttrcRXPat	contained keepend skipwhite start=+"+ skip=+\\"+ end=+"\s*+ contains=muttrcRXString nextgroup=muttrcRXPat
    +syntax match muttrcRXPat	contained /[^-'"#!]\S\+/ skipwhite contains=muttrcRXChars nextgroup=muttrcRXPat
    +syntax match muttrcRXDef	contained "-rx\s\+" skipwhite nextgroup=muttrcRXPat
    +
    +syntax match muttrcSpecial	+\(['"]\)!\1+
    +
    +syntax match muttrcSetStrAssignment  contained skipwhite /=\s*\%(\\\?\$\)\?[0-9A-Za-z_-]\+/hs=s+1       nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString contains=muttrcVariable,muttrcEscapedVariable
    +syntax region muttrcSetStrAssignment contained skipwhite keepend start=+=\s*"+hs=s+1 end=+"+ skip=+\\"+ nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString contains=muttrcString
    +syntax region muttrcSetStrAssignment contained skipwhite keepend start=+=\s*'+hs=s+1 end=+'+ skip=+\\'+ nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString contains=muttrcString
    +syntax match muttrcSetBoolAssignment contained skipwhite /=\s*\\\?\$\w\+/hs=s+1                         nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString contains=muttrcVariable,muttrcEscapedVariable
    +syntax match muttrcSetBoolAssignment contained skipwhite /=\s*\%(yes\|no\)/hs=s+1                       nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax match muttrcSetBoolAssignment contained skipwhite /=\s*"\%(yes\|no\)"/hs=s+1                     nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax match muttrcSetBoolAssignment contained skipwhite /=\s*'\%(yes\|no\)'/hs=s+1                     nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax match muttrcSetQuadAssignment contained skipwhite /=\s*\\\?\$\w\+/hs=s+1                         nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString contains=muttrcVariable,muttrcEscapedVariable
    +syntax match muttrcSetQuadAssignment contained skipwhite /=\s*\%(ask-\)\?\%(yes\|no\)/hs=s+1            nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax match muttrcSetQuadAssignment contained skipwhite /=\s*"\%(ask-\)\?\%(yes\|no\)"/hs=s+1          nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax match muttrcSetQuadAssignment contained skipwhite /=\s*'\%(ask-\)\?\%(yes\|no\)'/hs=s+1          nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax match muttrcSetNumAssignment  contained skipwhite /=\s*\\\?\$\w\+/hs=s+1                         nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString contains=muttrcVariable,muttrcEscapedVariable
    +syntax match muttrcSetNumAssignment  contained skipwhite /=\s*\d\+/hs=s+1                               nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax match muttrcSetNumAssignment  contained skipwhite /=\s*"\d\+"/hs=s+1                             nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax match muttrcSetNumAssignment  contained skipwhite /=\s*'\d\+'/hs=s+1                             nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +
    +" Now catch some email addresses and headers (purified version from mail.vim)
    +syntax match muttrcEmail	"[a-zA-Z0-9._-]\+@[a-zA-Z0-9./-]\+"
    +syntax match muttrcHeader	"\<\c\%(From\|To\|C[Cc]\|B[Cc][Cc]\|Reply-To\|Subject\|Return-Path\|Received\|Date\|Replied\|Attach\)\>:\="
    +
    +syntax match   muttrcKeySpecial	contained +\%(\\[Cc'"]\|\^\|\\[01]\d\{2}\)+
    +syntax match   muttrcKey	contained "\S\+"			contains=muttrcKeySpecial,muttrcKeyName
    +syntax region  muttrcKey	contained start=+"+ skip=+\\\\\|\\"+ end=+"+	contains=muttrcKeySpecial,muttrcKeyName
    +syntax region  muttrcKey	contained start=+'+ skip=+\\\\\|\\'+ end=+'+	contains=muttrcKeySpecial,muttrcKeyName
    +syntax match   muttrcKeyName	contained "\\[trne]"
    +syntax match   muttrcKeyName	contained "\c<\%(BackSpace\|BackTab\|Delete\|Down\|End\|Enter\|Esc\|Home\|Insert\|Left\|Next\|PageDown\|PageUp\|Return\|Right\|Space\|Tab\|Up\)>"
    +syntax match   muttrcKeyName	contained "\c"
    +
    +syntax match muttrcFormatErrors contained /%./
    +
    +syntax match muttrcStrftimeEscapes contained /%[AaBbCcDdeFGgHhIjklMmnpRrSsTtUuVvWwXxYyZz+%]/
    +syntax match muttrcStrftimeEscapes contained /%E[cCxXyY]/
    +syntax match muttrcStrftimeEscapes contained /%O[BdeHImMSuUVwWy]/
    +
    +" Defines syntax matches for muttrc[baseName]Escapes, muttrc[baseName]Conditionals
    +" If padding==1, also match `%>` `%|` `%*` expandos
    +" If conditional==1, some expandos support %X? format
    +syntax match muttrcFormatConditionals2 contained /[^?]*?/
    +function! s:escapesConditionals(baseName, sequence, padding, conditional)
    +	exec 'syntax match muttrc' . a:baseName . 'Escapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?\%(' . a:sequence . '\|%\)/'
    +	if a:padding
    +		exec 'syntax match muttrc' . a:baseName . 'Escapes contained /%[>|*]./'
    +	endif
    +	if a:conditional
    +		exec 'syntax match muttrc' . a:baseName . 'Conditionals contained /%?\%(' . a:sequence . '\)?/ nextgroup=muttrcFormatConditionals2'
    +	else
    +		exec 'syntax match muttrc' . a:baseName . 'Conditionals contained /%?\%(' . a:sequence . '\)?/'
    +	endif
    +endfunction
    +
    +" CHECKED 2024 Oct 12
    +" Ref: AliasFormatDef in alias/config.c
    +call s:escapesConditionals('AliasFormat', '[acfnrtY]', 1, 0)
    +" Ref: AttachFormatDef in mutt_config.c
    +call s:escapesConditionals('AttachFormat', '[CcDdeFfIMmnQsTtuX]', 1, 1)
    +" Ref: AutocryptFormatDef in autocrypt/config.c
    +call s:escapesConditionals('AutocryptFormat', '[aknps]', 1, 0)
    +" Ref: ComposeFormatDef in compose/config.c
    +call s:escapesConditionals('ComposeFormat', '[ahlv]', 1, 1)
    +" Ref: FolderFormatDef in browser/config.c
    +call s:escapesConditionals('FolderFormat', '[aCDdFfgilmNnpstu[]', 1, 1)
    +" Ref: GreetingFormatDef in send/config.c
    +call s:escapesConditionals('GreetingFormat', '[nuv]', 0, 0)
    +" Ref: GroupIndexFormatDef in browser/config.c
    +call s:escapesConditionals('GroupIndexFormat', '[aCdfMNnps]', 1, 0)
    +" Ref: HistoryFormatDef in history/config.c
    +call s:escapesConditionals('HistoryFormat', '[Cs]', 1, 0)
    +" Ref: IndexFormatDef in mutt_config.c
    +call s:escapesConditionals('IndexFormat', '[AaBbCDdEefgHIiJKLlMmNnOPqRrSsTtuvWXxYyZ(<[{]\|@\i\+@\|G[a-zA-Z]\+\|Fp\=\|z[cst]\|cr\=', 1, 1)
    +" Ref: PatternFormatDef in pattern/config.c
    +call s:escapesConditionals('PatternFormat', '[den]', 1, 0)
    +" Ref: PgpCommandFormatDef in ncrypt/config.c
    +call s:escapesConditionals('PgpCommandFormat', '[afprs]', 0, 1)
    +" Ref: PgpEntryFormatDef in ncrypt/config.c
    +call s:escapesConditionals('PgpEntryFormat', '[AaCcFfIiKkLlnptu[]', 1, 1)
    +" Ref: QueryFormatDef in alias/config.c
    +call s:escapesConditionals('QueryFormat', '[acentY]', 1, 1)
    +" Ref: SidebarFormatDef in sidebar/config.c
    +call s:escapesConditionals('SidebarFormat', '[!aBDdFLNnoprStZ]', 1, 1)
    +" Ref: SmimeCommandFormatDef in ncrypt/config.c
    +call s:escapesConditionals('SmimeCommandFormat', '[aCcdfiks]', 0, 1)
    +" Ref: StatusFormatDef in mutt_config.c
    +call s:escapesConditionals('StatusFormat', '[bDdFfhLlMmnoPpRrSsTtuVv]', 1, 1)
    +
    +syntax region muttrcAliasFormatString         contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcAliasFormatEscapes,muttrcAliasFormatConditionals,muttrcFormatErrors                                   nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcAliasFormatString         contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcAliasFormatEscapes,muttrcAliasFormatConditionals,muttrcFormatErrors                                   nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcAttachFormatString        contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcAttachFormatEscapes,muttrcAttachFormatConditionals,muttrcFormatErrors                                 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcAttachFormatString        contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcAttachFormatEscapes,muttrcAttachFormatConditionals,muttrcFormatErrors                                 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcAutocryptFormatString     contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcAutocryptFormatEscapes,muttrcAutocryptFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcAutocryptFormatString     contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcAutocryptFormatEscapes,muttrcAutocryptFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcComposeFormatString       contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcComposeFormatEscapes,muttrcComposeFormatConditionals,muttrcFormatErrors                               nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcComposeFormatString       contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcComposeFormatEscapes,muttrcComposeFormatConditionals,muttrcFormatErrors                               nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcFolderFormatString        contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcFolderFormatEscapes,muttrcFolderFormatConditionals,muttrcFormatErrors                                 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcFolderFormatString        contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcFolderFormatEscapes,muttrcFolderFormatConditionals,muttrcFormatErrors                                 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcGreetingFormatString      contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcGreetingFormatEscapes,muttrcGreetingFormatConditionals,muttrcFormatErrors                             nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcGreetingFormatString      contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcGreetingFormatEscapes,muttrcGreetingFormatConditionals,muttrcFormatErrors                             nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcGroupIndexFormatString    contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcGroupIndexFormatEscapes,muttrcGroupIndexFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes       nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcGroupIndexFormatString    contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcGroupIndexFormatEscapes,muttrcGroupIndexFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes       nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcHistoryFormatString       contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcHistoryFormatEscapes,muttrcHistoryFormatConditionals,muttrcFormatErrors                               nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcHistoryFormatString       contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcHistoryFormatEscapes,muttrcHistoryFormatConditionals,muttrcFormatErrors                               nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcIndexFormatString         contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcIndexFormatEscapes,muttrcIndexFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes                 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcIndexFormatString         contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcIndexFormatEscapes,muttrcIndexFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes                 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcPatternFormatString       contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPatternFormatEscapes,muttrcPatternFormatConditionals,muttrcFormatErrors                               nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcPatternFormatString       contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPatternFormatEscapes,muttrcPatternFormatConditionals,muttrcFormatErrors                               nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcPgpCommandFormatString    contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPgpCommandFormatEscapes,muttrcPgpCommandFormatConditionals,muttrcVariable,muttrcFormatErrors          nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcPgpCommandFormatString    contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPgpCommandFormatEscapes,muttrcPgpCommandFormatConditionals,muttrcVariable,muttrcFormatErrors          nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcPgpEntryFormatString      contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPgpEntryFormatEscapes,muttrcPgpEntryFormatConditionals,muttrcFormatErrors,muttrcPgpTimeEscapes        nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcPgpEntryFormatString      contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPgpEntryFormatEscapes,muttrcPgpEntryFormatConditionals,muttrcFormatErrors,muttrcPgpTimeEscapes        nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcQueryFormatString         contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcQueryFormatEscapes,muttrcQueryFormatConditionals,muttrcFormatErrors                                   nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcQueryFormatString         contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcQueryFormatEscapes,muttrcQueryFormatConditionals,muttrcFormatErrors                                   nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcSidebarFormatString       contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcSidebarFormatEscapes,muttrcSidebarFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes             nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcSidebarFormatString       contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcSidebarFormatEscapes,muttrcSidebarFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes             nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcSmimeCommandFormatString  contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcSmimeCommandFormatEscapes,muttrcSmimeCommandFormatConditionals,muttrcVariable,muttrcFormatErrors      nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcSmimeCommandFormatString  contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcSmimeCommandFormatEscapes,muttrcSmimeCommandFormatConditionals,muttrcVariable,muttrcFormatErrors      nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcStatusFormatString        contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcStatusFormatEscapes,muttrcStatusFormatConditionals,muttrcFormatErrors                                 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcStatusFormatString        contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcStatusFormatEscapes,muttrcStatusFormatConditionals,muttrcFormatErrors                                 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcStrftimeFormatString      contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcStrftimeEscapes,muttrcFormatErrors                                                                    nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax region muttrcStrftimeFormatString      contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcStrftimeEscapes,muttrcFormatErrors                                                                    nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +
    +" Format escapes and conditionals
    +syntax match muttrcFormatConditionals2 contained /[^?]*?/
    +
    +syntax region muttrcPgpTimeEscapes contained start=+%\[+ end=+\]+ contains=muttrcStrftimeEscapes
    +syntax region muttrcTimeEscapes    contained start=+%(+  end=+)+  contains=muttrcStrftimeEscapes
    +syntax region muttrcTimeEscapes    contained start=+%<+  end=+>+  contains=muttrcStrftimeEscapes
    +syntax region muttrcTimeEscapes    contained start=+%\[+ end=+\]+ contains=muttrcStrftimeEscapes
    +syntax region muttrcTimeEscapes    contained start=+%{+  end=+}+  contains=muttrcStrftimeEscapes
    +
    +syntax match muttrcVarEqualsAliasFormat         contained skipwhite "=" nextgroup=muttrcAliasFormatString
    +syntax match muttrcVarEqualsAttachFormat        contained skipwhite "=" nextgroup=muttrcAttachFormatString
    +syntax match muttrcVarEqualsAutocryptFormat     contained skipwhite "=" nextgroup=muttrcAutocryptFormatString
    +syntax match muttrcVarEqualsComposeFormat       contained skipwhite "=" nextgroup=muttrcComposeFormatString
    +syntax match muttrcVarEqualsFolderFormat        contained skipwhite "=" nextgroup=muttrcFolderFormatString
    +syntax match muttrcVarEqualsGreetingFormat      contained skipwhite "=" nextgroup=muttrcGreetingFormatString
    +syntax match muttrcVarEqualsGroupIndexFormat    contained skipwhite "=" nextgroup=muttrcGroupIndexFormatString
    +syntax match muttrcVarEqualsHistoryFormat       contained skipwhite "=" nextgroup=muttrcHistoryFormatString
    +syntax match muttrcVarEqualsIndexFormat         contained skipwhite "=" nextgroup=muttrcIndexFormatString
    +syntax match muttrcVarEqualsPatternFormat       contained skipwhite "=" nextgroup=muttrcPatternFormatString
    +syntax match muttrcVarEqualsPgpCommandFormat    contained skipwhite "=" nextgroup=muttrcPgpCommandFormatString
    +syntax match muttrcVarEqualsPgpEntryFormat      contained skipwhite "=" nextgroup=muttrcPgpEntryFormatString
    +syntax match muttrcVarEqualsQueryFormat         contained skipwhite "=" nextgroup=muttrcQueryFormatString
    +syntax match muttrcVarEqualsSidebarFormat       contained skipwhite "=" nextgroup=muttrcSidebarFormatString
    +syntax match muttrcVarEqualsSmimeCommandFormat  contained skipwhite "=" nextgroup=muttrcSmimeCommandFormatString
    +syntax match muttrcVarEqualsStatusFormat        contained skipwhite "=" nextgroup=muttrcStatusFormatString
    +syntax match muttrcVarEqualsStrftimeFormat      contained skipwhite "=" nextgroup=muttrcStrftimeFormatString
    +
    +syntax match muttrcVPrefix contained /[?&]/ nextgroup=muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +
    +" CHECKED 2024 Oct 12
    +" List of the different screens in NeoMutt (see MenuNames in menu/type.c)
    +syntax keyword muttrcMenu contained alias attach autocrypt browser compose dialog editor generic index key_select_pgp key_select_smime pager pgp postpone query smime
    +syntax match muttrcMenuList "\S\+" contained contains=muttrcMenu
    +syntax match muttrcMenuCommas /,/ contained
    +
    +syntax region muttrcSpamPattern	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPattern nextgroup=muttrcString,muttrcStringNL
    +syntax region muttrcSpamPattern	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPattern nextgroup=muttrcString,muttrcStringNL
    +
    +syntax region muttrcNoSpamPattern	contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPattern
    +syntax region muttrcNoSpamPattern	contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPattern
    +
    +syntax match muttrcAttachmentsMimeType contained "[*a-z0-9_-]\+/[*a-z0-9._-]\+\s*" skipwhite nextgroup=muttrcAttachmentsMimeType
    +syntax match muttrcAttachmentsFlag contained "[+-]\%([AI]\|inline\|attachment\)\s\+" skipwhite nextgroup=muttrcAttachmentsMimeType
    +syntax match muttrcAttachmentsLine "^\s*\%(un\)\?attachments\s\+" skipwhite nextgroup=muttrcAttachmentsFlag
    +
    +syntax match muttrcUnHighlightSpace contained "\%(\s\+\|\\$\)"
    +
    +syntax keyword muttrcAsterisk	contained *
    +
    +syntax keyword muttrcListsKeyword	lists skipwhite nextgroup=muttrcGroupDef,muttrcComment
    +syntax keyword muttrcListsKeyword	unlists skipwhite nextgroup=muttrcAsterisk,muttrcComment
    +
    +syntax keyword muttrcSubscribeKeyword	subscribe skipwhite nextgroup=muttrcGroupDef,muttrcComment
    +syntax keyword muttrcSubscribeKeyword	unsubscribe skipwhite nextgroup=muttrcAsterisk,muttrcComment
    +
    +syntax keyword muttrcAlternateKeyword contained alternates unalternates
    +syntax region muttrcAlternatesLine keepend start=+^\s*\%(un\)\?alternates\s+ skip=+\\$+ end=+$+ contains=muttrcAlternateKeyword,muttrcGroupDef,muttrcRXPat,muttrcUnHighlightSpace,muttrcComment
    +
    +" muttrcVariable includes a prefix because partial strings are considered valid.
    +syntax match muttrcVariable	contained "\\\@]\+" contains=muttrcEmail
    +syntax match muttrcAction		contained "<[^>]\{-}>" contains=muttrcBadAction,muttrcFunction,muttrcKeyName
    +
    +" CHECKED 2024 Oct 12
    +" First, hooks that take regular expressions:
    +syntax match  muttrcRXHookNot		contained /!\s*/ skipwhite nextgroup=muttrcRXHookString,muttrcRXHookStringNL
    +syntax match  muttrcRXHookNoRegex	contained /-noregex/ skipwhite nextgroup=muttrcRXHookString,muttrcRXHookStringNL
    +syntax match  muttrcRXHooks	/\<\%(account\|append\|close\|crypt\|open\|pgp\|shutdown\|startup\|timeout\)-hook\>/ skipwhite nextgroup=muttrcRXHookNot,muttrcRXHookString,muttrcRXHookStringNL
    +syntax match  muttrcRXHooks	/\<\%(folder\|mbox\)-hook\>/ skipwhite nextgroup=muttrcRXHookNoRegex,muttrcRXHookNot,muttrcRXHookString,muttrcRXHookStringNL
    +
    +" Now, hooks that take patterns
    +syntax match muttrcPatHookNot	contained /!\s*/ skipwhite nextgroup=muttrcPattern
    +syntax match muttrcPatHooks	/\<\%(charset\|iconv\|index-format\)-hook\>/ skipwhite nextgroup=muttrcPatHookNot,muttrcPattern
    +syntax match muttrcPatHooks	/\<\%(message\|reply\|send\|send2\|save\|fcc\|fcc-save\)-hook\>/ skipwhite nextgroup=muttrcPatHookNot,muttrcOptPattern
    +
    +" Global hooks that take a command
    +syntax keyword muttrcHooks skipwhite shutdown-hook startup-hook timeout-hook nextgroup=muttrcCommand
    +
    +syntax match muttrcBindFunction		contained /\S\+\>/ skipwhite contains=muttrcFunction
    +syntax match muttrcBindFunctionNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcBindFunction,muttrcBindFunctionNL
    +syntax match muttrcBindKey		contained /\S\+/   skipwhite contains=muttrcKey nextgroup=muttrcBindFunction,muttrcBindFunctionNL
    +syntax match muttrcBindKeyNL		contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcBindKey,muttrcBindKeyNL
    +syntax match muttrcBindMenuList		contained /\S\+/   skipwhite contains=muttrcMenu,muttrcMenuCommas nextgroup=muttrcBindKey,muttrcBindKeyNL
    +syntax match muttrcBindMenuListNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcBindMenuList,muttrcBindMenuListNL
    +
    +syntax region muttrcMacroDescr	contained keepend skipwhite start=+\s*\S+ms=e skip=+\\ + end=+ \|$+me=s
    +syntax region muttrcMacroDescr	contained keepend skipwhite start=+'+ms=e skip=+\\'+ end=+'+me=s
    +syntax region muttrcMacroDescr	contained keepend skipwhite start=+"+ms=e skip=+\\"+ end=+"+me=s
    +syntax match muttrcMacroDescrNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcMacroDescr,muttrcMacroDescrNL
    +syntax region muttrcMacroBody	contained skipwhite start="\S" skip='\\ \|\\$' end=' \|$' contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcCommand,muttrcAction nextgroup=muttrcMacroDescr,muttrcMacroDescrNL
    +syntax region muttrcMacroBody	matchgroup=Type contained skipwhite start=+'+ms=e skip=+\\'+ end=+'\|\%(\%(\\\\\)\@]\+>/ contains=muttrcEmail nextgroup=muttrcAliasComma
    +syntax match muttrcAliasEncEmailNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasEncEmail,muttrcAliasEncEmailNL
    +syntax match muttrcAliasNameNoParens contained /[^<(@]\+\s\+/ nextgroup=muttrcAliasEncEmail,muttrcAliasEncEmailNL
    +syntax region muttrcAliasName	contained matchgroup=Type start=/(/ end=/)/ skipwhite
    +syntax match muttrcAliasNameNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasName,muttrcAliasNameNL
    +syntax match muttrcAliasENNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasEmail,muttrcAliasEncEmail,muttrcAliasNameNoParens,muttrcAliasENNL
    +syntax match muttrcAliasKey	contained /\s*[^- \t]\S\+/ skipwhite nextgroup=muttrcAliasEmail,muttrcAliasEncEmail,muttrcAliasNameNoParens,muttrcAliasENNL
    +syntax match muttrcAliasNL		contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasGroupDef,muttrcAliasKey,muttrcAliasNL
    +
    +syntax match muttrcUnAliasKey	contained "\s*\w\+\s*" skipwhite nextgroup=muttrcUnAliasKey,muttrcUnAliasNL
    +syntax match muttrcUnAliasNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcUnAliasKey,muttrcUnAliasNL
    +
    +" CHECKED 2024 Oct 12
    +" List of letters in Flags in pattern/flags.c
    +" Parameter: none
    +syntax match muttrcSimplePat contained "!\?\^\?[~][ADEFGgklNOPpQRSTUuVv#$=]"
    +" Parameter: range
    +syntax match muttrcSimplePat contained "!\?\^\?[~][mnXz]\s*\%([<>-][0-9]\+[kM]\?\|[0-9]\+[kM]\?[-]\%([0-9]\+[kM]\?\)\?\)"
    +" Parameter: date
    +syntax match muttrcSimplePat contained "!\?\^\?[~][dr]\s*\%(\%(-\?[0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)*\)\|\%(\%([0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)*\)-\%([0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)\?\)\?\)\|\%([<>=][0-9]\+[ymwd]\)\|\%(`[^`]\+`\)\|\%(\$[a-zA-Z0-9_-]\+\)\)" contains=muttrcShellString,muttrcVariable
    +" Parameter: regex
    +syntax match muttrcSimplePat contained "!\?\^\?[~][BbCcefHhIiKLMstwxYy]\s*" nextgroup=muttrcSimplePatRXContainer
    +" Parameter: pattern
    +syntax match muttrcSimplePat contained "!\?\^\?[%][BbCcefHhiLstxy]\s*" nextgroup=muttrcSimplePatString
    +" Parameter: pattern
    +syntax match muttrcSimplePat contained "!\?\^\?[=][bcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatString
    +syntax region muttrcSimplePat contained keepend start=+!\?\^\?[~](+ end=+)+ contains=muttrcSimplePat
    +
    +"syn match muttrcSimplePat contained /'[^~=%][^']*/ contains=muttrcRXString
    +syntax region muttrcSimplePatString contained keepend start=+"+ end=+"+ skip=+\\"+
    +syntax region muttrcSimplePatString contained keepend start=+'+ end=+'+ skip=+\\'+
    +syntax region muttrcSimplePatString contained keepend start=+[^	 "']+ skip=+\\ + end=+\s+re=e-1
    +syntax region muttrcSimplePatRXContainer contained keepend start=+"+ end=+"+ skip=+\\"+ contains=muttrcRXString
    +syntax region muttrcSimplePatRXContainer contained keepend start=+'+ end=+'+ skip=+\\'+ contains=muttrcRXString
    +syntax region muttrcSimplePatRXContainer contained keepend start=+[^	 "']+ skip=+\\ + end=+\s+re=e-1 contains=muttrcRXString
    +syntax match muttrcSimplePatMetas contained /[(|)]/
    +
    +syntax match muttrcOptSimplePat contained skipwhite /[~=%!(^].*/ contains=muttrcSimplePat,muttrcSimplePatMetas
    +syntax match muttrcOptSimplePat contained skipwhite /[^~=%!(^].*/ contains=muttrcRXString
    +syntax region muttrcOptPattern contained matchgroup=Type keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcOptSimplePat,muttrcUnHighlightSpace nextgroup=muttrcString,muttrcStringNL
    +syntax region muttrcOptPattern contained matchgroup=Type keepend skipwhite start=+'+ skip=+\\'+ end=+'+ contains=muttrcOptSimplePat,muttrcUnHighlightSpace nextgroup=muttrcString,muttrcStringNL
    +syntax region muttrcOptPattern contained keepend skipwhite start=+[~](+ end=+)+ skip=+\\)+ contains=muttrcSimplePat nextgroup=muttrcString,muttrcStringNL
    +syntax match muttrcOptPattern contained skipwhite /[~][A-Za-z]/ contains=muttrcSimplePat nextgroup=muttrcString,muttrcStringNL
    +syntax match muttrcOptPattern contained skipwhite /[.]/ nextgroup=muttrcString,muttrcStringNL
    +" Keep muttrcPattern and muttrcOptPattern synchronized
    +syntax region muttrcPattern contained matchgroup=Type keepend skipwhite start=+"+ skip=+\\"+ end=+"+ contains=muttrcSimplePat,muttrcUnHighlightSpace,muttrcSimplePatMetas
    +syntax region muttrcPattern contained matchgroup=Type keepend skipwhite start=+'+ skip=+\\'+ end=+'+ contains=muttrcSimplePat,muttrcUnHighlightSpace,muttrcSimplePatMetas
    +syntax region muttrcPattern contained keepend skipwhite start=+[~](+ end=+)+ skip=+\\)+ contains=muttrcSimplePat
    +syntax match muttrcPattern contained skipwhite /[~][A-Za-z]/ contains=muttrcSimplePat
    +syntax match muttrcPattern contained skipwhite /[.]/
    +syntax region muttrcPatternInner contained keepend start=+"[~=%!(^]+ms=s+1 skip=+\\"+ end=+"+me=e-1 contains=muttrcSimplePat,muttrcUnHighlightSpace,muttrcSimplePatMetas
    +syntax region muttrcPatternInner contained keepend start=+'[~=%!(^]+ms=s+1 skip=+\\'+ end=+'+me=e-1 contains=muttrcSimplePat,muttrcUnHighlightSpace,muttrcSimplePatMetas
    +
    +" Colour definitions takes object, foreground and background arguments (regexes excluded).
    +syntax match muttrcColorMatchCount	contained "[0-9]\+"
    +syntax match muttrcColorMatchCountNL contained skipwhite skipnl "\s*\\$" nextgroup=muttrcColorMatchCount,muttrcColorMatchCountNL
    +syntax region muttrcColorRXPat	contained start=+\s*'+ skip=+\\'+ end=+'\s*+ keepend skipwhite contains=muttrcRXString2 nextgroup=muttrcColorMatchCount,muttrcColorMatchCountNL
    +syntax region muttrcColorRXPat	contained start=+\s*"+ skip=+\\"+ end=+"\s*+ keepend skipwhite contains=muttrcRXString2 nextgroup=muttrcColorMatchCount,muttrcColorMatchCountNL
    +syntax keyword muttrcColor	contained black blue cyan default green magenta red white yellow
    +syntax keyword muttrcColor	contained brightblack brightblue brightcyan brightdefault brightgreen brightmagenta brightred brightwhite brightyellow
    +syntax keyword muttrcColor	contained lightblack lightblue lightcyan lightdefault lightgreen lightmagenta lightred lightwhite lightyellow
    +syntax keyword muttrcColor	contained alertblack alertblue alertcyan alertdefault alertgreen alertmagenta alertred alertwhite alertyellow
    +syntax match   muttrcColor	contained "\<\%(bright\)\=color\d\{1,3}\>"
    +syntax match   muttrcColor	contained "#[0-9a-fA-F]\{6}\>"
    +
    +" Now for the structure of the color line
    +syntax match muttrcColorRXNL	contained skipnl "\s*\\$" nextgroup=muttrcColorRXPat,muttrcColorRXNL
    +syntax match muttrcColorBG	contained /\s*[#$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorRXPat,muttrcColorRXNL
    +syntax match muttrcColorBGNL	contained skipnl "\s*\\$" nextgroup=muttrcColorBG,muttrcColorBGNL
    +syntax match muttrcColorFG	contained /\s*[#$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorBG,muttrcColorBGNL
    +syntax match muttrcColorFGNL	contained skipnl "\s*\\$" nextgroup=muttrcColorFG,muttrcColorFGNL
    +syntax match muttrcColorContext	contained /\s*[#$]\?\w\+/ contains=muttrcColorField,muttrcVariable,muttrcUnHighlightSpace,muttrcColorCompose nextgroup=muttrcColorFG,muttrcColorFGNL
    +syntax match muttrcColorNL	contained skipnl "\s*\\$" nextgroup=muttrcColorContext,muttrcColorNL,muttrcColorCompose
    +syntax match muttrcColorKeyword	contained /^\s*color\s\+/ nextgroup=muttrcColorContext,muttrcColorNL,muttrcColorCompose
    +" And now color's brother:
    +syntax region muttrcUnColorPatterns contained skipwhite start=+\s*'+ end=+'+ skip=+\\'+ contains=muttrcPattern nextgroup=muttrcUnColorPatterns,muttrcUnColorPatNL
    +syntax region muttrcUnColorPatterns contained skipwhite start=+\s*"+ end=+"+ skip=+\\"+ contains=muttrcPattern nextgroup=muttrcUnColorPatterns,muttrcUnColorPatNL
    +syntax match muttrcUnColorPatterns contained skipwhite /\s*[^'"\s]\S\*/ contains=muttrcPattern nextgroup=muttrcUnColorPatterns,muttrcUnColorPatNL
    +syntax match muttrcUnColorPatNL	contained skipwhite skipnl /\s*\\$/ nextgroup=muttrcUnColorPatterns,muttrcUnColorPatNL
    +syntax match muttrcUnColorAll	contained skipwhite /[*]/
    +syntax match muttrcUnColorAPNL	contained skipwhite skipnl /\s*\\$/ nextgroup=muttrcUnColorPatterns,muttrcUnColorAll,muttrcUnColorAPNL
    +syntax match muttrcUnColorIndex	contained skipwhite /\s*index\s\+/ nextgroup=muttrcUnColorPatterns,muttrcUnColorAll,muttrcUnColorAPNL
    +syntax match muttrcUnColorIndexNL	contained skipwhite skipnl /\s*\\$/ nextgroup=muttrcUnColorIndex,muttrcUnColorIndexNL
    +syntax match muttrcUnColorKeyword	contained skipwhite /^\s*uncolor\s\+/ nextgroup=muttrcUnColorIndex,muttrcUnColorIndexNL
    +syntax region muttrcUnColorLine keepend start=+^\s*uncolor\s+ skip=+\\$+ end=+$+ contains=muttrcUnColorKeyword,muttrcComment,muttrcUnHighlightSpace
    +
    +syntax keyword muttrcMonoAttrib	contained bold italic none normal reverse standout underline
    +syntax keyword muttrcMono	contained mono		skipwhite nextgroup=muttrcColorField,muttrcColorCompose
    +syntax match   muttrcMonoLine	"^\s*mono\s\+\S\+"	skipwhite nextgroup=muttrcMonoAttrib contains=muttrcMono
    +
    +" CHECKED 2024 Oct 12
    +" List of fields in ColorFields in color/command.c
    +syntax keyword muttrcColorField skipwhite contained
    +	\ attachment attach_headers body bold error hdrdefault header index index_author
    +	\ index_collapsed index_date index_flags index_label index_number index_size index_subject
    +	\ index_tag index_tags indicator italic markers message normal options progress prompt
    +	\ search sidebar_background sidebar_divider sidebar_flagged sidebar_highlight
    +	\ sidebar_indicator sidebar_new sidebar_ordinary sidebar_spool_file sidebar_unread signature
    +	\ status stripe_even stripe_odd tilde tree underline warning
    +	\ nextgroup=muttrcColor
    +
    +syntax match   muttrcColorField	contained "\"
    +
    +syntax match muttrcColorCompose skipwhite contained /\s*compose\s*/ nextgroup=muttrcColorComposeField
    +
    +" CHECKED 2024 Oct 12
    +" List of fields in ComposeColorFields in color/command.c
    +syntax keyword muttrcColorComposeField skipwhite contained
    +	\ header security_both security_encrypt security_none security_sign
    +	\ nextgroup=muttrcColorFG,muttrcColorFGNL
    +syntax region muttrcColorLine keepend start=/^\s*color\s\+/ skip=+\\$+ end=+$+ contains=muttrcColorKeyword,muttrcComment,muttrcUnHighlightSpace
    +
    +function! s:boolQuadGen(type, vars, deprecated)
    +	let l:novars = copy(a:vars)
    +	call map(l:novars, '"no" . v:val')
    +	let l:invvars = copy(a:vars)
    +	call map(l:invvars, '"inv" . v:val')
    +
    +	let l:orig_type = copy(a:type)
    +	if a:deprecated
    +		let l:type = 'Deprecated' . a:type
    +		exec 'syntax keyword muttrcVar' . l:type . ' ' . join(a:vars)
    +		exec 'syntax keyword muttrcVar' . l:type . ' ' . join(l:novars)
    +		exec 'syntax keyword muttrcVar' . l:type . ' ' . join(l:invvars)
    +	else
    +		let l:type = a:type
    +		exec 'syntax keyword muttrcVar' . l:type . ' skipwhite contained ' . join(a:vars) . ' nextgroup=muttrcSet' . l:orig_type . 'Assignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString'
    +		exec 'syntax keyword muttrcVar' . l:type . ' skipwhite contained ' . join(l:novars) . ' nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString'
    +		exec 'syntax keyword muttrcVar' . l:type . ' skipwhite contained ' . join(l:invvars) . ' nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString'
    +	endif
    +
    +endfunction
    +
    +" CHECKED 2024 Oct 12
    +" List of DT_BOOL in MuttVars in mutt_config.c
    +call s:boolQuadGen('Bool', [
    +	\ 'abort_backspace', 'allow_8bit', 'allow_ansi', 'arrow_cursor', 'ascii_chars', 'ask_bcc',
    +	\ 'ask_cc', 'ask_followup_to', 'ask_x_comment_to', 'attach_save_without_prompting',
    +	\ 'attach_split', 'autocrypt', 'autocrypt_reply', 'auto_edit', 'auto_subscribe', 'auto_tag',
    +	\ 'beep', 'beep_new', 'bounce_delivered', 'braille_friendly',
    +	\ 'browser_abbreviate_mailboxes', 'browser_sort_dirs_first', 'change_folder_next',
    +	\ 'check_mbox_size', 'check_new', 'collapse_all', 'collapse_flagged', 'collapse_unread',
    +	\ 'color_directcolor', 'compose_confirm_detach_first', 'compose_show_user_headers',
    +	\ 'confirm_append', 'confirm_create', 'copy_decode_weed', 'count_alternatives',
    +	\ 'crypt_auto_encrypt', 'crypt_auto_pgp', 'crypt_auto_sign', 'crypt_auto_smime',
    +	\ 'crypt_confirm_hook', 'crypt_encryption_info', 'crypt_opportunistic_encrypt',
    +	\ 'crypt_opportunistic_encrypt_strong_keys', 'crypt_protected_headers_read',
    +	\ 'crypt_protected_headers_save', 'crypt_protected_headers_weed',
    +	\ 'crypt_protected_headers_write', 'crypt_reply_encrypt', 'crypt_reply_sign',
    +	\ 'crypt_reply_sign_encrypted', 'crypt_timestamp', 'crypt_use_gpgme', 'crypt_use_pka',
    +	\ 'delete_untag', 'digest_collapse', 'duplicate_threads', 'edit_headers', 'encode_from',
    +	\ 'fast_reply', 'fcc_before_send', 'fcc_clear', 'flag_safe', 'followup_to', 'force_name',
    +	\ 'forward_decode', 'forward_decrypt', 'forward_quote', 'forward_references', 'hdrs',
    +	\ 'header', 'header_color_partial', 'help', 'hidden_host', 'hide_limited', 'hide_missing',
    +	\ 'hide_thread_subject', 'hide_top_limited', 'hide_top_missing', 'history_remove_dups',
    +	\ 'honor_disposition', 'idn_decode', 'idn_encode', 'ignore_list_reply_to',
    +	\ 'imap_check_subscribed', 'imap_condstore', 'imap_deflate', 'imap_idle',
    +	\ 'imap_list_subscribed', 'imap_passive', 'imap_peek', 'imap_qresync', 'imap_rfc5161',
    +	\ 'imap_send_id', 'imap_server_noise', 'implicit_auto_view', 'include_encrypted',
    +	\ 'include_only_first', 'keep_flagged', 'local_date_header', 'mailcap_sanitize',
    +	\ 'maildir_check_cur', 'maildir_header_cache_verify', 'maildir_trash', 'mail_check_recent',
    +	\ 'mail_check_stats', 'markers', 'mark_old', 'menu_move_off', 'menu_scroll',
    +	\ 'message_cache_clean', 'meta_key', 'me_too', 'mh_purge', 'mime_forward_decode',
    +	\ 'mime_type_query_first', 'narrow_tree', 'nm_query_window_enable', 'nm_record',
    +	\ 'nntp_listgroup', 'nntp_load_description', 'pager_stop', 'pgp_auto_decode',
    +	\ 'pgp_auto_inline', 'pgp_check_exit', 'pgp_check_gpg_decrypt_status_fd',
    +	\ 'pgp_ignore_subkeys', 'pgp_long_ids', 'pgp_reply_inline', 'pgp_retainable_sigs',
    +	\ 'pgp_self_encrypt', 'pgp_show_unusable', 'pgp_strict_enc', 'pgp_use_gpg_agent',
    +	\ 'pipe_decode', 'pipe_decode_weed', 'pipe_split', 'pop_auth_try_all', 'pop_last',
    +	\ 'postpone_encrypt', 'print_decode', 'print_decode_weed', 'print_split', 'prompt_after',
    +	\ 'read_only', 'reflow_space_quotes', 'reflow_text', 'reply_self', 'reply_with_xorig',
    +	\ 'resolve', 'resume_draft_files', 'resume_edited_draft_files', 'reverse_alias',
    +	\ 'reverse_name', 'reverse_real_name', 'rfc2047_parameters', 'save_address', 'save_empty',
    +	\ 'save_name', 'save_unsubscribed', 'score', 'show_new_news', 'show_only_unread',
    +	\ 'sidebar_folder_indent', 'sidebar_new_mail_only', 'sidebar_next_new_wrap',
    +	\ 'sidebar_non_empty_mailbox_only', 'sidebar_on_right', 'sidebar_short_path',
    +	\ 'sidebar_visible', 'sig_dashes', 'sig_on_top', 'size_show_bytes', 'size_show_fractions',
    +	\ 'size_show_mb', 'size_units_on_left', 'smart_wrap', 'smime_ask_cert_label',
    +	\ 'smime_decrypt_use_default_key', 'smime_is_default', 'smime_self_encrypt', 'sort_re',
    +	\ 'ssl_force_tls', 'ssl_use_sslv2', 'ssl_use_sslv3', 'ssl_use_system_certs',
    +	\ 'ssl_use_tlsv1', 'ssl_use_tlsv1_1', 'ssl_use_tlsv1_2', 'ssl_use_tlsv1_3',
    +	\ 'ssl_verify_dates', 'ssl_verify_host', 'ssl_verify_partial_chains', 'status_on_top',
    +	\ 'strict_threads', 'suspend', 'text_flowed', 'thorough_search', 'thread_received', 'tilde',
    +	\ 'ts_enabled', 'tunnel_is_secure', 'uncollapse_jump', 'uncollapse_new', 'user_agent',
    +	\ 'use_8bit_mime', 'use_domain', 'use_envelope_from', 'use_from', 'use_ipv6',
    +	\ 'virtual_spool_file', 'wait_key', 'weed', 'wrap_search', 'write_bcc', 'x_comment_to'
    +	\ ], 0)
    +
    +" CHECKED 2024 Oct 12
    +" Deprecated Bools
    +" List of DT_SYNONYM or DT_DEPRECATED Bools in MuttVars in mutt_config.c
    +call s:boolQuadGen('Bool', [
    +	\ 'askbcc', 'askcc', 'ask_follow_up', 'autoedit', 'confirmappend', 'confirmcreate',
    +	\ 'crypt_autoencrypt', 'crypt_autopgp', 'crypt_autosign', 'crypt_autosmime',
    +	\ 'crypt_confirmhook', 'crypt_replyencrypt', 'crypt_replysign', 'crypt_replysignencrypted',
    +	\ 'cursor_overlay', 'edit_hdrs', 'envelope_from', 'forw_decode', 'forw_decrypt',
    +	\ 'forw_quote', 'header_cache_compress', 'ignore_linear_white_space', 'imap_servernoise',
    +	\ 'implicit_autoview', 'include_onlyfirst', 'metoo', 'mime_subject', 'pgp_autoencrypt',
    +	\ 'pgp_autoinline', 'pgp_autosign', 'pgp_auto_traditional', 'pgp_create_traditional',
    +	\ 'pgp_replyencrypt', 'pgp_replyinline', 'pgp_replysign', 'pgp_replysignencrypted',
    +	\ 'pgp_self_encrypt_as', 'reverse_realname', 'smime_self_encrypt_as', 'ssl_usesystemcerts',
    +	\ 'use_8bitmime', 'virtual_spoolfile', 'xterm_set_titles'
    +	\ ], 1)
    +
    +" CHECKED 2024 Oct 12
    +" List of DT_QUAD in MuttVars in mutt_config.c
    +call s:boolQuadGen('Quad', [
    +	\ 'abort_noattach', 'abort_nosubject', 'abort_unmodified', 'bounce', 'catchup_newsgroup',
    +	\ 'copy', 'crypt_verify_sig', 'delete', 'fcc_attach', 'followup_to_poster',
    +	\ 'forward_attachments', 'forward_edit', 'honor_followup_to', 'include', 'mime_forward',
    +	\ 'mime_forward_rest', 'move', 'pgp_mime_auto', 'pop_delete', 'pop_reconnect', 'postpone',
    +	\ 'post_moderated', 'print', 'quit', 'recall', 'reply_to', 'ssl_starttls'
    +	\ ], 0)
    +
    +" CHECKED 2024 Oct 12
    +" Deprecated Quads
    +" List of DT_SYNONYM or DT_DEPRECATED Quads in MuttVars in mutt_config.c
    +call s:boolQuadGen('Quad', [
    +	\ 'mime_fwd', 'pgp_encrypt_self', 'pgp_verify_sig', 'smime_encrypt_self'
    +	\ ], 1)
    +
    +" CHECKED 2024 Oct 12
    +" List of DT_NUMBER or DT_LONG in MuttVars in mutt_config.c
    +syntax keyword muttrcVarNum	skipwhite contained
    +	\ debug_level header_cache_compress_level history imap_fetch_chunk_size imap_keep_alive
    +	\ imap_pipeline_depth imap_poll_timeout mail_check mail_check_stats_interval menu_context
    +	\ net_inc nm_db_limit nm_open_timeout nm_query_window_current_position
    +	\ nm_query_window_duration nntp_context nntp_poll pager_context pager_index_lines
    +	\ pager_read_delay pager_skip_quoted_context pgp_timeout pop_check_interval read_inc
    +	\ reflow_wrap save_history score_threshold_delete score_threshold_flag score_threshold_read
    +	\ search_context sendmail_wait sidebar_component_depth sidebar_width sleep_time
    +	\ smime_timeout socket_timeout ssl_min_dh_prime_bits timeout time_inc
    +	\ toggle_quoted_show_levels wrap wrap_headers write_inc
    +	\ nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +" CHECKED 2024 Oct 12
    +" Deprecated Numbers
    +syntax keyword muttrcVarDeprecatedNum
    +	\ connect_timeout header_cache_pagesize imap_keepalive pop_checkinterval skip_quoted_offset
    +
    +" CHECKED 2024 Oct 12
    +" List of DT_STRING in MuttVars in mutt_config.c
    +" Special cases first, and all the rest at the end
    +" Formats themselves must be updated in their respective groups
    +" See s:escapesConditionals
    +syntax match   muttrcVarString	contained skipwhite 'my_[a-zA-Z0-9_]\+' nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax keyword muttrcVarString	contained skipwhite alias_format nextgroup=muttrcVarEqualsAliasFormat
    +syntax keyword muttrcVarString	contained skipwhite attach_format nextgroup=muttrcVarEqualsAttachFormat
    +syntax keyword muttrcVarString	contained skipwhite autocrypt_acct_format nextgroup=muttrcVarEqualsAutocryptFormat
    +syntax keyword muttrcVarString	contained skipwhite compose_format nextgroup=muttrcVarEqualsComposeFormat
    +syntax keyword muttrcVarString	contained skipwhite folder_format mailbox_folder_format nextgroup=muttrcVarEqualsFolderFormat
    +syntax keyword muttrcVarString	contained skipwhite greeting nextgroup=muttrcVarEqualsGreetingFormat
    +syntax keyword muttrcVarString	contained skipwhite history_format nextgroup=muttrcVarEqualsHistoryFormat
    +syntax keyword muttrcVarString	contained skipwhite
    +	\ attribution_intro attribution_trailer forward_attribution_intro forward_attribution_trailer
    +	\ forward_format indent_string index_format message_format pager_format
    +	\ nextgroup=muttrcVarEqualsIndexFormat
    +syntax keyword muttrcVarString	contained skipwhite pattern_format nextgroup=muttrcVarEqualsPatternFormat
    +syntax keyword muttrcVarString	contained skipwhite
    +	\ pgp_clear_sign_command pgp_decode_command pgp_decrypt_command pgp_encrypt_only_command
    +	\ pgp_encrypt_sign_command pgp_export_command pgp_get_keys_command pgp_import_command
    +	\ pgp_list_pubring_command pgp_list_secring_command pgp_sign_command pgp_verify_command
    +	\ pgp_verify_key_command
    +	\ nextgroup=muttrcVarEqualsPgpCommandFormat
    +syntax keyword muttrcVarString	contained skipwhite pgp_entry_format nextgroup=muttrcVarEqualsPgpEntryFormat
    +syntax keyword muttrcVarString	contained skipwhite query_format nextgroup=muttrcVarEqualsQueryFormat
    +syntax keyword muttrcVarString	contained skipwhite
    +	\ smime_decrypt_command smime_encrypt_command smime_get_cert_command
    +	\ smime_get_cert_email_command smime_get_signer_cert_command smime_import_cert_command
    +	\ smime_pk7out_command smime_sign_command smime_verify_command smime_verify_opaque_command
    +	\ nextgroup=muttrcVarEqualsSmimeCommandFormat
    +syntax keyword muttrcVarString	contained skipwhite status_format ts_icon_format ts_status_format nextgroup=muttrcVarEqualsStatusFormat
    +syntax keyword muttrcVarString	contained skipwhite date_format nextgroup=muttrcVarEqualsStrftimeFormat
    +syntax keyword muttrcVarString	contained skipwhite group_index_format nextgroup=muttrcVarEqualsGroupIndexFormat
    +syntax keyword muttrcVarString	contained skipwhite sidebar_format nextgroup=muttrcVarEqualsSidebarFormat
    +syntax keyword muttrcVarString	contained skipwhite
    +	\ abort_key arrow_string assumed_charset attach_charset attach_sep attribution_locale
    +	\ charset config_charset content_type crypt_protected_headers_subject default_hook
    +	\ dsn_notify dsn_return empty_subject header_cache_backend header_cache_compress_method
    +	\ hidden_tags hostname imap_authenticators imap_delim_chars imap_headers imap_login
    +	\ imap_pass imap_user mailcap_path maildir_field_delimiter mark_macro_prefix mh_seq_flagged
    +	\ mh_seq_replied mh_seq_unseen newsgroups_charset newsrc news_server nm_config_profile
    +	\ nm_default_url nm_exclude_tags nm_flagged_tag nm_query_type nm_query_window_current_search
    +	\ nm_query_window_or_terms nm_query_window_timebase nm_record_tags nm_replied_tag
    +	\ nm_unread_tag nntp_authenticators nntp_pass nntp_user pgp_default_key pgp_sign_as pipe_sep
    +	\ pop_authenticators pop_host pop_pass pop_user postpone_encrypt_as preconnect
    +	\ preferred_languages real_name send_charset show_multipart_alternative sidebar_delim_chars
    +	\ sidebar_divider_char sidebar_indent_string simple_search smime_default_key
    +	\ smime_encrypt_with smime_sign_as smime_sign_digest_alg smtp_authenticators smtp_pass
    +	\ smtp_url smtp_user spam_separator ssl_ciphers
    +	\ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +
    +" Deprecated strings
    +syntax keyword muttrcVarDeprecatedString
    +	\ abort_noattach_regexp attach_keyword attribution escape forw_format hdr_format indent_str
    +	\ message_cachedir mixmaster mix_entry_format msg_format nm_default_uri
    +	\ pgp_clearsign_command pgp_getkeys_command pgp_self_encrypt_as post_indent_str
    +	\ post_indent_string print_cmd quote_regexp realname reply_regexp smime_self_encrypt_as
    +	\ spoolfile tmpdir vfolder_format visual xterm_icon xterm_title
    +
    +" CHECKED 2024 Oct 12
    +" List of DT_ADDRESS
    +syntax keyword muttrcVarString	contained skipwhite envelope_from_address from nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +" List of DT_ENUM
    +syntax keyword muttrcVarString	contained skipwhite mbox_type use_threads nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +" List of DT_MBTABLE
    +syntax keyword muttrcVarString	contained skipwhite crypt_chars flag_chars from_chars status_chars to_chars nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +
    +" CHECKED 2024 Oct 12
    +" List of DT_PATH or D_STRING_MAILBOX
    +syntax keyword muttrcVarString	contained skipwhite
    +	\ alias_file attach_save_dir autocrypt_dir certificate_file debug_file entropy_file folder
    +	\ header_cache history_file mbox message_cache_dir news_cache_dir nm_config_file postponed
    +	\ record signature smime_ca_location smime_certificates smime_keys spool_file
    +	\ ssl_ca_certificates_file ssl_client_cert tmp_dir trash
    +	\ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +" List of DT_COMMAND (excluding pgp_*_command and smime_*_command)
    +syntax keyword muttrcVarString	contained skipwhite
    +	\ account_command display_filter editor external_search_command imap_oauth_refresh_command
    +	\ inews ispell mime_type_query_command new_mail_command pager pop_oauth_refresh_command
    +	\ print_command query_command sendmail shell smtp_oauth_refresh_command tunnel
    +	\ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +
    +" CHECKED 2024 Oct 12
    +" List of DT_REGEX
    +syntax keyword muttrcVarString	contained skipwhite
    +	\ abort_noattach_regex gecos_mask mask pgp_decryption_okay pgp_good_sign quote_regex
    +	\ reply_regex smileys
    +	\ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +" List of DT_SORT
    +syntax keyword muttrcVarString	contained skipwhite
    +	\ pgp_sort_keys sidebar_sort_method sort sort_alias sort_aux sort_browser
    +	\ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +
    +" CHECKED 2024 Oct 12
    +" List of commands in mutt_commands in commands.c
    +" Remember to remove hooks, they have already been dealt with
    +syntax keyword muttrcCommand	skipwhite alias nextgroup=muttrcAliasGroupDef,muttrcAliasKey,muttrcAliasNL
    +syntax keyword muttrcCommand	skipwhite bind nextgroup=muttrcBindMenuList,muttrcBindMenuListNL
    +syntax keyword muttrcCommand	skipwhite exec nextgroup=muttrcFunction
    +syntax keyword muttrcCommand	skipwhite macro nextgroup=muttrcMacroMenuList,muttrcMacroMenuListNL
    +syntax keyword muttrcCommand	skipwhite nospam nextgroup=muttrcNoSpamPattern
    +syntax keyword muttrcCommand	skipwhite set unset reset toggle nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarString
    +syntax keyword muttrcCommand	skipwhite spam nextgroup=muttrcSpamPattern
    +syntax keyword muttrcCommand	skipwhite unalias nextgroup=muttrcUnAliasKey,muttrcUnAliasNL
    +syntax keyword muttrcCommand	skipwhite unhook nextgroup=muttrcHooks
    +syntax keyword muttrcCommand	skipwhite
    +	\ alternative_order attachments auto_view cd echo finish hdr_order ifdef ifndef ignore lua
    +	\ lua-source mailboxes mailto_allow mime_lookup my_hdr named-mailboxes push score setenv
    +	\ sidebar_pin sidebar_unpin source subjectrx subscribe-to tag-formats tag-transforms
    +	\ unalternative_order unattachments unauto_view unbind uncolor unhdr_order unignore unmacro
    +	\ unmailboxes unmailto_allow unmime_lookup unmono unmy_hdr unscore unsetenv unsubjectrx
    +	\ unsubscribe-from unvirtual-mailboxes version virtual-mailboxes
    +
    +" CHECKED 2024 Oct 12
    +" Deprecated commands
    +syntax keyword muttrcDeprecatedCommand skipwhite
    +	\ sidebar_whitelist unsidebar_whitelist
    +
    +function! s:genFunctions(functions)
    +	for f in a:functions
    +		exec 'syntax match muttrcFunction contained "\<' . l:f . '\>"'
    +	endfor
    +endfunction
    +
    +" CHECKED 2024 Oct 12
    +" List of functions in functions.c
    +" Note: 'noop' is included but is elsewhere in the source
    +call s:genFunctions(['noop',
    +	\ 'alias-dialog', 'attach-file', 'attach-key', 'attach-message', 'attach-news-message',
    +	\ 'autocrypt-acct-menu', 'autocrypt-menu', 'backspace', 'backward-char', 'backward-word',
    +	\ 'bol', 'bottom', 'bottom-page', 'bounce-message', 'break-thread', 'buffy-cycle',
    +	\ 'buffy-list', 'capitalize-word', 'catchup', 'change-dir', 'change-folder',
    +	\ 'change-folder-readonly', 'change-newsgroup', 'change-newsgroup-readonly',
    +	\ 'change-vfolder', 'check-new', 'check-stats', 'check-traditional-pgp', 'clear-flag',
    +	\ 'collapse-all', 'collapse-parts', 'collapse-thread', 'complete', 'complete-query',
    +	\ 'compose-to-sender', 'copy-file', 'copy-message', 'create-account', 'create-alias',
    +	\ 'create-mailbox', 'current-bottom', 'current-middle', 'current-top', 'decode-copy',
    +	\ 'decode-save', 'decrypt-copy', 'decrypt-save', 'delete-account', 'delete-char',
    +	\ 'delete-entry', 'delete-mailbox', 'delete-message', 'delete-pattern', 'delete-subthread',
    +	\ 'delete-thread', 'descend-directory', 'detach-file', 'display-address',
    +	\ 'display-filename', 'display-message', 'display-toggle-weed', 'downcase-word', 'edit',
    +	\ 'edit-bcc', 'edit-cc', 'edit-content-id', 'edit-description', 'edit-encoding', 'edit-fcc',
    +	\ 'edit-file', 'edit-followup-to', 'edit-from', 'edit-headers', 'edit-label',
    +	\ 'edit-language', 'edit-message', 'edit-mime', 'edit-newsgroups',
    +	\ 'edit-or-view-raw-message', 'edit-raw-message', 'edit-reply-to', 'edit-subject',
    +	\ 'edit-to', 'edit-type', 'edit-x-comment-to', 'end-cond', 'enter-command', 'enter-mask',
    +	\ 'entire-thread', 'eol', 'error-history', 'exit', 'extract-keys', 'fetch-mail',
    +	\ 'filter-entry', 'first-entry', 'flag-message', 'followup-message', 'forget-passphrase',
    +	\ 'forward-char', 'forward-message', 'forward-to-group', 'forward-word', 'get-attachment',
    +	\ 'get-children', 'get-message', 'get-parent', 'goto-folder', 'goto-parent',
    +	\ 'group-alternatives', 'group-chat-reply', 'group-multilingual', 'group-related',
    +	\ 'group-reply', 'half-down', 'half-up', 'help', 'history-down', 'history-search',
    +	\ 'history-up', 'imap-fetch-mail', 'imap-logout-all', 'ispell', 'jump', 'kill-eol',
    +	\ 'kill-eow', 'kill-line', 'kill-whole-line', 'kill-word', 'last-entry', 'limit',
    +	\ 'limit-current-thread', 'link-threads', 'list-reply', 'list-subscribe',
    +	\ 'list-unsubscribe', 'mail', 'mail-key', 'mailbox-cycle', 'mailbox-list', 'mark-as-new',
    +	\ 'mark-message', 'middle-page', 'modify-labels', 'modify-labels-then-hide', 'modify-tags',
    +	\ 'modify-tags-then-hide', 'move-down', 'move-up', 'new-mime', 'next-entry', 'next-line',
    +	\ 'next-new', 'next-new-then-unread', 'next-page', 'next-subthread', 'next-thread',
    +	\ 'next-undeleted', 'next-unread', 'next-unread-mailbox', 'parent-message', 'pgp-menu',
    +	\ 'pipe-entry', 'pipe-message', 'post-message', 'postpone-message', 'previous-entry',
    +	\ 'previous-line', 'previous-new', 'previous-new-then-unread', 'previous-page',
    +	\ 'previous-subthread', 'previous-thread', 'previous-undeleted', 'previous-unread',
    +	\ 'print-entry', 'print-message', 'purge-message', 'purge-thread', 'quasi-delete', 'query',
    +	\ 'query-append', 'quit', 'quote-char', 'read-subthread', 'read-thread', 'recall-message',
    +	\ 'reconstruct-thread', 'redraw-screen', 'refresh', 'reload-active', 'rename-attachment',
    +	\ 'rename-file', 'rename-mailbox', 'reply', 'resend-message', 'root-message', 'save-entry',
    +	\ 'save-message', 'search', 'search-next', 'search-opposite', 'search-reverse',
    +	\ 'search-toggle', 'select-entry', 'select-new', 'send-message', 'set-flag', 'shell-escape',
    +	\ 'show-limit', 'show-log-messages', 'show-version', 'sidebar-first', 'sidebar-last',
    +	\ 'sidebar-next', 'sidebar-next-new', 'sidebar-open', 'sidebar-page-down',
    +	\ 'sidebar-page-up', 'sidebar-prev', 'sidebar-prev-new', 'sidebar-toggle-virtual',
    +	\ 'sidebar-toggle-visible', 'skip-headers', 'skip-quoted', 'smime-menu', 'sort',
    +	\ 'sort-alias', 'sort-alias-reverse', 'sort-mailbox', 'sort-reverse', 'subscribe',
    +	\ 'subscribe-pattern', 'sync-mailbox', 'tag-entry', 'tag-message', 'tag-pattern',
    +	\ 'tag-prefix', 'tag-prefix-cond', 'tag-subthread', 'tag-thread', 'toggle-active',
    +	\ 'toggle-disposition', 'toggle-mailboxes', 'toggle-new', 'toggle-prefer-encrypt',
    +	\ 'toggle-quoted', 'toggle-read', 'toggle-recode', 'toggle-subscribed', 'toggle-unlink',
    +	\ 'toggle-write', 'top', 'top-page', 'transpose-chars', 'uncatchup', 'undelete-entry',
    +	\ 'undelete-message', 'undelete-pattern', 'undelete-subthread', 'undelete-thread',
    +	\ 'ungroup-attachment', 'unsubscribe', 'unsubscribe-pattern', 'untag-pattern',
    +	\ 'upcase-word', 'update-encoding', 'verify-key', 'vfolder-from-query',
    +	\ 'vfolder-from-query-readonly', 'vfolder-window-backward', 'vfolder-window-forward',
    +	\ 'vfolder-window-reset', 'view-attach', 'view-attachments', 'view-file', 'view-mailcap',
    +	\ 'view-name', 'view-pager', 'view-raw-message', 'view-text', 'what-key', 'write-fcc'
    +	\ ])
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +highlight def link muttrcSetBoolAssignment		Boolean
    +highlight def link muttrcSetQuadAssignment		Boolean
    +
    +highlight def link muttrcComment			Comment
    +
    +highlight def link muttrcAlternatesLine			Error
    +highlight def link muttrcBadAction			Error
    +highlight def link muttrcBindFunction			Error
    +highlight def link muttrcBindMenuList			Error
    +highlight def link muttrcColorBG			Error
    +highlight def link muttrcColorContext			Error
    +highlight def link muttrcColorFG			Error
    +highlight def link muttrcColorLine			Error
    +highlight def link muttrcDeprecatedCommand		Error
    +highlight def link muttrcFormatErrors			Error
    +highlight def link muttrcGroupLine			Error
    +highlight def link muttrcPattern			Error
    +highlight def link muttrcUnColorLine			Error
    +highlight def link muttrcVarDeprecatedBool		Error
    +highlight def link muttrcVarDeprecatedNum		Error
    +highlight def link muttrcVarDeprecatedQuad		Error
    +highlight def link muttrcVarDeprecatedString		Error
    +
    +highlight def link muttrcAliasEncEmail			Identifier
    +highlight def link muttrcAliasKey			Identifier
    +highlight def link muttrcColorCompose			Identifier
    +highlight def link muttrcColorComposeField		Identifier
    +highlight def link muttrcColorField			Identifier
    +highlight def link muttrcMenu				Identifier
    +highlight def link muttrcSimplePat			Identifier
    +highlight def link muttrcUnAliasKey			Identifier
    +highlight def link muttrcUnColorIndex			Identifier
    +highlight def link muttrcVarBool			Identifier
    +highlight def link muttrcVarNum				Identifier
    +highlight def link muttrcVarQuad			Identifier
    +highlight def link muttrcVarString			Identifier
    +
    +highlight def link muttrcCommand			Keyword
    +
    +highlight def link muttrcAction				Macro
    +highlight def link muttrcAliasGroupName			Macro
    +highlight def link muttrcFunction			Macro
    +highlight def link muttrcGroupDef			Macro
    +highlight def link muttrcSimplePatString		Macro
    +
    +highlight def link muttrcMonoAttrib			muttrcColor
    +
    +highlight def link muttrcAlternateKeyword		muttrcCommand
    +highlight def link muttrcAttachmentsLine		muttrcCommand
    +highlight def link muttrcColorKeyword			muttrcCommand
    +highlight def link muttrcGroupKeyword			muttrcCommand
    +highlight def link muttrcListsKeyword			muttrcCommand
    +highlight def link muttrcMono				muttrcCommand
    +highlight def link muttrcPatHooks			muttrcCommand
    +highlight def link muttrcRXHooks			muttrcCommand
    +highlight def link muttrcSubscribeKeyword		muttrcCommand
    +highlight def link muttrcUnColorKeyword			muttrcCommand
    +
    +highlight def link muttrcAliasFormatEscapes		muttrcEscape
    +highlight def link muttrcAttachFormatEscapes		muttrcEscape
    +highlight def link muttrcAutocryptFormatEscapes		muttrcEscape
    +highlight def link muttrcComposeFormatEscapes		muttrcEscape
    +highlight def link muttrcFolderFormatEscapes		muttrcEscape
    +highlight def link muttrcGreetingFormatEscapes		muttrcEscape
    +highlight def link muttrcGroupIndexFormatEscapes	muttrcEscape
    +highlight def link muttrcHistoryFormatEscapes		muttrcEscape
    +highlight def link muttrcIndexFormatEscapes		muttrcEscape
    +highlight def link muttrcPatternFormatEscapes		muttrcEscape
    +highlight def link muttrcPgpCommandFormatEscapes	muttrcEscape
    +highlight def link muttrcPgpEntryFormatEscapes		muttrcEscape
    +highlight def link muttrcPgpTimeEscapes			muttrcEscape
    +highlight def link muttrcQueryFormatEscapes		muttrcEscape
    +highlight def link muttrcShellString			muttrcEscape
    +highlight def link muttrcSidebarFormatEscapes		muttrcEscape
    +highlight def link muttrcSmimeCommandFormatEscapes	muttrcEscape
    +highlight def link muttrcStatusFormatEscapes		muttrcEscape
    +highlight def link muttrcTimeEscapes			muttrcEscape
    +
    +highlight def link muttrcAliasFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcAttachFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcAutocryptFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcComposeFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcFolderFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcGreetingFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcGroupIndexFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcHistoryFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcIndexFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcPatternFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcPgpCommandFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcPgpEntryFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcQueryFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcSidebarFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcSmimeCommandFormatConditionals	 muttrcFormatConditionals2
    +highlight def link muttrcStatusFormatConditionals	 muttrcFormatConditionals2
    +
    +highlight def link muttrcAddrDef			muttrcGroupFlag
    +highlight def link muttrcRXDef				muttrcGroupFlag
    +
    +highlight def link muttrcAliasFormatString		muttrcString
    +highlight def link muttrcAttachFormatString		muttrcString
    +highlight def link muttrcAutocryptFormatString		muttrcString
    +highlight def link muttrcComposeFormatString		muttrcString
    +highlight def link muttrcFolderFormatString		muttrcString
    +highlight def link muttrcGreetingFormatString		muttrcString
    +highlight def link muttrcGroupIndexFormatString		muttrcString
    +highlight def link muttrcHistoryFormatString		muttrcString
    +highlight def link muttrcIndexFormatString		muttrcString
    +highlight def link muttrcPatternFormatString		muttrcString
    +highlight def link muttrcPgpCommandFormatString		muttrcString
    +highlight def link muttrcPgpEntryFormatString		muttrcString
    +highlight def link muttrcQueryFormatString		muttrcString
    +highlight def link muttrcSidebarFormatString		muttrcString
    +highlight def link muttrcSmimeCommandFormatString	muttrcString
    +highlight def link muttrcStatusFormatString		muttrcString
    +highlight def link muttrcStrftimeFormatString		muttrcString
    +
    +highlight def link muttrcSetNumAssignment		Number
    +
    +highlight def link muttrcEmail				Special
    +highlight def link muttrcSimplePatMetas			Special
    +highlight def link muttrcSpecial			Special
    +highlight def link muttrcVariableInner			Special
    +
    +highlight def link muttrcAliasEncEmailNL		SpecialChar
    +highlight def link muttrcAliasENNL			SpecialChar
    +highlight def link muttrcAliasGroupDefNL		SpecialChar
    +highlight def link muttrcAliasNameNL			SpecialChar
    +highlight def link muttrcAliasNL			SpecialChar
    +highlight def link muttrcBindFunctionNL			SpecialChar
    +highlight def link muttrcBindKeyNL			SpecialChar
    +highlight def link muttrcBindMenuListNL			SpecialChar
    +highlight def link muttrcColorBGNL			SpecialChar
    +highlight def link muttrcColorFGNL			SpecialChar
    +highlight def link muttrcColorMatchCountNL		SpecialChar
    +highlight def link muttrcColorNL			SpecialChar
    +highlight def link muttrcColorRXNL			SpecialChar
    +highlight def link muttrcEscape				SpecialChar
    +highlight def link muttrcKeyName			SpecialChar
    +highlight def link muttrcKeySpecial			SpecialChar
    +highlight def link muttrcMacroBodyNL			SpecialChar
    +highlight def link muttrcMacroDescrNL			SpecialChar
    +highlight def link muttrcMacroKeyNL			SpecialChar
    +highlight def link muttrcMacroMenuListNL		SpecialChar
    +highlight def link muttrcRXChars			SpecialChar
    +highlight def link muttrcStringNL			SpecialChar
    +highlight def link muttrcUnAliasNL			SpecialChar
    +highlight def link muttrcUnColorAPNL			SpecialChar
    +highlight def link muttrcUnColorIndexNL			SpecialChar
    +highlight def link muttrcUnColorPatNL			SpecialChar
    +
    +highlight def link muttrcAttachmentsMimeType		String
    +highlight def link muttrcEscapedVariable		String
    +highlight def link muttrcMacroDescr			String
    +highlight def link muttrcRXPat				String
    +highlight def link muttrcRXString			String
    +highlight def link muttrcRXString2			String
    +highlight def link muttrcSetStrAssignment		String
    +highlight def link muttrcString				String
    +
    +highlight def link muttrcAttachmentsFlag		Type
    +highlight def link muttrcColor				Type
    +highlight def link muttrcFormatConditionals2		Type
    +highlight def link muttrcGroupFlag			Type
    +highlight def link muttrcHeader				Type
    +highlight def link muttrcHooks				Type
    +highlight def link muttrcKey				Type
    +highlight def link muttrcPatHookNot			Type
    +highlight def link muttrcRXHookNot			Type
    +highlight def link muttrcStrftimeEscapes		Type
    +
    +let b:current_syntax = "neomuttrc"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim: ts=8 noet tw=100 sw=8 sts=0 ft=vim isk+=-
    diff --git a/.config/vim/syntax/netrc.vim b/.config/vim/syntax/netrc.vim
    new file mode 100644
    index 0000000..567aaa9
    --- /dev/null
    +++ b/.config/vim/syntax/netrc.vim
    @@ -0,0 +1,56 @@
    +" Vim syntax file
    +" Language:             netrc(5) configuration file
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2010-01-03
    +" Last Change:		2023 Feb 27 by Keith Smiley
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn keyword netrcKeyword    machine nextgroup=netrcMachine skipwhite skipnl
    +syn keyword netrcKeyword    account
    +                          \ login
    +                          \ nextgroup=netrcLogin,netrcSpecial skipwhite skipnl
    +syn keyword netrcKeyword    password nextgroup=netrcPassword skipwhite skipnl
    +syn keyword netrcKeyword    default
    +syn keyword netrcKeyword    macdef
    +                          \ nextgroup=netrcInit,netrcMacroName skipwhite skipnl
    +syn region  netrcMacro      contained start='.' end='^$'
    +
    +syn match   netrcMachine    contained display '\S\+'
    +syn match   netrcMachine    contained display '"[^\\"]*\(\\.[^\\"]*\)*"'
    +syn match   netrcLogin      contained display '\S\+'
    +syn match   netrcLogin      contained display '"[^\\"]*\(\\.[^\\"]*\)*"'
    +syn match   netrcPassword   contained display '\S\+'
    +syn match   netrcPassword   contained display '"[^\\"]*\(\\.[^\\"]*\)*"'
    +syn match   netrcMacroName  contained display '\S\+'
    +                          \ nextgroup=netrcMacro skipwhite skipnl
    +syn match   netrcMacroName  contained display '"[^\\"]*\(\\.[^\\"]*\)*"'
    +                          \ nextgroup=netrcMacro skipwhite skipnl
    +
    +syn keyword netrcSpecial    contained anonymous
    +syn match   netrcInit       contained '\
    +" Last Change: Nov 25, 2023
    +" 2025 Jun 08 by Vim Project: improve syntax (#17458)
    +
    +if exists("b:current_syntax")
    +  finish
    +end
    +
    +let b:current_syntax = "nginx"
    +
    +syn match ngxVariable '\$\(\w\+\|{\w\+}\)'
    +syn match ngxVariableBlock '\$\(\w\+\|{\w\+}\)' contained
    +syn match ngxVariableString '\$\(\w\+\|{\w\+}\)' contained
    +syn region ngxBlock start=+^+ end=+{+ skip=+\${\|{{\|{%+ contains=ngxComment,ngxInteger,ngxIPaddr,ngxDirectiveBlock,ngxVariableBlock,ngxString,ngxThirdPartyLuaBlock oneline
    +syn region ngxString start=+[^:a-zA-Z>!\\@]\z(["']\)+lc=1 end=+\z1+ skip=+\\\\\|\\\z1+ contains=ngxVariableString,ngxSSLCipherInsecure
    +syn match ngxComment ' *#.*$'
    +
    +" These regular expressions where taken (and adapted) from
    +" http://vim.1045645.n5.nabble.com/IPv6-support-for-quot-dns-quot-zonefile-syntax-highlighting-td1197292.html
    +syn match ngxInteger '\W\zs\(\d[0-9.]*\|[0-9.]*\d\)\w\?\ze\W'
    +syn match ngxIPaddr '\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}'
    +syn match ngxIPaddr '\[\(\x\{1,4}:\)\{6}\(\x\{1,4}:\x\{1,4}\|\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
    +syn match ngxIPaddr '\[::\(\(\x\{1,4}:\)\{,6}\x\{1,4}\|\(\x\{1,4}:\)\{,5}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
    +syn match ngxIPaddr '\[\(\x\{1,4}:\)\{1}:\(\(\x\{1,4}:\)\{,5}\x\{1,4}\|\(\x\{1,4}:\)\{,4}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
    +syn match ngxIPaddr '\[\(\x\{1,4}:\)\{2}:\(\(\x\{1,4}:\)\{,4}\x\{1,4}\|\(\x\{1,4}:\)\{,3}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
    +syn match ngxIPaddr '\[\(\x\{1,4}:\)\{3}:\(\(\x\{1,4}:\)\{,3}\x\{1,4}\|\(\x\{1,4}:\)\{,2}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
    +syn match ngxIPaddr '\[\(\x\{1,4}:\)\{4}:\(\(\x\{1,4}:\)\{,2}\x\{1,4}\|\(\x\{1,4}:\)\{,1}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
    +syn match ngxIPaddr '\[\(\x\{1,4}:\)\{5}:\(\(\x\{1,4}:\)\{,1}\x\{1,4}\|\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
    +syn match ngxIPaddr '\[\(\x\{1,4}:\)\{6}:\x\{1,4}\]'
    +
    +" Highlight wildcard listening signs also as IPaddr
    +syn match ngxIPaddr '\s\zs\[::]'
    +syn match ngxIPaddr '\s\zs\*'
    +
    +syn keyword ngxBoolean on
    +syn keyword ngxBoolean off
    +
    +syn keyword ngxDirectiveBlock http          contained
    +syn keyword ngxDirectiveBlock mail          contained
    +syn keyword ngxDirectiveBlock events        contained
    +syn keyword ngxDirectiveBlock server        contained
    +syn keyword ngxDirectiveBlock match         contained
    +syn keyword ngxDirectiveBlock types         contained
    +syn keyword ngxDirectiveBlock location      contained
    +syn keyword ngxDirectiveBlock upstream      contained
    +syn keyword ngxDirectiveBlock charset_map   contained
    +syn keyword ngxDirectiveBlock limit_except  contained
    +syn keyword ngxDirectiveBlock if            contained
    +syn keyword ngxDirectiveBlock geo           contained
    +syn keyword ngxDirectiveBlock map           contained
    +syn keyword ngxDirectiveBlock split_clients contained
    +
    +syn keyword ngxDirectiveImportant include
    +syn keyword ngxDirectiveImportant root
    +syn keyword ngxDirectiveImportant server contained
    +syn region  ngxDirectiveImportantServer matchgroup=ngxDirectiveImportant start=+^\s*\zsserver\ze\s.*;+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxUpstreamServerOptions,ngxString,ngxIPaddr,ngxBoolean,ngxInteger,ngxTemplateVar
    +syn keyword ngxDirectiveImportant server_name
    +syn keyword ngxDirectiveImportant listen contained
    +syn region  ngxDirectiveImportantListen matchgroup=ngxDirectiveImportant start=+listen+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxListenOptions,ngxString,ngxIPaddr,ngxBoolean,ngxInteger,ngxTemplateVar
    +syn keyword ngxDirectiveImportant internal
    +syn keyword ngxDirectiveImportant proxy_pass
    +syn keyword ngxDirectiveImportant memcached_pass
    +syn keyword ngxDirectiveImportant fastcgi_pass
    +syn keyword ngxDirectiveImportant scgi_pass
    +syn keyword ngxDirectiveImportant uwsgi_pass
    +syn keyword ngxDirectiveImportant try_files
    +syn keyword ngxDirectiveImportant error_page
    +syn keyword ngxDirectiveImportant post_action
    +
    +syn keyword ngxUpstreamServerOptions weight         contained
    +syn keyword ngxUpstreamServerOptions max_conns      contained
    +syn keyword ngxUpstreamServerOptions max_fails      contained
    +syn keyword ngxUpstreamServerOptions fail_timeout   contained
    +syn keyword ngxUpstreamServerOptions backup         contained
    +syn keyword ngxUpstreamServerOptions down           contained
    +syn keyword ngxUpstreamServerOptions resolve        contained
    +syn keyword ngxUpstreamServerOptions route          contained
    +syn keyword ngxUpstreamServerOptions service        contained
    +syn keyword ngxUpstreamServerOptions default_server contained
    +syn keyword ngxUpstreamServerOptions slow_start     contained
    +
    +syn keyword ngxListenOptions default_server contained
    +syn keyword ngxListenOptions ssl            contained
    +syn keyword ngxListenOptions http2          contained
    +syn keyword ngxListenOptions spdy           contained
    +syn keyword ngxListenOptions http3          contained
    +syn keyword ngxListenOptions quic           contained
    +syn keyword ngxListenOptions proxy_protocol contained
    +syn keyword ngxListenOptions setfib         contained
    +syn keyword ngxListenOptions fastopen       contained
    +syn keyword ngxListenOptions backlog        contained
    +syn keyword ngxListenOptions rcvbuf         contained
    +syn keyword ngxListenOptions sndbuf         contained
    +syn keyword ngxListenOptions accept_filter  contained
    +syn keyword ngxListenOptions deferred       contained
    +syn keyword ngxListenOptions bind           contained
    +syn keyword ngxListenOptions ipv6only       contained
    +syn keyword ngxListenOptions reuseport      contained
    +syn keyword ngxListenOptions so_keepalive   contained
    +syn keyword ngxListenOptions keepidle       contained
    +
    +syn keyword ngxDirectiveControl break
    +syn keyword ngxDirectiveControl return
    +syn keyword ngxDirectiveControl rewrite
    +syn keyword ngxDirectiveControl set
    +
    +syn keyword ngxDirectiveDeprecated connections
    +syn keyword ngxDirectiveDeprecated imap
    +syn keyword ngxDirectiveDeprecated limit_zone
    +syn keyword ngxDirectiveDeprecated mysql_test
    +syn keyword ngxDirectiveDeprecated open_file_cache_retest
    +syn keyword ngxDirectiveDeprecated optimize_server_names
    +syn keyword ngxDirectiveDeprecated satisfy_any
    +syn keyword ngxDirectiveDeprecated so_keepalive
    +
    +syn keyword ngxDirective absolute_redirect
    +syn keyword ngxDirective accept_mutex
    +syn keyword ngxDirective accept_mutex_delay
    +syn keyword ngxDirective acceptex_read
    +syn keyword ngxDirective access_log
    +syn keyword ngxDirective add_after_body
    +syn keyword ngxDirective add_before_body
    +syn keyword ngxDirective add_header
    +syn keyword ngxDirective addition_types
    +syn keyword ngxDirective aio
    +syn keyword ngxDirective aio_write
    +syn keyword ngxDirective alias
    +syn keyword ngxDirective allow
    +syn keyword ngxDirective ancient_browser
    +syn keyword ngxDirective ancient_browser_value
    +syn keyword ngxDirective auth_basic
    +syn keyword ngxDirective auth_basic_user_file
    +syn keyword ngxDirective auth_http
    +syn keyword ngxDirective auth_http_header
    +syn keyword ngxDirective auth_http_pass_client_cert
    +syn keyword ngxDirective auth_http_timeout
    +syn keyword ngxDirective auth_jwt
    +syn keyword ngxDirective auth_jwt_key_file
    +syn keyword ngxDirective auth_request
    +syn keyword ngxDirective auth_request_set
    +syn keyword ngxDirective autoindex
    +syn keyword ngxDirective autoindex_exact_size
    +syn keyword ngxDirective autoindex_format
    +syn keyword ngxDirective autoindex_localtime
    +syn keyword ngxDirective charset
    +syn keyword ngxDirective charset_map
    +syn keyword ngxDirective charset_types
    +syn keyword ngxDirective chunked_transfer_encoding
    +syn keyword ngxDirective client_body_buffer_size
    +syn keyword ngxDirective client_body_in_file_only
    +syn keyword ngxDirective client_body_in_single_buffer
    +syn keyword ngxDirective client_body_temp_path
    +syn keyword ngxDirective client_body_timeout
    +syn keyword ngxDirective client_header_buffer_size
    +syn keyword ngxDirective client_header_timeout
    +syn keyword ngxDirective client_max_body_size
    +syn keyword ngxDirective connection_pool_size
    +syn keyword ngxDirective create_full_put_path
    +syn keyword ngxDirective daemon
    +syn keyword ngxDirective dav_access
    +syn keyword ngxDirective dav_methods
    +syn keyword ngxDirective debug_connection
    +syn keyword ngxDirective debug_points
    +syn keyword ngxDirective default_type
    +syn keyword ngxDirective degradation
    +syn keyword ngxDirective degrade
    +syn keyword ngxDirective deny
    +syn keyword ngxDirective devpoll_changes
    +syn keyword ngxDirective devpoll_events
    +syn keyword ngxDirective directio
    +syn keyword ngxDirective directio_alignment
    +syn keyword ngxDirective disable_symlinks
    +syn keyword ngxDirective empty_gif
    +syn keyword ngxDirective env
    +syn keyword ngxDirective epoll_events
    +syn keyword ngxDirective error_log
    +syn keyword ngxDirective etag
    +syn keyword ngxDirective eventport_events
    +syn keyword ngxDirective expires
    +syn keyword ngxDirective f4f
    +syn keyword ngxDirective f4f_buffer_size
    +syn keyword ngxDirective fastcgi_bind
    +syn keyword ngxDirective fastcgi_buffer_size
    +syn keyword ngxDirective fastcgi_buffering
    +syn keyword ngxDirective fastcgi_buffers
    +syn keyword ngxDirective fastcgi_busy_buffers_size
    +syn keyword ngxDirective fastcgi_cache
    +syn keyword ngxDirective fastcgi_cache_bypass
    +syn keyword ngxDirective fastcgi_cache_key
    +syn keyword ngxDirective fastcgi_cache_lock
    +syn keyword ngxDirective fastcgi_cache_lock_age
    +syn keyword ngxDirective fastcgi_cache_lock_timeout
    +syn keyword ngxDirective fastcgi_cache_max_range_offset
    +syn keyword ngxDirective fastcgi_cache_methods
    +syn keyword ngxDirective fastcgi_cache_min_uses
    +syn keyword ngxDirective fastcgi_cache_path
    +syn keyword ngxDirective fastcgi_cache_purge
    +syn keyword ngxDirective fastcgi_cache_revalidate
    +syn keyword ngxDirective fastcgi_cache_use_stale
    +syn keyword ngxDirective fastcgi_cache_valid
    +syn keyword ngxDirective fastcgi_catch_stderr
    +syn keyword ngxDirective fastcgi_connect_timeout
    +syn keyword ngxDirective fastcgi_force_ranges
    +syn keyword ngxDirective fastcgi_hide_header
    +syn keyword ngxDirective fastcgi_ignore_client_abort
    +syn keyword ngxDirective fastcgi_ignore_headers
    +syn keyword ngxDirective fastcgi_index
    +syn keyword ngxDirective fastcgi_intercept_errors
    +syn keyword ngxDirective fastcgi_keep_conn
    +syn keyword ngxDirective fastcgi_limit_rate
    +syn keyword ngxDirective fastcgi_max_temp_file_size
    +syn keyword ngxDirective fastcgi_next_upstream
    +syn keyword ngxDirective fastcgi_next_upstream_timeout
    +syn keyword ngxDirective fastcgi_next_upstream_tries
    +syn keyword ngxDirective fastcgi_no_cache
    +syn keyword ngxDirective fastcgi_param
    +syn keyword ngxDirective fastcgi_pass_header
    +syn keyword ngxDirective fastcgi_pass_request_body
    +syn keyword ngxDirective fastcgi_pass_request_headers
    +syn keyword ngxDirective fastcgi_read_timeout
    +syn keyword ngxDirective fastcgi_request_buffering
    +syn keyword ngxDirective fastcgi_send_lowat
    +syn keyword ngxDirective fastcgi_send_timeout
    +syn keyword ngxDirective fastcgi_split_path_info
    +syn keyword ngxDirective fastcgi_store
    +syn keyword ngxDirective fastcgi_store_access
    +syn keyword ngxDirective fastcgi_temp_file_write_size
    +syn keyword ngxDirective fastcgi_temp_path
    +syn keyword ngxDirective flv
    +syn keyword ngxDirective geoip_city
    +syn keyword ngxDirective geoip_country
    +syn keyword ngxDirective geoip_org
    +syn keyword ngxDirective geoip_proxy
    +syn keyword ngxDirective geoip_proxy_recursive
    +syn keyword ngxDirective google_perftools_profiles
    +syn keyword ngxDirective gunzip
    +syn keyword ngxDirective gunzip_buffers
    +syn keyword ngxDirective gzip nextgroup=ngxGzipOn,ngxGzipOff skipwhite
    +syn keyword ngxGzipOn on contained
    +syn keyword ngxGzipOff off contained
    +syn keyword ngxDirective gzip_buffers
    +syn keyword ngxDirective gzip_comp_level
    +syn keyword ngxDirective gzip_disable
    +syn keyword ngxDirective gzip_hash
    +syn keyword ngxDirective gzip_http_version
    +syn keyword ngxDirective gzip_min_length
    +syn keyword ngxDirective gzip_no_buffer
    +syn keyword ngxDirective gzip_proxied
    +syn keyword ngxDirective gzip_static
    +syn keyword ngxDirective gzip_types
    +syn keyword ngxDirective gzip_vary
    +syn keyword ngxDirective gzip_window
    +syn keyword ngxDirective hash
    +syn keyword ngxDirective health_check
    +syn keyword ngxDirective health_check_timeout
    +syn keyword ngxDirective hls
    +syn keyword ngxDirective hls_buffers
    +syn keyword ngxDirective hls_forward_args
    +syn keyword ngxDirective hls_fragment
    +syn keyword ngxDirective hls_mp4_buffer_size
    +syn keyword ngxDirective hls_mp4_max_buffer_size
    +syn keyword ngxDirective http2
    +syn keyword ngxDirective http2_chunk_size
    +syn keyword ngxDirective http2_body_preread_size
    +syn keyword ngxDirective http2_idle_timeout
    +syn keyword ngxDirective http2_max_concurrent_streams
    +syn keyword ngxDirective http2_max_field_size
    +syn keyword ngxDirective http2_max_header_size
    +syn keyword ngxDirective http2_max_requests
    +syn keyword ngxDirective http2_push
    +syn keyword ngxDirective http2_push_preload
    +syn keyword ngxDirective http2_recv_buffer_size
    +syn keyword ngxDirective http2_recv_timeout
    +syn keyword ngxDirective http3
    +syn keyword ngxDirective http3_hq
    +syn keyword ngxDirective http3_max_concurrent_pushes
    +syn keyword ngxDirective http3_max_concurrent_streams
    +syn keyword ngxDirective http3_push
    +syn keyword ngxDirective http3_push_preload
    +syn keyword ngxDirective http3_stream_buffer_size
    +syn keyword ngxDirective if_modified_since
    +syn keyword ngxDirective ignore_invalid_headers
    +syn keyword ngxDirective image_filter
    +syn keyword ngxDirective image_filter_buffer
    +syn keyword ngxDirective image_filter_interlace
    +syn keyword ngxDirective image_filter_jpeg_quality
    +syn keyword ngxDirective image_filter_sharpen
    +syn keyword ngxDirective image_filter_transparency
    +syn keyword ngxDirective image_filter_webp_quality
    +syn keyword ngxDirective imap_auth
    +syn keyword ngxDirective imap_capabilities
    +syn keyword ngxDirective imap_client_buffer
    +syn keyword ngxDirective index
    +syn keyword ngxDirective iocp_threads
    +syn keyword ngxDirective ip_hash
    +syn keyword ngxDirective js_access
    +syn keyword ngxDirective js_content
    +syn keyword ngxDirective js_filter
    +syn keyword ngxDirective js_include
    +syn keyword ngxDirective js_preread
    +syn keyword ngxDirective js_set
    +syn keyword ngxDirective keepalive
    +syn keyword ngxDirective keepalive_disable
    +syn keyword ngxDirective keepalive_requests
    +syn keyword ngxDirective keepalive_timeout
    +syn keyword ngxDirective kqueue_changes
    +syn keyword ngxDirective kqueue_events
    +syn keyword ngxDirective large_client_header_buffers
    +syn keyword ngxDirective least_conn
    +syn keyword ngxDirective least_time
    +syn keyword ngxDirective limit_conn
    +syn keyword ngxDirective limit_conn_dry_run
    +syn keyword ngxDirective limit_conn_log_level
    +syn keyword ngxDirective limit_conn_status
    +syn keyword ngxDirective limit_conn_zone
    +syn keyword ngxDirective limit_except
    +syn keyword ngxDirective limit_rate
    +syn keyword ngxDirective limit_rate_after
    +syn keyword ngxDirective limit_req
    +syn keyword ngxDirective limit_req_dry_run
    +syn keyword ngxDirective limit_req_log_level
    +syn keyword ngxDirective limit_req_status
    +syn keyword ngxDirective limit_req_zone
    +syn keyword ngxDirective lingering_close
    +syn keyword ngxDirective lingering_time
    +syn keyword ngxDirective lingering_timeout
    +syn keyword ngxDirective load_module
    +syn keyword ngxDirective lock_file
    +syn keyword ngxDirective log_format
    +syn keyword ngxDirective log_not_found
    +syn keyword ngxDirective log_subrequest
    +syn keyword ngxDirective map_hash_bucket_size
    +syn keyword ngxDirective map_hash_max_size
    +syn keyword ngxDirective master_process
    +syn keyword ngxDirective max_ranges
    +syn keyword ngxDirective memcached_bind
    +syn keyword ngxDirective memcached_buffer_size
    +syn keyword ngxDirective memcached_connect_timeout
    +syn keyword ngxDirective memcached_force_ranges
    +syn keyword ngxDirective memcached_gzip_flag
    +syn keyword ngxDirective memcached_next_upstream
    +syn keyword ngxDirective memcached_next_upstream_timeout
    +syn keyword ngxDirective memcached_next_upstream_tries
    +syn keyword ngxDirective memcached_read_timeout
    +syn keyword ngxDirective memcached_send_timeout
    +syn keyword ngxDirective merge_slashes
    +syn keyword ngxDirective min_delete_depth
    +syn keyword ngxDirective modern_browser
    +syn keyword ngxDirective modern_browser_value
    +syn keyword ngxDirective mp4
    +syn keyword ngxDirective mp4_buffer_size
    +syn keyword ngxDirective mp4_max_buffer_size
    +syn keyword ngxDirective mp4_limit_rate
    +syn keyword ngxDirective mp4_limit_rate_after
    +syn keyword ngxDirective msie_padding
    +syn keyword ngxDirective msie_refresh
    +syn keyword ngxDirective multi_accept
    +syn keyword ngxDirective ntlm
    +syn keyword ngxDirective open_file_cache
    +syn keyword ngxDirective open_file_cache_errors
    +syn keyword ngxDirective open_file_cache_events
    +syn keyword ngxDirective open_file_cache_min_uses
    +syn keyword ngxDirective open_file_cache_valid
    +syn keyword ngxDirective open_log_file_cache
    +syn keyword ngxDirective output_buffers
    +syn keyword ngxDirective override_charset
    +syn keyword ngxDirective pcre_jit
    +syn keyword ngxDirective perl
    +syn keyword ngxDirective perl_modules
    +syn keyword ngxDirective perl_require
    +syn keyword ngxDirective perl_set
    +syn keyword ngxDirective pid
    +syn keyword ngxDirective pop3_auth
    +syn keyword ngxDirective pop3_capabilities
    +syn keyword ngxDirective port_in_redirect
    +syn keyword ngxDirective post_acceptex
    +syn keyword ngxDirective postpone_gzipping
    +syn keyword ngxDirective postpone_output
    +syn keyword ngxDirective preread_buffer_size
    +syn keyword ngxDirective preread_timeout
    +syn keyword ngxDirective protocol nextgroup=ngxMailProtocol skipwhite
    +syn keyword ngxMailProtocol imap pop3 smtp contained
    +syn keyword ngxDirective proxy
    +syn keyword ngxDirective proxy_bind
    +syn keyword ngxDirective proxy_buffer
    +syn keyword ngxDirective proxy_buffer_size
    +syn keyword ngxDirective proxy_buffering
    +syn keyword ngxDirective proxy_buffers
    +syn keyword ngxDirective proxy_busy_buffers_size
    +syn keyword ngxDirective proxy_cache
    +syn keyword ngxDirective proxy_cache_background_update
    +syn keyword ngxDirective proxy_cache_bypass
    +syn keyword ngxDirective proxy_cache_convert_head
    +syn keyword ngxDirective proxy_cache_key
    +syn keyword ngxDirective proxy_cache_lock
    +syn keyword ngxDirective proxy_cache_lock_age
    +syn keyword ngxDirective proxy_cache_lock_timeout
    +syn keyword ngxDirective proxy_cache_max_range_offset
    +syn keyword ngxDirective proxy_cache_methods
    +syn keyword ngxDirective proxy_cache_min_uses
    +syn keyword ngxDirective proxy_cache_path
    +syn keyword ngxDirective proxy_cache_purge
    +syn keyword ngxDirective proxy_cache_revalidate
    +syn keyword ngxDirective proxy_cache_use_stale
    +syn keyword ngxDirective proxy_cache_valid
    +syn keyword ngxDirective proxy_connect_timeout
    +syn keyword ngxDirective proxy_cookie_domain
    +syn keyword ngxDirective proxy_cookie_path
    +syn keyword ngxDirective proxy_download_rate
    +syn keyword ngxDirective proxy_force_ranges
    +syn keyword ngxDirective proxy_headers_hash_bucket_size
    +syn keyword ngxDirective proxy_headers_hash_max_size
    +syn keyword ngxDirective proxy_hide_header
    +syn keyword ngxDirective proxy_http_version
    +syn keyword ngxDirective proxy_ignore_client_abort
    +syn keyword ngxDirective proxy_ignore_headers
    +syn keyword ngxDirective proxy_intercept_errors
    +syn keyword ngxDirective proxy_limit_rate
    +syn keyword ngxDirective proxy_max_temp_file_size
    +syn keyword ngxDirective proxy_method
    +syn keyword ngxDirective proxy_next_upstream contained
    +syn region  ngxDirectiveProxyNextUpstream matchgroup=ngxDirective start=+^\s*\zsproxy_next_upstream\ze\s.*;+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxProxyNextUpstreamOptions,ngxString,ngxTemplateVar
    +syn keyword ngxDirective proxy_next_upstream_timeout
    +syn keyword ngxDirective proxy_next_upstream_tries
    +syn keyword ngxDirective proxy_no_cache
    +syn keyword ngxDirective proxy_pass_error_message
    +syn keyword ngxDirective proxy_pass_header
    +syn keyword ngxDirective proxy_pass_request_body
    +syn keyword ngxDirective proxy_pass_request_headers
    +syn keyword ngxDirective proxy_protocol
    +syn keyword ngxDirective proxy_protocol_timeout
    +syn keyword ngxDirective proxy_read_timeout
    +syn keyword ngxDirective proxy_redirect
    +syn keyword ngxDirective proxy_request_buffering
    +syn keyword ngxDirective proxy_responses
    +syn keyword ngxDirective proxy_send_lowat
    +syn keyword ngxDirective proxy_send_timeout
    +syn keyword ngxDirective proxy_set_body
    +syn keyword ngxDirective proxy_set_header
    +syn keyword ngxDirective proxy_ssl_certificate
    +syn keyword ngxDirective proxy_ssl_certificate_key
    +syn keyword ngxDirective proxy_ssl_ciphers
    +syn keyword ngxDirective proxy_ssl_crl
    +syn keyword ngxDirective proxy_ssl_name
    +syn keyword ngxDirective proxy_ssl_password_file
    +syn keyword ngxDirective proxy_ssl_protocols nextgroup=ngxSSLProtocol skipwhite
    +syn keyword ngxDirective proxy_ssl_server_name
    +syn keyword ngxDirective proxy_ssl_session_reuse
    +syn keyword ngxDirective proxy_ssl_trusted_certificate
    +syn keyword ngxDirective proxy_ssl_verify
    +syn keyword ngxDirective proxy_ssl_verify_depth
    +syn keyword ngxDirective proxy_store
    +syn keyword ngxDirective proxy_store_access
    +syn keyword ngxDirective proxy_temp_file_write_size
    +syn keyword ngxDirective proxy_temp_path
    +syn keyword ngxDirective proxy_timeout
    +syn keyword ngxDirective proxy_upload_rate
    +syn keyword ngxDirective queue
    +syn keyword ngxDirective quic_gso
    +syn keyword ngxDirective quic_host_key
    +syn keyword ngxDirective quic_mtu
    +syn keyword ngxDirective quic_retry
    +syn keyword ngxDirective random_index
    +syn keyword ngxDirective read_ahead
    +syn keyword ngxDirective real_ip_header
    +syn keyword ngxDirective real_ip_recursive
    +syn keyword ngxDirective recursive_error_pages
    +syn keyword ngxDirective referer_hash_bucket_size
    +syn keyword ngxDirective referer_hash_max_size
    +syn keyword ngxDirective request_pool_size
    +syn keyword ngxDirective reset_timedout_connection
    +syn keyword ngxDirective resolver
    +syn keyword ngxDirective resolver_timeout
    +syn keyword ngxDirective rewrite_log
    +syn keyword ngxDirective rtsig_overflow_events
    +syn keyword ngxDirective rtsig_overflow_test
    +syn keyword ngxDirective rtsig_overflow_threshold
    +syn keyword ngxDirective rtsig_signo
    +syn keyword ngxDirective satisfy
    +syn keyword ngxDirective scgi_bind
    +syn keyword ngxDirective scgi_buffer_size
    +syn keyword ngxDirective scgi_buffering
    +syn keyword ngxDirective scgi_buffers
    +syn keyword ngxDirective scgi_busy_buffers_size
    +syn keyword ngxDirective scgi_cache
    +syn keyword ngxDirective scgi_cache_bypass
    +syn keyword ngxDirective scgi_cache_key
    +syn keyword ngxDirective scgi_cache_lock
    +syn keyword ngxDirective scgi_cache_lock_age
    +syn keyword ngxDirective scgi_cache_lock_timeout
    +syn keyword ngxDirective scgi_cache_max_range_offset
    +syn keyword ngxDirective scgi_cache_methods
    +syn keyword ngxDirective scgi_cache_min_uses
    +syn keyword ngxDirective scgi_cache_path
    +syn keyword ngxDirective scgi_cache_purge
    +syn keyword ngxDirective scgi_cache_revalidate
    +syn keyword ngxDirective scgi_cache_use_stale
    +syn keyword ngxDirective scgi_cache_valid
    +syn keyword ngxDirective scgi_connect_timeout
    +syn keyword ngxDirective scgi_force_ranges
    +syn keyword ngxDirective scgi_hide_header
    +syn keyword ngxDirective scgi_ignore_client_abort
    +syn keyword ngxDirective scgi_ignore_headers
    +syn keyword ngxDirective scgi_intercept_errors
    +syn keyword ngxDirective scgi_limit_rate
    +syn keyword ngxDirective scgi_max_temp_file_size
    +syn keyword ngxDirective scgi_next_upstream
    +syn keyword ngxDirective scgi_next_upstream_timeout
    +syn keyword ngxDirective scgi_next_upstream_tries
    +syn keyword ngxDirective scgi_no_cache
    +syn keyword ngxDirective scgi_param
    +syn keyword ngxDirective scgi_pass_header
    +syn keyword ngxDirective scgi_pass_request_body
    +syn keyword ngxDirective scgi_pass_request_headers
    +syn keyword ngxDirective scgi_read_timeout
    +syn keyword ngxDirective scgi_request_buffering
    +syn keyword ngxDirective scgi_send_timeout
    +syn keyword ngxDirective scgi_store
    +syn keyword ngxDirective scgi_store_access
    +syn keyword ngxDirective scgi_temp_file_write_size
    +syn keyword ngxDirective scgi_temp_path
    +syn keyword ngxDirective secure_link
    +syn keyword ngxDirective secure_link_md5
    +syn keyword ngxDirective secure_link_secret
    +syn keyword ngxDirective send_lowat
    +syn keyword ngxDirective send_timeout
    +syn keyword ngxDirective sendfile
    +syn keyword ngxDirective sendfile_max_chunk
    +syn keyword ngxDirective server_name_in_redirect
    +syn keyword ngxDirective server_names_hash_bucket_size
    +syn keyword ngxDirective server_names_hash_max_size
    +syn keyword ngxDirective server_tokens
    +syn keyword ngxDirective session_log
    +syn keyword ngxDirective session_log_format
    +syn keyword ngxDirective session_log_zone
    +syn keyword ngxDirective set_real_ip_from
    +syn keyword ngxDirective slice
    +syn keyword ngxDirective smtp_auth
    +syn keyword ngxDirective smtp_capabilities
    +syn keyword ngxDirective smtp_client_buffer
    +syn keyword ngxDirective smtp_greeting_delay
    +syn keyword ngxDirective source_charset
    +syn keyword ngxDirective spdy_chunk_size
    +syn keyword ngxDirective spdy_headers_comp
    +syn keyword ngxDirective spdy_keepalive_timeout
    +syn keyword ngxDirective spdy_max_concurrent_streams
    +syn keyword ngxDirective spdy_pool_size
    +syn keyword ngxDirective spdy_recv_buffer_size
    +syn keyword ngxDirective spdy_recv_timeout
    +syn keyword ngxDirective spdy_streams_index_size
    +syn keyword ngxDirective ssi
    +syn keyword ngxDirective ssi_ignore_recycled_buffers
    +syn keyword ngxDirective ssi_last_modified
    +syn keyword ngxDirective ssi_min_file_chunk
    +syn keyword ngxDirective ssi_silent_errors
    +syn keyword ngxDirective ssi_types
    +syn keyword ngxDirective ssi_value_length
    +syn keyword ngxDirective ssl
    +syn keyword ngxDirective ssl_buffer_size
    +syn keyword ngxDirective ssl_certificate
    +syn keyword ngxDirective ssl_certificate_key
    +syn keyword ngxDirective ssl_ciphers
    +syn keyword ngxDirective ssl_client_certificate
    +syn keyword ngxDirective ssl_conf_command
    +syn keyword ngxDirective ssl_crl
    +syn keyword ngxDirective ssl_dhparam
    +syn keyword ngxDirective ssl_early_data
    +syn keyword ngxDirective ssl_ecdh_curve
    +syn keyword ngxDirective ssl_engine
    +syn keyword ngxDirective ssl_handshake_timeout
    +syn keyword ngxDirective ssl_password_file
    +syn keyword ngxDirective ssl_prefer_server_ciphers nextgroup=ngxSSLPreferServerCiphersOff,ngxSSLPreferServerCiphersOn skipwhite
    +syn keyword ngxSSLPreferServerCiphersOn on contained
    +syn keyword ngxSSLPreferServerCiphersOff off contained
    +syn keyword ngxDirective ssl_preread
    +syn keyword ngxDirective ssl_protocols nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
    +syn keyword ngxDirective ssl_reject_handshake
    +syn match ngxSSLProtocol 'TLSv1' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
    +syn match ngxSSLProtocol 'TLSv1\.1' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
    +syn match ngxSSLProtocol 'TLSv1\.2' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
    +syn match ngxSSLProtocol 'TLSv1\.3' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
    +
    +" Do not enable highlighting of insecure protocols if sslecure is loaded
    +if !exists('g:loaded_sslsecure')
    +  syn keyword ngxSSLProtocolDeprecated SSLv2 SSLv3 contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
    +else
    +  syn match ngxSSLProtocol 'SSLv2' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
    +  syn match ngxSSLProtocol 'SSLv3' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
    +endif
    +
    +syn keyword ngxDirective ssl_session_cache
    +syn keyword ngxDirective ssl_session_ticket_key
    +syn keyword ngxDirective ssl_session_tickets nextgroup=ngxSSLSessionTicketsOn,ngxSSLSessionTicketsOff skipwhite
    +syn keyword ngxSSLSessionTicketsOn on contained
    +syn keyword ngxSSLSessionTicketsOff off contained
    +syn keyword ngxDirective ssl_session_timeout
    +syn keyword ngxDirective ssl_stapling
    +syn keyword ngxDirective ssl_stapling_file
    +syn keyword ngxDirective ssl_stapling_responder
    +syn keyword ngxDirective ssl_stapling_verify
    +syn keyword ngxDirective ssl_trusted_certificate
    +syn keyword ngxDirective ssl_verify_client
    +syn keyword ngxDirective ssl_verify_depth
    +syn keyword ngxDirective starttls
    +syn keyword ngxDirective state
    +syn keyword ngxDirective status
    +syn keyword ngxDirective status_format
    +syn keyword ngxDirective status_zone
    +syn keyword ngxDirective sticky contained
    +syn keyword ngxDirective sticky_cookie_insert contained
    +syn region  ngxDirectiveSticky matchgroup=ngxDirective start=+^\s*\zssticky\ze\s.*;+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxCookieOptions,ngxString,ngxBoolean,ngxInteger,ngxTemplateVar
    +syn keyword ngxDirective stub_status
    +syn keyword ngxDirective sub_filter
    +syn keyword ngxDirective sub_filter_last_modified
    +syn keyword ngxDirective sub_filter_once
    +syn keyword ngxDirective sub_filter_types
    +syn keyword ngxDirective tcp_nodelay
    +syn keyword ngxDirective tcp_nopush
    +syn keyword ngxDirective thread_pool
    +syn keyword ngxDirective thread_stack_size
    +syn keyword ngxDirective timeout
    +syn keyword ngxDirective timer_resolution
    +syn keyword ngxDirective types_hash_bucket_size
    +syn keyword ngxDirective types_hash_max_size
    +syn keyword ngxDirective underscores_in_headers
    +syn keyword ngxDirective uninitialized_variable_warn
    +syn keyword ngxDirective upstream_conf
    +syn keyword ngxDirective use
    +syn keyword ngxDirective user
    +syn keyword ngxDirective userid
    +syn keyword ngxDirective userid_domain
    +syn keyword ngxDirective userid_expires
    +syn keyword ngxDirective userid_mark
    +syn keyword ngxDirective userid_name
    +syn keyword ngxDirective userid_p3p
    +syn keyword ngxDirective userid_path
    +syn keyword ngxDirective userid_service
    +syn keyword ngxDirective uwsgi_bind
    +syn keyword ngxDirective uwsgi_buffer_size
    +syn keyword ngxDirective uwsgi_buffering
    +syn keyword ngxDirective uwsgi_buffers
    +syn keyword ngxDirective uwsgi_busy_buffers_size
    +syn keyword ngxDirective uwsgi_cache
    +syn keyword ngxDirective uwsgi_cache_background_update
    +syn keyword ngxDirective uwsgi_cache_bypass
    +syn keyword ngxDirective uwsgi_cache_key
    +syn keyword ngxDirective uwsgi_cache_lock
    +syn keyword ngxDirective uwsgi_cache_lock_age
    +syn keyword ngxDirective uwsgi_cache_lock_timeout
    +syn keyword ngxDirective uwsgi_cache_methods
    +syn keyword ngxDirective uwsgi_cache_min_uses
    +syn keyword ngxDirective uwsgi_cache_path
    +syn keyword ngxDirective uwsgi_cache_purge
    +syn keyword ngxDirective uwsgi_cache_revalidate
    +syn keyword ngxDirective uwsgi_cache_use_stale
    +syn keyword ngxDirective uwsgi_cache_valid
    +syn keyword ngxDirective uwsgi_connect_timeout
    +syn keyword ngxDirective uwsgi_force_ranges
    +syn keyword ngxDirective uwsgi_hide_header
    +syn keyword ngxDirective uwsgi_ignore_client_abort
    +syn keyword ngxDirective uwsgi_ignore_headers
    +syn keyword ngxDirective uwsgi_intercept_errors
    +syn keyword ngxDirective uwsgi_limit_rate
    +syn keyword ngxDirective uwsgi_max_temp_file_size
    +syn keyword ngxDirective uwsgi_modifier1
    +syn keyword ngxDirective uwsgi_modifier2
    +syn keyword ngxDirective uwsgi_next_upstream
    +syn keyword ngxDirective uwsgi_next_upstream_timeout
    +syn keyword ngxDirective uwsgi_next_upstream_tries
    +syn keyword ngxDirective uwsgi_no_cache
    +syn keyword ngxDirective uwsgi_param
    +syn keyword ngxDirective uwsgi_pass
    +syn keyword ngxDirective uwsgi_pass_header
    +syn keyword ngxDirective uwsgi_pass_request_body
    +syn keyword ngxDirective uwsgi_pass_request_headers
    +syn keyword ngxDirective uwsgi_read_timeout
    +syn keyword ngxDirective uwsgi_request_buffering
    +syn keyword ngxDirective uwsgi_send_timeout
    +syn keyword ngxDirective uwsgi_ssl_certificate
    +syn keyword ngxDirective uwsgi_ssl_certificate_key
    +syn keyword ngxDirective uwsgi_ssl_ciphers
    +syn keyword ngxDirective uwsgi_ssl_crl
    +syn keyword ngxDirective uwsgi_ssl_name
    +syn keyword ngxDirective uwsgi_ssl_password_file
    +syn keyword ngxDirective uwsgi_ssl_protocols nextgroup=ngxSSLProtocol skipwhite
    +syn keyword ngxDirective uwsgi_ssl_server_name
    +syn keyword ngxDirective uwsgi_ssl_session_reuse
    +syn keyword ngxDirective uwsgi_ssl_trusted_certificate
    +syn keyword ngxDirective uwsgi_ssl_verify
    +syn keyword ngxDirective uwsgi_ssl_verify_depth
    +syn keyword ngxDirective uwsgi_store
    +syn keyword ngxDirective uwsgi_store_access
    +syn keyword ngxDirective uwsgi_string
    +syn keyword ngxDirective uwsgi_temp_file_write_size
    +syn keyword ngxDirective uwsgi_temp_path
    +syn keyword ngxDirective valid_referers
    +syn keyword ngxDirective variables_hash_bucket_size
    +syn keyword ngxDirective variables_hash_max_size
    +syn keyword ngxDirective worker_aio_requests
    +syn keyword ngxDirective worker_connections
    +syn keyword ngxDirective worker_cpu_affinity
    +syn keyword ngxDirective worker_priority
    +syn keyword ngxDirective worker_processes
    +syn keyword ngxDirective worker_rlimit_core
    +syn keyword ngxDirective worker_rlimit_nofile
    +syn keyword ngxDirective worker_rlimit_sigpending
    +syn keyword ngxDirective worker_threads
    +syn keyword ngxDirective working_directory
    +syn keyword ngxDirective xclient
    +syn keyword ngxDirective xml_entities
    +syn keyword ngxDirective xslt_last_modified
    +syn keyword ngxDirective xslt_param
    +syn keyword ngxDirective xslt_string_param
    +syn keyword ngxDirective xslt_stylesheet
    +syn keyword ngxDirective xslt_types
    +syn keyword ngxDirective zone
    +
    +" Do not enable highlighting of insecure ciphers if sslecure is loaded
    +if !exists('g:loaded_sslsecure')
    +  " Mark insecure SSL Ciphers (Note: List might not not complete)
    +  " Reference: https://www.openssl.org/docs/man1.0.2/apps/ciphers.html
    +  syn match ngxSSLCipherInsecure '[^!]\zsSSLv3'
    +  syn match ngxSSLCipherInsecure '[^!]\zsSSLv2'
    +  syn match ngxSSLCipherInsecure '[^!]\zsHIGH'
    +  syn match ngxSSLCipherInsecure '[^!]\zsMEDIUM'
    +  syn match ngxSSLCipherInsecure '[^!]\zsLOW'
    +  syn match ngxSSLCipherInsecure '[^!]\zsDEFAULT'
    +  syn match ngxSSLCipherInsecure '[^!]\zsCOMPLEMENTOFDEFAULT'
    +  syn match ngxSSLCipherInsecure '[^!]\zsALL'
    +  syn match ngxSSLCipherInsecure '[^!]\zsCOMPLEMENTOFALL'
    +
    +  " SHA ciphers are only used in HMAC with all known OpenSSL/ LibreSSL cipher suites and MAC
    +  " usage is still considered safe
    +  " syn match ngxSSLCipherInsecure '[^!]\zsSHA\ze\D'      " Match SHA1 without matching SHA256+
    +  " syn match ngxSSLCipherInsecure '[^!]\zsSHA1'
    +  syn match ngxSSLCipherInsecure '[^!]\zsMD5'
    +  syn match ngxSSLCipherInsecure '[^!]\zsRC2'
    +  syn match ngxSSLCipherInsecure '[^!]\zsRC4'
    +  syn match ngxSSLCipherInsecure '[^!]\zs3DES'
    +  syn match ngxSSLCipherInsecure '[^!3]\zsDES'
    +  syn match ngxSSLCipherInsecure '[^!]\zsaDSS'
    +  syn match ngxSSLCipherInsecure '[^!a]\zsDSS'
    +  syn match ngxSSLCipherInsecure '[^!]\zsPSK'
    +  syn match ngxSSLCipherInsecure '[^!]\zsIDEA'
    +  syn match ngxSSLCipherInsecure '[^!]\zsSEED'
    +  syn match ngxSSLCipherInsecure '[^!]\zsEXP\w*'        " Match all EXPORT ciphers
    +  syn match ngxSSLCipherInsecure '[^!]\zsaGOST\w*'      " Match all GOST ciphers
    +  syn match ngxSSLCipherInsecure '[^!]\zskGOST\w*'
    +  syn match ngxSSLCipherInsecure '[^!ak]\zsGOST\w*'
    +  syn match ngxSSLCipherInsecure '[^!]\zs[kae]\?FZA'    " Not implemented
    +  syn match ngxSSLCipherInsecure '[^!]\zsECB'
    +  syn match ngxSSLCipherInsecure '[^!]\zs[aes]NULL'
    +
    +  " Anonymous cipher suites should never be used
    +  syn match ngxSSLCipherInsecure '[^!ECa]\zsDH\ze[^E]'  " Try to match DH without DHE, EDH, EECDH, etc.
    +  syn match ngxSSLCipherInsecure '[^!EA]\zsECDH\ze[^E]' " Do not match EECDH, ECDHE
    +  syn match ngxSSLCipherInsecure '[^!]\zsADH'
    +  syn match ngxSSLCipherInsecure '[^!]\zskDHE'
    +  syn match ngxSSLCipherInsecure '[^!]\zskEDH'
    +  syn match ngxSSLCipherInsecure '[^!]\zskECDHE'
    +  syn match ngxSSLCipherInsecure '[^!]\zskEECDH'
    +  syn match ngxSSLCipherInsecure '[^!E]\zsAECDH'
    +endif
    +
    +syn keyword ngxProxyNextUpstreamOptions error          contained
    +syn keyword ngxProxyNextUpstreamOptions timeout        contained
    +syn keyword ngxProxyNextUpstreamOptions invalid_header contained
    +syn keyword ngxProxyNextUpstreamOptions http_500       contained
    +syn keyword ngxProxyNextUpstreamOptions http_502       contained
    +syn keyword ngxProxyNextUpstreamOptions http_503       contained
    +syn keyword ngxProxyNextUpstreamOptions http_504       contained
    +syn keyword ngxProxyNextUpstreamOptions http_403       contained
    +syn keyword ngxProxyNextUpstreamOptions http_404       contained
    +syn keyword ngxProxyNextUpstreamOptions http_429       contained
    +syn keyword ngxProxyNextUpstreamOptions non_idempotent contained
    +syn keyword ngxProxyNextUpstreamOptions off            contained
    +
    +syn keyword ngxStickyOptions cookie contained
    +syn region  ngxStickyOptionsCookie matchgroup=ngxStickyOptions start=+^\s*\zssticky\s\s*cookie\ze\s.*;+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxCookieOptions,ngxString,ngxBoolean,ngxInteger,ngxTemplateVar
    +syn keyword ngxStickyOptions route  contained
    +syn keyword ngxStickyOptions learn  contained
    +
    +syn keyword ngxCookieOptions expires  contained
    +syn keyword ngxCookieOptions domain   contained
    +syn keyword ngxCookieOptions httponly contained
    +syn keyword ngxCookieOptions secure   contained
    +syn keyword ngxCookieOptions path     contained
    +
    +" 3rd party module list:
    +" https://www.nginx.com/resources/wiki/modules/
    +
    +" Accept Language Module 
    +" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
    +syn keyword ngxDirectiveThirdParty set_from_accept_language
    +
    +" Access Key Module (DEPRECATED) 
    +" Denies access unless the request URL contains an access key.
    +syn keyword ngxDirectiveDeprecated accesskey
    +syn keyword ngxDirectiveDeprecated accesskey_arg
    +syn keyword ngxDirectiveDeprecated accesskey_hashmethod
    +syn keyword ngxDirectiveDeprecated accesskey_signature
    +
    +" Asynchronous FastCGI Module 
    +" Primarily a modified version of the Nginx FastCGI module which implements multiplexing of connections, allowing a single FastCGI server to handle many concurrent requests.
    +" syn keyword ngxDirectiveThirdParty fastcgi_bind
    +" syn keyword ngxDirectiveThirdParty fastcgi_buffer_size
    +" syn keyword ngxDirectiveThirdParty fastcgi_buffers
    +" syn keyword ngxDirectiveThirdParty fastcgi_busy_buffers_size
    +" syn keyword ngxDirectiveThirdParty fastcgi_cache
    +" syn keyword ngxDirectiveThirdParty fastcgi_cache_key
    +" syn keyword ngxDirectiveThirdParty fastcgi_cache_methods
    +" syn keyword ngxDirectiveThirdParty fastcgi_cache_min_uses
    +" syn keyword ngxDirectiveThirdParty fastcgi_cache_path
    +" syn keyword ngxDirectiveThirdParty fastcgi_cache_use_stale
    +" syn keyword ngxDirectiveThirdParty fastcgi_cache_valid
    +" syn keyword ngxDirectiveThirdParty fastcgi_catch_stderr
    +" syn keyword ngxDirectiveThirdParty fastcgi_connect_timeout
    +" syn keyword ngxDirectiveThirdParty fastcgi_hide_header
    +" syn keyword ngxDirectiveThirdParty fastcgi_ignore_client_abort
    +" syn keyword ngxDirectiveThirdParty fastcgi_ignore_headers
    +" syn keyword ngxDirectiveThirdParty fastcgi_index
    +" syn keyword ngxDirectiveThirdParty fastcgi_intercept_errors
    +" syn keyword ngxDirectiveThirdParty fastcgi_max_temp_file_size
    +" syn keyword ngxDirectiveThirdParty fastcgi_next_upstream
    +" syn keyword ngxDirectiveThirdParty fastcgi_param
    +" syn keyword ngxDirectiveThirdParty fastcgi_pass
    +" syn keyword ngxDirectiveThirdParty fastcgi_pass_header
    +" syn keyword ngxDirectiveThirdParty fastcgi_pass_request_body
    +" syn keyword ngxDirectiveThirdParty fastcgi_pass_request_headers
    +" syn keyword ngxDirectiveThirdParty fastcgi_read_timeout
    +" syn keyword ngxDirectiveThirdParty fastcgi_send_lowat
    +" syn keyword ngxDirectiveThirdParty fastcgi_send_timeout
    +" syn keyword ngxDirectiveThirdParty fastcgi_split_path_info
    +" syn keyword ngxDirectiveThirdParty fastcgi_store
    +" syn keyword ngxDirectiveThirdParty fastcgi_store_access
    +" syn keyword ngxDirectiveThirdParty fastcgi_temp_file_write_size
    +" syn keyword ngxDirectiveThirdParty fastcgi_temp_path
    +syn keyword ngxDirectiveDeprecated fastcgi_upstream_fail_timeout
    +syn keyword ngxDirectiveDeprecated fastcgi_upstream_max_fails
    +
    +" Akamai G2O Module 
    +" Nginx Module for Authenticating Akamai G2O requests
    +syn keyword ngxDirectiveThirdParty g2o
    +syn keyword ngxDirectiveThirdParty g2o_nonce
    +syn keyword ngxDirectiveThirdParty g2o_key
    +
    +" Lua Module 
    +" You can be very simple to execute lua code for nginx
    +syn keyword ngxDirectiveThirdParty lua_file
    +
    +" Array Variable Module 
    +" Add support for array-typed variables to nginx config files
    +syn keyword ngxDirectiveThirdParty array_split
    +syn keyword ngxDirectiveThirdParty array_join
    +syn keyword ngxDirectiveThirdParty array_map
    +syn keyword ngxDirectiveThirdParty array_map_op
    +
    +" Nginx Audio Track for HTTP Live Streaming 
    +" This nginx module generates audio track for hls streams on the fly.
    +syn keyword ngxDirectiveThirdParty ngx_hls_audio_track
    +syn keyword ngxDirectiveThirdParty ngx_hls_audio_track_rootpath
    +syn keyword ngxDirectiveThirdParty ngx_hls_audio_track_output_format
    +syn keyword ngxDirectiveThirdParty ngx_hls_audio_track_output_header
    +
    +" AWS Proxy Module 
    +" Nginx module to proxy to authenticated AWS services
    +syn keyword ngxDirectiveThirdParty aws_access_key
    +syn keyword ngxDirectiveThirdParty aws_key_scope
    +syn keyword ngxDirectiveThirdParty aws_signing_key
    +syn keyword ngxDirectiveThirdParty aws_endpoint
    +syn keyword ngxDirectiveThirdParty aws_s3_bucket
    +syn keyword ngxDirectiveThirdParty aws_sign
    +
    +" Backtrace module 
    +" A Nginx module to dump backtrace when a worker process exits abnormally
    +syn keyword ngxDirectiveThirdParty backtrace_log
    +syn keyword ngxDirectiveThirdParty backtrace_max_stack_size
    +
    +" Brotli Module 
    +" Nginx module for Brotli compression
    +syn keyword ngxDirectiveThirdParty brotli_static
    +syn keyword ngxDirectiveThirdParty brotli
    +syn keyword ngxDirectiveThirdParty brotli_types
    +syn keyword ngxDirectiveThirdParty brotli_buffers
    +syn keyword ngxDirectiveThirdParty brotli_comp_level
    +syn keyword ngxDirectiveThirdParty brotli_window
    +syn keyword ngxDirectiveThirdParty brotli_min_length
    +
    +" Cache Purge Module 
    +" Adds ability to purge content from FastCGI, proxy, SCGI and uWSGI caches.
    +syn keyword ngxDirectiveThirdParty fastcgi_cache_purge
    +syn keyword ngxDirectiveThirdParty proxy_cache_purge
    +" syn keyword ngxDirectiveThirdParty scgi_cache_purge
    +" syn keyword ngxDirectiveThirdParty uwsgi_cache_purge
    +
    +" Chunkin Module (DEPRECATED) 
    +" HTTP 1.1 chunked-encoding request body support for Nginx.
    +syn keyword ngxDirectiveDeprecated chunkin
    +syn keyword ngxDirectiveDeprecated chunkin_keepalive
    +syn keyword ngxDirectiveDeprecated chunkin_max_chunks_per_buf
    +syn keyword ngxDirectiveDeprecated chunkin_resume
    +
    +" Circle GIF Module 
    +" Generates simple circle images with the colors and size specified in the URL.
    +syn keyword ngxDirectiveThirdParty circle_gif
    +syn keyword ngxDirectiveThirdParty circle_gif_max_radius
    +syn keyword ngxDirectiveThirdParty circle_gif_min_radius
    +syn keyword ngxDirectiveThirdParty circle_gif_step_radius
    +
    +" Nginx-Clojure Module 
    +" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
    +syn keyword ngxDirectiveThirdParty jvm_path
    +syn keyword ngxDirectiveThirdParty jvm_var
    +syn keyword ngxDirectiveThirdParty jvm_classpath
    +syn keyword ngxDirectiveThirdParty jvm_classpath_check
    +syn keyword ngxDirectiveThirdParty jvm_workers
    +syn keyword ngxDirectiveThirdParty jvm_options
    +syn keyword ngxDirectiveThirdParty jvm_handler_type
    +syn keyword ngxDirectiveThirdParty jvm_init_handler_name
    +syn keyword ngxDirectiveThirdParty jvm_init_handler_code
    +syn keyword ngxDirectiveThirdParty jvm_exit_handler_name
    +syn keyword ngxDirectiveThirdParty jvm_exit_handler_code
    +syn keyword ngxDirectiveThirdParty handlers_lazy_init
    +syn keyword ngxDirectiveThirdParty auto_upgrade_ws
    +syn keyword ngxDirectiveThirdParty content_handler_type
    +syn keyword ngxDirectiveThirdParty content_handler_name
    +syn keyword ngxDirectiveThirdParty content_handler_code
    +syn keyword ngxDirectiveThirdParty rewrite_handler_type
    +syn keyword ngxDirectiveThirdParty rewrite_handler_name
    +syn keyword ngxDirectiveThirdParty rewrite_handler_code
    +syn keyword ngxDirectiveThirdParty access_handler_type
    +syn keyword ngxDirectiveThirdParty access_handler_name
    +syn keyword ngxDirectiveThirdParty access_handler_code
    +syn keyword ngxDirectiveThirdParty header_filter_type
    +syn keyword ngxDirectiveThirdParty header_filter_name
    +syn keyword ngxDirectiveThirdParty header_filter_code
    +syn keyword ngxDirectiveThirdParty content_handler_property
    +syn keyword ngxDirectiveThirdParty rewrite_handler_property
    +syn keyword ngxDirectiveThirdParty access_handler_property
    +syn keyword ngxDirectiveThirdParty header_filter_property
    +syn keyword ngxDirectiveThirdParty always_read_body
    +syn keyword ngxDirectiveThirdParty shared_map
    +syn keyword ngxDirectiveThirdParty write_page_size
    +
    +" Upstream Consistent Hash 
    +" A load balancer that uses an internal consistent hash ring to select the right backend node.
    +syn keyword ngxDirectiveThirdParty consistent_hash
    +
    +" Nginx Development Kit 
    +" The NDK is an Nginx module that is designed to extend the core functionality of the excellent Nginx webserver in a way that can be used as a basis of other Nginx modules.
    +" NDK_UPSTREAM_LIST
    +" This submodule provides a directive that creates a list of upstreams, with optional weighting. This list can then be used by other modules to hash over the upstreams however they choose.
    +syn keyword ngxDirectiveThirdParty upstream_list
    +
    +" Drizzle Module 
    +" Upstream module for talking to MySQL and Drizzle directly
    +syn keyword ngxDirectiveThirdParty drizzle_server
    +syn keyword ngxDirectiveThirdParty drizzle_keepalive
    +syn keyword ngxDirectiveThirdParty drizzle_query
    +syn keyword ngxDirectiveThirdParty drizzle_pass
    +syn keyword ngxDirectiveThirdParty drizzle_connect_timeout
    +syn keyword ngxDirectiveThirdParty drizzle_send_query_timeout
    +syn keyword ngxDirectiveThirdParty drizzle_recv_cols_timeout
    +syn keyword ngxDirectiveThirdParty drizzle_recv_rows_timeout
    +syn keyword ngxDirectiveThirdParty drizzle_buffer_size
    +syn keyword ngxDirectiveThirdParty drizzle_module_header
    +syn keyword ngxDirectiveThirdParty drizzle_status
    +
    +" Dynamic ETags Module 
    +" Attempt at handling ETag / If-None-Match on proxied content.
    +syn keyword ngxDirectiveThirdParty dynamic_etags
    +
    +" Echo Module 
    +" Bringing the power of "echo", "sleep", "time" and more to Nginx's config file
    +syn keyword ngxDirectiveThirdParty echo
    +syn keyword ngxDirectiveThirdParty echo_duplicate
    +syn keyword ngxDirectiveThirdParty echo_flush
    +syn keyword ngxDirectiveThirdParty echo_sleep
    +syn keyword ngxDirectiveThirdParty echo_blocking_sleep
    +syn keyword ngxDirectiveThirdParty echo_reset_timer
    +syn keyword ngxDirectiveThirdParty echo_read_request_body
    +syn keyword ngxDirectiveThirdParty echo_location_async
    +syn keyword ngxDirectiveThirdParty echo_location
    +syn keyword ngxDirectiveThirdParty echo_subrequest_async
    +syn keyword ngxDirectiveThirdParty echo_subrequest
    +syn keyword ngxDirectiveThirdParty echo_foreach_split
    +syn keyword ngxDirectiveThirdParty echo_end
    +syn keyword ngxDirectiveThirdParty echo_request_body
    +syn keyword ngxDirectiveThirdParty echo_exec
    +syn keyword ngxDirectiveThirdParty echo_status
    +syn keyword ngxDirectiveThirdParty echo_before_body
    +syn keyword ngxDirectiveThirdParty echo_after_body
    +
    +" Encrypted Session Module 
    +" Encrypt and decrypt nginx variable values
    +syn keyword ngxDirectiveThirdParty encrypted_session_key
    +syn keyword ngxDirectiveThirdParty encrypted_session_iv
    +syn keyword ngxDirectiveThirdParty encrypted_session_expires
    +syn keyword ngxDirectiveThirdParty set_encrypt_session
    +syn keyword ngxDirectiveThirdParty set_decrypt_session
    +
    +" Enhanced Memcached Module 
    +" This module is based on the standard Nginx Memcached module, with some additonal features
    +syn keyword ngxDirectiveThirdParty enhanced_memcached_pass
    +syn keyword ngxDirectiveThirdParty enhanced_memcached_hash_keys_with_md5
    +syn keyword ngxDirectiveThirdParty enhanced_memcached_allow_put
    +syn keyword ngxDirectiveThirdParty enhanced_memcached_allow_delete
    +syn keyword ngxDirectiveThirdParty enhanced_memcached_stats
    +syn keyword ngxDirectiveThirdParty enhanced_memcached_flush
    +syn keyword ngxDirectiveThirdParty enhanced_memcached_flush_namespace
    +syn keyword ngxDirectiveThirdParty enhanced_memcached_bind
    +syn keyword ngxDirectiveThirdParty enhanced_memcached_connect_timeout
    +syn keyword ngxDirectiveThirdParty enhanced_memcached_send_timeout
    +syn keyword ngxDirectiveThirdParty enhanced_memcached_buffer_size
    +syn keyword ngxDirectiveThirdParty enhanced_memcached_read_timeout
    +
    +" Events Module (DEPRECATED) 
    +" Provides options for start/stop events.
    +syn keyword ngxDirectiveDeprecated on_start
    +syn keyword ngxDirectiveDeprecated on_stop
    +
    +" EY Balancer Module 
    +" Adds a request queue to Nginx that allows the limiting of concurrent requests passed to the upstream.
    +syn keyword ngxDirectiveThirdParty max_connections
    +syn keyword ngxDirectiveThirdParty max_connections_max_queue_length
    +syn keyword ngxDirectiveThirdParty max_connections_queue_timeout
    +
    +" Upstream Fair Balancer 
    +" Sends an incoming request to the least-busy backend server, rather than distributing requests round-robin.
    +syn keyword ngxDirectiveThirdParty fair
    +syn keyword ngxDirectiveThirdParty upstream_fair_shm_size
    +
    +" Fancy Indexes Module 
    +" Like the built-in autoindex module, but fancier.
    +syn keyword ngxDirectiveThirdParty fancyindex
    +syn keyword ngxDirectiveThirdParty fancyindex_default_sort
    +syn keyword ngxDirectiveThirdParty fancyindex_directories_first
    +syn keyword ngxDirectiveThirdParty fancyindex_css_href
    +syn keyword ngxDirectiveThirdParty fancyindex_exact_size
    +syn keyword ngxDirectiveThirdParty fancyindex_name_length
    +syn keyword ngxDirectiveThirdParty fancyindex_footer
    +syn keyword ngxDirectiveThirdParty fancyindex_header
    +syn keyword ngxDirectiveThirdParty fancyindex_show_path
    +syn keyword ngxDirectiveThirdParty fancyindex_ignore
    +syn keyword ngxDirectiveThirdParty fancyindex_hide_symlinks
    +syn keyword ngxDirectiveThirdParty fancyindex_localtime
    +syn keyword ngxDirectiveThirdParty fancyindex_time_format
    +
    +" Form Auth Module 
    +" Provides authentication and authorization with credentials submitted via POST request
    +syn keyword ngxDirectiveThirdParty form_auth
    +syn keyword ngxDirectiveThirdParty form_auth_pam_service
    +syn keyword ngxDirectiveThirdParty form_auth_login
    +syn keyword ngxDirectiveThirdParty form_auth_password
    +syn keyword ngxDirectiveThirdParty form_auth_remote_user
    +
    +" Form Input Module 
    +" Reads HTTP POST and PUT request body encoded in "application/x-www-form-urlencoded" and parses the arguments into nginx variables.
    +syn keyword ngxDirectiveThirdParty set_form_input
    +syn keyword ngxDirectiveThirdParty set_form_input_multi
    +
    +" GeoIP Module (DEPRECATED) 
    +" Country code lookups via the MaxMind GeoIP API.
    +syn keyword ngxDirectiveDeprecated geoip_country_file
    +
    +" GeoIP 2 Module 
    +" Creates variables with values from the maxmind geoip2 databases based on the client IP
    +syn keyword ngxDirectiveThirdParty geoip2
    +
    +" GridFS Module 
    +" Nginx module for serving files from MongoDB's GridFS
    +syn keyword ngxDirectiveThirdParty gridfs
    +
    +" Headers More Module 
    +" Set and clear input and output headers...more than "add"!
    +syn keyword ngxDirectiveThirdParty more_clear_headers
    +syn keyword ngxDirectiveThirdParty more_clear_input_headers
    +syn keyword ngxDirectiveThirdParty more_set_headers
    +syn keyword ngxDirectiveThirdParty more_set_input_headers
    +
    +" Health Checks Upstreams Module 
    +" Polls backends and if they respond with HTTP 200 + an optional request body, they are marked good. Otherwise, they are marked bad.
    +syn keyword ngxDirectiveThirdParty healthcheck_enabled
    +syn keyword ngxDirectiveThirdParty healthcheck_delay
    +syn keyword ngxDirectiveThirdParty healthcheck_timeout
    +syn keyword ngxDirectiveThirdParty healthcheck_failcount
    +syn keyword ngxDirectiveThirdParty healthcheck_send
    +syn keyword ngxDirectiveThirdParty healthcheck_expected
    +syn keyword ngxDirectiveThirdParty healthcheck_buffer
    +syn keyword ngxDirectiveThirdParty healthcheck_status
    +
    +" HTTP Accounting Module 
    +" Add traffic stat function to nginx. Useful for http accounting based on nginx configuration logic
    +syn keyword ngxDirectiveThirdParty http_accounting
    +syn keyword ngxDirectiveThirdParty http_accounting_log
    +syn keyword ngxDirectiveThirdParty http_accounting_id
    +syn keyword ngxDirectiveThirdParty http_accounting_interval
    +syn keyword ngxDirectiveThirdParty http_accounting_perturb
    +
    +" Nginx Digest Authentication module 
    +" Digest Authentication for Nginx
    +syn keyword ngxDirectiveThirdParty auth_digest
    +syn keyword ngxDirectiveThirdParty auth_digest_user_file
    +syn keyword ngxDirectiveThirdParty auth_digest_timeout
    +syn keyword ngxDirectiveThirdParty auth_digest_expires
    +syn keyword ngxDirectiveThirdParty auth_digest_replays
    +syn keyword ngxDirectiveThirdParty auth_digest_shm_size
    +
    +" Auth PAM Module 
    +" HTTP Basic Authentication using PAM.
    +syn keyword ngxDirectiveThirdParty auth_pam
    +syn keyword ngxDirectiveThirdParty auth_pam_service_name
    +
    +" HTTP Auth Request Module 
    +" Implements client authorization based on the result of a subrequest
    +" syn keyword ngxDirectiveThirdParty auth_request
    +" syn keyword ngxDirectiveThirdParty auth_request_set
    +
    +" HTTP Concatenation module for Nginx 
    +" A Nginx module for concatenating files in a given context: CSS and JS files usually
    +syn keyword ngxDirectiveThirdParty concat
    +syn keyword ngxDirectiveThirdParty concat_types
    +syn keyword ngxDirectiveThirdParty concat_unique
    +syn keyword ngxDirectiveThirdParty concat_max_files
    +syn keyword ngxDirectiveThirdParty concat_delimiter
    +syn keyword ngxDirectiveThirdParty concat_ignore_file_error
    +
    +" HTTP Dynamic Upstream Module 
    +" Update upstreams' config by restful interface
    +syn keyword ngxDirectiveThirdParty dyups_interface
    +syn keyword ngxDirectiveThirdParty dyups_read_msg_timeout
    +syn keyword ngxDirectiveThirdParty dyups_shm_zone_size
    +syn keyword ngxDirectiveThirdParty dyups_upstream_conf
    +syn keyword ngxDirectiveThirdParty dyups_trylock
    +
    +" HTTP Footer If Filter Module 
    +" The ngx_http_footer_if_filter_module is used to add given content to the end of the response according to the condition specified.
    +syn keyword ngxDirectiveThirdParty footer_if
    +
    +" HTTP Footer Filter Module 
    +" This module implements a body filter that adds a given string to the page footer.
    +syn keyword ngxDirectiveThirdParty footer
    +syn keyword ngxDirectiveThirdParty footer_types
    +
    +" HTTP Internal Redirect Module 
    +" Make an internal redirect to the uri specified according to the condition specified.
    +syn keyword ngxDirectiveThirdParty internal_redirect_if
    +syn keyword ngxDirectiveThirdParty internal_redirect_if_no_postponed
    +
    +" HTTP JavaScript Module 
    +" Embedding SpiderMonkey. Nearly full port on Perl module.
    +syn keyword ngxDirectiveThirdParty js
    +syn keyword ngxDirectiveThirdParty js_filter
    +syn keyword ngxDirectiveThirdParty js_filter_types
    +syn keyword ngxDirectiveThirdParty js_load
    +syn keyword ngxDirectiveThirdParty js_maxmem
    +syn keyword ngxDirectiveThirdParty js_require
    +syn keyword ngxDirectiveThirdParty js_set
    +syn keyword ngxDirectiveThirdParty js_utf8
    +
    +" HTTP Push Module (DEPRECATED) 
    +" Turn Nginx into an adept long-polling HTTP Push (Comet) server.
    +syn keyword ngxDirectiveDeprecated push_buffer_size
    +syn keyword ngxDirectiveDeprecated push_listener
    +syn keyword ngxDirectiveDeprecated push_message_timeout
    +syn keyword ngxDirectiveDeprecated push_queue_messages
    +syn keyword ngxDirectiveDeprecated push_sender
    +
    +" HTTP Redis Module 
    +" Redis  support.
    +syn keyword ngxDirectiveThirdParty redis_bind
    +syn keyword ngxDirectiveThirdParty redis_buffer_size
    +syn keyword ngxDirectiveThirdParty redis_connect_timeout
    +syn keyword ngxDirectiveThirdParty redis_next_upstream
    +syn keyword ngxDirectiveThirdParty redis_pass
    +syn keyword ngxDirectiveThirdParty redis_read_timeout
    +syn keyword ngxDirectiveThirdParty redis_send_timeout
    +
    +" Iconv Module 
    +" A character conversion nginx module using libiconv
    +syn keyword ngxDirectiveThirdParty set_iconv
    +syn keyword ngxDirectiveThirdParty iconv_buffer_size
    +syn keyword ngxDirectiveThirdParty iconv_filter
    +
    +" IP Blocker Module 
    +" An efficient shared memory IP blocking system for nginx.
    +syn keyword ngxDirectiveThirdParty ip_blocker
    +
    +" IP2Location Module 
    +" Allows user to lookup for geolocation information using IP2Location database
    +syn keyword ngxDirectiveThirdParty ip2location_database
    +
    +" JS Module 
    +" Reflect the nginx functionality in JS
    +syn keyword ngxDirectiveThirdParty js
    +syn keyword ngxDirectiveThirdParty js_access
    +syn keyword ngxDirectiveThirdParty js_load
    +syn keyword ngxDirectiveThirdParty js_set
    +
    +" Limit Upload Rate Module 
    +" Limit client-upload rate when they are sending request bodies to you
    +syn keyword ngxDirectiveThirdParty limit_upload_rate
    +syn keyword ngxDirectiveThirdParty limit_upload_rate_after
    +
    +" Limit Upstream Module 
    +" Limit the number of connections to upstream for NGINX
    +syn keyword ngxDirectiveThirdParty limit_upstream_zone
    +syn keyword ngxDirectiveThirdParty limit_upstream_conn
    +syn keyword ngxDirectiveThirdParty limit_upstream_log_level
    +
    +" Log If Module 
    +" Conditional accesslog for nginx
    +syn keyword ngxDirectiveThirdParty access_log_bypass_if
    +
    +" Log Request Speed (DEPRECATED) 
    +" Log the time it took to process each request.
    +syn keyword ngxDirectiveDeprecated log_request_speed_filter
    +syn keyword ngxDirectiveDeprecated log_request_speed_filter_timeout
    +
    +" Log ZeroMQ Module 
    +" ZeroMQ logger module for nginx
    +syn keyword ngxDirectiveThirdParty log_zmq_server
    +syn keyword ngxDirectiveThirdParty log_zmq_endpoint
    +syn keyword ngxDirectiveThirdParty log_zmq_format
    +syn keyword ngxDirectiveThirdParty log_zmq_off
    +
    +" Lower/UpperCase Module 
    +" This module simply uppercases or lowercases a string and saves it into a new variable.
    +syn keyword ngxDirectiveThirdParty lower
    +syn keyword ngxDirectiveThirdParty upper
    +
    +" Lua Upstream Module 
    +" Nginx C module to expose Lua API to ngx_lua for Nginx upstreams
    +
    +" Lua Module 
    +" Embed the Power of Lua into NGINX HTTP servers
    +syn keyword ngxDirectiveThirdParty lua_use_default_type
    +syn keyword ngxDirectiveThirdParty lua_malloc_trim
    +syn keyword ngxDirectiveThirdParty lua_code_cache
    +syn keyword ngxDirectiveThirdParty lua_regex_cache_max_entries
    +syn keyword ngxDirectiveThirdParty lua_regex_match_limit
    +syn keyword ngxDirectiveThirdParty lua_package_path
    +syn keyword ngxDirectiveThirdParty lua_package_cpath
    +syn keyword ngxDirectiveThirdParty init_by_lua
    +syn keyword ngxDirectiveThirdParty init_by_lua_file
    +syn keyword ngxDirectiveThirdParty init_worker_by_lua
    +syn keyword ngxDirectiveThirdParty init_worker_by_lua_file
    +syn keyword ngxDirectiveThirdParty set_by_lua
    +syn keyword ngxDirectiveThirdParty set_by_lua_file
    +syn keyword ngxDirectiveThirdParty content_by_lua
    +syn keyword ngxDirectiveThirdParty content_by_lua_file
    +syn keyword ngxDirectiveThirdParty rewrite_by_lua
    +syn keyword ngxDirectiveThirdParty rewrite_by_lua_file
    +syn keyword ngxDirectiveThirdParty access_by_lua
    +syn keyword ngxDirectiveThirdParty access_by_lua_file
    +syn keyword ngxDirectiveThirdParty header_filter_by_lua
    +syn keyword ngxDirectiveThirdParty header_filter_by_lua_file
    +syn keyword ngxDirectiveThirdParty body_filter_by_lua
    +syn keyword ngxDirectiveThirdParty body_filter_by_lua_file
    +syn keyword ngxDirectiveThirdParty log_by_lua
    +syn keyword ngxDirectiveThirdParty log_by_lua_file
    +syn keyword ngxDirectiveThirdParty balancer_by_lua_file
    +syn keyword ngxDirectiveThirdParty lua_need_request_body
    +syn keyword ngxDirectiveThirdParty ssl_certificate_by_lua_file
    +syn keyword ngxDirectiveThirdParty ssl_session_fetch_by_lua_file
    +syn keyword ngxDirectiveThirdParty ssl_session_store_by_lua_file
    +syn keyword ngxDirectiveThirdParty lua_shared_dict
    +syn keyword ngxDirectiveThirdParty lua_socket_connect_timeout
    +syn keyword ngxDirectiveThirdParty lua_socket_send_timeout
    +syn keyword ngxDirectiveThirdParty lua_socket_send_lowat
    +syn keyword ngxDirectiveThirdParty lua_socket_read_timeout
    +syn keyword ngxDirectiveThirdParty lua_socket_buffer_size
    +syn keyword ngxDirectiveThirdParty lua_socket_pool_size
    +syn keyword ngxDirectiveThirdParty lua_socket_keepalive_timeout
    +syn keyword ngxDirectiveThirdParty lua_socket_log_errors
    +syn keyword ngxDirectiveThirdParty lua_ssl_ciphers
    +syn keyword ngxDirectiveThirdParty lua_ssl_crl
    +syn keyword ngxDirectiveThirdParty lua_ssl_protocols
    +syn keyword ngxDirectiveThirdParty lua_ssl_trusted_certificate
    +syn keyword ngxDirectiveThirdParty lua_ssl_verify_depth
    +syn keyword ngxDirectiveThirdParty lua_http10_buffering
    +syn keyword ngxDirectiveThirdParty rewrite_by_lua_no_postpone
    +syn keyword ngxDirectiveThirdParty access_by_lua_no_postpone
    +syn keyword ngxDirectiveThirdParty lua_transform_underscores_in_response_headers
    +syn keyword ngxDirectiveThirdParty lua_check_client_abort
    +syn keyword ngxDirectiveThirdParty lua_max_pending_timers
    +syn keyword ngxDirectiveThirdParty lua_max_running_timers
    +
    +" MD5 Filter Module 
    +" A content filter for nginx, which returns the md5 hash of the content otherwise returned.
    +syn keyword ngxDirectiveThirdParty md5_filter
    +
    +" Memc Module 
    +" An extended version of the standard memcached module that supports set, add, delete, and many more memcached commands.
    +syn keyword ngxDirectiveThirdParty memc_buffer_size
    +syn keyword ngxDirectiveThirdParty memc_cmds_allowed
    +syn keyword ngxDirectiveThirdParty memc_connect_timeout
    +syn keyword ngxDirectiveThirdParty memc_flags_to_last_modified
    +syn keyword ngxDirectiveThirdParty memc_next_upstream
    +syn keyword ngxDirectiveThirdParty memc_pass
    +syn keyword ngxDirectiveThirdParty memc_read_timeout
    +syn keyword ngxDirectiveThirdParty memc_send_timeout
    +syn keyword ngxDirectiveThirdParty memc_upstream_fail_timeout
    +syn keyword ngxDirectiveThirdParty memc_upstream_max_fails
    +
    +" Mod Security Module 
    +" ModSecurity is an open source, cross platform web application firewall (WAF) engine
    +syn keyword ngxDirectiveThirdParty ModSecurityConfig
    +syn keyword ngxDirectiveThirdParty ModSecurityEnabled
    +syn keyword ngxDirectiveThirdParty pool_context
    +syn keyword ngxDirectiveThirdParty pool_context_hash_size
    +
    +" Mogilefs Module 
    +" MogileFS client for nginx web server.
    +syn keyword ngxDirectiveThirdParty mogilefs_pass
    +syn keyword ngxDirectiveThirdParty mogilefs_methods
    +syn keyword ngxDirectiveThirdParty mogilefs_domain
    +syn keyword ngxDirectiveThirdParty mogilefs_class
    +syn keyword ngxDirectiveThirdParty mogilefs_tracker
    +syn keyword ngxDirectiveThirdParty mogilefs_noverify
    +syn keyword ngxDirectiveThirdParty mogilefs_connect_timeout
    +syn keyword ngxDirectiveThirdParty mogilefs_send_timeout
    +syn keyword ngxDirectiveThirdParty mogilefs_read_timeout
    +
    +" Mongo Module 
    +" Upstream module that allows nginx to communicate directly with MongoDB database.
    +syn keyword ngxDirectiveThirdParty mongo_auth
    +syn keyword ngxDirectiveThirdParty mongo_pass
    +syn keyword ngxDirectiveThirdParty mongo_query
    +syn keyword ngxDirectiveThirdParty mongo_json
    +syn keyword ngxDirectiveThirdParty mongo_bind
    +syn keyword ngxDirectiveThirdParty mongo_connect_timeout
    +syn keyword ngxDirectiveThirdParty mongo_send_timeout
    +syn keyword ngxDirectiveThirdParty mongo_read_timeout
    +syn keyword ngxDirectiveThirdParty mongo_buffering
    +syn keyword ngxDirectiveThirdParty mongo_buffer_size
    +syn keyword ngxDirectiveThirdParty mongo_buffers
    +syn keyword ngxDirectiveThirdParty mongo_busy_buffers_size
    +syn keyword ngxDirectiveThirdParty mongo_next_upstream
    +
    +" MP4 Streaming Lite Module 
    +" Will seek to a certain time within H.264/MP4 files when provided with a 'start' parameter in the URL.
    +" syn keyword ngxDirectiveThirdParty mp4
    +
    +" NAXSI Module 
    +" NAXSI is an open-source, high performance, low rules maintenance WAF for NGINX
    +syn keyword ngxDirectiveThirdParty DeniedUrl denied_url
    +syn keyword ngxDirectiveThirdParty LearningMode learning_mode
    +syn keyword ngxDirectiveThirdParty SecRulesEnabled rules_enabled
    +syn keyword ngxDirectiveThirdParty SecRulesDisabled rules_disabled
    +syn keyword ngxDirectiveThirdParty CheckRule check_rule
    +syn keyword ngxDirectiveThirdParty BasicRule basic_rule
    +syn keyword ngxDirectiveThirdParty MainRule main_rule
    +syn keyword ngxDirectiveThirdParty LibInjectionSql libinjection_sql
    +syn keyword ngxDirectiveThirdParty LibInjectionXss libinjection_xss
    +
    +" Nchan Module 
    +" Fast, horizontally scalable, multiprocess pub/sub queuing server and proxy for HTTP, long-polling, Websockets and EventSource (SSE)
    +syn keyword ngxDirectiveThirdParty nchan_channel_id
    +syn keyword ngxDirectiveThirdParty nchan_channel_id_split_delimiter
    +syn keyword ngxDirectiveThirdParty nchan_eventsource_event
    +syn keyword ngxDirectiveThirdParty nchan_longpoll_multipart_response
    +syn keyword ngxDirectiveThirdParty nchan_publisher
    +syn keyword ngxDirectiveThirdParty nchan_publisher_channel_id
    +syn keyword ngxDirectiveThirdParty nchan_publisher_upstream_request
    +syn keyword ngxDirectiveThirdParty nchan_pubsub
    +syn keyword ngxDirectiveThirdParty nchan_subscribe_request
    +syn keyword ngxDirectiveThirdParty nchan_subscriber
    +syn keyword ngxDirectiveThirdParty nchan_subscriber_channel_id
    +syn keyword ngxDirectiveThirdParty nchan_subscriber_compound_etag_message_id
    +syn keyword ngxDirectiveThirdParty nchan_subscriber_first_message
    +syn keyword ngxDirectiveThirdParty nchan_subscriber_http_raw_stream_separator
    +syn keyword ngxDirectiveThirdParty nchan_subscriber_last_message_id
    +syn keyword ngxDirectiveThirdParty nchan_subscriber_message_id_custom_etag_header
    +syn keyword ngxDirectiveThirdParty nchan_subscriber_timeout
    +syn keyword ngxDirectiveThirdParty nchan_unsubscribe_request
    +syn keyword ngxDirectiveThirdParty nchan_websocket_ping_interval
    +syn keyword ngxDirectiveThirdParty nchan_authorize_request
    +syn keyword ngxDirectiveThirdParty nchan_max_reserved_memory
    +syn keyword ngxDirectiveThirdParty nchan_message_buffer_length
    +syn keyword ngxDirectiveThirdParty nchan_message_timeout
    +syn keyword ngxDirectiveThirdParty nchan_redis_idle_channel_cache_timeout
    +syn keyword ngxDirectiveThirdParty nchan_redis_namespace
    +syn keyword ngxDirectiveThirdParty nchan_redis_pass
    +syn keyword ngxDirectiveThirdParty nchan_redis_ping_interval
    +syn keyword ngxDirectiveThirdParty nchan_redis_server
    +syn keyword ngxDirectiveThirdParty nchan_redis_storage_mode
    +syn keyword ngxDirectiveThirdParty nchan_redis_url
    +syn keyword ngxDirectiveThirdParty nchan_store_messages
    +syn keyword ngxDirectiveThirdParty nchan_use_redis
    +syn keyword ngxDirectiveThirdParty nchan_access_control_allow_origin
    +syn keyword ngxDirectiveThirdParty nchan_channel_group
    +syn keyword ngxDirectiveThirdParty nchan_channel_group_accounting
    +syn keyword ngxDirectiveThirdParty nchan_group_location
    +syn keyword ngxDirectiveThirdParty nchan_group_max_channels
    +syn keyword ngxDirectiveThirdParty nchan_group_max_messages
    +syn keyword ngxDirectiveThirdParty nchan_group_max_messages_disk
    +syn keyword ngxDirectiveThirdParty nchan_group_max_messages_memory
    +syn keyword ngxDirectiveThirdParty nchan_group_max_subscribers
    +syn keyword ngxDirectiveThirdParty nchan_subscribe_existing_channels_only
    +syn keyword ngxDirectiveThirdParty nchan_channel_event_string
    +syn keyword ngxDirectiveThirdParty nchan_channel_events_channel_id
    +syn keyword ngxDirectiveThirdParty nchan_stub_status
    +syn keyword ngxDirectiveThirdParty nchan_max_channel_id_length
    +syn keyword ngxDirectiveThirdParty nchan_max_channel_subscribers
    +syn keyword ngxDirectiveThirdParty nchan_channel_timeout
    +syn keyword ngxDirectiveThirdParty nchan_storage_engine
    +
    +" Nginx Notice Module 
    +" Serve static file to POST requests.
    +syn keyword ngxDirectiveThirdParty notice
    +syn keyword ngxDirectiveThirdParty notice_type
    +
    +" OCSP Proxy Module 
    +" Nginx OCSP processing module designed for response caching
    +syn keyword ngxDirectiveThirdParty ocsp_proxy
    +syn keyword ngxDirectiveThirdParty ocsp_cache_timeout
    +
    +" Eval Module 
    +" Module for nginx web server evaluates response of proxy or memcached module into variables.
    +syn keyword ngxDirectiveThirdParty eval
    +syn keyword ngxDirectiveThirdParty eval_escalate
    +syn keyword ngxDirectiveThirdParty eval_buffer_size
    +syn keyword ngxDirectiveThirdParty eval_override_content_type
    +syn keyword ngxDirectiveThirdParty eval_subrequest_in_memory
    +
    +" OpenSSL Version Module 
    +" Nginx OpenSSL version check at startup
    +syn keyword ngxDirectiveThirdParty openssl_version_minimum
    +syn keyword ngxDirectiveThirdParty openssl_builddate_minimum
    +
    +" Owner Match Module 
    +" Control access for specific owners and groups of files
    +syn keyword ngxDirectiveThirdParty omallow
    +syn keyword ngxDirectiveThirdParty omdeny
    +
    +" Accept Language Module 
    +" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
    +syn keyword ngxDirectiveThirdParty pagespeed
    +
    +" PHP Memcache Standard Balancer Module 
    +" Loadbalancer that is compatible to the standard loadbalancer in the php-memcache module
    +syn keyword ngxDirectiveThirdParty hash_key
    +
    +" PHP Session Module 
    +" Nginx module to parse php sessions
    +syn keyword ngxDirectiveThirdParty php_session_parse
    +syn keyword ngxDirectiveThirdParty php_session_strip_formatting
    +
    +" Phusion Passenger Module 
    +" Passenger is an open source web application server.
    +syn keyword ngxDirectiveThirdParty passenger_root
    +syn keyword ngxDirectiveThirdParty passenger_enabled
    +syn keyword ngxDirectiveThirdParty passenger_base_uri
    +syn keyword ngxDirectiveThirdParty passenger_document_root
    +syn keyword ngxDirectiveThirdParty passenger_ruby
    +syn keyword ngxDirectiveThirdParty passenger_python
    +syn keyword ngxDirectiveThirdParty passenger_nodejs
    +syn keyword ngxDirectiveThirdParty passenger_meteor_app_settings
    +syn keyword ngxDirectiveThirdParty passenger_app_env
    +syn keyword ngxDirectiveThirdParty passenger_app_root
    +syn keyword ngxDirectiveThirdParty passenger_app_group_name
    +syn keyword ngxDirectiveThirdParty passenger_app_type
    +syn keyword ngxDirectiveThirdParty passenger_startup_file
    +syn keyword ngxDirectiveThirdParty passenger_restart_dir
    +syn keyword ngxDirectiveThirdParty passenger_spawn_method
    +syn keyword ngxDirectiveThirdParty passenger_env_var
    +syn keyword ngxDirectiveThirdParty passenger_load_shell_envvars
    +syn keyword ngxDirectiveThirdParty passenger_rolling_restarts
    +syn keyword ngxDirectiveThirdParty passenger_resist_deployment_errors
    +syn keyword ngxDirectiveThirdParty passenger_user_switching
    +syn keyword ngxDirectiveThirdParty passenger_user
    +syn keyword ngxDirectiveThirdParty passenger_group
    +syn keyword ngxDirectiveThirdParty passenger_default_user
    +syn keyword ngxDirectiveThirdParty passenger_default_group
    +syn keyword ngxDirectiveThirdParty passenger_show_version_in_header
    +syn keyword ngxDirectiveThirdParty passenger_friendly_error_pages
    +syn keyword ngxDirectiveThirdParty passenger_disable_security_update_check
    +syn keyword ngxDirectiveThirdParty passenger_security_update_check_proxy
    +syn keyword ngxDirectiveThirdParty passenger_max_pool_size
    +syn keyword ngxDirectiveThirdParty passenger_min_instances
    +syn keyword ngxDirectiveThirdParty passenger_max_instances
    +syn keyword ngxDirectiveThirdParty passenger_max_instances_per_app
    +syn keyword ngxDirectiveThirdParty passenger_pool_idle_time
    +syn keyword ngxDirectiveThirdParty passenger_max_preloader_idle_time
    +syn keyword ngxDirectiveThirdParty passenger_force_max_concurrent_requests_per_process
    +syn keyword ngxDirectiveThirdParty passenger_start_timeout
    +syn keyword ngxDirectiveThirdParty passenger_concurrency_model
    +syn keyword ngxDirectiveThirdParty passenger_thread_count
    +syn keyword ngxDirectiveThirdParty passenger_max_requests
    +syn keyword ngxDirectiveThirdParty passenger_max_request_time
    +syn keyword ngxDirectiveThirdParty passenger_memory_limit
    +syn keyword ngxDirectiveThirdParty passenger_stat_throttle_rate
    +syn keyword ngxDirectiveThirdParty passenger_core_file_descriptor_ulimit
    +syn keyword ngxDirectiveThirdParty passenger_app_file_descriptor_ulimit
    +syn keyword ngxDirectiveThirdParty passenger_pre_start
    +syn keyword ngxDirectiveThirdParty passenger_set_header
    +syn keyword ngxDirectiveThirdParty passenger_max_request_queue_size
    +syn keyword ngxDirectiveThirdParty passenger_request_queue_overflow_status_code
    +syn keyword ngxDirectiveThirdParty passenger_sticky_sessions
    +syn keyword ngxDirectiveThirdParty passenger_sticky_sessions_cookie_name
    +syn keyword ngxDirectiveThirdParty passenger_abort_websockets_on_process_shutdown
    +syn keyword ngxDirectiveThirdParty passenger_ignore_client_abort
    +syn keyword ngxDirectiveThirdParty passenger_intercept_errors
    +syn keyword ngxDirectiveThirdParty passenger_pass_header
    +syn keyword ngxDirectiveThirdParty passenger_ignore_headers
    +syn keyword ngxDirectiveThirdParty passenger_headers_hash_bucket_size
    +syn keyword ngxDirectiveThirdParty passenger_headers_hash_max_size
    +syn keyword ngxDirectiveThirdParty passenger_buffer_response
    +syn keyword ngxDirectiveThirdParty passenger_response_buffer_high_watermark
    +syn keyword ngxDirectiveThirdParty passenger_buffer_size, passenger_buffers, passenger_busy_buffers_size
    +syn keyword ngxDirectiveThirdParty passenger_socket_backlog
    +syn keyword ngxDirectiveThirdParty passenger_log_level
    +syn keyword ngxDirectiveThirdParty passenger_log_file
    +syn keyword ngxDirectiveThirdParty passenger_file_descriptor_log_file
    +syn keyword ngxDirectiveThirdParty passenger_debugger
    +syn keyword ngxDirectiveThirdParty passenger_instance_registry_dir
    +syn keyword ngxDirectiveThirdParty passenger_data_buffer_dir
    +syn keyword ngxDirectiveThirdParty passenger_fly_with
    +syn keyword ngxDirectiveThirdParty union_station_support
    +syn keyword ngxDirectiveThirdParty union_station_key
    +syn keyword ngxDirectiveThirdParty union_station_proxy_address
    +syn keyword ngxDirectiveThirdParty union_station_filter
    +syn keyword ngxDirectiveThirdParty union_station_gateway_address
    +syn keyword ngxDirectiveThirdParty union_station_gateway_port
    +syn keyword ngxDirectiveThirdParty union_station_gateway_cert
    +syn keyword ngxDirectiveDeprecated rails_spawn_method
    +syn keyword ngxDirectiveDeprecated passenger_debug_log_file
    +
    +" Postgres Module 
    +" Upstream module that allows nginx to communicate directly with PostgreSQL database.
    +syn keyword ngxDirectiveThirdParty postgres_server
    +syn keyword ngxDirectiveThirdParty postgres_keepalive
    +syn keyword ngxDirectiveThirdParty postgres_pass
    +syn keyword ngxDirectiveThirdParty postgres_query
    +syn keyword ngxDirectiveThirdParty postgres_rewrite
    +syn keyword ngxDirectiveThirdParty postgres_output
    +syn keyword ngxDirectiveThirdParty postgres_set
    +syn keyword ngxDirectiveThirdParty postgres_escape
    +syn keyword ngxDirectiveThirdParty postgres_connect_timeout
    +syn keyword ngxDirectiveThirdParty postgres_result_timeout
    +
    +" Pubcookie Module 
    +" Authorizes users using encrypted cookies
    +syn keyword ngxDirectiveThirdParty pubcookie_inactive_expire
    +syn keyword ngxDirectiveThirdParty pubcookie_hard_expire
    +syn keyword ngxDirectiveThirdParty pubcookie_app_id
    +syn keyword ngxDirectiveThirdParty pubcookie_dir_depth
    +syn keyword ngxDirectiveThirdParty pubcookie_catenate_app_ids
    +syn keyword ngxDirectiveThirdParty pubcookie_app_srv_id
    +syn keyword ngxDirectiveThirdParty pubcookie_login
    +syn keyword ngxDirectiveThirdParty pubcookie_login_method
    +syn keyword ngxDirectiveThirdParty pubcookie_post
    +syn keyword ngxDirectiveThirdParty pubcookie_domain
    +syn keyword ngxDirectiveThirdParty pubcookie_granting_cert_file
    +syn keyword ngxDirectiveThirdParty pubcookie_session_key_file
    +syn keyword ngxDirectiveThirdParty pubcookie_session_cert_file
    +syn keyword ngxDirectiveThirdParty pubcookie_crypt_key_file
    +syn keyword ngxDirectiveThirdParty pubcookie_end_session
    +syn keyword ngxDirectiveThirdParty pubcookie_encryption
    +syn keyword ngxDirectiveThirdParty pubcookie_session_reauth
    +syn keyword ngxDirectiveThirdParty pubcookie_auth_type_names
    +syn keyword ngxDirectiveThirdParty pubcookie_no_prompt
    +syn keyword ngxDirectiveThirdParty pubcookie_on_demand
    +syn keyword ngxDirectiveThirdParty pubcookie_addl_request
    +syn keyword ngxDirectiveThirdParty pubcookie_no_obscure_cookies
    +syn keyword ngxDirectiveThirdParty pubcookie_no_clean_creds
    +syn keyword ngxDirectiveThirdParty pubcookie_egd_device
    +syn keyword ngxDirectiveThirdParty pubcookie_no_blank
    +syn keyword ngxDirectiveThirdParty pubcookie_super_debug
    +syn keyword ngxDirectiveThirdParty pubcookie_set_remote_user
    +
    +" Push Stream Module 
    +" A pure stream http push technology for your Nginx setup
    +syn keyword ngxDirectiveThirdParty push_stream_channels_statistics
    +syn keyword ngxDirectiveThirdParty push_stream_publisher
    +syn keyword ngxDirectiveThirdParty push_stream_subscriber
    +syn keyword ngxDirectiveThirdParty push_stream_shared_memory_size
    +syn keyword ngxDirectiveThirdParty push_stream_channel_deleted_message_text
    +syn keyword ngxDirectiveThirdParty push_stream_channel_inactivity_time
    +syn keyword ngxDirectiveThirdParty push_stream_ping_message_text
    +syn keyword ngxDirectiveThirdParty push_stream_timeout_with_body
    +syn keyword ngxDirectiveThirdParty push_stream_message_ttl
    +syn keyword ngxDirectiveThirdParty push_stream_max_subscribers_per_channel
    +syn keyword ngxDirectiveThirdParty push_stream_max_messages_stored_per_channel
    +syn keyword ngxDirectiveThirdParty push_stream_max_channel_id_length
    +syn keyword ngxDirectiveThirdParty push_stream_max_number_of_channels
    +syn keyword ngxDirectiveThirdParty push_stream_max_number_of_wildcard_channels
    +syn keyword ngxDirectiveThirdParty push_stream_wildcard_channel_prefix
    +syn keyword ngxDirectiveThirdParty push_stream_events_channel_id
    +syn keyword ngxDirectiveThirdParty push_stream_channels_path
    +syn keyword ngxDirectiveThirdParty push_stream_store_messages
    +syn keyword ngxDirectiveThirdParty push_stream_channel_info_on_publish
    +syn keyword ngxDirectiveThirdParty push_stream_authorized_channels_only
    +syn keyword ngxDirectiveThirdParty push_stream_header_template_file
    +syn keyword ngxDirectiveThirdParty push_stream_header_template
    +syn keyword ngxDirectiveThirdParty push_stream_message_template
    +syn keyword ngxDirectiveThirdParty push_stream_footer_template
    +syn keyword ngxDirectiveThirdParty push_stream_wildcard_channel_max_qtd
    +syn keyword ngxDirectiveThirdParty push_stream_ping_message_interval
    +syn keyword ngxDirectiveThirdParty push_stream_subscriber_connection_ttl
    +syn keyword ngxDirectiveThirdParty push_stream_longpolling_connection_ttl
    +syn keyword ngxDirectiveThirdParty push_stream_websocket_allow_publish
    +syn keyword ngxDirectiveThirdParty push_stream_last_received_message_time
    +syn keyword ngxDirectiveThirdParty push_stream_last_received_message_tag
    +syn keyword ngxDirectiveThirdParty push_stream_last_event_id
    +syn keyword ngxDirectiveThirdParty push_stream_user_agent
    +syn keyword ngxDirectiveThirdParty push_stream_padding_by_user_agent
    +syn keyword ngxDirectiveThirdParty push_stream_allowed_origins
    +syn keyword ngxDirectiveThirdParty push_stream_allow_connections_to_events_channel
    +
    +" rDNS Module 
    +" Make a reverse DNS (rDNS) lookup for incoming connection and provides simple access control of incoming hostname by allow/deny rules
    +syn keyword ngxDirectiveThirdParty rdns
    +syn keyword ngxDirectiveThirdParty rdns_allow
    +syn keyword ngxDirectiveThirdParty rdns_deny
    +
    +" RDS CSV Module 
    +" Nginx output filter module to convert Resty-DBD-Streams (RDS) to Comma-Separated Values (CSV)
    +syn keyword ngxDirectiveThirdParty rds_csv
    +syn keyword ngxDirectiveThirdParty rds_csv_row_terminator
    +syn keyword ngxDirectiveThirdParty rds_csv_field_separator
    +syn keyword ngxDirectiveThirdParty rds_csv_field_name_header
    +syn keyword ngxDirectiveThirdParty rds_csv_content_type
    +syn keyword ngxDirectiveThirdParty rds_csv_buffer_size
    +
    +" RDS JSON Module 
    +" An output filter that formats Resty DBD Streams generated by ngx_drizzle and others to JSON
    +syn keyword ngxDirectiveThirdParty rds_json
    +syn keyword ngxDirectiveThirdParty rds_json_buffer_size
    +syn keyword ngxDirectiveThirdParty rds_json_format
    +syn keyword ngxDirectiveThirdParty rds_json_root
    +syn keyword ngxDirectiveThirdParty rds_json_success_property
    +syn keyword ngxDirectiveThirdParty rds_json_user_property
    +syn keyword ngxDirectiveThirdParty rds_json_errcode_key
    +syn keyword ngxDirectiveThirdParty rds_json_errstr_key
    +syn keyword ngxDirectiveThirdParty rds_json_ret
    +syn keyword ngxDirectiveThirdParty rds_json_content_type
    +
    +" Redis Module 
    +" Use this module to perform simple caching
    +syn keyword ngxDirectiveThirdParty redis_pass
    +syn keyword ngxDirectiveThirdParty redis_bind
    +syn keyword ngxDirectiveThirdParty redis_connect_timeout
    +syn keyword ngxDirectiveThirdParty redis_read_timeout
    +syn keyword ngxDirectiveThirdParty redis_send_timeout
    +syn keyword ngxDirectiveThirdParty redis_buffer_size
    +syn keyword ngxDirectiveThirdParty redis_next_upstream
    +syn keyword ngxDirectiveThirdParty redis_gzip_flag
    +
    +" Redis 2 Module 
    +" Nginx upstream module for the Redis 2.0 protocol
    +syn keyword ngxDirectiveThirdParty redis2_query
    +syn keyword ngxDirectiveThirdParty redis2_raw_query
    +syn keyword ngxDirectiveThirdParty redis2_raw_queries
    +syn keyword ngxDirectiveThirdParty redis2_literal_raw_query
    +syn keyword ngxDirectiveThirdParty redis2_pass
    +syn keyword ngxDirectiveThirdParty redis2_connect_timeout
    +syn keyword ngxDirectiveThirdParty redis2_send_timeout
    +syn keyword ngxDirectiveThirdParty redis2_read_timeout
    +syn keyword ngxDirectiveThirdParty redis2_buffer_size
    +syn keyword ngxDirectiveThirdParty redis2_next_upstream
    +
    +" Replace Filter Module 
    +" Streaming regular expression replacement in response bodies
    +syn keyword ngxDirectiveThirdParty replace_filter
    +syn keyword ngxDirectiveThirdParty replace_filter_types
    +syn keyword ngxDirectiveThirdParty replace_filter_max_buffered_size
    +syn keyword ngxDirectiveThirdParty replace_filter_last_modified
    +syn keyword ngxDirectiveThirdParty replace_filter_skip
    +
    +" Roboo Module 
    +" HTTP Robot Mitigator
    +
    +" RRD Graph Module 
    +" This module provides an HTTP interface to RRDtool's graphing facilities.
    +syn keyword ngxDirectiveThirdParty rrd_graph
    +syn keyword ngxDirectiveThirdParty rrd_graph_root
    +
    +" RTMP Module 
    +" NGINX-based Media Streaming Server
    +syn keyword ngxDirectiveThirdParty rtmp
    +" syn keyword ngxDirectiveThirdParty server
    +" syn keyword ngxDirectiveThirdParty listen
    +syn keyword ngxDirectiveThirdParty application
    +" syn keyword ngxDirectiveThirdParty timeout
    +syn keyword ngxDirectiveThirdParty ping
    +syn keyword ngxDirectiveThirdParty ping_timeout
    +syn keyword ngxDirectiveThirdParty max_streams
    +syn keyword ngxDirectiveThirdParty ack_window
    +syn keyword ngxDirectiveThirdParty chunk_size
    +syn keyword ngxDirectiveThirdParty max_queue
    +syn keyword ngxDirectiveThirdParty max_message
    +syn keyword ngxDirectiveThirdParty out_queue
    +syn keyword ngxDirectiveThirdParty out_cork
    +" syn keyword ngxDirectiveThirdParty allow
    +" syn keyword ngxDirectiveThirdParty deny
    +syn keyword ngxDirectiveThirdParty exec_push
    +syn keyword ngxDirectiveThirdParty exec_pull
    +syn keyword ngxDirectiveThirdParty exec
    +syn keyword ngxDirectiveThirdParty exec_options
    +syn keyword ngxDirectiveThirdParty exec_static
    +syn keyword ngxDirectiveThirdParty exec_kill_signal
    +syn keyword ngxDirectiveThirdParty respawn
    +syn keyword ngxDirectiveThirdParty respawn_timeout
    +syn keyword ngxDirectiveThirdParty exec_publish
    +syn keyword ngxDirectiveThirdParty exec_play
    +syn keyword ngxDirectiveThirdParty exec_play_done
    +syn keyword ngxDirectiveThirdParty exec_publish_done
    +syn keyword ngxDirectiveThirdParty exec_record_done
    +syn keyword ngxDirectiveThirdParty live
    +syn keyword ngxDirectiveThirdParty meta
    +syn keyword ngxDirectiveThirdParty interleave
    +syn keyword ngxDirectiveThirdParty wait_key
    +syn keyword ngxDirectiveThirdParty wait_video
    +syn keyword ngxDirectiveThirdParty publish_notify
    +syn keyword ngxDirectiveThirdParty drop_idle_publisher
    +syn keyword ngxDirectiveThirdParty sync
    +syn keyword ngxDirectiveThirdParty play_restart
    +syn keyword ngxDirectiveThirdParty idle_streams
    +syn keyword ngxDirectiveThirdParty record
    +syn keyword ngxDirectiveThirdParty record_path
    +syn keyword ngxDirectiveThirdParty record_suffix
    +syn keyword ngxDirectiveThirdParty record_unique
    +syn keyword ngxDirectiveThirdParty record_append
    +syn keyword ngxDirectiveThirdParty record_lock
    +syn keyword ngxDirectiveThirdParty record_max_size
    +syn keyword ngxDirectiveThirdParty record_max_frames
    +syn keyword ngxDirectiveThirdParty record_interval
    +syn keyword ngxDirectiveThirdParty recorder
    +syn keyword ngxDirectiveThirdParty record_notify
    +syn keyword ngxDirectiveThirdParty play
    +syn keyword ngxDirectiveThirdParty play_temp_path
    +syn keyword ngxDirectiveThirdParty play_local_path
    +syn keyword ngxDirectiveThirdParty pull
    +syn keyword ngxDirectiveThirdParty push
    +syn keyword ngxDirectiveThirdParty push_reconnect
    +syn keyword ngxDirectiveThirdParty session_relay
    +syn keyword ngxDirectiveThirdParty on_connect
    +syn keyword ngxDirectiveThirdParty on_play
    +syn keyword ngxDirectiveThirdParty on_publish
    +syn keyword ngxDirectiveThirdParty on_done
    +syn keyword ngxDirectiveThirdParty on_play_done
    +syn keyword ngxDirectiveThirdParty on_publish_done
    +syn keyword ngxDirectiveThirdParty on_record_done
    +syn keyword ngxDirectiveThirdParty on_update
    +syn keyword ngxDirectiveThirdParty notify_update_timeout
    +syn keyword ngxDirectiveThirdParty notify_update_strict
    +syn keyword ngxDirectiveThirdParty notify_relay_redirect
    +syn keyword ngxDirectiveThirdParty notify_method
    +syn keyword ngxDirectiveThirdParty hls
    +syn keyword ngxDirectiveThirdParty hls_path
    +syn keyword ngxDirectiveThirdParty hls_fragment
    +syn keyword ngxDirectiveThirdParty hls_playlist_length
    +syn keyword ngxDirectiveThirdParty hls_sync
    +syn keyword ngxDirectiveThirdParty hls_continuous
    +syn keyword ngxDirectiveThirdParty hls_nested
    +syn keyword ngxDirectiveThirdParty hls_base_url
    +syn keyword ngxDirectiveThirdParty hls_cleanup
    +syn keyword ngxDirectiveThirdParty hls_fragment_naming
    +syn keyword ngxDirectiveThirdParty hls_fragment_slicing
    +syn keyword ngxDirectiveThirdParty hls_variant
    +syn keyword ngxDirectiveThirdParty hls_type
    +syn keyword ngxDirectiveThirdParty hls_keys
    +syn keyword ngxDirectiveThirdParty hls_key_path
    +syn keyword ngxDirectiveThirdParty hls_key_url
    +syn keyword ngxDirectiveThirdParty hls_fragments_per_key
    +syn keyword ngxDirectiveThirdParty dash
    +syn keyword ngxDirectiveThirdParty dash_path
    +syn keyword ngxDirectiveThirdParty dash_fragment
    +syn keyword ngxDirectiveThirdParty dash_playlist_length
    +syn keyword ngxDirectiveThirdParty dash_nested
    +syn keyword ngxDirectiveThirdParty dash_cleanup
    +" syn keyword ngxDirectiveThirdParty access_log
    +" syn keyword ngxDirectiveThirdParty log_format
    +syn keyword ngxDirectiveThirdParty max_connections
    +syn keyword ngxDirectiveThirdParty rtmp_stat
    +syn keyword ngxDirectiveThirdParty rtmp_stat_stylesheet
    +syn keyword ngxDirectiveThirdParty rtmp_auto_push
    +syn keyword ngxDirectiveThirdParty rtmp_auto_push_reconnect
    +syn keyword ngxDirectiveThirdParty rtmp_socket_dir
    +syn keyword ngxDirectiveThirdParty rtmp_control
    +
    +" RTMPT Module 
    +" Module for nginx to proxy rtmp using http protocol
    +syn keyword ngxDirectiveThirdParty rtmpt_proxy_target
    +syn keyword ngxDirectiveThirdParty rtmpt_proxy_rtmp_timeout
    +syn keyword ngxDirectiveThirdParty rtmpt_proxy_http_timeout
    +syn keyword ngxDirectiveThirdParty rtmpt_proxy
    +syn keyword ngxDirectiveThirdParty rtmpt_proxy_stat
    +syn keyword ngxDirectiveThirdParty rtmpt_proxy_stylesheet
    +
    +" Syntactically Awesome Module 
    +" Providing on-the-fly compiling of Sass files as an NGINX module.
    +syn keyword ngxDirectiveThirdParty sass_compile
    +syn keyword ngxDirectiveThirdParty sass_error_log
    +syn keyword ngxDirectiveThirdParty sass_include_path
    +syn keyword ngxDirectiveThirdParty sass_indent
    +syn keyword ngxDirectiveThirdParty sass_is_indented_syntax
    +syn keyword ngxDirectiveThirdParty sass_linefeed
    +syn keyword ngxDirectiveThirdParty sass_precision
    +syn keyword ngxDirectiveThirdParty sass_output_style
    +syn keyword ngxDirectiveThirdParty sass_source_comments
    +syn keyword ngxDirectiveThirdParty sass_source_map_embed
    +
    +" Secure Download Module 
    +" Enables you to create links which are only valid until a certain datetime is reached
    +syn keyword ngxDirectiveThirdParty secure_download
    +syn keyword ngxDirectiveThirdParty secure_download_secret
    +syn keyword ngxDirectiveThirdParty secure_download_path_mode
    +
    +" Selective Cache Purge Module 
    +" A module to purge cache by GLOB patterns. The supported patterns are the same as supported by Redis.
    +syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_unix_socket
    +syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_host
    +syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_port
    +syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_database
    +syn keyword ngxDirectiveThirdParty selective_cache_purge_query
    +
    +" Set cconv Module 
    +" Cconv rewrite set commands
    +syn keyword ngxDirectiveThirdParty set_cconv_to_simp
    +syn keyword ngxDirectiveThirdParty set_cconv_to_trad
    +syn keyword ngxDirectiveThirdParty set_pinyin_to_normal
    +
    +" Set Hash Module 
    +" Nginx module that allows the setting of variables to the value of a variety of hashes
    +syn keyword ngxDirectiveThirdParty set_md5
    +syn keyword ngxDirectiveThirdParty set_md5_upper
    +syn keyword ngxDirectiveThirdParty set_murmur2
    +syn keyword ngxDirectiveThirdParty set_murmur2_upper
    +syn keyword ngxDirectiveThirdParty set_sha1
    +syn keyword ngxDirectiveThirdParty set_sha1_upper
    +
    +" Set Lang Module 
    +" Provides a variety of ways for setting a variable denoting the langauge that content should be returned in.
    +syn keyword ngxDirectiveThirdParty set_lang
    +syn keyword ngxDirectiveThirdParty set_lang_method
    +syn keyword ngxDirectiveThirdParty lang_cookie
    +syn keyword ngxDirectiveThirdParty lang_get_var
    +syn keyword ngxDirectiveThirdParty lang_list
    +syn keyword ngxDirectiveThirdParty lang_post_var
    +syn keyword ngxDirectiveThirdParty lang_host
    +syn keyword ngxDirectiveThirdParty lang_referer
    +
    +" Set Misc Module 
    +" Various set_xxx directives added to nginx's rewrite module
    +syn keyword ngxDirectiveThirdParty set_if_empty
    +syn keyword ngxDirectiveThirdParty set_quote_sql_str
    +syn keyword ngxDirectiveThirdParty set_quote_pgsql_str
    +syn keyword ngxDirectiveThirdParty set_quote_json_str
    +syn keyword ngxDirectiveThirdParty set_unescape_uri
    +syn keyword ngxDirectiveThirdParty set_escape_uri
    +syn keyword ngxDirectiveThirdParty set_hashed_upstream
    +syn keyword ngxDirectiveThirdParty set_encode_base32
    +syn keyword ngxDirectiveThirdParty set_base32_padding
    +syn keyword ngxDirectiveThirdParty set_misc_base32_padding
    +syn keyword ngxDirectiveThirdParty set_base32_alphabet
    +syn keyword ngxDirectiveThirdParty set_decode_base32
    +syn keyword ngxDirectiveThirdParty set_encode_base64
    +syn keyword ngxDirectiveThirdParty set_decode_base64
    +syn keyword ngxDirectiveThirdParty set_encode_hex
    +syn keyword ngxDirectiveThirdParty set_decode_hex
    +syn keyword ngxDirectiveThirdParty set_sha1
    +syn keyword ngxDirectiveThirdParty set_md5
    +syn keyword ngxDirectiveThirdParty set_hmac_sha1
    +syn keyword ngxDirectiveThirdParty set_random
    +syn keyword ngxDirectiveThirdParty set_secure_random_alphanum
    +syn keyword ngxDirectiveThirdParty set_secure_random_lcalpha
    +syn keyword ngxDirectiveThirdParty set_rotate
    +syn keyword ngxDirectiveThirdParty set_local_today
    +syn keyword ngxDirectiveThirdParty set_formatted_gmt_time
    +syn keyword ngxDirectiveThirdParty set_formatted_local_time
    +
    +" SFlow Module 
    +" A binary, random-sampling nginx module designed for: lightweight, centralized, continuous, real-time monitoring of very large and very busy web farms.
    +syn keyword ngxDirectiveThirdParty sflow
    +
    +" Shibboleth Module 
    +" Shibboleth auth request module for nginx
    +syn keyword ngxDirectiveThirdParty shib_request
    +syn keyword ngxDirectiveThirdParty shib_request_set
    +syn keyword ngxDirectiveThirdParty shib_request_use_headers
    +
    +" Slice Module 
    +" Nginx module for serving a file in slices (reverse byte-range)
    +" syn keyword ngxDirectiveThirdParty slice
    +syn keyword ngxDirectiveThirdParty slice_arg_begin
    +syn keyword ngxDirectiveThirdParty slice_arg_end
    +syn keyword ngxDirectiveThirdParty slice_header
    +syn keyword ngxDirectiveThirdParty slice_footer
    +syn keyword ngxDirectiveThirdParty slice_header_first
    +syn keyword ngxDirectiveThirdParty slice_footer_last
    +
    +" SlowFS Cache Module 
    +" Module adding ability to cache static files.
    +syn keyword ngxDirectiveThirdParty slowfs_big_file_size
    +syn keyword ngxDirectiveThirdParty slowfs_cache
    +syn keyword ngxDirectiveThirdParty slowfs_cache_key
    +syn keyword ngxDirectiveThirdParty slowfs_cache_min_uses
    +syn keyword ngxDirectiveThirdParty slowfs_cache_path
    +syn keyword ngxDirectiveThirdParty slowfs_cache_purge
    +syn keyword ngxDirectiveThirdParty slowfs_cache_valid
    +syn keyword ngxDirectiveThirdParty slowfs_temp_path
    +
    +" Small Light Module 
    +" Dynamic Image Transformation Module For nginx.
    +syn keyword ngxDirectiveThirdParty small_light
    +syn keyword ngxDirectiveThirdParty small_light_getparam_mode
    +syn keyword ngxDirectiveThirdParty small_light_material_dir
    +syn keyword ngxDirectiveThirdParty small_light_pattern_define
    +syn keyword ngxDirectiveThirdParty small_light_radius_max
    +syn keyword ngxDirectiveThirdParty small_light_sigma_max
    +syn keyword ngxDirectiveThirdParty small_light_imlib2_temp_dir
    +syn keyword ngxDirectiveThirdParty small_light_buffer
    +
    +" Sorted Querystring Filter Module 
    +" Nginx module to expose querystring parameters sorted in a variable to be used on cache_key as example
    +syn keyword ngxDirectiveThirdParty sorted_querystring_filter_parameter
    +
    +" Sphinx2 Module 
    +" Nginx upstream module for Sphinx 2.x
    +syn keyword ngxDirectiveThirdParty sphinx2_pass
    +syn keyword ngxDirectiveThirdParty sphinx2_bind
    +syn keyword ngxDirectiveThirdParty sphinx2_connect_timeout
    +syn keyword ngxDirectiveThirdParty sphinx2_send_timeout
    +syn keyword ngxDirectiveThirdParty sphinx2_buffer_size
    +syn keyword ngxDirectiveThirdParty sphinx2_read_timeout
    +syn keyword ngxDirectiveThirdParty sphinx2_next_upstream
    +
    +" HTTP SPNEGO auth Module 
    +" This module implements adds SPNEGO support to nginx(http://nginx.org). It currently supports only Kerberos authentication via GSSAPI
    +syn keyword ngxDirectiveThirdParty auth_gss
    +syn keyword ngxDirectiveThirdParty auth_gss_keytab
    +syn keyword ngxDirectiveThirdParty auth_gss_realm
    +syn keyword ngxDirectiveThirdParty auth_gss_service_name
    +syn keyword ngxDirectiveThirdParty auth_gss_authorized_principal
    +syn keyword ngxDirectiveThirdParty auth_gss_allow_basic_fallback
    +
    +" SR Cache Module 
    +" Transparent subrequest-based caching layout for arbitrary nginx locations
    +syn keyword ngxDirectiveThirdParty srcache_fetch
    +syn keyword ngxDirectiveThirdParty srcache_fetch_skip
    +syn keyword ngxDirectiveThirdParty srcache_store
    +syn keyword ngxDirectiveThirdParty srcache_store_max_size
    +syn keyword ngxDirectiveThirdParty srcache_store_skip
    +syn keyword ngxDirectiveThirdParty srcache_store_statuses
    +syn keyword ngxDirectiveThirdParty srcache_store_ranges
    +syn keyword ngxDirectiveThirdParty srcache_header_buffer_size
    +syn keyword ngxDirectiveThirdParty srcache_store_hide_header
    +syn keyword ngxDirectiveThirdParty srcache_store_pass_header
    +syn keyword ngxDirectiveThirdParty srcache_methods
    +syn keyword ngxDirectiveThirdParty srcache_ignore_content_encoding
    +syn keyword ngxDirectiveThirdParty srcache_request_cache_control
    +syn keyword ngxDirectiveThirdParty srcache_response_cache_control
    +syn keyword ngxDirectiveThirdParty srcache_store_no_store
    +syn keyword ngxDirectiveThirdParty srcache_store_no_cache
    +syn keyword ngxDirectiveThirdParty srcache_store_private
    +syn keyword ngxDirectiveThirdParty srcache_default_expire
    +syn keyword ngxDirectiveThirdParty srcache_max_expire
    +
    +" SSSD Info Module 
    +" Retrives additional attributes from SSSD for current authentizated user
    +syn keyword ngxDirectiveThirdParty sssd_info
    +syn keyword ngxDirectiveThirdParty sssd_info_output_to
    +syn keyword ngxDirectiveThirdParty sssd_info_groups
    +syn keyword ngxDirectiveThirdParty sssd_info_group
    +syn keyword ngxDirectiveThirdParty sssd_info_group_separator
    +syn keyword ngxDirectiveThirdParty sssd_info_attributes
    +syn keyword ngxDirectiveThirdParty sssd_info_attribute
    +syn keyword ngxDirectiveThirdParty sssd_info_attribute_separator
    +
    +" Static Etags Module 
    +" Generate etags for static content
    +syn keyword ngxDirectiveThirdParty FileETag
    +
    +" Statsd Module 
    +" An nginx module for sending statistics to statsd
    +syn keyword ngxDirectiveThirdParty statsd_server
    +syn keyword ngxDirectiveThirdParty statsd_sample_rate
    +syn keyword ngxDirectiveThirdParty statsd_count
    +syn keyword ngxDirectiveThirdParty statsd_timing
    +
    +" Sticky Module 
    +" Add a sticky cookie to be always forwarded to the same upstream server
    +" syn keyword ngxDirectiveThirdParty sticky
    +
    +" Stream Echo Module 
    +" TCP/stream echo module for NGINX (a port of ngx_http_echo_module)
    +syn keyword ngxDirectiveThirdParty echo
    +syn keyword ngxDirectiveThirdParty echo_duplicate
    +syn keyword ngxDirectiveThirdParty echo_flush_wait
    +syn keyword ngxDirectiveThirdParty echo_sleep
    +syn keyword ngxDirectiveThirdParty echo_send_timeout
    +syn keyword ngxDirectiveThirdParty echo_read_bytes
    +syn keyword ngxDirectiveThirdParty echo_read_line
    +syn keyword ngxDirectiveThirdParty echo_request_data
    +syn keyword ngxDirectiveThirdParty echo_discard_request
    +syn keyword ngxDirectiveThirdParty echo_read_buffer_size
    +syn keyword ngxDirectiveThirdParty echo_read_timeout
    +syn keyword ngxDirectiveThirdParty echo_client_error_log_level
    +syn keyword ngxDirectiveThirdParty echo_lingering_close
    +syn keyword ngxDirectiveThirdParty echo_lingering_time
    +syn keyword ngxDirectiveThirdParty echo_lingering_timeout
    +
    +" Stream Lua Module 
    +" Embed the power of Lua into Nginx stream/TCP Servers.
    +syn keyword ngxDirectiveThirdParty lua_resolver
    +syn keyword ngxDirectiveThirdParty lua_resolver_timeout
    +syn keyword ngxDirectiveThirdParty lua_lingering_close
    +syn keyword ngxDirectiveThirdParty lua_lingering_time
    +syn keyword ngxDirectiveThirdParty lua_lingering_timeout
    +
    +" Stream Upsync Module 
    +" Sync upstreams from consul or others, dynamiclly modify backend-servers attribute(weight, max_fails,...), needn't reload nginx.
    +syn keyword ngxDirectiveThirdParty upsync
    +syn keyword ngxDirectiveThirdParty upsync_dump_path
    +syn keyword ngxDirectiveThirdParty upsync_lb
    +syn keyword ngxDirectiveThirdParty upsync_show
    +
    +" Strip Module 
    +" Whitespace remover.
    +syn keyword ngxDirectiveThirdParty strip
    +
    +" Subrange Module 
    +" Split one big HTTP/Range request to multiple subrange requesets
    +syn keyword ngxDirectiveThirdParty subrange
    +
    +" Substitutions Module 
    +" A filter module which can do both regular expression and fixed string substitutions on response bodies.
    +syn keyword ngxDirectiveThirdParty subs_filter
    +syn keyword ngxDirectiveThirdParty subs_filter_types
    +
    +" Summarizer Module 
    +" Upstream nginx module to get summaries of documents using the summarizer daemon service
    +syn keyword ngxDirectiveThirdParty smrzr_filename
    +syn keyword ngxDirectiveThirdParty smrzr_ratio
    +
    +" Supervisord Module 
    +" Module providing nginx with API to communicate with supervisord and manage (start/stop) backends on-demand.
    +syn keyword ngxDirectiveThirdParty supervisord
    +syn keyword ngxDirectiveThirdParty supervisord_inherit_backend_status
    +syn keyword ngxDirectiveThirdParty supervisord_name
    +syn keyword ngxDirectiveThirdParty supervisord_start
    +syn keyword ngxDirectiveThirdParty supervisord_stop
    +
    +" Tarantool Upstream Module 
    +" Tarantool NginX upstream module (REST, JSON API, websockets, load balancing)
    +syn keyword ngxDirectiveThirdParty tnt_pass
    +syn keyword ngxDirectiveThirdParty tnt_http_methods
    +syn keyword ngxDirectiveThirdParty tnt_http_rest_methods
    +syn keyword ngxDirectiveThirdParty tnt_pass_http_request
    +syn keyword ngxDirectiveThirdParty tnt_pass_http_request_buffer_size
    +syn keyword ngxDirectiveThirdParty tnt_method
    +syn keyword ngxDirectiveThirdParty tnt_http_allowed_methods - experemental
    +syn keyword ngxDirectiveThirdParty tnt_send_timeout
    +syn keyword ngxDirectiveThirdParty tnt_read_timeout
    +syn keyword ngxDirectiveThirdParty tnt_buffer_size
    +syn keyword ngxDirectiveThirdParty tnt_next_upstream
    +syn keyword ngxDirectiveThirdParty tnt_connect_timeout
    +syn keyword ngxDirectiveThirdParty tnt_next_upstream
    +syn keyword ngxDirectiveThirdParty tnt_next_upstream_tries
    +syn keyword ngxDirectiveThirdParty tnt_next_upstream_timeout
    +
    +" TCP Proxy Module 
    +" Add the feature of tcp proxy with nginx, with health check and status monitor
    +syn keyword ngxDirectiveBlock tcp
    +" syn keyword ngxDirectiveThirdParty server
    +" syn keyword ngxDirectiveThirdParty listen
    +" syn keyword ngxDirectiveThirdParty allow
    +" syn keyword ngxDirectiveThirdParty deny
    +" syn keyword ngxDirectiveThirdParty so_keepalive
    +" syn keyword ngxDirectiveThirdParty tcp_nodelay
    +" syn keyword ngxDirectiveThirdParty timeout
    +" syn keyword ngxDirectiveThirdParty server_name
    +" syn keyword ngxDirectiveThirdParty resolver
    +" syn keyword ngxDirectiveThirdParty resolver_timeout
    +" syn keyword ngxDirectiveThirdParty upstream
    +syn keyword ngxDirectiveThirdParty check
    +syn keyword ngxDirectiveThirdParty check_http_send
    +syn keyword ngxDirectiveThirdParty check_http_expect_alive
    +syn keyword ngxDirectiveThirdParty check_smtp_send
    +syn keyword ngxDirectiveThirdParty check_smtp_expect_alive
    +syn keyword ngxDirectiveThirdParty check_shm_size
    +syn keyword ngxDirectiveThirdParty check_status
    +" syn keyword ngxDirectiveThirdParty ip_hash
    +" syn keyword ngxDirectiveThirdParty proxy_pass
    +" syn keyword ngxDirectiveThirdParty proxy_buffer
    +" syn keyword ngxDirectiveThirdParty proxy_connect_timeout
    +" syn keyword ngxDirectiveThirdParty proxy_read_timeout
    +syn keyword ngxDirectiveThirdParty proxy_write_timeout
    +
    +" Testcookie Module 
    +" NGINX module for L7 DDoS attack mitigation
    +syn keyword ngxDirectiveThirdParty testcookie
    +syn keyword ngxDirectiveThirdParty testcookie_name
    +syn keyword ngxDirectiveThirdParty testcookie_domain
    +syn keyword ngxDirectiveThirdParty testcookie_expires
    +syn keyword ngxDirectiveThirdParty testcookie_path
    +syn keyword ngxDirectiveThirdParty testcookie_secret
    +syn keyword ngxDirectiveThirdParty testcookie_session
    +syn keyword ngxDirectiveThirdParty testcookie_arg
    +syn keyword ngxDirectiveThirdParty testcookie_max_attempts
    +syn keyword ngxDirectiveThirdParty testcookie_p3p
    +syn keyword ngxDirectiveThirdParty testcookie_fallback
    +syn keyword ngxDirectiveThirdParty testcookie_whitelist
    +syn keyword ngxDirectiveThirdParty testcookie_pass
    +syn keyword ngxDirectiveThirdParty testcookie_redirect_via_refresh
    +syn keyword ngxDirectiveThirdParty testcookie_refresh_template
    +syn keyword ngxDirectiveThirdParty testcookie_refresh_status
    +syn keyword ngxDirectiveThirdParty testcookie_deny_keepalive
    +syn keyword ngxDirectiveThirdParty testcookie_get_only
    +syn keyword ngxDirectiveThirdParty testcookie_https_location
    +syn keyword ngxDirectiveThirdParty testcookie_refresh_encrypt_cookie
    +syn keyword ngxDirectiveThirdParty testcookie_refresh_encrypt_cookie_key
    +syn keyword ngxDirectiveThirdParty testcookie_refresh_encrypt_iv
    +syn keyword ngxDirectiveThirdParty testcookie_internal
    +syn keyword ngxDirectiveThirdParty testcookie_httponly_flag
    +syn keyword ngxDirectiveThirdParty testcookie_secure_flag
    +
    +" Types Filter Module 
    +" Change the `Content-Type` output header depending on an extension variable according to a condition specified in the 'if' clause.
    +syn keyword ngxDirectiveThirdParty types_filter
    +syn keyword ngxDirectiveThirdParty types_filter_use_default
    +
    +" Unzip Module 
    +" Enabling fetching of files that are stored in zipped archives.
    +syn keyword ngxDirectiveThirdParty file_in_unzip_archivefile
    +syn keyword ngxDirectiveThirdParty file_in_unzip_extract
    +syn keyword ngxDirectiveThirdParty file_in_unzip
    +
    +" Upload Progress Module 
    +" An upload progress system, that monitors RFC1867 POST upload as they are transmitted to upstream servers
    +syn keyword ngxDirectiveThirdParty upload_progress
    +syn keyword ngxDirectiveThirdParty track_uploads
    +syn keyword ngxDirectiveThirdParty report_uploads
    +syn keyword ngxDirectiveThirdParty upload_progress_content_type
    +syn keyword ngxDirectiveThirdParty upload_progress_header
    +syn keyword ngxDirectiveThirdParty upload_progress_jsonp_parameter
    +syn keyword ngxDirectiveThirdParty upload_progress_json_output
    +syn keyword ngxDirectiveThirdParty upload_progress_jsonp_output
    +syn keyword ngxDirectiveThirdParty upload_progress_template
    +
    +" Upload Module 
    +" Parses request body storing all files being uploaded to a directory specified by upload_store directive
    +syn keyword ngxDirectiveThirdParty upload_pass
    +syn keyword ngxDirectiveThirdParty upload_resumable
    +syn keyword ngxDirectiveThirdParty upload_store
    +syn keyword ngxDirectiveThirdParty upload_state_store
    +syn keyword ngxDirectiveThirdParty upload_store_access
    +syn keyword ngxDirectiveThirdParty upload_set_form_field
    +syn keyword ngxDirectiveThirdParty upload_aggregate_form_field
    +syn keyword ngxDirectiveThirdParty upload_pass_form_field
    +syn keyword ngxDirectiveThirdParty upload_cleanup
    +syn keyword ngxDirectiveThirdParty upload_buffer_size
    +syn keyword ngxDirectiveThirdParty upload_max_part_header_len
    +syn keyword ngxDirectiveThirdParty upload_max_file_size
    +syn keyword ngxDirectiveThirdParty upload_limit_rate
    +syn keyword ngxDirectiveThirdParty upload_max_output_body_len
    +syn keyword ngxDirectiveThirdParty upload_tame_arrays
    +syn keyword ngxDirectiveThirdParty upload_pass_args
    +
    +" Upstream Fair Module 
    +" The fair load balancer module for nginx http://nginx.localdomain.pl
    +syn keyword ngxDirectiveThirdParty fair
    +syn keyword ngxDirectiveThirdParty upstream_fair_shm_size
    +
    +" Upstream Hash Module (DEPRECATED) 
    +" Provides simple upstream load distribution by hashing a configurable variable.
    +" syn keyword ngxDirectiveDeprecated hash
    +syn keyword ngxDirectiveDeprecated hash_again
    +
    +" Upstream Domain Resolve Module 
    +" A load-balancer that resolves an upstream domain name asynchronously.
    +syn keyword ngxDirectiveThirdParty jdomain
    +
    +" Upsync Module 
    +" Sync upstreams from consul or others, dynamiclly modify backend-servers attribute(weight, max_fails,...), needn't reload nginx
    +syn keyword ngxDirectiveThirdParty upsync
    +syn keyword ngxDirectiveThirdParty upsync_dump_path
    +syn keyword ngxDirectiveThirdParty upsync_lb
    +syn keyword ngxDirectiveThirdParty upstream_show
    +
    +" URL Module 
    +" Nginx url encoding converting module
    +syn keyword ngxDirectiveThirdParty url_encoding_convert
    +syn keyword ngxDirectiveThirdParty url_encoding_convert_from
    +syn keyword ngxDirectiveThirdParty url_encoding_convert_to
    +
    +" User Agent Module 
    +" Match browsers and crawlers
    +syn keyword ngxDirectiveThirdParty user_agent
    +
    +" Upstrema Ketama Chash Module 
    +" Nginx load-balancer module implementing ketama consistent hashing.
    +syn keyword ngxDirectiveThirdParty ketama_chash
    +
    +" Video Thumbextractor Module 
    +" Extract thumbs from a video file
    +syn keyword ngxDirectiveThirdParty video_thumbextractor
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_video_filename
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_video_second
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_image_width
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_image_height
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_only_keyframe
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_next_time
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_rows
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_cols
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_max_rows
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_max_cols
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_sample_interval
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_color
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_margin
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_padding
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_threads
    +syn keyword ngxDirectiveThirdParty video_thumbextractor_processes_per_worker
    +
    +" Eval Module 
    +" Module for nginx web server evaluates response of proxy or memcached module into variables.
    +syn keyword ngxDirectiveThirdParty eval
    +syn keyword ngxDirectiveThirdParty eval_escalate
    +syn keyword ngxDirectiveThirdParty eval_override_content_type
    +
    +" VTS Module 
    +" Nginx virtual host traffic status module
    +syn keyword ngxDirectiveThirdParty vhost_traffic_status
    +syn keyword ngxDirectiveThirdParty vhost_traffic_status_zone
    +syn keyword ngxDirectiveThirdParty vhost_traffic_status_display
    +syn keyword ngxDirectiveThirdParty vhost_traffic_status_display_format
    +syn keyword ngxDirectiveThirdParty vhost_traffic_status_display_jsonp
    +syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter
    +syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter_by_host
    +syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter_by_set_key
    +syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter_check_duplicate
    +syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit
    +syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit_traffic
    +syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit_traffic_by_set_key
    +syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit_check_duplicate
    +
    +" XSS Module 
    +" Native support for cross-site scripting (XSS) in an nginx.
    +syn keyword ngxDirectiveThirdParty xss_get
    +syn keyword ngxDirectiveThirdParty xss_callback_arg
    +syn keyword ngxDirectiveThirdParty xss_override_status
    +syn keyword ngxDirectiveThirdParty xss_check_status
    +syn keyword ngxDirectiveThirdParty xss_input_types
    +
    +" CT Module 
    +" Certificate Transparency module for nginx
    +syn keyword ngxDirectiveThirdParty ssl_ct
    +syn keyword ngxDirectiveThirdParty ssl_ct_static_scts
    +
    +" Dynamic TLS records patch 
    +" TLS Dynamic Record Resizing
    +syn keyword ngxDirectiveThirdParty ssl_dyn_rec_enable
    +syn keyword ngxDirectiveThirdParty ssl_dyn_rec_size_hi
    +syn keyword ngxDirectiveThirdParty ssl_dyn_rec_size_lo
    +syn keyword ngxDirectiveThirdParty ssl_dyn_rec_threshold
    +syn keyword ngxDirectiveThirdParty ssl_dyn_rec_timeout
    +
    +" ZIP Module 
    +" ZIP archiver for nginx
    +
    +" Contained LUA blocks for embedded syntax highlighting
    +syn keyword ngxThirdPartyLuaBlock balancer_by_lua_block contained
    +syn keyword ngxThirdPartyLuaBlock init_by_lua_block contained
    +syn keyword ngxThirdPartyLuaBlock init_worker_by_lua_block contained
    +syn keyword ngxThirdPartyLuaBlock set_by_lua_block contained
    +syn keyword ngxThirdPartyLuaBlock content_by_lua_block contained
    +syn keyword ngxThirdPartyLuaBlock rewrite_by_lua_block contained
    +syn keyword ngxThirdPartyLuaBlock access_by_lua_block contained
    +syn keyword ngxThirdPartyLuaBlock header_filter_by_lua_block contained
    +syn keyword ngxThirdPartyLuaBlock body_filter_by_lua_block contained
    +syn keyword ngxThirdPartyLuaBlock log_by_lua_block contained
    +syn keyword ngxThirdPartyLuaBlock ssl_certificate_by_lua_block contained
    +syn keyword ngxThirdPartyLuaBlock ssl_session_fetch_by_lua_block contained
    +syn keyword ngxThirdPartyLuaBlock ssl_session_store_by_lua_block contained
    +
    +
    +" Nested syntax in ERB templating statements
    +" Subtype needs to be set to '', otherwise recursive errors occur when opening *.nginx files
    +let b:eruby_subtype = ''
    +unlet b:current_syntax
    +syn include @ERB syntax/eruby.vim
    +syn region ngxTemplate start=+<%[^\=]+ end=+%>+ oneline contains=@ERB
    +syn region ngxTemplateVar start=+<%=+ end=+%>+ oneline
    +let b:current_syntax = "nginx"
    +
    +" Nested syntax in Jinja templating statements
    +" This dependend on https://github.com/lepture/vim-jinja
    +unlet b:current_syntax
    +try
    +  syn include @JINJA syntax/jinja.vim
    +  syn region ngxTemplate start=+{%+ end=+%}+ oneline contains=@JINJA
    +  syn region ngxTemplateVar start=+{{+ end=+}}+ oneline
    +catch
    +endtry
    +let b:current_syntax = "nginx"
    +
    +" Enable nested LUA syntax highlighting
    +unlet b:current_syntax
    +syn include @LUA syntax/lua.vim
    +syn region ngxLua start=+^\s*\w\+_by_lua_block\s*{+ end=+}+me=s-1 contains=ngxBlock,@LUA
    +let b:current_syntax = "nginx"
    +
    +
    +" Highlight
    +hi link ngxComment Comment
    +hi link ngxVariable Identifier
    +hi link ngxVariableBlock Identifier
    +hi link ngxVariableString PreProc
    +hi link ngxString String
    +hi link ngxIPaddr Delimiter
    +hi link ngxBoolean Boolean
    +hi link ngxInteger Number
    +hi link ngxDirectiveBlock Statement
    +hi link ngxDirectiveImportant Type
    +hi link ngxDirectiveControl Keyword
    +hi link ngxDirectiveDeprecated Error
    +hi link ngxDirective Function
    +hi link ngxDirectiveThirdParty Function
    +hi link ngxListenOptions PreProc
    +hi link ngxUpstreamServerOptions PreProc
    +hi link ngxProxyNextUpstreamOptions PreProc
    +hi link ngxMailProtocol Keyword
    +hi link ngxSSLProtocol PreProc
    +hi link ngxSSLProtocolDeprecated Error
    +hi link ngxStickyOptions ngxDirective
    +hi link ngxCookieOptions PreProc
    +hi link ngxTemplateVar Identifier
    +
    +hi link ngxSSLSessionTicketsOff ngxBoolean
    +hi link ngxSSLSessionTicketsOn Error
    +hi link ngxSSLPreferServerCiphersOn ngxBoolean
    +hi link ngxSSLPreferServerCiphersOff Error
    +hi link ngxGzipOff ngxBoolean
    +hi link ngxGzipOn Error
    +hi link ngxSSLCipherInsecure Error
    +
    +hi link ngxThirdPartyLuaBlock Function
    diff --git a/.config/vim/syntax/ninja.vim b/.config/vim/syntax/ninja.vim
    new file mode 100644
    index 0000000..a53567e
    --- /dev/null
    +++ b/.config/vim/syntax/ninja.vim
    @@ -0,0 +1,87 @@
    +" ninja build file syntax.
    +" Language: ninja build file as described at
    +"           http://ninja-build.org/manual.html
    +" Version: 1.5
    +" Last Change: 2018/04/05
    +" Maintainer: Nicolas Weber 
    +" Version 1.5 of this script is in the upstream vim repository and will be
    +" included in the next vim release. If you change this, please send your change
    +" upstream.
    +
    +" ninja lexer and parser are at
    +" https://github.com/ninja-build/ninja/blob/master/src/lexer.in.cc
    +" https://github.com/ninja-build/ninja/blob/master/src/manifest_parser.cc
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn case match
    +
    +" Comments are only matched when the # is at the beginning of the line (with
    +" optional whitespace), as long as the prior line didn't end with a $
    +" continuation.
    +syn match ninjaComment /\(\$\n\)\@"
    +syn match ninjaKeyword "^rule\>"
    +syn match ninjaKeyword "^pool\>"
    +syn match ninjaKeyword "^default\>"
    +syn match ninjaKeyword "^include\>"
    +syn match ninjaKeyword "^subninja\>"
    +
    +" Both 'build' and 'rule' begin a variable scope that ends
    +" on the first line without indent. 'rule' allows only a
    +" limited set of magic variables, 'build' allows general
    +" let assignments.
    +" manifest_parser.cc, ParseRule()
    +syn region ninjaRule start="^rule" end="^\ze\S" contains=TOP transparent
    +syn keyword ninjaRuleCommand contained containedin=ninjaRule command
    +                                     \ deps depfile description generator
    +                                     \ pool restat rspfile rspfile_content
    +
    +syn region ninjaPool start="^pool" end="^\ze\S" contains=TOP transparent
    +syn keyword ninjaPoolCommand contained containedin=ninjaPool  depth
    +
    +" Strings are parsed as follows:
    +" lexer.in.cc, ReadEvalString()
    +" simple_varname = [a-zA-Z0-9_-]+;
    +" varname = [a-zA-Z0-9_.-]+;
    +" $$ -> $
    +" $\n -> line continuation
    +" '$ ' -> escaped space
    +" $simple_varname -> variable
    +" ${varname} -> variable
    +
    +syn match   ninjaDollar "\$\$"
    +syn match   ninjaWrapLineOperator "\$$"
    +syn match   ninjaSimpleVar "\$[a-zA-Z0-9_-]\+"
    +syn match   ninjaVar       "\${[a-zA-Z0-9_.-]\+}"
    +
    +" operators are:
    +" variable assignment =
    +" rule definition :
    +" implicit dependency |
    +" order-only dependency ||
    +syn match ninjaOperator "\(=\|:\||\|||\)\ze\s"
    +
    +hi def link ninjaComment Comment
    +hi def link ninjaKeyword Keyword
    +hi def link ninjaRuleCommand Statement
    +hi def link ninjaPoolCommand Statement
    +hi def link ninjaDollar ninjaOperator
    +hi def link ninjaWrapLineOperator ninjaOperator
    +hi def link ninjaOperator Operator
    +hi def link ninjaSimpleVar ninjaVar
    +hi def link ninjaVar Identifier
    +
    +let b:current_syntax = "ninja"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/nix.vim b/.config/vim/syntax/nix.vim
    new file mode 100644
    index 0000000..ef52cdd
    --- /dev/null
    +++ b/.config/vim/syntax/nix.vim
    @@ -0,0 +1,212 @@
    +" Vim syntax file
    +" Language:        Nix
    +" Maintainer:      James Fleming 
    +"                  (Github username: equill)
    +" Original Author: Daiderd Jordan 
    +" Acknowledgement: Based on vim-nix maintained by Daiderd Jordan 
    +"                  https://github.com/LnL7/vim-nix
    +" License:         MIT
    +" Last Change:     2023 Aug 19
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn keyword nixBoolean     true false
    +syn keyword nixNull        null
    +syn keyword nixRecKeyword  rec
    +
    +syn keyword nixOperator or
    +syn match   nixOperator '!=\|!'
    +syn match   nixOperator '<=\?'
    +syn match   nixOperator '>=\?'
    +syn match   nixOperator '&&'
    +syn match   nixOperator '//\='
    +syn match   nixOperator '=='
    +syn match   nixOperator '?'
    +syn match   nixOperator '||'
    +syn match   nixOperator '++\='
    +syn match   nixOperator '-'
    +syn match   nixOperator '\*'
    +syn match   nixOperator '->'
    +
    +syn match nixParen '[()]'
    +syn match nixInteger '\d\+'
    +
    +syn keyword nixTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained
    +syn match   nixComment '#.*' contains=nixTodo,@Spell
    +syn region  nixComment start=+/\*+ end=+\*/+ contains=nixTodo,@Spell
    +
    +syn region nixInterpolation matchgroup=nixInterpolationDelimiter start="\${" end="}" contained contains=@nixExpr,nixInterpolationParam
    +
    +syn match nixSimpleStringSpecial /\\\%([nrt"\\$]\|$\)/ contained
    +syn match nixStringSpecial /''['$]/ contained
    +syn match nixStringSpecial /\$\$/ contained
    +syn match nixStringSpecial /''\\[nrt]/ contained
    +
    +syn match nixSimpleStringSpecial /\$\$/ contained
    +
    +syn match nixInvalidSimpleStringEscape /\\[^nrt"\\$]/ contained
    +syn match nixInvalidStringEscape /''\\[^nrt]/ contained
    +
    +syn region nixSimpleString matchgroup=nixStringDelimiter start=+"+ skip=+\\"+ end=+"+ contains=nixInterpolation,nixSimpleStringSpecial,nixInvalidSimpleStringEscape
    +syn region nixString matchgroup=nixStringDelimiter start=+''+ skip=+''['$\\]+ end=+''+ contains=nixInterpolation,nixStringSpecial,nixInvalidStringEscape
    +
    +syn match nixFunctionCall "[a-zA-Z_][a-zA-Z0-9_'-]*"
    +
    +syn match nixPath "[a-zA-Z0-9._+-]*\%(/[a-zA-Z0-9._+-]\+\)\+"
    +syn match nixHomePath "\~\%(/[a-zA-Z0-9._+-]\+\)\+"
    +syn match nixSearchPath "[a-zA-Z0-9._+-]\+\%(\/[a-zA-Z0-9._+-]\+\)*" contained
    +syn match nixPathDelimiter "[<>]" contained
    +syn match nixSearchPathRef "<[a-zA-Z0-9._+-]\+\%(\/[a-zA-Z0-9._+-]\+\)*>" contains=nixSearchPath,nixPathDelimiter
    +syn match nixURI "[a-zA-Z][a-zA-Z0-9.+-]*:[a-zA-Z0-9%/?:@&=$,_.!~*'+-]\+"
    +
    +syn match nixAttributeDot "\." contained
    +syn match nixAttribute "[a-zA-Z_][a-zA-Z0-9_'-]*\ze\%([^a-zA-Z0-9_'.-]\|$\)" contained
    +syn region nixAttributeAssignment start="=" end="\ze;" contained contains=@nixExpr
    +syn region nixAttributeDefinition start=/\ze[a-zA-Z_"$]/ end=";" contained contains=nixComment,nixAttribute,nixInterpolation,nixSimpleString,nixAttributeDot,nixAttributeAssignment
    +
    +syn region nixInheritAttributeSubExpr start="("ms=e+1 end="\ze)" contained contains=nixAttributeDot,@nixExpr
    +syn region nixInheritAttributeScope start="\ze(" end=")" contained contains=nixInheritAttributeSubExpr
    +syn region nixAttributeDefinition matchgroup=nixInherit start="\" end=";" contained contains=nixComment,nixInheritAttributeScope,nixAttribute
    +
    +syn region nixAttributeSet start="{" end="}" contains=nixComment,nixAttributeDefinition
    +
    +"                                                                                                              vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    +syn region nixArgumentDefinitionWithDefault matchgroup=nixArgumentDefinition start="[a-zA-Z_][a-zA-Z0-9_'-]*\ze\%(\s\|#.\{-\}\n\|\n\|/\*\_.\{-\}\*/\)*?\@=" matchgroup=NONE end="[,}]\@=" transparent contained contains=@nixExpr
    +"                                                           vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    +syn match nixArgumentDefinition "[a-zA-Z_][a-zA-Z0-9_'-]*\ze\%(\s\|#.\{-\}\n\|\n\|/\*\_.\{-\}\*/\)*[,}]\@=" contained
    +syn match nixArgumentEllipsis "\.\.\." contained
    +syn match nixArgumentSeparator "," contained
    +
    +"                          vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv                        vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    +syn match nixArgOperator '@\%(\s\|#.\{-\}\n\|\n\|/\*\_.\{-\}\*/\)*[a-zA-Z_][a-zA-Z0-9_'-]*\%(\s\|#.\{-\}\n\|\n\|/\*\_.\{-\}\*/\)*:'he=s+1 contained contains=nixAttribute
    +
    +"                                                 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    +syn match nixArgOperator '[a-zA-Z_][a-zA-Z0-9_'-]*\%(\s\|#.\{-\}\n\|\n\|/\*\_.\{-\}\*/\)*@'hs=e-1 contains=nixAttribute nextgroup=nixFunctionArgument
    +
    +" This is a bit more complicated, because function arguments can be passed in a
    +" very similar form on how attribute sets are defined and two regions with the
    +" same start patterns will shadow each other. Instead of a region we could use a
    +" match on {\_.\{-\}}, which unfortunately doesn't take nesting into account.
    +"
    +" So what we do instead is that we look forward until we are sure that it's a
    +" function argument. Unfortunately, we need to catch comments and both vertical
    +" and horizontal white space, which the following regex should hopefully do:
    +"
    +" "\%(\s\|#.\{-\}\n\|\n\|/\*\_.\{-\}\*/\)*"
    +"
    +" It is also used throughout the whole file and is marked with 'v's as well.
    +"
    +" Fortunately the matching rules for function arguments are much simpler than
    +" for real attribute sets, because we can stop when we hit the first ellipsis or
    +" default value operator, but we also need to paste the "whitespace & comments
    +" eating" regex all over the place (marked with 'v's):
    +"
    +" Region match 1: { foo ? ... } or { foo, ... } or { ... } (ellipsis)
    +"                                         vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv   {----- identifier -----}vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    +syn region nixFunctionArgument start="{\ze\%(\s\|#.\{-\}\n\|\n\|/\*\_.\{-\}\*/\)*\%([a-zA-Z_][a-zA-Z0-9_'-]*\%(\s\|#.\{-\}\n\|\n\|/\*\_.\{-\}\*/\)*[,?}]\|\.\.\.\)" end="}" contains=nixComment,nixArgumentDefinitionWithDefault,nixArgumentDefinition,nixArgumentEllipsis,nixArgumentSeparator nextgroup=nixArgOperator
    +
    +" Now it gets more tricky, because we need to look forward for the colon, but
    +" there could be something like "{}@foo:", even though it's highly unlikely.
    +"
    +" Region match 2: {}
    +"                                         vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv    vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv@vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv{----- identifier -----}  vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    +syn region nixFunctionArgument start="{\ze\%(\s\|#.\{-\}\n\|\n\|/\*\_.\{-\}\*/\)*}\%(\%(\s\|#.\{-\}\n\|\n\|/\*\_.\{-\}\*/\)*@\%(\s\|#.\{-\}\n\|\n\|/\*\_.\{-\}\*/\)*[a-zA-Z_][a-zA-Z0-9_'-]*\)\%(\s\|#.\{-\}\n\|\n\|/\*\_.\{-\}\*/\)*:" end="}" contains=nixComment nextgroup=nixArgOperator
    +
    +"                                                               vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    +syn match nixSimpleFunctionArgument "[a-zA-Z_][a-zA-Z0-9_'-]*\ze\%(\s\|#.\{-\}\n\|\n\|/\*\_.\{-\}\*/\)*:\([\n ]\)\@="
    +
    +syn region nixList matchgroup=nixListBracket start="\[" end="\]" contains=@nixExpr
    +
    +syn region nixLetExpr matchgroup=nixLetExprKeyword start="\" end="\" contains=nixComment,nixAttributeDefinition
    +
    +syn keyword nixIfExprKeyword then contained
    +syn region nixIfExpr matchgroup=nixIfExprKeyword start="\" end="\" contains=@nixExpr,nixIfExprKeyword
    +
    +syn region nixWithExpr matchgroup=nixWithExprKeyword start="\" matchgroup=NONE end=";" contains=@nixExpr
    +
    +syn region nixAssertExpr matchgroup=nixAssertKeyword start="\" matchgroup=NONE end=";" contains=@nixExpr
    +
    +syn cluster nixExpr contains=nixBoolean,nixNull,nixOperator,nixParen,nixInteger,nixRecKeyword,nixConditional,nixBuiltin,nixSimpleBuiltin,nixComment,nixFunctionCall,nixFunctionArgument,nixArgOperator,nixSimpleFunctionArgument,nixPath,nixHomePath,nixSearchPathRef,nixURI,nixAttributeSet,nixList,nixSimpleString,nixString,nixLetExpr,nixIfExpr,nixWithExpr,nixAssertExpr,nixInterpolation
    +
    +" These definitions override @nixExpr and have to come afterwards:
    +
    +syn match nixInterpolationParam "[a-zA-Z_][a-zA-Z0-9_'-]*\%(\.[a-zA-Z_][a-zA-Z0-9_'-]*\)*" contained
    +
    +" Non-namespaced Nix builtins as of version 2.0:
    +syn keyword nixSimpleBuiltin
    +      \ abort baseNameOf derivation derivationStrict dirOf fetchGit
    +      \ fetchMercurial fetchTarball import isNull map mapAttrs placeholder removeAttrs
    +      \ scopedImport throw toString
    +
    +
    +" Namespaced and non-namespaced Nix builtins as of version 2.0:
    +syn keyword nixNamespacedBuiltin contained
    +      \ abort add addErrorContext all any attrNames attrValues baseNameOf
    +      \ catAttrs compareVersions concatLists concatStringsSep currentSystem
    +      \ currentTime deepSeq derivation derivationStrict dirOf div elem elemAt
    +      \ fetchGit fetchMercurial fetchTarball fetchurl filter \ filterSource
    +      \ findFile foldl' fromJSON functionArgs genList \ genericClosure getAttr
    +      \ getEnv hasAttr hasContext hashString head import intersectAttrs isAttrs
    +      \ isBool isFloat isFunction isInt isList isNull isString langVersion
    +      \ length lessThan listToAttrs map mapAttrs match mul nixPath nixVersion
    +      \ parseDrvName partition path pathExists placeholder readDir readFile
    +      \ removeAttrs replaceStrings scopedImport seq sort split splitVersion
    +      \ storeDir storePath stringLength sub substring tail throw toFile toJSON
    +      \ toPath toString toXML trace tryEval typeOf unsafeDiscardOutputDependency
    +      \ unsafeDiscardStringContext unsafeGetAttrPos valueSize fromTOML bitAnd
    +      \ bitOr bitXor floor ceil
    +
    +syn match nixBuiltin "builtins\.[a-zA-Z']\+"he=s+9 contains=nixComment,nixNamespacedBuiltin
    +
    +hi def link nixArgOperator               Operator
    +hi def link nixArgumentDefinition        Identifier
    +hi def link nixArgumentEllipsis          Operator
    +hi def link nixAssertKeyword             Keyword
    +hi def link nixAttribute                 Identifier
    +hi def link nixAttributeDot              Operator
    +hi def link nixBoolean                   Boolean
    +hi def link nixBuiltin                   Special
    +hi def link nixComment                   Comment
    +hi def link nixConditional               Conditional
    +hi def link nixHomePath                  Include
    +hi def link nixIfExprKeyword             Keyword
    +hi def link nixInherit                   Keyword
    +hi def link nixInteger                   Integer
    +hi def link nixInterpolation             Macro
    +hi def link nixInterpolationDelimiter    Delimiter
    +hi def link nixInterpolationParam        Macro
    +hi def link nixInvalidSimpleStringEscape Error
    +hi def link nixInvalidStringEscape       Error
    +hi def link nixLetExprKeyword            Keyword
    +hi def link nixNamespacedBuiltin         Special
    +hi def link nixNull                      Constant
    +hi def link nixOperator                  Operator
    +hi def link nixPath                      Include
    +hi def link nixPathDelimiter             Delimiter
    +hi def link nixRecKeyword                Keyword
    +hi def link nixSearchPath                Include
    +hi def link nixSimpleBuiltin             Keyword
    +hi def link nixSimpleFunctionArgument    Identifier
    +hi def link nixSimpleString              String
    +hi def link nixSimpleStringSpecial       SpecialChar
    +hi def link nixString                    String
    +hi def link nixStringDelimiter           Delimiter
    +hi def link nixStringSpecial             Special
    +hi def link nixTodo                      Todo
    +hi def link nixURI                       Include
    +hi def link nixWithExprKeyword           Keyword
    +
    +" This could lead up to slow syntax highlighting for large files, but usually
    +" large files such as all-packages.nix are one large attribute set, so if we'd
    +" use sync patterns we'd have to go back to the start of the file anyway
    +syn sync fromstart
    +
    +let b:current_syntax = "nix"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/nosyntax.vim b/.config/vim/syntax/nosyntax.vim
    new file mode 100644
    index 0000000..a761d71
    --- /dev/null
    +++ b/.config/vim/syntax/nosyntax.vim
    @@ -0,0 +1,31 @@
    +" Vim syntax support file
    +" Maintainer:	The Vim Project 
    +" Last Change:	2023 Aug 10
    +" Former Maintainer:	Bram Moolenaar 
    +
    +" This file is used for ":syntax off".
    +" It removes the autocommands and stops highlighting for all buffers.
    +
    +if !has("syntax")
    +  finish
    +endif
    +
    +" Remove all autocommands for the Syntax event.  This also avoids that
    +" "syntax=foo" in a modeline triggers the SynSet() function of synload.vim.
    +au! Syntax
    +
    +" remove all syntax autocommands and remove the syntax for each buffer
    +augroup syntaxset
    +  au!
    +  au BufEnter * syn clear
    +  au BufEnter * if exists("b:current_syntax") | unlet b:current_syntax | endif
    +  doautoall syntaxset BufEnter *
    +  au!
    +augroup END
    +
    +if exists("syntax_on")
    +  unlet syntax_on
    +endif
    +if exists("syntax_manual")
    +  unlet syntax_manual
    +endif
    diff --git a/.config/vim/syntax/nqc.vim b/.config/vim/syntax/nqc.vim
    new file mode 100644
    index 0000000..d09c106
    --- /dev/null
    +++ b/.config/vim/syntax/nqc.vim
    @@ -0,0 +1,365 @@
    +" Vim syntax file
    +" Language:	NQC - Not Quite C, for LEGO mindstorms
    +"		NQC homepage: http://www.enteract.com/~dbaum/nqc/
    +" Maintainer:	Stefan Scherer 
    +" Last Change:	2001 May 10
    +" URL:		http://www.enotes.de/twiki/pub/Home/LegoMindstorms/nqc.vim
    +" Filenames:	.nqc
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Statements
    +syn keyword	nqcStatement	break return continue start stop abs sign
    +syn keyword     nqcStatement	sub task
    +syn keyword     nqcLabel	case default
    +syn keyword	nqcConditional	if else switch
    +syn keyword	nqcRepeat	while for do until repeat
    +
    +" Scout and RCX2
    +syn keyword	nqcEvents	acquire catch monitor
    +
    +" types and classes
    +syn keyword	nqcType		int true false void
    +syn keyword	nqcStorageClass	asm const inline
    +
    +
    +
    +" Sensors --------------------------------------------
    +" Input Sensors
    +syn keyword     nqcConstant	SENSOR_1 SENSOR_2 SENSOR_3
    +
    +" Types for SetSensorType()
    +syn keyword     nqcConstant	SENSOR_TYPE_TOUCH SENSOR_TYPE_TEMPERATURE
    +syn keyword     nqcConstant	SENSOR_TYPE_LIGHT SENSOR_TYPE_ROTATION
    +syn keyword     nqcConstant	SENSOR_LIGHT SENSOR_TOUCH
    +
    +" Modes for SetSensorMode()
    +syn keyword     nqcConstant	SENSOR_MODE_RAW SENSOR_MODE_BOOL
    +syn keyword     nqcConstant	SENSOR_MODE_EDGE SENSOR_MODE_PULSE
    +syn keyword     nqcConstant	SENSOR_MODE_PERCENT SENSOR_MODE_CELSIUS
    +syn keyword     nqcConstant	SENSOR_MODE_FAHRENHEIT SENSOR_MODE_ROTATION
    +
    +" Sensor configurations for SetSensor()
    +syn keyword     nqcConstant	SENSOR_TOUCH SENSOR_LIGHT SENSOR_ROTATION
    +syn keyword     nqcConstant	SENSOR_CELSIUS SENSOR_FAHRENHEIT SENSOR_PULSE
    +syn keyword     nqcConstant	SENSOR_EDGE
    +
    +" Functions - All
    +syn keyword	nqcFunction	ClearSensor
    +syn keyword	nqcFunction	SensorValue SensorType
    +
    +" Functions - RCX
    +syn keyword	nqcFunction	SetSensor SetSensorType
    +syn keyword	nqcFunction	SensorValueBool
    +
    +" Functions - RCX, CyberMaster
    +syn keyword	nqcFunction	SetSensorMode SensorMode
    +
    +" Functions - RCX, Scout
    +syn keyword	nqcFunction	SensorValueRaw
    +
    +" Functions - Scout
    +syn keyword	nqcFunction	SetSensorLowerLimit SetSensorUpperLimit
    +syn keyword	nqcFunction	SetSensorHysteresis CalibrateSensor
    +
    +
    +" Outputs --------------------------------------------
    +" Outputs for On(), Off(), etc.
    +syn keyword     nqcConstant	OUT_A OUT_B OUT_C
    +
    +" Modes for SetOutput()
    +syn keyword     nqcConstant	OUT_ON OUT_OFF OUT_FLOAT
    +
    +" Directions for SetDirection()
    +syn keyword     nqcConstant	OUT_FWD OUT_REV OUT_TOGGLE
    +
    +" Output power for SetPower()
    +syn keyword     nqcConstant	OUT_LOW OUT_HALF OUT_FULL
    +
    +" Functions - All
    +syn keyword	nqcFunction	SetOutput SetDirection SetPower OutputStatus
    +syn keyword	nqcFunction	On Off Float Fwd Rev Toggle
    +syn keyword	nqcFunction	OnFwd OnRev OnFor
    +
    +" Functions - RXC2, Scout
    +syn keyword	nqcFunction	SetGlobalOutput SetGlobalDirection SetMaxPower
    +syn keyword	nqcFunction	GlobalOutputStatus
    +
    +
    +" Sound ----------------------------------------------
    +" Sounds for PlaySound()
    +syn keyword     nqcConstant	SOUND_CLICK SOUND_DOUBLE_BEEP SOUND_DOWN
    +syn keyword     nqcConstant	SOUND_UP SOUND_LOW_BEEP SOUND_FAST_UP
    +
    +" Functions - All
    +syn keyword	nqcFunction	PlaySound PlayTone
    +
    +" Functions - RCX2, Scout
    +syn keyword	nqcFunction	MuteSound UnmuteSound ClearSound
    +syn keyword	nqcFunction	SelectSounds
    +
    +
    +" LCD ------------------------------------------------
    +" Modes for SelectDisplay()
    +syn keyword     nqcConstant	DISPLAY_WATCH DISPLAY_SENSOR_1 DISPLAY_SENSOR_2
    +syn keyword     nqcConstant	DISPLAY_SENSOR_3 DISPLAY_OUT_A DISPLAY_OUT_B
    +syn keyword     nqcConstant	DISPLAY_OUT_C
    +" RCX2
    +syn keyword     nqcConstant	DISPLAY_USER
    +
    +" Functions - RCX
    +syn keyword	nqcFunction	SelectDisplay
    +" Functions - RCX2
    +syn keyword	nqcFunction	SetUserDisplay
    +
    +
    +" Communication --------------------------------------
    +" Messages - RCX, Scout ------------------------------
    +" Tx power level for SetTxPower()
    +syn keyword     nqcConstant	TX_POWER_LO TX_POWER_HI
    +
    +" Functions - RCX, Scout
    +syn keyword	nqcFunction	Message ClearMessage SendMessage SetTxPower
    +
    +" Serial - RCX2 --------------------------------------
    +" for SetSerialComm()
    +syn keyword     nqcConstant	SERIAL_COMM_DEFAULT SERIAL_COMM_4800
    +syn keyword     nqcConstant	SERIAL_COMM_DUTY25 SERIAL_COMM_76KHZ
    +
    +" for SetSerialPacket()
    +syn keyword     nqcConstant	SERIAL_PACKET_DEFAULT SERIAL_PACKET_PREAMBLE
    +syn keyword     nqcConstant	SERIAL_PACKET_NEGATED SERIAL_PACKET_CHECKSUM
    +syn keyword     nqcConstant	SERIAL_PACKET_RCX
    +
    +" Functions - RCX2
    +syn keyword	nqcFunction	SetSerialComm SetSerialPacket SetSerialData
    +syn keyword	nqcFunction	SerialData SendSerial
    +
    +" VLL - Scout ----------------------------------------
    +" Functions - Scout
    +syn keyword	nqcFunction	SendVLL
    +
    +
    +" Timers ---------------------------------------------
    +" Functions - All
    +syn keyword	nqcFunction	ClearTimer Timer
    +
    +" Functions - RCX2
    +syn keyword	nqcFunction	SetTimer FastTimer
    +
    +
    +" Counters -------------------------------------------
    +" Functions - RCX2, Scout
    +syn keyword	nqcFunction	ClearCounter IncCounter DecCounter Counter
    +
    +
    +" Access Control -------------------------------------
    +syn keyword     nqcConstant	ACQUIRE_OUT_A ACQUIRE_OUT_B ACQUIRE_OUT_C
    +syn keyword     nqcConstant	ACQUIRE_SOUND
    +" RCX2 only
    +syn keyword     nqcConstant	ACQUIRE_USER_1 ACQUIRE_USER_2 ACQUIRE_USER_3
    +syn keyword     nqcConstant	ACQUIRE_USER_4
    +
    +" Functions - RCX2, Scout
    +syn keyword	nqcFunction	SetPriority
    +
    +
    +" Events ---------------------------------------------
    +" RCX2 Events
    +syn keyword     nqcConstant	EVENT_TYPE_PRESSED EVENT_TYPE_RELEASED
    +syn keyword     nqcConstant	EVENT_TYPE_PULSE EVENT_TYPE_EDGE
    +syn keyword     nqcConstant	EVENT_TYPE_FAST_CHANGE EVENT_TYPE_LOW
    +syn keyword     nqcConstant	EVENT_TYPE_NORMAL EVENT_TYPE_HIGH
    +syn keyword     nqcConstant	EVENT_TYPE_CLICK EVENT_TYPE_DOUBLECLICK
    +syn keyword     nqcConstant	EVENT_TYPE_MESSAGE
    +
    +" Scout Events
    +syn keyword     nqcConstant	EVENT_1_PRESSED EVENT_1_RELEASED
    +syn keyword     nqcConstant	EVENT_2_PRESSED EVENT_2_RELEASED
    +syn keyword     nqcConstant	EVENT_LIGHT_HIGH EVENT_LIGHT_NORMAL
    +syn keyword     nqcConstant	EVENT_LIGHT_LOW EVENT_LIGHT_CLICK
    +syn keyword     nqcConstant	EVENT_LIGHT_DOUBLECLICK EVENT_COUNTER_0
    +syn keyword     nqcConstant	EVENT_COUNTER_1 EVENT_TIMER_0 EVENT_TIMER_1
    +syn keyword     nqcConstant	EVENT_TIMER_2 EVENT_MESSAGE
    +
    +" Functions - RCX2, Scout
    +syn keyword	nqcFunction	ActiveEvents Event
    +
    +" Functions - RCX2
    +syn keyword	nqcFunction	CurrentEvents
    +syn keyword	nqcFunction	SetEvent ClearEvent ClearAllEvents EventState
    +syn keyword	nqcFunction	CalibrateEvent SetUpperLimit UpperLimit
    +syn keyword	nqcFunction	SetLowerLimit LowerLimit SetHysteresis
    +syn keyword	nqcFunction	Hysteresis
    +syn keyword	nqcFunction	SetClickTime ClickTime SetClickCounter
    +syn keyword	nqcFunction	ClickCounter
    +
    +" Functions - Scout
    +syn keyword	nqcFunction	SetSensorClickTime SetCounterLimit
    +syn keyword	nqcFunction	SetTimerLimit
    +
    +
    +" Data Logging ---------------------------------------
    +" Functions - RCX
    +syn keyword	nqcFunction	CreateDatalog AddToDatalog
    +syn keyword	nqcFunction	UploadDatalog
    +
    +
    +" General Features -----------------------------------
    +" Functions - All
    +syn keyword	nqcFunction	Wait StopAllTasks Random
    +syn keyword	nqcFunction	SetSleepTime SleepNow
    +
    +" Functions - RCX
    +syn keyword	nqcFunction	Program Watch SetWatch
    +
    +" Functions - RCX2
    +syn keyword	nqcFunction	SetRandomSeed SelectProgram
    +syn keyword	nqcFunction	BatteryLevel FirmwareVersion
    +
    +" Functions - Scout
    +" Parameters for SetLight()
    +syn keyword     nqcConstant	LIGHT_ON LIGHT_OFF
    +syn keyword	nqcFunction	SetScoutRules ScoutRules SetScoutMode
    +syn keyword	nqcFunction	SetEventFeedback EventFeedback SetLight
    +
    +" additional CyberMaster defines
    +syn keyword     nqcConstant	OUT_L OUT_R OUT_X
    +syn keyword     nqcConstant	SENSOR_L SENSOR_M SENSOR_R
    +" Functions - CyberMaster
    +syn keyword	nqcFunction	Drive OnWait OnWaitDifferent
    +syn keyword	nqcFunction	ClearTachoCounter TachoCount TachoSpeed
    +syn keyword	nqcFunction	ExternalMotorRunning AGC
    +
    +
    +
    +" nqcCommentGroup allows adding matches for special things in comments
    +syn keyword	nqcTodo		contained TODO FIXME XXX
    +syn cluster	nqcCommentGroup	contains=nqcTodo
    +
    +"when wanted, highlight trailing white space
    +if exists("nqc_space_errors")
    +  if !exists("nqc_no_trail_space_error")
    +    syn match	nqcSpaceError	display excludenl "\s\+$"
    +  endif
    +  if !exists("nqc_no_tab_space_error")
    +    syn match	nqcSpaceError	display " \+\t"me=e-1
    +  endif
    +endif
    +
    +"catch errors caused by wrong parenthesis and brackets
    +syn cluster	nqcParenGroup	contains=nqcParenError,nqcIncluded,nqcCommentSkip,@nqcCommentGroup,nqcCommentStartError,nqcCommentSkip,nqcCppOut,nqcCppOut2,nqcCppSkip,nqcNumber,nqcFloat,nqcNumbers
    +if exists("nqc_no_bracket_error")
    +  syn region	nqcParen	transparent start='(' end=')' contains=ALLBUT,@nqcParenGroup,nqcCppParen
    +  " nqcCppParen: same as nqcParen but ends at end-of-line; used in nqcDefine
    +  syn region	nqcCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@nqcParenGroup,nqcParen
    +  syn match	nqcParenError	display ")"
    +  syn match	nqcErrInParen	display contained "[{}]"
    +else
    +  syn region	nqcParen		transparent start='(' end=')' contains=ALLBUT,@nqcParenGroup,nqcCppParen,nqcErrInBracket,nqcCppBracket
    +  " nqcCppParen: same as nqcParen but ends at end-of-line; used in nqcDefine
    +  syn region	nqcCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@nqcParenGroup,nqcErrInBracket,nqcParen,nqcBracket
    +  syn match	nqcParenError	display "[\])]"
    +  syn match	nqcErrInParen	display contained "[\]{}]"
    +  syn region	nqcBracket	transparent start='\[' end=']' contains=ALLBUT,@nqcParenGroup,nqcErrInParen,nqcCppParen,nqcCppBracket
    +  " nqcCppBracket: same as nqcParen but ends at end-of-line; used in nqcDefine
    +  syn region	nqcCppBracket	transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@nqcParenGroup,nqcErrInParen,nqcParen,nqcBracket
    +  syn match	nqcErrInBracket	display contained "[);{}]"
    +endif
    +
    +"integer number, or floating point number without a dot and with "f".
    +syn case ignore
    +syn match	nqcNumbers	display transparent "\<\d\|\.\d" contains=nqcNumber,nqcFloat
    +" Same, but without octal error (for comments)
    +syn match	nqcNumber	display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
    +"hex number
    +syn match	nqcNumber	display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
    +" Flag the first zero of an octal number as something special
    +syn match	nqcFloat	display contained "\d\+f"
    +"floating point number, with dot, optional exponent
    +syn match	nqcFloat	display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
    +"floating point number, starting with a dot, optional exponent
    +syn match	nqcFloat	display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
    +"floating point number, without dot, with exponent
    +syn match	nqcFloat	display contained "\d\+e[-+]\=\d\+[fl]\=\>"
    +" flag an octal number with wrong digits
    +syn case match
    +
    +syn region	nqcCommentL	start="//" skip="\\$" end="$" keepend contains=@nqcCommentGroup,nqcSpaceError
    +syn region	nqcComment	matchgroup=nqcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@nqcCommentGroup,nqcCommentStartError,nqcSpaceError
    +
    +" keep a // comment separately, it terminates a preproc. conditional
    +syntax match	nqcCommentError	display "\*/"
    +syntax match	nqcCommentStartError display "/\*" contained
    +
    +
    +
    +
    +
    +syn region	nqcPreCondit	start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=nqcComment,nqcCharacter,nqcCppParen,nqcParenError,nqcNumbers,nqcCommentError,nqcSpaceError
    +syn match	nqcPreCondit	display "^\s*#\s*\(else\|endif\)\>"
    +if !exists("nqc_no_if0")
    +  syn region	nqcCppOut		start="^\s*#\s*if\s\+0\>" end=".\|$" contains=nqcCppOut2
    +  syn region	nqcCppOut2	contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=nqcSpaceError,nqcCppSkip
    +  syn region	nqcCppSkip	contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=nqcSpaceError,nqcCppSkip
    +endif
    +syn region	nqcIncluded	display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
    +syn match	nqcInclude	display "^\s*#\s*include\>\s*["]" contains=nqcIncluded
    +"syn match nqcLineSkip	"\\$"
    +syn cluster	nqcPreProcGroup	contains=nqcPreCondit,nqcIncluded,nqcInclude,nqcDefine,nqcErrInParen,nqcErrInBracket,nqcCppOut,nqcCppOut2,nqcCppSkip,nqcNumber,nqcFloat,nqcNumbers,nqcCommentSkip,@nqcCommentGroup,nqcCommentStartError,nqcParen,nqcBracket
    +syn region	nqcDefine	start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" contains=ALLBUT,@nqcPreProcGroup
    +syn region	nqcPreProc	start="^\s*#\s*\(pragma\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@nqcPreProcGroup
    +
    +if !exists("nqc_minlines")
    +  if !exists("nqc_no_if0")
    +    let nqc_minlines = 50	    " #if 0 constructs can be long
    +  else
    +    let nqc_minlines = 15	    " mostly for () constructs
    +  endif
    +endif
    +exec "syn sync ccomment nqcComment minlines=" . nqc_minlines
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +" The default methods for highlighting.  Can be overridden later
    +hi def link nqcLabel		Label
    +hi def link nqcConditional		Conditional
    +hi def link nqcRepeat		Repeat
    +hi def link nqcCharacter		Character
    +hi def link nqcNumber		Number
    +hi def link nqcFloat		Float
    +hi def link nqcFunction		Function
    +hi def link nqcParenError		nqcError
    +hi def link nqcErrInParen		nqcError
    +hi def link nqcErrInBracket	nqcError
    +hi def link nqcCommentL		nqcComment
    +hi def link nqcCommentStart	nqcComment
    +hi def link nqcCommentError	nqcError
    +hi def link nqcCommentStartError	nqcError
    +hi def link nqcSpaceError		nqcError
    +hi def link nqcStorageClass	StorageClass
    +hi def link nqcInclude		Include
    +hi def link nqcPreProc		PreProc
    +hi def link nqcDefine		Macro
    +hi def link nqcIncluded		String
    +hi def link nqcError		Error
    +hi def link nqcStatement		Statement
    +hi def link nqcEvents		Statement
    +hi def link nqcPreCondit		PreCondit
    +hi def link nqcType		Type
    +hi def link nqcConstant		Constant
    +hi def link nqcCommentSkip		nqcComment
    +hi def link nqcComment		Comment
    +hi def link nqcTodo		Todo
    +hi def link nqcCppSkip		nqcCppOut
    +hi def link nqcCppOut2		nqcCppOut
    +hi def link nqcCppOut		Comment
    +
    +
    +let b:current_syntax = "nqc"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/nroff.vim b/.config/vim/syntax/nroff.vim
    new file mode 100644
    index 0000000..fec966f
    --- /dev/null
    +++ b/.config/vim/syntax/nroff.vim
    @@ -0,0 +1,237 @@
    +" VIM syntax file
    +" Language:	nroff/groff
    +" Maintainer:	John Marshall 
    +" Previous Maintainer:	Pedro Alejandro López-Valencia 
    +" Previous Maintainer:	Jérôme Plût 
    +" Last Change:	2021 Mar 28
    +"	2025 Apr 24 by Eisuke Kawashima (move options from syntax to ftplugin #17174)
    +"
    +" {{{1 Todo
    +"
    +" TODO:
    +"
    +" * Write syntax highlighting files for the preprocessors,
    +"	and integrate with nroff.vim.
    +"
    +"
    +" {{{1 Start syntax highlighting.
    +"
    +" quit when a syntax file was already loaded
    +"
    +if exists("b:current_syntax")
    +	finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +if exists("nroff_is_groff")
    +	let b:nroff_is_groff = 1
    +endif
    +
    +syn spell toplevel
    +syn case match
    +
    +"
    +" {{{1 plugin settings...
    +"
    +" {{{2 enable spacing error highlighting
    +"
    +if exists("nroff_space_errors")
    +	syn match nroffError /\s\+$/
    +	syn match nroffSpaceError /[.,:;!?]\s\{2,}/
    +endif
    +
    +" {{{1 Escape sequences
    +" ------------------------------------------------------------
    +
    +syn match nroffEscChar /\\[CN]/ nextgroup=nroffEscCharArg
    +syn match nroffEscape /\\[*fgmnYV]/ nextgroup=nroffEscRegPar,nroffEscRegArg
    +syn match nroffEscape /\\s[+-]\=/ nextgroup=nroffSize
    +syn match nroffEscape /\\[$AbDhlLRvxXZ]/ nextgroup=nroffEscPar,nroffEscArg
    +
    +syn match nroffEscRegArg /./ contained
    +syn match nroffEscRegArg2 /../ contained
    +syn match nroffEscRegPar /(/ contained nextgroup=nroffEscRegArg2
    +syn match nroffEscArg /./ contained
    +syn match nroffEscArg2 /../ contained
    +syn match nroffEscPar /(/ contained nextgroup=nroffEscArg2
    +syn match nroffSize /\((\d\)\=\d/ contained
    +
    +syn region nroffEscCharArg start=/'/ end=/'/ contained
    +syn region nroffEscArg start=/'/ end=/'/ contained contains=nroffEscape,@nroffSpecial
    +
    +if exists("b:nroff_is_groff")
    +	syn region nroffEscRegArg matchgroup=nroffEscape start=/\[/ end=/\]/ contained oneline
    +	syn region nroffSize matchgroup=nroffEscape start=/\[/ end=/\]/ contained
    +endif
    +
    +syn match nroffEscape /\\[adprtu{}]/
    +syn match nroffEscape /\\$/
    +syn match nroffEscape /\\\$[@*]/
    +
    +" {{{1 Strings and special characters
    +" ------------------------------------------------------------
    +
    +syn match nroffSpecialChar /\\[\\eE?!-]/
    +syn match nroffSpace "\\[&%~|^0)/,]"
    +syn match nroffSpecialChar /\\(../
    +
    +if exists("b:nroff_is_groff")
    +	syn match nroffSpecialChar /\\\[[^]]*]/
    +	syn region nroffPreserve  matchgroup=nroffSpecialChar start=/\\?/ end=/\\?/ oneline
    +endif
    +
    +syn region nroffPreserve matchgroup=nroffSpecialChar start=/\\!/ end=/$/ oneline
    +
    +syn cluster nroffSpecial contains=nroffSpecialChar,nroffSpace
    +
    +
    +syn region nroffString start=/"/ end=/"/ skip=/\\$/ contains=nroffEscape,@nroffSpecial contained
    +syn region nroffString start=/'/ end=/'/ skip=/\\$/ contains=nroffEscape,@nroffSpecial contained
    +
    +
    +" {{{1 Numbers and units
    +" ------------------------------------------------------------
    +syn match nroffNumBlock /[0-9.]\a\=/ contained contains=nroffNumber
    +syn match nroffNumber /\d\+\(\.\d*\)\=/ contained nextgroup=nroffUnit,nroffBadChar
    +syn match nroffNumber /\.\d\+)/ contained nextgroup=nroffUnit,nroffBadChar
    +syn match nroffBadChar /./ contained
    +syn match nroffUnit /[icpPszmnvMu]/ contained
    +
    +
    +" {{{1 Requests
    +" ------------------------------------------------------------
    +
    +" Requests begin with . or ' at the beginning of a line, or
    +" after .if or .ie.
    +
    +syn match nroffReqLeader /^[.']/	nextgroup=nroffReqName skipwhite
    +syn match nroffReqLeader /[.']/	contained nextgroup=nroffReqName skipwhite
    +
    +if exists("b:nroff_is_groff")
    +"
    +" GNU troff allows long request names
    +"
    +	syn match nroffReqName /[^\t \\\[?]\+/ contained nextgroup=nroffReqArg
    +else
    +	syn match nroffReqName /[^\t \\\[?]\{1,2}/ contained nextgroup=nroffReqArg
    +endif
    +
    +syn region nroffReqArg start=/\S/ skip=/\\$/ end=/$/ contained contains=nroffEscape,@nroffSpecial,nroffString,nroffError,nroffSpaceError,nroffNumBlock,nroffComment
    +
    +" {{{2 Conditional: .if .ie .el
    +syn match nroffReqName /\(if\|ie\)/ contained nextgroup=nroffCond skipwhite
    +syn match nroffReqName /el/ contained nextgroup=nroffReqLeader skipwhite
    +syn match nroffCond /\S\+/ contained nextgroup=nroffReqLeader skipwhite
    +
    +" {{{2 String definition: .ds .as
    +syn match nroffReqname /[da]s/ contained nextgroup=nroffDefIdent skipwhite
    +syn match nroffDefIdent /\S\+/ contained nextgroup=nroffDefinition skipwhite
    +syn region nroffDefinition matchgroup=nroffSpecialChar start=/"/ matchgroup=NONE end=/\\"/me=e-2 skip=/\\$/ start=/\S/ end=/$/ contained contains=nroffDefSpecial
    +syn match nroffDefSpecial /\\$/ contained
    +syn match nroffDefSpecial /\\\((.\)\=./ contained
    +
    +if exists("b:nroff_is_groff")
    +	syn match nroffDefSpecial /\\\[[^]]*]/ contained
    +endif
    +
    +" {{{2 Macro definition: .de .am, also diversion: .di
    +syn match nroffReqName /\(d[ei]\|am\)/ contained nextgroup=nroffIdent skipwhite
    +syn match nroffIdent /[^[?( \t]\+/ contained
    +if exists("b:nroff_is_groff")
    +	syn match nroffReqName /als/ contained nextgroup=nroffIdent skipwhite
    +endif
    +
    +" {{{2 Register definition: .rn .rr
    +syn match nroffReqName /[rn]r/ contained nextgroup=nroffIdent skipwhite
    +if exists("b:nroff_is_groff")
    +	syn match nroffReqName /\(rnn\|aln\)/ contained nextgroup=nroffIdent skipwhite
    +endif
    +
    +
    +" {{{1 eqn/tbl/pic
    +" ------------------------------------------------------------
    +" 
    +" XXX: write proper syntax highlight for eqn / tbl / pic ?
    +" 
    +
    +syn region nroffEquation start=/^\.\s*EQ\>/ end=/^\.\s*EN\>/
    +syn region nroffTable start=/^\.\s*TS\>/ end=/^\.\s*TE\>/ contains=@Spell
    +syn region nroffPicture start=/^\.\s*PS\>/ end=/^\.\s*PE\>/
    +syn region nroffRefer start=/^\.\s*\[\>/ end=/^\.\s*\]\>/ contains=@Spell
    +syn region nroffGrap start=/^\.\s*G1\>/ end=/^\.\s*G2\>/
    +syn region nroffGremlin start=/^\.\s*GS\>/ end=/^\.\s*GE|GF\>/
    +
    +" {{{1 Comments
    +" ------------------------------------------------------------
    +
    +syn region nroffIgnore start=/^[.']\s*ig/ end=/^['.]\s*\./
    +syn match nroffComment /\(^[.']\s*\)\=\\".*/ contains=nroffTodo,@Spell
    +syn match nroffComment /^'''.*/  contains=nroffTodo,@Spell
    +
    +if exists("b:nroff_is_groff")
    +	syn match nroffComment "\\#.*$" contains=nroffTodo,@Spell
    +endif
    +
    +syn keyword nroffTodo TODO XXX FIXME contained
    +
    +" {{{1 Hilighting
    +" ------------------------------------------------------------
    +"
    +
    +"
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +"
    +
    +hi def link nroffEscChar nroffSpecialChar
    +hi def link nroffEscCharArg nroffSpecialChar
    +hi def link nroffSpecialChar SpecialChar
    +hi def link nroffSpace Delimiter
    +
    +hi def link nroffEscRegArg2 nroffEscRegArg
    +hi def link nroffEscRegArg nroffIdent
    +
    +hi def link nroffEscArg2 nroffEscArg
    +hi def link nroffEscPar nroffEscape
    +
    +hi def link nroffEscRegPar nroffEscape
    +hi def link nroffEscArg nroffEscape
    +hi def link nroffSize nroffEscape
    +hi def link nroffEscape PreProc
    +
    +hi def link nroffIgnore Comment
    +hi def link nroffComment Comment
    +hi def link nroffTodo Todo
    +
    +hi def link nroffReqLeader nroffRequest
    +hi def link nroffReqName nroffRequest
    +hi def link nroffRequest Statement
    +hi def link nroffCond PreCondit
    +hi def link nroffDefIdent nroffIdent
    +hi def link nroffIdent Identifier
    +
    +hi def link nroffEquation PreProc
    +hi def link nroffTable PreProc
    +hi def link nroffPicture PreProc
    +hi def link nroffRefer PreProc
    +hi def link nroffGrap PreProc
    +hi def link nroffGremlin PreProc
    +
    +hi def link nroffNumber Number
    +hi def link nroffBadChar nroffError
    +hi def link nroffSpaceError nroffError
    +hi def link nroffError Error
    +
    +hi def link nroffPreserve String
    +hi def link nroffString String
    +hi def link nroffDefinition String
    +hi def link nroffDefSpecial Special
    +
    +
    +let b:current_syntax = "nroff"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +" vim600: set fdm=marker fdl=2:
    diff --git a/.config/vim/syntax/nsis.vim b/.config/vim/syntax/nsis.vim
    new file mode 100644
    index 0000000..49fa17a
    --- /dev/null
    +++ b/.config/vim/syntax/nsis.vim
    @@ -0,0 +1,730 @@
    +" Vim syntax file
    +" Language:		NSIS script, for version of NSIS 3.08 and later
    +" Maintainer:		Ken Takata
    +" URL:			https://github.com/k-takata/vim-nsis
    +" Previous Maintainer:	Alex Jakushev 
    +" Last Change:		2022-11-05
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn case ignore
    +
    +
    +"Pseudo definitions
    +syn match nsisLine nextgroup=@nsisPseudoStatement skipwhite "^"
    +syn cluster nsisPseudoStatement	contains=nsisFirstComment,nsisLocalLabel,nsisGlobalLabel
    +syn cluster nsisPseudoStatement add=nsisDefine,nsisPreCondit,nsisMacro,nsisInclude,nsisSystem
    +syn cluster nsisPseudoStatement add=nsisAttribute,nsisCompiler,nsisVersionInfo,nsisInstruction,nsisStatement
    +
    +"COMMENTS (4.1)
    +syn keyword nsisTodo	todo attention note fixme readme
    +syn region nsisComment	start="[;#]" end="$" contains=nsisTodo,nsisLineContinuation,@Spell oneline
    +syn region nsisComment	start=".\@1<=/\*" end="\*/" contains=nsisTodo,@Spell
    +syn region nsisFirstComment  start="/\*" end="\*/" contained contains=nsisTodo,@Spell skipwhite
    +			\ nextgroup=@nsisPseudoStatement
    +
    +syn match nsisLineContinuation	"\\$"
    +
    +"STRINGS (4.1)
    +syn region nsisString	start=/"/ end=/"/ contains=@nsisStringItems,@Spell
    +syn region nsisString	start=/'/ end=/'/ contains=@nsisStringItems,@Spell
    +syn region nsisString	start=/`/ end=/`/ contains=@nsisStringItems,@Spell
    +
    +syn cluster nsisStringItems	contains=nsisPreprocSubst,nsisPreprocLangStr,nsisPreprocEnvVar,nsisUserVar,nsisSysVar,nsisRegistry,nsisLineContinuation
    +
    +"NUMBERS (4.1)
    +syn match nsisNumber		"\<[1-9]\d*\>"
    +syn match nsisNumber		"\<0x\x\+\>"
    +syn match nsisNumber		"\<0\o*\>"
    +
    +"STRING REPLACEMENT (5.4, 4.9.15.2, 5.3.1)
    +syn region nsisPreprocSubst	start="\${" end="}" contains=nsisPreprocSubst,nsisPreprocLangStr,nsisPreprocEnvVar
    +syn region nsisPreprocLangStr	start="\$(" end=")" contains=nsisPreprocSubst,nsisPreprocLangStr,nsisPreprocEnvVar
    +syn region nsisPreprocEnvVar	start="\$%" end="%" contains=nsisPreprocSubst,nsisPreprocLangStr,nsisPreprocEnvVar
    +
    +"VARIABLES (4.2.2)
    +syn match nsisUserVar		"$\d"
    +syn match nsisUserVar		"$R\d"
    +syn match nsisSysVar		"$INSTDIR"
    +syn match nsisSysVar		"$OUTDIR"
    +syn match nsisSysVar		"$CMDLINE"
    +syn match nsisSysVar		"$LANGUAGE"
    +"CONSTANTS (4.2.3)
    +syn match nsisSysVar		"$PROGRAMFILES"
    +syn match nsisSysVar		"$PROGRAMFILES32"
    +syn match nsisSysVar		"$PROGRAMFILES64"
    +syn match nsisSysVar		"$COMMONFILES"
    +syn match nsisSysVar		"$COMMONFILES32"
    +syn match nsisSysVar		"$COMMONFILES64"
    +syn match nsisSysVar		"$DESKTOP"
    +syn match nsisSysVar		"$EXEDIR"
    +syn match nsisSysVar		"$EXEFILE"
    +syn match nsisSysVar		"$EXEPATH"
    +syn match nsisSysVar		"${NSISDIR}"
    +syn match nsisSysVar		"$WINDIR"
    +syn match nsisSysVar		"$SYSDIR"
    +syn match nsisSysVar		"$TEMP"
    +syn match nsisSysVar		"$STARTMENU"
    +syn match nsisSysVar		"$SMPROGRAMS"
    +syn match nsisSysVar		"$SMSTARTUP"
    +syn match nsisSysVar		"$QUICKLAUNCH"
    +syn match nsisSysVar		"$DOCUMENTS"
    +syn match nsisSysVar		"$SENDTO"
    +syn match nsisSysVar		"$RECENT"
    +syn match nsisSysVar		"$FAVORITES"
    +syn match nsisSysVar		"$MUSIC"
    +syn match nsisSysVar		"$PICTURES"
    +syn match nsisSysVar		"$VIDEOS"
    +syn match nsisSysVar		"$NETHOOD"
    +syn match nsisSysVar		"$FONTS"
    +syn match nsisSysVar		"$TEMPLATES"
    +syn match nsisSysVar		"$APPDATA"
    +syn match nsisSysVar		"$LOCALAPPDATA"
    +syn match nsisSysVar		"$PRINTHOOD"
    +syn match nsisSysVar		"$INTERNET_CACHE"
    +syn match nsisSysVar		"$COOKIES"
    +syn match nsisSysVar		"$HISTORY"
    +syn match nsisSysVar		"$PROFILE"
    +syn match nsisSysVar		"$ADMINTOOLS"
    +syn match nsisSysVar		"$RESOURCES"
    +syn match nsisSysVar		"$RESOURCES_LOCALIZED"
    +syn match nsisSysVar		"$CDBURN_AREA"
    +syn match nsisSysVar		"$HWNDPARENT"
    +syn match nsisSysVar		"$PLUGINSDIR"
    +syn match nsisSysVar		"$\%(USERTEMPLATES\|USERSTARTMENU\|USERSMPROGRAMS\|USERDESKTOP\)"
    +syn match nsisSysVar		"$\%(COMMONTEMPLATES\|COMMONSTARTMENU\|COMMONSMPROGRAMS\|COMMONDESKTOP\|COMMONPROGRAMDATA\)"
    +syn match nsisSysVar		"$\\r"
    +syn match nsisSysVar		"$\\n"
    +syn match nsisSysVar		"$\\t"
    +syn match nsisSysVar		"$\$"
    +syn match nsisSysVar		"$\\["'`]"
    +
    +"LABELS (4.3)
    +syn match nsisLocalLabel	contained "[^-+!$0-9;"'#. \t/*][^ \t:;#]*:\ze\%($\|[ \t;#]\|\/\*\)"
    +syn match nsisGlobalLabel	contained "\.[^-+!$0-9;"'# \t/*][^ \t:;#]*:\ze\%($\|[ \t;#]\|\/\*\)"
    +
    +"CONSTANTS
    +syn keyword nsisBoolean		contained true false
    +syn keyword nsisOnOff		contained on off
    +
    +syn keyword nsisRegistry	contained HKCR HKLM HKCU HKU HKCC HKDD HKPD SHCTX
    +syn keyword nsisRegistry	contained HKCR32 HKCR64 HKCU32 HKCU64 HKLM32 HKLM64
    +syn keyword nsisRegistry	contained HKEY_CLASSES_ROOT HKEY_LOCAL_MACHINE HKEY_CURRENT_USER HKEY_USERS
    +syn keyword nsisRegistry	contained HKEY_CLASSES_ROOT32 HKEY_CLASSES_ROOT64
    +syn keyword nsisRegistry	contained HKEY_CURRENT_USER32 HKEY_CURRENT_USER64
    +syn keyword nsisRegistry	contained HKEY_LOCAL_MACHINE32 HKEY_LOCAL_MACHINE64
    +syn keyword nsisRegistry	contained HKEY_CURRENT_CONFIG HKEY_DYN_DATA HKEY_PERFORMANCE_DATA
    +syn keyword nsisRegistry	contained SHELL_CONTEXT
    +
    +
    +" common options
    +syn cluster nsisAnyOpt		contains=nsisComment,nsisLineContinuation,nsisPreprocSubst,nsisPreprocLangStr,nsisPreprocEnvVar,nsisUserVar,nsisSysVar,nsisString,nsisNumber
    +syn region nsisBooleanOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisBoolean
    +syn region nsisOnOffOpt		contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisOnOff
    +syn region nsisLangOpt		contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisLangKwd
    +syn match nsisLangKwd		contained "/LANG\>"
    +syn region nsisFontOpt		contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisFontKwd
    +syn match nsisFontKwd		contained "/\%(ITALIC\|UNDERLINE\|STRIKE\)\>"
    +
    +"STATEMENTS - pages (4.5)
    +syn keyword nsisStatement	contained Page UninstPage nextgroup=nsisPageOpt skipwhite
    +syn region nsisPageOpt		contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisPageKwd
    +syn keyword nsisPageKwd		contained custom license components directory instfiles uninstConfirm
    +syn match nsisPageKwd		contained "/ENABLECANCEL\>"
    +
    +syn keyword nsisStatement	contained PageEx nextgroup=nsisPageExOpt skipwhite
    +syn region nsisPageExOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisPageExKwd
    +syn match nsisPageExKwd		contained "\<\%(un\.\)\?\%(custom\|license\|components\|directory\|instfiles\|uninstConfirm\)\>"
    +
    +syn keyword nsisStatement	contained PageExEnd PageCallbacks
    +
    +"STATEMENTS - sections (4.6.1)
    +syn keyword nsisStatement	contained AddSize SectionEnd SectionGroupEnd
    +
    +syn keyword nsisStatement	contained Section nextgroup=nsisSectionOpt skipwhite
    +syn region nsisSectionOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSectionKwd
    +syn match nsisSectionKwd	contained "/o\>"
    +
    +syn keyword nsisStatement	contained SectionInstType SectionIn nextgroup=nsisSectionInOpt skipwhite
    +syn region nsisSectionInOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSectionInKwd
    +syn keyword nsisSectionInKwd	contained RO
    +
    +syn keyword nsisStatement	contained SectionGroup nextgroup=nsisSectionGroupOpt skipwhite
    +syn region nsisSectionGroupOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSectionGroupKwd
    +syn match nsisSectionGroupKwd	contained "/e\>"
    +
    +"STATEMENTS - functions (4.7.1)
    +syn keyword nsisStatement	contained Function FunctionEnd
    +
    +
    +"STATEMENTS - LogicLib.nsh
    +syn match nsisStatement		"${If}"
    +syn match nsisStatement		"${IfNot}"
    +syn match nsisStatement		"${Unless}"
    +syn match nsisStatement		"${ElseIf}"
    +syn match nsisStatement		"${ElseIfNot}"
    +syn match nsisStatement		"${ElseUnless}"
    +syn match nsisStatement		"${Else}"
    +syn match nsisStatement		"${EndIf}"
    +syn match nsisStatement		"${EndUnless}"
    +syn match nsisStatement		"${AndIf}"
    +syn match nsisStatement		"${AndIfNot}"
    +syn match nsisStatement		"${AndUnless}"
    +syn match nsisStatement		"${OrIf}"
    +syn match nsisStatement		"${OrIfNot}"
    +syn match nsisStatement		"${OrUnless}"
    +syn match nsisStatement		"${IfThen}"
    +syn match nsisStatement		"${IfNotThen}"
    +syn match nsisStatement		"${||\?}" nextgroup=@nsisPseudoStatement skipwhite
    +syn match nsisStatement		"${IfCmd}" nextgroup=@nsisPseudoStatement skipwhite
    +syn match nsisStatement		"${Select}"
    +syn match nsisStatement		"${Case}"
    +syn match nsisStatement		"${Case[2-5]}"
    +syn match nsisStatement		"${CaseElse}"
    +syn match nsisStatement		"${Default}"
    +syn match nsisStatement		"${EndSelect}"
    +syn match nsisStatement		"${Switch}"
    +syn match nsisStatement		"${EndSwitch}"
    +syn match nsisStatement		"${Break}"
    +syn match nsisStatement		"${Do}"
    +syn match nsisStatement		"${DoWhile}"
    +syn match nsisStatement		"${DoUntil}"
    +syn match nsisStatement		"${ExitDo}"
    +syn match nsisStatement		"${Continue}"
    +syn match nsisStatement		"${Loop}"
    +syn match nsisStatement		"${LoopWhile}"
    +syn match nsisStatement		"${LoopUntil}"
    +syn match nsisStatement		"${For}"
    +syn match nsisStatement		"${ForEach}"
    +syn match nsisStatement		"${ExitFor}"
    +syn match nsisStatement		"${Next}"
    +"STATEMENTS - Memento.nsh
    +syn match nsisStatement		"${MementoSection}"
    +syn match nsisStatement		"${MementoSectionEnd}"
    +
    +
    +"USER VARIABLES (4.2.1)
    +syn keyword nsisInstruction	contained Var nextgroup=nsisVarOpt skipwhite
    +syn region nsisVarOpt		contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisVarKwd
    +syn match nsisVarKwd		contained "/GLOBAL\>"
    +
    +"INSTALLER ATTRIBUTES (4.8.1)
    +syn keyword nsisAttribute	contained Caption ChangeUI CheckBitmap CompletedText ComponentText
    +syn keyword nsisAttribute	contained DetailsButtonText DirText DirVar
    +syn keyword nsisAttribute	contained FileErrorText Icon InstallButtonText
    +syn keyword nsisAttribute	contained InstallDir InstProgressFlags
    +syn keyword nsisAttribute	contained LicenseData LicenseText
    +syn keyword nsisAttribute	contained MiscButtonText Name OutFile
    +syn keyword nsisAttribute	contained SpaceTexts SubCaption UninstallButtonText UninstallCaption
    +syn keyword nsisAttribute	contained UninstallIcon UninstallSubCaption UninstallText
    +
    +syn keyword nsisAttribute	contained AddBrandingImage nextgroup=nsisAddBrandingImageOpt skipwhite
    +syn region nsisAddBrandingImageOpt  contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisAddBrandingImageKwd
    +syn keyword nsisAddBrandingImageKwd contained left right top bottom width height
    +
    +syn keyword nsisAttribute	contained nextgroup=nsisBooleanOpt skipwhite
    +			\ AllowRootDirInstall AutoCloseWindow
    +
    +syn keyword nsisAttribute	contained BGFont nextgroup=nsisFontOpt skipwhite
    +
    +syn keyword nsisAttribute	contained BGGradient nextgroup=nsisBGGradientOpt skipwhite
    +syn region nsisBGGradientOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisBGGradientKwd
    +syn keyword nsisBGGradientKwd	contained off
    +
    +syn keyword nsisAttribute	contained BrandingText nextgroup=nsisBrandingTextOpt skipwhite
    +syn region nsisBrandingTextOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisBrandingTextKwd
    +syn match nsisBrandingTextKwd	contained "/TRIM\%(LEFT\|RIGHT\|CENTER\)\>"
    +
    +syn keyword nsisAttribute	contained CRCCheck nextgroup=nsisCRCCheckOpt skipwhite
    +syn region nsisCRCCheckOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisCRCCheckKwd
    +syn keyword nsisCRCCheckKwd	contained on off force
    +
    +syn keyword nsisAttribute	contained DirVerify nextgroup=nsisDirVerifyOpt skipwhite
    +syn region nsisDirVerifyOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisDirVerifyKwd
    +syn keyword nsisDirVerifyKwd	contained auto leave
    +
    +syn keyword nsisAttribute	contained InstallColors nextgroup=nsisInstallColorsOpt skipwhite
    +syn region nsisInstallColorsOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisInstallColorsKwd
    +syn match nsisInstallColorsKwd	contained "/windows\>"
    +
    +syn keyword nsisAttribute	contained InstallDirRegKey nextgroup=nsisRegistryOpt skipwhite
    +
    +syn keyword nsisAttribute	contained InstType nextgroup=nsisInstTypeOpt skipwhite
    +syn region nsisInstTypeOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisInstTypeKwd
    +syn match nsisInstTypeKwd	contained "/\%(NOCUSTOM\|CUSTOMSTRING\|COMPONENTSONLYONCUSTOM\)\>"
    +
    +syn keyword nsisAttribute	contained LicenseBkColor nextgroup=nsisLicenseBkColorOpt skipwhite
    +syn region nsisLicenseBkColorOpt contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisLicenseBkColorKwd
    +syn match nsisLicenseBkColorKwd  contained "/\%(gray\|windows\)\>"
    +
    +syn keyword nsisAttribute	contained LicenseForceSelection nextgroup=nsisLicenseForceSelectionOpt skipwhite
    +syn region nsisLicenseForceSelectionOpt  contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisLicenseForceSelectionKwd
    +syn keyword nsisLicenseForceSelectionKwd contained checkbox radiobuttons off
    +
    +syn keyword nsisAttribute	contained ManifestDPIAware nextgroup=nsisManifestDPIAwareOpt skipwhite
    +syn region nsisManifestDPIAwareOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisManifestDPIAwareKwd
    +syn keyword nsisManifestDPIAwareKwd	contained notset true false
    +
    +syn keyword nsisAttribute	contained ManifestLongPathAware nextgroup=nsisManifestLongPathAwareOpt skipwhite
    +syn region nsisManifestLongPathAwareOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisManifestLongPathAwareKwd
    +syn match nsisManifestLongPathAwareKwd	contained "\<\%(notset\|true\|false\)\>"
    +
    +syn keyword nsisAttribute	contained ManifestSupportedOS nextgroup=nsisManifestSupportedOSOpt skipwhite
    +syn region nsisManifestSupportedOSOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisManifestSupportedOSKwd
    +syn match nsisManifestSupportedOSKwd	contained "\<\%(none\|all\|WinVista\|Win7\|Win8\|Win8\.1\|Win10\)\>"
    +
    +syn keyword nsisAttribute	contained PEAddResource nextgroup=nsisPEAddResourceOpt skipwhite
    +syn region nsisPEAddResourceOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisPEAddResourceKwd
    +syn match nsisPEAddResourceKwd	contained "/\%(OVERWRITE\|REPLACE\)\>"
    +
    +syn keyword nsisAttribute	contained PERemoveResource nextgroup=nsisPERemoveResourceOpt skipwhite
    +syn region nsisPERemoveResourceOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisPERemoveResourceKwd
    +syn match nsisPERemoveResourceKwd	contained "/NOERRORS\>"
    +
    +syn keyword nsisAttribute	contained RequestExecutionLevel nextgroup=nsisRequestExecutionLevelOpt skipwhite
    +syn region nsisRequestExecutionLevelOpt  contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisRequestExecutionLevelKwd
    +syn keyword nsisRequestExecutionLevelKwd contained none user highest admin
    +
    +syn keyword nsisAttribute	contained SetFont nextgroup=nsisLangOpt skipwhite
    +
    +syn keyword nsisAttribute	contained nextgroup=nsisShowInstDetailsOpt skipwhite
    +			\ ShowInstDetails ShowUninstDetails
    +syn region nsisShowInstDetailsOpt  contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisShowInstDetailsKwd
    +syn keyword nsisShowInstDetailsKwd contained hide show nevershow
    +
    +syn keyword nsisAttribute	contained SilentInstall nextgroup=nsisSilentInstallOpt skipwhite
    +syn region nsisSilentInstallOpt	 contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSilentInstallKwd
    +syn keyword nsisSilentInstallKwd contained normal silent silentlog
    +
    +syn keyword nsisAttribute	contained SilentUnInstall nextgroup=nsisSilentUnInstallOpt skipwhite
    +syn region nsisSilentUnInstallOpt  contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSilentUnInstallKwd
    +syn keyword nsisSilentUnInstallKwd contained normal silent
    +
    +syn keyword nsisAttribute	contained nextgroup=nsisOnOffOpt skipwhite
    +			\ WindowIcon XPStyle
    +
    +"COMPILER FLAGS (4.8.2)
    +syn keyword nsisCompiler	contained nextgroup=nsisOnOffOpt skipwhite
    +			\ AllowSkipFiles SetDatablockOptimize SetDateSave
    +
    +syn keyword nsisCompiler	contained FileBufSize SetCompressorDictSize
    +
    +syn keyword nsisCompiler	contained SetCompress nextgroup=nsisSetCompressOpt skipwhite
    +syn region nsisSetCompressOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSetCompressKwd
    +syn keyword nsisSetCompressKwd  contained auto force off
    +
    +syn keyword nsisCompiler	contained SetCompressor nextgroup=nsisSetCompressorOpt skipwhite
    +syn region nsisSetCompressorOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSetCompressorKwd
    +syn keyword nsisSetCompressorKwd  contained zlib bzip2 lzma
    +syn match nsisSetCompressorKwd	contained "/\%(SOLID\|FINAL\)"
    +
    +syn keyword nsisCompiler	contained SetOverwrite nextgroup=nsisSetOverwriteOpt skipwhite
    +syn region nsisSetOverwriteOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSetOverwriteKwd
    +syn keyword nsisSetOverwriteKwd	contained on off try ifnewer ifdiff lastused
    +
    +syn keyword nsisCompiler	contained Unicode nextgroup=nsisBooleanOpt skipwhite
    +
    +"VERSION INFORMATION (4.8.3)
    +syn keyword nsisVersionInfo	contained VIAddVersionKey nextgroup=nsisLangOpt skipwhite
    +
    +syn keyword nsisVersionInfo	contained VIProductVersion VIFileVersion
    +
    +
    +"FUNCTIONS - basic (4.9.1)
    +syn keyword nsisInstruction	contained Delete Rename nextgroup=nsisDeleteOpt skipwhite
    +syn region nsisDeleteOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisDeleteKwd
    +syn match nsisDeleteKwd		contained "/REBOOTOK\>"
    +
    +syn keyword nsisInstruction	contained Exec ExecWait SetOutPath
    +
    +syn keyword nsisInstruction	contained ExecShell ExecShellWait nextgroup=nsisExecShellOpt skipwhite
    +syn region nsisExecShellOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisExecShellKwd
    +syn keyword nsisExecShellKwd	contained SW_SHOWDEFAULT SW_SHOWNORMAL SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_HIDE
    +syn match nsisExecShellKwd	contained "/INVOKEIDLIST\>"
    +
    +syn keyword nsisInstruction	contained File nextgroup=nsisFileOpt skipwhite
    +syn region nsisFileOpt		contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisFileKwd
    +syn match nsisFileKwd		contained "/\%(nonfatal\|[arx]\|oname\)\>"
    +
    +syn keyword nsisInstruction	contained ReserveFile nextgroup=nsisReserveFileOpt skipwhite
    +syn region nsisReserveFileOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisReserveFileKwd
    +syn match nsisReserveFileKwd	contained "/\%(nonfatal\|[rx]\|plugin\)\>"
    +
    +syn keyword nsisInstruction	contained RMDir nextgroup=nsisRMDirOpt skipwhite
    +syn region nsisRMDirOpt		contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisRMDirKwd
    +syn match nsisRMDirKwd		contained "/\%(REBOOTOK\|r\)\>"
    +
    +
    +"FUNCTIONS - registry & ini (4.9.2)
    +syn keyword nsisInstruction	contained DeleteINISec DeleteINIStr FlushINI ReadINIStr WriteINIStr
    +syn keyword nsisInstruction	contained ExpandEnvStrings ReadEnvStr
    +
    +syn keyword nsisInstruction	contained DeleteRegKey nextgroup=nsisDeleteRegKeyOpt skipwhite
    +syn region nsisDeleteRegKeyOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisDeleteRegKeyKwd,nsisRegistry
    +syn match nsisDeleteRegKeyKwd	contained "/\%(ifempty\|ifnosubkeys\|ifnovalues\)\>"
    +
    +syn keyword nsisInstruction	contained nextgroup=nsisRegistryOpt skipwhite
    +			\ DeleteRegValue EnumRegKey EnumRegValue ReadRegDWORD ReadRegStr WriteRegBin WriteRegDWORD WriteRegExpandStr WriteRegStr
    +syn region nsisRegistryOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisRegistry
    +
    +syn keyword nsisInstruction	contained WriteRegMultiStr nextgroup=nsisWriteRegMultiStrOpt skipwhite
    +syn region nsisWriteRegMultiStrOpt contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisRegistry,nsisWriteRegMultiStrKwd
    +syn match nsisWriteRegMultiStrKwd  contained "/REGEDIT5\>"
    +
    +syn keyword nsisInstruction	contained SetRegView nextgroup=nsisSetRegViewOpt skipwhite
    +syn region nsisSetRegViewOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSetRegViewKwd
    +syn keyword nsisSetRegViewKwd	contained default lastused
    +
    +"FUNCTIONS - general purpose (4.9.3)
    +syn keyword nsisInstruction	contained CallInstDLL CreateDirectory GetWinVer
    +syn keyword nsisInstruction	contained GetFileTime GetFileTimeLocal GetKnownFolderPath
    +syn keyword nsisInstruction	contained GetTempFileName SearchPath RegDLL UnRegDLL
    +
    +syn keyword nsisInstruction	contained CopyFiles nextgroup=nsisCopyFilesOpt skipwhite
    +syn region nsisCopyFilesOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisCopyFilesKwd
    +syn match nsisCopyFilesKwd	contained "/\%(SILENT\|FILESONLY\)\>"
    +
    +syn keyword nsisInstruction	contained CreateShortcut nextgroup=nsisCreateShortcutOpt skipwhite
    +syn region nsisCreateShortcutOpt contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisCreateShortcutKwd
    +syn match nsisCreateShortcutKwd	 contained "/NoWorkingDir\>"
    +
    +syn keyword nsisInstruction	contained GetWinVer nextgroup=nsisGetWinVerOpt skipwhite
    +syn region nsisGetWinVerOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisGetWinVerKwd
    +syn keyword nsisGetWinVerKwd	contained Major Minor Build ServicePack
    +
    +syn keyword nsisInstruction	contained GetDLLVersion GetDLLVersionLocal nextgroup=nsisGetDLLVersionOpt skipwhite
    +syn region nsisGetDLLVersionOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisGetDLLVersionKwd
    +syn match nsisGetDLLVersionKwd	contained "/ProductVersion\>"
    +
    +syn keyword nsisInstruction	contained GetFullPathName nextgroup=nsisGetFullPathNameOpt skipwhite
    +syn region nsisGetFullPathNameOpt contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisGetFullPathNameKwd
    +syn match nsisGetFullPathNameKwd  contained "/SHORT\>"
    +
    +syn keyword nsisInstruction	contained SetFileAttributes nextgroup=nsisSetFileAttributesOpt skipwhite
    +syn region nsisSetFileAttributesOpt  contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisFileAttrib
    +syn keyword nsisFileAttrib	contained NORMAL ARCHIVE HIDDEN OFFLINE READONLY SYSTEM TEMPORARY
    +syn keyword nsisFileAttrib	contained FILE_ATTRIBUTE_NORMAL FILE_ATTRIBUTE_ARCHIVE FILE_ATTRIBUTE_HIDDEN
    +syn keyword nsisFileAttrib	contained FILE_ATTRIBUTE_OFFLINE FILE_ATTRIBUTE_READONLY FILE_ATTRIBUTE_SYSTEM
    +syn keyword nsisFileAttrib	contained FILE_ATTRIBUTE_TEMPORARY
    +
    +"FUNCTIONS - Flow Control (4.9.4)
    +syn keyword nsisInstruction	contained Abort Call ClearErrors GetCurrentAddress
    +syn keyword nsisInstruction	contained GetFunctionAddress GetLabelAddress Goto
    +syn keyword nsisInstruction	contained IfAbort IfErrors IfFileExists IfRebootFlag IfSilent
    +syn keyword nsisInstruction	contained IfShellVarContextAll IfRtlLanguage
    +syn keyword nsisInstruction	contained IntCmp IntCmpU Int64Cmp Int64CmpU IntPtrCmp IntPtrCmpU
    +syn keyword nsisInstruction	contained Return Quit SetErrors StrCmp StrCmpS
    +
    +syn keyword nsisInstruction	contained MessageBox nextgroup=nsisMessageBoxOpt skipwhite
    +syn region nsisMessageBoxOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisMessageBox
    +syn keyword nsisMessageBox	contained MB_OK MB_OKCANCEL MB_ABORTRETRYIGNORE MB_RETRYCANCEL MB_YESNO MB_YESNOCANCEL
    +syn keyword nsisMessageBox	contained MB_ICONEXCLAMATION MB_ICONINFORMATION MB_ICONQUESTION MB_ICONSTOP MB_USERICON
    +syn keyword nsisMessageBox	contained MB_TOPMOST MB_SETFOREGROUND MB_RIGHT MB_RTLREADING
    +syn keyword nsisMessageBox	contained MB_DEFBUTTON1 MB_DEFBUTTON2 MB_DEFBUTTON3 MB_DEFBUTTON4
    +syn keyword nsisMessageBox	contained IDABORT IDCANCEL IDIGNORE IDNO IDOK IDRETRY IDYES
    +syn match nsisMessageBox	contained "/SD\>"
    +
    +"FUNCTIONS - File and directory i/o instructions (4.9.5)
    +syn keyword nsisInstruction	contained FileClose FileOpen FileRead FileReadUTF16LE
    +syn keyword nsisInstruction	contained FileReadByte FileReadWord FileSeek FileWrite
    +syn keyword nsisInstruction	contained FileWriteByte FileWriteWord
    +syn keyword nsisInstruction	contained FindClose FindFirst FindNext
    +
    +syn keyword nsisInstruction	contained FileWriteUTF16LE nextgroup=nsisFileWriteUTF16LEOpt skipwhite
    +syn region nsisFileWriteUTF16LEOpt contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisFileWriteUTF16LEKwd
    +syn match nsisFileWriteUTF16LEKwd  contained "/BOM\>"
    +
    +"FUNCTIONS - Uninstaller instructions (4.9.6)
    +syn keyword nsisInstruction	contained WriteUninstaller
    +
    +"FUNCTIONS - Misc instructions (4.9.7)
    +syn keyword nsisInstruction	contained GetErrorLevel GetInstDirError InitPluginsDir Nop
    +syn keyword nsisInstruction	contained SetErrorLevel Sleep
    +
    +syn keyword nsisInstruction	contained SetShellVarContext nextgroup=nsisSetShellVarContextOpt skipwhite
    +syn region nsisSetShellVarContextOpt  contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSetShellVarContextKwd
    +syn keyword nsisSetShellVarContextKwd contained current all
    +
    +"FUNCTIONS - String manipulation support (4.9.8)
    +syn keyword nsisInstruction	contained StrCpy StrLen
    +
    +"FUNCTIONS - Stack support (4.9.9)
    +syn keyword nsisInstruction	contained Exch Push Pop
    +
    +"FUNCTIONS - Integer manipulation support (4.9.10)
    +syn keyword nsisInstruction	contained IntFmt Int64Fmt IntOp IntPtrOp
    +
    +"FUNCTIONS - Rebooting support (4.9.11)
    +syn keyword nsisInstruction	contained Reboot SetRebootFlag
    +
    +"FUNCTIONS - Install logging instructions (4.9.12)
    +syn keyword nsisInstruction	contained LogSet nextgroup=nsisOnOffOpt skipwhite
    +syn keyword nsisInstruction	contained LogText
    +
    +"FUNCTIONS - Section management instructions (4.9.13)
    +syn keyword nsisInstruction	contained SectionSetFlags SectionGetFlags SectionSetText
    +syn keyword nsisInstruction	contained SectionGetText SectionSetInstTypes SectionGetInstTypes
    +syn keyword nsisInstruction	contained SectionSetSize SectionGetSize SetCurInstType GetCurInstType
    +syn keyword nsisInstruction	contained InstTypeSetText InstTypeGetText
    +
    +"FUNCTIONS - User Interface Instructions (4.9.14)
    +syn keyword nsisInstruction	contained BringToFront DetailPrint EnableWindow
    +syn keyword nsisInstruction	contained FindWindow GetDlgItem HideWindow IsWindow
    +syn keyword nsisInstruction	contained ShowWindow
    +
    +syn keyword nsisInstruction	contained CreateFont nextgroup=nsisFontOpt skipwhite
    +
    +syn keyword nsisInstruction	contained nextgroup=nsisBooleanOpt skipwhite
    +			\ LockWindow SetAutoClose
    +
    +syn keyword nsisInstruction	contained LoadAndSetImage nextgroup=nsisLoadAndSetImageOpt skipwhite
    +syn region nsisLoadAndSetImageOpt contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisLoadAndSetImageKwd
    +syn match nsisLoadAndSetImageKwd  contained "/\%(EXERESOURCE\|STRINGID\|RESIZETOFIT\%(WIDTH\|HEIGHT\)\)\>"
    +
    +syn keyword nsisInstruction	contained SendMessage nextgroup=nsisSendMessageOpt skipwhite
    +syn region nsisSendMessageOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSendMessageKwd
    +syn match nsisSendMessageKwd	contained "/TIMEOUT\>"
    +
    +syn keyword nsisInstruction	contained SetBrandingImage nextgroup=nsisSetBrandingImageOpt skipwhite
    +syn region nsisSetBrandingImageOpt contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSetBrandingImageKwd
    +syn match nsisSetBrandingImageKwd  contained "/\%(IMGID\|RESIZETOFIT\)\>"
    +
    +syn keyword nsisInstruction	contained SetDetailsView nextgroup=nsisSetDetailsViewOpt skipwhite
    +syn region nsisSetDetailsViewOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSetDetailsViewKwd
    +syn keyword nsisSetDetailsViewKwd	contained show hide
    +
    +syn keyword nsisInstruction	contained SetDetailsPrint nextgroup=nsisSetDetailsPrintOpt skipwhite
    +syn region nsisSetDetailsPrintOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSetDetailsPrintKwd
    +syn keyword nsisSetDetailsPrintKwd	contained none listonly textonly both lastused
    +
    +syn keyword nsisInstruction	contained SetCtlColors nextgroup=nsisSetCtlColorsOpt skipwhite
    +syn region nsisSetCtlColorsOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSetCtlColorsKwd
    +syn match nsisSetCtlColorsKwd	contained "/BRANDING\>"
    +
    +syn keyword nsisInstruction	contained SetSilent nextgroup=nsisSetSilentOpt skipwhite
    +syn region nsisSetSilentOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSetSilentKwd
    +syn keyword nsisSetSilentKwd	contained silent normal
    +
    +
    +"FUNCTIONS - Multiple Languages Instructions (4.9.15)
    +syn keyword nsisInstruction	contained LoadLanguageFile LangString LicenseLangString
    +
    +
    +"SPECIAL FUNCTIONS - install (4.7.2.1)
    +syn match nsisCallback		"\.onGUIInit"
    +syn match nsisCallback		"\.onInit"
    +syn match nsisCallback		"\.onInstFailed"
    +syn match nsisCallback		"\.onInstSuccess"
    +syn match nsisCallback		"\.onGUIEnd"
    +syn match nsisCallback		"\.onMouseOverSection"
    +syn match nsisCallback		"\.onRebootFailed"
    +syn match nsisCallback		"\.onSelChange"
    +syn match nsisCallback		"\.onUserAbort"
    +syn match nsisCallback		"\.onVerifyInstDir"
    +
    +"SPECIAL FUNCTIONS - uninstall (4.7.2.2)
    +syn match nsisCallback		"un\.onGUIInit"
    +syn match nsisCallback		"un\.onInit"
    +syn match nsisCallback		"un\.onUninstFailed"
    +syn match nsisCallback		"un\.onUninstSuccess"
    +syn match nsisCallback		"un\.onGUIEnd"
    +syn match nsisCallback		"un\.onRebootFailed"
    +syn match nsisCallback		"un\.onSelChange"
    +syn match nsisCallback		"un\.onUserAbort"
    +
    +
    +"COMPILER UTILITY (5.1)
    +syn match nsisInclude		contained "!include\>" nextgroup=nsisIncludeOpt skipwhite
    +syn region nsisIncludeOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisIncludeKwd
    +syn match nsisIncludeKwd	contained "/\%(NONFATAL\|CHARSET\)\>"
    +
    +syn match nsisSystem		contained "!addincludedir\>"
    +
    +syn match nsisSystem		contained "!addplugindir\>" nextgroup=nsisAddplugindirOpt skipwhite
    +syn region nsisAddplugindirOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisAddplugindirKwd
    +syn match nsisAddplugindirKwd	contained "/\%(x86-ansi\|x86-unicode\)\>"
    +
    +syn match nsisSystem		contained "!appendfile\>" nextgroup=nsisAppendfileOpt skipwhite
    +syn region nsisAppendfileOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisAppendfileKwd
    +syn match nsisAppendfileKwd	contained "/\%(CHARSET\|RawNL\)\>"
    +
    +syn match nsisSystem		contained "!cd\>"
    +
    +syn match nsisSystem		contained "!delfile\>" nextgroup=nsisDelfileOpt skipwhite
    +syn region nsisDelfileOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisDelfileKwd
    +syn match nsisDelfileKwd	contained "/nonfatal\>"
    +
    +syn match nsisSystem		contained "!echo\>"
    +syn match nsisSystem		contained "!error\>"
    +syn match nsisSystem		contained "!execute\>"
    +syn match nsisSystem		contained "!makensis\>"
    +syn match nsisSystem		contained "!packhdr\>"
    +syn match nsisSystem		contained "!finalize\>"
    +syn match nsisSystem		contained "!uninstfinalize\>"
    +syn match nsisSystem		contained "!system\>"
    +syn match nsisSystem		contained "!tempfile\>"
    +
    +" Add 'P' to avoid conflicts with nsisGetDLLVersionOpt. ('P' for preprocessor.)
    +syn match nsisSystem		contained "!getdllversion\>" nextgroup=nsisPGetdllversionOpt skipwhite
    +syn region nsisPGetdllversionOpt contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisPGetdllversionKwd
    +syn match nsisPGetdllversionKwd	contained "/\%(noerrors\|packed\|productversion\)\>"
    +
    +syn match nsisSystem		contained "!gettlbversion\>" nextgroup=nsisPGettlbversionOpt skipwhite
    +syn region nsisPGettlbversionOpt contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisPGettlbversionKwd
    +syn match nsisPGettlbversionKwd	contained "/\%(noerrors\|packed\)\>"
    +
    +syn match nsisSystem		contained "!warning\>"
    +
    +syn match nsisSystem		contained "!pragma\>" nextgroup=nsisPragmaOpt skipwhite
    +syn region nsisPragmaOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisPragmaKwd
    +syn keyword nsisPragmaKwd	contained enable disable default push pop
    +
    +syn match nsisSystem		contained "!verbose\>" nextgroup=nsisVerboseOpt skipwhite
    +syn region nsisVerboseOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisVerboseKwd
    +syn keyword nsisVerboseKwd	contained push pop
    +
    +"PREPROCESSOR (5.4)
    +syn match nsisDefine		contained "!define\>" nextgroup=nsisDefineOpt skipwhite
    +syn region nsisDefineOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisDefineKwd
    +syn match nsisDefineKwd		contained "/\%(ifndef\|redef\|date\|utcdate\|file\|intfmt\|math\)\>"
    +
    +syn match nsisDefine		contained "!undef\>" nextgroup=nsisUndefineOpt skipwhite
    +syn region nsisUndefineOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisUndefineKwd
    +syn match nsisUndefineKwd	contained "/noerrors\>"
    +
    +syn match nsisPreCondit		contained "!ifdef\>"
    +syn match nsisPreCondit		contained "!ifndef\>"
    +
    +syn match nsisPreCondit		contained "!if\>" nextgroup=nsisIfOpt skipwhite
    +syn region nsisIfOpt		contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisIfKwd
    +syn match nsisIfKwd		contained "/FileExists\>"
    +
    +syn match nsisPreCondit		contained "!ifmacrodef\>"
    +syn match nsisPreCondit		contained "!ifmacrondef\>"
    +syn match nsisPreCondit		contained "!else\>"
    +syn match nsisPreCondit		contained "!endif\>"
    +syn match nsisMacro		contained "!insertmacro\>"
    +syn match nsisMacro		contained "!macro\>"
    +syn match nsisMacro		contained "!macroend\>"
    +syn match nsisMacro		contained "!macroundef\>"
    +
    +syn match nsisMacro		contained "!searchparse\>" nextgroup=nsisSearchparseOpt skipwhite
    +syn region nsisSearchparseOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSearchparseKwd
    +syn match nsisSearchparseKwd	contained "/\%(ignorecase\|noerrors\|file\)\>"
    +
    +syn match nsisMacro		contained "!searchreplace\>" nextgroup=nsisSearchreplaceOpt skipwhite
    +syn region nsisSearchreplaceOpt	contained start="" end="$" transparent keepend contains=@nsisAnyOpt,nsisSearchreplaceKwd
    +syn match nsisSearchreplaceKwd	contained "/ignorecase\>"
    +
    +
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link nsisInstruction		Function
    +hi def link nsisComment			Comment
    +hi def link nsisFirstComment		Comment
    +hi def link nsisLocalLabel		Label
    +hi def link nsisGlobalLabel		Label
    +hi def link nsisStatement		Statement
    +hi def link nsisString			String
    +hi def link nsisBoolean			Boolean
    +hi def link nsisOnOff			Boolean
    +hi def link nsisFontKwd			Constant
    +hi def link nsisLangKwd			Constant
    +hi def link nsisPageKwd			Constant
    +hi def link nsisPageExKwd		Constant
    +hi def link nsisSectionKwd		Constant
    +hi def link nsisSectionInKwd		Constant
    +hi def link nsisSectionGroupKwd		Constant
    +hi def link nsisVarKwd			Constant
    +hi def link nsisAddBrandingImageKwd	Constant
    +hi def link nsisBGGradientKwd		Constant
    +hi def link nsisBrandingTextKwd		Constant
    +hi def link nsisCRCCheckKwd		Constant
    +hi def link nsisDirVerifyKwd		Constant
    +hi def link nsisInstallColorsKwd	Constant
    +hi def link nsisInstTypeKwd		Constant
    +hi def link nsisLicenseBkColorKwd	Constant
    +hi def link nsisLicenseForceSelectionKwd Constant
    +hi def link nsisManifestDPIAwareKwd	Constant
    +hi def link nsisManifestLongPathAwareKwd Constant
    +hi def link nsisManifestSupportedOSKwd	Constant
    +hi def link nsisPEAddResourceKwd	Constant
    +hi def link nsisPERemoveResourceKwd	Constant
    +hi def link nsisRequestExecutionLevelKwd Constant
    +hi def link nsisShowInstDetailsKwd	Constant
    +hi def link nsisSilentInstallKwd	Constant
    +hi def link nsisSilentUnInstallKwd	Constant
    +hi def link nsisSetCompressKwd		Constant
    +hi def link nsisSetCompressorKwd	Constant
    +hi def link nsisSetOverwriteKwd		Constant
    +hi def link nsisDeleteKwd		Constant
    +hi def link nsisExecShellKwd		Constant
    +hi def link nsisFileKwd			Constant
    +hi def link nsisReserveFileKwd		Constant
    +hi def link nsisRMDirKwd		Constant
    +hi def link nsisDeleteRegKeyKwd		Constant
    +hi def link nsisWriteRegMultiStrKwd	Constant
    +hi def link nsisSetRegViewKwd		Constant
    +hi def link nsisCopyFilesKwd		Constant
    +hi def link nsisCreateShortcutKwd	Constant
    +hi def link nsisGetWinVerKwd		Constant
    +hi def link nsisGetDLLVersionKwd	Constant
    +hi def link nsisGetFullPathNameKwd	Constant
    +hi def link nsisFileAttrib		Constant
    +hi def link nsisMessageBox		Constant
    +hi def link nsisFileWriteUTF16LEKwd	Constant
    +hi def link nsisSetShellVarContextKwd	Constant
    +hi def link nsisLoadAndSetImageKwd	Constant
    +hi def link nsisSendMessageKwd		Constant
    +hi def link nsisSetBrandingImageKwd	Constant
    +hi def link nsisSetDetailsViewKwd	Constant
    +hi def link nsisSetDetailsPrintKwd	Constant
    +hi def link nsisSetCtlColorsKwd		Constant
    +hi def link nsisSetSilentKwd		Constant
    +hi def link nsisRegistry		Identifier
    +hi def link nsisNumber			Number
    +hi def link nsisError			Error
    +hi def link nsisUserVar			Identifier
    +hi def link nsisSysVar			Identifier
    +hi def link nsisAttribute		Type
    +hi def link nsisCompiler		Type
    +hi def link nsisVersionInfo		Type
    +hi def link nsisTodo			Todo
    +hi def link nsisCallback		Identifier
    +" preprocessor commands
    +hi def link nsisPreprocSubst		PreProc
    +hi def link nsisPreprocLangStr		PreProc
    +hi def link nsisPreprocEnvVar		PreProc
    +hi def link nsisDefine			Define
    +hi def link nsisMacro			Macro
    +hi def link nsisPreCondit		PreCondit
    +hi def link nsisInclude			Include
    +hi def link nsisSystem			PreProc
    +hi def link nsisLineContinuation	Special
    +hi def link nsisIncludeKwd		Constant
    +hi def link nsisAddplugindirKwd		Constant
    +hi def link nsisAppendfileKwd		Constant
    +hi def link nsisDelfileKwd		Constant
    +hi def link nsisPGetdllversionKwd	Constant
    +hi def link nsisPGettlbversionKwd	Constant
    +hi def link nsisPragmaKwd		Constant
    +hi def link nsisVerboseKwd		Constant
    +hi def link nsisDefineKwd		Constant
    +hi def link nsisUndefineKwd		Constant
    +hi def link nsisIfKwd			Constant
    +hi def link nsisSearchparseKwd		Constant
    +hi def link nsisSearchreplaceKwd	Constant
    +
    +
    +let b:current_syntax = "nsis"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/nu.vim b/.config/vim/syntax/nu.vim
    new file mode 100644
    index 0000000..0d0c80e
    --- /dev/null
    +++ b/.config/vim/syntax/nu.vim
    @@ -0,0 +1,720 @@
    +" Vim syntax file
    +" Language:	Nushell
    +" Maintainer:	El Kasztano
    +" URL:		https://github.com/elkasztano/nushell-syntax-vim
    +" License:	MIT 
    +" Last Change:	2025 Sep 05
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn iskeyword @,192-255,-,_
    +
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" nextgroup=nuIdtfr,nuSubCmd,nuDefflag skipwhite display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" nextgroup=nuIdtfr,nuSubCmd,nuDefflag skipwhite display
    +syn match nuCmd "\" nextgroup=nuIdtfr,nuSubCmd,nuDefflag skipwhite display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" nextgroup=nuIdtfr skipwhite display
    +syn match nuCmd "\" nextgroup=nuIdtfr skipwhite display
    +syn match nuCmd "\" nextgroup=nuIdtfr skipwhite display
    +syn match nuCmd "\" nextgroup=nuIdtfr skipwhite display
    +syn match nuCmd "\" nextgroup=nuIdtfr skipwhite display
    +syn match nuCmd "\" nextgroup=nuIdtfr skipwhite display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" nextgroup=nuPrpty skipwhite display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" nextgroup=nuPrpty skipwhite display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" nextgroup=nuPrpty skipwhite display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\ " display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\" display
    +syn match nuCmd "\
    .\{-}<\/pre>/ skipnl
    +syn match pandocCodePre /.\{-}<\/code>/ skipnl
    +
    +" enable highlighting for embedded region in codeblocks if there exists a
    +" g:pandoc#syntax#codeblocks#embeds#langs *list*.
    +"
    +" entries in this list are the language code interpreted by pandoc,
    +" if this differs from the name of the vim syntax file, append =vimname
    +" e.g. let g:pandoc#syntax#codeblocks#embeds#langs = ["haskell", "literatehaskell=lhaskell"]
    +"
    +if g:pandoc#syntax#codeblocks#embeds#use != 0
    +    for l in g:pandoc#syntax#codeblocks#embeds#langs
    +      call EnableEmbedsforCodeblocksWithLang(l)
    +    endfor
    +endif
    +" }}}2
    +
    +" Abbreviations: {{{2
    +syn region pandocAbbreviationDefinition start=/^\*\[.\{-}\]:\s*/ end='$' contains=pandocNoFormatted,@Spell,pandocAmpersandEscape
    +call s:WithConceal('abbrev', 'syn match pandocAbbreviationSeparator /:/ contained containedin=pandocAbbreviationDefinition', 'conceal cchar='.s:cchars['abbrev'])
    +syn match pandocAbbreviation /\*\[.\{-}\]/ contained containedin=pandocAbbreviationDefinition
    +call s:WithConceal('abbrev', 'syn match pandocAbbreviationHead /\*\[/ contained containedin=pandocAbbreviation', 'conceal')
    +call s:WithConceal('abbrev', 'syn match pandocAbbreviationTail /\]/ contained containedin=pandocAbbreviation', 'conceal')
    +" }}}2
    +
    +" Footnotes: {{{2
    +" we put these here not to interfere with superscripts.
    +syn match pandocFootnoteID /\[\^[^\]]\+\]/ nextgroup=pandocFootnoteDef
    +
    +"   Inline footnotes
    +syn region pandocFootnoteDef start=/\^\[/ skip=/\[.\{-}]/ end=/\]/ contains=pandocReferenceLabel,pandocReferenceURL,pandocLatex,pandocPCite,pandocCiteKey,pandocStrong,pandocEmphasis,pandocStrongEmphasis,pandocNoFormatted,pandocSuperscript,pandocSubscript,pandocStrikeout,pandocEnDash,pandocEmDash,pandocEllipses,pandocBeginQuote,pandocEndQuote,@Spell,pandocAmpersandEscape skipnl keepend
    +call s:WithConceal('footnote', 'syn match pandocFootnoteDefHead /\^\[/ contained containedin=pandocFootnoteDef', 'conceal cchar='.s:cchars['footnote'])
    +call s:WithConceal('footnote', 'syn match pandocFootnoteDefTail /\]/ contained containedin=pandocFootnoteDef', 'conceal')
    +
    +" regular footnotes
    +syn region pandocFootnoteBlock start=/\[\^.\{-}\]:\s*\n*/ end=/^\n^\s\@!/ contains=pandocReferenceLabel,pandocReferenceURL,pandocLatex,pandocPCite,pandocCiteKey,pandocStrong,pandocEmphasis,pandocNoFormatted,pandocSuperscript,pandocSubscript,pandocStrikeout,pandocEnDash,pandocEmDash,pandocNewLine,pandocStrongEmphasis,pandocEllipses,pandocBeginQuote,pandocEndQuote,pandocLaTeXInlineMath,pandocEscapedDollar,pandocLaTeXCommand,pandocLaTeXMathBlock,pandocLaTeXRegion,pandocAmpersandEscape,@Spell skipnl
    +syn match pandocFootnoteBlockSeparator /:/ contained containedin=pandocFootnoteBlock
    +syn match pandocFootnoteID /\[\^.\{-}\]/ contained containedin=pandocFootnoteBlock
    +call s:WithConceal('footnote', 'syn match pandocFootnoteIDHead /\[\^/ contained containedin=pandocFootnoteID', 'conceal cchar='.s:cchars['footnote'])
    +call s:WithConceal('footnote', 'syn match pandocFootnoteIDTail /\]/ contained containedin=pandocFootnoteID', 'conceal')
    +" }}}2
    +
    +" List Items: {{{2
    +" Unordered lists
    +syn match pandocUListItem /^>\=\s*[*+-]\s\+-\@!.*$/ nextgroup=pandocUListItem,pandocLaTeXMathBlock,pandocLaTeXInlineMath,pandocEscapedDollar,pandocDelimitedCodeBlock,pandocListItemContinuation contains=@Spell,pandocEmphasis,pandocStrong,pandocNoFormatted,pandocStrikeout,pandocSubscript,pandocSuperscript,pandocStrongEmphasis,pandocStrongEmphasis,pandocPCite,pandocICite,pandocCiteKey,pandocReferenceLabel,pandocLaTeXCommand,pandocLaTeXMathBlock,pandocLaTeXInlineMath,pandocEscapedDollar,pandocReferenceURL,pandocAutomaticLink,pandocFootnoteDef,pandocFootnoteBlock,pandocFootnoteID,pandocAmpersandEscape skipempty display
    +call s:WithConceal('list', 'syn match pandocUListItemBullet /^>\=\s*\zs[*+-]/ contained containedin=pandocUListItem', 'conceal cchar='.s:cchars['li'])
    +
    +" Ordered lists
    +syn match pandocListItem /^\s*(\?\(\d\+\|\l\|\#\|@\)[.)].*$/ nextgroup=pandocListItem,pandocLaTeXMathBlock,pandocLaTeXInlineMath,pandocEscapedDollar,pandocDelimitedCodeBlock,pandocListItemContinuation contains=@Spell,pandocEmphasis,pandocStrong,pandocReferenceURL,pandocNoFormatted,pandocStrikeout,pandocSubscript,pandocSuperscript,pandocStrongEmphasis,pandocStrongEmphasis,pandocPCite,pandocICite,pandocCiteKey,pandocReferenceLabel,pandocLaTeXCommand,pandocLaTeXMathBlock,pandocLaTeXInlineMath,pandocEscapedDollar,pandocAutomaticLink,pandocFootnoteDef,pandocFootnoteBlock,pandocFootnoteID,pandocAmpersandEscape skipempty display
    +
    +" support for roman numerals up to 'c'
    +if g:pandoc#syntax#roman_lists != 0
    +    syn match pandocListItem /^\s*(\?x\=l\=\(i\{,3}[vx]\=\)\{,3}c\{,3}[.)].*$/ nextgroup=pandocListItem,pandocMathBlock,pandocLaTeXInlineMath,pandocEscapedDollar,pandocDelimitedCodeBlock,pandocListItemContinuation,pandocAutomaticLink skipempty display
    +endif
    +syn match pandocListItemBullet /^(\?.\{-}[.)]/ contained containedin=pandocListItem
    +syn match pandocListItemBulletId /\(\d\+\|\l\|\#\|@.\{-}\|x\=l\=\(i\{,3}[vx]\=\)\{,3}c\{,3}\)/ contained containedin=pandocListItemBullet
    +
    +syn match pandocListItemContinuation /^\s\+\([-+*]\s\+\|(\?.\+[).]\)\@[[:punct:]]*\)\@<="[[:blank:][:punct:]\n]\@=/  containedin=pandocEmphasis,pandocStrong,pandocUListItem,pandocListItem,pandocListItemContinuation display', 'conceal cchar='.s:cchars['quote_e'])
    +endif
    +" }}}3
    +
    +" Hrule: {{{3
    +syn match pandocHRule /^\s*\([*\-_]\)\s*\%(\1\s*\)\{2,}$/ display
    +" }}}3
    +
    +" Backslashes: {{{3
    +if g:pandoc#syntax#conceal#backslash == 1
    +    syn match pandocBackslash /\v\\@
    +" Last Change:	2009 Nov 11
    +" Filenames:    *.papp *.pxml *.pxsl
    +" URL:		http://papp.plan9.de/
    +
    +" You can set the "papp_include_html" variable so that html will be
    +" rendered as such inside phtml sections (in case you actually put html
    +" there - papp does not require that). Also, rendering html tends to keep
    +" the clutter high on the screen - mixing three languages is difficult
    +" enough(!). PS: it is also slow.
    +
    +" pod is, btw, allowed everywhere, which is actually wrong :(
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" source is basically xml, with included html (this is common) and perl bits
    +runtime! syntax/xml.vim
    +unlet b:current_syntax
    +
    +if exists("papp_include_html")
    +  syn include @PAppHtml syntax/html.vim
    +  unlet b:current_syntax
    +  syntax spell default  " added by Bram
    +endif
    +
    +syn include @PAppPerl syntax/perl.vim
    +
    +syn cluster xmlFoldCluster add=papp_perl,papp_xperl,papp_phtml,papp_pxml,papp_perlPOD
    +
    +" preprocessor commands
    +syn region papp_prep matchgroup=papp_prep start="^#\s*\(if\|elsif\)" end="$" keepend contains=@perlExpr contained
    +syn match papp_prep /^#\s*\(else\|endif\|??\).*$/ contained
    +" translation entries
    +syn region papp_gettext start=/__"/ end=/"/ contained contains=@papp_perlInterpDQ
    +syn cluster PAppHtml add=papp_gettext,papp_prep
    +
    +" add special, paired xperl, perl and phtml tags
    +syn region papp_perl  matchgroup=xmlTag start=""  end=""  contains=papp_CDATAp,@PAppPerl keepend
    +syn region papp_xperl matchgroup=xmlTag start="" end="" contains=papp_CDATAp,@PAppPerl keepend
    +syn region papp_phtml matchgroup=xmlTag start="" end="" contains=papp_CDATAh,papp_ph_perl,papp_ph_html,papp_ph_hint,@PAppHtml keepend
    +syn region papp_pxml  matchgroup=xmlTag start=""	end=""  contains=papp_CDATAx,papp_ph_perl,papp_ph_xml,papp_ph_xint	     keepend
    +syn region papp_perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,perlTodo keepend
    +
    +" cdata sections
    +syn region papp_CDATAp matchgroup=xmlCdataDecl start="" contains=@PAppPerl					 contained keepend
    +syn region papp_CDATAh matchgroup=xmlCdataDecl start="" contains=papp_ph_perl,papp_ph_html,papp_ph_hint,@PAppHtml contained keepend
    +syn region papp_CDATAx matchgroup=xmlCdataDecl start="" contains=papp_ph_perl,papp_ph_xml,papp_ph_xint		 contained keepend
    +
    +syn region papp_ph_perl matchgroup=Delimiter start="<[:?]" end="[:?]>"me=e-2 nextgroup=papp_ph_html contains=@PAppPerl		     contained keepend
    +syn region papp_ph_html matchgroup=Delimiter start=":>"    end="<[:?]"me=e-2 nextgroup=papp_ph_perl contains=@PAppHtml		     contained keepend
    +syn region papp_ph_hint matchgroup=Delimiter start="?>"    end="<[:?]"me=e-2 nextgroup=papp_ph_perl contains=@perlInterpDQ,@PAppHtml contained keepend
    +syn region papp_ph_xml	matchgroup=Delimiter start=":>"    end="<[:?]"me=e-2 nextgroup=papp_ph_perl contains=			     contained keepend
    +syn region papp_ph_xint matchgroup=Delimiter start="?>"    end="<[:?]"me=e-2 nextgroup=papp_ph_perl contains=@perlInterpDQ	     contained keepend
    +
    +" synchronization is horrors!
    +syn sync clear
    +syn sync match pappSync grouphere papp_CDATAh ""
    +syn sync match pappSync grouphere papp_CDATAh "^# *\(if\|elsif\|else\|endif\)"
    +syn sync match pappSync grouphere papp_CDATAh ""
    +syn sync match pappSync grouphere NONE	      ""
    +
    +syn sync maxlines=300
    +syn sync minlines=5
    +
    +" The default highlighting.
    +
    +hi def link papp_prep		preCondit
    +hi def link papp_gettext	String
    +
    +let b:current_syntax = "papp"
    diff --git a/.config/vim/syntax/pascal.vim b/.config/vim/syntax/pascal.vim
    new file mode 100644
    index 0000000..206df21
    --- /dev/null
    +++ b/.config/vim/syntax/pascal.vim
    @@ -0,0 +1,384 @@
    +" Vim syntax file
    +" Language:		Pascal
    +" Maintainer:		Doug Kearns 
    +" Previous Maintainers:	Xavier Crégut 
    +"			Mario Eusebio 
    +" Last Change:		2021 May 20
    +
    +" Contributors: Tim Chase ,
    +"		Stas Grabois ,
    +"		Mazen NEIFER ,
    +"		Klaus Hast ,
    +"		Austin Ziegler ,
    +"		Markus Koenig 
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +
    +syn case ignore
    +syn sync lines=250
    +
    +syn keyword pascalBoolean	true false
    +syn keyword pascalConditional	if else then
    +syn keyword pascalConstant	nil maxint
    +syn keyword pascalLabel		case goto label
    +syn keyword pascalOperator	and div downto in mod not of or packed
    +syn keyword pascalRepeat	do for do repeat while to until
    +syn keyword pascalStatement	procedure function
    +syn keyword pascalStatement	program begin end const var type with
    +syn keyword pascalStruct	record
    +syn keyword pascalType		array boolean char integer file pointer real set
    +syn keyword pascalType		string text variant
    +
    +
    +    " 20011222az: Added new items.
    +syn keyword pascalTodo contained	TODO FIXME XXX DEBUG NOTE
    +
    +    " 20010723az: When wanted, highlight the trailing whitespace -- this is
    +    " based on c_space_errors; to enable, use "pascal_space_errors".
    +if exists("pascal_space_errors")
    +  if !exists("pascal_no_trail_space_error")
    +    syn match pascalSpaceError "\s\+$"
    +  endif
    +  if !exists("pascal_no_tab_space_error")
    +    syn match pascalSpaceError " \+\t"me=e-1
    +  endif
    +endif
    +
    +
    +
    +" String
    +if !exists("pascal_one_line_string")
    +  syn region  pascalString matchgroup=pascalString start=+'+ end=+'+ contains=pascalStringEscape
    +  if exists("pascal_gpc")
    +    syn region  pascalString matchgroup=pascalString start=+"+ end=+"+ contains=pascalStringEscapeGPC
    +  else
    +    syn region  pascalStringError matchgroup=pascalStringError start=+"+ end=+"+ contains=pascalStringEscape
    +  endif
    +else
    +  "wrong strings
    +  syn region  pascalStringError matchgroup=pascalStringError start=+'+ end=+'+ end=+$+ contains=pascalStringEscape
    +  if exists("pascal_gpc")
    +    syn region  pascalStringError matchgroup=pascalStringError start=+"+ end=+"+ end=+$+ contains=pascalStringEscapeGPC
    +  else
    +    syn region  pascalStringError matchgroup=pascalStringError start=+"+ end=+"+ end=+$+ contains=pascalStringEscape
    +  endif
    +
    +  "right strings
    +  syn region  pascalString matchgroup=pascalString start=+'+ end=+'+ oneline contains=pascalStringEscape
    +  " To see the start and end of strings:
    +  " syn region  pascalString matchgroup=pascalStringError start=+'+ end=+'+ oneline contains=pascalStringEscape
    +  if exists("pascal_gpc")
    +    syn region  pascalString matchgroup=pascalString start=+"+ end=+"+ oneline contains=pascalStringEscapeGPC
    +  else
    +    syn region  pascalStringError matchgroup=pascalStringError start=+"+ end=+"+ oneline contains=pascalStringEscape
    +  endif
    +end
    +syn match   pascalStringEscape		contained "''"
    +syn match   pascalStringEscapeGPC	contained '""'
    +
    +
    +" syn match   pascalIdentifier		"\<[a-zA-Z_][a-zA-Z0-9_]*\>"
    +
    +
    +if exists("pascal_symbol_operator")
    +  syn match   pascalSymbolOperator      "[+\-/*=]"
    +  syn match   pascalSymbolOperator      "[<>]=\="
    +  syn match   pascalSymbolOperator      "<>"
    +  syn match   pascalSymbolOperator      ":="
    +  syn match   pascalSymbolOperator      "[()]"
    +  syn match   pascalSymbolOperator      "\.\."
    +  syn match   pascalSymbolOperator       "[\^.]"
    +  syn match   pascalMatrixDelimiter	"[][]"
    +  "if you prefer you can highlight the range
    +  "syn match  pascalMatrixDelimiter	"[\d\+\.\.\d\+]"
    +endif
    +
    +syn match  pascalNumber		"-\=\<\d\+\>"
    +if !exists("pascal_traditional")
    +  syn match  pascalHexNumber	"\$\x\+\>"
    +endif
    +if exists("pascal_fpc")
    +  syn match	pascalOctNumber "&\o\+\>"
    +  syn match	pascalBinNumber	"%[01]\+\>"
    +endif
    +if exists("pascal_gpc")
    +  syn match  pascalExtendedNumber	"\%([2-9]\|[12]\d\|3[0-6]\)#[[:alnum:]]\+\>"
    +endif
    +
    +syn match  pascalFloat		"-\=\<\d\+\.\d\+\>"
    +syn match  pascalFloat		"-\=\<\d\+\.\d\+[eE]-\=\d\+\>"
    +
    +if !exists("pascal_traditional")
    +  " allow leading zeros
    +  syn match pascalControlCharacter	"#\%([01]\=\d\=\d\|2[0-4]\d\|25[0-5]\)\>"
    +endif
    +
    +if exists("pascal_no_tabs")
    +  syn match pascalShowTab "\t"
    +endif
    +
    +syn region pascalComment	start="(\*\|{"  end="\*)\|}" contains=pascalTodo,pascalSpaceError
    +
    +
    +if !exists("pascal_no_functions")
    +  " array functions
    +  syn keyword pascalFunction	pack unpack
    +
    +  " memory function
    +  syn keyword pascalFunction	Dispose New
    +
    +  " math functions
    +  syn keyword pascalFunction	Abs Arctan Cos Exp Ln Sin Sqr Sqrt
    +
    +  " file functions
    +  syn keyword pascalFunction	Eof Eoln Write Writeln
    +  syn keyword pascalPredefined	Input Output
    +
    +  if exists("pascal_traditional")
    +    " These functions do not seem to be defined in Turbo Pascal
    +    syn keyword pascalFunction	Get Page Put 
    +  endif
    +
    +  " ordinal functions
    +  syn keyword pascalFunction	Odd Pred Succ
    +
    +  " transfert functions
    +  syn keyword pascalFunction	Chr Ord Round Trunc
    +endif
    +
    +
    +if !exists("pascal_traditional")
    +
    +  syn keyword pascalStatement	constructor destructor implementation inherited
    +  syn keyword pascalStatement	interface unit uses
    +  syn keyword pascalModifier	absolute assembler external far forward inline
    +  syn keyword pascalModifier	interrupt near virtual 
    +  syn keyword pascalAccess	private public strict
    +  syn keyword pascalStruct	object 
    +  syn keyword pascalOperator	shl shr xor
    +
    +  syn region pascalPreProc	start="(\*\$"  end="\*)" contains=pascalTodo
    +  syn region pascalPreProc	start="{\$"  end="}"
    +
    +  syn region  pascalAsm		matchgroup=pascalAsmKey start="\" end="\" contains=pascalComment,pascalPreProc
    +
    +  syn keyword pascalType	ShortInt LongInt Byte Word
    +  syn keyword pascalType	ByteBool WordBool LongBool
    +  syn keyword pascalType	Cardinal LongWord
    +  syn keyword pascalType	Single Double Extended Comp
    +  syn keyword pascalType	PChar
    +
    +  syn keyword pascalPredefined	self
    +
    +  if !exists ("pascal_fpc")
    +    syn keyword pascalPredefined	Result
    +  endif
    +
    +  if exists("pascal_fpc")
    +    syn region pascalComment        start="//" end="$" contains=pascalTodo,pascalSpaceError
    +    syn keyword pascalStatement	fail otherwise operator
    +    syn keyword pascalDirective	popstack
    +    syn keyword pascalType	ShortString AnsiString WideString
    +  endif
    +
    +  if exists("pascal_gpc")
    +    syn region pascalComment        start="//" end="$" contains=pascalTodo,pascalSpaceError
    +    syn keyword pascalType	SmallInt
    +    syn keyword pascalType	AnsiChar
    +    syn keyword pascalType	PAnsiChar
    +  endif
    +
    +  if exists("pascal_delphi")
    +    syn region pascalComment	start="//"  end="$" contains=pascalTodo,pascalSpaceError
    +    syn region pascalDocumentation	start="///" end="$" contains=pascalTodo,pascalSpaceError
    +    syn region pascalDocumentation	start="{!"  end="}" contains=pascalTodo,pascalSpaceError
    +    syn keyword pascalType	SmallInt Int64
    +    syn keyword pascalType	Real48 Currency
    +    syn keyword pascalType	AnsiChar WideChar
    +    syn keyword pascalType	ShortString AnsiString WideString
    +    syn keyword pascalType	PAnsiChar PWideChar
    +    syn match  pascalFloat	"-\=\<\d\+\.\d\+[dD]-\=\d\+\>"
    +    syn match  pascalStringEscape	contained "#[12][0-9]\=[0-9]\="
    +    syn keyword pascalStruct	class dispinterface
    +    syn keyword pascalException	try except raise at on finally
    +    syn keyword pascalStatement	out
    +    syn keyword pascalStatement	library package 
    +    syn keyword pascalStatement	initialization finalization uses exports
    +    syn keyword pascalStatement	property out resourcestring threadvar
    +    syn keyword pascalModifier	contains
    +    syn keyword pascalModifier	overridden reintroduce abstract sealed
    +    syn keyword pascalModifier	override export dynamic name message
    +    syn keyword pascalModifier	dispid index stored default nodefault readonly
    +    syn keyword pascalModifier	writeonly implements overload requires resident
    +    syn keyword pascalAccess	protected published automated
    +    syn keyword pascalDirective	register pascal cvar cdecl stdcall safecall
    +    syn keyword pascalOperator	as is
    +  endif
    +
    +  if exists("pascal_no_functions")
    +    "syn keyword pascalModifier	read write
    +    "may confuse with Read and Write functions.  Not easy to handle.
    +  else
    +    " control flow functions
    +    syn keyword pascalFunction	Break Continue Exit Halt RunError
    +
    +    " ordinal functions
    +    syn keyword pascalFunction	Dec Inc High Low
    +
    +    " math functions
    +    syn keyword pascalFunction	Frac Int Pi
    +
    +    " string functions
    +    syn keyword pascalFunction	Concat Copy Delete Insert Length Pos Str Val
    +
    +    " memory function
    +    syn keyword pascalFunction	FreeMem GetMem MaxAvail MemAvail
    +
    +    " pointer and address functions
    +    syn keyword pascalFunction	Addr Assigned CSeg DSeg Ofs Ptr Seg SPtr SSeg
    +
    +    " misc functions
    +    syn keyword pascalFunction	Exclude FillChar Hi Include Lo Move ParamCount
    +    syn keyword pascalFunction	ParamStr Random Randomize SizeOf Swap TypeOf
    +    syn keyword pascalFunction	UpCase
    +
    +    " predefined variables
    +    syn keyword pascalPredefined ErrorAddr ExitCode ExitProc FileMode FreeList
    +    syn keyword pascalPredefined FreeZero HeapEnd HeapError HeapOrg HeapPtr
    +    syn keyword pascalPredefined InOutRes OvrCodeList OvrDebugPtr OvrDosHandle
    +    syn keyword pascalPredefined OvrEmsHandle OvrHeapEnd OvrHeapOrg OvrHeapPtr
    +    syn keyword pascalPredefined OvrHeapSize OvrLoadList PrefixSeg RandSeed
    +    syn keyword pascalPredefined SaveInt00 SaveInt02 SaveInt1B SaveInt21
    +    syn keyword pascalPredefined SaveInt23 SaveInt24 SaveInt34 SaveInt35
    +    syn keyword pascalPredefined SaveInt36 SaveInt37 SaveInt38 SaveInt39
    +    syn keyword pascalPredefined SaveInt3A SaveInt3B SaveInt3C SaveInt3D
    +    syn keyword pascalPredefined SaveInt3E SaveInt3F SaveInt75 SegA000 SegB000
    +    syn keyword pascalPredefined SegB800 SelectorInc StackLimit Test8087
    +
    +    " file functions
    +    syn keyword pascalFunction	Append Assign BlockRead BlockWrite ChDir Close
    +    syn keyword pascalFunction	Erase FilePos FileSize Flush GetDir IOResult
    +    syn keyword pascalFunction	MkDir Read Readln Rename Reset Rewrite RmDir
    +    syn keyword pascalFunction	Seek SeekEof SeekEoln SetTextBuf Truncate
    +
    +    " crt unit
    +    syn keyword pascalFunction	AssignCrt ClrEol ClrScr Delay DelLine GotoXY
    +    syn keyword pascalFunction	HighVideo InsLine KeyPressed LowVideo NormVideo
    +    syn keyword pascalFunction	NoSound ReadKey Sound TextBackground TextColor
    +    syn keyword pascalFunction	TextMode WhereX WhereY Window
    +    syn keyword pascalPredefined CheckBreak CheckEOF CheckSnow DirectVideo
    +    syn keyword pascalPredefined LastMode TextAttr WindMin WindMax
    +    syn keyword pascalFunction BigCursor CursorOff CursorOn
    +    syn keyword pascalConstant Black Blue Green Cyan Red Magenta Brown
    +    syn keyword pascalConstant LightGray DarkGray LightBlue LightGreen
    +    syn keyword pascalConstant LightCyan LightRed LightMagenta Yellow White
    +    syn keyword pascalConstant Blink ScreenWidth ScreenHeight bw40
    +    syn keyword pascalConstant co40 bw80 co80 mono
    +    syn keyword pascalPredefined TextChar 
    +
    +    " DOS unit
    +    syn keyword pascalFunction	AddDisk DiskFree DiskSize DosExitCode DosVersion
    +    syn keyword pascalFunction	EnvCount EnvStr Exec Expand FindClose FindFirst
    +    syn keyword pascalFunction	FindNext FSearch FSplit GetCBreak GetDate
    +    syn keyword pascalFunction	GetEnv GetFAttr GetFTime GetIntVec GetTime
    +    syn keyword pascalFunction	GetVerify Intr Keep MSDos PackTime SetCBreak
    +    syn keyword pascalFunction	SetDate SetFAttr SetFTime SetIntVec SetTime
    +    syn keyword pascalFunction	SetVerify SwapVectors UnPackTime
    +    syn keyword pascalConstant	FCarry FParity FAuxiliary FZero FSign FOverflow
    +    syn keyword pascalConstant	Hidden Sysfile VolumeId Directory Archive
    +    syn keyword pascalConstant	AnyFile fmClosed fmInput fmOutput fmInout
    +    syn keyword pascalConstant	TextRecNameLength TextRecBufSize
    +    syn keyword pascalType	ComStr PathStr DirStr NameStr ExtStr SearchRec
    +    syn keyword pascalType	FileRec TextBuf TextRec Registers DateTime
    +    syn keyword pascalPredefined DosError
    +
    +    "Graph Unit
    +    syn keyword pascalFunction	Arc Bar Bar3D Circle ClearDevice ClearViewPort
    +    syn keyword pascalFunction	CloseGraph DetectGraph DrawPoly Ellipse
    +    syn keyword pascalFunction	FillEllipse FillPoly FloodFill GetArcCoords
    +    syn keyword pascalFunction	GetAspectRatio GetBkColor GetColor
    +    syn keyword pascalFunction	GetDefaultPalette GetDriverName GetFillPattern
    +    syn keyword pascalFunction	GetFillSettings GetGraphMode GetImage
    +    syn keyword pascalFunction	GetLineSettings GetMaxColor GetMaxMode GetMaxX
    +    syn keyword pascalFunction	GetMaxY GetModeName GetModeRange GetPalette
    +    syn keyword pascalFunction	GetPaletteSize GetPixel GetTextSettings
    +    syn keyword pascalFunction	GetViewSettings GetX GetY GraphDefaults
    +    syn keyword pascalFunction	GraphErrorMsg GraphResult ImageSize InitGraph
    +    syn keyword pascalFunction	InstallUserDriver InstallUserFont Line LineRel
    +    syn keyword pascalFunction	LineTo MoveRel MoveTo OutText OutTextXY
    +    syn keyword pascalFunction	PieSlice PutImage PutPixel Rectangle
    +    syn keyword pascalFunction	RegisterBGIDriver RegisterBGIFont
    +    syn keyword pascalFunction	RestoreCRTMode Sector SetActivePage
    +    syn keyword pascalFunction	SetAllPallette SetAspectRatio SetBkColor
    +    syn keyword pascalFunction	SetColor SetFillPattern SetFillStyle
    +    syn keyword pascalFunction	SetGraphBufSize SetGraphMode SetLineStyle
    +    syn keyword pascalFunction	SetPalette SetRGBPalette SetTextJustify
    +    syn keyword pascalFunction	SetTextStyle SetUserCharSize SetViewPort
    +    syn keyword pascalFunction	SetVisualPage SetWriteMode TextHeight TextWidth
    +    syn keyword pascalType	ArcCoordsType FillPatternType FillSettingsType
    +    syn keyword pascalType	LineSettingsType PaletteType PointType
    +    syn keyword pascalType	TextSettingsType ViewPortType
    +
    +    " string functions
    +    syn keyword pascalFunction	StrAlloc StrBufSize StrCat StrComp StrCopy
    +    syn keyword pascalFunction	StrDispose StrECopy StrEnd StrFmt StrIComp
    +    syn keyword pascalFunction	StrLCat StrLComp StrLCopy StrLen StrLFmt
    +    syn keyword pascalFunction	StrLIComp StrLower StrMove StrNew StrPas
    +    syn keyword pascalFunction	StrPCopy StrPLCopy StrPos StrRScan StrScan
    +    syn keyword pascalFunction	StrUpper
    +  endif
    +
    +endif
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link pascalAccess		pascalStatement
    +hi def link pascalBoolean		Boolean
    +hi def link pascalComment		Comment
    +hi def link pascalDocumentation		Comment
    +hi def link pascalConditional		Conditional
    +hi def link pascalConstant		Constant
    +hi def link pascalControlCharacter	Character
    +hi def link pascalDelimiter		Identifier
    +hi def link pascalDirective		pascalStatement
    +hi def link pascalException		Exception
    +hi def link pascalFloat			Float
    +hi def link pascalFunction		Function
    +hi def link pascalLabel			Label
    +hi def link pascalMatrixDelimiter	Identifier
    +hi def link pascalModifier		Type
    +hi def link pascalNumber		Number
    +hi def link pascalExtendedNumber	Number
    +hi def link pascalBinNumber		pascalNumber
    +hi def link pascalHexNumber		pascalNumber
    +hi def link pascalOctNumber		pascalNumber
    +hi def link pascalOperator		Operator
    +hi def link pascalPredefined		pascalStatement
    +hi def link pascalPreProc		PreProc
    +hi def link pascalRepeat		Repeat
    +hi def link pascalSpaceError		Error
    +hi def link pascalStatement		Statement
    +hi def link pascalString		String
    +hi def link pascalStringEscape		Special
    +hi def link pascalStringEscapeGPC	Special
    +hi def link pascalStringError		Error
    +hi def link pascalStruct		pascalStatement
    +hi def link pascalSymbolOperator	pascalOperator
    +hi def link pascalTodo			Todo
    +hi def link pascalType			Type
    +hi def link pascalUnclassified		pascalStatement
    +"  hi def link pascalAsm		Assembler
    +hi def link pascalError			Error
    +hi def link pascalAsmKey		pascalStatement
    +hi def link pascalShowTab		Error
    +
    +
    +
    +let b:current_syntax = "pascal"
    +
    +" vim: nowrap sw=2 sts=2 ts=8 noet:
    diff --git a/.config/vim/syntax/passwd.vim b/.config/vim/syntax/passwd.vim
    new file mode 100644
    index 0000000..ad90202
    --- /dev/null
    +++ b/.config/vim/syntax/passwd.vim
    @@ -0,0 +1,71 @@
    +" Vim syntax file
    +" Language:             passwd(5) password file
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2006-10-03
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn match   passwdBegin         display '^' nextgroup=passwdAccount
    +
    +syn match   passwdAccount       contained display '[^:]\+'
    +                                \ nextgroup=passwdPasswordColon
    +
    +syn match   passwdPasswordColon contained display ':'
    +                                \ nextgroup=passwdPassword,passwdShadow
    +
    +syn match   passwdPassword      contained display '[^:]\+'
    +                                \ nextgroup=passwdUIDColon
    +
    +syn match   passwdShadow        contained display '[x*!]'
    +                                \ nextgroup=passwdUIDColon
    +
    +syn match   passwdUIDColon      contained display ':' nextgroup=passwdUID
    +
    +syn match   passwdUID           contained display '\d\{0,10}'
    +                                \ nextgroup=passwdGIDColon
    +
    +syn match   passwdGIDColon      contained display ':' nextgroup=passwdGID
    +
    +syn match   passwdGID           contained display '\d\{0,10}'
    +                                \ nextgroup=passwdGecosColon
    +
    +syn match   passwdGecosColon    contained display ':' nextgroup=passwdGecos
    +
    +syn match   passwdGecos         contained display '[^:]*'
    +                                \ nextgroup=passwdDirColon
    +
    +syn match   passwdDirColon      contained display ':' nextgroup=passwdDir
    +
    +syn match   passwdDir           contained display '/[^:]*'
    +                                \ nextgroup=passwdShellColon
    +
    +syn match   passwdShellColon    contained display ':'
    +                                \ nextgroup=passwdShell
    +
    +syn match   passwdShell         contained display '.*'
    +
    +hi def link passwdColon         Normal
    +hi def link passwdAccount       Identifier
    +hi def link passwdPasswordColon passwdColon
    +hi def link passwdPassword      Number
    +hi def link passwdShadow        Special
    +hi def link passwdUIDColon      passwdColon
    +hi def link passwdUID           Number
    +hi def link passwdGIDColon      passwdColon
    +hi def link passwdGID           Number
    +hi def link passwdGecosColon    passwdColon
    +hi def link passwdGecos         Comment
    +hi def link passwdDirColon      passwdColon
    +hi def link passwdDir           Type
    +hi def link passwdShellColon    passwdColon
    +hi def link passwdShell         Operator
    +
    +let b:current_syntax = "passwd"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/pbtxt.vim b/.config/vim/syntax/pbtxt.vim
    new file mode 100644
    index 0000000..92a7556
    --- /dev/null
    +++ b/.config/vim/syntax/pbtxt.vim
    @@ -0,0 +1,44 @@
    +" Vim syntax file
    +" Language:             Protobuf Text Format
    +" Maintainer:           Lakshay Garg 
    +" Last Change:          2020 Nov 17
    +" Homepage:             https://github.com/lakshayg/vim-pbtxt
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn case ignore
    +
    +syn keyword pbtxtTodo     TODO FIXME contained
    +syn keyword pbtxtBool     true false contained
    +
    +syn match   pbtxtInt      display   "\<\(0\|[1-9]\d*\)\>"
    +syn match   pbtxtHex      display   "\<0[xX]\x\+\>"
    +syn match   pbtxtFloat    display   "\(0\|[1-9]\d*\)\=\.\d*"
    +syn match   pbtxtMessage  display   "^\s*\w\+\s*{"me=e-1
    +syn match   pbtxtField    display   "^\s*\w\+:"me=e-1
    +syn match   pbtxtEnum     display   ":\s*\a\w\+"ms=s+1   contains=pbtxtBool
    +syn region  pbtxtString   start=+"+ skip=+\\"+ end=+"+   contains=@Spell
    +syn region  pbtxtComment  start="#" end="$"      keepend contains=pbtxtTodo,@Spell
    +
    +hi def link pbtxtTodo     Todo
    +hi def link pbtxtBool     Boolean
    +hi def link pbtxtInt      Number
    +hi def link pbtxtHex      Number
    +hi def link pbtxtFloat    Float
    +hi def link pbtxtMessage  Structure
    +hi def link pbtxtField    Identifier
    +hi def link pbtxtEnum     Define
    +hi def link pbtxtString   String
    +hi def link pbtxtComment  Comment
    +
    +let b:current_syntax = "pbtxt"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim: nowrap sw=2 sts=2 ts=8 noet
    diff --git a/.config/vim/syntax/pcap.vim b/.config/vim/syntax/pcap.vim
    new file mode 100644
    index 0000000..e0eed63
    --- /dev/null
    +++ b/.config/vim/syntax/pcap.vim
    @@ -0,0 +1,48 @@
    +" Vim syntax file
    +" Config file:	printcap
    +" Maintainer:	Lennart Schultz  (defunct)
    +"		Modified by Bram
    +" Last Change:	2003 May 11
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +"define keywords
    +setlocal isk=@,46-57,_,-,#,=,192-255
    +
    +"first all the bad guys
    +syn match pcapBad '^.\+$'	       "define any line as bad
    +syn match pcapBadword '\k\+' contained "define any sequence of keywords as bad
    +syn match pcapBadword ':' contained    "define any single : as bad
    +syn match pcapBadword '\\' contained   "define any single \ as bad
    +"then the good boys
    +" Boolean keywords
    +syn match pcapKeyword contained ':\(fo\|hl\|ic\|rs\|rw\|sb\|sc\|sf\|sh\)'
    +" Numeric Keywords
    +syn match pcapKeyword contained ':\(br\|du\|fc\|fs\|mx\|pc\|pl\|pw\|px\|py\|xc\|xs\)#\d\+'
    +" String Keywords
    +syn match pcapKeyword contained ':\(af\|cf\|df\|ff\|gf\|if\|lf\|lo\|lp\|nd\|nf\|of\|rf\|rg\|rm\|rp\|sd\|st\|tf\|tr\|vf\)=\k*'
    +" allow continuation
    +syn match pcapEnd ':\\$' contained
    +"
    +syn match pcapDefineLast '^\s.\+$' contains=pcapBadword,pcapKeyword
    +syn match pcapDefine '^\s.\+$' contains=pcapBadword,pcapKeyword,pcapEnd
    +syn match pcapHeader '^\k[^|]\+\(|\k[^|]\+\)*:\\$'
    +syn match pcapComment "#.*$"
    +
    +syn sync minlines=50
    +
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link pcapBad WarningMsg
    +hi def link pcapBadword WarningMsg
    +hi def link pcapComment Comment
    +
    +
    +let b:current_syntax = "pcap"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/pccts.vim b/.config/vim/syntax/pccts.vim
    new file mode 100644
    index 0000000..7800357
    --- /dev/null
    +++ b/.config/vim/syntax/pccts.vim
    @@ -0,0 +1,89 @@
    +" Vim syntax file
    +" Language:	PCCTS
    +" Maintainer:	Scott Bigham 
    +" Last Change:	10 Aug 1999
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Read the C++ syntax to start with
    +syn include @cppTopLevel syntax/cpp.vim
    +
    +syn region pcctsAction matchgroup=pcctsDelim start="<<" end=">>?\=" contains=@cppTopLevel,pcctsRuleRef
    +
    +syn region pcctsArgBlock matchgroup=pcctsDelim start="\(>\s*\)\=\[" end="\]" contains=@cppTopLevel,pcctsRuleRef
    +
    +syn region pcctsString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=pcctsSpecialChar
    +syn match  pcctsSpecialChar "\\\\\|\\\"" contained
    +
    +syn region pcctsComment start="/\*" end="\*/" contains=cTodo
    +syn match  pcctsComment "//.*$" contains=cTodo
    +
    +syn region pcctsDirective start="^\s*#header\s\+<<" end=">>" contains=pcctsAction keepend
    +syn match  pcctsDirective "^\s*#parser\>.*$" contains=pcctsString,pcctsComment
    +syn match  pcctsDirective "^\s*#tokdefs\>.*$" contains=pcctsString,pcctsComment
    +syn match  pcctsDirective "^\s*#token\>.*$" contains=pcctsString,pcctsAction,pcctsTokenName,pcctsComment
    +syn region pcctsDirective start="^\s*#tokclass\s\+[A-Z]\i*\s\+{" end="}" contains=pcctsString,pcctsTokenName
    +syn match  pcctsDirective "^\s*#lexclass\>.*$" contains=pcctsTokenName
    +syn region pcctsDirective start="^\s*#errclass\s\+[^{]\+\s\+{" end="}" contains=pcctsString,pcctsTokenName
    +syn match pcctsDirective "^\s*#pred\>.*$" contains=pcctsTokenName,pcctsAction
    +
    +syn cluster pcctsInRule contains=pcctsString,pcctsRuleName,pcctsTokenName,pcctsAction,pcctsArgBlock,pcctsSubRule,pcctsLabel,pcctsComment
    +
    +syn region pcctsRule start="\<[a-z][A-Za-z0-9_]*\>\(\s*\[[^]]*\]\)\=\(\s*>\s*\[[^]]*\]\)\=\s*:" end=";" contains=@pcctsInRule
    +
    +syn region pcctsSubRule matchgroup=pcctsDelim start="(" end=")\(+\|\*\|?\(\s*=>\)\=\)\=" contains=@pcctsInRule contained
    +syn region pcctsSubRule matchgroup=pcctsDelim start="{" end="}" contains=@pcctsInRule contained
    +
    +syn match pcctsRuleName  "\<[a-z]\i*\>" contained
    +syn match pcctsTokenName "\<[A-Z]\i*\>" contained
    +
    +syn match pcctsLabel "\<\I\i*:\I\i*" contained contains=pcctsLabelHack,pcctsRuleName,pcctsTokenName
    +syn match pcctsLabel "\<\I\i*:\"\([^\\]\|\\.\)*\"" contained contains=pcctsLabelHack,pcctsString
    +syn match pcctsLabelHack "\<\I\i*:" contained
    +
    +syn match pcctsRuleRef "\$\I\i*\>" contained
    +syn match pcctsRuleRef "\$\d\+\(\.\d\+\)\>" contained
    +
    +syn keyword pcctsClass     class   nextgroup=pcctsClassName skipwhite
    +syn match   pcctsClassName "\<\I\i*\>" contained nextgroup=pcctsClassBlock skipwhite skipnl
    +syn region pcctsClassBlock start="{" end="}" contained contains=pcctsRule,pcctsComment,pcctsDirective,pcctsAction,pcctsException,pcctsExceptionHandler
    +
    +syn keyword pcctsException exception nextgroup=pcctsExceptionRuleRef skipwhite
    +syn match pcctsExceptionRuleRef "\[\I\i*\]" contained contains=pcctsExceptionID
    +syn match pcctsExceptionID "\I\i*" contained
    +syn keyword pcctsExceptionHandler	catch default
    +syn keyword pcctsExceptionHandler	NoViableAlt NoSemViableAlt
    +syn keyword pcctsExceptionHandler	MismatchedToken
    +
    +syn sync clear
    +syn sync match pcctsSyncAction grouphere pcctsAction "<<"
    +syn sync match pcctsSyncAction "<<\([^>]\|>[^>]\)*>>"
    +syn sync match pcctsSyncRule grouphere pcctsRule "\<[a-z][A-Za-z0-9_]*\>\s*\[[^]]*\]\s*:"
    +syn sync match pcctsSyncRule grouphere pcctsRule "\<[a-z][A-Za-z0-9_]*\>\(\s*\[[^]]*\]\)\=\s*>\s*\[[^]]*\]\s*:"
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link pcctsDelim		Special
    +hi def link pcctsTokenName		Identifier
    +hi def link pcctsRuleName		Statement
    +hi def link pcctsLabelHack		Label
    +hi def link pcctsDirective		PreProc
    +hi def link pcctsString		String
    +hi def link pcctsComment		Comment
    +hi def link pcctsClass		Statement
    +hi def link pcctsClassName		Identifier
    +hi def link pcctsException		Statement
    +hi def link pcctsExceptionHandler	Keyword
    +hi def link pcctsExceptionRuleRef	pcctsDelim
    +hi def link pcctsExceptionID	Identifier
    +hi def link pcctsRuleRef		Identifier
    +hi def link pcctsSpecialChar	SpecialChar
    +
    +
    +let b:current_syntax = "pccts"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/pdf.vim b/.config/vim/syntax/pdf.vim
    new file mode 100644
    index 0000000..86d80da
    --- /dev/null
    +++ b/.config/vim/syntax/pdf.vim
    @@ -0,0 +1,73 @@
    +" Vim syntax file
    +" Language:	PDF
    +" Maintainer:	Tim Pope 
    +" Last Change:	2007 Dec 16
    +
    +if exists("b:current_syntax")
    +    finish
    +endif
    +
    +if !exists("main_syntax")
    +    let main_syntax = 'pdf'
    +endif
    +
    +syn include @pdfXML syntax/xml.vim
    +
    +syn case match
    +
    +syn cluster pdfObjects contains=pdfBoolean,pdfConstant,pdfNumber,pdfFloat,pdfName,pdfHexString,pdfString,pdfArray,pdfHash,pdfReference,pdfComment
    +syn keyword pdfBoolean  true false contained
    +syn keyword pdfConstant null       contained
    +syn match   pdfNumber "[+-]\=\<\d\+\>"
    +syn match   pdfFloat   "[+-]\=\<\%(\d\+\.\|\d*\.\d\+\)\>" contained
    +
    +syn match   pdfNameError "#\X\|#\x\X\|#00" contained containedin=pdfName
    +syn match   pdfSpecialChar "#\x\x" contained containedin=pdfName
    +syn match   pdfName   "/[^[:space:]\[\](){}<>/]*"   contained
    +syn match   pdfHexError  "[^[:space:][:xdigit:]<>]" contained
    +"syn match   pdfHexString "<\s*\x[^<>]*\x\s*>"    contained contains=pdfHexError
    +"syn match   pdfHexString "<\s*\x\=\s*>"          contained
    +syn region  pdfHexString matchgroup=pdfDelimiter start="<<\@!" end=">" contained contains=pdfHexError
    +syn match   pdfStringError "\\."      contained containedin=pdfString
    +syn match   pdfSpecialChar "\\\%(\o\{1,3\}\|[nrtbf()\\]\)"  contained containedin=pdfString
    +syn region  pdfString matchgroup=pdfDelimiter start="\\\@>" contains=@pdfObjects contained
    +syn match   pdfReference "\<\d\+\s\+\d\+\s\+R\>"
    +"syn keyword pdfOperator R contained containedin=pdfReference
    +
    +syn region  pdfObject matchgroup=pdfType start="\"     end="\" contains=@pdfObjects
    +syn region  pdfObject matchgroup=pdfType start="\
    +" Homepage:      https://github.com/vim-perl/vim-perl
    +" Bugs/requests: https://github.com/vim-perl/vim-perl/issues
    +" License:       Vim License (see :help license)
    +" Last Change:   2022 Jun 13
    +" Contributors:  Andy Lester 
    +"                Hinrik Örn Sigurðsson 
    +"                Lukas Mai 
    +"                Nick Hibma 
    +"                Sonia Heimann 
    +"                Rob Hoelz 
    +"                Doug Kearns 
    +"                and many others.
    +"
    +" Please download the most recent version first, before mailing
    +" any comments.
    +"
    +" The following parameters are available for tuning the
    +" perl syntax highlighting, with defaults given:
    +"
    +" let perl_include_pod = 1
    +" unlet perl_no_scope_in_variables
    +" unlet perl_no_extended_vars
    +" unlet perl_string_as_statement
    +" unlet perl_no_sync_on_sub
    +" unlet perl_no_sync_on_global_var
    +" let perl_sync_dist = 100
    +" unlet perl_fold
    +" unlet perl_fold_blocks
    +" unlet perl_nofold_packages
    +" unlet perl_nofold_subs
    +" unlet perl_fold_anonymous_subs
    +" unlet perl_no_subprototype_error
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +" POD starts with ^= and ends with ^=cut
    +
    +if get(g:, 'perl_include_pod', 1)
    +  " Include a while extra syntax file
    +  syn include @Pod syntax/pod.vim
    +  unlet b:current_syntax
    +  if get(g:, 'perl_fold', 1)
    +    syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold extend
    +    syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold extend
    +  else
    +    syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend
    +    syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend
    +  endif
    +else
    +  " Use only the bare minimum of rules
    +  if get(g:, 'perl_fold', 1)
    +    syn region perlPOD start="^=[a-z]" end="^=cut" fold
    +  else
    +    syn region perlPOD start="^=[a-z]" end="^=cut"
    +  endif
    +endif
    +
    +
    +syn cluster perlTop		contains=TOP
    +
    +syn region perlBraces start="{" end="}" transparent extend
    +
    +" All keywords
    +"
    +syn match perlConditional		"\<\%(if\|elsif\|unless\|given\|when\|default\)\>"
    +syn match perlConditional		"\\)\|\>\)" contains=perlElseIfError skipwhite skipnl skipempty
    +syn match perlRepeat			"\<\%(while\|for\%(each\)\=\|do\|until\|continue\)\>"
    +syn match perlOperator			"\<\%(defined\|undef\|eq\|ne\|[gl][et]\|cmp\|not\|and\|or\|xor\|not\|bless\|ref\|do\)\>"
    +" for some reason, adding this as the nextgroup for perlControl fixes BEGIN
    +" folding issues...
    +syn match perlFakeGroup 		"" contained
    +syn match perlControl			"\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>\_s*" nextgroup=perlFakeGroup
    +
    +syn match perlStatementStorage		"\<\%(my\|our\|local\|state\)\>"
    +syn match perlStatementControl		"\<\%(return\|last\|next\|redo\|goto\|break\)\>"
    +syn match perlStatementScalar		"\<\%(chom\=p\|chr\|crypt\|r\=index\|lc\%(first\)\=\|length\|ord\|pack\|sprintf\|substr\|fc\|uc\%(first\)\=\)\>"
    +syn match perlStatementRegexp		"\<\%(pos\|quotemeta\|split\|study\)\>"
    +syn match perlStatementNumeric		"\<\%(abs\|atan2\|cos\|exp\|hex\|int\|log\|oct\|rand\|sin\|sqrt\|srand\)\>"
    +syn match perlStatementList		"\<\%(splice\|unshift\|shift\|push\|pop\|join\|reverse\|grep\|map\|sort\|unpack\)\>"
    +syn match perlStatementHash		"\<\%(delete\|each\|exists\|keys\|values\)\>"
    +syn match perlStatementIOfunc		"\<\%(syscall\|dbmopen\|dbmclose\)\>"
    +syn match perlStatementFiledesc		"\<\%(binmode\|close\%(dir\)\=\|eof\|fileno\|getc\|lstat\|printf\=\|read\%(dir\|line\|pipe\)\|rewinddir\|say\|select\|stat\|tell\%(dir\)\=\|write\)\>" nextgroup=perlFiledescStatementNocomma skipwhite
    +syn match perlStatementFiledesc		"\<\%(fcntl\|flock\|ioctl\|open\%(dir\)\=\|read\|seek\%(dir\)\=\|sys\%(open\|read\|seek\|write\)\|truncate\)\>" nextgroup=perlFiledescStatementComma skipwhite
    +syn match perlStatementVector		"\"
    +syn match perlStatementFiles		"\<\%(ch\%(dir\|mod\|own\|root\)\|glob\|link\|mkdir\|readlink\|rename\|rmdir\|symlink\|umask\|unlink\|utime\)\>"
    +syn match perlStatementFiles		"-[rwxoRWXOezsfdlpSbctugkTBMAC]\>"
    +syn match perlStatementFlow		"\<\%(caller\|die\|dump\|eval\|exit\|wantarray\|evalbytes\)\>"
    +syn match perlStatementInclude		"\<\%(require\|import\|unimport\)\>"
    +syn match perlStatementInclude		"\<\%(use\|no\)\s\+\%(\%(attributes\|attrs\|autodie\%(::\%(exception\%(::system\)\=\|hints\|skip\)\)\=\|autouse\|parent\|base\|big\%(int\|num\|rat\)\|blib\|bytes\|charnames\|constant\|deprecate\|diagnostics\|encoding\%(::warnings\)\=\|experimental\|feature\|fields\|filetest\|if\|integer\|less\|lib\|locale\|mro\|ok\|open\|ops\|overload\|overloading\|re\|sigtrap\|sort\|strict\|subs\|threads\%(::shared\)\=\|utf8\|vars\|version\|vmsish\|warnings\%(::register\)\=\)\>\)\="
    +syn match perlStatementProc		"\<\%(alarm\|exec\|fork\|get\%(pgrp\|ppid\|priority\)\|kill\|pipe\|set\%(pgrp\|priority\)\|sleep\|system\|times\|wait\%(pid\)\=\)\>"
    +syn match perlStatementSocket		"\<\%(accept\|bind\|connect\|get\%(peername\|sock\%(name\|opt\)\)\|listen\|recv\|send\|setsockopt\|shutdown\|socket\%(pair\)\=\)\>"
    +syn match perlStatementIPC		"\<\%(msg\%(ctl\|get\|rcv\|snd\)\|sem\%(ctl\|get\|op\)\|shm\%(ctl\|get\|read\|write\)\)\>"
    +syn match perlStatementNetwork		"\<\%(\%(end\|[gs]et\)\%(host\|net\|proto\|serv\)ent\|get\%(\%(host\|net\)by\%(addr\|name\)\|protoby\%(name\|number\)\|servby\%(name\|port\)\)\)\>"
    +syn match perlStatementPword		"\<\%(get\%(pw\%(uid\|nam\)\|gr\%(gid\|nam\)\|login\)\)\|\%(end\|[gs]et\)\%(pw\|gr\)ent\>"
    +syn match perlStatementTime		"\<\%(gmtime\|localtime\|time\)\>"
    +
    +syn match perlStatementMisc		"\<\%(warn\|format\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>"
    +
    +syn keyword perlTodo			TODO TODO: TBD TBD: FIXME FIXME: XXX XXX: NOTE NOTE: contained
    +
    +syn region perlStatementIndirObjWrap   matchgroup=perlStatementIndirObj start="\%(\<\%(map\|grep\|sort\|printf\=\|say\|system\|exec\)\>\s*\)\@<={" end="}" transparent extend
    +
    +syn match perlLabel      "^\s*\h\w*\s*::\@!\%(\ is *not* considered as part of the
    +" variable - there again, too complicated and too slow.
    +
    +" Special variables first ($^A, ...) and ($|, $', ...)
    +syn match  perlVarPlain		 "$^[ACDEFHILMNOPRSTVWX]\="
    +syn match  perlVarPlain		 "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]"
    +syn match  perlVarPlain		 "@[-+]"
    +syn match  perlVarPlain		 "$\%(0\|[1-9]\d*\)"
    +" Same as above, but avoids confusion in $::foo (equivalent to $main::foo)
    +syn match  perlVarPlain		 "$::\@!"
    +" These variables are not recognized within matches.
    +syn match  perlVarNotInMatches	 "$[|)]"
    +" This variable is not recognized within matches delimited by m//.
    +syn match  perlVarSlash		 "$/"
    +
    +" And plain identifiers
    +syn match  perlPackageRef	 "[$@#%*&]\%(\%(::\|'\)\=\I\i*\%(\%(::\|'\)\I\i*\)*\)\=\%(::\|'\)\I"ms=s+1,me=e-1 contained
    +
    +" To not highlight packages in variables as a scope reference - i.e. in
    +" $pack::var, pack:: is a scope, just set "perl_no_scope_in_variables"
    +" If you don't want complex things like @{${"foo"}} to be processed,
    +" just set the variable "perl_no_extended_vars"...
    +
    +if !get(g:, 'perl_no_scope_in_variables', 0)
    +  syn match  perlVarPlain       "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref
    +  syn match  perlVarPlain2                   "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref
    +  syn match  perlFunctionName                "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref
    +else
    +  syn match  perlVarPlain       "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref
    +  syn match  perlVarPlain2                   "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref
    +  syn match  perlFunctionName                "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref
    +endif
    +
    +syn match  perlVarPlain2	 "%[-+]"
    +
    +if !get(g:, 'perl_no_extended_vars', 0)
    +  syn cluster perlExpr		contains=perlStatementIndirObjWrap,perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarPlain2,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlVarBlock2,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQ,perlQQ,perlQW,perlQR,perlArrow,perlBraces
    +  syn region perlArrow		matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contained
    +  syn region perlArrow		matchgroup=perlArrow start="->\s*\[" end="\]" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contained
    +  syn region perlArrow		matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contained
    +  syn match  perlArrow		"->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contained
    +  syn region perlVarBlock	matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend
    +  syn region perlVarBlock2	matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend
    +  syn match  perlVarPlain2	"[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend
    +  syn match  perlVarPlain	"\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend
    +  syn region perlVarMember	matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend
    +  syn match  perlVarSimpleMember	"\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contains=perlVarSimpleMemberName contained extend
    +  syn match  perlVarSimpleMemberName	"\I\i*" contained
    +  syn region perlVarMember	matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend
    +  syn match perlPackageConst	"__PACKAGE__" nextgroup=perlPostDeref
    +  syn match  perlPostDeref	"->\%($#\|[$@%&*]\)\*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlPostDeref
    +  syn region  perlPostDeref	start="->\%($#\|[$@%&*]\)\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarSimpleMember,perlVarMember,perlPostDeref
    +  syn region  perlPostDeref	matchgroup=perlPostDeref start="->\%($#\|[$@%&*]\){" skip="\\}" end="}" keepend extend contained contains=@perlExpr nextgroup=perlVarSimpleMember,perlVarMember,perlPostDeref
    +endif
    +
    +" File Descriptors
    +syn match  perlFiledescRead	"<\h\w*>"
    +
    +syn match  perlFiledescStatementComma	"(\=\s*\<\u\w*\>\s*,"me=e-1 transparent contained contains=perlFiledescStatement
    +syn match  perlFiledescStatementNocomma "(\=\s*\<\u\w*\>\s*[^, \t]"me=e-1 transparent contained contains=perlFiledescStatement
    +
    +syn match  perlFiledescStatement	"\<\u\w*\>" contained
    +
    +" Special characters in strings and matches
    +syn match  perlSpecialString	"\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained extend
    +syn match  perlSpecialStringU2	"\\." extend contained contains=NONE
    +syn match  perlSpecialStringU	"\\\\" contained
    +syn match  perlSpecialMatch	"\\[1-9]" contained extend
    +syn match  perlSpecialMatch	"\\g\%(\d\+\|{\%(-\=\d\+\|\h\w*\)}\)" contained
    +syn match  perlSpecialMatch	"\\k\%(<\h\w*>\|'\h\w*'\)" contained
    +syn match  perlSpecialMatch	"{\d\+\%(,\%(\d\+\)\=\)\=}" contained
    +syn match  perlSpecialMatch	"\[[]-]\=[^\[\]]*[]-]\=\]" contained extend
    +syn match  perlSpecialMatch	"[+*()?.]" contained
    +syn match  perlSpecialMatch	"(?[#:=!]" contained
    +syn match  perlSpecialMatch	"(?[impsx]*\%(-[imsx]\+\)\=)" contained
    +syn match  perlSpecialMatch	"(?\%([-+]\=\d\+\|R\))" contained
    +syn match  perlSpecialMatch	"(?\%(&\|P[>=]\)\h\w*)" contained
    +syn match  perlSpecialMatch	"(\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\=\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\=\|ACCEPT\))" contained
    +
    +" Possible errors
    +"
    +" Highlight lines with only whitespace (only in blank delimited here documents) as errors
    +syn match  perlNotEmptyLine	"^\s\+$" contained
    +" Highlight "} else if (...) {", it should be "} else { if (...) { " or "} elsif (...) {"
    +syn match perlElseIfError	"else\_s*if" containedin=perlConditional
    +syn keyword perlElseIfError	elseif containedin=perlConditional
    +
    +" Variable interpolation
    +"
    +" These items are interpolated inside "" strings and similar constructs.
    +syn cluster perlInterpDQ	contains=perlSpecialString,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock
    +" These items are interpolated inside '' strings and similar constructs.
    +syn cluster perlInterpSQ	contains=perlSpecialStringU,perlSpecialStringU2
    +" These items are interpolated inside m// matches and s/// substitutions.
    +syn cluster perlInterpSlash	contains=perlSpecialString,perlSpecialMatch,perlVarPlain,perlVarBlock
    +" These items are interpolated inside m## matches and s### substitutions.
    +syn cluster perlInterpMatch	contains=@perlInterpSlash,perlVarSlash
    +
    +" Shell commands
    +syn region  perlShellCommand	matchgroup=perlMatchStartEnd start="`" end="`" contains=@perlInterpDQ keepend
    +
    +" Constants
    +"
    +" Numbers
    +syn case   ignore
    +syn match  perlNumber	"\<\%(0\|[1-9]\%(_\=\d\)*\)\>"
    +syn match  perlNumber	"\<0\%(x\x\%(_\=\x\)*\|b[01]\%(_\=[01]\)*\|o\=\%(_\=\o\)*\)\>"
    +syn match  perlFloat	"\<\d\%(_\=\d\)*e[-+]\=\d\%(_\=\d\)*"
    +syn match  perlFloat	"\<\d\%(_\=\d\)*\.\%(\d\%(_\=\d\)*\)\=\%(e[-+]\=\d\%(_\=\d\)*\)\="
    +syn match  perlFloat    "\.\d\%(_\=\d\)*\%(e[-+]\=\d\%(_\=\d\)*\)\="
    +syn match  perlFloat	"\<0x\x\%(_\=\x\)*p[-+]\=\d\%(_\=\d\)*"
    +syn match  perlFloat	"\<0x\x\%(_\=\x\)*\.\%(\x\%(_\=\x\)*\)\=\%(p[-+]\=\d\%(_\=\d\)*\)\="
    +syn match  perlFloat    "\<0x\.\x\%(_\=\x\)*\%(p[-+]\=\d\%(_\=\d\)*\)\="
    +syn case   match
    +
    +syn match  perlString	"\<\%(v\d\+\%(\.\d\+\)*\|\d\+\%(\.\d\+\)\{2,}\)\>" contains=perlVStringV
    +syn match  perlVStringV	"\+ extend contained contains=perlAnglesSQ,@perlInterpSQ keepend
    +
    +syn region perlParensDQ		start=+(+ end=+)+ extend contained contains=perlParensDQ,@perlInterpDQ keepend
    +syn region perlBracketsDQ	start=+\[+ end=+\]+ extend contained contains=perlBracketsDQ,@perlInterpDQ keepend
    +syn region perlBracesDQ		start=+{+ end=+}+ extend contained contains=perlBracesDQ,@perlInterpDQ keepend
    +syn region perlAnglesDQ		start=+<+ end=+>+ extend contained contains=perlAnglesDQ,@perlInterpDQ keepend
    +
    +
    +" Simple version of searches and matches
    +syn match  perlMatchModifiers "[msixpadluncgo]\+" contained
    +syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@\s*\z([^[:space:]'([{<#]\)+ end=+\z1+ contains=@perlInterpMatch keepend extend nextgroup=perlMatchModifiers
    +syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@\)\@\)\@\)\@\)\@\)\@+ contains=@perlInterpMatch,perlAnglesDQ keepend extend nextgroup=perlMatchModifiers
    +syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@\)\@\s*\z([^[:space:]'([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend
    +syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@\)\@\)\@\)\@\)\@+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
    +syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@\)\@+ contained contains=@perlInterpDQ,perlAnglesDQ keepend extend nextgroup=perlSubstitutionModifiers
    +syn region perlSubstitutionSQ		matchgroup=perlMatchStartEnd start=+'+  end=+'+ contained contains=@perlInterpSQ keepend extend nextgroup=perlSubstitutionModifiers
    +
    +" Translations
    +" perlMatch is the first part, perlTranslation* is the second, translator part.
    +syn match  perlTranslationModifiers "[cdsr]\+" contained
    +syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@\s*\z([^[:space:]([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ
    +syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@\)\@\)\@\)\@+ contains=@perlInterpSQ,perlAnglesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
    +syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@+ contains=perlAnglesSQ contained nextgroup=perlTranslationModifiers
    +
    +
    +" Strings and q, qq, qw and qr expressions
    +
    +syn region perlStringUnexpanded	matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend extend
    +syn region perlString		matchgroup=perlStringStartEnd start=+"+  end=+"+ contains=@perlInterpDQ keepend extend
    +syn region perlQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend extend
    +syn region perlQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@\)\@\)\@\)\@\)\@+ contains=@perlInterpSQ,perlAnglesSQ keepend extend
    +
    +syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend extend
    +syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@\)\@\)\@\)\@\)\@+ contains=@perlInterpDQ,perlAnglesDQ keepend extend
    +
    +syn region perlQW		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@\)\@\)\@\)\@\)\@\)\@+ contains=@perlInterpSQ,perlAnglesSQ keepend extend
    +
    +syn match  perlQRModifiers "[msixpadluno]\+" contained
    +syn region perlQR		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@\s*\z([^[:space:]#([{<'/]\)+  end=+\z1+ contains=@perlInterpMatch keepend extend nextgroup=perlQRModifiers
    +syn region perlQR		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@\)\@\)\@\)\@ and qr[] which allows for comments and extra whitespace in the pattern
    +syn region perlQR		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@\)\@+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend extend nextgroup=perlQRModifiers
    +syn region perlQR		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@\_s*" nextgroup=perlSubDeclaration
    +
    +" The => operator forces a bareword to the left of it to be interpreted as
    +" a string
    +syn match  perlString "\I\@\)\@="
    +
    +" All other # are comments, except ^#!
    +syn match  perlComment		"#.*" contains=perlTodo,@Spell extend
    +syn match  perlSharpBang	"^#!.*"
    +
    +" Formats
    +syn region perlFormat		matchgroup=perlStatementIOFunc start="^\s*\~]\+\%(\.\.\.\)\=" contained
    +syn match  perlFormatField	"[@^]#[#.]*" contained
    +syn match  perlFormatField	"@\*" contained
    +syn match  perlFormatField	"@[^A-Za-z_|<>~#*]"me=e-1 contained
    +syn match  perlFormatField	"@$" contained
    +
    +" __END__ and __DATA__ clauses
    +
    +" Vim excludes empty syn-region end lines from the fold region.  This is
    +" probably a bug and means a DATA section ending with an empty line does not
    +" have that final line included in the fold.
    +"
    +" As a workaround we exploit an unterminated syntax region here with an end
    +" pattern that will (probably) never match.  This forces all lines to be
    +" included in the fold region.  Of course, if it does match then there's
    +" nothing to work around as it is a non-empty line.
    +"
    +" This problem also exists with empty string delimited heredocs but there's no
    +" known workaround for that case.
    +if get(g:, 'perl_fold', 0)
    +  syntax region perlDATA matchgroup=perlDATAStart start="^__DATA__$" end="VIM_PERL_EOF\%$" contains=@perlDATA fold
    +  syntax region perlEND  matchgroup=perlENDStart  start="^__END__$"  end="VIM_PERL_EOF\%$" contains=@perlDATA fold
    +else
    +  syntax region perlDATA matchgroup=perlDATAStart start="^__DATA__$" end="\%$" contains=@perlDATA
    +  syntax region perlEND  matchgroup=perlENDStart  start="^__END__$"  end="\%$" contains=@perlDATA
    +endif
    +
    +" TODO: generalise this to allow other filetypes
    +if get(g:, 'perl_highlight_data', 0)
    +  syn cluster perlDATA add=perlPOD
    +else
    +  syn cluster perlDATA remove=perlPOD
    +endif
    +
    +"
    +" Folding
    +if get(g:, 'perl_fold', 0)
    +  " Note: this bit must come before the actual highlighting of the "package"
    +  " keyword, otherwise this will screw up Pod lines that match /^package/
    +  if !get(g:, 'perl_nofold_packages', 0)
    +    syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend
    +    syn region perlPackageFold start="^\z(\s*\)package\s*\S\+\s*{" end="^\z1}" transparent fold keepend
    +  endif
    +  if !get(g:, 'perl_nofold_subs', 0)
    +    if get(g:, "perl_fold_anonymous_subs", 0)
    +      " EXPLANATION:
    +      " \                  - "sub" keyword
    +      " \_[^;{]*                 - any characters, including new line, but not ";" or "{", zero or more times
    +      " \%(([\\$@%&*\[\];]*)\)\= - prototype definition, \$@%&*[]; characters between (), zero or 1 times
    +      " \_[^;]*                  - any characters, including new line, but not ";" or "{", zero or more times
    +      " {                        - start subroutine block
    +      syn region perlSubFold start="\\_[^;{]*\%(([\\$@%&*\[\];]*)\)\=\_[^;{]*{" end="}" transparent fold keepend extend
    +    else
    +      " EXPLANATION:
    +      " same, as above, but first non-space character after "sub" keyword must
    +      " be [A-Za-z_] 
    +      syn region perlSubFold start="\\s*\h\_[^;{]*\%(([\\$@%&*\[\];]*)\)\=\_[^;]*{" end="}" transparent fold keepend extend
    +    endif
    +
    +    syn region perlSubFold start="\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>\_s*{" end="}" transparent fold keepend
    +  endif
    +
    +  if get(g:, 'perl_fold_blocks', 0)
    +    syn region perlBlockFold start="^\z(\s*\)\%(if\|elsif\|unless\|for\|while\|until\|given\)\s*(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" start="^\z(\s*\)for\%(each\)\=\s*\%(\%(my\|our\)\=\s*\S\+\s*\)\=(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend
    +
    +    " TODO this is works incorrectly
    +    syn region perlBlockFold start="^\z(\s*\)\%(do\|else\)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*while" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend
    +  else
    +    if get(g:, 'perl_fold_do_blocks', 0)
    +      syn region perlDoBlockDeclaration start="" end="{" contains=perlComment contained transparent
    +      syn match perlOperator "\\_s*" nextgroup=perlDoBlockDeclaration
    +
    +      syn region perlDoBlockFold start="\\_[^{]*{" end="}" transparent fold keepend extend
    +    endif
    +  endif
    +
    +  syn sync fromstart
    +else
    +  " fromstart above seems to set minlines even if perl_fold is not set.
    +  syn sync minlines=0
    +endif
    +
    +" NOTE: If you're linking new highlight groups to perlString, please also put
    +"       them into b:match_skip in ftplugin/perl.vim.
    +
    +" The default highlighting.
    +hi def link perlSharpBang		PreProc
    +hi def link perlControl			PreProc
    +hi def link perlInclude			Include
    +hi def link perlSpecial			Special
    +hi def link perlString			String
    +hi def link perlCharacter		Character
    +hi def link perlNumber			Number
    +hi def link perlFloat			Float
    +hi def link perlType			Type
    +hi def link perlIdentifier		Identifier
    +hi def link perlLabel			Label
    +hi def link perlStatement		Statement
    +hi def link perlConditional		Conditional
    +hi def link perlRepeat			Repeat
    +hi def link perlOperator		Operator
    +hi def link perlFunction		Keyword
    +hi def link perlSubName			Function
    +hi def link perlSubPrototype		Type
    +hi def link perlSubSignature		Type
    +hi def link perlSubAttribute		PreProc
    +hi def link perlComment			Comment
    +hi def link perlTodo			Todo
    +if get(g:, 'perl_string_as_statement', 0)
    +  hi def link perlStringStartEnd	perlStatement
    +else
    +  hi def link perlStringStartEnd	perlString
    +endif
    +hi def link perlVStringV		perlStringStartEnd
    +hi def link perlList			perlStatement
    +hi def link perlMisc			perlStatement
    +hi def link perlVarPlain		perlIdentifier
    +hi def link perlVarPlain2		perlIdentifier
    +hi def link perlArrow			perlIdentifier
    +hi def link perlFiledescRead		perlIdentifier
    +hi def link perlFiledescStatement	perlIdentifier
    +hi def link perlVarSimpleMember		perlIdentifier
    +hi def link perlVarSimpleMemberName	perlString
    +hi def link perlVarNotInMatches		perlIdentifier
    +hi def link perlVarSlash		perlIdentifier
    +hi def link perlQ			perlString
    +hi def link perlQQ			perlString
    +hi def link perlQW			perlString
    +hi def link perlQR			perlString
    +hi def link perlMatchModifiers          perlMatchStartEnd
    +hi def link perlSubstitutionModifiers   perlMatchStartEnd
    +hi def link perlTranslationModifiers    perlMatchStartEnd
    +hi def link perlQRModifiers             perlStringStartEnd
    +hi def link perlHereDoc			perlString
    +hi def link perlIndentedHereDoc		perlString
    +hi def link perlStringUnexpanded	perlString
    +hi def link perlSubstitutionSQ		perlString
    +hi def link perlSubstitutionGQQ		perlString
    +hi def link perlTranslationGQ		perlString
    +hi def link perlMatch			perlString
    +hi def link perlMatchStartEnd		perlStatement
    +hi def link perlFormatName		perlIdentifier
    +hi def link perlFormatField		perlString
    +hi def link perlPackageDecl		perlType
    +hi def link perlStorageClass		perlType
    +hi def link perlPackageRef		perlType
    +hi def link perlStatementPackage	perlStatement
    +hi def link perlStatementStorage	perlStatement
    +hi def link perlStatementControl	perlStatement
    +hi def link perlStatementScalar		perlStatement
    +hi def link perlStatementRegexp		perlStatement
    +hi def link perlStatementNumeric	perlStatement
    +hi def link perlStatementList		perlStatement
    +hi def link perlStatementHash		perlStatement
    +hi def link perlStatementIOfunc		perlStatement
    +hi def link perlStatementFiledesc	perlStatement
    +hi def link perlStatementVector		perlStatement
    +hi def link perlStatementFiles		perlStatement
    +hi def link perlStatementFlow		perlStatement
    +hi def link perlStatementInclude	perlStatement
    +hi def link perlStatementProc		perlStatement
    +hi def link perlStatementSocket		perlStatement
    +hi def link perlStatementIPC		perlStatement
    +hi def link perlStatementNetwork	perlStatement
    +hi def link perlStatementPword		perlStatement
    +hi def link perlStatementTime		perlStatement
    +hi def link perlStatementMisc		perlStatement
    +hi def link perlStatementIndirObj	perlStatement
    +hi def link perlFunctionName		perlIdentifier
    +hi def link perlMethod			perlIdentifier
    +hi def link perlPostDeref		perlIdentifier
    +hi def link perlFunctionPRef		perlType
    +
    +if !get(g:, 'perl_include_pod', 1)
    +  hi def link perlPOD		perlComment
    +endif
    +hi def link perlShellCommand		perlString
    +hi def link perlSpecialAscii		perlSpecial
    +hi def link perlSpecialDollar		perlSpecial
    +hi def link perlSpecialString		perlSpecial
    +hi def link perlSpecialStringU		perlSpecial
    +hi def link perlSpecialMatch		perlSpecial
    +hi def link perlEND			perlComment
    +hi def link perlENDStart		perlEND
    +hi def link perlDATA			perlComment
    +hi def link perlDATAStart		perlDATA
    +
    +" NOTE: Due to a bug in Vim (or more likely, a misunderstanding on my part),
    +"	I had to remove the transparent property from the following regions
    +"	in order to get them to highlight correctly.  Feel free to remove
    +"	these and reinstate the transparent property if you know how.
    +hi def link perlParensSQ		perlString
    +hi def link perlBracketsSQ		perlString
    +hi def link perlBracesSQ		perlString
    +hi def link perlAnglesSQ		perlString
    +
    +hi def link perlParensDQ		perlString
    +hi def link perlBracketsDQ		perlString
    +hi def link perlBracesDQ		perlString
    +hi def link perlAnglesDQ		perlString
    +
    +hi def link perlSpecialStringU2	perlString
    +
    +" Possible errors
    +hi def link perlNotEmptyLine		Error
    +hi def link perlElseIfError		Error
    +
    +" Syncing to speed up processing
    +"
    +if !get(g:, 'perl_no_sync_on_sub', 0)
    +  syn sync match perlSync	grouphere NONE "^\s*\"
    +  syn sync match perlSync	grouphere NONE "^}"
    +endif
    +
    +if !get(g:, 'perl_no_sync_on_global_var', 0)
    +  syn sync match perlSync	grouphere NONE "^$\I[[:alnum:]_:]+\s*=\s*{"
    +  syn sync match perlSync	grouphere NONE "^[@%]\I[[:alnum:]_:]+\s*=\s*("
    +endif
    +
    +if get(g:, 'perl_sync_dist', 0)
    +  execute "syn sync maxlines=" . perl_sync_dist
    +else
    +  syn sync maxlines=100
    +endif
    +
    +syn sync match perlSyncPOD	grouphere perlPOD "^=pod"
    +syn sync match perlSyncPOD	grouphere perlPOD "^=head"
    +syn sync match perlSyncPOD	grouphere perlPOD "^=item"
    +syn sync match perlSyncPOD	grouphere NONE "^=cut"
    +
    +let b:current_syntax = "perl"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" XXX Change to sts=4:sw=4
    +" vim:ts=8:sts=2:sw=2:expandtab:ft=vim
    diff --git a/.config/vim/syntax/pf.vim b/.config/vim/syntax/pf.vim
    new file mode 100644
    index 0000000..b928dc4
    --- /dev/null
    +++ b/.config/vim/syntax/pf.vim
    @@ -0,0 +1,333 @@
    +" pf syntax file
    +" Language:        OpenBSD packet filter configuration (pf.conf)
    +" Original Author: Camiel Dobbelaar 
    +" Maintainer:      Lauri Tirkkonen 
    +" Last Change:     2018 Jul 16
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let b:current_syntax = "pf"
    +setlocal foldmethod=syntax
    +syn iskeyword @,48-57,_,-,+
    +syn sync fromstart
    +
    +syn cluster	pfNotLS		contains=pfTodo,pfVarAssign
    +syn keyword	pfCmd		anchor antispoof block include match pass queue
    +syn keyword	pfCmd		queue set table
    +syn match	pfCmd		/^\s*load\sanchor\>/
    +syn keyword	pfTodo		TODO XXX contained
    +syn keyword	pfWildAddr	any no-route urpf-failed self
    +syn match	pfComment	/#.*$/ contains=pfTodo
    +syn match	pfCont		/\\$/
    +syn match	pfErrClose	/}/
    +syn match	pfIPv4		/\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/
    +syn match	pfIPv6		/[a-fA-F0-9:]*::[a-fA-F0-9:.]*/
    +syn match	pfIPv6		/[a-fA-F0-9:]\+:[a-fA-F0-9:]\+:[a-fA-F0-9:.]\+/
    +syn match	pfNetmask	/\/\d\+/
    +syn match	pfNum		/[a-zA-Z0-9_:.]\@/
    +syn match	pfVar		/$[a-zA-Z][a-zA-Z0-9_]*/
    +syn match	pfVarAssign	/^\s*[a-zA-Z][a-zA-Z0-9_]*\s*=/me=e-1
    +syn region	pfFold1		start=/^#\{1}>/ end=/^#\{1,3}>/me=s-1 transparent fold
    +syn region	pfFold2		start=/^#\{2}>/ end=/^#\{2,3}>/me=s-1 transparent fold
    +syn region	pfFold3		start=/^#\{3}>/ end=/^#\{3}>/me=s-1 transparent fold
    +syn region	pfList		start=/{/ end=/}/ transparent contains=ALLBUT,pfErrClose,@pfNotLS
    +syn region	pfString	start=/"/ skip=/\\"/ end=/"/ contains=pfIPv4,pfIPv6,pfNetmask,pfTable,pfVar
    +syn region	pfString	start=/'/ skip=/\\'/ end=/'/ contains=pfIPv4,pfIPv6,pfNetmask,pfTable,pfVar
    +
    +hi def link pfCmd	Statement
    +hi def link pfComment	Comment
    +hi def link pfCont	Statement
    +hi def link pfErrClose	Error
    +hi def link pfIPv4	Type
    +hi def link pfIPv6	Type
    +hi def link pfNetmask	Constant
    +hi def link pfNum	Constant
    +hi def link pfService	Constant
    +hi def link pfString	String
    +hi def link pfTable	Identifier
    +hi def link pfTodo	Todo
    +hi def link pfVar	Identifier
    +hi def link pfVarAssign	Identifier
    +hi def link pfWildAddr	Type
    +
    +" from OpenBSD src/etc/services r1.95
    +syn keyword	pfService	802-11-iapp
    +syn keyword	pfService	Microsoft-SQL-Monitor
    +syn keyword	pfService	Microsoft-SQL-Server
    +syn keyword	pfService	NeXTStep
    +syn keyword	pfService	NextStep
    +syn keyword	pfService	afpovertcp
    +syn keyword	pfService	afs3-bos
    +syn keyword	pfService	afs3-callback
    +syn keyword	pfService	afs3-errors
    +syn keyword	pfService	afs3-fileserver
    +syn keyword	pfService	afs3-kaserver
    +syn keyword	pfService	afs3-prserver
    +syn keyword	pfService	afs3-rmtsys
    +syn keyword	pfService	afs3-update
    +syn keyword	pfService	afs3-vlserver
    +syn keyword	pfService	afs3-volser
    +syn keyword	pfService	amt-redir-tcp
    +syn keyword	pfService	amt-redir-tls
    +syn keyword	pfService	amt-soap-http
    +syn keyword	pfService	amt-soap-https
    +syn keyword	pfService	asf-rmcp
    +syn keyword	pfService	at-echo
    +syn keyword	pfService	at-nbp
    +syn keyword	pfService	at-rtmp
    +syn keyword	pfService	at-zis
    +syn keyword	pfService	auth
    +syn keyword	pfService	authentication
    +syn keyword	pfService	bfd-control
    +syn keyword	pfService	bfd-echo
    +syn keyword	pfService	bftp
    +syn keyword	pfService	bgp
    +syn keyword	pfService	bgpd
    +syn keyword	pfService	biff
    +syn keyword	pfService	bootpc
    +syn keyword	pfService	bootps
    +syn keyword	pfService	canna
    +syn keyword	pfService	cddb
    +syn keyword	pfService	cddbp
    +syn keyword	pfService	chargen
    +syn keyword	pfService	chat
    +syn keyword	pfService	cmd
    +syn keyword	pfService	cmip-agent
    +syn keyword	pfService	cmip-man
    +syn keyword	pfService	comsat
    +syn keyword	pfService	conference
    +syn keyword	pfService	conserver
    +syn keyword	pfService	courier
    +syn keyword	pfService	csnet-ns
    +syn keyword	pfService	cso-ns
    +syn keyword	pfService	cvspserver
    +syn keyword	pfService	daap
    +syn keyword	pfService	datametrics
    +syn keyword	pfService	daytime
    +syn keyword	pfService	dhcpd-sync
    +syn keyword	pfService	dhcpv6-client
    +syn keyword	pfService	dhcpv6-server
    +syn keyword	pfService	discard
    +syn keyword	pfService	domain
    +syn keyword	pfService	echo
    +syn keyword	pfService	efs
    +syn keyword	pfService	eklogin
    +syn keyword	pfService	ekshell
    +syn keyword	pfService	ekshell2
    +syn keyword	pfService	epmap
    +syn keyword	pfService	eppc
    +syn keyword	pfService	exec
    +syn keyword	pfService	finger
    +syn keyword	pfService	ftp
    +syn keyword	pfService	ftp-data
    +syn keyword	pfService	git
    +syn keyword	pfService	gopher
    +syn keyword	pfService	gre-in-udp
    +syn keyword	pfService	gre-udp-dtls
    +syn keyword	pfService	hostname
    +syn keyword	pfService	hostnames
    +syn keyword	pfService	hprop
    +syn keyword	pfService	http
    +syn keyword	pfService	https
    +syn keyword	pfService	hunt
    +syn keyword	pfService	hylafax
    +syn keyword	pfService	iapp
    +syn keyword	pfService	icb
    +syn keyword	pfService	ident
    +syn keyword	pfService	imap
    +syn keyword	pfService	imap2
    +syn keyword	pfService	imap3
    +syn keyword	pfService	imaps
    +syn keyword	pfService	ingreslock
    +syn keyword	pfService	ipp
    +syn keyword	pfService	iprop
    +syn keyword	pfService	ipsec-msft
    +syn keyword	pfService	ipsec-nat-t
    +syn keyword	pfService	ipx
    +syn keyword	pfService	irc
    +syn keyword	pfService	isakmp
    +syn keyword	pfService	iscsi
    +syn keyword	pfService	isisd
    +syn keyword	pfService	iso-tsap
    +syn keyword	pfService	kauth
    +syn keyword	pfService	kdc
    +syn keyword	pfService	kerberos
    +syn keyword	pfService	kerberos-adm
    +syn keyword	pfService	kerberos-iv
    +syn keyword	pfService	kerberos-sec
    +syn keyword	pfService	kerberos_master
    +syn keyword	pfService	kf
    +syn keyword	pfService	kip
    +syn keyword	pfService	klogin
    +syn keyword	pfService	kpasswd
    +syn keyword	pfService	kpop
    +syn keyword	pfService	krb524
    +syn keyword	pfService	krb_prop
    +syn keyword	pfService	krbupdate
    +syn keyword	pfService	krcmd
    +syn keyword	pfService	kreg
    +syn keyword	pfService	kshell
    +syn keyword	pfService	kx
    +syn keyword	pfService	l2tp
    +syn keyword	pfService	ldap
    +syn keyword	pfService	ldaps
    +syn keyword	pfService	ldp
    +syn keyword	pfService	link
    +syn keyword	pfService	login
    +syn keyword	pfService	mail
    +syn keyword	pfService	mdns
    +syn keyword	pfService	mdnsresponder
    +syn keyword	pfService	microsoft-ds
    +syn keyword	pfService	ms-sql-m
    +syn keyword	pfService	ms-sql-s
    +syn keyword	pfService	msa
    +syn keyword	pfService	msp
    +syn keyword	pfService	mtp
    +syn keyword	pfService	mysql
    +syn keyword	pfService	name
    +syn keyword	pfService	nameserver
    +syn keyword	pfService	netbios-dgm
    +syn keyword	pfService	netbios-ns
    +syn keyword	pfService	netbios-ssn
    +syn keyword	pfService	netnews
    +syn keyword	pfService	netplan
    +syn keyword	pfService	netrjs
    +syn keyword	pfService	netstat
    +syn keyword	pfService	netwall
    +syn keyword	pfService	newdate
    +syn keyword	pfService	nextstep
    +syn keyword	pfService	nfs
    +syn keyword	pfService	nfsd
    +syn keyword	pfService	nicname
    +syn keyword	pfService	nnsp
    +syn keyword	pfService	nntp
    +syn keyword	pfService	ntalk
    +syn keyword	pfService	ntp
    +syn keyword	pfService	null
    +syn keyword	pfService	openwebnet
    +syn keyword	pfService	ospf6d
    +syn keyword	pfService	ospfapi
    +syn keyword	pfService	ospfd
    +syn keyword	pfService	photuris
    +syn keyword	pfService	pop2
    +syn keyword	pfService	pop3
    +syn keyword	pfService	pop3pw
    +syn keyword	pfService	pop3s
    +syn keyword	pfService	poppassd
    +syn keyword	pfService	portmap
    +syn keyword	pfService	postgresql
    +syn keyword	pfService	postoffice
    +syn keyword	pfService	pptp
    +syn keyword	pfService	presence
    +syn keyword	pfService	printer
    +syn keyword	pfService	prospero
    +syn keyword	pfService	prospero-np
    +syn keyword	pfService	puppet
    +syn keyword	pfService	pwdgen
    +syn keyword	pfService	qotd
    +syn keyword	pfService	quote
    +syn keyword	pfService	radacct
    +syn keyword	pfService	radius
    +syn keyword	pfService	radius-acct
    +syn keyword	pfService	rdp
    +syn keyword	pfService	readnews
    +syn keyword	pfService	remotefs
    +syn keyword	pfService	resource
    +syn keyword	pfService	rfb
    +syn keyword	pfService	rfe
    +syn keyword	pfService	rfs
    +syn keyword	pfService	rfs_server
    +syn keyword	pfService	ripd
    +syn keyword	pfService	ripng
    +syn keyword	pfService	rje
    +syn keyword	pfService	rkinit
    +syn keyword	pfService	rlp
    +syn keyword	pfService	routed
    +syn keyword	pfService	router
    +syn keyword	pfService	rpc
    +syn keyword	pfService	rpcbind
    +syn keyword	pfService	rsync
    +syn keyword	pfService	rtelnet
    +syn keyword	pfService	rtsp
    +syn keyword	pfService	sa-msg-port
    +syn keyword	pfService	sane-port
    +syn keyword	pfService	sftp
    +syn keyword	pfService	shell
    +syn keyword	pfService	sieve
    +syn keyword	pfService	silc
    +syn keyword	pfService	sink
    +syn keyword	pfService	sip
    +syn keyword	pfService	smtp
    +syn keyword	pfService	smtps
    +syn keyword	pfService	smux
    +syn keyword	pfService	snmp
    +syn keyword	pfService	snmp-trap
    +syn keyword	pfService	snmptrap
    +syn keyword	pfService	snpp
    +syn keyword	pfService	socks
    +syn keyword	pfService	source
    +syn keyword	pfService	spamd
    +syn keyword	pfService	spamd-cfg
    +syn keyword	pfService	spamd-sync
    +syn keyword	pfService	spooler
    +syn keyword	pfService	spop3
    +syn keyword	pfService	ssdp
    +syn keyword	pfService	ssh
    +syn keyword	pfService	submission
    +syn keyword	pfService	sunrpc
    +syn keyword	pfService	supdup
    +syn keyword	pfService	supfiledbg
    +syn keyword	pfService	supfilesrv
    +syn keyword	pfService	support
    +syn keyword	pfService	svn
    +syn keyword	pfService	svrloc
    +syn keyword	pfService	swat
    +syn keyword	pfService	syslog
    +syn keyword	pfService	syslog-tls
    +syn keyword	pfService	systat
    +syn keyword	pfService	tacacs
    +syn keyword	pfService	tacas+
    +syn keyword	pfService	talk
    +syn keyword	pfService	tap
    +syn keyword	pfService	tcpmux
    +syn keyword	pfService	telnet
    +syn keyword	pfService	tempo
    +syn keyword	pfService	tftp
    +syn keyword	pfService	time
    +syn keyword	pfService	timed
    +syn keyword	pfService	timeserver
    +syn keyword	pfService	timserver
    +syn keyword	pfService	tsap
    +syn keyword	pfService	ttylink
    +syn keyword	pfService	ttytst
    +syn keyword	pfService	ub-dns-control
    +syn keyword	pfService	ulistserv
    +syn keyword	pfService	untp
    +syn keyword	pfService	usenet
    +syn keyword	pfService	users
    +syn keyword	pfService	uucp
    +syn keyword	pfService	uucp-path
    +syn keyword	pfService	uucpd
    +syn keyword	pfService	vnc
    +syn keyword	pfService	vxlan
    +syn keyword	pfService	wais
    +syn keyword	pfService	webster
    +syn keyword	pfService	who
    +syn keyword	pfService	whod
    +syn keyword	pfService	whois
    +syn keyword	pfService	www
    +syn keyword	pfService	x400
    +syn keyword	pfService	x400-snd
    +syn keyword	pfService	xcept
    +syn keyword	pfService	xdmcp
    +syn keyword	pfService	xmpp-bosh
    +syn keyword	pfService	xmpp-client
    +syn keyword	pfService	xmpp-server
    +syn keyword	pfService	z3950
    +syn keyword	pfService	zabbix-agent
    +syn keyword	pfService	zabbix-trapper
    +syn keyword	pfService	zebra
    +syn keyword	pfService	zebrasrv
    diff --git a/.config/vim/syntax/pfmain.vim b/.config/vim/syntax/pfmain.vim
    new file mode 100644
    index 0000000..af58da7
    --- /dev/null
    +++ b/.config/vim/syntax/pfmain.vim
    @@ -0,0 +1,1835 @@
    +" Vim syntax file
    +" Language:	Postfix main.cf configuration
    +" Maintainer:	KELEMEN Peter 
    +" Last Updates:	Anton Shestakov, Hong Xu
    +" Last Change:	2015 Feb 10
    +" Version:	0.40
    +" URL:		http://cern.ch/fuji/vim/syntax/pfmain.vim
    +" Comment:	Based on Postfix 2.12/3.0 postconf.5.html.
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +	finish
    +endif
    +
    +setlocal iskeyword=@,48-57,_,-
    +
    +syntax case match
    +syntax sync minlines=1
    +
    +syntax keyword pfmainConf 2bounce_notice_recipient
    +syntax keyword pfmainConf access_map_defer_code
    +syntax keyword pfmainConf access_map_reject_code
    +syntax keyword pfmainConf address_verify_cache_cleanup_interval
    +syntax keyword pfmainConf address_verify_default_transport
    +syntax keyword pfmainConf address_verify_local_transport
    +syntax keyword pfmainConf address_verify_map
    +syntax keyword pfmainConf address_verify_negative_cache
    +syntax keyword pfmainConf address_verify_negative_expire_time
    +syntax keyword pfmainConf address_verify_negative_refresh_time
    +syntax keyword pfmainConf address_verify_poll_count
    +syntax keyword pfmainConf address_verify_poll_delay
    +syntax keyword pfmainConf address_verify_positive_expire_time
    +syntax keyword pfmainConf address_verify_positive_refresh_time
    +syntax keyword pfmainConf address_verify_relay_transport
    +syntax keyword pfmainConf address_verify_relayhost
    +syntax keyword pfmainConf address_verify_sender
    +syntax keyword pfmainConf address_verify_sender_dependent_default_transport_maps
    +syntax keyword pfmainConf address_verify_sender_dependent_relayhost_maps
    +syntax keyword pfmainConf address_verify_sender_ttl
    +syntax keyword pfmainConf address_verify_service_name
    +syntax keyword pfmainConf address_verify_transport_maps
    +syntax keyword pfmainConf address_verify_virtual_transport
    +syntax keyword pfmainConf alias_database
    +syntax keyword pfmainConf alias_maps
    +syntax keyword pfmainConf allow_mail_to_commands
    +syntax keyword pfmainConf allow_mail_to_files
    +syntax keyword pfmainConf allow_min_user
    +syntax keyword pfmainConf allow_percent_hack
    +syntax keyword pfmainConf allow_untrusted_routing
    +syntax keyword pfmainConf alternate_config_directories
    +syntax keyword pfmainConf always_add_missing_headers
    +syntax keyword pfmainConf always_bcc
    +syntax keyword pfmainConf anvil_rate_time_unit
    +syntax keyword pfmainConf anvil_status_update_time
    +syntax keyword pfmainConf append_at_myorigin
    +syntax keyword pfmainConf append_dot_mydomain
    +syntax keyword pfmainConf application_event_drain_time
    +syntax keyword pfmainConf authorized_flush_users
    +syntax keyword pfmainConf authorized_mailq_users
    +syntax keyword pfmainConf authorized_submit_users
    +syntax keyword pfmainConf authorized_verp_clients
    +syntax keyword pfmainConf backwards_bounce_logfile_compatibility
    +syntax keyword pfmainConf berkeley_db_create_buffer_size
    +syntax keyword pfmainConf berkeley_db_read_buffer_size
    +syntax keyword pfmainConf best_mx_transport
    +syntax keyword pfmainConf biff
    +syntax keyword pfmainConf body_checks
    +syntax keyword pfmainConf body_checks_size_limit
    +syntax keyword pfmainConf bounce_notice_recipient
    +syntax keyword pfmainConf bounce_queue_lifetime
    +syntax keyword pfmainConf bounce_service_name
    +syntax keyword pfmainConf bounce_size_limit
    +syntax keyword pfmainConf bounce_template_file
    +syntax keyword pfmainConf broken_sasl_auth_clients
    +syntax keyword pfmainConf canonical_classes
    +syntax keyword pfmainConf canonical_maps
    +syntax keyword pfmainConf cleanup_service_name
    +syntax keyword pfmainConf command_directory
    +syntax keyword pfmainConf command_execution_directory
    +syntax keyword pfmainConf command_expansion_filter
    +syntax keyword pfmainConf command_time_limit
    +syntax keyword pfmainConf compatibility_level
    +syntax keyword pfmainConf config_directory
    +syntax keyword pfmainConf confirm_delay_cleared
    +syntax keyword pfmainConf connection_cache_protocol_timeout
    +syntax keyword pfmainConf connection_cache_service_name
    +syntax keyword pfmainConf connection_cache_status_update_time
    +syntax keyword pfmainConf connection_cache_ttl_limit
    +syntax keyword pfmainConf content_filter
    +syntax keyword pfmainConf cyrus_sasl_config_path
    +syntax keyword pfmainConf daemon_directory
    +syntax keyword pfmainConf daemon_table_open_error_is_fatal
    +syntax keyword pfmainConf daemon_timeout
    +syntax keyword pfmainConf data_directory
    +syntax keyword pfmainConf debug_peer_level
    +syntax keyword pfmainConf debug_peer_list
    +syntax keyword pfmainConf debugger_command
    +syntax keyword pfmainConf default_database_type
    +syntax keyword pfmainConf default_delivery_slot_cost
    +syntax keyword pfmainConf default_delivery_slot_discount
    +syntax keyword pfmainConf default_delivery_slot_loan
    +syntax keyword pfmainConf default_delivery_status_filter
    +syntax keyword pfmainConf default_destination_concurrency_failed_cohort_limit
    +syntax keyword pfmainConf default_destination_concurrency_limit
    +syntax keyword pfmainConf default_destination_concurrency_negative_feedback
    +syntax keyword pfmainConf default_destination_concurrency_positive_feedback
    +syntax keyword pfmainConf default_destination_rate_delay
    +syntax keyword pfmainConf default_destination_recipient_limit
    +syntax keyword pfmainConf default_extra_recipient_limit
    +syntax keyword pfmainConf default_filter_nexthop
    +syntax keyword pfmainConf default_minimum_delivery_slots
    +syntax keyword pfmainConf default_privs
    +syntax keyword pfmainConf default_process_limit
    +syntax keyword pfmainConf default_rbl_reply
    +syntax keyword pfmainConf default_recipient_limit
    +syntax keyword pfmainConf default_recipient_refill_delay
    +syntax keyword pfmainConf default_recipient_refill_limit
    +syntax keyword pfmainConf default_transport
    +syntax keyword pfmainConf default_verp_delimiters
    +syntax keyword pfmainConf defer_code
    +syntax keyword pfmainConf defer_service_name
    +syntax keyword pfmainConf defer_transports
    +syntax keyword pfmainConf delay_logging_resolution_limit
    +syntax keyword pfmainConf delay_notice_recipient
    +syntax keyword pfmainConf delay_warning_time
    +syntax keyword pfmainConf deliver_lock_attempts
    +syntax keyword pfmainConf deliver_lock_delay
    +syntax keyword pfmainConf destination_concurrency_feedback_debug
    +syntax keyword pfmainConf detect_8bit_encoding_header
    +syntax keyword pfmainConf disable_dns_lookups
    +syntax keyword pfmainConf disable_mime_input_processing
    +syntax keyword pfmainConf disable_mime_output_conversion
    +syntax keyword pfmainConf disable_verp_bounces
    +syntax keyword pfmainConf disable_vrfy_command
    +syntax keyword pfmainConf dnsblog_reply_delay
    +syntax keyword pfmainConf dnsblog_service_name
    +syntax keyword pfmainConf dont_remove
    +syntax keyword pfmainConf double_bounce_sender
    +syntax keyword pfmainConf duplicate_filter_limit
    +syntax keyword pfmainConf empty_address_default_transport_maps_lookup_key
    +syntax keyword pfmainConf empty_address_recipient
    +syntax keyword pfmainConf empty_address_relayhost_maps_lookup_key
    +syntax keyword pfmainConf enable_errors_to
    +syntax keyword pfmainConf enable_long_queue_ids
    +syntax keyword pfmainConf enable_original_recipient
    +syntax keyword pfmainConf error_notice_recipient
    +syntax keyword pfmainConf error_service_name
    +syntax keyword pfmainConf execution_directory_expansion_filter
    +syntax keyword pfmainConf expand_owner_alias
    +syntax keyword pfmainConf export_environment
    +syntax keyword pfmainConf extract_recipient_limit
    +syntax keyword pfmainConf fallback_relay
    +syntax keyword pfmainConf fallback_transport
    +syntax keyword pfmainConf fallback_transport_maps
    +syntax keyword pfmainConf fast_flush_domains
    +syntax keyword pfmainConf fast_flush_purge_time
    +syntax keyword pfmainConf fast_flush_refresh_time
    +syntax keyword pfmainConf fault_injection_code
    +syntax keyword pfmainConf flush_service_name
    +syntax keyword pfmainConf fork_attempts
    +syntax keyword pfmainConf fork_delay
    +syntax keyword pfmainConf forward_expansion_filter
    +syntax keyword pfmainConf forward_path
    +syntax keyword pfmainConf frozen_delivered_to
    +syntax keyword pfmainConf hash_queue_depth
    +syntax keyword pfmainConf hash_queue_names
    +syntax keyword pfmainConf header_address_token_limit
    +syntax keyword pfmainConf header_checks
    +syntax keyword pfmainConf header_size_limit
    +syntax keyword pfmainConf helpful_warnings
    +syntax keyword pfmainConf home_mailbox
    +syntax keyword pfmainConf hopcount_limit
    +syntax keyword pfmainConf html_directory
    +syntax keyword pfmainConf ignore_mx_lookup_error
    +syntax keyword pfmainConf import_environment
    +syntax keyword pfmainConf in_flow_delay
    +syntax keyword pfmainConf inet_interfaces
    +syntax keyword pfmainConf inet_protocols
    +syntax keyword pfmainConf initial_destination_concurrency
    +syntax keyword pfmainConf internal_mail_filter_classes
    +syntax keyword pfmainConf invalid_hostname_reject_code
    +syntax keyword pfmainConf ipc_idle
    +syntax keyword pfmainConf ipc_timeout
    +syntax keyword pfmainConf ipc_ttl
    +syntax keyword pfmainConf line_length_limit
    +syntax keyword pfmainConf lmdb_map_size
    +syntax keyword pfmainConf lmtp_address_preference
    +syntax keyword pfmainConf lmtp_address_verify_target
    +syntax keyword pfmainConf lmtp_assume_final
    +syntax keyword pfmainConf lmtp_bind_address
    +syntax keyword pfmainConf lmtp_bind_address6
    +syntax keyword pfmainConf lmtp_body_checks
    +syntax keyword pfmainConf lmtp_cache_connection
    +syntax keyword pfmainConf lmtp_cname_overrides_servername
    +syntax keyword pfmainConf lmtp_connect_timeout
    +syntax keyword pfmainConf lmtp_connection_cache_destinations
    +syntax keyword pfmainConf lmtp_connection_cache_on_demand
    +syntax keyword pfmainConf lmtp_connection_cache_time_limit
    +syntax keyword pfmainConf lmtp_connection_reuse_count_limit
    +syntax keyword pfmainConf lmtp_connection_reuse_time_limit
    +syntax keyword pfmainConf lmtp_data_done_timeout
    +syntax keyword pfmainConf lmtp_data_init_timeout
    +syntax keyword pfmainConf lmtp_data_xfer_timeout
    +syntax keyword pfmainConf lmtp_defer_if_no_mx_address_found
    +syntax keyword pfmainConf lmtp_delivery_status_filter
    +syntax keyword pfmainConf lmtp_destination_concurrency_limit
    +syntax keyword pfmainConf lmtp_destination_recipient_limit
    +syntax keyword pfmainConf lmtp_discard_lhlo_keyword_address_maps
    +syntax keyword pfmainConf lmtp_discard_lhlo_keywords
    +syntax keyword pfmainConf lmtp_dns_reply_filter
    +syntax keyword pfmainConf lmtp_dns_resolver_options
    +syntax keyword pfmainConf lmtp_dns_support_level
    +syntax keyword pfmainConf lmtp_enforce_tls
    +syntax keyword pfmainConf lmtp_generic_maps
    +syntax keyword pfmainConf lmtp_header_checks
    +syntax keyword pfmainConf lmtp_host_lookup
    +syntax keyword pfmainConf lmtp_lhlo_name
    +syntax keyword pfmainConf lmtp_lhlo_timeout
    +syntax keyword pfmainConf lmtp_line_length_limit
    +syntax keyword pfmainConf lmtp_mail_timeout
    +syntax keyword pfmainConf lmtp_mime_header_checks
    +syntax keyword pfmainConf lmtp_mx_address_limit
    +syntax keyword pfmainConf lmtp_mx_session_limit
    +syntax keyword pfmainConf lmtp_nested_header_checks
    +syntax keyword pfmainConf lmtp_per_record_deadline
    +syntax keyword pfmainConf lmtp_pix_workaround_delay_time
    +syntax keyword pfmainConf lmtp_pix_workaround_maps
    +syntax keyword pfmainConf lmtp_pix_workaround_threshold_time
    +syntax keyword pfmainConf lmtp_pix_workarounds
    +syntax keyword pfmainConf lmtp_quit_timeout
    +syntax keyword pfmainConf lmtp_quote_rfc821_envelope
    +syntax keyword pfmainConf lmtp_randomize_addresses
    +syntax keyword pfmainConf lmtp_rcpt_timeout
    +syntax keyword pfmainConf lmtp_reply_filter
    +syntax keyword pfmainConf lmtp_rset_timeout
    +syntax keyword pfmainConf lmtp_sasl_auth_cache_name
    +syntax keyword pfmainConf lmtp_sasl_auth_cache_time
    +syntax keyword pfmainConf lmtp_sasl_auth_enable
    +syntax keyword pfmainConf lmtp_sasl_auth_soft_bounce
    +syntax keyword pfmainConf lmtp_sasl_mechanism_filter
    +syntax keyword pfmainConf lmtp_sasl_password_maps
    +syntax keyword pfmainConf lmtp_sasl_path
    +syntax keyword pfmainConf lmtp_sasl_security_options
    +syntax keyword pfmainConf lmtp_sasl_tls_security_options
    +syntax keyword pfmainConf lmtp_sasl_tls_verified_security_options
    +syntax keyword pfmainConf lmtp_sasl_type
    +syntax keyword pfmainConf lmtp_send_dummy_mail_auth
    +syntax keyword pfmainConf lmtp_send_xforward_command
    +syntax keyword pfmainConf lmtp_sender_dependent_authentication
    +syntax keyword pfmainConf lmtp_skip_5xx_greeting
    +syntax keyword pfmainConf lmtp_skip_quit_response
    +syntax keyword pfmainConf lmtp_starttls_timeout
    +syntax keyword pfmainConf lmtp_tcp_port
    +syntax keyword pfmainConf lmtp_tls_CAfile
    +syntax keyword pfmainConf lmtp_tls_CApath
    +syntax keyword pfmainConf lmtp_tls_block_early_mail_reply
    +syntax keyword pfmainConf lmtp_tls_cert_file
    +syntax keyword pfmainConf lmtp_tls_ciphers
    +syntax keyword pfmainConf lmtp_tls_dcert_file
    +syntax keyword pfmainConf lmtp_tls_dkey_file
    +syntax keyword pfmainConf lmtp_tls_eccert_file
    +syntax keyword pfmainConf lmtp_tls_eckey_file
    +syntax keyword pfmainConf lmtp_tls_enforce_peername
    +syntax keyword pfmainConf lmtp_tls_exclude_ciphers
    +syntax keyword pfmainConf lmtp_tls_fingerprint_cert_match
    +syntax keyword pfmainConf lmtp_tls_fingerprint_digest
    +syntax keyword pfmainConf lmtp_tls_force_insecure_host_tlsa_lookup
    +syntax keyword pfmainConf lmtp_tls_key_file
    +syntax keyword pfmainConf lmtp_tls_loglevel
    +syntax keyword pfmainConf lmtp_tls_mandatory_ciphers
    +syntax keyword pfmainConf lmtp_tls_mandatory_exclude_ciphers
    +syntax keyword pfmainConf lmtp_tls_mandatory_protocols
    +syntax keyword pfmainConf lmtp_tls_note_starttls_offer
    +syntax keyword pfmainConf lmtp_tls_per_site
    +syntax keyword pfmainConf lmtp_tls_policy_maps
    +syntax keyword pfmainConf lmtp_tls_protocols
    +syntax keyword pfmainConf lmtp_tls_scert_verifydepth
    +syntax keyword pfmainConf lmtp_tls_secure_cert_match
    +syntax keyword pfmainConf lmtp_tls_security_level
    +syntax keyword pfmainConf lmtp_tls_session_cache_database
    +syntax keyword pfmainConf lmtp_tls_session_cache_timeout
    +syntax keyword pfmainConf lmtp_tls_trust_anchor_file
    +syntax keyword pfmainConf lmtp_tls_verify_cert_match
    +syntax keyword pfmainConf lmtp_use_tls
    +syntax keyword pfmainConf lmtp_xforward_timeout
    +syntax keyword pfmainConf local_command_shell
    +syntax keyword pfmainConf local_delivery_status_filter
    +syntax keyword pfmainConf local_destination_concurrency_limit
    +syntax keyword pfmainConf local_destination_recipient_limit
    +syntax keyword pfmainConf local_header_rewrite_clients
    +syntax keyword pfmainConf local_recipient_maps
    +syntax keyword pfmainConf local_transport
    +syntax keyword pfmainConf luser_relay
    +syntax keyword pfmainConf mail_name
    +syntax keyword pfmainConf mail_owner
    +syntax keyword pfmainConf mail_release_date
    +syntax keyword pfmainConf mail_spool_directory
    +syntax keyword pfmainConf mail_version
    +syntax keyword pfmainConf mailbox_command
    +syntax keyword pfmainConf mailbox_command_maps
    +syntax keyword pfmainConf mailbox_delivery_lock
    +syntax keyword pfmainConf mailbox_size_limit
    +syntax keyword pfmainConf mailbox_transport
    +syntax keyword pfmainConf mailbox_transport_maps
    +syntax keyword pfmainConf mailq_path
    +syntax keyword pfmainConf manpage_directory
    +syntax keyword pfmainConf maps_rbl_domains
    +syntax keyword pfmainConf maps_rbl_reject_code
    +syntax keyword pfmainConf masquerade_classes
    +syntax keyword pfmainConf masquerade_domains
    +syntax keyword pfmainConf masquerade_exceptions
    +syntax keyword pfmainConf master_service_disable
    +syntax keyword pfmainConf max_idle
    +syntax keyword pfmainConf max_use
    +syntax keyword pfmainConf maximal_backoff_time
    +syntax keyword pfmainConf maximal_queue_lifetime
    +syntax keyword pfmainConf message_drop_headers
    +syntax keyword pfmainConf message_reject_characters
    +syntax keyword pfmainConf message_size_limit
    +syntax keyword pfmainConf message_strip_characters
    +syntax keyword pfmainConf meta_directory
    +syntax keyword pfmainConf milter_command_timeout
    +syntax keyword pfmainConf milter_connect_macros
    +syntax keyword pfmainConf milter_connect_timeout
    +syntax keyword pfmainConf milter_content_timeout
    +syntax keyword pfmainConf milter_data_macros
    +syntax keyword pfmainConf milter_default_action
    +syntax keyword pfmainConf milter_end_of_data_macros
    +syntax keyword pfmainConf milter_end_of_header_macros
    +syntax keyword pfmainConf milter_header_checks
    +syntax keyword pfmainConf milter_helo_macros
    +syntax keyword pfmainConf milter_macro_daemon_name
    +syntax keyword pfmainConf milter_macro_v
    +syntax keyword pfmainConf milter_mail_macros
    +syntax keyword pfmainConf milter_protocol
    +syntax keyword pfmainConf milter_rcpt_macros
    +syntax keyword pfmainConf milter_unknown_command_macros
    +syntax keyword pfmainConf mime_boundary_length_limit
    +syntax keyword pfmainConf mime_header_checks
    +syntax keyword pfmainConf mime_nesting_limit
    +syntax keyword pfmainConf minimal_backoff_time
    +syntax keyword pfmainConf multi_instance_directories
    +syntax keyword pfmainConf multi_instance_enable
    +syntax keyword pfmainConf multi_instance_group
    +syntax keyword pfmainConf multi_instance_name
    +syntax keyword pfmainConf multi_instance_wrapper
    +syntax keyword pfmainConf multi_recipient_bounce_reject_code
    +syntax keyword pfmainConf mydestination
    +syntax keyword pfmainConf mydomain
    +syntax keyword pfmainConf myhostname
    +syntax keyword pfmainConf mynetworks
    +syntax keyword pfmainConf mynetworks_style
    +syntax keyword pfmainConf myorigin
    +syntax keyword pfmainConf nested_header_checks
    +syntax keyword pfmainConf newaliases_path
    +syntax keyword pfmainConf non_fqdn_reject_code
    +syntax keyword pfmainConf non_smtpd_milters
    +syntax keyword pfmainConf notify_classes
    +syntax keyword pfmainConf nullmx_reject_code
    +syntax keyword pfmainConf owner_request_special
    +syntax keyword pfmainConf parent_domain_matches_subdomains
    +syntax keyword pfmainConf permit_mx_backup_networks
    +syntax keyword pfmainConf pickup_service_name
    +syntax keyword pfmainConf pipe_delivery_status_filter
    +syntax keyword pfmainConf plaintext_reject_code
    +syntax keyword pfmainConf postmulti_control_commands
    +syntax keyword pfmainConf postmulti_start_commands
    +syntax keyword pfmainConf postmulti_stop_commands
    +syntax keyword pfmainConf postscreen_access_list
    +syntax keyword pfmainConf postscreen_bare_newline_action
    +syntax keyword pfmainConf postscreen_bare_newline_enable
    +syntax keyword pfmainConf postscreen_bare_newline_ttl
    +syntax keyword pfmainConf postscreen_blacklist_action
    +syntax keyword pfmainConf postscreen_cache_cleanup_interval
    +syntax keyword pfmainConf postscreen_cache_map
    +syntax keyword pfmainConf postscreen_cache_retention_time
    +syntax keyword pfmainConf postscreen_client_connection_count_limit
    +syntax keyword pfmainConf postscreen_command_count_limit
    +syntax keyword pfmainConf postscreen_command_filter
    +syntax keyword pfmainConf postscreen_command_time_limit
    +syntax keyword pfmainConf postscreen_disable_vrfy_command
    +syntax keyword pfmainConf postscreen_discard_ehlo_keyword_address_maps
    +syntax keyword pfmainConf postscreen_discard_ehlo_keywords
    +syntax keyword pfmainConf postscreen_dnsbl_action
    +syntax keyword pfmainConf postscreen_dnsbl_reply_map
    +syntax keyword pfmainConf postscreen_dnsbl_sites
    +syntax keyword pfmainConf postscreen_dnsbl_threshold
    +syntax keyword pfmainConf postscreen_dnsbl_timeout
    +syntax keyword pfmainConf postscreen_dnsbl_ttl
    +syntax keyword pfmainConf postscreen_dnsbl_whitelist_threshold
    +syntax keyword pfmainConf postscreen_enforce_tls
    +syntax keyword pfmainConf postscreen_expansion_filter
    +syntax keyword pfmainConf postscreen_forbidden_commands
    +syntax keyword pfmainConf postscreen_greet_action
    +syntax keyword pfmainConf postscreen_greet_banner
    +syntax keyword pfmainConf postscreen_greet_ttl
    +syntax keyword pfmainConf postscreen_greet_wait
    +syntax keyword pfmainConf postscreen_helo_required
    +syntax keyword pfmainConf postscreen_non_smtp_command_action
    +syntax keyword pfmainConf postscreen_non_smtp_command_enable
    +syntax keyword pfmainConf postscreen_non_smtp_command_ttl
    +syntax keyword pfmainConf postscreen_pipelining_action
    +syntax keyword pfmainConf postscreen_pipelining_enable
    +syntax keyword pfmainConf postscreen_pipelining_ttl
    +syntax keyword pfmainConf postscreen_post_queue_limit
    +syntax keyword pfmainConf postscreen_pre_queue_limit
    +syntax keyword pfmainConf postscreen_reject_footer
    +syntax keyword pfmainConf postscreen_tls_security_level
    +syntax keyword pfmainConf postscreen_upstream_proxy_protocol
    +syntax keyword pfmainConf postscreen_upstream_proxy_timeout
    +syntax keyword pfmainConf postscreen_use_tls
    +syntax keyword pfmainConf postscreen_watchdog_timeout
    +syntax keyword pfmainConf postscreen_whitelist_interfaces
    +syntax keyword pfmainConf prepend_delivered_header
    +syntax keyword pfmainConf process_id
    +syntax keyword pfmainConf process_id_directory
    +syntax keyword pfmainConf process_name
    +syntax keyword pfmainConf propagate_unmatched_extensions
    +syntax keyword pfmainConf proxy_interfaces
    +syntax keyword pfmainConf proxy_read_maps
    +syntax keyword pfmainConf proxy_write_maps
    +syntax keyword pfmainConf proxymap_service_name
    +syntax keyword pfmainConf proxywrite_service_name
    +syntax keyword pfmainConf qmgr_clog_warn_time
    +syntax keyword pfmainConf qmgr_daemon_timeout
    +syntax keyword pfmainConf qmgr_fudge_factor
    +syntax keyword pfmainConf qmgr_ipc_timeout
    +syntax keyword pfmainConf qmgr_message_active_limit
    +syntax keyword pfmainConf qmgr_message_recipient_limit
    +syntax keyword pfmainConf qmgr_message_recipient_minimum
    +syntax keyword pfmainConf qmqpd_authorized_clients
    +syntax keyword pfmainConf qmqpd_client_port_logging
    +syntax keyword pfmainConf qmqpd_error_delay
    +syntax keyword pfmainConf qmqpd_timeout
    +syntax keyword pfmainConf queue_directory
    +syntax keyword pfmainConf queue_file_attribute_count_limit
    +syntax keyword pfmainConf queue_minfree
    +syntax keyword pfmainConf queue_run_delay
    +syntax keyword pfmainConf queue_service_name
    +syntax keyword pfmainConf rbl_reply_maps
    +syntax keyword pfmainConf readme_directory
    +syntax keyword pfmainConf receive_override_options
    +syntax keyword pfmainConf recipient_bcc_maps
    +syntax keyword pfmainConf recipient_canonical_classes
    +syntax keyword pfmainConf recipient_canonical_maps
    +syntax keyword pfmainConf recipient_delimiter
    +syntax keyword pfmainConf reject_code
    +syntax keyword pfmainConf reject_tempfail_action
    +syntax keyword pfmainConf relay_clientcerts
    +syntax keyword pfmainConf relay_destination_concurrency_limit
    +syntax keyword pfmainConf relay_destination_recipient_limit
    +syntax keyword pfmainConf relay_domains
    +syntax keyword pfmainConf relay_domains_reject_code
    +syntax keyword pfmainConf relay_recipient_maps
    +syntax keyword pfmainConf relay_transport
    +syntax keyword pfmainConf relayhost
    +syntax keyword pfmainConf relocated_maps
    +syntax keyword pfmainConf remote_header_rewrite_domain
    +syntax keyword pfmainConf require_home_directory
    +syntax keyword pfmainConf reset_owner_alias
    +syntax keyword pfmainConf resolve_dequoted_address
    +syntax keyword pfmainConf resolve_null_domain
    +syntax keyword pfmainConf resolve_numeric_domain
    +syntax keyword pfmainConf rewrite_service_name
    +syntax keyword pfmainConf sample_directory
    +syntax keyword pfmainConf send_cyrus_sasl_authzid
    +syntax keyword pfmainConf sender_based_routing
    +syntax keyword pfmainConf sender_bcc_maps
    +syntax keyword pfmainConf sender_canonical_classes
    +syntax keyword pfmainConf sender_canonical_maps
    +syntax keyword pfmainConf sender_dependent_default_transport_maps
    +syntax keyword pfmainConf sender_dependent_relayhost_maps
    +syntax keyword pfmainConf sendmail_fix_line_endings
    +syntax keyword pfmainConf sendmail_path
    +syntax keyword pfmainConf service_throttle_time
    +syntax keyword pfmainConf setgid_group
    +syntax keyword pfmainConf shlib_directory
    +syntax keyword pfmainConf show_user_unknown_table_name
    +syntax keyword pfmainConf showq_service_name
    +syntax keyword pfmainConf smtp_address_preference
    +syntax keyword pfmainConf smtp_address_verify_target
    +syntax keyword pfmainConf smtp_always_send_ehlo
    +syntax keyword pfmainConf smtp_bind_address
    +syntax keyword pfmainConf smtp_bind_address6
    +syntax keyword pfmainConf smtp_body_checks
    +syntax keyword pfmainConf smtp_cname_overrides_servername
    +syntax keyword pfmainConf smtp_connect_timeout
    +syntax keyword pfmainConf smtp_connection_cache_destinations
    +syntax keyword pfmainConf smtp_connection_cache_on_demand
    +syntax keyword pfmainConf smtp_connection_cache_time_limit
    +syntax keyword pfmainConf smtp_connection_reuse_count_limit
    +syntax keyword pfmainConf smtp_connection_reuse_time_limit
    +syntax keyword pfmainConf smtp_data_done_timeout
    +syntax keyword pfmainConf smtp_data_init_timeout
    +syntax keyword pfmainConf smtp_data_xfer_timeout
    +syntax keyword pfmainConf smtp_defer_if_no_mx_address_found
    +syntax keyword pfmainConf smtp_delivery_status_filter
    +syntax keyword pfmainConf smtp_destination_concurrency_limit
    +syntax keyword pfmainConf smtp_destination_recipient_limit
    +syntax keyword pfmainConf smtp_discard_ehlo_keyword_address_maps
    +syntax keyword pfmainConf smtp_discard_ehlo_keywords
    +syntax keyword pfmainConf smtp_dns_reply_filter
    +syntax keyword pfmainConf smtp_dns_resolver_options
    +syntax keyword pfmainConf smtp_dns_support_level
    +syntax keyword pfmainConf smtp_enforce_tls
    +syntax keyword pfmainConf smtp_fallback_relay
    +syntax keyword pfmainConf smtp_generic_maps
    +syntax keyword pfmainConf smtp_header_checks
    +syntax keyword pfmainConf smtp_helo_name
    +syntax keyword pfmainConf smtp_helo_timeout
    +syntax keyword pfmainConf smtp_host_lookup
    +syntax keyword pfmainConf smtp_line_length_limit
    +syntax keyword pfmainConf smtp_mail_timeout
    +syntax keyword pfmainConf smtp_mime_header_checks
    +syntax keyword pfmainConf smtp_mx_address_limit
    +syntax keyword pfmainConf smtp_mx_session_limit
    +syntax keyword pfmainConf smtp_nested_header_checks
    +syntax keyword pfmainConf smtp_never_send_ehlo
    +syntax keyword pfmainConf smtp_per_record_deadline
    +syntax keyword pfmainConf smtp_pix_workaround_delay_time
    +syntax keyword pfmainConf smtp_pix_workaround_maps
    +syntax keyword pfmainConf smtp_pix_workaround_threshold_time
    +syntax keyword pfmainConf smtp_pix_workarounds
    +syntax keyword pfmainConf smtp_quit_timeout
    +syntax keyword pfmainConf smtp_quote_rfc821_envelope
    +syntax keyword pfmainConf smtp_randomize_addresses
    +syntax keyword pfmainConf smtp_rcpt_timeout
    +syntax keyword pfmainConf smtp_reply_filter
    +syntax keyword pfmainConf smtp_rset_timeout
    +syntax keyword pfmainConf smtp_sasl_auth_cache_name
    +syntax keyword pfmainConf smtp_sasl_auth_cache_time
    +syntax keyword pfmainConf smtp_sasl_auth_enable
    +syntax keyword pfmainConf smtp_sasl_auth_soft_bounce
    +syntax keyword pfmainConf smtp_sasl_mechanism_filter
    +syntax keyword pfmainConf smtp_sasl_password_maps
    +syntax keyword pfmainConf smtp_sasl_path
    +syntax keyword pfmainConf smtp_sasl_security_options
    +syntax keyword pfmainConf smtp_sasl_tls_security_options
    +syntax keyword pfmainConf smtp_sasl_tls_verified_security_options
    +syntax keyword pfmainConf smtp_sasl_type
    +syntax keyword pfmainConf smtp_send_dummy_mail_auth
    +syntax keyword pfmainConf smtp_send_xforward_command
    +syntax keyword pfmainConf smtp_sender_dependent_authentication
    +syntax keyword pfmainConf smtp_skip_4xx_greeting
    +syntax keyword pfmainConf smtp_skip_5xx_greeting
    +syntax keyword pfmainConf smtp_skip_quit_response
    +syntax keyword pfmainConf smtp_starttls_timeout
    +syntax keyword pfmainConf smtp_tls_CAfile
    +syntax keyword pfmainConf smtp_tls_CApath
    +syntax keyword pfmainConf smtp_tls_block_early_mail_reply
    +syntax keyword pfmainConf smtp_tls_cert_file
    +syntax keyword pfmainConf smtp_tls_cipherlist
    +syntax keyword pfmainConf smtp_tls_ciphers
    +syntax keyword pfmainConf smtp_tls_dcert_file
    +syntax keyword pfmainConf smtp_tls_dkey_file
    +syntax keyword pfmainConf smtp_tls_eccert_file
    +syntax keyword pfmainConf smtp_tls_eckey_file
    +syntax keyword pfmainConf smtp_tls_enforce_peername
    +syntax keyword pfmainConf smtp_tls_exclude_ciphers
    +syntax keyword pfmainConf smtp_tls_fingerprint_cert_match
    +syntax keyword pfmainConf smtp_tls_fingerprint_digest
    +syntax keyword pfmainConf smtp_tls_force_insecure_host_tlsa_lookup
    +syntax keyword pfmainConf smtp_tls_key_file
    +syntax keyword pfmainConf smtp_tls_loglevel
    +syntax keyword pfmainConf smtp_tls_mandatory_ciphers
    +syntax keyword pfmainConf smtp_tls_mandatory_exclude_ciphers
    +syntax keyword pfmainConf smtp_tls_mandatory_protocols
    +syntax keyword pfmainConf smtp_tls_note_starttls_offer
    +syntax keyword pfmainConf smtp_tls_per_site
    +syntax keyword pfmainConf smtp_tls_policy_maps
    +syntax keyword pfmainConf smtp_tls_protocols
    +syntax keyword pfmainConf smtp_tls_scert_verifydepth
    +syntax keyword pfmainConf smtp_tls_secure_cert_match
    +syntax keyword pfmainConf smtp_tls_security_level
    +syntax keyword pfmainConf smtp_tls_session_cache_database
    +syntax keyword pfmainConf smtp_tls_session_cache_timeout
    +syntax keyword pfmainConf smtp_tls_trust_anchor_file
    +syntax keyword pfmainConf smtp_tls_verify_cert_match
    +syntax keyword pfmainConf smtp_tls_wrappermode
    +syntax keyword pfmainConf smtp_use_tls
    +syntax keyword pfmainConf smtp_xforward_timeout
    +syntax keyword pfmainConf smtpd_authorized_verp_clients
    +syntax keyword pfmainConf smtpd_authorized_xclient_hosts
    +syntax keyword pfmainConf smtpd_authorized_xforward_hosts
    +syntax keyword pfmainConf smtpd_banner
    +syntax keyword pfmainConf smtpd_client_connection_count_limit
    +syntax keyword pfmainConf smtpd_client_connection_rate_limit
    +syntax keyword pfmainConf smtpd_client_event_limit_exceptions
    +syntax keyword pfmainConf smtpd_client_message_rate_limit
    +syntax keyword pfmainConf smtpd_client_new_tls_session_rate_limit
    +syntax keyword pfmainConf smtpd_client_port_logging
    +syntax keyword pfmainConf smtpd_client_recipient_rate_limit
    +syntax keyword pfmainConf smtpd_client_restrictions
    +syntax keyword pfmainConf smtpd_command_filter
    +syntax keyword pfmainConf smtpd_data_restrictions
    +syntax keyword pfmainConf smtpd_delay_open_until_valid_rcpt
    +syntax keyword pfmainConf smtpd_delay_reject
    +syntax keyword pfmainConf smtpd_discard_ehlo_keyword_address_maps
    +syntax keyword pfmainConf smtpd_discard_ehlo_keywords
    +syntax keyword pfmainConf smtpd_dns_reply_filter
    +syntax keyword pfmainConf smtpd_end_of_data_restrictions
    +syntax keyword pfmainConf smtpd_enforce_tls
    +syntax keyword pfmainConf smtpd_error_sleep_time
    +syntax keyword pfmainConf smtpd_etrn_restrictions
    +syntax keyword pfmainConf smtpd_expansion_filter
    +syntax keyword pfmainConf smtpd_forbidden_commands
    +syntax keyword pfmainConf smtpd_hard_error_limit
    +syntax keyword pfmainConf smtpd_helo_required
    +syntax keyword pfmainConf smtpd_helo_restrictions
    +syntax keyword pfmainConf smtpd_history_flush_threshold
    +syntax keyword pfmainConf smtpd_junk_command_limit
    +syntax keyword pfmainConf smtpd_log_access_permit_actions
    +syntax keyword pfmainConf smtpd_milters
    +syntax keyword pfmainConf smtpd_noop_commands
    +syntax keyword pfmainConf smtpd_null_access_lookup_key
    +syntax keyword pfmainConf smtpd_peername_lookup
    +syntax keyword pfmainConf smtpd_per_record_deadline
    +syntax keyword pfmainConf smtpd_policy_service_default_action
    +syntax keyword pfmainConf smtpd_policy_service_max_idle
    +syntax keyword pfmainConf smtpd_policy_service_max_ttl
    +syntax keyword pfmainConf smtpd_policy_service_request_limit
    +syntax keyword pfmainConf smtpd_policy_service_retry_delay
    +syntax keyword pfmainConf smtpd_policy_service_timeout
    +syntax keyword pfmainConf smtpd_policy_service_try_limit
    +syntax keyword pfmainConf smtpd_proxy_ehlo
    +syntax keyword pfmainConf smtpd_proxy_filter
    +syntax keyword pfmainConf smtpd_proxy_options
    +syntax keyword pfmainConf smtpd_proxy_timeout
    +syntax keyword pfmainConf smtpd_recipient_limit
    +syntax keyword pfmainConf smtpd_recipient_overshoot_limit
    +syntax keyword pfmainConf smtpd_recipient_restrictions
    +syntax keyword pfmainConf smtpd_reject_footer
    +syntax keyword pfmainConf smtpd_reject_unlisted_recipient
    +syntax keyword pfmainConf smtpd_reject_unlisted_sender
    +syntax keyword pfmainConf smtpd_relay_restrictions
    +syntax keyword pfmainConf smtpd_restriction_classes
    +syntax keyword pfmainConf smtpd_sasl_application_name
    +syntax keyword pfmainConf smtpd_sasl_auth_enable
    +syntax keyword pfmainConf smtpd_sasl_authenticated_header
    +syntax keyword pfmainConf smtpd_sasl_exceptions_networks
    +syntax keyword pfmainConf smtpd_sasl_local_domain
    +syntax keyword pfmainConf smtpd_sasl_path
    +syntax keyword pfmainConf smtpd_sasl_security_options
    +syntax keyword pfmainConf smtpd_sasl_service
    +syntax keyword pfmainConf smtpd_sasl_tls_security_options
    +syntax keyword pfmainConf smtpd_sasl_type
    +syntax keyword pfmainConf smtpd_sender_login_maps
    +syntax keyword pfmainConf smtpd_sender_restrictions
    +syntax keyword pfmainConf smtpd_service_name
    +syntax keyword pfmainConf smtpd_soft_error_limit
    +syntax keyword pfmainConf smtpd_starttls_timeout
    +syntax keyword pfmainConf smtpd_timeout
    +syntax keyword pfmainConf smtpd_tls_CAfile
    +syntax keyword pfmainConf smtpd_tls_CApath
    +syntax keyword pfmainConf smtpd_tls_always_issue_session_ids
    +syntax keyword pfmainConf smtpd_tls_ask_ccert
    +syntax keyword pfmainConf smtpd_tls_auth_only
    +syntax keyword pfmainConf smtpd_tls_ccert_verifydepth
    +syntax keyword pfmainConf smtpd_tls_cert_file
    +syntax keyword pfmainConf smtpd_tls_cipherlist
    +syntax keyword pfmainConf smtpd_tls_ciphers
    +syntax keyword pfmainConf smtpd_tls_dcert_file
    +syntax keyword pfmainConf smtpd_tls_dh1024_param_file
    +syntax keyword pfmainConf smtpd_tls_dh512_param_file
    +syntax keyword pfmainConf smtpd_tls_dkey_file
    +syntax keyword pfmainConf smtpd_tls_eccert_file
    +syntax keyword pfmainConf smtpd_tls_eckey_file
    +syntax keyword pfmainConf smtpd_tls_eecdh_grade
    +syntax keyword pfmainConf smtpd_tls_exclude_ciphers
    +syntax keyword pfmainConf smtpd_tls_fingerprint_digest
    +syntax keyword pfmainConf smtpd_tls_key_file
    +syntax keyword pfmainConf smtpd_tls_loglevel
    +syntax keyword pfmainConf smtpd_tls_mandatory_ciphers
    +syntax keyword pfmainConf smtpd_tls_mandatory_exclude_ciphers
    +syntax keyword pfmainConf smtpd_tls_mandatory_protocols
    +syntax keyword pfmainConf smtpd_tls_protocols
    +syntax keyword pfmainConf smtpd_tls_received_header
    +syntax keyword pfmainConf smtpd_tls_req_ccert
    +syntax keyword pfmainConf smtpd_tls_security_level
    +syntax keyword pfmainConf smtpd_tls_session_cache_database
    +syntax keyword pfmainConf smtpd_tls_session_cache_timeout
    +syntax keyword pfmainConf smtpd_tls_wrappermode
    +syntax keyword pfmainConf smtpd_upstream_proxy_protocol
    +syntax keyword pfmainConf smtpd_upstream_proxy_timeout
    +syntax keyword pfmainConf smtpd_use_tls
    +syntax keyword pfmainConf smtputf8_autodetect_classes
    +syntax keyword pfmainConf smtputf8_enable
    +syntax keyword pfmainConf soft_bounce
    +syntax keyword pfmainConf stale_lock_time
    +syntax keyword pfmainConf stress
    +syntax keyword pfmainConf strict_7bit_headers
    +syntax keyword pfmainConf strict_8bitmime
    +syntax keyword pfmainConf strict_8bitmime_body
    +syntax keyword pfmainConf strict_mailbox_ownership
    +syntax keyword pfmainConf strict_mime_encoding_domain
    +syntax keyword pfmainConf strict_rfc821_envelopes
    +syntax keyword pfmainConf strict_smtputf8
    +syntax keyword pfmainConf sun_mailtool_compatibility
    +syntax keyword pfmainConf swap_bangpath
    +syntax keyword pfmainConf syslog_facility
    +syntax keyword pfmainConf syslog_name
    +syntax keyword pfmainConf tcp_windowsize
    +syntax keyword pfmainConf tls_append_default_CA
    +syntax keyword pfmainConf tls_daemon_random_bytes
    +syntax keyword pfmainConf tls_dane_digest_agility
    +syntax keyword pfmainConf tls_dane_digests
    +syntax keyword pfmainConf tls_dane_trust_anchor_digest_enable
    +syntax keyword pfmainConf tls_disable_workarounds
    +syntax keyword pfmainConf tls_eecdh_strong_curve
    +syntax keyword pfmainConf tls_eecdh_ultra_curve
    +syntax keyword pfmainConf tls_export_cipherlist
    +syntax keyword pfmainConf tls_high_cipherlist
    +syntax keyword pfmainConf tls_legacy_public_key_fingerprints
    +syntax keyword pfmainConf tls_low_cipherlist
    +syntax keyword pfmainConf tls_medium_cipherlist
    +syntax keyword pfmainConf tls_null_cipherlist
    +syntax keyword pfmainConf tls_preempt_cipherlist
    +syntax keyword pfmainConf tls_random_bytes
    +syntax keyword pfmainConf tls_random_exchange_name
    +syntax keyword pfmainConf tls_random_prng_update_period
    +syntax keyword pfmainConf tls_random_reseed_period
    +syntax keyword pfmainConf tls_random_source
    +syntax keyword pfmainConf tls_session_ticket_cipher
    +syntax keyword pfmainConf tls_ssl_options
    +syntax keyword pfmainConf tls_wildcard_matches_multiple_labels
    +syntax keyword pfmainConf tlsmgr_service_name
    +syntax keyword pfmainConf tlsproxy_enforce_tls
    +syntax keyword pfmainConf tlsproxy_service_name
    +syntax keyword pfmainConf tlsproxy_tls_CAfile
    +syntax keyword pfmainConf tlsproxy_tls_CApath
    +syntax keyword pfmainConf tlsproxy_tls_always_issue_session_ids
    +syntax keyword pfmainConf tlsproxy_tls_ask_ccert
    +syntax keyword pfmainConf tlsproxy_tls_ccert_verifydepth
    +syntax keyword pfmainConf tlsproxy_tls_cert_file
    +syntax keyword pfmainConf tlsproxy_tls_ciphers
    +syntax keyword pfmainConf tlsproxy_tls_dcert_file
    +syntax keyword pfmainConf tlsproxy_tls_dh1024_param_file
    +syntax keyword pfmainConf tlsproxy_tls_dh512_param_file
    +syntax keyword pfmainConf tlsproxy_tls_dkey_file
    +syntax keyword pfmainConf tlsproxy_tls_eccert_file
    +syntax keyword pfmainConf tlsproxy_tls_eckey_file
    +syntax keyword pfmainConf tlsproxy_tls_eecdh_grade
    +syntax keyword pfmainConf tlsproxy_tls_exclude_ciphers
    +syntax keyword pfmainConf tlsproxy_tls_fingerprint_digest
    +syntax keyword pfmainConf tlsproxy_tls_key_file
    +syntax keyword pfmainConf tlsproxy_tls_loglevel
    +syntax keyword pfmainConf tlsproxy_tls_mandatory_ciphers
    +syntax keyword pfmainConf tlsproxy_tls_mandatory_exclude_ciphers
    +syntax keyword pfmainConf tlsproxy_tls_mandatory_protocols
    +syntax keyword pfmainConf tlsproxy_tls_protocols
    +syntax keyword pfmainConf tlsproxy_tls_req_ccert
    +syntax keyword pfmainConf tlsproxy_tls_security_level
    +syntax keyword pfmainConf tlsproxy_tls_session_cache_timeout
    +syntax keyword pfmainConf tlsproxy_use_tls
    +syntax keyword pfmainConf tlsproxy_watchdog_timeout
    +syntax keyword pfmainConf trace_service_name
    +syntax keyword pfmainConf transport_delivery_slot_cost
    +syntax keyword pfmainConf transport_delivery_slot_discount
    +syntax keyword pfmainConf transport_delivery_slot_loan
    +syntax keyword pfmainConf transport_destination_concurrency_failed_cohort_limit
    +syntax keyword pfmainConf transport_destination_concurrency_limit
    +syntax keyword pfmainConf transport_destination_concurrency_negative_feedback
    +syntax keyword pfmainConf transport_destination_concurrency_positive_feedback
    +syntax keyword pfmainConf transport_destination_rate_delay
    +syntax keyword pfmainConf transport_destination_recipient_limit
    +syntax keyword pfmainConf transport_extra_recipient_limit
    +syntax keyword pfmainConf transport_initial_destination_concurrency
    +syntax keyword pfmainConf transport_maps
    +syntax keyword pfmainConf transport_minimum_delivery_slots
    +syntax keyword pfmainConf transport_recipient_limit
    +syntax keyword pfmainConf transport_recipient_refill_delay
    +syntax keyword pfmainConf transport_recipient_refill_limit
    +syntax keyword pfmainConf transport_retry_time
    +syntax keyword pfmainConf transport_time_limit
    +syntax keyword pfmainConf trigger_timeout
    +syntax keyword pfmainConf undisclosed_recipients_header
    +syntax keyword pfmainConf unknown_address_reject_code
    +syntax keyword pfmainConf unknown_address_tempfail_action
    +syntax keyword pfmainConf unknown_client_reject_code
    +syntax keyword pfmainConf unknown_helo_hostname_tempfail_action
    +syntax keyword pfmainConf unknown_hostname_reject_code
    +syntax keyword pfmainConf unknown_local_recipient_reject_code
    +syntax keyword pfmainConf unknown_relay_recipient_reject_code
    +syntax keyword pfmainConf unknown_virtual_alias_reject_code
    +syntax keyword pfmainConf unknown_virtual_mailbox_reject_code
    +syntax keyword pfmainConf unverified_recipient_defer_code
    +syntax keyword pfmainConf unverified_recipient_reject_code
    +syntax keyword pfmainConf unverified_recipient_reject_reason
    +syntax keyword pfmainConf unverified_recipient_tempfail_action
    +syntax keyword pfmainConf unverified_sender_defer_code
    +syntax keyword pfmainConf unverified_sender_reject_code
    +syntax keyword pfmainConf unverified_sender_reject_reason
    +syntax keyword pfmainConf unverified_sender_tempfail_action
    +syntax keyword pfmainConf verp_delimiter_filter
    +syntax keyword pfmainConf virtual_alias_address_length_limit
    +syntax keyword pfmainConf virtual_alias_domains
    +syntax keyword pfmainConf virtual_alias_expansion_limit
    +syntax keyword pfmainConf virtual_alias_maps
    +syntax keyword pfmainConf virtual_alias_recursion_limit
    +syntax keyword pfmainConf virtual_delivery_status_filter
    +syntax keyword pfmainConf virtual_destination_concurrency_limit
    +syntax keyword pfmainConf virtual_destination_recipient_limit
    +syntax keyword pfmainConf virtual_gid_maps
    +syntax keyword pfmainConf virtual_mailbox_base
    +syntax keyword pfmainConf virtual_mailbox_domains
    +syntax keyword pfmainConf virtual_mailbox_limit
    +syntax keyword pfmainConf virtual_mailbox_lock
    +syntax keyword pfmainConf virtual_mailbox_maps
    +syntax keyword pfmainConf virtual_maps
    +syntax keyword pfmainConf virtual_minimum_uid
    +syntax keyword pfmainConf virtual_transport
    +syntax keyword pfmainConf virtual_uid_maps
    +syntax match pfmainRef "$\<2bounce_notice_recipient\>"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +syntax match pfmainRef "$\"
    +
    +syntax keyword pfmainWord accept
    +syntax keyword pfmainWord all
    +syntax keyword pfmainWord always
    +syntax keyword pfmainWord check_address_map
    +syntax keyword pfmainWord check_ccert_access
    +syntax keyword pfmainWord check_client_a_access
    +syntax keyword pfmainWord check_client_access
    +syntax keyword pfmainWord check_client_mx_access
    +syntax keyword pfmainWord check_client_ns_access
    +syntax keyword pfmainWord check_etrn_access
    +syntax keyword pfmainWord check_helo_a_access
    +syntax keyword pfmainWord check_helo_access
    +syntax keyword pfmainWord check_helo_mx_access
    +syntax keyword pfmainWord check_helo_ns_access
    +syntax keyword pfmainWord check_policy_service
    +syntax keyword pfmainWord check_recipient_a_access
    +syntax keyword pfmainWord check_recipient_access
    +syntax keyword pfmainWord check_recipient_maps
    +syntax keyword pfmainWord check_recipient_mx_access
    +syntax keyword pfmainWord check_recipient_ns_access
    +syntax keyword pfmainWord check_relay_domains
    +syntax keyword pfmainWord check_reverse_client_hostname_a_access
    +syntax keyword pfmainWord check_reverse_client_hostname_access
    +syntax keyword pfmainWord check_reverse_client_hostname_mx_access
    +syntax keyword pfmainWord check_reverse_client_hostname_ns_access
    +syntax keyword pfmainWord check_sasl_access
    +syntax keyword pfmainWord check_sender_a_access
    +syntax keyword pfmainWord check_sender_access
    +syntax keyword pfmainWord check_sender_mx_access
    +syntax keyword pfmainWord check_sender_ns_access
    +syntax keyword pfmainWord class
    +syntax keyword pfmainWord client_address
    +syntax keyword pfmainWord client_port
    +syntax keyword pfmainWord dane
    +syntax keyword pfmainWord dane-only
    +syntax keyword pfmainWord defer
    +syntax keyword pfmainWord defer_if_permit
    +syntax keyword pfmainWord defer_if_reject
    +syntax keyword pfmainWord defer_unauth_destination
    +syntax keyword pfmainWord disabled
    +syntax keyword pfmainWord dns
    +syntax keyword pfmainWord dnssec
    +syntax keyword pfmainWord drop
    +syntax keyword pfmainWord dunno
    +syntax keyword pfmainWord enabled
    +syntax keyword pfmainWord encrypt
    +syntax keyword pfmainWord enforce
    +syntax keyword pfmainWord envelope_recipient
    +syntax keyword pfmainWord envelope_sender
    +syntax keyword pfmainWord export
    +syntax keyword pfmainWord fingerprint
    +syntax keyword pfmainWord header_recipient
    +syntax keyword pfmainWord header_sender
    +syntax keyword pfmainWord high
    +syntax keyword pfmainWord host
    +syntax keyword pfmainWord ignore
    +syntax keyword pfmainWord ipv4
    +syntax keyword pfmainWord ipv6
    +syntax keyword pfmainWord localtime
    +syntax keyword pfmainWord low
    +syntax keyword pfmainWord may
    +syntax keyword pfmainWord maybe
    +syntax keyword pfmainWord medium
    +syntax keyword pfmainWord native
    +syntax keyword pfmainWord never
    +syntax keyword pfmainWord no_address_mappings
    +syntax keyword pfmainWord no_header_body_checks
    +syntax keyword pfmainWord no_header_reply
    +syntax keyword pfmainWord no_milters
    +syntax keyword pfmainWord no_unknown_recipient_checks
    +syntax keyword pfmainWord none
    +syntax keyword pfmainWord null
    +syntax keyword pfmainWord off
    +syntax keyword pfmainWord on
    +syntax keyword pfmainWord permit
    +syntax keyword pfmainWord permit_auth_destination
    +syntax keyword pfmainWord permit_dnswl_client
    +syntax keyword pfmainWord permit_inet_interfaces
    +syntax keyword pfmainWord permit_mx_backup
    +syntax keyword pfmainWord permit_mynetworks
    +syntax keyword pfmainWord permit_naked_ip_address
    +syntax keyword pfmainWord permit_rhswl_client
    +syntax keyword pfmainWord permit_sasl_authenticated
    +syntax keyword pfmainWord permit_tls_all_clientcerts
    +syntax keyword pfmainWord permit_tls_clientcerts
    +syntax keyword pfmainWord quarantine
    +syntax keyword pfmainWord reject
    +syntax keyword pfmainWord reject_authenticated_sender_login_mismatch
    +syntax keyword pfmainWord reject_invalid_helo_hostname
    +syntax keyword pfmainWord reject_invalid_hostname
    +syntax keyword pfmainWord reject_known_sender_login_mismatch
    +syntax keyword pfmainWord reject_maps_rbl
    +syntax keyword pfmainWord reject_multi_recipient_bounce
    +syntax keyword pfmainWord reject_non_fqdn_helo_hostname
    +syntax keyword pfmainWord reject_non_fqdn_hostname
    +syntax keyword pfmainWord reject_non_fqdn_recipient
    +syntax keyword pfmainWord reject_non_fqdn_sender
    +syntax keyword pfmainWord reject_plaintext_session
    +syntax keyword pfmainWord reject_rbl
    +syntax keyword pfmainWord reject_rbl_client
    +syntax keyword pfmainWord reject_rhsbl_client
    +syntax keyword pfmainWord reject_rhsbl_helo
    +syntax keyword pfmainWord reject_rhsbl_recipient
    +syntax keyword pfmainWord reject_rhsbl_reverse_client
    +syntax keyword pfmainWord reject_rhsbl_sender
    +syntax keyword pfmainWord reject_sender_login_mismatch
    +syntax keyword pfmainWord reject_unauth_destination
    +syntax keyword pfmainWord reject_unauth_pipelining
    +syntax keyword pfmainWord reject_unauthenticated_sender_login_mismatch
    +syntax keyword pfmainWord reject_unknown_address
    +syntax keyword pfmainWord reject_unknown_client
    +syntax keyword pfmainWord reject_unknown_client_hostname
    +syntax keyword pfmainWord reject_unknown_forward_client_hostname
    +syntax keyword pfmainWord reject_unknown_helo_hostname
    +syntax keyword pfmainWord reject_unknown_hostname
    +syntax keyword pfmainWord reject_unknown_recipient_domain
    +syntax keyword pfmainWord reject_unknown_reverse_client_hostname
    +syntax keyword pfmainWord reject_unknown_sender_domain
    +syntax keyword pfmainWord reject_unlisted_recipient
    +syntax keyword pfmainWord reject_unlisted_sender
    +syntax keyword pfmainWord reject_unverified_recipient
    +syntax keyword pfmainWord reject_unverified_sender
    +syntax keyword pfmainWord secure
    +syntax keyword pfmainWord server_name
    +syntax keyword pfmainWord sleep
    +syntax keyword pfmainWord smtpd_access_maps
    +syntax keyword pfmainWord speed_adjust
    +syntax keyword pfmainWord strong
    +syntax keyword pfmainWord subnet
    +syntax keyword pfmainWord tempfail
    +syntax keyword pfmainWord ultra
    +syntax keyword pfmainWord warn_if_reject
    +syntax keyword pfmainWord CRYPTOPRO_TLSEXT_BUG
    +syntax keyword pfmainWord DONT_INSERT_EMPTY_FRAGMENTS
    +syntax keyword pfmainWord LEGACY_SERVER_CONNECT
    +syntax keyword pfmainWord MICROSOFT_BIG_SSLV3_BUFFER
    +syntax keyword pfmainWord MICROSOFT_SESS_ID_BUG
    +syntax keyword pfmainWord MSIE_SSLV2_RSA_PADDING
    +syntax keyword pfmainWord NETSCAPE_CHALLENGE_BUG
    +syntax keyword pfmainWord NETSCAPE_REUSE_CIPHER_CHANGE_BUG
    +syntax keyword pfmainWord SSLEAY_080_CLIENT_DH_BUG
    +syntax keyword pfmainWord SSLREF2_REUSE_CERT_TYPE_BUG
    +syntax keyword pfmainWord TLS_BLOCK_PADDING_BUG
    +syntax keyword pfmainWord TLS_D5_BUG
    +syntax keyword pfmainWord TLS_ROLLBACK_BUG
    +
    +syntax keyword pfmainDict	btree cidr environ hash nis pcre proxy regexp sdbm static tcp unix
    +syntax keyword pfmainQueueDir	incoming active deferred corrupt hold
    +syntax keyword pfmainTransport	smtp lmtp unix local relay uucp virtual
    +syntax keyword pfmainLock	fcntl flock dotlock
    +syntax keyword pfmainAnswer	yes no
    +
    +syntax match pfmainComment	"#.*$"
    +syntax match pfmainNumber	"\<\d\+\>"
    +syntax match pfmainTime		"\<\d\+[hmsd]\>"
    +syntax match pfmainIP		"\<\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}\>"
    +syntax match pfmainVariable	"\$\w\+" contains=pfmainRef
    +
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\<2bounce\>"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +syntax match pfmainSpecial	"\"
    +
    +
    +hi def link pfmainConf	Statement
    +hi def link pfmainRef	PreProc
    +hi def link pfmainWord	identifier
    +
    +hi def link pfmainDict	Type
    +hi def link pfmainQueueDir	Constant
    +hi def link pfmainTransport	Constant
    +hi def link pfmainLock	Constant
    +hi def link pfmainAnswer	Constant
    +
    +hi def link pfmainComment	Comment
    +hi def link pfmainNumber	Number
    +hi def link pfmainTime	Number
    +hi def link pfmainIP		Number
    +hi def link pfmainVariable	Error
    +hi def link pfmainSpecial	Special
    +
    +
    +let b:current_syntax = "pfmain"
    +
    +" vim: ts=8 sw=2
    diff --git a/.config/vim/syntax/php.vim b/.config/vim/syntax/php.vim
    new file mode 100644
    index 0000000..80662d6
    --- /dev/null
    +++ b/.config/vim/syntax/php.vim
    @@ -0,0 +1,978 @@
    +" Vim syntax file
    +" Language: php PHP 3/4/5/7/8
    +" Maintainer: Tyson Andre 
    +" Last Change: Sep 18, 2021
    +" URL: https://github.com/TysonAndre/php-vim-syntax
    +" Former Maintainers: 
    +"         Jason Woofenden 
    +"         Peter Hodge 
    +"         Debian VIM Maintainers 
    +"
    +" Note: If you are using a colour terminal with dark background, you will
    +"       probably find the 'elflord' colorscheme is much better for PHP's syntax
    +"       than the default colourscheme, because elflord's colours will better
    +"       highlight the break-points (Statements) in your code.
    +"
    +" Note: This embeds a modified copy of the html.vim with (mostly) different symbols,
    +" in order to implement php_htmlInStrings=2 can work as expected and correctly parse
    +" `
    +"   Previous Maintainer Claudio Fleiner 
    +"   Repository          https://notabug.org/jorgesumle/vim-html-syntax
    +"   Last Change         2021 Mar 02
    +"			Included patch #7900 to fix comments
    +"			Included patch #7916 to fix a few more things
    +"
    +" Options:
    +"   Set to anything to enable:
    +"     php_sql_query           SQL syntax highlighting inside strings
    +"     php_htmlInStrings       HTML syntax highlighting inside strings
    +" 
    +"                             By setting this to 2, this will use a local copy of
    +"                             HTML syntax highlighting instead of the official
    +"                             HTML syntax highlighting, and properly highlight
    +"                             ` as php
    +"   Set to a specific value:
    +"     php_folding = 1         fold classes and functions
    +"     php_folding = 2         fold all { } regions
    +"     php_sync_method = x  where x is an integer:
    +"                       -1  sync by search ( default )
    +"                       >0  sync at least x lines backwards
    +"                       0   sync from start
    +"   Set to 0 to _disable_:      (Added by Peter Hodge On June 9, 2006)
    +"     php_special_functions = 0      highlight functions with abnormal behaviour
    +"     php_alt_comparisons = 0        comparison operators in an alternate colour
    +"     php_alt_assignByReference = 0  '= &' in an alternate colour
    +"
    +"
    +" Note:
    +" Setting php_folding=1 will match a closing } by comparing the indent
    +" before the class or function keyword with the indent of a matching }.
    +" Setting php_folding=2 will match all of pairs of {,} ( see known
    +" bugs ii )
    +
    +" Known Bugs:
    +"  - setting  php_parent_error_close  on  and  php_parent_error_open  off
    +"    has these two leaks:
    +"     i) A closing ) or ] inside a string match to the last open ( or [
    +"        before the string, when the the closing ) or ] is on the same line
    +"        where the string started. In this case a following ) or ] after
    +"        the string would be highlighted as an error, what is incorrect.
    +"    ii) Same problem if you are setting php_folding = 2 with a closing
    +"        } inside an string on the first line of this string.
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +if !exists("main_syntax")
    +  let main_syntax = 'php'
    +endif
    +
    +" Start of copy of html for embedding in strings with  {{{
    +" This is a clone of https://notabug.org/jorgesumle/vim-html-syntax
    +" from 2021 Mar 02 with changed symbols and modifications to rules. See the Note in the file header.
    +"
    +" The default behavior of php_htmlInStrings causes a bug
    +" when you're working with code that contains the string literal `'&]"
    +
    +  " tags
    +  syn region  phpInnerHtmlString   contained start=+"+ end=+"+ contains=phpInnerHtmlSpecialChar,javaScriptExpression,@phpInnerHtmlPreproc
    +  syn region  phpInnerHtmlString   contained start=+'+ end=+'+ contains=phpInnerHtmlSpecialChar,javaScriptExpression,@phpInnerHtmlPreproc
    +  syn match   phpInnerHtmlValue    contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1   contains=javaScriptExpression,@phpInnerHtmlPreproc
    +  syn region  phpInnerHtmlEndTag   contained start=++ contains=phpInnerHtmlTagN,phpInnerHtmlTagError
    +  syn region  phpInnerHtmlTag      contained start=+<[^/]+   end=+>+ fold contains=phpInnerHtmlTagN,phpInnerHtmlString,htmlArg,phpInnerHtmlValue,phpInnerHtmlTagError,phpInnerHtmlEvent,phpInnerHtmlCssDefinition,@phpInnerHtmlPreproc,@phpInnerHtmlArgCluster
    +  syn match   phpInnerHtmlTagN     contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@phpInnerHtmlTagNameCluster
    +  syn match   phpInnerHtmlTagN     contained +]<"ms=s+1
    +
    +
    +  " special characters
    +  syn match phpInnerHtmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
    +
    +  " Comments (the real ones or the old netscape ones)
    +  if exists("html_wrong_comments")
    +    syn region phpInnerHtmlComment        start=+
    +    " Idem 8.2.4.43,44: Except  and  are parser errors
    +    " Idem 8.2.4.52: dash-dash-bang (--!>) is error ignored by parser, also closes comment
    +    syn region phpInnerHtmlComment matchgroup=phpInnerHtmlComment start=+ is all right
    +    syn match phpInnerHtmlCommentNested contained "\@!"
    +    syn match phpInnerHtmlCommentError  contained "[^>+ keepend
    +
    +  " server-parsed commands
    +  syn region phpInnerHtmlPreProc start=++ contains=phpInnerHtmlPreStmt,phpInnerHtmlPreError,phpInnerHtmlPreAttr
    +  syn match phpInnerHtmlPreStmt contained ""
    +  syn match   prologQuestion          "?-.*\."  contains=prologNumber
    +
    +
    +endif
    +
    +syn sync maxlines=50
    +
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +" The default highlighting.
    +hi def link prologComment          Comment
    +hi def link prologCComment         Comment
    +hi def link prologCharCode         Special
    +
    +if exists ("prolog_highlighting_clean")
    +
    +hi def link prologKeyword        Statement
    +hi def link prologClauseHead     Statement
    +hi def link prologClause Normal
    +
    +else
    +
    +hi def link prologKeyword        Keyword
    +hi def link prologClauseHead     Constant
    +hi def link prologClause Normal
    +hi def link prologQuestion       PreProc
    +hi def link prologSpecialCharacter Special
    +hi def link prologNumber         Number
    +hi def link prologAsIs           Normal
    +hi def link prologCommentError   Error
    +hi def link prologAtom           String
    +hi def link prologString         String
    +hi def link prologOperator       Operator
    +
    +endif
    +
    +
    +let b:current_syntax = "prolog"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/promela.vim b/.config/vim/syntax/promela.vim
    new file mode 100644
    index 0000000..add4514
    --- /dev/null
    +++ b/.config/vim/syntax/promela.vim
    @@ -0,0 +1,53 @@
    +" Vim syntax file
    +" Language:			ProMeLa
    +" Maintainer:		Maurizio Tranchero  - 
    +" First Release:	Mon Oct 16 08:49:46 CEST 2006
    +" Last Change:		Thu Aug 7 21:22:48 CEST 2008
    +" Version:			0.5
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" case is significant
    +" syn case ignore
    +" ProMeLa Keywords
    +syn keyword promelaStatement	proctype if else while chan do od fi break goto unless
    +syn keyword promelaStatement	active assert label atomic
    +syn keyword promelaFunctions	skip timeout run
    +syn keyword promelaTodo         contained TODO
    +" ProMeLa Types
    +syn keyword promelaType			bit bool byte short int
    +" Operators and special characters
    +syn match promelaOperator	"!"
    +syn match promelaOperator	"?"
    +syn match promelaOperator	"->"
    +syn match promelaOperator	"="
    +syn match promelaOperator	"+"
    +syn match promelaOperator	"*"
    +syn match promelaOperator	"/"
    +syn match promelaOperator	"-"
    +syn match promelaOperator	"<"
    +syn match promelaOperator	">"
    +syn match promelaOperator	"<="
    +syn match promelaOperator	">="
    +syn match promelaSpecial	"\["
    +syn match promelaSpecial	"\]"
    +syn match promelaSpecial	";"
    +syn match promelaSpecial	"::"
    +" ProMeLa Comments
    +syn region promelaComment start="/\*" end="\*/" contains=promelaTodo,@Spell
    +syn match  promelaComment "//.*" contains=promelaTodo,@Spell
    +
    +" Class Linking
    +hi def link promelaStatement    Statement
    +hi def link promelaType	        Type
    +hi def link promelaComment      Comment
    +hi def link promelaOperator	    Type
    +hi def link promelaSpecial      Special
    +hi def link promelaFunctions    Special
    +hi def link promelaString		String
    +hi def link promelaTodo	        Todo
    +
    +let b:current_syntax = "promela"
    diff --git a/.config/vim/syntax/proto.vim b/.config/vim/syntax/proto.vim
    new file mode 100644
    index 0000000..0d2d2f2
    --- /dev/null
    +++ b/.config/vim/syntax/proto.vim
    @@ -0,0 +1,83 @@
    +" Protocol Buffers - Google's data interchange format
    +" Copyright 2008 Google Inc.  All rights reserved.
    +" https://developers.google.com/protocol-buffers/
    +"
    +" Redistribution and use in source and binary forms, with or without
    +" modification, are permitted provided that the following conditions are
    +" met:
    +"
    +"     * Redistributions of source code must retain the above copyright
    +" notice, this list of conditions and the following disclaimer.
    +"     * Redistributions in binary form must reproduce the above
    +" copyright notice, this list of conditions and the following disclaimer
    +" in the documentation and/or other materials provided with the
    +" distribution.
    +"     * Neither the name of Google Inc. nor the names of its
    +" contributors may be used to endorse or promote products derived from
    +" this software without specific prior written permission.
    +"
    +" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +" OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +" This is the Vim syntax file for Google Protocol Buffers as found at
    +" https://github.com/protocolbuffers/protobuf
    +" Last update: 2020 Oct 29
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn case match
    +
    +syn keyword protoTodo       contained TODO FIXME XXX
    +syn cluster protoCommentGrp contains=protoTodo
    +
    +syn keyword protoSyntax     syntax import option
    +syn keyword protoStructure  package message group oneof
    +syn keyword protoRepeat     optional required repeated
    +syn keyword protoDefault    default
    +syn keyword protoExtend     extend extensions to max reserved
    +syn keyword protoRPC        service rpc returns
    +
    +syn keyword protoType      int32 int64 uint32 uint64 sint32 sint64
    +syn keyword protoType      fixed32 fixed64 sfixed32 sfixed64
    +syn keyword protoType      float double bool string bytes
    +syn keyword protoTypedef   enum
    +syn keyword protoBool      true false
    +
    +syn match   protoInt     /-\?\<\d\+\>/
    +syn match   protoInt     /\<0[xX]\x+\>/
    +syn match   protoFloat   /\<-\?\d*\(\.\d*\)\?/
    +syn region  protoComment start="\/\*" end="\*\/" contains=@pbCommentGrp,@Spell
    +syn region  protoComment start="//" skip="\\$" end="$" keepend contains=@pbCommentGrp,@Spell
    +syn region  protoString  start=/"/ skip=/\\./ end=/"/ contains=@Spell
    +syn region  protoString  start=/'/ skip=/\\./ end=/'/ contains=@Spell
    +
    +hi def link protoTodo         Todo
    +
    +hi def link protoSyntax       Include
    +hi def link protoStructure    Structure
    +hi def link protoRepeat       Repeat
    +hi def link protoDefault      Keyword
    +hi def link protoExtend       Keyword
    +hi def link protoRPC          Keyword
    +hi def link protoType         Type
    +hi def link protoTypedef      Typedef
    +hi def link protoBool         Boolean
    +
    +hi def link protoInt          Number
    +hi def link protoFloat        Float
    +hi def link protoComment      Comment
    +hi def link protoString       String
    +
    +let b:current_syntax = "proto"
    diff --git a/.config/vim/syntax/protocols.vim b/.config/vim/syntax/protocols.vim
    new file mode 100644
    index 0000000..f31ca5a
    --- /dev/null
    +++ b/.config/vim/syntax/protocols.vim
    @@ -0,0 +1,44 @@
    +" Vim syntax file
    +" Language:             protocols(5) - Internet protocols definition file
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2006-04-19
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn match   protocolsBegin    display '^'
    +                              \ nextgroup=protocolsName,protocolsComment
    +
    +syn match   protocolsName     contained display '[[:graph:]]\+'
    +                              \ nextgroup=protocolsPort skipwhite
    +
    +syn match   protocolsPort     contained display '\d\+'
    +                              \ nextgroup=protocolsAliases,protocolsComment
    +                              \ skipwhite
    +
    +syn match   protocolsAliases  contained display '\S\+'
    +                              \ nextgroup=protocolsAliases,protocolsComment
    +                              \ skipwhite
    +
    +syn keyword protocolsTodo     contained TODO FIXME XXX NOTE
    +
    +syn region  protocolsComment  display oneline start='#' end='$'
    +                              \ contains=protocolsTodo,@Spell
    +
    +hi def link protocolsTodo      Todo
    +hi def link protocolsComment   Comment
    +hi def link protocolsName      Identifier
    +hi def link protocolsPort      Number
    +hi def link protocolsPPDiv     Delimiter
    +hi def link protocolsPPDivDepr Error
    +hi def link protocolsProtocol  Type
    +hi def link protocolsAliases   Macro
    +
    +let b:current_syntax = "protocols"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/prql.vim b/.config/vim/syntax/prql.vim
    new file mode 100644
    index 0000000..2a224cd
    --- /dev/null
    +++ b/.config/vim/syntax/prql.vim
    @@ -0,0 +1,178 @@
    +" Vim syntax file
    +" Language:     PRQL
    +" Maintainer:   vanillajonathan
    +" Last Change:  2025-03-07
    +"
    +" https://prql-lang.org/
    +" https://github.com/PRQL/prql
    +
    +" quit when a syntax file was already loaded.
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" We need nocompatible mode in order to continue lines with backslashes.
    +" Original setting will be restored.
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn keyword prqlBoolean      false true
    +syn keyword prqlSelf         this that
    +syn keyword prqlStatement    null
    +syn keyword prqlConditional  case
    +syn keyword prqlStatement    prql let type alias in
    +syn keyword prqlRepeat       loop
    +syn match   prqlOperator     display "\%(+\|-\|/\|*\|=\|\^\|&\||\|!\|>\|<\|%\|\~\)=\?"
    +syn match   prqlOperator     display "&&\|||"
    +syn keyword prqlInclude      module
    +
    +" Annotations
    +syn match   prqlAnnotation  "@" display contained
    +syn match   prqlAnnotationName  "@\s*{\h\%(\w\|=\)*}" display contains=prqlAnnotation
    +
    +syn match   prqlFunction  "\h\w*" display contained
    +
    +syn match   prqlComment  "#.*$" contains=prqlTodo,@Spell
    +syn keyword prqlTodo    FIXME NOTE TODO XXX contained
    +
    +" Triple-quoted strings can contain doctests.
    +syn region  prqlString matchgroup=prqlQuotes
    +      \ start=+\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
    +      \ contains=prqlEscape,@Spell
    +syn region  prqlString matchgroup=prqlTripleQuotes
    +      \ start=+\z('''\|"""\)+ end="\z1" keepend
    +      \ contains=prqlEscape,prqlSpaceError,prqlDoctest,@Spell
    +syn region  prqlFString matchgroup=prqlQuotes
    +      \ start=+[f]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
    +      \ contains=prqlEscape,@Spell
    +syn region  prqlFString matchgroup=prqlTripleQuotes
    +      \ start=+f\z('''\|"""\)+ end="\z1" keepend
    +      \ contains=prqlEscape,prqlSpaceError,prqlDoctest,@Spell
    +syn region  prqlRString matchgroup=prqlQuotes
    +      \ start=+r\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
    +      \ contains=@Spell
    +syn region  prqlRString matchgroup=prqlTripleQuotes
    +      \ start=+r\z('''\|"""\)+ end="\z1" keepend
    +      \ contains=prqlSpaceError,prqlDoctest,@Spell
    +syn region  prqlSString matchgroup=prqlQuotes
    +      \ start=+s\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
    +      \ contains=@Spell
    +syn region  prqlSString matchgroup=prqlTripleQuotes
    +      \ start=+s\z('''\|"""\)+ end="\z1" keepend
    +      \ contains=prqlSpaceError,prqlDoctest,@Spell
    +
    +syn match   prqlEscape  +\\[bfnrt'"\\]+ contained
    +syn match   prqlEscape  "\\\o\{1,3}" contained
    +syn match   prqlEscape  "\\x\x\{2}" contained
    +syn match   prqlEscape  "\%(\\u\x\{1,6}\)" contained
    +syn match   prqlEscape  "\\$"
    +
    +" It is very important to understand all details before changing the
    +" regular expressions below or their order.
    +" The word boundaries are *not* the floating-point number boundaries
    +" because of a possible leading or trailing decimal point.
    +" The expressions below ensure that all valid number literals are
    +" highlighted, and invalid number literals are not.  For example,
    +"
    +" - a decimal point in '4.' at the end of a line is highlighted,
    +" - a second dot in 1.0.0 is not highlighted,
    +" - 08 is not highlighted,
    +" - 08e0 or 08j are highlighted,
    +"
    +if !exists("prql_no_number_highlight")
    +  " numbers (including complex)
    +  syn match   prqlNumber  "\<0[oO]\%(_\=\o\)\+\>"
    +  syn match   prqlNumber  "\<0[xX]\%(_\=\x\)\+\>"
    +  syn match   prqlNumber  "\<0[bB]\%(_\=[01]\)\+\>"
    +  syn match   prqlNumber  "\<\%([1-9]\%(_\=\d\)*\|0\+\%(_\=0\)*\)\>"
    +  syn match   prqlNumber  "\<\d\%(_\=\d\)*[jJ]\>"
    +  syn match   prqlNumber  "\<\d\%(_\=\d\)*[eE][+-]\=\d\%(_\=\d\)*[jJ]\=\>"
    +  syn match   prqlNumber
    +        \ "\<\d\%(_\=\d\)*\.\%([eE][+-]\=\d\%(_\=\d\)*\)\=[jJ]\=\%(\W\|$\)\@="
    +  syn match   prqlNumber
    +        \ "\%(^\|\W\)\zs\%(\d\%(_\=\d\)*\)\=\.\d\%(_\=\d\)*\%([eE][+-]\=\d\%(_\=\d\)*\)\=[jJ]\=\>"
    +endif
    +
    +" https://prql-lang.org/book/reference/stdlib/transforms/
    +"
    +" PRQL built-in functions are in alphabetical order.
    +"
    +
    +" Built-in functions
    +syn keyword prqlBuiltin  aggregate derive filter from group join select sort take window
    +
    +" Built-in types
    +syn keyword prqlType     bool float int int8 int16 int32 int64 int128 text date time timestamp
    +
    +" avoid highlighting attributes as builtins
    +syn match   prqlAttribute  /\.\h\w*/hs=s+1
    +  \ contains=ALLBUT,prqlBuiltin,prqlFunction
    +  \ transparent
    +
    +if exists("prql_space_error_highlight")
    +  " trailing whitespace
    +  syn match   prqlSpaceError  display excludenl "\s\+$"
    +  " mixed tabs and spaces
    +  syn match   prqlSpaceError  display " \+\t"
    +  syn match   prqlSpaceError  display "\t\+ "
    +endif
    +
    +" Do not spell doctests inside strings.
    +" Notice that the end of a string, either ''', or """, will end the contained
    +" doctest too.  Thus, we do *not* need to have it as an end pattern.
    +if !exists("prql_no_doctest_highlight")
    +  if !exists("prql_no_doctest_code_highlight")
    +    syn region prqlDoctest
    +    \ start="^\s*>>>\s" end="^\s*$"
    +    \ contained contains=ALLBUT,prqlDoctest,prqlFunction,@Spell
    +    syn region prqlDoctestValue
    +    \ start=+^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\++ end="$"
    +    \ contained
    +  else
    +    syn region prqlDoctest
    +    \ start="^\s*>>>" end="^\s*$"
    +    \ contained contains=@NoSpell
    +  endif
    +endif
    +
    +" The default highlight links.  Can be overridden later.
    +hi def link prqlBoolean         Boolean
    +hi def link prqlStatement       Statement
    +hi def link prqlType            Type
    +hi def link prqlConditional     Conditional
    +hi def link prqlRepeat          Repeat
    +hi def link prqlOperator        Operator
    +hi def link prqlInclude         Include
    +hi def link prqlAnnotation      Define
    +hi def link prqlAnnotationName  Function
    +hi def link prqlFunction        Function
    +hi def link prqlComment         Comment
    +hi def link prqlTodo            Todo
    +hi def link prqlSelf            Constant
    +hi def link prqlString          String
    +hi def link prqlFString         String
    +hi def link prqlRString         String
    +hi def link prqlSString         String
    +hi def link prqlQuotes          String
    +hi def link prqlTripleQuotes    prqlQuotes
    +hi def link prqlEscape          Special
    +if !exists("prql_no_number_highlight")
    +  hi def link prqlNumber    Number
    +endif
    +if !exists("prql_no_builtin_highlight")
    +  hi def link prqlBuiltin    Function
    +endif
    +if exists("prql_space_error_highlight")
    +  hi def link prqlSpaceError    Error
    +endif
    +if !exists("prql_no_doctest_highlight")
    +  hi def link prqlDoctest    Special
    +  hi def link prqlDoctestValue  Define
    +endif
    +
    +let b:current_syntax = "prql"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim:set sw=2 sts=2 ts=8 noet:
    diff --git a/.config/vim/syntax/ps1.vim b/.config/vim/syntax/ps1.vim
    new file mode 100644
    index 0000000..e8f6b2f
    --- /dev/null
    +++ b/.config/vim/syntax/ps1.vim
    @@ -0,0 +1,182 @@
    +" Vim syntax file
    +" Language:    Windows PowerShell
    +" URL:         https://github.com/PProvost/vim-ps1
    +" Last Change: 2020 Nov 24
    +"
    +" The following settings are available for tuning syntax highlighting:
    +"    let ps1_nofold_blocks = 1
    +"    let ps1_nofold_sig = 1
    +"    let ps1_nofold_region = 1
    +
    +if exists("b:current_syntax")
    +	finish
    +endif
    +
    +" Operators contain dashes
    +setlocal iskeyword+=-
    +
    +" PowerShell doesn't care about case
    +syn case ignore
    +
    +" Sync-ing method
    +syn sync minlines=100
    +
    +" Certain tokens can't appear at the top level of the document
    +syn cluster ps1NotTop contains=@ps1Comment,ps1CDocParam,ps1FunctionDeclaration
    +
    +" Comments and special comment words
    +syn keyword ps1CommentTodo TODO FIXME XXX TBD HACK NOTE contained
    +syn match ps1CDocParam /.*/ contained
    +syn match ps1CommentDoc /^\s*\zs\.\w\+\>/ nextgroup=ps1CDocParam contained
    +syn match ps1CommentDoc /#\s*\zs\.\w\+\>/ nextgroup=ps1CDocParam contained
    +syn match ps1Comment /#.*/ contains=ps1CommentTodo,ps1CommentDoc,@Spell
    +syn region ps1Comment start="<#" end="#>" contains=ps1CommentTodo,ps1CommentDoc,@Spell
    +
    +" Language keywords and elements
    +syn keyword ps1Conditional if else elseif switch default
    +syn keyword ps1Repeat while for do until break continue foreach in
    +syn match ps1Repeat /\/ nextgroup=ps1Block skipwhite
    +syn match ps1Keyword /\/ nextgroup=ps1Block skipwhite
    +syn match ps1Keyword /\/ nextgroup=ps1Block skipwhite
    +
    +syn keyword ps1Exception begin process end exit inlinescript parallel sequence
    +syn keyword ps1Keyword try catch finally throw
    +syn keyword ps1Keyword return filter in trap param data dynamicparam 
    +syn keyword ps1Constant $true $false $null
    +syn match ps1Constant +\$?+
    +syn match ps1Constant +\$_+
    +syn match ps1Constant +\$\$+
    +syn match ps1Constant +\$^+
    +
    +" Keywords reserved for future use
    +syn keyword ps1Keyword class define from using var
    +
    +" Function declarations
    +syn keyword ps1Keyword function nextgroup=ps1Function skipwhite
    +syn keyword ps1Keyword filter nextgroup=ps1Function skipwhite
    +syn keyword ps1Keyword workflow nextgroup=ps1Function skipwhite
    +syn keyword ps1Keyword configuration nextgroup=ps1Function skipwhite
    +syn keyword ps1Keyword class nextgroup=ps1Function skipwhite
    +syn keyword ps1Keyword enum nextgroup=ps1Function skipwhite
    +
    +" Function declarations and invocations
    +syn match ps1Cmdlet /\v(add|clear|close|copy|enter|exit|find|format|get|hide|join|lock|move|new|open|optimize|pop|push|redo|remove|rename|reset|search|select|Set|show|skip|split|step|switch|undo|unlock|watch)(-\w+)+/ contained
    +syn match ps1Cmdlet /\v(connect|disconnect|read|receive|send|write)(-\w+)+/ contained
    +syn match ps1Cmdlet /\v(backup|checkpoint|compare|compress|convert|convertfrom|convertto|dismount|edit|expand|export|group|import|initialize|limit|merge|mount|out|publish|restore|save|sync|unpublish|update)(-\w+)+/ contained
    +syn match ps1Cmdlet /\v(debug|measure|ping|repair|resolve|test|trace)(-\w+)+/ contained
    +syn match ps1Cmdlet /\v(approve|assert|build|complete|confirm|deny|deploy|disable|enable|install|invoke|register|request|restart|resume|start|stop|submit|suspend|uninstall|unregister|wait)(-\w+)+/ contained
    +syn match ps1Cmdlet /\v(block|grant|protect|revoke|unblock|unprotect)(-\w+)+/ contained
    +syn match ps1Cmdlet /\v(use)(-\w+)+/ contained
    +
    +" Other functions
    +syn match ps1Function /\w\+\(-\w\+\)\+/ contains=ps1Cmdlet
    +
    +" Type declarations
    +syn match ps1Type /\[[a-z_][a-z0-9_.,\[\]]\+\]/
    +
    +" Variable references
    +syn match ps1ScopeModifier /\(global:\|local:\|private:\|script:\)/ contained
    +syn match ps1Variable /\$\w\+\(:\w\+\)\?/ contains=ps1ScopeModifier
    +syn match ps1Variable /\${\w\+\(:\?[[:alnum:]_()]\+\)\?}/ contains=ps1ScopeModifier
    +
    +" Operators
    +syn keyword ps1Operator -eq -ne -ge -gt -lt -le -like -notlike -match -notmatch -replace -split -contains -notcontains
    +syn keyword ps1Operator -ieq -ine -ige -igt -ile -ilt -ilike -inotlike -imatch -inotmatch -ireplace -isplit -icontains -inotcontains
    +syn keyword ps1Operator -ceq -cne -cge -cgt -clt -cle -clike -cnotlike -cmatch -cnotmatch -creplace -csplit -ccontains -cnotcontains
    +syn keyword ps1Operator -in -notin
    +syn keyword ps1Operator -is -isnot -as -join
    +syn keyword ps1Operator -and -or -not -xor -band -bor -bnot -bxor
    +syn keyword ps1Operator -f
    +syn match ps1Operator /!/
    +syn match ps1Operator /=/
    +syn match ps1Operator /+=/
    +syn match ps1Operator /-=/
    +syn match ps1Operator /\*=/
    +syn match ps1Operator /\/=/
    +syn match ps1Operator /%=/
    +syn match ps1Operator /+/
    +syn match ps1Operator /-\(\s\|\d\|\.\|\$\|(\)\@=/
    +syn match ps1Operator /\*/
    +syn match ps1Operator /\//
    +syn match ps1Operator /|/
    +syn match ps1Operator /%/
    +syn match ps1Operator /&/
    +syn match ps1Operator /::/
    +syn match ps1Operator /,/
    +syn match ps1Operator /\(^\|\s\)\@<=\. \@=/
    +
    +" Regular Strings
    +" These aren't precisely correct and could use some work
    +syn region ps1String start=/"/ skip=/`"/ end=/"/ contains=@ps1StringSpecial,@Spell
    +syn region ps1String start=/'/ skip=/''/ end=/'/
    +
    +" Here-Strings
    +syn region ps1String start=/@"$/ end=/^"@/ contains=@ps1StringSpecial,@Spell
    +syn region ps1String start=/@'$/ end=/^'@/
    +
    +" Interpolation
    +syn match ps1Escape /`./
    +syn region ps1Interpolation matchgroup=ps1InterpolationDelimiter start="$(" end=")" contained contains=ALLBUT,@ps1NotTop
    +syn region ps1NestedParentheses start="(" skip="\\\\\|\\)" matchgroup=ps1Interpolation end=")" transparent contained
    +syn cluster ps1StringSpecial contains=ps1Escape,ps1Interpolation,ps1Variable,ps1Boolean,ps1Constant,ps1BuiltIn,@Spell
    +
    +" Numbers
    +syn match   ps1Number		"\(\<\|-\)\@<=\(0[xX]\x\+\|\d\+\)\([KMGTP][B]\)\=\(\>\|-\)\@="
    +syn match   ps1Number		"\(\(\<\|-\)\@<=\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[dD]\="
    +syn match   ps1Number		"\<\d\+[eE][-+]\=\d\+[dD]\=\>"
    +syn match   ps1Number		"\<\d\+\([eE][-+]\=\d\+\)\=[dD]\>"
    +
    +" Constants
    +syn match ps1Boolean "$\%(true\|false\)\>"
    +syn match ps1Constant /\$null\>/
    +syn match ps1BuiltIn "$^\|$?\|$_\|$\$"
    +syn match ps1BuiltIn "$\%(args\|error\|foreach\|home\|input\)\>"
    +syn match ps1BuiltIn "$\%(match\(es\)\?\|myinvocation\|host\|lastexitcode\)\>"
    +syn match ps1BuiltIn "$\%(ofs\|shellid\|stacktrace\)\>"
    +
    +" Named Switch
    +syn match ps1Label /\s-\w\+/
    +
    +" Folding blocks
    +if !exists('g:ps1_nofold_blocks')
    +	syn region ps1Block start=/{/ end=/}/ transparent fold
    +endif
    +
    +if !exists('g:ps1_nofold_region')
    +	syn region ps1Region start=/#region/ end=/#endregion/ transparent fold keepend extend
    +endif
    +
    +if !exists('g:ps1_nofold_sig')
    +	syn region ps1Signature start=/# SIG # Begin signature block/ end=/# SIG # End signature block/ transparent fold
    +endif
    +
    +" Setup default color highlighting
    +hi def link ps1Number Number
    +hi def link ps1Block Block
    +hi def link ps1Region Region
    +hi def link ps1Exception Exception
    +hi def link ps1Constant Constant
    +hi def link ps1String String
    +hi def link ps1Escape SpecialChar
    +hi def link ps1InterpolationDelimiter Delimiter
    +hi def link ps1Conditional Conditional
    +hi def link ps1Cmdlet Function
    +hi def link ps1Function Identifier
    +hi def link ps1Variable Identifier
    +hi def link ps1Boolean Boolean
    +hi def link ps1Constant Constant
    +hi def link ps1BuiltIn StorageClass
    +hi def link ps1Type Type
    +hi def link ps1ScopeModifier StorageClass
    +hi def link ps1Comment Comment
    +hi def link ps1CommentTodo Todo
    +hi def link ps1CommentDoc Tag
    +hi def link ps1CDocParam Identifier
    +hi def link ps1Operator Operator
    +hi def link ps1Repeat Repeat
    +hi def link ps1RepeatAndCmdlet Repeat
    +hi def link ps1Keyword Keyword
    +hi def link ps1KeywordAndCmdlet Keyword
    +hi def link ps1Label Label
    +
    +let b:current_syntax = "ps1"
    diff --git a/.config/vim/syntax/ps1xml.vim b/.config/vim/syntax/ps1xml.vim
    new file mode 100644
    index 0000000..6ca9ed0
    --- /dev/null
    +++ b/.config/vim/syntax/ps1xml.vim
    @@ -0,0 +1,51 @@
    +" Vim syntax file
    +" Language:    Windows PowerShell
    +" URL:         https://github.com/PProvost/vim-ps1
    +" Last Change: 2013 Jun 24
    +
    +if exists("b:current_syntax")
    +	finish
    +endif
    +
    +let s:ps1xml_cpo_save = &cpo
    +set cpo&vim
    +
    +doau syntax xml
    +unlet b:current_syntax
    +
    +syn case ignore
    +syn include @ps1xmlScriptBlock :p:h/ps1.vim
    +unlet b:current_syntax
    +
    +syn region ps1xmlScriptBlock
    +      \ matchgroup=xmlTag     start=""
    +      \ fold
    +      \ contains=@ps1xmlScriptBlock
    +      \ keepend
    +syn region ps1xmlScriptBlock
    +      \ matchgroup=xmlTag     start=""
    +      \ matchgroup=xmlEndTag  end=""
    +      \ fold
    +      \ contains=@ps1xmlScriptBlock
    +      \ keepend
    +syn region ps1xmlScriptBlock
    +      \ matchgroup=xmlTag     start=""
    +      \ matchgroup=xmlEndTag  end=""
    +      \ fold
    +      \ contains=@ps1xmlScriptBlock
    +      \ keepend
    +syn region ps1xmlScriptBlock
    +      \ matchgroup=xmlTag     start=""
    +      \ matchgroup=xmlEndTag  end=""
    +      \ fold
    +      \ contains=@ps1xmlScriptBlock
    +      \ keepend
    +
    +syn cluster xmlRegionHook add=ps1xmlScriptBlock
    +
    +let b:current_syntax = "ps1xml"
    +
    +let &cpo = s:ps1xml_cpo_save
    +unlet s:ps1xml_cpo_save
    +
    diff --git a/.config/vim/syntax/psf.vim b/.config/vim/syntax/psf.vim
    new file mode 100644
    index 0000000..0971fe9
    --- /dev/null
    +++ b/.config/vim/syntax/psf.vim
    @@ -0,0 +1,91 @@
    +" Vim syntax file
    +" Language:	Software Distributor product specification file
    +"		(POSIX 1387.2-1995).
    +" Maintainer:	Rex Barzee 
    +" Last change:	25 Apr 2001
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Product specification files are case sensitive
    +syn case match
    +
    +syn keyword psfObject bundle category control_file depot distribution
    +syn keyword psfObject end file fileset host installed_software media
    +syn keyword psfObject product root subproduct vendor
    +
    +syn match  psfUnquotString +[^"# 	][^#]*+ contained
    +syn region psfQuotString   start=+"+ skip=+\\"+ end=+"+ contained
    +
    +syn match  psfObjTag    "\<[-_+A-Z0-9a-z]\+\(\.[-_+A-Z0-9a-z]\+\)*" contained
    +syn match  psfAttAbbrev ",\<\(fa\|fr\|[aclqrv]\)\(<\|>\|<=\|>=\|=\|==\)[^,]\+" contained
    +syn match  psfObjTags   "\<[-_+A-Z0-9a-z]\+\(\.[-_+A-Z0-9a-z]\+\)*\(\s\+\<[-_+A-Z0-9a-z]\+\(\.[-_+A-Z0-9a-z]\+\)*\)*" contained
    +
    +syn match  psfNumber    "\<\d\+\>" contained
    +syn match  psfFloat     "\<\d\+\>\(\.\<\d\+\>\)*" contained
    +
    +syn match  psfLongDate  "\<\d\d\d\d\d\d\d\d\d\d\d\d\.\d\d\>" contained
    +
    +syn keyword psfState    available configured corrupt installed transient contained
    +syn keyword psfPState   applied committed superseded contained
    +
    +syn keyword psfBoolean  false true contained
    +
    +
    +"Some of the attributes covered by attUnquotString and attQuotString:
    +" architecture category_tag control_directory copyright
    +" create_date description directory file_permissions install_source
    +" install_type location machine_type mod_date number os_name os_release
    +" os_version pose_as_os_name pose_as_os_release readme revision
    +" share_link title vendor_tag
    +syn region psfAttUnquotString matchgroup=psfAttrib start=~^\s*[^# 	]\+\s\+[^#" 	]~rs=e-1 contains=psfUnquotString,psfComment end=~$~ keepend oneline
    +
    +syn region psfAttQuotString matchgroup=psfAttrib start=~^\s*[^# 	]\+\s\+"~rs=e-1 contains=psfQuotString,psfComment skip=~\\"~ matchgroup=psfQuotString end=~"~ keepend
    +
    +
    +" These regions are defined in attempt to do syntax checking for some
    +" of the attributes.
    +syn region psfAttTag matchgroup=psfAttrib start="^\s*tag\s\+" contains=psfObjTag,psfComment end="$" keepend oneline
    +
    +syn region psfAttSpec matchgroup=psfAttrib start="^\s*\(ancestor\|applied_patches\|applied_to\|contents\|corequisites\|exrequisites\|prerequisites\|software_spec\|supersedes\|superseded_by\)\s\+" contains=psfObjTag,psfAttAbbrev,psfComment end="$" keepend
    +
    +syn region psfAttTags matchgroup=psfAttrib start="^\s*all_filesets\s\+" contains=psfObjTags,psfComment end="$" keepend
    +
    +syn region psfAttNumber matchgroup=psfAttrib start="^\s*\(compressed_size\|instance_id\|media_sequence_number\|sequence_number\|size\)\s\+" contains=psfNumber,psfComment end="$" keepend oneline
    +
    +syn region psfAttTime matchgroup=psfAttrib start="^\s*\(create_time\|ctime\|mod_time\|mtime\|timestamp\)\s\+" contains=psfNumber,psfComment end="$" keepend oneline
    +
    +syn region psfAttFloat matchgroup=psfAttrib start="^\s*\(data_model_revision\|layout_version\)\s\+" contains=psfFloat,psfComment end="$" keepend oneline
    +
    +syn region psfAttLongDate matchgroup=psfAttrib start="^\s*install_date\s\+" contains=psfLongDate,psfComment end="$" keepend oneline
    +
    +syn region psfAttState matchgroup=psfAttrib start="^\s*\(state\)\s\+" contains=psfState,psfComment end="$" keepend oneline
    +
    +syn region psfAttPState matchgroup=psfAttrib start="^\s*\(patch_state\)\s\+" contains=psfPState,psfComment end="$" keepend oneline
    +
    +syn region psfAttBoolean matchgroup=psfAttrib start="^\s*\(is_kernel\|is_locatable\|is_patch\|is_protected\|is_reboot\|is_reference\|is_secure\|is_sparse\)\s\+" contains=psfBoolean,psfComment end="$" keepend oneline
    +
    +syn match  psfComment "#.*$"
    +
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link psfObject       Statement
    +hi def link psfAttrib       Type
    +hi def link psfQuotString   String
    +hi def link psfObjTag       Identifier
    +hi def link psfAttAbbrev    PreProc
    +hi def link psfObjTags      Identifier
    +
    +hi def link psfComment      Comment
    +
    +
    +" Long descriptions and copyrights confuse the syntax highlighting, so
    +" force vim to backup at least 100 lines before the top visible line
    +" looking for a sync location.
    +syn sync lines=100
    +
    +let b:current_syntax = "psf"
    diff --git a/.config/vim/syntax/psl.vim b/.config/vim/syntax/psl.vim
    new file mode 100644
    index 0000000..ff6e833
    --- /dev/null
    +++ b/.config/vim/syntax/psl.vim
    @@ -0,0 +1,83 @@
    +" Vim syntax file
    +" Language:	Property Specification Language (PSL)
    +" Maintainer:	Daniel Kho 
    +" Last Changed:	2021 Apr 17 by Daniel Kho
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Read in VHDL syntax files
    +runtime! syntax/vhdl.vim
    +unlet b:current_syntax
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +" case is not significant
    +syn case	ignore
    +
    +" Add ! character to keyword recognition.
    +setlocal iskeyword+=33
    +
    +" PSL keywords
    +syn keyword	pslOperator	A AF AG AX
    +syn keyword	pslOperator	E EF EG EX
    +syn keyword	pslOperator	F G U W X X!
    +syn keyword	pslOperator	abort always assert assume async_abort
    +syn keyword	pslOperator	before before! before!_ before_ bit bitvector boolean
    +syn keyword	pslOperator	clock const countones cover
    +syn keyword	pslOperator	default
    +syn keyword	pslOperator	ended eventually!
    +syn keyword	pslOperator	fairness fell for forall
    +syn keyword	pslOperator	hdltype
    +syn keyword	pslOperator	in inf inherit isunknown
    +syn keyword	pslOperator	mutable
    +syn keyword	pslOperator	never next next! next_a next_a! next_e next_e! next_event next_event! next_event_a next_event_a! next_event_e next_event_e! nondet nondet_vector numeric
    +syn keyword	pslOperator	onehot onehot0
    +syn keyword	pslOperator	property prev
    +syn keyword	pslOperator	report restrict restrict! rose
    +syn keyword	pslOperator	sequence stable string strong sync_abort
    +syn keyword	pslOperator	union until until! until!_ until_
    +syn keyword	pslOperator	vmode vpkg vprop vunit
    +syn keyword	pslOperator	within
    +"" Common keywords with VHDL
    +"syn keyword	pslOperator	and is not or to
    +
    +" PSL operators
    +syn match	pslOperator	"=>\||=>"
    +syn match	pslOperator	"<-\|->"
    +syn match	pslOperator	"@"
    +
    +
    +"Modify the following as needed.  The trade-off is performance versus functionality.
    +syn sync	minlines=600
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link pslSpecial	    Special
    +hi def link pslStatement    Statement
    +hi def link pslCharacter    Character
    +hi def link pslString	    String
    +hi def link pslVector	    Number
    +hi def link pslBoolean	    Number
    +hi def link pslTodo	    Todo
    +hi def link pslFixme	    Fixme
    +hi def link pslComment	    Comment
    +hi def link pslNumber	    Number
    +hi def link pslTime	    Number
    +hi def link pslType	    Type
    +hi def link pslOperator	    Operator
    +hi def link pslError	    Error
    +hi def link pslAttribute    Special
    +hi def link pslPreProc	    PreProc
    +
    +
    +let b:current_syntax = "psl"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/ptcap.vim b/.config/vim/syntax/ptcap.vim
    new file mode 100644
    index 0000000..5db7bda
    --- /dev/null
    +++ b/.config/vim/syntax/ptcap.vim
    @@ -0,0 +1,95 @@
    +" Vim syntax file
    +" Language:	printcap/termcap database
    +" Maintainer:	Haakon Riiser 
    +" URL:		http://folk.uio.no/hakonrk/vim/syntax/ptcap.vim
    +" Last Change:	2001 May 15
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +    finish
    +endif
    +
    +" Since I only highlight based on the structure of the databases, not
    +" specific keywords, case sensitivity isn't required
    +syn case ignore
    +
    +" Since everything that is not caught by the syntax patterns is assumed
    +" to be an error, we start parsing 20 lines up, unless something else
    +" is specified
    +if exists("ptcap_minlines")
    +    exe "syn sync lines=".ptcap_minlines
    +else
    +    syn sync lines=20
    +endif
    +
    +" Highlight everything that isn't caught by the rules as errors,
    +" except blank lines
    +syn match ptcapError	    "^.*\S.*$"
    +
    +syn match ptcapLeadBlank    "^\s\+" contained
    +
    +" `:' and `|' are delimiters for fields and names, and should not be
    +" highlighted.	Hence, they are linked to `NONE'
    +syn match ptcapDelimiter    "[:|]" contained
    +
    +" Escaped characters receive special highlighting
    +syn match ptcapEscapedChar  "\\." contained
    +syn match ptcapEscapedChar  "\^." contained
    +syn match ptcapEscapedChar  "\\\o\{3}" contained
    +
    +" A backslash at the end of a line will suppress the newline
    +syn match ptcapLineCont	    "\\$" contained
    +
    +" A number follows the same rules as an integer in C
    +syn match ptcapNumber	    "#\(+\|-\)\=\d\+"lc=1 contained
    +syn match ptcapNumberError  "#\d*[^[:digit:]:\\]"lc=1 contained
    +syn match ptcapNumber	    "#0x\x\{1,8}"lc=1 contained
    +syn match ptcapNumberError  "#0x\X"me=e-1,lc=1 contained
    +syn match ptcapNumberError  "#0x\x\{9}"lc=1 contained
    +syn match ptcapNumberError  "#0x\x*[^[:xdigit:]:\\]"lc=1 contained
    +
    +" The `@' operator clears a flag (i.e., sets it to zero)
    +" The `#' operator assigns a following number to the flag
    +" The `=' operator assigns a string to the preceding flag
    +syn match ptcapOperator	    "[@#=]" contained
    +
    +" Some terminal capabilities have special names like `#5' and `@1', and we
    +" need special rules to match these properly
    +syn match ptcapSpecialCap   "\W[#@]\d" contains=ptcapDelimiter contained
    +
    +" If editing a termcap file, an entry in the database is terminated by
    +" a (non-escaped) newline.  Otherwise, it is terminated by a line which
    +" does not start with a colon (:)
    +if exists("b:ptcap_type") && b:ptcap_type[0] == 't'
    +    syn region ptcapEntry   start="^\s*[^[:space:]:]" end="[^\\]\(\\\\\)*$" end="^$" contains=ptcapNames,ptcapField,ptcapLeadBlank keepend
    +else
    +    syn region ptcapEntry   start="^\s*[^[:space:]:]"me=e-1 end="^\s*[^[:space:]:#]"me=e-1 contains=ptcapNames,ptcapField,ptcapLeadBlank,ptcapComment
    +endif
    +syn region ptcapNames	    start="^\s*[^[:space:]:]" skip="[^\\]\(\\\\\)*\\:" end=":"me=e-1 contains=ptcapDelimiter,ptcapEscapedChar,ptcapLineCont,ptcapLeadBlank,ptcapComment keepend contained
    +syn region ptcapField	    start=":" skip="[^\\]\(\\\\\)*\\$" end="[^\\]\(\\\\\)*:"me=e-1 end="$" contains=ptcapDelimiter,ptcapString,ptcapNumber,ptcapNumberError,ptcapOperator,ptcapLineCont,ptcapSpecialCap,ptcapLeadBlank,ptcapComment keepend contained
    +syn region ptcapString	    matchgroup=ptcapOperator start="=" skip="[^\\]\(\\\\\)*\\:" matchgroup=ptcapDelimiter end=":"me=e-1 matchgroup=NONE end="[^\\]\(\\\\\)*[^\\]$" end="^$" contains=ptcapEscapedChar,ptcapLineCont keepend contained
    +syn region ptcapComment	    start="^\s*#" end="$" contains=ptcapLeadBlank
    +
    +
    +hi def link ptcapComment		Comment
    +hi def link ptcapDelimiter	Delimiter
    +" The highlighting of "ptcapEntry" should always be overridden by
    +" its contents, so I use Todo highlighting to indicate that there
    +" is work to be done with the syntax file if you can see it :-)
    +hi def link ptcapEntry		Todo
    +hi def link ptcapError		Error
    +hi def link ptcapEscapedChar	SpecialChar
    +hi def link ptcapField		Type
    +hi def link ptcapLeadBlank	NONE
    +hi def link ptcapLineCont	Special
    +hi def link ptcapNames		Label
    +hi def link ptcapNumber		NONE
    +hi def link ptcapNumberError	Error
    +hi def link ptcapOperator	Operator
    +hi def link ptcapSpecialCap	Type
    +hi def link ptcapString		NONE
    +
    +
    +let b:current_syntax = "ptcap"
    +
    +" vim: sts=4 sw=4 ts=8
    diff --git a/.config/vim/syntax/ptx.vim b/.config/vim/syntax/ptx.vim
    new file mode 100644
    index 0000000..98de4ff
    --- /dev/null
    +++ b/.config/vim/syntax/ptx.vim
    @@ -0,0 +1,52 @@
    +" Vim syntax file
    +" Language: Nvidia PTX (Parallel Thread Execution)
    +" Maintainer: Yinzuo Jiang 
    +" Latest Revision: 2024-12-05
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syntax iskeyword .,_,a-z,48-57
    +
    +" https://docs.nvidia.com/cuda/parallel-thread-execution/#directives
    +syntax keyword ptxFunction .entry .func
    +syntax keyword ptxDirective .branchtargets .file .loc .secion .maxnctapersm .maxnreg .minnctapersm .noreturn .pragma .reqntid .target .version .weak
    +syntax keyword ptxOperator .address_size .alias .align .callprototype .calltargets
    +syntax keyword ptxStorageClass .common .const .extern .global .local .param .reg .sreg .shared .tex .visible
    +syntax keyword ptxType .explicitcluster .maxclusterrank .reqnctapercluster
    +
    +" https://docs.nvidia.com/cuda/parallel-thread-execution/#fundamental-types
    +" signed integer
    +syntax keyword ptxType .s8 .s16 .s32 .s64
    +" unsigned integer
    +syntax keyword ptxType .u8 .u16 .u32 .u64
    +" floating-point
    +syntax keyword ptxType .f16 .f16x2 .f32 .f64
    +" bits (untyped)
    +syntax keyword ptxType .b8 .b16 .b32 .b64 .b128
    +" predicate
    +syntax keyword ptxType .pred
    +
    +" https://docs.nvidia.com/cuda/parallel-thread-execution/#instruction-statements
    +syntax keyword ptxStatement ret
    +
    +syntax region  ptxCommentL start="//" skip="\\$" end="$" keepend
    +syntax region ptxComment matchgroup=ptxCommentStart start="/\*" end="\*/" extend
    +
    +hi def link ptxFunction Function
    +hi def link ptxDirective Keyword
    +hi def link ptxOperator Operator
    +hi def link ptxStorageClass StorageClass
    +hi def link ptxType Type
    +hi def link ptxStatement Statement
    +
    +hi def link ptxCommentL ptxComment
    +hi def link ptxCommentStart ptxComment
    +hi def link ptxComment Comment
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/purifylog.vim b/.config/vim/syntax/purifylog.vim
    new file mode 100644
    index 0000000..2143d9f
    --- /dev/null
    +++ b/.config/vim/syntax/purifylog.vim
    @@ -0,0 +1,106 @@
    +" Vim syntax file
    +" Language:	purify log files
    +" Maintainer:	Gautam H. Mudunuri 
    +" Last Change:	2003 May 11
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Purify header
    +syn match purifyLogHeader      "^\*\*\*\*.*$"
    +
    +" Informational messages
    +syn match purifyLogFIU "^FIU:.*$"
    +syn match purifyLogMAF "^MAF:.*$"
    +syn match purifyLogMIU "^MIU:.*$"
    +syn match purifyLogSIG "^SIG:.*$"
    +syn match purifyLogWPF "^WPF:.*$"
    +syn match purifyLogWPM "^WPM:.*$"
    +syn match purifyLogWPN "^WPN:.*$"
    +syn match purifyLogWPR "^WPR:.*$"
    +syn match purifyLogWPW "^WPW:.*$"
    +syn match purifyLogWPX "^WPX:.*$"
    +
    +" Warning messages
    +syn match purifyLogABR "^ABR:.*$"
    +syn match purifyLogBSR "^BSR:.*$"
    +syn match purifyLogBSW "^BSW:.*$"
    +syn match purifyLogFMR "^FMR:.*$"
    +syn match purifyLogMLK "^MLK:.*$"
    +syn match purifyLogMSE "^MSE:.*$"
    +syn match purifyLogPAR "^PAR:.*$"
    +syn match purifyLogPLK "^PLK:.*$"
    +syn match purifyLogSBR "^SBR:.*$"
    +syn match purifyLogSOF "^SOF:.*$"
    +syn match purifyLogUMC "^UMC:.*$"
    +syn match purifyLogUMR "^UMR:.*$"
    +
    +" Corrupting messages
    +syn match purifyLogABW "^ABW:.*$"
    +syn match purifyLogBRK "^BRK:.*$"
    +syn match purifyLogFMW "^FMW:.*$"
    +syn match purifyLogFNH "^FNH:.*$"
    +syn match purifyLogFUM "^FUM:.*$"
    +syn match purifyLogMRE "^MRE:.*$"
    +syn match purifyLogSBW "^SBW:.*$"
    +
    +" Fatal messages
    +syn match purifyLogCOR "^COR:.*$"
    +syn match purifyLogNPR "^NPR:.*$"
    +syn match purifyLogNPW "^NPW:.*$"
    +syn match purifyLogZPR "^ZPR:.*$"
    +syn match purifyLogZPW "^ZPW:.*$"
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link purifyLogFIU purifyLogInformational
    +hi def link purifyLogMAF purifyLogInformational
    +hi def link purifyLogMIU purifyLogInformational
    +hi def link purifyLogSIG purifyLogInformational
    +hi def link purifyLogWPF purifyLogInformational
    +hi def link purifyLogWPM purifyLogInformational
    +hi def link purifyLogWPN purifyLogInformational
    +hi def link purifyLogWPR purifyLogInformational
    +hi def link purifyLogWPW purifyLogInformational
    +hi def link purifyLogWPX purifyLogInformational
    +
    +hi def link purifyLogABR purifyLogWarning
    +hi def link purifyLogBSR purifyLogWarning
    +hi def link purifyLogBSW purifyLogWarning
    +hi def link purifyLogFMR purifyLogWarning
    +hi def link purifyLogMLK purifyLogWarning
    +hi def link purifyLogMSE purifyLogWarning
    +hi def link purifyLogPAR purifyLogWarning
    +hi def link purifyLogPLK purifyLogWarning
    +hi def link purifyLogSBR purifyLogWarning
    +hi def link purifyLogSOF purifyLogWarning
    +hi def link purifyLogUMC purifyLogWarning
    +hi def link purifyLogUMR purifyLogWarning
    +
    +hi def link purifyLogABW purifyLogCorrupting
    +hi def link purifyLogBRK purifyLogCorrupting
    +hi def link purifyLogFMW purifyLogCorrupting
    +hi def link purifyLogFNH purifyLogCorrupting
    +hi def link purifyLogFUM purifyLogCorrupting
    +hi def link purifyLogMRE purifyLogCorrupting
    +hi def link purifyLogSBW purifyLogCorrupting
    +
    +hi def link purifyLogCOR purifyLogFatal
    +hi def link purifyLogNPR purifyLogFatal
    +hi def link purifyLogNPW purifyLogFatal
    +hi def link purifyLogZPR purifyLogFatal
    +hi def link purifyLogZPW purifyLogFatal
    +
    +hi def link purifyLogHeader		Comment
    +hi def link purifyLogInformational	PreProc
    +hi def link purifyLogWarning		Type
    +hi def link purifyLogCorrupting	Error
    +hi def link purifyLogFatal		Error
    +
    +
    +let b:current_syntax = "purifylog"
    +
    +" vim:ts=8
    diff --git a/.config/vim/syntax/pymanifest.vim b/.config/vim/syntax/pymanifest.vim
    new file mode 100644
    index 0000000..26bdf79
    --- /dev/null
    +++ b/.config/vim/syntax/pymanifest.vim
    @@ -0,0 +1,44 @@
    +" Vim syntax file
    +" Language:	PyPA manifest
    +" Maintainer:	ObserverOfTime 
    +" Filenames:	MANIFEST.in
    +" Last Change:	2023 Aug 12
    +
    +if exists('b:current_syntax')
    +    finish
    +endif
    +
    +let s:cpo_save = &cpoptions
    +set cpoptions&vim
    +
    +syn iskeyword @,-
    +
    +" Comments
    +syn keyword pymanifestTodo contained TODO FIXME XXX
    +syn match pymanifestComment /\\\@1
    +" URL:		http://marcobari.altervista.org/pyrex_vim.html
    +" Last Change:	2009 Nov 09
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Read the Python syntax to start with
    +runtime! syntax/python.vim
    +unlet b:current_syntax
    +
    +" Pyrex extentions
    +syn keyword pyrexStatement      cdef typedef ctypedef sizeof
    +syn keyword pyrexType		int long short float double char object void
    +syn keyword pyrexType		signed unsigned
    +syn keyword pyrexStructure	struct union enum
    +syn keyword pyrexInclude	include cimport
    +syn keyword pyrexAccess		public private property readonly extern
    +" If someome wants Python's built-ins highlighted probably he
    +" also wants Pyrex's built-ins highlighted
    +if exists("python_highlight_builtins") || exists("pyrex_highlight_builtins")
    +    syn keyword pyrexBuiltin    NULL
    +endif
    +
    +" This deletes "from" from the keywords and re-adds it as a
    +" match with lower priority than pyrexForFrom
    +syn clear   pythonInclude
    +syn keyword pythonInclude     import
    +syn match   pythonInclude     "from"
    +
    +" With "for[^:]*\zsfrom" VIM does not match "for" anymore, so
    +" I used the slower "\@<=" form
    +syn match   pyrexForFrom        "\(for[^:]*\)\@<=from"
    +
    +" Default highlighting
    +hi def link pyrexStatement		Statement
    +hi def link pyrexType		Type
    +hi def link pyrexStructure		Structure
    +hi def link pyrexInclude		PreCondit
    +hi def link pyrexAccess		pyrexStatement
    +if exists("python_highlight_builtins") || exists("pyrex_highlight_builtins")
    +hi def link pyrexBuiltin	Function
    +endif
    +hi def link pyrexForFrom		Statement
    +
    +
    +let b:current_syntax = "pyrex"
    diff --git a/.config/vim/syntax/python.vim b/.config/vim/syntax/python.vim
    new file mode 100644
    index 0000000..05c965e
    --- /dev/null
    +++ b/.config/vim/syntax/python.vim
    @@ -0,0 +1,440 @@
    +" Vim syntax file
    +" Language:	Python
    +" Maintainer:	Zvezdan Petkovic 
    +" Last Change:	2025 Sep 08
    +" 2025 Sep 25 by Vim Project: fix wrong type highlighting #18394
    +" Credits:	Neil Schemenauer 
    +"		Dmitry Vasiliev
    +"		Rob B
    +"		Jon Parise
    +"
    +"		This version is a major rewrite by Zvezdan Petkovic.
    +"
    +"		- introduced highlighting of doctests
    +"		- updated keywords, built-ins, and exceptions
    +"		- corrected regular expressions for
    +"
    +"		  * functions
    +"		  * decorators
    +"		  * strings
    +"		  * escapes
    +"		  * numbers
    +"		  * space error
    +"
    +"		- corrected synchronization
    +"		- more highlighting is ON by default, except
    +"		- space error highlighting is OFF by default
    +"
    +" Optional highlighting can be controlled using these variables.
    +"
    +"   let python_no_builtin_highlight = 1
    +"   let python_no_doctest_code_highlight = 1
    +"   let python_no_doctest_highlight = 1
    +"   let python_no_exception_highlight = 1
    +"   let python_no_number_highlight = 1
    +"   let python_space_error_highlight = 1
    +"
    +" All the options above can be switched on together.
    +"
    +"   let python_highlight_all = 1
    +"
    +" The use of Python 2 compatible syntax highlighting can be enforced.
    +" The straddling code (Python 2 and 3 compatible), up to Python 3.5,
    +" will be also supported.
    +"
    +"   let python_use_python2_syntax = 1
    +"
    +" This option will exclude all modern Python 3.6 or higher features.
    +"
    +
    +" quit when a syntax file was already loaded.
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Use of Python 2 and 3.5 or lower requested.
    +if exists("python_use_python2_syntax")
    +  runtime! syntax/python2.vim
    +  finish
    +endif
    +
    +" We need nocompatible mode in order to continue lines with backslashes.
    +" Original setting will be restored.
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +if exists("python_no_doctest_highlight")
    +  let python_no_doctest_code_highlight = 1
    +endif
    +
    +if exists("python_highlight_all")
    +  if exists("python_no_builtin_highlight")
    +    unlet python_no_builtin_highlight
    +  endif
    +  if exists("python_no_doctest_code_highlight")
    +    unlet python_no_doctest_code_highlight
    +  endif
    +  if exists("python_no_doctest_highlight")
    +    unlet python_no_doctest_highlight
    +  endif
    +  if exists("python_no_exception_highlight")
    +    unlet python_no_exception_highlight
    +  endif
    +  if exists("python_no_number_highlight")
    +    unlet python_no_number_highlight
    +  endif
    +  let python_space_error_highlight = 1
    +endif
    +
    +" Keep Python keywords in alphabetical order inside groups for easy
    +" comparison with the table in the 'Python Language Reference'
    +" https://docs.python.org/reference/lexical_analysis.html#keywords.
    +" Groups are in the order presented in NAMING CONVENTIONS in syntax.txt.
    +" Exceptions come last at the end of each group (class and def below).
    +"
    +" The list can be checked using:
    +"
    +" python3 -c 'import keyword, pprint; pprint.pprint(keyword.kwlist + keyword.softkwlist, compact=True)'
    +"
    +syn keyword pythonStatement	False None True
    +syn keyword pythonStatement	as assert break continue del global
    +syn keyword pythonStatement	lambda nonlocal pass return with yield
    +syn keyword pythonStatement	class nextgroup=pythonClass skipwhite
    +syn keyword pythonStatement	def nextgroup=pythonFunction skipwhite
    +syn keyword pythonConditional	elif else if
    +syn keyword pythonRepeat	for while
    +syn keyword pythonOperator	and in is not or
    +syn keyword pythonException	except finally raise try
    +syn keyword pythonInclude	from import
    +syn keyword pythonAsync		async await
    +
    +" Soft keywords
    +" These keywords do not mean anything unless used in the right context.
    +" See https://docs.python.org/3/reference/lexical_analysis.html#soft-keywords
    +" for more on this.
    +syn match   pythonConditional   "^\s*\zscase\%(\s\+.*:.*$\)\@="
    +syn match   pythonConditional   "^\s*\zsmatch\%(\s\+.*:\s*\%(#.*\)\=$\)\@="
    +syn match   pythonStatement     "\>>\|\.\.\.\)\s\+\)\=\zs\%(\h\|\%(\h\|[[(]\).\{-}\%(\w\|[])]\)\)\s*\n\%(\s*\.\.\.\s\)\=\s\+@\%(.\{-}\n\%(\s*\.\.\.\s\)\=\s\+@\)*"
    +      \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonClass,pythonFunction,pythonType,pythonDoctestValue
    +      \ transparent
    +
    +syn match   pythonClass		"\h\w*" display contained
    +syn match   pythonFunction	"\h\w*" display contained
    +syn match   pythonType		"\h\w*" display contained
    +
    +syn match   pythonComment	"#.*$" contains=pythonTodo,@Spell
    +syn keyword pythonTodo		FIXME NOTE NOTES TODO XXX contained
    +
    +" Triple-quoted strings can contain doctests.
    +syn region  pythonString matchgroup=pythonQuotes
    +      \ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
    +      \ contains=pythonEscape,pythonUnicodeEscape,@Spell
    +syn region  pythonString matchgroup=pythonTripleQuotes
    +      \ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend
    +      \ contains=pythonEscape,pythonUnicodeEscape,pythonSpaceError,pythonDoctest,@Spell
    +syn region  pythonRawString matchgroup=pythonQuotes
    +      \ start=+[rR]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
    +      \ contains=@Spell
    +syn region  pythonRawString matchgroup=pythonTripleQuotes
    +      \ start=+[rR]\z('''\|"""\)+ end="\z1" keepend
    +      \ contains=pythonSpaceError,pythonDoctest,@Spell
    +
    +" Formatted string literals (f-strings)
    +" https://docs.python.org/3/reference/lexical_analysis.html#f-strings
    +syn region  pythonFString
    +      \ matchgroup=pythonQuotes
    +      \ start=+\cF\z(['"]\)+
    +      \ end="\z1"
    +      \ skip="\\\\\|\\\z1"
    +      \ contains=pythonFStringField,pythonFStringSkip,pythonEscape,pythonUnicodeEscape,@Spell
    +syn region  pythonFString
    +      \ matchgroup=pythonTripleQuotes
    +      \ start=+\cF\z('''\|"""\)+
    +      \ end="\z1"
    +      \ keepend
    +      \ contains=pythonFStringField,pythonFStringSkip,pythonEscape,pythonUnicodeEscape,pythonSpaceError,pythonDoctest,@Spell
    +syn region  pythonRawFString
    +      \ matchgroup=pythonQuotes
    +      \ start=+\c\%(FR\|RF\)\z(['"]\)+
    +      \ end="\z1"
    +      \ skip="\\\\\|\\\z1"
    +      \ contains=pythonFStringField,pythonFStringSkip,@Spell
    +syn region  pythonRawFString
    +      \ matchgroup=pythonTripleQuotes
    +      \ start=+\c\%(FR\|RF\)\z('''\|"""\)+
    +      \ end="\z1"
    +      \ keepend
    +      \ contains=pythonFStringField,pythonFStringSkip,pythonSpaceError,pythonDoctest,@Spell
    +
    +" Bytes
    +syn region  pythonBytes
    +      \ matchgroup=pythonQuotes
    +      \ start=+\cB\z(['"]\)+
    +      \ end="\z1"
    +      \ skip="\\\\\|\\\z1"
    +      \ contains=pythonEscape
    +syn region  pythonBytes
    +      \ matchgroup=pythonTripleQuotes
    +      \ start=+\cB\z('''\|"""\)+
    +      \ end="\z1"
    +      \ keepend
    +      \ contains=pythonEscape
    +syn region  pythonRawBytes
    +      \ matchgroup=pythonQuotes
    +      \ start=+\c\%(BR\|RB\)\z(['"]\)+
    +      \ end="\z1"
    +      \ skip="\\\\\|\\\z1"
    +syn region  pythonRawBytes
    +      \ matchgroup=pythonTripleQuotes
    +      \ start=+\c\%(BR\|RB\)\z('''\|"""\)+
    +      \ end="\z1"
    +      \ keepend
    +
    +" F-string replacement fields
    +"
    +" - Matched parentheses, brackets and braces are skipped
    +" - A bare = (followed by optional whitespace) enables debugging
    +" - A bare ! prefixes a conversion field (followed by optional whitespace)
    +" - A bare : begins a format specification
    +"     - Matched braces inside a format specification are skipped
    +"
    +syn region  pythonFStringField
    +    \ matchgroup=pythonFStringDelimiter
    +    \ start=/{/
    +    \ end=/\%(=\s*\)\=\%(!\a\s*\)\=\%(:\%({\_[^}]*}\|[^{}]*\)\+\)\=}/
    +    \ contained
    +    \ contains=ALLBUT,pythonFStringField,pythonClass,pythonFunction,pythonType,pythonDoctest,pythonDoctestValue,@Spell
    +syn match   pythonFStringFieldSkip  /(\_[^()]*)\|\[\_[^][]*]\|{\_[^{}]*}/
    +    \ contained
    +    \ contains=ALLBUT,pythonFStringField,pythonClass,pythonFunction,pythonType,pythonDoctest,pythonDoctestValue,@Spell
    +
    +" Doubled braces are not replacement fields
    +syn match   pythonFStringSkip	/{{/ transparent contained contains=NONE
    +
    +syn match   pythonEscape	+\\[abfnrtv'"\\]+ contained
    +syn match   pythonEscape	"\\\o\{1,3}" contained
    +syn match   pythonEscape	"\\x\x\{2}" contained
    +syn match   pythonUnicodeEscape	"\%(\\u\x\{4}\|\\U\x\{8}\)" contained
    +" Python allows case-insensitive Unicode IDs: http://www.unicode.org/charts/
    +" The specification: https://www.unicode.org/versions/Unicode16.0.0/core-spec/chapter-4/#G135165
    +syn match   pythonUnicodeEscape	"\\N{\a\+\%(\%(\s\a\+[[:alnum:]]*\)\|\%(-[[:alnum:]]\+\)\)*}" contained
    +syn match   pythonEscape	"\\$"
    +
    +" It is very important to understand all details before changing the
    +" regular expressions below or their order.
    +" The word boundaries are *not* the floating-point number boundaries
    +" because of a possible leading or trailing decimal point.
    +" The expressions below ensure that all valid number literals are
    +" highlighted, and invalid number literals are not.  For example,
    +"
    +" - a decimal point in '4.' at the end of a line is highlighted,
    +" - a second dot in 1.0.0 is not highlighted,
    +" - 08 is not highlighted,
    +" - 08e0 or 08j are highlighted,
    +"
    +" and so on, as specified in the 'Python Language Reference'.
    +" https://docs.python.org/reference/lexical_analysis.html#numeric-literals
    +if !exists("python_no_number_highlight")
    +  " numbers (including complex)
    +  syn match   pythonNumber	"\<0[oO]\%(_\=\o\)\+\>"
    +  syn match   pythonNumber	"\<0[xX]\%(_\=\x\)\+\>"
    +  syn match   pythonNumber	"\<0[bB]\%(_\=[01]\)\+\>"
    +  syn match   pythonNumber	"\<\%([1-9]\%(_\=\d\)*\|0\+\%(_\=0\)*\)\>"
    +  syn match   pythonNumber	"\<\d\%(_\=\d\)*[jJ]\>"
    +  syn match   pythonNumber	"\<\d\%(_\=\d\)*[eE][+-]\=\d\%(_\=\d\)*[jJ]\=\>"
    +  syn match   pythonNumber
    +        \ "\<\d\%(_\=\d\)*\.\%([eE][+-]\=\d\%(_\=\d\)*\)\=[jJ]\=\%(\W\|$\)\@="
    +  syn match   pythonNumber
    +        \ "\%(^\|\W\)\@1<=\%(\d\%(_\=\d\)*\)\=\.\d\%(_\=\d\)*\%([eE][+-]\=\d\%(_\=\d\)*\)\=[jJ]\=\>"
    +endif
    +
    +" Group the built-ins in the order in the 'Python Library Reference' for
    +" easier comparison.
    +" https://docs.python.org/library/constants.html
    +" http://docs.python.org/library/functions.html
    +" Python built-in functions are in alphabetical order.
    +"
    +" The list can be checked using:
    +"
    +" python3 -c 'import builtins, pprint; pprint.pprint(dir(builtins), compact=True)'
    +"
    +" The constants added by the `site` module are not listed below because they
    +" should not be used in programs, only in interactive interpreter.
    +" Similarly for some other attributes and functions `__`-enclosed from the
    +" output of the above command.
    +"
    +if !exists("python_no_builtin_highlight")
    +  " built-in constants
    +  " 'False', 'True', and 'None' are also reserved words in Python 3
    +  syn keyword pythonBuiltin	False True None
    +  syn keyword pythonBuiltin	NotImplemented Ellipsis __debug__
    +  " constants added by the `site` module
    +  syn keyword pythonBuiltin	quit exit copyright credits license
    +  " built-in functions
    +  syn keyword pythonBuiltin	abs all any ascii bin bool breakpoint bytearray
    +  syn keyword pythonBuiltin	bytes callable chr classmethod compile complex
    +  syn keyword pythonBuiltin	delattr dict dir divmod enumerate eval exec
    +  syn keyword pythonBuiltin	filter float format frozenset getattr globals
    +  syn keyword pythonBuiltin	hasattr hash help hex id input int isinstance
    +  syn keyword pythonBuiltin	issubclass iter len list locals map max
    +  syn keyword pythonBuiltin	memoryview min next object oct open ord pow
    +  syn keyword pythonBuiltin	print property range repr reversed round set
    +  syn keyword pythonBuiltin	setattr slice sorted staticmethod str sum super
    +  syn keyword pythonBuiltin	tuple vars zip __import__
    +  " only match `type` as a builtin when it's not followed by an identifier
    +  syn match   pythonBuiltin	"\\ze\(\s\+\h\w*\)\@!"
    +  " avoid highlighting attributes as builtins
    +  syn match   pythonAttribute	/\.\h\w*/hs=s+1
    +	\ contains=ALLBUT,pythonBuiltin,pythonClass,pythonFunction,pythonType,pythonAsync
    +	\ transparent
    +  " the ellipsis literal `...` can be used in multiple syntactic contexts
    +  syn match   pythonEllipsis	"\.\@1>>\s" end="^\s*$"
    +	  \ contained contains=ALLBUT,pythonDoctest,pythonEllipsis,pythonClass,pythonFunction,pythonType,@Spell
    +    syn region pythonDoctestValue
    +	  \ start=+^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\++ end="$"
    +	  \ contained contains=pythonEllipsis
    +    syn match pythonEllipsis "\%(^\s*\)\@>>" end="^\s*$"
    +	  \ contained contains=@NoSpell
    +  endif
    +endif
    +
    +" Sync at the beginning of (async) function or class definitions.
    +syn sync match pythonSync grouphere NONE "^\%(def\|class\|async\s\+def\)\s\+\h\w*\s*[(:]"
    +
    +" The default highlight links.  Can be overridden later.
    +hi def link pythonStatement		Statement
    +hi def link pythonConditional		Conditional
    +hi def link pythonRepeat		Repeat
    +hi def link pythonOperator		Operator
    +hi def link pythonException		Exception
    +hi def link pythonInclude		Include
    +hi def link pythonAsync			Statement
    +hi def link pythonClassVar		Identifier
    +hi def link pythonDecorator		Define
    +hi def link pythonDecoratorName		Function
    +hi def link pythonClass			Structure
    +hi def link pythonFunction		Function
    +hi def link pythonType			Type
    +hi def link pythonComment		Comment
    +hi def link pythonTodo			Todo
    +hi def link pythonString		String
    +hi def link pythonRawString		String
    +hi def link pythonFString		String
    +hi def link pythonRawFString		String
    +hi def link pythonBytes 		String
    +hi def link pythonRawBytes 		String
    +hi def link pythonQuotes		String
    +hi def link pythonTripleQuotes		pythonQuotes
    +hi def link pythonEscape		Special
    +hi def link pythonUnicodeEscape		pythonEscape
    +hi def link pythonFStringDelimiter	Special
    +if !exists("python_no_number_highlight")
    +  hi def link pythonNumber		Number
    +endif
    +if !exists("python_no_builtin_highlight")
    +  hi def link pythonBuiltin		Function
    +  hi def link pythonEllipsis		pythonBuiltin
    +endif
    +if !exists("python_no_exception_highlight")
    +  hi def link pythonExceptions		Structure
    +endif
    +if exists("python_space_error_highlight")
    +  hi def link pythonSpaceError		Error
    +endif
    +if !exists("python_no_doctest_highlight")
    +  hi def link pythonDoctest		Special
    +  hi def link pythonDoctestValue	Define
    +endif
    +
    +let b:current_syntax = "python"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim:set sw=2 sts=2 ts=8 noet:
    diff --git a/.config/vim/syntax/python2.vim b/.config/vim/syntax/python2.vim
    new file mode 100644
    index 0000000..a4a7a82
    --- /dev/null
    +++ b/.config/vim/syntax/python2.vim
    @@ -0,0 +1,378 @@
    +" Vim syntax file
    +" Language:	Python 2
    +" Maintainer:	Zvezdan Petkovic 
    +" Last Change:	2016 Oct 29
    +" 2025 Jul 14 by Vim project: highlight unicode strings
    +" 2025 Jul 15 by Vim project: highlight b-strings
    +" Credits:	Neil Schemenauer 
    +"		Dmitry Vasiliev
    +"		Rob B
    +"
    +"		This version is a major rewrite by Zvezdan Petkovic.
    +"
    +"		- introduced highlighting of doctests
    +"		- updated keywords, built-ins, and exceptions
    +"		- corrected regular expressions for
    +"
    +"		  * functions
    +"		  * decorators
    +"		  * strings
    +"		  * escapes
    +"		  * numbers
    +"		  * space error
    +"
    +"		- corrected synchronization
    +"		- more highlighting is ON by default, except
    +"		- space error highlighting is OFF by default
    +"
    +" Optional highlighting can be controlled using these variables.
    +"
    +"   let python_no_builtin_highlight = 1
    +"   let python_no_doctest_code_highlight = 1
    +"   let python_no_doctest_highlight = 1
    +"   let python_no_exception_highlight = 1
    +"   let python_no_number_highlight = 1
    +"   let python_space_error_highlight = 1
    +"
    +" All the options above can be switched on together.
    +"
    +"   let python_highlight_all = 1
    +"
    +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    +" NOTE: This file is a copy of the last commit of runtime/syntax/python.vim
    +" that still supported Python 2. There is support for Python 3, up to 3.5,
    +" and it was kept in the file as is, because it supports the straddling code
    +" (Python 2 and 3 compatible) better.
    +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    +
    +" quit when a syntax file was already loaded.
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" We need nocompatible mode in order to continue lines with backslashes.
    +" Original setting will be restored.
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +if exists("python_no_doctest_highlight")
    +  let python_no_doctest_code_highlight = 1
    +endif
    +
    +if exists("python_highlight_all")
    +  if exists("python_no_builtin_highlight")
    +    unlet python_no_builtin_highlight
    +  endif
    +  if exists("python_no_doctest_code_highlight")
    +    unlet python_no_doctest_code_highlight
    +  endif
    +  if exists("python_no_doctest_highlight")
    +    unlet python_no_doctest_highlight
    +  endif
    +  if exists("python_no_exception_highlight")
    +    unlet python_no_exception_highlight
    +  endif
    +  if exists("python_no_number_highlight")
    +    unlet python_no_number_highlight
    +  endif
    +  let python_space_error_highlight = 1
    +endif
    +
    +" Keep Python keywords in alphabetical order inside groups for easy
    +" comparison with the table in the 'Python Language Reference'
    +" https://docs.python.org/2/reference/lexical_analysis.html#keywords,
    +" https://docs.python.org/3/reference/lexical_analysis.html#keywords.
    +" Groups are in the order presented in NAMING CONVENTIONS in syntax.txt.
    +" Exceptions come last at the end of each group (class and def below).
    +"
    +" Keywords 'with' and 'as' are new in Python 2.6
    +" (use 'from __future__ import with_statement' in Python 2.5).
    +"
    +" Some compromises had to be made to support both Python 3 and 2.
    +" We include Python 3 features, but when a definition is duplicated,
    +" the last definition takes precedence.
    +"
    +" - 'False', 'None', and 'True' are keywords in Python 3 but they are
    +"   built-ins in 2 and will be highlighted as built-ins below.
    +" - 'exec' is a built-in in Python 3 and will be highlighted as
    +"   built-in below.
    +" - 'nonlocal' is a keyword in Python 3 and will be highlighted.
    +" - 'print' is a built-in in Python 3 and will be highlighted as
    +"   built-in below (use 'from __future__ import print_function' in 2)
    +" - async and await were added in Python 3.5 and are soft keywords.
    +"
    +syn keyword pythonStatement	False None True
    +syn keyword pythonStatement	as assert break continue del exec global
    +syn keyword pythonStatement	lambda nonlocal pass print return with yield
    +syn keyword pythonStatement	class def nextgroup=pythonFunction skipwhite
    +syn keyword pythonConditional	elif else if
    +syn keyword pythonRepeat	for while
    +syn keyword pythonOperator	and in is not or
    +syn keyword pythonException	except finally raise try
    +syn keyword pythonInclude	from import
    +syn keyword pythonAsync		async await
    +
    +" Decorators (new in Python 2.4)
    +" A dot must be allowed because of @MyClass.myfunc decorators.
    +syn match   pythonDecorator	"@" display contained
    +syn match   pythonDecoratorName	"@\s*\h\%(\w\|\.\)*" display contains=pythonDecorator
    +
    +" Python 3.5 introduced the use of the same symbol for matrix multiplication:
    +" https://www.python.org/dev/peps/pep-0465/.  We now have to exclude the
    +" symbol from highlighting when used in that context.
    +" Single line multiplication.
    +syn match   pythonMatrixMultiply
    +      \ "\%(\w\|[])]\)\s*@"
    +      \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue
    +      \ transparent
    +" Multiplication continued on the next line after backslash.
    +syn match   pythonMatrixMultiply
    +      \ "[^\\]\\\s*\n\%(\s*\.\.\.\s\)\=\s\+@"
    +      \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue
    +      \ transparent
    +" Multiplication in a parenthesized expression over multiple lines with @ at
    +" the start of each continued line; very similar to decorators and complex.
    +syn match   pythonMatrixMultiply
    +      \ "^\s*\%(\%(>>>\|\.\.\.\)\s\+\)\=\zs\%(\h\|\%(\h\|[[(]\).\{-}\%(\w\|[])]\)\)\s*\n\%(\s*\.\.\.\s\)\=\s\+@\%(.\{-}\n\%(\s*\.\.\.\s\)\=\s\+@\)*"
    +      \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue
    +      \ transparent
    +
    +syn match   pythonFunction	"\h\w*" display contained
    +
    +syn match   pythonComment	"#.*$" contains=pythonTodo,@Spell
    +syn keyword pythonTodo		FIXME NOTE NOTES TODO XXX contained
    +
    +" Triple-quoted strings can contain doctests.
    +syn region  pythonString matchgroup=pythonQuotes
    +      \ start=+[bB]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
    +      \ contains=pythonEscape,@Spell
    +syn region  pythonString matchgroup=pythonTripleQuotes
    +      \ start=+[bB]\=\z('''\|"""\)+ end="\z1" keepend
    +      \ contains=pythonEscape,pythonSpaceError,pythonDoctest,@Spell
    +syn region  pythonRawString matchgroup=pythonQuotes
    +      \ start=+[bB]\=[rR]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
    +      \ contains=@Spell
    +syn region  pythonRawString matchgroup=pythonTripleQuotes
    +      \ start=+[bB]\=[rR]\z('''\|"""\)+ end="\z1" keepend
    +      \ contains=pythonSpaceError,pythonDoctest,@Spell
    +
    +" Unicode strings
    +syn region  pythonString
    +      \ matchgroup=pythonQuotes
    +      \ start=+[uU]\z(['"]\)+
    +      \ end="\z1"
    +      \ skip="\\\\\|\\\z1"
    +      \ contains=pythonEscape,pythonUnicodeEscape,@Spell
    +syn region  pythonString
    +      \ matchgroup=pythonTripleQuotes
    +      \ start=+[uU]\z('''\|"""\)+
    +      \ end="\z1"
    +      \ keepend
    +      \ contains=pythonEscape,pythonUnicodeEscape,pythonSpaceError,pythonDoctest,@Spell
    +
    +" Raw Unicode strings recognize Unicode escape sequences
    +" https://docs.python.org/2.7/reference/lexical_analysis.html#string-literals
    +syn region  pythonRawString
    +      \ matchgroup=pythonQuotes
    +      \ start=+[uU][rR]\z(['"]\)+
    +      \ end="\z1"
    +      \ skip="\\\\\|\\\z1"
    +      \ contains=pythonUnicodeEscape,@Spell
    +syn region  pythonRawString
    +      \ matchgroup=pythonTripleQuotes
    +      \ start=+[uU][rR]\z('''\|"""\)+
    +      \ end="\z1"
    +      \ keepend
    +      \ contains=pythonUnicodeEscape,pythonSpaceError,pythonDoctest,@Spell
    +
    +syn match   pythonEscape	+\\[abfnrtv'"\\]+ contained
    +syn match   pythonEscape	"\\\o\{1,3}" contained
    +syn match   pythonEscape	"\\x\x\{2}" contained
    +syn match   pythonUnicodeEscape	"\%(\\u\x\{4}\|\\U\x\{8}\)" contained
    +" Python allows case-insensitive Unicode IDs: http://www.unicode.org/charts/
    +syn match   pythonUnicodeEscape	"\\N{\a\+\%(\s\a\+\)*}" contained
    +syn match   pythonEscape	"\\$"
    +
    +" It is very important to understand all details before changing the
    +" regular expressions below or their order.
    +" The word boundaries are *not* the floating-point number boundaries
    +" because of a possible leading or trailing decimal point.
    +" The expressions below ensure that all valid number literals are
    +" highlighted, and invalid number literals are not.  For example,
    +"
    +" - a decimal point in '4.' at the end of a line is highlighted,
    +" - a second dot in 1.0.0 is not highlighted,
    +" - 08 is not highlighted,
    +" - 08e0 or 08j are highlighted,
    +"
    +" and so on, as specified in the 'Python Language Reference'.
    +" https://docs.python.org/2/reference/lexical_analysis.html#numeric-literals
    +" https://docs.python.org/3/reference/lexical_analysis.html#numeric-literals
    +if !exists("python_no_number_highlight")
    +  " numbers (including longs and complex)
    +  syn match   pythonNumber	"\<0[oO]\=\o\+[Ll]\=\>"
    +  syn match   pythonNumber	"\<0[xX]\x\+[Ll]\=\>"
    +  syn match   pythonNumber	"\<0[bB][01]\+[Ll]\=\>"
    +  syn match   pythonNumber	"\<\%([1-9]\d*\|0\)[Ll]\=\>"
    +  syn match   pythonNumber	"\<\d\+[jJ]\>"
    +  syn match   pythonNumber	"\<\d\+[eE][+-]\=\d\+[jJ]\=\>"
    +  syn match   pythonNumber
    +	\ "\<\d\+\.\%([eE][+-]\=\d\+\)\=[jJ]\=\%(\W\|$\)\@="
    +  syn match   pythonNumber
    +	\ "\%(^\|\W\)\zs\d*\.\d\+\%([eE][+-]\=\d\+\)\=[jJ]\=\>"
    +endif
    +
    +" Group the built-ins in the order in the 'Python Library Reference' for
    +" easier comparison.
    +" https://docs.python.org/2/library/constants.html
    +" https://docs.python.org/3/library/constants.html
    +" http://docs.python.org/2/library/functions.html
    +" http://docs.python.org/3/library/functions.html
    +" http://docs.python.org/2/library/functions.html#non-essential-built-in-functions
    +" http://docs.python.org/3/library/functions.html#non-essential-built-in-functions
    +" Python built-in functions are in alphabetical order.
    +if !exists("python_no_builtin_highlight")
    +  " built-in constants
    +  " 'False', 'True', and 'None' are also reserved words in Python 3
    +  syn keyword pythonBuiltin	False True None
    +  syn keyword pythonBuiltin	NotImplemented Ellipsis __debug__
    +  " built-in functions
    +  syn keyword pythonBuiltin	abs all any bin bool bytearray callable chr
    +  syn keyword pythonBuiltin	classmethod compile complex delattr dict dir
    +  syn keyword pythonBuiltin	divmod enumerate eval filter float format
    +  syn keyword pythonBuiltin	frozenset getattr globals hasattr hash
    +  syn keyword pythonBuiltin	help hex id input int isinstance
    +  syn keyword pythonBuiltin	issubclass iter len list locals map max
    +  syn keyword pythonBuiltin	memoryview min next object oct open ord pow
    +  syn keyword pythonBuiltin	print property range repr reversed round set
    +  syn keyword pythonBuiltin	setattr slice sorted staticmethod str
    +  syn keyword pythonBuiltin	sum super tuple type vars zip __import__
    +  " Python 2 only
    +  syn keyword pythonBuiltin	basestring cmp execfile file
    +  syn keyword pythonBuiltin	long raw_input reduce reload unichr
    +  syn keyword pythonBuiltin	unicode xrange
    +  " Python 3 only
    +  syn keyword pythonBuiltin	ascii bytes exec
    +  " non-essential built-in functions; Python 2 only
    +  syn keyword pythonBuiltin	apply buffer coerce intern
    +  " avoid highlighting attributes as builtins
    +  syn match   pythonAttribute	/\.\h\w*/hs=s+1
    +	\ contains=ALLBUT,pythonBuiltin,pythonFunction,pythonAsync
    +	\ transparent
    +endif
    +
    +" From the 'Python Library Reference' class hierarchy at the bottom.
    +" http://docs.python.org/2/library/exceptions.html
    +" http://docs.python.org/3/library/exceptions.html
    +if !exists("python_no_exception_highlight")
    +  " builtin base exceptions (used mostly as base classes for other exceptions)
    +  syn keyword pythonExceptions	BaseException Exception
    +  syn keyword pythonExceptions	ArithmeticError BufferError
    +  syn keyword pythonExceptions	LookupError
    +  " builtin base exceptions removed in Python 3
    +  syn keyword pythonExceptions	EnvironmentError StandardError
    +  " builtin exceptions (actually raised)
    +  syn keyword pythonExceptions	AssertionError AttributeError
    +  syn keyword pythonExceptions	EOFError FloatingPointError GeneratorExit
    +  syn keyword pythonExceptions	ImportError IndentationError
    +  syn keyword pythonExceptions	IndexError KeyError KeyboardInterrupt
    +  syn keyword pythonExceptions	MemoryError NameError NotImplementedError
    +  syn keyword pythonExceptions	OSError OverflowError ReferenceError
    +  syn keyword pythonExceptions	RuntimeError StopIteration SyntaxError
    +  syn keyword pythonExceptions	SystemError SystemExit TabError TypeError
    +  syn keyword pythonExceptions	UnboundLocalError UnicodeError
    +  syn keyword pythonExceptions	UnicodeDecodeError UnicodeEncodeError
    +  syn keyword pythonExceptions	UnicodeTranslateError ValueError
    +  syn keyword pythonExceptions	ZeroDivisionError
    +  " builtin OS exceptions in Python 3
    +  syn keyword pythonExceptions	BlockingIOError BrokenPipeError
    +  syn keyword pythonExceptions	ChildProcessError ConnectionAbortedError
    +  syn keyword pythonExceptions	ConnectionError ConnectionRefusedError
    +  syn keyword pythonExceptions	ConnectionResetError FileExistsError
    +  syn keyword pythonExceptions	FileNotFoundError InterruptedError
    +  syn keyword pythonExceptions	IsADirectoryError NotADirectoryError
    +  syn keyword pythonExceptions	PermissionError ProcessLookupError
    +  syn keyword pythonExceptions	RecursionError StopAsyncIteration
    +  syn keyword pythonExceptions	TimeoutError
    +  " builtin exceptions deprecated/removed in Python 3
    +  syn keyword pythonExceptions	IOError VMSError WindowsError
    +  " builtin warnings
    +  syn keyword pythonExceptions	BytesWarning DeprecationWarning FutureWarning
    +  syn keyword pythonExceptions	ImportWarning PendingDeprecationWarning
    +  syn keyword pythonExceptions	RuntimeWarning SyntaxWarning UnicodeWarning
    +  syn keyword pythonExceptions	UserWarning Warning
    +  " builtin warnings in Python 3
    +  syn keyword pythonExceptions	ResourceWarning
    +endif
    +
    +if exists("python_space_error_highlight")
    +  " trailing whitespace
    +  syn match   pythonSpaceError	display excludenl "\s\+$"
    +  " mixed tabs and spaces
    +  syn match   pythonSpaceError	display " \+\t"
    +  syn match   pythonSpaceError	display "\t\+ "
    +endif
    +
    +" Do not spell doctests inside strings.
    +" Notice that the end of a string, either ''', or """, will end the contained
    +" doctest too.  Thus, we do *not* need to have it as an end pattern.
    +if !exists("python_no_doctest_highlight")
    +  if !exists("python_no_doctest_code_highlight")
    +    syn region pythonDoctest
    +	  \ start="^\s*>>>\s" end="^\s*$"
    +	  \ contained contains=ALLBUT,pythonDoctest,pythonFunction,@Spell
    +    syn region pythonDoctestValue
    +	  \ start=+^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\++ end="$"
    +	  \ contained
    +  else
    +    syn region pythonDoctest
    +	  \ start="^\s*>>>" end="^\s*$"
    +	  \ contained contains=@NoSpell
    +  endif
    +endif
    +
    +" Sync at the beginning of class, function, or method definition.
    +syn sync match pythonSync grouphere NONE "^\%(def\|class\)\s\+\h\w*\s*[(:]"
    +
    +" The default highlight links.  Can be overridden later.
    +hi def link pythonStatement		Statement
    +hi def link pythonConditional		Conditional
    +hi def link pythonRepeat		Repeat
    +hi def link pythonOperator		Operator
    +hi def link pythonException		Exception
    +hi def link pythonInclude		Include
    +hi def link pythonAsync			Statement
    +hi def link pythonDecorator		Define
    +hi def link pythonDecoratorName		Function
    +hi def link pythonFunction		Function
    +hi def link pythonComment		Comment
    +hi def link pythonTodo			Todo
    +hi def link pythonString		String
    +hi def link pythonRawString		String
    +hi def link pythonQuotes		String
    +hi def link pythonTripleQuotes		pythonQuotes
    +hi def link pythonEscape		Special
    +hi def link pythonUnicodeEscape		pythonEscape
    +if !exists("python_no_number_highlight")
    +  hi def link pythonNumber		Number
    +endif
    +if !exists("python_no_builtin_highlight")
    +  hi def link pythonBuiltin		Function
    +endif
    +if !exists("python_no_exception_highlight")
    +  hi def link pythonExceptions		Structure
    +endif
    +if exists("python_space_error_highlight")
    +  hi def link pythonSpaceError		Error
    +endif
    +if !exists("python_no_doctest_highlight")
    +  hi def link pythonDoctest		Special
    +  hi def link pythonDoctestValue	Define
    +endif
    +
    +let b:current_syntax = "python"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim:set sw=2 sts=2 ts=8 noet:
    diff --git a/.config/vim/syntax/qb64.vim b/.config/vim/syntax/qb64.vim
    new file mode 100644
    index 0000000..a777e14
    --- /dev/null
    +++ b/.config/vim/syntax/qb64.vim
    @@ -0,0 +1,409 @@
    +" Vim syntax file
    +" Language:	QB64
    +" Maintainer:	Doug Kearns 
    +" Last Change:	2022 Jan 21
    +
    +" Prelude {{{1
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +" syn iskeyword set after sourcing of basic.vim
    +
    +syn case ignore
    +
    +let s:prefix = search('\c^\s*$NOPREFIX\>', 'n') ? '_\=' : '_'
    +
    +" Statements {{{1
    +
    +let s:statements =<< trim EOL " {{{2
    +  acceptfiledrop
    +  allowfullscreen
    +  assert
    +  console
    +  consolecursor
    +  consolefont
    +  consoletitle
    +  continue
    +  copypalette
    +  define
    +  delay
    +  depthbuffer
    +  displayorder
    +  dontblend
    +  echo
    +  exit\s\+\%(select\|case\)
    +  finishdrop
    +  freefont
    +  freeimage
    +  icon
    +  keyclear
    +  limit
    +  maptriangle
    +  memcopy
    +  memfill
    +  memfree
    +  memput
    +  mousehide
    +  mousemove
    +  mouseshow
    +  printimage
    +  printstring
    +  putimage
    +  screenclick
    +  screenhide
    +  screenmove
    +  screenprint
    +  screenshow
    +  setalpha
    +  sndbal
    +  sndclose
    +  sndlimit
    +  sndloop
    +  sndpause
    +  sndplay
    +  sndplaycopy
    +  sndplayfile
    +  sndraw
    +  sndrawdone
    +  sndsetpos
    +  sndstop
    +  sndvol
    +  title
    +EOL
    +" }}}
    +
    +for s in s:statements
    +  exe 'syn match qb64Statement "\<' .. s:prefix .. s .. '\>" contained contains=qb64Underscore'
    +endfor
    +
    +" Functions {{{1
    +
    +let s:functions =<< trim EOL " {{{2
    +  acos
    +  acosh
    +  alpha
    +  alpha32
    +  arccot
    +  arccsc
    +  arcsec
    +  asin
    +  asinh
    +  atan2
    +  atanh
    +  axis
    +  backgroundcolor
    +  blue
    +  blue32
    +  button
    +  buttonchange
    +  ceil
    +  cinp
    +  commandcount
    +  connected
    +  connectionaddress
    +  connectionaddress$
    +  consoleinput
    +  copyimage
    +  cot
    +  coth
    +  cosh
    +  csc
    +  csch
    +  cv
    +  cwd$
    +  d2g
    +  d2r
    +  defaultcolor
    +  deflate$
    +  desktopheight
    +  desktopwidth
    +  device$
    +  deviceinput
    +  devices
    +  dir$
    +  direxists
    +  droppedfile
    +  droppedfile$
    +  errorline
    +  errormessage$
    +  exit
    +  fileexists
    +  fontheight
    +  fontwidth
    +  freetimer
    +  g2d
    +  g2r
    +  green
    +  green32
    +  height
    +  hypot
    +  inclerrorfile$
    +  inclerrorline
    +  inflate$
    +  instrrev
    +  keyhit
    +  keydown
    +  lastaxis
    +  lastbutton
    +  lastwheel
    +  loadfont
    +  loadimage
    +  mem
    +  memelement
    +  memexists
    +  memimage
    +  memnew
    +  memsound
    +  mk$
    +  mousebutton
    +  mouseinput
    +  mousemovementx
    +  mousemovementy
    +  mousepipeopen
    +  mousewheel
    +  mousex
    +  mousey
    +  newimage
    +  offset
    +  openclient
    +  os$
    +  pi
    +  pixelsize
    +  printwidth
    +  r2d
    +  r2g
    +  red
    +  red32
    +  readbit
    +  resetbit
    +  resizeheight
    +  resizewidth
    +  rgb
    +  rgb32
    +  rgba
    +  rgba32
    +  round
    +  sec
    +  sech
    +  screenexists
    +  screenimage
    +  screenx
    +  screeny
    +  setbit
    +  shellhide
    +  shl
    +  shr
    +  sinh
    +  sndcopy
    +  sndgetpos
    +  sndlen
    +  sndopen
    +  sndopenraw
    +  sndpaused
    +  sndplaying
    +  sndrate
    +  sndrawlen
    +  startdir$
    +  strcmp
    +  stricmp
    +  tanh
    +  title$
    +  togglebit
    +  totaldroppedfiles
    +  trim$
    +  wheel
    +  width
    +  windowhandle
    +  windowhasfocus
    +EOL
    +" }}}
    +
    +for f in s:functions
    +  exe 'syn match qb64Function "\<' .. s:prefix .. f .. '\>" contains=qb64Underscore'
    +endfor
    +
    +" Functions and statements (same name) {{{1
    +
    +let s:common =<< trim EOL " {{{2
    +  autodisplay
    +  blend
    +  blink
    +  capslock
    +  clearcolor
    +  clipboard$
    +  clipboardimage
    +  controlchr
    +  dest
    +  display
    +  font
    +  fullscreen
    +  mapunicode
    +  memget
    +  numlock
    +  palettecolor
    +  printmode
    +  resize
    +  screenicon
    +  scrolllock
    +  source
    +EOL
    +" }}}
    +
    +for c in s:common
    +  exe 'syn match qb64Statement "\<' .. s:prefix .. c .. '\>" contains=qb64Underscore contained'
    +  exe 'syn match qb64Function  "\<' .. s:prefix .. c .. '\>" contains=qb64Underscore'
    +endfor
    +
    +" Keywords {{{1
    +
    +" Non-prefixed keywords {{{2
    +" TIMER FREE
    +" _DEPTH_BUFFER LOCK
    +syn keyword qb64Keyword free lock
    +
    +let s:keywords  =<< trim EOL " {{{2
    +  all
    +  anticlockwise
    +  behind
    +  clear
    +  clip
    +  console
    +  dontwait
    +  explicit
    +  explicitarray
    +  fillbackground
    +  hardware
    +  hardware1
    +  hide
    +  keepbackground
    +  middle
    +  none
    +  off
    +  only
    +  onlybackground
    +  ontop
    +  openconnection
    +  openhost
    +  preserve
    +  seamless
    +  smooth
    +  smoothshrunk
    +  smoothstretched
    +  software
    +  squarepixels
    +  stretch
    +  toggle
    +EOL
    +" }}}
    +
    +for k in s:keywords
    +  exe 'syn match qb64Keyword "\<' .. s:prefix .. k .. '\>" contains=qb64Underscore'
    +endfor
    +
    +syn match qb64Underscore "\<_" contained conceal transparent
    +
    +" Source QuickBASIC syntax {{{1
    +runtime! syntax/basic.vim
    +
    +" add after the BASIC syntax file is sourced so cluster already exists
    +syn cluster basicStatements	add=qb64Statement,qb64Metacommand,qb64IfMetacommand
    +syn cluster basicLineIdentifier add=qb64LineLabel
    +syn cluster qb64NotTop		contains=@basicNotTop,qb64Metavariable
    +
    +syn iskeyword @,48-57,.,_,!,#,$,%,&,`
    +
    +" Unsupported QuickBASIC features {{{1
    +" TODO: add linux only missing features
    +syn keyword qb64Unsupported alias any byval calls cdecl erdev erdev$ fileattr
    +syn keyword qb64Unsupported fre ioctl ioctl$ pen play setmem signal uevent
    +syn keyword qb64Unsupported tron troff
    +syn match   qb64Unsupported "\\)\@="
    +syn match   qb64Unsupported "\<\%(date\|time\)$\ze\s*=" " statements only
    +syn match   qb64Unsupported "\"
    +syn match   qb64Unsupported "\"
    +
    +" Types {{{1
    +syn keyword qb64Type _BIT _BYTE _FLOAT _INTEGER64 _MEM _OFFSET _UNSIGNED
    +
    +" Type suffixes {{{1
    +if exists("basic_type_suffixes")
    +  " TODO: handle leading word boundary and __+ prefix
    +  syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\~\=`\%(\d\+\)\="
    +  syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\~\=\%(%\|%%\|&\|&&\|%&\)"
    +  syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\%(!\|##\|#\)"
    +  syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=$\%(\d\+\)\="
    +endif
    +
    +" Numbers {{{1
    +
    +" Integers
    +syn match qb64Number "-\=&b[01]\+&\>\="
    +
    +syn match qb64Number "-\=\<[01]\~\=`\>"
    +syn match qb64Number "-\=\<\d\+`\d\+\>"
    +
    +syn match qb64Number "-\=\<\d\+\%(%%\|&&\|%&\)\>"
    +syn match qb64Number  "\<\d\+\~\%(%%\|&&\|%&\)\>"
    +
    +syn match qb64Number "-\=\<&b[01]\+\%(%%\|&&\|%&\)\>"
    +syn match qb64Number  "\<&b[01]\+\~\%(%%\|&&\|%&\)\>"
    +
    +syn match qb64Number "-\=\<&o\=\o\+\%(%%\|&&\|%&\)\>"
    +syn match qb64Number  "\<&o\=\o\+\~\%(%%\|&&\|%&\)\>"
    +
    +syn match qb64Number "-\=\<&h\x\+\%(%%\|&&\|%&\)\>"
    +syn match qb64Number  "\<&h\x\+\~\%(%%\|&&\|%&\)\>"
    +
    +" Floats
    +syn match qb64Float "-\=\<\d\+\.\=\d*##\>"
    +syn match qb64Float "-\=\<\.\d\+##\>"
    +
    +" Line numbers and labels {{{1
    +syn match qb64LineLabel  "\%(_\{2,}\)\=\a[[:alnum:]._]*[[:alnum:]]\ze\s*:" nextgroup=@basicStatements skipwhite contained
    +
    +" Metacommands {{{1
    +syn match qb64Metacommand contained "$NOPREFIX\>"
    +syn match qb64Metacommand contained "$ASSERTS\%(:CONSOLE\)\=\>"
    +syn match qb64Metacommand contained "$CHECKING:\%(ON\|OFF\)\>"
    +syn match qb64Metacommand contained "$COLOR:\%(0\|32\)\>"
    +syn match qb64Metacommand contained "$CONSOLE\%(:ONLY\)\=\>"
    +syn match qb64Metacommand contained "$EXEICON\s*:\s*'[^']\+'"
    +syn match qb64Metacommand contained "$ERROR\>"
    +syn match qb64Metacommand contained "$LET\>"
    +syn match qb64Metacommand contained "$RESIZE:\%(ON\|OFF\|STRETCH\|SMOOTH\)\>"
    +syn match qb64Metacommand contained "$SCREEN\%(HIDE\|SHOW\)\>"
    +syn match qb64Metacommand contained "$VERSIONINFO\s*:.*"
    +syn match qb64Metacommand contained "$VIRTUALKEYBOARD:\%(ON\|OFF\)\>"
    +
    +syn region qb64IfMetacommand contained matchgroup=qb64Metacommand start="$\%(IF\|ELSEIF\)\>" end="\" oneline transparent contains=qb64Metavariable
    +syn match  qb64Metacommand contained "$\%(ELSE\|END\s*IF\)\>"
    +
    +syn keyword qb64Metavariable contained defined undefined
    +syn keyword qb64Metavariable contained windows win linux mac maxosx
    +syn keyword qb64Metavariable contained 32bit 64bit version
    +
    +" Default Highlighting {{{1
    +hi def link qb64Float	      basicFloat
    +hi def link qb64Function      Function
    +hi def link qb64Keyword       Keyword
    +hi def link qb64LineLabel     basicLineLabel
    +hi def link qb64Metacommand   PreProc
    +hi def link qb64Metavariable  Identifier
    +hi def link qb64Number	      basicNumber
    +hi def link qb64Statement     Statement
    +hi def link qb64TypeSuffix    basicTypeSuffix
    +hi def link qb64Type	      Type
    +hi def link qb64Unsupported   Error
    +
    +" Postscript {{{1
    +let b:current_syntax = "qb64"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
    diff --git a/.config/vim/syntax/qf.vim b/.config/vim/syntax/qf.vim
    new file mode 100644
    index 0000000..ce6af49
    --- /dev/null
    +++ b/.config/vim/syntax/qf.vim
    @@ -0,0 +1,32 @@
    +" Vim syntax file
    +" Language:		Quickfix window
    +" Maintainer:		The Vim Project 
    +" Last Change:		2025 Feb 07
    +" Former Maintainer:	Bram Moolenaar 
    +
    +" Quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn match	qfFileName	"^[^|]*"	   nextgroup=qfSeparator1
    +syn match	qfSeparator1	"|"	 contained nextgroup=qfLineNr
    +syn match	qfLineNr	"[^|]*"	 contained nextgroup=qfSeparator2 contains=@qfType
    +syn match	qfSeparator2	"|"	 contained nextgroup=qfText
    +syn match	qfText		".*"	 contained
    +
    +syn match	qfError		"error"	 contained
    +syn cluster	qfType	contains=qfError
    +
    +" The default highlighting.
    +hi def link qfFileName		Directory
    +hi def link qfLineNr		LineNr
    +hi def link qfSeparator1	Delimiter
    +hi def link qfSeparator2	Delimiter
    +hi def link qfText		Normal
    +
    +hi def link qfError		Error
    +
    +let b:current_syntax = "qf"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/qml.vim b/.config/vim/syntax/qml.vim
    new file mode 100644
    index 0000000..d6f2abe
    --- /dev/null
    +++ b/.config/vim/syntax/qml.vim
    @@ -0,0 +1,1130 @@
    +" Vim syntax file
    +" Language:     QML
    +" Previous Maintainer: Peter Hoeg 
    +" Maintainer:   Chase Knowlden 
    +" Changes:      `git log` is your friend
    +" Last Change:  2023 Aug 16
    +"
    +" This file is bassed on the original work done by Warwick Allison
    +"  whose did about 99% of the work here.
    +
    +" Based on javascript syntax (as is QML)
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +if !exists("main_syntax")
    +  let main_syntax = 'qml'
    +endif
    +
    +" Drop fold if it set but vim doesn't support it.
    +if !has("folding")
    +  unlet! qml_fold
    +endif
    +
    +syn case ignore
    +
    +syn cluster qmlExpr              contains=qmlStringD,qmlStringS,qmlStringT,SqmlCharacter,qmlNumber,qmlObjectLiteralType,qmlBoolean,qmlType,qmlJsType,qmlNull,qmlGlobal,qmlFunction,qmlArrowFunction,qmlNullishCoalescing
    +syn keyword qmlCommentTodo       TODO FIXME XXX TBD contained
    +syn match   qmlLineComment       "\/\/.*" contains=@Spell,qmlCommentTodo
    +syn match   qmlCommentSkip       "^[ \t]*\*\($\|[ \t]\+\)"
    +syn region  qmlComment           start="/\*"  end="\*/" contains=@Spell,qmlCommentTodo fold
    +syn match   qmlSpecial           "\\\d\d\d\|\\."
    +syn region  qmlStringD           start=+"+  skip=+\\\\\|\\"\|\\$+  end=+"+  keepend  contains=qmlSpecial,@htmlPreproc,@Spell
    +syn region  qmlStringS           start=+'+  skip=+\\\\\|\\'\|\\$+  end=+'+  keepend  contains=qmlSpecial,@htmlPreproc,@Spell
    +syn region  qmlStringT           start=+`+  skip=+\\\\\|\\`\|\\$+  end=+`+  keepend  contains=qmlTemplateExpr,qmlSpecial,@htmlPreproc,@Spell
    +
    +syntax region  qmlTemplateExpr contained  matchgroup=qmlBraces start=+${+ end=+}+  keepend  contains=@qmlExpr
    +
    +syn match   qmlCharacter         "'\\.'"
    +syn match   qmlNumber            "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
    +syn region  qmlRegexpString      start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gi]\{0,2\}\s*$+ end=+/[gi]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
    +syn match   qmlObjectLiteralType "[A-Za-z][_A-Za-z0-9]*\s*\({\)\@="
    +syn region  qmlTernaryColon   start="?" end=":" contains=@qmlExpr,qmlBraces,qmlParens,qmlLineComment
    +syn match   qmlBindingProperty   "\<[A-Za-z][_A-Za-z.0-9]*\s*:"
    +syn match  qmlNullishCoalescing    "??"
    +
    +syn keyword qmlConditional       if else switch
    +syn keyword qmlRepeat            while for do in
    +syn keyword qmlBranch            break continue
    +syn keyword qmlOperator          new delete instanceof typeof
    +syn keyword qmlJsType            Array Boolean Date Function Number Object String RegExp
    +syn keyword qmlType              action alias bool color date double enumeration font int list point real rect size string time url variant vector2d vector3d vector4d coordinate geocircle geopath geopolygon georectangle geoshape matrix4x4 palette quaternion
    +syn keyword qmlStatement         return with
    +syn keyword qmlBoolean           true false
    +syn keyword qmlNull              null undefined
    +syn keyword qmlIdentifier        arguments this var let const
    +syn keyword qmlLabel             case default
    +syn keyword qmlException         try catch finally throw
    +syn keyword qmlMessage           alert confirm prompt status
    +syn keyword qmlGlobal            self
    +syn keyword qmlDeclaration       property signal component readonly required
    +syn keyword qmlReserved          abstract boolean byte char class debugger enum export extends final float goto implements import interface long native package pragma private protected public short static super synchronized throws transient volatile
    +
    +syn case match
    +
    +" List extracted in alphabatical order from: https://doc.qt.io/qt-5/qmltypes.html
    +" Qt v5.15.1
    +
    +" Begin Literal Types {{{
    +
    +syntax keyword qmlObjectLiteralType Abstract3DSeries
    +syntax keyword qmlObjectLiteralType AbstractActionInput
    +syntax keyword qmlObjectLiteralType AbstractAnimation
    +syntax keyword qmlObjectLiteralType AbstractAxis
    +syntax keyword qmlObjectLiteralType AbstractAxis3D
    +syntax keyword qmlObjectLiteralType AbstractAxisInput
    +syntax keyword qmlObjectLiteralType AbstractBarSeries
    +syntax keyword qmlObjectLiteralType AbstractButton
    +syntax keyword qmlObjectLiteralType AbstractClipAnimator
    +syntax keyword qmlObjectLiteralType AbstractClipBlendNode
    +syntax keyword qmlObjectLiteralType AbstractDataProxy
    +syntax keyword qmlObjectLiteralType AbstractGraph3D
    +syntax keyword qmlObjectLiteralType AbstractInputHandler3D
    +syntax keyword qmlObjectLiteralType AbstractPhysicalDevice
    +syntax keyword qmlObjectLiteralType AbstractRayCaster
    +syntax keyword qmlObjectLiteralType AbstractSeries
    +syntax keyword qmlObjectLiteralType AbstractSkeleton
    +syntax keyword qmlObjectLiteralType AbstractTexture
    +syntax keyword qmlObjectLiteralType AbstractTextureImage
    +syntax keyword qmlObjectLiteralType Accelerometer
    +syntax keyword qmlObjectLiteralType AccelerometerReading
    +syntax keyword qmlObjectLiteralType Accessible
    +syntax keyword qmlObjectLiteralType Action
    +syntax keyword qmlObjectLiteralType ActionGroup
    +syntax keyword qmlObjectLiteralType ActionInput
    +syntax keyword qmlObjectLiteralType AdditiveClipBlend
    +syntax keyword qmlObjectLiteralType AdditiveColorGradient
    +syntax keyword qmlObjectLiteralType Address
    +syntax keyword qmlObjectLiteralType Affector
    +syntax keyword qmlObjectLiteralType Age
    +syntax keyword qmlObjectLiteralType AlphaCoverage
    +syntax keyword qmlObjectLiteralType AlphaTest
    +syntax keyword qmlObjectLiteralType Altimeter
    +syntax keyword qmlObjectLiteralType AltimeterReading
    +syntax keyword qmlObjectLiteralType AluminumAnodizedEmissiveMaterial
    +syntax keyword qmlObjectLiteralType AluminumAnodizedMaterial
    +syntax keyword qmlObjectLiteralType AluminumBrushedMaterial
    +syntax keyword qmlObjectLiteralType AluminumEmissiveMaterial
    +syntax keyword qmlObjectLiteralType AluminumMaterial
    +syntax keyword qmlObjectLiteralType AmbientLightReading
    +syntax keyword qmlObjectLiteralType AmbientLightSensor
    +syntax keyword qmlObjectLiteralType AmbientTemperatureReading
    +syntax keyword qmlObjectLiteralType AmbientTemperatureSensor
    +syntax keyword qmlObjectLiteralType AnalogAxisInput
    +syntax keyword qmlObjectLiteralType AnchorAnimation
    +syntax keyword qmlObjectLiteralType AnchorChanges
    +syntax keyword qmlObjectLiteralType AngleDirection
    +syntax keyword qmlObjectLiteralType AnimatedImage
    +syntax keyword qmlObjectLiteralType AnimatedSprite
    +syntax keyword qmlObjectLiteralType Animation
    +syntax keyword qmlObjectLiteralType AnimationController
    +syntax keyword qmlObjectLiteralType AnimationGroup
    +syntax keyword qmlObjectLiteralType Animator
    +syntax keyword qmlObjectLiteralType ApplicationWindow
    +syntax keyword qmlObjectLiteralType ApplicationWindowStyle
    +syntax keyword qmlObjectLiteralType AreaLight
    +syntax keyword qmlObjectLiteralType AreaSeries
    +syntax keyword qmlObjectLiteralType Armature
    +syntax keyword qmlObjectLiteralType AttenuationModelInverse
    +syntax keyword qmlObjectLiteralType AttenuationModelLinear
    +syntax keyword qmlObjectLiteralType Attractor
    +syntax keyword qmlObjectLiteralType Attribute
    +syntax keyword qmlObjectLiteralType Audio
    +syntax keyword qmlObjectLiteralType AudioCategory
    +syntax keyword qmlObjectLiteralType AudioEngine
    +syntax keyword qmlObjectLiteralType AudioListener
    +syntax keyword qmlObjectLiteralType AudioSample
    +syntax keyword qmlObjectLiteralType AuthenticationDialogRequest
    +syntax keyword qmlObjectLiteralType Axis
    +syntax keyword qmlObjectLiteralType AxisAccumulator
    +syntax keyword qmlObjectLiteralType AxisHelper
    +syntax keyword qmlObjectLiteralType AxisSetting
    +
    +syntax keyword qmlObjectLiteralType BackspaceKey
    +syntax keyword qmlObjectLiteralType Bar3DSeries
    +syntax keyword qmlObjectLiteralType BarCategoryAxis
    +syntax keyword qmlObjectLiteralType BarDataProxy
    +syntax keyword qmlObjectLiteralType Bars3D
    +syntax keyword qmlObjectLiteralType BarSeries
    +syntax keyword qmlObjectLiteralType BarSet
    +syntax keyword qmlObjectLiteralType BaseKey
    +syntax keyword qmlObjectLiteralType BasicTableView
    +syntax keyword qmlObjectLiteralType Behavior
    +syntax keyword qmlObjectLiteralType Binding
    +syntax keyword qmlObjectLiteralType Blend
    +syntax keyword qmlObjectLiteralType BlendedClipAnimator
    +syntax keyword qmlObjectLiteralType BlendEquation
    +syntax keyword qmlObjectLiteralType BlendEquationArguments
    +syntax keyword qmlObjectLiteralType Blending
    +syntax keyword qmlObjectLiteralType BlitFramebuffer
    +syntax keyword qmlObjectLiteralType BluetoothDiscoveryModel
    +syntax keyword qmlObjectLiteralType BluetoothService
    +syntax keyword qmlObjectLiteralType BluetoothSocket
    +syntax keyword qmlObjectLiteralType Blur
    +syntax keyword qmlObjectLiteralType bool
    +syntax keyword qmlObjectLiteralType BorderImage
    +syntax keyword qmlObjectLiteralType BorderImageMesh
    +syntax keyword qmlObjectLiteralType BoundaryRule
    +syntax keyword qmlObjectLiteralType Bounds
    +syntax keyword qmlObjectLiteralType BoxPlotSeries
    +syntax keyword qmlObjectLiteralType BoxSet
    +syntax keyword qmlObjectLiteralType BrightnessContrast
    +syntax keyword qmlObjectLiteralType BrushStrokes
    +syntax keyword qmlObjectLiteralType Buffer
    +syntax keyword qmlObjectLiteralType BufferBlit
    +syntax keyword qmlObjectLiteralType BufferCapture
    +syntax keyword qmlObjectLiteralType BufferInput
    +syntax keyword qmlObjectLiteralType BusyIndicator
    +syntax keyword qmlObjectLiteralType BusyIndicatorStyle
    +syntax keyword qmlObjectLiteralType Button
    +syntax keyword qmlObjectLiteralType ButtonAxisInput
    +syntax keyword qmlObjectLiteralType ButtonGroup
    +syntax keyword qmlObjectLiteralType ButtonStyle
    +
    +syntax keyword qmlObjectLiteralType Calendar
    +syntax keyword qmlObjectLiteralType CalendarModel
    +syntax keyword qmlObjectLiteralType CalendarStyle
    +syntax keyword qmlObjectLiteralType Camera
    +syntax keyword qmlObjectLiteralType Camera3D
    +syntax keyword qmlObjectLiteralType CameraCapabilities
    +syntax keyword qmlObjectLiteralType CameraCapture
    +syntax keyword qmlObjectLiteralType CameraExposure
    +syntax keyword qmlObjectLiteralType CameraFlash
    +syntax keyword qmlObjectLiteralType CameraFocus
    +syntax keyword qmlObjectLiteralType CameraImageProcessing
    +syntax keyword qmlObjectLiteralType CameraLens
    +syntax keyword qmlObjectLiteralType CameraRecorder
    +syntax keyword qmlObjectLiteralType CameraSelector
    +syntax keyword qmlObjectLiteralType CandlestickSeries
    +syntax keyword qmlObjectLiteralType CandlestickSet
    +syntax keyword qmlObjectLiteralType Canvas
    +syntax keyword qmlObjectLiteralType CanvasGradient
    +syntax keyword qmlObjectLiteralType CanvasImageData
    +syntax keyword qmlObjectLiteralType CanvasPixelArray
    +syntax keyword qmlObjectLiteralType Category
    +syntax keyword qmlObjectLiteralType CategoryAxis
    +syntax keyword qmlObjectLiteralType CategoryAxis3D
    +syntax keyword qmlObjectLiteralType CategoryModel
    +syntax keyword qmlObjectLiteralType CategoryRange
    +syntax keyword qmlObjectLiteralType ChangeLanguageKey
    +syntax keyword qmlObjectLiteralType ChartView
    +syntax keyword qmlObjectLiteralType CheckBox
    +syntax keyword qmlObjectLiteralType CheckBoxStyle
    +syntax keyword qmlObjectLiteralType CheckDelegate
    +syntax keyword qmlObjectLiteralType ChromaticAberration
    +syntax keyword qmlObjectLiteralType CircularGauge
    +syntax keyword qmlObjectLiteralType CircularGaugeStyle
    +syntax keyword qmlObjectLiteralType ClearBuffers
    +syntax keyword qmlObjectLiteralType ClipAnimator
    +syntax keyword qmlObjectLiteralType ClipBlendValue
    +syntax keyword qmlObjectLiteralType ClipPlane
    +syntax keyword qmlObjectLiteralType CloseEvent
    +syntax keyword qmlObjectLiteralType color
    +syntax keyword qmlObjectLiteralType ColorAnimation
    +syntax keyword qmlObjectLiteralType ColorDialog
    +syntax keyword qmlObjectLiteralType ColorDialogRequest
    +syntax keyword qmlObjectLiteralType ColorGradient
    +syntax keyword qmlObjectLiteralType ColorGradientStop
    +syntax keyword qmlObjectLiteralType Colorize
    +syntax keyword qmlObjectLiteralType ColorMask
    +syntax keyword qmlObjectLiteralType ColorMaster
    +syntax keyword qmlObjectLiteralType ColorOverlay
    +syntax keyword qmlObjectLiteralType Column
    +syntax keyword qmlObjectLiteralType ColumnLayout
    +syntax keyword qmlObjectLiteralType ComboBox
    +syntax keyword qmlObjectLiteralType ComboBoxStyle
    +syntax keyword qmlObjectLiteralType Command
    +syntax keyword qmlObjectLiteralType Compass
    +syntax keyword qmlObjectLiteralType CompassReading
    +syntax keyword qmlObjectLiteralType Component
    +syntax keyword qmlObjectLiteralType Component3D
    +syntax keyword qmlObjectLiteralType ComputeCommand
    +syntax keyword qmlObjectLiteralType ConeGeometry
    +syntax keyword qmlObjectLiteralType ConeMesh
    +syntax keyword qmlObjectLiteralType ConicalGradient
    +syntax keyword qmlObjectLiteralType Connections
    +syntax keyword qmlObjectLiteralType ContactDetail
    +syntax keyword qmlObjectLiteralType ContactDetails
    +syntax keyword qmlObjectLiteralType Container
    +syntax keyword qmlObjectLiteralType Context2D
    +syntax keyword qmlObjectLiteralType ContextMenuRequest
    +syntax keyword qmlObjectLiteralType Control
    +syntax keyword qmlObjectLiteralType coordinate
    +syntax keyword qmlObjectLiteralType CoordinateAnimation
    +syntax keyword qmlObjectLiteralType CopperMaterial
    +syntax keyword qmlObjectLiteralType CuboidGeometry
    +syntax keyword qmlObjectLiteralType CuboidMesh
    +syntax keyword qmlObjectLiteralType CullFace
    +syntax keyword qmlObjectLiteralType CullMode
    +syntax keyword qmlObjectLiteralType CumulativeDirection
    +syntax keyword qmlObjectLiteralType Custom3DItem
    +syntax keyword qmlObjectLiteralType Custom3DLabel
    +syntax keyword qmlObjectLiteralType Custom3DVolume
    +syntax keyword qmlObjectLiteralType CustomCamera
    +syntax keyword qmlObjectLiteralType CustomMaterial
    +syntax keyword qmlObjectLiteralType CustomParticle
    +syntax keyword qmlObjectLiteralType CylinderGeometry
    +syntax keyword qmlObjectLiteralType CylinderMesh
    +
    +syntax keyword qmlObjectLiteralType Date
    +syntax keyword qmlObjectLiteralType date
    +syntax keyword qmlObjectLiteralType DateTimeAxis
    +syntax keyword qmlObjectLiteralType DayOfWeekRow
    +syntax keyword qmlObjectLiteralType DebugView
    +syntax keyword qmlObjectLiteralType DefaultMaterial
    +syntax keyword qmlObjectLiteralType DelayButton
    +syntax keyword qmlObjectLiteralType DelayButtonStyle
    +syntax keyword qmlObjectLiteralType DelegateChoice
    +syntax keyword qmlObjectLiteralType DelegateChooser
    +syntax keyword qmlObjectLiteralType DelegateModel
    +syntax keyword qmlObjectLiteralType DelegateModelGroup
    +syntax keyword qmlObjectLiteralType DepthInput
    +syntax keyword qmlObjectLiteralType DepthOfFieldHQBlur
    +syntax keyword qmlObjectLiteralType DepthRange
    +syntax keyword qmlObjectLiteralType DepthTest
    +syntax keyword qmlObjectLiteralType Desaturate
    +syntax keyword qmlObjectLiteralType Dial
    +syntax keyword qmlObjectLiteralType Dialog
    +syntax keyword qmlObjectLiteralType DialogButtonBox
    +syntax keyword qmlObjectLiteralType DialStyle
    +syntax keyword qmlObjectLiteralType DiffuseMapMaterial
    +syntax keyword qmlObjectLiteralType DiffuseSpecularMapMaterial
    +syntax keyword qmlObjectLiteralType DiffuseSpecularMaterial
    +syntax keyword qmlObjectLiteralType Direction
    +syntax keyword qmlObjectLiteralType DirectionalBlur
    +syntax keyword qmlObjectLiteralType DirectionalLight
    +syntax keyword qmlObjectLiteralType DispatchCompute
    +syntax keyword qmlObjectLiteralType Displace
    +syntax keyword qmlObjectLiteralType DistanceReading
    +syntax keyword qmlObjectLiteralType DistanceSensor
    +syntax keyword qmlObjectLiteralType DistortionRipple
    +syntax keyword qmlObjectLiteralType DistortionSphere
    +syntax keyword qmlObjectLiteralType DistortionSpiral
    +syntax keyword qmlObjectLiteralType Dithering
    +syntax keyword qmlObjectLiteralType double
    +syntax keyword qmlObjectLiteralType DoubleValidator
    +syntax keyword qmlObjectLiteralType Drag
    +syntax keyword qmlObjectLiteralType DragEvent
    +syntax keyword qmlObjectLiteralType DragHandler
    +syntax keyword qmlObjectLiteralType Drawer
    +syntax keyword qmlObjectLiteralType DropArea
    +syntax keyword qmlObjectLiteralType DropShadow
    +syntax keyword qmlObjectLiteralType DwmFeatures
    +syntax keyword qmlObjectLiteralType DynamicParameter
    +
    +syntax keyword qmlObjectLiteralType EdgeDetect
    +syntax keyword qmlObjectLiteralType EditorialModel
    +syntax keyword qmlObjectLiteralType Effect
    +syntax keyword qmlObjectLiteralType EllipseShape
    +syntax keyword qmlObjectLiteralType Emboss
    +syntax keyword qmlObjectLiteralType Emitter
    +syntax keyword qmlObjectLiteralType EnterKey
    +syntax keyword qmlObjectLiteralType EnterKeyAction
    +syntax keyword qmlObjectLiteralType Entity
    +syntax keyword qmlObjectLiteralType EntityLoader
    +syntax keyword qmlObjectLiteralType enumeration
    +syntax keyword qmlObjectLiteralType EnvironmentLight
    +syntax keyword qmlObjectLiteralType EventConnection
    +syntax keyword qmlObjectLiteralType EventPoint
    +syntax keyword qmlObjectLiteralType EventTouchPoint
    +syntax keyword qmlObjectLiteralType ExclusiveGroup
    +syntax keyword qmlObjectLiteralType ExtendedAttributes
    +syntax keyword qmlObjectLiteralType ExtrudedTextGeometry
    +syntax keyword qmlObjectLiteralType ExtrudedTextMesh
    +
    +syntax keyword qmlObjectLiteralType FastBlur
    +syntax keyword qmlObjectLiteralType FileDialog
    +syntax keyword qmlObjectLiteralType FileDialogRequest
    +syntax keyword qmlObjectLiteralType FillerKey
    +syntax keyword qmlObjectLiteralType FilterKey
    +syntax keyword qmlObjectLiteralType FinalState
    +syntax keyword qmlObjectLiteralType FindTextResult
    +syntax keyword qmlObjectLiteralType FirstPersonCameraController
    +syntax keyword qmlObjectLiteralType Flickable
    +syntax keyword qmlObjectLiteralType Flip
    +syntax keyword qmlObjectLiteralType Flipable
    +syntax keyword qmlObjectLiteralType Flow
    +syntax keyword qmlObjectLiteralType FocusScope
    +syntax keyword qmlObjectLiteralType FolderDialog
    +syntax keyword qmlObjectLiteralType FolderListModel
    +syntax keyword qmlObjectLiteralType font
    +syntax keyword qmlObjectLiteralType FontDialog
    +syntax keyword qmlObjectLiteralType FontLoader
    +syntax keyword qmlObjectLiteralType FontMetrics
    +syntax keyword qmlObjectLiteralType FormValidationMessageRequest
    +syntax keyword qmlObjectLiteralType ForwardRenderer
    +syntax keyword qmlObjectLiteralType Frame
    +syntax keyword qmlObjectLiteralType FrameAction
    +syntax keyword qmlObjectLiteralType FrameGraphNode
    +syntax keyword qmlObjectLiteralType Friction
    +syntax keyword qmlObjectLiteralType FrontFace
    +syntax keyword qmlObjectLiteralType FrostedGlassMaterial
    +syntax keyword qmlObjectLiteralType FrostedGlassSinglePassMaterial
    +syntax keyword qmlObjectLiteralType FrustumCamera
    +syntax keyword qmlObjectLiteralType FrustumCulling
    +syntax keyword qmlObjectLiteralType FullScreenRequest
    +syntax keyword qmlObjectLiteralType Fxaa
    +
    +syntax keyword qmlObjectLiteralType Gamepad
    +syntax keyword qmlObjectLiteralType GamepadManager
    +syntax keyword qmlObjectLiteralType GammaAdjust
    +syntax keyword qmlObjectLiteralType Gauge
    +syntax keyword qmlObjectLiteralType GaugeStyle
    +syntax keyword qmlObjectLiteralType GaussianBlur
    +syntax keyword qmlObjectLiteralType geocircle
    +syntax keyword qmlObjectLiteralType GeocodeModel
    +syntax keyword qmlObjectLiteralType Geometry
    +syntax keyword qmlObjectLiteralType GeometryRenderer
    +syntax keyword qmlObjectLiteralType geopath
    +syntax keyword qmlObjectLiteralType geopolygon
    +syntax keyword qmlObjectLiteralType georectangle
    +syntax keyword qmlObjectLiteralType geoshape
    +syntax keyword qmlObjectLiteralType GestureEvent
    +syntax keyword qmlObjectLiteralType GlassMaterial
    +syntax keyword qmlObjectLiteralType GlassRefractiveMaterial
    +syntax keyword qmlObjectLiteralType Glow
    +syntax keyword qmlObjectLiteralType GoochMaterial
    +syntax keyword qmlObjectLiteralType Gradient
    +syntax keyword qmlObjectLiteralType GradientStop
    +syntax keyword qmlObjectLiteralType GraphicsApiFilter
    +syntax keyword qmlObjectLiteralType GraphicsInfo
    +syntax keyword qmlObjectLiteralType Gravity
    +syntax keyword qmlObjectLiteralType Grid
    +syntax keyword qmlObjectLiteralType GridGeometry
    +syntax keyword qmlObjectLiteralType GridLayout
    +syntax keyword qmlObjectLiteralType GridMesh
    +syntax keyword qmlObjectLiteralType GridView
    +syntax keyword qmlObjectLiteralType GroupBox
    +syntax keyword qmlObjectLiteralType GroupGoal
    +syntax keyword qmlObjectLiteralType Gyroscope
    +syntax keyword qmlObjectLiteralType GyroscopeReading
    +
    +syntax keyword qmlObjectLiteralType HandlerPoint
    +syntax keyword qmlObjectLiteralType HandwritingInputPanel
    +syntax keyword qmlObjectLiteralType HandwritingModeKey
    +syntax keyword qmlObjectLiteralType HBarModelMapper
    +syntax keyword qmlObjectLiteralType HBoxPlotModelMapper
    +syntax keyword qmlObjectLiteralType HCandlestickModelMapper
    +syntax keyword qmlObjectLiteralType HDRBloomTonemap
    +syntax keyword qmlObjectLiteralType HeightMapSurfaceDataProxy
    +syntax keyword qmlObjectLiteralType HideKeyboardKey
    +syntax keyword qmlObjectLiteralType HistoryState
    +syntax keyword qmlObjectLiteralType HolsterReading
    +syntax keyword qmlObjectLiteralType HolsterSensor
    +syntax keyword qmlObjectLiteralType HorizontalBarSeries
    +syntax keyword qmlObjectLiteralType HorizontalHeaderView
    +syntax keyword qmlObjectLiteralType HorizontalPercentBarSeries
    +syntax keyword qmlObjectLiteralType HorizontalStackedBarSeries
    +syntax keyword qmlObjectLiteralType Host
    +syntax keyword qmlObjectLiteralType HoverHandler
    +syntax keyword qmlObjectLiteralType HPieModelMapper
    +syntax keyword qmlObjectLiteralType HueSaturation
    +syntax keyword qmlObjectLiteralType HumidityReading
    +syntax keyword qmlObjectLiteralType HumiditySensor
    +syntax keyword qmlObjectLiteralType HXYModelMapper
    +
    +syntax keyword qmlObjectLiteralType Icon
    +syntax keyword qmlObjectLiteralType IdleInhibitManagerV1
    +syntax keyword qmlObjectLiteralType Image
    +syntax keyword qmlObjectLiteralType ImageModel
    +syntax keyword qmlObjectLiteralType ImageParticle
    +syntax keyword qmlObjectLiteralType InnerShadow
    +syntax keyword qmlObjectLiteralType InputChord
    +syntax keyword qmlObjectLiteralType InputContext
    +syntax keyword qmlObjectLiteralType InputEngine
    +syntax keyword qmlObjectLiteralType InputHandler3D
    +syntax keyword qmlObjectLiteralType InputMethod
    +syntax keyword qmlObjectLiteralType InputModeKey
    +syntax keyword qmlObjectLiteralType InputPanel
    +syntax keyword qmlObjectLiteralType InputSequence
    +syntax keyword qmlObjectLiteralType InputSettings
    +syntax keyword qmlObjectLiteralType Instantiator
    +syntax keyword qmlObjectLiteralType int
    +syntax keyword qmlObjectLiteralType IntValidator
    +syntax keyword qmlObjectLiteralType InvokedServices
    +syntax keyword qmlObjectLiteralType IRProximityReading
    +syntax keyword qmlObjectLiteralType IRProximitySensor
    +syntax keyword qmlObjectLiteralType Item
    +syntax keyword qmlObjectLiteralType ItemDelegate
    +syntax keyword qmlObjectLiteralType ItemGrabResult
    +syntax keyword qmlObjectLiteralType ItemModelBarDataProxy
    +syntax keyword qmlObjectLiteralType ItemModelScatterDataProxy
    +syntax keyword qmlObjectLiteralType ItemModelSurfaceDataProxy
    +syntax keyword qmlObjectLiteralType ItemParticle
    +syntax keyword qmlObjectLiteralType ItemSelectionModel
    +syntax keyword qmlObjectLiteralType IviApplication
    +syntax keyword qmlObjectLiteralType IviSurface
    +
    +syntax keyword qmlObjectLiteralType JavaScriptDialogRequest
    +syntax keyword qmlObjectLiteralType Joint
    +syntax keyword qmlObjectLiteralType JumpList
    +syntax keyword qmlObjectLiteralType JumpListCategory
    +syntax keyword qmlObjectLiteralType JumpListDestination
    +syntax keyword qmlObjectLiteralType JumpListLink
    +syntax keyword qmlObjectLiteralType JumpListSeparator
    +
    +syntax keyword qmlObjectLiteralType Key
    +syntax keyword qmlObjectLiteralType KeyboardColumn
    +syntax keyword qmlObjectLiteralType KeyboardDevice
    +syntax keyword qmlObjectLiteralType KeyboardHandler
    +syntax keyword qmlObjectLiteralType KeyboardLayout
    +syntax keyword qmlObjectLiteralType KeyboardLayoutLoader
    +syntax keyword qmlObjectLiteralType KeyboardRow
    +syntax keyword qmlObjectLiteralType KeyboardStyle
    +syntax keyword qmlObjectLiteralType KeyEvent
    +syntax keyword qmlObjectLiteralType Keyframe
    +syntax keyword qmlObjectLiteralType KeyframeAnimation
    +syntax keyword qmlObjectLiteralType KeyframeGroup
    +syntax keyword qmlObjectLiteralType KeyIcon
    +syntax keyword qmlObjectLiteralType KeyNavigation
    +syntax keyword qmlObjectLiteralType KeyPanel
    +syntax keyword qmlObjectLiteralType Keys
    +
    +syntax keyword qmlObjectLiteralType Label
    +syntax keyword qmlObjectLiteralType Layer
    +syntax keyword qmlObjectLiteralType LayerFilter
    +syntax keyword qmlObjectLiteralType Layout
    +syntax keyword qmlObjectLiteralType LayoutMirroring
    +syntax keyword qmlObjectLiteralType Legend
    +syntax keyword qmlObjectLiteralType LerpClipBlend
    +syntax keyword qmlObjectLiteralType LevelAdjust
    +syntax keyword qmlObjectLiteralType LevelOfDetail
    +syntax keyword qmlObjectLiteralType LevelOfDetailBoundingSphere
    +syntax keyword qmlObjectLiteralType LevelOfDetailLoader
    +syntax keyword qmlObjectLiteralType LevelOfDetailSwitch
    +syntax keyword qmlObjectLiteralType LidReading
    +syntax keyword qmlObjectLiteralType LidSensor
    +syntax keyword qmlObjectLiteralType Light
    +syntax keyword qmlObjectLiteralType Light3D
    +syntax keyword qmlObjectLiteralType LightReading
    +syntax keyword qmlObjectLiteralType LightSensor
    +syntax keyword qmlObjectLiteralType LinearGradient
    +syntax keyword qmlObjectLiteralType LineSeries
    +syntax keyword qmlObjectLiteralType LineShape
    +syntax keyword qmlObjectLiteralType LineWidth
    +syntax keyword qmlObjectLiteralType list
    +syntax keyword qmlObjectLiteralType ListElement
    +syntax keyword qmlObjectLiteralType ListModel
    +syntax keyword qmlObjectLiteralType ListView
    +syntax keyword qmlObjectLiteralType Loader
    +syntax keyword qmlObjectLiteralType Loader3D
    +syntax keyword qmlObjectLiteralType Locale
    +syntax keyword qmlObjectLiteralType Location
    +syntax keyword qmlObjectLiteralType LoggingCategory
    +syntax keyword qmlObjectLiteralType LogicalDevice
    +syntax keyword qmlObjectLiteralType LogValueAxis
    +syntax keyword qmlObjectLiteralType LogValueAxis3DFormatter
    +syntax keyword qmlObjectLiteralType LottieAnimation
    +
    +syntax keyword qmlObjectLiteralType Magnetometer
    +syntax keyword qmlObjectLiteralType MagnetometerReading
    +syntax keyword qmlObjectLiteralType Map
    +syntax keyword qmlObjectLiteralType MapCircle
    +syntax keyword qmlObjectLiteralType MapCircleObject
    +syntax keyword qmlObjectLiteralType MapCopyrightNotice
    +syntax keyword qmlObjectLiteralType MapGestureArea
    +syntax keyword qmlObjectLiteralType MapIconObject
    +syntax keyword qmlObjectLiteralType MapItemGroup
    +syntax keyword qmlObjectLiteralType MapItemView
    +syntax keyword qmlObjectLiteralType MapObjectView
    +syntax keyword qmlObjectLiteralType MapParameter
    +syntax keyword qmlObjectLiteralType MapPinchEvent
    +syntax keyword qmlObjectLiteralType MapPolygon
    +syntax keyword qmlObjectLiteralType MapPolygonObject
    +syntax keyword qmlObjectLiteralType MapPolyline
    +syntax keyword qmlObjectLiteralType MapPolylineObject
    +syntax keyword qmlObjectLiteralType MapQuickItem
    +syntax keyword qmlObjectLiteralType MapRectangle
    +syntax keyword qmlObjectLiteralType MapRoute
    +syntax keyword qmlObjectLiteralType MapRouteObject
    +syntax keyword qmlObjectLiteralType MapType
    +syntax keyword qmlObjectLiteralType Margins
    +syntax keyword qmlObjectLiteralType MaskedBlur
    +syntax keyword qmlObjectLiteralType MaskShape
    +syntax keyword qmlObjectLiteralType Material
    +syntax keyword qmlObjectLiteralType Matrix4x4
    +syntax keyword qmlObjectLiteralType matrix4x4
    +syntax keyword qmlObjectLiteralType MediaPlayer
    +syntax keyword qmlObjectLiteralType mediaplayer-qml-dynamic
    +syntax keyword qmlObjectLiteralType MemoryBarrier
    +syntax keyword qmlObjectLiteralType Menu
    +syntax keyword qmlObjectLiteralType MenuBar
    +syntax keyword qmlObjectLiteralType MenuBarItem
    +syntax keyword qmlObjectLiteralType MenuBarStyle
    +syntax keyword qmlObjectLiteralType MenuItem
    +syntax keyword qmlObjectLiteralType MenuItemGroup
    +syntax keyword qmlObjectLiteralType MenuSeparator
    +syntax keyword qmlObjectLiteralType MenuStyle
    +syntax keyword qmlObjectLiteralType Mesh
    +syntax keyword qmlObjectLiteralType MessageDialog
    +syntax keyword qmlObjectLiteralType MetalRoughMaterial
    +syntax keyword qmlObjectLiteralType ModeKey
    +syntax keyword qmlObjectLiteralType Model
    +syntax keyword qmlObjectLiteralType MonthGrid
    +syntax keyword qmlObjectLiteralType MorphingAnimation
    +syntax keyword qmlObjectLiteralType MorphTarget
    +syntax keyword qmlObjectLiteralType MotionBlur
    +syntax keyword qmlObjectLiteralType MouseArea
    +syntax keyword qmlObjectLiteralType MouseDevice
    +syntax keyword qmlObjectLiteralType MouseEvent
    +syntax keyword qmlObjectLiteralType MouseHandler
    +syntax keyword qmlObjectLiteralType MultiPointHandler
    +syntax keyword qmlObjectLiteralType MultiPointTouchArea
    +syntax keyword qmlObjectLiteralType MultiSampleAntiAliasing
    +
    +syntax keyword qmlObjectLiteralType Navigator
    +syntax keyword qmlObjectLiteralType NdefFilter
    +syntax keyword qmlObjectLiteralType NdefMimeRecord
    +syntax keyword qmlObjectLiteralType NdefRecord
    +syntax keyword qmlObjectLiteralType NdefTextRecord
    +syntax keyword qmlObjectLiteralType NdefUriRecord
    +syntax keyword qmlObjectLiteralType NearField
    +syntax keyword qmlObjectLiteralType Node
    +syntax keyword qmlObjectLiteralType NodeInstantiator
    +syntax keyword qmlObjectLiteralType NoDepthMask
    +syntax keyword qmlObjectLiteralType NoDraw
    +syntax keyword qmlObjectLiteralType NoPicking
    +syntax keyword qmlObjectLiteralType NormalDiffuseMapAlphaMaterial
    +syntax keyword qmlObjectLiteralType NormalDiffuseMapMaterial
    +syntax keyword qmlObjectLiteralType NormalDiffuseSpecularMapMaterial
    +syntax keyword qmlObjectLiteralType Number
    +syntax keyword qmlObjectLiteralType NumberAnimation
    +syntax keyword qmlObjectLiteralType NumberKey
    +
    +syntax keyword qmlObjectLiteralType Object3D
    +syntax keyword qmlObjectLiteralType ObjectModel
    +syntax keyword qmlObjectLiteralType ObjectPicker
    +syntax keyword qmlObjectLiteralType OpacityAnimator
    +syntax keyword qmlObjectLiteralType OpacityMask
    +syntax keyword qmlObjectLiteralType OpenGLInfo
    +syntax keyword qmlObjectLiteralType OrbitCameraController
    +syntax keyword qmlObjectLiteralType OrientationReading
    +syntax keyword qmlObjectLiteralType OrientationSensor
    +syntax keyword qmlObjectLiteralType OrthographicCamera
    +syntax keyword qmlObjectLiteralType Overlay
    +
    +syntax keyword qmlObjectLiteralType Package
    +syntax keyword qmlObjectLiteralType Page
    +syntax keyword qmlObjectLiteralType PageIndicator
    +syntax keyword qmlObjectLiteralType palette
    +syntax keyword qmlObjectLiteralType Pane
    +syntax keyword qmlObjectLiteralType PaperArtisticMaterial
    +syntax keyword qmlObjectLiteralType PaperOfficeMaterial
    +syntax keyword qmlObjectLiteralType ParallelAnimation
    +syntax keyword qmlObjectLiteralType Parameter
    +syntax keyword qmlObjectLiteralType ParentAnimation
    +syntax keyword qmlObjectLiteralType ParentChange
    +syntax keyword qmlObjectLiteralType Particle
    +syntax keyword qmlObjectLiteralType ParticleExtruder
    +syntax keyword qmlObjectLiteralType ParticleGroup
    +syntax keyword qmlObjectLiteralType ParticlePainter
    +syntax keyword qmlObjectLiteralType ParticleSystem
    +syntax keyword qmlObjectLiteralType Pass
    +syntax keyword qmlObjectLiteralType Path
    +syntax keyword qmlObjectLiteralType PathAngleArc
    +syntax keyword qmlObjectLiteralType PathAnimation
    +syntax keyword qmlObjectLiteralType PathArc
    +syntax keyword qmlObjectLiteralType PathAttribute
    +syntax keyword qmlObjectLiteralType PathCubic
    +syntax keyword qmlObjectLiteralType PathCurve
    +syntax keyword qmlObjectLiteralType PathElement
    +syntax keyword qmlObjectLiteralType PathInterpolator
    +syntax keyword qmlObjectLiteralType PathLine
    +syntax keyword qmlObjectLiteralType PathMove
    +syntax keyword qmlObjectLiteralType PathMultiline
    +syntax keyword qmlObjectLiteralType PathPercent
    +syntax keyword qmlObjectLiteralType PathPolyline
    +syntax keyword qmlObjectLiteralType PathQuad
    +syntax keyword qmlObjectLiteralType PathSvg
    +syntax keyword qmlObjectLiteralType PathText
    +syntax keyword qmlObjectLiteralType PathView
    +syntax keyword qmlObjectLiteralType PauseAnimation
    +syntax keyword qmlObjectLiteralType PdfDocument
    +syntax keyword qmlObjectLiteralType PdfLinkModel
    +syntax keyword qmlObjectLiteralType PdfNavigationStack
    +syntax keyword qmlObjectLiteralType PdfSearchModel
    +syntax keyword qmlObjectLiteralType PdfSelection
    +syntax keyword qmlObjectLiteralType PercentBarSeries
    +syntax keyword qmlObjectLiteralType PerspectiveCamera
    +syntax keyword qmlObjectLiteralType PerVertexColorMaterial
    +syntax keyword qmlObjectLiteralType PhongAlphaMaterial
    +syntax keyword qmlObjectLiteralType PhongMaterial
    +syntax keyword qmlObjectLiteralType PickEvent
    +syntax keyword qmlObjectLiteralType PickingSettings
    +syntax keyword qmlObjectLiteralType PickLineEvent
    +syntax keyword qmlObjectLiteralType PickPointEvent
    +syntax keyword qmlObjectLiteralType PickResult
    +syntax keyword qmlObjectLiteralType PickTriangleEvent
    +syntax keyword qmlObjectLiteralType Picture
    +syntax keyword qmlObjectLiteralType PieMenu
    +syntax keyword qmlObjectLiteralType PieMenuStyle
    +syntax keyword qmlObjectLiteralType PieSeries
    +syntax keyword qmlObjectLiteralType PieSlice
    +syntax keyword qmlObjectLiteralType PinchArea
    +syntax keyword qmlObjectLiteralType PinchEvent
    +syntax keyword qmlObjectLiteralType PinchHandler
    +syntax keyword qmlObjectLiteralType Place
    +syntax keyword qmlObjectLiteralType PlaceAttribute
    +syntax keyword qmlObjectLiteralType PlaceSearchModel
    +syntax keyword qmlObjectLiteralType PlaceSearchSuggestionModel
    +syntax keyword qmlObjectLiteralType PlaneGeometry
    +syntax keyword qmlObjectLiteralType PlaneMesh
    +syntax keyword qmlObjectLiteralType PlasticStructuredRedEmissiveMaterial
    +syntax keyword qmlObjectLiteralType PlasticStructuredRedMaterial
    +syntax keyword qmlObjectLiteralType Playlist
    +syntax keyword qmlObjectLiteralType PlaylistItem
    +syntax keyword qmlObjectLiteralType PlayVariation
    +syntax keyword qmlObjectLiteralType Plugin
    +syntax keyword qmlObjectLiteralType PluginParameter
    +syntax keyword qmlObjectLiteralType point
    +syntax keyword qmlObjectLiteralType PointDirection
    +syntax keyword qmlObjectLiteralType PointerDevice
    +syntax keyword qmlObjectLiteralType PointerDeviceHandler
    +syntax keyword qmlObjectLiteralType PointerEvent
    +syntax keyword qmlObjectLiteralType PointerHandler
    +syntax keyword qmlObjectLiteralType PointerScrollEvent
    +syntax keyword qmlObjectLiteralType PointHandler
    +syntax keyword qmlObjectLiteralType PointLight
    +syntax keyword qmlObjectLiteralType PointSize
    +syntax keyword qmlObjectLiteralType PolarChartView
    +syntax keyword qmlObjectLiteralType PolygonOffset
    +syntax keyword qmlObjectLiteralType Popup
    +syntax keyword qmlObjectLiteralType Position
    +syntax keyword qmlObjectLiteralType Positioner
    +syntax keyword qmlObjectLiteralType PositionSource
    +syntax keyword qmlObjectLiteralType PressureReading
    +syntax keyword qmlObjectLiteralType PressureSensor
    +syntax keyword qmlObjectLiteralType PrincipledMaterial
    +syntax keyword qmlObjectLiteralType Product
    +syntax keyword qmlObjectLiteralType ProgressBar
    +syntax keyword qmlObjectLiteralType ProgressBarStyle
    +syntax keyword qmlObjectLiteralType PropertyAction
    +syntax keyword qmlObjectLiteralType PropertyAnimation
    +syntax keyword qmlObjectLiteralType PropertyChanges
    +syntax keyword qmlObjectLiteralType ProximityFilter
    +syntax keyword qmlObjectLiteralType ProximityReading
    +syntax keyword qmlObjectLiteralType ProximitySensor
    +
    +syntax keyword qmlObjectLiteralType QAbstractState
    +syntax keyword qmlObjectLiteralType QAbstractTransition
    +syntax keyword qmlObjectLiteralType QmlSensors
    +syntax keyword qmlObjectLiteralType QSignalTransition
    +syntax keyword qmlObjectLiteralType Qt
    +syntax keyword qmlObjectLiteralType QtMultimedia
    +syntax keyword qmlObjectLiteralType QtObject
    +syntax keyword qmlObjectLiteralType QtPositioning
    +syntax keyword qmlObjectLiteralType QtRemoteObjects
    +syntax keyword qmlObjectLiteralType quaternion
    +syntax keyword qmlObjectLiteralType QuaternionAnimation
    +syntax keyword qmlObjectLiteralType QuotaRequest
    +
    +syntax keyword qmlObjectLiteralType RadialBlur
    +syntax keyword qmlObjectLiteralType RadialGradient
    +syntax keyword qmlObjectLiteralType Radio
    +syntax keyword qmlObjectLiteralType RadioButton
    +syntax keyword qmlObjectLiteralType RadioButtonStyle
    +syntax keyword qmlObjectLiteralType RadioData
    +syntax keyword qmlObjectLiteralType RadioDelegate
    +syntax keyword qmlObjectLiteralType RangeSlider
    +syntax keyword qmlObjectLiteralType RasterMode
    +syntax keyword qmlObjectLiteralType Ratings
    +syntax keyword qmlObjectLiteralType RayCaster
    +syntax keyword qmlObjectLiteralType real
    +syntax keyword qmlObjectLiteralType rect
    +syntax keyword qmlObjectLiteralType Rectangle
    +syntax keyword qmlObjectLiteralType RectangleShape
    +syntax keyword qmlObjectLiteralType RectangularGlow
    +syntax keyword qmlObjectLiteralType RecursiveBlur
    +syntax keyword qmlObjectLiteralType RegExpValidator
    +syntax keyword qmlObjectLiteralType RegisterProtocolHandlerRequest
    +syntax keyword qmlObjectLiteralType RegularExpressionValidator
    +syntax keyword qmlObjectLiteralType RenderCapabilities
    +syntax keyword qmlObjectLiteralType RenderCapture
    +syntax keyword qmlObjectLiteralType RenderCaptureReply
    +syntax keyword qmlObjectLiteralType RenderPass
    +syntax keyword qmlObjectLiteralType RenderPassFilter
    +syntax keyword qmlObjectLiteralType RenderSettings
    +syntax keyword qmlObjectLiteralType RenderState
    +syntax keyword qmlObjectLiteralType RenderStateSet
    +syntax keyword qmlObjectLiteralType RenderStats
    +syntax keyword qmlObjectLiteralType RenderSurfaceSelector
    +syntax keyword qmlObjectLiteralType RenderTarget
    +syntax keyword qmlObjectLiteralType RenderTargetOutput
    +syntax keyword qmlObjectLiteralType RenderTargetSelector
    +syntax keyword qmlObjectLiteralType Repeater
    +syntax keyword qmlObjectLiteralType Repeater3D
    +syntax keyword qmlObjectLiteralType ReviewModel
    +syntax keyword qmlObjectLiteralType Rotation
    +syntax keyword qmlObjectLiteralType RotationAnimation
    +syntax keyword qmlObjectLiteralType RotationAnimator
    +syntax keyword qmlObjectLiteralType RotationReading
    +syntax keyword qmlObjectLiteralType RotationSensor
    +syntax keyword qmlObjectLiteralType RoundButton
    +syntax keyword qmlObjectLiteralType Route
    +syntax keyword qmlObjectLiteralType RouteLeg
    +syntax keyword qmlObjectLiteralType RouteManeuver
    +syntax keyword qmlObjectLiteralType RouteModel
    +syntax keyword qmlObjectLiteralType RouteQuery
    +syntax keyword qmlObjectLiteralType RouteSegment
    +syntax keyword qmlObjectLiteralType Row
    +syntax keyword qmlObjectLiteralType RowLayout
    +
    +syntax keyword qmlObjectLiteralType Scale
    +syntax keyword qmlObjectLiteralType ScaleAnimator
    +syntax keyword qmlObjectLiteralType Scatter
    +syntax keyword qmlObjectLiteralType Scatter3D
    +syntax keyword qmlObjectLiteralType Scatter3DSeries
    +syntax keyword qmlObjectLiteralType ScatterDataProxy
    +syntax keyword qmlObjectLiteralType ScatterSeries
    +syntax keyword qmlObjectLiteralType Scene2D
    +syntax keyword qmlObjectLiteralType Scene3D
    +syntax keyword qmlObjectLiteralType Scene3DView
    +syntax keyword qmlObjectLiteralType SceneEnvironment
    +syntax keyword qmlObjectLiteralType SceneLoader
    +syntax keyword qmlObjectLiteralType ScissorTest
    +syntax keyword qmlObjectLiteralType Screen
    +syntax keyword qmlObjectLiteralType ScreenRayCaster
    +syntax keyword qmlObjectLiteralType ScriptAction
    +syntax keyword qmlObjectLiteralType ScrollBar
    +syntax keyword qmlObjectLiteralType ScrollIndicator
    +syntax keyword qmlObjectLiteralType ScrollView
    +syntax keyword qmlObjectLiteralType ScrollViewStyle
    +syntax keyword qmlObjectLiteralType SCurveTonemap
    +syntax keyword qmlObjectLiteralType ScxmlStateMachine
    +syntax keyword qmlObjectLiteralType SeamlessCubemap
    +syntax keyword qmlObjectLiteralType SelectionListItem
    +syntax keyword qmlObjectLiteralType SelectionListModel
    +syntax keyword qmlObjectLiteralType Sensor
    +syntax keyword qmlObjectLiteralType SensorGesture
    +syntax keyword qmlObjectLiteralType SensorReading
    +syntax keyword qmlObjectLiteralType SequentialAnimation
    +syntax keyword qmlObjectLiteralType Settings
    +syntax keyword qmlObjectLiteralType SettingsStore
    +syntax keyword qmlObjectLiteralType SetUniformValue
    +syntax keyword qmlObjectLiteralType Shader
    +syntax keyword qmlObjectLiteralType ShaderEffect
    +syntax keyword qmlObjectLiteralType ShaderEffectSource
    +syntax keyword qmlObjectLiteralType ShaderImage
    +syntax keyword qmlObjectLiteralType ShaderInfo
    +syntax keyword qmlObjectLiteralType ShaderProgram
    +syntax keyword qmlObjectLiteralType ShaderProgramBuilder
    +syntax keyword qmlObjectLiteralType Shape
    +syntax keyword qmlObjectLiteralType ShapeGradient
    +syntax keyword qmlObjectLiteralType ShapePath
    +syntax keyword qmlObjectLiteralType SharedGLTexture
    +syntax keyword qmlObjectLiteralType ShellSurface
    +syntax keyword qmlObjectLiteralType ShellSurfaceItem
    +syntax keyword qmlObjectLiteralType ShiftHandler
    +syntax keyword qmlObjectLiteralType ShiftKey
    +syntax keyword qmlObjectLiteralType Shortcut
    +syntax keyword qmlObjectLiteralType SignalSpy
    +syntax keyword qmlObjectLiteralType SignalTransition
    +syntax keyword qmlObjectLiteralType SinglePointHandler
    +syntax keyword qmlObjectLiteralType size
    +syntax keyword qmlObjectLiteralType Skeleton
    +syntax keyword qmlObjectLiteralType SkeletonLoader
    +syntax keyword qmlObjectLiteralType SkyboxEntity
    +syntax keyword qmlObjectLiteralType Slider
    +syntax keyword qmlObjectLiteralType SliderStyle
    +syntax keyword qmlObjectLiteralType SmoothedAnimation
    +syntax keyword qmlObjectLiteralType SortPolicy
    +syntax keyword qmlObjectLiteralType Sound
    +syntax keyword qmlObjectLiteralType SoundEffect
    +syntax keyword qmlObjectLiteralType SoundInstance
    +syntax keyword qmlObjectLiteralType SpaceKey
    +syntax keyword qmlObjectLiteralType SphereGeometry
    +syntax keyword qmlObjectLiteralType SphereMesh
    +syntax keyword qmlObjectLiteralType SpinBox
    +syntax keyword qmlObjectLiteralType SpinBoxStyle
    +syntax keyword qmlObjectLiteralType SplineSeries
    +syntax keyword qmlObjectLiteralType SplitHandle
    +syntax keyword qmlObjectLiteralType SplitView
    +syntax keyword qmlObjectLiteralType SpotLight
    +syntax keyword qmlObjectLiteralType SpringAnimation
    +syntax keyword qmlObjectLiteralType Sprite
    +syntax keyword qmlObjectLiteralType SpriteGoal
    +syntax keyword qmlObjectLiteralType SpriteSequence
    +syntax keyword qmlObjectLiteralType Stack
    +syntax keyword qmlObjectLiteralType StackedBarSeries
    +syntax keyword qmlObjectLiteralType StackLayout
    +syntax keyword qmlObjectLiteralType StackView
    +syntax keyword qmlObjectLiteralType StackViewDelegate
    +syntax keyword qmlObjectLiteralType StandardPaths
    +syntax keyword qmlObjectLiteralType State
    +syntax keyword qmlObjectLiteralType StateChangeScript
    +syntax keyword qmlObjectLiteralType StateGroup
    +syntax keyword qmlObjectLiteralType StateMachine
    +syntax keyword qmlObjectLiteralType StateMachineLoader
    +syntax keyword qmlObjectLiteralType StatusBar
    +syntax keyword qmlObjectLiteralType StatusBarStyle
    +syntax keyword qmlObjectLiteralType StatusIndicator
    +syntax keyword qmlObjectLiteralType StatusIndicatorStyle
    +syntax keyword qmlObjectLiteralType SteelMilledConcentricMaterial
    +syntax keyword qmlObjectLiteralType StencilMask
    +syntax keyword qmlObjectLiteralType StencilOperation
    +syntax keyword qmlObjectLiteralType StencilOperationArguments
    +syntax keyword qmlObjectLiteralType StencilTest
    +syntax keyword qmlObjectLiteralType StencilTestArguments
    +syntax keyword qmlObjectLiteralType Store
    +syntax keyword qmlObjectLiteralType String
    +syntax keyword qmlObjectLiteralType string
    +syntax keyword qmlObjectLiteralType SubtreeEnabler
    +syntax keyword qmlObjectLiteralType Supplier
    +syntax keyword qmlObjectLiteralType Surface3D
    +syntax keyword qmlObjectLiteralType Surface3DSeries
    +syntax keyword qmlObjectLiteralType SurfaceDataProxy
    +syntax keyword qmlObjectLiteralType SwipeDelegate
    +syntax keyword qmlObjectLiteralType SwipeView
    +syntax keyword qmlObjectLiteralType Switch
    +syntax keyword qmlObjectLiteralType SwitchDelegate
    +syntax keyword qmlObjectLiteralType SwitchStyle
    +syntax keyword qmlObjectLiteralType SymbolModeKey
    +syntax keyword qmlObjectLiteralType SystemPalette
    +syntax keyword qmlObjectLiteralType SystemTrayIcon
    +
    +syntax keyword qmlObjectLiteralType Tab
    +syntax keyword qmlObjectLiteralType TabBar
    +syntax keyword qmlObjectLiteralType TabButton
    +syntax keyword qmlObjectLiteralType TableModel
    +syntax keyword qmlObjectLiteralType TableModelColumn
    +syntax keyword qmlObjectLiteralType TableView
    +syntax keyword qmlObjectLiteralType TableViewColumn
    +syntax keyword qmlObjectLiteralType TableViewStyle
    +syntax keyword qmlObjectLiteralType TabView
    +syntax keyword qmlObjectLiteralType TabViewStyle
    +syntax keyword qmlObjectLiteralType TapHandler
    +syntax keyword qmlObjectLiteralType TapReading
    +syntax keyword qmlObjectLiteralType TapSensor
    +syntax keyword qmlObjectLiteralType TargetDirection
    +syntax keyword qmlObjectLiteralType TaskbarButton
    +syntax keyword qmlObjectLiteralType Technique
    +syntax keyword qmlObjectLiteralType TechniqueFilter
    +syntax keyword qmlObjectLiteralType TestCase
    +syntax keyword qmlObjectLiteralType Text
    +syntax keyword qmlObjectLiteralType Text2DEntity
    +syntax keyword qmlObjectLiteralType TextArea
    +syntax keyword qmlObjectLiteralType TextAreaStyle
    +syntax keyword qmlObjectLiteralType TextEdit
    +syntax keyword qmlObjectLiteralType TextField
    +syntax keyword qmlObjectLiteralType TextFieldStyle
    +syntax keyword qmlObjectLiteralType TextInput
    +syntax keyword qmlObjectLiteralType TextMetrics
    +syntax keyword qmlObjectLiteralType Texture
    +syntax keyword qmlObjectLiteralType Texture1D
    +syntax keyword qmlObjectLiteralType Texture1DArray
    +syntax keyword qmlObjectLiteralType Texture2D
    +syntax keyword qmlObjectLiteralType Texture2DArray
    +syntax keyword qmlObjectLiteralType Texture2DMultisample
    +syntax keyword qmlObjectLiteralType Texture2DMultisampleArray
    +syntax keyword qmlObjectLiteralType Texture3D
    +syntax keyword qmlObjectLiteralType TextureBuffer
    +syntax keyword qmlObjectLiteralType TextureCubeMap
    +syntax keyword qmlObjectLiteralType TextureCubeMapArray
    +syntax keyword qmlObjectLiteralType TextureImage
    +syntax keyword qmlObjectLiteralType TextureInput
    +syntax keyword qmlObjectLiteralType TextureLoader
    +syntax keyword qmlObjectLiteralType TextureRectangle
    +syntax keyword qmlObjectLiteralType Theme3D
    +syntax keyword qmlObjectLiteralType ThemeColor
    +syntax keyword qmlObjectLiteralType ThresholdMask
    +syntax keyword qmlObjectLiteralType ThumbnailToolBar
    +syntax keyword qmlObjectLiteralType ThumbnailToolButton
    +syntax keyword qmlObjectLiteralType TiltReading
    +syntax keyword qmlObjectLiteralType TiltSensor
    +syntax keyword qmlObjectLiteralType TiltShift
    +syntax keyword qmlObjectLiteralType Timeline
    +syntax keyword qmlObjectLiteralType TimelineAnimation
    +syntax keyword qmlObjectLiteralType TimeoutTransition
    +syntax keyword qmlObjectLiteralType Timer
    +syntax keyword qmlObjectLiteralType ToggleButton
    +syntax keyword qmlObjectLiteralType ToggleButtonStyle
    +syntax keyword qmlObjectLiteralType ToolBar
    +syntax keyword qmlObjectLiteralType ToolBarStyle
    +syntax keyword qmlObjectLiteralType ToolButton
    +syntax keyword qmlObjectLiteralType ToolSeparator
    +syntax keyword qmlObjectLiteralType ToolTip
    +syntax keyword qmlObjectLiteralType TooltipRequest
    +syntax keyword qmlObjectLiteralType Torch
    +syntax keyword qmlObjectLiteralType TorusGeometry
    +syntax keyword qmlObjectLiteralType TorusMesh
    +syntax keyword qmlObjectLiteralType TouchEventSequence
    +syntax keyword qmlObjectLiteralType TouchInputHandler3D
    +syntax keyword qmlObjectLiteralType TouchPoint
    +syntax keyword qmlObjectLiteralType Trace
    +syntax keyword qmlObjectLiteralType TraceCanvas
    +syntax keyword qmlObjectLiteralType TraceInputArea
    +syntax keyword qmlObjectLiteralType TraceInputKey
    +syntax keyword qmlObjectLiteralType TraceInputKeyPanel
    +syntax keyword qmlObjectLiteralType TrailEmitter
    +syntax keyword qmlObjectLiteralType Transaction
    +syntax keyword qmlObjectLiteralType Transform
    +syntax keyword qmlObjectLiteralType Transition
    +syntax keyword qmlObjectLiteralType Translate
    +syntax keyword qmlObjectLiteralType TreeView
    +syntax keyword qmlObjectLiteralType TreeViewStyle
    +syntax keyword qmlObjectLiteralType Tumbler
    +syntax keyword qmlObjectLiteralType TumblerColumn
    +syntax keyword qmlObjectLiteralType TumblerStyle
    +syntax keyword qmlObjectLiteralType Turbulence
    +
    +syntax keyword qmlObjectLiteralType UniformAnimator
    +syntax keyword qmlObjectLiteralType url
    +syntax keyword qmlObjectLiteralType User
    +
    +syntax keyword qmlObjectLiteralType ValueAxis
    +syntax keyword qmlObjectLiteralType ValueAxis3D
    +syntax keyword qmlObjectLiteralType ValueAxis3DFormatter
    +syntax keyword qmlObjectLiteralType var
    +syntax keyword qmlObjectLiteralType variant
    +syntax keyword qmlObjectLiteralType VBarModelMapper
    +syntax keyword qmlObjectLiteralType VBoxPlotModelMapper
    +syntax keyword qmlObjectLiteralType VCandlestickModelMapper
    +syntax keyword qmlObjectLiteralType vector2d
    +syntax keyword qmlObjectLiteralType vector3d
    +syntax keyword qmlObjectLiteralType Vector3dAnimation
    +syntax keyword qmlObjectLiteralType vector4d
    +syntax keyword qmlObjectLiteralType VertexBlendAnimation
    +syntax keyword qmlObjectLiteralType VerticalHeaderView
    +syntax keyword qmlObjectLiteralType Video
    +syntax keyword qmlObjectLiteralType VideoOutput
    +syntax keyword qmlObjectLiteralType View3D
    +syntax keyword qmlObjectLiteralType Viewport
    +syntax keyword qmlObjectLiteralType ViewTransition
    +syntax keyword qmlObjectLiteralType Vignette
    +syntax keyword qmlObjectLiteralType VirtualKeyboardSettings
    +syntax keyword qmlObjectLiteralType VPieModelMapper
    +syntax keyword qmlObjectLiteralType VXYModelMapper
    +
    +syntax keyword qmlObjectLiteralType Wander
    +syntax keyword qmlObjectLiteralType WasdController
    +syntax keyword qmlObjectLiteralType WavefrontMesh
    +syntax keyword qmlObjectLiteralType WaylandClient
    +syntax keyword qmlObjectLiteralType WaylandCompositor
    +syntax keyword qmlObjectLiteralType WaylandHardwareLayer
    +syntax keyword qmlObjectLiteralType WaylandOutput
    +syntax keyword qmlObjectLiteralType WaylandQuickItem
    +syntax keyword qmlObjectLiteralType WaylandSeat
    +syntax keyword qmlObjectLiteralType WaylandSurface
    +syntax keyword qmlObjectLiteralType WaylandView
    +syntax keyword qmlObjectLiteralType Waypoint
    +syntax keyword qmlObjectLiteralType WebChannel
    +syntax keyword qmlObjectLiteralType WebEngine
    +syntax keyword qmlObjectLiteralType WebEngineAction
    +syntax keyword qmlObjectLiteralType WebEngineCertificateError
    +syntax keyword qmlObjectLiteralType WebEngineClientCertificateOption
    +syntax keyword qmlObjectLiteralType WebEngineClientCertificateSelection
    +syntax keyword qmlObjectLiteralType WebEngineDownloadItem
    +syntax keyword qmlObjectLiteralType WebEngineHistory
    +syntax keyword qmlObjectLiteralType WebEngineHistoryListModel
    +syntax keyword qmlObjectLiteralType WebEngineLoadRequest
    +syntax keyword qmlObjectLiteralType WebEngineNavigationRequest
    +syntax keyword qmlObjectLiteralType WebEngineNewViewRequest
    +syntax keyword qmlObjectLiteralType WebEngineNotification
    +syntax keyword qmlObjectLiteralType WebEngineProfile
    +syntax keyword qmlObjectLiteralType WebEngineScript
    +syntax keyword qmlObjectLiteralType WebEngineSettings
    +syntax keyword qmlObjectLiteralType WebEngineView
    +syntax keyword qmlObjectLiteralType WebSocket
    +syntax keyword qmlObjectLiteralType WebSocketServer
    +syntax keyword qmlObjectLiteralType WebView
    +syntax keyword qmlObjectLiteralType WebViewLoadRequest
    +syntax keyword qmlObjectLiteralType WeekNumberColumn
    +syntax keyword qmlObjectLiteralType WheelEvent
    +syntax keyword qmlObjectLiteralType WheelHandler
    +syntax keyword qmlObjectLiteralType Window
    +syntax keyword qmlObjectLiteralType WlScaler
    +syntax keyword qmlObjectLiteralType WlShell
    +syntax keyword qmlObjectLiteralType WlShellSurface
    +syntax keyword qmlObjectLiteralType WorkerScript
    +
    +syntax keyword qmlObjectLiteralType XAnimator
    +syntax keyword qmlObjectLiteralType XdgDecorationManagerV1
    +syntax keyword qmlObjectLiteralType XdgOutputManagerV1
    +syntax keyword qmlObjectLiteralType XdgPopup
    +syntax keyword qmlObjectLiteralType XdgPopupV5
    +syntax keyword qmlObjectLiteralType XdgPopupV6
    +syntax keyword qmlObjectLiteralType XdgShell
    +syntax keyword qmlObjectLiteralType XdgShellV5
    +syntax keyword qmlObjectLiteralType XdgShellV6
    +syntax keyword qmlObjectLiteralType XdgSurface
    +syntax keyword qmlObjectLiteralType XdgSurfaceV5
    +syntax keyword qmlObjectLiteralType XdgSurfaceV6
    +syntax keyword qmlObjectLiteralType XdgToplevel
    +syntax keyword qmlObjectLiteralType XdgToplevelV6
    +syntax keyword qmlObjectLiteralType XmlListModel
    +syntax keyword qmlObjectLiteralType XmlRole
    +syntax keyword qmlObjectLiteralType XYPoint
    +syntax keyword qmlObjectLiteralType XYSeries
    +
    +syntax keyword qmlObjectLiteralType YAnimator
    +
    +syntax keyword qmlObjectLiteralType ZoomBlur
    +
    +" }}}
    +
    +if get(g:, 'qml_fold', 0)
    +  syn match   qmlFunction      "\"
    +  syn region  qmlFunctionFold  start="^\z(\s*\)\.*[^};]$" end="^\z1}.*$" transparent fold keepend
    +
    +  syn sync match qmlSync  grouphere qmlFunctionFold "\"
    +  syn sync match qmlSync  grouphere NONE "^}"
    +
    +  setlocal foldmethod=syntax
    +  setlocal foldtext=getline(v:foldstart)
    +else
    +  syn keyword qmlFunction         function
    +  syn match   qmlArrowFunction    "=>"
    +  syn match   qmlBraces           "[{}\[\]]"
    +  syn match   qmlParens           "[()]"
    +endif
    +
    +syn sync fromstart
    +syn sync maxlines=100
    +
    +if main_syntax == "qml"
    +  syn sync ccomment qmlComment
    +endif
    +
    +hi def link qmlComment           Comment
    +hi def link qmlLineComment       Comment
    +hi def link qmlCommentTodo       Todo
    +hi def link qmlSpecial           Special
    +hi def link qmlStringS           String
    +hi def link qmlStringD           String
    +hi def link qmlStringT           String
    +hi def link qmlCharacter         Character
    +hi def link qmlNumber            Number
    +hi def link qmlConditional       Conditional
    +hi def link qmlRepeat            Repeat
    +hi def link qmlBranch            Conditional
    +hi def link qmlOperator          Operator
    +hi def link qmlJsType            Type
    +hi def link qmlType              Type
    +hi def link qmlObjectLiteralType Type
    +hi def link qmlStatement         Statement
    +hi def link qmlFunction          Function
    +hi def link qmlArrowFunction     Function
    +hi def link qmlBraces            Function
    +hi def link qmlError             Error
    +hi def link qmlNull              Keyword
    +hi def link qmlBoolean           Boolean
    +hi def link qmlRegexpString      String
    +hi def link qmlNullishCoalescing Operator
    +
    +hi def link qmlIdentifier        Identifier
    +hi def link qmlLabel             Label
    +hi def link qmlException         Exception
    +hi def link qmlMessage           Keyword
    +hi def link qmlGlobal            Keyword
    +hi def link qmlReserved          Keyword
    +hi def link qmlDebug             Debug
    +hi def link qmlConstant          Label
    +hi def link qmlBindingProperty   Label
    +hi def link qmlDeclaration       Function
    +
    +let b:current_syntax = "qml"
    +if main_syntax == 'qml'
    +  unlet main_syntax
    +endif
    diff --git a/.config/vim/syntax/quake.vim b/.config/vim/syntax/quake.vim
    new file mode 100644
    index 0000000..7db5310
    --- /dev/null
    +++ b/.config/vim/syntax/quake.vim
    @@ -0,0 +1,170 @@
    +" Vim syntax file
    +" Language:             Quake[1-3] configuration file
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2007-06-17
    +"               quake_is_quake1 - the syntax is to be used for quake1 configs
    +"               quake_is_quake2 - the syntax is to be used for quake2 configs
    +"               quake_is_quake3 - the syntax is to be used for quake3 configs
    +" Credits:              Tomasz Kalkosinski wrote the original quake3Colors stuff
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +setlocal iskeyword+=-,+
    +
    +syn keyword quakeTodo         contained TODO FIXME XXX NOTE
    +
    +syn region  quakeComment      display oneline start='//' end='$' end=';'
    +                              \ keepend contains=quakeTodo,@Spell
    +
    +syn region  quakeString       display oneline start=+"+ skip=+\\\\\|\\"+
    +                              \ end=+"\|$+ contains=quakeNumbers,
    +                              \ @quakeCommands,@quake3Colors
    +
    +syn case ignore
    +
    +syn match quakeNumbers        display transparent '\<-\=\d\|\.\d'
    +                              \ contains=quakeNumber,quakeFloat,
    +                              \ quakeOctalError,quakeOctal
    +syn match quakeNumber         contained display '\d\+\>'
    +syn match quakeFloat          contained display '\d\+\.\d*'
    +syn match quakeFloat          contained display '\.\d\+\>'
    +
    +if exists("quake_is_quake1") || exists("quake_is_quake2")
    +  syn match quakeOctal        contained display '0\o\+\>'
    +                              \ contains=quakeOctalZero
    +  syn match quakeOctalZero    contained display '\<0'
    +  syn match quakeOctalError   contained display '0\o*[89]\d*'
    +endif
    +
    +syn cluster quakeCommands     contains=quakeCommand,quake1Command,
    +                              \ quake12Command,Quake2Command,Quake23Command,
    +                              \ Quake3Command
    +
    +syn keyword quakeCommand      +attack +back +forward +left +lookdown +lookup
    +syn keyword quakeCommand      +mlook +movedown +moveleft +moveright +moveup
    +syn keyword quakeCommand      +right +speed +strafe -attack -back bind
    +syn keyword quakeCommand      bindlist centerview clear connect cvarlist dir
    +syn keyword quakeCommand      disconnect dumpuser echo error exec -forward
    +syn keyword quakeCommand      god heartbeat joy_advancedupdate kick kill
    +syn keyword quakeCommand      killserver -left -lookdown -lookup map
    +syn keyword quakeCommand      messagemode messagemode2 -mlook modellist
    +syn keyword quakeCommand      -movedown -moveleft -moveright -moveup play
    +syn keyword quakeCommand      quit rcon reconnect record -right say say_team
    +syn keyword quakeCommand      screenshot serverinfo serverrecord serverstop
    +syn keyword quakeCommand      set sizedown sizeup snd_restart soundinfo
    +syn keyword quakeCommand      soundlist -speed spmap status -strafe stopsound
    +syn keyword quakeCommand      toggleconsole unbind unbindall userinfo pause
    +syn keyword quakeCommand      vid_restart viewpos wait weapnext weapprev
    +
    +if exists("quake_is_quake1")
    +  syn keyword quake1Command   sv
    +endif
    +
    +if exists("quake_is_quake1") || exists("quake_is_quake2")
    +  syn keyword quake12Command  +klook alias cd impulse link load save
    +  syn keyword quake12Command  timerefresh changing info loading
    +  syn keyword quake12Command  pingservers playerlist players score
    +endif
    +
    +if exists("quake_is_quake2")
    +  syn keyword quake2Command   cmd demomap +use condump download drop gamemap
    +  syn keyword quake2Command   give gun_model setmaster sky sv_maplist wave
    +  syn keyword quake2Command   cmdlist gameversiona gun_next gun_prev invdrop
    +  syn keyword quake2Command   inven invnext invnextp invnextw invprev
    +  syn keyword quake2Command   invprevp invprevw invuse menu_addressbook
    +  syn keyword quake2Command   menu_credits menu_dmoptions menu_game
    +  syn keyword quake2Command   menu_joinserver menu_keys menu_loadgame
    +  syn keyword quake2Command   menu_main menu_multiplayer menu_options
    +  syn keyword quake2Command   menu_playerconfig menu_quit menu_savegame
    +  syn keyword quake2Command   menu_startserver menu_video
    +  syn keyword quake2Command   notarget precache prog togglechat vid_front
    +  syn keyword quake2Command   weaplast
    +endif
    +
    +if exists("quake_is_quake2") || exists("quake_is_quake3")
    +  syn keyword quake23Command  imagelist modellist path z_stats
    +endif
    +
    +if exists("quake_is_quake3")
    +  syn keyword quake3Command   +info +scores +zoom addbot arena banClient
    +  syn keyword quake3Command   banUser callteamvote callvote changeVectors
    +  syn keyword quake3Command   cinematic clientinfo clientkick cmd cmdlist
    +  syn keyword quake3Command   condump configstrings crash cvar_restart devmap
    +  syn keyword quake3Command   fdir follow freeze fs_openedList Fs_pureList
    +  syn keyword quake3Command   Fs_referencedList gfxinfo globalservers
    +  syn keyword quake3Command   hunk_stats in_restart -info levelshot
    +  syn keyword quake3Command   loaddeferred localservers map_restart mem_info
    +  syn keyword quake3Command   messagemode3 messagemode4 midiinfo model music
    +  syn keyword quake3Command   modelist net_restart nextframe nextskin noclip
    +  syn keyword quake3Command   notarget ping prevframe prevskin reset restart
    +  syn keyword quake3Command   s_disable_a3d s_enable_a3d s_info s_list s_stop
    +  syn keyword quake3Command   scanservers -scores screenshotJPEG sectorlist
    +  syn keyword quake3Command   serverstatus seta setenv sets setu setviewpos
    +  syn keyword quake3Command   shaderlist showip skinlist spdevmap startOribt
    +  syn keyword quake3Command   stats stopdemo stoprecord systeminfo togglemenu
    +  syn keyword quake3Command   tcmd team teamtask teamvote tell tell_attacker
    +  syn keyword quake3Command   tell_target testgun testmodel testshader toggle
    +  syn keyword quake3Command   touchFile vminfo vmprofile vmtest vosay
    +  syn keyword quake3Command   vosay_team vote votell vsay vsay_team vstr
    +  syn keyword quake3Command   vtaunt vtell vtell_attacker vtell_target weapon
    +  syn keyword quake3Command   writeconfig -zoom
    +  syn match   quake3Command   display "\<[+-]button\(\d\|1[0-4]\)\>"
    +endif
    +
    +if exists("quake_is_quake3")
    +  syn cluster quake3Colors    contains=quake3Red,quake3Green,quake3Yellow,
    +                              \ quake3Blue,quake3Cyan,quake3Purple,quake3White,
    +                              \ quake3Orange,quake3Grey,quake3Black,quake3Shadow
    +
    +  syn region quake3Red        contained start=+\^1+hs=e+1 end=+[$^"\n]+he=e-1
    +  syn region quake3Green      contained start=+\^2+hs=e+1 end=+[$^"\n]+he=e-1
    +  syn region quake3Yellow     contained start=+\^3+hs=e+1 end=+[$^"\n]+he=e-1
    +  syn region quake3Blue       contained start=+\^4+hs=e+1 end=+[$^"\n]+he=e-1
    +  syn region quake3Cyan       contained start=+\^5+hs=e+1 end=+[$^"\n]+he=e-1
    +  syn region quake3Purple     contained start=+\^6+hs=e+1 end=+[$^"\n]+he=e-1
    +  syn region quake3White      contained start=+\^7+hs=e+1 end=+[$^"\n]+he=e-1
    +  syn region quake3Orange     contained start=+\^8+hs=e+1 end=+[$^\"\n]+he=e-1
    +  syn region quake3Grey       contained start=+\^9+hs=e+1 end=+[$^"\n]+he=e-1
    +  syn region quake3Black      contained start=+\^0+hs=e+1 end=+[$^"\n]+he=e-1
    +  syn region quake3Shadow     contained start=+\^[Xx]+hs=e+1 end=+[$^"\n]+he=e-1
    +endif
    +
    +hi def link quakeComment      Comment
    +hi def link quakeTodo         Todo
    +hi def link quakeString       String
    +hi def link quakeNumber       Number
    +hi def link quakeOctal        Number
    +hi def link quakeOctalZero    PreProc
    +hi def link quakeFloat        Number
    +hi def link quakeOctalError   Error
    +hi def link quakeCommand      quakeCommands
    +hi def link quake1Command     quakeCommands
    +hi def link quake12Command    quakeCommands
    +hi def link quake2Command     quakeCommands
    +hi def link quake23Command    quakeCommands
    +hi def link quake3Command     quakeCommands
    +hi def link quakeCommands     Keyword
    +
    +if exists("quake_is_quake3")
    +  hi quake3Red                ctermfg=Red         guifg=Red
    +  hi quake3Green              ctermfg=Green       guifg=Green
    +  hi quake3Yellow             ctermfg=Yellow      guifg=Yellow
    +  hi quake3Blue               ctermfg=Blue        guifg=Blue
    +  hi quake3Cyan               ctermfg=Cyan        guifg=Cyan
    +  hi quake3Purple             ctermfg=DarkMagenta guifg=Purple
    +  hi quake3White              ctermfg=White       guifg=White
    +  hi quake3Black              ctermfg=Black       guifg=Black
    +  hi quake3Orange             ctermfg=Brown       guifg=Orange
    +  hi quake3Grey               ctermfg=LightGrey   guifg=LightGrey
    +  hi quake3Shadow             cterm=underline     gui=underline
    +endif
    +
    +let b:current_syntax = "quake"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/quarto.vim b/.config/vim/syntax/quarto.vim
    new file mode 100644
    index 0000000..f83071d
    --- /dev/null
    +++ b/.config/vim/syntax/quarto.vim
    @@ -0,0 +1,19 @@
    +" Language: Quarto (Markdown with chunks of R, Python and other languages)
    +" Maintainer: This runtime file is looking for a new maintainer.
    +" Former Maintainer: Jakson Alves de Aquino 
    +" Former Repository: https://github.com/jalvesaq/R-Vim-runtime
    +" Last Change: 2023 Feb 24  08:26AM
    +"		2024 Feb 19 by Vim Project (announce adoption)
    +"
    +" The developers of tools for Quarto maintain Vim runtime files in their
    +" Github repository and, if required, I will hand over the maintenance of
    +" this script for them.
    +
    +runtime syntax/rmd.vim
    +
    +syn match quartoShortarg /\S\+/ contained
    +syn keyword quartoShortkey var meta env pagebreak video include contained
    +syn region quartoShortcode matchgroup=PreProc start='{{< ' end=' >}}' contains=quartoShortkey,quartoShortarg transparent keepend
    +
    +hi def link quartoShortkey Include
    +hi def link quartoShortarg String
    diff --git a/.config/vim/syntax/r.vim b/.config/vim/syntax/r.vim
    new file mode 100644
    index 0000000..fa73194
    --- /dev/null
    +++ b/.config/vim/syntax/r.vim
    @@ -0,0 +1,388 @@
    +" Vim syntax file
    +" Language:	      R (GNU S)
    +" Maintainer:	      This runtime file is looking for a new maintainer.
    +" Former Maintainers: Jakson Aquino 
    +"                     Vaidotas Zemlys 
    +"                     Tom Payne 
    +" Contributor:        Johannes Ranke 
    +" Former Repository:  https://github.com/jalvesaq/R-Vim-runtime
    +" Filenames:          *.R *.r *.Rhistory *.Rt
    +" Last Change:        2023 Dec 24  08:05AM
    +"   2024 Feb 19 by Vim Project (announce adoption)
    +"
    +" NOTE: The highlighting of R functions might be defined in
    +" runtime files created by a filetype plugin, if installed.
    +"
    +" CONFIGURATION:
    +"   Syntax folding can be turned on by
    +"
    +"      let r_syntax_folding = 1
    +"
    +"   ROxygen highlighting can be turned off by
    +"
    +"      let r_syntax_hl_roxygen = 0
    +"
    +" Some lines of code were borrowed from Zhuojun Chen.
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn iskeyword @,48-57,_,.
    +
    +" The variables g:r_hl_roxygen and g:r_syn_minlines were renamed on April 8, 2017.
    +if exists("g:r_hl_roxygen")
    +  let g:r_syntax_hl_roxygen = g:r_hl_roxygen
    +endif
    +if exists("g:r_syn_minlines")
    +  let g:r_syntax_minlines = g:r_syn_minlines
    +endif
    +
    +if exists("g:r_syntax_folding") && g:r_syntax_folding
    +  setlocal foldmethod=syntax
    +endif
    +
    +let g:r_syntax_hl_roxygen = get(g:, 'r_syntax_hl_roxygen', 1)
    +
    +syn case match
    +
    +" Comment
    +syn match rCommentTodo contained "\(BUG\|FIXME\|NOTE\|TODO\):"
    +syn match rTodoParen contained "\(BUG\|FIXME\|NOTE\|TODO\)\s*(.\{-})\s*:" contains=rTodoKeyw,rTodoInfo transparent
    +syn keyword rTodoKeyw BUG FIXME NOTE TODO contained
    +syn match rTodoInfo "(\zs.\{-}\ze)" contained
    +syn match rComment contains=@Spell,rCommentTodo,rTodoParen "#.*"
    +
    +" Roxygen
    +if g:r_syntax_hl_roxygen
    +  " A roxygen block can start at the beginning of a file (first version) and
    +  " after a blank line (second version). It ends when a line appears that does not
    +  " contain a roxygen comment. In the following comments, any line containing
    +  " a roxygen comment marker (one or two hash signs # followed by a single
    +  " quote ' and preceded only by whitespace) is called a roxygen line. A
    +  " roxygen line containing only a roxygen comment marker, optionally followed
    +  " by whitespace is called an empty roxygen line.
    +
    +  syn match rOCommentKey "^\s*#\{1,2}'" contained
    +  syn region rOExamples start="^\s*#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOTag fold
    +  
    +  " R6 classes may contain roxygen lines independent of roxygen blocks
    +  syn region rOR6Class start=/R6Class(/ end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold
    +  syn match rOR6Block "#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained
    +  syn match rOR6Block "^\s*#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained
    +
    +  " First we match all roxygen blocks as containing only a title. In case an
    +  " empty roxygen line ending the title or a tag is found, this will be
    +  " overridden later by the definitions of rOBlock.
    +  syn match rOTitleBlock "\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag
    +
    +  " A title as part of a block is always at the beginning of the block, i.e.
    +  " either at the start of a file or after a completely empty line.
    +  syn match rOTitle "\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag
    +  syn match rOTitleTag contained "@title"
    +
    +  " When a roxygen block has a title and additional content, the title
    +  " consists of one or more roxygen lines (as little as possible are matched),
    +  " followed either by an empty roxygen line
    +  syn region rOBlock start="\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold
    +
    +  " or by a roxygen tag (we match everything starting with @ but not @@ which is used as escape sequence for a literal @).
    +  syn region rOBlock start="\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-}\s*#\{1,2}' @\(@\)\@!" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold
    +
    +  " If a block contains an @rdname, @describeIn tag, it may have paragraph breaks, but does not have a title
    +  syn region rOBlockNoTitle start="\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @rdname" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold
    +  syn region rOBlockNoTitle start="\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @describeIn" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold
    +
    +  " rOTag list originally generated from the lists that were available in
    +  " https://github.com/klutometis/roxygen/R/rd.R and
    +  " https://github.com/klutometis/roxygen/R/namespace.R
    +  " using s/^    \([A-Za-z0-9]*\) = .*/  syn match rOTag contained "@\1"/
    +  " Plus we need the @include tag
    +
    +  " rd.R
    +  syn match rOTag contained "@aliases"
    +  syn match rOTag contained "@author"
    +  syn match rOTag contained "@backref"
    +  syn match rOTag contained "@concept"
    +  syn match rOTag contained "@describeIn"
    +  syn match rOTag contained "@description"
    +  syn match rOTag contained "@details"
    +  syn match rOTag contained "@docType"
    +  syn match rOTag contained "@encoding"
    +  syn match rOTag contained "@evalRd"
    +  syn match rOTag contained "@example"
    +  syn match rOTag contained "@examples"
    +  syn match rOTag contained "@family"
    +  syn match rOTag contained "@field"
    +  syn match rOTag contained "@format"
    +  syn match rOTag contained "@inherit"
    +  syn match rOTag contained "@inheritParams"
    +  syn match rOTag contained "@inheritDotParams"
    +  syn match rOTag contained "@inheritSection"
    +  syn match rOTag contained "@keywords"
    +  syn match rOTag contained "@method"
    +  syn match rOTag contained "@name"
    +  syn match rOTag contained "@md"
    +  syn match rOTag contained "@noMd"
    +  syn match rOTag contained "@noRd"
    +  syn match rOTag contained "@note"
    +  syn match rOTag contained "@param"
    +  syn match rOTag contained "@rdname"
    +  syn match rOTag contained "@rawRd"
    +  syn match rOTag contained "@references"
    +  syn match rOTag contained "@return"
    +  syn match rOTag contained "@section"
    +  syn match rOTag contained "@seealso"
    +  syn match rOTag contained "@slot"
    +  syn match rOTag contained "@source"
    +  syn match rOTag contained "@template"
    +  syn match rOTag contained "@templateVar"
    +  syn match rOTag contained "@title"
    +  syn match rOTag contained "@usage"
    +  " namespace.R
    +  syn match rOTag contained "@export"
    +  syn match rOTag contained "@exportClass"
    +  syn match rOTag contained "@exportMethod"
    +  syn match rOTag contained "@exportPattern"
    +  syn match rOTag contained "@import"
    +  syn match rOTag contained "@importClassesFrom"
    +  syn match rOTag contained "@importFrom"
    +  syn match rOTag contained "@importMethodsFrom"
    +  syn match rOTag contained "@rawNamespace"
    +  syn match rOTag contained "@S3method"
    +  syn match rOTag contained "@useDynLib"
    +  " other
    +  syn match rOTag contained "@eval"
    +  syn match rOTag contained "@include"
    +  syn match rOTag contained "@includeRmd"
    +  syn match rOTag contained "@order"
    +endif
    +
    +
    +if &filetype == "rhelp"
    +  " string enclosed in double quotes
    +  syn region rString contains=rSpecial,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/
    +  " string enclosed in single quotes
    +  syn region rString contains=rSpecial,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/
    +else
    +  " string enclosed in double quotes
    +  syn region rString contains=rSpecial,rStrError,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/
    +  " string enclosed in single quotes
    +  syn region rString contains=rSpecial,rStrError,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/
    +endif
    +
    +syn match rStrError display contained "\\."
    +
    +
    +" New line, carriage return, tab, backspace, bell, feed, vertical tab, backslash
    +syn match rSpecial display contained "\\\(n\|r\|t\|b\|a\|f\|v\|'\|\"\)\|\\\\"
    +
    +" Hexadecimal and Octal digits
    +syn match rSpecial display contained "\\\(x\x\{1,2}\|[0-8]\{1,3}\)"
    +
    +" Unicode characters
    +syn match rSpecial display contained "\\u\x\{1,4}"
    +syn match rSpecial display contained "\\U\x\{1,8}"
    +syn match rSpecial display contained "\\u{\x\{1,4}}"
    +syn match rSpecial display contained "\\U{\x\{1,8}}"
    +
    +" Raw string
    +syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)(/ end=/)\z2\z1/ keepend
    +syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\){/ end=/}\z2\z1/ keepend
    +syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)\[/ end=/\]\z2\z1/ keepend
    +
    +" Statement
    +syn keyword rStatement   break next return
    +syn keyword rConditional if else
    +syn keyword rRepeat      for in repeat while
    +
    +" Constant (not really)
    +syn keyword rConstant T F LETTERS letters month.abb month.name pi
    +syn keyword rConstant R.version.string
    +
    +syn keyword rNumber   NA_integer_ NA_real_ NA_complex_ NA_character_
    +
    +" Constants
    +syn keyword rConstant NULL
    +syn keyword rBoolean  FALSE TRUE
    +syn keyword rNumber   NA Inf NaN
    +
    +" integer
    +syn match rInteger "\<\d\+L"
    +syn match rInteger "\<0x\([0-9]\|[a-f]\|[A-F]\)\+L"
    +syn match rInteger "\<\d\+[Ee]+\=\d\+L"
    +
    +" number with no fractional part or exponent
    +syn match rNumber "\<\d\+\>"
    +" hexadecimal number
    +syn match rNumber "\<0x\([0-9]\|[a-f]\|[A-F]\)\+"
    +
    +" floating point number with integer and fractional parts and optional exponent
    +syn match rFloat "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\="
    +" floating point number with no integer part and optional exponent
    +syn match rFloat "\<\.\d\+\([Ee][-+]\=\d\+\)\="
    +" floating point number with no fractional part and optional exponent
    +syn match rFloat "\<\d\+[Ee][-+]\=\d\+"
    +
    +" complex number
    +syn match rComplex "\<\d\+i"
    +syn match rComplex "\<\d\++\d\+i"
    +syn match rComplex "\<0x\([0-9]\|[a-f]\|[A-F]\)\+i"
    +syn match rComplex "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\=i"
    +syn match rComplex "\<\.\d\+\([Ee][-+]\=\d\+\)\=i"
    +syn match rComplex "\<\d\+[Ee][-+]\=\d\+i"
    +
    +syn match rAssign    '='
    +syn match rOperator    "&"
    +syn match rOperator    '-'
    +syn match rOperator    '\*'
    +syn match rOperator    '+'
    +if &filetype == "quarto" || &filetype == "rmd" || &filetype == "rrst"
    +  syn match rOperator    "[|!<>^~`/:]"
    +else
    +  syn match rOperator    "[|!<>^~/:]"
    +endif
    +syn match rOperator    "%\{2}\|%\S\{-}%"
    +syn match rOperator '\([!><]\)\@<=='
    +syn match rOperator '=='
    +syn match rOperator '|>'
    +syn match rOpError  '\*\{3}'
    +syn match rOpError  '//'
    +syn match rOpError  '&&&'
    +syn match rOpError  '|||'
    +syn match rOpError  '<<'
    +syn match rOpError  '>>'
    +
    +syn match rAssign "<\{1,2}-"
    +syn match rAssign "->\{1,2}"
    +
    +" Special
    +syn match rDelimiter "[,;:]"
    +
    +" Error
    +if exists("g:r_syntax_folding")
    +  syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold
    +  syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError fold
    +  syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError fold
    +  syn region rSection matchgroup=Title start=/^#.*[-=#]\{4,}/ end=/^#.*[-=#]\{4,}/ms=s-2,me=s-1 transparent contains=ALL fold
    +else
    +  syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError
    +  syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError
    +  syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError
    +endif
    +
    +syn match rError      "[)\]}]"
    +syn match rBraceError "[)}]" contained
    +syn match rCurlyError "[)\]]" contained
    +syn match rParenError "[\]}]" contained
    +
    +" Use Nvim-R to highlight functions dynamically if it is installed
    +if !exists("g:r_syntax_fun_pattern")
    +  let s:ff = split(substitute(globpath(&rtp, "R/functions.vim"), "functions.vim", "", "g"), "\n")
    +  if len(s:ff) > 0
    +    let g:r_syntax_fun_pattern = 0
    +  else
    +    let g:r_syntax_fun_pattern = 1
    +  endif
    +endif
    +
    +" Only use Nvim-R to highlight functions if they should not be highlighted
    +" according to a generic pattern
    +if g:r_syntax_fun_pattern == 1
    +  syn match rFunction '[0-9a-zA-Z_\.]\+\s*\ze('
    +else
    +  " Nvim-R:
    +  runtime R/functions.vim
    +endif
    +
    +syn match rDollar display contained "\$"
    +syn match rDollar display contained "@"
    +
    +" List elements will not be highlighted as functions:
    +syn match rLstElmt "\$[a-zA-Z0-9\\._]*" contains=rDollar
    +syn match rLstElmt "@[a-zA-Z0-9\\._]*" contains=rDollar
    +
    +" Functions that may add new objects
    +syn keyword rPreProc     library require attach detach source
    +
    +if &filetype == "rhelp"
    +  syn match rHelpIdent '\\method'
    +  syn match rHelpIdent '\\S4method'
    +endif
    +
    +" Type
    +syn match rType "\\"
    +syn keyword rType array category character complex double function integer list logical matrix numeric vector data.frame
    +
    +" Name of object with spaces
    +if &filetype == "rmd" || &filetype == "rrst" || &filetype == "quarto"
    +  syn region rNameWSpace start="`" end="`" contains=rSpaceFun containedin=rmdrChunk
    +else
    +  syn region rNameWSpace start="`" end="`" contains=rSpaceFun
    +endif
    +
    +if &filetype == "rhelp"
    +  syn match rhPreProc "^#ifdef.*"
    +  syn match rhPreProc "^#endif.*"
    +  syn match rhSection "\\dontrun\>"
    +endif
    +
    +if exists("r_syntax_minlines")
    +  exe "syn sync minlines=" . r_syntax_minlines
    +else
    +  syn sync minlines=40
    +endif
    +
    +" Define the default highlighting.
    +hi def link rAssign      Statement
    +hi def link rBoolean     Boolean
    +hi def link rBraceError  Error
    +hi def link rComment     Comment
    +hi def link rTodoParen   Comment
    +hi def link rTodoInfo    SpecialComment
    +hi def link rCommentTodo Todo
    +hi def link rTodoKeyw    Todo
    +hi def link rComplex     Number
    +hi def link rConditional Conditional
    +hi def link rConstant    Constant
    +hi def link rCurlyError  Error
    +hi def link rDelimiter   Delimiter
    +hi def link rDollar      SpecialChar
    +hi def link rError       Error
    +hi def link rFloat       Float
    +hi def link rFunction    Function
    +hi def link rSpaceFun    Function
    +hi def link rHelpIdent   Identifier
    +hi def link rhPreProc    PreProc
    +hi def link rhSection    PreCondit
    +hi def link rInteger     Number
    +hi def link rLstElmt     Normal
    +hi def link rNameWSpace  Normal
    +hi def link rNumber      Number
    +hi def link rOperator    Operator
    +hi def link rOpError     Error
    +hi def link rParenError  Error
    +hi def link rPreProc     PreProc
    +hi def link rRawString   String
    +hi def link rRawStrDelim Delimiter
    +hi def link rRepeat      Repeat
    +hi def link rSpecial     SpecialChar
    +hi def link rStatement   Statement
    +hi def link rString      String
    +hi def link rStrError    Error
    +hi def link rType        Type
    +if g:r_syntax_hl_roxygen
    +  hi def link rOTitleTag   Operator
    +  hi def link rOTag        Operator
    +  hi def link rOTitleBlock Title
    +  hi def link rOBlock         Comment
    +  hi def link rOBlockNoTitle  Comment
    +  hi def link rOR6Block         Comment
    +  hi def link rOTitle      Title
    +  hi def link rOCommentKey Comment
    +  hi def link rOExamples   SpecialComment
    +endif
    +
    +let b:current_syntax="r"
    +
    +" vim: ts=8 sw=2
    diff --git a/.config/vim/syntax/racc.vim b/.config/vim/syntax/racc.vim
    new file mode 100644
    index 0000000..2d4c176
    --- /dev/null
    +++ b/.config/vim/syntax/racc.vim
    @@ -0,0 +1,142 @@
    +" Vim default file
    +" Language:             Racc input file
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2008-06-22
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn keyword raccTodo        contained TODO FIXME XXX NOTE
    +
    +syn region  raccComment     start='/\*' end='\*/'
    +                            \ contains=raccTodo,@Spell
    +syn region  raccComment     display oneline start='#' end='$'
    +                            \ contains=raccTodo,@Spell
    +
    +syn region  raccClass       transparent matchgroup=raccKeyword
    +                            \ start='\' end='\'he=e-4
    +                            \ contains=raccComment,raccPrecedence,
    +                            \ raccTokenDecl,raccExpect,raccOptions,raccConvert,
    +                            \ raccStart,
    +
    +syn region  raccPrecedence  transparent matchgroup=raccKeyword
    +                            \ start='\' end='\'
    +                            \ contains=raccComment,raccPrecSpec
    +
    +syn keyword raccPrecSpec    contained nonassoc left right
    +                            \ nextgroup=raccPrecToken,raccPrecString skipwhite
    +                            \ skipnl
    +
    +syn match   raccPrecToken   contained '\<\u[A-Z0-9_]*\>'
    +                            \ nextgroup=raccPrecToken,raccPrecString skipwhite
    +                            \ skipnl
    +
    +syn region  raccPrecString  matchgroup=raccPrecString start=+"+
    +                            \ skip=+\\\\\|\\"+ end=+"+
    +                            \ contains=raccSpecial
    +                            \ nextgroup=raccPrecToken,raccPrecString skipwhite
    +                            \ skipnl
    +syn region  raccPrecString  matchgroup=raccPrecString start=+'+
    +                            \ skip=+\\\\\|\\'+ end=+'+ contains=raccSpecial
    +                            \ nextgroup=raccPrecToken,raccPrecString skipwhite
    +                            \ skipnl
    +
    +syn keyword raccTokenDecl   contained token
    +                            \ nextgroup=raccTokenR skipwhite skipnl
    +
    +syn match   raccTokenR      contained '\<\u[A-Z0-9_]*\>'
    +                            \ nextgroup=raccTokenR skipwhite skipnl
    +
    +syn keyword raccExpect      contained expect
    +                            \ nextgroup=raccNumber skipwhite skipnl
    +
    +syn match   raccNumber      contained '\<\d\+\>'
    +
    +syn keyword raccOptions     contained options
    +                            \ nextgroup=raccOptionsR skipwhite skipnl
    +
    +syn keyword raccOptionsR    contained omit_action_call result_var
    +                            \ nextgroup=raccOptionsR skipwhite skipnl
    +
    +syn region  raccConvert     transparent contained matchgroup=raccKeyword
    +                            \ start='\' end='\'
    +                            \ contains=raccComment,raccConvToken skipwhite
    +                            \ skipnl
    +
    +syn match   raccConvToken   contained '\<\u[A-Z0-9_]*\>'
    +                            \ nextgroup=raccString skipwhite skipnl
    +
    +syn keyword raccStart       contained start
    +                            \ nextgroup=raccTargetS skipwhite skipnl
    +
    +syn match   raccTargetS     contained '\<\l[a-z0-9_]*\>'
    +
    +syn match   raccSpecial     contained '\\["'\\]'
    +
    +syn region  raccString      start=+"+ skip=+\\\\\|\\"+ end=+"+
    +                            \ contains=raccSpecial
    +syn region  raccString      start=+'+ skip=+\\\\\|\\'+ end=+'+
    +                            \ contains=raccSpecial
    +
    +syn region  raccRules       transparent matchgroup=raccKeyword start='\'
    +                            \ end='\' contains=raccComment,raccString,
    +                            \ raccNumber,raccToken,raccTarget,raccDelimiter,
    +                            \ raccAction
    +
    +syn match   raccTarget      contained '\<\l[a-z0-9_]*\>'
    +
    +syn match   raccDelimiter   contained '[:|]'
    +
    +syn match   raccToken       contained '\<\u[A-Z0-9_]*\>'
    +
    +syn include @raccRuby       syntax/ruby.vim
    +
    +syn region  raccAction      transparent matchgroup=raccDelimiter
    +                            \ start='{' end='}' contains=@raccRuby
    +
    +syn region  raccHeader      transparent matchgroup=raccPreProc
    +                            \ start='^---- header.*' end='^----'he=e-4
    +                            \ contains=@raccRuby
    +
    +syn region  raccInner       transparent matchgroup=raccPreProc
    +                            \ start='^---- inner.*' end='^----'he=e-4
    +                            \ contains=@raccRuby
    +
    +syn region  raccFooter      transparent matchgroup=raccPreProc
    +                            \ start='^---- footer.*' end='^----'he=e-4
    +                            \ contains=@raccRuby
    +
    +syn sync    match raccSyncHeader    grouphere raccHeader '^---- header'
    +syn sync    match raccSyncInner     grouphere raccInner '^---- inner'
    +syn sync    match raccSyncFooter    grouphere raccFooter '^---- footer'
    +
    +hi def link raccTodo        Todo
    +hi def link raccComment     Comment
    +hi def link raccPrecSpec    Type
    +hi def link raccPrecToken   raccToken
    +hi def link raccPrecString  raccString
    +hi def link raccTokenDecl   Keyword
    +hi def link raccToken       Identifier
    +hi def link raccTokenR      raccToken
    +hi def link raccExpect      Keyword
    +hi def link raccNumber      Number
    +hi def link raccOptions     Keyword
    +hi def link raccOptionsR    Identifier
    +hi def link raccConvToken   raccToken
    +hi def link raccStart       Keyword
    +hi def link raccTargetS     Type
    +hi def link raccSpecial     special
    +hi def link raccString      String
    +hi def link raccTarget      Type
    +hi def link raccDelimiter   Delimiter
    +hi def link raccPreProc     PreProc
    +hi def link raccKeyword     Keyword
    +
    +let b:current_syntax = "racc"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/racket.vim b/.config/vim/syntax/racket.vim
    new file mode 100644
    index 0000000..e9b70a1
    --- /dev/null
    +++ b/.config/vim/syntax/racket.vim
    @@ -0,0 +1,657 @@
    +" Vim syntax file
    +" Language:             Racket
    +" Maintainer:           D. Ben Knoble 
    +" Previous Maintainer:  Will Langstroth 
    +" URL:                  https://github.com/benknoble/vim-racket
    +" Description:          Contains all of the keywords in #lang racket
    +" Last Change:          2025 Aug 09
    +
    +" Initializing:
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Highlight unmatched parens
    +syntax match racketError ,[]})],
    +
    +if version < 800
    +  set iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
    +else
    +  " syntax iskeyword 33,35-39,42-58,60-90,94,95,97-122,126,_
    +  " converted from decimal to char
    +  " :s/\d\+/\=submatch(0)->str2nr()->nr2char()/g
    +  " but corrected to remove duplicate _, move ^ to end
    +  syntax iskeyword @,!,#-',*-:,<-Z,a-z,~,_,^
    +  " expanded
    +  " syntax iskeyword !,#,$,%,&,',*,+,,,-,.,/,0-9,:,<,=,>,?,@,A-Z,_,a-z,~,^
    +endif
    +
    +" Forms in order of appearance at
    +" http://docs.racket-lang.org/reference/index.html
    +"
    +syntax keyword racketSyntax module module* module+ require provide quote
    +syntax keyword racketSyntax #%module-begin #%datum #%expression #%top #%variable-reference #%app
    +syntax keyword racketSyntax lambda case-lambda let let* letrec
    +syntax keyword racketSyntax let-values let*-values let-syntax letrec-syntax
    +syntax keyword racketSyntax let-syntaxes letrec-syntaxes letrec-syntaxes+values
    +syntax keyword racketSyntax local shared
    +syntax keyword racketSyntax if cond and or case define else =>
    +syntax keyword racketSyntax define define-values define-syntax define-syntaxes
    +syntax keyword racketSyntax define-for-syntax define-require-syntax define-provide-syntax
    +syntax keyword racketSyntax define-syntax-rule
    +syntax keyword racketSyntax define-record-type
    +syntax keyword racketSyntax begin begin0
    +syntax keyword racketSyntax begin-for-syntax
    +syntax keyword racketSyntax when unless
    +syntax keyword racketSyntax set! set!-values
    +syntax keyword racketSyntax for for/list for/vector for/hash for/hasheq for/hasheqv
    +syntax keyword racketSyntax for/and for/or for/lists for/first
    +syntax keyword racketSyntax for/last for/fold
    +syntax keyword racketSyntax for* for*/list for*/vector for*/hash for*/hasheq for*/hasheqv
    +syntax keyword racketSyntax for*/and for*/or for*/lists for*/first
    +syntax keyword racketSyntax for*/last for*/fold
    +syntax keyword racketSyntax for/fold/derived for*/fold/derived
    +syntax keyword racketSyntax define-sequence-syntax :do-in do
    +syntax keyword racketSyntax with-continuation-mark
    +syntax keyword racketSyntax quasiquote unquote unquote-splicing quote-syntax
    +syntax keyword racketSyntax #%top-interaction
    +syntax keyword racketSyntax define-package open-package package-begin
    +syntax keyword racketSyntax define* define*-values define*-syntax define*-syntaxes open*-package
    +syntax keyword racketSyntax package? package-exported-identifiers package-original-identifiers
    +syntax keyword racketSyntax block #%stratified-body
    +
    +" 8 Contracts
    +" 8.2 Function contracts
    +syntax keyword racketSyntax -> ->* ->i ->d case-> dynamic->* unconstrained-domain->
    +
    +" 8.6.1 Nested Contract Boundaries
    +syntax keyword racketSyntax with-contract define/contract define-struct/contract
    +syntax keyword racketSyntax invariant-assertion current-contract-region
    +
    +" 9 Pattern Matching
    +syntax keyword racketSyntax match match* match/values define/match
    +syntax keyword racketSyntax match-lambda match-lambda* match-lambda**
    +syntax keyword racketSyntax match-let match-let* match-let-values match-let*-values
    +syntax keyword racketSyntax match-letrec match-define match-define-values
    +
    +" 10.2.3 Handling Exceptions
    +syntax keyword racketSyntax with-handlers with-handlers*
    +
    +" 10.4 Continuations
    +syntax keyword racketSyntax let/cc let/ec
    +
    +" 10.4.1 Additional Control Operators
    +syntax keyword racketSyntax % prompt control prompt-at control-at reset shift
    +syntax keyword racketSyntax reset-at shift-at prompt0 reset0 control0 shift0
    +syntax keyword racketSyntax prompt0-at reset0-at control0-at shift0-at
    +syntax keyword racketSyntax set cupto
    +
    +" 11.3.2 Parameters
    +syntax keyword racketSyntax parameterize parameterize*
    +
    +" 12.5 Writing
    +syntax keyword racketSyntax write display displayln print
    +syntax keyword racketSyntax fprintf printf eprintf format
    +syntax keyword racketSyntax print-pair-curly-braces print-mpair-curly-braces print-unreadable
    +syntax keyword racketSyntax print-graph print-struct print-box print-vector-length print-hash-table
    +syntax keyword racketSyntax print-boolean-long-form print-reader-abbreviations print-as-expression print-syntax-width
    +syntax keyword racketSyntax current-write-relative-directory port-write-handler port-display-handler
    +syntax keyword racketSyntax port-print-handler global-port-print-handler
    +
    +" 13.7 Custodians
    +syntax keyword racketSyntax custodian? custodian-memory-accounting-available? custodian-box?
    +syntax keyword racketSyntax make-custodian custodian-shutdown-all current-custodian custodian-managed-list
    +syntax keyword racketSyntax custodian-require-memory custodian-limit-memory
    +syntax keyword racketSyntax make-custodian-box custodian-box-value
    +
    +" lambda sign
    +syntax match racketSyntax /\<[\u03bb]\>/
    +
    +
    +" Functions ==================================================================
    +
    +syntax keyword racketFunc boolean? not equal? eqv? eq? equal?/recur immutable?
    +syntax keyword racketFunc true false symbol=? boolean=? false?
    +syntax keyword racketFunc number? complex? real? rational? integer?
    +syntax keyword racketFunc exact-integer? exact-nonnegative-integer?
    +syntax keyword racketFunc exact-positive-integer? inexact-real?
    +syntax keyword racketFunc fixnum? flonum? zero? positive? negative?
    +syntax keyword racketFunc even? odd? exact? inexact?
    +syntax keyword racketFunc inexact->exact exact->inexact
    +
    +" 3.2.2 General Arithmetic
    +
    +" 3.2.2.1 Arithmetic
    +syntax keyword racketFunc + - * / quotient remainder quotient/remainder modulo
    +syntax keyword racketFunc add1 sub1 abs max min gcd lcm round exact-round floor
    +syntax keyword racketFunc ceiling truncate numerator denominator rationalize
    +
    +" 3.2.2.2 Number Comparison
    +syntax keyword racketFunc = < <= > >=
    +
    +" 3.2.2.3 Powers and Roots
    +syntax keyword racketFunc sqrt integer-sqrt integer-sqrt/remainder
    +syntax keyword racketFunc expt exp log
    +
    +" 3.2.2.3 Trigonometric Functions
    +syntax keyword racketFunc sin cos tan asin acos atan
    +
    +" 3.2.2.4 Complex Numbers
    +syntax keyword racketFunc make-rectangular make-polar
    +syntax keyword racketFunc real-part imag-part magnitude angle
    +syntax keyword racketFunc bitwise-ior bitwise-and bitwise-xor bitwise-not
    +syntax keyword racketFunc bitwise-bit-set? bitwise-bit-field arithmetic-shift
    +syntax keyword racketFunc integer-length
    +
    +" 3.2.2.5 Random Numbers
    +syntax keyword racketFunc random random-seed
    +syntax keyword racketFunc make-pseudo-random-generator pseudo-random-generator?
    +syntax keyword racketFunc current-pseudo-random-generator pseudo-random-generator->vector
    +syntax keyword racketFunc vector->pseudo-random-generator vector->pseudo-random-generator!
    +
    +" 3.2.2.8 Number-String Conversions
    +syntax keyword racketFunc number->string string->number real->decimal-string
    +syntax keyword racketFunc integer->integer-bytes
    +syntax keyword racketFunc floating-point-bytes->real real->floating-point-bytes
    +syntax keyword racketFunc system-big-endian?
    +
    +" 3.2.2.9 Extra Constants and Functions
    +syntax keyword racketFunc pi sqr sgn conjugate sinh cosh tanh order-of-magnitude
    +
    +" 3.2.3 Flonums
    +
    +" 3.2.3.1 Flonum Arithmetic
    +syntax keyword racketFunc fl+ fl- fl* fl/ flabs
    +syntax keyword racketFunc fl= fl< fl> fl<= fl>= flmin flmax
    +syntax keyword racketFunc flround flfloor flceiling fltruncate
    +syntax keyword racketFunc flsin flcos fltan flasin flacos flatan
    +syntax keyword racketFunc fllog flexp flsqrt
    +syntax keyword racketFunc ->fl fl->exact-integer make-flrectangular
    +syntax keyword racketFunc flreal-part flimag-part
    +
    +" 3.2.3.2 Flonum Vectors
    +syntax keyword racketFunc flvector? flvector make-flvector flvector-length
    +syntax keyword racketFunc flvector-ref flvector-set! flvector-copy in-flvector
    +syntax keyword racketFunc shared-flvector make-shared-flvector
    +syntax keyword racketSyntax for/flvector for*/flvector
    +
    +" 3.2.4 Fixnums
    +syntax keyword racketFunc fx+ fx- fx* fxquotient fxremainder fxmodulo fxabs
    +syntax keyword racketFunc fxand fxior fxxor fxnot fxlshift fxrshift
    +syntax keyword racketFunc fx= fx< fx> fx<= fx>= fxmin fxmax fx->fl fl->fx
    +
    +" 3.2.4.2 Fixnum Vectors
    +syntax keyword racketFunc fxvector? fxvector make-fxvector fxvector-length
    +syntax keyword racketFunc fxvector-ref fxvector-set! fxvector-copy in-fxvector
    +syntax keyword racketFunc for/fxvector for*/fxvector
    +syntax keyword racketFunc shared-fxvector make-shared-fxvector
    +
    +" 3.3 Strings
    +syntax keyword racketFunc string? make-string string string->immutable-string string-length
    +syntax keyword racketFunc string-ref string-set! substring string-copy string-copy!
    +syntax keyword racketFunc string-fill! string-append string->list list->string
    +syntax keyword racketFunc build-string string=? string? string>=?
    +syntax keyword racketFunc string-ci=? string-ci? string-ci>=?
    +syntax keyword racketFunc string-upcase string-downcase string-titlecase string-foldcase
    +syntax keyword racketFunc string-normalize-nfd string-normalize-nfc string-normalize-nfkc
    +syntax keyword racketFunc string-normalize-spaces string-trim
    +syntax keyword racketFunc string-locale=? string-locale>? string-localeimmutable-bytes byte?
    +syntax keyword racketFunc bytes-length bytes-ref bytes-set! subbytes bytes-copy
    +syntax keyword racketFunc bytes-copy! bytes-fill! bytes-append bytes->list list->bytes
    +syntax keyword racketFunc make-shared-bytes shared-bytes
    +syntax keyword racketFunc bytes=? bytes?
    +syntax keyword racketFunc bytes->string/utf-8 bytes->string/latin-1
    +syntax keyword racketFunc string->bytes/locale string->bytes/latin-1 string->bytes/utf-8
    +syntax keyword racketFunc string-utf-8-length bytes-utf8-ref bytes-utf-8-index
    +syntax keyword racketFunc bytes-open-converter bytes-close-converter
    +syntax keyword racketFunc bytes-convert bytes-convert-end bytes-converter?
    +syntax keyword racketFunc locale-string-encoding
    +
    +" 3.5 Characters
    +syntax keyword racketFunc char? char->integer integer->char
    +syntax keyword racketFunc char=? char? char>=?
    +syntax keyword racketFunc char-ci=? char-ci? char-ci>=?
    +syntax keyword racketFunc char-alphabetic? char-lower-case? char-upper-case? char-title-case?
    +syntax keyword racketFunc char-numeric? char-symbolic? char-punctuation? char-graphic?
    +syntax keyword racketFunc char-whitespace? char-blank?
    +syntax keyword racketFunc char-iso-control? char-general-category
    +syntax keyword racketFunc make-known-char-range-list
    +syntax keyword racketFunc char-upcase char-downcase char-titlecase char-foldcase
    +
    +" 3.6 Symbols
    +syntax keyword racketFunc symbol? symbol-interned? symbol-unreadable?
    +syntax keyword racketFunc symbol->string string->symbol
    +syntax keyword racketFunc string->uninterned-symbol string->unreadable-symbol
    +syntax keyword racketFunc gensym
    +
    +" 3.7 Regular Expressions
    +syntax keyword racketFunc regexp? pregexp? byte-regexp? byte-pregexp?
    +syntax keyword racketFunc regexp pregexp byte-regexp byte-pregexp
    +syntax keyword racketFunc regexp-quote regexp-match regexp-match*
    +syntax keyword racketFunc regexp-try-match regexp-match-positions
    +syntax keyword racketFunc regexp-match-positions* regexp-match?
    +syntax keyword racketFunc regexp-match-peek-positions regexp-match-peek-immediate
    +syntax keyword racketFunc regexp-match-peek regexp-match-peek-positions*
    +syntax keyword racketFunc regexp-match/end regexp-match-positions/end
    +syntax keyword racketFunc regexp-match-peek-positions-immediat/end
    +syntax keyword racketFunc regexp-split regexp-replace regexp-replace*
    +syntax keyword racketFunc regexp-replace-quote
    +
    +" 3.8 Keywords
    +syntax keyword racketFunc keyword? keyword->string string->keyword keywordlist list->vector
    +syntax keyword racketFunc vector->immutable-vector vector-fill!  vector-copy!
    +syntax keyword racketFunc vector->values build-vector vector-set*!  vector-map
    +syntax keyword racketFunc vector-map!  vector-append vector-take vector-take-right
    +syntax keyword racketFunc vector-drop vector-drop-right vector-split-at
    +syntax keyword racketFunc vector-split-at-right vector-copy vector-filter
    +syntax keyword racketFunc vector-filter-not vector-count vector-argmin vector-argmax
    +syntax keyword racketFunc vector-member vector-memv vector-memq
    +
    +" 3.12 Boxes
    +syntax keyword racketFunc box?  box box-immutable unbox set-box!
    +
    +" 3.13 Hash Tables
    +syntax keyword racketFunc hash? hash-equal? hash-eqv? hash-eq? hash-weak? hash
    +syntax keyword racketFunc hasheq hasheqv
    +syntax keyword racketFunc make-hash make-hasheqv make-hasheq make-weak-hash make-weak-hasheqv
    +syntax keyword racketFunc make-weak-hasheq make-immutable-hash make-immutable-hasheqv
    +syntax keyword racketFunc make-immutable-hasheq
    +syntax keyword racketFunc hash-set! hash-set*! hash-set hash-set* hash-ref hash-ref!
    +syntax keyword racketFunc hash-has-key? hash-update! hash-update hash-remove!
    +syntax keyword racketFunc hash-remove hash-map hash-keys hash-values
    +syntax keyword racketFunc hash->list hash-for-each hash-count
    +syntax keyword racketFunc hash-iterate-first hash-iterate-next hash-iterate-key
    +syntax keyword racketFunc hash-iterate-value hash-copy eq-hash-code eqv-hash-code
    +syntax keyword racketFunc equal-hash-code equal-secondary-hash-code
    +
    +" 3.15 Dictionaries
    +syntax keyword racketFunc dict? dict-mutable? dict-can-remove-keys? dict-can-functional-set?
    +syntax keyword racketFunc dict-set! dict-set*! dict-set dict-set* dict-has-key? dict-ref
    +syntax keyword racketFunc dict-ref! dict-update! dict-update dict-remove! dict-remove
    +syntax keyword racketFunc dict-map dict-for-each dict-count dict-iterate-first dict-iterate-next
    +syntax keyword racketFunc dict-iterate-key dict-iterate-value in-dict in-dict-keys
    +syntax keyword racketFunc in-dict-values in-dict-pairs dict-keys dict-values
    +syntax keyword racketFunc dict->list prop: dict prop: dict/contract dict-key-contract
    +syntax keyword racketFunc dict-value-contract dict-iter-contract make-custom-hash
    +syntax keyword racketFunc make-immutable-custom-hash make-weak-custom-hash
    +
    +" 3.16 Sets
    +syntax keyword racketFunc set seteqv seteq set-empty? set-count set-member?
    +syntax keyword racketFunc set-add set-remove set-union set-intersect set-subtract
    +syntax keyword racketFunc set-symmetric-difference set=? subset? proper-subset?
    +syntax keyword racketFunc set-map set-for-each set? set-equal? set-eqv? set-eq?
    +syntax keyword racketFunc set/c in-set for/set for/seteq for/seteqv for*/set
    +syntax keyword racketFunc for*/seteq for*/seteqv list->set list->seteq
    +syntax keyword racketFunc list->seteqv set->list
    +
    +" 3.17 Procedures
    +syntax keyword racketFunc procedure? apply compose compose1 procedure-rename procedure->method
    +syntax keyword racketFunc keyword-apply procedure-arity procedure-arity?
    +syntax keyword racketFunc procedure-arity-includes? procedure-reduce-arity
    +syntax keyword racketFunc procedure-keywords make-keyword-procedure
    +syntax keyword racketFunc procedure-reduce-keyword-arity procedure-struct-type?
    +syntax keyword racketFunc procedure-extract-target checked-procedure-check-and-extract
    +syntax keyword racketFunc primitive? primitive-closure? primitive-result-arity
    +syntax keyword racketFunc identity const thunk thunk* negate curry curryr
    +
    +" 3.18 Void
    +syntax keyword racketFunc void void?
    +
    +" 4.1 Defining Structure Types
    +syntax keyword racketFunc struct struct-field-index define-struct define-struct define-struct/derived
    +
    +" 4.2 Creating Structure Types
    +syntax keyword racketFunc make-struct-type make-struct-field-accessor make-struct-field-mutator
    +
    +" 4.3 Structure Type Properties
    +syntax keyword racketFunc make-struct-type-property struct-type-property? struct-type-property-accessor-procedure?
    +
    +" 4.4 Copying and Updating Structures
    +syntax keyword racketFunc struct-copy
    +
    +" 4.5 Structure Utilities
    +syntax keyword racketFunc struct->vector struct? struct-type?
    +syntax keyword racketFunc struct-constructor-procedure? struct-predicate-procedure? struct-accessor-procedure? struct-mutator-procedure?
    +syntax keyword racketFunc prefab-struct-key make-prefab-struct prefab-key->struct-type
    +
    +" 4.6 Structure Type Transformer Binding
    +syntax keyword racketFunc struct-info? check-struct-info? make-struct-info extract-struct-info
    +syntax keyword racketFunc struct-auto-info? struct-auto-info-lists
    +
    +" 5.1 Creating Interfaces
    +syntax keyword racketFunc interface interface*
    +
    +" 5.2 Creating Classes
    +syntax keyword racketFunc class* class inspect
    +syntax keyword racketFunc init init-field field inherit field init-rest
    +syntax keyword racketFunc public public* pubment pubment* public-final public-final*
    +syntax keyword racketFunc override override* overment overment* override-final override-final*
    +syntax keyword racketFunc augride augride* augment augment* augment-final augment-final*
    +syntax keyword racketFunc abstract inherit inherit/super inherit/inner
    +syntax keyword racketFunc rename-inner rename-super
    +syntax keyword racketFunc define/public define/pubment define/public-final
    +syntax keyword racketFunc define/override define/overment define/override-final
    +syntax keyword racketFunc define/augride define/augment define/augment-final
    +syntax keyword racketFunc private* define/private
    +
    +" 5.2.3 Methods
    +syntax keyword racketFunc class/derived
    +syntax keyword racketFunc super inner define-local-member-name define-member-name
    +syntax keyword racketFunc member-name-key generate-member-key member-name-key?
    +syntax keyword racketFunc member-name-key=? member-name-key-hash-code
    +
    +" 5.3 Creating Objects
    +syntax keyword racketFunc make-object instantiate new
    +syntax keyword racketFunc super-make-object super-instantiate super-new
    +
    +"5.4 Field and Method Access
    +syntax keyword racketFunc method-id send send/apply send/keyword-apply dynamic-send send*
    +syntax keyword racketFunc get-field set-field! field-bound?
    +syntax keyword racketFunc class-field-accessor class-field-mutator
    +
    +"5.4.3 Generics
    +syntax keyword racketFunc generic send-generic make-generic
    +
    +" 8.1 Data-strucure contracts
    +syntax keyword racketFunc flat-contract-with-explanation flat-named-contract
    +" TODO where do any/c and none/c `value`s go?
    +syntax keyword racketFunc or/c first-or/c and/c not/c =/c /c <=/c >=/c
    +syntax keyword racketFunc between/c real-in integer-in char-in natural-number/c
    +syntax keyword racketFunc string-len/c printable/c one-of/c symbols vectorof
    +syntax keyword racketFunc vector-immutableof vector/c box/c box-immutable/c listof
    +syntax keyword racketFunc non-empty-listof list*of cons/c cons/dc list/c *list/c
    +syntax keyword racketFunc syntax/c struct/c struct/dc parameter/c
    +syntax keyword racketFunc procedure-arity-includes/c hash/c hash/dc channel/c
    +syntax keyword racketFunc prompt-tag/c continuation-mark-key/c evt/c promise/c
    +syntax keyword racketFunc flat-contract flat-contract-predicate suggest/c
    +
    +" 9.1 Multiple Values
    +syntax keyword racketFunc values call-with-values
    +
    +" 10.2.2 Raising Exceptions
    +syntax keyword racketFunc raise error raise-user-error raise-argument-error
    +syntax keyword racketFunc raise-result-error raise-argument-error raise-range-error
    +syntax keyword racketFunc raise-type-error raise-mismatch-error raise-arity-error
    +syntax keyword racketFunc raise-syntax-error
    +
    +" 10.2.3 Handling Exceptions
    +syntax keyword racketFunc call-with-exception-handler uncaught-exception-handler
    +
    +" 10.2.4 Configuring Default Handlers
    +syntax keyword racketFunc error-escape-handler error-display-handler error-print-width
    +syntax keyword racketFunc error-print-context-length error-values->string-handler
    +syntax keyword racketFunc error-print-source-location
    +
    +" 10.2.5 Built-in Exception Types
    +syntax keyword racketFunc exn exn:fail exn:fail:contract exn:fail:contract:arity
    +syntax keyword racketFunc exn:fail:contract:divide-by-zero exn:fail:contract:non-fixnum-result
    +syntax keyword racketFunc exn:fail:contract:continuation exn:fail:contract:variable
    +syntax keyword racketFunc exn:fail:syntax exn:fail:syntax:unbound exn:fail:syntax:missing-module
    +syntax keyword racketFunc exn:fail:read exn:fail:read:eof exn:fail:read:non-char
    +syntax keyword racketFunc exn:fail:filesystem exn:fail:filesystem:exists
    +syntax keyword racketFunc exn:fail:filesystem:version exn:fail:filesystem:errno
    +syntax keyword racketFunc exn:fail:filesystem:missing-module
    +syntax keyword racketFunc exn:fail:network exn:fail:network:errno exn:fail:out-of-memory
    +syntax keyword racketFunc exn:fail:unsupported exn:fail:user
    +syntax keyword racketFunc exn:break exn:break:hang-up exn:break:terminate
    +
    +" 10.3 Delayed Evaluation
    +syntax keyword racketFunc promise? delay lazy force promise-forced? promise-running?
    +
    +" 10.3.1 Additional Promise Kinds
    +syntax keyword racketFunc delay/name promise/name delay/strict delay/sync delay/thread delay/idle
    +
    +" 10.4 Continuations
    +syntax keyword racketFunc call-with-continuation-prompt abort-current-continuation make-continuation-prompt-tag
    +syntax keyword racketFunc default-continuation-prompt-tag call-with-current-continuation call/cc
    +syntax keyword racketFunc call-with-composable-continuation call-with-escape-continuation call/ec
    +syntax keyword racketFunc call-with-continuation-barrier continuation-prompt-available
    +syntax keyword racketFunc continuation? continuation-prompt-tag dynamic-wind
    +
    +" 10.4.1 Additional Control Operators
    +syntax keyword racketFunc call/prompt abort/cc call/comp abort fcontrol spawn splitter new-prompt
    +
    +" 11.3.2 Parameters
    +syntax keyword racketFunc make-parameter make-derived-parameter parameter?
    +syntax keyword racketFunc parameter-procedure=? current-parameterization
    +syntax keyword racketFunc call-with-parameterization parameterization?
    +
    +" 14.1.1 Manipulating Paths
    +syntax keyword racketFunc path? path-string? path-for-some-system? string->path path->string path->bytes
    +syntax keyword racketFunc string->path-element bytes->path-element path-element->string path-element->bytes
    +syntax keyword racketFunc path-convention-type system-path-convention-type build-type
    +syntax keyword racketFunc build-type/convention-type
    +syntax keyword racketFunc absolute-path? relative-path? complete-path?
    +syntax keyword racketFunc path->complete-path path->directory-path
    +syntax keyword racketFunc resolve-path cleanse-path expand-user-path simplify-path normal-case-path split-path
    +syntax keyword racketFunc path-replace-suffix path-add-suffix
    +
    +" 14.1.2 More Path Utilities
    +syntax keyword racketFunc explode-path file-name-from-path filename-extension find-relative-path normalize-path
    +syntax keyword racketFunc path-element? path-only simple-form-path some-simple-path->string string->some-system-path
    +
    +" 15.6 Time
    +syntax keyword racketFunc current-seconds current-inexact-milliseconds
    +syntax keyword racketFunc seconds->date current-milliseconds
    +
    +
    +syntax match racketDelimiter !\<\.\>!
    +
    +syntax cluster racketTop contains=racketSyntax,racketFunc,racketDelimiter
    +
    +syntax match racketConstant  ,\<\*\k\+\*\>,
    +syntax match racketConstant  ,\<<\k\+>\>,
    +
    +" Non-quoted lists, and strings
    +syntax region racketStruc matchgroup=racketParen start="("rs=s+1 end=")"re=e-1 contains=@racketTop
    +syntax region racketStruc matchgroup=racketParen start="#("rs=s+2 end=")"re=e-1 contains=@racketTop
    +syntax region racketStruc matchgroup=racketParen start="{"rs=s+1 end="}"re=e-1 contains=@racketTop
    +syntax region racketStruc matchgroup=racketParen start="#{"rs=s+2 end="}"re=e-1 contains=@racketTop
    +syntax region racketStruc matchgroup=racketParen start="\["rs=s+1 end="\]"re=e-1 contains=@racketTop
    +syntax region racketStruc matchgroup=racketParen start="#\["rs=s+2 end="\]"re=e-1 contains=@racketTop
    +
    +for lit in ['hash', 'hasheq', 'hasheqv']
    +  execute printf('syntax match racketLit "\<%s\>" nextgroup=@racketParen containedin=ALLBUT,.*String,.*Comment', '#'.lit)
    +endfor
    +
    +for lit in ['rx', 'rx#', 'px', 'px#']
    +  execute printf('syntax match racketRe "\<%s\>" nextgroup=@racketString containedin=ALLBUT,.*String,.*Comment,', '#'.lit)
    +endfor
    +
    +unlet lit
    +
    +" Simple literals
    +
    +" Strings
    +
    +syntax match racketStringEscapeError "\\." contained display
    +
    +syntax match racketStringEscape "\\[abtnvfre'"\\]"        contained display
    +syntax match racketStringEscape "\\$"                     contained display
    +syntax match racketStringEscape "\\\o\{1,3}\|\\x\x\{1,2}" contained display
    +
    +syntax match racketUStringEscape "\\u\x\{1,4}\|\\U\x\{1,8}" contained display
    +syntax match racketUStringEscape "\\u\x\{4}\\u\x\{4}"       contained display
    +
    +syntax region racketString start=/\%(\\\)\@"
    +syntax match racketContainedNumberError   "\<#b\k*[^-+01delfinas#./@]\>"
    +syntax match racketContainedNumberError   "\<#[ei]#[ei]"
    +syntax match racketContainedNumberError   "\<#[xdob]#[xdob]"
    +
    +" start with the simpler sorts
    +syntax match racketNumber    "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdleft][-+]\?\d\+#*\)\?\>" contains=racketContainedNumberError
    +syntax match racketNumber    "\<\(#[dobie]\)\{0,2}[-+]\?\d\+/\d\+\>" contains=racketContainedNumberError
    +syntax match racketNumber    "\<\(#[dobie]\)\{0,2}[-+]\?\d\+/\d\+[-+]\d\+\(/\d\+\)\?i\>" contains=racketContainedNumberError
    +
    +" different possible ways of expressing complex values
    +syntax match racketNumber    "\<\(#[dobie]\)\{0,2}[-+]\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdleft][-+]\?\d\+#*\)\?i\>" contains=racketContainedNumberError
    +syntax match racketNumber    "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdleft][-+]\?\d\+#*\)\?[-+]\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?i\>" contains=racketContainedNumberError
    +syntax match racketNumber    "\<\(#[dobie]\)\{0,2}[-+]\(inf\|nan\)\.[0f][-+]\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdleft][-+]\?\d\+#*\)\?i\>" contains=racketContainedNumberError
    +syntax match racketNumber    "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdleft][-+]\?\d\+#*\)\?[-+]\(inf\|nan\)\.[0f]i\>" contains=racketContainedNumberError
    +syntax match racketNumber    "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdleft][-+]\?\d\+#*\)\?@[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?\>" contains=racketContainedNumberError
    +syntax match racketNumber    "\<\(#[dobie]\)\{0,2}[-+]\(inf\|nan\)\.[0f]@[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdleft][-+]\?\d\+#*\)\?\>" contains=racketContainedNumberError
    +syntax match racketNumber    "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdleft][-+]\?\d\+#*\)\?@[-+]\(inf\|nan\)\.[0f]\>" contains=racketContainedNumberError
    +
    +" hex versions of the above (separate because of the different possible exponent markers)
    +syntax match racketNumber    "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([slt][-+]\?\x\+#*\)\?\>"
    +syntax match racketNumber    "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\x\+/\x\+\>"
    +syntax match racketNumber    "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\x\+/\x\+[-+]\x\+\(/\x\+\)\?i\>"
    +
    +syntax match racketNumber    "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?i\>"
    +syntax match racketNumber    "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?[-+]\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?i\>"
    +syntax match racketNumber    "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\(inf\|nan\)\.[0f][-+]\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?i\>"
    +syntax match racketNumber    "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?[-+]\(inf\|nan\)\.[0f]i\>"
    +syntax match racketNumber    "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?@[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?\>"
    +syntax match racketNumber    "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\(inf\|nan\)\.[0f]@[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?\>"
    +syntax match racketNumber    "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?@[-+]\(inf\|nan\)\.[0f]\>"
    +
    +" these work for any radix
    +syntax match racketNumber    "\<\(#[xdobie]\)\{0,2}[-+]\(inf\|nan\)\.[0ft]i\?\>" contains=racketContainedNumberError
    +syntax match racketNumber    "\<\(#[xdobie]\)\{0,2}[-+]\(inf\|nan\)\.[0ft][-+]\(inf\|nan\)\.[0f]i\>" contains=racketContainedNumberError
    +syntax match racketNumber    "\<\(#[xdobie]\)\{0,2}[-+]\(inf\|nan\)\.[0ft]@[-+]\(inf\|nan\)\.[0f]\>" contains=racketContainedNumberError
    +
    +syntax keyword racketBoolean  #t #f #true #false #T #F
    +
    +syntax match racketError   "\<#\\\k*\>"
    +
    +syntax match racketChar    "\<#\\.\w\@!"
    +syntax match racketChar    "\<#\\space\>"
    +syntax match racketChar    "\<#\\newline\>"
    +syntax match racketChar    "\<#\\return\>"
    +syntax match racketChar    "\<#\\null\?\>"
    +syntax match racketChar    "\<#\\backspace\>"
    +syntax match racketChar    "\<#\\tab\>"
    +syntax match racketChar    "\<#\\linefeed\>"
    +syntax match racketChar    "\<#\\vtab\>"
    +syntax match racketChar    "\<#\\page\>"
    +syntax match racketChar    "\<#\\rubout\>"
    +syntax match racketChar    "\<#\\\o\{1,3}\>"
    +syntax match racketChar    "\<#\\x\x\{1,2}\>"
    +syntax match racketChar    "\<#\\u\x\{1,6}\>"
    +
    +syntax cluster racketTop  add=racketNumber,racketBoolean,racketChar
    +
    +" Command-line parsing
    +syntax keyword racketExtFunc command-line current-command-line-arguments once-any help-labels multi once-each
    +
    +syntax match racketSyntax    "#lang "
    +syntax match racketExtSyntax "#:\k\+"
    +
    +syntax cluster racketTop  add=racketExtFunc,racketExtSyntax
    +
    +" syntax quoting, unquoting and quasiquotation
    +syntax match racketQuote "#\?['`]"
    +
    +syntax match racketUnquote "#,"
    +syntax match racketUnquote "#,@"
    +syntax match racketUnquote ","
    +syntax match racketUnquote ",@"
    +
    +" Comments
    +syntax match racketSharpBang "\%^#![ /].*" display
    +syntax match racketComment /;.*$/ contains=racketTodo,racketNote,@Spell
    +syntax region racketMultilineComment start=/#|/ end=/|#/ contains=racketMultilineComment,racketTodo,racketNote,@Spell
    +syntax match racketFormComment "#;" nextgroup=@racketTop
    +
    +syntax match racketTodo /\C\<\(FIXME\|TODO\|XXX\)\ze:\?\>/ contained
    +syntax match racketNote /\CNOTE\ze:\?/ contained
    +
    +syntax cluster racketTop  add=racketQuote,racketUnquote,racketComment,racketMultilineComment,racketFormComment
    +
    +" Synchronization and the wrapping up...
    +syntax sync match matchPlace grouphere NONE "^[^ \t]"
    +" ... i.e. synchronize on a line that starts at the left margin
    +
    +" Define the default highlighting.
    +highlight default link racketSyntax Statement
    +highlight default link racketFunc Function
    +
    +highlight default link racketString String
    +highlight default link racketStringEscape Special
    +highlight default link racketHereString String
    +highlight default link racketUStringEscape Special
    +highlight default link racketStringEscapeError Error
    +highlight default link racketChar Character
    +highlight default link racketBoolean Boolean
    +
    +highlight default link racketNumber Number
    +highlight default link racketNumberError Error
    +highlight default link racketContainedNumberError Error
    +
    +highlight default link racketQuote SpecialChar
    +highlight default link racketUnquote SpecialChar
    +
    +highlight default link racketDelimiter Delimiter
    +highlight default link racketParen Delimiter
    +highlight default link racketConstant Constant
    +
    +highlight default link racketLit Type
    +highlight default link racketRe Type
    +
    +highlight default link racketComment Comment
    +highlight default link racketMultilineComment Comment
    +highlight default link racketFormComment SpecialChar
    +highlight default link racketSharpBang Comment
    +highlight default link racketTodo Todo
    +highlight default link racketNote SpecialComment
    +highlight default link racketError Error
    +
    +highlight default link racketExtSyntax Type
    +highlight default link racketExtFunc PreProc
    +
    +let b:current_syntax = "racket"
    diff --git a/.config/vim/syntax/radiance.vim b/.config/vim/syntax/radiance.vim
    new file mode 100644
    index 0000000..c49e339
    --- /dev/null
    +++ b/.config/vim/syntax/radiance.vim
    @@ -0,0 +1,142 @@
    +" Vim syntax file
    +" Language:     Radiance Scene Description
    +" Maintainer:   Georg Mischler 
    +" Last change:  26. April. 2001
    +
    +" Radiance is a lighting simulation software package written
    +" by Gregory Ward-Larson ("the computer artist formerly known
    +" as Greg Ward"), then at LBNL.
    +"
    +" http://radsite.lbl.gov/radiance/HOME.html
    +"
    +" Of course, there is also information available about it
    +" from http://www.schorsch.com/
    +
    +
    +" We take a minimalist approach here, highlighting just the
    +" essential properties of each object, its type and ID, as well as
    +" comments, external command names and the null-modifier "void".
    +
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" all printing characters except '#' and '!' are valid in names.
    +setlocal iskeyword=\",$-~
    +
    +" The null-modifier
    +syn keyword radianceKeyword void
    +
    +" The different kinds of scene description object types
    +" Reference types
    +syn keyword radianceExtraType contained alias instance
    +" Surface types
    +syn keyword radianceSurfType contained ring polygon sphere bubble
    +syn keyword radianceSurfType contained cone cup cylinder tube source
    +" Emitting material types
    +syn keyword radianceLightType contained light glow illum spotlight
    +" Material types
    +syn keyword radianceMatType contained mirror mist prism1 prism2
    +syn keyword radianceMatType contained metal plastic trans
    +syn keyword radianceMatType contained metal2 plastic2 trans2
    +syn keyword radianceMatType contained metfunc plasfunc transfunc
    +syn keyword radianceMatType contained metdata plasdata transdata
    +syn keyword radianceMatType contained dielectric interface glass
    +syn keyword radianceMatType contained BRTDfunc antimatter
    +" Pattern modifier types
    +syn keyword radiancePatType contained colorfunc brightfunc
    +syn keyword radiancePatType contained colordata colorpict brightdata
    +syn keyword radiancePatType contained colortext brighttext
    +" Texture modifier types
    +syn keyword radianceTexType contained texfunc texdata
    +" Mixture types
    +syn keyword radianceMixType contained mixfunc mixdata mixpict mixtext
    +
    +
    +" Each type name is followed by an ID.
    +" This doesn't work correctly if the id is one of the type names of the
    +" same class (which is legal for radiance), in which case the id will get
    +" type color as well, and the int count (or alias reference) gets id color.
    +
    +syn region radianceID start="\"      end="\<\k*\>" contains=radianceExtraType
    +syn region radianceID start="\"   end="\<\k*\>" contains=radianceExtraType
    +
    +syn region radianceID start="\"     end="\<\k*\>" contains=radianceSurfType
    +syn region radianceID start="\"	     end="\<\k*\>" contains=radianceSurfType
    +syn region radianceID start="\"    end="\<\k*\>" contains=radianceSurfType
    +syn region radianceID start="\"     end="\<\k*\>" contains=radianceSurfType
    +syn region radianceID start="\"     end="\<\k*\>" contains=radianceSurfType
    +syn region radianceID start="\"	     end="\<\k*\>" contains=radianceSurfType
    +syn region radianceID start="\"	     end="\<\k*\>" contains=radianceSurfType
    +syn region radianceID start="\"   end="\<\k*\>" contains=radianceSurfType
    +syn region radianceID start="\"	     end="\<\k*\>" contains=radianceSurfType
    +
    +syn region radianceID start="\"      end="\<\k*\>" contains=radianceLightType
    +syn region radianceID start="\"	     end="\<\k*\>" contains=radianceLightType
    +syn region radianceID start="\"      end="\<\k*\>" contains=radianceLightType
    +syn region radianceID start="\"  end="\<\k*\>" contains=radianceLightType
    +
    +syn region radianceID start="\"     end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"	     end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"     end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"     end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"      end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"    end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"      end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"     end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"   end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"     end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"    end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"   end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"  end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"    end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"   end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"  end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\" end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"  end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"      end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\"   end="\<\k*\>" contains=radianceMatType
    +syn region radianceID start="\" end="\<\k*\>" contains=radianceMatType
    +
    +syn region radianceID start="\"  end="\<\k*\>" contains=radiancePatType
    +syn region radianceID start="\" end="\<\k*\>" contains=radiancePatType
    +syn region radianceID start="\"  end="\<\k*\>" contains=radiancePatType
    +syn region radianceID start="\" end="\<\k*\>" contains=radiancePatType
    +syn region radianceID start="\"  end="\<\k*\>" contains=radiancePatType
    +syn region radianceID start="\"  end="\<\k*\>" contains=radiancePatType
    +syn region radianceID start="\" end="\<\k*\>" contains=radiancePatType
    +
    +syn region radianceID start="\"    end="\<\k*\>" contains=radianceTexType
    +syn region radianceID start="\"    end="\<\k*\>" contains=radianceTexType
    +
    +syn region radianceID start="\"    end="\<\k*\>" contains=radianceMixType
    +syn region radianceID start="\"    end="\<\k*\>" contains=radianceMixType
    +syn region radianceID start="\"    end="\<\k*\>" contains=radianceMixType
    +
    +" external commands (generators, xform et al.)
    +syn match radianceCommand "^\s*!\s*[^\s]\+\>"
    +
    +" The usual suspects
    +syn keyword radianceTodo contained TODO XXX
    +syn match radianceComment "#.*$" contains=radianceTodo
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +hi def link radianceKeyword	Keyword
    +hi def link radianceExtraType	Type
    +hi def link radianceSurfType	Type
    +hi def link radianceLightType	Type
    +hi def link radianceMatType	Type
    +hi def link radiancePatType	Type
    +hi def link radianceTexType	Type
    +hi def link radianceMixType	Type
    +hi def link radianceComment	Comment
    +hi def link radianceCommand	Function
    +hi def link radianceID		String
    +hi def link radianceTodo		Todo
    +
    +let b:current_syntax = "radiance"
    +
    +" vim: ts=8 sw=2
    diff --git a/.config/vim/syntax/raku.vim b/.config/vim/syntax/raku.vim
    new file mode 100644
    index 0000000..1bf9b49
    --- /dev/null
    +++ b/.config/vim/syntax/raku.vim
    @@ -0,0 +1,1971 @@
    +" Vim syntax file
    +" Language:      Raku
    +" Maintainer:    vim-perl 
    +" Homepage:      https://github.com/Raku/vim-raku
    +" Bugs/requests: https://github.com/Raku/vim-raku/issues
    +" Last Change:   2021-04-16
    +
    +" Contributors:  Luke Palmer 
    +"                Moritz Lenz 
    +"                Hinrik Örn Sigurðsson 
    +"
    +" This is a big undertaking.
    +"
    +" The ftdetect/raku.vim file in this repository takes care of setting the
    +" right filetype for Raku files. To set it explicitly you can also add this
    +" line near the bottom of your source file:
    +"   # vim: filetype=raku
    +
    +" TODO:
    +"   * Go over the list of keywords/types to see what's deprecated/missing
    +"   * Add more support for folding (:help syn-fold)
    +"
    +" If you want to have Pir code inside Q:PIR// strings highlighted, do:
    +"   let raku_embedded_pir=1
    +"
    +" The above requires pir.vim, which you can find in Parrot's repository:
    +" https://github.com/parrot/parrot/tree/master/editor
    +"
    +" To highlight Perl 5 regexes (m:P5//):
    +"   let raku_perl5_regexes=1
    +"
    +" To enable folding:
    +"   let raku_fold=1
    +
    +if version < 704 | throw "raku.vim uses regex syntax which Vim <7.4 doesn't support. Try 'make fix_old_vim' in the vim-perl repository." | endif
    +
    +" For version 5.x: Clear all syntax items
    +" For version 6.x: Quit when a syntax file was already loaded
    +if version < 600
    +    syntax clear
    +elseif exists("b:current_syntax")
    +    finish
    +endif
    +let s:keepcpo= &cpo
    +set cpo&vim
    +
    +" Patterns which will be interpolated by the preprocessor (tools/preproc.pl):
    +"
    +" @@IDENT_NONDIGIT@@     "[A-Za-z_\xC0-\xFF]"
    +" @@IDENT_CHAR@@         "[A-Za-z_\xC0-\xFF0-9]"
    +" @@IDENTIFIER@@         "\%(@@IDENT_NONDIGIT@@\%(@@IDENT_CHAR@@\|[-']@@IDENT_NONDIGIT@@\@=\)*\)"
    +" @@IDENTIFIER_START@@   "@@IDENT_CHAR@@\@1".
    +syn match rakuKeywordStart display "\%(\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!\)\@=[A-Za-z_\xC0-\xFF0-9]\@1" nextgroup=rakuDeclare,rakuIdentifier skipwhite skipempty
    +syn match rakuDeclare display "[.^]\@1" nextgroup=rakuIdentifier skipwhite skipempty
    +syn match rakuDeclareRegex display "[.^]\@1" nextgroup=rakuRegexName skipwhite skipempty
    +
    +syn match rakuTypeConstraint  display "\%([.^]\|^\s*\)\@"
    +syn match rakuTypeConstraint  display "\%([.^]\|^\s*\)\@».;\\∈∉∋∌∩∪≼≽⊂⊃⊄⊅⊆⊇⊈⊉⊍⊎⊖∅∘]"
    +syn match rakuOperator display "\%(:\@1][=+]\?\|cont\|elem\))"
    +
    +" Reverse, cross, and zip metaoperators
    +exec "syn match rakuRSXZOp display \"[RSXZ]:\\@!\\%(\\a\\@=\\%(". s:alpha_metaops_or . "\\)\\>\\|[[:alnum:]]\\@!\\%([.,]\\|[^[,.[:alnum:][:space:]]\\)\\+\\|\\s\\@=\\|$\\)\""
    +
    +syn match rakuBlockLabel display "^\s*\zs\h\w*\s*::\@!\_s\@="
    +
    +syn match rakuNumber     display "[A-Za-z_\xC0-\xFF0-9]\@1"
    +syn match rakuContext display "\%(\$\|@\|%\|&\)(\@="
    +
    +" Quoting
    +
    +" one cluster for every quote adverb
    +syn cluster rakuInterp_scalar
    +    \ add=rakuInterpScalar
    +
    +syn cluster rakuInterp_array
    +    \ add=rakuInterpArray
    +
    +syn cluster rakuInterp_hash
    +    \ add=rakuInterpHash
    +
    +syn cluster rakuInterp_function
    +    \ add=rakuInterpFunction
    +
    +syn cluster rakuInterp_closure
    +    \ add=rakuInterpClosure
    +
    +syn cluster rakuInterp_q
    +    \ add=rakuEscQQ
    +    \ add=rakuEscBackSlash
    +
    +syn cluster rakuInterp_backslash
    +    \ add=@rakuInterp_q
    +    \ add=rakuEscape
    +    \ add=rakuEscOpenCurly
    +    \ add=rakuEscCodePoint
    +    \ add=rakuEscHex
    +    \ add=rakuEscOct
    +    \ add=rakuEscOctOld
    +    \ add=rakuEscNull
    +
    +syn cluster rakuInterp_qq
    +    \ add=@rakuInterp_scalar
    +    \ add=@rakuInterp_array
    +    \ add=@rakuInterp_hash
    +    \ add=@rakuInterp_function
    +    \ add=@rakuInterp_closure
    +    \ add=@rakuInterp_backslash
    +    \ add=rakuMatchVarSigil
    +
    +syn region rakuInterpScalar
    +    \ start="\ze\z(\$\%(\%(\%(\d\+\|!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@1]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
    +    \ start="\ze\z(\$\%(\%(\%(\%([.^*?=!~]\|:\@1]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
    +    \ end="\z1\zs"
    +    \ contained keepend
    +    \ contains=TOP
    +
    +syn region rakuInterpArray
    +    \ matchgroup=rakuContext
    +    \ start="@\ze()\@!"
    +    \ skip="([^)]*)"
    +    \ end=")\zs"
    +    \ contained
    +    \ contains=TOP
    +
    +syn region rakuInterpHash
    +    \ start="\ze\z(%\$*\%(\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@1]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
    +    \ end="\z1\zs"
    +    \ contained keepend
    +    \ contains=TOP
    +
    +syn region rakuInterpHash
    +    \ matchgroup=rakuContext
    +    \ start="%\ze()\@!"
    +    \ skip="([^)]*)"
    +    \ end=")\zs"
    +    \ contained
    +    \ contains=TOP
    +
    +syn region rakuInterpFunction
    +    \ start="\ze\z(&\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@1]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
    +    \ end="\z1\zs"
    +    \ contained keepend
    +    \ contains=TOP
    +
    +syn region rakuInterpFunction
    +    \ matchgroup=rakuContext
    +    \ start="&\ze()\@!"
    +    \ skip="([^)]*)"
    +    \ end=")\zs"
    +    \ contained
    +    \ contains=TOP
    +
    +syn region rakuInterpClosure
    +    \ start="\\\@1" contained
    +syn match rakuEscCloseFrench  display "\\»" contained
    +syn match rakuEscBackTick     display "\\`" contained
    +syn match rakuEscForwardSlash display "\\/" contained
    +syn match rakuEscVerticalBar  display "\\|" contained
    +syn match rakuEscExclamation  display "\\!" contained
    +syn match rakuEscComma        display "\\," contained
    +syn match rakuEscDollar       display "\\\$" contained
    +syn match rakuEscCloseCurly   display "\\}" contained
    +syn match rakuEscCloseBracket display "\\\]" contained
    +
    +" matches :key, :!key, :$var, :key, etc
    +" Since we don't know in advance how the adverb ends, we use a trick.
    +" Consume nothing with the start pattern (\ze at the beginning),
    +" while capturing the whole adverb into \z1 and then putting it before
    +" the match start (\zs) of the end pattern.
    +syn region rakuAdverb
    +    \ start="\ze\z(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\?\)"
    +    \ start="\ze\z(:!\?[@$%]\$*\%(::\|\%(\$\@1<=\d\+\|!\|/\|¢\)\|\%(\%([.^*?=!~]\|:\@1
    +" Distinguishing this from the "less than" operator is tricky. For now,
    +" it matches if any of the following is true:
    +"
    +" * There is whitespace missing on either side of the "<", since
    +"   people tend to put spaces around "less than". We make an exception
    +"   for " = < ... >" assignments though.
    +" * It comes after "enum", "for", "any", "all", or "none"
    +" * It's the first or last thing on a line (ignoring whitespace)
    +" * It's preceded by "(\s*" or "=\s\+"
    +" * It's empty and terminated on the same line (e.g. <> and < >)
    +"
    +" It never matches when:
    +"
    +" * Preceded by [<+~=!] (e.g. <>, =<$foo>, * !< 3)
    +" * Followed by [-=] (e.g. <--, <=, <==, <->)
    +syn region rakuStringAngle
    +    \ matchgroup=rakuQuote
    +    \ start="\%(\<\%(enum\|for\|any\|all\|none\)\>\s*(\?\s*\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!"
    +    \ start="\%(\s\|[<+~=!]\)\@\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!"
    +    \ start="[<+~=!]\@1\|\%([=-]\{1,2}>\|[=-]\{1,2}\)\)\@!"
    +    \ start="\%(^\s*\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!"
    +    \ start="[<+~=!]\@1\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!"
    +    \ start="<\%(\s*>\)\@="
    +    \ skip="\\\@1"
    +    \ end=">"
    +    \ contains=rakuInnerAnglesOne,rakuEscBackSlash,rakuEscCloseAngle
    +
    +syn region rakuStringAngleFixed
    +    \ matchgroup=rakuQuote
    +    \ start="<"
    +    \ skip="\\\@1"
    +    \ end=">"
    +    \ contains=rakuInnerAnglesOne,rakuEscBackSlash,rakuEscCloseAngle
    +    \ contained
    +
    +syn region rakuInnerAnglesOne
    +    \ matchgroup=rakuStringAngle
    +    \ start="\\\@1"
    +    \ end=">"
    +    \ transparent contained
    +    \ contains=rakuInnerAnglesOne
    +
    +" <>
    +syn region rakuStringAngles
    +    \ matchgroup=rakuQuote
    +    \ start="<<=\@!"
    +    \ skip="\\\@1"
    +    \ end=">>"
    +    \ contains=rakuInnerAnglesTwo,@rakuInterp_qq,rakuComment,rakuBracketComment,rakuEscHash,rakuEscCloseAngle,rakuAdverb,rakuStringSQ,rakuStringDQ
    +
    +syn region rakuInnerAnglesTwo
    +    \ matchgroup=rakuStringAngles
    +    \ start="<<"
    +    \ skip="\\\@1"
    +    \ end=">>"
    +    \ transparent contained
    +    \ contains=rakuInnerAnglesTwo
    +
    +" «words»
    +syn region rakuStringFrench
    +    \ matchgroup=rakuQuote
    +    \ start="«"
    +    \ skip="\\\@1" and "«»" strings in order to override
    +" them, but before other types of strings, to avoid matching those delimiters
    +" as parts of hyperops.
    +syn match rakuHyperOp display #[^[:digit:][{('",:[:space:]][^[{('",:[:space:]]*\%(«\|<<\)#
    +syn match rakuHyperOp display "«\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+[«»]"
    +syn match rakuHyperOp display "»\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(«\|»\?\)"
    +syn match rakuHyperOp display "<<\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(<<\|>>\)"
    +syn match rakuHyperOp display ">>\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(<<\|\%(>>\)\?\)"
    +
    +" 'string'
    +syn region rakuStringSQ
    +    \ matchgroup=rakuQuote
    +    \ start="'"
    +    \ skip="\\\@1",    "rakuEscCloseAngle",   "\\%(\\\\\\@1\\|<[^>]*>\\)"],
    +  \ ["French",  "«",            "»",    "rakuEscCloseFrench",  "\\%(\\\\\\@1, @
    +syn region rakuMatchVarSigil
    +    \ matchgroup=rakuVariable
    +    \ start="[$@]\%(<<\@!\)\@="
    +    \ end=">\@1<="
    +    \ contains=rakuMatchVar
    +
    +syn region rakuMatchVar
    +    \ matchgroup=rakuTwigil
    +    \ start="<"
    +    \ end=">"
    +    \ contained
    +
    +syn region rakuRxClosure
    +    \ matchgroup=rakuNormal
    +    \ start="{"
    +    \ end="}"
    +    \ contained
    +    \ containedin=rakuRxClosure
    +    \ contains=TOP
    +syn region rakuRxGroup
    +    \ matchgroup=rakuStringSpecial2
    +    \ start="\["
    +    \ end="]"
    +    \ contained
    +    \ contains=@rakuRegexen,@rakuVariables,rakuMatchVarSigil
    +syn region rakuRxAssertion
    +    \ matchgroup=rakuStringSpecial2
    +    \ start="<\%(?\?\%(before\|after\)\|\%(\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)=\)\|[+?*]\)\?"
    +    \ end=">"
    +    \ contained
    +    \ contains=@rakuRegexen,rakuIdentifier,@rakuVariables,rakuRxCharClass,rakuRxAssertCall
    +syn region rakuRxAssertGroup
    +    \ matchgroup=rakuStringSpecial2
    +    \ start="<\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)=\["
    +    \ skip="\\\@1"
    +    \ contained keepend
    +    \ contains=TOP
    +syn match rakuRxBoundary display contained "\%([«»]\|<<\|>>\)"
    +syn region rakuRxCharClass
    +    \ matchgroup=rakuStringSpecial2
    +    \ start="\%(<[-!+?]\?\)\@2<=\["
    +    \ skip="\\]"
    +    \ end="]"
    +    \ contained
    +    \ contains=rakuRxRange,rakuRxEscape,rakuEscHex,rakuEscOct,rakuEscCodePoint,rakuEscNull
    +syn region rakuRxQuoteWords
    +    \ matchgroup=rakuStringSpecial2
    +    \ start="<\s"
    +    \ end="\s\?>"
    +    \ contained
    +syn region rakuRxAdverb
    +    \ start="\ze\z(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)"
    +    \ end="\z1\zs"
    +    \ contained keepend
    +    \ contains=TOP
    +syn region rakuRxAdverbArg
    +    \ start="\%(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\@<=("
    +    \ skip="([^)]\{-})"
    +    \ end=")"
    +    \ contained
    +    \ keepend
    +    \ contains=TOP
    +syn region rakuRxStorage
    +    \ matchgroup=rakuOperator
    +    \ start="\%(^\s*\)\@<=:\%(my\>\|temp\>\)\@="
    +    \ end="$"
    +    \ contains=TOP
    +    \ contained
    +    \ keepend
    +
    +" 'string' inside a regex
    +syn region rakuRxStringSQ
    +    \ matchgroup=rakuQuote
    +    \ start="'"
    +    \ skip="\\\@1\)\)\@="
    +syn match rakuVarSlash     display "\$/"
    +syn match rakuVarExclam    display "\$!"
    +syn match rakuVarMatch     display "\$¢"
    +syn match rakuVarNum       display "\$\d\+"
    +syn match rakuVariable     display "self"
    +syn match rakuVariable     display "[@$%&]\?[@&$%]\$*\%(::\|\%(\%([.^*?=!~]\|:\@1>\)" contained
    +syn match rakuTwigil       display "\%([.^*?=!~]\|:\@1\|\<\%(if\|unless\|while\|when\|where\|so\)\)\s*\)\@<=/[/=]\@!"
    +    \ skip="\\/"
    +    \ end="/"
    +    \ contains=@rakuRegexen,rakuVariable,rakuVarExclam,rakuVarMatch,rakuVarNum
    +
    +" m/foo/, m$foo$, m!foo!, etc
    +syn region rakuMatch
    +    \ matchgroup=rakuQuote
    +    \ start=+\z([/!$,|`"]\)+
    +    \ skip="\\\z1"
    +    \ end="\z1"
    +    \ contained
    +    \ contains=@rakuRegexen,rakuVariable,rakuVarNum
    +
    +" m, m«foo», m{foo}, etc
    +for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims
    +    exec "syn region rakuMatch matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuRegexen,@rakuVariables"
    +endfor
    +unlet s:name s:start_delim s:end_delim s:end_group s:skip
    +
    +" Substitutions
    +
    +" s/foo//, s$foo$$, s!foo!!, etc
    +syn region rakuSubstitution
    +    \ matchgroup=rakuQuote
    +    \ start=+\z([/!$,|`"]\)+
    +    \ skip="\\\z1"
    +    \ end="\z1"me=e-1
    +    \ contained
    +    \ contains=@rakuRegexen,rakuVariable,rakuVarNum
    +    \ nextgroup=rakuReplacement
    +
    +syn region rakuReplacement
    +    \ matchgroup=rakuQuote
    +    \ start="\z(.\)"
    +    \ skip="\\\z1"
    +    \ end="\z1"
    +    \ contained
    +    \ contains=@rakuInterp_qq
    +
    +" s, s«foo»«bar», s{foo}{bar}, etc
    +for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims
    +    exec "syn region rakuSubstitution matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuRegexen,@rakuVariables nextgroup=rakuRepl".s:name
    +    exec "syn region rakuRepl".s:name." matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuInterp_qq"
    +endfor
    +unlet s:name s:start_delim s:end_delim s:end_group s:skip
    +
    +" Transliteration
    +
    +" tr/foo/bar/, tr|foo|bar, etc
    +syn region rakuTransliteration
    +    \ matchgroup=rakuQuote
    +    \ start=+\z([/!$,|`"]\)+
    +    \ skip="\\\z1"
    +    \ end="\z1"me=e-1
    +    \ contained
    +    \ contains=rakuRxRange
    +    \ nextgroup=rakuTransRepl
    +
    +syn region rakuTransRepl
    +    \ matchgroup=rakuQuote
    +    \ start="\z(.\)"
    +    \ skip="\\\z1"
    +    \ end="\z1"
    +    \ contained
    +    \ contains=@rakuInterp_qq,rakuRxRange
    +
    +" tr, tr«foo»«bar», tr{foo}{bar}, etc
    +for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims
    +    exec "syn region rakuTransliteration matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=rakuRxRange nextgroup=rakuTransRepl".s:name
    +    exec "syn region rakuTransRepl".s:name." matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuInterp_qq,rakuRxRange"
    +endfor
    +unlet s:name s:start_delim s:end_delim s:end_group s:skip s:bracketing_delims
    +
    +if exists("raku_perl5_regexes") || exists("raku_extended_all")
    +
    +" Perl 5 regex regions
    +
    +syn cluster rakuRegexP5Base
    +    \ add=rakuRxP5Escape
    +    \ add=rakuRxP5Oct
    +    \ add=rakuRxP5Hex
    +    \ add=rakuRxP5EscMeta
    +    \ add=rakuRxP5CodePoint
    +    \ add=rakuRxP5Prop
    +
    +" normal regex stuff
    +syn cluster rakuRegexP5
    +    \ add=@rakuRegexP5Base
    +    \ add=rakuRxP5Quantifier
    +    \ add=rakuRxP5Meta
    +    \ add=rakuRxP5QuoteMeta
    +    \ add=rakuRxP5ParenMod
    +    \ add=rakuRxP5Verb
    +    \ add=rakuRxP5Count
    +    \ add=rakuRxP5Named
    +    \ add=rakuRxP5ReadRef
    +    \ add=rakuRxP5WriteRef
    +    \ add=rakuRxP5CharClass
    +    \ add=rakuRxP5Anchor
    +
    +" inside character classes
    +syn cluster rakuRegexP5Class
    +    \ add=@rakuRegexP5Base
    +    \ add=rakuRxP5Posix
    +    \ add=rakuRxP5Range
    +
    +syn match rakuRxP5Escape     display contained "\\\S"
    +syn match rakuRxP5CodePoint  display contained "\\c\S\@=" nextgroup=rakuRxP5CPId
    +syn match rakuRxP5CPId       display contained "\S"
    +syn match rakuRxP5Oct        display contained "\\\%(\o\{1,3}\)\@=" nextgroup=rakuRxP5OctSeq
    +syn match rakuRxP5OctSeq     display contained "\o\{1,3}"
    +syn match rakuRxP5Anchor     display contained "[\^$]"
    +syn match rakuRxP5Hex        display contained "\\x\%({\x\+}\|\x\{1,2}\)\@=" nextgroup=rakuRxP5HexSeq
    +syn match rakuRxP5HexSeq     display contained "\x\{1,2}"
    +syn region rakuRxP5HexSeq
    +    \ matchgroup=rakuRxP5Escape
    +    \ start="{"
    +    \ end="}"
    +    \ contained
    +syn region rakuRxP5Named
    +    \ matchgroup=rakuRxP5Escape
    +    \ start="\%(\\N\)\@2<={"
    +    \ end="}"
    +    \ contained
    +syn match rakuRxP5Quantifier display contained "\%([+*]\|(\@1"
    +    \ contained
    +syn match rakuRxP5WriteRef   display contained "\\g\%(\d\|{\)\@=" nextgroup=rakuRxP5WriteRefId
    +syn match rakuRxP5WriteRefId display contained "\d\+"
    +syn region rakuRxP5WriteRefId
    +    \ matchgroup=rakuRxP5Escape
    +    \ start="{"
    +    \ end="}"
    +    \ contained
    +syn match rakuRxP5Prop       display contained "\\[pP]\%(\a\|{\)\@=" nextgroup=rakuRxP5PropId
    +syn match rakuRxP5PropId     display contained "\a"
    +syn region rakuRxP5PropId
    +    \ matchgroup=rakuRxP5Escape
    +    \ start="{"
    +    \ end="}"
    +    \ contained
    +syn match rakuRxP5Meta       display contained "[(|).]"
    +syn match rakuRxP5ParenMod   display contained "(\@1<=?\@=" nextgroup=rakuRxP5Mod,rakuRxP5ModName,rakuRxP5Code
    +syn match rakuRxP5Mod        display contained "?\%(<\?=\|<\?!\|[#:|]\)"
    +syn match rakuRxP5Mod        display contained "?-\?[impsx]\+"
    +syn match rakuRxP5Mod        display contained "?\%([-+]\?\d\+\|R\)"
    +syn match rakuRxP5Mod        display contained "?(DEFINE)"
    +syn match rakuRxP5Mod        display contained "?\%(&\|P[>=]\)" nextgroup=rakuRxP5ModDef
    +syn match rakuRxP5ModDef     display contained "\h\w*"
    +syn region rakuRxP5ModName
    +    \ matchgroup=rakuStringSpecial
    +    \ start="?'"
    +    \ end="'"
    +    \ contained
    +syn region rakuRxP5ModName
    +    \ matchgroup=rakuStringSpecial
    +    \ start="?P\?<"
    +    \ end=">"
    +    \ contained
    +syn region rakuRxP5Code
    +    \ matchgroup=rakuStringSpecial
    +    \ start="??\?{"
    +    \ end="})\@="
    +    \ contained
    +    \ contains=TOP
    +syn match rakuRxP5EscMeta    display contained "\\[?*.{}()[\]|\^$]"
    +syn match rakuRxP5Count      display contained "\%({\d\+\%(,\%(\d\+\)\?\)\?}\)\@=" nextgroup=rakuRxP5CountId
    +syn region rakuRxP5CountId
    +    \ matchgroup=rakuRxP5Escape
    +    \ start="{"
    +    \ end="}"
    +    \ contained
    +syn match rakuRxP5Verb       display contained "(\@1<=\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\?\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\?\|ACCEPT\)"
    +syn region rakuRxP5QuoteMeta
    +    \ matchgroup=rakuRxP5Escape
    +    \ start="\\Q"
    +    \ end="\\E"
    +    \ contained
    +    \ contains=@rakuVariables,rakuEscBackSlash
    +syn region rakuRxP5CharClass
    +    \ matchgroup=rakuStringSpecial
    +    \ start="\[\^\?"
    +    \ skip="\\]"
    +    \ end="]"
    +    \ contained
    +    \ contains=@rakuRegexP5Class
    +syn region rakuRxP5Posix
    +    \ matchgroup=rakuRxP5Escape
    +    \ start="\[:"
    +    \ end=":]"
    +    \ contained
    +syn match rakuRxP5Range      display contained "-"
    +
    +" m:P5//
    +syn region rakuMatch
    +    \ matchgroup=rakuQuote
    +    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2
    +syn region rakuMatch
    +    \ matchgroup=rakuQuote
    +    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2\@!"
    +    \ skip="\\>"
    +    \ end=">"
    +    \ contains=@rakuRegexP5,rakuVariables
    +
    +" m:P5«»
    +syn region rakuMatch
    +    \ matchgroup=rakuQuote
    +    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2]*>"
    +    \ end=">"
    +    \ contains=rakuAttention,rakuBracketComment
    +syn region rakuBracketComment
    +    \ start="#[`|=]«"
    +    \ skip="«[^»]*»"
    +    \ end="»"
    +    \ contains=rakuAttention,rakuBracketComment
    +
    +" Comments with double and triple delimiters
    +syn region rakuBracketComment
    +    \ matchgroup=rakuBracketComment
    +    \ start="#[`|=](("
    +    \ skip="((\%([^)\|))\@!]\)*))"
    +    \ end="))"
    +    \ contains=rakuAttention,rakuBracketComment
    +syn region rakuBracketComment
    +    \ matchgroup=rakuBracketComment
    +    \ start="#[`|=]((("
    +    \ skip="(((\%([^)]\|)\%())\)\@!\)*)))"
    +    \ end=")))"
    +    \ contains=rakuAttention,rakuBracketComment
    +
    +syn region rakuBracketComment
    +    \ matchgroup=rakuBracketComment
    +    \ start="#[`|=]\[\["
    +    \ skip="\[\[\%([^\]]\|]]\@!\)*]]"
    +    \ end="]]"
    +    \ contains=rakuAttention,rakuBracketComment
    +syn region rakuBracketComment
    +    \ matchgroup=rakuBracketComment
    +    \ start="#[`|=]\[\[\["
    +    \ skip="\[\[\[\%([^\]]\|]\%(]]\)\@!\)*]]]"
    +    \ end="]]]"
    +    \ contains=rakuAttention,rakuBracketComment
    +
    +syn region rakuBracketComment
    +    \ matchgroup=rakuBracketComment
    +    \ start="#[`|=]{{"
    +    \ skip="{{\%([^}]\|}}\@!\)*}}"
    +    \ end="}}"
    +    \ contains=rakuAttention,rakuBracketComment
    +syn region rakuBracketComment
    +    \ matchgroup=rakuBracketComment
    +    \ start="#[`|=]{{{"
    +    \ skip="{{{\%([^}]\|}\%(}}\)\@!\)*}}}"
    +    \ end="}}}"
    +    \ contains=rakuAttention,rakuBracketComment
    +
    +syn region rakuBracketComment
    +    \ matchgroup=rakuBracketComment
    +    \ start="#[`|=]<<"
    +    \ skip="<<\%([^>]\|>>\@!\)*>>"
    +    \ end=">>"
    +    \ contains=rakuAttention,rakuBracketComment
    +syn region rakuBracketComment
    +    \ matchgroup=rakuBracketComment
    +    \ start="#[`|=]<<<"
    +    \ skip="<<<\%([^>]\|>\%(>>\)\@!\)*>>>"
    +    \ end=">>>"
    +    \ contains=rakuAttention,rakuBracketComment
    +
    +syn region rakuBracketComment
    +    \ matchgroup=rakuBracketComment
    +    \ start="#[`|=]««"
    +    \ skip="««\%([^»]\|»»\@!\)*»»"
    +    \ end="»»"
    +    \ contains=rakuAttention,rakuBracketComment
    +syn region rakuBracketComment
    +    \ matchgroup=rakuBracketComment
    +    \ start="#[`|=]«««"
    +    \ skip="«««\%([^»]\|»\%(»»\)\@!\)*»»»"
    +    \ end="»»»"
    +    \ contains=rakuAttention,rakuBracketComment
    +
    +syn match rakuShebang display "\%^#!.*"
    +
    +" => autoquoting
    +syn match rakuStringAuto   display "\.\@1"
    +syn match rakuStringAuto   display "\.\@1"
    +syn match rakuStringAuto   display "\.\@1"
    +
    +" Pod
    +
    +" Abbreviated blocks (implicit code forbidden)
    +syn region rakuPodAbbrRegion
    +    \ matchgroup=rakuPodPrefix
    +    \ start="^\s*\zs=\ze\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contains=rakuPodAbbrNoCodeType
    +    \ keepend
    +
    +syn region rakuPodAbbrNoCodeType
    +    \ matchgroup=rakuPodType
    +    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contained
    +    \ contains=rakuPodName,rakuPodAbbrNoCode
    +
    +syn match rakuPodName contained ".\+" contains=@rakuPodFormat
    +syn match rakuPodComment contained ".\+"
    +
    +syn region rakuPodAbbrNoCode
    +    \ start="^"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contained
    +    \ contains=@rakuPodFormat
    +
    +" Abbreviated blocks (everything is code)
    +syn region rakuPodAbbrRegion
    +    \ matchgroup=rakuPodPrefix
    +    \ start="^\s*\zs=\zecode\>"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contains=rakuPodAbbrCodeType
    +    \ keepend
    +
    +syn region rakuPodAbbrCodeType
    +    \ matchgroup=rakuPodType
    +    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contained
    +    \ contains=rakuPodName,rakuPodAbbrCode
    +
    +syn region rakuPodAbbrCode
    +    \ start="^"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contained
    +
    +" Abbreviated blocks (everything is a comment)
    +syn region rakuPodAbbrRegion
    +    \ matchgroup=rakuPodPrefix
    +    \ start="^=\zecomment\>"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contains=rakuPodAbbrCommentType
    +    \ keepend
    +
    +syn region rakuPodAbbrCommentType
    +    \ matchgroup=rakuPodType
    +    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contained
    +    \ contains=rakuPodComment,rakuPodAbbrNoCode
    +
    +" Abbreviated blocks (implicit code allowed)
    +syn region rakuPodAbbrRegion
    +    \ matchgroup=rakuPodPrefix
    +    \ start="^=\ze\%(pod\|item\|nested\|\u\+\)\>"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contains=rakuPodAbbrType
    +    \ keepend
    +
    +syn region rakuPodAbbrType
    +    \ matchgroup=rakuPodType
    +    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contained
    +    \ contains=rakuPodName,rakuPodAbbr
    +
    +syn region rakuPodAbbr
    +    \ start="^"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contained
    +    \ contains=@rakuPodFormat,rakuPodImplicitCode
    +
    +" Abbreviated block to end-of-file
    +syn region rakuPodAbbrRegion
    +    \ matchgroup=rakuPodPrefix
    +    \ start="^=\zeEND\>"
    +    \ end="\%$"
    +    \ contains=rakuPodAbbrEOFType
    +    \ keepend
    +
    +syn region rakuPodAbbrEOFType
    +    \ matchgroup=rakuPodType
    +    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +    \ end="\%$"
    +    \ contained
    +    \ contains=rakuPodName,rakuPodAbbrEOF
    +
    +syn region rakuPodAbbrEOF
    +    \ start="^"
    +    \ end="\%$"
    +    \ contained
    +    \ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode
    +
    +" Directives
    +syn region rakuPodDirectRegion
    +    \ matchgroup=rakuPodPrefix
    +    \ start="^=\%(config\|use\)\>"
    +    \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)"
    +    \ contains=rakuPodDirectArgRegion
    +    \ keepend
    +
    +syn region rakuPodDirectArgRegion
    +    \ matchgroup=rakuPodType
    +    \ start="\S\+"
    +    \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)"
    +    \ contained
    +    \ contains=rakuPodDirectConfigRegion
    +
    +syn region rakuPodDirectConfigRegion
    +    \ start=""
    +    \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)"
    +    \ contained
    +    \ contains=@rakuPodConfig
    +
    +" =encoding is a special directive
    +syn region rakuPodDirectRegion
    +    \ matchgroup=rakuPodPrefix
    +    \ start="^=encoding\>"
    +    \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)"
    +    \ contains=rakuPodEncodingArgRegion
    +    \ keepend
    +
    +syn region rakuPodEncodingArgRegion
    +    \ matchgroup=rakuPodName
    +    \ start="\S\+"
    +    \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)"
    +    \ contained
    +
    +" Paragraph blocks (implicit code forbidden)
    +syn region rakuPodParaRegion
    +    \ matchgroup=rakuPodPrefix
    +    \ start="^\s*\zs=for\>"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contains=rakuPodParaNoCodeTypeRegion
    +    \ keepend extend
    +
    +syn region rakuPodParaNoCodeTypeRegion
    +    \ matchgroup=rakuPodType
    +    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +    \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contained
    +    \ contains=rakuPodParaNoCode,rakuPodParaConfigRegion
    +
    +syn region rakuPodParaConfigRegion
    +    \ start=""
    +    \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\@1\ze\s*code\>"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contains=rakuPodParaCodeTypeRegion
    +    \ keepend extend
    +
    +syn region rakuPodParaCodeTypeRegion
    +    \ matchgroup=rakuPodType
    +    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +    \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contained
    +    \ contains=rakuPodParaCode,rakuPodParaConfigRegion
    +
    +syn region rakuPodParaCode
    +    \ start="^[^=]"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contained
    +
    +" Paragraph blocks (implicit code allowed)
    +syn region rakuPodParaRegion
    +    \ matchgroup=rakuPodPrefix
    +    \ start="^\s*\zs=for\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>"
    +    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contains=rakuPodParaTypeRegion
    +    \ keepend extend
    +
    +syn region rakuPodParaTypeRegion
    +    \ matchgroup=rakuPodType
    +    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +    \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contained
    +    \ contains=rakuPodPara,rakuPodParaConfigRegion
    +
    +syn region rakuPodPara
    +    \ start="^[^=]"
    +    \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
    +    \ contained
    +    \ contains=@rakuPodFormat,rakuPodImplicitCode
    +
    +" Paragraph block to end-of-file
    +syn region rakuPodParaRegion
    +    \ matchgroup=rakuPodPrefix
    +    \ start="^=for\>\ze\s\+END\>"
    +    \ end="\%$"
    +    \ contains=rakuPodParaEOFTypeRegion
    +    \ keepend extend
    +
    +syn region rakuPodParaEOFTypeRegion
    +    \ matchgroup=rakuPodType
    +    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +    \ end="\%$"
    +    \ contained
    +    \ contains=rakuPodParaEOF,rakuPodParaConfigRegion
    +
    +syn region rakuPodParaEOF
    +    \ start="^[^=]"
    +    \ end="\%$"
    +    \ contained
    +    \ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode
    +
    +" Delimited blocks (implicit code forbidden)
    +syn region rakuPodDelimRegion
    +    \ matchgroup=rakuPodPrefix
    +    \ start="^\z(\s*\)\zs=begin\>"
    +    \ end="^\z1\zs=end\>"
    +    \ contains=rakuPodDelimNoCodeTypeRegion
    +    \ keepend extend skipwhite
    +    \ nextgroup=rakuPodType
    +
    +syn region rakuPodDelimNoCodeTypeRegion
    +    \ matchgroup=rakuPodType
    +    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +    \ end="^\s*\zs\ze=end\>"
    +    \ contained
    +    \ contains=rakuPodDelimNoCode,rakuPodDelimConfigRegion
    +
    +syn region rakuPodDelimConfigRegion
    +    \ start=""
    +    \ end="^\s*\zs\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)"
    +    \ contained
    +    \ contains=@rakuPodConfig
    +
    +syn region rakuPodDelimNoCode
    +    \ start="^"
    +    \ end="^\s*\zs\ze=end\>"
    +    \ contained
    +    \ contains=@rakuPodNestedBlocks,@rakuPodFormat
    +
    +" Delimited blocks (everything is code)
    +syn region rakuPodDelimRegion
    +    \ matchgroup=rakuPodPrefix
    +    \ start="^\z(\s*\)\zs=begin\>\ze\s*code\>"
    +    \ end="^\z1\zs=end\>"
    +    \ contains=rakuPodDelimCodeTypeRegion
    +    \ keepend extend skipwhite
    +    \ nextgroup=rakuPodType
    +
    +syn region rakuPodDelimCodeTypeRegion
    +    \ matchgroup=rakuPodType
    +    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +    \ end="^\s*\zs\ze=end\>"
    +    \ contained
    +    \ contains=rakuPodDelimCode,rakuPodDelimConfigRegion
    +
    +syn region rakuPodDelimCode
    +    \ start="^"
    +    \ end="^\s*\zs\ze=end\>"
    +    \ contained
    +    \ contains=@rakuPodNestedBlocks
    +
    +" Delimited blocks (implicit code allowed)
    +syn region rakuPodDelimRegion
    +    \ matchgroup=rakuPodPrefix
    +    \ start="^\z(\s*\)\zs=begin\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>"
    +    \ end="^\z1\zs=end\>"
    +    \ contains=rakuPodDelimTypeRegion
    +    \ keepend extend skipwhite
    +    \ nextgroup=rakuPodType
    +
    +syn region rakuPodDelimTypeRegion
    +    \ matchgroup=rakuPodType
    +    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +    \ end="^\s*\zs\ze=end\>"
    +    \ contained
    +    \ contains=rakuPodDelim,rakuPodDelimConfigRegion
    +
    +syn region rakuPodDelim
    +    \ start="^"
    +    \ end="^\s*\zs\ze=end\>"
    +    \ contained
    +    \ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode
    +
    +" Delimited block to end-of-file
    +syn region rakuPodDelimRegion
    +    \ matchgroup=rakuPodPrefix
    +    \ start="^=begin\>\ze\s\+END\>"
    +    \ end="\%$"
    +    \ extend
    +    \ contains=rakuPodDelimEOFTypeRegion
    +
    +syn region rakuPodDelimEOFTypeRegion
    +    \ matchgroup=rakuPodType
    +    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +    \ end="\%$"
    +    \ contained
    +    \ contains=rakuPodDelimEOF,rakuPodDelimConfigRegion
    +
    +syn region rakuPodDelimEOF
    +    \ start="^"
    +    \ end="\%$"
    +    \ contained
    +    \ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode
    +
    +syn cluster rakuPodConfig
    +    \ add=rakuPodConfigOperator
    +    \ add=rakuPodExtraConfig
    +    \ add=rakuStringAuto
    +    \ add=rakuPodAutoQuote
    +    \ add=rakuStringSQ
    +
    +syn region rakuPodParens
    +    \ start="("
    +    \ end=")"
    +    \ contained
    +    \ contains=rakuNumber,rakuStringSQ
    +
    +syn match rakuPodAutoQuote      display contained "=>"
    +syn match rakuPodConfigOperator display contained ":!\?" nextgroup=rakuPodConfigOption
    +syn match rakuPodConfigOption   display contained "[^[:space:](<]\+" nextgroup=rakuPodParens,rakuStringAngle
    +syn match rakuPodExtraConfig    display contained "^="
    +syn match rakuPodVerticalBar    display contained "|"
    +syn match rakuPodColon          display contained ":"
    +syn match rakuPodSemicolon      display contained ";"
    +syn match rakuPodComma          display contained ","
    +syn match rakuPodImplicitCode   display contained "^\s.*"
    +syn match rakuPodType           display contained "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
    +
    +" These may appear inside delimited blocks
    +syn cluster rakuPodNestedBlocks
    +    \ add=rakuPodAbbrRegion
    +    \ add=rakuPodDirectRegion
    +    \ add=rakuPodParaRegion
    +    \ add=rakuPodDelimRegion
    +
    +" Pod formatting codes
    +
    +syn cluster rakuPodFormat
    +    \ add=rakuPodFormatOne
    +    \ add=rakuPodFormatTwo
    +    \ add=rakuPodFormatThree
    +    \ add=rakuPodFormatFrench
    +
    +" Balanced angles found inside formatting codes. Ensures proper nesting.
    +
    +syn region rakuPodFormatAnglesOne
    +    \ matchgroup=rakuPodFormat
    +    \ start="<"
    +    \ skip="<[^>]*>"
    +    \ end=">"
    +    \ transparent contained
    +    \ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne
    +
    +syn region rakuPodFormatAnglesTwo
    +    \ matchgroup=rakuPodFormat
    +    \ start="<<"
    +    \ skip="<<[^>]*>>"
    +    \ end=">>"
    +    \ transparent contained
    +    \ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne,rakuPodFormatAnglesTwo
    +
    +syn region rakuPodFormatAnglesThree
    +    \ matchgroup=rakuPodFormat
    +    \ start="<<<"
    +    \ skip="<<<[^>]*>>>"
    +    \ end=">>>"
    +    \ transparent contained
    +    \ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne,rakuPodFormatAnglesTwo,rakuPodFormatAnglesThree
    +
    +syn region rakuPodFormatAnglesFrench
    +    \ matchgroup=rakuPodFormat
    +    \ start="«"
    +    \ skip="«[^»]*»"
    +    \ end="»"
    +    \ transparent contained
    +    \ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne,rakuPodFormatAnglesTwo,rakuPodFormatAnglesThree
    +
    +" All formatting codes
    +
    +syn region rakuPodFormatOne
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="\u<"
    +    \ skip="<[^>]*>"
    +    \ end=">"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne
    +
    +syn region rakuPodFormatTwo
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="\u<<"
    +    \ skip="<<[^>]*>>"
    +    \ end=">>"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo
    +
    +syn region rakuPodFormatThree
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="\u<<<"
    +    \ skip="<<<[^>]*>>>"
    +    \ end=">>>"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree
    +
    +syn region rakuPodFormatFrench
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="\u«"
    +    \ skip="«[^»]*»"
    +    \ end="»"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree
    +
    +" C<> and V<> don't allow nested formatting formatting codes
    +
    +syn region rakuPodFormatOne
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="[CV]<"
    +    \ skip="<[^>]*>"
    +    \ end=">"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesOne
    +
    +syn region rakuPodFormatTwo
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="[CV]<<"
    +    \ skip="<<[^>]*>>"
    +    \ end=">>"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesTwo
    +
    +syn region rakuPodFormatThree
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="[CV]<<<"
    +    \ skip="<<<[^>]*>>>"
    +    \ end=">>>"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesThree
    +
    +syn region rakuPodFormatFrench
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="[CV]«"
    +    \ skip="«[^»]*»"
    +    \ end="»"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesFrench
    +
    +" L<> can have a "|" separator
    +
    +syn region rakuPodFormatOne
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="L<"
    +    \ skip="<[^>]*>"
    +    \ end=">"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodVerticalBar
    +
    +syn region rakuPodFormatTwo
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="L<<"
    +    \ skip="<<[^>]*>>"
    +    \ end=">>"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodVerticalBar
    +
    +syn region rakuPodFormatThree
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="L<<<"
    +    \ skip="<<<[^>]*>>>"
    +    \ end=">>>"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar
    +
    +syn region rakuPodFormatFrench
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="L«"
    +    \ skip="«[^»]*»"
    +    \ end="»"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar
    +
    +" E<> can have a ";" separator
    +
    +syn region rakuPodFormatOne
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="E<"
    +    \ skip="<[^>]*>"
    +    \ end=">"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodSemiColon
    +
    +syn region rakuPodFormatTwo
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="E<<"
    +    \ skip="<<[^>]*>>"
    +    \ end=">>"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodSemiColon
    +
    +syn region rakuPodFormatThree
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="E<<<"
    +    \ skip="<<<[^>]*>>>"
    +    \ end=">>>"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodSemiColon
    +
    +syn region rakuPodFormatFrench
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="E«"
    +    \ skip="«[^»]*»"
    +    \ end="»"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodSemiColon
    +
    +" M<> can have a ":" separator
    +
    +syn region rakuPodFormatOne
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="M<"
    +    \ skip="<[^>]*>"
    +    \ end=">"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodColon
    +
    +syn region rakuPodFormatTwo
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="M<<"
    +    \ skip="<<[^>]*>>"
    +    \ end=">>"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodColon
    +
    +syn region rakuPodFormatThree
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="M<<<"
    +    \ skip="<<<[^>]*>>>"
    +    \ end=">>>"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodColon
    +
    +syn region rakuPodFormatFrench
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="M«"
    +    \ skip="«[^»]*»"
    +    \ end="»"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodColon
    +
    +" D<> can have "|" and ";" separators
    +
    +syn region rakuPodFormatOne
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="D<"
    +    \ skip="<[^>]*>"
    +    \ end=">"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodVerticalBar,rakuPodSemiColon
    +
    +syn region rakuPodFormatTwo
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="D<<"
    +    \ skip="<<[^>]*>>"
    +    \ end=">>"
    +    \ contained
    +    \ contains=rakuPodFormatAngleTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodVerticalBar,rakuPodSemiColon
    +
    +syn region rakuPodFormatThree
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="D<<<"
    +    \ skip="<<<[^>]*>>>"
    +    \ end=">>>"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon
    +
    +syn region rakuPodFormatFrench
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="D«"
    +    \ skip="«[^»]*»"
    +    \ end="»"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon
    +
    +" X<> can have "|", "," and ";" separators
    +
    +syn region rakuPodFormatOne
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="X<"
    +    \ skip="<[^>]*>"
    +    \ end=">"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma
    +
    +syn region rakuPodFormatTwo
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="X<<"
    +    \ skip="<<[^>]*>>"
    +    \ end=">>"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma
    +
    +syn region rakuPodFormatThree
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="X<<<"
    +    \ skip="<<<[^>]*>>>"
    +    \ end=">>>"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma
    +
    +syn region rakuPodFormatFrench
    +    \ matchgroup=rakuPodFormatCode
    +    \ start="X«"
    +    \ skip="«[^»]*»"
    +    \ end="»"
    +    \ contained
    +    \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma
    +
    +" Define the default highlighting.
    +" For version 5.7 and earlier: only when not done already
    +" For version 5.8 and later: only when an item doesn't have highlighting yet
    +if version >= 508 || !exists("did_raku_syntax_inits")
    +    if version < 508
    +        let did_raku_syntax_inits = 1
    +        command -nargs=+ HiLink hi link 
    +    else
    +        command -nargs=+ HiLink hi def link 
    +    endif
    +
    +    HiLink rakuEscOctOld        rakuError
    +    HiLink rakuPackageTwigil    rakuTwigil
    +    HiLink rakuStringAngle      rakuString
    +    HiLink rakuStringAngleFixed rakuString
    +    HiLink rakuStringFrench     rakuString
    +    HiLink rakuStringAngles     rakuString
    +    HiLink rakuStringSQ         rakuString
    +    HiLink rakuStringDQ         rakuString
    +    HiLink rakuStringQ          rakuString
    +    HiLink rakuStringQ_q        rakuString
    +    HiLink rakuStringQ_qww      rakuString
    +    HiLink rakuStringQ_qq       rakuString
    +    HiLink rakuStringQ_to       rakuString
    +    HiLink rakuStringQ_qto      rakuString
    +    HiLink rakuStringQ_qqto     rakuString
    +    HiLink rakuRxStringSQ       rakuString
    +    HiLink rakuRxStringDQ       rakuString
    +    HiLink rakuReplacement      rakuString
    +    HiLink rakuReplCurly        rakuString
    +    HiLink rakuReplAngle        rakuString
    +    HiLink rakuReplFrench       rakuString
    +    HiLink rakuReplBracket      rakuString
    +    HiLink rakuReplParen        rakuString
    +    HiLink rakuTransliteration  rakuString
    +    HiLink rakuTransRepl        rakuString
    +    HiLink rakuTransReplCurly   rakuString
    +    HiLink rakuTransReplAngle   rakuString
    +    HiLink rakuTransReplFrench  rakuString
    +    HiLink rakuTransReplBracket rakuString
    +    HiLink rakuTransReplParen   rakuString
    +    HiLink rakuStringAuto       rakuString
    +    HiLink rakuKey              rakuString
    +    HiLink rakuMatch            rakuString
    +    HiLink rakuSubstitution     rakuString
    +    HiLink rakuMatchBare        rakuString
    +    HiLink rakuRegexBlock       rakuString
    +    HiLink rakuRxP5CharClass    rakuString
    +    HiLink rakuRxP5QuoteMeta    rakuString
    +    HiLink rakuRxCharClass      rakuString
    +    HiLink rakuRxQuoteWords     rakuString
    +    HiLink rakuReduceOp         rakuOperator
    +    HiLink rakuSetOp            rakuOperator
    +    HiLink rakuRSXZOp           rakuOperator
    +    HiLink rakuHyperOp          rakuOperator
    +    HiLink rakuPostHyperOp      rakuOperator
    +    HiLink rakuQuoteQ           rakuQuote
    +    HiLink rakuQuoteQ_q         rakuQuote
    +    HiLink rakuQuoteQ_qww       rakuQuote
    +    HiLink rakuQuoteQ_qq        rakuQuote
    +    HiLink rakuQuoteQ_to        rakuQuote
    +    HiLink rakuQuoteQ_qto       rakuQuote
    +    HiLink rakuQuoteQ_qqto      rakuQuote
    +    HiLink rakuQuoteQ_PIR       rakuQuote
    +    HiLink rakuMatchStart_m     rakuQuote
    +    HiLink rakuMatchStart_s     rakuQuote
    +    HiLink rakuMatchStart_tr    rakuQuote
    +    HiLink rakuBareSigil        rakuVariable
    +    HiLink rakuRxRange          rakuStringSpecial
    +    HiLink rakuRxAnchor         rakuStringSpecial
    +    HiLink rakuRxBoundary       rakuStringSpecial
    +    HiLink rakuRxP5Anchor       rakuStringSpecial
    +    HiLink rakuCodePoint        rakuStringSpecial
    +    HiLink rakuRxMeta           rakuStringSpecial
    +    HiLink rakuRxP5Range        rakuStringSpecial
    +    HiLink rakuRxP5CPId         rakuStringSpecial
    +    HiLink rakuRxP5Posix        rakuStringSpecial
    +    HiLink rakuRxP5Mod          rakuStringSpecial
    +    HiLink rakuRxP5HexSeq       rakuStringSpecial
    +    HiLink rakuRxP5OctSeq       rakuStringSpecial
    +    HiLink rakuRxP5WriteRefId   rakuStringSpecial
    +    HiLink rakuHexSequence      rakuStringSpecial
    +    HiLink rakuOctSequence      rakuStringSpecial
    +    HiLink rakuRxP5Named        rakuStringSpecial
    +    HiLink rakuRxP5PropId       rakuStringSpecial
    +    HiLink rakuRxP5Quantifier   rakuStringSpecial
    +    HiLink rakuRxP5CountId      rakuStringSpecial
    +    HiLink rakuRxP5Verb         rakuStringSpecial
    +    HiLink rakuRxAssertGroup    rakuStringSpecial2
    +    HiLink rakuEscape           rakuStringSpecial2
    +    HiLink rakuEscNull          rakuStringSpecial2
    +    HiLink rakuEscHash          rakuStringSpecial2
    +    HiLink rakuEscQQ            rakuStringSpecial2
    +    HiLink rakuEscQuote         rakuStringSpecial2
    +    HiLink rakuEscDoubleQuote   rakuStringSpecial2
    +    HiLink rakuEscBackTick      rakuStringSpecial2
    +    HiLink rakuEscForwardSlash  rakuStringSpecial2
    +    HiLink rakuEscVerticalBar   rakuStringSpecial2
    +    HiLink rakuEscExclamation   rakuStringSpecial2
    +    HiLink rakuEscDollar        rakuStringSpecial2
    +    HiLink rakuEscOpenCurly     rakuStringSpecial2
    +    HiLink rakuEscCloseCurly    rakuStringSpecial2
    +    HiLink rakuEscCloseBracket  rakuStringSpecial2
    +    HiLink rakuEscCloseAngle    rakuStringSpecial2
    +    HiLink rakuEscCloseFrench   rakuStringSpecial2
    +    HiLink rakuEscBackSlash     rakuStringSpecial2
    +    HiLink rakuEscCodePoint     rakuStringSpecial2
    +    HiLink rakuEscOct           rakuStringSpecial2
    +    HiLink rakuEscHex           rakuStringSpecial2
    +    HiLink rakuRxEscape         rakuStringSpecial2
    +    HiLink rakuRxCapture        rakuStringSpecial2
    +    HiLink rakuRxAlternation    rakuStringSpecial2
    +    HiLink rakuRxP5             rakuStringSpecial2
    +    HiLink rakuRxP5ReadRef      rakuStringSpecial2
    +    HiLink rakuRxP5Oct          rakuStringSpecial2
    +    HiLink rakuRxP5Hex          rakuStringSpecial2
    +    HiLink rakuRxP5EscMeta      rakuStringSpecial2
    +    HiLink rakuRxP5Meta         rakuStringSpecial2
    +    HiLink rakuRxP5Escape       rakuStringSpecial2
    +    HiLink rakuRxP5CodePoint    rakuStringSpecial2
    +    HiLink rakuRxP5WriteRef     rakuStringSpecial2
    +    HiLink rakuRxP5Prop         rakuStringSpecial2
    +
    +    HiLink rakuProperty       Tag
    +    HiLink rakuAttention      Todo
    +    HiLink rakuType           Type
    +    HiLink rakuError          Error
    +    HiLink rakuBlockLabel     Label
    +    HiLink rakuNormal         Normal
    +    HiLink rakuIdentifier     Normal
    +    HiLink rakuPackage        Normal
    +    HiLink rakuPackageScope   Normal
    +    HiLink rakuNumber         Number
    +    HiLink rakuOctNumber      Number
    +    HiLink rakuBinNumber      Number
    +    HiLink rakuHexNumber      Number
    +    HiLink rakuDecNumber      Number
    +    HiLink rakuString         String
    +    HiLink rakuRepeat         Repeat
    +    HiLink rakuPragma         Keyword
    +    HiLink rakuPreDeclare     Keyword
    +    HiLink rakuDeclare        Keyword
    +    HiLink rakuDeclareRegex   Keyword
    +    HiLink rakuVarStorage     Special
    +    HiLink rakuFlowControl    Special
    +    HiLink rakuOctBase        Special
    +    HiLink rakuBinBase        Special
    +    HiLink rakuHexBase        Special
    +    HiLink rakuDecBase        Special
    +    HiLink rakuTwigil         Special
    +    HiLink rakuStringSpecial2 Special
    +    HiLink rakuVersion        Special
    +    HiLink rakuComment        Comment
    +    HiLink rakuBracketComment Comment
    +    HiLink rakuInclude        Include
    +    HiLink rakuShebang        PreProc
    +    HiLink rakuClosureTrait   PreProc
    +    HiLink rakuOperator       Operator
    +    HiLink rakuContext        Operator
    +    HiLink rakuQuote          Delimiter
    +    HiLink rakuTypeConstraint PreCondit
    +    HiLink rakuException      Exception
    +    HiLink rakuVariable       Identifier
    +    HiLink rakuVarSlash       Identifier
    +    HiLink rakuVarNum         Identifier
    +    HiLink rakuVarExclam      Identifier
    +    HiLink rakuVarMatch       Identifier
    +    HiLink rakuVarName        Identifier
    +    HiLink rakuMatchVar       Identifier
    +    HiLink rakuRxP5ReadRefId  Identifier
    +    HiLink rakuRxP5ModDef     Identifier
    +    HiLink rakuRxP5ModName    Identifier
    +    HiLink rakuConditional    Conditional
    +    HiLink rakuStringSpecial  SpecialChar
    +
    +    HiLink rakuPodAbbr         rakuPod
    +    HiLink rakuPodAbbrEOF      rakuPod
    +    HiLink rakuPodAbbrNoCode   rakuPod
    +    HiLink rakuPodAbbrCode     rakuPodCode
    +    HiLink rakuPodPara         rakuPod
    +    HiLink rakuPodParaEOF      rakuPod
    +    HiLink rakuPodParaNoCode   rakuPod
    +    HiLink rakuPodParaCode     rakuPodCode
    +    HiLink rakuPodDelim        rakuPod
    +    HiLink rakuPodDelimEOF     rakuPod
    +    HiLink rakuPodDelimNoCode  rakuPod
    +    HiLink rakuPodDelimCode    rakuPodCode
    +    HiLink rakuPodImplicitCode rakuPodCode
    +    HiLink rakuPodExtraConfig  rakuPodPrefix
    +    HiLink rakuPodVerticalBar  rakuPodFormatCode
    +    HiLink rakuPodColon        rakuPodFormatCode
    +    HiLink rakuPodSemicolon    rakuPodFormatCode
    +    HiLink rakuPodComma        rakuPodFormatCode
    +    HiLink rakuPodFormatOne    rakuPodFormat
    +    HiLink rakuPodFormatTwo    rakuPodFormat
    +    HiLink rakuPodFormatThree  rakuPodFormat
    +    HiLink rakuPodFormatFrench rakuPodFormat
    +
    +    HiLink rakuPodType           Type
    +    HiLink rakuPodConfigOption   String
    +    HiLink rakuPodCode           PreProc
    +    HiLink rakuPod               Comment
    +    HiLink rakuPodComment        Comment
    +    HiLink rakuPodAutoQuote      Operator
    +    HiLink rakuPodConfigOperator Operator
    +    HiLink rakuPodPrefix         Statement
    +    HiLink rakuPodName           Identifier
    +    HiLink rakuPodFormatCode     SpecialChar
    +    HiLink rakuPodFormat         SpecialComment
    +
    +    delcommand HiLink
    +endif
    +
    +if exists("raku_fold") || exists("raku_extended_all")
    +    setl foldmethod=syntax
    +    syn region rakuBlockFold
    +        \ start="^\z(\s*\)\%(my\|our\|augment\|multi\|proto\|only\)\?\s*\%(\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\s\+\)\?\<\%(CATCH\|try\|ENTER\|LEAVE\|CHECK\|INIT\|BEGIN\|END\|KEEP\|UNDO\|PRE\|POST\|module\|package\|enum\|subset\|class\|sub\%(method\)\?\|multi\|method\|slang\|grammar\|regex\|token\|rule\)\>[^{]\+\%({\s*\%(#.*\)\?\)\?$"
    +        \ end="^\z1}"
    +        \ transparent fold keepend extend
    +endif
    +
    +let b:current_syntax = "raku"
    +
    +let &cpo = s:keepcpo
    +unlet s:keepcpo
    +
    +" vim:ts=8:sts=4:sw=4:expandtab:ft=vim
    diff --git a/.config/vim/syntax/raml.vim b/.config/vim/syntax/raml.vim
    new file mode 100644
    index 0000000..062a71c
    --- /dev/null
    +++ b/.config/vim/syntax/raml.vim
    @@ -0,0 +1,106 @@
    +" Vim syntax file
    +" Language:    RAML (RESTful API Modeling Language)
    +" Maintainer:  Eric Hopkins 
    +" URL:         https://github.com/in3d/vim-raml
    +" License:     Same as Vim
    +" Last Change: 2018-11-03
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn keyword ramlTodo            contained TODO FIXME XXX NOTE
    +
    +syn region  ramlComment         display oneline start='\%(^\|\s\)#' end='$'
    +                                \ contains=ramlTodo,@Spell
    +
    +syn region  ramlVersion         display oneline start='#%RAML' end='$'
    +
    +syn match   ramlNodeProperty    '!\%(![^\\^%     ]\+\|[^!][^:/   ]*\)'
    +
    +syn match   ramlAnchor          '&.\+'
    +
    +syn match   ramlAlias           '\*.\+'
    +
    +syn match   ramlDelimiter       '[-,:]'
    +syn match   ramlBlock           '[\[\]{}>|]'
    +syn match   ramlOperator        '[?+-]'
    +syn match   ramlKey             '\h\+\(?\)\?\ze\s*:'
    +syn match   ramlKey             '\w\+\(\s\+\w\+\)*\(?\)\?\ze\s*:'
    +syn match   routeKey            '\/\w\+\(\s\+\w\+\)*\ze\s*:'
    +syn match   routeKey            'application\/\w\+\ze\s*:'
    +syn match   routeParamKey       '\/{\w\+}*\ze\s*:'
    +
    +syn region  ramlString          matchgroup=ramlStringDelimiter
    +                                \ start=+\s"+ skip=+\\"+ end=+"+
    +                                \ contains=ramlEscape
    +syn region  ramlString          matchgroup=ramlStringDelimiter
    +                                \ start=+\s'+ skip=+''+ end=+'+
    +                                \ contains=ramlStringEscape
    +syn region  ramlParameter       matchgroup=ramlParameterDelimiter
    +                                \ start=+<<+ skip=+''+ end=+>>+
    +syn match   ramlEscape          contained display +\\[\\"abefnrtv^0_ NLP]+
    +syn match   ramlEscape          contained display '\\x\x\{2}'
    +syn match   ramlEscape          contained display '\\u\x\{4}'
    +syn match   ramlEscape          contained display '\\U\x\{8}'
    +syn match   ramlEscape          display '\\\%(\r\n\|[\r\n]\)'
    +syn match   ramlStringEscape    contained +''+
    +
    +syn match   ramlNumber          display
    +                                \ '\<[+-]\=\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\='
    +syn match   ramlNumber          display '0\o\+'
    +syn match   ramlNumber          display '0x\x\+'
    +syn match   ramlNumber          display '([+-]\=[iI]nf)'
    +syn match   ramlNumber          display '(NaN)'
    +
    +syn match   ramlConstant        '\<[~yn]\>'
    +syn keyword ramlConstant        true True TRUE false False FALSE
    +syn keyword ramlConstant        yes Yes on ON no No off OFF
    +syn keyword ramlConstant        null Null NULL nil Nil NIL
    +
    +syn keyword httpVerbs           get post put delete head patch options
    +syn keyword ramlTypes           string number integer date boolean file
    +
    +syn match   ramlTimestamp       '\d\d\d\d-\%(1[0-2]\|\d\)-\%(3[0-2]\|2\d\|1\d\|\d\)\%( \%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\d\d [+-]\%([01]\d\|2[0-3]\):[0-5]\d\|t\%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\d\d[+-]\%([01]\d\|2[0-3]\):[0-5]\d\|T\%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\dZ\)\='
    +
    +syn region  ramlDocumentHeader  start='---' end='$' contains=ramlDirective
    +syn match   ramlDocumentEnd     '\.\.\.'
    +
    +syn match   ramlDirective       contained '%[^:]\+:.\+'
    +
    +hi def link ramlVersion            String
    +hi def link routeInterpolation     String
    +hi def link ramlInterpolation      Constant
    +hi def link ramlTodo               Todo
    +hi def link ramlComment            Comment
    +hi def link ramlDocumentHeader     PreProc
    +hi def link ramlDocumentEnd        PreProc
    +hi def link ramlDirective          Keyword
    +hi def link ramlNodeProperty       Type
    +hi def link ramlAnchor             Type
    +hi def link ramlAlias              Type
    +hi def link ramlBlock              Operator
    +hi def link ramlOperator           Operator
    +hi def link routeParamKey          SpecialChar
    +hi def link ramlKey                Identifier
    +hi def link routeKey               SpecialChar
    +hi def link ramlParameterDelimiter Type
    +hi def link ramlParameter          Type
    +hi def link ramlString             String
    +hi def link ramlStringDelimiter    ramlString
    +hi def link ramlEscape             SpecialChar
    +hi def link ramlStringEscape       SpecialChar
    +hi def link ramlNumber             Number
    +hi def link ramlConstant           Constant
    +hi def link ramlTimestamp          Number
    +hi def link httpVerbs              Statement
    +hi def link ramlTypes              Type
    +hi def link ramlDelimiter          Delimiter
    +
    +let b:current_syntax = "raml"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/rapid.vim b/.config/vim/syntax/rapid.vim
    new file mode 100644
    index 0000000..ed0da09
    --- /dev/null
    +++ b/.config/vim/syntax/rapid.vim
    @@ -0,0 +1,687 @@
    +" ABB Rapid Command syntax file for Vim
    +" Language: ABB Rapid Command
    +" Maintainer: Patrick Meiser-Knosowski 
    +" Version: 2.3.0
    +" Last Change: 21. Jul 2023
    +" Credits: Thanks for beta testing to Thomas Baginski
    +"
    +" Suggestions of improvement are very welcome. Please email me!
    +"
    +"
    +"
    +" Note to self:
    +" for testing perfomance
    +"     open a 1000 lines file.
    +"     :syntime on
    +"     G
    +"     hold down CTRL-U until reaching top
    +"     :syntime report
    +"
    +"
    +" TODO:   - highlight rapid constants and maybe constants from common
    +"           technology packages
    +"         - optimize rapidErrorStringTooLong 
    +"         - error highlight for missing 2nd point in MoveCirc et al
    +
    +" Init {{{
    +" Remove any old syntax stuff that was loaded (5.x) or quit when a syntax file
    +" was already loaded (6.x).
    +if version < 600
    +  syntax clear
    +elseif exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:keepcpo= &cpo
    +set cpo&vim
    +
    +" if colorscheme is tortus rapidNoHighLink defaults to 1
    +if (get(g:,'colors_name'," ")=="tortus" || get(g:,'colors_name'," ")=="tortusless") 
    +      \&& !exists("g:rapidGroupName")
    +  let g:rapidGroupName=1 
    +endif
    +" rapidGroupName defaults to 0 if it's not initialized yet or 0
    +if !get(g:,"rapidGroupName",0)
    +  let g:rapidGroupName=0 
    +endif
    +
    +" Rapid does ignore case
    +syn case ignore
    +" spell checking
    +syn spell notoplevel
    +" }}} init
    +
    +" common highlighting {{{
    +
    +" Error {{{
    +if get(g:,'rapidShowError',1)
    +  "
    +  " This error must be defined befor rapidCharCode and rapidEscapedBackSlash
    +  " a string containing a single \ which is not a char code
    +  syn match rapidErrorSingleBackslash /\\/ contained
    +  highlight default link rapidErrorSingleBackslash Error
    +  "
    +endif
    +" }}} Error
    +
    +" Constant values {{{
    +" Boolean
    +syn keyword rapidBoolean TRUE FALSE Edge High Low
    +highlight default link rapidBoolean Boolean
    +" Float (num)
    +" syn match rapidFloat /\v%(\W|_)@1<=[+-]?\d+\.?\d*%(\s*[eE][+-]?\d+)?/
    +syn match rapidFloat /\v\c%(<\d+\.|\.?<\d)\d*%(E[+-]?\d+)?>/ contains=rapidOperator
    +highlight default link rapidFloat Float
    +" integer in decimal, hexadecimal, octal and binary
    +syn match rapidDec /\<[0-9]\+\>/
    +highlight default link rapidDec Number
    +syn match rapidHex /\<0x[0-9a-fA-F]\+\>/
    +highlight default link rapidHex Number
    +syn match rapidOct /\<0o[0-7]\+\>/
    +highlight default link rapidOct Number
    +syn match rapidBin /\<0b[01]\+\>/
    +highlight default link rapidBin Number
    +" String. Note: Don't rename group rapidString. Indent depend on this
    +syn region rapidString matchgroup=rapidString start=/"/ skip=/""/ end=/"/ oneline contains=rapidStringDoubleQuote,rapidEscapedBackSlash,rapidCharCode,rapidErrorSingleBackslash,rapidErrorStringTooLong,@Spell
    +highlight default link rapidString String
    +" two adjacent "" in string for one double quote
    +syn match rapidStringDoubleQuote /""/ contained
    +highlight default link rapidStringDoubleQuote SpecialChar
    +" character code in string
    +syn match rapidCharCode /\\\x\x/ contained
    +highlight default link rapidCharCode SpecialChar
    +" escaped \ in string
    +syn match rapidEscapedBackSlash /\\\\/ contained
    +highlight default link rapidEscapedBackSlash SpecialChar
    +" }}} Constant values
    +
    +" }}} common highlighting
    +
    +if bufname("%") =~ '\c\.cfg$'
    +" {{{ highlighting for *.cfg
    +
    +  " special chars {{{
    +  " syn match rapidOperator /:\|[+-]\|\*\|\/\|\\/
    +  syn match rapidOperator /[-+*/:\\]/
    +  syn match rapidOperator /^#/
    +  highlight default link rapidOperator Operator
    +  " }}} special chars
    +
    +  " sections {{{
    +  syn match rapidException /^\w\+/
    +  syn match rapidException /CFG_\d\+/
    +  highlight default link rapidException Exception
    +  " }}} sections
    +
    +  " Error {{{
    +  if get(g:,'rapidShowError',1)
    +    "
    +    " This error must be defined after rapidString
    +    " Any Name longer than 32 chars
    +    syn match rapidErrorNameTooLong /-Name "[^"]\{33,}"/
    +    highlight default link rapidErrorNameTooLong Error
    +    "
    +  endif
    +  " }}} Error
    +
    +  " }}} highlighting for *.cfg
    +else
    +  " highlighting for *.mod, *.sys and *.prg {{{
    +
    +  " sync for regions from a line comment or the start of a function
    +  syn sync match rapidSync grouphere NONE /\v\c^\s*%(!|%(task\s+|local\s+)?%(module|proc|func|trap|record)>)/
    +
    +  " Comment {{{ 
    +  " TODO Comment
    +  syn match rapidTodoComment contained /\\|\\|\/
    +  highlight default link rapidTodoComment Todo
    +  " Debug comment
    +  syn match rapidDebugComment contained /\/
    +  highlight default link rapidDebugComment Debug
    +  " Line comment
    +  syn match rapidComment /!.*$/ contains=rapidTodoComment,rapidDebugComment,@Spell
    +  highlight default link rapidComment Comment
    +  " }}} Comment 
    +
    +  " Header {{{
    +  syn match rapidHeader /^%%%/
    +  highlight default link rapidHeader PreProc
    +  " }}} Header
    +
    +  " Operator {{{
    +  " Boolean operator
    +  syn keyword rapidOperator and or xor not div mod
    +  " Arithmetic and compare operator
    +  syn match rapidOperator /[-+*/<>:=]/
    +  " conditional argument
    +  syn match rapidOperator /?/
    +  highlight default link rapidOperator Operator
    +  " }}} Operator
    +
    +  " Type, StorageClass and Typedef {{{
    +  " anytype (preceded by 'alias|pers|var|const|func'
    +  " TODO: still missing are userdefined types which are part of a parameter:
    +  " PROC message( mystring msMessagePart1{},
    +  "               \ myvar msMsg4{})
    +  " TODO testing. Problem: does not highlight any type if it's part of an argument list
    +  " syn match rapidAnyType /\v^\s*(global\s+|task\s+|local\s+)?(alias|pers|var|const|func)\s+\w+>/ contains=rapidStorageClass,rapidType,rapidTypeDef
    +  " highlight default link rapidAnyType Type
    +  syn keyword rapidType accdata aiotrigg bool btnres busstate buttondata byte
    +  syn keyword rapidType cfgdomain clock cnvcmd confdata confsupdata corrdescr datapos deflectiondata dionum dir dnum
    +  syn keyword rapidType egmframetype egmident egm_minmax egmstate egmstopmode errdomain errnum ErrorInfo errstr errtype event_type exec_level extjoint handler_type
    +  syn keyword rapidType icondata identno inposdata intnum inttypes iodev iounit_state jointtarget
    +  syn keyword rapidType listitem loaddata loadidnum loadsession mecunit motionprocessmode motsetdata
    +  " syn keyword rapidType num
    +  syn keyword rapidType opcalc opnum orient paridnum paridvalidnum pathrecid pnpdata pos pose proc_times progdisp o_jointtarget o_robtarget
    +  syn keyword rapidType rawbytes restartdata rmqheader rmqmessage rmqslot robjoint robtarget
    +  syn keyword rapidType searchdata sensor sensorstate sensorvardata shapedata signalai signalao signaldi signaldo signalgi signalgo signalorigin singdata socketdev socketstatus speeddata stopmovestartmove_mem stoppoint stoppointdata string stringdig sup_timeouts supervtype switch symnum syncident 
    +  syn keyword rapidType taskid tasks tasksatstart testsignal tooldata tpnum trapdata triggdata triggflag triggios triggiosdnum triggmode triggstrgo tsp_status tunegtype tunetype
    +  syn keyword rapidType uishownum veldata visiondata wobjdata wzstationary wztemporary zonedata
    +  " SoftMove data types
    +  syn keyword rapidType css_offset_dir css_soft_dir cssframe
    +  " arc data types
    +  syn keyword rapidType advSeamData arcdata flystartdata seamdata arctrackdata opttrackdata weavedata welddata 
    +  " conveyor tracking data types
    +  syn keyword rapidType indcnvdata
    +  " Integrated Vision data types
    +  syn keyword rapidType cameradev cameratarget 
    +  " arc Weldguide and MultiPass data types
    +  syn keyword rapidType adaptdata trackdata multidata 
    +  " dispense data types
    +  syn keyword rapidType beaddata equipdata
    +  " Spot data types
    +  syn keyword rapidType gundata gunnum spotdata forcedata simdata smeqdata smeqtype
    +  " Tool change data types
    +  syn keyword rapidType standno ToolInfo toolno
    +  " Continuous Application Platform data types
    +  syn keyword rapidType capaptrreferencedata capdata capevent caplatrackdata capmvsttim capspeeddata capspeeddata capstopmode captestno captrackdata capweavedata flypointdata processtimes restartblkdata supervtimeouts weavestartdata 
    +  " Bulls Eye data types
    +  syn keyword rapidType be_device be_scan be_tooldesign
    +  " Force Control data types
    +  syn keyword rapidType fcboxvol fccondstatus fccylindervol fcdamping fcforcevector fcframe fclindir fcprocessdata fcplane fcrotdir fcspeedvector fcspherevol fcspdchgtunetype fcxyznum
    +  " Discrete application platform data types
    +  syn keyword rapidType dadescapp dadescprc daintdata
    +  " VW Konzernstandard VWKS_1.07.02
    +  syn keyword rapidType merker 
    +  syn keyword rapidType frgnum frgwert robnum 
    +  syn keyword rapidType fmnum applid calibdatavorr stepdata 
    +  syn keyword rapidType tsmethode tsdaten teilspeicherdaten
    +  syn keyword rapidType greiferdaten greiferposition bauteildaten bauteilkontrolle g_datenident g_sensor g_signal g_teilident g_ventil 
    +  syn keyword rapidType strgnum typnum 
    +  syn keyword rapidType hubnum kopfnum 
    +  syn keyword rapidType applservicetype 
    +  syn keyword rapidType applfraesdaten kwdionum 
    +  syn keyword rapidType butechnum
    +  syn keyword rapidType toolnum dbnum 
    +  " das folgende sind datentypen aber das kann man doch nicht machen...
    +  " syn keyword rapidType position wert
    +  syn keyword rapidType camdata camlimitdata cammode camprotocoldata camstatus camsequence campositionstatus
    +  syn keyword rapidType saposnum sabereichnum autofocusnum focusposnum lascaledata laleistungnum larobnum laprognum uebwnum dgbanum dgjobnum gasspuelnum davalve gasuebwnum 
    +  syn keyword rapidType lsfigurnum lsstarttype 
    +  syn keyword rapidType lwprognum lwdiodnum lsstarttype 
    +  syn keyword rapidType lztype diskrethubnum lztipnum 
    +  syn keyword rapidType gblmethod
    +  syn keyword rapidType buatypenum buatechnum buadirnum 
    +  highlight default link rapidType Type
    +  " Storage class
    +  syn keyword rapidStorageClass LOCAL TASK VAR PERS CONST ALIAS NOVIEW NOSTEPIN VIEWONLY READONLY SYSMODULE INOUT
    +  highlight default link rapidStorageClass StorageClass
    +  " Not a typedef but I like to have those highlighted different then types,
    +  " structures or strorage classes
    +  syn keyword rapidTypeDef MODULE ENDMODULE PROC ERROR UNDO BACKWARD ENDPROC RECORD ENDRECORD TRAP ENDTRAP FUNC ENDFUNC
    +  highlight default link rapidTypeDef TypeDef
    +  " }}} Type, StorageClass and Typedef
    +
    +  " Statements, keywords et al {{{
    +  " syn keyword rapidStatement
    +  " highlight default link rapidStatement Statement
    +  " Conditional
    +  syn keyword rapidConditional if then elseif else endif test case default endtest
    +  highlight default link rapidConditional Conditional
    +  " Repeat
    +  syn keyword rapidRepeat do
    +  syn match rapidRepeat /\c\v^\s*%(|)%([^!]+)@=/
    +  syn keyword rapidRepeat from to step endfor endwhile
    +  highlight default link rapidRepeat Repeat
    +  " Label
    +  syn keyword rapidLabel goto
    +  syn match rapidLabel /\c\v^\s*[[:upper:][:lower:]]\k*\:\ze%([^=]|$)/ contains=rapidConditional,rapidOperator
    +  highlight default link rapidLabel Label
    +  " Keyword
    +  syn keyword rapidKeyword AccSet ActEventBuffer ActUnit Add AliasCamera AliasIO AliasIOReset BitClear BitSet BookErrNo BrakeCheck
    +  syn keyword rapidKeyword CallByVar CancelLoad CheckProgRef CirPathMode Clear ClearIOBuff ClearPath ClearRawBytes ClkReset ClkStart ClkStop Close CloseDir ConfJ ConfL CONNECT CopyFile CopyRawBytes CornerPathWarning CorrClear CorrCon CorrDiscon CorrWrite
    +  syn keyword rapidKeyword CSSAct CSSDeact CSSForceOffsetAct CSSForceOffsetDeact CSSOffsetTune CyclicBrakeCheck
    +  syn keyword rapidKeyword DeactEventBuffer DeactUnit Decr DitherAct DitherDeact DropSensor 
    +  syn keyword rapidKeyword EGMActJoint EGMActMove EGMActPose EGMGetId EGMReset EGMSetupAI EGMSetupAO EGMSetupGI EGMSetupLTAPP EGMSetupUC EOffsOff EOffsOn EOffsSet EraseModule ErrLog ErrWrite
    +  syn keyword rapidKeyword FitCircle FricIdInit FricIdEvaluate FricIdSetFricLevels 
    +  syn keyword rapidKeyword GetDataVal GetGroupSignalInfo GetJointData GetSysData GetTorqueMargin GetTrapData GripLoad HollowWristReset 
    +  syn keyword rapidKeyword IDelete IDisable IEnable IError Incr IndReset InvertDO IOBusStart IOBusState IoCtrlAxis_RefSync IoCtrlAxis_RefSyncOff IoCtrlAxis_RefSyncOn IODisable IOEnable IPers IRMQMessage ISignalAI ISignalAO ISignalDI ISignalDO ISignalGI ISignalGO ISleep ITimer IVarValue IWatch
    +  syn keyword rapidKeyword Load LoadId MakeDir ManLoadIdProc MatrixSolve MatrixSolveQR MatrixSVD MechUnitLoad MotionProcessModeSet MotionSup MToolRotCalib MToolTCPCalib Open OpenDir
    +  syn keyword rapidKeyword PackDNHeader PackRawBytes PathAccLim PathLengthReset PathLengthStart PathLengthStop PathRecStart PathRecStop PathResol PDispOff PDispOn PDispSet ProcerrRecovery PrxActivAndStoreRecord PrxActivRecord PrxDbgStoreRecord PrxDeactRecord PrxResetPos PrxResetRecords PrxSetPosOffset PrxSetRecordSampleTime PrxSetSyncalarm PrxStartRecord PrxStopRecord PrxStoreRecord PrxUseFileRecord PulseDO
    +  syn keyword rapidKeyword ReadAnyBin ReadBlock ReadCfgData ReadErrData ReadRawBytes ReadVarArr RemoveAllCyclicBool RemoveCyclicBool RemoveDir RemoveFile RenameFile Reset ResetAxisDistance ResetAxisMoveTime ResetPPMoved ResetRetryCount ResetTorqueMargin RestoPath Rewind RMQEmptyQueue RMQFindSlot RMQGetMessage RMQGetMsgData RMQGetMsgHeader RMQReadWait RMQSendMessage RMQSendWait
    +  syn keyword rapidKeyword SafetyControllerSyncRequest Save SaveCfgData SCWrite SenDevice Set SetAllDataVal SetAO SetDataSearch SetDataVal SetDO SetGO SetLeadThrough SetSysData SetupCyclicBool SiConnect SiClose SiGetCyclic SingArea SiSetCyclic SkipWarn SocketAccept SocketBind SocketClose SocketConnect SocketCreate SocketListen SocketReceive SocketReceiveFrom SocketSend SocketSendTo SoftAct SoftDeact SoftElbow SpeedLimAxis SpeedLimCheckPoint SpeedRefresh SpyStart SpyStop StartLoad STCalib STClose STIndGun STIndGunReset SToolRotCalib SToolTCPCalib STOpen StorePath STTune STTuneReset SupSyncSensorOff SupSyncSensorOn SyncMoveOff SyncMoveOn SyncMoveResume SyncMoveSuspend SyncMoveUndo SyncToSensor SystemStopAction
    +  syn keyword rapidKeyword TestSignDefine TestSignReset TextTabInstall TPErase TPReadDnum TPReadFK TPReadNum TPShow TPWrite TriggCheckIO TriggDataCopy TriggDataReset TriggEquip TriggInt TriggIO TriggRampAO TriggSpeed TriggStopProc TryInt TuneReset TuneServo
    +  syn keyword rapidKeyword UIMsgBox UIMsgWrite UIMsgWriteAbort UIShow UnLoad UnpackRawBytes VelSet WaitAI WaitAO WaitDI WaitDO WaitGI WaitGO WaitLoad WaitRob WaitSensor WaitSyncTask WaitTestAndSet WaitTime WaitUntil WarmStart WITH WorldAccLim Write WriteAnyBin WriteBin WriteBlock WriteCfgData WriteRawBytes WriteStrBin WriteVar WriteVarArr WZBoxDef WZCylDef WZDisable WZDOSet WZEnable WZFree WZHomeJointDef WZLimJointDef WZLimSup WZSphDef
    +  " arc instructions
    +  syn keyword rapidKeyword ArcRefresh RecoveryMenu RecoveryMenuWR RecoveryPosSet RecoveryPosReset SetWRProcName 
    +  " conveyor tracking instructions
    +  syn keyword rapidKeyword UseACCProfile WaitWObj DropWObj RecordProfile WaitAndRecProf StoreProfile LoadProfile ActivateProfile DeactProfile CnvGenInstr CnvSync CnvGenInstr IndCnvInit IndCnvEnable IndCnvDisable IndCnvReset IndCnvAddObject 
    +  syn keyword rapidKeyword UseReachableTargets GetMaxUsageTime ResetMaxUsageTime CnvPredictReach
    +  " Integrated Vision instructions
    +  syn keyword rapidKeyword CamFlush CamGetParameter CamGetResult CamLoadJob CamReqImage CamSetExposure CamSetParameter CamSetProgramMode CamSetRunMode CamStartLoadJob CamWaitLoadJob 
    +  " arc Weldguide and MultiPass instructions
    +  syn keyword rapidKeyword MPSavePath MPLoadPath MPReadInPath MPOffsEaxOnPath
    +  " Paint instructions
    +  syn keyword rapidKeyword ConsoleWrite IpsSetParam PntProdUserLog SetBrush SetBrushFac
    +  " Spot instructions
    +  syn keyword rapidKeyword SetForce Calibrate ReCalcTCP IndGunMove IndGunMoveReset OpenHighLift CloseHighLift SwSetIntSpotData SwSetIntForceData SwSetIntGunData SwSetIntSimData SwGetCalibData SwGetFixTipData 
    +  " Tool change instructions
    +  syn keyword rapidKeyword TcCloseCover TcDropOffTool TcLockTool TcOpenCover TcPickupTool TcUnlockTool
    +  " dispense instructions
    +  syn keyword rapidKeyword SetTmSignal SyncWWObj
    +  " Continuous Application Platform instructions
    +  syn keyword rapidKeyword CapAPTrSetup CapAPTrSetupAI CapAPTrSetupAO  CapAPTrSetupPERS CapCondSetDO CapEquiDist CapNoProcess CapRefresh CAPSetStopMode CapWeaveSync ICap InitSuperv IPathPos RemoveSuperv SetupSuperv 
    +  " Bulls Eye instructions
    +  syn keyword rapidKeyword BECheckTcp BEDebugState BERefPointer BESetupToolJ BETcpExtend BEUpdateTcp
    +  " Force Control instructions
    +  syn keyword rapidKeyword FCAct FCCalib FCCondForce FCCondOrient FCCondPos FCCondReoriSpeed FCCondTCPSpeed FCCondTorque FCCondWaitWhile FCDeact FCPress1LStart FCPressC FCPressEnd FCPressL FCRefCircle FCRefForce FCRefLine FCRefMoveFrame FCRefRot FCRefSpiral FCRefSprForceCart FCRefStart FCRefStop FCRefTorque FCResetDampingTune FCResetLPFilterTune FCSpdChgAct FCSpdChgDeact FCSpdChgTunSet FCSpdChgTunReset FCSetDampingTune FCSetLPFilterTune FCSupvForce FCSupvOrient FCSupvPos FCSupvReoriSpeed FCSupvTCPSpeed FCSupvTorque 
    +  " Discrete application platform instructions
    +  syn keyword rapidKeyword DaActProc DaDeactAllProc DaDeactProc DaDefExtSig DaDefProcData DaDefProcSig DaDefUserData DaGetCurrData DaSetCurrData DaSetupAppBehav DaStartManAction DaGetAppDescr DaGetAppIndex DaGetNumOfProcs DaGetNumOfRob DaGetPrcDescr 
    +  " Production Manager instructions
    +  syn keyword rapidKeyword ExecEngine PMgrGetNextPart PMgrSetNextPart PMgrRunMenu
    +  " Homepos-Running instructions
    +  syn keyword rapidKeyword HR_Exit HR_ExitCycle HR_SavePos HR_SetMoveToStartPos HR_SetTypeDIndex HR_SetTypeIndex 
    +  highlight default link rapidKeyword Keyword
    +  " Exception
    +  syn keyword rapidException Exit ErrRaise ExitCycle Raise RaiseToUser Retry Return TryNext
    +  syn match rapidException /\s\+Stop\s*[\\;]/me=e-1
    +  highlight default link rapidException Exception
    +  " }}} Statements, keywords et al
    +
    +  " Special keyword for move command {{{
    +  " uncategorized yet
    +  syn keyword rapidMovement MovePnP
    +  syn keyword rapidMovement EGMMoveC EGMMoveL EGMRunJoint EGMRunPose EGMStop
    +  syn keyword rapidMovement IndAMove IndCMove IndDMove IndRMove 
    +  " common instructions
    +  syn keyword rapidMovement MoveAbsJ MoveC MoveExtJ MoveJ MoveL 
    +  syn keyword rapidMovement MoveCAO MoveCDO MoveCGO MoveCSync MoveJAO MoveJDO MoveJGO MoveJSync MoveLAO MoveLDO MoveLGO MoveLSync 
    +  syn keyword rapidMovement SearchC SearchExtJ SearchL
    +  syn keyword rapidMovement TriggC TriggJ TriggL TriggJIOs TriggLIOs
    +  " Arc instructions
    +  syn keyword rapidMovement ArcC ArcC1 ArcC2 ArcCEnd ArcC1End ArcC2End ArcCStart ArcC1Start ArcC2Start 
    +  syn keyword rapidMovement ArcL ArcL1 ArcL2 ArcLEnd ArcL1End ArcL2End ArcLStart ArcL1Start ArcL2Start ArcMoveExtJ 
    +  " Arc Weldguide and MultiPass instructions
    +  syn keyword rapidMovement ArcRepL ArcAdaptLStart ArcAdaptL ArcAdaptC ArcAdaptLEnd ArcAdaptCEnd ArcCalcLStart ArcCalcL ArcCalcC ArcCalcLEnd ArcCalcCEnd ArcAdaptRepL 
    +  syn keyword rapidMovement Break 
    +  " Continuous Application Platform instructions
    +  syn keyword rapidMovement CapC CapL CapLATrSetup CSSDeactMoveL ContactL
    +  " Dispense instructions
    +  syn keyword rapidMovement DispL DispC
    +  " Nut instructions"
    +  syn keyword rapidMovement NutL NutJ
    +  syn keyword rapidMovement PathRecMoveBwd PathRecMoveFwd 
    +  " Paint instructions"
    +  syn keyword rapidMovement PaintL PaintLSig PaintLDO PaintC
    +  syn keyword rapidMovement StartMove StartMoveRetry StepBwdPath StopMove StopMoveReset
    +  " Spot instructions
    +  syn keyword rapidMovement SpotL SpotJ SpotML SpotMJ CalibL CalibJ MeasureWearL 
    +  " Homepos-Running instructions
    +  syn keyword rapidMovement SMoveJ SMoveJDO SMoveJGO SMoveJSync SMoveL SMoveLDO SMoveLGO SMoveLSync SSearchL STriggJ STriggL
    +  syn keyword rapidMovement HR_ContMove HR_MoveBack HR_MoveRoutine HR_MoveTo HR_MoveToHome SCSSDeactMoveL 
    +  " Discrete application platform instructions
    +  syn keyword rapidMovement DaProcML DaProcMJ
    +  " VW Konzernstandard VWKS_1.07.02
    +  syn keyword rapidMovement MoveABS  MoveABS_FB  MoveABS_FRG  MoveABS_ROB
    +  syn keyword rapidMovement MoveCIRC MoveCIRC_FB MoveCIRC_FRG MoveCIRC_ROB
    +  syn keyword rapidMovement MoveLIN  MoveLIN_FB  MoveLIN_FRG  MoveLIN_ROB 
    +  syn keyword rapidMovement MovePTP  MovePTP_FB  MovePTP_FRG  MovePTP_ROB 
    +  syn keyword rapidMovement SearchCIRC SearchCIRC_M 
    +  syn keyword rapidMovement SearchLIN  SearchLIN_M 
    +  syn keyword rapidMovement MoveABS_AO  MoveABS_DO  MoveABS_GO
    +  syn keyword rapidMovement MoveCIRC_AO MoveCIRC_DO MoveCIRC_GO
    +  syn keyword rapidMovement MoveLIN_AO  MoveLIN_DO  MoveLIN_GO
    +  syn keyword rapidMovement KW_LoesenLIN
    +  syn keyword rapidMovement SPZ_FraesenLIN SPZ_FraesenPTP SPZ_MessenLIN SPZ_MessenPTP SPZ_LIN SPZ_PTP 
    +  syn keyword rapidMovement BZ_LIN BZ_PTP
    +  syn keyword rapidMovement KL_LIN KL_CIRC
    +  syn keyword rapidMovement BP_LIN BP_PTP
    +  syn keyword rapidMovement BU_CIRC BU_LIN
    +  syn keyword rapidMovement CZ_LIN CZ_LIN_V CZ_PTP CZ_PTP_V
    +  syn keyword rapidMovement FD_LIN FD_PTP
    +  syn keyword rapidMovement KG_LIN KG_PTP
    +  syn keyword rapidMovement DA_LIN 
    +  syn keyword rapidMovement LK_CIRC LK_LIN 
    +  syn keyword rapidMovement LL_CIRC LL_LIN
    +  syn keyword rapidMovement LS_CIRC LS_LIN LS_LIN_F LS_PTP_F
    +  syn keyword rapidMovement LW_CIRC LW_LIN
    +  syn keyword rapidMovement LZ_LIN LZ_PTP LZ_ReinigenLIN LZ_ReinigenPTP
    +  syn keyword rapidMovement MS_CIRC MS_LIN MS_ReinigenLIN MS_SearchLIN MS_PTP_CS MS_LIN_CS GBL_LIN GBL_PTP GBL_RefPointLIN
    +  syn keyword rapidMovement NK_LIN
    +  syn keyword rapidMovement NZ_LIN NZ_LIN_V NZ_PTP NZ_PTP_V 
    +  syn keyword rapidMovement PR_LIN PR_PTP
    +  syn keyword rapidMovement RF_CIRC RF_LIN
    +  syn keyword rapidMovement STP_FraesenLIN STP_FraesenPTP STP_LIN STP_PTP 
    +  syn keyword rapidMovement SM_LIN SM_PTP
    +  syn keyword rapidMovement BUA_CIRC BUA_LIN BUA_MessenLIN BUA_MessenPTP
    +  syn keyword rapidMovement KE_LIN 
    +  if g:rapidGroupName
    +    highlight default link rapidMovement Movement
    +  else
    +    highlight default link rapidMovement Special
    +  endif
    +  " }}} special keyword for move command 
    +
    +  " Any name {{{
    +  syn match rapidNames /\v[[:upper:][:lower:]](\k|\.)*/
    +  " }}} Any name
    +
    +  " Attempt to avoid false highlight of num in case of parameter name:
    +  "   TPWrite "goPosNo="\num:=GOutput(goPosNo);
    +  " Must follow after rapidNames in this file
    +  syn match rapidType /\c\v\s*\ze[^ :]/
    +
    +  " Structure value {{{
    +  " rapid structrure values. added to be able to conceal them
    +  syn region rapidConcealableString matchgroup=rapidConcealableString start=/"/ skip=/""/ end=/"/ oneline keepend extend contained contains=rapidStringDoubleQuote,rapidEscapedBackSlash,rapidCharCode,rapidErrorSingleBackslash,rapidErrorStringTooLong,@Spell conceal 
    +  highlight default link rapidConcealableString String
    +  syn region rapidStructVal matchgroup=rapidStructDelimiter start=/\[/ end=/\]/ contains=rapidStructVal,rapidBoolean,rapidDec,rapidHex,rapidOct,rapidBin,rapidFloat,rapidConcealableString,rapidDelimiter,rapidConstant,rapidErrNo,rapidIntNo,rapidOperator keepend extend conceal cchar=* 
    +  highlight default link rapidStructDelimiter Delimiter
    +  " check edge cases like this one:
    +  "  LOCAL CONST listitem lstAuswService{18}:=[["","Service Position"],["","Bremsentest"],["","Referenzfahrt"],["","Manuelles Abfahren"],["","Justagestellung"],["","Transportposition"],
    +  "      ["","Spitze-Spitze Greifer 1, [RT]"],["","Spitze-Spitze Greifer 2, [FT]"],["","Spitze-Spitze Pruefspitze"],["","Werkobjekt Ablage"],["","Werkobjekt Modul 1"],
    +  "      ["","Werkobjekt Modul 2"],["","TCP von Greifer 1 vermessen, [RT]"],["","TCP von Greifer 2 vermessen, [FT]"],["","TCP von Basisdorn vermessen"],
    +  "      ["","Greifer abdocken"],["","Greifer andocken"],["","Kollision Check (Ohne Greifer)"]];
    +  " }}} Structure value
    +
    +  " Delimiter {{{
    +  syn match rapidDelimiter /[\\(){},;|]/
    +  highlight default link rapidDelimiter Delimiter
    +  " }}} Delimiter
    +
    +  " BuildInFunction {{{
    +  " dispense functions
    +  syn keyword rapidBuildInFunction contained GetSignal GetSignalDnum
    +  " Integrated Vision Platform functions
    +  syn keyword rapidBuildInFunction contained CamGetExposure CamGetLoadedJob CamGetName CamNumberOfResults 
    +  " Continuous Application Platform functions
    +  syn keyword rapidBuildInFunction contained CapGetFailSigs 
    +  syn keyword rapidBuildInFunction contained Abs AbsDnum ACos ACosDnum AInput AOutput ArgName ASin ASinDnum ATan ATanDnum ATan2 ATan2Dnum
    +  syn keyword rapidBuildInFunction contained BitAnd BitAndDnum BitCheck BitCheckDnum BitLSh BitLShDnum BitNeg BitNegDnum BitOr BitOrDnum BitRSh BitRShDnum BitXOr BitXOrDnum ByteToStr
    +  syn keyword rapidBuildInFunction contained CalcJointT CalcRobT CalcRotAxFrameZ CalcRotAxisFrame CDate CJointT ClkRead CorrRead Cos CosDnum CPos CRobT CrossProd CSpeedOverride CTime CTool CWObj
    +  syn keyword rapidBuildInFunction contained DecToHex DefAccFrame DefDFrame DefFrame Dim DInput Distance DnumToNum DnumToStr DotProd DOutput 
    +  syn keyword rapidBuildInFunction contained EGMGetState EulerZYX EventType ExecHandler ExecLevel Exp
    +  syn keyword rapidBuildInFunction contained FileSize FileTime FileTimeDnum FSSize
    +  syn keyword rapidBuildInFunction contained GetAxisDistance GetAxisMoveTime GetMaxNumberOfCyclicBool GetMecUnitName GetModalPayLoadMode GetMotorTorque GetNextCyclicBool GetNextMechUnit GetNextSym GetNumberOfCyclicBool GetServiceInfo GetSignalOrigin GetSysInfo GetTaskName GetTime GetTSPStatus GetUASUserName GInput GInputDnum GOutput GOutputDnum
    +  syn keyword rapidBuildInFunction contained HexToDec
    +  syn keyword rapidBuildInFunction contained IndInpos IndSpeed IOUnitState IsBrakeCheckActive IsCyclicBool IsFile IsLeadThrough IsMechUnitActive IsPers IsStopMoveAct IsStopStateEvent IsSyncMoveOn IsSysId IsVar
    +  syn keyword rapidBuildInFunction contained Max MaxExtLinearSpeed MaxExtReorientSpeed MaxRobReorientSpeed MaxRobSpeed Min MirPos ModExist ModTime ModTimeDnum MotionPlannerNo
    +  syn keyword rapidBuildInFunction contained NonMotionMode NOrient NumToDnum NumToStr
    +  syn keyword rapidBuildInFunction contained Offs OpMode OrientZYX ORobT
    +  syn keyword rapidBuildInFunction contained ParIdPosValid ParIdRobValid PathLengthGet PathLevel PathRecValidBwd PathRecValidFwd PFRestart PoseInv PoseMult PoseVect Pow PowDnum PPMovedInManMode Present ProgMemFree PrxGetMaxRecordpos
    +  syn keyword rapidBuildInFunction contained RawBytesLen ReadBin ReadDir ReadMotor ReadNum ReadStr ReadStrBin ReadVar RelTool RemainingRetries RMQGetSlotName RobName RobOS Round RoundDnum RunMode
    +  syn keyword rapidBuildInFunction contained SafetyControllerGetChecksum SafetyControllerGetOpModePinCode SafetyControllerGetSWVersion SafetyControllerGetUserChecksum Sin SinDnum SocketGetStatus SocketPeek Sqrt SqrtDnum STCalcForce STCalcTorque STIsCalib STIsClosed STIsIndGun STIsOpen StrDigCalc StrDigCmp StrFind StrLen StrMap StrMatch StrMemb StrOrder StrPart StrToByte StrToVal
    +  syn keyword rapidBuildInFunction contained Tan TanDnum TaskRunMec TaskRunRob TasksInSync TaskIsActive TaskIsExecuting TestAndSet TestDI TestSignRead TextGet TextTabFreeToUse TextTabGet TriggDataValid Trunc TruncDnum Type
    +  syn keyword rapidBuildInFunction contained UIAlphaEntry UIClientExist UIDnumEntry UIDnumTune UIListView UIMessageBox UINumEntry UINumTune
    +  syn keyword rapidBuildInFunction contained ValidIO ValToStr Vectmagn
    +  " Bulls Eye functions
    +  syn keyword rapidBuildInFunction contained OffsToolXYZ OffsToolPolar
    +  " Force Control functions
    +  syn keyword rapidBuildInFunction contained FCGetForce FCGetProcessData FCIsForceMode FCLoadID
    +  " Discrete application platform functions
    +  syn keyword rapidBuildInFunction contained DaGetFstTimeEvt DaCheckMMSOpt DaGetMP DaGetRobotName DaGetTaskName
    +  " Production Manager functions
    +  syn keyword rapidBuildInFunction contained PMgrAtSafe PMgrAtService PMgrAtState PMgrAtStation PMgrNextStation PMgrTaskNumber PMgrTaskName
    +  " Spot functions
    +  syn keyword rapidBuildInFunction contained SwGetCurrTargetName SwGetCurrSpotName 
    +  " Homepos-Running functions
    +  syn keyword rapidBuildInFunction contained HR_RobotInHome HR_GetTypeDIndex HR_GetTypeIndex
    +  " Paint functions
    +  syn keyword rapidBuildInFunction contained IndexLookup IpsCommand IpsGetParam PaintCommand PntQueueExtraGet PntQueueExtraSet PntQueuePeek 
    +  if g:rapidGroupName
    +    highlight default link rapidBuildInFunction BuildInFunction
    +  else
    +    highlight default link rapidBuildInFunction Function
    +  endif
    +  " }}}
    +
    +  " Function {{{
    +  syn match rapidFunction contains=rapidBuildInFunction /\v\c%(<%(PROC|MODULE)\s+)@1032 chars are not possible in rapid. a234567890123456789012345
    +    syn match rapidErrorIdentifierNameTooLong /\k\{33,}/ containedin=rapidFunction,rapidNames,rapidLabel
    +    highlight default link rapidErrorIdentifierNameTooLong Error
    +    "
    +    " a == b + 1
    +    syn match rapidErrorShouldBeColonEqual /\c\v%(^\s*%(%(TASK\s+|LOCAL\s+)?%(VAR|PERS|CONST)\s+\k+\s+)?\k+%(\k|[.{},*/+-])*\s*)@<=\=/
    +    highlight default link rapidErrorShouldBeColonEqual Error
    +    "
    +    " WaitUntil a==b
    +    syn match rapidErrorShouldBeEqual    /\c\v%(^\s*%(Return|WaitUntil|while)>[^!\\]+[^!<>])@<=%(\=|:)\=/
    +    syn match rapidErrorShouldBeEqual    /\c\v%(^\s*%(if|elseif)>[^!\\]+[^!<>])@<=%(\=|:)\=\ze[^!\\]+/
    +    highlight default link rapidErrorShouldBeEqual Error
    +    "
    +    " WaitUntil a=>b
    +    syn match rapidErrorShoudBeLessOrGreaterEqual /\c\v%(^\s*%(Return|WaitUntil|if|elseif|while)>[^!]+[^!<>])@<=\=[><]/
    +    highlight default link rapidErrorShoudBeLessOrGreaterEqual Error
    +    "
    +    " WaitUntil a>\s*\
    +" Last Change:	2024 May 21
    +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
    +"
    +" Syntax support for rasi config file
    +
    +" This file is based on syntax defined in rofi-theme man page
    +" https://man.archlinux.org/man/community/rofi/rofi-theme.5.en
    +
    +if exists('b:current_syntax')
    +  finish
    +endif
    +let b:current_syntax = 'rasi'
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +" String {{{
    +syn region rasiString    start=+"+ skip=+\\"+ end=+"+ oneline contained
    +syn match  rasiCharacter +L\='[^\\]'+ contained
    +
    +syn cluster rasiPropertyVals add=rasiString,rasiCharacter
    +" }}}
    +
    +" Integer/Real {{{
    +syn match rasiNumber  display contained '[+-]\?\d\+\(\.\d\+\)\?'
    +
    +syn cluster rasiPropertyVals add=rasiNumber
    +" }}}
    +
    +" Boolean {{{
    +syn keyword rasiBool  contained true false
    +
    +syn cluster rasiPropertyVals add=rasiBool
    +" }}}
    +
    +" Image {{{
    +syn match rasiInvImage        display contained 'url([^)]*)'
    +syn keyword rasiImageK        contained url linear-gradient
    +
    +syn match rasiImage           display contained transparent 'url(\s*"\([^"]\|\\"\)\+"\(\s*,\s*\(none\|both\|width\|height\)\)\?\s*)' contains=rasiImageScale,rasiString,rasiImageK
    +syn keyword rasiImageScale  contained none both width height
    +
    +syn match rasiImage           display contained transparent 'linear-gradient(\s*\(\(top\|left\|right\|bottom\)\s*,\s*\)\?[^,)]\+\s*\(,\s*[^,)]\+\s*\)\+)' contains=rasiImageDirection,@rasiColors,rasiImageK
    +syn keyword rasiImageDirection contained top left right bottom
    +
    +syn match rasiImage           display contained transparent 'linear-gradient(\s*\d\+\(rad\|grad\|deg\)\s*,\s*[^,)]\+\s*\(,\s*[^,)]\+\s*\)\+)' contains=rasiImageUnit,@rasiColor,@rasiInvColor,rasiNumber,rasiImageK
    +syn match rasiImageUnit       display contained '\(rad\|grad\|deg\)\>'
    +
    +syn cluster rasiPropertyVals  add=rasiInvImage,rasiImage
    +" }}}
    +
    +" Reference {{{
    +syn match rasiReference       display contained '@[a-zA-Z0-9-]\+'
    +
    +syn keyword rasiVarReferenceK contained var
    +
    +syn match rasiInvVarReference display contained 'var([^)]*)'
    +syn match rasiVarReference    display contained transparent 'var(\s*[a-zA-Z0-9-]\+\s*,\s*\(\a\+\s*([^)]*)\)\?[^),]*)' contains=rasiVarReferenceK,rasiPropertyIdRef,@rasiPropertyVals
    +syn match rasiPropertyIdRef   display contained '\a[a-zA-Z0-9-]*'
    +
    +syn cluster rasiPropertyVals  add=rasiReference,rasiInvVarReference,rasiVarReference
    +" }}}
    +
    +" Env variable {{{
    +syn match rasiInvEnv          display contained '${[^}]*}'
    +syn match rasiEnv             display contained '${\w\+}'hs=s+2,he=e-1
    +
    +syn keyword rasiEnvVarK       contained env
    +
    +syn match rasiInvEnvVar       display contained 'env([^)]*)'
    +syn match rasiEnvVar          display contained transparent 'env(\s*\w\+\s*,\s*\(\a\+([^)]*)\)\?[^),]*)' contains=rasiEnvVarK,rasiEnvRef,@rasiPropertyVals
    +syn match rasiEnvRef          display contained '\a\w*'
    +
    +syn cluster rasiPropertyVals  add=rasiEnv,rasiInvEnv,rasiInvEnvVar,rasiEnvVar
    +" }}}
    +
    +" Color {{{
    +syn keyword rasiColorK        contained rgb[a] hsl[a] hwb[a] cmyk
    +
    +syn match rasiHexColor        display contained '#\x\{3,4}'
    +syn match rasiHexColor        display contained '#\x\{6}'
    +syn match rasiHexColor        display contained '#\x\{8}'
    +syn match rasiInvHexColor     display contained '#\x\{5}\X'he=e-1,me=e-1
    +syn match rasiInvHexColor     display contained '#\x\{7}\X'he=e-1,me=e-1
    +
    +syn match rasiInvRGBColor     display contained 'rgb\(a\)\?([^)]*)'
    +syn match rasiRGBColor        display contained transparent 'rgb\(a\)\?(\s*\d\+\s*\(%\)\?\s*,\(\s*\d\+\s*\(%\)\?\s*\){2}\(,\s*\(\d\(\.\d*\)\?\|\d\{,3}%\)\s*\)\?)' contains=rasiColorK,rasiNumber,rasiDistance
    +
    +syn match rasiInvHSLColor     display contained 'h\(sl\|wb\)\(a\)\?([^)]*)'
    +syn match rasiHSLColor        display contained transparent 'h\(sl\|wb\)\(a\)\?(\s*\d\+\(\.\d*\)\?\(deg\|rad\|grad\|turn\)\?\s*\(,\s*\(\d\(\.\d*\)\?\|\d\{,3}%\)\s*\)\{2,3})' contains=rasiColorK,rasiNumber,rasiDistance
    +
    +
    +"this matches doesn't works properly (too long ?)
    +syn match rasiInvCMYKColor  display contained 'cmyk([^)]*)'
    +syn match rasiCMYKColor     display contained transparent 'cmyk(\s*\(\d\(\.\d*\)\?\|\d\{,3}%\)\s*\(,\s*\(\d\(\.\d*\)\?\|\d\{,3}%\)\s*\)\{3,4})' contains=rasiColorK,rasiNumber,rasiDistance
    +
    +syn case ignore
    +syn keyword rasiNamedColor contained
    +      \ AliceBlue AntiqueWhite Aqua Aquamarine Azure Beige Bisque Black BlanchedAlmond Blue
    +      \ BlueViolet Brown BurlyWood CadetBlue Chartreuse Chocolate Coral CornflowerBlue Cornsilk
    +      \ Crimson Cyan DarkBlue DarkCyan DarkGoldenRod DarkGray DarkGrey DarkGreen DarkKhaki DarkMagenta
    +      \ DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen Dark SlateBlue
    +      \ DarkSlateGray DarkSlateGrey DarkTurquoise DarkViolet DeepPink DeepSkyBlue DimGray DimGrey
    +      \ DodgerBlue FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold GoldenRod
    +      \ Gray Grey Green GreenYellow HoneyDew HotPink IndianRed Indigo Ivory Khaki Lavender
    +      \ LavenderBlush LawnGreen LemonChiffon LightBlue LightCoral LightCyan LightGoldenRodYellow
    +      \ LightGray LightGrey LightGreen LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray
    +      \ LightSlateGrey LightSteelBlue LightYellow Lime LimeGreen Linen Magenta Maroon MediumAquaMarine
    +      \ MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen
    +      \ MediumTurquoise MediumVioletRed MidnightBlue MintCream MistyRose Moccasin NavajoWhite Navy
    +      \ OldLace Olive OliveDrab Orange OrangeRed Orchid PaleGoldenRod PaleGreen PaleTurquoise
    +      \ PaleVioletRed PapayaWhip PeachPuff Peru Pink Plum PowderBlue Purple RebeccaPurple Red
    +      \ RosyBrown RoyalBlue SaddleBrown Salmon SandyBrown SeaGreen SeaShell Sienna Silver SkyBlue
    +      \ SlateBlue SlateGray SlateGrey Snow SpringGreen SteelBlue Tan Teal Thistle Tomato Turquoise
    +      \ Violet Wheat White WhiteSmoke Yellow YellowGreen transparent[] "uses `[]` to escape keyword
    +
    +syn cluster rasiColors        add=rasiHexColor,rasiRGBColor,rasiHSLColor,rasiCMYKColor,rasiNamedColor
    +syn cluster rasiColors        add=rasiInvHexColor,rasiInvRGBColor,rasiInvHSLColor,rasiInvCMYKColor
    +
    +syn cluster rasiPropertyVals  add=@rasiColors
    +" }}}
    +
    +" Text-Style {{{
    +syn keyword rasiTextStyle contained bold italic underline strikethrough none
    +
    +syn cluster rasiPropertyVals  add=rasiTextStyle
    +" }}}
    +
    +" Line-Style {{{
    +syn keyword rasiLineStyle contained dash solid
    +
    +syn cluster rasiPropertyVals  add=rasiLineStyle
    +" }}}
    +
    +" Distance {{{
    +syn match rasiDistanceUnit    display contained '\(px\|em\|ch\|%\|mm\)'
    +
    +syn match rasiInvDistance     display contained '[+-]\?\d\+\.\d\+\(px\|mm\)'
    +syn match rasiDistance        display contained transparent '[-+]\?\d\+\(px\|mm\)' contains=rasiDistanceUnit,rasiNumber
    +syn match rasiDistance        display contained transparent '[+-]\?\d\+\(\.\d\+\)\?\(em\|ch\|%\)' contains=rasiDistanceUnit,rasiNumber
    +
    +syn keyword rasiDistanceCalc  contained calc nextgroup=rasiDistanceCalcBody
    +syn region rasiDistanceCalcBody display contained start=+(+ end=+)+ contains=rasiDistanceCalcOp,rasiDistance,rasiInvDistance
    +syn match rasiDistanceCalcOp  display contained '\(+\|-\|/\|\*\|%\|min\|max\)'
    +
    +syn cluster rasiPropertyVals  add=rasiInvDistance,rasiDistance,rasiDistanceCalc
    +" }}}
    +
    +" Position {{{
    +syn keyword rasiPosition    contained center east north west south
    +
    +syn cluster rasiPropertyVals  add=rasiPosition
    +" }}}
    +
    +" Orientation {{{
    +syn keyword rasiOrientation   contained horizontal vertical
    +
    +syn cluster rasiPropertyVals  add=rasiOrientation
    +" }}}
    +
    +" Cursor {{{
    +syn keyword rasiCursor        contained default pointer text
    +
    +syn cluster rasiPropertyVals  add=rasiCursor
    +" }}}
    +
    +" Keyword List {{{
    +syn region rasiKeywordList    contained start=+\[+ end=+\]+ contains=rasiPropertyIdRef
    +
    +syn cluster rasiPropertyVals  add=rasiKeywordList
    +" }}}
    +
    +" Inherit {{{
    +syn keyword rasiInherit       contained inherit children
    +
    +syn cluster rasiPropertyVals  add=rasiInherit
    +" }}}
    +
    +syn match rasiGlobalImport    display '^\s*@\(import\|theme\)' nextgroup=rasiString skipwhite
    +
    +" Section {{{
    +" syn region rasiSection transparent start='^[^{]\+{'me=e-1 end='}' contains=rasiSectionOpenning,rasiSectionContent
    +syn match rasiSectionOpenning transparent '^[^{]\+{'me=e-1 contains=rasiGlobalSection,rasiWidgetName,rasiGlobalMedia nextgroup=rasiThemeSectionContent
    +" syn match rasiThemeInnerSectionOpenning transparent '^[^:${]\+{'me=e-1 contains=rasiWidgetName nextgroup=rasiThemeInnerSectionContent contained
    +
    +syn match rasiGlobalMedia     display contained '^\s*@media' nextgroup=rasiInvMediaBody,rasiMediaBody skipwhite
    +syn match rasiInvMediaBody    display contained '([^)]*)'
    +syn match rasiMediaBody       display contained '(\s*[a-z-]\+\s*:\s*\d\+\(px\|mm\)\?\s*)' contains=rasiMediaK,rasiNumber,rasiDistance
    +syn keyword rasiMediaK        contained min-width max-width min-height max-height min-aspect-ratio max-aspect-ratio monitor-id
    +
    +syn match rasiGlobalSection   display contained '^*'
    +syn match rasiWidgetName      display contained '[a-zA-Z0-9-]\+' nextgroup=rasiVisibleMod skipwhite
    +
    +syn keyword rasiVisibleMod    contained normal selected alternate nextgroup=rasiVisibleMod,rasiStateWrapper skipwhite
    +syn match rasiStateWrapper    display contained transparent '\.\(normal\|active\|urgent\)' contains=rasiState
    +syn keyword rasiState         contained normal active urgent
    +
    +
    +syn region  rasiThemeSectionContent transparent start="{" end="}" contains=rasiProperty,rasiComment,rasiCommentL,rasiSectionOpenning contained
    +" syn region  rasiThemeInnerSectionContent transparent start="{" end="}" contains=rasiProperty,rasiComment,rasiCommentL,rasiThemeInnerSectionOpenning contained
    +
    +syn match rasiProperty transparent '^\s*\S\+\s*:.*;\s*$' keepend contained contains=rasiPropertyId,rasiInvPropertyId,rasiPropertyVal,rasiComment,rasiCommentL
    +syn match rasiInvPropertyId '^\([^:]\&[^/]\{2}\)*:'me=e-1 contained
    +syn match rasiPropertyId  '^\s*[0-9a-zA-Z-]\+\s*:'me=e-1 contained
    +syn match rasiInvPropertyVal ':[^;];\s*\S\+\s*$'ms=s+1,hs=s+1
    +syn match rasiPropertyVal ':\s*[^;]\+;\s*$'ms=s+1,hs=s+1 contained contains=@rasiPropertyVals
    +" }}}
    +
    +" Comment {{{
    +syn cluster rasiCommentGroup  contains=rasiTodo,rasiBadContinuation
    +
    +syn region rasiCommentL       start="//" skip="\\$" end="$" keepend contains=@rasiCommentGroup,@Spell
    +syn region rasiComment        start="/\*" end="\*/" contains=@rasiCommentGroup,rasiCommentStartError,@Spell fold extend
    +
    +syn match rasiCommentError    display '\*/'
    +
    +syn keyword rasiTodo          contained TODO FIXME XXX NOTE
    +
    +if exists("rasi_minlines")
    +  let b:rasi_minlines = rasi_minlines
    +else
    +  let b:rasi_minlines = 50
    +endif
    +exec "syn sync ccomment rasiComment minlines=" . b:rasi_minlines
    +" }}}
    +
    +
    +
    +" Highlighting: {{{
    +hi def link rasiError           Error
    +
    +hi def link rasiTodo            Todo
    +hi def link rasiComment         Comment
    +hi def link rasiCommentStart    rasiComment
    +hi def link rasiCommentL        rasiComment
    +hi def link rasiCommentError    rasiError
    +
    +hi def link rasiString          String
    +hi def link rasiNumber          Number
    +hi def link rasiBool            Boolean
    +
    +hi def link rasiImageK          Function
    +hi def link rasiImageScale      Keyword
    +hi def link rasiImageDirection  Keyword
    +hi def link rasiImageUnit       Type
    +hi def link rasiInvImage        rasiError
    +
    +hi def link rasiHexColor        Number
    +hi def link rasiColorK          Function
    +hi def link rasiNamedColor      Number
    +hi def link rasiInvColor        rasiError
    +hi def link rasiInvHexColor     rasiInvColor
    +hi def link rasiInvRGBColor     rasiInvColor
    +hi def link rasiInvHSLColor     rasiInvColor
    +hi def link rasiInvCMYKColor    rasiInvColor
    +
    +hi def link rasiTextStyle       Keyword
    +hi def link rasiLineStyle       Keyword
    +
    +hi def link rasiDistanceUnit    Type
    +hi def link rasiDistanceCalc    Function
    +hi def link rasiDistanceCalcOp  Operator
    +hi def link rasiInvDistance     rasiError
    +
    +hi def link rasiPosition        Keyword
    +hi def link rasiOrientation     Keyword
    +hi def link rasiCursor          Keyword
    +
    +hi def link rasiReference       Identifier
    +hi def link rasiPropertyIdRef   Identifier
    +hi def link rasiVarReferenceK   Function
    +hi def link rasiInvVarReference rasiError
    +
    +hi def link rasiEnv             Identifier
    +hi def link rasiEnvRef          Identifier
    +hi def link rasiEnvVarK         Function
    +hi def link rasiInvEnv          rasiError
    +hi def link rasiInvEnvVar       rasiError
    +
    +hi def link rasiWidgetName      StorageClass
    +hi def link rasiGlobalSection   StorageClass
    +hi def link rasiVisibleMod      Type
    +hi def link rasiState           Tag
    +
    +hi def link rasiInherit         Identifier
    +
    +hi def link rasiGlobalImport    Include
    +
    +hi def link rasiGlobalMedia     Preproc
    +hi def link rasiMediaK          Keyword
    +hi def link rasiInvMediaBody    rasiError
    +
    +hi def link rasiPropertyId      Identifier
    +hi def link rasiInvProperty     rasiError
    +hi def link rasiInvPropertyId   rasiError
    +hi def link rasiInvPropertyVal  rasiError
    +" }}}
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim:ts=8
    diff --git a/.config/vim/syntax/ratpoison.vim b/.config/vim/syntax/ratpoison.vim
    new file mode 100644
    index 0000000..2322e85
    --- /dev/null
    +++ b/.config/vim/syntax/ratpoison.vim
    @@ -0,0 +1,275 @@
    +" Vim syntax file
    +" Language:	Ratpoison configuration/commands file ( /etc/ratpoisonrc ~/.ratpoisonrc )
    +" Maintainer:	Magnus Woldrich 
    +" URL:		http://github.com/trapd00r/vim-syntax-ratpoison
    +" Last Change:	2021-04-12 13:46:04
    +" Previous Maintainer:	Doug Kearns 
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn match   ratpoisonComment	"^\s*#.*$"		contains=ratpoisonTodo
    +
    +syn keyword ratpoisonTodo	TODO NOTE FIXME XXX	contained
    +
    +syn case ignore
    +syn keyword ratpoisonBooleanArg	on off			contained
    +syn case match
    +
    +syn keyword ratpoisonCommandArg abort addhook alias banish chdir		contained
    +syn keyword ratpoisonCommandArg clrunmanaged cnext colon compat cother		contained
    +syn keyword ratpoisonCommandArg cprev curframe dedicate definekey delete	contained
    +syn keyword ratpoisonCommandArg delkmap describekey echo escape exec		contained
    +syn keyword ratpoisonCommandArg fdump focus focusdown focuslast focusleft	contained
    +syn keyword ratpoisonCommandArg focusprev focusright focusup frestore fselect	contained
    +syn keyword ratpoisonCommandArg gdelete getenv getsel gmerge gmove		contained
    +syn keyword ratpoisonCommandArg gnew gnewbg gnext gprev gravity			contained
    +syn keyword ratpoisonCommandArg groups gselect help hsplit inext		contained
    +syn keyword ratpoisonCommandArg info iother iprev kill lastmsg			contained
    +syn keyword ratpoisonCommandArg license link listhook meta msgwait		contained
    +syn keyword ratpoisonCommandArg newkmap newwm next nextscreen number		contained
    +syn keyword ratpoisonCommandArg only other prev prevscreen prompt		contained
    +syn keyword ratpoisonCommandArg putsel quit ratclick rathold ratrelwarp		contained
    +syn keyword ratpoisonCommandArg ratwarp readkey redisplay redo remhook		contained
    +syn keyword ratpoisonCommandArg remove resize restart rudeness sdump		contained
    +syn keyword ratpoisonCommandArg select set setenv sfdump shrink			contained
    +syn keyword ratpoisonCommandArg source sselect startup_message time title	contained
    +syn keyword ratpoisonCommandArg tmpwm unalias undefinekey undo unmanage		contained
    +syn keyword ratpoisonCommandArg unsetenv verbexec version vsplit warp		contained
    +syn keyword ratpoisonCommandArg windows framefmt infofmt			contained
    +
    +syn match   ratpoisonGravityArg "\<\(n\|north\)\>"	contained
    +syn match   ratpoisonGravityArg "\<\(nw\|northwest\)\>"	contained
    +syn match   ratpoisonGravityArg "\<\(ne\|northeast\)\>"	contained
    +syn match   ratpoisonGravityArg "\<\(w\|west\)\>"	contained
    +syn match   ratpoisonGravityArg "\<\(c\|center\)\>"	contained
    +syn match   ratpoisonGravityArg "\<\(e\|east\)\>"	contained
    +syn match   ratpoisonGravityArg "\<\(s\|south\)\>"	contained
    +syn match   ratpoisonGravityArg "\<\(sw\|southwest\)\>"	contained
    +syn match   ratpoisonGravityArg "\<\(se\|southeast\)\>"	contained
    +syn case match
    +
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(F[1-9][0-9]\=\|\(\a\|\d\)\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(space\|exclam\|quotedbl\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(numbersign\|dollar\|percent\|ampersand\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(apostrophe\|quoteright\|parenleft\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(parenright\|asterisk\|plus\|comma\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(minus\|period\|slash\|colon\|semicolon\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(less\|equal\|greater\|question\|at\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(bracketleft\|backslash\|bracketright\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(asciicircum\|underscore\|grave\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(quoteleft\|braceleft\|bar\|braceright\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(asciitilde\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(BackSpace\|Tab\|Linefeed\|Clear\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(Return\|Pause\|Scroll_Lock\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(Sys_Req\|Escape\|Delete\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(Home\|Left\|Up\|Right\|Down\|Prior\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(Page_Up\|Next\|Page_Down\|End\|Begin\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(Select\|Print\|Execute\|Insert\|Undo\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(Redo\|Menu\|Find\|Cancel\|Help\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(Break\|Mode_switch\|script_switch\|Num_Lock\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=KP_\(Space\|Tab\|Enter\|F[1234]\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=KP_\(Home\|Left\|Up\|Right\|Down\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=KP_\(Prior\|Page_Up\|Next\|Page_Down\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=KP_\(End\|Begin\|Insert\|Delete\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=KP_\(Equal\|Multiply\|Add\|Separator\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +syn match   ratpoisonKeySeqArg  "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=KP_\(Subtract\|Decimal\|Divide\|\d\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
    +
    +syn match   ratpoisonHookArg    "\<\(key\|switchwin\|switchframe\|switchgroup\|quit\|restart\)\>" contained
    +
    +syn match   ratpoisonNumberArg  "\<\d\+\>"	contained nextgroup=ratpoisonNumberArg skipwhite
    +
    +syn keyword ratpoisonSetArg	barborder	contained nextgroup=ratpoisonNumberArg
    +syn keyword ratpoisonSetArg	bargravity	contained nextgroup=ratpoisonGravityArg
    +syn keyword ratpoisonSetArg	barpadding	contained nextgroup=ratpoisonNumberArg
    +syn keyword ratpoisonSetArg	bgcolor
    +syn keyword ratpoisonSetArg	border		contained nextgroup=ratpoisonNumberArg
    +syn keyword ratpoisonSetArg	fgcolor
    +syn keyword ratpoisonSetArg	framefmt	contained nextgroup=ratpoisonWinFmtArg
    +syn keyword ratpoisonSetArg	fwcolor
    +syn keyword ratpoisonSetArg	framemsgwait	contained nextgroup=ratpoisonNumberArg
    +syn keyword ratpoisonSetArg	gravity 	contained nextgroup=ratpoisonGravityArg
    +syn keyword ratpoisonSetArg	bwcolor
    +syn keyword ratpoisonSetArg	gravity	contained nextgroup=ratpoisonGravityArg
    +syn keyword ratpoisonSetArg	historysize
    +syn keyword ratpoisonSetArg	historycompaction
    +syn keyword ratpoisonSetArg	historyexpansion
    +syn keyword ratpoisonSetArg	infofmt         contained nextgroup=ratpoisonWinFmtArg
    +syn keyword ratpoisonSetArg	topkmap
    +syn keyword ratpoisonSetArg	barinpadding
    +syn keyword ratpoisonSetArg	font
    +syn keyword ratpoisonSetArg	framesels
    +syn keyword ratpoisonSetArg	maxundos
    +syn keyword ratpoisonSetArg	inputwidth	contained nextgroup=ratpoisonNumberArg
    +syn keyword ratpoisonSetArg	maxsizegravity	contained nextgroup=ratpoisonGravityArg
    +syn keyword ratpoisonSetArg	msgwait	        contained nextgroup=ratpoisonNumberArg
    +syn keyword ratpoisonSetArg	padding		contained nextgroup=ratpoisonNumberArg
    +syn keyword ratpoisonSetArg	resizeunit	contained nextgroup=ratpoisonNumberArg
    +syn keyword ratpoisonSetArg	startup_message
    +syn keyword ratpoisonSetArg	transgravity	contained nextgroup=ratpoisonGravityArg
    +syn keyword ratpoisonSetArg	waitcursor	contained nextgroup=ratpoisonNumberArg
    +syn keyword ratpoisonSetArg	winfmt		contained nextgroup=ratpoisonWinFmtArg
    +syn keyword ratpoisonSetArg	wingravity	contained nextgroup=ratpoisonGravityArg
    +syn keyword ratpoisonSetArg	winliststyle	contained nextgroup=ratpoisonWinListArg
    +syn keyword ratpoisonSetArg	winname		contained nextgroup=ratpoisonWinNameArg
    +
    +syn match   ratpoisonWinFmtArg  "%[nstacil]"			contained nextgroup=ratpoisonWinFmtArg skipwhite
    +syn match   ratpoisonFrameFmtArg  "%[nstacil]"			contained nextgroup=ratpoisonWinFmtArg skipwhite
    +syn match   ratpoisonInfoFmtArg  "%[nstacil]"			contained nextgroup=ratpoisonWinFmtArg skipwhite
    +
    +syn match   ratpoisonWinListArg "\<\(row\|column\)\>"		contained
    +
    +syn match   ratpoisonWinNameArg "\<\(name\|title\|class\)\>"	contained
    +
    +syn match   ratpoisonDefCommand		"^\s*set\s*"			nextgroup=ratpoisonSetArg
    +syn match   ratpoisonDefCommand		"^\s*defbarborder\s*"		nextgroup=ratpoisonNumberArg
    +syn match   ratpoisonDefCommand		"^\s*defbargravity\s*"		nextgroup=ratpoisonGravityArg
    +syn match   ratpoisonDefCommand		"^\s*defbarpadding\s*"		nextgroup=ratpoisonNumberArg
    +syn match   ratpoisonDefCommand		"^\s*defbgcolor\s*"
    +syn match   ratpoisonDefCommand		"^\s*defborder\s*"		nextgroup=ratpoisonNumberArg
    +syn match   ratpoisonDefCommand		"^\s*deffgcolor\s*"
    +syn match   ratpoisonDefCommand		"^\s*deffont\s*"
    +syn match   ratpoisonDefCommand		"^\s*defframefmt\s*"		nextgroup=ratpoisonWinFmtArg
    +syn match   ratpoisonDefCommand		"^\s*defframesels\s*"
    +syn match   ratpoisonDefCommand		"^\s*definputwidth\s*"		nextgroup=ratpoisonNumberArg
    +syn match   ratpoisonDefCommand		"^\s*defmaxsizegravity\s*"	nextgroup=ratpoisonGravityArg
    +syn match   ratpoisonDefCommand		"^\s*defpadding\s*"		nextgroup=ratpoisonNumberArg
    +syn match   ratpoisonDefCommand		"^\s*defresizeunit\s*"		nextgroup=ratpoisonNumberArg
    +syn match   ratpoisonDefCommand		"^\s*deftransgravity\s*"	nextgroup=ratpoisonGravityArg
    +syn match   ratpoisonDefCommand		"^\s*defwaitcursor\s*"		nextgroup=ratpoisonNumberArg
    +syn match   ratpoisonDefCommand		"^\s*defwinfmt\s*"		nextgroup=ratpoisonWinFmtArg
    +syn match   ratpoisonDefCommand		"^\s*defwingravity\s*"		nextgroup=ratpoisonGravityArg
    +syn match   ratpoisonDefCommand		"^\s*defwinliststyle\s*"	nextgroup=ratpoisonWinListArg
    +syn match   ratpoisonDefCommand		"^\s*defwinname\s*"		nextgroup=ratpoisonWinNameArg
    +syn match   ratpoisonDefCommand		"^\s*msgwait\s*"		nextgroup=ratpoisonNumberArg
    +
    +syn match   ratpoisonStringCommand	"^\s*\zsaddhook\ze\s*"		nextgroup=ratpoisonHookArg
    +syn match   ratpoisonStringCommand	"^\s*\zsalias\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsbind\ze\s*"		nextgroup=ratpoisonKeySeqArg
    +syn match   ratpoisonStringCommand	"^\s*\zschdir\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zscolon\ze\s*"		nextgroup=ratpoisonCommandArg
    +syn match   ratpoisonStringCommand	"^\s*\zsdedicate\ze\s*"		nextgroup=ratpoisonNumberArg
    +syn match   ratpoisonStringCommand	"^\s*\zsdefinekey\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsdelkmap\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsdescribekey\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsecho\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsescape\ze\s*"		nextgroup=ratpoisonKeySeqArg
    +syn match   ratpoisonStringCommand	"^\s*\zsexec\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsfdump\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsfrestore\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsgdelete\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsgetenv\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsgravity\ze\s*"		nextgroup=ratpoisonGravityArg
    +syn match   ratpoisonStringCommand	"^\s*\zsgselect\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zslink\ze\s*"		nextgroup=ratpoisonKeySeqArg
    +syn match   ratpoisonStringCommand	"^\s*\zslisthook\ze\s*"		nextgroup=ratpoisonHookArg
    +syn match   ratpoisonStringCommand	"^\s*\zsnewkmap\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsnewwm\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsnumber\ze\s*"		nextgroup=ratpoisonNumberArg
    +syn match   ratpoisonStringCommand	"^\s*\zsprompt\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsratwarp\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsratrelwarp\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsratclick\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsrathold\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsreadkey\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsremhook\ze\s*"		nextgroup=ratpoisonHookArg
    +syn match   ratpoisonStringCommand	"^\s*\zsresize\ze\s*"		nextgroup=ratpoisonNumberArg
    +syn match   ratpoisonStringCommand	"^\s*\zsrudeness\ze\s*"		nextgroup=ratpoisonNumberArg
    +syn match   ratpoisonStringCommand	"^\s*\zsselect\ze\s*"		nextgroup=ratpoisonNumberArg
    +syn match   ratpoisonStringCommand	"^\s*\zssetenv\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zssource\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zssselect\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsstartup_message\ze\s*"	nextgroup=ratpoisonBooleanArg
    +syn match   ratpoisonStringCommand	"^\s*\zstitle\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zstmpwm\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsunalias\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsunbind\ze\s*"		nextgroup=ratpoisonKeySeqArg
    +syn match   ratpoisonStringCommand	"^\s*\zsundefinekey\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsunmanage\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsunsetenv\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zsverbexec\ze\s*"
    +syn match   ratpoisonStringCommand	"^\s*\zswarp\ze\s*"		nextgroup=ratpoisonBooleanArg
    +
    +syn match   ratpoisonVoidCommand	"^\s*\zsabort\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsbanish\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsclrunmanaged\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zscnext\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zscompat\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zscother\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zscprev\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zscurframe\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsdelete\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsfocusdown\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsfocuslast\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsfocusleft\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsfocusprev\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsfocusright\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsfocusup\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsfocus\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsfselect\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsgetsel\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsgmerge\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsgmove\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsgnewbg\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsgnew\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsgnext\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsgprev\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsgroups\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zshelp\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zshsplit\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsinext\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsinfo\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsiother\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsiprev\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zskill\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zslastmsg\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zslicense\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsmeta\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsnextscreen\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsnext\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsonly\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsother\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsprevscreen\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsprev\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsputsel\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsquit\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsredisplay\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsredo\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsremove\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsrestart\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zssdump\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zssfdump\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsshrink\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zssplit\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zstime\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsundo\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsversion\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zsvsplit\ze\s*$"
    +syn match   ratpoisonVoidCommand	"^\s*\zswindows\ze\s*$"
    +
    +hi def link ratpoisonBooleanArg	Boolean
    +hi def link ratpoisonCommandArg	Keyword
    +hi def link ratpoisonComment	Comment
    +hi def link ratpoisonDefCommand	Identifier
    +hi def link ratpoisonFrameFmtArg	Special
    +hi def link ratpoisonGravityArg	Constant
    +hi def link ratpoisonInfoFmtArg    Special
    +hi def link ratpoisonKeySeqArg	Special
    +hi def link ratpoisonNumberArg	Number
    +hi def link ratpoisonSetArg	Keyword
    +hi def link ratpoisonStringCommand	Identifier
    +hi def link ratpoisonTodo		Todo
    +hi def link ratpoisonVoidCommand	Identifier
    +hi def link ratpoisonWinFmtArg	Special
    +hi def link ratpoisonWinNameArg	Constant
    +hi def link ratpoisonWinListArg	Constant
    +
    +let b:current_syntax = "ratpoison"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/rc.vim b/.config/vim/syntax/rc.vim
    new file mode 100644
    index 0000000..d69edd0
    --- /dev/null
    +++ b/.config/vim/syntax/rc.vim
    @@ -0,0 +1,191 @@
    +" Vim syntax file
    +" Language:	M$ Resource files (*.rc)
    +" Maintainer:	Christian Brabandt
    +" Last Change:	20220116
    +" Repository:   https://github.com/chrisbra/vim-rc-syntax
    +" License:	Vim (see :h license)
    +" Previous Maintainer:	Heiko Erhardt 
    +
    +" This file is based on the c.vim
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Common RC keywords
    +syn keyword rcLanguage LANGUAGE
    +
    +syn keyword rcMainObject TEXTINCLUDE VERSIONINFO BITMAP ICON CURSOR CURSOR
    +syn keyword rcMainObject MENU ACCELERATORS TOOLBAR DIALOG
    +syn keyword rcMainObject STRINGTABLE MESSAGETABLE RCDATA DLGINIT DESIGNINFO
    +
    +syn keyword rcSubObject POPUP MENUITEM SEPARATOR
    +syn keyword rcSubObject CONTROL LTEXT CTEXT RTEXT EDITTEXT
    +syn keyword rcSubObject BUTTON PUSHBUTTON DEFPUSHBUTTON GROUPBOX LISTBOX COMBOBOX
    +syn keyword rcSubObject FILEVERSION PRODUCTVERSION FILEFLAGSMASK FILEFLAGS FILEOS
    +syn keyword rcSubObject FILETYPE FILESUBTYPE
    +
    +syn keyword rcCaptionParam CAPTION
    +syn keyword rcParam CHARACTERISTICS CLASS STYLE EXSTYLE VERSION FONT
    +
    +syn keyword rcStatement BEGIN END BLOCK VALUE
    +
    +syn keyword rcCommonAttribute PRELOAD LOADONCALL FIXED MOVEABLE DISCARDABLE PURE IMPURE
    +
    +syn keyword rcAttribute WS_OVERLAPPED WS_POPUP WS_CHILD WS_MINIMIZE WS_VISIBLE WS_DISABLED WS_CLIPSIBLINGS
    +syn keyword rcAttribute WS_CLIPCHILDREN WS_MAXIMIZE WS_CAPTION WS_BORDER WS_DLGFRAME WS_VSCROLL WS_HSCROLL
    +syn keyword rcAttribute WS_SYSMENU WS_THICKFRAME WS_GROUP WS_TABSTOP WS_MINIMIZEBOX WS_MAXIMIZEBOX WS_TILED
    +syn keyword rcAttribute WS_ICONIC WS_SIZEBOX WS_TILEDWINDOW WS_OVERLAPPEDWINDOW WS_POPUPWINDOW WS_CHILDWINDOW
    +syn keyword rcAttribute WS_EX_DLGMODALFRAME WS_EX_NOPARENTNOTIFY WS_EX_TOPMOST WS_EX_ACCEPTFILES
    +syn keyword rcAttribute WS_EX_TRANSPARENT WS_EX_MDICHILD WS_EX_TOOLWINDOW WS_EX_WINDOWEDGE WS_EX_CLIENTEDGE
    +syn keyword rcAttribute WS_EX_CONTEXTHELP WS_EX_RIGHT WS_EX_LEFT WS_EX_RTLREADING WS_EX_LTRREADING
    +syn keyword rcAttribute WS_EX_LEFTSCROLLBAR WS_EX_RIGHTSCROLLBAR WS_EX_CONTROLPARENT WS_EX_STATICEDGE
    +syn keyword rcAttribute WS_EX_APPWINDOW WS_EX_OVERLAPPEDWINDOW WS_EX_PALETTEWINDOW
    +syn keyword rcAttribute ES_LEFT ES_CENTER ES_RIGHT ES_MULTILINE ES_UPPERCASE ES_LOWERCASE ES_PASSWORD
    +syn keyword rcAttribute ES_AUTOVSCROLL ES_AUTOHSCROLL ES_NOHIDESEL ES_OEMCONVERT ES_READONLY ES_WANTRETURN
    +syn keyword rcAttribute ES_NUMBER
    +syn keyword rcAttribute BS_PUSHBUTTON BS_DEFPUSHBUTTON BS_CHECKBOX BS_AUTOCHECKBOX BS_RADIOBUTTON BS_3STATE
    +syn keyword rcAttribute BS_AUTO3STATE BS_GROUPBOX BS_USERBUTTON BS_AUTORADIOBUTTON BS_OWNERDRAW BS_LEFTTEXT
    +syn keyword rcAttribute BS_TEXT BS_ICON BS_BITMAP BS_LEFT BS_RIGHT BS_CENTER BS_TOP BS_BOTTOM BS_VCENTER
    +syn keyword rcAttribute BS_PUSHLIKE BS_MULTILINE BS_NOTIFY BS_FLAT BS_RIGHTBUTTON
    +syn keyword rcAttribute SS_LEFT SS_CENTER SS_RIGHT SS_ICON SS_BLACKRECT SS_GRAYRECT SS_WHITERECT
    +syn keyword rcAttribute SS_BLACKFRAME SS_GRAYFRAME SS_WHITEFRAME SS_USERITEM SS_SIMPLE SS_LEFTNOWORDWRAP
    +syn keyword rcAttribute SS_OWNERDRAW SS_BITMAP SS_ENHMETAFILE SS_ETCHEDHORZ SS_ETCHEDVERT SS_ETCHEDFRAME
    +syn keyword rcAttribute SS_TYPEMASK SS_NOPREFIX SS_NOTIFY SS_CENTERIMAGE SS_RIGHTJUST SS_REALSIZEIMAGE
    +syn keyword rcAttribute SS_SUNKEN SS_ENDELLIPSIS SS_PATHELLIPSIS SS_WORDELLIPSIS SS_ELLIPSISMASK
    +syn keyword rcAttribute DS_ABSALIGN DS_SYSMODAL DS_LOCALEDIT DS_SETFONT DS_MODALFRAME DS_NOIDLEMSG
    +syn keyword rcAttribute DS_SETFOREGROUND DS_3DLOOK DS_FIXEDSYS DS_NOFAILCREATE DS_CONTROL DS_CENTER
    +syn keyword rcAttribute DS_CENTERMOUSE DS_CONTEXTHELP
    +syn keyword rcAttribute LBS_NOTIFY LBS_SORT LBS_NOREDRAW LBS_MULTIPLESEL LBS_OWNERDRAWFIXED
    +syn keyword rcAttribute LBS_OWNERDRAWVARIABLE LBS_HASSTRINGS LBS_USETABSTOPS LBS_NOINTEGRALHEIGHT
    +syn keyword rcAttribute LBS_MULTICOLUMN LBS_WANTKEYBOARDINPUT LBS_EXTENDEDSEL LBS_DISABLENOSCROLL
    +syn keyword rcAttribute LBS_NODATA LBS_NOSEL LBS_STANDARD
    +syn keyword rcAttribute CBS_SIMPLE CBS_DROPDOWN CBS_DROPDOWNLIST CBS_OWNERDRAWFIXED CBS_OWNERDRAWVARIABLE
    +syn keyword rcAttribute CBS_AUTOHSCROLL CBS_OEMCONVERT CBS_SORT CBS_HASSTRINGS CBS_NOINTEGRALHEIGHT
    +syn keyword rcAttribute CBS_DISABLENOSCROLL CBS_UPPERCASE CBS_LOWERCASE
    +syn keyword rcAttribute SBS_HORZ SBS_VERT SBS_TOPALIGN SBS_LEFTALIGN SBS_BOTTOMALIGN SBS_RIGHTALIGN
    +syn keyword rcAttribute SBS_SIZEBOXTOPLEFTALIGN SBS_SIZEBOXBOTTOMRIGHTALIGN SBS_SIZEBOX SBS_SIZEGRIP
    +syn keyword rcAttribute CCS_TOP CCS_NOMOVEY CCS_BOTTOM CCS_NORESIZE CCS_NOPARENTALIGN CCS_ADJUSTABLE
    +syn keyword rcAttribute CCS_NODIVIDER
    +syn keyword rcAttribute LVS_ICON LVS_REPORT LVS_SMALLICON LVS_LIST LVS_TYPEMASK LVS_SINGLESEL LVS_SHOWSELALWAYS
    +syn keyword rcAttribute LVS_SORTASCENDING LVS_SORTDESCENDING LVS_SHAREIMAGELISTS LVS_NOLABELWRAP
    +syn keyword rcAttribute LVS_EDITLABELS LVS_OWNERDATA LVS_NOSCROLL LVS_TYPESTYLEMASK  LVS_ALIGNTOP LVS_ALIGNLEFT
    +syn keyword rcAttribute LVS_ALIGNMASK LVS_OWNERDRAWFIXED LVS_NOCOLUMNHEADER LVS_NOSORTHEADER LVS_AUTOARRANGE
    +syn keyword rcAttribute TVS_HASBUTTONS TVS_HASLINES TVS_LINESATROOT TVS_EDITLABELS TVS_DISABLEDRAGDROP
    +syn keyword rcAttribute TVS_SHOWSELALWAYS
    +syn keyword rcAttribute TCS_FORCEICONLEFT TCS_FORCELABELLEFT TCS_TABS TCS_BUTTONS TCS_SINGLELINE TCS_MULTILINE
    +syn keyword rcAttribute TCS_RIGHTJUSTIFY TCS_FIXEDWIDTH TCS_RAGGEDRIGHT TCS_FOCUSONBUTTONDOWN
    +syn keyword rcAttribute TCS_OWNERDRAWFIXED TCS_TOOLTIPS TCS_FOCUSNEVER
    +syn keyword rcAttribute ACS_CENTER ACS_TRANSPARENT ACS_AUTOPLAY
    +syn keyword rcStdId IDI_APPLICATION IDI_HAND IDI_QUESTION IDI_EXCLAMATION IDI_ASTERISK IDI_WINLOGO IDI_WINLOGO
    +syn keyword rcStdId IDI_WARNING IDI_ERROR IDI_INFORMATION
    +syn keyword rcStdId IDCANCEL IDABORT IDRETRY IDIGNORE IDYES IDNO IDCLOSE IDHELP IDC_STATIC
    +
    +" Common RC keywords
    +
    +" Common RC keywords
    +syn keyword rcTodo contained	TODO FIXME XXX
    +
    +" String and Character constants
    +" Highlight special characters (those which have a backslash) differently
    +syn match rcSpecial contained	"\\[0-7][0-7][0-7]\=\|\\."
    +syn region rcString		start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=rcSpecial
    +syn match rcCharacter		"'[^\\]'"
    +syn match rcSpecialCharacter	"'\\.'"
    +syn match rcSpecialCharacter	"'\\[0-7][0-7]'"
    +syn match rcSpecialCharacter	"'\\[0-7][0-7][0-7]'"
    +
    +"catch errors caused by wrong parenthesis
    +syn region rcParen		transparent start='(' end=')' contains=ALLBUT,rcParenError,rcIncluded,rcSpecial,rcTodo
    +syn match rcParenError		")"
    +syn match rcInParen contained	"[{}]"
    +
    +"integer number, or floating point number without a dot and with "f".
    +syn case ignore
    +syn match rcNumber		"\<\d\+\(u\=l\=\|lu\|f\)\>"
    +"floating point number, with dot, optional exponent
    +syn match rcFloat		"\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
    +"floating point number, starting with a dot, optional exponent
    +syn match rcFloat		"\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
    +"floating point number, without dot, with exponent
    +syn match rcFloat		"\<\d\+e[-+]\=\d\+[fl]\=\>"
    +"hex number
    +syn match rcNumber		"\<0x[0-9a-f]\+\(u\=l\=\|lu\)\>"
    +"syn match rcIdentifier	"\<[a-z_][a-z0-9_]*\>"
    +syn case match
    +" flag an octal number with wrong digits
    +syn match rcOctalError		"\<0[0-7]*[89]"
    +
    +if exists("rc_comment_strings")
    +  " A comment can contain rcString, rcCharacter and rcNumber.
    +  " But a "*/" inside a rcString in a rcComment DOES end the comment!  So we
    +  " need to use a special type of rcString: rcCommentString, which also ends on
    +  " "*/", and sees a "*" at the start of the line as comment again.
    +  " Unfortunately this doesn't very well work for // type of comments :-(
    +  syntax match rcCommentSkip	contained "^\s*\*\($\|\s\+\)"
    +  syntax region rcCommentString	contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=rcSpecial,rcCommentSkip
    +  syntax region rcComment2String	contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=rcSpecial
    +  syntax region rcComment	start="/\*" end="\*/" contains=rcTodo,rcCommentString,rcCharacter,rcNumber,rcFloat
    +  syntax match  rcComment	"//.*" contains=rcTodo,rcComment2String,rcCharacter,rcNumber
    +else
    +  syn region rcComment		start="/\*" end="\*/" contains=rcTodo
    +  syn match rcComment		"//.*" contains=rcTodo
    +endif
    +syntax match rcCommentError	"\*/"
    +
    +syn region rcPreCondit	start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=rcComment,rcString,rcCharacter,rcNumber,rcCommentError
    +syn region rcIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
    +syn match rcIncluded contained "<[^>]*>"
    +syn match rcInclude		"^\s*#\s*include\>\s*["<]" contains=rcIncluded
    +"syn match rcLineSkip	"\\$"
    +syn region rcDefine		start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,rcPreCondit,rcIncluded,rcInclude,rcDefine,rcInParen
    +syn region rcPreProc		start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,rcPreCondit,rcIncluded,rcInclude,rcDefine,rcInParen
    +
    +syn sync ccomment rcComment minlines=10
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link rcCharacter	Character
    +hi def link rcSpecialCharacter rcSpecial
    +hi def link rcNumber	Number
    +hi def link rcFloat	Float
    +hi def link rcOctalError	rcError
    +hi def link rcParenError	rcError
    +hi def link rcInParen	rcError
    +hi def link rcCommentError	rcError
    +hi def link rcInclude	Include
    +hi def link rcPreProc	PreProc
    +hi def link rcDefine	Macro
    +hi def link rcIncluded	rcString
    +hi def link rcError	Error
    +hi def link rcPreCondit	PreCondit
    +hi def link rcCommentString rcString
    +hi def link rcComment2String rcString
    +hi def link rcCommentSkip	rcComment
    +hi def link rcString	String
    +hi def link rcComment	Comment
    +hi def link rcSpecial	SpecialChar
    +hi def link rcTodo	Todo
    +
    +hi def link rcAttribute	rcCommonAttribute
    +hi def link rcStdId	rcStatement
    +hi def link rcStatement	Statement
    +
    +hi def link rcLanguage	Constant
    +hi def link rcCaptionParam Constant
    +hi def link rcCommonAttribute Constant
    +
    +hi def link rcMainObject Identifier
    +hi def link rcSubObject	Define
    +hi def link rcParam	Constant
    +hi def link rcStatement	Statement
    +"
    +"hi def link rcIdentifier Identifier
    +
    +
    +
    +let b:current_syntax = "rc"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/rcs.vim b/.config/vim/syntax/rcs.vim
    new file mode 100644
    index 0000000..5a34802
    --- /dev/null
    +++ b/.config/vim/syntax/rcs.vim
    @@ -0,0 +1,63 @@
    +" Vim syntax file
    +" Language:     RCS file
    +" Maintainer:   Dmitry Vasiliev 
    +" URL:          https://github.com/hdima/vim-scripts/blob/master/syntax/rcs.vim
    +" Last Change:  2012-02-11
    +" Filenames:    *,v
    +" Version:      1.12
    +
    +" Options:
    +"   rcs_folding = 1   For folding strings
    +
    +" quit when a syntax file was already loaded.
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" RCS file must end with a newline.
    +syn match rcsEOFError   ".\%$" containedin=ALL
    +
    +" Keywords.
    +syn keyword rcsKeyword  head branch access symbols locks strict
    +syn keyword rcsKeyword  comment expand date author state branches
    +syn keyword rcsKeyword  next desc log
    +syn keyword rcsKeyword  text nextgroup=rcsTextStr skipwhite skipempty
    +
    +" Revision numbers and dates.
    +syn match rcsNumber "\<[0-9.]\+\>" display
    +
    +" Strings.
    +if exists("rcs_folding") && has("folding")
    +  " Folded strings.
    +  syn region rcsString  matchgroup=rcsString start="@" end="@" skip="@@" fold contains=rcsSpecial
    +  syn region rcsTextStr matchgroup=rcsTextStr start="@" end="@" skip="@@" fold contained contains=rcsSpecial,rcsDiffLines
    +else
    +  syn region rcsString  matchgroup=rcsString start="@" end="@" skip="@@" contains=rcsSpecial
    +  syn region rcsTextStr matchgroup=rcsTextStr start="@" end="@" skip="@@" contained contains=rcsSpecial,rcsDiffLines
    +endif
    +syn match rcsSpecial    "@@" contained
    +syn match rcsDiffLines  "[da]\d\+ \d\+$" contained
    +
    +" Synchronization.
    +syn sync clear
    +if exists("rcs_folding") && has("folding")
    +  syn sync fromstart
    +else
    +  " We have incorrect folding if following sync patterns is turned on.
    +  syn sync match rcsSync    grouphere rcsString "[0-9.]\+\(\s\|\n\)\+log\(\s\|\n\)\+@"me=e-1
    +  syn sync match rcsSync    grouphere rcsTextStr "@\(\s\|\n\)\+text\(\s\|\n\)\+@"me=e-1
    +endif
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet.
    +
    +hi def link rcsKeyword     Keyword
    +hi def link rcsNumber      Identifier
    +hi def link rcsString      String
    +hi def link rcsTextStr     String
    +hi def link rcsSpecial     Special
    +hi def link rcsDiffLines   Special
    +hi def link rcsEOFError    Error
    +
    +
    +let b:current_syntax = "rcs"
    diff --git a/.config/vim/syntax/rcslog.vim b/.config/vim/syntax/rcslog.vim
    new file mode 100644
    index 0000000..18f4593
    --- /dev/null
    +++ b/.config/vim/syntax/rcslog.vim
    @@ -0,0 +1,25 @@
    +" Vim syntax file
    +" Language:	RCS log output
    +" Maintainer:	Joe Karthauser 
    +" Last Change:	2001 May 09
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn match rcslogRevision	"^revision.*$"
    +syn match rcslogFile		"^RCS file:.*"
    +syn match rcslogDate		"^date: .*$"
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link rcslogFile		Type
    +hi def link rcslogRevision	Constant
    +hi def link rcslogDate		Identifier
    +
    +
    +let b:current_syntax = "rcslog"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/readline.vim b/.config/vim/syntax/readline.vim
    new file mode 100644
    index 0000000..3831ae1
    --- /dev/null
    +++ b/.config/vim/syntax/readline.vim
    @@ -0,0 +1,411 @@
    +" Vim syntax file
    +" Language:             readline(3) configuration file
    +" Maintainer:           Daniel Moch 
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2018-07-26
    +"                       Add new functions for Readline 7 / Bash 4.4
    +"                       (credit: Github user bewuethr)
    +
    +if exists('b:current_syntax')
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +setlocal iskeyword+=-
    +
    +syn match   readlineKey         contained
    +                              \ '\S'
    +                              \ nextgroup=readlineKeyTerminator
    +
    +syn match   readlineBegin       display '^'
    +                              \ nextgroup=readlineComment,
    +                              \           readlineConditional,
    +                              \           readlineInclude,
    +                              \           readlineKeyName,
    +                              \           readlineKey,
    +                              \           readlineKeySeq,
    +                              \           readlineKeyword
    +                              \ skipwhite
    +
    +syn region  readlineComment     contained display oneline
    +                                \ start='#'
    +                                \ end='$'
    +                                \ contains=readlineTodo,
    +                                \          @Spell
    +
    +syn keyword readlineTodo        contained
    +                              \ TODO
    +                              \ FIXME
    +                              \ XXX
    +                              \ NOTE
    +
    +syn match   readlineConditional contained
    +                              \ '$if\>'
    +                              \ nextgroup=readlineTest,
    +                              \           readlineTestApp
    +                              \ skipwhite
    +
    +syn keyword readlineTest        contained
    +                              \ mode
    +                              \ nextgroup=readlineTestModeEq
    +
    +syn match   readlineTestModeEq  contained
    +                              \ '='
    +                              \ nextgroup=readlineEditingMode
    +
    +syn keyword readlineTest        contained
    +                              \ term
    +                              \ nextgroup=readlineTestTermEq
    +
    +syn match   readlineTestTermEq  contained
    +                              \ '='
    +                              \ nextgroup=readlineTestTerm
    +
    +syn match   readlineTestTerm    contained
    +                              \ '\S\+'
    +
    +syn match   readlineTestApp     contained
    +                              \ '\S\+'
    +
    +syn match   readlineConditional contained display
    +                              \ '$\%(else\|endif\)\>'
    +
    +syn match   readlineInclude     contained display
    +                              \ '$include\>'
    +                              \ nextgroup=readlinePath
    +
    +syn match   readlinePath        contained display
    +                              \ '.\+'
    +
    +syn case ignore
    +syn match   readlineKeyName     contained display
    +                              \ nextgroup=readlineKeySeparator,
    +                              \           readlineKeyTerminator
    +                              \ '\%(Control\|Del\|Esc\|Escape\|LFD\|Meta\|Newline\|Ret\|Return\|Rubout\|Space\|Spc\|Tab\)'
    +syn case match
    +
    +syn match   readlineKeySeparator  contained
    +                                \ '-'
    +                                \ nextgroup=readlineKeyName,
    +                                \           readlineKey
    +
    +syn match   readlineKeyTerminator contained
    +                                \ ':'
    +                                \ nextgroup=readlineFunction
    +                                \ skipwhite
    +
    +syn region  readlineKeySeq     contained display oneline
    +                              \ start=+"+
    +                              \ skip=+\\\\\|\\"+
    +                              \ end=+"+
    +                              \ contains=readlineKeyEscape
    +                              \ nextgroup=readlineKeyTerminator
    +
    +syn match   readlineKeyEscape   contained display
    +                              \ +\\\([CM]-\|[e\\"'abdfnrtv]\|\o\{3}\|x\x\{2}\)+
    +
    +syn keyword readlineKeyword     contained
    +                              \ set
    +                              \ nextgroup=readlineVariable
    +                              \ skipwhite
    +
    +syn keyword readlineVariable    contained
    +                              \ nextgroup=readlineBellStyle
    +                              \ skipwhite
    +                              \ bell-style
    +
    +syn keyword readlineVariable    contained
    +                              \ nextgroup=readlineBoolean
    +                              \ skipwhite
    +                              \ bind-tty-special-chars
    +                              \ blink-matching-paren
    +                              \ colored-completion-prefix
    +                              \ colored-stats
    +                              \ completion-ignore-case
    +                              \ completion-map-case
    +                              \ convert-meta
    +                              \ disable-completion
    +                              \ echo-control-characters
    +                              \ enable-bracketed-paste
    +                              \ enable-keypad
    +                              \ enable-meta-key
    +                              \ expand-tilde
    +                              \ history-preserve-point
    +                              \ horizontal-scroll-mode
    +                              \ input-meta
    +                              \ meta-flag
    +                              \ mark-directories
    +                              \ mark-modified-lines
    +                              \ mark-symlinked-directories
    +                              \ match-hidden-files
    +                              \ menu-complete-display-prefix
    +                              \ output-meta
    +                              \ page-completions
    +                              \ print-completions-horizontally
    +                              \ revert-all-at-newline
    +                              \ show-all-if-ambiguous
    +                              \ show-all-if-unmodified
    +                              \ show-mode-in-prompt
    +                              \ skip-completed-text
    +                              \ visible-stats
    +
    +syn keyword readlineVariable    contained
    +                              \ nextgroup=readlineString
    +                              \ skipwhite
    +                              \ comment-begin
    +                              \ isearch-terminators
    +                              \ vi-cmd-mode-string
    +                              \ vi-ins-mode-string
    +                              \ emacs-mode-string
    +
    +syn keyword readlineVariable    contained
    +                              \ nextgroup=readlineNumber
    +                              \ skipwhite
    +                              \ completion-display-width
    +                              \ completion-prefix-display-length
    +                              \ completion-query-items
    +                              \ history-size
    +                              \ keyseq-timeout
    +
    +syn keyword readlineVariable    contained
    +                              \ nextgroup=readlineEditingMode
    +                              \ skipwhite
    +                              \ editing-mode
    +
    +syn keyword readlineVariable    contained
    +                              \ nextgroup=readlineKeymap
    +                              \ skipwhite
    +                              \ keymap
    +
    +syn keyword readlineBellStyle   contained
    +                              \ audible
    +                              \ visible
    +                              \ none
    +
    +syn case ignore
    +syn keyword readlineBoolean     contained
    +                              \ on
    +                              \ off
    +syn case match
    +
    +syn region  readlineString      contained display oneline
    +                              \ matchgroup=readlineStringDelimiter
    +                              \ start=+"+
    +                              \ skip=+\\\\\|\\"+
    +                              \ end=+"+
    +
    +syn match   readlineNumber      contained display
    +                              \ '[+-]\d\+\>'
    +
    +syn keyword readlineEditingMode contained
    +                              \ emacs
    +                              \ vi
    +
    +syn match   readlineKeymap      contained display
    +                              \ 'emacs\%(-\%(standard\|meta\|ctlx\)\)\=\|vi\%(-\%(move\|command\|insert\)\)\='
    +
    +syn keyword readlineFunction    contained
    +                              \ beginning-of-line
    +                              \ end-of-line
    +                              \ forward-char
    +                              \ backward-char
    +                              \ forward-word
    +                              \ backward-word
    +                              \ clear-screen
    +                              \ redraw-current-line
    +                              \
    +                              \ accept-line
    +                              \ previous-history
    +                              \ next-history
    +                              \ beginning-of-history
    +                              \ end-of-history
    +                              \ reverse-search-history
    +                              \ forward-search-history
    +                              \ non-incremental-reverse-search-history
    +                              \ non-incremental-forward-search-history
    +                              \ history-search-forward
    +                              \ history-search-backward
    +                              \ yank-nth-arg
    +                              \ yank-last-arg
    +                              \
    +                              \ delete-char
    +                              \ backward-delete-char
    +                              \ forward-backward-delete-char
    +                              \ quoted-insert
    +                              \ tab-insert
    +                              \ self-insert
    +                              \ transpose-chars
    +                              \ transpose-words
    +                              \ upcase-word
    +                              \ downcase-word
    +                              \ capitalize-word
    +                              \ overwrite-mode
    +                              \
    +                              \ kill-line
    +                              \ backward-kill-line
    +                              \ unix-line-discard
    +                              \ kill-whole-line
    +                              \ kill-word
    +                              \ backward-kill-word
    +                              \ unix-word-rubout
    +                              \ unix-filename-rubout
    +                              \ delete-horizontal-space
    +                              \ kill-region
    +                              \ copy-region-as-kill
    +                              \ copy-backward-word
    +                              \ copy-forward-word
    +                              \ yank
    +                              \ yank-pop
    +                              \
    +                              \ digit-argument
    +                              \ universal-argument
    +                              \
    +                              \ complete
    +                              \ possible-completions
    +                              \ insert-completions
    +                              \ menu-complete
    +                              \ menu-complete-backward
    +                              \ delete-char-or-list
    +                              \
    +                              \ start-kbd-macro
    +                              \ end-kbd-macro
    +                              \ call-last-kbd-macro
    +                              \ print-last-kbd-macro
    +                              \
    +                              \ re-read-init-file
    +                              \ abort
    +                              \ do-uppercase-version
    +                              \ prefix-meta
    +                              \ undo
    +                              \ revert-line
    +                              \ tilde-expand
    +                              \ set-mark
    +                              \ exchange-point-and-mark
    +                              \ character-search
    +                              \ character-search-backward
    +                              \ skip-csi-sequence
    +                              \ insert-comment
    +                              \ dump-functions
    +                              \ dump-variables
    +                              \ dump-macros
    +                              \ emacs-editing-mode
    +                              \ vi-editing-mode
    +                              \
    +                              \ vi-eof-maybe
    +                              \ vi-movement-mode
    +                              \ vi-undo
    +                              \ vi-match
    +                              \ vi-tilde-expand
    +                              \ vi-complete
    +                              \ vi-char-search
    +                              \ vi-redo
    +                              \ vi-search
    +                              \ vi-arg-digit
    +                              \ vi-append-eol
    +                              \ vi-prev-word
    +                              \ vi-change-to
    +                              \ vi-delete-to
    +                              \ vi-end-word
    +                              \ vi-char-search
    +                              \ vi-fetch-history
    +                              \ vi-insert-beg
    +                              \ vi-search-again
    +                              \ vi-put
    +                              \ vi-replace
    +                              \ vi-subst
    +                              \ vi-char-search
    +                              \ vi-next-word
    +                              \ vi-yank-to
    +                              \ vi-first-print
    +                              \ vi-yank-arg
    +                              \ vi-goto-mark
    +                              \ vi-append-mode
    +                              \ vi-prev-word
    +                              \ vi-change-to
    +                              \ vi-delete-to
    +                              \ vi-end-word
    +                              \ vi-char-search
    +                              \ vi-insert-mode
    +                              \ vi-set-mark
    +                              \ vi-search-again
    +                              \ vi-put
    +                              \ vi-change-char
    +                              \ vi-subst
    +                              \ vi-char-search
    +                              \ vi-undo
    +                              \ vi-next-word
    +                              \ vi-delete
    +                              \ vi-yank-to
    +                              \ vi-column
    +                              \ vi-change-case
    +
    +if exists("readline_has_bash")
    +  syn keyword readlineFunction  contained
    +                              \ shell-forward-word
    +                              \ shell-backward-word
    +                              \ shell-expand-line
    +                              \ history-expand-line
    +                              \ magic-space
    +                              \ alias-expand-line
    +                              \ history-and-alias-expand-line
    +                              \ insert-last-argument
    +                              \ operate-and-get-next
    +                              \ forward-backward-delete-char
    +                              \ shell-kill-word
    +                              \ shell-backward-kill-word
    +                              \ delete-char-or-list
    +                              \ complete-filename
    +                              \ possible-filename-completions
    +                              \ complete-username
    +                              \ possible-username-completions
    +                              \ complete-variable
    +                              \ possible-variable-completions
    +                              \ complete-hostname
    +                              \ possible-hostname-completions
    +                              \ complete-command
    +                              \ possible-command-completions
    +                              \ dynamic-complete-history
    +                              \ dabbrev-expand
    +                              \ complete-into-braces
    +                              \ glob-expand-word
    +                              \ glob-list-expansions
    +                              \ display-shell-version
    +                              \ glob-complete-word
    +                              \ edit-and-execute-command
    +endif
    +
    +hi def link readlineKey           readlineKeySeq
    +hi def link readlineComment       Comment
    +hi def link readlineTodo          Todo
    +hi def link readlineConditional   Conditional
    +hi def link readlineTest          Type
    +hi def link readlineDelimiter     Delimiter
    +hi def link readlineTestModeEq    readlineEq
    +hi def link readlineTestTermEq    readlineEq
    +hi def link readlineTestTerm      readlineString
    +hi def link readlineTestAppEq     readlineEq
    +hi def link readlineTestApp       readlineString
    +hi def link readlineInclude       Include
    +hi def link readlinePath          String
    +hi def link readlineKeyName       SpecialChar
    +hi def link readlineKeySeparator  readlineKeySeq
    +hi def link readlineKeyTerminator readlineDelimiter
    +hi def link readlineKeySeq        String
    +hi def link readlineKeyEscape     SpecialChar
    +hi def link readlineKeyword       Keyword
    +hi def link readlineVariable      Identifier
    +hi def link readlineBellStyle     Constant
    +hi def link readlineBoolean       Boolean
    +hi def link readlineString        String
    +hi def link readlineStringDelimiter readlineString
    +hi def link readlineNumber        Number
    +hi def link readlineEditingMode   Constant
    +hi def link readlineKeymap        Constant
    +hi def link readlineFunction      Function
    +
    +let b:current_syntax = 'readline'
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/rebol.vim b/.config/vim/syntax/rebol.vim
    new file mode 100644
    index 0000000..a5d50c4
    --- /dev/null
    +++ b/.config/vim/syntax/rebol.vim
    @@ -0,0 +1,199 @@
    +" Vim syntax file
    +" Language:	Rebol
    +" Maintainer:	Mike Williams 
    +" Filenames:	*.r
    +" Last Change:	27th June 2002
    +" URL:		http://www.eandem.co.uk/mrw/vim
    +"
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Rebol is case insensitive
    +syn case ignore
    +
    +" As per current users documentation
    +setlocal isk=@,48-57,?,!,.,',+,-,*,&,\|,=,_,~
    +
    +" Yer TODO highlighter
    +syn keyword	rebolTodo	contained TODO
    +
    +" Comments
    +syn match       rebolComment    ";.*$" contains=rebolTodo
    +
    +" Words
    +syn match       rebolWord       "\a\k*"
    +syn match       rebolWordPath   "[^[:space:]]/[^[:space]]"ms=s+1,me=e-1
    +
    +" Booleans
    +syn keyword     rebolBoolean    true false on off yes no
    +
    +" Values
    +" Integers
    +syn match       rebolInteger    "\<[+-]\=\d\+\('\d*\)*\>"
    +" Decimals
    +syn match       rebolDecimal    "[+-]\=\(\d\+\('\d*\)*\)\=[,.]\d*\(e[+-]\=\d\+\)\="
    +syn match       rebolDecimal    "[+-]\=\d\+\('\d*\)*\(e[+-]\=\d\+\)\="
    +" Time
    +syn match       rebolTime       "[+-]\=\(\d\+\('\d*\)*\:\)\{1,2}\d\+\('\d*\)*\([.,]\d\+\)\=\([AP]M\)\=\>"
    +syn match       rebolTime       "[+-]\=:\d\+\([.,]\d*\)\=\([AP]M\)\=\>"
    +" Dates
    +" DD-MMM-YY & YYYY format
    +syn match       rebolDate       "\d\{1,2}\([/-]\)\(Jan\|Feb\|Mar\|Apr\|May\|Jun\|Jul\|Aug\|Sep\|Oct\|Nov\|Dec\)\1\(\d\{2}\)\{1,2}\>"
    +" DD-month-YY & YYYY format
    +syn match       rebolDate       "\d\{1,2}\([/-]\)\(January\|February\|March\|April\|May\|June\|July\|August\|September\|October\|November\|December\)\1\(\d\{2}\)\{1,2}\>"
    +" DD-MM-YY & YY format
    +syn match       rebolDate       "\d\{1,2}\([/-]\)\d\{1,2}\1\(\d\{2}\)\{1,2}\>"
    +" YYYY-MM-YY format
    +syn match       rebolDate       "\d\{4}-\d\{1,2}-\d\{1,2}\>"
    +" DD.MM.YYYY format
    +syn match       rebolDate       "\d\{1,2}\.\d\{1,2}\.\d\{4}\>"
    +" Money
    +syn match       rebolMoney      "\a*\$\d\+\('\d*\)*\([,.]\d\+\)\="
    +" Strings
    +syn region      rebolString     oneline start=+"+ skip=+^"+ end=+"+ contains=rebolSpecialCharacter
    +syn region      rebolString     start=+[^#]{+ end=+}+ skip=+{[^}]*}+ contains=rebolSpecialCharacter
    +" Binary
    +syn region      rebolBinary     start=+\d*#{+ end=+}+ contains=rebolComment
    +" Email
    +syn match       rebolEmail      "\<\k\+@\(\k\+\.\)*\k\+\>"
    +" File
    +syn match       rebolFile       "%\(\k\+/\)*\k\+[/]\=" contains=rebolSpecialCharacter
    +syn region      rebolFile       oneline start=+%"+ end=+"+ contains=rebolSpecialCharacter
    +" URLs
    +syn match	rebolURL	"http://\k\+\(\.\k\+\)*\(:\d\+\)\=\(/\(\k\+/\)*\(\k\+\)\=\)*"
    +syn match	rebolURL	"file://\k\+\(\.\k\+\)*/\(\k\+/\)*\k\+"
    +syn match	rebolURL	"ftp://\(\k\+:\k\+@\)\=\k\+\(\.\k\+\)*\(:\d\+\)\=/\(\k\+/\)*\k\+"
    +syn match	rebolURL	"mailto:\k\+\(\.\k\+\)*@\k\+\(\.\k\+\)*"
    +" Issues
    +syn match	rebolIssue	"#\(\d\+-\)*\d\+"
    +" Tuples
    +syn match	rebolTuple	"\(\d\+\.\)\{2,}"
    +
    +" Characters
    +syn match       rebolSpecialCharacter contained "\^[^[:space:][]"
    +syn match       rebolSpecialCharacter contained "%\d\+"
    +
    +
    +" Operators
    +" Math operators
    +syn match       rebolMathOperator  "\(\*\{1,2}\|+\|-\|/\{1,2}\)"
    +syn keyword     rebolMathFunction  abs absolute add arccosine arcsine arctangent cosine
    +syn keyword     rebolMathFunction  divide exp log-10 log-2 log-e max maximum min
    +syn keyword     rebolMathFunction  minimum multiply negate power random remainder sine
    +syn keyword     rebolMathFunction  square-root subtract tangent
    +" Binary operators
    +syn keyword     rebolBinaryOperator complement and or xor ~
    +" Logic operators
    +syn match       rebolLogicOperator "[<>=]=\="
    +syn match       rebolLogicOperator "<>"
    +syn keyword     rebolLogicOperator not
    +syn keyword     rebolLogicFunction all any
    +syn keyword     rebolLogicFunction head? tail?
    +syn keyword     rebolLogicFunction negative? positive? zero? even? odd?
    +syn keyword     rebolLogicFunction binary? block? char? date? decimal? email? empty?
    +syn keyword     rebolLogicFunction file? found? function? integer? issue? logic? money?
    +syn keyword     rebolLogicFunction native? none? object? paren? path? port? series?
    +syn keyword     rebolLogicFunction string? time? tuple? url? word?
    +syn keyword     rebolLogicFunction exists? input? same? value?
    +
    +" Datatypes
    +syn keyword     rebolType       binary! block! char! date! decimal! email! file!
    +syn keyword     rebolType       function! integer! issue! logic! money! native!
    +syn keyword     rebolType       none! object! paren! path! port! string! time!
    +syn keyword     rebolType       tuple! url! word!
    +syn keyword     rebolTypeFunction type?
    +
    +" Control statements
    +syn keyword     rebolStatement  break catch exit halt reduce return shield
    +syn keyword     rebolConditional if else
    +syn keyword     rebolRepeat     for forall foreach forskip loop repeat while until do
    +
    +" Series statements
    +syn keyword     rebolStatement  change clear copy fifth find first format fourth free
    +syn keyword     rebolStatement  func function head insert last match next parse past
    +syn keyword     rebolStatement  pick remove second select skip sort tail third trim length?
    +
    +" Context
    +syn keyword     rebolStatement  alias bind use
    +
    +" Object
    +syn keyword     rebolStatement  import make make-object rebol info?
    +
    +" I/O statements
    +syn keyword     rebolStatement  delete echo form format import input load mold prin
    +syn keyword     rebolStatement  print probe read save secure send write
    +syn keyword     rebolOperator   size? modified?
    +
    +" Debug statement
    +syn keyword     rebolStatement  help probe trace
    +
    +" Misc statements
    +syn keyword     rebolStatement  func function free
    +
    +" Constants
    +syn keyword     rebolConstant   none
    +
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link rebolTodo     Todo
    +
    +hi def link rebolStatement Statement
    +hi def link rebolLabel	Label
    +hi def link rebolConditional Conditional
    +hi def link rebolRepeat	Repeat
    +
    +hi def link rebolOperator	Operator
    +hi def link rebolLogicOperator rebolOperator
    +hi def link rebolLogicFunction rebolLogicOperator
    +hi def link rebolMathOperator rebolOperator
    +hi def link rebolMathFunction rebolMathOperator
    +hi def link rebolBinaryOperator rebolOperator
    +hi def link rebolBinaryFunction rebolBinaryOperator
    +
    +hi def link rebolType     Type
    +hi def link rebolTypeFunction rebolOperator
    +
    +hi def link rebolWord     Identifier
    +hi def link rebolWordPath rebolWord
    +hi def link rebolFunction	Function
    +
    +hi def link rebolCharacter Character
    +hi def link rebolSpecialCharacter SpecialChar
    +hi def link rebolString	String
    +
    +hi def link rebolNumber   Number
    +hi def link rebolInteger  rebolNumber
    +hi def link rebolDecimal  rebolNumber
    +hi def link rebolTime     rebolNumber
    +hi def link rebolDate     rebolNumber
    +hi def link rebolMoney    rebolNumber
    +hi def link rebolBinary   rebolNumber
    +hi def link rebolEmail    rebolString
    +hi def link rebolFile     rebolString
    +hi def link rebolURL      rebolString
    +hi def link rebolIssue    rebolNumber
    +hi def link rebolTuple    rebolNumber
    +hi def link rebolFloat    Float
    +hi def link rebolBoolean  Boolean
    +
    +hi def link rebolConstant Constant
    +
    +hi def link rebolComment	Comment
    +
    +hi def link rebolError	Error
    +
    +
    +if exists("my_rebol_file")
    +  if file_readable(expand(my_rebol_file))
    +    execute "source " . my_rebol_file
    +  endif
    +endif
    +
    +let b:current_syntax = "rebol"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/redif.vim b/.config/vim/syntax/redif.vim
    new file mode 100644
    index 0000000..3651922
    --- /dev/null
    +++ b/.config/vim/syntax/redif.vim
    @@ -0,0 +1,970 @@
    +" Vim syntax file
    +" Language:          ReDIF
    +" Maintainer:        Axel Castellane 
    +" Last Change:       2021 Jul 28
    +" Original Author:   Axel Castellane
    +" Source:            http://openlib.org/acmes/root/docu/redif_1.html
    +" File Extension:    rdf
    +" Note:              The ReDIF format is used by RePEc.
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" ReDIF is case-insensitive
    +syntax case ignore
    +
    +" Structure: Some fields determine what fields can come next. For example:
    +"       Template-Type
    +"       *-Name
    +"       File-URL
    +"       *-Institution
    +" Those fields span a syntax region over several lines so that these regions
    +" can only contain their respective items.
    +
    +" Any line which is not a correct template or part of an argument is an error.
    +" This comes at the very beginning, so it has the lowest priority and will
    +" only match if nothing else did.
    +syntax match redifWrongLine /^.\+/ display
    +
    +highlight def link redifWrongLine redifError
    +
    +" Comments must start with # and it must be the first character of the line,
    +" otherwise I believe that they are considered as part of an argument.
    +syntax match redifComment /^#.*/ containedin=ALL display
    +
    +" Defines the 9 possible multi-lines regions of Template-Type and the fields
    +" they can contain.
    +syntax region redifRegionTemplatePaper start=/^Template-Type:\_s*ReDIF-Paper \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsPaper,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile fold
    +syntax region redifRegionTemplateArticle start=/^Template-Type:\_s*ReDIF-Article \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsArticle,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile fold
    +syntax region redifRegionTemplateChapter start=/^Template-Type:\_s*ReDIF-Chapter \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsChapter,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile,redifRegionClusterProvider,redifRegionClusterPublisher,redifRegionClusterEditor fold
    +syntax region redifRegionTemplateBook start=/^Template-Type:\_s*ReDIF-Book \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsBook,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile,redifRegionClusterProvider,redifRegionClusterPublisher,redifRegionClusterEditor fold
    +syntax region redifRegionTemplateSoftware start=/^Template-Type:\_s*ReDIF-Software \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsSoftware,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile fold
    +syntax region redifRegionTemplateArchive start=/^Template-Type:\_s*ReDIF-Archive \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsArchive,redifWrongLine fold
    +syntax region redifRegionTemplateSeries start=/^Template-Type:\_s*ReDIF-Series \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsSeries,redifWrongLine,redifRegionClusterProvider,redifRegionClusterPublisher,redifRegionClusterEditor fold
    +syntax region redifRegionTemplateInstitution start=/^Template-Type:\_s*ReDIF-Institution \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsInstitution,redifWrongLine,redifRegionClusterPrimary,redifRegionClusterSecondary,redifRegionClusterTertiary,redifRegionClusterQuaternary fold
    +syntax region redifRegionTemplatePerson start=/^Template-Type:\_s*ReDIF-Person \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsPerson,redifWrongLine,redifRegionClusterWorkplace fold
    +
    +" All fields are foldable (These come before clusters, so they have lower
    +" priority). So they are contained in a foldable syntax region.
    +syntax region redifContainerFieldsPaper start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTitle,redifFieldHandleOfWork,redifFieldLanguage,redifFieldContactEmail,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldNumber,redifFieldCreationDate,redifFieldRevisionDate,redifFieldPublicationStatus,redifFieldNote,redifFieldLength,redifFieldSeries,redifFieldAvailability,redifFieldOrderURL,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldRestriction,redifFieldPrice,redifFieldNotification,redifFieldPublicationType,redifFieldTemplateType,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsArticle start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTitle,redifFieldHandleOfWork,redifFieldLanguage,redifFieldContactEmail,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldNumber,redifFieldCreationDate,redifFieldPublicationStatus,redifFieldOrderURL,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldRestriction,redifFieldPrice,redifFieldNotification,redifFieldPublicationType,redifFieldJournal,redifFieldVolume,redifFieldYear,redifFieldIssue,redifFieldMonth,redifFieldPages,redifFieldNumber,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsChapter start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfWork,redifFieldTitle,redifFieldContactEmail,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldBookTitle,redifFieldYear,redifFieldMonth,redifFieldPages,redifFieldChapter,redifFieldVolume,redifFieldEdition,redifFieldSeries,redifFieldISBN,redifFieldPublicationStatus,redifFieldNote,redifFieldInBook,redifFieldOrderURL,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsBook start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTitle,redifFieldHandleOfWork,redifFieldContactEmail,redifFieldYear,redifFieldMonth,redifFieldVolume,redifFieldEdition,redifFieldSeries,redifFieldISBN,redifFieldPublicationStatus,redifFieldNote,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldHasChapter,redifFieldPrice,redifFieldOrderURL,redifFieldNumber,redifFieldCreationDate,redifFieldPublicationDate,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsSoftware start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfWork,redifFieldTitle,redifFieldProgrammingLanguage,redifFieldAbstract,redifFieldNumber,redifFieldVersion,redifFieldClassificationJEL,redifFieldKeywords,redifFieldSize,redifFieldSeries,redifFieldCreationDate,redifFieldRevisionDate,redifFieldNote,redifFieldRequires,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsArchive start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfArchive,redifFieldURL,redifFieldMaintainerEmail,redifFieldName,redifFieldMaintainerName,redifFieldMaintainerPhone,redifFieldMaintainerFax,redifFieldClassificationJEL,redifFieldHomepage,redifFieldDescription,redifFieldNotification,redifFieldRestriction,redifFieldTemplateType,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsSeries start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldName,redifFieldHandleOfSeries,redifFieldMaintainerEmail,redifFieldType,redifFieldOrderEmail,redifFieldOrderHomepage,redifFieldOrderPostal,redifFieldPrice,redifFieldRestriction,redifFieldMaintainerPhone,redifFieldMaintainerFax,redifFieldMaintainerName,redifFieldDescription,redifFieldClassificationJEL,redifFieldKeywords,redifFieldNotification,redifFieldISSN,redifFieldFollowup,redifFieldPredecessor,redifFieldTemplateType,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsInstitution start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfInstitution,redifFieldPrimaryDefunct,redifFieldSecondaryDefunct,redifFieldTertiaryDefunct,redifFieldTemplateType,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsPerson start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfPerson,redifFieldNameFull,redifFieldNameFirst,redifFieldNameLast,redifFieldNamePrefix,redifFieldNameMiddle,redifFieldNameSuffix,redifFieldNameASCII,redifFieldEmail,redifFieldHomepage,redifFieldFax,redifFieldPostal,redifFieldPhone,redifFieldWorkplaceOrganization,redifFieldAuthorPaper,redifFieldAuthorArticle,redifFieldAuthorSoftware,redifFieldAuthorBook,redifFieldAuthorChapter,redifFieldEditorBook,redifFieldEditorSeries,redifFieldClassificationJEL,redifFieldShortId,redifFieldLastLoginDate,redifFieldRegisteredDate,redifWrongLine contained transparent fold
    +
    +" Defines the 10 possible clusters and what they can contain
    +" A field not in the cluster ends the cluster.
    +syntax region redifRegionClusterWorkplace start=/^Workplace-Name:/ skip=/^Workplace-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsWorkplace fold
    +syntax region redifRegionClusterPrimary start=/^Primary-Name:/ skip=/^Primary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsPrimary fold
    +syntax region redifRegionClusterSecondary start=/^Secondary-Name:/ skip=/^Secondary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsSecondary fold
    +syntax region redifRegionClusterTertiary start=/^Tertiary-Name:/ skip=/^Tertiary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsTertiary fold
    +syntax region redifRegionClusterQuaternary start=/^Quaternary-Name:/ skip=/^Quaternary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsQuaternary fold
    +syntax region redifRegionClusterProvider start=/^Provider-Name:/ skip=/^Provider-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsProvider fold
    +syntax region redifRegionClusterPublisher start=/^Publisher-Name:/ skip=/^Publisher-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsPublisher fold
    +syntax region redifRegionClusterAuthor start=/^Author-Name:/ skip=/^Author-\%(Name\%(-First\|-Last\)\|Homepage\|Email\|Fax\|Postal\|Phone\|Person\|Workplace-Name\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifRegionClusterAuthorWorkplace,redifContainerFieldsAuthor fold
    +syntax region redifRegionClusterEditor start=/^Editor-Name:/ skip=/^Editor-\%(Name\%(-First\|-Last\)\|Homepage\|Email\|Fax\|Postal\|Phone\|Person\|Workplace-Name\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifRegionClusterEditorWorkplace,redifContainerFieldsEditor fold
    +syntax region redifRegionClusterFile start=/^File-URL:/ skip=/^File-\%(Format\|Function\|Size\|Restriction\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsFile fold
    +
    +" The foldable containers of the clusters.
    +syntax region redifContainerFieldsWorkplace start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldWorkplaceName,redifFieldWorkplaceHomepage,redifFieldWorkplaceNameEnglish,redifFieldWorkplacePostal,redifFieldWorkplaceLocation,redifFieldWorkplaceEmail,redifFieldWorkplacePhone,redifFieldWorkplaceFax,redifFieldWorkplaceInstitution,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsPrimary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldPrimaryName,redifFieldPrimaryHomepage,redifFieldPrimaryNameEnglish,redifFieldPrimaryPostal,redifFieldPrimaryLocation,redifFieldPrimaryEmail,redifFieldPrimaryPhone,redifFieldPrimaryFax,redifFieldPrimaryInstitution,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsSecondary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldSecondaryName,redifFieldSecondaryHomepage,redifFieldSecondaryNameEnglish,redifFieldSecondaryPostal,redifFieldSecondaryLocation,redifFieldSecondaryEmail,redifFieldSecondaryPhone,redifFieldSecondaryFax,redifFieldSecondaryInstitution,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsTertiary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTertiaryName,redifFieldTertiaryHomepage,redifFieldTertiaryNameEnglish,redifFieldTertiaryPostal,redifFieldTertiaryLocation,redifFieldTertiaryEmail,redifFieldTertiaryPhone,redifFieldTertiaryFax,redifFieldTertiaryInstitution,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsQuaternary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldQuaternaryName,redifFieldQuaternaryHomepage,redifFieldQuaternaryNameEnglish,redifFieldQuaternaryPostal,redifFieldQuaternaryLocation,redifFieldQuaternaryEmail,redifFieldQuaternaryPhone,redifFieldQuaternaryFax,redifFieldQuaternaryInstitution,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsProvider start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldProviderName,redifFieldProviderHomepage,redifFieldProviderNameEnglish,redifFieldProviderPostal,redifFieldProviderLocation,redifFieldProviderEmail,redifFieldProviderPhone,redifFieldProviderFax,redifFieldProviderInstitution,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsPublisher start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldPublisherName,redifFieldPublisherHomepage,redifFieldPublisherNameEnglish,redifFieldPublisherPostal,redifFieldPublisherLocation,redifFieldPublisherEmail,redifFieldPublisherPhone,redifFieldPublisherFax,redifFieldPublisherInstitution,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsAuthor start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldAuthorName,redifFieldAuthorNameFirst,redifFieldAuthorNameLast,redifFieldAuthorHomepage,redifFieldAuthorEmail,redifFieldAuthorFax,redifFieldAuthorPostal,redifFieldAuthorPhone,redifFieldAuthorPerson,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsEditor start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldEditorName,redifFieldEditorNameFirst,redifFieldEditorNameLast,redifFieldEditorHomepage,redifFieldEditorEmail,redifFieldEditorFax,redifFieldEditorPostal,redifFieldEditorPhone,redifFieldEditorPerson,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsFile start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldFileURL,redifFieldFileFormat,redifFieldFileFunction,redifFieldFileSize,redifFieldFileRestriction,redifWrongLine contained transparent fold
    +
    +" The two clusters in cluster (must be presented after to have priority over
    +" fields containers)
    +syntax region redifRegionClusterAuthorWorkplace start=/^Author-Workplace-Name:/ skip=/^Author-Workplace-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsAuthorWorkplace fold
    +syntax region redifRegionClusterEditorWorkplace start=/^Editor-Workplace-Name:/ skip=/^Editor-Workplace-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsEditorWorkplace fold
    +
    +" Their foldable fields containers
    +syntax region redifContainerFieldsAuthorWorkplace start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldAuthorWorkplaceName,redifFieldAuthorWorkplaceHomepage,redifFieldAuthorWorkplaceNameEnglish,redifFieldAuthorWorkplacePostal,redifFieldAuthorWorkplaceLocation,redifFieldAuthorWorkplaceEmail,redifFieldAuthorWorkplacePhone,redifFieldAuthorWorkplaceFax,redifFieldAuthorWorkplaceInstitution,redifWrongLine contained transparent fold
    +syntax region redifContainerFieldsEditorWorkplace start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldEditorWorkplaceName,redifFieldEditorWorkplaceHomepage,redifFieldEditorWorkplaceNameEnglish,redifFieldEditorWorkplacePostal,redifFieldEditorWorkplaceLocation,redifFieldEditorWorkplaceEmail,redifFieldEditorWorkplacePhone,redifFieldEditorWorkplaceFax,redifFieldEditorWorkplaceInstitution,redifWrongLine contained transparent fold
    +
    +" All the possible fields
    +"     Note: The "Handle" field is handled a little bit differently, because it
    +"     does not have the same meaning depending on the Template-Type. See:
    +" 	  /redifFieldHandleOf....
    +syntax match redifFieldAbstract /^Abstract:/ skipwhite skipempty nextgroup=redifArgumentAbstract contained
    +syntax match redifFieldArticleHandle /^Article-Handle:/ skipwhite skipempty nextgroup=redifArgumentArticleHandle contained
    +syntax match redifFieldAuthorArticle /^Author-Article:/ skipwhite skipempty nextgroup=redifArgumentAuthorArticle contained
    +syntax match redifFieldAuthorBook /^Author-Book:/ skipwhite skipempty nextgroup=redifArgumentAuthorBook contained
    +syntax match redifFieldAuthorChapter /^Author-Chapter:/ skipwhite skipempty nextgroup=redifArgumentAuthorChapter contained
    +syntax match redifFieldAuthorEmail /^Author-Email:/ skipwhite skipempty nextgroup=redifArgumentAuthorEmail contained
    +syntax match redifFieldAuthorFax /^Author-Fax:/ skipwhite skipempty nextgroup=redifArgumentAuthorFax contained
    +syntax match redifFieldAuthorHomepage /^Author-Homepage:/ skipwhite skipempty nextgroup=redifArgumentAuthorHomepage contained
    +syntax match redifFieldAuthorName /^Author-Name:/ skipwhite skipempty nextgroup=redifArgumentAuthorName contained
    +syntax match redifFieldAuthorNameFirst /^Author-Name-First:/ skipwhite skipempty nextgroup=redifArgumentAuthorNameFirst contained
    +syntax match redifFieldAuthorNameLast /^Author-Name-Last:/ skipwhite skipempty nextgroup=redifArgumentAuthorNameLast contained
    +syntax match redifFieldAuthorPaper /^Author-Paper:/ skipwhite skipempty nextgroup=redifArgumentAuthorPaper contained
    +syntax match redifFieldAuthorPerson /^Author-Person:/ skipwhite skipempty nextgroup=redifArgumentAuthorPerson contained
    +syntax match redifFieldAuthorPhone /^Author-Phone:/ skipwhite skipempty nextgroup=redifArgumentAuthorPhone contained
    +syntax match redifFieldAuthorPostal /^Author-Postal:/ skipwhite skipempty nextgroup=redifArgumentAuthorPostal contained
    +syntax match redifFieldAuthorSoftware /^Author-Software:/ skipwhite skipempty nextgroup=redifArgumentAuthorSoftware contained
    +syntax match redifFieldAuthorWorkplaceEmail /^Author-Workplace-Email:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceEmail contained
    +syntax match redifFieldAuthorWorkplaceFax /^Author-Workplace-Fax:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceFax contained
    +syntax match redifFieldAuthorWorkplaceHomepage /^Author-Workplace-Homepage:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceHomepage contained
    +syntax match redifFieldAuthorWorkplaceInstitution /^Author-Workplace-Institution:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceInstitution contained
    +syntax match redifFieldAuthorWorkplaceLocation /^Author-Workplace-Location:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceLocation contained
    +syntax match redifFieldAuthorWorkplaceName /^Author-Workplace-Name:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceName contained
    +syntax match redifFieldAuthorWorkplaceNameEnglish /^Author-Workplace-Name-English:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceNameEnglish contained
    +syntax match redifFieldAuthorWorkplacePhone /^Author-Workplace-Phone:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplacePhone contained
    +syntax match redifFieldAuthorWorkplacePostal /^Author-Workplace-Postal:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplacePostal contained
    +syntax match redifFieldAvailability /^Availability:/ skipwhite skipempty nextgroup=redifArgumentAvailability contained
    +syntax match redifFieldBookHandle /^Book-Handle:/ skipwhite skipempty nextgroup=redifArgumentBookHandle contained
    +syntax match redifFieldBookTitle /^Book-Title:/ skipwhite skipempty nextgroup=redifArgumentBookTitle contained
    +syntax match redifFieldChapterHandle /^Chapter-Handle:/ skipwhite skipempty nextgroup=redifArgumentChapterHandle contained
    +syntax match redifFieldChapter /^Chapter:/ skipwhite skipempty nextgroup=redifArgumentChapter contained
    +syntax match redifFieldClassificationJEL /^Classification-JEL:/ skipwhite skipempty nextgroup=redifArgumentClassificationJEL contained
    +syntax match redifFieldContactEmail /^Contact-Email:/ skipwhite skipempty nextgroup=redifArgumentContactEmail contained
    +syntax match redifFieldCreationDate /^Creation-Date:/ skipwhite skipempty nextgroup=redifArgumentCreationDate contained
    +syntax match redifFieldDescription /^Description:/ skipwhite skipempty nextgroup=redifArgumentDescription contained
    +syntax match redifFieldEdition /^Edition:/ skipwhite skipempty nextgroup=redifArgumentEdition contained
    +syntax match redifFieldEditorBook /^Editor-Book:/ skipwhite skipempty nextgroup=redifArgumentEditorBook contained
    +syntax match redifFieldEditorEmail /^Editor-Email:/ skipwhite skipempty nextgroup=redifArgumentEditorEmail contained
    +syntax match redifFieldEditorFax /^Editor-Fax:/ skipwhite skipempty nextgroup=redifArgumentEditorFax contained
    +syntax match redifFieldEditorHomepage /^Editor-Homepage:/ skipwhite skipempty nextgroup=redifArgumentEditorHomepage contained
    +syntax match redifFieldEditorName /^Editor-Name:/ skipwhite skipempty nextgroup=redifArgumentEditorName contained
    +syntax match redifFieldEditorNameFirst /^Editor-Name-First:/ skipwhite skipempty nextgroup=redifArgumentEditorNameFirst contained
    +syntax match redifFieldEditorNameLast /^Editor-Name-Last:/ skipwhite skipempty nextgroup=redifArgumentEditorNameLast contained
    +syntax match redifFieldEditorPerson /^Editor-Person:/ skipwhite skipempty nextgroup=redifArgumentEditorPerson contained
    +syntax match redifFieldEditorPhone /^Editor-Phone:/ skipwhite skipempty nextgroup=redifArgumentEditorPhone contained
    +syntax match redifFieldEditorPostal /^Editor-Postal:/ skipwhite skipempty nextgroup=redifArgumentEditorPostal contained
    +syntax match redifFieldEditorSeries /^Editor-Series:/ skipwhite skipempty nextgroup=redifArgumentEditorSeries contained
    +syntax match redifFieldEditorWorkplaceEmail /^Editor-Workplace-Email:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceEmail contained
    +syntax match redifFieldEditorWorkplaceFax /^Editor-Workplace-Fax:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceFax contained
    +syntax match redifFieldEditorWorkplaceHomepage /^Editor-Workplace-Homepage:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceHomepage contained
    +syntax match redifFieldEditorWorkplaceInstitution /^Editor-Workplace-Institution:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceInstitution contained
    +syntax match redifFieldEditorWorkplaceLocation /^Editor-Workplace-Location:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceLocation contained
    +syntax match redifFieldEditorWorkplaceName /^Editor-Workplace-Name:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceName contained
    +syntax match redifFieldEditorWorkplaceNameEnglish /^Editor-Workplace-Name-English:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceNameEnglish contained
    +syntax match redifFieldEditorWorkplacePhone /^Editor-Workplace-Phone:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplacePhone contained
    +syntax match redifFieldEditorWorkplacePostal /^Editor-Workplace-Postal:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplacePostal contained
    +syntax match redifFieldEmail /^Email:/ skipwhite skipempty nextgroup=redifArgumentEmail contained
    +syntax match redifFieldFax /^Fax:/ skipwhite skipempty nextgroup=redifArgumentFax contained
    +syntax match redifFieldFileFormat /^File-Format:/ skipwhite skipempty nextgroup=redifArgumentFileFormat contained
    +syntax match redifFieldFileFunction /^File-Function:/ skipwhite skipempty nextgroup=redifArgumentFileFunction contained
    +syntax match redifFieldFileRestriction /^File-Restriction:/ skipwhite skipempty nextgroup=redifArgumentFileRestriction contained
    +syntax match redifFieldFileSize /^File-Size:/ skipwhite skipempty nextgroup=redifArgumentFileSize contained
    +syntax match redifFieldFileURL /^File-URL:/ skipwhite skipempty nextgroup=redifArgumentFileURL contained
    +syntax match redifFieldFollowup /^Followup:/ skipwhite skipempty nextgroup=redifArgumentFollowup contained
    +syntax match redifFieldHandleOfArchive /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfArchive contained
    +syntax match redifFieldHandleOfInstitution /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfInstitution contained
    +syntax match redifFieldHandleOfPerson /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfPerson contained
    +syntax match redifFieldHandleOfSeries /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfSeries contained
    +syntax match redifFieldHandleOfWork /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfWork contained
    +syntax match redifFieldHasChapter /^HasChapter:/ skipwhite skipempty nextgroup=redifArgumentHasChapter contained
    +syntax match redifFieldHomepage /^Homepage:/ skipwhite skipempty nextgroup=redifArgumentHomepage contained
    +syntax match redifFieldInBook /^In-Book:/ skipwhite skipempty nextgroup=redifArgumentInBook contained
    +syntax match redifFieldISBN /^ISBN:/ skipwhite skipempty nextgroup=redifArgumentISBN contained
    +syntax match redifFieldISSN /^ISSN:/ skipwhite skipempty nextgroup=redifArgumentISSN contained
    +syntax match redifFieldIssue /^Issue:/ skipwhite skipempty nextgroup=redifArgumentIssue contained
    +syntax match redifFieldJournal /^Journal:/ skipwhite skipempty nextgroup=redifArgumentJournal contained
    +syntax match redifFieldKeywords /^Keywords:/ skipwhite skipempty nextgroup=redifArgumentKeywords contained
    +syntax match redifFieldKeywords /^Keywords:/ skipwhite skipempty nextgroup=redifArgumentKeywords contained
    +syntax match redifFieldLanguage /^Language:/ skipwhite skipempty nextgroup=redifArgumentLanguage contained
    +syntax match redifFieldLastLoginDate /^Last-Login-Date:/ skipwhite skipempty nextgroup=redifArgumentLastLoginDate contained
    +syntax match redifFieldLength /^Length:/ skipwhite skipempty nextgroup=redifArgumentLength contained
    +syntax match redifFieldMaintainerEmail /^Maintainer-Email:/ skipwhite skipempty nextgroup=redifArgumentMaintainerEmail contained
    +syntax match redifFieldMaintainerFax /^Maintainer-Fax:/ skipwhite skipempty nextgroup=redifArgumentMaintainerFax contained
    +syntax match redifFieldMaintainerName /^Maintainer-Name:/ skipwhite skipempty nextgroup=redifArgumentMaintainerName contained
    +syntax match redifFieldMaintainerPhone /^Maintainer-Phone:/ skipwhite skipempty nextgroup=redifArgumentMaintainerPhone contained
    +syntax match redifFieldMonth /^Month:/ skipwhite skipempty nextgroup=redifArgumentMonth contained
    +syntax match redifFieldNameASCII /^Name-ASCII:/ skipwhite skipempty nextgroup=redifArgumentNameASCII contained
    +syntax match redifFieldNameFirst /^Name-First:/ skipwhite skipempty nextgroup=redifArgumentNameFirst contained
    +syntax match redifFieldNameFull /^Name-Full:/ skipwhite skipempty nextgroup=redifArgumentNameFull contained
    +syntax match redifFieldNameLast /^Name-Last:/ skipwhite skipempty nextgroup=redifArgumentNameLast contained
    +syntax match redifFieldNameMiddle /^Name-Middle:/ skipwhite skipempty nextgroup=redifArgumentNameMiddle contained
    +syntax match redifFieldNamePrefix /^Name-Prefix:/ skipwhite skipempty nextgroup=redifArgumentNamePrefix contained
    +syntax match redifFieldNameSuffix /^Name-Suffix:/ skipwhite skipempty nextgroup=redifArgumentNameSuffix contained
    +syntax match redifFieldName /^Name:/ skipwhite skipempty nextgroup=redifArgumentName contained
    +syntax match redifFieldNote /^Note:/ skipwhite skipempty nextgroup=redifArgumentNote contained
    +syntax match redifFieldNotification /^Notification:/ skipwhite skipempty nextgroup=redifArgumentNotification contained
    +syntax match redifFieldNumber /^Number:/ skipwhite skipempty nextgroup=redifArgumentNumber contained
    +syntax match redifFieldOrderEmail /^Order-Email:/ skipwhite skipempty nextgroup=redifArgumentOrderEmail contained
    +syntax match redifFieldOrderHomepage /^Order-Homepage:/ skipwhite skipempty nextgroup=redifArgumentOrderHomepage contained
    +syntax match redifFieldOrderPostal /^Order-Postal:/ skipwhite skipempty nextgroup=redifArgumentOrderPostal contained
    +syntax match redifFieldOrderURL /^Order-URL:/ skipwhite skipempty nextgroup=redifArgumentOrderURL contained
    +syntax match redifFieldPages /^Pages:/ skipwhite skipempty nextgroup=redifArgumentPages contained
    +syntax match redifFieldPaperHandle /^Paper-Handle:/ skipwhite skipempty nextgroup=redifArgumentPaperHandle contained
    +syntax match redifFieldPhone /^Phone:/ skipwhite skipempty nextgroup=redifArgumentPhone contained
    +syntax match redifFieldPostal /^Postal:/ skipwhite skipempty nextgroup=redifArgumentPostal contained
    +syntax match redifFieldPredecessor /^Predecessor:/ skipwhite skipempty nextgroup=redifArgumentPredecessor contained
    +syntax match redifFieldPrice /^Price:/ skipwhite skipempty nextgroup=redifArgumentPrice contained
    +syntax match redifFieldPrimaryDefunct /^Primary-Defunct:/ skipwhite skipempty nextgroup=redifArgumentPrimaryDefunct contained
    +syntax match redifFieldPrimaryEmail /^Primary-Email:/ skipwhite skipempty nextgroup=redifArgumentPrimaryEmail contained
    +syntax match redifFieldPrimaryFax /^Primary-Fax:/ skipwhite skipempty nextgroup=redifArgumentPrimaryFax contained
    +syntax match redifFieldPrimaryHomepage /^Primary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentPrimaryHomepage contained
    +syntax match redifFieldPrimaryInstitution /^Primary-Institution:/ skipwhite skipempty nextgroup=redifArgumentPrimaryInstitution contained
    +syntax match redifFieldPrimaryLocation /^Primary-Location:/ skipwhite skipempty nextgroup=redifArgumentPrimaryLocation contained
    +syntax match redifFieldPrimaryName /^Primary-Name:/ skipwhite skipempty nextgroup=redifArgumentPrimaryName contained
    +syntax match redifFieldPrimaryNameEnglish /^Primary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentPrimaryNameEnglish contained
    +syntax match redifFieldPrimaryPhone /^Primary-Phone:/ skipwhite skipempty nextgroup=redifArgumentPrimaryPhone contained
    +syntax match redifFieldPrimaryPostal /^Primary-Postal:/ skipwhite skipempty nextgroup=redifArgumentPrimaryPostal contained
    +syntax match redifFieldProgrammingLanguage /^Programming-Language:/ skipwhite skipempty nextgroup=redifArgumentProgrammingLanguage contained
    +syntax match redifFieldProviderEmail /^Provider-Email:/ skipwhite skipempty nextgroup=redifArgumentProviderEmail contained
    +syntax match redifFieldProviderFax /^Provider-Fax:/ skipwhite skipempty nextgroup=redifArgumentProviderFax contained
    +syntax match redifFieldProviderHomepage /^Provider-Homepage:/ skipwhite skipempty nextgroup=redifArgumentProviderHomepage contained
    +syntax match redifFieldProviderInstitution /^Provider-Institution:/ skipwhite skipempty nextgroup=redifArgumentProviderInstitution contained
    +syntax match redifFieldProviderLocation /^Provider-Location:/ skipwhite skipempty nextgroup=redifArgumentProviderLocation contained
    +syntax match redifFieldProviderName /^Provider-Name:/ skipwhite skipempty nextgroup=redifArgumentProviderName contained
    +syntax match redifFieldProviderNameEnglish /^Provider-Name-English:/ skipwhite skipempty nextgroup=redifArgumentProviderNameEnglish contained
    +syntax match redifFieldProviderPhone /^Provider-Phone:/ skipwhite skipempty nextgroup=redifArgumentProviderPhone contained
    +syntax match redifFieldProviderPostal /^Provider-Postal:/ skipwhite skipempty nextgroup=redifArgumentProviderPostal contained
    +syntax match redifFieldPublicationDate /^Publication-Date:/ skipwhite skipempty nextgroup=redifArgumentPublicationDate contained
    +syntax match redifFieldPublicationStatus /^Publication-Status:/ skipwhite skipempty nextgroup=redifArgumentPublicationStatus contained
    +syntax match redifFieldPublicationType /^Publication-Type:/ skipwhite skipempty nextgroup=redifArgumentPublicationType contained
    +syntax match redifFieldQuaternaryEmail /^Quaternary-Email:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryEmail contained
    +syntax match redifFieldQuaternaryFax /^Quaternary-Fax:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryFax contained
    +syntax match redifFieldQuaternaryHomepage /^Quaternary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryHomepage contained
    +syntax match redifFieldQuaternaryInstitution /^Quaternary-Institution:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryInstitution contained
    +syntax match redifFieldQuaternaryLocation /^Quaternary-Location:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryLocation contained
    +syntax match redifFieldQuaternaryName /^Quaternary-Name:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryName contained
    +syntax match redifFieldQuaternaryNameEnglish /^Quaternary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryNameEnglish contained
    +syntax match redifFieldQuaternaryPhone /^Quaternary-Phone:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryPhone contained
    +syntax match redifFieldQuaternaryPostal /^Quaternary-Postal:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryPostal contained
    +syntax match redifFieldRegisteredDate /^Registered-Date:/ skipwhite skipempty nextgroup=redifArgumentRegisteredDate contained
    +syntax match redifFieldRequires /^Requires:/ skipwhite skipempty nextgroup=redifArgumentRequires contained
    +syntax match redifFieldRestriction /^Restriction:/ skipwhite skipempty nextgroup=redifArgumentRestriction contained
    +syntax match redifFieldRevisionDate /^Revision-Date:/ skipwhite skipempty nextgroup=redifArgumentRevisionDate contained
    +syntax match redifFieldSecondaryDefunct /^Secondary-Defunct:/ skipwhite skipempty nextgroup=redifArgumentSecondaryDefunct contained
    +syntax match redifFieldSecondaryEmail /^Secondary-Email:/ skipwhite skipempty nextgroup=redifArgumentSecondaryEmail contained
    +syntax match redifFieldSecondaryFax /^Secondary-Fax:/ skipwhite skipempty nextgroup=redifArgumentSecondaryFax contained
    +syntax match redifFieldSecondaryHomepage /^Secondary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentSecondaryHomepage contained
    +syntax match redifFieldSecondaryInstitution /^Secondary-Institution:/ skipwhite skipempty nextgroup=redifArgumentSecondaryInstitution contained
    +syntax match redifFieldSecondaryLocation /^Secondary-Location:/ skipwhite skipempty nextgroup=redifArgumentSecondaryLocation contained
    +syntax match redifFieldSecondaryName /^Secondary-Name:/ skipwhite skipempty nextgroup=redifArgumentSecondaryName contained
    +syntax match redifFieldSecondaryNameEnglish /^Secondary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentSecondaryNameEnglish contained
    +syntax match redifFieldSecondaryPhone /^Secondary-Phone:/ skipwhite skipempty nextgroup=redifArgumentSecondaryPhone contained
    +syntax match redifFieldSecondaryPostal /^Secondary-Postal:/ skipwhite skipempty nextgroup=redifArgumentSecondaryPostal contained
    +syntax match redifFieldSeries /^Series:/ skipwhite skipempty nextgroup=redifArgumentSeries contained
    +syntax match redifFieldShortId /^Short-Id:/ skipwhite skipempty nextgroup=redifArgumentShortId contained
    +syntax match redifFieldSize /^Size:/ skipwhite skipempty nextgroup=redifArgumentSize contained
    +syntax match redifFieldSoftwareHandle /^Software-Handle:/ skipwhite skipempty nextgroup=redifArgumentSoftwareHandle contained
    +syntax match redifFieldTemplateType /^Template-Type:/ skipwhite skipempty nextgroup=redifArgumentTemplateType contained
    +syntax match redifFieldTertiaryDefunct /^Tertiary-Defunct:/ skipwhite skipempty nextgroup=redifArgumentTertiaryDefunct contained
    +syntax match redifFieldTertiaryEmail /^Tertiary-Email:/ skipwhite skipempty nextgroup=redifArgumentTertiaryEmail contained
    +syntax match redifFieldTertiaryFax /^Tertiary-Fax:/ skipwhite skipempty nextgroup=redifArgumentTertiaryFax contained
    +syntax match redifFieldTertiaryHomepage /^Tertiary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentTertiaryHomepage contained
    +syntax match redifFieldTertiaryInstitution /^Tertiary-Institution:/ skipwhite skipempty nextgroup=redifArgumentTertiaryInstitution contained
    +syntax match redifFieldTertiaryLocation /^Tertiary-Location:/ skipwhite skipempty nextgroup=redifArgumentTertiaryLocation contained
    +syntax match redifFieldTertiaryName /^Tertiary-Name:/ skipwhite skipempty nextgroup=redifArgumentTertiaryName contained
    +syntax match redifFieldTertiaryNameEnglish /^Tertiary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentTertiaryNameEnglish contained
    +syntax match redifFieldTertiaryPhone /^Tertiary-Phone:/ skipwhite skipempty nextgroup=redifArgumentTertiaryPhone contained
    +syntax match redifFieldTertiaryPostal /^Tertiary-Postal:/ skipwhite skipempty nextgroup=redifArgumentTertiaryPostal contained
    +syntax match redifFieldTitle /^Title:/ skipwhite skipempty nextgroup=redifArgumentTitle contained
    +syntax match redifFieldType /^Type:/ skipwhite skipempty nextgroup=redifArgumentType contained
    +syntax match redifFieldURL /^URL:/ skipwhite skipempty nextgroup=redifArgumentURL contained
    +syntax match redifFieldVersion /^Version:/ skipwhite skipempty nextgroup=redifArgumentVersion contained
    +syntax match redifFieldVolume /^Volume:/ skipwhite skipempty nextgroup=redifArgumentVolume contained
    +syntax match redifFieldWorkplaceEmail /^Workplace-Email:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceEmail contained
    +syntax match redifFieldWorkplaceFax /^Workplace-Fax:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceFax contained
    +syntax match redifFieldWorkplaceHomepage /^Workplace-Homepage:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceHomepage contained
    +syntax match redifFieldWorkplaceInstitution /^Workplace-Institution:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceInstitution contained
    +syntax match redifFieldWorkplaceLocation /^Workplace-Location:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceLocation contained
    +syntax match redifFieldWorkplaceName /^Workplace-Name:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceName contained
    +syntax match redifFieldWorkplaceNameEnglish /^Workplace-Name-English:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceNameEnglish contained
    +syntax match redifFieldWorkplaceOrganization /^Workplace-Organization:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceOrganization contained
    +syntax match redifFieldWorkplacePhone /^Workplace-Phone:/ skipwhite skipempty nextgroup=redifArgumentWorkplacePhone contained
    +syntax match redifFieldWorkplacePostal /^Workplace-Postal:/ skipwhite skipempty nextgroup=redifArgumentWorkplacePostal contained
    +syntax match redifFieldYear /^Year:/ skipwhite skipempty nextgroup=redifArgumentYear contained
    +
    +highlight def link redifFieldAbstract redifField
    +highlight def link redifFieldArticleHandle redifField
    +highlight def link redifFieldAuthorArticle redifField
    +highlight def link redifFieldAuthorBook redifField
    +highlight def link redifFieldAuthorChapter redifField
    +highlight def link redifFieldAuthorEmail redifField
    +highlight def link redifFieldAuthorFax redifField
    +highlight def link redifFieldAuthorHomepage redifField
    +highlight def link redifFieldAuthorName redifField
    +highlight def link redifFieldAuthorNameFirst redifField
    +highlight def link redifFieldAuthorNameLast redifField
    +highlight def link redifFieldAuthorPaper redifField
    +highlight def link redifFieldAuthorPerson redifField
    +highlight def link redifFieldAuthorPhone redifField
    +highlight def link redifFieldAuthorPostal redifField
    +highlight def link redifFieldAuthorSoftware redifField
    +highlight def link redifFieldAuthorWorkplaceEmail redifField
    +highlight def link redifFieldAuthorWorkplaceFax redifField
    +highlight def link redifFieldAuthorWorkplaceHomepage redifField
    +highlight def link redifFieldAuthorWorkplaceInstitution redifField
    +highlight def link redifFieldAuthorWorkplaceLocation redifField
    +highlight def link redifFieldAuthorWorkplaceName redifField
    +highlight def link redifFieldAuthorWorkplaceNameEnglish redifField
    +highlight def link redifFieldAuthorWorkplacePhone redifField
    +highlight def link redifFieldAuthorWorkplacePostal redifField
    +highlight def link redifFieldAvailability redifField
    +highlight def link redifFieldBookHandle redifField
    +highlight def link redifFieldBookTitle redifField
    +highlight def link redifFieldChapterHandle redifField
    +highlight def link redifFieldChapter redifField
    +highlight def link redifFieldClassificationJEL redifField
    +highlight def link redifFieldContactEmail redifField
    +highlight def link redifFieldCreationDate redifField
    +highlight def link redifFieldDescription redifField
    +highlight def link redifFieldEdition redifField
    +highlight def link redifFieldEditorBook redifField
    +highlight def link redifFieldEditorEmail redifField
    +highlight def link redifFieldEditorFax redifField
    +highlight def link redifFieldEditorHomepage redifField
    +highlight def link redifFieldEditorName redifField
    +highlight def link redifFieldEditorNameFirst redifField
    +highlight def link redifFieldEditorNameLast redifField
    +highlight def link redifFieldEditorPerson redifField
    +highlight def link redifFieldEditorPhone redifField
    +highlight def link redifFieldEditorPostal redifField
    +highlight def link redifFieldEditorSeries redifField
    +highlight def link redifFieldEditorWorkplaceEmail redifField
    +highlight def link redifFieldEditorWorkplaceFax redifField
    +highlight def link redifFieldEditorWorkplaceHomepage redifField
    +highlight def link redifFieldEditorWorkplaceInstitution redifField
    +highlight def link redifFieldEditorWorkplaceLocation redifField
    +highlight def link redifFieldEditorWorkplaceName redifField
    +highlight def link redifFieldEditorWorkplaceNameEnglish redifField
    +highlight def link redifFieldEditorWorkplacePhone redifField
    +highlight def link redifFieldEditorWorkplacePostal redifField
    +highlight def link redifFieldEmail redifField
    +highlight def link redifFieldFax redifField
    +highlight def link redifFieldFileFormat redifField
    +highlight def link redifFieldFileFunction redifField
    +highlight def link redifFieldFileRestriction redifField
    +highlight def link redifFieldFileSize redifField
    +highlight def link redifFieldFileURL redifField
    +highlight def link redifFieldFollowup redifField
    +highlight def link redifFieldHandleOfArchive redifField
    +highlight def link redifFieldHandleOfInstitution redifField
    +highlight def link redifFieldHandleOfPerson redifField
    +highlight def link redifFieldHandleOfSeries redifField
    +highlight def link redifFieldHandleOfWork redifField
    +highlight def link redifFieldHasChapter redifField
    +highlight def link redifFieldHomepage redifField
    +highlight def link redifFieldInBook redifField
    +highlight def link redifFieldISBN redifField
    +highlight def link redifFieldISSN redifField
    +highlight def link redifFieldIssue redifField
    +highlight def link redifFieldJournal redifField
    +highlight def link redifFieldKeywords redifField
    +highlight def link redifFieldKeywords redifField
    +highlight def link redifFieldLanguage redifField
    +highlight def link redifFieldLastLoginDate redifField
    +highlight def link redifFieldLength redifField
    +highlight def link redifFieldMaintainerEmail redifField
    +highlight def link redifFieldMaintainerFax redifField
    +highlight def link redifFieldMaintainerName redifField
    +highlight def link redifFieldMaintainerPhone redifField
    +highlight def link redifFieldMonth redifField
    +highlight def link redifFieldNameASCII redifField
    +highlight def link redifFieldNameFirst redifField
    +highlight def link redifFieldNameFull redifField
    +highlight def link redifFieldNameLast redifField
    +highlight def link redifFieldNameMiddle redifField
    +highlight def link redifFieldNamePrefix redifField
    +highlight def link redifFieldNameSuffix redifField
    +highlight def link redifFieldName redifField
    +highlight def link redifFieldNote redifField
    +highlight def link redifFieldNotification redifField
    +highlight def link redifFieldNumber redifField
    +highlight def link redifFieldOrderEmail redifField
    +highlight def link redifFieldOrderHomepage redifField
    +highlight def link redifFieldOrderPostal redifField
    +highlight def link redifFieldOrderURL redifField
    +highlight def link redifFieldPages redifField
    +highlight def link redifFieldPaperHandle redifField
    +highlight def link redifFieldPhone redifField
    +highlight def link redifFieldPostal redifField
    +highlight def link redifFieldPredecessor redifField
    +highlight def link redifFieldPrice redifField
    +highlight def link redifFieldPrimaryDefunct redifField
    +highlight def link redifFieldPrimaryEmail redifField
    +highlight def link redifFieldPrimaryFax redifField
    +highlight def link redifFieldPrimaryHomepage redifField
    +highlight def link redifFieldPrimaryInstitution redifField
    +highlight def link redifFieldPrimaryLocation redifField
    +highlight def link redifFieldPrimaryName redifField
    +highlight def link redifFieldPrimaryNameEnglish redifField
    +highlight def link redifFieldPrimaryPhone redifField
    +highlight def link redifFieldPrimaryPostal redifField
    +highlight def link redifFieldProgrammingLanguage redifField
    +highlight def link redifFieldProviderEmail redifField
    +highlight def link redifFieldProviderFax redifField
    +highlight def link redifFieldProviderHomepage redifField
    +highlight def link redifFieldProviderInstitution redifField
    +highlight def link redifFieldProviderLocation redifField
    +highlight def link redifFieldProviderName redifField
    +highlight def link redifFieldProviderNameEnglish redifField
    +highlight def link redifFieldProviderPhone redifField
    +highlight def link redifFieldProviderPostal redifField
    +highlight def link redifFieldPublicationDate redifField
    +highlight def link redifFieldPublicationStatus redifField
    +highlight def link redifFieldPublicationType redifField
    +highlight def link redifFieldQuaternaryEmail redifField
    +highlight def link redifFieldQuaternaryFax redifField
    +highlight def link redifFieldQuaternaryHomepage redifField
    +highlight def link redifFieldQuaternaryInstitution redifField
    +highlight def link redifFieldQuaternaryLocation redifField
    +highlight def link redifFieldQuaternaryName redifField
    +highlight def link redifFieldQuaternaryNameEnglish redifField
    +highlight def link redifFieldQuaternaryPhone redifField
    +highlight def link redifFieldQuaternaryPostal redifField
    +highlight def link redifFieldRegisteredDate redifField
    +highlight def link redifFieldRequires redifField
    +highlight def link redifFieldRestriction redifField
    +highlight def link redifFieldRevisionDate redifField
    +highlight def link redifFieldSecondaryDefunct redifField
    +highlight def link redifFieldSecondaryEmail redifField
    +highlight def link redifFieldSecondaryFax redifField
    +highlight def link redifFieldSecondaryHomepage redifField
    +highlight def link redifFieldSecondaryInstitution redifField
    +highlight def link redifFieldSecondaryLocation redifField
    +highlight def link redifFieldSecondaryName redifField
    +highlight def link redifFieldSecondaryNameEnglish redifField
    +highlight def link redifFieldSecondaryPhone redifField
    +highlight def link redifFieldSecondaryPostal redifField
    +highlight def link redifFieldSeries redifField
    +highlight def link redifFieldShortId redifField
    +highlight def link redifFieldSize redifField
    +highlight def link redifFieldSoftwareHandle redifField
    +highlight def link redifFieldTemplateType redifField
    +highlight def link redifFieldTertiaryDefunct redifField
    +highlight def link redifFieldTertiaryEmail redifField
    +highlight def link redifFieldTertiaryFax redifField
    +highlight def link redifFieldTertiaryHomepage redifField
    +highlight def link redifFieldTertiaryInstitution redifField
    +highlight def link redifFieldTertiaryLocation redifField
    +highlight def link redifFieldTertiaryName redifField
    +highlight def link redifFieldTertiaryNameEnglish redifField
    +highlight def link redifFieldTertiaryPhone redifField
    +highlight def link redifFieldTertiaryPostal redifField
    +highlight def link redifFieldTitle redifField
    +highlight def link redifFieldTitle redifField
    +highlight def link redifFieldType redifField
    +highlight def link redifFieldURL redifField
    +highlight def link redifFieldVersion redifField
    +highlight def link redifFieldVolume redifField
    +highlight def link redifFieldWorkplaceEmail redifField
    +highlight def link redifFieldWorkplaceFax redifField
    +highlight def link redifFieldWorkplaceHomepage redifField
    +highlight def link redifFieldWorkplaceInstitution redifField
    +highlight def link redifFieldWorkplaceLocation redifField
    +highlight def link redifFieldWorkplaceName redifField
    +highlight def link redifFieldWorkplaceNameEnglish redifField
    +highlight def link redifFieldWorkplaceOrganization redifField
    +highlight def link redifFieldWorkplacePhone redifField
    +highlight def link redifFieldWorkplacePostal redifField
    +highlight def link redifFieldYear redifField
    +
    +" Deprecated
    +"     same as Provider-*
    +"     nextgroup=redifArgumentProvider*
    +syntax match redifFieldPublisherEmail /^Publisher-Email:/ skipwhite skipempty nextgroup=redifArgumentProviderEmail contained
    +syntax match redifFieldPublisherFax /^Publisher-Fax:/ skipwhite skipempty nextgroup=redifArgumentProviderFax contained
    +syntax match redifFieldPublisherHomepage /^Publisher-Homepage:/ skipwhite skipempty nextgroup=redifArgumentProviderHomepage contained
    +syntax match redifFieldPublisherInstitution /^Publisher-Institution:/ skipwhite skipempty nextgroup=redifArgumentProviderInstitution contained
    +syntax match redifFieldPublisherLocation /^Publisher-Location:/ skipwhite skipempty nextgroup=redifArgumentProviderLocation contained
    +syntax match redifFieldPublisherName /^Publisher-Name:/ skipwhite skipempty nextgroup=redifArgumentProviderName contained
    +syntax match redifFieldPublisherNameEnglish /^Publisher-Name-English:/ skipwhite skipempty nextgroup=redifArgumentProviderNameEnglish contained
    +syntax match redifFieldPublisherPhone /^Publisher-Phone:/ skipwhite skipempty nextgroup=redifArgumentProviderPhone contained
    +syntax match redifFieldPublisherPostal /^Publisher-Postal:/ skipwhite skipempty nextgroup=redifArgumentProviderPostal contained
    +
    +highlight def link redifFieldPublisherEmail redifFieldDeprecated
    +highlight def link redifFieldPublisherFax redifFieldDeprecated
    +highlight def link redifFieldPublisherHomepage redifFieldDeprecated
    +highlight def link redifFieldPublisherInstitution redifFieldDeprecated
    +highlight def link redifFieldPublisherLocation redifFieldDeprecated
    +highlight def link redifFieldPublisherName redifFieldDeprecated
    +highlight def link redifFieldPublisherNameEnglish redifFieldDeprecated
    +highlight def link redifFieldPublisherPhone redifFieldDeprecated
    +highlight def link redifFieldPublisherPostal redifFieldDeprecated
    +
    +" Standard arguments
    +"    By default, they contain all the argument until another field is started:
    +"        start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1
    +"    For arguments that must not span more than one line, use a match:
    +"        /\%(^\S\{-}:\)\@!\S.*/
    +"        AND ADD "display"
    +"    This is faster.
    +"
    +"    Those arguments are not highlighted so far. They are here for future
    +"    extensions.
    +"    TODO Find more RegEx for these arguments
    +"    	TODO Fax, Phone
    +"    	TODO URL, Homepage
    +"    	TODO Keywords
    +"    	TODO Classification-JEL
    +"    	TODO Short-Id, Author-Person, Editor-Person
    +"
    +"    Arguments that may span several lines:
    +syntax region redifArgumentAuthorWorkplaceLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentAuthorWorkplacePostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorWorkplacePostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentFileFunction start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentIssue start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentJournal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentOrderPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentPrice start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentPrimaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentPrimaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentProviderLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentProviderPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentQuaternaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentQuaternaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentRequires start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentSecondaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentSecondaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentSize start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentTertiaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentTertiaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentVersion start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentWorkplaceLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentWorkplacePhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentWorkplacePostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +
    +" Arguments that may not span several lines:
    +"    If you are sure that these arguments cannot span several lines, change
    +"    them to a match:
    +"        /\%(^\S\{-}:\)\@!\S.*/
    +"    AND ADD "display" after "contained"
    +"        You can use this command on each line that you want to change:
    +"        :s+\Vregion \(\w\+\) start=/\\%(^\\S\\{-}:\\)\\@!\\S/ end=/^\\S\\{-}:/me=s-1 contained+match \1 /\\%(^\\S\\{-}:\\)\\@!\\S.*/ contained display
    +syntax region redifArgumentAuthorFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentAuthorHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentAuthorName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentAuthorNameFirst start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentAuthorNameLast start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentAuthorPerson start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentAuthorPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentAuthorPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentAuthorWorkplaceFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentAuthorWorkplaceHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentAuthorWorkplaceName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentAuthorWorkplaceNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentAuthorWorkplacePhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorNameFirst start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorNameLast start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorPerson start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorWorkplaceFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorWorkplaceHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorWorkplaceLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorWorkplaceName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorWorkplaceNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentEditorWorkplacePhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentFileURL start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentMaintainerFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentMaintainerName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentMaintainerPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentNameFirst start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentNameFull start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentNameLast start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentNameMiddle start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentNamePrefix start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentNameSuffix start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentNumber start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentOrderHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentOrderURL start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentPrimaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentPrimaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentPrimaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentPrimaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentPrimaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentProviderFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentProviderHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentProviderName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentProviderNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentProviderPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentQuaternaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentQuaternaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentQuaternaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentQuaternaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentQuaternaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentSecondaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentSecondaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentSecondaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentSecondaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentSecondaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentSeries start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentShortId start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentTertiaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentTertiaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentTertiaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentTertiaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentTertiaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentURL start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentWorkplaceFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentWorkplaceHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentWorkplaceName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentWorkplaceNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +syntax region redifArgumentWorkplaceOrganization start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
    +
    +" Special arguments
    +"    Those arguments require special values
    +"    TODO Improve some RegEx
    +"    	TODO Improve Emails
    +"    	TODO Improve ISBN
    +"    	TODO Improve ISSN
    +"    	TODO Improve spell check (add words from economics.
    +"    	   expl=macroeconometrics, Schumpeterian, IS-LM, etc.)
    +"
    +"    Template-Type
    +syntax match redifArgumentTemplateType /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectTemplateType contained display
    +syntax match redifCorrectTemplateType /ReDIF-\%(Paper\|Article\|Chapter\|Book\|Software\|Archive\|Series\|Institution\|Person\)/ nextgroup=redifTemplateVersionNumberContainer contained display
    +syntax match redifTemplateVersionNumberContainer /.\+/ contains=redifTemplateVersionNumber contained display
    +syntax match redifTemplateVersionNumber / \d\+\.\d\+/ nextgroup=redifWrongLineEnding contained display
    +
    +highlight def link redifArgumentTemplateType redifError
    +highlight def link redifCorrectTemplateType Constant
    +highlight def link redifTemplateVersionNumber Number
    +highlight def link redifTemplateVersionNumberContainer redifError
    +
    +"    Handles:
    +"
    +"        Handles of Works:
    +syntax match redifArgumentHandleOfWork /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifArgumentAuthorArticle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifArgumentAuthorBook /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifArgumentAuthorChapter /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifArgumentAuthorPaper /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifArgumentAuthorSoftware /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifArgumentEditorBook /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifArgumentEditorSeries /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifArgumentInBook /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifArgumentHasChapter /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifArgumentArticleHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifArgumentBookHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifArgumentChapterHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifArgumentPaperHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifArgumentSoftwareHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
    +syntax match redifCorrectHandleOfWork /RePEc:\a\a\a:\%(_\@!\w\)\{6}:\S\+/ contains=redifForbiddenCharactersInHandle,redifBestPracticeInHandle nextgroup=redifWrongLineEnding contained display
    +" TODO Are those characters really forbidden???
    +syntax match redifForbiddenCharactersInHandle /[\/*?"<>|]/ contained display
    +syntax match redifBestPracticeInHandle /\<\%([vi]:[1-9]\d*\|y:[1-9]\d\{3}\|p:[1-9]\d*-[1-9]\d*\|i:\%(jan\|feb\|mar\|apr\|may\|jun\|jul\|aug\|sep\|oct\|nov\|dec\|spr\|sum\|aut\|win\|spe\|Q[1-4]\|\d\d-\d\d\)\|Q:[1-4]\)\>/ contained display
    +
    +highlight def link redifArgumentHandleOfWork redifError
    +highlight def link redifArgumentAuthorArticle redifError
    +highlight def link redifArgumentAuthorBook redifError
    +highlight def link redifArgumentAuthorChapter redifError
    +highlight def link redifArgumentAuthorPaper redifError
    +highlight def link redifArgumentAuthorSoftware redifError
    +highlight def link redifArgumentEditorBook redifError
    +highlight def link redifArgumentEditorSeries redifError
    +highlight def link redifArgumentInBook redifError
    +highlight def link redifArgumentHasChapter redifError
    +highlight def link redifArgumentArticleHandle redifError
    +highlight def link redifArgumentBookHandle redifError
    +highlight def link redifArgumentChapterHandle redifError
    +highlight def link redifArgumentPaperHandle redifError
    +highlight def link redifArgumentSoftwareHandle redifError
    +highlight def link redifForbiddenCharactersInHandle redifError
    +highlight def link redifBestPracticeInHandle redifSpecial
    +
    +"        Handles of Series:
    +syntax match redifArgumentHandleOfSeries /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfSeries contained display
    +syntax match redifArgumentFollowup /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfSeries contained display
    +syntax match redifArgumentPredecessor /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfSeries contained display
    +syntax match redifCorrectHandleOfSeries /RePEc:\a\a\a:\%(_\@!\w\)\{6}/ nextgroup=redifWrongLineEnding contained display
    +
    +highlight def link redifArgumentHandleOfSeries redifError
    +highlight def link redifArgumentFollowup redifError
    +highlight def link redifArgumentPredecessor redifError
    +
    +"        Handles of Archives:
    +syntax match redifArgumentHandleOfArchive /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfArchive contained display
    +syntax match redifCorrectHandleOfArchive /RePEc:\a\a\a/ nextgroup=redifWrongLineEnding contained display
    +
    +highlight def link redifArgumentHandleOfArchive redifError
    +
    +"        Handles of Person:
    +syntax match redifArgumentHandleOfPerson /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfPerson contained display
    +syntax match redifCorrectHandleOfPerson /\%(\%(:\@!\S\)\{-}:\)\{2}[1-9]\d\{3}\%(-02\%(-[12]\d\|-0[1-9]\)\|-\%(0[469]\|11\)\%(-30\|-[12]\d\|-0[1-9]\)\|-\%(0[13578]\|1[02]\)\%(-3[01]\|-[12]\d\|-0[1-9]\)\):\S\+/ nextgroup=redifWrongLineEnding contained display
    +
    +highlight def link redifArgumentHandleOfPerson redifError
    +
    +"        Handles of Institution:
    +syntax match redifArgumentAuthorWorkplaceInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
    +syntax match redifArgumentEditorWorkplaceInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
    +syntax match redifArgumentPrimaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
    +syntax match redifArgumentProviderInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
    +syntax match redifArgumentPublisherInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
    +syntax match redifArgumentQuaternaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
    +syntax match redifArgumentSecondaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
    +syntax match redifArgumentTertiaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
    +syntax match redifArgumentWorkplaceInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
    +syntax match redifArgumentHandleOfInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
    +syntax match redifArgumentPrimaryDefunct /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
    +syntax match redifArgumentSecondaryDefunct /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
    +syntax match redifArgumentTertiaryDefunct /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
    +" TODO Are digits authorized? Apparently not.
    +" Country codes:
    +" http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm
    +syntax match redifCorrectHandleOfInstitution /RePEc:\a\a\a:\a\{5}\(ea\|af\|ax\|al\|dz\|as\|ad\|ao\|ai\|aq\|ag\|ar\|am\|aw\|au\|at\|az\|bs\|bh\|bd\|bb\|by\|be\|bz\|bj\|bm\|bt\|bo\|bq\|ba\|bw\|bv\|br\|io\|bn\|bg\|bf\|bi\|kh\|cm\|ca\|cv\|ky\|cf\|td\|cl\|cn\|cx\|cc\|co\|km\|cg\|cd\|ck\|cr\|ci\|hr\|cu\|cw\|cy\|cz\|dk\|dj\|dm\|do\|ec\|eg\|sv\|gq\|er\|ee\|et\|fk\|fo\|fj\|fi\|fr\|gf\|pf\|tf\|ga\|gm\|ge\|de\|gh\|gi\|gr\|gl\|gd\|gp\|gu\|gt\|gg\|gn\|gw\|gy\|ht\|hm\|va\|hn\|hk\|hu\|is\|in\|id\|ir\|iq\|ie\|im\|il\|it\|jm\|jp\|je\|jo\|kz\|ke\|ki\|kp\|kr\|kw\|kg\|la\|lv\|lb\|ls\|lr\|ly\|li\|lt\|lu\|mo\|mk\|mg\|mw\|my\|mv\|ml\|mt\|mh\|mq\|mr\|mu\|yt\|mx\|fm\|md\|mc\|mn\|me\|ms\|ma\|mz\|mm\|na\|nr\|np\|nl\|nc\|nz\|ni\|ne\|ng\|nu\|nf\|mp\|no\|om\|pk\|pw\|ps\|pa\|pg\|py\|pe\|ph\|pn\|pl\|pt\|pr\|qa\|re\|ro\|ru\|rw\|bl\|sh\|kn\|lc\|mf\|pm\|vc\|ws\|sm\|st\|sa\|sn\|rs\|sc\|sl\|sg\|sx\|sk\|si\|sb\|so\|za\|gs\|ss\|es\|lk\|sd\|sr\|sj\|sz\|se\|ch\|sy\|tw\|tj\|tz\|th\|tl\|tg\|tk\|to\|tt\|tn\|tr\|tm\|tc\|tv\|ug\|ua\|ae\|gb\|us\|um\|uy\|uz\|vu\|ve\|vn\|vg\|vi\|wf\|eh\|ye\|zm\|zw\)/ nextgroup=redifWrongLineEnding contained display
    +
    +highlight def link redifArgumentHandleOfInstitution redifError
    +highlight def link redifArgumentPrimaryDefunct redifError
    +highlight def link redifArgumentSecondaryDefunct redifError
    +highlight def link redifArgumentTertiaryDefunct redifError
    +
    +"    Emails:
    +syntax match redifArgumentAuthorEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifArgumentAuthorWorkplaceEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifArgumentContactEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifArgumentEditorEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifArgumentEditorWorkplaceEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifArgumentEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifArgumentMaintainerEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifArgumentOrderEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifArgumentPrimaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifArgumentProviderEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifArgumentPublisherEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifArgumentQuaternaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifArgumentSecondaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifArgumentTertiaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifArgumentWorkplaceEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
    +syntax match redifCorrectEmail /\%(@\@!\S\)\+@\%(@\@!\S\)\+/ nextgroup=redifWrongLineEnding contained display
    +
    +highlight def link redifArgumentAuthorEmail redifError
    +highlight def link redifArgumentAuthorWorkplaceEmail redifError
    +highlight def link redifArgumentContactEmail redifError
    +highlight def link redifArgumentEditorEmail redifError
    +highlight def link redifArgumentEditorWorkplaceEmail redifError
    +highlight def link redifArgumentEmail redifError
    +highlight def link redifArgumentMaintainerEmail redifError
    +highlight def link redifArgumentOrderEmail redifError
    +highlight def link redifArgumentPrimaryEmail redifError
    +highlight def link redifArgumentProviderEmail redifError
    +highlight def link redifArgumentPublisherEmail redifError
    +highlight def link redifArgumentQuaternaryEmail redifError
    +highlight def link redifArgumentSecondaryEmail redifError
    +highlight def link redifArgumentTertiaryEmail redifError
    +highlight def link redifArgumentWorkplaceEmail redifError
    +
    +"    Language
    +"    Source: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
    +syntax match redifArgumentLanguage /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectLanguage contained display
    +syntax match redifCorrectLanguage /\<\(aa\|ab\|af\|ak\|als\|am\|an\|ang\|ar\|arc\|as\|ast\|av\|ay\|az\|ba\|bar\|bat-smg\|bcl\|be\|be-x-old\|bg\|bh\|bi\|bm\|bn\|bo\|bpy\|br\|bs\|bug\|bxr\|ca\|ce\|ceb\|ch\|cho\|chr\|chy\|co\|cr\|cs\|csb\|cu\|cv\|cy\|da\|de\|diq\|dsb\|dv\|dz\|ee\|el\|en\|eo\|es\|et\|eu\|ext\|fa\|ff\|fi\|fiu-vro\|fj\|fo\|fr\|frp\|fur\|fy\|ga\|gd\|gil\|gl\|gn\|got\|gu\|gv\|ha\|haw\|he\|hi\|ho\|hr\|ht\|hu\|hy\|hz\|ia\|id\|ie\|ig\|ii\|ik\|ilo\|io\|is\|it\|iu\|ja\|jbo\|jv\|ka\|kg\|ki\|kj\|kk\|kl\|km\|kn\|khw\|ko\|kr\|ks\|ksh\|ku\|kv\|kw\|ky\|la\|lad\|lan\|lb\|lg\|li\|lij\|lmo\|ln\|lo\|lt\|lv\|map-bms\|mg\|mh\|mi\|mk\|ml\|mn\|mo\|mr\|ms\|mt\|mus\|my\|na\|nah\|nap\|nd\|nds\|nds-nl\|ne\|new\|ng\|nl\|nn\|no\|nr\|nso\|nrm\|nv\|ny\|oc\|oj\|om\|or\|os\|pa\|pag\|pam\|pap\|pdc\|pi\|pih\|pl\|pms\|ps\|pt\|qu\|rm\|rmy\|rn\|ro\|roa-rup\|ru\|rw\|sa\|sc\|scn\|sco\|sd\|se\|sg\|sh\|si\|simple\|sk\|sl\|sm\|sn\|so\|sq\|sr\|ss\|st\|su\|sv\|sw\|ta\|te\|tet\|tg\|th\|ti\|tk\|tl\|tlh\|tn\|to\|tpi\|tr\|ts\|tt\|tum\|tw\|ty\|udm\|ug\|uk\|ur\|uz\|ve\|vi\|vec\|vls\|vo\|wa\|war\|wo\|xal\|xh\|yi\|yo\|za\|zh\|zh-min-nan\|zh-yue\|zu\)\>/ nextgroup=redifWrongLineEnding contained display
    +
    +highlight def link redifArgumentLanguage redifError
    +highlight def link redifCorrectLanguage redifSpecial
    +
    +"    Length
    +"    Based on the example in the documentation. But apparently any field is
    +"    possible
    +syntax region redifArgumentLength start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=redifGoodLength contained
    +syntax match redifGoodLength /1 page\|[1-9]\d*\%( pages\)\=/ contained display
    +
    +highlight def link redifGoodLength redifSpecial
    +
    +"    Publication-Type
    +syntax match redifArgumentPublicationType /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectPublicationType contained display
    +syntax match redifCorrectPublicationType /\<\(journal article\|book\|book chapter\|working paper\|conference paper\|report\|other\)\>/ nextgroup=redifWrongLineEnding contained display
    +
    +highlight def link redifArgumentPublicationType redifError
    +highlight def link redifCorrectPublicationType redifSpecial
    +
    +"    Publication-Status
    +syntax region redifArgumentPublicationStatus start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=redifSpecialPublicationStatus contained
    +syntax match redifSpecialPublicationStatus /published\|forthcoming/ nextgroup=redifCorrectPublicationStatus contained display
    +syntax region redifCorrectPublicationStatus start=/./ end=/^\S\{-}:/me=s-1 contained
    +
    +highlight def link redifArgumentPublicationStatus redifError
    +highlight def link redifSpecialPublicationStatus redifSpecial
    +
    +"    Month
    +"    TODO Are numbers also allowed?
    +syntax match redifArgumentMonth /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodMonth contained display
    +syntax match redifGoodMonth /\<\(Jan\%(uary\)\=\|Feb\%(ruary\)\=\|Mar\%(ch\)\=\|Apr\%(il\)\=\|May\|June\=\|July\=\|Aug\%(ust\)\=\|Sep\%(tember\)\=\|Oct\%(ober\)\=\|Nov\%(ember\)\=\|Dec\%(ember\)\=\)\>/ contained display
    +
    +highlight def link redifGoodMonth redifSpecial
    +
    +"    Integers: Volume, Chapter
    +syntax match redifArgumentVolume /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectInteger contained display
    +syntax match redifArgumentChapter /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectInteger contained display
    +syntax match redifCorrectInteger /[1-9]\d*/ nextgroup=redifWrongLineEnding contained display
    +
    +highlight def link redifArgumentVolume redifError
    +highlight def link redifArgumentChapter redifError
    +
    +"    Year
    +syntax match redifArgumentYear /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectYear contained display
    +syntax match redifCorrectYear /[1-9]\d\{3}/ nextgroup=redifWrongLineEnding contained display
    +
    +highlight def link redifArgumentYear redifError
    +
    +"    Edition
    +"    Based on the example in the documentation.
    +syntax match redifArgumentEdition /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodEdition contained display
    +syntax match redifGoodEdition /1st\|2nd\|3rd\|[4-9]th\|[1-9]\d*\%(1st\|2nd\|3rd\|[4-9]th\)\|[1-9]\d*/ contained display
    +
    +highlight def link redifGoodEdition redifSpecial
    +
    +"    ISBN
    +syntax match redifArgumentISBN /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodISBN contained display
    +syntax match redifGoodISBN /\d[0-9-]\{8,15}\d/ contained display
    +
    +highlight def link redifGoodISBN redifSpecial
    +
    +"    ISSN
    +syntax match redifArgumentISSN /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodISSN contained display
    +syntax match redifGoodISSN /\d\{4}-\d\{3}[0-9X]/ contained display
    +
    +highlight def link redifGoodISSN redifSpecial
    +
    +"    File-Size
    +"    Based on the example in the documentation.
    +syntax region redifArgumentFileSize start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=redifGoodSize contained
    +syntax match redifGoodSize /kb\|bytes/ contained display
    +
    +highlight def link redifGoodSize redifSpecial
    +
    +"    Type
    +syntax match redifArgumentType /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectType contained display
    +syntax match redifCorrectType /ReDIF-Paper\|ReDIF-Software\|ReDIF-Article\|ReDIF-Chapter\|ReDIF-Book/ nextgroup=redifWrongLineEnding contained display
    +
    +highlight def link redifArgumentType redifError
    +highlight def link redifCorrectType redifSpecial
    +
    +"    Dates: Publication-Date, Creation-Date, Revision-Date,
    +"    Last-Login-Date, Registration-Date
    +syntax match redifArgumentCreationDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
    +syntax match redifArgumentLastLoginDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
    +syntax match redifArgumentPublicationDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
    +syntax match redifArgumentRegisteredDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
    +syntax match redifArgumentRevisionDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
    +syntax match redifCorrectDate /[1-9]\d\{3}\%(-02\%(-[12]\d\|-0[1-9]\)\=\|-\%(0[469]\|11\)\%(-30\|-[12]\d\|-0[1-9]\)\=\|-\%(0[13578]\|1[02]\)\%(-3[01]\|-[12]\d\|-0[1-9]\)\=\)\=/ nextgroup=redifWrongLineEnding contained display
    +
    +highlight def link redifArgumentCreationDate redifError
    +highlight def link redifArgumentLastLoginDate redifError
    +highlight def link redifArgumentPublicationDate redifError
    +highlight def link redifArgumentRegisteredDate redifError
    +highlight def link redifArgumentRevisionDate redifError
    +
    +"    Classification-JEL
    +syntax match redifArgumentClassificationJEL /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectJEL contained display
    +syntax match redifCorrectJEL /\<\%(\u\d\{,2}[,; \t]\s*\)*\u\d\{,2}/ contains=redifSpecialJEL nextgroup=redifWrongLineEnding contained display
    +syntax match redifSpecialJEL /\<\u\d\{,2}/ contained display
    +
    +highlight def link redifArgumentClassificationJEL redifError
    +highlight def link redifSpecialJEL redifSpecial
    +
    +"    Pages
    +syntax match redifArgumentPages /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectPages contained display
    +syntax match redifCorrectPages /[1-9]\d*-[1-9]\d*/ nextgroup=redifWrongLineEnding contained display
    +
    +highlight def link redifArgumentPages redifError
    +
    +"    Name-ASCII
    +syntax match redifArgumentNameASCII /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectNameASCII contained display
    +syntax match redifCorrectNameASCII /[ -~]/ contained display
    +
    +highlight def link redifArgumentNameASCII redifError
    +
    +"    Programming-Language
    +syntax match redifArgumentProgrammingLanguage /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodProgrammingLanguage contained display
    +syntax match redifGoodProgrammingLanguage /\/ nextgroup=redifWrongLineEnding contained display
    +
    +highlight def link redifGoodProgrammingLanguage redifSpecial
    +
    +"    File-Format
    +"    TODO The link in the documentation that gives the list of possible formats is broken.
    +"    ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/media-types
    +"    These are based on the examples in the documentation.
    +syntax match redifArgumentFileFormat /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodFormat contained display
    +syntax match redifGoodFormat "\a\+/[[:alpha:]+-]\+" nextgroup=redifWrongLineEnding contains=redifSpecialFormat contained display
    +syntax match redifSpecialFormat "application/atom+xml\|application/ecmascript\|application/EDI-X12\|application/EDIFACT\|application/json\|application/javascript\|application/octet-stream\|application/ogg\|application/pdf\|application/postscript\|application/rdf+xml\|application/rss+xml\|application/soap+xml\|application/font-woff\|application/xhtml+xml\|application/xml\|application/xml-dtd\|application/xop+xml\|application/zip\|application/gzip\|audio/basic\|audio/L24\|audio/mp4\|audio/mpeg\|audio/ogg\|audio/vorbis\|audio/vnd.rn-realaudio\|audio/vnd.wave\|audio/webm\|image/gif\|image/jpeg\|image/pjpeg\|image/png\|image/svg+xml\|image/tiff\|image/vnd.microsoft.icon\|message/http\|message/imdn+xml\|message/partial\|message/rfc822\|model/example\|model/iges\|model/mesh\|model/vrml\|model/x3d+binary\|model/x3d+vrml\|model/x3d+xml\|multipart/mixed\|multipart/alternative\|multipart/related\|multipart/form-data\|multipart/signed\|multipart/encrypted\|text/cmd\|text/css\|text/csv\|text/html\|text/javascript\|text/plain\|text/vcard\|text/xml\|video/mpeg\|video/mp4\|video/ogg\|video/quicktime\|video/webm\|video/x-matroska\|video/x-ms-wmv\|video/x-flv" contained display
    +
    +highlight def link redifSpecialFormat redifSpecial
    +highlight def link redifArgumentFileFormat redifError
    +
    +" Keywords
    +"     Spell checked
    +syntax match redifArgumentKeywords /\%(^\S\{-}:\)\@!\S.*/ contains=@Spell,redifKeywordsSemicolon contained
    +syntax match redifKeywordsSemicolon /;/ contained
    +
    +highlight def link redifKeywordsSemicolon redifSpecial
    +
    +" Other spell-checked arguments
    +"    Very useful when copy-pasting abstracts that may contain hyphens or
    +"    ligatures.
    +syntax region redifArgumentAbstract start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
    +syntax region redifArgumentAvailability start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
    +syntax region redifArgumentBookTitle start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
    +syntax region redifArgumentDescription start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
    +syntax region redifArgumentFileRestriction start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
    +syntax region redifArgumentNote start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
    +syntax region redifArgumentNotification start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
    +syntax region redifArgumentRestriction start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
    +syntax region redifArgumentTitle start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
    +
    +" Wrong line ending
    +syntax match redifWrongLineEnding /.\+/ contained display
    +
    +highlight def link redifWrongLineEnding redifError
    +
    +" Final highlight
    +highlight def link redifComment Comment
    +highlight def link redifError Error
    +highlight def link redifField Identifier
    +highlight def link redifFieldDeprecated Identifier
    +highlight def link redifSpecial Special
    +" For deprecated fields:
    +highlight redifFieldDeprecated term=undercurl cterm=undercurl gui=undercurl guisp=DarkGrey
    +
    +" Sync: The template-type (ReDIF-Paper, ReDIF-Archive, etc.) influences which
    +" fields can follow. Thus sync must search backwards for it.
    +"
    +" I would like to simply ask VIM to search backward for the first occurrence of
    +" /^Template-Type:/, but it does not seem to be possible, so I have to start
    +" from the beginning of the file... This might slow down a lot for files that
    +" contain a lot of Template-Type statements.
    +syntax sync fromstart
    +
    +" The problem with syntax sync match (tried below), it is that, for example,
    +" it cannot realize when it is inside a Author-Name cluster, which is inside a
    +" Template-Type template...
    +"
    +" TODO Is this linecont pattern really useful? It seems to work anyway...
    +"syntax sync linecont /^\(Template-Type:\)\=\s*$/
    +" TODO This sync is surprising... It seems to work on several lines even
    +" though I replaced \_s* by \s*, even without the linecont pattern...
    +"syntax sync match redifSyncForTemplatePaper groupthere redifRegionTemplatePaper /^Template-Type:\s*ReDIF-Paper \d\+\.\d\+/
    +"syntax sync match redifSyncForTemplateArticle groupthere redifRegionTemplateArticle /^Template-Type:\s*ReDIF-Article \d\+\.\d\+/
    +"syntax sync match redifSyncForTemplateChapter groupthere redifRegionTemplateChapter /^Template-Type:\s*ReDIF-Chapter \d\+\.\d\+/
    +"syntax sync match redifSyncForTemplateBook groupthere redifRegionTemplateBook /^Template-Type:\s*ReDIF-Book \d\+\.\d\+/
    +"syntax sync match redifSyncForTemplateSoftware groupthere redifRegionTemplateSoftware /^Template-Type:\s*ReDIF-Software \d\+\.\d\+/
    +"syntax sync match redifSyncForTemplateArchive groupthere redifRegionTemplateArchive /^Template-Type:\s*ReDIF-Archive \d\+\.\d\+/
    +"syntax sync match redifSyncForTemplateSeries groupthere redifRegionTemplateSeries /^Template-Type:\s*ReDIF-Series \d\+\.\d\+/
    +"syntax sync match redifSyncForTemplateInstitution groupthere redifRegionTemplateInstitution /^Template-Type:\s*ReDIF-Institution \d\+\.\d\+/
    +"syntax sync match redifSyncForTemplatePerson groupthere redifRegionTemplatePerson /^Template-Type:\s*ReDIF-Person \d\+\.\d\+/
    +
    +" I do not really know how sync linebreaks works, but it helps when making
    +" changes on the argument when this argument is not on the same line than its
    +" field. I just assume that people won't leave more than one line of
    +" whitespace between fields and arguments (which is already very unlikely)
    +" hence the value of 2.
    +syntax sync linebreaks=2
    +
    +" Since folding is defined by the syntax, set foldmethod to syntax.
    +set foldmethod=syntax
    +
    +" Set "b:current_syntax" to the name of the syntax at the end:
    +let b:current_syntax="redif"
    diff --git a/.config/vim/syntax/registry.vim b/.config/vim/syntax/registry.vim
    new file mode 100644
    index 0000000..67b5e49
    --- /dev/null
    +++ b/.config/vim/syntax/registry.vim
    @@ -0,0 +1,103 @@
    +" Vim syntax file
    +" Language:	Windows Registry export with regedit (*.reg)
    +" Maintainer:	Dominique Stéphan (dominique@mggen.com)
    +" URL: 		http://www.mggen.com/vim/syntax/registry.zip (doesn't work)
    +" Last change:	2014 Oct 31
    +"		Included patch from Alexander A. Ulitin
    +
    +" clear any unwanted syntax defs
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" shut case off
    +syn case ignore
    +
    +" Head of regedit .reg files, it's REGEDIT4 on Win9#/NT
    +syn match registryHead		"^REGEDIT[0-9]*\s*$\|^Windows Registry Editor Version \d*\.\d*\s*$"
    +
    +" Comment
    +syn match  registryComment	"^;.*$"
    +
    +" Registry Key constant
    +syn keyword registryHKEY	HKEY_LOCAL_MACHINE HKEY_CLASSES_ROOT HKEY_CURRENT_USER
    +syn keyword registryHKEY	HKEY_USERS HKEY_CURRENT_CONFIG HKEY_DYN_DATA
    +" Registry Key shortcuts
    +syn keyword registryHKEY	HKLM HKCR HKCU HKU HKCC HKDD
    +
    +" Some values often found in the registry
    +" GUID (Global Unique IDentifier)
    +syn match   registryGUID	"{[0-9A-Fa-f]\{8}\-[0-9A-Fa-f]\{4}\-[0-9A-Fa-f]\{4}\-[0-9A-Fa-f]\{4}\-[0-9A-Fa-f]\{12}}" contains=registrySpecial
    +
    +" Disk
    +" syn match   registryDisk	"[a-zA-Z]:\\\\"
    +
    +" Special and Separator characters
    +syn match   registrySpecial	"\\"
    +syn match   registrySpecial	"\\\\"
    +syn match   registrySpecial	"\\\""
    +syn match   registrySpecial	"\."
    +syn match   registrySpecial	","
    +syn match   registrySpecial	"\/"
    +syn match   registrySpecial	":"
    +syn match   registrySpecial	"-"
    +
    +" String
    +syn match   registryString	"\".*\"" contains=registryGUID,registrySpecial
    +
    +" Path
    +syn region  registryPath		start="\[" end="\]" contains=registryHKEY,registryGUID,registrySpecial
    +
    +" Path to remove
    +" like preceding path but with a "-" at begin
    +syn region registryRemove	start="\[\-" end="\]" contains=registryHKEY,registryGUID,registrySpecial
    +
    +" Subkey
    +syn match  registrySubKey		"^\".*\"="
    +" Default value
    +syn match  registrySubKey		"^@="
    +
    +" Numbers
    +
    +" Hex or Binary
    +" The format can be precised between () :
    +" 0    REG_NONE
    +" 1    REG_SZ
    +" 2    REG_EXPAND_SZ
    +" 3    REG_BINARY
    +" 4    REG_DWORD, REG_DWORD_LITTLE_ENDIAN
    +" 5    REG_DWORD_BIG_ENDIAN
    +" 6    REG_LINK
    +" 7    REG_MULTI_SZ
    +" 8    REG_RESOURCE_LIST
    +" 9    REG_FULL_RESOURCE_DESCRIPTOR
    +" 10   REG_RESOURCE_REQUIREMENTS_LIST
    +" The value can take several lines, if \ ends the line
    +" The limit to 999 matches is arbitrary, it avoids Vim crashing on a very long
    +" line of hex values that ends in a comma.
    +"syn match registryHex		"hex\(([0-9]\{0,2})\)\=:\([0-9a-fA-F]\{2},\)\{0,999}\([0-9a-fA-F]\{2}\|\\\)$" contains=registrySpecial
    +syn match registryHex		"hex\(([0-9]\{0,2})\)\=:\([0-9a-fA-F]\{2},\)*\([0-9a-fA-F]\{2}\|\\\)$" contains=registrySpecial
    +syn match registryHex		"^\s*\([0-9a-fA-F]\{2},\)\{0,999}\([0-9a-fA-F]\{2}\|\\\)$" contains=registrySpecial
    +" Dword (32 bits)
    +syn match registryDword		"dword:[0-9a-fA-F]\{8}$" contains=registrySpecial
    +
    +
    +" The default methods for highlighting.  Can be overridden later
    +hi def link registryComment	Comment
    +hi def link registryHead		Constant
    +hi def link registryHKEY		Constant
    +hi def link registryPath		Special
    +hi def link registryRemove	PreProc
    +hi def link registryGUID		Identifier
    +hi def link registrySpecial	Special
    +hi def link registrySubKey	Type
    +hi def link registryString	String
    +hi def link registryHex		Number
    +hi def link registryDword		Number
    +
    +
    +
    +let b:current_syntax = "registry"
    +
    +" vim:ts=8
    diff --git a/.config/vim/syntax/rego.vim b/.config/vim/syntax/rego.vim
    new file mode 100644
    index 0000000..bc82030
    --- /dev/null
    +++ b/.config/vim/syntax/rego.vim
    @@ -0,0 +1,120 @@
    +" Vim syntax file
    +" Language: rego policy language
    +" Maintainer: Matt Dunford (zenmatic@gmail.com)
    +" URL:        https://github.com/zenmatic/vim-syntax-rego
    +" Last Change: 2022 Dec 4
    +
    +" https://www.openpolicyagent.org/docs/latest/policy-language/
    +
    +" quit when a (custom) syntax file was already loaded
    +if exists("b:current_syntax")
    +	finish
    +endif
    +
    +syn case match
    +
    +syn keyword regoDirective package import allow deny
    +syn keyword regoKeywords as default else every false if import package not null true with some in print
    +
    +syn keyword regoFuncAggregates count sum product max min sort all any
    +syn match regoFuncArrays "\"
    +syn keyword regoFuncSets intersection union
    +
    +syn keyword regoFuncStrings concat /\/ endswith format_int indexof indexof_n lower replace split sprintf startswith substring trim trim_left trim_prefix trim_right trim_suffix trim_space upper
    +syn match regoFuncStrings2 "\"
    +syn match regoFuncStrings3 "\"
    +
    +syn keyword regoFuncRegex re_match
    +syn match regoFuncRegex2 "\"
    +
    +syn match regoFuncUuid "\"
    +syn match regoFuncBits "\"
    +syn match regoFuncObject "\"
    +syn match regoFuncGlob "\"
    +syn match regoFuncUnits "\"
    +syn keyword regoFuncTypes is_number is_string is_boolean is_array is_set is_object is_null type_name
    +syn match regoFuncEncoding1 "\"
    +syn match regoFuncEncoding2 "\"
    +syn match regoFuncEncoding3 "\"
    +syn match regoFuncEncoding4 "\<\(json\|yaml\)\.\(is_valid\|marshal\|unmarshal\)\>"
    +syn match regoFuncEncoding5 "\"
    +syn match regoFuncTokenSigning "\"
    +syn match regoFuncTokenVerification1 "\"
    +syn match regoFuncTokenVerification2 "\"
    +syn match regoFuncTime "\"
    +syn match regoFuncCryptography "\"
    +syn match regoFuncCryptography "\"
    +syn match regoFuncGraphQl "\"
    +syn match regoFuncHttp "\"
    +syn match regoFuncNet "\"
    +syn match regoFuncRego "\"
    +syn match regoFuncOpa "\"
    +syn keyword regoFuncDebugging trace
    +syn match regoFuncRand "\"
    +
    +syn match   regoFuncNumbers "\"
    +syn keyword regoFuncNumbers round ceil floor abs
    +
    +syn match regoFuncSemver "\"
    +syn keyword regoFuncConversions to_number
    +syn match regoFuncHex "\"
    +
    +hi def link regoFuncUuid Statement
    +hi def link regoFuncBits Statement
    +hi def link regoDirective Statement
    +hi def link regoKeywords Statement
    +hi def link regoFuncAggregates Statement
    +hi def link regoFuncArrays Statement
    +hi def link regoFuncSets Statement
    +hi def link regoFuncStrings Statement
    +hi def link regoFuncStrings2 Statement
    +hi def link regoFuncStrings3 Statement
    +hi def link regoFuncRegex Statement
    +hi def link regoFuncRegex2 Statement
    +hi def link regoFuncGlob Statement
    +hi def link regoFuncUnits Statement
    +hi def link regoFuncTypes Statement
    +hi def link regoFuncEncoding1 Statement
    +hi def link regoFuncEncoding2 Statement
    +hi def link regoFuncEncoding3 Statement
    +hi def link regoFuncEncoding4 Statement
    +hi def link regoFuncEncoding5 Statement
    +hi def link regoFuncTokenSigning Statement
    +hi def link regoFuncTokenVerification1 Statement
    +hi def link regoFuncTokenVerification2 Statement
    +hi def link regoFuncTime Statement
    +hi def link regoFuncCryptography Statement
    +hi def link regoFuncGraphs Statement
    +hi def link regoFuncGraphQl Statement
    +hi def link regoFuncGraphs2 Statement
    +hi def link regoFuncHttp Statement
    +hi def link regoFuncNet Statement
    +hi def link regoFuncRego Statement
    +hi def link regoFuncOpa Statement
    +hi def link regoFuncDebugging Statement
    +hi def link regoFuncObject Statement
    +hi def link regoFuncNumbers Statement
    +hi def link regoFuncSemver Statement
    +hi def link regoFuncConversions Statement
    +hi def link regoFuncHex Statement
    +hi def link regoFuncRand Statement
    +
    +" https://www.openpolicyagent.org/docs/latest/policy-language/#strings
    +syn region      regoString            start=+"+ skip=+\\\\\|\\"+ end=+"+
    +syn region      regoRawString         start=+`+ end=+`+
    +
    +hi def link     regoString            String
    +hi def link     regoRawString         String
    +
    +" Comments; their contents
    +syn keyword     regoTodo              contained TODO FIXME XXX BUG
    +syn cluster     regoCommentGroup      contains=regoTodo
    +syn region      regoComment           start="#" end="$" contains=@regoCommentGroup,@Spell
    +
    +hi def link     regoComment           Comment
    +hi def link     regoTodo              Todo
    +
    +let b:current_syntax = 'rego'
    diff --git a/.config/vim/syntax/remind.vim b/.config/vim/syntax/remind.vim
    new file mode 100644
    index 0000000..9e7ff22
    --- /dev/null
    +++ b/.config/vim/syntax/remind.vim
    @@ -0,0 +1,73 @@
    +" Vim syntax file
    +" Language:	Remind
    +" Maintainer:	Davide Alberani 
    +" Last Change:	02 Nov 2015
    +" Version:	0.7
    +" URL:		http://ismito.it/vim/syntax/remind.vim
    +"
    +" Remind is a sophisticated calendar and alarm program.
    +" You can download remind from:
    +"   https://www.roaringpenguin.com/products/remind
    +"
    +" Changelog
    +" version 0.7: updated email and link
    +" version 0.6: added THROUGH keyword (courtesy of Ben Orchard)
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" shut case off.
    +syn case ignore
    +
    +syn keyword remindCommands	REM OMIT SET FSET UNSET
    +syn keyword remindExpiry	UNTIL FROM SCANFROM SCAN WARN SCHED THROUGH
    +syn keyword remindTag		PRIORITY TAG
    +syn keyword remindTimed		AT DURATION
    +syn keyword remindMove		ONCE SKIP BEFORE AFTER
    +syn keyword remindSpecial	INCLUDE INC BANNER PUSH-OMIT-CONTEXT PUSH CLEAR-OMIT-CONTEXT CLEAR POP-OMIT-CONTEXT POP COLOR
    +syn keyword remindRun		MSG MSF RUN CAL SATISFY SPECIAL PS PSFILE SHADE MOON
    +syn keyword remindConditional	IF ELSE ENDIF IFTRIG
    +syn keyword remindDebug		DEBUG DUMPVARS DUMP ERRMSG FLUSH PRESERVE
    +syn match remindComment		"#.*$"
    +syn region remindString		start=+'+ end=+'+ skip=+\\\\\|\\'+ oneline
    +syn region remindString		start=+"+ end=+"+ skip=+\\\\\|\\"+ oneline
    +syn match remindVar		"\$[_a-zA-Z][_a-zA-Z0-9]*"
    +syn match remindSubst		"%[^ ]"
    +syn match remindAdvanceNumber	"\(\*\|+\|-\|++\|--\)[0-9]\+"
    +" XXX: use different separators for dates and times?
    +syn match remindDateSeparators	"[/:@\.-]" contained
    +syn match remindTimes		"[0-9]\{1,2}[:\.][0-9]\{1,2}" contains=remindDateSeparators
    +" XXX: why not match only valid dates?  Ok, checking for 'Feb the 30' would
    +"       be impossible, but at least check for valid months and times.
    +syn match remindDates		"'[0-9]\{4}[/-][0-9]\{1,2}[/-][0-9]\{1,2}\(@[0-9]\{1,2}[:\.][0-9]\{1,2}\)\?'" contains=remindDateSeparators
    +" This will match trailing whitespaces that seem to break rem2ps.
    +" Courtesy of Michael Dunn.
    +syn match remindWarning		display excludenl "\S\s\+$"ms=s+1
    +
    +
    +
    +hi def link remindCommands		Function
    +hi def link remindExpiry		Repeat
    +hi def link remindTag		Label
    +hi def link remindTimed		Statement
    +hi def link remindMove		Statement
    +hi def link remindSpecial		Include
    +hi def link remindRun		Function
    +hi def link remindConditional	Conditional
    +hi def link remindComment		Comment
    +hi def link remindTimes		String
    +hi def link remindString		String
    +hi def link remindDebug		Debug
    +hi def link remindVar		Identifier
    +hi def link remindSubst		Constant
    +hi def link remindAdvanceNumber	Number
    +hi def link remindDateSeparators	Comment
    +hi def link remindDates		String
    +hi def link remindWarning		Error
    +
    +
    +let b:current_syntax = "remind"
    +
    +" vim: ts=8 sw=2
    diff --git a/.config/vim/syntax/requirements.vim b/.config/vim/syntax/requirements.vim
    new file mode 100644
    index 0000000..a87d1e9
    --- /dev/null
    +++ b/.config/vim/syntax/requirements.vim
    @@ -0,0 +1,67 @@
    +" the Requirements File Format syntax support for Vim
    +" Version: 1.8.0
    +" Author:  raimon 
    +" Upstream: https://github.com/raimon49/requirements.txt.vim
    +" License: MIT LICENSE
    +" The MIT License (MIT)
    +"
    +" Copyright (c) 2015 raimon
    +"
    +" Permission is hereby granted, free of charge, to any person obtaining a copy
    +" of this software and associated documentation files (the "Software"), to deal
    +" in the Software without restriction, including without limitation the rights
    +" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +" copies of the Software, and to permit persons to whom the Software is
    +" furnished to do so, subject to the following conditions:
    +"
    +" The above copyright notice and this permission notice shall be included in all
    +" copies or substantial portions of the Software.
    +"
    +" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +" SOFTWARE.
    +
    +if exists("b:current_syntax") && b:current_syntax == "requirements"
    +    finish
    +endif
    +
    +syn case match
    +
    +" https://pip.pypa.io/en/stable/reference/requirements-file-format/
    +" https://pip.pypa.io/en/stable/reference/inspect-report/#example
    +syn keyword requirementsKeyword implementation_name implementation_version os_name platform_machine platform_release platform_system platform_version python_full_version platform_python_implementation python_version sys_platform contained
    +syn region requirementsSubst matchgroup=requirementsSubstDelim start="\V${" end="\V}"
    +syn region requirementsString matchgroup=requirementsStringDelim start=`'` skip=`\\'` end=`'`
    +syn region requirementsString matchgroup=requirementsStringDelim start=`"` skip=`\\"` end=`"`
    +syn match requirementsVersion "\v\d+[a-zA-Z0-9\.\-\*]*"
    +syn region requirementsComment start="[ \t]*#" end="$"
    +syn match requirementsCommandOption "\v^\[?--?[a-zA-Z\-]*\]?"
    +syn match requirementsVersionSpecifiers "\v(\=\=\=?|\<\=?|\>\=?|\~\=|\!\=)"
    +syn match requirementsPackageName "\v^([a-zA-Z0-9][a-zA-Z0-9\-_\.]*[a-zA-Z0-9])"
    +syn match requirementsExtras "\v\[\S+\]"
    +syn match requirementsVersionControls "\v(git\+?|hg\+|svn\+|bzr\+).*://.\S+"
    +syn match requirementsURLs "\v(\@\s)?(https?|ftp|gopher)://?[^\s/$.?#].\S*"
    +syn match requirementsEnvironmentMarkers "\v;\s[^#]+" contains=requirementsKeyword,requirementsVersionSpecifiers,requirementsString
    +
    +hi def link requirementsKeyword Keyword
    +hi def link requirementsSubstDelim Delimiter
    +hi def link requirementsSubst PreProc
    +hi def link requirementsStringDelim Delimiter
    +hi def link requirementsString String
    +hi def link requirementsVersion Number
    +hi def link requirementsComment Comment
    +hi def link requirementsCommandOption Special
    +hi def link requirementsVersionSpecifiers Boolean
    +hi def link requirementsPackageName Identifier
    +hi def link requirementsExtras Type
    +hi def link requirementsVersionControls Underlined
    +hi def link requirementsURLs Underlined
    +hi def link requirementsEnvironmentMarkers Macro
    +
    +let b:current_syntax = "requirements"
    +
    +" vim: et sw=4 ts=4 sts=4:
    diff --git a/.config/vim/syntax/resolv.vim b/.config/vim/syntax/resolv.vim
    new file mode 100644
    index 0000000..9a2dec5
    --- /dev/null
    +++ b/.config/vim/syntax/resolv.vim
    @@ -0,0 +1,119 @@
    +" Vim syntax file
    +" Language: resolver configuration file
    +" Maintainer: Radu Dineiu 
    +" URL: https://raw.github.com/rid9/vim-resolv/master/resolv.vim
    +" Last Change: 2020 Mar 10
    +" Version: 1.4
    +"
    +" Credits:
    +"   David Necas (Yeti) 
    +"   Stefano Zacchiroli 
    +"   DJ Lucas 
    +"
    +" Changelog:
    +"   - 1.4: Added IPv6 support for sortlist.
    +"   - 1.3: Added IPv6 support for IPv4 dot-decimal notation.
    +"   - 1.2: Added new options.
    +"   - 1.1: Added IPv6 support.
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +	finish
    +endif
    +
    +" Errors, comments and operators
    +syn match resolvError /./
    +syn match resolvComment /\s*[#;].*$/
    +syn match resolvOperator /[\/:]/ contained
    +
    +" IP
    +syn cluster resolvIPCluster contains=resolvIPError,resolvIPSpecial
    +syn match resolvIPError /\%(\d\{4,}\|25[6-9]\|2[6-9]\d\|[3-9]\d\{2}\)[\.0-9]*/ contained
    +syn match resolvIPSpecial /\%(127\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}\)/ contained
    +
    +" General
    +syn match resolvIP contained /\%(\d\{1,4}\.\)\{3}\d\{1,4}/ contains=@resolvIPCluster
    +syn match resolvIPNetmask contained /\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\%(\%(\d\{1,4}\.\)\{,3}\d\{1,4}\)\)\?/ contains=resolvOperator,@resolvIPCluster
    +syn match resolvHostname contained /\w\{-}\.[-0-9A-Za-z_\.]*/
    +
    +" Nameserver IPv4
    +syn match resolvIPNameserver contained /\%(\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\s\|$\)\)\+/ contains=@resolvIPCluster
    +
    +" Nameserver IPv6
    +syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{6}\%(\x\{1,4}:\x\{1,4}\)\>/
    +syn match resolvIPNameserver contained /\s\@<=::\%(\x\{1,4}:\)\{,6}\x\{1,4}\>/
    +syn match resolvIPNameserver contained /\s\@<=::\%(\x\{1,4}:\)\{,5}\%(\d\{1,4}\.\)\{3}\d\{1,4}\>/
    +syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{1}:\%(\x\{1,4}:\)\{,5}\x\{1,4}\>/
    +syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{1}:\%(\x\{1,4}:\)\{,4}\%(\d\{1,4}\.\)\{3}\d\{1,4}\>/
    +syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{2}:\%(\x\{1,4}:\)\{,4}\x\{1,4}\>/
    +syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{2}:\%(\x\{1,4}:\)\{,3}\%(\d\{1,4}\.\)\{3}\d\{1,4}\>/
    +syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{3}:\%(\x\{1,4}:\)\{,3}\x\{1,4}\>/
    +syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{3}:\%(\x\{1,4}:\)\{,2}\%(\d\{1,4}\.\)\{3}\d\{1,4}\>/
    +syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{4}:\%(\x\{1,4}:\)\{,2}\x\{1,4}\>/
    +syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{4}:\%(\x\{1,4}:\)\{,1}\%(\d\{1,4}\.\)\{3}\d\{1,4}\>/
    +syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{5}:\%(\d\{1,4}\.\)\{3}\d\{1,4}\>/
    +syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{6}:\x\{1,4}\>/
    +syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{1,7}:\%(\s\|;\|$\)\@=/
    +
    +" Search hostname
    +syn match resolvHostnameSearch contained /\%(\%([-0-9A-Za-z_]\+\.\)*[-0-9A-Za-z_]\+\.\?\%(\s\|$\)\)\+/
    +
    +" Sortlist IPv4
    +syn match resolvIPNetmaskSortList contained /\%(\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\%(\%(\d\{1,4}\.\)\{,3}\d\{1,4}\)\)\?\%(\s\|$\)\)\+/ contains=resolvOperator,@resolvIPCluster
    +
    +" Sortlist IPv6
    +syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{6}\%(\x\{1,4}:\x\{1,4}\)\%(\/\d\{1,3}\)\?\>/
    +syn match resolvIPNetmaskSortList contained /\s\@<=::\%(\x\{1,4}:\)\{,6}\x\{1,4}\%(\/\d\{1,3}\)\?\>/
    +syn match resolvIPNetmaskSortList contained /\s\@<=::\%(\x\{1,4}:\)\{,5}\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\d\{1,3}\)\?\>/
    +syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{1}:\%(\x\{1,4}:\)\{,5}\x\{1,4}\%(\/\d\{1,3}\)\?\>/
    +syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{1}:\%(\x\{1,4}:\)\{,4}\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\d\{1,3}\)\?\>/
    +syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{2}:\%(\x\{1,4}:\)\{,4}\x\{1,4}\%(\/\d\{1,3}\)\?\>/
    +syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{2}:\%(\x\{1,4}:\)\{,3}\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\d\{1,3}\)\?\>/
    +syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{3}:\%(\x\{1,4}:\)\{,3}\x\{1,4}\%(\/\d\{1,3}\)\?\>/
    +syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{3}:\%(\x\{1,4}:\)\{,2}\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\d\{1,3}\)\?\>/
    +syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{4}:\%(\x\{1,4}:\)\{,2}\x\{1,4}\%(\/\d\{1,3}\)\?\>/
    +syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{4}:\%(\x\{1,4}:\)\{,1}\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\d\{1,3}\)\?\>/
    +syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{5}:\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\d\{1,3}\)\?\>/
    +syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{6}:\x\{1,4}\%(\/\d\{1,3}\)\?\>/
    +syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{1,7}:\%(\s\|;\|$\)\@=\%(\/\d\{1,3}\)\?/
    +
    +" Identifiers
    +syn match resolvNameserver /^\s*nameserver\>/ nextgroup=resolvIPNameserver skipwhite
    +syn match resolvLwserver /^\s*lwserver\>/ nextgroup=resolvIPNameserver skipwhite
    +syn match resolvDomain /^\s*domain\>/ nextgroup=resolvHostname skipwhite
    +syn match resolvSearch /^\s*search\>/ nextgroup=resolvHostnameSearch skipwhite
    +syn match resolvSortList /^\s*sortlist\>/ nextgroup=resolvIPNetmaskSortList skipwhite
    +syn match resolvOptions /^\s*options\>/ nextgroup=resolvOption skipwhite
    +
    +" Options
    +syn match resolvOption /\<\%(debug\|no_tld_query\|no-tld-query\|rotate\|no-check-names\|inet6\|ip6-bytestring\|\%(no-\)\?ip6-dotint\|edns0\|single-request\%(-reopen\)\?\|use-vc\)\>/ contained nextgroup=resolvOption skipwhite
    +syn match resolvOption /\<\%(ndots\|timeout\|attempts\):\d\+\>/ contained contains=resolvOperator nextgroup=resolvOption skipwhite
    +
    +" Additional errors
    +syn match resolvError /^search .\{257,}/
    +
    +hi def link resolvIP Number
    +hi def link resolvIPNetmask Number
    +hi def link resolvHostname String
    +hi def link resolvOption String
    +
    +hi def link resolvIPNameserver Number
    +hi def link resolvHostnameSearch String
    +hi def link resolvIPNetmaskSortList Number
    +
    +hi def link resolvNameServer Identifier
    +hi def link resolvLwserver Identifier
    +hi def link resolvDomain Identifier
    +hi def link resolvSearch Identifier
    +hi def link resolvSortList Identifier
    +hi def link resolvOptions Identifier
    +
    +hi def link resolvComment Comment
    +hi def link resolvOperator Operator
    +hi def link resolvError Error
    +hi def link resolvIPError Error
    +hi def link resolvIPSpecial Special
    +
    +let b:current_syntax = "resolv"
    +
    +" vim: ts=8 ft=vim
    diff --git a/.config/vim/syntax/reva.vim b/.config/vim/syntax/reva.vim
    new file mode 100644
    index 0000000..74a399b
    --- /dev/null
    +++ b/.config/vim/syntax/reva.vim
    @@ -0,0 +1,191 @@
    +" Vim syntax file
    +" Language:	Reva Forth
    +" Version:	2011.2
    +" Last Change:	2019 Sep 27
    +" Maintainer:	Ron Aaron 
    +" URL:		https://github.com/ronaaron/reva
    +" Filetypes:	*.rf *.frt
    +" NOTE: 	You should also have the ftplugin/reva.vim file to set 'isk'
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +   finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn clear
    +
    +" Synchronization method
    +syn sync ccomment
    +syn sync maxlines=100
    +
    +
    +syn case ignore
    +" Some special, non-FORTH keywords
    +"syn keyword revaTodo contained todo fixme bugbug todo: bugbug: note:
    +syn match revaTodo contained '\(todo\|fixme\|bugbug\|note\)[:]*'
    +syn match revaTodo contained 'copyright\(\s(c)\)\=\(\s[0-9]\{2,4}\)\='
    +
    +syn match revaHelpDesc '\S.*' contained
    +syn match revaHelpStuff '\<\(def\|stack\|ctx\|ver\|os\|related\):\s.*'
    +syn region revaHelpStuff start='\' end='^\S' contains=revaHelpDesc
    +syn region revaEOF start='\<|||\>' end='{$}' contains=revaHelpStuff
    +
    +
    +syn case match
    +" basic mathematical and logical operators
    +syn keyword revaoperators + - * / mod /mod negate abs min max umin umax
    +syn keyword revaoperators and or xor not invert 1+ 1-
    +syn keyword revaoperators m+ */ */mod m* um* m*/ um/mod fm/mod sm/rem
    +syn keyword revaoperators d+ d- dnegate dabs dmin dmax > < = >> << u< <>
    +
    +
    +" stack manipulations
    +syn keyword revastack drop nip dup over tuck swap rot -rot ?dup pick roll
    +syn keyword revastack 2drop 2nip 2dup 2over 2swap 2rot 3drop
    +syn keyword revastack >r r> r@ rdrop
    +" syn keyword revastack sp@ sp! rp@ rp!
    +
    +" address operations
    +syn keyword revamemory @ ! +! c@ c! 2@ 2! align aligned allot allocate here free resize
    +syn keyword revaadrarith chars char+ cells cell+ cell cell- 2cell+ 2cell- 3cell+ 4cell+
    +syn keyword revamemblks move fill
    +
    +" conditionals
    +syn keyword revacond if else then =if >if if if0  ;; catch throw
    +
    +" iterations
    +syn keyword revaloop while repeat until again
    +syn keyword revaloop do loop i j leave  unloop skip more
    +
    +" new words
    +syn match revaColonDef '\ immediate
    +syn keyword revadefine compile literal ' [']
    +
    +" Built in words
    +com! -nargs=+ Builtin syn keyword revaBuiltin 
    +Builtin execute ahead interp bye >body here pad words make
    +Builtin accept close cr creat delete ekey emit fsize ioerr key?
    +Builtin mtime open/r open/rw read rename seek space spaces stat
    +Builtin tell type type_ write (seek) (argv) (save) 0; 0drop;
    +Builtin >class >lz >name >xt alias alias: appname argc asciiz, asciizl,
    +Builtin body> clamp depth disassemble findprev fnvhash getenv here,
    +Builtin iterate last! last@ later link lz> lzmax os parse/ peek
    +Builtin peek-n pop prior push put rp@ rpick save setenv slurp
    +Builtin stack-empty? stack-iterate stack-size stack: THROW_BADFUNC
    +Builtin THROW_BADLIB THROW_GENERIC used xt>size z,
    +Builtin +lplace +place -chop /char /string bounds c+lplace c+place
    +Builtin chop cmp cmpi count lc lcount lplace place quote rsplit search split
    +Builtin zcount zt \\char
    +Builtin chdir g32 k32 u32 getcwd getpid hinst osname stdin stdout
    +Builtin (-lib) (bye) (call) (else) (find) (func) (here) (if (lib) (s0) (s^)
    +Builtin (to~) (while) >in >rel ?literal appstart cold compiling? context? d0 default_class
    +Builtin defer? dict dolstr dostr find-word h0 if) interp isa onexit
    +Builtin onstartup pdoes pop>ebx prompt rel> rp0 s0 src srcstr state str0 then,> then> tib
    +Builtin tp vector vector! word? xt? .ver revaver revaver# && '' 'constant 'context
    +Builtin 'create 'defer 'does 'forth 'inline 'macro 'macront 'notail 'value 'variable
    +Builtin (.r) (context) (create) (header) (hide) (inline) (p.r) (words~) (xfind)
    +Builtin ++ -- , -2drop -2nip -link -swap . .2x .classes .contexts .funcs .libs .needs .r
    +Builtin .rs .x 00; 0do 0if 1, 2, 3, 2* 2/ 2constant 2variable 3dup 4dup ;then >base >defer
    +Builtin >rr ? ?do @execute @rem appdir argv as back base base! between chain cleanup-libs
    +Builtin cmove> context?? ctrl-c ctx>name data: defer: defer@def dictgone do_cr eleave
    +Builtin endcase endof eval exception exec false find func: header heapgone help help/
    +Builtin hex# hide inline{ last lastxt lib libdir literal, makeexename mnotail ms ms@
    +Builtin newclass noop nosavedict notail nul of off on p: padchar parse parseln
    +Builtin parsews rangeof rdepth remains reset reva revaused rol8 rr> scratch setclass sp
    +Builtin strof super> temp time&date true turnkey? undo vfunc: w! w@
    +Builtin xchg xchg2 xfind xt>name xwords { {{ }} }  _+ _1+ _1- pathsep case \||
    +" p[ [''] [ [']
    +
    +
    +" debugging
    +syn keyword revadebug .s dump see
    +
    +" basic character operations
    +" syn keyword revaCharOps (.) CHAR EXPECT FIND WORD TYPE -TRAILING EMIT KEY
    +" syn keyword revaCharOps KEY? TIB CR
    +" syn match revaCharOps '\d >digit digit> >single >double >number >float
    +
    +" contexts
    +syn keyword revavocs forth macro inline
    +syn keyword revavocs context:
    +syn match revavocs /\<\~[^~ ]*/
    +syn match revavocs /[^~ ]*\~\>/
    +
    +" numbers
    +syn keyword revamath decimal hex base binary octal
    +syn match revainteger '\<-\=[0-9.]*[0-9.]\+\>'
    +" recognize hex and binary numbers, the '$' and '%' notation is for greva
    +syn match revainteger '\<\$\x*\x\+\>' " *1* --- dont't mess
    +syn match revainteger '\<\x*\d\x*\>'  " *2* --- this order!
    +syn match revainteger '\<%[0-1]*[0-1]\+\>'
    +syn match revainteger "\<'.\>"
    +
    +" Strings
    +" syn region revaString start=+\.\?\"+ end=+"+ end=+$+
    +syn region revaString start=/"/ skip=/\\"/ end=/"/
    +
    +" Comments
    +syn region revaComment start='\\S\s' end='.*' contains=revaTodo
    +syn match revaComment '\.(\s[^)]\{-})' contains=revaTodo
    +syn region revaComment start='(\s' skip='\\)' end=')' contains=revaTodo
    +syn match revaComment '(\s[^\-]*\-\-[^\-]\{-})' contains=revaTodo
    +syn match revaComment '\<|\s.*$' contains=revaTodo
    +syn match revaColonDef '\<:m\?\s*[^ \t]\+\>' contains=revaComment
    +
    +" Include files
    +syn match revaInclude '\<\(include\|needs\)\s\+\S\+'
    +
    +
    +" Define the default highlighting.
    +if !exists("did_reva_syntax_inits")
    +    let did_reva_syntax_inits=1
    +    " The default methods for highlighting. Can be overridden later.
    +    hi def link revaEOF cIf0
    +    hi def link revaHelpStuff  special
    +    hi def link revaHelpDesc Comment
    +    hi def link revaTodo Todo
    +    hi def link revaOperators Operator
    +    hi def link revaMath Number
    +    hi def link revaInteger Number
    +    hi def link revaStack Special
    +    hi def link revaFStack Special
    +    hi def link revaSP Special
    +    hi def link revaMemory Operator
    +    hi def link revaAdrArith Function
    +    hi def link revaMemBlks Function
    +    hi def link revaCond Conditional
    +    hi def link revaLoop Repeat
    +    hi def link revaColonDef Define
    +    hi def link revaEndOfColonDef Define
    +    hi def link revaDefine Define
    +    hi def link revaDebug Debug
    +    hi def link revaCharOps Character
    +    hi def link revaConversion String
    +    hi def link revaForth Statement
    +    hi def link revaVocs Statement
    +    hi def link revaString String
    +    hi def link revaComment Comment
    +    hi def link revaClassDef Define
    +    hi def link revaEndOfClassDef Define
    +    hi def link revaObjectDef Define
    +    hi def link revaEndOfObjectDef Define
    +    hi def link revaInclude Include
    +    hi def link revaBuiltin Keyword
    +endif
    +
    +let b:current_syntax = "reva"
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +" vim: ts=8:sw=4:nocindent:smartindent:
    diff --git a/.config/vim/syntax/rexx.vim b/.config/vim/syntax/rexx.vim
    new file mode 100644
    index 0000000..360fc8f
    --- /dev/null
    +++ b/.config/vim/syntax/rexx.vim
    @@ -0,0 +1,318 @@
    +" Vim syntax file
    +" Language:	Rexx
    +" Maintainer:	Thomas Geulig 
    +" Last Change:  2012 Sep 14, added support for new ooRexx 4.0 features
    +" URL:		http://www.geulig.de/vim/rexx.vim
    +" Special Thanks to Dan Sharp  and Rony G. Flatscher
    +"  for comments and additions
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn case ignore
    +
    +" add to valid identifier chars
    +setlocal iskeyword+=.
    +setlocal iskeyword+=!
    +setlocal iskeyword+=?
    +
    +" ---rgf, position important: must be before comments etc. !
    +syn match rexxOperator "[=|\/\\\+\*\[\],;:<>&\~%\-]"
    +
    +" rgf syn match rexxIdentifier        "\<[a-zA-Z\!\?_]\([a-zA-Z0-9._?!]\)*\>"
    +syn match rexxIdentifier        "\<\K\k*\>"
    +syn match rexxEnvironmentSymbol "\<\.\k\+\>"
    +
    +" A Keyword is the first symbol in a clause.  A clause begins at the start
    +" of a line or after a semicolon.  THEN, ELSE, OTHERWISE, and colons are always
    +" followed by an implied semicolon.
    +syn match rexxClause "\(^\|;\|:\|then \|else \|when \|otherwise \)\s*\S*" contains=ALLBUT,rexxParse2,rexxRaise2,rexxForward2
    +
    +" Considered keywords when used together in a phrase and begin a clause
    +syn match rexxParse "\\|version\)\>" containedin=rexxClause contains=rexxParse2
    +syn match rexxParse2 "\" containedin=rexxParse
    +
    +syn match rexxKeyword contained "\"
    +syn match rexxKeyword contained "\<\(address\|trace\)\( value\)\?\>"
    +syn match rexxKeyword contained "\"
    +
    +syn match rexxKeyword contained "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\(\s\+forever\)\?\>"
    +syn match rexxKeyword contained "\\s*\(strict\s*\)\?\"
    +
    +" Another keyword phrase, separated to aid highlighting in rexxFunction
    +syn match rexxRegularCallSignal contained "\<\(call\|signal\)\s\(\s*on\>\|\s*off\>\)\@!\(\k\+\ze\|\ze(\)\(\s*\|;\|$\|(\)"
    +syn region rexxLabel contained start="\<\(call\|signal\)\>\s*\zs\(\k*\|(\)" end="\ze\(\s*\|;\|$\|(\)" containedin=rexxRegularCallSignal
    +
    +syn match rexxExceptionHandling contained "\<\(call\|signal\)\>\s\+\<\(on\|off\)\>.*\(;\|$\)" contains=rexxComment
    +
    +" hilite label given after keyword "name"
    +syn match rexxLabel "name\s\+\zs\k\+\ze" containedin=rexxExceptionHandling
    +" hilite condition name (serves as label)
    +syn match rexxLabel "\<\(call\|signal\)\>\s\+\<\(on\|off\)\>\s*\zs\k\+\ze\s*\(;\|$\)" containedin=rexxExceptionHandling
    +" user exception handling, hilite user defined name
    +syn region rexxLabel contained start="user\s\+\zs\k" end="\ze\(\s\|;\|$\)" containedin=rexxExceptionHandling
    +
    +" Considered keywords when they begin a clause
    +syn match rexxKeywordStatements "\<\(arg\|catch\|do\|drop\|end\|exit\|expose\|finally\|forward\|if\|interpret\|iterate\|leave\|loop\|nop\)\>"
    +syn match rexxKeywordStatements "\<\(options\|pull\|push\|queue\|raise\|reply\|return\|say\|select\|trace\)\>"
    +
    +" Conditional keywords starting a new statement
    +syn match rexxConditional "\<\(then\|else\|when\|otherwise\)\(\s*\|;\|\_$\|\)\>" contains=rexxKeywordStatements
    +
    +" Conditional phrases
    +syn match rexxLoopKeywords "\<\(to\|by\|for\|until\|while\|over\)\>" containedin=doLoopSelectLabelRegion
    +
    +" must be after Conditional phrases!
    +syn match doLoopSelectLabelRegion "\<\(do\|loop\|select\)\>\s\+\(label\s\+\)\?\(\s\+\k\+\s\+\zs\\)\?\k*\(\s\+forever\)\?\(\s\|;\|$\)" contains=doLoopSelectLabelRegion,rexxStartValueAssignment,rexxLoopKeywords
    +
    +" color label's name
    +syn match rexxLabel2 "\<\(do\|loop\|select\)\>\s\+label\s\+\zs\k*\ze" containedin=doLoopSelectLabelRegion
    +
    +" make sure control variable is normal
    +" TODO: re-activate ?
    +"rgf syn match rexxControlVariable        "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\s\+\zs.*\ze\s\+\" containedin=doLoopSelectLabelRegion
    +
    +" make sure control variable assignment is normal
    +syn match rexxStartValueAssignment       "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\s\+\zs.*\ze\(=.*\)\?\s\+\" containedin=doLoopSelectLabelRegion
    +
    +" highlight label name
    +syn match endIterateLeaveLabelRegion "\<\(end\|leave\|iterate\)\>\(\s\+\K\k*\)" contains=rexxLabel2
    +syn match rexxLabel2 "\<\(end\|leave\|iterate\)\>\s\+\zs\k*\ze" containedin=endIterateLeaveLabelRegion
    +
    +" Guard statement
    +syn match rexxGuard "\(^\|;\|:\)\s*\\s\+\<\(on\|off\)\>"
    +
    +" Trace statement
    +syn match rexxTrace "\(^\|;\|:\)\s*\\s\+\<\K\k*\>"
    +
    +" Raise statement
    +" syn match rexxRaise "\(^\|;\|:\)\s\+\\s*\<\(propagate\|error\|failure\|syntax\|user\)\>\?" contains=rexxRaise2
    +syn match rexxRaise "\(^\|;\|:\)\s*\\s*\<\(propagate\|error\|failure\|syntax\|user\)\>\?" contains=rexxRaise2
    +syn match rexxRaise2 "\<\(additional\|array\|description\|exit\|propagate\|return\)\>" containedin=rexxRaise
    +
    +" Forward statement
    +syn match rexxForward  "\(^\|;\|:\)\\s*" contains=rexxForward2
    +syn match rexxForward2 "\<\(arguments\|array\|continue\|message\|class\|to\)\>" contained
    +
    +" Functions/Procedures
    +syn match rexxFunction 	"\<\<[a-zA-Z\!\?_]\k*\>("me=e-1
    +syn match rexxFunction "[()]"
    +
    +" String constants
    +syn region rexxString	start=+"+ skip=+""+ end=+"\(x\|b\)\?+ oneline
    +syn region rexxString	start=+'+ skip=+''+ end=+'\(x\|b\)\?+ oneline
    +
    +syn region rexxParen transparent start='(' end=')' contains=ALLBUT,rexxParenError,rexxTodo,rexxLabel,rexxKeyword
    +" Catch errors caused by wrong parenthesis
    +syn match rexxParenError	 ")"
    +syn match rexxInParen		"[\\[\\]{}]"
    +
    +" Comments
    +syn region	rexxComment	start="/\*"	end="\*/" contains=rexxTodo,rexxComment
    +syn match	rexxCommentError "\*/"
    +syn region	rexxLineComment	start="--"	end="\_$" oneline
    +
    +" Highlight User Labels
    +" check for labels between comments, labels stated in a statement in the middle of a line
    +syn match rexxLabel		 "\(\_^\|;\)\s*\(\/\*.*\*\/\)*\s*\k\+\s*\(\/\*.*\*\/\)*\s*:"me=e-1 contains=rexxTodo,rexxComment
    +
    +syn keyword rexxTodo contained	TODO FIXME XXX
    +
    +" ooRexx messages
    +syn region rexxMessageOperator start="\(\~\|\~\~\)" end="\(\S\|\s\)"me=e-1
    +syn match rexxMessage "\(\~\|\~\~\)\s*\<\.*[a-zA-Z]\([a-zA-Z0-9._?!]\)*\>" contains=rexxMessageOperator
    +
    +" line continuations, take care of (line-)comments after it
    +syn match rexxLineContinue ",\ze\s*\(--.*\|\/\*.*\)*$"
    +
    +" the following is necessary, otherwise three consecutive dashes will cause it to highlight the first one
    +syn match rexxLineContinue "-\ze-\@!\s*\(--.*\|\s*\/\*.*\)\?$"
    +
    +" Special Variables
    +syn keyword rexxSpecialVariable  sigl rc result self super
    +syn keyword rexxSpecialVariable  .environment .error .input .local .methods .output .rs .stderr .stdin .stdout .stdque
    +
    +" Constants
    +syn keyword rexxConst .true .false .nil .endOfLine .line .context
    +
    +" Rexx numbers
    +" int like number
    +syn match rexxNumber '\d\+' contained
    +syn match rexxNumber '[-+]\s*\d\+' contained
    +
    +" Floating point number with decimal
    +syn match rexxNumber '\d\+\.\d*' contained
    +syn match rexxNumber '[-+]\s*\d\+\.\d*' contained
    +
    +" Floating point like number with E
    +syn match rexxNumber '[-+]\s*\d*[eE][\-+]\d\+' contained
    +syn match rexxNumber '\d*[eE][\-+]\d\+' contained
    +
    +" Floating point like number with E and decimal point (+,-)
    +syn match rexxNumber '[-+]\s*\d*\.\d*[eE][\-+]\d\+' contained
    +syn match rexxNumber '\d*\.\d*[eE][\-+]\d\+' contained
    +
    +
    +" ooRexx builtin classes (as of version 3.2.0, fall 2007), first define dot to be o.k. in keywords
    +syn keyword rexxBuiltinClass .Alarm .ArgUtil .Array .Bag .CaselessColumnComparator
    +syn keyword rexxBuiltinClass .CaselessComparator .CaselessDescendingComparator .CircularQueue
    +syn keyword rexxBuiltinClass .Class .Collection .ColumnComparator .Comparable .Comparator
    +syn keyword rexxBuiltinClass .DateTime .DescendingComparator .Directory .File .InputOutputStream
    +syn keyword rexxBuiltinClass .InputStream .InvertingComparator .List .MapCollection
    +syn keyword rexxBuiltinClass .Message .Method .Monitor .MutableBuffer .Object
    +syn keyword rexxBuiltinClass .OrderedCollection .OutputStream .Package .Properties .Queue
    +syn keyword rexxBuiltinClass .RegularExpression .Relation .RexxContext .RexxQueue .Routine
    +syn keyword rexxBuiltinClass .Set .SetCollection .Stem .Stream
    +syn keyword rexxBuiltinClass .StreamSupplier .String .Supplier .Table .TimeSpan
    +
    +" Windows-only classes
    +syn keyword rexxBuiltinClass .AdvancedControls .AnimatedButton .BaseDialog .ButtonControl
    +syn keyword rexxBuiltinClass .CategoryDialog .CheckBox .CheckList .ComboBox .DialogControl
    +syn keyword rexxBuiltinClass .DialogExtensions .DlgArea .DlgAreaU .DynamicDialog
    +syn keyword rexxBuiltinClass .EditControl .InputBox .IntegerBox .ListBox .ListChoice
    +syn keyword rexxBuiltinClass .ListControl .MenuObject .MessageExtensions .MultiInputBox
    +syn keyword rexxBuiltinClass .MultiListChoice .OLEObject .OLEVariant
    +syn keyword rexxBuiltinClass .PasswordBox .PlainBaseDialog .PlainUserDialog
    +syn keyword rexxBuiltinClass .ProgressBar .ProgressIndicator .PropertySheet .RadioButton
    +syn keyword rexxBuiltinClass .RcDialog .ResDialog .ScrollBar .SingleSelection .SliderControl
    +syn keyword rexxBuiltinClass .StateIndicator .StaticControl .TabControl .TimedMessage
    +syn keyword rexxBuiltinClass .TreeControl .UserDialog .VirtualKeyCodes .WindowBase
    +syn keyword rexxBuiltinClass .WindowExtensions .WindowObject .WindowsClassesBase .WindowsClipboard
    +syn keyword rexxBuiltinClass .WindowsEventLog .WindowsManager .WindowsProgramManager .WindowsRegistry
    +
    +" BSF4ooRexx classes
    +syn keyword rexxBuiltinClass .BSF .bsf.dialog .bsf_proxy
    +syn keyword rexxBuiltinClass .UNO .UNO_ENUM .UNO_CONSTANTS .UNO_PROPERTIES
    +
    +" ooRexx directives, ---rgf location important, otherwise directives in top of file not matched!
    +syn region rexxClassDirective     start="::\s*class\s*"ms=e+1    end="\ze\(\s\|;\|$\)"
    +syn region rexxMethodDirective    start="::\s*method\s*"ms=e+1   end="\ze\(\s\|;\|$\)"
    +syn region rexxRequiresDirective  start="::\s*requires\s*"ms=e+1 end="\ze\(\s\|;\|$\)"
    +syn region rexxRoutineDirective   start="::\s*routine\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
    +syn region rexxAttributeDirective start="::\s*attribute\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
    +" rgf, 2012-09-09
    +syn region rexxOptionsDirective   start="::\s*options\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
    +syn region rexxConstantDirective  start="::\s*constant\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
    +
    +syn region rexxDirective start="\(^\|;\)\s*::\s*\w\+"  end="\($\|;\)" contains=rexxString,rexxNumber,rexxComment,rexxLineComment,rexxClassDirective,rexxMethodDirective,rexxRoutineDirective,rexxRequiresDirective,rexxAttributeDirective,rexxOptionsDirective,rexxConstantDirective keepend
    +
    +syn match rexxOptionsDirective2 "\<\(digits\|form\|fuzz\|trace\)\>" containedin = rexxOptionsDirective3
    +syn region rexxOptionsDirective3 start="\(^\|;\)\s*::\s*options\s"ms=e+1  end="\($\|;\)" contains=rexxString,rexxNumber,rexxVariable,rexxComment,rexxLineComment containedin = rexxDirective
    +
    +
    +syn region rexxVariable start="\zs\<\(\.\)\@!\K\k\+\>\ze\s*\(=\|,\|)\|%\|\]\|\\\||\|&\|+=\|-=\|<\|>\)" end="\(\_$\|.\)"me=e-1
    +syn match rexxVariable "\(=\|,\|)\|%\|\]\|\\\||\|&\|+=\|-=\|<\|>\)\s*\zs\K\k*\ze"
    +
    +" rgf, 2007-07-22: unfortunately, the entire region is colored (not only the
    +" patterns), hence useless (vim 7.0)! (syntax-docs hint that that should work)
    +" attempt: just colorize the parenthesis in matching colors, keep content
    +"          transparent to keep the formatting already done to it!
    +" TODO: test on 7.3
    +" syn region par1 matchgroup=par1 start="(" matchgroup=par1 end=")" transparent contains=par2
    +" syn region par2 matchgroup=par2 start="(" matchgroup=par2 end=")" transparent contains=par3 contained
    +" syn region par3 matchgroup=par3 start="(" matchgroup=par3 end=")" transparent contains=par4 contained
    +" syn region par4 matchgroup=par4 start="(" matchgroup=par4 end=")" transparent contains=par5 contained
    +" syn region par5 matchgroup=par5 start="(" matchgroup=par5 end=")" transparent contains=par1 contained
    +
    +" this will colorize the entire region, removing any colorizing already done!
    +" syn region par1 matchgroup=par1 start="(" end=")" contains=par2
    +" syn region par2 matchgroup=par2 start="(" end=")" contains=par3 contained
    +" syn region par3 matchgroup=par3 start="(" end=")" contains=par4 contained
    +" syn region par4 matchgroup=par4 start="(" end=")" contains=par5 contained
    +" syn region par5 matchgroup=par5 start="(" end=")" contains=par1 contained
    +
    +hi par1 ctermfg=red 		guifg=red          "guibg=grey
    +hi par2 ctermfg=blue 		guifg=blue         "guibg=grey
    +hi par3 ctermfg=darkgreen 	guifg=darkgreen    "guibg=grey
    +hi par4 ctermfg=darkyellow	guifg=darkyellow   "guibg=grey
    +hi par5 ctermfg=darkgrey 	guifg=darkgrey     "guibg=grey
    +
    +" line continuation (trailing comma or single dash)
    +syn sync linecont "\(,\|-\ze-\@!\)\ze\s*\(--.*\|\/\*.*\)*$"
    +
    +" if !exists("rexx_minlines")
    +"   let rexx_minlines = 500
    +" endif
    +" exec "syn sync ccomment rexxComment minlines=" . rexx_minlines
    +
    +" always scan from start, PCs have long become to be powerful enough for that
    +exec "syn sync fromstart"
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +" make binary and hex strings stand out
    +hi rexxStringConstant term=bold,underline ctermfg=5 cterm=bold guifg=darkMagenta gui=bold
    +
    +hi def link rexxLabel2		Function
    +hi def link doLoopSelectLabelRegion	rexxKeyword
    +hi def link endIterateLeaveLabelRegion	rexxKeyword
    +hi def link rexxLoopKeywords	rexxKeyword " Todo
    +
    +hi def link rexxNumber		Normal "DiffChange
    +"  hi def link rexxIdentifier		DiffChange
    +
    +hi def link rexxRegularCallSignal	Statement
    +hi def link rexxExceptionHandling	Statement
    +
    +hi def link rexxLabel		Function
    +hi def link rexxCharacter		Character
    +hi def link rexxParenError		rexxError
    +hi def link rexxInParen		rexxError
    +hi def link rexxCommentError	rexxError
    +hi def link rexxError		Error
    +hi def link rexxKeyword		Statement
    +hi def link rexxKeywordStatements	Statement
    +
    +hi def link rexxFunction		Function
    +hi def link rexxString		String
    +hi def link rexxComment		Comment
    +hi def link rexxTodo		Todo
    +hi def link rexxSpecialVariable	Special
    +hi def link rexxConditional	rexxKeyword
    +
    +hi def link rexxOperator		Operator
    +hi def link rexxMessageOperator	rexxOperator
    +hi def link rexxLineComment	Comment
    +
    +hi def link rexxLineContinue	WildMenu
    +
    +hi def link rexxDirective		rexxKeyword
    +hi def link rexxClassDirective	Type
    +hi def link rexxMethodDirective	rexxFunction
    +hi def link rexxAttributeDirective	rexxFunction
    +hi def link rexxRequiresDirective	Include
    +hi def link rexxRoutineDirective	rexxFunction
    +
    +" rgf, 2012-09-09
    +hi def link rexxOptionsDirective	rexxFunction
    +hi def link rexxOptionsDirective2  rexxOptionsDirective
    +hi def link rexxOptionsDirective3  Normal " rexxOptionsDirective
    +
    +hi def link rexxConstantDirective	rexxFunction
    +
    +hi def link rexxConst		Constant
    +hi def link rexxTypeSpecifier	Type
    +hi def link rexxBuiltinClass	rexxTypeSpecifier
    +
    +hi def link rexxEnvironmentSymbol  rexxConst
    +hi def link rexxMessage		rexxFunction
    +
    +hi def link rexxParse              rexxKeyword
    +hi def link rexxParse2             rexxParse
    +
    +hi def link rexxGuard              rexxKeyword
    +hi def link rexxTrace              rexxKeyword
    +
    +hi def link rexxRaise              rexxKeyword
    +hi def link rexxRaise2             rexxRaise
    +
    +hi def link rexxForward            rexxKeyword
    +hi def link rexxForward2           rexxForward
    +
    +
    +let b:current_syntax = "rexx"
    +
    +"vim: ts=8
    diff --git a/.config/vim/syntax/rhelp.vim b/.config/vim/syntax/rhelp.vim
    new file mode 100644
    index 0000000..7407538
    --- /dev/null
    +++ b/.config/vim/syntax/rhelp.vim
    @@ -0,0 +1,276 @@
    +" Vim syntax file
    +" Language:    R Help File
    +" Maintainer: This runtime file is looking for a new maintainer.
    +" Former Maintainers: Jakson Aquino 
    +"                     Johannes Ranke 
    +" Former Repository: https://github.com/jalvesaq/R-Vim-runtime
    +" Last Change: 2016 Jun 28  08:53AM
    +"   2024 Feb 19 by Vim Project (announce adoption)
    +" Remarks:     - Includes R syntax highlighting in the appropriate
    +"                sections if an r.vim file is in the same directory or in the
    +"                default debian location.
    +"              - There is no Latex markup in equations
    +"              - Thanks to Will Gray for finding and fixing a bug
    +"              - No support for \var tag within quoted string
    +
    +" Version Clears: {{{1
    +if exists("b:current_syntax")
    +  finish
    +endif 
    +
    +scriptencoding utf-8
    +
    +syn case match
    +
    +" R help identifiers {{{1
    +syn region rhelpIdentifier matchgroup=rhelpSection	start="\\name{" end="}" 
    +syn region rhelpIdentifier matchgroup=rhelpSection	start="\\alias{" end="}" 
    +syn region rhelpIdentifier matchgroup=rhelpSection	start="\\pkg{" end="}" contains=rhelpLink
    +syn region rhelpIdentifier matchgroup=rhelpSection	start="\\CRANpkg{" end="}" contains=rhelpLink
    +syn region rhelpIdentifier matchgroup=rhelpSection start="\\method{" end="}" contained
    +syn region rhelpIdentifier matchgroup=rhelpSection start="\\Rdversion{" end="}"
    +
    +
    +" Highlighting of R code using an existing r.vim syntax file if available {{{1
    +syn include @R syntax/r.vim
    +
    +" Strings {{{1
    +syn region rhelpString start=/"/ skip=/\\"/ end=/"/ contains=rhelpSpecialChar,rhelpCodeSpecial,rhelpLink contained
    +
    +" Special characters in R strings
    +syn match rhelpCodeSpecial display contained "\\\\\(n\|r\|t\|b\|a\|f\|v\|'\|\"\)\|\\\\"
    +
    +" Special characters  ( \$ \& \% \# \{ \} \_)
    +syn match rhelpSpecialChar        "\\[$&%#{}_]"
    +
    +
    +" R code {{{1
    +syn match rhelpDots		"\\dots" containedin=@R
    +syn region rhelpRcode matchgroup=Delimiter start="\\examples{" matchgroup=Delimiter transparent end="}" contains=@R,rhelpLink,rhelpIdentifier,rhelpString,rhelpSpecialChar,rhelpSection
    +syn region rhelpRcode matchgroup=Delimiter start="\\usage{" matchgroup=Delimiter transparent end="}" contains=@R,rhelpIdentifier,rhelpS4method
    +syn region rhelpRcode matchgroup=Delimiter start="\\synopsis{" matchgroup=Delimiter transparent end="}" contains=@R
    +syn region rhelpRcode matchgroup=Delimiter start="\\special{" matchgroup=Delimiter transparent end="}" contains=@R
    +
    +if v:version > 703
    +  syn region rhelpRcode matchgroup=Delimiter start="\\code{" skip='\\\@1"
    +syn match rhelpKeyword	"\\ldots\>"
    +syn match rhelpKeyword	"\\sspace\>"
    +syn match rhelpKeyword  "--"
    +syn match rhelpKeyword  "---"
    +
    +" Condition Keywords {{{2
    +syn match rhelpKeyword	"\\if\>"
    +syn match rhelpKeyword	"\\ifelse\>"
    +syn match rhelpKeyword	"\\out\>"
    +" Examples of usage:
    +" \ifelse{latex}{\eqn{p = 5 + 6 - 7 \times 8}}{\eqn{p = 5 + 6 - 7 * 8}}
    +" \ifelse{latex}{\out{$\alpha$}}{\ifelse{html}{\out{α}}{alpha}}
    +
    +" Keywords and operators valid only if in math mode {{{2
    +syn match rhelpMathOp  "<" contained
    +syn match rhelpMathOp  ">" contained
    +syn match rhelpMathOp  "+" contained
    +syn match rhelpMathOp  "-" contained
    +syn match rhelpMathOp  "=" contained
    +
    +" Conceal function based on syntax/tex.vim {{{2
    +if exists("g:tex_conceal")
    +  let s:tex_conceal = g:tex_conceal
    +else
    +  let s:tex_conceal = 'gm'
    +endif
    +function s:HideSymbol(pat, cchar, hide)
    +  if a:hide
    +    exe "syn match rhelpMathSymb '" . a:pat . "' contained conceal cchar=" . a:cchar
    +  else
    +    exe "syn match rhelpMathSymb '" . a:pat . "' contained"
    +  endif
    +endfunction
    +
    +" Math symbols {{{2
    +if s:tex_conceal =~ 'm'
    +  let s:hd = 1
    +else
    +  let s:hd = 0
    +endif
    +call s:HideSymbol('\\infty\>',  '∞', s:hd)
    +call s:HideSymbol('\\ge\>',     '≥', s:hd)
    +call s:HideSymbol('\\le\>',     '≤', s:hd)
    +call s:HideSymbol('\\prod\>',   '∏', s:hd)
    +call s:HideSymbol('\\sum\>',    '∑', s:hd)
    +syn match rhelpMathSymb   	"\\sqrt\>" contained
    +
    +" Greek letters {{{2
    +if s:tex_conceal =~ 'g'
    +  let s:hd = 1
    +else
    +  let s:hd = 0
    +endif
    +call s:HideSymbol('\\alpha\>',    'α', s:hd)
    +call s:HideSymbol('\\beta\>',     'β', s:hd)
    +call s:HideSymbol('\\gamma\>',    'γ', s:hd)
    +call s:HideSymbol('\\delta\>',    'δ', s:hd)
    +call s:HideSymbol('\\epsilon\>',  'ϵ', s:hd)
    +call s:HideSymbol('\\zeta\>',     'ζ', s:hd)
    +call s:HideSymbol('\\eta\>',      'η', s:hd)
    +call s:HideSymbol('\\theta\>',    'θ', s:hd)
    +call s:HideSymbol('\\iota\>',     'ι', s:hd)
    +call s:HideSymbol('\\kappa\>',    'κ', s:hd)
    +call s:HideSymbol('\\lambda\>',   'λ', s:hd)
    +call s:HideSymbol('\\mu\>',       'μ', s:hd)
    +call s:HideSymbol('\\nu\>',       'ν', s:hd)
    +call s:HideSymbol('\\xi\>',       'ξ', s:hd)
    +call s:HideSymbol('\\pi\>',       'π', s:hd)
    +call s:HideSymbol('\\rho\>',      'ρ', s:hd)
    +call s:HideSymbol('\\sigma\>',    'σ', s:hd)
    +call s:HideSymbol('\\tau\>',      'τ', s:hd)
    +call s:HideSymbol('\\upsilon\>',  'υ', s:hd)
    +call s:HideSymbol('\\phi\>',      'ϕ', s:hd)
    +call s:HideSymbol('\\chi\>',      'χ', s:hd)
    +call s:HideSymbol('\\psi\>',      'ψ', s:hd)
    +call s:HideSymbol('\\omega\>',    'ω', s:hd)
    +call s:HideSymbol('\\Gamma\>',    'Γ', s:hd)
    +call s:HideSymbol('\\Delta\>',    'Δ', s:hd)
    +call s:HideSymbol('\\Theta\>',    'Θ', s:hd)
    +call s:HideSymbol('\\Lambda\>',   'Λ', s:hd)
    +call s:HideSymbol('\\Xi\>',       'Ξ', s:hd)
    +call s:HideSymbol('\\Pi\>',       'Π', s:hd)
    +call s:HideSymbol('\\Sigma\>',    'Σ', s:hd)
    +call s:HideSymbol('\\Upsilon\>',  'Î¥', s:hd)
    +call s:HideSymbol('\\Phi\>',      'Φ', s:hd)
    +call s:HideSymbol('\\Psi\>',      'Ψ', s:hd)
    +call s:HideSymbol('\\Omega\>',    'Ω', s:hd)
    +delfunction s:HideSymbol
    +" Note: The letters 'omicron', 'Alpha', 'Beta', 'Epsilon', 'Zeta', 'Eta',
    +" 'Iota', 'Kappa', 'Mu', 'Nu', 'Omicron', 'Rho', 'Tau' and 'Chi' are listed
    +" at src/library/tools/R/Rd2txt.R because they are valid in HTML, although
    +" they do not make valid LaTeX code (e.g. Α versus \Alpha).
    +
    +" Links {{{1
    +syn region rhelpLink matchgroup=rhelpType start="\\link{" end="}" contained keepend extend
    +syn region rhelpLink matchgroup=rhelpType start="\\link\[.\{-}\]{" end="}" contained keepend extend
    +syn region rhelpLink matchgroup=rhelpType start="\\linkS4class{" end="}" contained keepend extend
    +syn region rhelpLink matchgroup=rhelpType start="\\url{" end="}" contained keepend extend
    +syn region rhelpLink matchgroup=rhelpType start="\\href{" end="}" contained keepend extend
    +syn region rhelpLink matchgroup=rhelpType start="\\figure{" end="}" contained keepend extend
    +
    +" Verbatim like {{{1
    +syn region rhelpVerbatim matchgroup=rhelpType start="\\samp{" skip='\\\@1"
    +syn match rhelpType		"\\strong\>"
    +syn match rhelpType		"\\bold\>"
    +syn match rhelpType		"\\sQuote\>"
    +syn match rhelpType		"\\dQuote\>"
    +syn match rhelpType		"\\preformatted\>"
    +syn match rhelpType		"\\kbd\>"
    +syn match rhelpType		"\\file\>"
    +syn match rhelpType		"\\email\>"
    +syn match rhelpType		"\\enc\>"
    +syn match rhelpType		"\\var\>"
    +syn match rhelpType		"\\env\>"
    +syn match rhelpType		"\\option\>"
    +syn match rhelpType		"\\command\>"
    +syn match rhelpType		"\\newcommand\>"
    +syn match rhelpType		"\\renewcommand\>"
    +syn match rhelpType		"\\dfn\>"
    +syn match rhelpType		"\\cite\>"
    +syn match rhelpType		"\\acronym\>"
    +syn match rhelpType		"\\doi\>"
    +
    +" rhelp sections {{{1
    +syn match rhelpSection		"\\encoding\>"
    +syn match rhelpSection		"\\title\>"
    +syn match rhelpSection		"\\item\>"
    +syn match rhelpSection		"\\description\>"
    +syn match rhelpSection		"\\concept\>"
    +syn match rhelpSection		"\\arguments\>"
    +syn match rhelpSection		"\\details\>"
    +syn match rhelpSection		"\\value\>"
    +syn match rhelpSection		"\\references\>"
    +syn match rhelpSection		"\\note\>"
    +syn match rhelpSection		"\\author\>"
    +syn match rhelpSection		"\\seealso\>"
    +syn match rhelpSection		"\\keyword\>"
    +syn match rhelpSection		"\\docType\>"
    +syn match rhelpSection		"\\format\>"
    +syn match rhelpSection		"\\source\>"
    +syn match rhelpSection    "\\itemize\>"
    +syn match rhelpSection    "\\describe\>"
    +syn match rhelpSection    "\\enumerate\>"
    +syn match rhelpSection    "\\item "
    +syn match rhelpSection    "\\item$"
    +syn match rhelpSection		"\\tabular{[lcr]*}"
    +syn match rhelpSection		"\\dontrun\>"
    +syn match rhelpSection		"\\dontshow\>"
    +syn match rhelpSection		"\\testonly\>"
    +syn match rhelpSection		"\\donttest\>"
    +
    +" Freely named Sections {{{1
    +syn region rhelpFreesec matchgroup=Delimiter start="\\section{" matchgroup=Delimiter transparent end="}"
    +syn region rhelpFreesubsec matchgroup=Delimiter start="\\subsection{" matchgroup=Delimiter transparent end="}" 
    +
    +syn match rhelpDelimiter "{\|\[\|(\|)\|\]\|}"
    +
    +" R help file comments {{{1
    +syn match rhelpComment /%.*$/
    +
    +" Error {{{1
    +syn region rhelpRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim,rhelpEquation
    +syn region rhelpRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim,rhelpEquation
    +syn region rhelpRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim,rhelpEquation
    +syn match rhelpError      /[)\]}]/
    +syn match rhelpBraceError /[)}]/ contained
    +syn match rhelpCurlyError /[)\]]/ contained
    +syn match rhelpParenError /[\]}]/ contained
    +
    +syntax sync match rhelpSyncRcode grouphere rhelpRcode "\\examples{"
    +
    +" Define the default highlighting {{{1
    +hi def link rhelpVerbatim    String
    +hi def link rhelpDelimiter   Delimiter
    +hi def link rhelpIdentifier  Identifier
    +hi def link rhelpString      String
    +hi def link rhelpCodeSpecial Special
    +hi def link rhelpKeyword     Keyword
    +hi def link rhelpDots        Keyword
    +hi def link rhelpLink        Underlined
    +hi def link rhelpType        Type
    +hi def link rhelpSection     PreCondit
    +hi def link rhelpError       Error
    +hi def link rhelpBraceError  Error
    +hi def link rhelpCurlyError  Error
    +hi def link rhelpParenError  Error
    +hi def link rhelpPreProc     PreProc
    +hi def link rhelpDelimiter   Delimiter
    +hi def link rhelpComment     Comment
    +hi def link rhelpRComment    Comment
    +hi def link rhelpSpecialChar SpecialChar
    +hi def link rhelpMathSymb    Special
    +hi def link rhelpMathOp      Operator
    +
    +let   b:current_syntax = "rhelp"
    +
    +" vim: foldmethod=marker sw=2
    diff --git a/.config/vim/syntax/rib.vim b/.config/vim/syntax/rib.vim
    new file mode 100644
    index 0000000..0ee6071
    --- /dev/null
    +++ b/.config/vim/syntax/rib.vim
    @@ -0,0 +1,62 @@
    +" Vim syntax file
    +" Language:	Renderman Interface Bytestream
    +" Maintainer:	Andrew Bromage 
    +" Last Change:	2003 May 11
    +"
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn case match
    +
    +" Comments
    +syn match   ribLineComment      "#.*$"
    +syn match   ribStructureComment "##.*$"
    +
    +syn case ignore
    +syn match   ribCommand	       /[A-Z][a-zA-Z]*/
    +syn case match
    +
    +syn region  ribString	       start=/"/ skip=/\\"/ end=/"/
    +
    +syn match   ribStructure	"[A-Z][a-zA-Z]*Begin\>\|[A-Z][a-zA-Z]*End"
    +syn region  ribSectionFold	start="FrameBegin" end="FrameEnd" fold transparent keepend extend
    +syn region  ribSectionFold	start="WorldBegin" end="WorldEnd" fold transparent keepend extend
    +syn region  ribSectionFold	start="TransformBegin" end="TransformEnd" fold transparent keepend extend
    +syn region  ribSectionFold	start="AttributeBegin" end="AttributeEnd" fold transparent keepend extend
    +syn region  ribSectionFold	start="MotionBegin" end="MotionEnd" fold transparent keepend extend
    +syn region  ribSectionFold	start="SolidBegin" end="SolidEnd" fold transparent keepend extend
    +syn region  ribSectionFold	start="ObjectBegin" end="ObjectEnd" fold transparent keepend extend
    +
    +syn sync    fromstart
    +
    +"integer number, or floating point number without a dot and with "f".
    +syn case ignore
    +syn match	ribNumbers	  display transparent "[-]\=\<\d\|\.\d" contains=ribNumber,ribFloat
    +syn match	ribNumber	  display contained "[-]\=\d\+\>"
    +"floating point number, with dot, optional exponent
    +syn match	ribFloat	  display contained "[-]\=\d\+\.\d*\(e[-+]\=\d\+\)\="
    +"floating point number, starting with a dot, optional exponent
    +syn match	ribFloat	  display contained "[-]\=\.\d\+\(e[-+]\=\d\+\)\=\>"
    +"floating point number, without dot, with exponent
    +syn match	ribFloat	  display contained "[-]\=\d\+e[-+]\d\+\>"
    +syn case match
    +
    +
    +hi def link ribStructure		Structure
    +hi def link ribCommand		Statement
    +
    +hi def link ribStructureComment	SpecialComment
    +hi def link ribLineComment		Comment
    +
    +hi def link ribString		String
    +hi def link ribNumber		Number
    +hi def link ribFloat		Float
    +
    +
    +
    +let b:current_syntax = "rib"
    +
    +" Options for vi: ts=8 sw=2 sts=2 nowrap noexpandtab ft=vim
    diff --git a/.config/vim/syntax/rmd.vim b/.config/vim/syntax/rmd.vim
    new file mode 100644
    index 0000000..4b4db1e
    --- /dev/null
    +++ b/.config/vim/syntax/rmd.vim
    @@ -0,0 +1,268 @@
    +" Language: Markdown with chunks of R, Python and other languages
    +" Maintainer: This runtime file is looking for a new maintainer.
    +" Former Maintainer: Jakson Alves de Aquino 
    +" Former Repository: https://github.com/jalvesaq/R-Vim-runtime
    +" Last Change: 2023 Dec 24  07:21AM
    +"   2024 Feb 19 by Vim Project (announce adoption)
    +"
    +"   For highlighting pandoc extensions to markdown like citations and TeX and
    +"   many other advanced features like folding of markdown sections, it is
    +"   recommended to install the vim-pandoc filetype plugin as well as the
    +"   vim-pandoc-syntax filetype plugin from https://github.com/vim-pandoc.
    +
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +let g:rmd_include_latex = get(g:, 'rmd_include_latex', 1)
    +if g:rmd_include_latex == 0 || g:rmd_include_latex == 1
    +  let b:rmd_has_LaTeX = v:false
    +elseif g:rmd_include_latex == 2
    +  let b:rmd_has_LaTeX = v:true
    +endif
    +
    +" Highlight the header of the chunks as R code
    +let g:rmd_syn_hl_chunk = get(g:, 'rmd_syn_hl_chunk', 0)
    +
    +" Pandoc-syntax has more features, but it is slower.
    +" https://github.com/vim-pandoc/vim-pandoc-syntax
    +
    +" Don't waste time loading syntax that will be discarded:
    +let s:save_pandoc_lngs = get(g:, 'pandoc#syntax#codeblocks#embeds#langs', [])
    +let g:pandoc#syntax#codeblocks#embeds#langs = []
    +
    +let g:rmd_dynamic_fenced_languages = get(g:, 'rmd_dynamic_fenced_languages', v:true)
    +
    +" Step_1: Source pandoc.vim if it is installed:
    +runtime syntax/pandoc.vim
    +if exists("b:current_syntax")
    +  if hlexists('pandocDelimitedCodeBlock')
    +    syn clear pandocDelimitedCodeBlock
    +  endif
    +
    +  if len(s:save_pandoc_lngs) > 0 && !exists('g:rmd_fenced_languages')
    +    let g:rmd_fenced_languages = deepcopy(s:save_pandoc_lngs)
    +  endif
    +
    +  " Recognize inline R code
    +  syn region rmdrInline matchgroup=rmdInlineDelim start="`r "  end="`" contains=@Rmdr containedin=pandocLaTeXRegion,yamlFlowString keepend
    +else
    +  " Step_2: Source markdown.vim if pandoc.vim is not installed
    +
    +  " Configuration if not using pandoc syntax:
    +  " Add syntax highlighting of YAML header
    +  let g:rmd_syn_hl_yaml = get(g:, 'rmd_syn_hl_yaml', 1)
    +  " Add syntax highlighting of citation keys
    +  let g:rmd_syn_hl_citations = get(g:, 'rmd_syn_hl_citations', 1)
    +
    +  " R chunks will not be highlighted by syntax/markdown because their headers
    +  " follow a non standard pattern: "```{lang" instead of "^```lang".
    +  " Make a copy of g:markdown_fenced_languages to highlight the chunks later:
    +  if exists('g:markdown_fenced_languages') && !exists('g:rmd_fenced_languages')
    +    let g:rmd_fenced_languages = deepcopy(g:markdown_fenced_languages)
    +  endif
    +
    +  if exists('g:markdown_fenced_languages') && len(g:markdown_fenced_languages) > 0
    +    let s:save_mfl = deepcopy(g:markdown_fenced_languages)
    +  endif
    +  " Don't waste time loading syntax that will be discarded:
    +  let g:markdown_fenced_languages = []
    +  runtime syntax/markdown.vim
    +  if exists('s:save_mfl') > 0
    +    let g:markdown_fenced_languages = deepcopy(s:save_mfl)
    +    unlet s:save_mfl
    +  endif
    +  syn region rmdrInline matchgroup=rmdInlineDelim start="`r "  end="`" contains=@Rmdr keepend
    +
    +  " Step_2a: Add highlighting for both YAML and citations which are pandoc
    +  " specific, but also used in Rmd files
    +
    +  " You don't need this if either your markdown/syntax.vim already highlights
    +  " the YAML header or you are writing standard markdown
    +  if g:rmd_syn_hl_yaml
    +    " Basic highlighting of YAML header
    +    syn match rmdYamlFieldTtl /^\s*\zs\w\%(-\|\w\)*\ze:/ contained
    +    syn match rmdYamlFieldTtl /^\s*-\s*\zs\w\%(-\|\w\)*\ze:/ contained
    +    syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start='"' skip='\\"' end='"' contains=yamlEscape,rmdrInline contained
    +    syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start="'" skip="''"  end="'" contains=yamlSingleEscape,rmdrInline contained
    +    syn match  yamlEscape contained '\\\%([\\"abefnrtv\^0_ NLP\n]\|x\x\x\|u\x\{4}\|U\x\{8}\)'
    +    syn match  yamlSingleEscape contained "''"
    +    syn match yamlComment /#.*/ contained
    +    " A second colon is a syntax error, unless within a string or following !expr
    +    syn match yamlColonError /:\s*[^'^"^!]*:/ contained
    +    if &filetype == 'quarto'
    +      syn region pandocYAMLHeader matchgroup=rmdYamlBlockDelim start=/\%(\%^\|\_^\s*\n\)\@<=\_^-\{3}\ze\n.\+/ end=/^---$/ keepend contains=rmdYamlFieldTtl,yamlFlowString,yamlComment,yamlColonError
    +    else
    +      syn region pandocYAMLHeader matchgroup=rmdYamlBlockDelim start=/\%(\%^\|\_^\s*\n\)\@<=\_^-\{3}\ze\n.\+/ end=/^\([-.]\)\1\{2}$/ keepend contains=rmdYamlFieldTtl,yamlFlowString,yamlComment,yamlColonError
    +    endif
    +    hi def link rmdYamlBlockDelim Delimiter
    +    hi def link rmdYamlFieldTtl Identifier
    +    hi def link yamlFlowString String
    +    hi def link yamlComment Comment
    +    hi def link yamlColonError Error
    +  endif
    +
    +  " Conceal char for manual line break
    +  if &encoding ==# 'utf-8'
    +    syn match rmdNewLine '  $' conceal cchar=↵
    +  endif
    +
    +  " You don't need this if either your markdown/syntax.vim already highlights
    +  " citations or you are writing standard markdown
    +  if g:rmd_syn_hl_citations
    +    " From vim-pandoc-syntax
    +    " parenthetical citations
    +    syn match pandocPCite /\^\@~\/]*.\{-}\]/ contains=pandocEmphasis,pandocStrong,pandocLatex,pandocCiteKey,@Spell,pandocAmpersandEscape display
    +    " in-text citations with location
    +    syn match pandocICite /@[[:alnum:]_][[:alnum:]à-öø-ÿÀ-ÖØ-ß_:.#$%&\-+?<>~\/]*\s\[.\{-1,}\]/ contains=pandocCiteKey,@Spell display
    +    " cite keys
    +    syn match pandocCiteKey /\(-\=@[[:alnum:]_][[:alnum:]à-öø-ÿÀ-ÖØ-ß_:.#$%&\-+?<>~\/]*\)/ containedin=pandocPCite,pandocICite contains=@NoSpell display
    +    syn match pandocCiteAnchor /[-@]/ contained containedin=pandocCiteKey display
    +    syn match pandocCiteLocator /[\[\]]/ contained containedin=pandocPCite,pandocICite
    +    hi def link pandocPCite Operator
    +    hi def link pandocICite Operator
    +    hi def link pandocCiteKey Label
    +    hi def link pandocCiteAnchor Operator
    +    hi def link pandocCiteLocator Operator
    +  endif
    +endif
    +
    +" Step_3: Highlight code blocks.
    +
    +syn region rmdCodeBlock matchgroup=rmdCodeDelim start="^\s*```\s*{.*}$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend
    +syn region rmdCodeBlock matchgroup=rmdCodeDelim start="^\s*```.+$" matchgroup=rmdCodeDelim end="^```$" keepend
    +hi link rmdCodeBlock Special
    +
    +" Now highlight chunks:
    +syn region knitrBodyOptions start='^#| ' end='$' contained  containedin=rComment,pythonComment contains=knitrBodyVar,knitrBodyValue transparent
    +syn match knitrBodyValue ': \zs.*\ze$' keepend contained containedin=knitrBodyOptions
    +syn match knitrBodyVar '| \zs\S\{-}\ze:' contained containedin=knitrBodyOptions
    +
    +let g:rmd_fenced_languages = get(g:, 'rmd_fenced_languages', ['r'])
    +
    +let s:no_syntax_vim = []
    +function s:IncludeLanguage(lng)
    +  if a:lng =~ '='
    +    let ftpy = substitute(a:lng, '.*=', '', '')
    +    let lnm = substitute(a:lng, '=.*', '', '')
    +  else
    +    let ftpy = a:lng
    +    let lnm  = a:lng
    +  endif
    +  if index(s:no_syntax_vim, ftpy) >= 0
    +    return
    +  endif
    +  if len(globpath(&rtp, "syntax/" . ftpy . ".vim"))
    +    unlet! b:current_syntax
    +    exe 'syn include @Rmd'.lnm.' syntax/'.ftpy.'.vim'
    +    let b:current_syntax = "rmd"
    +    if g:rmd_syn_hl_chunk
    +      exe 'syn match knitrChunkDelim /```\s*{\s*'.lnm.'/ contained containedin=knitrChunkBrace contains=knitrChunkLabel'
    +      exe 'syn match knitrChunkLabelDelim /```\s*{\s*'.lnm.',\=\s*[-[:alnum:]]\{-1,}[,}]/ contained containedin=knitrChunkBrace'
    +      syn match knitrChunkDelim /}\s*$/ contained containedin=knitrChunkBrace
    +      exe 'syn match knitrChunkBrace /```\s*{\s*'.lnm.'.*$/ contained containedin=rmd'.lnm.'Chunk contains=knitrChunkDelim,knitrChunkLabelDelim,@Rmd'.lnm
    +      exe 'syn region rmd'.lnm.'Chunk start="^\s*```\s*{\s*=\?'.lnm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=knitrChunkBrace,@Rmd'.lnm
    +
    +      hi link knitrChunkLabel Identifier
    +      hi link knitrChunkDelim rmdCodeDelim
    +      hi link knitrChunkLabelDelim rmdCodeDelim
    +    else
    +      exe 'syn region rmd'.lnm.'Chunk matchgroup=rmdCodeDelim start="^\s*```\s*{\s*=\?'.lnm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=@Rmd'.lnm
    +    endif
    +  else
    +    " Avoid the cost of running globpath() whenever the buffer is saved
    +    let s:no_syntax_vim += [ftpy]
    +  endif
    +endfunction
    +
    +for s:type in g:rmd_fenced_languages
    +  call s:IncludeLanguage(s:type)
    +endfor
    +unlet! s:type
    +
    +let s:LaTeX_included = v:false
    +function s:IncludeLaTeX()
    +  let s:LaTeX_included = v:true
    +  unlet! b:current_syntax
    +  syn include @RmdLaTeX syntax/tex.vim
    +  " From vim-pandoc-syntax
    +  syn region rmdLaTeXInlineMath start=/\v\\@ 0 ||
    +          \ search('\\begin{', 'wn') > 0) ||
    +          \ search('\\[[:alpha:]]\+', 'wn') ||
    +          \ search('\$[^\$]\+\$', 'wn')
    +      let b:rmd_has_LaTeX = v:true
    +    endif
    +    if b:rmd_has_LaTeX && !s:LaTeX_included
    +      call s:IncludeLaTeX()
    +    endif
    +  endif
    +endfunction
    +
    +if g:rmd_dynamic_fenced_languages
    +  call s:CheckRmdFencedLanguages()
    +  augroup RmdSyntax
    +    autocmd!
    +    autocmd BufWritePost  call s:CheckRmdFencedLanguages()
    +  augroup END
    +endif
    +
    +" Step_4: Highlight code recognized by pandoc but not defined in pandoc.vim yet:
    +syn match pandocDivBegin '^:::\+ {.\{-}}' contains=pandocHeaderAttr
    +syn match pandocDivEnd '^:::\+$'
    +
    +hi def link knitrBodyVar PreProc
    +hi def link knitrBodyValue Constant
    +hi def link knitrBodyOptions rComment
    +hi def link pandocDivBegin Delimiter
    +hi def link pandocDivEnd Delimiter
    +hi def link rmdInlineDelim Delimiter
    +hi def link rmdCodeDelim Delimiter
    +
    +if len(s:save_pandoc_lngs)
    +  let g:pandoc#syntax#codeblocks#embeds#langs = s:save_pandoc_lngs
    +endif
    +unlet s:save_pandoc_lngs
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +
    +syntax iskeyword clear
    +
    +let b:current_syntax = "rmd"
    +
    +" vim: ts=8 sw=2
    diff --git a/.config/vim/syntax/rnc.vim b/.config/vim/syntax/rnc.vim
    new file mode 100644
    index 0000000..7d3907e
    --- /dev/null
    +++ b/.config/vim/syntax/rnc.vim
    @@ -0,0 +1,68 @@
    +" Vim syntax file
    +" Language:             Relax NG compact syntax
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2007-06-17
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +setlocal iskeyword+=-,.
    +
    +syn keyword rncTodo         contained TODO FIXME XXX NOTE
    +
    +syn region  rncComment      display oneline start='^\s*#' end='$'
    +                            \ contains=rncTodo,@Spell
    +
    +syn match   rncOperator     display '[-|,&+?*~]'
    +syn match   rncOperator     display '\%(|&\)\=='
    +syn match   rncOperator     display '>>'
    +
    +syn match   rncNamespace    display '\<\k\+:'
    +
    +syn match   rncQuoted       display '\\\k\+\>'
    +
    +syn match   rncSpecial      display '\\x{\x\+}'
    +
    +syn region rncAnnotation    transparent start='\[' end='\]'
    +                            \ contains=ALLBUT,rncComment,rncTodo
    +
    +syn region  rncLiteral      display oneline start=+"+ end=+"+
    +                            \ contains=rncSpecial
    +syn region  rncLiteral      display oneline start=+'+ end=+'+
    +syn region  rncLiteral      display oneline start=+"""+ end=+"""+
    +                            \ contains=rncSpecial
    +syn region  rncLiteral      display oneline start=+'''+ end=+'''+
    +
    +syn match   rncDelimiter    display '[{},()]'
    +
    +syn keyword rncKeyword      datatypes default div empty external grammar
    +syn keyword rncKeyword      include inherit list mixed name namespace
    +syn keyword rncKeyword      notAllowed parent start string text token
    +
    +syn match   rncIdentifier   display '\k\+\_s*\%(=\|&=\||=\)\@='
    +                            \ nextgroup=rncOperator
    +syn keyword rncKeyword      element attribute
    +                            \ nextgroup=rncIdName skipwhite skipempty
    +syn match   rncIdName       contained '\k\+'
    +
    +hi def link rncTodo         Todo
    +hi def link rncComment      Comment
    +hi def link rncOperator     Operator
    +hi def link rncNamespace    Identifier
    +hi def link rncQuoted       Special
    +hi def link rncSpecial      SpecialChar
    +hi def link rncAnnotation   Special
    +hi def link rncLiteral      String
    +hi def link rncDelimiter    Delimiter
    +hi def link rncKeyword      Keyword
    +hi def link rncIdentifier   Identifier
    +hi def link rncIdName       Identifier
    +
    +let b:current_syntax = "rnc"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/rng.vim b/.config/vim/syntax/rng.vim
    new file mode 100644
    index 0000000..1ef864c
    --- /dev/null
    +++ b/.config/vim/syntax/rng.vim
    @@ -0,0 +1,25 @@
    +" Vim syntax file
    +" Language:    RELAX NG
    +" Maintainer:  Jaromir Hradilek 
    +" URL:         https://github.com/jhradilek/vim-rng
    +" Last Change: 25 March 2013
    +" Description: A syntax file for RELAX NG, a schema language for XML
    +
    +if exists('b:current_syntax')
    +  finish
    +endif
    +
    +do Syntax xml
    +syn spell toplevel
    +syn cluster xmlTagHook add=rngTagName
    +syn case match
    +
    +syn keyword rngTagName anyName attribute choice data define div contained
    +syn keyword rngTagName element empty except externalRef grammar contained
    +syn keyword rngTagName group include interleave list mixed name contained
    +syn keyword rngTagName notAllowed nsName oneOrMore optional param contained
    +syn keyword rngTagName parentRef ref start text value zeroOrMore contained
    +
    +hi def link rngTagName Statement
    +
    +let b:current_syntax = 'rng'
    diff --git a/.config/vim/syntax/rnoweb.vim b/.config/vim/syntax/rnoweb.vim
    new file mode 100644
    index 0000000..749860a
    --- /dev/null
    +++ b/.config/vim/syntax/rnoweb.vim
    @@ -0,0 +1,52 @@
    +" Vim syntax file
    +" Language:    R noweb Files
    +" Maintainer:  Johannes Ranke 
    +" Last Change: Thu Apr 05, 2018  11:06PM
    +" Version:     0.9.1
    +" Remarks:     - This file is inspired by the proposal of 
    +"                Fernando Henrique Ferraz Pereira da Rosa 
    +"                http://www.ime.usp.br/~feferraz/en/sweavevim.html
    +"
    +
    +if exists("b:current_syntax")
    +  finish
    +endif 
    +
    +syn case match
    +
    +" Extension of Tex clusters {{{1
    +runtime syntax/tex.vim
    +unlet! b:current_syntax
    +
    +syn cluster texMatchGroup add=@rnoweb
    +syn cluster texMathMatchGroup add=rnowebSexpr
    +syn cluster texMathZoneGroup add=rnowebSexpr
    +syn cluster texEnvGroup add=@rnoweb
    +syn cluster texFoldGroup add=@rnoweb
    +syn cluster texDocGroup add=@rnoweb
    +syn cluster texPartGroup add=@rnoweb
    +syn cluster texChapterGroup add=@rnoweb
    +syn cluster texSectionGroup add=@rnoweb
    +syn cluster texSubSectionGroup add=@rnoweb
    +syn cluster texSubSubSectionGroup add=@rnoweb
    +syn cluster texParaGroup add=@rnoweb
    +
    +" Highlighting of R code using an existing r.vim syntax file if available {{{1
    +syn include @rnowebR syntax/r.vim
    +syn region rnowebChunk matchgroup=rnowebDelimiter start="^\s*<<.*>>=" matchgroup=rnowebDelimiter end="^@" contains=@rnowebR,rnowebChunkReference,rnowebChunk fold keepend
    +syn match rnowebChunkReference "^\s*<<.*>>$" contained
    +syn region rnowebSexpr matchgroup=Delimiter start="\\Sexpr{" matchgroup=Delimiter end="}" contains=@rnowebR contained
    +
    +" Sweave options command {{{1
    +syn region rnowebSweaveopts matchgroup=Delimiter start="\\SweaveOpts{" matchgroup=Delimiter end="}"
    +
    +" rnoweb Cluster {{{1
    +syn cluster rnoweb contains=rnowebChunk,rnowebChunkReference,rnowebDelimiter,rnowebSexpr,rnowebSweaveopts
    +
    +" Highlighting {{{1
    +hi def link rnowebDelimiter	Delimiter
    +hi def link rnowebSweaveOpts Statement
    +hi def link rnowebChunkReference Delimiter
    +
    +let   b:current_syntax = "rnoweb"
    +" vim: foldmethod=marker:
    diff --git a/.config/vim/syntax/robots.vim b/.config/vim/syntax/robots.vim
    new file mode 100644
    index 0000000..fcb9b02
    --- /dev/null
    +++ b/.config/vim/syntax/robots.vim
    @@ -0,0 +1,57 @@
    +" Vim syntax file
    +" Language:	"Robots.txt" files
    +" Robots.txt files indicate to WWW robots which parts of a web site should not be accessed.
    +" Maintainer:	Dominique Stéphan (dominique@mggen.com)
    +" URL: http://www.mggen.com/vim/syntax/robots.zip
    +" Last change:	2001 May 09
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +    finish
    +endif
    +
    +
    +" shut case off
    +syn case ignore
    +
    +" Comment
    +syn match  robotsComment	"#.*$" contains=robotsUrl,robotsMail,robotsString
    +
    +" Star * (means all spiders)
    +syn match  robotsStar		"\*"
    +
    +" :
    +syn match  robotsDelimiter	":"
    +
    +
    +" The keywords
    +" User-agent
    +syn match  robotsAgent		"^[Uu][Ss][Ee][Rr]\-[Aa][Gg][Ee][Nn][Tt]"
    +" Disallow
    +syn match  robotsDisallow	"^[Dd][Ii][Ss][Aa][Ll][Ll][Oo][Ww]"
    +
    +" Disallow: or User-Agent: and the rest of the line before an eventual comment
    +synt match robotsLine		"\(^[Uu][Ss][Ee][Rr]\-[Aa][Gg][Ee][Nn][Tt]\|^[Dd][Ii][Ss][Aa][Ll][Ll][Oo][Ww]\):[^#]*"	contains=robotsAgent,robotsDisallow,robotsStar,robotsDelimiter
    +
    +" Some frequent things in comments
    +syn match  robotsUrl		"http[s]\=://\S*"
    +syn match  robotsMail		"\S*@\S*"
    +syn region robotsString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+
    +
    +
    +hi def link robotsComment		Comment
    +hi def link robotsAgent		Type
    +hi def link robotsDisallow		Statement
    +hi def link robotsLine		Special
    +hi def link robotsStar		Operator
    +hi def link robotsDelimiter	Delimiter
    +hi def link robotsUrl		String
    +hi def link robotsMail		String
    +hi def link robotsString		String
    +
    +
    +
    +let b:current_syntax = "robots"
    +
    +" vim: ts=8 sw=2
    +
    diff --git a/.config/vim/syntax/routeros.vim b/.config/vim/syntax/routeros.vim
    new file mode 100644
    index 0000000..b6effc9
    --- /dev/null
    +++ b/.config/vim/syntax/routeros.vim
    @@ -0,0 +1,91 @@
    +" Vim syntax file
    +" Language:        MikroTik RouterOS Script
    +" Maintainer:      zainin 
    +" Original Author: ndbjorne @ MikroTik forums
    +" Last Change:     2021 Nov 14
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn case ignore
    +
    +syn iskeyword @,48-57,-
    +
    +" comments
    +syn match   routerosComment      /^\s*\zs#.*/
    +
    +" options submenus: /interface ether1 etc
    +syn match   routerosSubMenu      "\([a-z]\)\@=!~^&.,]\ze "
    +syn match   routerosOperator     "[<>!]="
    +syn match   routerosOperator     "<<\|>>"
    +syn match   routerosOperator     "[+-]\d\@="
    +
    +syn keyword routerosOperator     and or in
    +
    +" commands
    +syn keyword routerosCommands     beep delay put len typeof pick log time set find environment
    +syn keyword routerosCommands     terminal error parse resolve toarray tobool toid toip toip6
    +syn keyword routerosCommands     tonum tostr totime add remove enable disable where get print
    +syn keyword routerosCommands     export edit find append as-value brief detail count-only file
    +syn keyword routerosCommands     follow follow-only from interval terse value-list without-paging
    +syn keyword routerosCommands     return
    +
    +" variable types
    +syn keyword routerosType         global local
    +
    +" loop keywords
    +syn keyword routerosRepeat       do while for foreach
    +
    +syn match   routerosSpecial      "[():[\]{|}]"
    +
    +syn match   routerosLineContinuation "\\$"
    +
    +syn match   routerosEscape       "\\["\\nrt$?_abfv]" contained display
    +syn match   routerosEscape       "\\\x\x"            contained display
    +
    +syn region  routerosString       start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=routerosEscape,routerosLineContinuation
    +
    +hi link routerosComment              Comment
    +hi link routerosSubMenu              Function
    +hi link routerosVariable             Identifier
    +hi link routerosDelimiter            Operator
    +hi link routerosEscape               Special
    +hi link routerosService              Type
    +hi link routerosInterface            Type
    +hi link routerosBoolean              Boolean
    +hi link routerosConditional          Conditional
    +hi link routerosOperator             Operator
    +hi link routerosCommands             Operator
    +hi link routerosType                 Type
    +hi link routerosRepeat               Repeat
    +hi link routerosSpecial              Delimiter
    +hi link routerosString               String
    +hi link routerosLineContinuation     Special
    +
    +let b:current_syntax = "routeros"
    diff --git a/.config/vim/syntax/rpcgen.vim b/.config/vim/syntax/rpcgen.vim
    new file mode 100644
    index 0000000..e5a0b0b
    --- /dev/null
    +++ b/.config/vim/syntax/rpcgen.vim
    @@ -0,0 +1,48 @@
    +" Vim syntax file
    +" Language:	rpcgen
    +" Maintainer:	This runtime file is looking for a new maintainer.
    +" Former Maintainer: Charles E. Campbell
    +" Last Change:	Aug 31, 2016
    +"   2024 Feb 19 by Vim Project (announce adoption)
    +" Version:	13
    +" Former URL:	http://www.drchip.org/astronaut/vim/index.html#SYNTAX_RPCGEN
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Read the C syntax to start with
    +runtime! syntax/c.vim
    +
    +syn keyword rpcProgram	program				skipnl skipwhite nextgroup=rpcProgName
    +syn match   rpcProgName	contained	"\<\i\I*\>"	skipnl skipwhite nextgroup=rpcProgZone
    +syn region  rpcProgZone	contained	matchgroup=Delimiter start="{" matchgroup=Delimiter end="}\s*=\s*\(\d\+\|0x[23]\x\{7}\)\s*;"me=e-1 contains=rpcVersion,cComment,rpcProgNmbrErr
    +syn keyword rpcVersion	contained	version		skipnl skipwhite nextgroup=rpcVersName
    +syn match   rpcVersName	contained	"\<\i\I*\>"	skipnl skipwhite nextgroup=rpcVersZone
    +syn region  rpcVersZone	contained	matchgroup=Delimiter start="{" matchgroup=Delimiter end="}\s*=\s*\d\+\s*;"me=e-1 contains=cType,cStructure,cStorageClass,rpcDecl,rpcProcNmbr,cComment
    +syn keyword rpcDecl	contained	string
    +syn match   rpcProcNmbr	contained	"=\s*\d\+;"me=e-1
    +syn match   rpcProgNmbrErr contained	"=\s*0x[^23]\x*"ms=s+1
    +syn match   rpcPassThru			"^\s*%.*$"
    +
    +" Define the default highlighting.
    +if !exists("skip_rpcgen_syntax_inits")
    +
    +  hi def link rpcProgName	rpcName
    +  hi def link rpcProgram	rpcStatement
    +  hi def link rpcVersName	rpcName
    +  hi def link rpcVersion	rpcStatement
    +
    +  hi def link rpcDecl	cType
    +  hi def link rpcPassThru	cComment
    +
    +  hi def link rpcName	Special
    +  hi def link rpcProcNmbr	Delimiter
    +  hi def link rpcProgNmbrErr	Error
    +  hi def link rpcStatement	Statement
    +
    +endif
    +
    +let b:current_syntax = "rpcgen"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/rpl.vim b/.config/vim/syntax/rpl.vim
    new file mode 100644
    index 0000000..28c250b
    --- /dev/null
    +++ b/.config/vim/syntax/rpl.vim
    @@ -0,0 +1,483 @@
    +" Vim syntax file
    +" Language:	RPL/2
    +" Version:	0.15.15 against RPL/2 version 4.00pre7i
    +" Last Change:	2012 Feb 03 by Thilo Six
    +" Maintainer:	Joël BERTRAND 
    +" URL:		http://www.makalis.fr/~bertrand/rpl2/download/vim/indent/rpl.vim
    +" Credits:	Nothing
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +" Keyword characters (not used)
    +" set iskeyword=33-127
    +
    +" Case sensitive
    +syntax case match
    +
    +" Constants
    +syntax match rplConstant	   "\(^\|\s\+\)\(e\|i\)\ze\($\|\s\+\)"
    +
    +" Any binary number
    +syntax match rplBinaryError	   "\(^\|\s\+\)#\s*\S\+b\ze"
    +syntax match rplBinary		   "\(^\|\s\+\)#\s*[01]\+b\ze\($\|\s\+\)"
    +syntax match rplOctalError	   "\(^\|\s\+\)#\s*\S\+o\ze"
    +syntax match rplOctal		   "\(^\|\s\+\)#\s*\o\+o\ze\($\|\s\+\)"
    +syntax match rplDecimalError	   "\(^\|\s\+\)#\s*\S\+d\ze"
    +syntax match rplDecimal		   "\(^\|\s\+\)#\s*\d\+d\ze\($\|\s\+\)"
    +syntax match rplHexadecimalError   "\(^\|\s\+\)#\s*\S\+h\ze"
    +syntax match rplHexadecimal	   "\(^\|\s\+\)#\s*\x\+h\ze\($\|\s\+\)"
    +
    +" Case unsensitive
    +syntax case ignore
    +
    +syntax match rplControl		   "\(^\|\s\+\)abort\ze\($\|\s\+\)"
    +syntax match rplControl		   "\(^\|\s\+\)kill\ze\($\|\s\+\)"
    +syntax match rplControl		   "\(^\|\s\+\)cont\ze\($\|\s\+\)"
    +syntax match rplControl		   "\(^\|\s\+\)halt\ze\($\|\s\+\)"
    +syntax match rplControl		   "\(^\|\s\+\)cmlf\ze\($\|\s\+\)"
    +syntax match rplControl		   "\(^\|\s\+\)sst\ze\($\|\s\+\)"
    +
    +syntax match rplConstant	   "\(^\|\s\+\)pi\ze\($\|\s\+\)"
    +
    +syntax match rplStatement	   "\(^\|\s\+\)return\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)last\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)syzeval\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)wait\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)type\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)kind\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)eval\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)use\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)remove\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)external\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)dup\([2n]\|\)\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)drop\([2n]\|\)\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)depth\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)roll\(d\|\)\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)pick\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)rot\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)swap\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)over\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)clear\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)warranty\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)copyright\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)convert\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)date\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)time\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)mem\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)clmf\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)->num\ze\($\|\s\+\)"
    +syntax match rplStatement	   "\(^\|\s\+\)help\ze\($\|\s\+\)"
    +
    +syntax match rplStorage		   "\(^\|\s\+\)get\(i\|r\|c\|\)\ze\($\|\s\+\)"
    +syntax match rplStorage		   "\(^\|\s\+\)put\(i\|r\|c\|\)\ze\($\|\s\+\)"
    +syntax match rplStorage		   "\(^\|\s\+\)rcl\ze\($\|\s\+\)"
    +syntax match rplStorage		   "\(^\|\s\+\)purge\ze\($\|\s\+\)"
    +syntax match rplStorage		   "\(^\|\s\+\)sinv\ze\($\|\s\+\)"
    +syntax match rplStorage		   "\(^\|\s\+\)sneg\ze\($\|\s\+\)"
    +syntax match rplStorage		   "\(^\|\s\+\)sconj\ze\($\|\s\+\)"
    +syntax match rplStorage		   "\(^\|\s\+\)steq\ze\($\|\s\+\)"
    +syntax match rplStorage		   "\(^\|\s\+\)rceq\ze\($\|\s\+\)"
    +syntax match rplStorage		   "\(^\|\s\+\)vars\ze\($\|\s\+\)"
    +syntax match rplStorage		   "\(^\|\s\+\)clusr\ze\($\|\s\+\)"
    +syntax match rplStorage		   "\(^\|\s\+\)sto\([+-/\*]\|\)\ze\($\|\s\+\)"
    +
    +syntax match rplAlgConditional	   "\(^\|\s\+\)ift\(e\|\)\ze\($\|\s\+\)"
    +
    +syntax match rplOperator	   "\(^\|\s\+\)and\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)\(x\|\)or\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)not\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)same\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)==\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)<=\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)=<\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)=>\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)>=\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)<>\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)>\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)<\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)[+-]\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)[/\*]\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)\^\ze\($\|\s\+\)"
    +syntax match rplOperator	   "\(^\|\s\+\)\*\*\ze\($\|\s\+\)"
    +
    +syntax match rplBoolean		   "\(^\|\s\+\)true\ze\($\|\s\+\)"
    +syntax match rplBoolean		   "\(^\|\s\+\)false\ze\($\|\s\+\)"
    +
    +syntax match rplReadWrite	   "\(^\|\s\+\)store\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)recall\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)\(\|wf\|un\)lock\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)open\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)close\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)delete\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)create\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)format\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)rewind\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)backspace\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)\(\|re\)write\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)read\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)inquire\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)sync\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)append\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)suppress\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)seek\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)pr\(1\|int\|st\|stc\|lcd\|var\|usr\|md\)\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)paper\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)cr\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)erase\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)disp\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)input\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)prompt\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)key\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)cllcd\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)\(\|re\)draw\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)drax\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)indep\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)depnd\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)res\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)axes\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)label\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)pmin\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)pmax\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)centr\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)persist\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)title\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)\(slice\|auto\|log\|\)scale\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)eyept\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)\(p\|s\)par\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)function\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)polar\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)scatter\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)plotter\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)wireframe\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)parametric\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)slice\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)\*w\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)\*h\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)\*d\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)\*s\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)->lcd\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)lcd->\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)edit\ze\($\|\s\+\)"
    +syntax match rplReadWrite	   "\(^\|\s\+\)visit\ze\($\|\s\+\)"
    +
    +syntax match rplIntrinsic	   "\(^\|\s\+\)abs\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)arg\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)conj\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)re\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)im\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)mant\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)xpon\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)ceil\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)fact\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)fp\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)floor\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)inv\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)ip\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)max\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)min\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)mod\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)neg\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)relax\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)sign\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)sq\(\|rt\)\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)xroot\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)cos\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)sin\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)tan\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)tg\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)a\(\|rc\)cos\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)a\(\|rc\)sin\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)atan\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)arctg\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(\|a\)cosh\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(\|a\)sinh\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(\|a\)tanh\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(\|arg\)th\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)arg[cst]h\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(\|a\)log\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)ln\(\|1\)\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)exp\(\|m\)\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)trn\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)con\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)idn\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)rdm\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)rsd\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)cnrm\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)cross\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)d[eo]t\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)[cr]swp\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)rci\(j\|\)\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(in\|de\)cr\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)bessel\ze\($\|\s\+\)"
    +
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(\|g\)egvl\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(\|g\)\(\|l\|r\)egv\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)rnrm\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(std\|fix\|sci\|eng\)\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(rad\|deg\)\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(\|n\)rand\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)rdz\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(\|i\)fft\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(dec\|bin\|oct\|hex\)\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)rclf\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)stof\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)[cs]f\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)chr\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)num\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)pos\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)sub\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)size\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(st\|rc\)ws\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(r\|s\)\(r\|l\)\(\|b\)\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)as\(r\|l\)\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(int\|der\)\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)stos\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(\|r\)cls\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)drws\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)scls\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)ns\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)tot\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)mean\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(\|p\)sdev\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(\|p\)var\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)maxs\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)mins\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(\|p\)cov\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)cols\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)s\(x\(\|y\|2\)\|y\(\|2\)\)\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(x\|y\)col\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)corr\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)utp[cfnt]\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)comb\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)perm\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)\(\|p\)lu\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)[lu]chol\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)schur\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)%\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)%ch\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)%t\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)hms->\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)->hms\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)hms+\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)hms-\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)d->r\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)r->d\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)b->r\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)r->b\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)c->r\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)r->c\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)r->p\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)p->r\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)str->\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)->str\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)array->\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)->array\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)list->\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)->list\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)s+\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)s-\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)col-\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)col+\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)row-\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)row+\ze\($\|\s\+\)"
    +syntax match rplIntrinsic	   "\(^\|\s\+\)->q\ze\($\|\s\+\)"
    +
    +syntax match rplObsolete	   "\(^\|\s\+\)arry->\ze\($\|\s\+\)"hs=e-5
    +syntax match rplObsolete	   "\(^\|\s\+\)->arry\ze\($\|\s\+\)"hs=e-5
    +
    +" Conditional structures
    +syntax match rplConditionalError   "\(^\|\s\+\)case\ze\($\|\s\+\)"hs=e-3
    +syntax match rplConditionalError   "\(^\|\s\+\)then\ze\($\|\s\+\)"hs=e-3
    +syntax match rplConditionalError   "\(^\|\s\+\)else\ze\($\|\s\+\)"hs=e-3
    +syntax match rplConditionalError   "\(^\|\s\+\)elseif\ze\($\|\s\+\)"hs=e-5
    +syntax match rplConditionalError   "\(^\|\s\+\)end\ze\($\|\s\+\)"hs=e-2
    +syntax match rplConditionalError   "\(^\|\s\+\)\(step\|next\)\ze\($\|\s\+\)"hs=e-3
    +syntax match rplConditionalError   "\(^\|\s\+\)until\ze\($\|\s\+\)"hs=e-4
    +syntax match rplConditionalError   "\(^\|\s\+\)repeat\ze\($\|\s\+\)"hs=e-5
    +syntax match rplConditionalError   "\(^\|\s\+\)default\ze\($\|\s\+\)"hs=e-6
    +
    +" FOR/(CYCLE)/(EXIT)/NEXT
    +" FOR/(CYCLE)/(EXIT)/STEP
    +" START/(CYCLE)/(EXIT)/NEXT
    +" START/(CYCLE)/(EXIT)/STEP
    +syntax match rplCycle              "\(^\|\s\+\)\(cycle\|exit\)\ze\($\|\s\+\)"
    +syntax region rplForNext matchgroup=rplRepeat start="\(^\|\s\+\)\(for\|start\)\ze\($\|\s\+\)" end="\(^\|\s\+\)\(next\|step\)\ze\($\|\s\+\)" contains=ALL keepend extend
    +
    +" ELSEIF/END
    +syntax region rplElseifEnd matchgroup=rplConditional start="\(^\|\s\+\)elseif\ze\($\|\s\+\)" end="\(^\|\s\+\)end\ze\($\|\s\+\)" contained contains=ALLBUT,rplElseEnd keepend
    +
    +" ELSE/END
    +syntax region rplElseEnd matchgroup=rplConditional start="\(^\|\s\+\)else\ze\($\|\s\+\)" end="\(^\|\s\+\)end\ze\($\|\s\+\)" contained contains=ALLBUT,rplElseEnd,rplThenEnd,rplElseifEnd keepend
    +
    +" THEN/END
    +syntax region rplThenEnd matchgroup=rplConditional start="\(^\|\s\+\)then\ze\($\|\s\+\)" end="\(^\|\s\+\)end\ze\($\|\s\+\)" contained containedin=rplIfEnd contains=ALLBUT,rplThenEnd keepend
    +
    +" IF/END
    +syntax region rplIfEnd matchgroup=rplConditional start="\(^\|\s\+\)if\(err\|\)\ze\($\|\s\+\)" end="\(^\|\s\+\)end\ze\($\|\s\+\)" contains=ALLBUT,rplElseEnd,rplElseifEnd keepend extend
    +" if end is accepted !
    +" select end too !
    +
    +" CASE/THEN
    +syntax region rplCaseThen matchgroup=rplConditional start="\(^\|\s\+\)case\ze\($\|\s\+\)" end="\(^\|\s\+\)then\ze\($\|\s\+\)" contains=ALLBUT,rplCaseThen,rplCaseEnd,rplThenEnd keepend extend contained containedin=rplCaseEnd
    +
    +" CASE/END
    +syntax region rplCaseEnd matchgroup=rplConditional start="\(^\|\s\+\)case\ze\($\|\s\+\)" end="\(^\|\s\+\)end\ze\($\|\s\+\)" contains=ALLBUT,rplCaseEnd,rplThenEnd,rplElseEnd keepend extend contained containedin=rplSelectEnd
    +
    +" DEFAULT/END
    +syntax region rplDefaultEnd matchgroup=rplConditional start="\(^\|\s\+\)default\ze\($\|\s\+\)" end="\(^\|\s\+\)end\ze\($\|\s\+\)" contains=ALLBUT,rplDefaultEnd keepend contained containedin=rplSelectEnd
    +
    +" SELECT/END
    +syntax region rplSelectEnd matchgroup=rplConditional start="\(^\|\s\+\)select\ze\($\|\s\+\)" end="\(^\|\s\+\)end\ze\($\|\s\+\)" contains=ALLBUT,rplThenEnd keepend extend
    +" select end is accepted !
    +
    +" DO/UNTIL/END
    +syntax region rplUntilEnd matchgroup=rplConditional start="\(^\|\s\+\)until\ze\($\|\s\+\)" end="\(^\|\s\+\)\zsend\ze\($\|\s\+\)" contains=ALLBUT,rplUntilEnd contained containedin=rplDoUntil extend keepend
    +syntax region rplDoUntil matchgroup=rplConditional start="\(^\|\s\+\)do\ze\($\|\s\+\)" end="\(^\|\s\+\)until\ze\($\|\s\+\)" contains=ALL keepend extend
    +
    +" WHILE/REPEAT/END
    +syntax region rplRepeatEnd matchgroup=rplConditional start="\(^\|\s\+\)repeat\ze\($\|\s\+\)" end="\(^\|\s\+\)\zsend\ze\($\|\s\+\)" contains=ALLBUT,rplRepeatEnd contained containedin=rplWhileRepeat extend keepend
    +syntax region rplWhileRepeat matchgroup=rplConditional start="\(^\|\s\+\)while\ze\($\|\s\+\)" end="\(^\|\s\+\)repeat\ze\($\|\s\+\)" contains=ALL keepend extend
    +
    +" Comments
    +syntax match rplCommentError "\*/"
    +syntax region rplCommentString contained start=+"+ end=+"+ end=+\*/+me=s-1
    +syntax region rplCommentLine start="\(^\|\s\+\)//\ze" skip="\\$" end="$" contains=NONE keepend extend
    +syntax region rplComment start="\(^\|\s\+\)/\*\ze" end="\*/" contains=rplCommentString keepend extend
    +
    +" Catch errors caused by too many right parentheses
    +syntax region rplParen transparent start="(" end=")" contains=ALLBUT,rplParenError,rplComplex,rplIncluded keepend extend
    +syntax match rplParenError ")"
    +
    +" Subroutines
    +" Catch errors caused by too many right '>>'
    +syntax match rplSubError "\(^\|\s\+\)>>\ze\($\|\s\+\)"hs=e-1
    +syntax region rplSub matchgroup=rplSubDelimitor start="\(^\|\s\+\)<<\ze\($\|\s\+\)" end="\(^\|\s\+\)>>\ze\($\|\s\+\)" contains=ALLBUT,rplSubError,rplIncluded,rplDefaultEnd,rplStorageSub keepend extend
    +
    +" Expressions
    +syntax region rplExpr start="\(^\|\s\+\)'" end="'\ze\($\|\s\+\)" contains=rplParen,rplParenError
    +
    +" Local variables
    +syntax match rplStorageError "\(^\|\s\+\)->\ze\($\|\s\+\)"hs=e-1
    +syntax region rplStorageSub matchgroup=rplStorage start="\(^\|\s\+\)<<\ze\($\|\s\+\)" end="\(^\|\s\+\)>>\ze\($\|\s\+\)" contains=ALLBUT,rplSubError,rplIncluded,rplDefaultEnd,rplStorageExpr contained containedin=rplLocalStorage keepend extend
    +syntax region rplStorageExpr matchgroup=rplStorage start="\(^\|\s\+\)'" end="'\ze\($\|\s\+\)" contains=rplParen,rplParenError extend contained containedin=rplLocalStorage
    +syntax region rplLocalStorage matchgroup=rplStorage start="\(^\|\s\+\)->\ze\($\|\s\+\)" end="\(^\|\s\+\)\(<<\ze\($\|\s\+\)\|'\)" contains=rplStorageSub,rplStorageExpr,rplComment,rplCommentLine keepend extend
    +
    +" Catch errors caused by too many right brackets
    +syntax match rplArrayError "\]"
    +syntax match rplArray "\]" contained containedin=rplArray
    +syntax region rplArray matchgroup=rplArray start="\[" end="\]" contains=ALLBUT,rplArrayError keepend extend
    +
    +" Catch errors caused by too many right '}'
    +syntax match rplListError "}"
    +syntax match rplList "}" contained containedin=rplList
    +syntax region rplList matchgroup=rplList start="{" end="}" contains=ALLBUT,rplListError,rplIncluded keepend extend
    +
    +" cpp is used by RPL/2
    +syntax match rplPreProc   "\_^#\s*\(define\|undef\)\>"
    +syntax match rplPreProc   "\_^#\s*\(warning\|error\)\>"
    +syntax match rplPreCondit "\_^#\s*\(if\|ifdef\|ifndef\|elif\|else\|endif\)\>"
    +syntax match rplIncluded contained "\<<\s*\S*\s*>\>"
    +syntax match rplInclude   "\_^#\s*include\>\s*["<]" contains=rplIncluded,rplString
    +"syntax match rplExecPath  "\%^\_^#!\s*\S*"
    +syntax match rplExecPath  "\%^\_^#!\p*\_$"
    +
    +" Any integer
    +syntax match rplInteger    "\(^\|\s\+\)[-+]\=\d\+\ze\($\|\s\+\)"
    +
    +" Floating point number
    +" [S][ip].[fp]
    +syntax match rplFloat       "\(^\|\s\+\)[-+]\=\(\d*\)\=[\.,]\(\d*\)\=\ze\($\|\s\+\)" contains=ALLBUT,rplPoint,rplSign
    +" [S]ip[.fp]E[S]exp
    +syntax match rplFloat       "\(^\|\s\+\)[-+]\=\d\+\([\.,]\d*\)\=[eE]\([-+]\)\=\d\+\ze\($\|\s\+\)" contains=ALLBUT,rplPoint,rplSign
    +" [S].fpE[S]exp
    +syntax match rplFloat       "\(^\|\s\+\)[-+]\=\(\d*\)\=[\.,]\d\+[eE]\([-+]\)\=\d\+\ze\($\|\s\+\)" contains=ALLBUT,rplPoint,rplSign
    +syntax match rplPoint      "\<[\.,]\>"
    +syntax match rplSign       "\<[+-]\>"
    +
    +" Complex number
    +" (x,y)
    +syntax match rplComplex    "\(^\|\s\+\)([-+]\=\(\d*\)\=\.\=\d*\([eE][-+]\=\d\+\)\=\s*,\s*[-+]\=\(\d*\)\=\.\=\d*\([eE][-+]\=\d\+\)\=)\ze\($\|\s\+\)"
    +" (x.y)
    +syntax match rplComplex    "\(^\|\s\+\)([-+]\=\(\d*\)\=,\=\d*\([eE][-+]\=\d\+\)\=\s*\.\s*[-+]\=\(\d*\)\=,\=\d*\([eE][-+]\=\d\+\)\=)\ze\($\|\s\+\)"
    +
    +" Strings
    +syntax match rplStringGuilles       "\\\""
    +syntax match rplStringAntislash     "\\\\"
    +syntax region rplString start=+\(^\|\s\+\)"+ end=+"\ze\($\|\s\+\)+ contains=rplStringGuilles,rplStringAntislash
    +
    +syntax match rplTab "\t"  transparent
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +" The default highlighting.
    +
    +hi def link rplControl		Statement
    +hi def link rplStatement		Statement
    +hi def link rplAlgConditional	Conditional
    +hi def link rplConditional		Repeat
    +hi def link rplConditionalError	Error
    +hi def link rplRepeat		Repeat
    +hi def link rplCycle		Repeat
    +hi def link rplUntil		Repeat
    +hi def link rplIntrinsic		Special
    +hi def link rplStorage		StorageClass
    +hi def link rplStorageExpr		StorageClass
    +hi def link rplStorageError	Error
    +hi def link rplReadWrite		rplIntrinsic
    +
    +hi def link rplOperator		Operator
    +
    +hi def link rplList		Special
    +hi def link rplArray		Special
    +hi def link rplConstant		Identifier
    +hi def link rplExpr		Type
    +
    +hi def link rplString		String
    +hi def link rplStringGuilles	String
    +hi def link rplStringAntislash	String
    +
    +hi def link rplBinary		Boolean
    +hi def link rplOctal		Boolean
    +hi def link rplDecimal		Boolean
    +hi def link rplHexadecimal		Boolean
    +hi def link rplInteger		Number
    +hi def link rplFloat		Float
    +hi def link rplComplex		Float
    +hi def link rplBoolean		Identifier
    +
    +hi def link rplObsolete		Todo
    +
    +hi def link rplPreCondit		PreCondit
    +hi def link rplInclude		Include
    +hi def link rplIncluded		rplString
    +hi def link rplInclude		Include
    +hi def link rplExecPath		Include
    +hi def link rplPreProc		PreProc
    +hi def link rplComment		Comment
    +hi def link rplCommentLine		Comment
    +hi def link rplCommentString	Comment
    +hi def link rplSubDelimitor	rplStorage
    +hi def link rplCommentError	Error
    +hi def link rplParenError		Error
    +hi def link rplSubError		Error
    +hi def link rplArrayError		Error
    +hi def link rplListError		Error
    +hi def link rplTab			Error
    +hi def link rplBinaryError		Error
    +hi def link rplOctalError		Error
    +hi def link rplDecimalError	Error
    +hi def link rplHexadecimalError	Error
    +
    +
    +let b:current_syntax = "rpl"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    +" vim: ts=8 tw=132
    diff --git a/.config/vim/syntax/rrst.vim b/.config/vim/syntax/rrst.vim
    new file mode 100644
    index 0000000..3a56342
    --- /dev/null
    +++ b/.config/vim/syntax/rrst.vim
    @@ -0,0 +1,43 @@
    +" reStructured Text with R statements
    +" Language: reST with R code chunks
    +" Maintainer: Alex Zvoleff, azvoleff@mail.sdsu.edu
    +" Homepage: https://github.com/jalvesaq/R-Vim-runtime
    +" Last Change: Thu Apr 05, 2018  11:06PM
    +"
    +" CONFIGURATION:
    +"   To highlight chunk headers as R code, put in your vimrc:
    +"   let rrst_syn_hl_chunk = 1
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" load all of the rst info
    +runtime syntax/rst.vim
    +unlet! b:current_syntax
    +
    +" load all of the r syntax highlighting rules into @R
    +syntax include @R syntax/r.vim
    +
    +" highlight R chunks
    +if exists("g:rrst_syn_hl_chunk")
    +  " highlight R code inside chunk header
    +  syntax match rrstChunkDelim "^\.\. {r" contained
    +  syntax match rrstChunkDelim "}$" contained
    +else
    +  syntax match rrstChunkDelim "^\.\. {r .*}$" contained
    +endif
    +syntax match rrstChunkDelim "^\.\. \.\.$" contained
    +syntax region rrstChunk start="^\.\. {r.*}$" end="^\.\. \.\.$" contains=@R,rrstChunkDelim keepend transparent fold
    +
    +" also highlight in-line R code
    +syntax match rrstInlineDelim "`" contained
    +syntax match rrstInlineDelim ":r:" contained
    +syntax region rrstInline start=":r: *`" skip=/\\\\\|\\`/ end="`" contains=@R,rrstInlineDelim keepend
    +
    +hi def link rrstChunkDelim Special
    +hi def link rrstInlineDelim Special
    +
    +let b:current_syntax = "rrst"
    +
    +" vim: ts=8 sw=2
    diff --git a/.config/vim/syntax/rst.vim b/.config/vim/syntax/rst.vim
    new file mode 100644
    index 0000000..9584947
    --- /dev/null
    +++ b/.config/vim/syntax/rst.vim
    @@ -0,0 +1,316 @@
    +" Vim reST syntax file
    +" Language: reStructuredText documentation format
    +" Maintainer: Marshall Ward 
    +" Previous Maintainer: Nikolai Weibull 
    +" Reference: https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html
    +" Website: https://github.com/marshallward/vim-restructuredtext
    +" Latest Revision: 2025-10-13
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +" reStructuredText is case-insensitive
    +syntax case ignore
    +
    +syn match   rstTransition  /^[=`:.'"~^_*+#-]\{4,}\s*$/
    +
    +syn cluster rstCruft                contains=rstEmphasis,rstStrongEmphasis,
    +      \ rstInterpretedTextOrHyperlinkReference,rstInlineLiteral,
    +      \ rstSubstitutionReference,rstInlineInternalTargets,rstFootnoteReference,
    +      \ rstHyperlinkReference
    +
    +syn region  rstLiteralBlock         matchgroup=rstDelimiter
    +      \ start='\(^\z(\s*\).*\)\@<=::\n\s*\n' skip='^\s*$' end='^\(\z1\s\+\)\@!'
    +      \ contains=@NoSpell
    +
    +syn region  rstQuotedLiteralBlock   matchgroup=rstDelimiter
    +      \ start="::\_s*\n\ze\z([!\"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]\)"
    +      \ end='^\z1\@!' contains=@NoSpell
    +
    +syn region  rstDoctestBlock         matchgroup=rstDoctestBlockPrompt
    +      \ start='^>>>\s' end='^$'
    +      \ contains=rstDoctestBlockPrompt
    +
    +syn match   rstDoctestBlockPrompt   contained '^>>>\s'
    +
    +syn region  rstTable                transparent start='^\n\s*+[-=+]\+' end='^$'
    +      \ contains=rstTableLines,@rstCruft
    +syn match   rstTableLines           contained display '|\|+\%(=\+\|-\+\)\='
    +
    +syn region  rstSimpleTable          transparent
    +      \ start='^\n\%(\s*\)\@>\%(\%(=\+\)\@>\%(\s\+\)\@>\)\%(\%(\%(=\+\)\@>\%(\s*\)\@>\)\+\)\@>$'
    +      \ end='^$'
    +      \ contains=rstSimpleTableLines,@rstCruft
    +syn match   rstSimpleTableLines     contained display
    +      \ '^\%(\s*\)\@>\%(\%(=\+\)\@>\%(\s\+\)\@>\)\%(\%(\%(=\+\)\@>\%(\s*\)\@>\)\+\)\@>$'
    +syn match   rstSimpleTableLines     contained display
    +      \ '^\%(\s*\)\@>\%(\%(-\+\)\@>\%(\s\+\)\@>\)\%(\%(\%(-\+\)\@>\%(\s*\)\@>\)\+\)\@>$'
    +
    +syn cluster rstDirectives           contains=rstFootnote,rstCitation,
    +      \ rstHyperlinkTarget,rstExDirective
    +
    +syn match   rstExplicitMarkup       '^\s*\.\.\_s'
    +      \ nextgroup=@rstDirectives,rstSubstitutionDefinition
    +      \ contains=rstComment
    +
    +" "Simple reference names are single words consisting of alphanumerics plus
    +" isolated (no two adjacent) internal hyphens, underscores, periods, colons
    +" and plus signs."
    +let s:ReferenceName = '[[:alnum:]]\%([-_.:+]\?[[:alnum:]]\+\)*'
    +
    +syn keyword     rstTodo             contained FIXME TODO XXX NOTE
    +
    +syn region rstComment
    +      \ start='\v^\z(\s*)\.\.(\_s+[\[|_]|\_s+.*::)@!' skip=+^$+ end=/^\(\z1   \)\@!/
    +      \ contains=@Spell,rstTodo
    +
    +" Note: Order matters for rstCitation and rstFootnote as the regex for
    +" citations also matches numeric only patterns, e.g. [1], which are footnotes.
    +" Since we define rstFootnote after rstCitation, it takes precedence, see
    +" |:syn-define|.
    +execute 'syn region rstCitation contained matchgroup=rstDirective' .
    +      \ ' start=+\[' . s:ReferenceName . '\]\_s+' .
    +      \ ' skip=+^$+' .
    +      \ ' end=+^\s\@!+ contains=@Spell,@rstCruft'
    +
    +execute 'syn region rstFootnote contained matchgroup=rstDirective' .
    +      \ ' start=+\[\%(\d\+\|#\%(' . s:ReferenceName . '\)\=\|\*\)\]\_s+' .
    +      \ ' skip=+^$+' .
    +      \ ' end=+^\s\@!+ contains=@Spell,@rstCruft'
    +
    +syn region rstHyperlinkTarget contained matchgroup=rstDirective
    +      \ start='_\%(_\|[^:\\]*\%(\\.[^:\\]*\)*\):\_s' skip=+^$+ end=+^\s\@!+
    +
    +syn region rstHyperlinkTarget contained matchgroup=rstDirective
    +      \ start='_`[^`\\]*\%(\\.[^`\\]*\)*`:\_s' skip=+^$+ end=+^\s\@!+
    +
    +syn region rstHyperlinkTarget matchgroup=rstDirective
    +      \ start=+^__\_s+ skip=+^$+ end=+^\s\@!+
    +
    +execute 'syn region rstExDirective contained matchgroup=rstDirective' .
    +      \ ' start=+' . s:ReferenceName . '::\_s+' .
    +      \ ' skip=+^$+' .
    +      \ ' end=+^\s\@!+ contains=@Spell,@rstCruft,rstLiteralBlock,rstExplicitMarkup'
    +
    +execute 'syn match rstSubstitutionDefinition contained' .
    +      \ ' /|.*|\_s\+/ nextgroup=@rstDirectives'
    +
    +
    +"" Inline Markup ""
    +
    +function! s:DefineOneInlineMarkup(name, start, middle, end, char_left, char_right)
    +  " Only escape the first char of a multichar delimiter (e.g. \* inside **)
    +  if a:start[0] == '\'
    +    let first = a:start[0:1]
    +  else
    +    let first = a:start[0]
    +  endif
    +
    +  if a:start != '``'
    +    let rst_contains=' contains=@Spell,rstEscape' . a:name
    +    execute 'syn match rstEscape'.a:name.' +\\\\\|\\'.first.'+'.' contained'
    +  else
    +    let rst_contains=' contains=@Spell'
    +  endif
    +
    +  execute 'syn region rst' . a:name .
    +        \ ' start=+' . a:char_left . '\zs' . a:start .
    +        \ '\ze[^[:space:]' . a:char_right . a:start[strlen(a:start) - 1] . ']+' .
    +        \ a:middle .
    +        \ ' end=+' . a:end . '\ze\%($\|\s\|[''"’)\]}>/:.,;!?\\-]\)+' .
    +        \ rst_contains
    +
    +  if a:start != '``'
    +    execute 'hi def link rstEscape'.a:name.' Special'
    +  endif
    +endfunction
    +
    +function! s:DefineInlineMarkup(name, start, middle, end)
    +  if a:middle == '`'
    +    let middle = ' skip=+\s'.a:middle.'+'
    +  else
    +    let middle = ' skip=+\\\\\|\\' . a:middle . '\|\s' . a:middle . '+'
    +  endif
    +
    +  " Some characters may precede or follow an inline token
    +  call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, "'", "'")
    +  call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '"', '"')
    +  call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '(', ')')
    +  call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '\[', '\]')
    +  call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '{', '}')
    +  call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '<', '>')
    +  call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '’', '’')
    +
    +  " TODO: Additional whitespace Unicode characters: Pd, Po, Pi, Pf, Ps
    +  call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '\%(^\|\s\|\%ua0\|[/:]\)', '')
    +
    +  execute 'syn match rst' . a:name .
    +        \ ' +\%(^\|\s\|\%ua0\|[''"([{/:.,;!?\\-]\)+'
    +
    +  execute 'hi def link rst' . a:name . 'Delimiter' . ' rst' . a:name
    +endfunction
    +
    +call s:DefineInlineMarkup('Emphasis', '\*', '\*', '\*')
    +call s:DefineInlineMarkup('StrongEmphasis', '\*\*', '\*', '\*\*')
    +call s:DefineInlineMarkup('InterpretedTextOrHyperlinkReference', '`', '`', '`_\{0,2}')
    +call s:DefineInlineMarkup('InlineLiteral', '``', '`', '``')
    +call s:DefineInlineMarkup('SubstitutionReference', '|', '|', '|_\{0,2}')
    +call s:DefineInlineMarkup('InlineInternalTargets', '_`', '`', '`')
    +
    +" Sections are identified through their titles, which are marked up with
    +" adornment: "underlines" below the title text, or underlines and matching
    +" "overlines" above the title. An underline/overline is a single repeated
    +" punctuation character that begins in column 1 and forms a line extending at
    +" least as far as the right edge of the title text.
    +"
    +" It is difficult to count characters in a regex, but we at least special-case
    +" the case where the title has at least three characters to require the
    +" adornment to have at least three characters as well, in order to handle
    +" properly the case of a literal block:
    +"
    +"    this is the end of a paragraph
    +"    ::
    +"       this is a literal block
    +syn match   rstSections "\v^%(([=`:.'"~^_*+#-])\1+\n)?.{1,2}\n([=`:.'"~^_*+#-])\2+$"
    +    \ contains=@Spell
    +syn match   rstSections "\v^%(([=`:.'"~^_*+#-])\1{2,}\n)?.{3,}\n([=`:.'"~^_*+#-])\2{2,}$"
    +    \ contains=@Spell
    +
    +" TODO: Can’t remember why these two can’t be defined like the ones above.
    +execute 'syn match rstFootnoteReference contains=@NoSpell' .
    +      \ ' +\%(\s\|^\)\[\%(\d\+\|#\%(' . s:ReferenceName . '\)\=\|\*\)\]_+'
    +
    +execute 'syn match rstCitationReference contains=@NoSpell' .
    +      \ ' +\%(\s\|^\)\[' . s:ReferenceName . '\]_\ze\%($\|\s\|[''")\]}>/:.,;!?\\-]\)+'
    +
    +execute 'syn match rstHyperlinkReference' .
    +      \ ' /\<' . s:ReferenceName . '__\=\ze\%($\|\s\|[''")\]}>/:.,;!?\\-]\)/'
    +
    +syn match   rstStandaloneHyperlink  contains=@NoSpell
    +      \ "\<\%(\%(\%(https\=\|file\|ftp\|gopher\)://\|\%(mailto\|news\):\)[^[:space:]'\"<>]\+\|www[[:alnum:]_-]*\.[[:alnum:]_-]\+\.[^[:space:]'\"<>]\+\)[[:alnum:]/]"
    +
    +" `code` is the standard reST directive for source code.
    +" `code-block` and `sourcecode` are nearly identical directives in Sphinx.
    +syn region rstCodeBlock contained matchgroup=rstDirective
    +      \ start=+\%(sourcecode\|code\%(-block\)\=\)::\s*\(\S*\)\?\s*\n\%(\s*:.*:\s*.*\s*\n\)*\n\ze\z(\s\+\)+
    +      \ skip=+^$+
    +      \ end=+^\z1\@!+
    +      \ contains=@NoSpell
    +syn cluster rstDirectives add=rstCodeBlock
    +
    +if !exists('g:rst_syntax_code_list')
    +    " A mapping from a Vim filetype to a list of alias patterns (pattern
    +    " branches to be specific, see ':help /pattern'). E.g. given:
    +    "
    +    "   let g:rst_syntax_code_list = {
    +    "       \ 'cpp': ['cpp', 'c++'],
    +    "       \ }
    +    "
    +    " then the respective contents of the following two rST directives:
    +    "
    +    "   .. code:: cpp
    +    "
    +    "       auto i = 42;
    +    "
    +    "   .. code:: C++
    +    "
    +    "       auto i = 42;
    +    "
    +    " will both be highlighted as C++ code. As shown by the latter block
    +    " pattern matching will be case-insensitive.
    +    let g:rst_syntax_code_list = {
    +        \ 'vim': ['vim'],
    +        \ 'java': ['java'],
    +        \ 'cpp': ['cpp', 'c++'],
    +        \ 'lisp': ['lisp'],
    +        \ 'php': ['php'],
    +        \ 'python': ['python'],
    +        \ 'perl': ['perl'],
    +        \ 'sh': ['sh'],
    +        \ }
    +elseif type(g:rst_syntax_code_list) == type([])
    +    " backward compatibility with former list format
    +    let s:old_spec = g:rst_syntax_code_list
    +    let g:rst_syntax_code_list = {}
    +    for s:elem in s:old_spec
    +        let g:rst_syntax_code_list[s:elem] = [s:elem]
    +    endfor
    +endif
    +
    +for s:filetype in keys(g:rst_syntax_code_list)
    +    unlet! b:current_syntax
    +    " guard against setting 'isk' option which might cause problems (issue #108)
    +    let prior_isk = &l:iskeyword
    +    let s:alias_pattern = ''
    +                \.'\%('
    +                \.join(g:rst_syntax_code_list[s:filetype], '\|')
    +                \.'\)'
    +
    +    exe 'syn include @rst'.s:filetype.' syntax/'.s:filetype.'.vim'
    +    exe 'syn region rstDirective'.s:filetype
    +                \.' matchgroup=rstDirective fold'
    +                \.' start="\c\%(sourcecode\|code\%(-block\)\=\)::\s\+'.s:alias_pattern.'\_s*\n\ze\z(\s\+\)"'
    +                \.' skip=#^$#'
    +                \.' end=#^\z1\@!#'
    +                \.' contains=@NoSpell,@rst'.s:filetype
    +    exe 'syn cluster rstDirectives add=rstDirective'.s:filetype
    +
    +    " reset 'isk' setting, if it has been changed
    +    if &l:iskeyword !=# prior_isk
    +        let &l:iskeyword = prior_isk
    +    endif
    +    unlet! prior_isk
    +endfor
    +
    +
    +" Enable top level spell checking
    +syntax spell toplevel
    +
    +exe "syn sync minlines=" . get(g:, 'rst_minlines', 50) . " linebreaks=2"
    +
    +hi def link rstTodo                         Todo
    +hi def link rstComment                      Comment
    +hi def link rstSections                     Title
    +hi def link rstTransition                   rstSections
    +hi def link rstLiteralBlock                 String
    +hi def link rstQuotedLiteralBlock           String
    +hi def link rstDoctestBlock                 PreProc
    +hi def link rstDoctestBlockPrompt           rstDelimiter
    +hi def link rstTableLines                   rstDelimiter
    +hi def link rstSimpleTableLines             rstTableLines
    +hi def link rstExplicitMarkup               rstDirective
    +hi def link rstDirective                    Keyword
    +hi def link rstFootnote                     String
    +hi def link rstCitation                     String
    +hi def link rstHyperlinkTarget              String
    +hi def link rstExDirective                  String
    +hi def link rstSubstitutionDefinition       rstDirective
    +hi def link rstDelimiter                    Delimiter
    +hi def link rstInterpretedTextOrHyperlinkReference  Identifier
    +hi def link rstInlineLiteral                String
    +hi def link rstSubstitutionReference        PreProc
    +hi def link rstInlineInternalTargets        Identifier
    +hi def link rstFootnoteReference            Identifier
    +hi def link rstCitationReference            Identifier
    +hi def link rstHyperLinkReference           Identifier
    +hi def link rstStandaloneHyperlink          Identifier
    +hi def link rstCodeBlock                    String
    +if exists('g:rst_use_emphasis_colors')
    +    " TODO: Less arbitrary color selection
    +    hi def rstEmphasis          ctermfg=13 term=italic cterm=italic gui=italic
    +    hi def rstStrongEmphasis    ctermfg=1 term=bold cterm=bold gui=bold
    +else
    +    hi def rstEmphasis          term=italic cterm=italic gui=italic
    +    hi def rstStrongEmphasis    term=bold cterm=bold gui=bold
    +endif
    +
    +let b:current_syntax = "rst"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/rtf.vim b/.config/vim/syntax/rtf.vim
    new file mode 100644
    index 0000000..f8e031b
    --- /dev/null
    +++ b/.config/vim/syntax/rtf.vim
    @@ -0,0 +1,75 @@
    +" Vim syntax file
    +" Language:	Rich Text Format
    +"		"*.rtf" files
    +"
    +" The Rich Text Format (RTF) Specification is a method of encoding formatted
    +" text and graphics for easy transfer between applications.
    +" .hlp (windows help files) use compiled rtf files
    +" rtf documentation at http://night.primate.wisc.edu/software/RTF/
    +"
    +" Maintainer:	Dominique Stéphan (dominique@mggen.com)
    +" URL: http://www.mggen.com/vim/syntax/rtf.zip
    +" Last change:	2001 Mai 02
    +
    +" TODO: render underline, italic, bold
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" case on (all controls must be lower case)
    +syn case match
    +
    +" Control Words
    +syn match rtfControlWord	"\\[a-z]\+[\-]\=[0-9]*"
    +
    +" New Control Words (not in the 1987 specifications)
    +syn match rtfNewControlWord	"\\\*\\[a-z]\+[\-]\=[0-9]*"
    +
    +" Control Symbol : any \ plus a non alpha symbol, *, \, { and } and '
    +syn match rtfControlSymbol	"\\[^a-zA-Z\*\{\}\\']"
    +
    +" { } and \ are special characters, to use them
    +" we add a backslash \
    +syn match rtfCharacter		"\\\\"
    +syn match rtfCharacter		"\\{"
    +syn match rtfCharacter		"\\}"
    +" Escaped characters (for 8 bytes characters upper than 127)
    +syn match rtfCharacter		"\\'[A-Za-z0-9][A-Za-z0-9]"
    +" Unicode
    +syn match rtfUnicodeCharacter	"\\u[0-9][0-9]*"
    +
    +" Color values, we will put this value in Red, Green or Blue
    +syn match rtfRed		"\\red[0-9][0-9]*"
    +syn match rtfGreen		"\\green[0-9][0-9]*"
    +syn match rtfBlue		"\\blue[0-9][0-9]*"
    +
    +" Some stuff for help files
    +syn match rtfFootNote "[#$K+]{\\footnote.*}" contains=rtfControlWord,rtfNewControlWord
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +
    +hi def link rtfControlWord		Statement
    +hi def link rtfNewControlWord	Special
    +hi def link rtfControlSymbol	Constant
    +hi def link rtfCharacter		Character
    +hi def link rtfUnicodeCharacter	SpecialChar
    +hi def link rtfFootNote		Comment
    +
    +" Define colors for the syntax file
    +hi rtfRed	      term=underline cterm=underline ctermfg=DarkRed gui=underline guifg=DarkRed
    +hi rtfGreen	      term=underline cterm=underline ctermfg=DarkGreen gui=underline guifg=DarkGreen
    +hi rtfBlue	      term=underline cterm=underline ctermfg=DarkBlue gui=underline guifg=DarkBlue
    +
    +hi def link rtfRed	rtfRed
    +hi def link rtfGreen	rtfGreen
    +hi def link rtfBlue	rtfBlue
    +
    +
    +
    +let b:current_syntax = "rtf"
    +
    +" vim:ts=8
    diff --git a/.config/vim/syntax/ruby.vim b/.config/vim/syntax/ruby.vim
    new file mode 100644
    index 0000000..e19d61a
    --- /dev/null
    +++ b/.config/vim/syntax/ruby.vim
    @@ -0,0 +1,606 @@
    +" Vim syntax file
    +" Language:		Ruby
    +" Maintainer:		Doug Kearns 
    +" URL:			https://github.com/vim-ruby/vim-ruby
    +" Release Coordinator:	Doug Kearns 
    +" Last Change:		2023 Mar 16
    +" ----------------------------------------------------------------------------
    +"
    +" Previous Maintainer:	Mirko Nasato
    +" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN)
    +" ----------------------------------------------------------------------------
    +
    +" Prelude {{{1
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" this file uses line continuations
    +let s:cpo_sav = &cpo
    +set cpo&vim
    +
    +" eRuby Config {{{1
    +if exists('main_syntax') && main_syntax == 'eruby'
    +  let b:ruby_no_expensive = 1
    +endif
    +
    +" Folding Config {{{1
    +if has("folding") && exists("ruby_fold")
    +  setlocal foldmethod=syntax
    +endif
    +
    +let s:foldable_groups = split(
    +      \	  get(
    +      \	    b:,
    +      \	    'ruby_foldable_groups',
    +      \	    get(g:, 'ruby_foldable_groups', 'ALL')
    +      \	  )
    +      \	)
    +
    +function! s:foldable(...) abort
    +  if index(s:foldable_groups, 'NONE') > -1
    +    return 0
    +  endif
    +
    +  if index(s:foldable_groups, 'ALL') > -1
    +    return 1
    +  endif
    +
    +  for l:i in a:000
    +    if index(s:foldable_groups, l:i) > -1
    +      return 1
    +    endif
    +  endfor
    +
    +  return 0
    +endfunction
    +
    +function! s:run_syntax_fold(args) abort
    +  let [_0, _1, groups, cmd; _] = matchlist(a:args, '\(["'']\)\(.\{-}\)\1\s\+\(.*\)')
    +  if call('s:foldable', split(groups))
    +    let cmd .= ' fold'
    +  endif
    +  exe cmd
    +endfunction
    +
    +com! -nargs=* SynFold call s:run_syntax_fold()
    +
    +" Not-Top Cluster {{{1
    +syn cluster rubyNotTop contains=@rubyCommentNotTop,@rubyStringNotTop,@rubyRegexpSpecial,@rubyDeclaration,@rubyExceptionHandler,@rubyClassOperator,rubyConditional,rubyModuleName,rubyClassName,rubySymbolDelimiter,rubyDoubleQuoteSymbolDelimiter,rubySingleQuoteSymbolDelimiter,rubyParentheses,@Spell
    +
    +" Whitespace Errors {{{1
    +if exists("ruby_space_errors")
    +  if !exists("ruby_no_trail_space_error")
    +    syn match rubySpaceError display excludenl "\s\+$"
    +  endif
    +  if !exists("ruby_no_tab_space_error")
    +    syn match rubySpaceError display " \+\t"me=e-1
    +  endif
    +endif
    +
    +" Operators {{{1
    +
    +syn match rubyEnglishBooleanOperator "\<\%(and\|or\|not\)\>"
    +
    +if exists("ruby_operators") || exists("ruby_pseudo_operators")
    +  syn match rubyDotOperator	   "\.\|&\."
    +
    +  syn match rubyTernaryOperator    "\%(\w\|[^\x00-\x7F]\)\@1\@!"
    +  syn match rubyComparisonOperator "<=>\|<=\|<\|>=\|[-=]\@1"
    +  syn match rubyBitwiseOperator    "[~^|]\|&\.\@!\|<<\|>>"
    +  syn match rubyBooleanOperator    "\%(\w\|[^\x00-\x7F]\)\@1\@!\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|||=\||=\|%=\|+=\|>>=\|<<=\|\^="
    +  syn match rubyAssignmentOperator "=>\@!" contained containedin=rubyBlockParameterList " TODO: this is inelegant
    +  syn match rubyEqualityOperator   "===\|==\|!=\|!\~\|=\~"
    +
    +  syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<=\[" end="]" contains=ALLBUT,@rubyNotTop
    +
    +  syn match rubyScopeOperator	    "::"
    +  syn match rubySuperClassOperator  "<"	 contained
    +  syn match rubyEigenClassOperator  "<<" contained
    +  syn match rubyLambdaOperator	    "->"
    +  syn match rubySplatOperator	    "\%([[{(|,=]\_s*\)\@<=\*"
    +  syn match rubySplatOperator	    "\%(^\|\s\)\@1<=\*\%(\h\|[^\x00-\x7F]\|[:$@[]\)\@="
    +  syn match rubyDoubleSplatOperator "\%([{(|,]\_s*\)\@<=\*\*"
    +  syn match rubyDoubleSplatOperator "\s\@1<=\*\*\%(\h\|[^\x00-\x7F]\|[:$@{]\)\@="
    +  syn match rubyProcOperator	    "\%([[(|,]\_s*\)\@<=&"
    +  syn match rubyProcOperator	    "\s\@1<=&\%(\h\|[^\x00-\x7F]\|[:$@]\|->\)\@="
    +
    +  syn cluster rubyProperOperator contains=rubyTernaryOperator,rubyArithmeticOperator,rubyComparisonOperator,rubyBitwiseOperator,rubyBooleanOperator,rubyRangeOperator,rubyAssignmentOperator,rubyEqualityOperator,rubyDefinedOperator,rubyEnglishBooleanOperator
    +  syn cluster rubyClassOperator  contains=rubyEigenClassOperator,rubySuperClassOperator
    +  syn cluster rubyPseudoOperator contains=rubyDotOperator,rubyScopeOperator,rubyEigenClassOperator,rubySuperClassOperator,rubyLambdaOperator,rubySplatOperator,rubyDoubleSplatOperator,rubyProcOperator
    +  syn cluster rubyOperator	 contains=ruby.*Operator
    +endif
    +
    +" String Interpolation and Backslash Notation {{{1
    +syn region rubyInterpolation	      matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop
    +syn match  rubyInterpolation	      "#\$\%(-\w\|[!$&"'*+,./0:;<>?@\`~_]\|\w\+\)" display contained contains=rubyInterpolationDelimiter,@rubyGlobalVariable
    +syn match  rubyInterpolation	      "#@@\=\w\+"				   display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable
    +syn match  rubyInterpolationDelimiter "#\ze[$@]"				   display contained
    +
    +syn match rubyStringEscape "\\\_."											   contained display
    +syn match rubyStringEscape "\\\o\{1,3}\|\\x\x\{1,2}"									   contained display
    +syn match rubyStringEscape "\\u\%(\x\{4}\|{\x\{1,6}\%(\s\+\x\{1,6}\)*}\)"						   contained display
    +syn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=.\)" contained display
    +
    +syn match rubyBackslashEscape "\\\\" contained display
    +syn match rubyQuoteEscape     "\\'"  contained display
    +syn match rubySpaceEscape     "\\ "  contained display
    +
    +syn match rubyParenthesisEscape	  "\\[()]"  contained display
    +syn match rubyCurlyBraceEscape	  "\\[{}]"  contained display
    +syn match rubyAngleBracketEscape  "\\[<>]"  contained display
    +syn match rubySquareBracketEscape "\\[[\]]" contained display
    +
    +syn region rubyNestedParentheses    start="("  skip="\\\\\|\\)"  end=")"	transparent contained
    +syn region rubyNestedCurlyBraces    start="{"  skip="\\\\\|\\}"  end="}"	transparent contained
    +syn region rubyNestedAngleBrackets  start="<"  skip="\\\\\|\\>"  end=">"	transparent contained
    +syn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" end="\]"	transparent contained
    +
    +syn cluster rubySingleCharEscape contains=rubyBackslashEscape,rubyQuoteEscape,rubySpaceEscape,rubyParenthesisEscape,rubyCurlyBraceEscape,rubyAngleBracketEscape,rubySquareBracketEscape
    +syn cluster rubyNestedBrackets	 contains=rubyNested.\+
    +syn cluster rubyStringSpecial	 contains=rubyInterpolation,rubyStringEscape
    +syn cluster rubyStringNotTop	 contains=@rubyStringSpecial,@rubyNestedBrackets,@rubySingleCharEscape
    +
    +" Regular Expression Metacharacters {{{1
    +syn region rubyRegexpComment	  matchgroup=rubyRegexpSpecial	 start="(?#"								     skip="\\\\\|\\)"  end=")"	contained
    +syn region rubyRegexpParens	  matchgroup=rubyRegexpSpecial	 start="(\%(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\\\\|\\)"  end=")"	contained transparent contains=@rubyRegexpSpecial
    +syn region rubyRegexpBrackets	  matchgroup=rubyRegexpCharClass start="\[\^\="								     skip="\\\\\|\\\]" end="\]" contained transparent contains=rubyRegexpBrackets,rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass,rubyRegexpIntersection oneline
    +syn match  rubyRegexpCharClass	  "\\[DdHhRSsWw]"	 contained display
    +syn match  rubyRegexpCharClass	  "\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|word\|xdigit\):\]" contained
    +syn match  rubyRegexpCharClass	  "\\[pP]{^\=.\{-}}"	 contained display
    +syn match  rubyRegexpEscape	  "\\[].*?+^$|\\/(){}[]" contained " see commit e477f10
    +syn match  rubyRegexpQuantifier	  "[*?+][?+]\="		 contained display
    +syn match  rubyRegexpQuantifier	  "{\d\+\%(,\d*\)\=}?\=" contained display
    +syn match  rubyRegexpAnchor	  "[$^]\|\\[ABbGZz]"	 contained display
    +syn match  rubyRegexpDot	  "\.\|\\X"		 contained display
    +syn match  rubyRegexpIntersection "&&"			 contained display
    +syn match  rubyRegexpSpecial	  "\\K"			 contained display
    +syn match  rubyRegexpSpecial	  "|"			 contained display
    +syn match  rubyRegexpSpecial	  "\\[1-9]\d\=\d\@!"	 contained display
    +syn match  rubyRegexpSpecial	  "\\k<\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\=>" contained display
    +syn match  rubyRegexpSpecial	  "\\k'\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\='" contained display
    +syn match  rubyRegexpSpecial	  "\\g<\%([a-z_]\w*\|-\=\d\+\)>"		contained display
    +syn match  rubyRegexpSpecial	  "\\g'\%([a-z_]\w*\|-\=\d\+\)'"		contained display
    +
    +syn cluster rubyRegexpSpecial contains=@rubyStringSpecial,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment,rubyRegexpIntersection
    +
    +" Numbers {{{1
    +syn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@"							       display
    +syn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@"					       display
    +syn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@"							       display
    +syn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@"						       display
    +syn match rubyFloat   "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@"				       display
    +syn match rubyFloat   "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@" display
    +
    +" Identifiers {{{1
    +syn match rubyClassName	       "\%(\%(^\|[^.]\)\.\s*\)\@\%(\s*(\)\@!" contained
    +syn match rubyModuleName       "\%(\%(^\|[^.]\)\.\s*\)\@\%(\s*(\)\@!" contained
    +syn match rubyConstant	       "\%(\%(^\|[^.]\)\.\s*\)\@\%(\s*(\)\@!"
    +syn match rubyClassVariable    "@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display
    +syn match rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"  display
    +syn match rubyGlobalVariable   "$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)"
    +syn match rubySymbolDelimiter  ":" contained
    +syn match rubySymbol	       "[]})\"':]\@1\|<=\|<\|===\|[=!]=\|[=!]\~\|!@\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" contains=rubySymbolDelimiter
    +syn match rubySymbol	       "[]})\"':]\@1_,;:!?/.'"@$*\&+0]\)"			    contains=rubySymbolDelimiter
    +syn match rubySymbol	       "[]})\"':]\@1\@!\)\=" contains=rubySymbolDelimiter
    +
    +SynFold ':' syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1\%(\s*(\)\@="
    +
    +syn region rubyParentheses	  start="("				 end=")" contains=ALLBUT,@rubyNotTop contained containedin=rubyBlockParameterList
    +syn region rubyBlockParameterList start="\%(\%(\\|{\)\_s*\)\@32<=|" end="|" contains=ALLBUT,@rubyNotTop,@rubyProperOperator
    +
    +if exists('ruby_global_variable_error')
    +  syn match rubyGlobalVariableError "$[^A-Za-z_]"	display
    +  syn match rubyGlobalVariableError "$-[^0FIKWadilpvw]" display
    +endif
    +
    +syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<>?@\`~]#
    +syn match rubyPredefinedVariable "$\d\+"									    display
    +syn match rubyPredefinedVariable "$_\>"										    display
    +syn match rubyPredefinedVariable "$-[0FIWadilpvw]\>"								    display
    +syn match rubyPredefinedVariable "$\%(stderr\|stdin\|stdout\)\>"						    display
    +syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
    +syn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@\%(\s*(\)\@!"
    +syn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@\%(\s*(\)\@!"
    +
    +" Deprecated/removed in 1.9
    +syn match rubyPredefinedVariable "$="
    +syn match rubyPredefinedVariable "$-K\>"		  display
    +syn match rubyPredefinedVariable "$\%(deferr\|defout\)\>" display
    +syn match rubyPredefinedVariable "$KCODE\>"		  display
    +" Deprecated/removed in 2.4
    +syn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@\%(\s*(\)\@!"
    +
    +syn cluster rubyGlobalVariable contains=rubyGlobalVariable,rubyPredefinedVariable,rubyGlobalVariableError
    +
    +" Normal Regular Expressions {{{1
    +SynFold '/' syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite
    +SynFold '/' syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\s\+\)\@<=/\%(=\|\_s\)\@!"					   end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite
    +
    +" Generalized Regular Expressions {{{1
    +SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite
    +SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r{"				   end="}[iomxneus]*"	skip="\\\\\|\\}"   contains=@rubyRegexpSpecial
    +SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r<"				   end=">[iomxneus]*"	skip="\\\\\|\\>"   contains=@rubyRegexpSpecial,rubyNestedAngleBrackets
    +SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\["				   end="\][iomxneus]*"	skip="\\\\\|\\\]"  contains=@rubyRegexpSpecial
    +SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r("				   end=")[iomxneus]*"	skip="\\\\\|\\)"   contains=@rubyRegexpSpecial
    +SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\z(\s\)"			   end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial
    +
    +" Characters {{{1
    +syn match rubyCharacter "\%(\w\|[^\x00-\x7F]\|[]})\"'/]\)\@1"   skip="\\\\\|\\>"   contains=rubyBackslashEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets
    +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q\["	  end="\]"  skip="\\\\\|\\\]"  contains=rubyBackslashEscape,rubySquareBracketEscape,rubyNestedSquareBrackets
    +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q("	  end=")"   skip="\\\\\|\\)"   contains=rubyBackslashEscape,rubyParenthesisEscape,rubyNestedParentheses
    +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=rubyBackslashEscape,rubySpaceEscape
    +
    +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w{"	  end="}"   skip="\\\\\|\\}"   contains=rubyBackslashEscape,rubySpaceEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces
    +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w<"	  end=">"   skip="\\\\\|\\>"   contains=rubyBackslashEscape,rubySpaceEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets
    +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w\["	  end="\]"  skip="\\\\\|\\\]"  contains=rubyBackslashEscape,rubySpaceEscape,rubySquareBracketEscape,rubyNestedSquareBrackets
    +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w("	  end=")"   skip="\\\\\|\\)"   contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses
    +
    +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s{"	  end="}"   skip="\\\\\|\\}"   contains=rubyBackslashEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces
    +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s<"	  end=">"   skip="\\\\\|\\>"   contains=rubyBackslashEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets
    +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s\["	  end="\]"  skip="\\\\\|\\\]"  contains=rubyBackslashEscape,rubySquareBracketEscape,rubyNestedSquareBrackets
    +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s("	  end=")"   skip="\\\\\|\\)"   contains=rubyBackslashEscape,rubyParenthesisEscape,rubyNestedParentheses
    +SynFold '%' syn region rubyString matchgroup=rubyPercentSymbolDelimiter start="%s\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=rubyBackslashEscape,rubySpaceEscape
    +
    +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i{"	  end="}"   skip="\\\\\|\\}"   contains=rubyBackslashEscape,rubySpaceEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces
    +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i<"	  end=">"   skip="\\\\\|\\>"   contains=rubyBackslashEscape,rubySpaceEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets
    +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i\["	  end="\]"  skip="\\\\\|\\\]"  contains=rubyBackslashEscape,rubySpaceEscape,rubySquareBracketEscape,rubyNestedSquareBrackets
    +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i("	  end=")"   skip="\\\\\|\\)"   contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses
    +
    +" Generalized Double Quoted Strings, Array of Strings, Array of Symbols and Shell Command Output {{{1
    +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="\%(\%(\w\|[^\x00-\x7F]\|]\)\s*\)\@"	 skip="\\\\\|\\>"   contains=@rubyStringSpecial,rubyNestedAngleBrackets
    +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=\["			       end="\]"  skip="\\\\\|\\\]"  contains=@rubyStringSpecial,rubyNestedSquareBrackets
    +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=("			       end=")"	 skip="\\\\\|\\)"   contains=@rubyStringSpecial,rubyNestedParentheses
    +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[Qx]\z(\s\)"			       end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial
    +
    +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite
    +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I{"				   end="}"   skip="\\\\\|\\}"	contains=@rubyStringSpecial,rubyNestedCurlyBraces
    +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I<"				   end=">"   skip="\\\\\|\\>"	contains=@rubyStringSpecial,rubyNestedAngleBrackets
    +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I\["				   end="\]"  skip="\\\\\|\\\]"	contains=@rubyStringSpecial,rubyNestedSquareBrackets
    +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I("				   end=")"   skip="\\\\\|\\)"	contains=@rubyStringSpecial,rubyNestedParentheses
    +
    +" Here Documents {{{1
    +syn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
    +
    +syn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyMethodName
    +
    +" Keywords {{{1
    +" TODO: reorganise
    +syn match rubyControl	     "\%#=1\<\%(break\|in\|next\|redo\|retry\|return\)\>"
    +syn match rubyKeyword	     "\%#=1\<\%(super\|yield\)\>"
    +syn match rubyBoolean	     "\%#=1\<\%(true\|false\)\>[?!]\@!"
    +syn match rubyPseudoVariable "\%#=1\<\%(self\|nil\)\>[?!]\@!"
    +syn match rubyPseudoVariable "\%#=1\<__\%(ENCODING\|dir\|FILE\|LINE\|callee\|method\)__\>"
    +syn match rubyBeginEnd	     "\%#=1\<\%(BEGIN\|END\)\>"
    +
    +" Expensive Mode {{{1
    +" Match 'end' with the appropriate opening keyword for syntax based folding
    +" and special highlighting of module/class/method definitions
    +if !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
    +  syn match rubyDefine "\"  nextgroup=rubyAliasDeclaration			  skipwhite skipnl
    +  syn match rubyDefine "\"    nextgroup=rubyMethodDeclaration			  skipwhite skipnl
    +  syn match rubyDefine "\"  nextgroup=rubyMethodName				  skipwhite skipnl
    +  syn match rubyClass  "\"  nextgroup=rubyClassDeclaration,rubyEigenClassOperator skipwhite skipnl
    +  syn match rubyModule "\" nextgroup=rubyModuleDeclaration			  skipwhite skipnl
    +
    +  SynFold 'def'    syn region rubyMethodBlock start="\"	 matchgroup=rubyDefine skip="\" end="\" contains=ALLBUT,@rubyNotTop
    +  SynFold 'class'  syn region rubyClassBlock  start="\"  matchgroup=rubyClass  skip="\"
    +  syn match rubyRepeatModifier	    "\<\%(while\|until\)\>"
    +  syn match rubyRescueModifier	    "\"
    +
    +  syn cluster rubyModifier contains=rubyConditionalModifier,rubyRepeatModifier,rubyRescueModifier
    +
    +  SynFold 'do' syn region rubyDoBlock matchgroup=rubyControl start="\" skip="\"	 contained containedin=rubyCaseExpression
    +  syn match rubyConditional "\<\%(then\|else\|elsif\)\>" contained containedin=rubyConditionalExpression
    +
    +  syn match   rubyExceptionHandler  "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyBlockExpression,rubyDoBlock
    +  syn match   rubyExceptionHandler2 "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyModuleBlock,rubyClassBlock,rubyMethodBlock
    +  syn cluster rubyExceptionHandler  contains=rubyExceptionHandler,rubyExceptionHandler2
    +
    +  " statements with optional 'do'
    +  syn region rubyOptionalDoLine matchgroup=rubyRepeat start="\" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\@" matchgroup=rubyOptionalDo end="\" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyNotTop
    +
    +  SynFold 'for' syn region rubyRepeatExpression start="\" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\@" matchgroup=rubyRepeat skip="\"    nextgroup=rubyMethodDeclaration skipwhite skipnl
    +  syn match rubyControl "\"  nextgroup=rubyClassDeclaration  skipwhite skipnl
    +  syn match rubyControl "\" nextgroup=rubyModuleDeclaration skipwhite skipnl
    +  syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|rescue\|ensure\|then\|when\|end\)\>"
    +  syn match rubyKeyword "\<\%(alias\|undef\)\>"
    +endif
    +
    +if !exists("ruby_minlines")
    +  let ruby_minlines = 500
    +endif
    +exe "syn sync minlines=" . ruby_minlines
    +
    +" Special Methods {{{1
    +if !exists("ruby_no_special_methods")
    +  syn match rubyAccess	  "\<\%(public\|protected\|private\)\>" " use re=2
    +  syn match rubyAccess	  "\%#=1\<\%(public\|private\)_class_method\>"
    +  syn match rubyAccess	  "\%#=1\<\%(public\|private\)_constant\>"
    +  syn match rubyAccess	  "\%#=1\"
    +  syn match rubyAttribute "\%#=1\%(\%(^\|;\)\s*\)\@<=attr\>\%(\s*[.=]\)\@!" " attr is a common variable name
    +  syn match rubyAttribute "\%#=1\"
    +  syn match rubyControl   "\%#=1\<\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>"
    +  syn match rubyEval	  "\%#=1\"
    +  syn match rubyEval	  "\%#=1\<\%(class\|instance\|module\)_eval\>"
    +  syn match rubyException "\%#=1\<\%(raise\|fail\|catch\|throw\)\>"
    +  syn match rubyInclude   "\%#=1\<\%(autoload\|gem\|load\|require\%(_relative\)\=\)\>"
    +  syn match rubyKeyword   "\%#=1\<\%(callcc\|caller\|lambda\|proc\)\>"
    +  syn match rubyMacro	  "\%#=1\<\%(extend\|include\|prepend\|refine\|using\)\>"
    +  syn match rubyMacro	  "\%#=1\<\%(alias\|define\|define_singleton\|remove\|undef\)_method\>"
    +endif
    +
    +" Comments and Documentation {{{1
    +syn match   rubySharpBang    "\%^#!.*" display
    +syn keyword rubyTodo	     FIXME NOTE TODO OPTIMIZE HACK REVIEW XXX todo contained
    +syn match   rubyEncoding     "[[:alnum:]-_]\+" contained display
    +syn match   rubyMagicComment "\c\%<3l#\s*\zs\%(coding\|encoding\):"					contained nextgroup=rubyEncoding skipwhite
    +syn match   rubyMagicComment "\c\%<10l#\s*\zs\%(frozen[-_]string[-_]literal\|warn[-_]indent\|warn[-_]past[-_]scope\):" contained nextgroup=rubyBoolean  skipwhite
    +syn match   rubyMagicComment "\c\%<10l#\s*\zs\%(shareable[-_]constant[-_]value\):"				contained nextgroup=rubyEncoding  skipwhite
    +syn match   rubyComment	     "#.*" contains=@rubyCommentSpecial,rubySpaceError,@Spell
    +
    +syn cluster rubyCommentSpecial contains=rubySharpBang,rubyTodo,rubyMagicComment
    +syn cluster rubyCommentNotTop  contains=@rubyCommentSpecial,rubyEncoding
    +
    +if !exists("ruby_no_comment_fold") && s:foldable('#')
    +  syn region rubyMultilineComment start="^\s*#.*\n\%(^\s*#\)\@=" end="^\s*#.*\n\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend
    +  syn region rubyDocumentation	  start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$"      contains=rubySpaceError,rubyTodo,@Spell fold
    +else
    +  syn region rubyDocumentation	  start="^=begin\s*$"		 end="^=end\s*$"              contains=rubySpaceError,rubyTodo,@Spell
    +endif
    +
    +" {{{1 Useless Line Continuations
    +syn match rubyUselessLineContinuation "\%([.:,;{([<>~\*%&^|+=-]\|%(\%(\w\|[^\x00-\x7F]\)\@1\)" transparent contains=rubyDotOperator,rubyScopeOperator
    +
    +" Bang and Predicate Methods and Operators {{{1
    +syn match rubyBangPredicateMethod "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[?!]"
    +
    +if !exists("ruby_no_special_methods")
    +  syn match rubyControl "\%#=1\
    +" Maintainer:   Ben Blum 
    +" Maintainer:   Chris Morgan 
    +" Last Change:  2023-09-11
    +" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
    +
    +if version < 600
    +    syntax clear
    +elseif exists("b:current_syntax")
    +    finish
    +endif
    +
    +" Syntax definitions {{{1
    +" Basic keywords {{{2
    +syn keyword   rustConditional match if else
    +syn keyword   rustRepeat loop while
    +" `:syn match` must be used to prioritize highlighting `for` keyword.
    +syn match     rustRepeat /\/
    +" Highlight `for` keyword in `impl ... for ... {}` statement. This line must
    +" be put after previous `syn match` line to overwrite it.
    +syn match     rustKeyword /\%(\.\+\)\@<=\/
    +syn keyword   rustRepeat in
    +syn keyword   rustTypedef type nextgroup=rustIdentifier skipwhite skipempty
    +syn keyword   rustStructure struct enum nextgroup=rustIdentifier skipwhite skipempty
    +syn keyword   rustUnion union nextgroup=rustIdentifier skipwhite skipempty contained
    +syn match rustUnionContextual /\/
    +syn keyword   rustAwait       await
    +syn match     rustKeyword     /\!\@!/ display
    +
    +syn keyword rustPubScopeCrate crate contained
    +syn match rustPubScopeDelim /[()]/ contained
    +syn match rustPubScope /([^()]*)/ contained contains=rustPubScopeDelim,rustPubScopeCrate,rustSuper,rustModPath,rustModPathSep,rustSelf transparent
    +
    +syn keyword   rustExternCrate crate contained nextgroup=rustIdentifier,rustExternCrateString skipwhite skipempty
    +" This is to get the `bar` part of `extern crate "foo" as bar;` highlighting.
    +syn match   rustExternCrateString /".*"\_s*as/ contained nextgroup=rustIdentifier skipwhite transparent skipempty contains=rustString,rustOperator
    +syn keyword   rustObsoleteExternMod mod contained nextgroup=rustIdentifier skipwhite skipempty
    +
    +syn match     rustIdentifier  contains=rustIdentifierPrime "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained
    +syn match     rustFuncName    "\%(r#\)\=\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained
    +
    +syn region rustMacroRepeat matchgroup=rustMacroRepeatDelimiters start="$(" end="),\=[*+]" contains=TOP
    +syn match rustMacroVariable "$\w\+"
    +syn match rustRawIdent "\();
    +
    +" This is merely a convention; note also the use of [A-Z], restricting it to
    +" latin identifiers rather than the full Unicode uppercase. I have not used
    +" [:upper:] as it depends upon 'noignorecase'
    +"syn match     rustCapsIdent    display "[A-Z]\w\(\w\)*"
    +
    +syn match     rustOperator     display "\%(+\|-\|/\|*\|=\|\^\|&\||\|!\|>\|<\|%\)=\?"
    +" This one isn't *quite* right, as we could have binary-& with a reference
    +syn match     rustSigil        display /&\s\+[&~@*][^)= \t\r\n]/he=e-1,me=e-1
    +syn match     rustSigil        display /[&~@*][^)= \t\r\n]/he=e-1,me=e-1
    +" This isn't actually correct; a closure with no arguments can be `|| { }`.
    +" Last, because the & in && isn't a sigil
    +syn match     rustOperator     display "&&\|||"
    +" This is rustArrowCharacter rather than rustArrow for the sake of matchparen,
    +" so it skips the ->; see http://stackoverflow.com/a/30309949 for details.
    +syn match     rustArrowCharacter display "->"
    +syn match     rustQuestionMark display "?\([a-zA-Z]\+\)\@!"
    +
    +syn match     rustMacro       '\w\(\w\)*!' contains=rustAssert,rustPanic
    +syn match     rustMacro       '#\w\(\w\)*' contains=rustAssert,rustPanic
    +
    +syn match     rustEscapeError   display contained /\\./
    +syn match     rustEscape        display contained /\\\([nrt0\\'"]\|x\x\{2}\)/
    +syn match     rustEscapeUnicode display contained /\\u{\%(\x_*\)\{1,6}}/
    +syn match     rustStringContinuation display contained /\\\n\s*/
    +syn region    rustString      matchgroup=rustStringDelimiter start=+b"+ skip=+\\\\\|\\"+ end=+"+ contains=rustEscape,rustEscapeError,rustStringContinuation
    +syn region    rustString      matchgroup=rustStringDelimiter start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=rustEscape,rustEscapeUnicode,rustEscapeError,rustStringContinuation,@Spell
    +syn region    rustString      matchgroup=rustStringDelimiter start='b\?r\z(#*\)"' end='"\z1' contains=@Spell
    +
    +" Match attributes with either arbitrary syntax or special highlighting for
    +" derives. We still highlight strings and comments inside of the attribute.
    +syn region    rustAttribute   start="#!\?\[" end="\]" contains=@rustAttributeContents,rustAttributeParenthesizedParens,rustAttributeParenthesizedCurly,rustAttributeParenthesizedBrackets,rustDerive
    +syn region    rustAttributeParenthesizedParens matchgroup=rustAttribute start="\w\%(\w\)*("rs=e end=")"re=s transparent contained contains=rustAttributeBalancedParens,@rustAttributeContents
    +syn region    rustAttributeParenthesizedCurly matchgroup=rustAttribute start="\w\%(\w\)*{"rs=e end="}"re=s transparent contained contains=rustAttributeBalancedCurly,@rustAttributeContents
    +syn region    rustAttributeParenthesizedBrackets matchgroup=rustAttribute start="\w\%(\w\)*\["rs=e end="\]"re=s transparent contained contains=rustAttributeBalancedBrackets,@rustAttributeContents
    +syn region    rustAttributeBalancedParens matchgroup=rustAttribute start="("rs=e end=")"re=s transparent contained contains=rustAttributeBalancedParens,@rustAttributeContents
    +syn region    rustAttributeBalancedCurly matchgroup=rustAttribute start="{"rs=e end="}"re=s transparent contained contains=rustAttributeBalancedCurly,@rustAttributeContents
    +syn region    rustAttributeBalancedBrackets matchgroup=rustAttribute start="\["rs=e end="\]"re=s transparent contained contains=rustAttributeBalancedBrackets,@rustAttributeContents
    +syn cluster   rustAttributeContents contains=rustString,rustCommentLine,rustCommentBlock,rustCommentLineDocError,rustCommentBlockDocError
    +syn region    rustDerive      start="derive(" end=")" contained contains=rustDeriveTrait
    +" This list comes from src/libsyntax/ext/deriving/mod.rs
    +" Some are deprecated (Encodable, Decodable) or to be removed after a new snapshot (Show).
    +syn keyword   rustDeriveTrait contained Clone Hash RustcEncodable RustcDecodable Encodable Decodable PartialEq Eq PartialOrd Ord Rand Show Debug Default FromPrimitive Send Sync Copy
    +
    +" dyn keyword: It's only a keyword when used inside a type expression, so
    +" we make effort here to highlight it only when Rust identifiers follow it
    +" (not minding the case of pre-2018 Rust where a path starting with :: can
    +" follow).
    +"
    +" This is so that uses of dyn variable names such as in 'let &dyn = &2'
    +" and 'let dyn = 2' will not get highlighted as a keyword.
    +syn match     rustKeyword "\/ contains=rustGenericLifetimeCandidate
    +syn region rustGenericLifetimeCandidate display start=/\%(<\|,\s*\)\@<='/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustSigil,rustLifetime
    +
    +"rustLifetime must appear before rustCharacter, or chars will get the lifetime highlighting
    +syn match     rustLifetime    display "\'\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*"
    +syn match     rustLabel       display "\'\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*:"
    +syn match     rustLabel       display "\%(\<\%(break\|continue\)\s*\)\@<=\'\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*"
    +syn match   rustCharacterInvalid   display contained /b\?'\zs[\n\r\t']\ze'/
    +" The groups negated here add up to 0-255 but nothing else (they do not seem to go beyond ASCII).
    +syn match   rustCharacterInvalidUnicode   display contained /b'\zs[^[:cntrl:][:graph:][:alnum:][:space:]]\ze'/
    +syn match   rustCharacter   /b'\([^\\]\|\\\(.\|x\x\{2}\)\)'/ contains=rustEscape,rustEscapeError,rustCharacterInvalid,rustCharacterInvalidUnicode
    +syn match   rustCharacter   /'\([^\\]\|\\\(.\|x\x\{2}\|u{\%(\x_*\)\{1,6}}\)\)'/ contains=rustEscape,rustEscapeUnicode,rustEscapeError,rustCharacterInvalid
    +
    +syn match rustShebang /\%^#![^[].*/
    +syn region rustCommentLine                                                  start="//"                      end="$"   contains=rustTodo,@Spell
    +syn region rustCommentLineDoc                                               start="//\%(//\@!\|!\)"         end="$"   contains=rustTodo,@Spell
    +syn region rustCommentLineDocError                                          start="//\%(//\@!\|!\)"         end="$"   contains=rustTodo,@Spell contained
    +syn region rustCommentBlock             matchgroup=rustCommentBlock         start="/\*\%(!\|\*[*/]\@!\)\@!" end="\*/" contains=rustTodo,rustCommentBlockNest,@Spell
    +syn region rustCommentBlockDoc          matchgroup=rustCommentBlockDoc      start="/\*\%(!\|\*[*/]\@!\)"    end="\*/" contains=rustTodo,rustCommentBlockDocNest,rustCommentBlockDocRustCode,@Spell
    +syn region rustCommentBlockDocError     matchgroup=rustCommentBlockDocError start="/\*\%(!\|\*[*/]\@!\)"    end="\*/" contains=rustTodo,rustCommentBlockDocNestError,@Spell contained
    +syn region rustCommentBlockNest         matchgroup=rustCommentBlock         start="/\*"                     end="\*/" contains=rustTodo,rustCommentBlockNest,@Spell contained transparent
    +syn region rustCommentBlockDocNest      matchgroup=rustCommentBlockDoc      start="/\*"                     end="\*/" contains=rustTodo,rustCommentBlockDocNest,@Spell contained transparent
    +syn region rustCommentBlockDocNestError matchgroup=rustCommentBlockDocError start="/\*"                     end="\*/" contains=rustTodo,rustCommentBlockDocNestError,@Spell contained transparent
    +
    +" FIXME: this is a really ugly and not fully correct implementation. Most
    +" importantly, a case like ``/* */*`` should have the final ``*`` not being in
    +" a comment, but in practice at present it leaves comments open two levels
    +" deep. But as long as you stay away from that particular case, I *believe*
    +" the highlighting is correct. Due to the way Vim's syntax engine works
    +" (greedy for start matches, unlike Rust's tokeniser which is searching for
    +" the earliest-starting match, start or end), I believe this cannot be solved.
    +" Oh you who would fix it, don't bother with things like duplicating the Block
    +" rules and putting ``\*\@:p:h/rust.vim
    +    unlet b:current_syntax_embed
    +
    +    " Currently regions marked as ``` will not get
    +    " highlighted at all. In the future, we can do as vim-markdown does and
    +    " highlight with the other syntax. But for now, let's make sure we find
    +    " the closing block marker, because the rules below won't catch it.
    +    syn region rustCommentLinesDocNonRustCode matchgroup=rustCommentDocCodeFence start='^\z(\s*//[!/]\s*```\).\+$' end='^\z1$' keepend contains=rustCommentLineDoc
    +
    +    " We borrow the rules from rust’s src/librustdoc/html/markdown.rs, so that
    +    " we only highlight as Rust what it would perceive as Rust (almost; it’s
    +    " possible to trick it if you try hard, and indented code blocks aren’t
    +    " supported because Markdown is a menace to parse and only mad dogs and
    +    " Englishmen would try to handle that case correctly in this syntax file).
    +    syn region rustCommentLinesDocRustCode matchgroup=rustCommentDocCodeFence start='^\z(\s*//[!/]\s*```\)[^A-Za-z0-9_-]*\%(\%(should_panic\|no_run\|ignore\|allow_fail\|rust\|test_harness\|compile_fail\|E\d\{4}\|edition201[58]\)\%([^A-Za-z0-9_-]\+\|$\)\)*$' end='^\z1$' keepend contains=@RustCodeInComment,rustCommentLineDocLeader
    +    syn region rustCommentBlockDocRustCode matchgroup=rustCommentDocCodeFence start='^\z(\%(\s*\*\)\?\s*```\)[^A-Za-z0-9_-]*\%(\%(should_panic\|no_run\|ignore\|allow_fail\|rust\|test_harness\|compile_fail\|E\d\{4}\|edition201[58]\)\%([^A-Za-z0-9_-]\+\|$\)\)*$' end='^\z1$' keepend contains=@RustCodeInComment,rustCommentBlockDocStar
    +    " Strictly, this may or may not be correct; this code, for example, would
    +    " mishighlight:
    +    "
    +    "     /**
    +    "     ```rust
    +    "     println!("{}", 1
    +    "     * 1);
    +    "     ```
    +    "     */
    +    "
    +    " … but I don’t care. Balance of probability, and all that.
    +    syn match rustCommentBlockDocStar /^\s*\*\s\?/ contained
    +    syn match rustCommentLineDocLeader "^\s*//\%(//\@!\|!\)" contained
    +endif
    +
    +" Default highlighting {{{1
    +hi def link rustDecNumber       rustNumber
    +hi def link rustHexNumber       rustNumber
    +hi def link rustOctNumber       rustNumber
    +hi def link rustBinNumber       rustNumber
    +hi def link rustIdentifierPrime rustIdentifier
    +hi def link rustTrait           rustType
    +hi def link rustDeriveTrait     rustTrait
    +
    +hi def link rustMacroRepeatDelimiters   Macro
    +hi def link rustMacroVariable Define
    +hi def link rustSigil         StorageClass
    +hi def link rustEscape        Special
    +hi def link rustEscapeUnicode rustEscape
    +hi def link rustEscapeError   Error
    +hi def link rustStringContinuation Special
    +hi def link rustString        String
    +hi def link rustStringDelimiter String
    +hi def link rustCharacterInvalid Error
    +hi def link rustCharacterInvalidUnicode rustCharacterInvalid
    +hi def link rustCharacter     Character
    +hi def link rustNumber        Number
    +hi def link rustBoolean       Boolean
    +hi def link rustEnum          rustType
    +hi def link rustEnumVariant   rustConstant
    +hi def link rustConstant      Constant
    +hi def link rustSelf          Constant
    +hi def link rustFloat         Float
    +hi def link rustArrowCharacter rustOperator
    +hi def link rustOperator      Operator
    +hi def link rustKeyword       Keyword
    +hi def link rustDynKeyword    rustKeyword
    +hi def link rustTypedef       Keyword " More precise is Typedef, but it doesn't feel right for Rust
    +hi def link rustStructure     Keyword " More precise is Structure
    +hi def link rustUnion         rustStructure
    +hi def link rustExistential   rustKeyword
    +hi def link rustPubScopeDelim Delimiter
    +hi def link rustPubScopeCrate rustKeyword
    +hi def link rustSuper         rustKeyword
    +hi def link rustUnsafeKeyword Exception
    +hi def link rustReservedKeyword Error
    +hi def link rustRepeat        Conditional
    +hi def link rustConditional   Conditional
    +hi def link rustIdentifier    Identifier
    +hi def link rustCapsIdent     rustIdentifier
    +hi def link rustModPath       Include
    +hi def link rustModPathSep    Delimiter
    +hi def link rustFunction      Function
    +hi def link rustFuncName      Function
    +hi def link rustFuncCall      Function
    +hi def link rustShebang       Comment
    +hi def link rustCommentLine   Comment
    +hi def link rustCommentLineDoc SpecialComment
    +hi def link rustCommentLineDocLeader rustCommentLineDoc
    +hi def link rustCommentLineDocError Error
    +hi def link rustCommentBlock  rustCommentLine
    +hi def link rustCommentBlockDoc rustCommentLineDoc
    +hi def link rustCommentBlockDocStar rustCommentBlockDoc
    +hi def link rustCommentBlockDocError Error
    +hi def link rustCommentDocCodeFence rustCommentLineDoc
    +hi def link rustAssert        PreCondit
    +hi def link rustPanic         PreCondit
    +hi def link rustMacro         Macro
    +hi def link rustType          Type
    +hi def link rustTodo          Todo
    +hi def link rustAttribute     PreProc
    +hi def link rustDerive        PreProc
    +hi def link rustDefault       StorageClass
    +hi def link rustStorage       StorageClass
    +hi def link rustObsoleteStorage Error
    +hi def link rustLifetime      Special
    +hi def link rustLabel         Label
    +hi def link rustExternCrate   rustKeyword
    +hi def link rustObsoleteExternMod Error
    +hi def link rustQuestionMark  Special
    +hi def link rustAsync         rustKeyword
    +hi def link rustAwait         rustKeyword
    +hi def link rustAsmDirSpec    rustKeyword
    +hi def link rustAsmSym        rustKeyword
    +hi def link rustAsmOptions    rustKeyword
    +hi def link rustAsmOptionsKey rustAttribute
    +
    +" Other Suggestions:
    +" hi rustAttribute ctermfg=cyan
    +" hi rustDerive ctermfg=cyan
    +" hi rustAssert ctermfg=yellow
    +" hi rustPanic ctermfg=red
    +" hi rustMacro ctermfg=magenta
    +
    +syn sync minlines=200
    +syn sync maxlines=500
    +
    +let b:current_syntax = "rust"
    +
    +" vim: set et sw=4 sts=4 ts=8:
    diff --git a/.config/vim/syntax/salt.vim b/.config/vim/syntax/salt.vim
    new file mode 100644
    index 0000000..fdbce2f
    --- /dev/null
    +++ b/.config/vim/syntax/salt.vim
    @@ -0,0 +1,16 @@
    +" Vim syntax file
    +" Maintainer: Gregory Anders
    +" Last Changed: 2024-09-16
    +
    +if exists('b:current_syntax')
    +  finish
    +endif
    +
    +" Salt state files are just YAML with embedded Jinja
    +runtime! syntax/yaml.vim
    +unlet! b:current_syntax
    +
    +runtime! syntax/jinja.vim
    +unlet! b:current_syntax
    +
    +let b:current_syntax = 'salt'
    diff --git a/.config/vim/syntax/samba.vim b/.config/vim/syntax/samba.vim
    new file mode 100644
    index 0000000..e096436
    --- /dev/null
    +++ b/.config/vim/syntax/samba.vim
    @@ -0,0 +1,118 @@
    +" Vim syntax file
    +" Language:	samba configuration files (smb.conf)
    +" Maintainer:	Rafael Garcia-Suarez 
    +" URL:		http://rgarciasuarez.free.fr/vim/syntax/samba.vim
    +" Last change:	2009 Aug 06
    +"
    +"               New maintainer wanted!
    +"
    +" Don't forget to run your config file through testparm(1)!
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn case ignore
    +
    +syn match sambaParameter /^[a-zA-Z \t]\+=/ contains=sambaKeyword
    +syn match sambaSection /^\s*\[[a-zA-Z0-9_\-.$ ]\+\]/
    +syn match sambaMacro /%[SPugUGHvhmLMNpRdaITD]/
    +syn match sambaMacro /%$([a-zA-Z0-9_]\+)/
    +syn match sambaComment /^\s*[;#].*/
    +syn match sambaContinue /\\$/
    +syn keyword sambaBoolean true false yes no
    +
    +" Keywords for Samba 2.0.5a
    +syn keyword sambaKeyword contained account acl action add address admin aliases
    +syn keyword sambaKeyword contained allow alternate always announce anonymous
    +syn keyword sambaKeyword contained archive as auto available bind blocking
    +syn keyword sambaKeyword contained bmpx break browsable browse browseable ca
    +syn keyword sambaKeyword contained cache case casesignames cert certDir
    +syn keyword sambaKeyword contained certFile change char character chars chat
    +syn keyword sambaKeyword contained ciphers client clientcert code coding
    +syn keyword sambaKeyword contained command comment compatibility config
    +syn keyword sambaKeyword contained connections contention controller copy
    +syn keyword sambaKeyword contained create deadtime debug debuglevel default
    +syn keyword sambaKeyword contained delete deny descend dfree dir directory
    +syn keyword sambaKeyword contained disk dns domain domains dont dos dot drive
    +syn keyword sambaKeyword contained driver encrypt encrypted equiv exec fake
    +syn keyword sambaKeyword contained file files filetime filetimes filter follow
    +syn keyword sambaKeyword contained force fstype getwd group groups guest
    +syn keyword sambaKeyword contained hidden hide home homedir hosts include
    +syn keyword sambaKeyword contained interfaces interval invalid keepalive
    +syn keyword sambaKeyword contained kernel key ldap length level level2 limit
    +syn keyword sambaKeyword contained links list lm load local location lock
    +syn keyword sambaKeyword contained locking locks log logon logons logs lppause
    +syn keyword sambaKeyword contained lpq lpresume lprm machine magic mangle
    +syn keyword sambaKeyword contained mangled mangling map mask master max mem
    +syn keyword sambaKeyword contained message min mode modes mux name names
    +syn keyword sambaKeyword contained netbios nis notify nt null offset ok ole
    +syn keyword sambaKeyword contained only open oplock oplocks options order os
    +syn keyword sambaKeyword contained output packet page panic passwd password
    +syn keyword sambaKeyword contained passwords path permissions pipe port ports
    +syn keyword sambaKeyword contained postexec postscript prediction preexec
    +syn keyword sambaKeyword contained prefered preferred preload preserve print
    +syn keyword sambaKeyword contained printable printcap printer printers
    +syn keyword sambaKeyword contained printing program protocol proxy public
    +syn keyword sambaKeyword contained queuepause queueresume raw read readonly
    +syn keyword sambaKeyword contained realname remote require resign resolution
    +syn keyword sambaKeyword contained resolve restrict revalidate rhosts root
    +syn keyword sambaKeyword contained script security sensitive server servercert
    +syn keyword sambaKeyword contained service services set share shared short
    +syn keyword sambaKeyword contained size smb smbrun socket space ssl stack stat
    +syn keyword sambaKeyword contained status strict string strip suffix support
    +syn keyword sambaKeyword contained symlinks sync syslog system time timeout
    +syn keyword sambaKeyword contained times timestamp to trusted ttl unix update
    +syn keyword sambaKeyword contained use user username users valid version veto
    +syn keyword sambaKeyword contained volume wait wide wins workgroup writable
    +syn keyword sambaKeyword contained write writeable xmit
    +
    +" New keywords for Samba 2.0.6
    +syn keyword sambaKeyword contained hook hires pid uid close rootpreexec
    +
    +" New keywords for Samba 2.0.7
    +syn keyword sambaKeyword contained utmp wtmp hostname consolidate
    +syn keyword sambaKeyword contained inherit source environment
    +
    +" New keywords for Samba 2.2.0
    +syn keyword sambaKeyword contained addprinter auth browsing deleteprinter
    +syn keyword sambaKeyword contained enhanced enumports filemode gid host jobs
    +syn keyword sambaKeyword contained lanman msdfs object os2 posix processes
    +syn keyword sambaKeyword contained scope separator shell show smbd template
    +syn keyword sambaKeyword contained total vfs winbind wizard
    +
    +" New keywords for Samba 2.2.1
    +syn keyword sambaKeyword contained large obey pam readwrite restrictions
    +syn keyword sambaKeyword contained unreadable
    +
    +" New keywords for Samba 2.2.2 - 2.2.4
    +syn keyword sambaKeyword contained acls allocate bytes count csc devmode
    +syn keyword sambaKeyword contained disable dn egd entropy enum extensions mmap
    +syn keyword sambaKeyword contained policy spin spoolss
    +
    +" Since Samba 3.0.2
    +syn keyword sambaKeyword contained abort afs algorithmic backend
    +syn keyword sambaKeyword contained charset cups defer display
    +syn keyword sambaKeyword contained enable idmap kerberos lookups
    +syn keyword sambaKeyword contained methods modules nested NIS ntlm NTLMv2
    +syn keyword sambaKeyword contained objects paranoid partners passdb
    +syn keyword sambaKeyword contained plaintext prefix primary private
    +syn keyword sambaKeyword contained profile quota realm replication
    +syn keyword sambaKeyword contained reported rid schannel sendfile sharing
    +syn keyword sambaKeyword contained shutdown signing special spnego
    +syn keyword sambaKeyword contained store unknown unwriteable
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +hi def link sambaParameter Normal
    +hi def link sambaKeyword   Type
    +hi def link sambaSection   Statement
    +hi def link sambaMacro     PreProc
    +hi def link sambaComment   Comment
    +hi def link sambaContinue  Operator
    +hi def link sambaBoolean   Constant
    +
    +let b:current_syntax = "samba"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/sas.vim b/.config/vim/syntax/sas.vim
    new file mode 100644
    index 0000000..fad6066
    --- /dev/null
    +++ b/.config/vim/syntax/sas.vim
    @@ -0,0 +1,265 @@
    +" Vim syntax file
    +" Language:     SAS
    +" Maintainer:   Zhen-Huan Hu 
    +" Original Maintainer: James Kidd 
    +" Version:      3.0.0
    +" Last Change:  Aug 26, 2017
    +"
    +" 2017 Mar 7
    +"
    +" Upgrade version number to 3.0. Improvements include:
    +" - Improve sync speed
    +" - Largely enhance precision
    +" - Update keywords in the latest SAS (as of Mar 2017)
    +" - Add syntaxes for date/time constants
    +" - Add syntax for data lines
    +" - Add (back) syntax for TODO in comments
    +"
    +" 2017 Feb 9
    +"
    +" Add syntax folding 
    +"
    +" 2016 Oct 10
    +"
    +" Add highlighting for functions
    +"
    +" 2016 Sep 14
    +"
    +" Change the implementation of syntaxing
    +" macro function names so that macro parameters same
    +" as SAS keywords won't be highlighted
    +" (Thank Joug Raw for the suggestion)
    +" Add section highlighting:
    +" - Use /** and **/ to define a section
    +" - It functions the same as a comment but
    +"   with different highlighting
    +"
    +" 2016 Jun 14
    +"
    +" Major changes so upgrade version number to 2.0
    +" Overhaul the entire script (again). Improvements include:
    +" - Higher precision
    +" - Faster synchronization
    +" - Separate color for control statements
    +" - Highlight hash and java objects
    +" - Highlight macro variables in double quoted strings
    +" - Update all syntaxes based on SAS 9.4
    +" - Add complete SAS/GRAPH and SAS/STAT procedure syntaxes
    +" - Add Proc TEMPLATE and GTL syntaxes
    +" - Add complete DS2 syntaxes
    +" - Add basic IML syntaxes
    +" - Many other improvements and bug fixes
    +" Drop support for VIM version < 600
    +
    +if version < 600
    +  syntax clear
    +elseif exists('b:current_syntax')
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn case ignore
    +
    +" Basic SAS syntaxes
    +syn keyword sasOperator and eq ge gt in le lt ne not of or
    +syn keyword sasReserved _all_ _automatic_ _char_ _character_ _data_ _infile_ _last_ _n_ _name_ _null_ _num_ _numeric_ _temporary_ _user_ _webout_
    +" Strings
    +syn region sasString start=+'+ skip=+''+ end=+'+ contains=@Spell
    +syn region sasString start=+"+ skip=+""+ end=+"+ contains=sasMacroVariable,@Spell
    +" Constants
    +syn match sasNumber /\v<\d+%(\.\d+)=%(>|e[\-+]=\d+>)/ display
    +syn match sasDateTime /\v(['"])\d{2}%(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\d{2}%(\d{2})=:\d{2}:\d{2}%(:\d{2})=%(am|pm)\1dt>/ display
    +syn match sasDateTime /\v(['"])\d{2}%(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\d{2}%(\d{2})=\1d>/ display
    +syn match sasDateTime /\v(['"])\d{2}:\d{2}%(:\d{2})=%(am|pm)\1t>/ display
    +" Comments
    +syn keyword sasTodo todo tbd fixme contained
    +syn region sasComment start='/\*' end='\*/' contains=sasTodo
    +syn region sasComment start='\v%(^|;)\s*\zs\%=\*' end=';'me=s-1 contains=sasTodo
    +syn region sasSectLbl matchgroup=sasSectLblEnds start='/\*\*\s*' end='\s*\*\*/' concealends
    +" Macros
    +syn match sasMacroVariable '\v\&+\w+%(\.\w+)=' display
    +syn match sasMacroReserved '\v\%%(abort|by|copy|display|do|else|end|global|goto|if|include|input|let|list|local|macro|mend|put|return|run|symdel|syscall|sysexec|syslput|sysrput|then|to|until|window|while)>' display
    +syn region sasMacroFunction matchgroup=sasMacroFunctionName start='\v\%\w+\ze\(' end=')'he=s-1 contains=@sasBasicSyntax,sasMacroFunction
    +syn region sasMacroFunction matchgroup=sasMacroFunctionName start='\v\%q=sysfunc\ze\(' end=')'he=s-1 contains=@sasBasicSyntax,sasMacroFunction,sasDataStepFunction
    +" Syntax cluster for basic SAS syntaxes
    +syn cluster sasBasicSyntax contains=sasOperator,sasReserved,sasNumber,sasDateTime,sasString,sasComment,sasMacroReserved,sasMacroFunction,sasMacroVariable,sasSectLbl
    +
    +" Formats
    +syn match sasFormat '\v\$\w+\.' display contained
    +syn match sasFormat '\v<\w+\.%(\d+>)=' display contained
    +syn region sasFormatContext start='.' end=';'me=s-1 contained contains=@sasBasicSyntax,sasFormat
    +
    +" Define global statements that can be accessed out of data step or procedures
    +syn keyword sasGlobalStatementKeyword catname dm endsas filename footnote footnote1 footnote2 footnote3 footnote4 footnote5 footnote6 footnote7 footnote8 footnote9 footnote10 missing libname lock ods options page quit resetline run sasfile skip sysecho title title1 title2 title3 title4 title5 title6 title7 title8 title9 title10 contained
    +syn keyword sasGlobalStatementODSKeyword chtml csvall docbook document escapechar epub epub2 epub3 exclude excel graphics html html3 html5 htmlcss imode listing markup output package path pcl pdf preferences phtml powerpoint printer proclabel proctitle ps results rtf select show tagsets trace usegopt verify wml contained
    +syn match sasGlobalStatement '\v%(^|;)\s*\zs\h\w*>' display transparent contains=sasGlobalStatementKeyword
    +syn match sasGlobalStatement '\v%(^|;)\s*\zsods>' display transparent contains=sasGlobalStatementKeyword nextgroup=sasGlobalStatementODSKeyword skipwhite skipnl skipempty
    +
    +" Data step statements, 9.4
    +syn keyword sasDataStepFunctionName abs addr addrlong airy allcomb allperm anyalnum anyalpha anycntrl anydigit anyfirst anygraph anylower anyname anyprint anypunct anyspace anyupper anyxdigit arcos arcosh arsin arsinh artanh atan atan2 attrc attrn band beta betainv blackclprc blackptprc blkshclprc blkshptprc blshift bnot bor brshift bxor byte cat catq cats catt catx cdf ceil ceilz cexist char choosec choosen cinv close cmiss cnonct coalesce coalescec collate comb compare compbl compfuzz compged complev compound compress constant convx convxp cos cosh cot count countc countw csc css cumipmt cumprinc curobs cv daccdb daccdbsl daccsl daccsyd dacctab dairy datdif date datejul datepart datetime day dclose dcreate depdb depdbsl depsl depsyd deptab dequote deviance dhms dif digamma dim dinfo divide dnum dopen doptname doptnum dosubl dread dropnote dsname dsncatlgd dur durp effrate envlen erf erfc euclid exist exp fact fappend fclose fcol fcopy fdelete fetch fetchobs fexist fget fileexist filename fileref finance find findc findw finfo finv fipname fipnamel fipstate first floor floorz fmtinfo fnonct fnote fopen foptname foptnum fpoint fpos fput fread frewind frlen fsep fuzz fwrite gaminv gamma garkhclprc garkhptprc gcd geodist geomean geomeanz getoption getvarc getvarn graycode harmean harmeanz hbound hms holiday holidayck holidaycount holidayname holidaynx holidayny holidaytest hour htmldecode htmlencode ibessel ifc ifn index indexc indexw input inputc inputn int intcindex intck intcycle intfit intfmt intget intindex intnx intrr intseas intshift inttest intz iorcmsg ipmt iqr irr jbessel juldate juldate7 kurtosis lag largest lbound lcm lcomb left length lengthc lengthm lengthn lexcomb lexcombi lexperk lexperm lfact lgamma libname libref log log1px log10 log2 logbeta logcdf logistic logpdf logsdf lowcase lperm lpnorm mad margrclprc margrptprc max md5 mdy mean median min minute missing mod modexist module modulec modulen modz month mopen mort msplint mvalid contained
    +syn keyword sasDataStepFunctionName n netpv nliteral nmiss nomrate normal notalnum notalpha notcntrl notdigit note notfirst notgraph notlower notname notprint notpunct notspace notupper notxdigit npv nvalid nwkdom open ordinal pathname pctl pdf peek peekc peekclong peeklong perm pmt point poisson ppmt probbeta probbnml probbnrm probchi probf probgam probhypr probit probmc probnegb probnorm probt propcase prxchange prxmatch prxparen prxparse prxposn ptrlongadd put putc putn pvp qtr quantile quote ranbin rancau rand ranexp rangam range rank rannor ranpoi rantbl rantri ranuni rename repeat resolve reverse rewind right rms round rounde roundz saving savings scan sdf sec second sha256 sha256hex sha256hmachex sign sin sinh skewness sleep smallest soapweb soapwebmeta soapwipservice soapwipsrs soapws soapwsmeta soundex spedis sqrt squantile std stderr stfips stname stnamel strip subpad substr substrn sum sumabs symexist symget symglobl symlocal sysexist sysget sysmsg sysparm sysprocessid sysprocessname sysprod sysrc system tan tanh time timepart timevalue tinv tnonct today translate transtrn tranwrd trigamma trim trimn trunc tso typeof tzoneid tzonename tzoneoff tzones2u tzoneu2s uniform upcase urldecode urlencode uss uuidgen var varfmt varinfmt varlabel varlen varname varnum varray varrayx vartype verify vformat vformatd vformatdx vformatn vformatnx vformatw vformatwx vformatx vinarray vinarrayx vinformat vinformatd vinformatdx vinformatn vinformatnx vinformatw vinformatwx vinformatx vlabel vlabelx vlength vlengthx vname vnamex vtype vtypex vvalue vvaluex week weekday whichc whichn wto year yieldp yrdif yyq zipcity zipcitydistance zipfips zipname zipnamel zipstate contained
    +syn keyword sasDataStepCallRoutineName allcomb allcombi allperm cats catt catx compcost execute graycode is8601_convert label lexcomb lexcombi lexperk lexperm logistic missing module poke pokelong prxchange prxdebug prxfree prxnext prxposn prxsubstr ranbin rancau rancomb ranexp rangam rannor ranperk ranperm ranpoi rantbl rantri ranuni scan set sleep softmax sortc sortn stdize streaminit symput symputx system tanh tso vname vnext wto contained
    +syn region sasDataStepFunctionContext start='(' end=')' contained contains=@sasBasicSyntax,sasDataStepFunction
    +syn region sasDataStepFunctionFormatContext start='(' end=')' contained contains=@sasBasicSyntax,sasDataStepFunction,sasFormat
    +syn match sasDataStepFunction '\v<\w+\ze\(' contained contains=sasDataStepFunctionName,sasDataStepCallRoutineName nextgroup=sasDataStepFunctionContext
    +syn match sasDataStepFunction '\v%(input|put)\ze\(' contained contains=sasDataStepFunctionName nextgroup=sasDataStepFunctionFormatContext
    +syn keyword sasDataStepHashMethodName add check clear definedata definedone definekey delete do_over equals find find_next find_prev first has_next has_prev last next output prev ref remove removedup replace replacedup reset_dup setcur sum sumdup contained
    +syn region sasDataStepHashMethodContext start='(' end=')' contained contains=@sasBasicSyntax,sasDataStepFunction
    +syn match sasDataStepHashMethod '\v\.\w+\ze\(' contained contains=sasDataStepHashMethodName nextgroup=sasDataStepHashMethodContext
    +syn keyword sasDataStepHashAttributeName item_size num_items contained
    +syn match sasDataStepHashAttribute '\v\.\w+>\ze\_[^(]' display contained contains=sasDataStepHashAttributeName
    +syn keyword sasDataStepControl continue do end go goto if leave link otherwise over return select to until when while contained
    +syn keyword sasDataStepControl else then contained nextgroup=sasDataStepStatementKeyword skipwhite skipnl skipempty
    +syn keyword sasDataStepHashOperator _new_ contained
    +syn keyword sasDataStepStatementKeyword abort array attrib by call cards cards4 datalines datalines4 dcl declare delete describe display drop error execute file format infile informat input keep label length lines lines4 list lostcard merge modify output put putlog redirect remove rename replace retain set stop update where window contained
    +syn keyword sasDataStepStatementHashKeyword hash hiter javaobj contained
    +syn match sasDataStepStatement '\v%(^|;)\s*\zs\h\w*>' display contained contains=sasDataStepStatementKeyword,sasGlobalStatementKeyword
    +syn match sasDataStepStatement '\v%(^|;)\s*\zs%(dcl|declare)>' display contained contains=sasDataStepStatementKeyword nextgroup=sasDataStepStatementHashKeyword skipwhite skipnl skipempty
    +syn match sasDataStepStatement '\v%(^|;)\s*\zsods>' display contained contains=sasGlobalStatementKeyword nextgroup=sasGlobalStatementODSKeyword skipwhite skipnl skipempty
    +syn match sasDataStepStatement '\v%(^|;)\s*\zs%(format|informat|input|put)>' display contained contains=sasDataStepStatementKeyword nextgroup=sasFormatContext skipwhite skipnl skipempty
    +syn match sasDataStepStatement '\v%(^|;)\s*\zs%(cards|datalines|lines)4=\s*;' display contained contains=sasDataStepStatementKeyword nextgroup=sasDataLine skipwhite skipnl skipempty
    +syn region sasDataLine start='^' end='^\s*;'me=s-1 contained
    +syn region sasDataStep matchgroup=sasSectionKeyword start='\v%(^|;)\s*\zsdata>' end='\v%(^|;)\s*%(run|data|proc|endsas)>'me=s-1 fold contains=@sasBasicSyntax,@sasDataStepSyntax
    +syn cluster sasDataStepSyntax contains=sasDataStepFunction,sasDataStepHashOperator,sasDataStepHashAttribute,sasDataStepHashMethod,sasDataStepControl,sasDataStepStatement
    +
    +" Procedures, base SAS, 9.4
    +syn keyword sasProcStatementKeyword abort age append array attrib audit block break by calid cdfplot change checkbox class classlev column compute contents copy create datarow dbencoding define delete deletefunc deletesubr delimiter device dialog dur endcomp exact exchange exclude explore fin fmtlib fontfile fontpath format formats freq function getnames guessingrows hbar hdfs histogram holidur holifin holistart holivar id idlabel informat inset invalue item key keylabel keyword label line link listfunc listsubr mapmiss mapreduce mean menu messages meta modify opentype outargs outdur outfin output outstart pageby partial picture pie pig plot ppplot printer probplot profile prompter qqplot radiobox ranks rbreak rbutton rebuild record remove rename repair report roptions save select selection separator source star start statistics struct submenu subroutine sum sumby table tables test text trantab truetype type1 types value var vbar ways weight where with write contained
    +syn match sasProcStatement '\v%(^|;)\s*\zs\h\w*>' display contained contains=sasProcStatementKeyword,sasGlobalStatementKeyword
    +syn match sasProcStatement '\v%(^|;)\s*\zsods>' display contained contains=sasGlobalStatementKeyword nextgroup=sasGlobalStatementODSKeyword skipwhite skipnl skipempty
    +syn match sasProcStatement '\v%(^|;)\s*\zs%(format|informat)>' display contained contains=sasProcStatementKeyword nextgroup=sasFormatContext skipwhite skipnl skipempty
    +syn region sasProc matchgroup=sasSectionKeyword start='\v%(^|;)\s*\zsproc%(\s+\h\w*)=>' end='\v%(^|;)\s*%(run|data|proc|endsas)>'me=s-1 fold contains=@sasBasicSyntax,sasDataStepFunction,sasProcStatement
    +syn region sasProc matchgroup=sasSectionKeyword start='\v%(^|;)\s*\zsproc\s+%(catalog|chart|datasets|document|plot)>' end='\v%(^|;)\s*%(quit|data|proc|endsas)>'me=s-1 fold contains=@sasBasicSyntax,sasDataStepFunction,sasProcStatement
    +
    +" Procedures, SAS/GRAPH, 9.4
    +syn keyword sasGraphProcStatementKeyword add area axis bar block bubble2 byline cc ccopy cdef cdelete chart cmap choro copy delete device dial donut exclude flow format fs goptions gout grid group hbar hbar3d hbullet hslider htrafficlight id igout label legend list modify move nobyline note pattern pie pie3d plot plot2 preview prism quit rename replay select scatter speedometer star surface symbol tc tcopy tdef tdelete template tile toggle treplay vbar vbar3d vtrafficlight vbullet vslider where contained
    +syn match sasGraphProcStatement '\v%(^|;)\s*\zs\h\w*>' display contained contains=sasGraphProcStatementKeyword,sasGlobalStatementKeyword
    +syn match sasGraphProcStatement '\v%(^|;)\s*\zsformat>' display contained contains=sasGraphProcStatementKeyword nextgroup=sasFormatContext skipwhite skipnl skipempty
    +syn region sasGraphProc matchgroup=sasSectionKeyword start='\v%(^|;)\s*\zsproc\s+%(g3d|g3grid|ganno|gcontour|gdevice|geocode|gfont|ginside|goptions|gproject|greduce|gremove|mapimport)>' end='\v%(^|;)\s*%(run|data|proc|endsas)>'me=s-1 fold contains=@sasBasicSyntax,sasDataStepFunction,sasGraphProcStatement
    +syn region sasGraphProc matchgroup=sasSectionKeyword start='\v%(^|;)\s*\zsproc\s+%(gareabar|gbarline|gchart|gkpi|gmap|gplot|gradar|greplay|gslide|gtile)>' end='\v%(^|;)\s*%(quit|data|proc|endsas)>'me=s-1 fold contains=@sasBasicSyntax,sasDataStepFunction,sasGraphProcStatement
    +
    +" Procedures, SAS/STAT, 14.1
    +syn keyword sasAnalyticalProcStatementKeyword absorb add array assess baseline bayes beginnodata bivar bootstrap bounds by cdfplot cells class cluster code compute condition contrast control coordinates copy cosan cov covtest coxreg der design determ deviance direct directions domain effect effectplot effpart em endnodata equality estimate exact exactoptions factor factors fcs filter fitindex format freq fwdlink gender grid group grow hazardratio height hyperprior id impjoint inset insetgroup invar invlink ippplot lincon lineqs lismod lmtests location logistic loglin lpredplot lsmeans lsmestimate manova matings matrix mcmc mean means missmodel mnar model modelaverage modeleffects monotone mstruct mtest multreg name nlincon nloptions oddsratio onecorr onesamplefreq onesamplemeans onewayanova outfiles output paired pairedfreq pairedmeans parameters parent parms partial partition path pathdiagram pcov performance plot population poststrata power preddist predict predpplot priors process probmodel profile prune pvar ram random ratio reference refit refmodel renameparm repeated replicate repweights response restore restrict retain reweight ridge rmsstd roc roccontrast rules samplesize samplingunit seed size scale score selection show simtests simulate slice std stderr store strata structeq supplementary table tables test testclass testfreq testfunc testid time transform treatments trend twosamplefreq twosamplemeans towsamplesurvival twosamplewilcoxon uds units univar var variance varnames weight where with zeromodel contained
    +syn match sasAnalyticalProcStatement '\v%(^|;)\s*\zs\h\w*>' display contained contains=sasAnalyticalProcStatementKeyword,sasGlobalStatementKeyword
    +syn match sasAnalyticalProcStatement '\v%(^|;)\s*\zsods>' display contained contains=sasGlobalStatementKeyword nextgroup=sasGlobalStatementODSKeyword skipwhite skipnl skipempty
    +syn match sasAnalyticalProcStatement '\v%(^|;)\s*\zsformat>' display contained contains=sasAnalyticalProcStatementKeyword nextgroup=sasFormatContext skipwhite skipnl skipempty
    +syn region sasAnalyticalProc matchgroup=sasSectionKeyword start='\v%(^|;)\s*\zsproc\s+%(aceclus|adaptivereg|bchoice|boxplot|calis|cancorr|candisc|cluster|corresp|discrim|distance|factor|fastclus|fmm|freq|gam|gampl|gee|genmod|glimmix|glmmod|glmpower|glmselect|hpcandisc|hpfmm|hpgenselect|hplmixed|hplogistic|hpmixed|hpnlmod|hppls|hpprincomp|hpquantselect|hpreg|hpsplit|iclifetest|icphreg|inbreed|irt|kde|krige2d|lattice|lifereg|lifetest|loess|logistic|mcmc|mds|mi|mianalyze|mixed|modeclus|multtest|nested|nlin|nlmixed|npar1way|orthoreg|phreg|plm|pls|power|princomp|prinqual|probit|quantlife|quantreg|quantselect|robustreg|rsreg|score|seqdesign|seqtest|sim2d|simnormal|spp|stdize|stdrate|stepdisc|surveyfreq|surveyimpute|surveylogistic|surveymeans|surveyphreg|surveyreg|surveyselect|tpspline|transreg|tree|ttest|varclus|varcomp|variogram)>' end='\v%(^|;)\s*%(run|data|proc|endsas)>'me=s-1 fold contains=@sasBasicSyntax,sasDataStepControl,sasDataStepFunction,sasAnalyticalProcStatement
    +syn region sasAnalyticalProc matchgroup=sasSectionKeyword start='\v%(^|;)\s*\zsproc\s+%(anova|arima|catmod|factex|glm|model|optex|plan|reg)>' end='\v%(^|;)\s*%(quit|data|proc|endsas)>'me=s-1 fold contains=@sasBasicSyntax,sasDataStepControl,sasDataStepFunction,sasAnalyticalProcStatement
    +
    +" Procedures, ODS graphics, 9.4
    +syn keyword sasODSGraphicsProcStatementKeyword band block bubble by colaxis compare dattrvar density dot dropline dynamic ellipse ellipseparm format fringe gradlegend hbar hbarbasic hbarparm hbox heatmap heatmapparm highlow histogram hline inset keylegend label lineparm loess matrix needle parent panelby pbspline plot polygon refline reg rowaxis scatter series spline step style styleattrs symbolchar symbolimage text vbar vbarbasic vbarparm vbox vector vline waterfall where xaxis x2axis yaxis y2axis yaxistable contained
    +syn match sasODSGraphicsProcStatement '\v%(^|;)\s*\zs\h\w*>' display contained contains=sasODSGraphicsProcStatementKeyword,sasGlobalStatementKeyword
    +syn match sasODSGraphicsProcStatement '\v%(^|;)\s*\zsods>' display contained contains=sasGlobalStatementKeyword nextgroup=sasGlobalStatementODSKeyword skipwhite skipnl skipempty
    +syn match sasODSGraphicsProcStatement '\v%(^|;)\s*\zsformat>' display contained contains=sasODSGraphicsProcStatementKeyword nextgroup=sasFormatContext skipwhite skipnl skipempty
    +syn region sasODSGraphicsProc matchgroup=sasSectionKeyword start='\v%(^|;)\s*\zsproc\s+%(sgdesign|sgpanel|sgplot|sgrender|sgscatter)>' end='\v%(^|;)\s*%(run|data|proc|endsas)>'me=s-1 fold contains=@sasBasicSyntax,sasDataStepFunction,sasODSGraphicsProcStatement
    +
    +" Proc TEMPLATE, 9.4
    +syn keyword sasProcTemplateClause as into
    +syn keyword sasProcTemplateStatementKeyword block break cellstyle class close column compute continue define delete delstream do done dynamic edit else end eval flush footer header import iterate link list mvar ndent next nmvar notes open path put putl putlog putq putstream putvars replace set source stop style test text text2 text3 translate trigger unblock unset xdent contained
    +syn keyword sasProcTemplateStatementComplexKeyword cellvalue column crosstabs event footer header statgraph style table tagset contained
    +syn keyword sasProcTemplateGTLStatementKeyword axislegend axistable bandplot barchart barchartparm begingraph beginpolygon beginpolyline bihistogram3dparm blockplot boxplot boxplotparm bubbleplot continuouslegend contourplotparm dendrogram discretelegend drawarrow drawimage drawline drawoval drawrectangle drawtext dropline ellipse ellipseparm endgraph endinnermargin endlayout endpolygon endpolyline endsidebar entry entryfootnote entrytitle fringeplot heatmap heatmapparm highlowplot histogram histogramparm innermargin layout legenditem legendtextitems linechart lineparm loessplot mergedlegend modelband needleplot pbsplineplot polygonplot referenceline regressionplot scatterplot seriesplot sidebar stepplot surfaceplotparm symbolchar symbolimage textplot vectorplot waterfallchart contained
    +syn keyword sasProcTemplateGTLComplexKeyword datalattice datapanel globallegend gridded lattice overlay overlayequated overlay3d region contained
    +syn match sasProcTemplateStatement '\v%(^|;)\s*\zs\h\w*>' display contained contains=sasProcTemplateStatementKeyword,sasProcTemplateGTLStatementKeyword,sasGlobalStatementKeyword
    +syn match sasProcTemplateStatement '\v%(^|;)\s*\zsdefine>' display contained contains=sasProcTemplateStatementKeyword nextgroup=sasProcTemplateStatementComplexKeyword skipwhite skipnl skipempty
    +syn match sasProcTemplateStatement '\v%(^|;)\s*\zslayout>' display contained contains=sasProcTemplateGTLStatementKeyword nextgroup=sasProcTemplateGTLComplexKeyword skipwhite skipnl skipempty
    +syn match sasProcTemplateStatement '\v%(^|;)\s*\zsods>' display contained contains=sasGlobalStatementKeyword nextgroup=sasGlobalStatementODSKeyword skipwhite skipnl skipempty
    +syn region sasProcTemplate matchgroup=sasSectionKeyword start='\v%(^|;)\s*\zsproc\s+template>' end='\v%(^|;)\s*%(run|data|proc|endsas)>'me=s-1 fold contains=@sasBasicSyntax,sasProcTemplateClause,sasProcTemplateStatement
    +
    +" Proc SQL, 9.4
    +syn keyword sasProcSQLFunctionName avg count css cv freq max mean median min n nmiss prt range std stderr sum sumwgt t uss var contained
    +syn region sasProcSQLFunctionContext start='(' end=')' contained contains=@sasBasicSyntax,sasProcSQLFunction
    +syn match sasProcSQLFunction '\v<\w+\ze\(' contained contains=sasProcSQLFunctionName,sasDataStepFunctionName nextgroup=sasProcSQLFunctionContext
    +syn keyword sasProcSQLClause add asc between by calculated cascade case check connection constraint cross desc distinct drop else end escape except exists foreign from full group having in inner intersect into is join key left libname like modify natural newline notrim null on order outer primary references restrict right separated set then to trimmed union unique user using values when where contained
    +syn keyword sasProcSQLClause as contained nextgroup=sasProcSQLStatementKeyword skipwhite skipnl skipempty
    +syn keyword sasProcSQLStatementKeyword connect delete disconnect execute insert reset select update validate contained
    +syn keyword sasProcSQLStatementComplexKeyword alter create describe drop contained nextgroup=sasProcSQLStatementNextKeyword skipwhite skipnl skipempty
    +syn keyword sasProcSQLStatementNextKeyword index table view contained
    +syn match sasProcSQLStatement '\v%(^|;)\s*\zs\h\w*>' display contained contains=sasProcSQLStatementKeyword,sasGlobalStatementKeyword
    +syn match sasProcSQLStatement '\v%(^|;)\s*\zs%(alter|create|describe|drop)>' display contained contains=sasProcSQLStatementComplexKeyword nextgroup=sasProcSQLStatementNextKeyword skipwhite skipnl skipempty
    +syn match sasProcSQLStatement '\v%(^|;)\s*\zsvalidate>' display contained contains=sasProcSQLStatementKeyword nextgroup=sasProcSQLStatementKeyword,sasProcSQLStatementComplexKeyword skipwhite skipnl skipempty
    +syn match sasProcSQLStatement '\v%(^|;)\s*\zsods>' display contained contains=sasGlobalStatementKeyword nextgroup=sasGlobalStatementODSKeyword skipwhite skipnl skipempty 
    +syn region sasProcSQL matchgroup=sasSectionKeyword start='\v%(^|;)\s*\zsproc\s+sql>' end='\v%(^|;)\s*%(quit|data|proc|endsas)>'me=s-1 fold contains=@sasBasicSyntax,sasProcSQLFunction,sasProcSQLClause,sasProcSQLStatement
    +
    +" SAS/DS2, 9.4
    +syn keyword sasDS2FunctionName abs anyalnum anyalpha anycntrl anydigit anyfirst anygraph anylower anyname anyprint anypunct anyspace anyupper anyxdigit arcos arcosh arsin arsinh artanh atan atan2 band beta betainv blackclprc blackptprc blkshclprc blkshptprc blshift bnot bor brshift bxor byte cat cats catt catx ceil ceilz choosec choosen cmp cmpt coalesce coalescec comb compare compbl compfuzz compound compress constant convx convxp cos cosh count countc countw css cumipmt cumprinc cv datdif date datejul datepart datetime day dequote deviance dhms dif digamma dim divide dur durp effrate erf erfc exp fact find findc findw floor floorz fmtinfo fuzz gaminv gamma garkhclprc garkhptprc gcd geodist geomean geomeanz harmean harmeanz hbound hms holiday hour index indexc indexw inputc inputn int intcindex intck intcycle intdt intfit intget intindex intnest intnx intrr intseas intshift inttest intts intz ipmt iqr irr juldate juldate7 kcount kstrcat kstrip kupdate kupdates kurtosis lag largest lbound lcm left length lengthc lengthm lengthn lgamma log logbeta log10 log1px log2 lowcase mad margrclprc margrptprc max md5 mdy mean median min minute missing mod modz month mort n ndims netpv nmiss nomrate notalnum notalpha notcntrl notdigit notfirst notgraph notlower notname notprint notpunct notspace notupper notxdigit npv null nwkdom ordinal pctl perm pmt poisson power ppmt probbeta probbnml probbnrm probchi probdf probf probgam probhypr probit probmc probmed probnegb probnorm probt prxchange prxmatch prxparse prxposn put pvp qtr quote ranbin rancau rand ranexp rangam range rank rannor ranpoi rantbl rantri ranuni repeat reverse right rms round rounde roundz savings scan sec second sha256hex sha256hmachex sign sin sinh skewness sleep smallest sqlexec sqrt std stderr streaminit strip substr substrn sum sumabs tan tanh time timepart timevalue tinv to_date to_double to_time to_timestamp today translate transtrn tranwrd trigamma trim trimn trunc uniform upcase uss uuidgen var verify vformat vinarray vinformat vlabel vlength vname vtype week weekday whichc whichn year yieldp yrdif yyq contained
    +syn region sasDS2FunctionContext start='(' end=')' contained contains=@sasBasicSyntax,sasDS2Function
    +syn match sasDS2Function '\v<\w+\ze\(' contained contains=sasDS2FunctionName nextgroup=sasDS2FunctionContext
    +syn keyword sasDS2Control continue data dcl declare do drop else end enddata endpackage endthread from go goto if leave method otherwise package point return select then thread to until when while contained
    +syn keyword sasDS2StatementKeyword array by forward keep merge output put rename retain set stop vararray varlist contained
    +syn keyword sasDS2StatementComplexKeyword package thread contained
    +syn match sasDS2Statement '\v%(^|;)\s*\zs\h\w*>' display contained contains=sasDS2StatementKeyword,sasGlobalStatementKeyword
    +syn match sasDS2Statement '\v%(^|;)\s*\zs%(dcl|declare|drop)>' display contained contains=sasDS2StatementKeyword nextgroup=sasDS2StatementComplexKeyword skipwhite skipnl skipempty
    +syn match sasDS2Statement '\v%(^|;)\s*\zsods>' display contained contains=sasGlobalStatementKeyword nextgroup=sasGlobalStatementODSKeyword skipwhite skipnl skipempty
    +syn region sasDS2 matchgroup=sasSectionKeyword start='\v%(^|;)\s*\zsproc\s+ds2>' end='\v%(^|;)\s*%(quit|data|proc|endsas)>'me=s-1 fold contains=@sasBasicSyntax,sasDS2Function,sasDS2Control,sasDS2Statement
    +
    +" SAS/IML, 14.1
    +syn keyword sasIMLFunctionName abs all allcomb allperm any apply armasim bin blankstr block branks bspline btran byte char choose col colvec concat contents convexit corr corr2cov countmiss countn countunique cov cov2corr covlag cshape cusum cuprod cv cvexhull datasets design designf det diag dif dimension distance do duration echelon eigval eigvec element exp expmatrix expandgrid fft forward froot full gasetup geomean ginv hadamard half hankel harmean hdir hermite homogen i ifft insert int inv invupdt isempty isskipped j jroot kurtosis lag length loc log logabsdet mad magic mahalanobis max mean median min mod moduleic modulein name ncol ndx2sub nleng norm normal nrow num opscal orpol parentname palette polyroot prod product pv quartile rancomb randdirichlet randfun randmultinomial randmvt randnormal randwishart ranperk ranperm range rank ranktie rates ratio remove repeat root row rowcat rowcatc rowvec rsubstr sample setdif shape shapecol skewness solve sparse splinev spot sqrsym sqrt sqrvech ssq standard std storage sub2ndx substr sum sweep symsqr t toeplitz trace trisolv type uniform union unique uniqueby value var vecdiag vech xmult xsect yield contained
    +syn keyword sasIMLCallRoutineName appcort armacov armalik bar box change comport delete eigen execute exportdatasettor exportmatrixtor farmacov farmafit farmalik farmasim fdif gaend gagetmem gagetval gainit gareeval garegen gasetcro gasetmut gasetobj gasetsel gblkvp gblkvpd gclose gdelete gdraw gdrawl geneig ggrid ginclude gopen gpie gpiexy gpoint gpoly gport gportpop gportstk gscale gscript gset gshow gsorth gstart gstop gstrlen gtext gvtext gwindow gxaxis gyaxis heatmapcont heatmapdisc histogram importdatasetfromr importmatrixfromr ipf itsolver kalcvf kalcvs kaldff kaldfs lav lcp lms lp lpsolve lts lupdt marg maxqform mcd milpsolve modulei mve nlpcg nlpdd nlpfdd nlpfea nlphqn nlplm nlpnms nlpnra nlpnrr nlpqn nlpqua nlptr ode odsgraph ortvec pgraf push qntl qr quad queue randgen randseed rdodt rupdt rename rupdt rzlind scatter seq seqscale seqshift seqscale seqshift series solvelin sort sortndx sound spline splinec svd tabulate tpspline tpsplnev tsbaysea tsdecomp tsmlocar tsmlomar tsmulmar tspears tspred tsroot tstvcar tsunimar valset varmacov varmalik varmasim vnormal vtsroot wavft wavget wavift wavprint wavthrsh contained
    +syn region sasIMLFunctionContext start='(' end=')' contained contains=@sasBasicSyntax,sasIMLFunction
    +syn match sasIMLFunction '\v<\w+\ze\(' contained contains=sasIMLFunctionName,sasDataStepFunction nextgroup=sasIMLFunctionContext
    +syn keyword sasIMLControl abort by do else end finish goto if link pause quit resume return run start stop then to until while contained
    +syn keyword sasIMLStatementKeyword append call close closefile create delete display edit file find force free index infile input list load mattrib print purge read remove replace reset save setin setout show sort store summary use window contained
    +syn match sasIMLStatement '\v%(^|;)\s*\zs\h\w*>' display contained contains=sasIMLStatementKeyword,sasGlobalStatementKeyword
    +syn match sasIMLStatement '\v%(^|;)\s*\zsods>' display contained contains=sasGlobalStatementKeyword nextgroup=sasGlobalStatementODSKeyword skipwhite skipnl skipempty
    +syn region sasIML matchgroup=sasSectionKeyword start='\v%(^|;)\s*\zsproc\s+iml>' end='\v%(^|;)\s*%(quit|data|proc|endsas)>'me=s-1 fold contains=@sasBasicSyntax,sasIMLFunction,sasIMLControl,sasIMLStatement
    +
    +" Macro definition
    +syn region sasMacro start='\v\%macro>' end='\v\%mend>' fold keepend contains=@sasBasicSyntax,@sasDataStepSyntax,sasDataStep,sasProc,sasODSGraphicsProc,sasGraphProc,sasAnalyticalProc,sasProcTemplate,sasProcSQL,sasDS2,sasIML
    +
    +" Define default highlighting
    +hi def link sasComment Comment
    +hi def link sasTodo Delimiter
    +hi def link sasSectLbl Title
    +hi def link sasSectLblEnds Comment
    +hi def link sasNumber Number
    +hi def link sasDateTime Constant
    +hi def link sasString String
    +hi def link sasDataStepControl Keyword
    +hi def link sasProcTemplateClause Keyword
    +hi def link sasProcSQLClause Keyword
    +hi def link sasDS2Control Keyword
    +hi def link sasIMLControl Keyword
    +hi def link sasOperator Operator
    +hi def link sasGlobalStatementKeyword Statement
    +hi def link sasGlobalStatementODSKeyword Statement
    +hi def link sasSectionKeyword Statement
    +hi def link sasDataStepFunctionName Function
    +hi def link sasDataStepCallRoutineName Function
    +hi def link sasDataStepStatementKeyword Statement
    +hi def link sasDataStepStatementHashKeyword Statement
    +hi def link sasDataStepHashOperator Operator
    +hi def link sasDataStepHashMethodName Function
    +hi def link sasDataStepHashAttributeName Identifier
    +hi def link sasProcStatementKeyword Statement
    +hi def link sasODSGraphicsProcStatementKeyword Statement
    +hi def link sasGraphProcStatementKeyword Statement
    +hi def link sasAnalyticalProcStatementKeyword Statement
    +hi def link sasProcTemplateStatementKeyword Statement
    +hi def link sasProcTemplateStatementComplexKeyword Statement
    +hi def link sasProcTemplateGTLStatementKeyword Statement
    +hi def link sasProcTemplateGTLComplexKeyword Statement
    +hi def link sasProcSQLFunctionName Function
    +hi def link sasProcSQLStatementKeyword Statement
    +hi def link sasProcSQLStatementComplexKeyword Statement
    +hi def link sasProcSQLStatementNextKeyword Statement
    +hi def link sasDS2FunctionName Function
    +hi def link sasDS2StatementKeyword Statement
    +hi def link sasIMLFunctionName Function
    +hi def link sasIMLCallRoutineName Function
    +hi def link sasIMLStatementKeyword Statement
    +hi def link sasMacroReserved PreProc
    +hi def link sasMacroVariable Define
    +hi def link sasMacroFunctionName Define
    +hi def link sasDataLine SpecialChar
    +hi def link sasFormat SpecialChar
    +hi def link sasReserved Special
    +
    +" Syncronize from beginning to keep large blocks from losing
    +" syntax coloring while moving through code.
    +syn sync fromstart
    +
    +let b:current_syntax = "sas"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/sass.vim b/.config/vim/syntax/sass.vim
    new file mode 100644
    index 0000000..8f41aba
    --- /dev/null
    +++ b/.config/vim/syntax/sass.vim
    @@ -0,0 +1,106 @@
    +" Vim syntax file
    +" Language:	Sass
    +" Maintainer:	Tim Pope 
    +" Filenames:	*.sass
    +" Last Change:	2022 Mar 15
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +runtime! syntax/css.vim
    +
    +syn case ignore
    +
    +syn cluster sassCssProperties contains=cssFontProp,cssFontDescriptorProp,cssColorProp,cssTextProp,cssBoxProp,cssGeneratedContentProp,cssPagingProp,cssUIProp,cssRenderProp,cssAuralProp,cssTableProp
    +syn cluster sassCssAttributes contains=css.*Attr,sassEndOfLineComment,scssComment,cssValue.*,cssColor,cssURL,sassDefault,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssRenderProp
    +
    +syn region sassDefinition matchgroup=cssBraces start="{" end="}" contains=TOP
    +
    +syn match sassProperty "\%([{};]\s*\|^\)\@<=\%([[:alnum:]-]\|#{[^{}]*}\)\+\s*:" contains=css.*Prop skipwhite nextgroup=sassCssAttribute contained containedin=sassDefinition
    +syn match sassProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+\s*:\|:[[:alnum:]-]\+\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
    +syn match sassProperty "^\s*\zs\s\%(:\=[[:alnum:]-]\+\s*=\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
    +syn match sassCssAttribute +\%("\%([^"]\|\\"\)*"\|'\%([^']\|\\'\)*'\|#{[^{}]*}\|[^{};]\)*+ contained contains=@sassCssAttributes,sassVariable,sassFunction,sassInterpolation
    +syn match sassFlag "!\%(default\|global\|optional\)\>" contained
    +syn match sassVariable "$[[:alnum:]_-]\+"
    +syn match sassVariableAssignment "\%([!$][[:alnum:]_-]\+\s*\)\@<=\%(||\)\==" nextgroup=sassCssAttribute skipwhite
    +syn match sassVariableAssignment "\%([!$][[:alnum:]_-]\+\s*\)\@<=:" nextgroup=sassCssAttribute skipwhite
    +
    +syn match sassFunction "\<\%(rgb\|rgba\|red\|green\|blue\|mix\)\>(\@=" contained
    +syn match sassFunction "\<\%(hsl\|hsla\|hue\|saturation\|lightness\|adjust-hue\|lighten\|darken\|saturate\|desaturate\|grayscale\|complement\)\>(\@=" contained
    +syn match sassFunction "\<\%(alpha\|opacity\|rgba\|opacify\|fade-in\|transparentize\|fade-out\)\>(\@=" contained
    +syn match sassFunction "\<\%(unquote\|quote\)\>(\@=" contained
    +syn match sassFunction "\<\%(percentage\|round\|ceil\|floor\|abs\)\>(\@=" contained
    +syn match sassFunction "\<\%(type-of\|unit\|unitless\|comparable\)\>(\@=" contained
    +
    +syn region sassInterpolation matchgroup=sassInterpolationDelimiter start="#{" end="}" contains=@sassCssAttributes,sassVariable,sassFunction containedin=cssStringQ,cssStringQQ,cssPseudoClass,sassProperty
    +
    +syn match sassMixinName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute
    +syn match sassMixin  "^="               nextgroup=sassMixinName skipwhite
    +syn match sassMixin  "\%([{};]\s*\|^\s*\)\@<=@mixin"   nextgroup=sassMixinName skipwhite
    +syn match sassMixing "^\s\+\zs+"        nextgroup=sassMixinName
    +syn match sassMixing "\%([{};]\s*\|^\s*\)\@<=@include" nextgroup=sassMixinName skipwhite
    +syn match sassExtend "\%([{};]\s*\|^\s*\)\@<=@extend"
    +
    +syn match sassFunctionName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute
    +syn match sassFunctionDecl "\%([{};]\s*\|^\s*\)\@<=@function"   nextgroup=sassFunctionName skipwhite
    +syn match sassReturn "\%([{};]\s*\|^\s*\)\@<=@return"
    +
    +syn match sassEscape     "^\s*\zs\\"
    +syn match sassIdChar     "#[[:alnum:]_-]\@=" nextgroup=sassId
    +syn match sassId         "[[:alnum:]_-]\+" contained
    +syn match sassClassChar  "\.[[:alnum:]_-]\@=" nextgroup=sassClass
    +syn match sassPlaceholder "\%([{};]\s*\|^\s*\)\@<=%"   nextgroup=sassClass
    +syn match sassClass      "[[:alnum:]_-]\+" contained
    +syn match sassAmpersand  "&"
    +
    +" TODO: Attribute namespaces
    +" TODO: Arithmetic (including strings and concatenation)
    +
    +syn region sassMediaQuery matchgroup=sassMedia start="@media" end="[{};]\@=\|$" contains=sassMediaOperators
    +syn region sassKeyframe matchgroup=cssAtKeyword start=/@\(-[a-z]\+-\)\=keyframes\>/ end=";\|$" contains=cssVendor,cssComment nextgroup=cssDefinition
    +syn keyword sassMediaOperators and not only contained
    +syn region sassCharset start="@charset" end=";\|$" contains=scssComment,cssStringQ,cssStringQQ,cssURL,cssUnicodeEscape,cssMediaType
    +syn region sassInclude start="@import" end=";\|$" contains=scssComment,cssStringQ,cssStringQQ,cssURL,cssUnicodeEscape,cssMediaType
    +syn region sassDebugLine end=";\|$" matchgroup=sassDebug start="@debug\>" contains=@sassCssAttributes,sassVariable,sassFunction
    +syn region sassWarnLine end=";\|$" matchgroup=sassWarn start="@warn\>" contains=@sassCssAttributes,sassVariable,sassFunction
    +syn region sassControlLine matchgroup=sassControl start="@\%(if\|else\%(\s\+if\)\=\|while\|for\|each\)\>" end="[{};]\@=\|$" contains=sassFor,@sassCssAttributes,sassVariable,sassFunction
    +syn keyword sassFor from to through in contained
    +
    +syn keyword sassTodo        FIXME NOTE TODO OPTIMIZE XXX contained
    +syn region  sassComment     start="^\z(\s*\)//"  end="^\%(\z1 \)\@!" contains=sassTodo,@Spell
    +syn region  sassCssComment  start="^\z(\s*\)/\*" end="^\%(\z1 \)\@!" contains=sassTodo,@Spell
    +syn match   sassEndOfLineComment "//.*" contains=sassComment,sassTodo,@Spell
    +
    +hi def link sassEndOfLineComment        sassComment
    +hi def link sassCssComment              sassComment
    +hi def link sassComment                 Comment
    +hi def link sassFlag                    cssImportant
    +hi def link sassVariable                Identifier
    +hi def link sassFunction                Function
    +hi def link sassMixing                  PreProc
    +hi def link sassMixin                   PreProc
    +hi def link sassPlaceholder             sassClassChar
    +hi def link sassExtend                  PreProc
    +hi def link sassFunctionDecl            PreProc
    +hi def link sassReturn                  PreProc
    +hi def link sassTodo                    Todo
    +hi def link sassCharset                 PreProc
    +hi def link sassMedia                   PreProc
    +hi def link sassMediaOperators          PreProc
    +hi def link sassInclude                 Include
    +hi def link sassDebug                   sassControl
    +hi def link sassWarn                    sassControl
    +hi def link sassControl                 PreProc
    +hi def link sassFor                     PreProc
    +hi def link sassEscape                  Special
    +hi def link sassIdChar                  Special
    +hi def link sassClassChar               Special
    +hi def link sassInterpolationDelimiter  Delimiter
    +hi def link sassAmpersand               Character
    +hi def link sassId                      Identifier
    +hi def link sassClass                   Type
    +
    +let b:current_syntax = "sass"
    +
    +" vim:set sw=2:
    diff --git a/.config/vim/syntax/sather.vim b/.config/vim/syntax/sather.vim
    new file mode 100644
    index 0000000..de8bdad
    --- /dev/null
    +++ b/.config/vim/syntax/sather.vim
    @@ -0,0 +1,92 @@
    +" Vim syntax file
    +" Language:	Sather/pSather
    +" Maintainer:	Claudio Fleiner 
    +" URL:		http://www.fleiner.com/vim/syntax/sather.vim
    +" Last Change:	2003 May 11
    +
    +" Sather is a OO-language developped at the International Computer Science
    +" Institute (ICSI) in Berkeley, CA. pSather is a parallel extension to Sather.
    +" Homepage: http://www.icsi.berkeley.edu/~sather
    +" Sather files use .sa as suffix
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" keyword definitions
    +syn keyword satherExternal	 extern
    +syn keyword satherBranch	 break continue
    +syn keyword satherLabel		 when then
    +syn keyword satherConditional	 if else elsif end case typecase assert with
    +syn match satherConditional	 "near$"
    +syn match satherConditional	 "far$"
    +syn match satherConditional	 "near *[^(]"he=e-1
    +syn match satherConditional	 "far *[^(]"he=e-1
    +syn keyword satherSynchronize	 lock guard sync
    +syn keyword satherRepeat	 loop parloop do
    +syn match satherRepeat		 "while!"
    +syn match satherRepeat		 "break!"
    +syn match satherRepeat		 "until!"
    +syn keyword satherBoolValue	 true false
    +syn keyword satherValue		 self here cluster
    +syn keyword satherOperator	 new "== != & ^ | && ||
    +syn keyword satherOperator	 and or not
    +syn match satherOperator	 "[#!]"
    +syn match satherOperator	 ":-"
    +syn keyword satherType		 void attr where
    +syn match satherType	       "near *("he=e-1
    +syn match satherType	       "far *("he=e-1
    +syn keyword satherStatement	 return
    +syn keyword satherStorageClass	 static const
    +syn keyword satherExceptions	 try raise catch
    +syn keyword satherMethodDecl	 is pre post
    +syn keyword satherClassDecl	 abstract value class include
    +syn keyword satherScopeDecl	 public private readonly
    +
    +
    +syn match   satherSpecial	    contained "\\\d\d\d\|\\."
    +syn region  satherString	    start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=satherSpecial
    +syn match   satherCharacter	    "'[^\\]'"
    +syn match   satherSpecialCharacter  "'\\.'"
    +syn match   satherNumber	  "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
    +syn match   satherCommentSkip	  contained "^\s*\*\($\|\s\+\)"
    +syn region  satherComment2String  contained start=+"+  skip=+\\\\\|\\"+  end=+$\|"+  contains=satherSpecial
    +syn match   satherComment	  "--.*" contains=satherComment2String,satherCharacter,satherNumber
    +
    +
    +syn sync ccomment satherComment
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link satherBranch		satherStatement
    +hi def link satherLabel		satherStatement
    +hi def link satherConditional	satherStatement
    +hi def link satherSynchronize	satherStatement
    +hi def link satherRepeat		satherStatement
    +hi def link satherExceptions	satherStatement
    +hi def link satherStorageClass	satherDeclarative
    +hi def link satherMethodDecl	satherDeclarative
    +hi def link satherClassDecl	satherDeclarative
    +hi def link satherScopeDecl	satherDeclarative
    +hi def link satherBoolValue	satherValue
    +hi def link satherSpecial		satherValue
    +hi def link satherString		satherValue
    +hi def link satherCharacter	satherValue
    +hi def link satherSpecialCharacter satherValue
    +hi def link satherNumber		satherValue
    +hi def link satherStatement	Statement
    +hi def link satherOperator		Statement
    +hi def link satherComment		Comment
    +hi def link satherType		Type
    +hi def link satherValue		String
    +hi def link satherString		String
    +hi def link satherSpecial		String
    +hi def link satherCharacter	String
    +hi def link satherDeclarative	Type
    +hi def link satherExternal		PreCondit
    +
    +let b:current_syntax = "sather"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/sbt.vim b/.config/vim/syntax/sbt.vim
    new file mode 100644
    index 0000000..cbf73be
    --- /dev/null
    +++ b/.config/vim/syntax/sbt.vim
    @@ -0,0 +1,32 @@
    +" Vim syntax file
    +" Language:    sbt
    +" Maintainer:  Steven Dobay 
    +" Last Change: 2017.04.30
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +runtime! syntax/scala.vim
    +
    +syn region sbtString start="\"[^"]" skip="\\\"" end="\"" contains=sbtStringEscape
    +syn match sbtStringEscape "\\u[0-9a-fA-F]\{4}" contained
    +syn match sbtStringEscape "\\[nrfvb\\\"]" contained
    +
    +syn match sbtIdentitifer "^\S\+\ze\s*\(:=\|++=\|+=\|<<=\|<+=\)"
    +syn match sbtBeginningSeq "^[Ss]eq\>"
    +
    +syn match sbtSpecial "\(:=\|++=\|+=\|<<=\|<+=\)"
    +
    +syn match sbtLineComment "//.*"
    +syn region sbtComment start="/\*" end="\*/"
    +syn region sbtDocComment start="/\*\*" end="\*/" keepend
    +
    +hi link sbtString String
    +hi link sbtIdentitifer Keyword
    +hi link sbtBeginningSeq Keyword
    +hi link sbtSpecial Special
    +hi link sbtComment Comment
    +hi link sbtLineComment Comment
    +hi link sbtDocComment Comment
    +
    diff --git a/.config/vim/syntax/scala.vim b/.config/vim/syntax/scala.vim
    new file mode 100644
    index 0000000..cc098ce
    --- /dev/null
    +++ b/.config/vim/syntax/scala.vim
    @@ -0,0 +1,233 @@
    +" Vim syntax file
    +" Language:             Scala
    +" Maintainer:           Derek Wyatt
    +" URL:                  https://github.com/derekwyatt/vim-scala
    +" License:              Same as Vim
    +" Last Change:          23 January 2022
    +" ----------------------------------------------------------------------------
    +
    +if !exists('main_syntax')
    +  " quit when a syntax file was already loaded
    +  if exists("b:current_syntax")
    +    finish
    +  endif
    +  let main_syntax = 'scala'
    +endif
    +
    +scriptencoding utf-8
    +
    +let b:current_syntax = "scala"
    +
    +" Allows for embedding, see #59; main_syntax convention instead? Refactor TOP
    +"
    +" The @Spell here is a weird hack, it means *exclude* if the first group is
    +" TOP. Otherwise we get spelling errors highlighted on code elements that
    +" match scalaBlock, even with `syn spell notoplevel`.
    +function! s:ContainedGroup()
    +  try
    +    silent syn list @scala
    +    return '@scala,@NoSpell'
    +  catch /E392/
    +    return 'TOP,@Spell'
    +  endtry
    +endfunction
    +
    +unlet! b:current_syntax
    +
    +syn case match
    +syn sync minlines=200 maxlines=1000
    +
    +syn keyword scalaKeyword catch do else final finally for forSome if
    +syn keyword scalaKeyword match return throw try while yield macro
    +syn keyword scalaKeyword class trait object extends with nextgroup=scalaInstanceDeclaration skipwhite
    +syn keyword scalaKeyword case nextgroup=scalaKeyword,scalaCaseFollowing skipwhite
    +syn keyword scalaKeyword val nextgroup=scalaNameDefinition,scalaQuasiQuotes skipwhite
    +syn keyword scalaKeyword def var nextgroup=scalaNameDefinition skipwhite
    +hi def link scalaKeyword Keyword
    +
    +exe 'syn region scalaBlock start=/{/ end=/}/ contains=' . s:ContainedGroup() . ' fold'
    +
    +syn keyword scalaAkkaSpecialWord when goto using startWith initialize onTransition stay become unbecome
    +hi def link scalaAkkaSpecialWord PreProc
    +
    +syn keyword scalatestSpecialWord shouldBe
    +syn match scalatestShouldDSLA /^\s\+\zsit should/
    +syn match scalatestShouldDSLB /\/
    +hi def link scalatestSpecialWord PreProc
    +hi def link scalatestShouldDSLA PreProc
    +hi def link scalatestShouldDSLB PreProc
    +
    +syn match scalaSymbol /'[_A-Za-z0-9$]\+/
    +hi def link scalaSymbol Number
    +
    +syn match scalaChar /'.'/
    +syn match scalaChar /'\\[\\"'ntbrf]'/ contains=scalaEscapedChar
    +syn match scalaChar /'\\u[A-Fa-f0-9]\{4}'/ contains=scalaUnicodeChar
    +syn match scalaEscapedChar /\\[\\"'ntbrf]/
    +syn match scalaUnicodeChar /\\u[A-Fa-f0-9]\{4}/
    +hi def link scalaChar Character
    +hi def link scalaEscapedChar Special
    +hi def link scalaUnicodeChar Special
    +
    +syn match scalaOperator "||"
    +syn match scalaOperator "&&"
    +syn match scalaOperator "|"
    +syn match scalaOperator "&"
    +hi def link scalaOperator Special
    +
    +syn match scalaNameDefinition /\<[_A-Za-z0-9$]\+\>/ contained nextgroup=scalaPostNameDefinition,scalaVariableDeclarationList
    +syn match scalaNameDefinition /`[^`]\+`/ contained nextgroup=scalaPostNameDefinition
    +syn match scalaVariableDeclarationList /\s*,\s*/ contained nextgroup=scalaNameDefinition
    +syn match scalaPostNameDefinition /\_s*:\_s*/ contained nextgroup=scalaTypeDeclaration
    +hi def link scalaNameDefinition Function
    +
    +syn match scalaInstanceDeclaration /\<[_\.A-Za-z0-9$]\+\>/ contained nextgroup=scalaInstanceHash
    +syn match scalaInstanceDeclaration /`[^`]\+`/ contained
    +syn match scalaInstanceHash /#/ contained nextgroup=scalaInstanceDeclaration
    +hi def link scalaInstanceDeclaration Special
    +hi def link scalaInstanceHash Type
    +
    +syn match scalaUnimplemented /???/
    +hi def link scalaUnimplemented ERROR
    +
    +syn match scalaCapitalWord /\<[A-Z][A-Za-z0-9$]*\>/
    +hi def link scalaCapitalWord Special
    +
    +" Handle type declarations specially
    +syn region scalaTypeStatement matchgroup=Keyword start=/\\)\ze/ contained nextgroup=scalaTypeTypeDeclaration contains=scalaTypeTypeExtension skipwhite
    +syn match scalaTypeTypeDeclaration /\<[_\.A-Za-z0-9$]\+\>/ contained nextgroup=scalaTypeTypeExtension,scalaTypeTypeEquals skipwhite
    +syn match scalaTypeTypeEquals /=\ze[^>]/ contained nextgroup=scalaTypeTypePostDeclaration skipwhite
    +syn match scalaTypeTypeExtension /)\?\_s*\zs\%(⇒\|=>\|<:\|:>\|=:=\|::\|#\)/ contained contains=scalaTypeOperator nextgroup=scalaTypeTypeDeclaration skipwhite
    +syn match scalaTypeTypePostDeclaration /\<[_\.A-Za-z0-9$]\+\>/ contained nextgroup=scalaTypeTypePostExtension skipwhite
    +syn match scalaTypeTypePostExtension /\%(⇒\|=>\|<:\|:>\|=:=\|::\)/ contained contains=scalaTypeOperator nextgroup=scalaTypeTypePostDeclaration skipwhite
    +hi def link scalaTypeTypeDeclaration Type
    +hi def link scalaTypeTypeExtension Keyword
    +hi def link scalaTypeTypePostDeclaration Special
    +hi def link scalaTypeTypePostExtension Keyword
    +
    +syn match scalaTypeDeclaration /(/ contained nextgroup=scalaTypeExtension contains=scalaRoundBrackets skipwhite
    +syn match scalaTypeDeclaration /\%(⇒\|=>\)\ze/ contained nextgroup=scalaTypeDeclaration contains=scalaTypeExtension skipwhite
    +syn match scalaTypeDeclaration /\<[_\.A-Za-z0-9$]\+\>/ contained nextgroup=scalaTypeExtension skipwhite
    +syn match scalaTypeExtension /)\?\_s*\zs\%(⇒\|=>\|<:\|:>\|=:=\|::\|#\)/ contained contains=scalaTypeOperator nextgroup=scalaTypeDeclaration skipwhite
    +hi def link scalaTypeDeclaration Type
    +hi def link scalaTypeExtension Keyword
    +hi def link scalaTypePostExtension Keyword
    +
    +syn match scalaTypeAnnotation /\%([_a-zA-Z0-9$\s]:\_s*\)\ze[_=(\.A-Za-z0-9$]\+/ skipwhite nextgroup=scalaTypeDeclaration contains=scalaRoundBrackets
    +syn match scalaTypeAnnotation /)\_s*:\_s*\ze[_=(\.A-Za-z0-9$]\+/ skipwhite nextgroup=scalaTypeDeclaration
    +hi clear scalaTypeAnnotation
    +
    +syn match scalaCaseFollowing /\<[_\.A-Za-z0-9$]\+\>/ contained contains=scalaCapitalWord
    +syn match scalaCaseFollowing /`[^`]\+`/ contained contains=scalaCapitalWord
    +hi def link scalaCaseFollowing Special
    +
    +syn keyword scalaKeywordModifier abstract override final lazy implicit private protected sealed null super
    +syn keyword scalaSpecialFunction implicitly require
    +hi def link scalaKeywordModifier Function
    +hi def link scalaSpecialFunction Function
    +
    +syn keyword scalaSpecial this true false ne eq
    +syn keyword scalaSpecial new nextgroup=scalaInstanceDeclaration skipwhite
    +syn match scalaSpecial "\%(=>\|⇒\|<-\|←\|->\|→\)"
    +syn match scalaSpecial /`[^`]\+`/  " Backtick literals
    +hi def link scalaSpecial PreProc
    +
    +syn keyword scalaExternal package import
    +hi def link scalaExternal Include
    +
    +syn match scalaStringEmbeddedQuote /\\"/ contained
    +syn region scalaString start=/"/ end=/"/ contains=scalaStringEmbeddedQuote,scalaEscapedChar,scalaUnicodeChar
    +hi def link scalaString String
    +hi def link scalaStringEmbeddedQuote String
    +
    +syn region scalaIString matchgroup=scalaInterpolationBrackets start=/\<[a-zA-Z][a-zA-Z0-9_]*"/ skip=/\\"/ end=/"/ contains=scalaInterpolation,scalaInterpolationB,scalaEscapedChar,scalaUnicodeChar
    +syn region scalaTripleIString matchgroup=scalaInterpolationBrackets start=/\<[a-zA-Z][a-zA-Z0-9_]*"""/ end=/"""\ze\%([^"]\|$\)/ contains=scalaInterpolation,scalaInterpolationB,scalaEscapedChar,scalaUnicodeChar
    +hi def link scalaIString String
    +hi def link scalaTripleIString String
    +
    +syn match scalaInterpolation /\$[a-zA-Z0-9_$]\+/ contained
    +exe 'syn region scalaInterpolationB matchgroup=scalaInterpolationBoundary start=/\${/ end=/}/ contained contains=' . s:ContainedGroup()
    +hi def link scalaInterpolation Function
    +hi clear scalaInterpolationB
    +
    +syn region scalaFString matchgroup=scalaInterpolationBrackets start=/f"/ skip=/\\"/ end=/"/ contains=scalaFInterpolation,scalaFInterpolationB,scalaEscapedChar,scalaUnicodeChar
    +syn match scalaFInterpolation /\$[a-zA-Z0-9_$]\+\(%[-A-Za-z0-9\.]\+\)\?/ contained
    +exe 'syn region scalaFInterpolationB matchgroup=scalaInterpolationBoundary start=/${/ end=/}\(%[-A-Za-z0-9\.]\+\)\?/ contained contains=' . s:ContainedGroup()
    +hi def link scalaFString String
    +hi def link scalaFInterpolation Function
    +hi clear scalaFInterpolationB
    +
    +syn region scalaTripleString start=/"""/ end=/"""\%([^"]\|$\)/ contains=scalaEscapedChar,scalaUnicodeChar
    +syn region scalaTripleFString matchgroup=scalaInterpolationBrackets start=/f"""/ end=/"""\%([^"]\|$\)/ contains=scalaFInterpolation,scalaFInterpolationB,scalaEscapedChar,scalaUnicodeChar
    +hi def link scalaTripleString String
    +hi def link scalaTripleFString String
    +
    +hi def link scalaInterpolationBrackets Special
    +hi def link scalaInterpolationBoundary Function
    +
    +syn match scalaNumber /\<0[dDfFlL]\?\>/ " Just a bare 0
    +syn match scalaNumber /\<[1-9]\d*[dDfFlL]\?\>/  " A multi-digit number - octal numbers with leading 0's are deprecated in Scala
    +syn match scalaNumber /\<0[xX][0-9a-fA-F]\+[dDfFlL]\?\>/ " Hex number
    +syn match scalaNumber /\%(\<\d\+\.\d*\|\.\d\+\)\%([eE][-+]\=\d\+\)\=[fFdD]\=/ " exponential notation 1
    +syn match scalaNumber /\<\d\+[eE][-+]\=\d\+[fFdD]\=\>/ " exponential notation 2
    +syn match scalaNumber /\<\d\+\%([eE][-+]\=\d\+\)\=[fFdD]\>/ " exponential notation 3
    +hi def link scalaNumber Number
    +
    +syn region scalaRoundBrackets start="(" end=")" skipwhite contained contains=scalaTypeDeclaration,scalaSquareBrackets,scalaRoundBrackets
    +
    +syn region scalaSquareBrackets matchgroup=scalaSquareBracketsBrackets start="\[" end="\]" skipwhite nextgroup=scalaTypeExtension contains=scalaTypeDeclaration,scalaSquareBrackets,scalaTypeOperator,scalaTypeAnnotationParameter,scalaString
    +syn match scalaTypeOperator /[-+=:<>]\+/ contained
    +syn match scalaTypeAnnotationParameter /@\<[`_A-Za-z0-9$]\+\>/ contained
    +hi def link scalaSquareBracketsBrackets Type
    +hi def link scalaTypeOperator Keyword
    +hi def link scalaTypeAnnotationParameter Function
    +
    +syn match scalaShebang "\%^#!.*" display
    +syn region scalaMultilineComment start="/\*" end="\*/" contains=scalaMultilineComment,scalaDocLinks,scalaParameterAnnotation,scalaCommentAnnotation,scalaTodo,scalaCommentCodeBlock,@Spell keepend fold
    +syn match scalaCommentAnnotation "@[_A-Za-z0-9$]\+" contained
    +syn match scalaParameterAnnotation "\%(@tparam\|@param\|@see\)" nextgroup=scalaParamAnnotationValue skipwhite contained
    +syn match scalaParamAnnotationValue /[.`_A-Za-z0-9$]\+/ contained
    +syn region scalaDocLinks start="\[\[" end="\]\]" contained
    +syn region scalaCommentCodeBlock matchgroup=Keyword start="{{{" end="}}}" contained
    +syn match scalaTodo "\vTODO|FIXME|XXX" contained
    +hi def link scalaShebang Comment
    +hi def link scalaMultilineComment Comment
    +hi def link scalaDocLinks Function
    +hi def link scalaParameterAnnotation Function
    +hi def link scalaParamAnnotationValue Keyword
    +hi def link scalaCommentAnnotation Function
    +hi def link scalaCommentCodeBlock String
    +hi def link scalaTodo Todo
    +
    +syn match scalaAnnotation /@\<[`_A-Za-z0-9$]\+\>/
    +hi def link scalaAnnotation PreProc
    +
    +syn match scalaTrailingComment "//.*$" contains=scalaTodo,@Spell
    +hi def link scalaTrailingComment Comment
    +
    +syn match scalaAkkaFSM /goto([^)]*)\_s\+\/ contains=scalaAkkaFSMGotoUsing
    +syn match scalaAkkaFSM /stay\_s\+using/
    +syn match scalaAkkaFSM /^\s*stay\s*$/
    +syn match scalaAkkaFSM /when\ze([^)]*)/
    +syn match scalaAkkaFSM /startWith\ze([^)]*)/
    +syn match scalaAkkaFSM /initialize\ze()/
    +syn match scalaAkkaFSM /onTransition/
    +syn match scalaAkkaFSM /onTermination/
    +syn match scalaAkkaFSM /whenUnhandled/
    +syn match scalaAkkaFSMGotoUsing /\/
    +syn match scalaAkkaFSMGotoUsing /\/
    +hi def link scalaAkkaFSM PreProc
    +hi def link scalaAkkaFSMGotoUsing PreProc
    +
    +let b:current_syntax = 'scala'
    +
    +if main_syntax ==# 'scala'
    +  unlet main_syntax
    +endif
    +
    +" vim:set sw=2 sts=2 ts=8 et:
    diff --git a/.config/vim/syntax/scdoc.vim b/.config/vim/syntax/scdoc.vim
    new file mode 100644
    index 0000000..0180f35
    --- /dev/null
    +++ b/.config/vim/syntax/scdoc.vim
    @@ -0,0 +1,63 @@
    +" Syntax file for scdoc files
    +" Maintainer: Gregory Anders 
    +" Last Updated: 2022-05-09
    +" Upstream: https://github.com/gpanders/vim-scdoc
    +
    +if exists('b:current_syntax')
    +    finish
    +endif
    +let b:current_syntax = 'scdoc'
    +
    +syntax match scdocFirstLineError "\%^.*$"
    +syntax match scdocFirstLineValid "\%^\S\+(\d[0-9A-Za-z]*)\%(\s\+\"[^"]*\"\%(\s\+\"[^"]*\"\)\=\)\=$"
    +
    +syntax region scdocCommentError start="^;\S" end="$" keepend
    +syntax region scdocComment start="^; " end="$" keepend
    +
    +syntax region scdocHeaderError start="^#\{3,}" end="$" keepend
    +syntax region scdocHeader start="^#\{1,2}" end="$" keepend
    +
    +syntax match scdocIndentError "^[ ]\+"
    +
    +syntax match scdocLineBreak "++$"
    +
    +syntax region scdocOrderedListItem matchgroup=scdocOrderedListMarker start="^\z(\s*\)\." skip="^\z1  .*$" end="^" contains=scdocBold,scdocUnderline
    +syntax region scdocListItem matchgroup=scdocListMarker start="^\z(\s*\)-" skip="^\z1  .*$" end="^" contains=scdocBold,scdocUnderline
    +
    +" Tables cannot start with a column
    +syntax match scdocTableError "^:"
    +
    +syntax region scdocTable matchgroup=scdocTableEntry start="^[\[|\]][\[\-\]<=>]" end="^$" contains=scdocTableEntry,scdocTableError,scdocTableContinuation,scdocBold,scdocUnderline,scdocPre
    +syntax match scdocTableError "^.*$" contained
    +syntax match scdocTableContinuation "^   \+\S\+" contained
    +syntax match scdocTableEntry "^[|:][\[\-\]<=> ]" contained
    +syntax match scdocTableError "^[|:][\[\-\]<=> ]\S.*$" contained
    +
    +syntax region scdocBold concealends matchgroup=scdocBoldDelimiter start="\\\@"
    +syntax region scdocPre matchgroup=scdocPreDelimiter start="^\t*```" end="^\t*```"
    +
    +syntax sync minlines=50
    +
    +hi default link scdocFirstLineValid     Comment
    +hi default link scdocComment            Comment
    +hi default link scdocHeader             Title
    +hi default link scdocOrderedListMarker  Statement
    +hi default link scdocListMarker         scdocOrderedListMarker
    +hi default link scdocLineBreak          Special
    +hi default link scdocTableSpecifier     Statement
    +hi default link scdocTableEntry         Statement
    +
    +hi default link scdocFirstLineError        Error
    +hi default link scdocCommentError          Error
    +hi default link scdocHeaderError           Error
    +hi default link scdocIndentError           Error
    +hi default link scdocTableError            Error
    +hi default link scdocTableError Error
    +
    +hi default link scdocPreDelimiter       Delimiter
    +
    +hi default scdocBold term=bold cterm=bold gui=bold
    +hi default scdocUnderline term=underline cterm=underline gui=underline
    +hi default link scdocBoldDelimiter scdocBold
    +hi default link scdocUnderlineDelimiter scdocUnderline
    diff --git a/.config/vim/syntax/scheme.vim b/.config/vim/syntax/scheme.vim
    new file mode 100644
    index 0000000..59b0cc5
    --- /dev/null
    +++ b/.config/vim/syntax/scheme.vim
    @@ -0,0 +1,470 @@
    +" Vim syntax file
    +" Language:            Scheme (R7RS)
    +" Last Change:         2024 Jun 21
    +" Author:              Evan Hanson 
    +" Maintainer:          Evan Hanson 
    +" Previous Author:     Dirk van Deun 
    +" Previous Maintainer: Sergey Khorev 
    +" Repository:          https://git.foldling.org/vim-scheme.git
    +" URL:                 https://foldling.org/vim/syntax/scheme.vim
    +
    +if exists('b:current_syntax')
    +  finish
    +endif
    +
    +let s:cpo = &cpo
    +set cpo&vim
    +
    +syn spell notoplevel
    +
    +syn match schemeParentheses "[^ '`\t\n()\[\]";]\+"
    +syn match schemeParentheses "[)\]]"
    +
    +syn match schemeIdentifier /[^ '`\t\n()\[\]"|;][^ '`\t\n()\[\]"|;]*/
    +
    +syn region schemeQuote matchgroup=schemeData start=/'[`']*/ end=/[ \t\n()\[\]";]/me=e-1
    +syn region schemeQuote matchgroup=schemeData start=/'['`]*"/ skip=/\\[\\"]/ end=/"/
    +syn region schemeQuote matchgroup=schemeData start=/'['`]*|/ skip=/\\[\\|]/ end=/|/
    +syn region schemeQuote matchgroup=schemeData start=/'['`]*#\?(/ end=/)/ contains=ALLBUT,schemeQuasiquote,schemeQuasiquoteForm,schemeUnquote,schemeForm,schemeDatumCommentForm,schemeImport,@schemeImportCluster,@schemeSyntaxCluster
    +
    +syn region schemeQuasiquote matchgroup=schemeData start=/`['`]*/ end=/[ \t\n()\[\]";]/me=e-1
    +syn region schemeQuasiquote matchgroup=schemeData start=/`['`]*#\?(/ end=/)/ contains=ALLBUT,schemeQuote,schemeQuoteForm,schemeForm,schemeDatumCommentForm,schemeImport,@schemeImportCluster,@schemeSyntaxCluster
    +
    +syn region schemeUnquote matchgroup=schemeParentheses start=/,/ end=/[ `'\t\n\[\]()";]/me=e-1 contained contains=ALLBUT,schemeDatumCommentForm,@schemeImportCluster
    +syn region schemeUnquote matchgroup=schemeParentheses start=/,@/ end=/[ `'\t\n\[\]()";]/me=e-1 contained contains=ALLBUT,schemeDatumCommentForm,@schemeImportCluster
    +syn region schemeUnquote matchgroup=schemeParentheses start=/,(/ end=/)/ contained contains=ALLBUT,schemeDatumCommentForm,@schemeImportCluster
    +syn region schemeUnquote matchgroup=schemeParentheses start=/,@(/ end=/)/ contained contains=ALLBUT,schemeDatumCommentForm,@schemeImportCluster
    +
    +syn region schemeQuoteForm matchgroup=schemeData start=/(/ end=/)/ contained contains=ALLBUT,schemeQuasiquote,schemeQuasiquoteForm,schemeUnquote,schemeForm,schemeDatumCommentForm,schemeImport,@schemeImportCluster,@schemeSyntaxCluster
    +syn region schemeQuasiquoteForm matchgroup=schemeData start=/(/ end=/)/ contained contains=ALLBUT,schemeQuote,schemeForm,schemeDatumCommentForm,schemeImport,@schemeImportCluster,@schemeSyntaxCluster
    +
    +syn region schemeString start=/\(\\\)\@/
    +syn match schemeNumber /#x[+\-]*[0-9a-fA-F]\+\>/
    +
    +syn match schemeBoolean /#t\(rue\)\?/
    +syn match schemeBoolean /#f\(alse\)\?/
    +
    +syn match schemeCharacter /#\\.[^ `'\t\n\[\]()]*/
    +syn match schemeCharacter /#\\x[0-9a-fA-F]\+/
    +
    +syn match schemeComment /;.*$/ contains=schemeTodo,@Spell
    +
    +syn region schemeMultilineComment start=/#|/ end=/|#/ contains=schemeTodo,schemeMultilineComment,@Spell
    +
    +syn match schemeTodo /\c\<\(todo\|xxx\|fixme\|note\):\?\>/ contained
    +
    +syn region schemeForm matchgroup=schemeParentheses start="(" end=")" contains=ALLBUT,schemeUnquote,schemeDatumCommentForm,@schemeImportCluster
    +syn region schemeForm matchgroup=schemeParentheses start="\[" end="\]" contains=ALLBUT,schemeUnquote,schemeDatumCommentForm,@schemeImportCluster
    +
    +syn region schemeVector matchgroup=schemeData start="#(" end=")" contains=ALLBUT,schemeQuasiquote,schemeQuasiquoteForm,schemeUnquote,schemeForm,schemeDatumCommentForm,schemeImport,@schemeImportCluster,@schemeSyntaxCluster
    +syn region schemeVector matchgroup=schemeData start="#[fsu]\d\+(" end=")" contains=schemeNumber,schemeComment,schemeDatumComment
    +
    +if exists('g:is_chicken') || exists('b:is_chicken')
    +  syn region schemeImport matchgroup=schemeImport start="\(([ \t\n]*\)\@<=\(import\|import-syntax\|use\|require-extension\)\(-for-syntax\)\?\>" end=")"me=e-1 contained contains=schemeImportForm,schemeIdentifier,schemeComment,schemeDatumComment
    +else
    +  syn region schemeImport matchgroup=schemeImport start="\(([ \t\n]*\)\@<=\(import\)\>" end=")"me=e-1 contained contains=schemeImportForm,schemeIdentifier,schemeComment,schemeDatumComment
    +endif
    +
    +syn match   schemeImportKeyword "\(([ \t\n]*\)\@<=\(except\|only\|prefix\|rename\)\>"
    +syn region  schemeImportForm matchgroup=schemeParentheses start="(" end=")" contained contains=schemeIdentifier,schemeComment,schemeDatumComment,@schemeImportCluster
    +syn cluster schemeImportCluster contains=schemeImportForm,schemeImportKeyword
    +
    +syn region schemeDatumComment matchgroup=schemeDatumComment start=/#;[ \t\n`']*/ end=/[ \t\n()\[\]";]/me=e-1
    +syn region schemeDatumComment matchgroup=schemeDatumComment start=/#;[ \t\n`']*"/ skip=/\\[\\"]/ end=/"/
    +syn region schemeDatumComment matchgroup=schemeDatumComment start=/#;[ \t\n`']*|/ skip=/\\[\\|]/ end=/|/
    +syn region schemeDatumComment matchgroup=schemeDatumComment start=/#;[ \t\n`']*\(#\([usf]\d\+\)\?\)\?(/ end=/)/ contains=schemeDatumCommentForm
    +syn region schemeDatumCommentForm start="(" end=")" contained contains=schemeDatumCommentForm
    +
    +syn cluster schemeSyntaxCluster contains=schemeFunction,schemeKeyword,schemeSyntax,schemeExtraSyntax,schemeLibrarySyntax,schemeSyntaxSyntax
    +
    +syn keyword schemeLibrarySyntax define-library
    +syn keyword schemeLibrarySyntax export
    +syn keyword schemeLibrarySyntax include
    +syn keyword schemeLibrarySyntax include-ci
    +syn keyword schemeLibrarySyntax include-library-declarations
    +syn keyword schemeLibrarySyntax library
    +syn keyword schemeLibrarySyntax cond-expand
    +
    +syn keyword schemeSyntaxSyntax define-syntax
    +syn keyword schemeSyntaxSyntax let-syntax
    +syn keyword schemeSyntaxSyntax letrec-syntax
    +syn keyword schemeSyntaxSyntax syntax-rules
    +
    +syn keyword schemeSyntax =>
    +syn keyword schemeSyntax and
    +syn keyword schemeSyntax begin
    +syn keyword schemeSyntax case
    +syn keyword schemeSyntax case-lambda
    +syn keyword schemeSyntax cond
    +syn keyword schemeSyntax define
    +syn keyword schemeSyntax define-record-type
    +syn keyword schemeSyntax define-values
    +syn keyword schemeSyntax delay
    +syn keyword schemeSyntax delay-force
    +syn keyword schemeSyntax do
    +syn keyword schemeSyntax else
    +syn keyword schemeSyntax guard
    +syn keyword schemeSyntax if
    +syn keyword schemeSyntax lambda
    +syn keyword schemeSyntax let
    +syn keyword schemeSyntax let*
    +syn keyword schemeSyntax let*-values
    +syn keyword schemeSyntax let-values
    +syn keyword schemeSyntax letrec
    +syn keyword schemeSyntax letrec*
    +syn keyword schemeSyntax or
    +syn keyword schemeSyntax parameterize
    +syn keyword schemeSyntax quasiquote
    +syn keyword schemeSyntax quote
    +syn keyword schemeSyntax set!
    +syn keyword schemeSyntax unless
    +syn keyword schemeSyntax unquote
    +syn keyword schemeSyntax unquote-splicing
    +syn keyword schemeSyntax when
    +
    +syn keyword schemeFunction *
    +syn keyword schemeFunction +
    +syn keyword schemeFunction -
    +syn keyword schemeFunction /
    +syn keyword schemeFunction <
    +syn keyword schemeFunction <=
    +syn keyword schemeFunction =
    +syn keyword schemeFunction >
    +syn keyword schemeFunction >=
    +syn keyword schemeFunction abs
    +syn keyword schemeFunction acos
    +syn keyword schemeFunction acos
    +syn keyword schemeFunction angle
    +syn keyword schemeFunction append
    +syn keyword schemeFunction apply
    +syn keyword schemeFunction asin
    +syn keyword schemeFunction assoc
    +syn keyword schemeFunction assq
    +syn keyword schemeFunction assv
    +syn keyword schemeFunction atan
    +syn keyword schemeFunction binary-port?
    +syn keyword schemeFunction boolean=?
    +syn keyword schemeFunction boolean?
    +syn keyword schemeFunction bytevector
    +syn keyword schemeFunction bytevector-append
    +syn keyword schemeFunction bytevector-append
    +syn keyword schemeFunction bytevector-copy
    +syn keyword schemeFunction bytevector-copy!
    +syn keyword schemeFunction bytevector-length
    +syn keyword schemeFunction bytevector-u8-ref
    +syn keyword schemeFunction bytevector-u8-set!
    +syn keyword schemeFunction bytevector?
    +syn keyword schemeFunction caaaar
    +syn keyword schemeFunction caaadr
    +syn keyword schemeFunction caaar
    +syn keyword schemeFunction caadar
    +syn keyword schemeFunction caaddr
    +syn keyword schemeFunction caadr
    +syn keyword schemeFunction caar
    +syn keyword schemeFunction cadaar
    +syn keyword schemeFunction cadadr
    +syn keyword schemeFunction cadar
    +syn keyword schemeFunction caddar
    +syn keyword schemeFunction cadddr
    +syn keyword schemeFunction caddr
    +syn keyword schemeFunction cadr
    +syn keyword schemeFunction call-with-current-continuation
    +syn keyword schemeFunction call-with-input-file
    +syn keyword schemeFunction call-with-output-file
    +syn keyword schemeFunction call-with-port
    +syn keyword schemeFunction call-with-values
    +syn keyword schemeFunction call/cc
    +syn keyword schemeFunction car
    +syn keyword schemeFunction cdaaar
    +syn keyword schemeFunction cdaadr
    +syn keyword schemeFunction cdaar
    +syn keyword schemeFunction cdadar
    +syn keyword schemeFunction cdaddr
    +syn keyword schemeFunction cdadr
    +syn keyword schemeFunction cdar
    +syn keyword schemeFunction cddaar
    +syn keyword schemeFunction cddadr
    +syn keyword schemeFunction cddar
    +syn keyword schemeFunction cdddar
    +syn keyword schemeFunction cddddr
    +syn keyword schemeFunction cdddr
    +syn keyword schemeFunction cddr
    +syn keyword schemeFunction cdr
    +syn keyword schemeFunction ceiling
    +syn keyword schemeFunction char->integer
    +syn keyword schemeFunction char-alphabetic?
    +syn keyword schemeFunction char-ci<=?
    +syn keyword schemeFunction char-ci=?
    +syn keyword schemeFunction char-ci>?
    +syn keyword schemeFunction char-downcase
    +syn keyword schemeFunction char-foldcase
    +syn keyword schemeFunction char-lower-case?
    +syn keyword schemeFunction char-numeric?
    +syn keyword schemeFunction char-ready?
    +syn keyword schemeFunction char-upcase
    +syn keyword schemeFunction char-upper-case?
    +syn keyword schemeFunction char-whitespace?
    +syn keyword schemeFunction char<=?
    +syn keyword schemeFunction char=?
    +syn keyword schemeFunction char>?
    +syn keyword schemeFunction char?
    +syn keyword schemeFunction close-input-port
    +syn keyword schemeFunction close-output-port
    +syn keyword schemeFunction close-port
    +syn keyword schemeFunction command-line
    +syn keyword schemeFunction complex?
    +syn keyword schemeFunction cons
    +syn keyword schemeFunction cos
    +syn keyword schemeFunction current-error-port
    +syn keyword schemeFunction current-input-port
    +syn keyword schemeFunction current-jiffy
    +syn keyword schemeFunction current-output-port
    +syn keyword schemeFunction current-second
    +syn keyword schemeFunction delete-file
    +syn keyword schemeFunction denominator
    +syn keyword schemeFunction digit-value
    +syn keyword schemeFunction display
    +syn keyword schemeFunction dynamic-wind
    +syn keyword schemeFunction emergency-exit
    +syn keyword schemeFunction environment
    +syn keyword schemeFunction eof-object
    +syn keyword schemeFunction eof-object?
    +syn keyword schemeFunction eq?
    +syn keyword schemeFunction equal?
    +syn keyword schemeFunction eqv?
    +syn keyword schemeFunction error
    +syn keyword schemeFunction error-object-irritants
    +syn keyword schemeFunction error-object-message
    +syn keyword schemeFunction error-object?
    +syn keyword schemeFunction eval
    +syn keyword schemeFunction even?
    +syn keyword schemeFunction exact
    +syn keyword schemeFunction exact->inexact
    +syn keyword schemeFunction exact-integer-sqrt
    +syn keyword schemeFunction exact-integer?
    +syn keyword schemeFunction exact?
    +syn keyword schemeFunction exit
    +syn keyword schemeFunction exp
    +syn keyword schemeFunction expt
    +syn keyword schemeFunction features
    +syn keyword schemeFunction file-error?
    +syn keyword schemeFunction file-exists?
    +syn keyword schemeFunction finite?
    +syn keyword schemeFunction floor
    +syn keyword schemeFunction floor-quotient
    +syn keyword schemeFunction floor-remainder
    +syn keyword schemeFunction floor/
    +syn keyword schemeFunction flush-output-port
    +syn keyword schemeFunction for-each
    +syn keyword schemeFunction force
    +syn keyword schemeFunction gcd
    +syn keyword schemeFunction get-environment-variable
    +syn keyword schemeFunction get-environment-variables
    +syn keyword schemeFunction get-output-bytevector
    +syn keyword schemeFunction get-output-string
    +syn keyword schemeFunction imag-part
    +syn keyword schemeFunction inexact
    +syn keyword schemeFunction inexact->exact
    +syn keyword schemeFunction inexact?
    +syn keyword schemeFunction infinite?
    +syn keyword schemeFunction input-port-open?
    +syn keyword schemeFunction input-port?
    +syn keyword schemeFunction integer->char
    +syn keyword schemeFunction integer?
    +syn keyword schemeFunction interaction-environment
    +syn keyword schemeFunction jiffies-per-second
    +syn keyword schemeFunction lcm
    +syn keyword schemeFunction length
    +syn keyword schemeFunction list
    +syn keyword schemeFunction list->string
    +syn keyword schemeFunction list->vector
    +syn keyword schemeFunction list-copy
    +syn keyword schemeFunction list-ref
    +syn keyword schemeFunction list-set!
    +syn keyword schemeFunction list-tail
    +syn keyword schemeFunction list?
    +syn keyword schemeFunction load
    +syn keyword schemeFunction log
    +syn keyword schemeFunction magnitude
    +syn keyword schemeFunction make-bytevector
    +syn keyword schemeFunction make-list
    +syn keyword schemeFunction make-parameter
    +syn keyword schemeFunction make-polar
    +syn keyword schemeFunction make-promise
    +syn keyword schemeFunction make-rectangular
    +syn keyword schemeFunction make-string
    +syn keyword schemeFunction make-vector
    +syn keyword schemeFunction map
    +syn keyword schemeFunction max
    +syn keyword schemeFunction member
    +syn keyword schemeFunction memq
    +syn keyword schemeFunction memv
    +syn keyword schemeFunction min
    +syn keyword schemeFunction modulo
    +syn keyword schemeFunction nan?
    +syn keyword schemeFunction negative?
    +syn keyword schemeFunction newline
    +syn keyword schemeFunction not
    +syn keyword schemeFunction null-environment
    +syn keyword schemeFunction null?
    +syn keyword schemeFunction number->string
    +syn keyword schemeFunction number?
    +syn keyword schemeFunction numerator
    +syn keyword schemeFunction odd?
    +syn keyword schemeFunction open-binary-input-file
    +syn keyword schemeFunction open-binary-output-file
    +syn keyword schemeFunction open-input-bytevector
    +syn keyword schemeFunction open-input-file
    +syn keyword schemeFunction open-input-string
    +syn keyword schemeFunction open-output-bytevector
    +syn keyword schemeFunction open-output-file
    +syn keyword schemeFunction open-output-string
    +syn keyword schemeFunction output-port-open?
    +syn keyword schemeFunction output-port?
    +syn keyword schemeFunction pair?
    +syn keyword schemeFunction peek-char
    +syn keyword schemeFunction peek-u8
    +syn keyword schemeFunction port?
    +syn keyword schemeFunction positive?
    +syn keyword schemeFunction procedure?
    +syn keyword schemeFunction promise?
    +syn keyword schemeFunction quotient
    +syn keyword schemeFunction raise
    +syn keyword schemeFunction raise-continuable
    +syn keyword schemeFunction rational?
    +syn keyword schemeFunction rationalize
    +syn keyword schemeFunction read
    +syn keyword schemeFunction read-bytevector
    +syn keyword schemeFunction read-bytevector!
    +syn keyword schemeFunction read-char
    +syn keyword schemeFunction read-error?
    +syn keyword schemeFunction read-line
    +syn keyword schemeFunction read-string
    +syn keyword schemeFunction read-u8
    +syn keyword schemeFunction real-part
    +syn keyword schemeFunction real?
    +syn keyword schemeFunction remainder
    +syn keyword schemeFunction reverse
    +syn keyword schemeFunction round
    +syn keyword schemeFunction scheme-report-environment
    +syn keyword schemeFunction set-car!
    +syn keyword schemeFunction set-cdr!
    +syn keyword schemeFunction sin
    +syn keyword schemeFunction sqrt
    +syn keyword schemeFunction square
    +syn keyword schemeFunction string
    +syn keyword schemeFunction string->list
    +syn keyword schemeFunction string->number
    +syn keyword schemeFunction string->symbol
    +syn keyword schemeFunction string->utf8
    +syn keyword schemeFunction string->vector
    +syn keyword schemeFunction string-append
    +syn keyword schemeFunction string-ci<=?
    +syn keyword schemeFunction string-ci=?
    +syn keyword schemeFunction string-ci>?
    +syn keyword schemeFunction string-copy
    +syn keyword schemeFunction string-copy!
    +syn keyword schemeFunction string-downcase
    +syn keyword schemeFunction string-fill!
    +syn keyword schemeFunction string-foldcase
    +syn keyword schemeFunction string-for-each
    +syn keyword schemeFunction string-length
    +syn keyword schemeFunction string-map
    +syn keyword schemeFunction string-ref
    +syn keyword schemeFunction string-set!
    +syn keyword schemeFunction string-upcase
    +syn keyword schemeFunction string<=?
    +syn keyword schemeFunction string=?
    +syn keyword schemeFunction string>?
    +syn keyword schemeFunction string?
    +syn keyword schemeFunction substring
    +syn keyword schemeFunction symbol->string
    +syn keyword schemeFunction symbol=?
    +syn keyword schemeFunction symbol?
    +syn keyword schemeFunction syntax-error
    +syn keyword schemeFunction tan
    +syn keyword schemeFunction textual-port?
    +syn keyword schemeFunction transcript-off
    +syn keyword schemeFunction transcript-on
    +syn keyword schemeFunction truncate
    +syn keyword schemeFunction truncate-quotient
    +syn keyword schemeFunction truncate-remainder
    +syn keyword schemeFunction truncate/
    +syn keyword schemeFunction u8-ready?
    +syn keyword schemeFunction utf8->string
    +syn keyword schemeFunction values
    +syn keyword schemeFunction vector
    +syn keyword schemeFunction vector->list
    +syn keyword schemeFunction vector->string
    +syn keyword schemeFunction vector-append
    +syn keyword schemeFunction vector-copy
    +syn keyword schemeFunction vector-copy!
    +syn keyword schemeFunction vector-fill!
    +syn keyword schemeFunction vector-for-each
    +syn keyword schemeFunction vector-length
    +syn keyword schemeFunction vector-map
    +syn keyword schemeFunction vector-ref
    +syn keyword schemeFunction vector-set!
    +syn keyword schemeFunction vector?
    +syn keyword schemeFunction with-exception-handler
    +syn keyword schemeFunction with-input-from-file
    +syn keyword schemeFunction with-output-to-file
    +syn keyword schemeFunction write
    +syn keyword schemeFunction write-bytevector
    +syn keyword schemeFunction write-char
    +syn keyword schemeFunction write-shared
    +syn keyword schemeFunction write-simple
    +syn keyword schemeFunction write-string
    +syn keyword schemeFunction write-u8
    +syn keyword schemeFunction zero?
    +
    +hi def link schemeTodo Todo
    +hi def link schemeBoolean Boolean
    +hi def link schemeCharacter Character
    +hi def link schemeComment Comment
    +hi def link schemeConstant Constant
    +hi def link schemeData Delimiter
    +hi def link schemeDatumComment Comment
    +hi def link schemeDatumCommentForm Comment
    +hi def link schemeDelimiter Delimiter
    +hi def link schemeError Error
    +hi def link schemeExtraSyntax Underlined
    +hi def link schemeFunction Function
    +hi def link schemeIdentifier Normal
    +hi def link schemeImport PreProc
    +hi def link schemeImportKeyword PreProc
    +hi def link schemeKeyword Type
    +hi def link schemeLibrarySyntax PreProc
    +hi def link schemeMultilineComment Comment
    +hi def link schemeNumber Number
    +hi def link schemeParentheses Normal
    +hi def link schemeQuasiquote Delimiter
    +hi def link schemeQuote Delimiter
    +hi def link schemeSpecialSyntax Special
    +hi def link schemeString String
    +hi def link schemeSymbol Normal
    +hi def link schemeSyntax Statement
    +hi def link schemeSyntaxSyntax PreProc
    +hi def link schemeTypeSyntax Type
    +
    +let b:did_scheme_syntax = 1
    +
    +if exists('b:is_chicken') || exists('g:is_chicken')
    +  exe 'ru! syntax/chicken.vim'
    +endif
    +
    +unlet b:did_scheme_syntax
    +let b:current_syntax = 'scheme'
    +let &cpo = s:cpo
    +unlet s:cpo
    diff --git a/.config/vim/syntax/scilab.vim b/.config/vim/syntax/scilab.vim
    new file mode 100644
    index 0000000..03e123b
    --- /dev/null
    +++ b/.config/vim/syntax/scilab.vim
    @@ -0,0 +1,102 @@
    +"
    +" Vim syntax file
    +" Language   :	Scilab
    +" Maintainer :	Benoit Hamelin
    +" File type  :	*.sci (see :help filetype)
    +" History
    +"	28jan2002	benoith		0.1		Creation.  Adapted from matlab.vim.
    +"	04feb2002	benoith		0.5		Fixed bugs with constant highlighting.
    +"
    +
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +
    +" Reserved words.
    +syn keyword scilabStatement			abort clear clearglobal end exit global mode predef quit resume
    +syn keyword scilabStatement			return
    +syn keyword scilabFunction			function endfunction funptr
    +syn keyword scilabPredicate			null iserror isglobal
    +syn keyword scilabKeyword			typename
    +syn keyword scilabDebug				debug pause what where whereami whereis who whos
    +syn keyword scilabRepeat			for while break
    +syn keyword scilabConditional		if then else elseif
    +syn keyword scilabMultiplex			select case
    +
    +" Reserved constants.
    +syn match scilabConstant			"\(%\)[0-9A-Za-z?!#$]\+"
    +syn match scilabBoolean				"\(%\)[FTft]\>"
    +
    +" Delimiters and operators.
    +syn match scilabDelimiter			"[][;,()]"
    +syn match scilabComparison			"[=~]="
    +syn match scilabComparison			"[<>]=\="
    +syn match scilabComparison			"<>"
    +syn match scilabLogical				"[&|~]"
    +syn match scilabAssignment			"="
    +syn match scilabArithmetic			"[+-]"
    +syn match scilabArithmetic			"\.\=[*/\\]\.\="
    +syn match scilabArithmetic			"\.\=^"
    +syn match scilabRange				":"
    +syn match scilabMlistAccess			"\."
    +
    +syn match scilabLineContinuation	"\.\{2,}"
    +
    +syn match scilabTransposition		"[])a-zA-Z0-9?!_#$.]'"lc=1
    +
    +" Comments and tools.
    +syn keyword scilabTodo				TODO todo FIXME fixme TBD tbd	contained
    +syn match scilabComment				"//.*$"	contains=scilabTodo
    +
    +" Constants.
    +syn match scilabNumber				"[0-9]\+\(\.[0-9]*\)\=\([DEde][+-]\=[0-9]\+\)\="
    +syn match scilabNumber				"\.[0-9]\+\([DEde][+-]\=[0-9]\+\)\="
    +syn region scilabString				start=+'+ skip=+''+ end=+'+		oneline
    +syn region scilabString				start=+"+ end=+"+				oneline
    +
    +" Identifiers.
    +syn match scilabIdentifier			"\<[A-Za-z?!_#$][A-Za-z0-9?!_#$]*\>"
    +syn match scilabOverload			"%[A-Za-z0-9?!_#$]\+_[A-Za-z0-9?!_#$]\+"
    +
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link scilabStatement				Statement
    +hi def link scilabFunction				Keyword
    +hi def link scilabPredicate				Keyword
    +hi def link scilabKeyword				Keyword
    +hi def link scilabDebug					Debug
    +hi def link scilabRepeat				Repeat
    +hi def link scilabConditional			Conditional
    +hi def link scilabMultiplex				Conditional
    +
    +hi def link scilabConstant				Constant
    +hi def link scilabBoolean				Boolean
    +
    +hi def link scilabDelimiter				Delimiter
    +hi def link scilabMlistAccess			Delimiter
    +hi def link scilabComparison			Operator
    +hi def link scilabLogical				Operator
    +hi def link scilabAssignment			Operator
    +hi def link scilabArithmetic			Operator
    +hi def link scilabRange					Operator
    +hi def link scilabLineContinuation		Underlined
    +hi def link scilabTransposition			Operator
    +
    +hi def link scilabTodo					Todo
    +hi def link scilabComment				Comment
    +
    +hi def link scilabNumber				Number
    +hi def link scilabString				String
    +
    +hi def link scilabIdentifier			Identifier
    +hi def link scilabOverload				Special
    +
    +
    +let b:current_syntax = "scilab"
    +
    +"EOF	vim: ts=4 noet tw=100 sw=4 sts=0
    diff --git a/.config/vim/syntax/screen.vim b/.config/vim/syntax/screen.vim
    new file mode 100644
    index 0000000..d576d29
    --- /dev/null
    +++ b/.config/vim/syntax/screen.vim
    @@ -0,0 +1,260 @@
    +" Vim syntax file
    +" Language:             screen(1) configuration file
    +" Maintainer:           Dmitri Vereshchagin 
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2015-09-24
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn match   screenEscape    '\\.'
    +
    +syn keyword screenTodo      contained TODO FIXME XXX NOTE
    +
    +syn region  screenComment   display oneline start='#' end='$'
    +                          \ contains=screenTodo,@Spell
    +
    +syn region  screenString    display oneline start=+"+ skip=+\\"+ end=+"+
    +                          \ contains=screenVariable,screenSpecial
    +
    +syn region  screenLiteral   display oneline start=+'+ skip=+\\'+ end=+'+
    +
    +syn match   screenVariable  contained display '$\%(\h\w*\|{\h\w*}\)'
    +
    +syn keyword screenBoolean   on off
    +
    +syn match   screenNumbers   display '\<\d\+\>'
    +
    +syn match   screenSpecials  contained
    +                          \ '%\%([%aAdDhlmMstuwWyY?:{]\|[0-9]*n\|0?cC\)'
    +
    +syn keyword screenCommands
    +                          \ acladd
    +                          \ aclchg
    +                          \ acldel
    +                          \ aclgrp
    +                          \ aclumask
    +                          \ activity
    +                          \ addacl
    +                          \ allpartial
    +                          \ altscreen
    +                          \ at
    +                          \ attrcolor
    +                          \ autodetach
    +                          \ autonuke
    +                          \ backtick
    +                          \ bce
    +                          \ bd_bc_down
    +                          \ bd_bc_left
    +                          \ bd_bc_right
    +                          \ bd_bc_up
    +                          \ bd_bell
    +                          \ bd_braille_table
    +                          \ bd_eightdot
    +                          \ bd_info
    +                          \ bd_link
    +                          \ bd_lower_left
    +                          \ bd_lower_right
    +                          \ bd_ncrc
    +                          \ bd_port
    +                          \ bd_scroll
    +                          \ bd_skip
    +                          \ bd_start_braille
    +                          \ bd_type
    +                          \ bd_upper_left
    +                          \ bd_upper_right
    +                          \ bd_width
    +                          \ bell
    +                          \ bell_msg
    +                          \ bind
    +                          \ bindkey
    +                          \ blanker
    +                          \ blankerprg
    +                          \ break
    +                          \ breaktype
    +                          \ bufferfile
    +                          \ bumpleft
    +                          \ bumpright
    +                          \ c1
    +                          \ caption
    +                          \ chacl
    +                          \ charset
    +                          \ chdir
    +                          \ cjkwidth
    +                          \ clear
    +                          \ collapse
    +                          \ colon
    +                          \ command
    +                          \ compacthist
    +                          \ console
    +                          \ copy
    +                          \ crlf
    +                          \ debug
    +                          \ defautonuke
    +                          \ defbce
    +                          \ defbreaktype
    +                          \ defc1
    +                          \ defcharset
    +                          \ defencoding
    +                          \ defescape
    +                          \ defflow
    +                          \ defgr
    +                          \ defhstatus
    +                          \ defkanji
    +                          \ deflog
    +                          \ deflogin
    +                          \ defmode
    +                          \ defmonitor
    +                          \ defmousetrack
    +                          \ defnonblock
    +                          \ defobuflimit
    +                          \ defscrollback
    +                          \ defshell
    +                          \ defsilence
    +                          \ defslowpaste
    +                          \ defutf8
    +                          \ defwrap
    +                          \ defwritelock
    +                          \ defzombie
    +                          \ detach
    +                          \ digraph
    +                          \ dinfo
    +                          \ displays
    +                          \ dumptermcap
    +                          \ echo
    +                          \ encoding
    +                          \ escape
    +                          \ eval
    +                          \ exec
    +                          \ fit
    +                          \ flow
    +                          \ focus
    +                          \ focusminsize
    +                          \ gr
    +                          \ group
    +                          \ hardcopy
    +                          \ hardcopy_append
    +                          \ hardcopydir
    +                          \ hardstatus
    +                          \ height
    +                          \ help
    +                          \ history
    +                          \ hstatus
    +                          \ idle
    +                          \ ignorecase
    +                          \ info
    +                          \ kanji
    +                          \ kill
    +                          \ lastmsg
    +                          \ layout
    +                          \ license
    +                          \ lockscreen
    +                          \ log
    +                          \ logfile
    +                          \ login
    +                          \ logtstamp
    +                          \ mapdefault
    +                          \ mapnotnext
    +                          \ maptimeout
    +                          \ markkeys
    +                          \ maxwin
    +                          \ meta
    +                          \ monitor
    +                          \ mousetrack
    +                          \ msgminwait
    +                          \ msgwait
    +                          \ multiuser
    +                          \ nethack
    +                          \ next
    +                          \ nonblock
    +                          \ number
    +                          \ obuflimit
    +                          \ only
    +                          \ other
    +                          \ partial
    +                          \ password
    +                          \ paste
    +                          \ pastefont
    +                          \ pow_break
    +                          \ pow_detach
    +                          \ pow_detach_msg
    +                          \ prev
    +                          \ printcmd
    +                          \ process
    +                          \ quit
    +                          \ readbuf
    +                          \ readreg
    +                          \ redisplay
    +                          \ register
    +                          \ remove
    +                          \ removebuf
    +                          \ rendition
    +                          \ reset
    +                          \ resize
    +                          \ screen
    +                          \ scrollback
    +                          \ select
    +                          \ sessionname
    +                          \ setenv
    +                          \ setsid
    +                          \ shell
    +                          \ shelltitle
    +                          \ silence
    +                          \ silencewait
    +                          \ sleep
    +                          \ slowpaste
    +                          \ sorendition
    +                          \ sort
    +                          \ source
    +                          \ split
    +                          \ startup_message
    +                          \ stuff
    +                          \ su
    +                          \ suspend
    +                          \ term
    +                          \ termcap
    +                          \ termcapinfo
    +                          \ terminfo
    +                          \ time
    +                          \ title
    +                          \ umask
    +                          \ unbindall
    +                          \ unsetenv
    +                          \ utf8
    +                          \ vbell
    +                          \ vbell_msg
    +                          \ vbellwait
    +                          \ verbose
    +                          \ version
    +                          \ wall
    +                          \ width
    +                          \ windowlist
    +                          \ windows
    +                          \ wrap
    +                          \ writebuf
    +                          \ writelock
    +                          \ xoff
    +                          \ xon
    +                          \ zmodem
    +                          \ zombie
    +                          \ zombie_timeout
    +
    +hi def link screenEscape    Special
    +hi def link screenComment   Comment
    +hi def link screenTodo      Todo
    +hi def link screenString    String
    +hi def link screenLiteral   String
    +hi def link screenVariable  Identifier
    +hi def link screenBoolean   Boolean
    +hi def link screenNumbers   Number
    +hi def link screenSpecials  Special
    +hi def link screenCommands  Keyword
    +
    +let b:current_syntax = "screen"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/scss.vim b/.config/vim/syntax/scss.vim
    new file mode 100644
    index 0000000..9d79dc5
    --- /dev/null
    +++ b/.config/vim/syntax/scss.vim
    @@ -0,0 +1,25 @@
    +" Vim syntax file
    +" Language:	SCSS
    +" Maintainer:	Tim Pope 
    +" Filenames:	*.scss
    +" Last Change:	2019 Dec 05
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +runtime! syntax/sass.vim
    +
    +syn clear sassComment
    +syn clear sassCssComment
    +syn clear sassEndOfLineComment
    +
    +syn match scssComment "//.*" contains=sassTodo,@Spell
    +syn region scssCssComment start="/\*" end="\*/" contains=sassTodo,@Spell
    +
    +hi def link scssCssComment scssComment
    +hi def link scssComment Comment
    +
    +let b:current_syntax = "scss"
    +
    +" vim:set sw=2:
    diff --git a/.config/vim/syntax/sd.vim b/.config/vim/syntax/sd.vim
    new file mode 100644
    index 0000000..b497ba5
    --- /dev/null
    +++ b/.config/vim/syntax/sd.vim
    @@ -0,0 +1,71 @@
    +" Language: streaming descriptor file
    +" Maintainer: Puria Nafisi Azizi (pna) 
    +" License: This file can be redistribued and/or modified under the same terms
    +"   as Vim itself.
    +" URL: http://netstudent.polito.it/vim_syntax/
    +" Last Change: 2012 Feb 03 by Thilo Six
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +        finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +" Always ignore case
    +syn case ignore
    +
    +" Comments
    +syn match sdComment /\s*[#;].*$/
    +
    +" IP Adresses
    +syn cluster sdIPCluster contains=sdIPError,sdIPSpecial
    +syn match sdIPError /\%(\d\{4,}\|25[6-9]\|2[6-9]\d\|[3-9]\d\{2}\)[\.0-9]*/ contained
    +syn match sdIPSpecial /\%(127\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}\)/ contained
    +syn match sdIP contained /\%(\d\{1,4}\.\)\{3}\d\{1,4}/ contains=@sdIPCluster
    +
    +" Statements
    +syn keyword sdStatement AGGREGATE AUDIO_CHANNELS
    +syn keyword sdStatement BYTE_PER_PCKT BIT_PER_SAMPLE BITRATE
    +syn keyword sdStatement CLOCK_RATE CODING_TYPE CREATOR
    +syn match sdStatement /^\s*CODING_TYPE\>/ nextgroup=sdCoding skipwhite
    +syn match sdStatement /^\s*ENCODING_NAME\>/ nextgroup=sdEncoding skipwhite
    +syn keyword sdStatement FILE_NAME FRAME_LEN FRAME_RATE FORCE_FRAME_RATE
    +syn keyword sdStatement LICENSE
    +syn match sdStatement /^\s*MEDIA_SOURCE\>/ nextgroup=sdSource skipwhite
    +syn match sdStatement /^\s*MULTICAST\>/ nextgroup=sdIP skipwhite
    +syn keyword sdStatement PAYLOAD_TYPE PKT_LEN PRIORITY
    +syn keyword sdStatement SAMPLE_RATE
    +syn keyword sdStatement TITLE TWIN
    +syn keyword sdStatement VERIFY
    +
    +" Known Options
    +syn keyword sdEncoding H26L MPV MP2T MP4V-ES
    +syn keyword sdCoding FRAME SAMPLE
    +syn keyword sdSource STORED LIVE
    +
    +"Specials
    +syn keyword sdSpecial TRUE FALSE NULL
    +syn keyword sdDelimiter STREAM STREAM_END
    +syn match sdError /^search .\{257,}/
    +
    +
    +hi def link sdIP Number
    +hi def link sdHostname Type
    +hi def link sdEncoding Identifier
    +hi def link sdCoding Identifier
    +hi def link sdSource Identifier
    +hi def link sdComment Comment
    +hi def link sdIPError Error
    +hi def link sdError Error
    +hi def link sdStatement Statement
    +hi def link sdIPSpecial Special
    +hi def link sdSpecial Special
    +hi def link sdDelimiter Delimiter
    +
    +
    +let b:current_syntax = "sd"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/sdc.vim b/.config/vim/syntax/sdc.vim
    new file mode 100644
    index 0000000..ae2aae5
    --- /dev/null
    +++ b/.config/vim/syntax/sdc.vim
    @@ -0,0 +1,77 @@
    +" Vim syntax file
    +" Language:     SDC - Synopsys Design Constraints
    +" Maintainer:   Maurizio Tranchero - maurizio.tranchero@gmail.com
    +" Credits:      based on TCL Vim syntax file
    +" Version:	0.3
    +" Last Change:  Thu Mar  25 17:35:16 CET 2009
    +" 2024 Jul 17 by Vim Project (update to SDC 2.1)
    +
    +" Quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Read the TCL syntax to start with
    +runtime! syntax/tcl.vim
    +
    +" TCL extension related to SDC and available from some vendors
    +" (not defined in SDC standard!)
    +syn keyword sdcCollections	foreach_in_collection
    +syn keyword sdcObjectsInfo	get_point_info get_node_info get_path_info
    +syn keyword sdcObjectsInfo	get_timing_paths set_attribute
    +
    +" SDC rev. 2.1 specific keywords
    +syn keyword sdcObjectsQuery	get_clocks get_ports get_cells
    +syn keyword sdcObjectsQuery	get_pins get_nets all_inputs
    +syn keyword sdcObjectsQuery	all_outputs all_registers all_clocks
    +syn keyword sdcObjectsQuery	get_libs get_lib_cells get_lib_pins
    +
    +syn keyword sdcConstraints	set_false_path set_clock_groups set_sense
    +syn keyword sdcConstraints	set_propagated_clock set_clock_gating_check
    +syn keyword sdcConstraints	set_ideal_latency set_ideal_network
    +syn keyword sdcConstraints	set_ideal_transistion set_max_time_borrow
    +syn keyword sdcConstraints	set_data_check group_path set_max_transition
    +syn keyword sdcConstraints	set_max_fanout set_driving_cell
    +syn keyword sdcConstraints	set_port_fanout_number set_multi_cycle_path
    +syn keyword sdcConstraints	set_disable_timing set_min_pulse_width
    +
    +syn keyword sdcNonIdealities	set_min_delay set_max_delay
    +syn keyword sdcNonIdealities	set_input_delay set_output_delay
    +syn keyword sdcNonIdealities	set_load set_min_capacitance set_max_capacitance
    +syn keyword sdcNonIdealities	set_clock_latency set_clock_transition set_clock_uncertainty
    +syn keyword sdcNonIdealities	set_resistance set_timing_derate set_drive
    +syn keyword sdcNonIdealities	set_input_transition set_fanout_load
    +
    +syn keyword sdcCreateOperations	create_clock create_timing_netlist update_timing_netlist
    +syn keyword sdcCreateOperations	create_generated_clock
    +
    +syn keyword sdcPowerArea	set_max_area create_voltage_area
    +syn keyword sdcPowerArea	set_level_shifter_threshold set_max_dynamic_power
    +syn keyword sdcPowerArea	set_level_shifter_strategy set_max_leakage_power
    +
    +syn keyword sdcModeConfig	set_case_analysis set_logic_dc
    +syn keyword sdcModeConfig	set_logic_zero set_logic_one
    +
    +syn keyword sdcMiscCommmands	sdc_version set_wire_load_selection_group
    +syn keyword sdcMiscCommmands	set_units set_wire_load_mode set_wire_load_model
    +syn keyword sdcMiscCommmands	set_wire_load_min_block_size set_operating_conditions
    +syn keyword sdcMiscCommmands	current_design
    +
    +" command flags highlighting
    +syn match sdcFlags		"[[:space:]]-[[:alpha:]_]*\>"
    +
    +" Define the default highlighting.
    +hi def link sdcCollections      Repeat
    +hi def link sdcObjectsInfo      Operator
    +hi def link sdcCreateOperations	Operator
    +hi def link sdcObjectsQuery	Function
    +hi def link sdcConstraints	Operator
    +hi def link sdcNonIdealities	Operator
    +hi def link sdcPowerArea	Operator
    +hi def link sdcModeConfig	Operator
    +hi def link sdcMiscCommmands	Operator
    +hi def link sdcFlags		Special
    +
    +let b:current_syntax = "sdc"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/sdl.vim b/.config/vim/syntax/sdl.vim
    new file mode 100644
    index 0000000..7df38d1
    --- /dev/null
    +++ b/.config/vim/syntax/sdl.vim
    @@ -0,0 +1,153 @@
    +" Vim syntax file
    +" Language:	SDL
    +" Maintainer:	Michael Piefel 
    +" Last Change:	2 May 2001
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +    finish
    +endif
    +
    +if !exists("sdl_2000")
    +    syntax case ignore
    +endif
    +
    +" A bunch of useful SDL keywords
    +syn keyword sdlStatement	task else nextstate
    +syn keyword sdlStatement	in out with from interface
    +syn keyword sdlStatement	to via env and use
    +syn keyword sdlStatement	process procedure block system service type
    +syn keyword sdlStatement	endprocess endprocedure endblock endsystem
    +syn keyword sdlStatement	package endpackage connection endconnection
    +syn keyword sdlStatement	channel endchannel connect
    +syn keyword sdlStatement	synonym dcl signal gate timer signallist signalset
    +syn keyword sdlStatement	create output set reset call
    +syn keyword sdlStatement	operators literals
    +syn keyword sdlStatement	active alternative any as atleast constants
    +syn keyword sdlStatement	default endalternative endmacro endoperator
    +syn keyword sdlStatement	endselect endsubstructure external
    +syn keyword sdlStatement	if then fi for import macro macrodefinition
    +syn keyword sdlStatement	macroid mod nameclass nodelay not operator or
    +syn keyword sdlStatement	parent provided referenced rem
    +syn keyword sdlStatement	select spelling substructure xor
    +syn keyword sdlNewState		state endstate
    +syn keyword sdlInput		input start stop return none save priority
    +syn keyword sdlConditional	decision enddecision join
    +syn keyword sdlVirtual		virtual redefined finalized adding inherits
    +syn keyword sdlExported		remote exported export
    +
    +if !exists("sdl_no_96")
    +    syn keyword sdlStatement	all axioms constant endgenerator endrefinement endservice
    +    syn keyword sdlStatement	error fpar generator literal map noequality ordering
    +    syn keyword sdlStatement	refinement returns revealed reverse service signalroute
    +    syn keyword sdlStatement	view viewed
    +    syn keyword sdlExported	imported
    +endif
    +
    +if exists("sdl_2000")
    +    syn keyword sdlStatement	abstract aggregation association break choice composition
    +    syn keyword sdlStatement	continue endmethod handle method
    +    syn keyword sdlStatement	ordered private protected public
    +    syn keyword sdlException	exceptionhandler endexceptionhandler onexception
    +    syn keyword sdlException	catch new raise
    +    " The same in uppercase
    +    syn keyword sdlStatement	TASK ELSE NEXTSTATE
    +    syn keyword sdlStatement	IN OUT WITH FROM INTERFACE
    +    syn keyword sdlStatement	TO VIA ENV AND USE
    +    syn keyword sdlStatement	PROCESS PROCEDURE BLOCK SYSTEM SERVICE TYPE
    +    syn keyword sdlStatement	ENDPROCESS ENDPROCEDURE ENDBLOCK ENDSYSTEM
    +    syn keyword sdlStatement	PACKAGE ENDPACKAGE CONNECTION ENDCONNECTION
    +    syn keyword sdlStatement	CHANNEL ENDCHANNEL CONNECT
    +    syn keyword sdlStatement	SYNONYM DCL SIGNAL GATE TIMER SIGNALLIST SIGNALSET
    +    syn keyword sdlStatement	CREATE OUTPUT SET RESET CALL
    +    syn keyword sdlStatement	OPERATORS LITERALS
    +    syn keyword sdlStatement	ACTIVE ALTERNATIVE ANY AS ATLEAST CONSTANTS
    +    syn keyword sdlStatement	DEFAULT ENDALTERNATIVE ENDMACRO ENDOPERATOR
    +    syn keyword sdlStatement	ENDSELECT ENDSUBSTRUCTURE EXTERNAL
    +    syn keyword sdlStatement	IF THEN FI FOR IMPORT MACRO MACRODEFINITION
    +    syn keyword sdlStatement	MACROID MOD NAMECLASS NODELAY NOT OPERATOR OR
    +    syn keyword sdlStatement	PARENT PROVIDED REFERENCED REM
    +    syn keyword sdlStatement	SELECT SPELLING SUBSTRUCTURE XOR
    +    syn keyword sdlNewState	STATE ENDSTATE
    +    syn keyword sdlInput	INPUT START STOP RETURN NONE SAVE PRIORITY
    +    syn keyword sdlConditional	DECISION ENDDECISION JOIN
    +    syn keyword sdlVirtual	VIRTUAL REDEFINED FINALIZED ADDING INHERITS
    +    syn keyword sdlExported	REMOTE EXPORTED EXPORT
    +
    +    syn keyword sdlStatement	ABSTRACT AGGREGATION ASSOCIATION BREAK CHOICE COMPOSITION
    +    syn keyword sdlStatement	CONTINUE ENDMETHOD ENDOBJECT ENDVALUE HANDLE METHOD OBJECT
    +    syn keyword sdlStatement	ORDERED PRIVATE PROTECTED PUBLIC
    +    syn keyword sdlException	EXCEPTIONHANDLER ENDEXCEPTIONHANDLER ONEXCEPTION
    +    syn keyword sdlException	CATCH NEW RAISE
    +endif
    +
    +" String and Character contstants
    +" Highlight special characters (those which have a backslash) differently
    +syn match   sdlSpecial		contained "\\\d\d\d\|\\."
    +syn region  sdlString		start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=cSpecial
    +syn region  sdlString		start=+'+  skip=+''+  end=+'+
    +
    +" No, this doesn't happen, I just wanted to scare you. SDL really allows all
    +" these characters for identifiers; fortunately, keywords manage without them.
    +" set iskeyword=@,48-57,_,192-214,216-246,248-255,-
    +
    +syn region sdlComment		start="/\*"  end="\*/"
    +syn region sdlComment		start="comment"  end=";"
    +syn region sdlComment		start="--" end="--\|$"
    +syn match  sdlCommentError	"\*/"
    +
    +syn keyword sdlOperator		present
    +syn keyword sdlType		integer real natural duration pid boolean time
    +syn keyword sdlType		character charstring ia5string
    +syn keyword sdlType		self now sender offspring
    +syn keyword sdlStructure	asntype endasntype syntype endsyntype struct
    +
    +if !exists("sdl_no_96")
    +    syn keyword sdlStructure	newtype endnewtype
    +endif
    +
    +if exists("sdl_2000")
    +    syn keyword sdlStructure	object endobject value endvalue
    +    " The same in uppercase
    +    syn keyword sdlStructure	OBJECT ENDOBJECT VALUE ENDVALUE
    +    syn keyword sdlOperator	PRESENT
    +    syn keyword sdlType		INTEGER NATURAL DURATION PID BOOLEAN TIME
    +    syn keyword sdlType		CHARSTRING IA5STRING
    +    syn keyword sdlType		SELF NOW SENDER OFFSPRING
    +    syn keyword sdlStructure	ASNTYPE ENDASNTYPE SYNTYPE ENDSYNTYPE STRUCT
    +endif
    +
    +" ASN.1 in SDL
    +syn case match
    +syn keyword sdlType		SET OF BOOLEAN INTEGER REAL BIT OCTET
    +syn keyword sdlType		SEQUENCE CHOICE
    +syn keyword sdlType		STRING OBJECT IDENTIFIER NULL
    +
    +syn sync ccomment sdlComment
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +command -nargs=+ Hi     hi def 
    +
    +hi def link sdlException	Label
    +hi def link sdlConditional	sdlStatement
    +hi def link sdlVirtual		sdlStatement
    +hi def link sdlExported		sdlFlag
    +hi def link sdlCommentError	sdlError
    +hi def link sdlOperator		Operator
    +hi def link sdlStructure	sdlType
    +Hi	    sdlStatement	term=bold ctermfg=4 guifg=Blue
    +Hi	    sdlFlag		term=bold ctermfg=4 guifg=Blue gui=italic
    +Hi	    sdlNewState		term=italic ctermfg=2 guifg=Magenta gui=underline
    +Hi	    sdlInput		term=bold guifg=Red
    +hi def link sdlType		Type
    +hi def link sdlString		String
    +hi def link sdlComment		Comment
    +hi def link sdlSpecial		Special
    +hi def link sdlError		Error
    +
    +delcommand Hi
    +
    +let b:current_syntax = "sdl"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/sed.vim b/.config/vim/syntax/sed.vim
    new file mode 100644
    index 0000000..d1f631d
    --- /dev/null
    +++ b/.config/vim/syntax/sed.vim
    @@ -0,0 +1,123 @@
    +" Vim syntax file
    +" Language:		sed
    +" Maintainer:		Doug Kearns 
    +" Previous Maintainer:	Haakon Riiser 
    +" Contributor:		Jack Haden-Enneking
    +" Last Change:		2022 Oct 15
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn keyword sedTodo	contained TODO FIXME XXX
    +
    +syn match sedError	"\S"
    +
    +syn match sedWhitespace "\s\+" contained
    +syn match sedSemicolon	";"
    +syn match sedAddress	"[[:digit:]$]"
    +syn match sedAddress	"\d\+\~\d\+"
    +syn region sedAddress	matchgroup=Special start="[{,;]\s*/\%(\\/\)\="lc=1 skip="[^\\]\%(\\\\\)*\\/" end="/I\=" contains=sedTab,sedRegexpMeta
    +syn region sedAddress	matchgroup=Special start="^\s*/\%(\\/\)\=" skip="[^\\]\%(\\\\\)*\\/" end="/I\=" contains=sedTab,sedRegexpMeta
    +syn match sedFunction	"[dDgGhHlnNpPqQx=]\s*\%($\|;\)" contains=sedSemicolon,sedWhitespace
    +if exists("g:sed_dialect") && g:sed_dialect ==? "bsd"
    +  syn match sedComment	"^\s*#.*$" contains=sedTodo
    +else
    +  syn match sedFunction	"[dDgGhHlnNpPqQx=]\s*\ze#" contains=sedSemicolon,sedWhitespace
    +  syn match sedComment	"#.*$" contains=sedTodo
    +endif
    +syn match sedLabel	":[^;]*"
    +syn match sedLineCont	"^\%(\\\\\)*\\$" contained
    +syn match sedLineCont	"[^\\]\%(\\\\\)*\\$"ms=e contained
    +syn match sedSpecial	"[{},!]"
    +
    +" continue to silently support the old name
    +let s:highlight_tabs = v:false
    +if exists("g:highlight_sedtabs") || get(g:, "sed_highlight_tabs", 0)
    +  let s:highlight_tabs = v:true
    +  syn match sedTab	"\t" contained
    +endif
    +
    +" Append/Change/Insert
    +syn region sedACI	matchgroup=sedFunction start="[aci]\\$" matchgroup=NONE end="^.*$" contains=sedLineCont,sedTab
    +
    +syn region sedBranch	matchgroup=sedFunction start="[bt]" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace
    +syn region sedRW	matchgroup=sedFunction start="[rw]" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace
    +
    +" Substitution/transform with various delimiters
    +syn region sedFlagWrite	    matchgroup=sedFlag start="w" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace contained
    +syn match sedFlag	    "[[:digit:]gpI]*w\=" contains=sedFlagWrite contained
    +syn match sedRegexpMeta	    "[.*^$]" contained
    +syn match sedRegexpMeta	    "\\." contains=sedTab contained
    +syn match sedRegexpMeta	    "\[.\{-}\]" contains=sedTab contained
    +syn match sedRegexpMeta	    "\\{\d\*,\d*\\}" contained
    +syn match sedRegexpMeta	    "\\%(.\{-}\\)" contains=sedTab contained
    +syn match sedReplaceMeta    "&\|\\\%($\|.\)" contains=sedTab contained
    +
    +" Metacharacters: $ * . \ ^ [ ~
    +" @ is used as delimiter and treated on its own below
    +let s:at = char2nr("@")
    +let s:i = char2nr(" ") " ASCII: 32, EBCDIC: 64
    +if has("ebcdic")
    +  let s:last = 255
    +else
    +  let s:last = 126
    +endif
    +let s:metacharacters = '$*.\^[~'
    +while s:i <= s:last
    +  let s:delimiter = escape(nr2char(s:i), s:metacharacters)
    +  if s:i != s:at
    +    exe 'syn region sedAddress matchgroup=Special start=@\\'.s:delimiter.'\%(\\'.s:delimiter.'\)\=@ skip=@[^\\]\%(\\\\\)*\\'.s:delimiter.'@ end=@'.s:delimiter.'[IM]\=@ contains=sedTab'
    +    exe 'syn region sedRegexp'.s:i  'matchgroup=Special start=@'.s:delimiter.'\%(\\\\\|\\'.s:delimiter.'\)*@ skip=@[^\\'.s:delimiter.']\%(\\\\\)*\\'.s:delimiter.'@ end=@'.s:delimiter.'@me=e-1 contains=sedTab,sedRegexpMeta keepend contained nextgroup=sedReplacement'.s:i
    +    exe 'syn region sedReplacement'.s:i 'matchgroup=Special start=@'.s:delimiter.'\%(\\\\\|\\'.s:delimiter.'\)*@ skip=@[^\\'.s:delimiter.']\%(\\\\\)*\\'.s:delimiter.'@ end=@'.s:delimiter.'@ contains=sedTab,sedReplaceMeta keepend contained nextgroup=@sedFlags'
    +  endif
    +  let s:i = s:i + 1
    +endwhile
    +syn region sedAddress matchgroup=Special start=+\\@\%(\\@\)\=+ skip=+[^\\]\%(\\\\\)*\\@+ end=+@I\=+ contains=sedTab,sedRegexpMeta
    +syn region sedRegexp64 matchgroup=Special start=+@\%(\\\\\|\\@\)*+ skip=+[^\\@]\%(\\\\\)*\\@+ end=+@+me=e-1 contains=sedTab,sedRegexpMeta keepend contained nextgroup=sedReplacement64
    +syn region sedReplacement64 matchgroup=Special start=+@\%(\\\\\|\\@\)*+ skip=+[^\\@]\%(\\\\\)*\\@+ end=+@+ contains=sedTab,sedReplaceMeta keepend contained nextgroup=sedFlag
    +
    +" Since the syntax for the substitution command is very similar to the
    +" syntax for the transform command, I use the same pattern matching
    +" for both commands.  There is one problem -- the transform command
    +" (y) does not allow any flags.  To save memory, I ignore this problem.
    +syn match sedST	"[sy]" nextgroup=sedRegexp\d\+
    +
    +
    +hi def link sedAddress		Macro
    +hi def link sedACI		NONE
    +hi def link sedBranch		Label
    +hi def link sedComment		Comment
    +hi def link sedDelete		Function
    +hi def link sedError		Error
    +hi def link sedFlag		Type
    +hi def link sedFlagWrite	Constant
    +hi def link sedFunction		Function
    +hi def link sedLabel		Label
    +hi def link sedLineCont		Special
    +hi def link sedPutHoldspc	Function
    +hi def link sedReplaceMeta	Special
    +hi def link sedRegexpMeta	Special
    +hi def link sedRW		Constant
    +hi def link sedSemicolon	Special
    +hi def link sedST		Function
    +hi def link sedSpecial		Special
    +hi def link sedTodo		Todo
    +hi def link sedWhitespace	NONE
    +if s:highlight_tabs
    +  hi def link sedTab		Todo
    +endif
    +let s:i = char2nr(" ") " ASCII: 32, EBCDIC: 64
    +while s:i <= s:last
    +  exe "hi def link sedRegexp".s:i	"Macro"
    +  exe "hi def link sedReplacement".s:i	"NONE"
    +  let s:i = s:i + 1
    +endwhile
    +
    +unlet s:i s:last s:delimiter s:metacharacters s:at
    +unlet s:highlight_tabs
    +
    +let b:current_syntax = "sed"
    +
    +" vim: nowrap sw=2 sts=2 ts=8 noet:
    diff --git a/.config/vim/syntax/sendpr.vim b/.config/vim/syntax/sendpr.vim
    new file mode 100644
    index 0000000..2541b95
    --- /dev/null
    +++ b/.config/vim/syntax/sendpr.vim
    @@ -0,0 +1,37 @@
    +" Vim syntax file
    +" Language: FreeBSD send-pr file
    +" Maintainer: Hendrik Scholz 
    +" Last Change: 2022 Jun 14
    +"
    +" http://raisdorf.net/files/misc/send-pr.vim
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn match sendprComment /^SEND-PR:/
    +" email address
    +syn match sendprType /<[a-zA-Z0-9\-\_\.]*@[a-zA-Z0-9\-\_\.]*>/
    +" ^> lines
    +syn match sendprString /^>[a-zA-Z\-]*:/
    +syn region sendprLabel start="\[" end="\]"
    +syn match sendprString /^To:/
    +syn match sendprString /^From:/
    +syn match sendprString /^Reply-To:/
    +syn match sendprString /^Cc:/
    +syn match sendprString /^X-send-pr-version:/
    +syn match sendprString /^X-GNATS-Notify:/
    +
    +hi def link sendprComment   Comment
    +hi def link sendprType      Type
    +hi def link sendprString    String
    +hi def link sendprLabel     Label
    +
    +let b:current_syntax = 'sendpr'
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/sensors.vim b/.config/vim/syntax/sensors.vim
    new file mode 100644
    index 0000000..f8bc4c6
    --- /dev/null
    +++ b/.config/vim/syntax/sensors.vim
    @@ -0,0 +1,52 @@
    +" Vim syntax file
    +" Language:             sensors.conf(5) - libsensors configuration file
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2006-04-19
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn keyword sensorsTodo         contained TODO FIXME XXX NOTE
    +
    +syn region  sensorsComment      display oneline start='#' end='$'
    +                                \ contains=sensorsTodo,@Spell
    +
    +
    +syn keyword sensorsKeyword      bus chip label compute ignore set
    +
    +syn region  sensorsName         display oneline
    +                                \ start=+"+ skip=+\\\\\|\\"+ end=+"+
    +                                \ contains=sensorsNameSpecial
    +syn match   sensorsName         display '\w\+'
    +
    +syn match   sensorsNameSpecial  display '\\["\\rnt]'
    +
    +syn match   sensorsLineContinue '\\$'
    +
    +syn match   sensorsNumber       display '\d*.\d\+\>'
    +
    +syn match   sensorsRealWorld    display '@'
    +
    +syn match   sensorsOperator     display '[+*/-]'
    +
    +syn match   sensorsDelimiter    display '[()]'
    +
    +hi def link sensorsTodo         Todo
    +hi def link sensorsComment      Comment
    +hi def link sensorsKeyword      Keyword
    +hi def link sensorsName         String
    +hi def link sensorsNameSpecial  SpecialChar
    +hi def link sensorsLineContinue Special
    +hi def link sensorsNumber       Number
    +hi def link sensorsRealWorld    Identifier
    +hi def link sensorsOperator     Normal
    +hi def link sensorsDelimiter    Normal
    +
    +let b:current_syntax = "sensors"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/services.vim b/.config/vim/syntax/services.vim
    new file mode 100644
    index 0000000..94e39ae
    --- /dev/null
    +++ b/.config/vim/syntax/services.vim
    @@ -0,0 +1,54 @@
    +" Vim syntax file
    +" Language:             services(5) - Internet network services list
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2006-04-19
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn match   servicesBegin     display '^'
    +                              \ nextgroup=servicesName,servicesComment
    +
    +syn match   servicesName      contained display '[[:graph:]]\+'
    +                              \ nextgroup=servicesPort skipwhite
    +
    +syn match   servicesPort      contained display '\d\+'
    +                              \ nextgroup=servicesPPDiv,servicesPPDivDepr
    +                              \ skipwhite
    +
    +syn match   servicesPPDiv     contained display '/'
    +                              \ nextgroup=servicesProtocol skipwhite
    +
    +syn match   servicesPPDivDepr contained display ','
    +                              \ nextgroup=servicesProtocol skipwhite
    +
    +syn match   servicesProtocol  contained display '\S\+'
    +                              \ nextgroup=servicesAliases,servicesComment
    +                              \ skipwhite
    +
    +syn match   servicesAliases   contained display '\S\+'
    +                              \ nextgroup=servicesAliases,servicesComment
    +                              \ skipwhite
    +
    +syn keyword servicesTodo      contained TODO FIXME XXX NOTE
    +
    +syn region  servicesComment   display oneline start='#' end='$'
    +                              \ contains=servicesTodo,@Spell
    +
    +hi def link servicesTodo      Todo
    +hi def link servicesComment   Comment
    +hi def link servicesName      Identifier
    +hi def link servicesPort      Number
    +hi def link servicesPPDiv     Delimiter
    +hi def link servicesPPDivDepr Error
    +hi def link servicesProtocol  Type
    +hi def link servicesAliases   Macro
    +
    +let b:current_syntax = "services"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/setserial.vim b/.config/vim/syntax/setserial.vim
    new file mode 100644
    index 0000000..967fa5f
    --- /dev/null
    +++ b/.config/vim/syntax/setserial.vim
    @@ -0,0 +1,120 @@
    +" Vim syntax file
    +" Language:             setserial(8) configuration file
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2006-04-19
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn match   setserialBegin      display '^'
    +                                \ nextgroup=setserialDevice,setserialComment
    +                                \ skipwhite
    +
    +syn match   setserialDevice     contained display '\%(/[^ \t/]*\)\+'
    +                                \ nextgroup=setserialParameter skipwhite
    +
    +syn keyword setserialParameter  contained port irq baud_base divisor
    +                                \ close_delay closing_wait rx_trigger
    +                                \ tx_trigger flow_off flow_on rx_timeout
    +                                \ nextgroup=setserialNumber skipwhite
    +
    +syn keyword setserialParameter  contained uart
    +                                \ nextgroup=setserialUARTType skipwhite
    +
    +syn keyword setserialParameter  contained autoconfig auto_irq skip_test
    +                                \ spd_hi spd_vhi spd_shi spd_warp spd_cust
    +                                \ spd_normal sak fourport session_lockout
    +                                \ pgrp_lockout hup_notify split_termios
    +                                \ callout_nohup low_latency
    +                                \ nextgroup=setserialParameter skipwhite
    +
    +syn match   setserialParameter  contained display
    +                                \ '\^\%(auto_irq\|skip_test\|sak\|fourport\)'
    +                                \ contains=setserialNegation
    +                                \ nextgroup=setserialParameter skipwhite
    +
    +syn match   setserialParameter  contained display
    +                                \ '\^\%(session_lockout\|pgrp_lockout\)'
    +                                \ contains=setserialNegation
    +                                \ nextgroup=setserialParameter skipwhite
    +
    +syn match   setserialParameter  contained display
    +                                \ '\^\%(hup_notify\|split_termios\)'
    +                                \ contains=setserialNegation
    +                                \ nextgroup=setserialParameter skipwhite
    +
    +syn match   setserialParameter  contained display
    +                                \ '\^\%(callout_nohup\|low_latency\)'
    +                                \ contains=setserialNegation
    +                                \ nextgroup=setserialParameter skipwhite
    +
    +syn keyword setserialParameter  contained set_multiport
    +                                \ nextgroup=setserialMultiport skipwhite
    +
    +syn match   setserialNumber     contained display '\<\d\+\>'
    +                                \ nextgroup=setserialParameter skipwhite
    +syn match   setserialNumber     contained display '0x\x\+'
    +                                \ nextgroup=setserialParameter skipwhite
    +
    +syn keyword setserialUARTType   contained none
    +
    +syn match   setserialUARTType   contained display
    +                                \ '8250\|16[4789]50\|16550A\=\|16650\%(V2\)\='
    +                                \ nextgroup=setserialParameter skipwhite
    +
    +syn match   setserialUARTType   contained display '166[59]4'
    +                                \ nextgroup=setserialParameter skipwhite
    +
    +syn match   setserialNegation   contained display '\^'
    +
    +syn match   setserialMultiport  contained '\'
    +                                \ nextgroup=setserialPort skipwhite
    +
    +syn match   setserialPort       contained display '\<\d\+\>'
    +                                \ nextgroup=setserialMask skipwhite
    +syn match   setserialPort       contained display '0x\x\+'
    +                                \ nextgroup=setserialMask skipwhite
    +
    +syn match   setserialMask       contained '\'
    +                                \ nextgroup=setserialBitMask skipwhite
    +
    +syn match   setserialBitMask    contained display '\<\d\+\>'
    +                                \ nextgroup=setserialMatch skipwhite
    +syn match   setserialBitMask    contained display '0x\x\+'
    +                                \ nextgroup=setserialMatch skipwhite
    +
    +syn match   setserialMatch      contained '\'
    +                                \ nextgroup=setserialMatchBits skipwhite
    +
    +syn match   setserialMatchBits  contained display '\<\d\+\>'
    +                                \ nextgroup=setserialMultiport skipwhite
    +syn match   setserialMatchBits  contained display '0x\x\+'
    +                                \ nextgroup=setserialMultiport skipwhite
    +
    +syn keyword setserialTodo       contained TODO FIXME XXX NOTE
    +
    +syn region  setserialComment    display oneline start='^\s*#' end='$'
    +                                \ contains=setserialTodo,@Spell
    +
    +hi def link setserialTodo       Todo
    +hi def link setserialComment    Comment
    +hi def link setserialDevice     Normal
    +hi def link setserialParameter  Identifier
    +hi def link setserialNumber     Number
    +hi def link setserialUARTType   Type
    +hi def link setserialNegation   Operator
    +hi def link setserialMultiport  Type
    +hi def link setserialPort       setserialNumber
    +hi def link setserialMask       Type
    +hi def link setserialBitMask    setserialNumber
    +hi def link setserialMatch      Type
    +hi def link setserialMatchBits  setserialNumber
    +
    +let b:current_syntax = "setserial"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/sexplib.vim b/.config/vim/syntax/sexplib.vim
    new file mode 100644
    index 0000000..55dd3fb
    --- /dev/null
    +++ b/.config/vim/syntax/sexplib.vim
    @@ -0,0 +1,88 @@
    +" Vim syntax file
    +" Language:     S-expressions as used in Sexplib
    +" Filenames:    *.sexp
    +" Maintainers:  Markus Mottl      
    +" URL:          https://github.com/ocaml/vim-ocaml
    +" Last Change:  2020 Dec 31 - Updated header for Vim contribution (MM)
    +"               2017 Apr 11 - Improved matching of negative numbers (MM)
    +"               2012 Jun 20 - Fixed a block comment highlighting bug (MM)
    +
    +" For version 5.x: Clear all syntax items
    +" For version 6.x: Quit when a syntax file was already loaded
    +if version < 600
    +  syntax clear
    +elseif exists("b:current_syntax") && b:current_syntax == "sexplib"
    +  finish
    +endif
    +
    +" Sexplib is case sensitive.
    +syn case match
    +
    +" Comments
    +syn keyword  sexplibTodo contained TODO FIXME XXX NOTE
    +syn region   sexplibBlockComment matchgroup=sexplibComment start="#|" matchgroup=sexplibComment end="|#" contains=ALLBUT,sexplibQuotedAtom,sexplibUnquotedAtom,sexplibEncl,sexplibComment
    +syn match    sexplibSexpComment "#;" skipwhite skipempty nextgroup=sexplibQuotedAtomComment,sexplibUnquotedAtomComment,sexplibListComment,sexplibComment
    +syn region   sexplibQuotedAtomComment start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
    +syn match    sexplibUnquotedAtomComment /\([^;()" \t#|]\|#[^;()" \t|]\||[^;()" \t#]\)[^;()" \t]*/ contained
    +syn region   sexplibListComment matchgroup=sexplibComment start="(" matchgroup=sexplibComment end=")" contained contains=ALLBUT,sexplibEncl,sexplibString,sexplibQuotedAtom,sexplibUnquotedAtom,sexplibTodo,sexplibNumber,sexplibFloat
    +syn match    sexplibComment ";.*" contains=sexplibTodo
    +
    +" Atoms
    +syn match    sexplibUnquotedAtom /\([^;()" \t#|]\|#[^;()" \t|]\||[^;()" \t#]\)[^;()" \t]*/
    +syn region   sexplibQuotedAtom    start=+"+ skip=+\\\\\|\\"+ end=+"+
    +syn match    sexplibNumber        "-\=\<\d\(_\|\d\)*[l|L|n]\?\>"
    +syn match    sexplibNumber        "-\=\<0[x|X]\(\x\|_\)\+[l|L|n]\?\>"
    +syn match    sexplibNumber        "-\=\<0[o|O]\(\o\|_\)\+[l|L|n]\?\>"
    +syn match    sexplibNumber        "-\=\<0[b|B]\([01]\|_\)\+[l|L|n]\?\>"
    +syn match    sexplibFloat         "-\=\<\d\(_\|\d\)*\.\?\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
    +
    +" Lists
    +syn region   sexplibEncl transparent matchgroup=sexplibEncl start="(" matchgroup=sexplibEncl end=")" contains=ALLBUT,sexplibParenErr
    +
    +" Errors
    +syn match    sexplibUnquotedAtomErr /\([^;()" \t#|]\|#[^;()" \t|]\||[^;()" \t#]\)[^;()" \t]*\(#|\||#\)[^;()" \t]*/
    +syn match    sexplibParenErr ")"
    +
    +" Synchronization
    +syn sync minlines=50
    +syn sync maxlines=500
    +
    +" Define the default highlighting.
    +" For version 5.7 and earlier: only when not done already
    +" For version 5.8 and later: only when an item doesn't have highlighting yet
    +if version >= 508 || !exists("did_sexplib_syntax_inits")
    +  if version < 508
    +    let did_sexplib_syntax_inits = 1
    +    command -nargs=+ HiLink hi link 
    +  else
    +    command -nargs=+ HiLink hi def link 
    +  endif
    +
    +  HiLink sexplibParenErr            Error
    +  HiLink sexplibUnquotedAtomErr     Error
    +
    +  HiLink sexplibComment             Comment
    +  HiLink sexplibSexpComment         Comment
    +  HiLink sexplibQuotedAtomComment   Include
    +  HiLink sexplibUnquotedAtomComment Comment
    +  HiLink sexplibBlockComment        Comment
    +  HiLink sexplibListComment         Comment
    +
    +  HiLink sexplibBoolean             Boolean
    +  HiLink sexplibCharacter           Character
    +  HiLink sexplibNumber              Number
    +  HiLink sexplibFloat               Float
    +  HiLink sexplibUnquotedAtom        Identifier
    +  HiLink sexplibEncl                Identifier
    +  HiLink sexplibQuotedAtom          Keyword
    +
    +  HiLink sexplibTodo                Todo
    +
    +  HiLink sexplibEncl                Keyword
    +
    +  delcommand HiLink
    +endif
    +
    +let b:current_syntax = "sexplib"
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/sgml.vim b/.config/vim/syntax/sgml.vim
    new file mode 100644
    index 0000000..ed8fa8c
    --- /dev/null
    +++ b/.config/vim/syntax/sgml.vim
    @@ -0,0 +1,334 @@
    +" Vim syntax file
    +" Language:	SGML
    +" Maintainer:	Johannes Zellner 
    +" Last Change:	Tue, 27 Apr 2004 15:05:21 CEST
    +" Filenames:	*.sgml,*.sgm
    +" $Id: sgml.vim,v 1.1 2004/06/13 17:52:57 vimboss Exp $
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:sgml_cpo_save = &cpo
    +set cpo&vim
    +
    +syn case match
    +
    +" mark illegal characters
    +syn match sgmlError "[<&]"
    +
    +
    +" unicode numbers:
    +" provide different highlithing for unicode characters
    +" inside strings and in plain text (character data).
    +"
    +" EXAMPLE:
    +"
    +" \u4e88
    +"
    +syn match   sgmlUnicodeNumberAttr    +\\u\x\{4}+ contained contains=sgmlUnicodeSpecifierAttr
    +syn match   sgmlUnicodeSpecifierAttr +\\u+ contained
    +syn match   sgmlUnicodeNumberData    +\\u\x\{4}+ contained contains=sgmlUnicodeSpecifierData
    +syn match   sgmlUnicodeSpecifierData +\\u+ contained
    +
    +
    +" strings inside character data or comments
    +"
    +syn region  sgmlString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=sgmlEntity,sgmlUnicodeNumberAttr display
    +syn region  sgmlString contained start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=sgmlEntity,sgmlUnicodeNumberAttr display
    +
    +" punctuation (within attributes) e.g. 
    +"						^   ^
    +syn match   sgmlAttribPunct +[:.]+ contained display
    +
    +
    +" no highlighting for sgmlEqual (sgmlEqual has no highlighting group)
    +syn match   sgmlEqual +=+
    +
    +
    +" attribute, everything before the '='
    +"
    +" PROVIDES: @sgmlAttribHook
    +"
    +" EXAMPLE:
    +"
    +" 
    +"      ^^^^^^^^^^^^^
    +"
    +syn match   sgmlAttrib
    +    \ +[^-'"<]\@<=\<[a-zA-Z0-9.:]\+\>\([^'">]\@=\|$\)+
    +    \ contained
    +    \ contains=sgmlAttribPunct,@sgmlAttribHook
    +    \ display
    +
    +
    +" UNQUOTED value (not including the '=' -- sgmlEqual)
    +"
    +" PROVIDES: @sgmlValueHook
    +"
    +" EXAMPLE:
    +"
    +" 
    +"		       ^^^^^
    +"
    +syn match   sgmlValue
    +    \ +[^"' =/!?<>][^ =/!?<>]*+
    +    \ contained
    +    \ contains=sgmlEntity,sgmlUnicodeNumberAttr,@sgmlValueHook
    +    \ display
    +
    +
    +" QUOTED value (not including the '=' -- sgmlEqual)
    +"
    +" PROVIDES: @sgmlValueHook
    +"
    +" EXAMPLE:
    +"
    +" 
    +"		       ^^^^^^^
    +" 
    +"		       ^^^^^^^
    +"
    +syn region  sgmlValue contained start=+"+ skip=+\\\\\|\\"+ end=+"+
    +	    \ contains=sgmlEntity,sgmlUnicodeNumberAttr,@sgmlValueHook
    +syn region  sgmlValue contained start=+'+ skip=+\\\\\|\\'+ end=+'+
    +	    \ contains=sgmlEntity,sgmlUnicodeNumberAttr,@sgmlValueHook
    +
    +
    +" value, everything after (and including) the '='
    +" no highlighting!
    +"
    +" EXAMPLE:
    +"
    +" 
    +"		     ^^^^^^^^^
    +" 
    +"		     ^^^^^^^
    +"
    +syn match   sgmlEqualValue
    +    \ +=\s*[^ =/!?<>]\++
    +    \ contained
    +    \ contains=sgmlEqual,sgmlString,sgmlValue
    +    \ display
    +
    +
    +" start tag
    +" use matchgroup=sgmlTag to skip over the leading '<'
    +" see also sgmlEmptyTag below.
    +"
    +" PROVIDES: @sgmlTagHook
    +"
    +syn region   sgmlTag
    +    \ matchgroup=sgmlTag start=+<[^ /!?"']\@=+
    +    \ matchgroup=sgmlTag end=+>+
    +    \ contained
    +    \ contains=sgmlError,sgmlAttrib,sgmlEqualValue,@sgmlTagHook
    +
    +
    +" tag content for empty tags. This is the same as sgmlTag
    +" above, except the `matchgroup=sgmlEndTag for highlighting
    +" the end '/>' differently.
    +"
    +" PROVIDES: @sgmlTagHook
    +"
    +syn region   sgmlEmptyTag
    +    \ matchgroup=sgmlTag start=+<[^ /!?"']\@=+
    +    \ matchgroup=sgmlEndTag end=+/>+
    +    \ contained
    +    \ contains=sgmlError,sgmlAttrib,sgmlEqualValue,@sgmlTagHook
    +
    +
    +" end tag
    +" highlight everything but not the trailing '>' which
    +" was already highlighted by the containing sgmlRegion.
    +"
    +" PROVIDES: @sgmlTagHook
    +" (should we provide a separate @sgmlEndTagHook ?)
    +"
    +syn match   sgmlEndTag
    +    \ +"']\+>+
    +    \ contained
    +    \ contains=@sgmlTagHook
    +
    +
    +" [-- SGML SPECIFIC --]
    +
    +" SGML specific
    +" tag content for abbreviated regions
    +"
    +" PROVIDES: @sgmlTagHook
    +"
    +syn region   sgmlAbbrTag
    +    \ matchgroup=sgmlTag start=+<[^ /!?"']\@=+
    +    \ matchgroup=sgmlTag end=+/+
    +    \ contained
    +    \ contains=sgmlError,sgmlAttrib,sgmlEqualValue,@sgmlTagHook
    +
    +
    +" SGML specific
    +" just highlight the trailing '/'
    +syn match   sgmlAbbrEndTag +/+
    +
    +
    +" SGML specific
    +" abbreviated regions
    +"
    +" No highlighting, highlighting is done by contained elements.
    +"
    +" PROVIDES: @sgmlRegionHook
    +"
    +" EXAMPLE:
    +"
    +" "']\+/\_[^/]\+/+
    +    \ contains=sgmlAbbrTag,sgmlAbbrEndTag,sgmlCdata,sgmlComment,sgmlEntity,sgmlUnicodeNumberData,@sgmlRegionHook
    +
    +" [-- END OF SGML SPECIFIC --]
    +
    +
    +" real (non-empty) elements. We cannot do syntax folding
    +" as in xml, because end tags may be optional in sgml depending
    +" on the dtd.
    +" No highlighting, highlighting is done by contained elements.
    +"
    +" PROVIDES: @sgmlRegionHook
    +"
    +" EXAMPLE:
    +"
    +" 
    +"   
    +"   
    +"   
    +"   some data
    +" 
    +"
    +" SGML specific:
    +" compared to xmlRegion:
    +"   - removed folding
    +"   - added a single '/'in the start pattern
    +"
    +syn region   sgmlRegion
    +    \ start=+<\z([^ /!?>"']\+\)\(\(\_[^/>]*[^/!?]>\)\|>\)+
    +    \ end=++
    +    \ contains=sgmlTag,sgmlEndTag,sgmlCdata,@sgmlRegionCluster,sgmlComment,sgmlEntity,sgmlUnicodeNumberData,@sgmlRegionHook
    +    \ keepend
    +    \ extend
    +
    +
    +" empty tags. Just a container, no highlighting.
    +" Compare this with sgmlTag.
    +"
    +" EXAMPLE:
    +"
    +" 
    +"
    +" TODO use sgmlEmptyTag instead of sgmlTag
    +syn match    sgmlEmptyRegion
    +    \ +<[^ /!?>"']\(\_[^"'<>]\|"\_[^"]*"\|'\_[^']*'\)*/>+
    +    \ contains=sgmlEmptyTag
    +
    +
    +" cluster which contains the above two elements
    +syn cluster sgmlRegionCluster contains=sgmlRegion,sgmlEmptyRegion,sgmlAbbrRegion
    +
    +
    +" &entities; compare with dtd
    +syn match   sgmlEntity		       "&[^; \t]*;" contains=sgmlEntityPunct
    +syn match   sgmlEntityPunct  contained "[&.;]"
    +
    +
    +" The real comments (this implements the comments as defined by sgml,
    +" but not all sgml pages actually conform to it. Errors are flagged.
    +syn region  sgmlComment                start=++ contains=sgmlCommentPart,sgmlString,sgmlCommentError,sgmlTodo
    +syn keyword sgmlTodo         contained TODO FIXME XXX display
    +syn match   sgmlCommentError contained "[^>+
    +    \ contains=sgmlCdataStart,sgmlCdataEnd,@sgmlCdataHook
    +    \ keepend
    +    \ extend
    +" using the following line instead leads to corrupt folding at CDATA regions
    +" syn match    sgmlCdata      ++  contains=sgmlCdataStart,sgmlCdataEnd,@sgmlCdataHook
    +syn match    sgmlCdataStart ++          contained
    +
    +
    +" Processing instructions
    +" This allows "?>" inside strings -- good idea?
    +syn region  sgmlProcessing matchgroup=sgmlProcessingDelim start="" contains=sgmlAttrib,sgmlEqualValue
    +
    +
    +" DTD -- we use dtd.vim here
    +syn region  sgmlDocType matchgroup=sgmlDocTypeDecl start="\c" contains=sgmlDocTypeKeyword,sgmlInlineDTD,sgmlString
    +syn keyword sgmlDocTypeKeyword contained DOCTYPE PUBLIC SYSTEM
    +syn region  sgmlInlineDTD contained start="\[" end="]" contains=@sgmlDTD
    +syn include @sgmlDTD :p:h/dtd.vim
    +
    +
    +" synchronizing
    +" TODO !!! to be improved !!!
    +
    +syn sync match sgmlSyncDT grouphere  sgmlDocType +\_.\(+
    +
    +syn sync match sgmlSync grouphere   sgmlRegion  +\_.\(<[^ /!?>"']\+\)\@=+
    +" syn sync match sgmlSync grouphere  sgmlRegion "<[^ /!?>"']*>"
    +syn sync match sgmlSync groupthere  sgmlRegion  +"']\+>+
    +
    +syn sync minlines=100
    +
    +
    +" The default highlighting.
    +hi def link sgmlTodo			Todo
    +hi def link sgmlTag			Function
    +hi def link sgmlEndTag			Identifier
    +" SGML specific
    +hi def link sgmlAbbrEndTag		Identifier
    +hi def link sgmlEmptyTag		Function
    +hi def link sgmlEntity			Statement
    +hi def link sgmlEntityPunct		Type
    +
    +hi def link sgmlAttribPunct		Comment
    +hi def link sgmlAttrib			Type
    +
    +hi def link sgmlValue			String
    +hi def link sgmlString			String
    +hi def link sgmlComment			Comment
    +hi def link sgmlCommentPart		Comment
    +hi def link sgmlCommentError		Error
    +hi def link sgmlError			Error
    +
    +hi def link sgmlProcessingDelim		Comment
    +hi def link sgmlProcessing		Type
    +
    +hi def link sgmlCdata			String
    +hi def link sgmlCdataCdata		Statement
    +hi def link sgmlCdataStart		Type
    +hi def link sgmlCdataEnd		Type
    +
    +hi def link sgmlDocTypeDecl		Function
    +hi def link sgmlDocTypeKeyword		Statement
    +hi def link sgmlInlineDTD		Function
    +hi def link sgmlUnicodeNumberAttr	Number
    +hi def link sgmlUnicodeSpecifierAttr	SpecialChar
    +hi def link sgmlUnicodeNumberData	Number
    +hi def link sgmlUnicodeSpecifierData	SpecialChar
    +
    +let b:current_syntax = "sgml"
    +
    +let &cpo = s:sgml_cpo_save
    +unlet s:sgml_cpo_save
    +
    +" vim: ts=8
    diff --git a/.config/vim/syntax/sgmldecl.vim b/.config/vim/syntax/sgmldecl.vim
    new file mode 100644
    index 0000000..6c1cde1
    --- /dev/null
    +++ b/.config/vim/syntax/sgmldecl.vim
    @@ -0,0 +1,72 @@
    +" Vim syntax file
    +" Language:	SGML (SGML Declaration )
    +" Last Change: jueves, 28 de diciembre de 2000, 13:51:44 CLST
    +" Maintainer: "Daniel A. Molina W." 
    +" You can modify and maintain this file, in other case send comments
    +" the maintainer email address.
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +let s:keepcpo= &cpo
    +set cpo&vim
    +
    +syn case ignore
    +
    +syn region	sgmldeclDeclBlock	transparent start=++
    +syn region	sgmldeclTagBlock	transparent start=+<+ end=+>+
    +					\ contains=ALLBUT,
    +					\ @sgmlTagError,@sgmlErrInTag
    +syn region	sgmldeclComment		contained start=+--+ end=+--+
    +
    +syn keyword	sgmldeclDeclKeys	SGML CHARSET CAPACITY SCOPE SYNTAX
    +					\ FEATURES
    +
    +syn keyword	sgmldeclTypes		BASESET DESCSET DOCUMENT NAMING DELIM
    +					\ NAMES QUANTITY SHUNCHAR DOCTYPE
    +					\ ELEMENT ENTITY ATTLIST NOTATION
    +					\ TYPE
    +
    +syn keyword	sgmldeclStatem		CONTROLS FUNCTION NAMECASE MINIMIZE
    +					\ LINK OTHER APPINFO REF ENTITIES
    +
    +syn keyword sgmldeclVariables	TOTALCAP GRPCAP ENTCAP DATATAG OMITTAG RANK
    +					\ SIMPLE IMPLICIT EXPLICIT CONCUR SUBDOC FORMAL ATTCAP
    +					\ ATTCHCAP AVGRPCAP ELEMCAP ENTCHCAP IDCAP IDREFCAP
    +					\ SHORTTAG
    +
    +syn match	sgmldeclNConst		contained +[0-9]\++
    +
    +syn region	sgmldeclString		contained start=+"+ end=+"+
    +
    +syn keyword	sgmldeclBool		YES NO
    +
    +syn keyword	sgmldeclSpecial		SHORTREF SGMLREF UNUSED NONE GENERAL
    +					\ SEEALSO ANY
    +
    +syn sync lines=250
    +
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link sgmldeclDeclKeys	Keyword
    +hi def link sgmldeclTypes		Type
    +hi def link sgmldeclConst		Constant
    +hi def link sgmldeclNConst		Constant
    +hi def link sgmldeclString		String
    +hi def link sgmldeclDeclBlock	Normal
    +hi def link sgmldeclBool		Boolean
    +hi def link sgmldeclSpecial		Special
    +hi def link sgmldeclComment		Comment
    +hi def link sgmldeclStatem		Statement
    +hi def link sgmldeclVariables	Type
    +
    +
    +let b:current_syntax = "sgmldecl"
    +
    +let &cpo = s:keepcpo
    +unlet s:keepcpo
    +
    +" vim:set tw=78 ts=4:
    diff --git a/.config/vim/syntax/sgmllnx.vim b/.config/vim/syntax/sgmllnx.vim
    new file mode 100644
    index 0000000..ccd78f4
    --- /dev/null
    +++ b/.config/vim/syntax/sgmllnx.vim
    @@ -0,0 +1,54 @@
    +" Vim syntax file
    +" Language:	SGML-linuxdoc (supported by old sgmltools-1.x)
    +" Maintainer:	SungHyun Nam 
    +" Last Change:	2013 May 13
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +syn case ignore
    +
    +" tags
    +syn region sgmllnxEndTag	start=++	contains=sgmllnxTagN,sgmllnxTagError
    +syn region sgmllnxTag	start=+<[^/]+ end=+>+	contains=sgmllnxTagN,sgmllnxTagError
    +syn match  sgmllnxTagN	contained +<\s*[-a-zA-Z0-9]\++ms=s+1	contains=sgmllnxTagName
    +syn match  sgmllnxTagN	contained ++
    +syn region sgmllnxDocType start=++
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link sgmllnxTag2	    Function
    +hi def link sgmllnxTagN2	    Function
    +hi def link sgmllnxTag	    Special
    +hi def link sgmllnxEndTag	    Special
    +hi def link sgmllnxParen	    Special
    +hi def link sgmllnxEntity	    Type
    +hi def link sgmllnxDocEnt	    Type
    +hi def link sgmllnxTagName	    Statement
    +hi def link sgmllnxComment	    Comment
    +hi def link sgmllnxSpecial	    Special
    +hi def link sgmllnxDocType	    PreProc
    +hi def link sgmllnxTagError    Error
    +
    +
    +let b:current_syntax = "sgmllnx"
    +
    +" vim:set tw=78 ts=8 sts=2 sw=2 noet:
    diff --git a/.config/vim/syntax/sh.vim b/.config/vim/syntax/sh.vim
    new file mode 100644
    index 0000000..5cf4930
    --- /dev/null
    +++ b/.config/vim/syntax/sh.vim
    @@ -0,0 +1,995 @@
    +" Vim syntax file
    +" Language:		shell (sh) Korn shell (ksh) bash (sh)
    +" Maintainer:		This runtime file is looking for a new maintainer.
    +" Previous Maintainers:	Charles E. Campbell
    +" 		Lennart Schultz 
    +" Last Change:		2024 Mar 04 by Vim Project {{{1
    +"		2024 Nov 03 by Aliaksei Budavei <0x000c70 AT gmail DOT com> improved bracket expressions, #15941
    +"		2025 Jan 06 add $PS0 to bashSpecialVariables #16394
    +"		2025 Jan 18 add bash coproc, remove duplicate syn keywords #16467
    +"		2025 Mar 21 update shell capability detection #16939
    +"		2025 Apr 03 command substitution opening paren at EOL #17026
    +"		2025 Apr 10 improve shell detection #17084
    +"		2025 Apr 29 match escaped chars in test operands #17221
    +"		2025 May 06 improve single-quote string matching in parameter expansions
    +"		2025 May 06 match KornShell compound arrays
    +"		2025 May 10 improve wildcard character class lists
    +"		2025 May 21 improve supported KornShell features
    +"		2025 Jun 16 change how sh_fold_enabled is reset #17557
    +"		2025 Jul 18 properly delete :commands #17785
    +"		2025 Aug 23 bash: add support for ${ cmd;} and ${|cmd;} #18084
    +"		2025 Sep 23 simplify ksh logic, update sh statements #18355
    +" }}}
    +" Version:		208
    +" Former URL:		http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
    +" For options and settings, please use:      :help ft-sh-syntax
    +" This file includes many ideas from Eric Brunet (eric.brunet@ens.fr) and heredoc fixes from Felipe Contreras
    +
    +" quit when a syntax file was already loaded {{{1
    +if exists("b:current_syntax")
    +    finish
    +endif
    +
    +" Ensure this is set unless we find another shell
    +let b:is_sh = 1
    +
    +" If the shell script itself specifies which shell to use, use it
    +let s:shebang = getline(1)
    +
    +if s:shebang =~ '^#!.\{-2,}\'
    +    " The binary is too ambiguous (i.e. '/bin/ksh' or some such).
    +    let b:is_kornshell = 1
    +    let b:generic_korn = 1
    +elseif s:shebang =~ '^#!.\{-2,}\'
    +    " ksh93u+ (or 93u-) release (still much too common to encounter)
    +    let b:is_kornshell = 1
    +    let b:is_ksh93u = 1
    +elseif s:shebang =~ '^#!.\{-2,}\'
    +    " ksh93v- alpha or beta
    +    let b:is_kornshell = 1
    +    let b:is_ksh93v = 1
    +elseif s:shebang =~ '^#!.\{-2,}\'
    +    " Could be any ksh93 release
    +    let b:is_kornshell = 1
    +    let b:is_ksh93 = 1
    +elseif s:shebang =~ '^#!.\{-2,}\'
    +    let b:is_kornshell = 1
    +    let b:is_ksh2020 = 1
    +elseif s:shebang =~ '^#!.\{-2,}\'
    +    " The actual AT&T ksh88 and its feature set is assumed.
    +    let b:is_kornshell = 1
    +    let b:is_ksh88 = 1
    +elseif s:shebang =~ '^#!.\{-2,}\'
    +    " MirBSD Korn Shell
    +    let b:is_kornshell = 1
    +    let b:is_mksh = 1
    +elseif s:shebang =~ '^#!.\{-2,}\'
    +    let b:is_bash      = 1
    +elseif s:shebang =~ '^#!.\{-2,}\'
    +    let b:is_dash      = 1
    +" handling /bin/sh with is_kornshell/is_sh {{{1
    +" b:is_sh will be set when "#! /bin/sh" is found;
    +" However, it often is just a masquerade by bash (typically Linux)
    +" or kornshell (typically workstations with Posix "sh").
    +" So, when the user sets "g:is_kornshell", "g:is_bash",
    +" "g:is_posix" or "g:is_dash", a b:is_sh is converted into
    +" b:is_kornshell/b:is_bash/b:is_posix/b:is_dash, respectively.
    +elseif !exists("b:is_kornshell") && !exists("b:is_bash") && !exists("b:is_posix") && !exists("b:is_dash")
    +    if exists("g:is_kornshell")
    +        let b:is_kornshell= 1
    +        let b:generic_korn = 1
    +    elseif exists("g:is_bash")
    +        let b:is_bash= 1
    +    elseif exists("g:is_dash")
    +        let b:is_dash= 1
    +    elseif exists("g:is_posix")
    +        let b:is_posix= 1
    +    elseif exists("g:is_sh")
    +        let b:is_sh= 1
    +    else
    +        " user did not specify which shell to use, and
    +        " the script itself does not specify which shell to use. FYI: /bin/sh is ambiguous.
    +        " Assuming /bin/sh is executable, and if its a link, find out what it links to.
    +        let s:shell = ""
    +        if executable("/bin/sh")
    +            let s:shell = resolve("/bin/sh")
    +        elseif executable("/usr/bin/sh")
    +            let s:shell = resolve("/usr/bin/sh")
    +        endif
    +        if s:shell =~ '\'
    +            " The binary is too ambiguous (i.e. '/bin/ksh' or some such).
    +            let b:is_kornshell = 1
    +            let b:generic_korn = 1
    +        elseif s:shell =~ '\'
    +            " ksh93u+ (or 93u-) release (still much too common to encounter)
    +            let b:is_kornshell = 1
    +            let b:is_ksh93u = 1
    +        elseif s:shell =~ '\'
    +            " ksh93v- alpha or beta
    +            let b:is_kornshell = 1
    +            let b:is_ksh93v = 1
    +        elseif s:shell =~ '\'
    +            " Could be any ksh93 release
    +            let b:is_kornshell = 1
    +            let b:is_ksh93 = 1
    +        elseif s:shebang =~ '\'
    +            let b:is_kornshell = 1
    +            let b:is_ksh2020 = 1
    +        elseif s:shell =~ '\'
    +            " The actual AT&T ksh88 and its feature set is assumed.
    +            let b:is_kornshell = 1
    +            let b:is_ksh88 = 1
    +        elseif s:shell =~ '\'
    +            " MirBSD Korn Shell
    +            let b:is_kornshell = 1
    +            let b:is_mksh = 1
    +        elseif s:shell =~ '\'
    +            let b:is_bash = 1
    +        elseif s:shell =~ '\'
    +            let b:is_dash = 1
    +        else
    +            let b:is_posix = 1
    +        endif
    +        unlet s:shell
    +    endif
    +endif
    +
    +unlet s:shebang
    +
    +" if b:is_dash, set b:is_posix too
    +if exists("b:is_dash")
    +    let b:is_posix= 1
    +endif
    +
    +if exists("b:is_kornshell") || exists("b:is_bash")
    +    if exists("b:is_sh")
    +        unlet b:is_sh
    +    endif
    +endif
    +
    +" set up default g:sh_fold_enabled {{{1
    +" ================================
    +if !exists("g:sh_fold_enabled")
    +    let g:sh_fold_enabled= 0
    +elseif g:sh_fold_enabled != 0 && !has("folding")
    +    echomsg "Ignoring g:sh_fold_enabled=".g:sh_fold_enabled."; need to re-compile vim for +fold support"
    +    let g:sh_fold_enabled= 0
    +endif
    +let s:sh_fold_functions= and(g:sh_fold_enabled,1)
    +let s:sh_fold_heredoc  = and(g:sh_fold_enabled,2)
    +let s:sh_fold_ifdofor  = and(g:sh_fold_enabled,4)
    +if g:sh_fold_enabled && &fdm == "manual"
    +    " Given that	the	user provided g:sh_fold_enabled
    +    " 	AND	g:sh_fold_enabled is manual (usual default)
    +    " 	implies	a desire for syntax-based folding
    +    setl fdm=syntax
    +endif
    +
    +" set up the syntax-highlighting for iskeyword
    +if (v:version == 704 && has("patch-7.4.1142")) || v:version > 704
    +    if !exists("g:sh_syntax_isk") || (exists("g:sh_syntax_isk") && g:sh_syntax_isk)
    +        if exists("b:is_bash")
    +            exe "syn iskeyword ".&iskeyword.",-,:"
    +        else
    +            exe "syn iskeyword ".&iskeyword.",-"
    +        endif
    +    endif
    +endif
    +
    +" Set up folding commands for shell {{{1
    +" =================================
    +if exists(":ShFoldFunctions") == 2
    +    delc ShFoldFunctions
    +endif
    +if exists(":ShFoldIfHereDoc") == 2
    +    delc ShFoldHereDoc
    +endif
    +if exists(":ShFoldIfDoFor") == 2
    +    delc ShFoldIfDoFor
    +endif
    +if s:sh_fold_functions
    +    com! -nargs=* ShFoldFunctions  fold
    +else
    +    com! -nargs=* ShFoldFunctions 
    +endif
    +if s:sh_fold_heredoc
    +    com! -nargs=* ShFoldHereDoc  fold
    +else
    +    com! -nargs=* ShFoldHereDoc 
    +endif
    +if s:sh_fold_ifdofor
    +    com! -nargs=* ShFoldIfDoFor  fold
    +else
    +    com! -nargs=* ShFoldIfDoFor 
    +endif
    +
    +" Generate bracket expression items {{{1
    +" =================================
    +" Note that the following function can be invoked as many times as necessary
    +" provided that these constraints hold for the passed dictionary argument:
    +" - every time a unique group-name value is assigned to the "itemGroup" key;
    +" - only ONCE either the "extraArgs" key is not entered or it is entered and
    +"   its value does not have "contained" among other optional arguments (":help
    +"   :syn-arguments").
    +fun! s:GenerateBracketExpressionItems(dict) abort
    +    let itemGroup = a:dict.itemGroup
    +    let bracketGroup = a:dict.bracketGroup
    +    let invGroup = itemGroup . 'Inv'
    +    let skipLeftBracketGroup = itemGroup . 'SkipLeftBracket'
    +    let skipRightBracketGroup = itemGroup . 'SkipRightBracket'
    +    let extraArgs = has_key(a:dict, 'extraArgs') ? a:dict.extraArgs : ''
    +
    +    " Make the leading "[!^]" stand out in a NON-matching expression.
    +    exec 'syn match ' . invGroup . ' contained "\[\@<=[!^]"'
    +
    +    " Set up indirections for unbalanced-bracket highlighting.
    +    exec 'syn region ' . skipRightBracketGroup . ' contained matchgroup=' . bracketGroup . ' start="\[\%([!^]\=\\\=\]\)\@=" matchgroup=shCollSymb end="\[\.[^]]\{-}\][^]]\{-}\.\]" matchgroup=' . itemGroup . ' end="\]" contains=@shBracketExprList,shDoubleQuote,' . invGroup
    +    exec 'syn region ' . skipLeftBracketGroup . ' contained matchgroup=' . bracketGroup . ' start="\[\%([!^]\=\\\=\]\)\@=" skip="[!^]\=\\\=\]\%(\[[^]]\+\]\|[^]]\)\{-}\%(\[[:.=]\@!\)\@=" matchgroup=' . itemGroup . ' end="\[[:.=]\@!" contains=@shBracketExprList,shDoubleQuote,' . invGroup
    +
    +    " Look for a general matching expression.
    +    exec 'syn region ' . itemGroup . ' matchgroup=' . bracketGroup . ' start="\[\S\@=" end="\]" contains=@shBracketExprList,shDoubleQuote ' . extraArgs
    +    " Look for a general NON-matching expression.
    +    exec 'syn region ' . itemGroup . ' matchgroup=' . bracketGroup . ' start="\[[!^]\@=" end="\]" contains=@shBracketExprList,shDoubleQuote,' . invGroup . ' ' . extraArgs
    +
    +    " Accommodate unbalanced brackets in bracket expressions.  The supported
    +    " syntax for a plain "]" can be: "[]ws]" and "[^]ws]"; or, "[ws[.xs]ys.]zs]"
    +    " and "[^ws[.xs]ys.]zs]"; see §9.3.5 RE Bracket Expression (in XBD).
    +    exec 'syn region ' . itemGroup . ' matchgroup=NONE start="\[[!^]\=\\\=\]" matchgroup=' . bracketGroup . ' end="\]" contains=@shBracketExprList,shDoubleQuote,' . skipRightBracketGroup . ' ' . extraArgs
    +    " Strive to handle "[]...[]" etc.
    +    exec 'syn region ' . itemGroup . ' matchgroup=NONE start="\[[!^]\=\\\=\]\%(\[[^]]\+\]\|[^]]\)\{-}\[[:.=]\@!" matchgroup=' . bracketGroup . ' end="\]" contains=@shBracketExprList,shDoubleQuote,' . skipLeftBracketGroup . ' ' . extraArgs
    +
    +    if !exists("g:skip_sh_syntax_inits")
    +        exec 'hi def link ' . skipLeftBracketGroup . ' ' . itemGroup
    +        exec 'hi def link ' . skipRightBracketGroup . ' ' . itemGroup
    +        exec 'hi def link ' . invGroup . ' Underlined'
    +    endif
    +endfun
    +
    +call s:GenerateBracketExpressionItems({'itemGroup': 'shBracketExpr', 'bracketGroup': 'shBracketExprDelim'})
    +
    +" sh syntax is case sensitive {{{1
    +syn case match
    +
    +" Clusters: contains=@... clusters {{{1
    +"==================================
    +syn cluster shErrorList	contains=shDoError,shIfError,shInError,shCaseError,shEsacError,shCurlyError,shParenError,shTestError,shOK
    +if exists("b:is_kornshell") || exists("b:is_bash")
    +    syn cluster ErrorList add=shDTestError
    +endif
    +syn cluster shArithParenList	contains=shArithmetic,shArithParen,shCaseEsac,shComment,shDeref,shDerefVarArray,shDo,shDerefSimple,shEcho,shEscape,shExpr,shNumber,shOperator,shPosnParm,shExSingleQuote,shExDoubleQuote,shHereString,shRedir,shSingleQuote,shDoubleQuote,shStatement,shVariable,shAlias,shTest,shCtrlSeq,shSpecial,shParen,bashSpecialVariables,bashStatement,shIf,shFor,shFunctionKey,shFunctionOne,shFunctionTwo
    +syn cluster shArithList	contains=@shArithParenList,shParenError
    +syn cluster shBracketExprList	contains=shCharClassOther,shCharClass,shCollSymb,shEqClass
    +syn cluster shCaseEsacList	contains=shCaseStart,shCaseLabel,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shCtrlSeq,@shErrorList,shStringSpecial,shCaseRange
    +syn cluster shCaseList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSubBQ,shSubshare,shValsub,shComment,shDblBrace,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shHereString,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq
    +if exists("b:is_kornshell") || exists("b:is_bash")
    +    syn cluster shCaseList	add=shForPP,shDblParen
    +endif
    +syn cluster shCommandSubList	contains=shAlias,shArithmetic,shBracketExpr,shCmdParenRegion,shCommandSub,shComment,shCtrlSeq,shDeref,shDerefSimple,shDoubleQuote,shEcho,shEscape,shExDoubleQuote,shExpr,shExSingleQuote,shHereDoc,shNumber,shOperator,shOption,shPosnParm,shHereString,shRedir,shSingleQuote,shSpecial,shStatement,shSubSh,shTest,shVariable
    +syn cluster shCurlyList	contains=shNumber,shComma,shDeref,shDerefSimple,shDerefSpecial
    +" COMBAK: removing shEscape from shDblQuoteList fails ksh04:43 -- Jun 09, 2022: I don't see the problem with ksh04, so am reinstating shEscape
    +syn cluster shDblQuoteList	contains=shArithmetic,shCommandSub,shCommandSubBQ,shSubshare,shValsub,shDeref,shDerefSimple,shEscape,shPosnParm,shCtrlSeq,shSpecial,shSpecialDQ
    +syn cluster shDerefList	contains=shDeref,shDerefSimple,shDerefVar,shDerefSpecial,shDerefWordError,shDerefPSR,shDerefPPS
    +syn cluster shDerefVarList	contains=shDerefOffset,shDerefOp,shDerefVarArray,shDerefOpError
    +syn cluster shEchoList	contains=shArithmetic,shBracketExpr,shCommandSub,shCommandSubBQ,shDerefVarArray,shSubshare,shValsub,shDeref,shDerefSimple,shEscape,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shCtrlSeq,shEchoQuote
    +syn cluster shExprList1	contains=shBracketExpr,shNumber,shOperator,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shDblBrace,shDeref,shDerefSimple,shCtrlSeq
    +syn cluster shExprList2	contains=@shExprList1,@shCaseList,shTest
    +syn cluster shFunctionList	contains=shBracketExpr,@shCommandSubList,shCaseEsac,shColon,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shOption,shHereString,shRedir,shSetList,shSource,shStatement,shVariable,shOperator,shCtrlSeq
    +if exists("b:is_kornshell") || exists("b:is_bash")
    +    syn cluster shFunctionList	add=shRepeat,shDblBrace,shDblParen,shForPP
    +    syn cluster shDerefList	add=shCommandSubList,shEchoDeref
    +endif
    +syn cluster shHereBeginList	contains=@shCommandSubList
    +syn cluster shHereList	contains=shBeginHere,shHerePayload
    +syn cluster shHereListDQ	contains=shBeginHere,@shDblQuoteList,shHerePayload
    +syn cluster shIdList	contains=shArithmetic,shCommandSub,shCommandSubBQ,shDerefVarArray,shSubshare,shValsub,shWrapLineOperator,shSetOption,shComment,shDeref,shDerefSimple,shHereString,shNumber,shOperator,shRedir,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shCtrlSeq,shStringSpecial,shAtExpr
    +syn cluster shIfList	contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey,shFunctionOne,shFunctionTwo
    +syn cluster shLoopList	contains=@shCaseList,@shErrorList,shCaseEsac,shConditional,shDblBrace,shExpr,shFor,shIf,shOption,shSet,shTest,shTestOpr,shTouch
    +if exists("b:is_kornshell") || exists("b:is_bash")
    +    syn cluster shLoopList	add=shForPP,shDblParen
    +endif
    +syn cluster shPPSLeftList	contains=shAlias,shArithmetic,shBracketExpr,shCmdParenRegion,shCommandSub,shSubshare,shValsub,shCtrlSeq,shDeref,shDerefSimple,shDoubleQuote,shEcho,shEscape,shExDoubleQuote,shExpr,shExSingleQuote,shHereDoc,shNumber,shOperator,shOption,shPosnParm,shHereString,shRedir,shSingleQuote,shSpecial,shStatement,shSubSh,shTest,shVariable
    +syn cluster shPPSRightList	contains=shDeref,shDerefSimple,shEscape,shPosnParm
    +syn cluster shSubShList	contains=shBracketExpr,@shCommandSubList,shCommandSubBQ,shSubshare,shValsub,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shIf,shHereString,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq,shOperator
    +syn cluster shTestList	contains=shArithmetic,shBracketExpr,shCommandSub,shCommandSubBQ,shSubshare,shValsub,shCtrlSeq,shDeref,shDerefSimple,shDoubleQuote,shSpecialDQ,shExDoubleQuote,shExpr,shExSingleQuote,shNumber,shOperator,shSingleQuote,shTest,shTestOpr
    +syn cluster shNoZSList	contains=shSpecialNoZS
    +syn cluster shForList	contains=shTestOpr,shNumber,shDerefSimple,shDeref,shCommandSub,shCommandSubBQ,shSubshare,shValsub,shArithmetic
    +
    +" Echo: {{{1
    +" ====
    +" This one is needed INSIDE a CommandSub, so that `echo bla` be correct
    +if (exists("b:is_kornshell") && !exists("b:is_ksh88"))
    +    syn region shEcho matchgroup=shStatement start="\"  skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`}]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 end="\ze[ \t\n;]}" contains=@shEchoList skipwhite nextgroup=shQuickComment
    +    syn region shEcho matchgroup=shStatement start="\" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`}]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 end="\ze[ \t\n;]}" contains=@shEchoList skipwhite nextgroup=shQuickComment
    +else
    +    syn region shEcho matchgroup=shStatement start="\"  skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=@shEchoList skipwhite nextgroup=shQuickComment
    +    syn region shEcho matchgroup=shStatement start="\" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=@shEchoList skipwhite nextgroup=shQuickComment
    +endif
    +if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix")
    +    syn region shEchoDeref contained matchgroup=shStatement start="\"  skip="\\$" matchgroup=shEchoDelim end="$" end="[<>;&|()`}]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=@shEchoList skipwhite nextgroup=shQuickComment
    +    syn region shEchoDeref contained matchgroup=shStatement start="\" skip="\\$" matchgroup=shEchoDelim end="$" end="[<>;&|()`}]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=@shEchoList skipwhite nextgroup=shQuickComment
    +endif
    +syn match  shEchoQuote contained	'\%(\\\\\)*\\["`'()]'
    +
    +" This must be after the strings, so that ... \" will be correct
    +syn region shEmbeddedEcho contained matchgroup=shStatement start="\" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|`)]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=shBracketExpr,shNumber,shExSingleQuote,shSingleQuote,shDeref,shDerefSimple,shSpecialVar,shOperator,shExDoubleQuote,shDoubleQuote,shCtrlSeq
    +
    +" Alias: {{{1
    +" =====
    +if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix")
    +    syn match shStatement "\"
    +    syn region shAlias matchgroup=shStatement start="\\s\+\(\h[-._[:alnum:]]*\)\@="  skip="\\$" end="\>\|`"
    +    syn region shAlias matchgroup=shStatement start="\\s\+\(\h[-._[:alnum:]]*=\)\@=" skip="\\$" end="="
    +
    +    " Touch: {{{1
    +    " =====
    +    syn match shTouch	'\[^;#]*'	skipwhite nextgroup=shComment contains=shTouchCmd,shDoubleQuote,shSingleQuote,shDeref,shDerefSimple
    +    syn match shTouchCmd	'\'		contained
    +endif
    +
    +" Error Codes: {{{1
    +" ============
    +if !exists("g:sh_no_error")
    +    syn match   shDoError "\"
    +    syn match   shIfError "\"
    +    syn match   shInError "\"
    +    syn match   shCaseError ";;"
    +    syn match   shEsacError "\"
    +    syn match   shCurlyError "}"
    +    syn match   shParenError ")"
    +    syn match   shOK	'\.\(done\|fi\|in\|esac\)'
    +    if exists("b:is_kornshell") || exists("b:is_bash")
    +        syn match     shDTestError "]]"
    +    endif
    +    syn match     shTestError "]"
    +endif
    +
    +" Options: {{{1
    +" ====================
    +syn match   shOption	"\s\zs[-+][-_a-zA-Z#@]\+"
    +syn match   shOption	"\s\zs--[^ \t$=`'"|);]\+"
    +
    +" File Redirection Highlighted As Operators: {{{1
    +"===========================================
    +syn match      shRedir	"\d\=>\(&[-0-9]\)\="
    +syn match      shRedir	"\d\=>>-\="
    +syn match      shRedir	"\d\=<\(&[-0-9]\)\="
    +syn match      shRedir	"\d<<-\="
    +
    +" Operators: {{{1
    +" ==========
    +syn match   shOperator	"<<\|>>"		contained
    +syn match   shOperator	"[!&;|]"		contained
    +syn match   shOperator	"[-=/*+%]\=="		skipwhite nextgroup=shPattern
    +syn match   shPattern	"\<\S\+\())\)\@="	contained contains=shExSingleQuote,shSingleQuote,shExDoubleQuote,shDoubleQuote,shDeref
    +
    +" Subshells: {{{1
    +" ==========
    +syn region shExpr  transparent matchgroup=shExprRegion  start="{" end="}"		contains=@shExprList2 nextgroup=shSpecialNxt
    +syn region shSubSh transparent matchgroup=shSubShRegion start="[^(]\zs(" end=")"	contains=@shSubShList nextgroup=shSpecialNxt
    +
    +" Tests: {{{1
    +"=======
    +syn region shExpr	matchgroup=shRange start="\[\s\@=" skip=+\\\\\|\\$\|\[+ end="\]" contains=@shTestList,shSpecial
    +syn region shTest	transparent matchgroup=shStatement start="\+ end="\<;\_s*then\>" end="\"	contains=@shIfList
    +ShFoldIfDoFor syn region shFor		matchgroup=shLoop start="\#\="
    +syn match   shNumber	"\<-\=\.\=\d\+\>#\="
    +syn match   shCtrlSeq	"\\\d\d\d\|\\[abcfnrtv0]"			contained
    +if exists("b:is_bash") || exists("b:is_kornshell")
    +    syn match   shSpecial	"[^\\]\(\\\\\)*\zs\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[abefnrtv]"	contained
    +    syn match   shSpecial	"^\(\\\\\)*\zs\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[abefnrtv]"	contained
    +    syn region  shExSingleQuote	matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial,shSpecial		nextgroup=shSpecialNxt
    +    syn region  shExDoubleQuote	matchgroup=shQuote start=+\$"+ skip=+\\\\\|\\.\|\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,shSpecial	nextgroup=shSpecialNxt
    +elseif !exists("g:sh_no_error")
    +    syn region  shExSingleQuote	matchGroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial
    +    syn region  shExDoubleQuote	matchGroup=Error start=+\$"+ skip=+\\\\\|\\.+ end=+"+	contains=shStringSpecial
    +endif
    +syn region  shSingleQuote	matchgroup=shQuote start=+'+ end=+'+		contains=@Spell	nextgroup=shSpecialStart,shSpecialSQ
    +syn region  shDoubleQuote	matchgroup=shQuote start=+\%(\%(\\\\\)*\\\)\@"
    +else
    +    syn keyword	shTodo	contained		COMBAK FIXME TODO XXX
    +endif
    +syn match	shComment		"^\s*\zs#.*$"	contains=@shCommentGroup
    +syn match	shComment		"\s\zs#.*$"	contains=@shCommentGroup
    +syn match	shComment	contained	"#.*$"	contains=@shCommentGroup
    +syn match	shQuickComment	contained	"#.*$"          contains=@shCommentGroup
    +syn match	shBQComment	contained	"#.\{-}\ze`"	contains=@shCommentGroup
    +
    +" Here Documents: {{{1
    +"  (modified by Felipe Contreras)
    +" =========================================
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc01 start="<<\s*\z([^ \t|>]\+\)"		matchgroup=shHereDoc01 end="^\z1$"	contains=@shDblQuoteList
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc02 start="<<-\s*\z([^ \t|>]\+\)"		matchgroup=shHereDoc02 end="^\t*\z1$"	contains=@shDblQuoteList
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc03 start="<<\s*\\\z([^ \t|>]\+\)"		matchgroup=shHereDoc03 end="^\z1$"
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc04 start="<<-\s*\\\z([^ \t|>]\+\)"		matchgroup=shHereDoc04 end="^\t*\z1$"
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc05 start="<<\s*'\z([^']\+\)'"		matchgroup=shHereDoc05 end="^\z1$"
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc06 start="<<-\s*'\z([^']\+\)'"		matchgroup=shHereDoc06 end="^\t*\z1$"
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc07 start="<<\s*\"\z([^"]\+\)\""		matchgroup=shHereDoc07 end="^\z1$"
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc08 start="<<-\s*\"\z([^"]\+\)\""		matchgroup=shHereDoc08 end="^\t*\z1$"
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc09 start="<<\s*\\\_$\_s*\z([^ \t|>]\+\)"		matchgroup=shHereDoc09 end="^\z1$"	contains=@shDblQuoteList
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc10 start="<<-\s*\\\_$\_s*\z([^ \t|>]\+\)"	matchgroup=shHereDoc10 end="^\t*\z1$"	contains=@shDblQuoteList
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc11 start="<<\s*\\\_$\_s*\\\z([^ \t|>]\+\)"	matchgroup=shHereDoc11 end="^\z1$"
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc12 start="<<-\s*\\\_$\_s*\\\z([^ \t|>]\+\)"	matchgroup=shHereDoc12 end="^\t*\z1$"
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc13 start="<<\s*\\\_$\_s*'\z([^']\+\)'"		matchgroup=shHereDoc13 end="^\z1$"
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc14 start="<<-\s*\\\_$\_s*'\z([^']\+\)'"		matchgroup=shHereDoc14 end="^\t*\z1$"
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc15 start="<<\s*\\\_$\_s*\"\z([^"]\+\)\""		matchgroup=shHereDoc15 end="^\z1$"
    +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc16 start="<<-\s*\\\_$\_s*\"\z([^"]\+\)\""	matchgroup=shHereDoc16 end="^\t*\z1$"
    +
    +
    +" Here Strings: {{{1
    +" =============
    +" available for: bash and ksh (except ksh88) but not if its a posix
    +if exists("b:is_bash") || ((exists("b:is_kornshell") && !exists("b:is_ksh88")) && !exists("b:is_posix"))
    +    syn match shHereString "<<<"	skipwhite	nextgroup=shCmdParenRegion
    +endif
    +
    +" Identifiers: {{{1
    +"=============
    +syn match  shSetOption	"\s\zs[-+][a-zA-Z0-9]\+\>"	contained
    +syn match  shVariable	"\<\h\w*\ze="			nextgroup=shVarAssign
    +if exists("b:is_bash")
    +    " The subscript form for array values, e.g. "foo=([2]=10 [4]=100)".
    +    syn region  shArrayValue	contained	start="\[\%(..\{-}\]=\)\@=" end="\]=\@="	contains=@shArrayValueList nextgroup=shVarAssign
    +    syn cluster shArrayValueList	contains=shArithmetic,shArithParen,shCommandSub,shDeref,shDerefSimple,shExpr,shNumber,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shSpecial,shParen,bashSpecialVariables,shParenError
    +    syn region  shArrayRegion	contained matchgroup=shShellVariables start="(" skip='\\\\\|\\.' end=")" contains=@shArrayValueList,shArrayValue,shComment
    +elseif (exists("b:is_kornshell") && !exists("b:is_ksh88"))
    +    " The subscript form for array values, e.g. "foo=([2]=10 [4]=100)".
    +    syn region  shArrayValue	contained	start="\[\%(..\{-}\]=\)\@=" end="\]=\@="	contains=@shArrayValueList nextgroup=shVarAssign
    +    syn cluster shArrayValueList	contains=shArithmetic,shArithParen,shCommandSub,shDeref,shDerefSimple,shExpr,shNumber,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shSpecial,shParen,kshSpecialVariables,shParenError
    +    syn region  shArrayRegion	contained matchgroup=shShellVariables start="(" skip='\\\\\|\\.' end=")" contains=@shArrayValueList,shArrayValue,shComment,shArrayRegion
    +endif
    +if exists("b:is_bash") || exists("b:is_kornshell")
    +    syn match shVariable	"\<\h\w*\%(\[..\{-}\]\)\=\ze\%([|^&*/%+-]\|[<^]<\|[>^]>\)\=="	contains=shDerefVarArray nextgroup=shVarAssign
    +    syn match shVarAssign	contained	"\%([|^&*/%+-]\|[<^]<\|[>^]>\)\=="	nextgroup=shArrayRegion,shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote,shVar
    +else
    +    syn match  shVarAssign	contained	"="	nextgroup=shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote,shVar
    +endif
    +syn match  shVar	contained	"\h\w*"
    +syn region shAtExpr	contained	start="@(" end=")" contains=@shIdList
    +if exists("b:is_bash")
    +    syn match  shSet "^\s*set\ze\s\+$"
    +    syn region shSetList oneline matchgroup=shSet start="\<\%(declare\|local\|export\)\>\ze[/a-zA-Z_]\@!" end="$"		matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+#\|="	contains=@shIdList
    +    syn region shSetList oneline matchgroup=shSet start="\<\%(set\|unset\)\>[/a-zA-Z_]\@!" end="\ze[;|#)]\|$"		matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+="	contains=@shIdList nextgroup=shComment
    +elseif exists("b:is_kornshell") || exists("b:is_posix")
    +    syn match  shSet "^\s*set\ze\s\+$"
    +    if exists("b:is_dash")
    +        syn region shSetList oneline matchgroup=shSet start="\<\%(local\)\>\ze[/]\@!" end="$"			matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]"	contains=@shIdList
    +        syn keyword shStatement chdir
    +    endif
    +    syn region shSetList oneline matchgroup=shSet start="\<\(export\)\>\ze[/]\@!" end="$"			matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]"	contains=@shIdList
    +    syn region shSetList oneline matchgroup=shSet start="\<\%(set\|unset\>\)\ze[/a-zA-Z_]\@!" end="\ze[;|#)]\|$"		matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]"	contains=@shIdList nextgroup=shComment
    +else
    +    syn region shSetList oneline matchgroup=shSet start="\<\(set\|export\|unset\)\>\ze[/a-zA-Z_]\@!" end="\ze[;|#)]\|$"	matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]"	contains=@shIdList
    +endif
    +
    +" KornShell namespace: {{{1
    +if exists("b:is_kornshell") && !exists("b:is_ksh88") && !exists("b:is_mksh")
    +    syn keyword shFunctionKey namespace skipwhite skipnl nextgroup=shFunctionTwo
    +endif
    +
    +" Functions: {{{1
    +if !exists("b:is_posix")
    +    syn keyword shFunctionKey function	skipwhite skipnl nextgroup=shFunctionTwo
    +endif
    +
    +if exists("b:is_bash")
    +    syn keyword shFunctionKey coproc
    +    ShFoldFunctions syn region shFunctionOne	matchgroup=shFunction start="^\s*[A-Za-z_0-9:][-a-zA-Z_0-9:]*\s*()\_s*{"		end="}"	contains=@shFunctionList		 skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
    +    ShFoldFunctions syn region shFunctionTwo	matchgroup=shFunction start="\%(do\)\@!\&\<[A-Za-z_0-9:][-a-zA-Z_0-9:]*\>\s*\%(()\)\=\_s*{"	end="}"	contains=shFunctionKey,@shFunctionList contained skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
    +    ShFoldFunctions syn region shFunctionThree	matchgroup=shFunction start="^\s*[A-Za-z_0-9:][-a-zA-Z_0-9:]*\s*()\_s*("		end=")"	contains=@shFunctionList		 skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
    +    ShFoldFunctions syn region shFunctionFour	matchgroup=shFunction start="\%(do\)\@!\&\<[A-Za-z_0-9:][-a-zA-Z_0-9:]*\>\s*\%(()\)\=\_s*)"	end=")"	contains=shFunctionKey,@shFunctionList contained skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
    +else
    +    ShFoldFunctions syn region shFunctionOne	matchgroup=shFunction start="^\s*\h\w*\s*()\_s*{"			end="}"	contains=@shFunctionList		 skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
    +    ShFoldFunctions syn region shFunctionTwo	matchgroup=shFunction start="\%(do\)\@!\&\<\h\w*\>\s*\%(()\)\=\_s*{"		end="}"	contains=shFunctionKey,@shFunctionList contained skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
    +    ShFoldFunctions syn region shFunctionThree	matchgroup=shFunction start="^\s*\h\w*\s*()\_s*("			end=")"	contains=@shFunctionList		 skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
    +    ShFoldFunctions syn region shFunctionFour	matchgroup=shFunction start="\%(do\)\@!\&\<\h\w*\>\s*\%(()\)\=\_s*("		end=")"	contains=shFunctionKey,@shFunctionList contained skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
    +endif
    +
    +" Parameter Dereferencing: {{{1
    +" ========================
    +if !exists("g:sh_no_error")
    +    syn match  shDerefWordError	"[^}$[~]"	contained
    +endif
    +syn match  shDerefSimple	"\$\%(\h\w*\|\d\)"	nextgroup=@shNoZSList
    +if exists("b:is_kornshell") && !exists("b:is_ksh88")
    +    if exists("b:is_mksh")
    +        syn region shDeref	matchgroup=PreProc start="\${\ze[^ \t\n|]" end="}"	contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart
    +    elseif exists("b:generic_korn")
    +        syn region shDeref	matchgroup=PreProc start="\${\ze[^ \t\n<|]" end="}"	contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart
    +    else
    +        syn region shDeref	matchgroup=PreProc start="\${\ze[^ \t\n<]" end="}"	contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart
    +    endif
    +elseif exists("b:is_bash")
    +    syn region shDeref	matchgroup=PreProc start="\${\ze[^ \t\n|]" end="}"	contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart
    +else
    +    syn region shDeref	matchgroup=PreProc start="\${" end="}"			contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart
    +endif
    +syn match  shDerefSimple	"\$[-#*@!?]"	nextgroup=@shNoZSList
    +syn match  shDerefSimple	"\$\$"	nextgroup=@shNoZSList
    +syn match  shDerefSimple	"\${\d}"	nextgroup=@shNoZSList	nextgroup=shSpecialStart
    +if exists("b:is_bash") || exists("b:is_kornshell") || exists("b:is_posix")
    +    syn region shDeref	matchgroup=PreProc start="\${##\=" end="}"	contains=@shDerefList	nextgroup=@shSpecialNoZS,shSpecialStart
    +    syn region shDeref	matchgroup=PreProc start="\${\$\$" end="}"	contains=@shDerefList	nextgroup=@shSpecialNoZS,shSpecialStart
    +endif
    +
    +" ksh: ${.sh.*} variables: {{{1
    +" ========================================
    +if exists("b:is_kornshell") && !exists("b:is_ksh88") && !exists("b:is_mksh")
    +    syn match  shDerefVar	contained	"\.\+"	nextgroup=@shDerefVarList
    +    syn region shDeref	matchgroup=PreProc start="\${\ze[\.]" end="}"	contains=@shDerefVarList,shDerefPSR,shDerefPPS
    +endif
    +
    +" ksh: ${!var[*]} array index list syntax: {{{1
    +" ========================================
    +if (exists("b:is_kornshell") && !exists("b:is_ksh88")) || exists("b:is_posix")
    +    syn region shDeref	matchgroup=PreProc start="\${!" end="}"	contains=@shDerefVarArray
    +endif
    +
    +" bash: ${!prefix*} and ${#parameter}: {{{1
    +" ====================================
    +if exists("b:is_bash")
    +    syn region shDeref	matchgroup=PreProc start="\${!" end="\*\=}"	contains=@shDerefList,shDerefOffset
    +    syn match  shDerefVar	contained	"{\@<=!\h\w*"		nextgroup=@shDerefVarList
    +endif
    +if (exists("b:is_kornshell") && !exists("b:is_ksh88"))
    +    syn match  shDerefVar	contained	"{\@<=!\h\w*[[:alnum:]_.]*"	nextgroup=@shDerefVarList
    +endif
    +
    +syn match  shDerefSpecial	contained	"{\@<=[-*@?0]"		nextgroup=shDerefOp,shDerefOffset,shDerefOpError
    +syn match  shDerefSpecial	contained	"\({[#!]\)\@<=[[:alnum:]*@_]\+"	nextgroup=@shDerefVarList,shDerefOp
    +syn match  shDerefVar	contained	"{\@<=\h\w*"		nextgroup=@shDerefVarList
    +syn match  shDerefVar	contained	'\d'                            nextgroup=@shDerefVarList
    +if exists("b:is_kornshell") || exists("b:is_posix")
    +    syn match  shDerefVar	contained	"{\@<=\h\w*[[:alnum:]_.]*"	nextgroup=@shDerefVarList
    +endif
    +
    +" sh ksh bash : ${var[... ]...}  array reference: {{{1
    +syn region  shDerefVarArray   contained	matchgroup=shDeref start="\[" end="]"	contains=@shCommandSubList nextgroup=shDerefOp,shDerefOpError,shDerefOffset
    +
    +" Special ${parameter OPERATOR word} handling: {{{1
    +" sh ksh bash : ${parameter:-word}    word is default value
    +" sh ksh bash : ${parameter:=word}    assign word as default value
    +" sh ksh bash : ${parameter:?word}    display word if parameter is null
    +" sh ksh bash : ${parameter:+word}    use word if parameter is not null, otherwise nothing
    +"    ksh bash : ${parameter#pattern}  remove small left  pattern
    +"    ksh bash : ${parameter##pattern} remove large left  pattern
    +"    ksh bash : ${parameter%pattern}  remove small right pattern
    +"    ksh bash : ${parameter%%pattern} remove large right pattern
    +"    ksh bash : ${parameter^pattern}  Case modification
    +"    ksh bash : ${parameter^^pattern} Case modification
    +"    ksh bash : ${parameter,pattern}  Case modification
    +"    ksh bash : ${parameter,,pattern} Case modification
    +"        bash : ${@:start:qty}        display command line arguments from start to start+qty-1 (inferred)
    +"        bash : ${parameter@operator} transforms parameter (operator∈[uULqEPARa])
    +syn cluster shDerefPatternList	contains=shDerefPattern,shDerefString
    +if !exists("g:sh_no_error")
    +    syn match shDerefOpError	contained	":[[:punct:]]"
    +endif
    +syn match  shDerefOp	contained	":\=[-=?]"	nextgroup=@shDerefPatternList
    +syn match  shDerefOp	contained	":\=+"	nextgroup=@shDerefPatternList
    +if exists("b:is_bash") || exists("b:is_kornshell") || exists("b:is_posix")
    +    syn match  shDerefOp	contained	"#\{1,2}"		nextgroup=@shDerefPatternList
    +    syn match  shDerefOp	contained	"%\{1,2}"		nextgroup=@shDerefPatternList
    +    syn match  shDerefPattern	contained	"[^{}]\+"		contains=shDeref,shDerefSimple,shDerefPattern,shDerefString,shCommandSub,shDerefEscape nextgroup=shDerefPattern skipnl
    +    syn region shDerefPattern	contained	start="{" end="}"	contains=shDeref,shDerefSimple,shDerefString,shCommandSub nextgroup=shDerefPattern
    +    " Match parametric bracket expressions with a leading whitespace character.
    +    syn region shDerefPattern	contained	matchgroup=shBracketExprDelim start="\[" end="\]"	contains=@shBracketExprList,shDoubleQuote nextgroup=shDerefPattern
    +    call s:GenerateBracketExpressionItems({'itemGroup': 'shDerefPattern', 'bracketGroup': 'shBracketExprDelim', 'extraArgs': 'contained nextgroup=shDerefPattern'})
    +    syn match  shDerefEscape	contained	'\%(\\\\\)*\\.'
    +endif
    +if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("b:is_ksh88") && !exists("b:is_mksh") && !exists("b:is_ksh93u") && !exists("b:is_ksh2020"))
    +    syn match  shDerefOp	contained	"[,^]\{1,2}"	nextgroup=@shDerefPatternList
    +endif
    +if exists("b:is_bash")
    +    syn match  shDerefOp	contained	"@[uULQEPAKa]"
    +endif
    +syn region shDerefString	contained	matchgroup=shDerefDelim start=+\%(\\\)\@"
    +syn sync match shCaseEsacSync	groupthere	shCaseEsac	"\"
    +syn sync match shDoSync	grouphere	shDo	"\"
    +syn sync match shDoSync	groupthere	shDo	"\"
    +syn sync match shForSync	grouphere	shFor	"\"
    +syn sync match shForSync	groupthere	shFor	"\"
    +syn sync match shIfSync	grouphere	shIf	"\"
    +syn sync match shIfSync	groupthere	shIf	"\"
    +syn sync match shUntilSync	grouphere	shRepeat	"\"
    +syn sync match shWhileSync	grouphere	shRepeat	"\"
    +
    +" Default Highlighting: {{{1
    +" =====================
    +if !exists("skip_sh_syntax_inits")
    +    hi def link shArithRegion	shShellVariables
    +    hi def link shArrayValue	shDeref
    +    hi def link shAstQuote	shDoubleQuote
    +    hi def link shAtExpr	shSetList
    +    hi def link shBkslshSnglQuote	shSingleQuote
    +    hi def link shBkslshDblQuote	shDOubleQuote
    +    hi def link shBeginHere	shRedir
    +    hi def link shCaseBar	shConditional
    +    hi def link shCaseCommandSub	shCommandSub
    +    hi def link shCaseDoubleQuote	shDoubleQuote
    +    hi def link shCaseIn	shConditional
    +    hi def link shQuote	shOperator
    +    hi def link shCaseSingleQuote	shSingleQuote
    +    hi def link shCaseStart	shConditional
    +    hi def link shCmdSubRegion	shShellVariables
    +    hi def link shColon	shComment
    +    hi def link shDerefOp	shOperator
    +    hi def link shDerefPOL	shDerefOp
    +    hi def link shDerefPPS	shDerefOp
    +    hi def link shDerefPSR	shDerefOp
    +    hi def link shDeref	shShellVariables
    +    hi def link shDerefDelim	shOperator
    +    hi def link shDerefSimple	shDeref
    +    hi def link shDerefSpecial	shDeref
    +    hi def link shDerefString	shDoubleQuote
    +    hi def link shDerefVar	shDeref
    +    hi def link shDoubleQuote	shString
    +    hi def link shEcho	shString
    +    hi def link shEchoDelim	shOperator
    +    hi def link shEchoQuote	shString
    +    hi def link shForPP	shLoop
    +    hi def link shFunction	Function
    +    hi def link shEmbeddedEcho	shString
    +    hi def link shEscape	shCommandSub
    +    hi def link shExDoubleQuote	shDoubleQuote
    +    hi def link shExSingleQuote	shSingleQuote
    +    hi def link shHereDoc	shString
    +    hi def link shHereString	shRedir
    +    hi def link shHerePayload	shHereDoc
    +    hi def link shLoop	shStatement
    +    hi def link shSpecialNxt	shSpecial
    +    hi def link shNoQuote	shDoubleQuote
    +    hi def link shOption	shCommandSub
    +    hi def link shPattern	shString
    +    hi def link shParen	shArithmetic
    +    hi def link shPosnParm	shShellVariables
    +    hi def link shQuickComment	shComment
    +    hi def link shBQComment	shComment
    +    hi def link shRange	shOperator
    +    hi def link shRedir	shOperator
    +    hi def link shSetListDelim	shOperator
    +    hi def link shSetOption	shOption
    +    hi def link shSingleQuote	shString
    +    hi def link shSource	shOperator
    +    hi def link shStringSpecial	shSpecial
    +    hi def link shSpecialStart	shSpecial
    +    hi def link shSubShRegion	shOperator
    +    hi def link shTestOpr	shConditional
    +    hi def link shTestPattern	shString
    +    hi def link shTestDoubleQuote	shString
    +    hi def link shTestSingleQuote	shString
    +    hi def link shTouchCmd	shStatement
    +    hi def link shVariable	shSetList
    +    hi def link shWrapLineOperator	shOperator
    +
    +    if exists("b:is_bash")
    +        hi def link bashAdminStatement	shStatement
    +        hi def link bashSpecialVariables	shShellVariables
    +        hi def link bashStatement		shStatement
    +        hi def link shCharClass		shSpecial
    +        hi def link shDerefOffset		shDerefOp
    +        hi def link shDerefLen		shDerefOffset
    +    endif
    +    if exists("b:is_kornshell") || exists("b:is_posix")
    +        hi def link kshSpecialVariables	shShellVariables
    +        hi def link kshStatement		shStatement
    +    endif
    +
    +    if !exists("g:sh_no_error")
    +        hi def link shCaseError		Error
    +        hi def link shCondError		Error
    +        hi def link shCurlyError		Error
    +        hi def link shDerefOpError		Error
    +        hi def link shDerefWordError		Error
    +        hi def link shDoError		Error
    +        hi def link shEsacError		Error
    +        hi def link shIfError		Error
    +        hi def link shInError		Error
    +        hi def link shParenError		Error
    +        hi def link shTestError		Error
    +        if exists("b:is_kornshell") || exists("b:is_posix")
    +            hi def link shDTestError		Error
    +        endif
    +    endif
    +
    +    hi def link shArithmetic		Special
    +    hi def link shBracketExprDelim		Delimiter
    +    hi def link shCharClass		Identifier
    +    hi def link shCollSymb		shCharClass
    +    hi def link shEqClass		shCharClass
    +    hi def link shSnglCase		Statement
    +    hi def link shCommandSub		Special
    +    hi def link shCommandSubBQ		shCommandSub
    +    hi def link shSubshare		shCommandSub
    +    hi def link shValsub		shCommandSub
    +    hi def link shComment		Comment
    +    hi def link shConditional		Conditional
    +    hi def link shCtrlSeq		Special
    +    hi def link shExprRegion		Delimiter
    +    hi def link shFunctionKey		Function
    +    hi def link shFunctionName		Function
    +    hi def link shNumber		Number
    +    hi def link shOperator		Operator
    +    hi def link shRepeat		Repeat
    +    hi def link shSet		Statement
    +    hi def link shSetList		Identifier
    +    hi def link shShellVariables		PreProc
    +    hi def link shSpecial		Special
    +    hi def link shSpecialDQ		Special
    +    hi def link shSpecialSQ		Special
    +    hi def link shSpecialNoZS		shSpecial
    +    hi def link shStatement		Statement
    +    hi def link shString		String
    +    hi def link shTodo		Todo
    +    hi def link shAlias		Identifier
    +    hi def link shHereDoc01		shRedir
    +    hi def link shHereDoc02		shRedir
    +    hi def link shHereDoc03		shRedir
    +    hi def link shHereDoc04		shRedir
    +    hi def link shHereDoc05		shRedir
    +    hi def link shHereDoc06		shRedir
    +    hi def link shHereDoc07		shRedir
    +    hi def link shHereDoc08		shRedir
    +    hi def link shHereDoc09		shRedir
    +    hi def link shHereDoc10		shRedir
    +    hi def link shHereDoc11		shRedir
    +    hi def link shHereDoc12		shRedir
    +    hi def link shHereDoc13		shRedir
    +    hi def link shHereDoc14		shRedir
    +    hi def link shHereDoc15		shRedir
    +    hi def link shHereDoc16		shRedir
    +endif
    +
    +" Delete shell folding commands {{{1
    +" =============================
    +delc ShFoldFunctions
    +delc ShFoldHereDoc
    +delc ShFoldIfDoFor
    +
    +" Delete the bracket expression function {{{1
    +" ======================================
    +delfun s:GenerateBracketExpressionItems
    +
    +" Set Current Syntax: {{{1
    +" ===================
    +if exists("b:is_bash")
    +    let b:current_syntax = "bash"
    +elseif exists("b:is_kornshell")
    +    let b:current_syntax = "ksh"
    +elseif exists("b:is_posix")
    +    let b:current_syntax = "posix"
    +else
    +    let b:current_syntax = "sh"
    +endif
    +
    +" vim: ts=16 fdm=marker
    diff --git a/.config/vim/syntax/shaderslang.vim b/.config/vim/syntax/shaderslang.vim
    new file mode 100644
    index 0000000..1cae202
    --- /dev/null
    +++ b/.config/vim/syntax/shaderslang.vim
    @@ -0,0 +1,360 @@
    +" Vim syntax file
    +" Language:     Slang
    +" Maintainer:	Austin Shijo 
    +" Last Change:	2024 Jan 05
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" Read the C syntax to start with
    +runtime! syntax/c.vim
    +unlet b:current_syntax
    +
    +" Annotations
    +syn match           shaderslangAnnotation          /<.*;>/
    +
    +" Attributes
    +syn match           shaderslangAttribute           /^\s*\[maxvertexcount(\s*\w\+\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[domain(\s*"\(tri\|quad\|isoline\)"\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[earlydepthstencil\]/
    +syn match           shaderslangAttribute           /^\s*\[instance(\s*\w\+\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[maxtessfactor(\s*\w\+\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[numthreads(\s*\w\+\s*,\s*\w\+\s*,\s*\w\+\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[outputcontrolpoints(\s*\w\+\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[outputtopology(\s*"\(point\|line\|triangle_cw\|triangle_ccw\|triangle\)"\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[partitioning(\s*"\(integer\|fractional_even\|fractional_odd\|pow2\)"\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[patchconstantfunc(\s*"\(\d\|\w\|_\)\+"\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[WaveSize(\s*\w\+\(\s*,\s*\w\+\(\s*,\s*\w\+\)\?\)\?\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[shader(\s*"\(anyhit\|callable\|closesthit\|intersection\|miss\|raygeneration\)"\s*)\]/
    +
    +syn match           shaderslangAttribute           /^\s*\[fastopt\]/
    +syn match           shaderslangAttribute           /^\s*\[loop\]/
    +syn match           shaderslangAttribute           /^\s*\[unroll\]/
    +syn match           shaderslangAttribute           /^\s*\[allow_uav_condition\]/
    +syn match           shaderslangAttribute           /^\s*\[branch\]/
    +syn match           shaderslangAttribute           /^\s*\[flatten\]/
    +syn match           shaderslangAttribute           /^\s*\[forcecase\]/
    +syn match           shaderslangAttribute           /^\s*\[call\]/
    +syn match           shaderslangAttribute           /^\s*\[WaveOpsIncludeHelperLanes\]/
    +
    +syn match           shaderslangAttribute           /\[raypayload\]/
    +
    +" Work graph shader target attributes
    +syn match           shaderslangAttribute           /^\s*\[Shader(\s*"\(\d\|\w\|_\)\+"\s*)\]/
    +
    +" Work graph shader function attributes
    +syn match           shaderslangAttribute           /^\s*\[NodeLaunch(\s*"\(broadcasting\|coalescing\|thread\)"\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[NodeIsProgramEntry\]/
    +syn match           shaderslangAttribute           /^\s*\[NodeLocalRootArgumentsTableIndex(\s*\w\+\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[NumThreads(\s*\w\+\s*,\s*\w\+\s*,\s*\w\+\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[NodeShareInputOf(\s*"\w\+"\(\s*,\s*\w\+\)\?\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[NodeDispatchGrid(\s*\w\+\s*,\s*\w\+\s*,\s*\w\+\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[NodeMaxDispatchGrid(\s*\w\+\s*,\s*\w\+\s*,\s*\w\+\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[NodeMaxRecursionDepth(\s*\w\+\s*)\]/
    +syn match           shaderslangAttribute           /^\s*\[NodeMaxInputRecordsPerGraphEntryRecord(\s*\w\+\s*,\s*\(true\|false\)\s*)\]/
    +
    +" Work graph record attributes
    +syn match           shaderslangAttribute           /\[NodeTrackRWInputSharing\]/
    +syn match           shaderslangAttribute           /\[MaxRecords(\s*\w\+\s*)\]/
    +syn match           shaderslangAttribute           /\[NodeID(\s*"\w\+"\(\s*,\s*\w\+\)\?\s*)\]/
    +syn match           shaderslangAttribute           /\[MaxRecordsSharedWith(\s*\w\+\s*)\]/
    +syn match           shaderslangAttribute           /\[AllowSparseNodes\]/
    +syn match           shaderslangAttribute           /\[NodeArraySize(\s*\w\+\s*)\]/
    +syn match           shaderslangAttribute           /\[UnboundedSparseNodes\]/
    +
    +" Intrinsic functions
    +syn keyword         shaderslangFunc                abs acos acosh asin asinh atan atanh cos cosh exp exp2 floor log log10 log2 round rsqrt sin sincos sinh sqrt tan tanh trunc
    +syn keyword         shaderslangFunc                AllMemoryBarrier AllMemoryBarrierWithGroupSync DeviceMemoryBarrier DeviceMemoryBarrierWithGroupSync GroupMemoryBarrier GroupMemoryBarrierWithGroupSync
    +syn keyword         shaderslangFunc                abort clip errorf printf
    +syn keyword         shaderslangFunc                all any countbits faceforward firstbithigh firstbitlow isfinite isinf isnan max min noise pow reversebits sign
    +syn keyword         shaderslangFunc                asdouble asfloat asint asuint D3DCOLORtoUBYTE4 f16tof32 f32tof16
    +syn keyword         shaderslangFunc                ceil clamp degrees fma fmod frac frexp ldexp lerp mad modf radiants saturate smoothstep step
    +syn keyword         shaderslangFunc                cross determinant distance dot dst length lit msad4 mul normalize rcp reflect refract transpose
    +syn keyword         shaderslangFunc                ddx ddx_coarse ddx_fine ddy ddy_coarse ddy_fine fwidth
    +syn keyword         shaderslangFunc                EvaluateAttributeAtCentroid EvaluateAttributeAtSample EvaluateAttributeSnapped
    +syn keyword         shaderslangFunc                GetRenderTargetSampleCount GetRenderTargetSamplePosition
    +syn keyword         shaderslangFunc                InterlockedAdd InterlockedAnd InterlockedCompareExchange InterlockedCompareStore InterlockedExchange InterlockedMax InterlockedMin InterlockedOr InterlockedXor
    +syn keyword         shaderslangFunc                InterlockedCompareStoreFloatBitwise InterlockedCompareExchangeFloatBitwise
    +syn keyword         shaderslangFunc                Process2DQuadTessFactorsAvg Process2DQuadTessFactorsMax Process2DQuadTessFactorsMin ProcessIsolineTessFactors
    +syn keyword         shaderslangFunc                ProcessQuadTessFactorsAvg ProcessQuadTessFactorsMax ProcessQuadTessFactorsMin ProcessTriTessFactorsAvg ProcessTriTessFactorsMax ProcessTriTessFactorsMin
    +syn keyword         shaderslangFunc                tex1D tex1Dbias tex1Dgrad tex1Dlod tex1Dproj
    +syn keyword         shaderslangFunc                tex2D tex2Dbias tex2Dgrad tex2Dlod tex2Dproj
    +syn keyword         shaderslangFunc                tex3D tex3Dbias tex3Dgrad tex3Dlod tex3Dproj
    +syn keyword         shaderslangFunc                texCUBE texCUBEbias texCUBEgrad texCUBElod texCUBEproj
    +syn keyword         shaderslangFunc                WaveIsFirstLane WaveGetLaneCount WaveGetLaneIndex
    +syn keyword         shaderslangFunc                IsHelperLane
    +syn keyword         shaderslangFunc                WaveActiveAnyTrue WaveActiveAllTrue WaveActiveBallot
    +syn keyword         shaderslangFunc                WaveReadLaneFirst WaveReadLaneAt
    +syn keyword         shaderslangFunc                WaveActiveAllEqual WaveActiveAllEqualBool WaveActiveCountBits
    +syn keyword         shaderslangFunc                WaveActiveSum WaveActiveProduct WaveActiveBitAnd WaveActiveBitOr WaveActiveBitXor WaveActiveMin WaveActiveMax
    +syn keyword         shaderslangFunc                WavePrefixCountBits WavePrefixProduct WavePrefixSum
    +syn keyword         shaderslangFunc                QuadReadAcrossX QuadReadAcrossY QuadReadAcrossDiagonal QuadReadLaneAt
    +syn keyword         shaderslangFunc                QuadAny QuadAll
    +syn keyword         shaderslangFunc                WaveMatch WaveMultiPrefixSum WaveMultiPrefixProduct WaveMultiPrefixCountBits WaveMultiPrefixAnd WaveMultiPrefixOr WaveMultiPrefixXor
    +syn keyword         shaderslangFunc                NonUniformResourceIndex
    +syn keyword         shaderslangFunc                DispatchMesh SetMeshOutputCounts
    +syn keyword         shaderslangFunc                dot4add_u8packed dot4add_i8packed dot2add
    +
    +syn keyword         shaderslangFunc                RestartStrip
    +syn keyword         shaderslangFunc                CalculateLevelOfDetail CalculateLevelOfDetailUnclamped Gather GetDimensions GetSamplePosition Load Sample SampleBias SampleCmp SampleCmpLevelZero SampleGrad SampleLevel GatherRaw SampleCmpLevel
    +syn keyword         shaderslangFunc                SampleCmpBias SampleCmpGrad
    +syn keyword         shaderslangFunc                WriteSamplerFeedback WriteSamplerFeedbackBias WriteSamplerFeedbackGrad WriteSamplerFeedbackLevel
    +syn keyword         shaderslangFunc                Append Consume DecrementCounter IncrementCounter
    +syn keyword         shaderslangFunc                Load2 Load3 Load4 Store Store2 Store3 Store4
    +syn keyword         shaderslangFunc                GatherRed GatherGreen GatherBlue GatherAlpha GatherCmp GatherCmpRed GatherCmpGreen GatherCmpBlue GatherCmpAlpha
    +syn match           shaderslangFunc                /\.mips\[\d\+\]\[\d\+\]/
    +syn match           shaderslangFunc                /\.sample\[\d\+\]\[\d\+\]/
    +
    +" Ray intrinsics
    +syn keyword         shaderslangFunc                AcceptHitAndEndSearch CallShader IgnoreHit ReportHit TraceRay
    +syn keyword         shaderslangFunc                DispatchRaysIndex DispatchRaysDimensions
    +syn keyword         shaderslangFunc                WorldRayOrigin WorldRayDirection RayTMin RayTCurrent RayFlags
    +syn keyword         shaderslangFunc                InstanceIndex InstanceID GeometryIndex PrimitiveIndex ObjectRayOrigin ObjectRayDirection ObjectToWorld3x4 ObjectToWorld4x3 WorldToObject3x4 WorldToObject4x3
    +syn keyword         shaderslangFunc                HitKind
    +
    +" RayQuery intrinsics
    +syn keyword         shaderslangFunc                TraceRayInline Proceed Abort CommittedStatus
    +syn keyword         shaderslangFunc                CandidateType CandidateProceduralPrimitiveNonOpaque CandidateTriangleRayT CandidateInstanceIndex CandidateInstanceID CandidateInstanceContributionToHitGroupIndex CandidateGeometryIndex
    +syn keyword         shaderslangFunc                CandidatePrimitiveIndex CandidateObjectRayOrigin CandidateObjectRayDirection CandidateObjectToWorld3x4 CandidateObjectToWorld4x3 CandidateWorldToObject3x4 CandidateWorldToObject4x3
    +syn keyword         shaderslangFunc                CommitNonOpaqueTriangleHit CommitProceduralPrimitiveHit CommittedStatus CommittedRayT CommittedInstanceIndex CommittedInstanceID CommittedInstanceContributionToHitGroupIndex
    +syn keyword         shaderslangFunc                CommittedGeometryIndex CommittedPrimitiveIndex CommittedObjectRayOrigin CommittedObjectRayDirection CommittedObjectToWorld3x4 CommittedObjectToWorld4x3 CommittedWorldToObject3x4
    +syn keyword         shaderslangFunc                CommittedWorldToObject4x3 CandidateTriangleBarycentrics CandidateTriangleFrontFace CommittedTriangleBarycentrics CommittedTriangleFrontFace
    +
    +" Pack/unpack math intrinsics
    +syn keyword         shaderslangFunc                unpack_s8s16 unpack_u8u16 unpack_s8s32 unpack_u8u32
    +syn keyword         shaderslangFunc                pack_u8 pack_s8 pack_clamp_u8 pack_clamp_s8
    +
    +" Work graph object methods
    +syn keyword         shaderslangFunc                Get FinishedCrossGroupSharing Count GetThreadNodeOutputRecords GetGroupNodeOutputRecords IsValid GroupIncrementOutputCount ThreadIncrementOutputCount OutputComplete
    +
    +" Work graph free intrinsics
    +syn keyword         shaderslangFunc                GetRemainingRecursionLevels Barrier
    +
    +" Layout Qualifiers
    +syn keyword         shaderslangLayoutQual          const row_major column_major
    +syn keyword         shaderslangLayoutQual          point line triangle lineadj triangleadj
    +syn keyword         shaderslangLayoutQual          InputPatch OutputPatch
    +syn match           shaderslangLayoutQual          /PointStream<\s*\w\+\s*>/
    +syn match           shaderslangLayoutQual          /LineStream<\s*\w\+\s*>/
    +syn match           shaderslangLayoutQual          /TriangleStream<\s*\w\+\s*>/
    +
    +" User defined Semantics
    +syn match           shaderslangSemantic            /:\s*[A-Z]\w*/
    +syn match           shaderslangSemantic            /:\s*packoffset(\s*c\d\+\(\.[xyzw]\)\?\s*)/ " packoffset
    +syn match           shaderslangSemantic            /:\s*register(\s*\(r\|x\|v\|t\|s\|cb\|icb\|b\|c\|u\)\d\+\s*)/ " register
    +syn match           shaderslangSemantic            /:\s*read(\s*\(\(anyhit\|closesthit\|miss\|caller\)\s*,\s*\)*\(anyhit\|closesthit\|miss\|caller\)\?\s*)/ " read
    +syn match           shaderslangSemantic            /:\s*write(\s*\(\(anyhit\|closesthit\|miss\|caller\)\s*,\s*\)*\(anyhit\|closesthit\|miss\|caller\)\?\s*)/ " write
    +
    +" System-Value Semantics
    +" Vertex Shader
    +syn match           shaderslangSemantic            /SV_ClipDistance\d\+/
    +syn match           shaderslangSemantic            /SV_CullDistance\d\+/
    +syn keyword         shaderslangSemantic            SV_Position SV_InstanceID SV_PrimitiveID SV_VertexID
    +syn keyword         shaderslangSemantic            SV_StartVertexLocation SV_StartInstanceLocation
    +" Tessellation pipeline
    +syn keyword         shaderslangSemantic            SV_DomainLocation SV_InsideTessFactor SV_OutputControlPointID SV_TessFactor
    +" Geometry Shader
    +syn keyword         shaderslangSemantic            SV_GSInstanceID SV_RenderTargetArrayIndex
    +" Pixel Shader - MSAA
    +syn keyword         shaderslangSemantic            SV_Coverage SV_Depth SV_IsFrontFace SV_SampleIndex
    +syn match           shaderslangSemantic            /SV_Target[0-7]/
    +syn keyword         shaderslangSemantic            SV_ShadingRate SV_ViewID
    +syn match           shaderslangSemantic            /SV_Barycentrics[0-1]/
    +" Compute Shader
    +syn keyword         shaderslangSemantic            SV_DispatchThreadID SV_GroupID SV_GroupIndex SV_GroupThreadID
    +" Mesh shading pipeline
    +syn keyword         shaderslangSemantic            SV_CullPrimitive
    +" Work graph record system values
    +syn keyword         shaderslangSemantic            SV_DispatchGrid
    +
    +" slang structures
    +syn keyword         shaderslangStructure           cbuffer
    +
    +" Shader profiles
    +" Cg profiles
    +syn keyword         shaderslangProfile             arbfp1 arbvp1 fp20 vp20 fp30 vp30 ps_1_1 ps_1_2 ps_1_3
    +" Shader Model 1
    +syn keyword         shaderslangProfile             vs_1_1
    +" Shader Model 2
    +syn keyword         shaderslangProfile             ps_2_0 ps_2_x vs_2_0 vs_2_x
    +" Shader Model 3
    +syn keyword         shaderslangProfile             ps_3_0 vs_3_0
    +" Shader Model 4
    +syn keyword         shaderslangProfile             gs_4_0 ps_4_0 vs_4_0 gs_4_1 ps_4_1 vs_4_1
    +" Shader Model 5
    +syn keyword         shaderslangProfile             cs_4_0 cs_4_1 cs_5_0 ds_5_0 gs_5_0 hs_5_0 ps_5_0 vs_5_0
    +" Shader Model 6
    +syn keyword         shaderslangProfile             cs_6_0 ds_6_0 gs_6_0 hs_6_0 ps_6_0 vs_6_0 lib_6_0
    +
    +" Swizzling
    +syn match           shaderslangSwizzle             /\.[xyzw]\{1,4\}\>/
    +syn match           shaderslangSwizzle             /\.[rgba]\{1,4\}\>/
    +syn match           shaderslangSwizzle             /\.\(_m[0-3]\{2}\)\{1,4\}/
    +syn match           shaderslangSwizzle             /\.\(_[1-4]\{2}\)\{1,4\}/
    +
    +" Other Statements
    +syn keyword         shaderslangStatement           discard
    +
    +" Storage class
    +syn match           shaderslangStorageClass        /\/
    +syn match           shaderslangStorageClass        /\/
    +syn keyword         shaderslangStorageClass        inout
    +syn keyword         shaderslangStorageClass        extern nointerpolation precise shared groupshared static uniform volatile
    +syn keyword         shaderslangStorageClass        snorm unorm
    +syn keyword         shaderslangStorageClass        linear centroid nointerpolation noperspective sample
    +syn keyword         shaderslangStorageClass        globallycoherent
    +
    +" Types
    +" Buffer types
    +syn keyword         shaderslangType                ConstantBuffer Buffer ByteAddressBuffer ConsumeStructuredBuffer StructuredBuffer
    +syn keyword         shaderslangType                AppendStructuredBuffer RWBuffer RWByteAddressBuffer RWStructuredBuffer
    +syn keyword         shaderslangType                RasterizerOrderedBuffer RasterizerOrderedByteAddressBuffer RasterizerOrderedStructuredBuffer
    +
    +" Scalar types
    +syn keyword         shaderslangType                bool int uint dword half float double
    +syn keyword         shaderslangType                min16float min10float min16int min12int min16uint
    +syn keyword         shaderslangType                float16_t float32_t float64_t
    +
    +" Vector types
    +syn match           shaderslangType                /vector<\s*\w\+,\s*[1-4]\s*>/
    +syn keyword         shaderslangType                bool1 bool2 bool3 bool4
    +syn keyword         shaderslangType                int1 int2 int3 int4
    +syn keyword         shaderslangType                uint1 uint2 uint3 uint4
    +syn keyword         shaderslangType                dword1 dword2 dword3 dword4
    +syn keyword         shaderslangType                half1 half2 half3 half4
    +syn keyword         shaderslangType                float1 float2 float3 float4
    +syn keyword         shaderslangType                double1 double2 double3 double4
    +syn keyword         shaderslangType                min16float1 min16float2 min16float3 min16float4
    +syn keyword         shaderslangType                min10float1 min10float2 min10float3 min10float4
    +syn keyword         shaderslangType                min16int1 min16int2 min16int3 min16int4
    +syn keyword         shaderslangType                min12int1 min12int2 min12int3 min12int4
    +syn keyword         shaderslangType                min16uint1 min16uint2 min16uint3 min16uint4
    +syn keyword         shaderslangType                float16_t1 float16_t2 float16_t3 float16_t4
    +syn keyword         shaderslangType                float32_t1 float32_t2 float32_t3 float32_t4
    +syn keyword         shaderslangType                float64_t1 float64_t2 float64_t3 float64_t4
    +syn keyword         shaderslangType                int16_t1 int16_t2 int16_t3 int16_t4
    +syn keyword         shaderslangType                int32_t1 int32_t2 int32_t3 int32_t4
    +syn keyword         shaderslangType                int64_t1 int64_t2 int64_t3 int64_t4
    +syn keyword         shaderslangType                uint16_t1 uint16_t2 uint16_t3 uint16_t4
    +syn keyword         shaderslangType                uint32_t1 uint32_t2 uint32_t3 uint32_t4
    +syn keyword         shaderslangType                uint64_t1 uint64_t2 uint64_t3 uint64_t4
    +
    +" Packed types
    +syn keyword         shaderslangType                uint8_t4_packed int8_t4_packed
    +
    +" Matrix types
    +syn match           shaderslangType                /matrix<\s*\w\+\s*,\s*[1-4]\s*,\s*[1-4]\s*>/
    +syn keyword         shaderslangType                bool1x1 bool2x1 bool3x1 bool4x1 bool1x2 bool2x2 bool3x2 bool4x2 bool1x3 bool2x3 bool3x3 bool4x3 bool1x4 bool2x4 bool3x4 bool4x4
    +syn keyword         shaderslangType                int1x1 int2x1 int3x1 int4x1 int1x2 int2x2 int3x2 int4x2 int1x3 int2x3 int3x3 int4x3 int1x4 int2x4 int3x4 int4x4
    +syn keyword         shaderslangType                uint1x1 uint2x1 uint3x1 uint4x1 uint1x2 uint2x2 uint3x2 uint4x2 uint1x3 uint2x3 uint3x3 uint4x3 uint1x4 uint2x4 uint3x4 uint4x4
    +syn keyword         shaderslangType                dword1x1 dword2x1 dword3x1 dword4x1 dword1x2 dword2x2 dword3x2 dword4x2 dword1x3 dword2x3 dword3x3 dword4x3 dword1x4 dword2x4 dword3x4 dword4x4
    +syn keyword         shaderslangType                half1x1 half2x1 half3x1 half4x1 half1x2 half2x2 half3x2 half4x2 half1x3 half2x3 half3x3 half4x3 half1x4 half2x4 half3x4 half4x4
    +syn keyword         shaderslangType                float1x1 float2x1 float3x1 float4x1 float1x2 float2x2 float3x2 float4x2 float1x3 float2x3 float3x3 float4x3 float1x4 float2x4 float3x4 float4x4
    +syn keyword         shaderslangType                double1x1 double2x1 double3x1 double4x1 double1x2 double2x2 double3x2 double4x2 double1x3 double2x3 double3x3 double4x3 double1x4 double2x4 double3x4 double4x4
    +syn keyword         shaderslangType                min16float1x1 min16float2x1 min16float3x1 min16float4x1 min16float1x2 min16float2x2 min16float3x2 min16float4x2 min16float1x3 min16float2x3 min16float3x3 min16float4x3 min16float1x4 min16float2x4 min16float3x4 min16float4x4
    +syn keyword         shaderslangType                min10float1x1 min10float2x1 min10float3x1 min10float4x1 min10float1x2 min10float2x2 min10float3x2 min10float4x2 min10float1x3 min10float2x3 min10float3x3 min10float4x3 min10float1x4 min10float2x4 min10float3x4 min10float4x4
    +syn keyword         shaderslangType                min16int1x1 min16int2x1 min16int3x1 min16int4x1 min16int1x2 min16int2x2 min16int3x2 min16int4x2 min16int1x3 min16int2x3 min16int3x3 min16int4x3 min16int1x4 min16int2x4 min16int3x4 min16int4x4
    +syn keyword         shaderslangType                min12int1x1 min12int2x1 min12int3x1 min12int4x1 min12int1x2 min12int2x2 min12int3x2 min12int4x2 min12int1x3 min12int2x3 min12int3x3 min12int4x3 min12int1x4 min12int2x4 min12int3x4 min12int4x4
    +syn keyword         shaderslangType                min16uint1x1 min16uint2x1 min16uint3x1 min16uint4x1 min16uint1x2 min16uint2x2 min16uint3x2 min16uint4x2 min16uint1x3 min16uint2x3 min16uint3x3 min16uint4x3 min16uint1x4 min16uint2x4 min16uint3x4 min16uint4x4
    +syn keyword         shaderslangType                float16_t1x1 float16_t2x1 float16_t3x1 float16_t4x1 float16_t1x2 float16_t2x2 float16_t3x2 float16_t4x2 float16_t1x3 float16_t2x3 float16_t3x3 float16_t4x3 float16_t1x4 float16_t2x4 float16_t3x4 float16_t4x4
    +syn keyword         shaderslangType                float32_t1x1 float32_t2x1 float32_t3x1 float32_t4x1 float32_t1x2 float32_t2x2 float32_t3x2 float32_t4x2 float32_t1x3 float32_t2x3 float32_t3x3 float32_t4x3 float32_t1x4 float32_t2x4 float32_t3x4 float32_t4x4
    +syn keyword         shaderslangType                float64_t1x1 float64_t2x1 float64_t3x1 float64_t4x1 float64_t1x2 float64_t2x2 float64_t3x2 float64_t4x2 float64_t1x3 float64_t2x3 float64_t3x3 float64_t4x3 float64_t1x4 float64_t2x4 float64_t3x4 float64_t4x4
    +syn keyword         shaderslangType                int16_t1x1 int16_t2x1 int16_t3x1 int16_t4x1 int16_t1x2 int16_t2x2 int16_t3x2 int16_t4x2 int16_t1x3 int16_t2x3 int16_t3x3 int16_t4x3 int16_t1x4 int16_t2x4 int16_t3x4 int16_t4x4
    +syn keyword         shaderslangType                int32_t1x1 int32_t2x1 int32_t3x1 int32_t4x1 int32_t1x2 int32_t2x2 int32_t3x2 int32_t4x2 int32_t1x3 int32_t2x3 int32_t3x3 int32_t4x3 int32_t1x4 int32_t2x4 int32_t3x4 int32_t4x4
    +syn keyword         shaderslangType                int64_t1x1 int64_t2x1 int64_t3x1 int64_t4x1 int64_t1x2 int64_t2x2 int64_t3x2 int64_t4x2 int64_t1x3 int64_t2x3 int64_t3x3 int64_t4x3 int64_t1x4 int64_t2x4 int64_t3x4 int64_t4x4
    +syn keyword         shaderslangType                uint16_t1x1 uint16_t2x1 uint16_t3x1 uint16_t4x1 uint16_t1x2 uint16_t2x2 uint16_t3x2 uint16_t4x2 uint16_t1x3 uint16_t2x3 uint16_t3x3 uint16_t4x3 uint16_t1x4 uint16_t2x4 uint16_t3x4 uint16_t4x4
    +syn keyword         shaderslangType                uint32_t1x1 uint32_t2x1 uint32_t3x1 uint32_t4x1 uint32_t1x2 uint32_t2x2 uint32_t3x2 uint32_t4x2 uint32_t1x3 uint32_t2x3 uint32_t3x3 uint32_t4x3 uint32_t1x4 uint32_t2x4 uint32_t3x4 uint32_t4x4
    +syn keyword         shaderslangType                uint64_t1x1 uint64_t2x1 uint64_t3x1 uint64_t4x1 uint64_t1x2 uint64_t2x2 uint64_t3x2 uint64_t4x2 uint64_t1x3 uint64_t2x3 uint64_t3x3 uint64_t4x3 uint64_t1x4 uint64_t2x4 uint64_t3x4 uint64_t4x4
    +
    +" Sampler types
    +syn keyword         shaderslangType                SamplerState SamplerComparisonState
    +syn keyword         shaderslangType                sampler sampler1D sampler2D sampler3D samplerCUBE sampler_state
    +
    +" Texture types
    +syn keyword         shaderslangType                Texture1D Texture1DArray Texture2D Texture2DArray Texture2DMS Texture2DMSArray Texture3D TextureCube TextureCubeArray
    +syn keyword         shaderslangType                RWTexture1D RWTexture2D RWTexture2DArray RWTexture3D RWTextureCubeArray RWTexture2DMS RWTexture2DMSArray
    +syn keyword         shaderslangType                FeedbackTexture2D FeedbackTexture2DArray
    +syn keyword         shaderslangType                RasterizerOrderedTexture1D RasterizerOrderedTexture1DArray RasterizerOrderedTexture2D RasterizerOrderedTexture2DArray RasterizerOrderedTexture3D
    +syn keyword         shaderslangTypeDeprec          texture texture1D texture2D texture3D
    +
    +" Raytracing types
    +syn keyword         shaderslangType                RaytracingAccelerationStructure RayDesc RayQuery BuiltInTriangleIntersectionAttributes
    +
    +" Work graph input record objects
    +syn keyword         shaderslangType                DispatchNodeInputRecord RWDispatchNodeInputRecord GroupNodeInputRecords RWGroupNodeInputRecords ThreadNodeInputRecord RWThreadNodeInputRecord EmptyNodeInput
    +
    +" Work graph output node objects
    +syn keyword         shaderslangType                NodeOutput NodeOutputArray EmptyNodeOutput EmptyNodeOutputArray
    +
    +" Work graph output record objects
    +syn keyword         shaderslangType                ThreadNodeOutputRecords GroupNodeOutputRecords
    +
    +" State Groups args
    +syn case ignore " This section case insensitive
    +
    +" Blend state group
    +syn keyword         shaderslangStateGroupArg       AlphaToCoverageEnable BlendEnable SrcBlend DestBlend BlendOp SrcBlendAlpha DestBlendAlpha BlendOpAlpha RenderTargetWriteMask
    +syn keyword         shaderslangStateGroupVal       ZERO ONE SRC_COLOR INV_SRC_COLOR SRC_ALPHA INV_SRC_ALPHA DEST_ALPHA INV_DEST_ALPHA DEST_COLOR INV_DEST_COLOR SRC_ALPHA_SAT BLEND_FACTOR INV_BLEND_FACTOR SRC1_COLOR INV_SRC1_COLOR SRC1_ALPHA INV_SRC1_ALPHA
    +syn keyword         shaderslangStateGroupVal       ADD SUBSTRACT REV_SUBSTRACT MIN MAX
    +
    +" Rasterizer state group
    +syn keyword         shaderslangStateGroupArg       FillMode CullMode FrontCounterClockwise DepthBias DepthBiasClamp SlopeScaledDepthBias ZClipEnable DepthClipEnable ScissorEnable MultisampleEnable AntialiasedLineEnable
    +syn keyword         shaderslangStateGroupVal       SOLID WIREFRAME
    +syn keyword         shaderslangStateGroupVal       NONE FRONT BACK
    +
    +" Sampler state group
    +syn keyword         shaderslangStateGroupArg       Filter AddressU AddressV AddressW MipLODBias MaxAnisotropy ComparisonFunc BorderColor MinLOD MaxLOD ComparisonFilter
    +syn keyword         shaderslangStateGroupVal       MIN_MAG_MIP_POINT MIN_MAG_POINT_MIP_LINEAR MIN_POINT_MAG_LINEAR_MIP_POINT MIN_POINT_MAG_MIP_LINEAR MIN_LINEAR_MAG_MIP_POINT MIN_LINEAR_MAG_POINT_MIP_LINEAR MIN_MAG_LINEAR_MIP_POINT MIN_MAG_MIP_LINEAR ANISOTROPIC
    +syn keyword         shaderslangStateGroupVal       COMPARISON_MIN_MAG_MIP_POINT COMPARISON_MIN_MAG_POINT_MIP_LINEAR COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT COMPARISON_MIN_POINT_MAG_MIP_LINEAR COMPARISON_MIN_LINEAR_MAG_MIP_POINT
    +syn keyword         shaderslangStateGroupVal       COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR COMPARISON_MIN_MAG_LINEAR_MIP_POINT COMPARISON_MIN_MAG_MIP_LINEAR COMPARISON_ANISOTROPIC
    +syn keyword         shaderslangStateGroupVal       COMPARISON_NEVER COMPARISON_LESS COMPARISON_EQUAL COMPARISON_LESS_EQUAL COMPARISON_GREATER COMPARISON_NOT_EQUAL COMPARISON_GREATER_EQUAL COMPARISON_ALWAYS
    +syn keyword         shaderslangStateGroupVal       WRAP MIRROR CLAMP BORDER MIRROR_ONCE
    +syn keyword         shaderslangStateGroupVal       SAMPLER_FEEDBACK_MIN_MIP SAMPLER_FEEDBACK_MIP_REGION_USED
    +
    +" Ray flags
    +syn keyword         shaderslangStateGroupVal       RAY_FLAG_NONE RAY_FLAG_FORCE_OPAQUE RAY_FLAG_FORCE_NON_OPAQUE RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH RAY_FLAG_SKIP_CLOSEST_HIT_SHADER
    +syn keyword         shaderslangStateGroupVal       RAY_FLAG_CULL_BACK_FACING_TRIANGLES RAY_FLAG_CULL_FRONT_FACING_TRIANGLES RAY_FLAG_CULL_OPAQUE RAY_FLAG_CULL_NON_OPAQUE
    +syn keyword         shaderslangStateGroupVal       RAY_FLAG_SKIP_TRIANGLES RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES
    +
    +" HitKind enum
    +syn keyword         shaderslangStateGroupVal       HIT_KIND_TRIANGLE_FRONT_FACE HIT_KIND_TRIANGLE_BACK_FACE
    +
    +" RayQuery enums
    +syn keyword         shaderslangStateGroupVal       COMMITTED_NOTHING COMMITTED_TRIANGLE_HIT COMMITTED_PROCEDURAL_PRIMITIVE_HIT
    +syn keyword         shaderslangStateGroupVal       CANDIDATE_NON_OPAQUE_TRIANGLE CANDIDATE_PROCEDURAL_PRIMITIVE
    +
    +" Heap objects
    +syn keyword         shaderslangStateGroupVal       ResourceDescriptorHeap SamplerDescriptorHeap
    +
    +" Work graph constants
    +syn keyword         shaderslangStateGroupVal       UAV_MEMORY GROUP_SHARED_MEMORY NODE_INPUT_MEMORY NODE_OUTPUT_MEMORY ALL_MEMORY GROUP_SYNC GROUP_SCOPE DEVICE_SCOPE
    +
    +syn case match " Case sensitive from now on
    +
    +" Effect files declarations and functions
    +" Effect groups, techniques passes
    +syn keyword         shaderslangEffectGroup         fxgroup technique11 pass
    +" Effect functions
    +syn keyword         shaderslangEffectFunc          SetBlendState SetDepthStencilState SetRasterizerState SetVertexShader SetHullShader SetDomainShader SetGeometryShader SetPixelShader SetComputeShader CompileShader ConstructGSWithSO SetRenderTargets
    +
    +" Default highlighting
    +hi def link shaderslangProfile        shaderslangStatement
    +hi def link shaderslangStateGroupArg  shaderslangStatement
    +hi def link shaderslangStateGroupVal  Number
    +hi def link shaderslangStatement      Statement
    +hi def link shaderslangType           Type
    +hi def link shaderslangTypeDeprec     WarningMsg
    +hi def link shaderslangStorageClass   StorageClass
    +hi def link shaderslangSemantic       PreProc
    +hi def link shaderslangFunc           shaderslangStatement
    +hi def link shaderslangLayoutQual     shaderslangFunc
    +hi def link shaderslangAnnotation     PreProc
    +hi def link shaderslangStructure      Structure
    +hi def link shaderslangSwizzle        SpecialChar
    +hi def link shaderslangAttribute      Statement
    +
    +hi def link shaderslangEffectGroup    Type
    +hi def link shaderslangEffectFunc     Statement
    +
    +let b:current_syntax = "shaderslang"
    diff --git a/.config/vim/syntax/sicad.vim b/.config/vim/syntax/sicad.vim
    new file mode 100644
    index 0000000..20eb14c
    --- /dev/null
    +++ b/.config/vim/syntax/sicad.vim
    @@ -0,0 +1,390 @@
    +" Vim syntax file
    +" Language:     SiCAD (procedure language)
    +" Maintainer:   Zsolt Branyiczky 
    +" Last Change:  2003 May 11
    +" URL:		http://lmark.mgx.hu:81/download/vim/sicad.vim
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +" use SQL highlighting after 'sql' command
    +syn include @SQL syntax/sql.vim
    +unlet b:current_syntax
    +
    +" spaces are used in (auto)indents since sicad hates tabulator characters
    +setlocal expandtab
    +
    +" ignore case
    +syn case ignore
    +
    +" most important commands - not listed by ausku
    +syn keyword sicadStatement define
    +syn keyword sicadStatement dialog
    +syn keyword sicadStatement do
    +syn keyword sicadStatement dop contained
    +syn keyword sicadStatement end
    +syn keyword sicadStatement enddo
    +syn keyword sicadStatement endp
    +syn keyword sicadStatement erroff
    +syn keyword sicadStatement erron
    +syn keyword sicadStatement exitp
    +syn keyword sicadGoto      goto contained
    +syn keyword sicadStatement hh
    +syn keyword sicadStatement if
    +syn keyword sicadStatement in
    +syn keyword sicadStatement msgsup
    +syn keyword sicadStatement out
    +syn keyword sicadStatement padd
    +syn keyword sicadStatement parbeg
    +syn keyword sicadStatement parend
    +syn keyword sicadStatement pdoc
    +syn keyword sicadStatement pprot
    +syn keyword sicadStatement procd
    +syn keyword sicadStatement procn
    +syn keyword sicadStatement psav
    +syn keyword sicadStatement psel
    +syn keyword sicadStatement psymb
    +syn keyword sicadStatement ptrace
    +syn keyword sicadStatement ptstat
    +syn keyword sicadStatement set
    +syn keyword sicadStatement sql contained
    +syn keyword sicadStatement step
    +syn keyword sicadStatement sys
    +syn keyword sicadStatement ww
    +
    +" functions
    +syn match sicadStatement "\"me=s+1
    +syn match sicadStatement "\"me=s+1
    +
    +" logical operators
    +syn match sicadOperator "\.and\."
    +syn match sicadOperator "\.ne\."
    +syn match sicadOperator "\.not\."
    +syn match sicadOperator "\.eq\."
    +syn match sicadOperator "\.ge\."
    +syn match sicadOperator "\.gt\."
    +syn match sicadOperator "\.le\."
    +syn match sicadOperator "\.lt\."
    +syn match sicadOperator "\.or\."
    +syn match sicadOperator "\.eqv\."
    +syn match sicadOperator "\.neqv\."
    +
    +" variable name
    +syn match sicadIdentifier "%g\=[irpt][0-9]\{1,2}\>"
    +syn match sicadIdentifier "%g\=l[0-9]\>"
    +syn match sicadIdentifier "%g\=[irptl]("me=e-1
    +syn match sicadIdentifier "%error\>"
    +syn match sicadIdentifier "%nsel\>"
    +syn match sicadIdentifier "%nvar\>"
    +syn match sicadIdentifier "%scl\>"
    +syn match sicadIdentifier "%wd\>"
    +syn match sicadIdentifier "\$[irt][0-9]\{1,2}\>" contained
    +
    +" label
    +syn match sicadLabel1 "^ *\.[a-z][a-z0-9]\{0,7} \+[^ ]"me=e-1
    +syn match sicadLabel1 "^ *\.[a-z][a-z0-9]\{0,7}\*"me=e-1
    +syn match sicadLabel2 "\" contains=sicadGoto
    +syn match sicadLabel2 "\" contains=sicadGoto
    +
    +" boolean
    +syn match sicadBoolean "\.[ft]\."
    +" integer without sign
    +syn match sicadNumber "\<[0-9]\+\>"
    +" floating point number, with dot, optional exponent
    +syn match sicadFloat "\<[0-9]\+\.[0-9]*\(e[-+]\=[0-9]\+\)\=\>"
    +" floating point number, starting with a dot, optional exponent
    +syn match sicadFloat "\.[0-9]\+\(e[-+]\=[0-9]\+\)\=\>"
    +" floating point number, without dot, with exponent
    +syn match sicadFloat "\<[0-9]\+e[-+]\=[0-9]\+\>"
    +
    +" without this extraString definition a ' ;  ' could stop the comment
    +syn region sicadString_ transparent start=+'+ end=+'+ oneline contained
    +" string
    +syn region sicadString start=+'+ end=+'+ oneline
    +
    +" comments - nasty ones in sicad
    +
    +" - ' *  blabla' or ' *  blabla;'
    +syn region sicadComment start="^ *\*" skip='\\ *$' end=";"me=e-1 end="$" contains=sicadString_
    +" - ' .LABEL03 *  blabla' or ' .LABEL03 *  blabla;'
    +syn region sicadComment start="^ *\.[a-z][a-z0-9]\{0,7} *\*" skip='\\ *$' end=";"me=e-1 end="$" contains=sicadLabel1,sicadString_
    +" - '; * blabla' or '; * blabla;'
    +syn region sicadComment start="; *\*"ms=s+1 skip='\\ *$' end=";"me=e-1 end="$" contains=sicadString_
    +" - comments between docbeg and docend
    +syn region sicadComment matchgroup=sicadStatement start="\" end="\"
    +
    +" catch \ at the end of line
    +syn match sicadLineCont "\\ *$"
    +
    +" parameters in dop block - for the time being it is not used
    +"syn match sicadParameter " [a-z][a-z0-9]*[=:]"me=e-1 contained
    +" dop block - for the time being it is not used
    +syn region sicadDopBlock transparent matchgroup=sicadStatement start='\' skip='\\ *$' end=';'me=e-1 end='$' contains=ALL
    +
    +" sql block - new highlighting mode is used (see syn include)
    +syn region sicadSqlBlock transparent matchgroup=sicadStatement start='\' skip='\\ *$' end=';'me=e-1 end='$' contains=@SQL,sicadIdentifier,sicadLineCont
    +
    +" synchronizing
    +syn sync clear  " clear sync used in sql.vim
    +syn sync match sicadSyncComment groupthere NONE "\"
    +syn sync match sicadSyncComment grouphere sicadComment "\"
    +" next line must be examined too
    +syn sync linecont "\\ *$"
    +
    +" catch error caused by tabulator key
    +syn match sicadError "\t"
    +" catch errors caused by wrong parenthesis
    +"syn region sicadParen transparent start='(' end=')' contains=ALLBUT,sicadParenError
    +syn region sicadParen transparent start='(' skip='\\ *$' end=')' end='$' contains=ALLBUT,sicadParenError
    +syn match sicadParenError ')'
    +"syn region sicadApostrophe transparent start=+'+ end=+'+ contains=ALLBUT,sicadApostropheError
    +"syn match sicadApostropheError +'+
    +" not closed apostrophe
    +"syn region sicadError start=+'+ end=+$+ contains=ALLBUT,sicadApostropheError
    +"syn match sicadApostropheError +'[^']*$+me=s+1 contained
    +
    +" SICAD keywords
    +syn keyword sicadStatement abst add addsim adrin aib
    +syn keyword sicadStatement aibzsn aidump aifgeo aisbrk alknam
    +syn keyword sicadStatement alknr alksav alksel alktrc alopen
    +syn keyword sicadStatement ansbo aractiv ararea arareao ararsfs
    +syn keyword sicadStatement arbuffer archeck arcomv arcont arconv
    +syn keyword sicadStatement arcopy arcopyo arcorr arcreate arerror
    +syn keyword sicadStatement areval arflfm arflop arfrast argbkey
    +syn keyword sicadStatement argenf argraph argrapho arinters arkompfl
    +syn keyword sicadStatement arlasso arlcopy arlgraph arline arlining
    +syn keyword sicadStatement arlisly armakea armemo arnext aroverl
    +syn keyword sicadStatement arovers arparkmd arpars arrefp arselect
    +syn keyword sicadStatement arset arstruct arunify arupdate arvector
    +syn keyword sicadStatement arveinfl arvflfl arvoroni ausku basis
    +syn keyword sicadStatement basisaus basisdar basisnr bebos befl
    +syn keyword sicadStatement befla befli befls beo beorta
    +syn keyword sicadStatement beortn bep bepan bepap bepola
    +syn keyword sicadStatement bepoln bepsn bepsp ber berili
    +syn keyword sicadStatement berk bewz bkl bli bma
    +syn keyword sicadStatement bmakt bmakts bmbm bmerk bmerw
    +syn keyword sicadStatement bmerws bminit bmk bmorth bmos
    +syn keyword sicadStatement bmoss bmpar bmsl bmsum bmsums
    +syn keyword sicadStatement bmver bmvero bmw bo bta
    +syn keyword sicadStatement buffer bvl bw bza bzap
    +syn keyword sicadStatement bzd bzgera bzorth cat catel
    +syn keyword sicadStatement cdbdiff ce cgmparam close closesim
    +syn keyword sicadStatement comgener comp comp conclose conclose coninfo
    +syn keyword sicadStatement conopen conread contour conwrite cop
    +syn keyword sicadStatement copar coparp coparp2 copel cr
    +syn keyword sicadStatement cs cstat cursor d da
    +syn keyword sicadStatement dal dasp dasps dataout dcol
    +syn keyword sicadStatement dd defsr del delel deskrdef
    +syn keyword sicadStatement df dfn dfns dfpos dfr
    +syn keyword sicadStatement dgd dgm dgp dgr dh
    +syn keyword sicadStatement diag diaus dir disbsd dkl
    +syn keyword sicadStatement dktx dkur dlgfix dlgfre dma
    +syn keyword sicadStatement dprio dr druse dsel dskinfo
    +syn keyword sicadStatement dsr dv dve eba ebd
    +syn keyword sicadStatement ebdmod ebs edbsdbin edbssnin edbsvtin
    +syn keyword sicadStatement edt egaus egdef egdefs eglist
    +syn keyword sicadStatement egloe egloenp egloes egxx eib
    +syn keyword sicadStatement ekur ekuradd elel elpos epg
    +syn keyword sicadStatement esau esauadd esek eta etap
    +syn keyword sicadStatement etav feparam ficonv filse fl
    +syn keyword sicadStatement fli flin flini flinit flins
    +syn keyword sicadStatement flkor fln flnli flop flout
    +syn keyword sicadStatement flowert flparam flraster flsy flsyd
    +syn keyword sicadStatement flsym flsyms flsymt fmtatt fmtdia
    +syn keyword sicadStatement fmtlib fpg gbadddb gbaim gbanrs
    +syn keyword sicadStatement gbatw gbau gbaudit gbclosp gbcredic
    +syn keyword sicadStatement gbcreem gbcreld gbcresdb gbcretd gbde
    +syn keyword sicadStatement gbdeldb gbdeldic gbdelem gbdelld gbdelref
    +syn keyword sicadStatement gbdeltd gbdisdb gbdisem gbdisld gbdistd
    +syn keyword sicadStatement gbebn gbemau gbepsv gbgetdet gbgetes
    +syn keyword sicadStatement gbgetmas gbgqel gbgqelr gbgqsa gbgrant
    +syn keyword sicadStatement gbimpdic gbler gblerb gblerf gbles
    +syn keyword sicadStatement gblocdic gbmgmg gbmntdb gbmoddb gbnam
    +syn keyword sicadStatement gbneu gbopenp gbpoly gbpos gbpruef
    +syn keyword sicadStatement gbpruefg gbps gbqgel gbqgsa gbrefdic
    +syn keyword sicadStatement gbreftab gbreldic gbresem gbrevoke gbsav
    +syn keyword sicadStatement gbsbef gbsddk gbsicu gbsrt gbss
    +syn keyword sicadStatement gbstat gbsysp gbszau gbubp gbueb
    +syn keyword sicadStatement gbunmdb gbuseem gbw gbweg gbwieh
    +syn keyword sicadStatement gbzt gelp gera getvar hgw
    +syn keyword sicadStatement hpg hr0 hra hrar icclchan
    +syn keyword sicadStatement iccrecon icdescon icfree icgetcon icgtresp
    +syn keyword sicadStatement icopchan icputcon icreacon icreqd icreqnw
    +syn keyword sicadStatement icreqw icrespd icresrve icwricon imsget
    +syn keyword sicadStatement imsgqel imsmget imsplot imsprint inchk
    +syn keyword sicadStatement inf infd inst kbml kbmls
    +syn keyword sicadStatement kbmm kbmms kbmt kbmtdps kbmts
    +syn keyword sicadStatement khboe khbol khdob khe khetap
    +syn keyword sicadStatement khfrw khktk khlang khld khmfrp
    +syn keyword sicadStatement khmks khms khpd khpfeil khpl
    +syn keyword sicadStatement khprofil khrand khsa khsabs khsaph
    +syn keyword sicadStatement khsd khsdl khse khskbz khsna
    +syn keyword sicadStatement khsnum khsob khspos khsvph khtrn
    +syn keyword sicadStatement khver khzpe khzpl kib kldat
    +syn keyword sicadStatement klleg klsch klsym klvert kmpg
    +syn keyword sicadStatement kmtlage kmtp kmtps kodef kodefp
    +syn keyword sicadStatement kodefs kok kokp kolae kom
    +syn keyword sicadStatement kontly kopar koparp kopg kosy
    +syn keyword sicadStatement kp kr krsek krtclose krtopen
    +syn keyword sicadStatement ktk lad lae laesel language
    +syn keyword sicadStatement lasso lbdes lcs ldesk ldesks
    +syn keyword sicadStatement le leak leattdes leba lebas
    +syn keyword sicadStatement lebaznp lebd lebm lebv lebvaus
    +syn keyword sicadStatement lebvlist lede ledel ledepo ledepol
    +syn keyword sicadStatement ledepos leder ledist ledm lee
    +syn keyword sicadStatement leeins lees lege lekr lekrend
    +syn keyword sicadStatement lekwa lekwas lel lelh lell
    +syn keyword sicadStatement lelp lem lena lend lenm
    +syn keyword sicadStatement lep lepe lepee lepko lepl
    +syn keyword sicadStatement lepmko lepmkop lepos leposm leqs
    +syn keyword sicadStatement leqsl leqssp leqsv leqsvov les
    +syn keyword sicadStatement lesch lesr less lestd let
    +syn keyword sicadStatement letaum letl lev levm levtm
    +syn keyword sicadStatement levtp levtr lew lewm lexx
    +syn keyword sicadStatement lfs li lining lldes lmode
    +syn keyword sicadStatement loedk loepkt lop lose loses
    +syn keyword sicadStatement lp lppg lppruef lr ls
    +syn keyword sicadStatement lsop lsta lstat ly lyaus
    +syn keyword sicadStatement lz lza lzae lzbz lze
    +syn keyword sicadStatement lznr lzo lzpos ma ma0
    +syn keyword sicadStatement ma1 mad map mapoly mcarp
    +syn keyword sicadStatement mccfr mccgr mcclr mccrf mcdf
    +syn keyword sicadStatement mcdma mcdr mcdrp mcdve mcebd
    +syn keyword sicadStatement mcgse mcinfo mcldrp md me
    +syn keyword sicadStatement mefd mefds minmax mipg ml
    +syn keyword sicadStatement mmcmdme mmdbf mmdellb mmdir mmdome
    +syn keyword sicadStatement mmfsb mminfolb mmlapp mmlbf mmlistlb
    +syn keyword sicadStatement mmloadcm mmmsg mmreadlb mmsetlb mmshowcm
    +syn keyword sicadStatement mmstatme mnp mpo mr mra
    +syn keyword sicadStatement ms msav msgout msgsnd msp
    +syn keyword sicadStatement mspf mtd nasel ncomp new
    +syn keyword sicadStatement nlist nlistlt nlistly nlistnp nlistpo
    +syn keyword sicadStatement np npa npdes npe npem
    +syn keyword sicadStatement npinfa npruef npsat npss npssa
    +syn keyword sicadStatement ntz oa oan odel odf
    +syn keyword sicadStatement odfx oj oja ojaddsk ojaed
    +syn keyword sicadStatement ojaeds ojaef ojaefs ojaen ojak
    +syn keyword sicadStatement ojaks ojakt ojakz ojalm ojatkis
    +syn keyword sicadStatement ojatt ojatw ojbsel ojcasel ojckon
    +syn keyword sicadStatement ojde ojdtl ojeb ojebd ojel
    +syn keyword sicadStatement ojelpas ojesb ojesbd ojex ojezge
    +syn keyword sicadStatement ojko ojlb ojloe ojlsb ojmerk
    +syn keyword sicadStatement ojmos ojnam ojpda ojpoly ojprae
    +syn keyword sicadStatement ojs ojsak ojsort ojstrukt ojsub
    +syn keyword sicadStatement ojtdef ojvek ojx old oldd
    +syn keyword sicadStatement op opa opa1 open opensim
    +syn keyword sicadStatement opnbsd orth osanz ot otp
    +syn keyword sicadStatement otrefp param paranf pas passw
    +syn keyword sicadStatement pcatchf pda pdadd pg pg0
    +syn keyword sicadStatement pgauf pgaufsel pgb pgko pgm
    +syn keyword sicadStatement pgr pgvs pily pkpg plot
    +syn keyword sicadStatement plotf plotfr pmap pmdata pmdi
    +syn keyword sicadStatement pmdp pmeb pmep pminfo pmlb
    +syn keyword sicadStatement pmli pmlp pmmod pnrver poa
    +syn keyword sicadStatement pos posa posaus post printfr
    +syn keyword sicadStatement protect prs prssy prsym ps
    +syn keyword sicadStatement psadd psclose psopen psparam psprw
    +syn keyword sicadStatement psres psstat psw pswr qualif
    +syn keyword sicadStatement rahmen raster rasterd rbbackup rbchang2
    +syn keyword sicadStatement rbchange rbcmd rbcoldst rbcolor rbcopy
    +syn keyword sicadStatement rbcut rbcut2 rbdbcl rbdbload rbdbop
    +syn keyword sicadStatement rbdbwin rbdefs rbedit rbfdel rbfill
    +syn keyword sicadStatement rbfill2 rbfload rbfload2 rbfnew rbfnew2
    +syn keyword sicadStatement rbfpar rbfree rbg rbgetcol rbgetdst
    +syn keyword sicadStatement rbinfo rbpaste rbpixel rbrstore rbsnap
    +syn keyword sicadStatement rbsta rbtile rbtrpix rbvtor rcol
    +syn keyword sicadStatement rd rdchange re reb rebmod
    +syn keyword sicadStatement refunc ren renel rk rkpos
    +syn keyword sicadStatement rohr rohrpos rpr rr rr0
    +syn keyword sicadStatement rra rrar rs samtosdb sav
    +syn keyword sicadStatement savd savesim savx scol scopy
    +syn keyword sicadStatement scopye sdbtosam sddk sdwr se
    +syn keyword sicadStatement selaus selpos seman semi sesch
    +syn keyword sicadStatement setscl setvar sfclntpf sfconn sffetchf
    +syn keyword sicadStatement sffpropi sfftypi sfqugeoc sfquwhcl sfself
    +syn keyword sicadStatement sfstat sftest sge sid sie
    +syn keyword sicadStatement sig sigp skk skks sn
    +syn keyword sicadStatement sn21 snpa snpar snparp snparps
    +syn keyword sicadStatement snpars snpas snpd snpi snpkor
    +syn keyword sicadStatement snpl snpm sob sob0 sobloe
    +syn keyword sicadStatement sobs sof sop split spr
    +syn keyword sicadStatement sqdadd sqdlad sqdold sqdsav
    +syn keyword sicadStatement sr sres srt sset stat
    +syn keyword sicadStatement stdtxt string strukt strupru suinfl
    +syn keyword sicadStatement suinflk suinfls supo supo1 sva
    +syn keyword sicadStatement svr sy sya syly sysout
    +syn keyword sicadStatement syu syux taa tabeg tabl
    +syn keyword sicadStatement tabm tam tanr tapg tapos
    +syn keyword sicadStatement tarkd tas tase tb tbadd
    +syn keyword sicadStatement tbd tbext tbget tbint tbout
    +syn keyword sicadStatement tbput tbsat tbsel tbstr tcaux
    +syn keyword sicadStatement tccable tcchkrep tccomm tccond tcdbg
    +syn keyword sicadStatement tcgbnr tcgrpos tcinit tclconv tcmodel
    +syn keyword sicadStatement tcnwe tcpairs tcpath tcrect tcrmdli
    +syn keyword sicadStatement tcscheme tcschmap tcse tcselc tcstar
    +syn keyword sicadStatement tcstrman tcsubnet tcsymbol tctable tcthrcab
    +syn keyword sicadStatement tctrans tctst tdb tdbdel tdbget
    +syn keyword sicadStatement tdblist tdbput tgmod titel tmoff
    +syn keyword sicadStatement tmon tp tpa tps tpta
    +syn keyword sicadStatement tra trans transkdo transopt transpro
    +syn keyword sicadStatement triangle trm trpg trrkd trs
    +syn keyword sicadStatement ts tsa tx txa txchk
    +syn keyword sicadStatement txcng txju txl txp txpv
    +syn keyword sicadStatement txtcmp txv txz uckon uiinfo
    +syn keyword sicadStatement uistatus umdk umdk1 umdka umge
    +syn keyword sicadStatement umges umr verbo verflli verif
    +syn keyword sicadStatement verly versinfo vfg vpactive vpcenter
    +syn keyword sicadStatement vpcreate vpdelete vpinfo vpmodify vpscroll
    +syn keyword sicadStatement vpsta wabsym wzmerk zdrhf zdrhfn
    +syn keyword sicadStatement zdrhfw zdrhfwn zefp zfl zflaus
    +syn keyword sicadStatement zka zlel zlels zortf zortfn
    +syn keyword sicadStatement zortfw zortfwn zortp zortpn zparb
    +syn keyword sicadStatement zparbn zparf zparfn zparfw zparfwn
    +syn keyword sicadStatement zparp zparpn zwinkp zwinkpn
    +
    +" Define the default highlighting.
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link sicadLabel PreProc
    +hi def link sicadLabel1 sicadLabel
    +hi def link sicadLabel2 sicadLabel
    +hi def link sicadConditional Conditional
    +hi def link sicadBoolean Boolean
    +hi def link sicadNumber Number
    +hi def link sicadFloat Float
    +hi def link sicadOperator Operator
    +hi def link sicadStatement Statement
    +hi def link sicadParameter sicadStatement
    +hi def link sicadGoto sicadStatement
    +hi def link sicadLineCont sicadStatement
    +hi def link sicadString String
    +hi def link sicadComment Comment
    +hi def link sicadSpecial Special
    +hi def link sicadIdentifier Type
    +"  hi def link sicadIdentifier Identifier
    +hi def link sicadError Error
    +hi def link sicadParenError sicadError
    +hi def link sicadApostropheError sicadError
    +hi def link sicadStringError sicadError
    +hi def link sicadCommentError sicadError
    +"  hi def link sqlStatement Special  " modified highlight group in sql.vim
    +
    +
    +let b:current_syntax = "sicad"
    +
    +" vim: ts=8 sw=2
    diff --git a/.config/vim/syntax/sieve.vim b/.config/vim/syntax/sieve.vim
    new file mode 100644
    index 0000000..35b4dfb
    --- /dev/null
    +++ b/.config/vim/syntax/sieve.vim
    @@ -0,0 +1,55 @@
    +" Vim syntax file
    +" Language:             Sieve filtering language input file
    +" Previous Maintainer:  Nikolai Weibull 
    +" Latest Revision:      2007-10-25
    +
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +syn keyword sieveTodo         contained TODO FIXME XXX NOTE
    +
    +syn region  sieveComment      start='/\*' end='\*/' contains=sieveTodo,@Spell
    +syn region  sieveComment      display oneline start='#' end='$'
    +                              \ contains=sieveTodo,@Spell
    +
    +syn case ignore
    +
    +syn match   sieveTag          display ':\h\w*'
    +
    +syn match   sieveNumber       display '\<\d\+[KMG]\=\>'
    +
    +syn match   sieveSpecial      display '\\["\\]'
    +
    +syn region  sieveString       start=+"+ skip=+\\\\\|\\"+ end=+"+
    +                              \ contains=sieveSpecial
    +syn region  sieveString       start='text:' end='\n.\n'
    +
    +syn keyword sieveConditional  if elsif else
    +syn keyword sieveTest         address allof anyof envelope exists false header
    +                              \ not size true
    +syn keyword sievePreProc      require stop
    +syn keyword sieveAction       reject fileinto redirect keep discard
    +syn keyword sieveKeyword      vacation
    +
    +syn case match
    +
    +hi def link sieveTodo        Todo
    +hi def link sieveComment     Comment
    +hi def link sieveTag         Type
    +hi def link sieveNumber      Number
    +hi def link sieveSpecial     Special
    +hi def link sieveString      String
    +hi def link sieveConditional Conditional
    +hi def link sieveTest        Keyword
    +hi def link sievePreProc     PreProc
    +hi def link sieveAction      Function
    +hi def link sieveKeyword     Keyword
    +
    +let b:current_syntax = "sieve"
    +
    +let &cpo = s:cpo_save
    +unlet s:cpo_save
    diff --git a/.config/vim/syntax/sil.vim b/.config/vim/syntax/sil.vim
    new file mode 100644
    index 0000000..43158da
    --- /dev/null
    +++ b/.config/vim/syntax/sil.vim
    @@ -0,0 +1,179 @@
    +" This source file is part of the Swift.org open source project
    +"
    +" Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors
    +" Licensed under Apache License v2.0 with Runtime Library Exception
    +"
    +" See https://swift.org/LICENSE.txt for license information
    +" See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
    +"
    +" Vim syntax file
    +" Language: sil
    +"
    +" Vim maintainer: Emir SARI 
    +
    +if exists("b:current_syntax")
    +    finish
    +endif
    +
    +let s:keepcpo = &cpo
    +set cpo&vim
    +
    +syn keyword silStage skipwhite nextgroup=silStages
    +      \ sil_stage
    +syn keyword silStages
    +      \ canonical
    +      \ raw
    +
    +syn match silIdentifier skipwhite
    +      \ /@\<[A-Za-z_0-9]\+\>/
    +
    +syn match silConvention skipwhite
    +      \ /$\?@convention/
    +syn region silConvention contained contains=silConventions
    +      \ start="@convention(" end=")"
    +syn keyword silConventions
    +      \ block
    +      \ c
    +      \ method
    +      \ objc_method
    +      \ sil_differentiability_witness
    +      \ thick
    +      \ thin
    +      \ witness_method
    +
    +syn match silFunctionType skipwhite
    +      \ /@\(\\|\\|\\|\\|\\|\\|\\|\\|\\|\\|\\|\\|\\)/
    +syn match silMetatypeType skipwhite
    +      \ /@\(\\|\\|\\)/
    +
    +" TODO: handle [tail_elems sil-type * sil-operand]
    +syn region silAttribute contains=silAttributes
    +      \ start="\[" end="\]"
    +syn keyword silAttributes contained containedin=silAttribute
    +      \ abort
    +      \ deinit
    +      \ delegatingself
    +      \ derivedself
    +      \ derivedselfonly
    +      \ dynamic
    +      \ exact
    +      \ init
    +      \ modify
    +      \ mutating
    +      \ objc
    +      \ open
    +      \ read
    +      \ rootself
    +      \ stack
    +      \ static
    +      \ strict
    +      \ unknown
    +      \ unsafe
    +      \ var
    +
    +syn keyword swiftImport import skipwhite nextgroup=swiftImportModule
    +syn match swiftImportModule /\<[A-Za-z_][A-Za-z_0-9]*\>/ contained nextgroup=swiftImportComponent
    +syn match swiftImportComponent /\.\<[A-Za-z_][A-Za-z_0-9]*\>/ contained nextgroup=swiftImportComponent
    +
    +syn region swiftComment start="/\*" end="\*/" contains=swiftComment,swiftTodo
    +syn region swiftLineComment start="//" end="$" contains=swiftTodo
    +
    +syn match swiftLineComment   /^#!.*/
    +syn match swiftTypeName  /\<[A-Z][a-zA-Z_0-9]*\>/
    +syn match swiftDecimal /\<[-]\?[0-9]\+\>/
    +syn match swiftDecimal /\<[-+]\?[0-9]\+\>/
    +
    +syn match swiftTypeName /\$\*\<\?[A-Z][a-zA-Z0-9_]*\>/
    +syn match swiftVarName /%\<[A-z[a-z_0-9]\+\(#[0-9]\+\)\?\>/
    +
    +syn keyword swiftKeyword break case continue default do else for if in static switch repeat return where while skipwhite
    +
    +syn keyword swiftKeyword sil internal thunk skipwhite
    +syn keyword swiftKeyword public hidden private shared public_external hidden_external skipwhite
    +syn keyword swiftKeyword getter setter allocator initializer enumelt destroyer globalaccessor objc skipwhite
    +syn keyword swiftKeyword alloc_global alloc_stack alloc_ref alloc_ref_dynamic alloc_box alloc_existential_box alloc_value_buffer dealloc_stack dealloc_box dealloc_existential_box dealloc_ref dealloc_partial_ref dealloc_value_buffer skipwhite
    +syn keyword swiftKeyword debug_value debug_value_addr skipwhite
    +syn keyword swiftKeyword load load_unowned store assign mark_uninitialized mark_function_escape copy_addr destroy_addr index_addr index_raw_pointer bind_memory to skipwhite
    +syn keyword swiftKeyword strong_retain strong_release strong_retain_unowned ref_to_unowned unowned_to_ref unowned_retain unowned_release load_weak store_unowned store_weak fix_lifetime autorelease_value set_deallocating is_unique is_escaping_closure skipwhite
    +syn keyword swiftKeyword function_ref integer_literal float_literal string_literal global_addr skipwhite
    +syn keyword swiftKeyword class_method super_method witness_method objc_method objc_super_method skipwhite
    +syn keyword swiftKeyword partial_apply builtin skipwhite
    +syn keyword swiftApplyKeyword apply try_apply skipwhite
    +syn keyword swiftKeyword metatype value_metatype existential_metatype skipwhite
    +syn keyword swiftKeyword retain_value release_value retain_value_addr release_value_addr tuple tuple_extract tuple_element_addr struct struct_extract struct_element_addr ref_element_addr skipwhite
    +syn keyword swiftKeyword init_enum_data_addr unchecked_enum_data unchecked_take_enum_data_addr inject_enum_addr skipwhite
    +syn keyword swiftKeyword init_existential_addr init_existential_value init_existential_metatype deinit_existential_addr deinit_existential_value open_existential_addr open_existential_box open_existential_box_value open_existential_metatype init_existential_ref open_existential_ref open_existential_value skipwhite
    +syn keyword swiftKeyword upcast address_to_pointer pointer_to_address pointer_to_thin_function unchecked_addr_cast unchecked_ref_cast unchecked_ref_cast_addr ref_to_raw_pointer ref_to_bridge_object ref_to_unmanaged unmanaged_to_ref raw_pointer_to_ref skipwhite
    +syn keyword swiftKeyword convert_function thick_to_objc_metatype thin_function_to_pointer objc_to_thick_metatype thin_to_thick_function unchecked_ref_bit_cast unchecked_trivial_bit_cast bridge_object_to_ref bridge_object_to_word unchecked_bitwise_cast skipwhite
    +syn keyword swiftKeyword objc_existential_metatype_to_object objc_metatype_to_object objc_protocol skipwhite
    +syn keyword swiftKeyword unconditional_checked_cast unconditional_checked_cast_addr unconditional_checked_cast_value skipwhite
    +syn keyword swiftKeyword cond_fail skipwhite
    +syn keyword swiftKeyword unreachable return throw br cond_br switch_value select_enum select_enum_addr select_value switch_enum switch_enum_addr dynamic_method_br checked_cast_br checked_cast_value_br checked_cast_addr_br skipwhite
    +syn keyword swiftKeyword project_box project_existential_box project_value_buffer project_block_storage init_block_storage_header copy_block mark_dependence skipwhite
    +
    +syn keyword swiftTypeDefinition class extension protocol struct typealias enum skipwhite nextgroup=swiftTypeName
    +syn region swiftTypeAttributes start="\[" end="\]" skipwhite contained nextgroup=swiftTypeName
    +syn match swiftTypeName /\<[A-Za-z_][A-Za-z_0-9\.]*\>/ contained nextgroup=swiftTypeParameters
    +
    +syn region swiftTypeParameters start="<" end=">" skipwhite contained
    +
    +syn keyword swiftFuncDefinition func skipwhite nextgroup=swiftFuncAttributes,swiftFuncName,swiftOperator
    +syn region swiftFuncAttributes start="\[" end="\]" skipwhite contained nextgroup=swiftFuncName,swiftOperator
    +syn match swiftFuncName /\<[A-Za-z_][A-Za-z_0-9]*\>/ skipwhite contained nextgroup=swiftTypeParameters
    +syn keyword swiftFuncKeyword subscript init destructor nextgroup=swiftTypeParameters
    +
    +syn keyword swiftVarDefinition var skipwhite nextgroup=swiftVarName
    +syn keyword swiftVarDefinition let skipwhite nextgroup=swiftVarName
    +syn match swiftVarName /\<[A-Za-z_][A-Za-z_0-9]*\>/ skipwhite contained
    +
    +syn keyword swiftDefinitionModifier static
    +
    +syn match swiftImplicitVarName /\$\<[A-Za-z_0-9]\+\>/
    +
    +hi def link swiftImport Include
    +hi def link swiftImportModule Title
    +hi def link swiftImportComponent Identifier
    +hi def link swiftApplyKeyword Statement
    +hi def link swiftKeyword Statement
    +hi def link swiftTypeDefinition Define
    +hi def link swiftTypeName Type
    +hi def link swiftTypeParameters Special
    +hi def link swiftTypeAttributes PreProc
    +hi def link swiftFuncDefinition Define
    +hi def link swiftDefinitionModifier Define
    +hi def link swiftFuncName Function
    +hi def link swiftFuncAttributes PreProc
    +hi def link swiftFuncKeyword Function
    +hi def link swiftVarDefinition Define
    +hi def link swiftVarName Identifier
    +hi def link swiftImplicitVarName Identifier
    +hi def link swiftIdentifierKeyword Identifier
    +hi def link swiftTypeDeclaration Delimiter
    +hi def link swiftBoolean Boolean
    +hi def link swiftString String
    +hi def link swiftInterpolation Special
    +hi def link swiftComment Comment
    +hi def link swiftLineComment Comment
    +hi def link swiftDecimal Number
    +hi def link swiftHex Number
    +hi def link swiftOct Number
    +hi def link swiftBin Number
    +hi def link swiftOperator Function
    +hi def link swiftChar Character
    +hi def link swiftLabel Label
    +hi def link swiftNew Operator
    +
    +hi def link silStage Special
    +hi def link silStages Type
    +hi def link silConvention Special
    +hi def link silConventionParameter Special
    +hi def link silConventions Type
    +hi def link silIdentifier Identifier
    +hi def link silFunctionType Special
    +hi def link silMetatypeType Special
    +hi def link silAttribute PreProc
    +
    +let b:current_syntax = "sil"
    +
    +let &cpo = s:keepcpo
    +unlet s:keepcpo
    diff --git a/.config/vim/syntax/simula.vim b/.config/vim/syntax/simula.vim
    new file mode 100644
    index 0000000..82f66d0
    --- /dev/null
    +++ b/.config/vim/syntax/simula.vim
    @@ -0,0 +1,87 @@
    +" Vim syntax file
    +" Language:	Simula
    +" Maintainer:	Haakon Riiser 
    +" URL:		http://folk.uio.no/hakonrk/vim/syntax/simula.vim
    +" Last Change:	2001 May 15
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +    finish
    +endif
    +
    +" No case sensitivity in Simula
    +syn case	ignore
    +
    +syn match	simulaComment		"^%.*$" contains=simulaTodo
    +syn region	simulaComment		start="!\|\" end=";" contains=simulaTodo
    +
    +" Text between the keyword 'end' and either a semicolon or one of the
    +" keywords 'end', 'else', 'when' or 'otherwise' is also a comment
    +syn region	simulaComment		start="\"lc=3 matchgroup=Statement end=";\|\<\(end\|else\|when\|otherwise\)\>"
    +
    +syn match	simulaCharError		"'.\{-2,}'"
    +syn match	simulaCharacter		"'.'"
    +syn match	simulaCharacter		"'!\d\{-}!'" contains=simulaSpecialChar
    +syn match	simulaString		'".\{-}"' contains=simulaSpecialChar,simulaTodo
    +
    +syn keyword	simulaBoolean		true false
    +syn keyword	simulaCompound		begin end
    +syn keyword	simulaConditional	else if otherwise then until when
    +syn keyword	simulaConstant		none notext
    +syn keyword	simulaFunction		procedure
    +syn keyword	simulaOperator		eq eqv ge gt imp in is le lt ne new not qua
    +syn keyword	simulaRepeat		while for
    +syn keyword	simulaReserved		activate after at before delay go goto label prior reactivate switch to
    +syn keyword	simulaStatement		do inner inspect step this
    +syn keyword	simulaStorageClass	external hidden name protected value
    +syn keyword	simulaStructure		class
    +syn keyword	simulaType		array boolean character integer long real short text virtual
    +syn match	simulaAssigned		"\<\h\w*\s*\((.*)\)\=\s*:\(=\|-\)"me=e-2
    +syn match	simulaOperator		"[&:=<>+\-*/]"
    +syn match	simulaOperator		"\"
    +syn match	simulaOperator		"\"
    +syn match	simulaReferenceType	"\"
    +" Real with optional exponent
    +syn match	simulaReal		"-\=\<\d\+\(\.\d\+\)\=\(&&\=[+-]\=\d\+\)\=\>"
    +" Real starting with a `.', optional exponent
    +syn match	simulaReal		"-\=\.\d\+\(&&\=[+-]\=\d\+\)\=\>"
    +
    +
    +hi def link simulaAssigned		Identifier
    +hi def link simulaBoolean		Boolean
    +hi def link simulaCharacter		Character
    +hi def link simulaCharError		Error
    +hi def link simulaComment		Comment
    +hi def link simulaCompound		Statement
    +hi def link simulaConditional		Conditional
    +hi def link simulaConstant		Constant
    +hi def link simulaFunction		Function
    +hi def link simulaNumber			Number
    +hi def link simulaOperator		Operator
    +hi def link simulaReal			Float
    +hi def link simulaReferenceType		Type
    +hi def link simulaRepeat			Repeat
    +hi def link simulaReserved		Error
    +hi def link simulaSemicolon		Statement
    +hi def link simulaSpecial		Special
    +hi def link simulaSpecialChar		SpecialChar
    +hi def link simulaSpecialCharErr		Error
    +hi def link simulaStatement		Statement
    +hi def link simulaStorageClass		StorageClass
    +hi def link simulaString			String
    +hi def link simulaStructure		Structure
    +hi def link simulaTodo			Todo
    +hi def link simulaType			Type
    +
    +
    +let b:current_syntax = "simula"
    +" vim: sts=4 sw=4 ts=8
    diff --git a/.config/vim/syntax/sinda.vim b/.config/vim/syntax/sinda.vim
    new file mode 100644
    index 0000000..a6e5b45
    --- /dev/null
    +++ b/.config/vim/syntax/sinda.vim
    @@ -0,0 +1,129 @@
    +" Vim syntax file
    +" Language:     sinda85, sinda/fluint input file
    +" Maintainer:   Adrian Nagle, anagle@ball.com
    +" Last Change:  2003 May 11
    +" Filenames:    *.sin
    +" URL:		http://www.naglenet.org/vim/syntax/sinda.vim
    +" MAIN URL:     http://www.naglenet.org/vim/
    +
    +
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +
    +
    +" Ignore case
    +syn case ignore
    +
    +
    +
    +"
    +"
    +" Begin syntax definitions for sinda input and output files.
    +"
    +
    +" Force free-form fortran format
    +let fortran_free_source=1
    +
    +" Load FORTRAN syntax file
    +runtime! syntax/fortran.vim
    +unlet b:current_syntax
    +
    +
    +
    +" Define keywords for SINDA
    +syn keyword sindaMacro    BUILD BUILDF DEBON DEBOFF DEFMOD FSTART FSTOP
    +
    +syn keyword sindaOptions  TITLE PPSAVE RSI RSO OUTPUT SAVE QMAP USER1 USER2
    +syn keyword sindaOptions  MODEL PPOUT NOLIST MLINE NODEBUG DIRECTORIES
    +syn keyword sindaOptions  DOUBLEPR
    +
    +syn keyword sindaRoutine  FORWRD FWDBCK STDSTL FASTIC
    +
    +syn keyword sindaControl  ABSZRO ACCELX ACCELY ACCELZ ARLXCA ATMPCA
    +syn keyword sindaControl  BACKUP CSGFAC DRLXCA DTIMEH DTIMEI DTIMEL
    +syn keyword sindaControl  DTIMES DTMPCA EBALNA EBALSA EXTLIM ITEROT
    +syn keyword sindaControl  ITERXT ITHOLD NLOOPS NLOOPT OUTPUT OPEITR
    +syn keyword sindaControl  PATMOS SIGMA TIMEO TIMEND UID
    +
    +syn keyword sindaSubRoutine  ASKERS ADARIN ADDARY ADDMOD ARINDV
    +syn keyword sindaSubRoutine  RYINV ARYMPY ARYSUB ARYTRN BAROC
    +syn keyword sindaSubRoutine  BELACC BNDDRV BNDGET CHENNB CHGFLD
    +syn keyword sindaSubRoutine  CHGLMP CHGSUC CHGVOL CHKCHL CHKCHP
    +syn keyword sindaSubRoutine  CNSTAB COMBAL COMPLQ COMPRS CONTRN
    +syn keyword sindaSubRoutine  CPRINT CRASH CRVINT CRYTRN CSIFLX
    +syn keyword sindaSubRoutine  CVTEMP D11CYL C11DAI D11DIM D11MCY
    +syn keyword sindaSubRoutine  D11MDA D11MDI D11MDT D12CYL D12MCY
    +syn keyword sindaSubRoutine  D12MDA D1D1DA D1D1IM D1D1WM D1D2DA
    +syn keyword sindaSubRoutine  D1D2WM D1DEG1 D1DEG2 D1DG1I D1IMD1
    +syn keyword sindaSubRoutine  D1IMIM D1IMWM D1M1DA D1M2MD D1M2WM
    +syn keyword sindaSubRoutine  D1MDG1 D1MDG2 D2D1WM D1DEG1 D2DEG2
    +syn keyword sindaSubRoutine  D2D2
    +
    +syn keyword sindaIdentifier  BIV CAL DIM DIV DPM DPV DTV GEN PER PIV PIM
    +syn keyword sindaIdentifier  SIM SIV SPM SPV TVS TVD
    +
    +
    +
    +" Define matches for SINDA
    +syn match  sindaFortran     "^F[0-9 ]"me=e-1
    +syn match  sindaMotran      "^M[0-9 ]"me=e-1
    +
    +syn match  sindaComment     "^C.*$"
    +syn match  sindaComment     "^R.*$"
    +syn match  sindaComment     "\$.*$"
    +
    +syn match  sindaHeader      "^header[^,]*"
    +
    +syn match  sindaIncludeFile "include \+[^ ]\+"hs=s+8 contains=fortranInclude
    +
    +syn match  sindaMacro       "^PSTART"
    +syn match  sindaMacro       "^PSTOP"
    +syn match  sindaMacro       "^FAC"
    +
    +syn match  sindaInteger     "-\=\<[0-9]*\>"
    +syn match  sindaFloat       "-\=\<[0-9]*\.[0-9]*"
    +syn match  sindaScientific  "-\=\<[0-9]*\.[0-9]*E[-+]\=[0-9]\+\>"
    +
    +syn match  sindaEndData		 "^END OF DATA"
    +
    +if exists("thermal_todo")
    +  execute 'syn match  sindaTodo ' . '"^'.thermal_todo.'.*$"'
    +else
    +  syn match  sindaTodo     "^?.*$"
    +endif
    +
    +
    +
    +" Define the default highlighting
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link sindaMacro		Macro
    +hi def link sindaOptions		Special
    +hi def link sindaRoutine		Type
    +hi def link sindaControl		Special
    +hi def link sindaSubRoutine	Function
    +hi def link sindaIdentifier	Identifier
    +
    +hi def link sindaFortran		PreProc
    +hi def link sindaMotran		PreProc
    +
    +hi def link sindaComment		Comment
    +hi def link sindaHeader		Typedef
    +hi def link sindaIncludeFile	Type
    +hi def link sindaInteger		Number
    +hi def link sindaFloat		Float
    +hi def link sindaScientific	Float
    +
    +hi def link sindaEndData		Macro
    +
    +hi def link sindaTodo		Todo
    +
    +
    +
    +let b:current_syntax = "sinda"
    +
    +" vim: ts=8 sw=2
    diff --git a/.config/vim/syntax/sindacmp.vim b/.config/vim/syntax/sindacmp.vim
    new file mode 100644
    index 0000000..88373eb
    --- /dev/null
    +++ b/.config/vim/syntax/sindacmp.vim
    @@ -0,0 +1,61 @@
    +" Vim syntax file
    +" Language:     sinda85, sinda/fluint compare file
    +" Maintainer:   Adrian Nagle, anagle@ball.com
    +" Last Change:  2003 May 11
    +" Filenames:    *.cmp
    +" URL:		http://www.naglenet.org/vim/syntax/sindacmp.vim
    +" MAIN URL:     http://www.naglenet.org/vim/
    +
    +
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +
    +
    +" Ignore case
    +syn case ignore
    +
    +
    +
    +"
    +" Begin syntax definitions for compare files.
    +"
    +
    +" Define keywords for sinda compare (sincomp)
    +syn keyword sindacmpUnit     celsius fahrenheit
    +
    +
    +
    +" Define matches for sinda compare (sincomp)
    +syn match  sindacmpTitle       "Steady State Temperature Comparison"
    +
    +syn match  sindacmpLabel       "File  [1-6] is"
    +
    +syn match  sindacmpHeader      "^ *Node\( *File  \d\)* *Node Description"
    +
    +syn match  sindacmpInteger     "^ *-\=\<[0-9]*\>"
    +syn match  sindacmpFloat       "-\=\<[0-9]*\.[0-9]*"
    +
    +
    +
    +" Define the default highlighting
    +" Only when an item doesn't have highlighting yet
    +
    +hi def link sindacmpTitle		     Type
    +hi def link sindacmpUnit		     PreProc
    +
    +hi def link sindacmpLabel		     Statement
    +
    +hi def link sindacmpHeader		     sindaHeader
    +
    +hi def link sindacmpInteger	     Number
    +hi def link sindacmpFloat		     Special
    +
    +
    +
    +let b:current_syntax = "sindacmp"
    +
    +" vim: ts=8 sw=2
    diff --git a/.config/vim/syntax/sindaout.vim b/.config/vim/syntax/sindaout.vim
    new file mode 100644
    index 0000000..c362f19
    --- /dev/null
    +++ b/.config/vim/syntax/sindaout.vim
    @@ -0,0 +1,83 @@
    +" Vim syntax file
    +" Language:     sinda85, sinda/fluint output file
    +" Maintainer:   Adrian Nagle, anagle@ball.com
    +" Last Change:  2003 May 11
    +" Filenames:    *.out
    +" URL:		http://www.naglenet.org/vim/syntax/sindaout.vim
    +" MAIN URL:     http://www.naglenet.org/vim/
    +
    +
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +
    +
    +
    +" Ignore case
    +syn case match
    +
    +
    +
    +" Load SINDA syntax file
    +runtime! syntax/sinda.vim
    +unlet b:current_syntax
    +
    +
    +
    +"
    +"
    +" Begin syntax definitions for sinda output files.
    +"
    +
    +" Define keywords for sinda output
    +syn case match
    +
    +syn keyword sindaoutPos       ON SI
    +syn keyword sindaoutNeg       OFF ENG
    +
    +
    +
    +" Define matches for sinda output
    +syn match sindaoutFile	       ": \w*\.TAK"hs=s+2
    +
    +syn match sindaoutInteger      "T\=[0-9]*\>"ms=s+1
    +
    +syn match sindaoutSectionDelim "[-<>]\{4,}" contains=sindaoutSectionTitle
    +syn match sindaoutSectionDelim ":\=\.\{4,}:\=" contains=sindaoutSectionTitle
    +syn match sindaoutSectionTitle "[-<:] \w[0-9A-Za-z_() ]\+ [->:]"hs=s+1,me=e-1
    +
    +syn match sindaoutHeaderDelim  "=\{5,}"
    +syn match sindaoutHeaderDelim  "|\{5,}"
    +syn match sindaoutHeaderDelim  "+\{5,}"
    +
    +syn match sindaoutLabel		"Input File:" contains=sindaoutFile
    +syn match sindaoutLabel		"Begin Solution: Routine"
    +
    +syn match sindaoutError		"<<< Error >>>"
    +
    +
    +" Define the default highlighting
    +" Only when an item doesn't have highlighting yet
    +
    +hi sindaHeaderDelim  ctermfg=Black ctermbg=Green	       guifg=Black guibg=Green
    +
    +hi def link sindaoutPos		     Statement
    +hi def link sindaoutNeg		     PreProc
    +hi def link sindaoutTitle		     Type
    +hi def link sindaoutFile		     sindaIncludeFile
    +hi def link sindaoutInteger	     sindaInteger
    +
    +hi def link sindaoutSectionDelim	      Delimiter
    +hi def link sindaoutSectionTitle	     Exception
    +hi def link sindaoutHeaderDelim	     SpecialComment
    +hi def link sindaoutLabel		     Identifier
    +
    +hi def link sindaoutError		     Error
    +
    +
    +
    +let b:current_syntax = "sindaout"
    +
    +" vim: ts=8 sw=2
    diff --git a/.config/vim/syntax/sisu.vim b/.config/vim/syntax/sisu.vim
    new file mode 100644
    index 0000000..264aae0
    --- /dev/null
    +++ b/.config/vim/syntax/sisu.vim
    @@ -0,0 +1,275 @@
    +" SiSU Vim syntax file
    +" SiSU Maintainer: Ralph Amissah 
    +" SiSU Markup:     SiSU (sisu-5.6.7)
    +" Last Change:     2017 Jun 22
    +" URL: 
    +"      
    +"(originally looked at Ruby Vim by Mirko Nasato)
    +
    +" quit when a syntax file was already loaded
    +if exists("b:current_syntax")
    +  finish
    +endif
    +let s:cpo_save = &cpo
    +set cpo&vim
    +
    +"% "Errors:
    +syn match sisu_error contains=sisu_link,sisu_error_wspace ""
    +
    +"% "Markers Identifiers:
    +if !exists("sisu_no_identifiers")
    +  syn match   sisu_mark_endnote                                           "\~^"
    +  syn match   sisu_break               contains=@NoSpell                  " \\\\\( \|$\)\|
    \|
    " + syn match sisu_control contains=@NoSpell "^\(-\\\\-\|=\\\\=\|-\.\.-\|<:p[bn]>\)\s*$" + syn match sisu_control contains=@NoSpell "^<:\(bo\|---\)>\s*$" + syn match sisu_marktail contains=@NoSpell "^--[+~-]#\s*$" + syn match sisu_marktail "[~-]#" + syn match sisu_control "\"" + syn match sisu_underline "\(^\| \)_[a-zA-Z0-9]\+_\([ .,]\|$\)" + syn match sisu_number contains=@NoSpell "[0-9a-f]\{32\}\|[0-9a-f]\{64\}" + syn match sisu_link contains=@NoSpell "\(_\?https\?://\|\.\.\/\)\S\+" + syn match sisu_link " \*\~\S\+" + syn match sisu_require contains=@NoSpell "^<<\s*[a-zA-Z0-9^./_-]\+\.ss[it]$" + syn match sisu_structure "^:A\~$" + +"% "Document Sub Headers: + syn match sisu_sub_header_title "^\s\+:\(subtitle\|short\|edition\|language\|lang_char\|note\):\s" "group=sisu_header_content + syn match sisu_sub_header_creator "^\s\+:\(author\|editor\|contributor\|illustrator\|photographer\|translator\|digitized_by\|prepared_by\|audio\|video\):\s" " &hon &institution + syn match sisu_sub_header_rights "^\s\+:\(copyright\|text\|translation\|illustrations\|photographs\|preparation\|digitization\|audio\|video\|license\|all\):\s" " access_rights license + syn match sisu_sub_header_classify "^\s\+:\(topic_register\|keywords\|subject\|dewey\|loc\):\s" + syn match sisu_sub_header_identifier "^\s\+:\(oclc\|isbn\):\s" + syn match sisu_sub_header_date "^\s\+:\(added_to_site\|available\|created\|issued\|modified\|published\|valid\|translated\|original_publication\):\s" + syn match sisu_sub_header_original "^\s\+:\(publisher\|date\|language\|lang_char\|institution\|nationality\|source\):\s" + syn match sisu_sub_header_make "^\s\+:\(headings\|num_top\|breaks\|language\|italics\|bold\|emphasis\|substitute\|omit\|plaintext_wrap\|texpdf_font_mono\|texpdf_font\|stamp\|promo\|ad\|manpage\|home_button_text\|home_button_image\|cover_image\|footer\):\s" + syn match sisu_sub_header_notes "^\s\+:\(description\|abstract\|comment\|coverage\|relation\|source\|history\|type\|format\|prefix\|prefix_[ab]\|suffix\):\s" + syn match sisu_within_index_ignore "\S\+[:;]\(\s\+\|$\)" + syn match sisu_within_index "[:|;]\|+\d\+" + +"% "semantic markers: (ignore) + syn match sisu_sem_marker ";{\|};[a-z._]*[a-z]" + syn match sisu_sem_marker_block "\([a-z][a-z._]*\|\):{\|}:[a-z._]*[a-z]" + syn match sisu_sem_ex_marker ";\[\|\];[a-z._]*[a-z]" + syn match sisu_sem_ex_marker_block "\([a-z][a-z._]*\|\):\[\|\]:[a-z._]*[a-z]" + syn match sisu_sem_block contains=sisu_error,sisu_error_wspace,sisu_content_alt,sisu_link,sisu_linked,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_mark_endnote,sisu_content_endnote "\([a-z]*\):{[^}].\{-}}:\1" + syn match sisu_sem_content contains=sisu_error,sisu_error_wspace,sisu_content_alt,sisu_link,sisu_linked,sisu_break,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker ";{[^}].\{-}};[a-z]\+" + syn match sisu_sem_ex_block contains=sisu_error,sisu_error_wspace,sisu_content_alt,sisu_link,sisu_linked,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_mark_endnote,sisu_content_endnote "\([a-z]*\):\[[^}].\{-}\]:\1" + syn match sisu_sem_ex_content contains=sisu_error,sisu_error_wspace,sisu_content_alt,sisu_link,sisu_linked,sisu_break,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker ";\[[^}].\{-}\];[a-z]\+" +endif + +"% "URLs Numbers And ASCII Codes: +syn match sisu_number "\<\(0x\x\+\|0b[01]\+\|0\o\+\|0\.\d\+\|0\|[1-9][\.0-9_]*\)\>" +syn match sisu_number "?\(\\M-\\C-\|\\c\|\\C-\|\\M-\)\=\(\\\o\{3}\|\\x\x\{2}\|\\\=\w\)" + +"% "Tuned Error: (is error if not already matched) +syn match sisu_error contains=sisu_error "[\~/\*!_]{\|}[\~/\*!_]" +syn match sisu_error contains=sisu_error "
    ]" + +"% "Simple Paired Enclosed Markup: +"url/link +syn region sisu_link contains=sisu_error,sisu_error_wspace matchgroup=sisu_action start="^<<\s*|[a-zA-Z0-9^._-]\+|@|[a-zA-Z0-9^._-]\+|"rs=s+2 end="$" + +"% "Document Header: +" title +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_title matchgroup=sisu_header start="^[@]title:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" creator +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_creator matchgroup=sisu_header start="^[@]creator:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" dates +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_date matchgroup=sisu_header start="^[@]date:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" publisher +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_publisher matchgroup=sisu_header start="^[@]publisher:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" rights +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_rights matchgroup=sisu_header start="^[@]rights:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" classify document +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_classify matchgroup=sisu_header start="^[@]classify:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" identifier document +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_identifier matchgroup=sisu_header start="^[@]identifier:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" original language (depreciated) +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_original matchgroup=sisu_header start="^[@]original:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" notes +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_notes matchgroup=sisu_header start="^[@]notes:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" links of interest +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_linked,sisu_sub_header_links matchgroup=sisu_header start="^[@]links:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" make, processing instructions +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_make matchgroup=sisu_header start="^[@]make:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" + +"% "Headings: +syn region sisu_heading contains=sisu_mark_endnote,sisu_content_endnote,sisu_marktail,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_ocn,sisu_error,sisu_error_wspace matchgroup=sisu_structure start="^\([1-4]\|:\?[A-D]\)\~\(\S\+\|[^-]\)" end="$" + +"% "Block Group Text: +" table +syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^table{.\+" end="}table" +" table +syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^```\s\+table" end="^```\(\s\|$\)" +syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^{\(t\|table\)\(\~h\)\?\(\sc[0-9]\+;\)\?[0-9; ]*}" end="\n$" +" block, group, poem, alt +syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^\z(block\|group\|poem\|alt\){" end="^}\z1" +syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^```\s\+\(block\|group\|poem\|alt\)" end="^```\(\s\|$\)" +" box +syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^box\(\.[a-z]\+\)\?{" end="^}box" +syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^```\s\+\box\(\.[a-z]\+\)\?" end="^```\(\s\|$\)" +" code +syn region sisu_content_alt contains=sisu_error,@NoSpell matchgroup=sisu_contain start="^code\(\.[a-z][0-9a-z_]\+\)\?{" end="^}code" +syn region sisu_content_alt contains=sisu_error,@NoSpell matchgroup=sisu_contain start="^```\s\+code\(\.[a-z][0-9a-z_]\+\)\?" end="^```\(\s\|$\)" +" quote +syn region sisu_normal contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_contain start="^```\s\+quote" end="^```\(\s\|$\)" + +"% "Endnotes: +" regular endnote or asterisk or plus sign endnote +syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker matchgroup=sisu_mark_endnote start="\~{[*+]*" end="}\~" skip="\n" +" numbered asterisk or plus sign endnote +syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker matchgroup=sisu_mark_endnote start="\~\[[*+]*" end="\]\~" skip="\n" +" endnote content marker (for binary content marking) +syn region sisu_content_endnote contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_link,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break matchgroup=sisu_mark_endnote start="\^\~" end="\n$" + +"% "Links And Images: +" image with url link (and possibly footnote of url) +syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="}\(https\?:/\/\|:\|\.\.\/\|#\)\S\+" oneline +" sisu outputs, short notation +syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="\[[1-5][sS]*\]}\S\+\.ss[tm]" oneline +" image +syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_link start="{" end="}image" oneline + +"% "Some Line Operations: +" bold line +syn region sisu_bold contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^!_ " end=" \\\\\|$" +" indent and bullet paragraph +syn region sisu_normal contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\) " end="$" +" indent and bullet (bold start) paragraph +syn region sisu_bold contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\)!_\? " end=" \\\\\|$" +" hanging indent paragraph [proposed] +syn region sisu_normal contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_[0-9]\?_[0-9] " end="$" +" hanging indent (bold start/ definition) paragraph [proposed] +syn region sisu_bold contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_[0-9]\?_[0-9]!_\? " end=" \\\\\|$" +" list numbering +syn region sisu_normal contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^\(#[ 1]\|_# \)" end="$" + +"% "Font Face Curly Brackets: +"syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_sem start="\S\+:{" end="}:[^<>,.!?:; ]\+" oneline +" book index: +syn region sisu_index contains=sisu_within_index_ignore,sisu_within_index matchgroup=sisu_index_block start="^={" end="}" +" emphasis: +syn region sisu_bold contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\*{" end="}\*" +" bold: +syn region sisu_bold contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="!{" end="}!" +" underscore: +syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="_{" end="}_" +" italics: +syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="/{" end="}/" +" added: +syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="+{" end="}+" +" superscript: +syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\^{" end="}\^" +" subscript: +syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start=",{" end="}," +" monospace: +syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="#{" end="}#" +" strikethrough: +syn region sisu_strikeout contains=sisu_error matchgroup=sisu_fontface start="-{" end="}-" + +"% "Single Words Bold Italicise Etc: (depreciated) +syn region sisu_bold contains=sisu_error matchgroup=sisu_bold start="\([ (]\|^\)\*[^\|{\n\~\\]"hs=e-1 end="\*"he=e-0 skip="[a-zA-Z0-9']" oneline +syn region sisu_identifier contains=sisu_error matchgroup=sisu_content_alt start="\([ ]\|^\)/[^{ \|\n\\]"hs=e-1 end="/\[ \.\]" skip="[a-zA-Z0-9']" oneline +"misc +syn region sisu_identifier contains=sisu_error matchgroup=sisu_fontface start="\^[^ {\|\n\\]"rs=s+1 end="\^[ ,.;:'})\\\n]" skip="[a-zA-Z0-9']" oneline + +"% "Expensive Mode: +if !exists("sisu_no_expensive") +else " not Expensive + syn region sisu_content_alt matchgroup=sisu_control start="^\s*def\s" matchgroup=NONE end="[?!]\|\>" skip="\.\|\(::\)" oneline +endif " Expensive? + +"% "Headers And Headings: (Document Instructions) +syn match sisu_control contains=sisu_error,sisu_error_wspace "4\~! \S\+" +syn region sisu_markpara contains=sisu_error,sisu_error_wspace start="^=begin" end="^=end.*$" + +"% "Errors: +syn match sisu_error_wspace contains=sisu_error_wspace "^\s\+[^:]" +syn match sisu_error_wspace contains=sisu_error_wspace "\s\s\+" +syn match sisu_error_wspace contains=sisu_error_wspace "\s\+$" +syn match sisu_error contains=sisu_error_wspace "\t\+" +syn match sisu_error contains=sisu_error,sisu_error_wspace "\([^ (][_\\]\||[^ (}]\)https\?:\S\+" +syn match sisu_error contains=sisu_error "_\?https\?:\S\+[}><]" +syn match sisu_error contains=sisu_error "\([!*/_\+,^]\){\([^(\}\1)]\)\{-}\n$" +syn match sisu_error contains=sisu_error "^[\~]{[^{]\{-}\n$" +syn match sisu_error contains=sisu_error "\s\+.{{" +syn match sisu_error contains=sisu_error "^\~\s*$" +syn match sisu_error contains=sisu_error "^0\~.*" +syn match sisu_error contains=sisu_error "^[1-9]\~\s*$" +syn match sisu_error contains=sisu_error "^[1-9]\~\S\+\s*$" +syn match sisu_error contains=sisu_error "[^{]\~\^[^ \)]" +syn match sisu_error contains=sisu_error "\~\^\s\+\.\s*" +syn match sisu_error contains=sisu_error "{\~^\S\+" +syn match sisu_error contains=sisu_error "[_/\*!^]{[ .,:;?><]*}[_/\*!^]" +syn match sisu_error contains=sisu_error "[^ (\"'(\[][_/\*!]{\|}[_/\*!][a-zA-Z0-9)\]\"']" +syn match sisu_error contains=sisu_error "
    " +"errors for filetype sisu, though not error in 'metaverse': +syn match sisu_error contains=sisu_error,sisu_match,sisu_strikeout,sisu_contain,sisu_content_alt,sisu_mark,sisu_break,sisu_number "<[a-zA-Z\/]\+>" +syn match sisu_error "/\?<\([biu]\)>[^()]\{-}\n$" + +"% "Error Exceptions: +syn match sisu_control "\n$" "contains=ALL +"syn match sisu_control " //" +syn match sisu_error "%{" +syn match sisu_error "
    _\?https\?:\S\+\|_\?https\?:\S\+
    " +syn match sisu_error "[><]_\?https\?:\S\+\|_\?https\?:\S\+[><]" +syn match sisu_comment "^%\{1,2\}.\+" + +"% "Definitions Default Highlighting: +hi def link sisu_normal Normal +hi def link sisu_bold Statement +hi def link sisu_header PreProc +hi def link sisu_header_content Normal +hi def link sisu_sub_header_title Statement +hi def link sisu_sub_header_creator Statement +hi def link sisu_sub_header_date Statement +hi def link sisu_sub_header_publisher Statement +hi def link sisu_sub_header_rights Statement +hi def link sisu_sub_header_classify Statement +hi def link sisu_sub_header_identifier Statement +hi def link sisu_sub_header_original Statement +hi def link sisu_sub_header_links Statement +hi def link sisu_sub_header_notes Statement +hi def link sisu_sub_header_make Statement +hi def link sisu_heading Title +hi def link sisu_structure Operator +hi def link sisu_contain Include +hi def link sisu_mark_endnote Delimiter +hi def link sisu_require NonText +hi def link sisu_link NonText +hi def link sisu_linked String +hi def link sisu_fontface Delimiter +hi def link sisu_strikeout DiffDelete +hi def link sisu_content_alt Special +hi def link sisu_sem_content SpecialKey +hi def link sisu_sem_block Special +hi def link sisu_sem_marker Visual +"hi def link sisu_sem_marker Structure +hi def link sisu_sem_marker_block MatchParen +hi def link sisu_sem_ex_marker FoldColumn +hi def link sisu_sem_ex_marker_block Folded +hi def link sisu_sem_ex_content Comment +"hi def link sisu_sem_ex_content SpecialKey +hi def link sisu_sem_ex_block Comment +hi def link sisu_index SpecialKey +hi def link sisu_index_block Visual +hi def link sisu_content_endnote Special +hi def link sisu_control Delimiter +hi def link sisu_within_index Delimiter +hi def link sisu_within_index_ignore SpecialKey +hi def link sisu_ocn Include +hi def link sisu_number Number +hi def link sisu_identifier Function +hi def link sisu_underline Underlined +hi def link sisu_markpara Include +hi def link sisu_marktail Include +hi def link sisu_mark Identifier +hi def link sisu_break Structure +hi def link sisu_html Type +hi def link sisu_action Identifier +hi def link sisu_comment Comment +hi def link sisu_error_sem_marker Error +hi def link sisu_error_wspace Error +hi def link sisu_error Error +let b:current_syntax = "sisu" +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/skill.vim b/.config/vim/syntax/skill.vim new file mode 100644 index 0000000..dd4c191 --- /dev/null +++ b/.config/vim/syntax/skill.vim @@ -0,0 +1,550 @@ +" Vim syntax file +" Language: SKILL +" Maintainer: Toby Schaffer +" Comments: SKILL is a Lisp-like programming language for use in EDA +" tools from Cadence Design Systems. It allows you to have +" a programming environment within the Cadence environment +" that gives you access to the complete tool set and design +" database. This file also defines syntax highlighting for +" certain Design Framework II interface functions. +" Last Change: 2003 May 11 +" 2024 Oct 08 by Vim Project: allow double backslashes in skillString + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn keyword skillConstants t nil unbound + +" enumerate all the SKILL reserved words/functions +syn match skillFunction "(abs\>"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillConditional "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillConditional "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillRepeat "\"hs=s+1 +syn match skillFunction "\<[fs]\=printf("he=e-1 +syn match skillFunction "(f\=scanf\>"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillRepeat "\"hs=s+1 +syn match skillConditional "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillKeywords "\<[mn]\=procedure("he=e-1 +syn match skillFunction "(ncon[cs]\>"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillKeywords "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillConditional "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillConditional "\"hs=s+1 +syn match skillRepeat "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillFunction "\"hs=s+1 +syn match skillcdfFunctions "\"hs=s+1 +syn match skillgeFunctions "\"hs=s+1 +syn match skillhiFunctions "\"hs=s+1 +syn match skillleFunctions "\"hs=s+1 +syn match skilldbefFunctions "\"hs=s+1 +syn match skillddFunctions "\"hs=s+1 +syn match skillpcFunctions "\"hs=s+1 +syn match skilltechFunctions "\<\(tech\|tc\)\u\a\+("he=e-1 + +" strings +syn region skillString start=+"+ skip=+\\\@ +" Last Change: 2001 May 09 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" A bunch of useful Renderman keywords including special +" RenderMan control structures +syn keyword slStatement break return continue +syn keyword slConditional if else +syn keyword slRepeat while for +syn keyword slRepeat illuminance illuminate solar + +syn keyword slTodo contained TODO FIXME XXX + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match slSpecial contained "\\[0-9][0-9][0-9]\|\\." +syn region slString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=slSpecial +syn match slCharacter "'[^\\]'" +syn match slSpecialCharacter "'\\.'" +syn match slSpecialCharacter "'\\[0-9][0-9]'" +syn match slSpecialCharacter "'\\[0-9][0-9][0-9]'" + +"catch errors caused by wrong parenthesis +syn region slParen transparent start='(' end=')' contains=ALLBUT,slParenError,slIncluded,slSpecial,slTodo,slUserLabel +syn match slParenError ")" +syn match slInParen contained "[{}]" + +"integer number, or floating point number without a dot and with "f". +syn case ignore +syn match slNumber "\<[0-9]\+\(u\=l\=\|lu\|f\)\>" +"floating point number, with dot, optional exponent +syn match slFloat "\<[0-9]\+\.[0-9]*\(e[-+]\=[0-9]\+\)\=[fl]\=\>" +"floating point number, starting with a dot, optional exponent +syn match slFloat "\.[0-9]\+\(e[-+]\=[0-9]\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match slFloat "\<[0-9]\+e[-+]\=[0-9]\+[fl]\=\>" +"hex number +syn match slNumber "\<0x[0-9a-f]\+\(u\=l\=\|lu\)\>" +"syn match slIdentifier "\<[a-z_][a-z0-9_]*\>" +syn case match + +if exists("sl_comment_strings") + " A comment can contain slString, slCharacter and slNumber. + " But a "*/" inside a slString in a slComment DOES end the comment! So we + " need to use a special type of slString: slCommentString, which also ends on + " "*/", and sees a "*" at the start of the line as comment again. + " Unfortunately this doesn't very well work for // type of comments :-( + syntax match slCommentSkip contained "^\s*\*\($\|\s\+\)" + syntax region slCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=slSpecial,slCommentSkip + syntax region slComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=slSpecial + syntax region slComment start="/\*" end="\*/" contains=slTodo,slCommentString,slCharacter,slNumber +else + syn region slComment start="/\*" end="\*/" contains=slTodo +endif +syntax match slCommentError "\*/" + +syn keyword slOperator sizeof +syn keyword slType float point color string vector normal matrix void +syn keyword slStorageClass varying uniform extern +syn keyword slStorageClass light surface volume displacement transformation imager +syn keyword slVariable Cs Os P dPdu dPdv N Ng u v du dv s t +syn keyword slVariable L Cl Ol E I ncomps time Ci Oi +syn keyword slVariable Ps alpha +syn keyword slVariable dtime dPdtime + +syn sync ccomment slComment minlines=10 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link slLabel Label +hi def link slUserLabel Label +hi def link slConditional Conditional +hi def link slRepeat Repeat +hi def link slCharacter Character +hi def link slSpecialCharacter slSpecial +hi def link slNumber Number +hi def link slFloat Float +hi def link slParenError slError +hi def link slInParen slError +hi def link slCommentError slError +hi def link slOperator Operator +hi def link slStorageClass StorageClass +hi def link slError Error +hi def link slStatement Statement +hi def link slType Type +hi def link slCommentError slError +hi def link slCommentString slString +hi def link slComment2String slString +hi def link slCommentSkip slComment +hi def link slString String +hi def link slComment Comment +hi def link slSpecial SpecialChar +hi def link slTodo Todo +hi def link slVariable Identifier +"hi def link slIdentifier Identifier + + +let b:current_syntax = "sl" + +" vim: ts=8 diff --git a/.config/vim/syntax/slang.vim b/.config/vim/syntax/slang.vim new file mode 100644 index 0000000..53ede4d --- /dev/null +++ b/.config/vim/syntax/slang.vim @@ -0,0 +1,89 @@ +" Vim syntax file +" Language: S-Lang +" Maintainer: Jan Hlavacek +" Last Change: 980216 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn keyword slangStatement break return continue EXECUTE_ERROR_BLOCK +syn match slangStatement "\" +syn keyword slangLabel case +syn keyword slangConditional !if if else switch +syn keyword slangRepeat while for _for loop do forever +syn keyword slangDefinition define typedef variable struct +syn keyword slangOperator or and andelse orelse shr shl xor not +syn keyword slangBlock EXIT_BLOCK ERROR_BLOCK +syn match slangBlock "\" +syn keyword slangConstant NULL +syn keyword slangType Integer_Type Double_Type Complex_Type String_Type Struct_Type Ref_Type Null_Type Array_Type DataType_Type + +syn match slangOctal "\<0\d\+\>" contains=slangOctalError +syn match slangOctalError "[89]\+" contained +syn match slangHex "\<0[xX][0-9A-Fa-f]*\>" +syn match slangDecimal "\<[1-9]\d*\>" +syn match slangFloat "\<\d\+\." +syn match slangFloat "\<\d\+\.\d\+\([Ee][-+]\=\d\+\)\=\>" +syn match slangFloat "\<\d\+\.[Ee][-+]\=\d\+\>" +syn match slangFloat "\<\d\+[Ee][-+]\=\d\+\>" +syn match slangFloat "\.\d\+\([Ee][-+]\=\d\+\)\=\>" +syn match slangImaginary "\.\d\+\([Ee][-+]\=\d*\)\=[ij]\>" +syn match slangImaginary "\<\d\+\(\.\d*\)\=\([Ee][-+]\=\d\+\)\=[ij]\>" + +syn region slangString oneline start='"' end='"' skip='\\"' +syn match slangCharacter "'[^\\]'" +syn match slangCharacter "'\\.'" +syn match slangCharacter "'\\[0-7]\{1,3}'" +syn match slangCharacter "'\\d\d\{1,3}'" +syn match slangCharacter "'\\x[0-7a-fA-F]\{1,2}'" + +syn match slangDelim "[][{};:,]" +syn match slangOperator "[-%+/&*=<>|!~^@]" + +"catch errors caused by wrong parenthesis +syn region slangParen matchgroup=slangDelim transparent start='(' end=')' contains=ALLBUT,slangParenError +syn match slangParenError ")" + +syn match slangComment "%.*$" +syn keyword slangOperator sizeof + +syn region slangPreCondit start="^\s*#\s*\(ifdef\>\|ifndef\>\|iftrue\>\|ifnfalse\>\|iffalse\>\|ifntrue\>\|if\$\|ifn\$\|\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=cComment,slangString,slangCharacter,slangNumber + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link slangDefinition Type +hi def link slangBlock slangDefinition +hi def link slangLabel Label +hi def link slangConditional Conditional +hi def link slangRepeat Repeat +hi def link slangCharacter Character +hi def link slangFloat Float +hi def link slangImaginary Float +hi def link slangDecimal slangNumber +hi def link slangOctal slangNumber +hi def link slangHex slangNumber +hi def link slangNumber Number +hi def link slangParenError Error +hi def link slangOctalError Error +hi def link slangOperator Operator +hi def link slangStructure Structure +hi def link slangInclude Include +hi def link slangPreCondit PreCondit +hi def link slangError Error +hi def link slangStatement Statement +hi def link slangType Type +hi def link slangString String +hi def link slangConstant Constant +hi def link slangRangeArray slangConstant +hi def link slangComment Comment +hi def link slangSpecial SpecialChar +hi def link slangTodo Todo +hi def link slangDelim Delimiter + + +let b:current_syntax = "slang" + +" vim: ts=8 diff --git a/.config/vim/syntax/slice.vim b/.config/vim/syntax/slice.vim new file mode 100644 index 0000000..3a57ece --- /dev/null +++ b/.config/vim/syntax/slice.vim @@ -0,0 +1,78 @@ +" Vim syntax file +" Language: Slice (ZeroC's Specification Language for Ice) +" Maintainer: Morel Bodin +" Last Change: 2005 Dec 03 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" The Slice keywords + +syn keyword sliceType bool byte double float int long short string void +syn keyword sliceQualifier const extends idempotent implements local nonmutating out throws +syn keyword sliceConstruct class enum exception dictionary interface module LocalObject Object sequence struct +syn keyword sliceQualifier const extends idempotent implements local nonmutating out throws +syn keyword sliceBoolean false true + +" Include directives +syn region sliceIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match sliceIncluded display contained "<[^>]*>" +syn match sliceInclude display "^\s*#\s*include\>\s*["<]" contains=sliceIncluded + +" Double-include guards +syn region sliceGuard start="^#\(define\|ifndef\|endif\)" end="$" + +" Strings and characters +syn region sliceString start=+"+ end=+"+ + +" Numbers (shamelessly ripped from c.vim, only slightly modified) +"integer number, or floating point number without a dot and with "f". +syn case ignore +syn match sliceNumbers display transparent "\<\d\|\.\d" contains=sliceNumber,sliceFloat,sliceOctal +syn match sliceNumber display contained "\d\+" +"hex number +syn match sliceNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" +" Flag the first zero of an octal number as something special +syn match sliceOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=sliceOctalZero +syn match sliceOctalZero display contained "\<0" +syn match sliceFloat display contained "\d\+f" +"floating point number, with dot, optional exponent +syn match sliceFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" +"floating point number, starting with a dot, optional exponent +syn match sliceFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match sliceFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" +" flag an octal number with wrong digits +syn case match + + +" Comments +syn region sliceComment start="/\*" end="\*/" +syn match sliceComment "//.*" + +syn sync ccomment sliceComment + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link sliceComment Comment +hi def link sliceConstruct Keyword +hi def link sliceType Type +hi def link sliceString String +hi def link sliceIncluded String +hi def link sliceQualifier Keyword +hi def link sliceInclude Include +hi def link sliceGuard PreProc +hi def link sliceBoolean Boolean +hi def link sliceFloat Number +hi def link sliceNumber Number +hi def link sliceOctal Number +hi def link sliceOctalZero Special +hi def link sliceNumberError Special + + +let b:current_syntax = "slice" + +" vim: ts=8 diff --git a/.config/vim/syntax/slpconf.vim b/.config/vim/syntax/slpconf.vim new file mode 100644 index 0000000..712ba90 --- /dev/null +++ b/.config/vim/syntax/slpconf.vim @@ -0,0 +1,273 @@ +" Vim syntax file +" Language: RFC 2614 - An API for Service Location configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword slpconfTodo contained TODO FIXME XXX NOTE + +syn region slpconfComment display oneline start='^[#;]' end='$' + \ contains=slpconfTodo,@Spell + +syn match slpconfBegin display '^' + \ nextgroup=slpconfTag, + \ slpconfComment skipwhite + +syn keyword slpconfTag contained net + \ nextgroup=slpconfNetTagDot + +syn match slpconfNetTagDot contained display '.' + \ nextgroup=slpconfNetTag + +syn keyword slpconfNetTag contained slp + \ nextgroup=slpconfNetSlpTagdot + +syn match slpconfNetSlpTagDot contained display '.' + \ nextgroup=slpconfNetSlpTag + +syn keyword slpconfNetSlpTag contained isDA traceDATraffic traceMsg + \ traceDrop traceReg isBroadcastOnly + \ passiveDADetection securityEnabled + \ nextgroup=slpconfBooleanEq,slpconfBooleanHome + \ skipwhite + +syn match slpconfBooleanHome contained display + \ '\.\d\{1,3}\%(\.\d\{1,3}\)\{3}' + \ nextgroup=slpconfBooleanEq skipwhite + +syn match slpconfBooleanEq contained display '=' + \ nextgroup=slpconfBoolean skipwhite + +syn keyword slpconfBoolean contained true false TRUE FALSE + +syn keyword slpconfNetSlpTag contained DAHeartBeat multicastTTL + \ DAActiveDiscoveryInterval + \ multicastMaximumWait multicastTimeouts + \ randomWaitBound MTU maxResults + \ nextgroup=slpconfIntegerEq,slpconfIntegerHome + \ skipwhite + +syn match slpconfIntegerHome contained display + \ '\.\d\{1,3}\%(\.\d\{1,3}\)\{3}' + \ nextgroup=slpconfIntegerEq skipwhite + +syn match slpconfIntegerEq contained display '=' + \ nextgroup=slpconfInteger skipwhite + +syn match slpconfInteger contained display '\<\d\+\>' + +syn keyword slpconfNetSlpTag contained DAAttributes SAAttributes + \ nextgroup=slpconfAttrEq,slpconfAttrHome + \ skipwhite + +syn match slpconfAttrHome contained display + \ '\.\d\{1,3}\%(\.\d\{1,3}\)\{3}' + \ nextgroup=slpconfAttrEq skipwhite + +syn match slpconfAttrEq contained display '=' + \ nextgroup=slpconfAttrBegin skipwhite + +syn match slpconfAttrBegin contained display '(' + \ nextgroup=slpconfAttrTag skipwhite + +syn match slpconfAttrTag contained display + \ '[^* \t_(),\\!<=>~[:cntrl:]]\+' + \ nextgroup=slpconfAttrTagEq skipwhite + +syn match slpconfAttrTagEq contained display '=' + \ nextgroup=@slpconfAttrValue skipwhite + +syn cluster slpconfAttrValueCon contains=slpconfAttrValueSep,slpconfAttrEnd + +syn cluster slpconfAttrValue contains=slpconfAttrIValue,slpconfAttrSValue, + \ slpconfAttrBValue,slpconfAttrSSValue + +syn match slpconfAttrSValue contained display '[^ (),\\!<=>~[:cntrl:]]\+' + \ nextgroup=@slpconfAttrValueCon skipwhite + +syn match slpconfAttrSSValue contained display '\\FF\%(\\\x\x\)\+' + \ nextgroup=@slpconfAttrValueCon skipwhite + +syn match slpconfAttrIValue contained display '[-]\=\d\+\>' + \ nextgroup=@slpconfAttrValueCon skipwhite + +syn keyword slpconfAttrBValue contained true false + \ nextgroup=@slpconfAttrValueCon skipwhite + +syn match slpconfAttrValueSep contained display ',' + \ nextgroup=@slpconfAttrValue skipwhite + +syn match slpconfAttrEnd contained display ')' + \ nextgroup=slpconfAttrSep skipwhite + +syn match slpconfAttrSep contained display ',' + \ nextgroup=slpconfAttrBegin skipwhite + +syn keyword slpconfNetSlpTag contained useScopes typeHint + \ nextgroup=slpconfStringsEq,slpconfStringsHome + \ skipwhite + +syn match slpconfStringsHome contained display + \ '\.\d\{1,3}\%(\.\d\{1,3}\)\{3}' + \ nextgroup=slpconfStringsEq skipwhite + +syn match slpconfStringsEq contained display '=' + \ nextgroup=slpconfStrings skipwhite + +syn match slpconfStrings contained display + \ '\%([[:digit:][:alpha:]]\|[!-+./:-@[-`{-~-]\|\\\x\x\)\+' + \ nextgroup=slpconfStringsSep skipwhite + +syn match slpconfStringsSep contained display ',' + \ nextgroup=slpconfStrings skipwhite + +syn keyword slpconfNetSlpTag contained DAAddresses + \ nextgroup=slpconfAddressesEq,slpconfAddrsHome + \ skipwhite + +syn match slpconfAddrsHome contained display + \ '\.\d\{1,3}\%(\.\d\{1,3}\)\{3}' + \ nextgroup=slpconfAddressesEq skipwhite + +syn match slpconfAddressesEq contained display '=' + \ nextgroup=@slpconfAddresses skipwhite + +syn cluster slpconfAddresses contains=slpconfFQDNs,slpconfHostnumbers + +syn match slpconfFQDNs contained display + \ '\a[[:alnum:]-]*[[:alnum:]]\|\a' + \ nextgroup=slpconfAddressesSep skipwhite + +syn match slpconfHostnumbers contained display + \ '\d\{1,3}\%(\.\d\{1,3}\)\{3}' + \ nextgroup=slpconfAddressesSep skipwhite + +syn match slpconfAddressesSep contained display ',' + \ nextgroup=@slpconfAddresses skipwhite + +syn keyword slpconfNetSlpTag contained serializedRegURL + \ nextgroup=slpconfStringEq,slpconfStringHome + \ skipwhite + +syn match slpconfStringHome contained display + \ '\.\d\{1,3}\%(\.\d\{1,3}\)\{3}' + \ nextgroup=slpconfStringEq skipwhite + +syn match slpconfStringEq contained display '=' + \ nextgroup=slpconfString skipwhite + +syn match slpconfString contained display + \ '\%([!-+./:-@[-`{-~-]\|\\\x\x\)\+\|[[:digit:][:alpha:]]' + +syn keyword slpconfNetSlpTag contained multicastTimeouts DADiscoveryTimeouts + \ datagramTimeouts + \ nextgroup=slpconfIntegersEq, + \ slpconfIntegersHome skipwhite + +syn match slpconfIntegersHome contained display + \ '\.\d\{1,3}\%(\.\d\{1,3}\)\{3}' + \ nextgroup=slpconfIntegersEq skipwhite + +syn match slpconfIntegersEq contained display '=' + \ nextgroup=slpconfIntegers skipwhite + +syn match slpconfIntegers contained display '\<\d\+\>' + \ nextgroup=slpconfIntegersSep skipwhite + +syn match slpconfIntegersSep contained display ',' + \ nextgroup=slpconfIntegers skipwhite + +syn keyword slpconfNetSlpTag contained interfaces + \ nextgroup=slpconfHostnumsEq, + \ slpconfHostnumsHome skipwhite + +syn match slpconfHostnumsHome contained display + \ '\.\d\{1,3}\%(\.\d\{1,3}\)\{3}' + \ nextgroup=slpconfHostnumsEq skipwhite + +syn match slpconfHostnumsEq contained display '=' + \ nextgroup=slpconfOHostnumbers skipwhite + +syn match slpconfOHostnumbers contained display + \ '\d\{1,3}\%(\.\d\{1,3}\)\{3}' + \ nextgroup=slpconfHostnumsSep skipwhite + +syn match slpconfHostnumsSep contained display ',' + \ nextgroup=slpconfOHostnumbers skipwhite + +syn keyword slpconfNetSlpTag contained locale + \ nextgroup=slpconfLocaleEq,slpconfLocaleHome + \ skipwhite + +syn match slpconfLocaleHome contained display + \ '\.\d\{1,3}\%(\.\d\{1,3}\)\{3}' + \ nextgroup=slpconfLocaleEq skipwhite + +syn match slpconfLocaleEq contained display '=' + \ nextgroup=slpconfLocale skipwhite + +syn match slpconfLocale contained display '\a\{1,8}\%(-\a\{1,8}\)\=' + +hi def link slpconfTodo Todo +hi def link slpconfComment Comment +hi def link slpconfTag Identifier +hi def link slpconfDelimiter Delimiter +hi def link slpconfNetTagDot slpconfDelimiter +hi def link slpconfNetTag slpconfTag +hi def link slpconfNetSlpTagDot slpconfNetTagDot +hi def link slpconfNetSlpTag slpconfTag +hi def link slpconfHome Special +hi def link slpconfBooleanHome slpconfHome +hi def link slpconfEq Operator +hi def link slpconfBooleanEq slpconfEq +hi def link slpconfBoolean Boolean +hi def link slpconfIntegerHome slpconfHome +hi def link slpconfIntegerEq slpconfEq +hi def link slpconfInteger Number +hi def link slpconfAttrHome slpconfHome +hi def link slpconfAttrEq slpconfEq +hi def link slpconfAttrBegin slpconfDelimiter +hi def link slpconfAttrTag slpconfTag +hi def link slpconfAttrTagEq slpconfEq +hi def link slpconfAttrIValue slpconfInteger +hi def link slpconfAttrSValue slpconfString +hi def link slpconfAttrBValue slpconfBoolean +hi def link slpconfAttrSSValue slpconfString +hi def link slpconfSeparator slpconfDelimiter +hi def link slpconfAttrValueSep slpconfSeparator +hi def link slpconfAttrEnd slpconfAttrBegin +hi def link slpconfAttrSep slpconfSeparator +hi def link slpconfStringsHome slpconfHome +hi def link slpconfStringsEq slpconfEq +hi def link slpconfStrings slpconfString +hi def link slpconfStringsSep slpconfSeparator +hi def link slpconfAddrsHome slpconfHome +hi def link slpconfAddressesEq slpconfEq +hi def link slpconfFQDNs String +hi def link slpconfHostnumbers Number +hi def link slpconfAddressesSep slpconfSeparator +hi def link slpconfStringHome slpconfHome +hi def link slpconfStringEq slpconfEq +hi def link slpconfString String +hi def link slpconfIntegersHome slpconfHome +hi def link slpconfIntegersEq slpconfEq +hi def link slpconfIntegers slpconfInteger +hi def link slpconfIntegersSep slpconfSeparator +hi def link slpconfHostnumsHome slpconfHome +hi def link slpconfHostnumsEq slpconfEq +hi def link slpconfOHostnumbers slpconfHostnumbers +hi def link slpconfHostnumsSep slpconfSeparator +hi def link slpconfLocaleHome slpconfHome +hi def link slpconfLocaleEq slpconfEq +hi def link slpconfLocale slpconfString + +let b:current_syntax = "slpconf" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/slpreg.vim b/.config/vim/syntax/slpreg.vim new file mode 100644 index 0000000..a177b06 --- /dev/null +++ b/.config/vim/syntax/slpreg.vim @@ -0,0 +1,122 @@ +" Vim syntax file +" Language: RFC 2614 - An API for Service Location registration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword slpregTodo contained TODO FIXME XXX NOTE + +syn region slpregComment display oneline start='^[#;]' end='$' + \ contains=slpregTodo,@Spell + +syn match slpregBegin display '^' + \ nextgroup=slpregServiceURL, + \ slpregComment + +syn match slpregServiceURL contained display 'service:' + \ nextgroup=slpregServiceType + +syn match slpregServiceType contained display '\a[[:alpha:][:digit:]+-]*\%(\.\a[[:alpha:][:digit:]+-]*\)\=\%(:\a[[:alpha:][:digit:]+-]*\)\=' + \ nextgroup=slpregServiceSAPCol + +syn match slpregServiceSAPCol contained display ':' + \ nextgroup=slpregSAP + +syn match slpregSAP contained '[^,]\+' + \ nextgroup=slpregLangSep +"syn match slpregSAP contained display '\%(//\%(\%([[:alpha:][:digit:]$-_.~!*\'(),+;&=]*@\)\=\%([[:alnum:]][[:alnum:]-]*[[:alnum:]]\|[[:alnum:]]\.\)*\%(\a[[:alnum:]-]*[[:alnum:]]\|\a\)\%(:\d\+\)\=\)\=\|/at/\%([[:alpha:][:digit:]$-_.~]\|\\\x\x\)\{1,31}:\%([[:alpha:][:digit:]$-_.~]\|\\\x\x\)\{1,31}\%([[:alpha:][:digit:]$-_.~]\|\\\x\x\)\{1,31}\|/ipx/\x\{8}:\x\{12}:\x\{4}\)\%(/\%([[:alpha:][:digit:]$-_.~!*\'()+;?:@&=+]\|\\\x\x\)*\)*\%(;[^()\\!<=>~[:cntrl:]* \t_]\+\%(=[^()\\!<=>~[:cntrl:] ]\+\)\=\)*' + +syn match slpregLangSep contained display ',' + \ nextgroup=slpregLang + +syn match slpregLang contained display '\a\{1,8}\%(-\a\{1,8\}\)\=' + \ nextgroup=slpregLTimeSep + +syn match slpregLTimeSep contained display ',' + \ nextgroup=slpregLTime + +syn match slpregLTime contained display '\d\{1,5}' + \ nextgroup=slpregType,slpregUNewline + +syn match slpregType contained display '\a[[:alpha:][:digit:]+-]*' + \ nextgroup=slpregUNewLine + +syn match slpregUNewLine contained '\s*\n' + \ nextgroup=slpregScopes,slpregAttrList skipnl + +syn keyword slpregScopes contained scopes + \ nextgroup=slpregScopesEq + +syn match slpregScopesEq contained '=' nextgroup=slpregScopeName + +syn match slpregScopeName contained '[^(),\\!<=>[:cntrl:];*+ ]\+' + \ nextgroup=slpregScopeNameSep, + \ slpregScopeNewline + +syn match slpregScopeNameSep contained ',' + \ nextgroup=slpregScopeName + +syn match slpregScopeNewline contained '\s*\n' + \ nextgroup=slpregAttribute skipnl + +syn match slpregAttribute contained '[^(),\\!<=>[:cntrl:]* \t_]\+' + \ nextgroup=slpregAttributeEq, + \ slpregScopeNewline + +syn match slpregAttributeEq contained '=' + \ nextgroup=@slpregAttrValue + +syn cluster slpregAttrValueCon contains=slpregAttribute,slpregAttrValueSep + +syn cluster slpregAttrValue contains=slpregAttrIValue,slpregAttrSValue, + \ slpregAttrBValue,slpregAttrSSValue + +syn match slpregAttrSValue contained display '[^(),\\!<=>~[:cntrl:]]\+' + \ nextgroup=@slpregAttrValueCon skipwhite skipnl + +syn match slpregAttrSSValue contained display '\\FF\%(\\\x\x\)\+' + \ nextgroup=@slpregAttrValueCon skipwhite skipnl + +syn match slpregAttrIValue contained display '[-]\=\d\+\>' + \ nextgroup=@slpregAttrValueCon skipwhite skipnl + +syn keyword slpregAttrBValue contained true false + \ nextgroup=@slpregAttrValueCon skipwhite skipnl + +syn match slpregAttrValueSep contained display ',' + \ nextgroup=@slpregAttrValue skipwhite skipnl + +hi def link slpregTodo Todo +hi def link slpregComment Comment +hi def link slpregServiceURL Type +hi def link slpregServiceType slpregServiceURL +hi def link slpregServiceSAPCol slpregServiceURL +hi def link slpregSAP slpregServiceURL +hi def link slpregDelimiter Delimiter +hi def link slpregLangSep slpregDelimiter +hi def link slpregLang String +hi def link slpregLTimeSep slpregDelimiter +hi def link slpregLTime Number +hi def link slpregType Type +hi def link slpregScopes Identifier +hi def link slpregScopesEq Operator +hi def link slpregScopeName String +hi def link slpregScopeNameSep slpregDelimiter +hi def link slpregAttribute Identifier +hi def link slpregAttributeEq Operator +hi def link slpregAttrSValue String +hi def link slpregAttrSSValue slpregAttrSValue +hi def link slpregAttrIValue Number +hi def link slpregAttrBValue Boolean +hi def link slpregAttrValueSep slpregDelimiter + +let b:current_syntax = "slpreg" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/slpspi.vim b/.config/vim/syntax/slpspi.vim new file mode 100644 index 0000000..eaeb02a --- /dev/null +++ b/.config/vim/syntax/slpspi.vim @@ -0,0 +1,39 @@ +" Vim syntax file +" Language: RFC 2614 - An API for Service Location SPI file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword slpspiTodo contained TODO FIXME XXX NOTE + +syn region slpspiComment display oneline start='^[#;]' end='$' + \ contains=slpspiTodo,@Spell + +syn match slpspiBegin display '^' + \ nextgroup=slpspiKeyType, + \ slpspiComment skipwhite + +syn keyword slpspiKeyType contained PRIVATE PUBLIC + \ nextgroup=slpspiString skipwhite + +syn match slpspiString contained '\S\+' + \ nextgroup=slpspiKeyFile skipwhite + +syn match slpspiKeyFile contained '\S\+' + +hi def link slpspiTodo Todo +hi def link slpspiComment Comment +hi def link slpspiKeyType Type +hi def link slpspiString Identifier +hi def link slpspiKeyFile String + +let b:current_syntax = "slpspi" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/slrnrc.vim b/.config/vim/syntax/slrnrc.vim new file mode 100644 index 0000000..004bdd1 --- /dev/null +++ b/.config/vim/syntax/slrnrc.vim @@ -0,0 +1,181 @@ +" Vim syntax file +" Language: Slrn setup file (based on slrn 0.9.8.1) +" Maintainer: Preben 'Peppe' Guldberg +" Last Change: 23 April 2006 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn keyword slrnrcTodo contained Todo + +" In some places whitespace is illegal +syn match slrnrcSpaceError contained "\s" + +syn match slrnrcNumber contained "-\=\<\d\+\>" +syn match slrnrcNumber contained +'[^']\+'+ + +syn match slrnrcSpecKey contained +\(\\[er"']\|\^[^'"]\|\\\o\o\o\)+ + +syn match slrnrcKey contained "\S\+" contains=slrnrcSpecKey +syn region slrnrcKey contained start=+"+ skip=+\\"+ end=+"+ oneline contains=slrnrcSpecKey +syn region slrnrcKey contained start=+'+ skip=+\\'+ end=+'+ oneline contains=slrnrcSpecKey + +syn match slrnrcSpecChar contained +'+ +syn match slrnrcSpecChar contained +\\[n"]+ +syn match slrnrcSpecChar contained "%[dfmnrs%]" + +syn match slrnrcString contained /[^ \t%"']\+/ contains=slrnrcSpecChar +syn region slrnrcString contained start=+"+ skip=+\\"+ end=+"+ oneline contains=slrnrcSpecChar + +syn match slrnSlangPreCondit "^#\s*ifn\=\(def\>\|false\>\|true\>\|\$\)" +syn match slrnSlangPreCondit "^#\s*e\(lif\|lse\|ndif\)\>" + +syn match slrnrcComment "%.*$" contains=slrnrcTodo + +syn keyword slrnrcVarInt contained abort_unmodified_edits article_window_page_overlap auto_mark_article_as_read beep broken_xref broken_xref cc_followup check_new_groups +syn keyword slrnrcVarInt contained color_by_score confirm_actions custom_sort_by_threads display_cursor_bar drop_bogus_groups editor_uses_mime_charset emphasized_text_mask +syn keyword slrnrcVarInt contained emphasized_text_mode fold_headers fold_headers followup_strip_signature force_authentication force_authentication generate_date_header +syn keyword slrnrcVarInt contained generate_email_from generate_email_from generate_message_id grouplens_port hide_pgpsignature hide_quotes hide_signature +syn keyword slrnrcVarInt contained hide_verbatim_marks hide_verbatim_text highlight_unread_subjects highlight_urls ignore_signature kill_score lines_per_update +syn keyword slrnrcVarInt contained mail_editor_is_mua max_low_score max_queued_groups min_high_score mouse netiquette_warnings new_subject_breaks_threads no_autosave +syn keyword slrnrcVarInt contained no_backups prefer_head process_verbatim_marks query_next_article query_next_group query_read_group_cutoff read_active reject_long_lines +syn keyword slrnrcVarInt contained scroll_by_page show_article show_thread_subject simulate_graphic_chars smart_quote sorting_method spoiler_char spoiler_char +syn keyword slrnrcVarInt contained spoiler_display_mode spoiler_display_mode spool_check_up_on_nov spool_check_up_on_nov uncollapse_threads unsubscribe_new_groups use_blink +syn keyword slrnrcVarInt contained use_color use_flow_control use_grouplens use_grouplens use_header_numbers use_inews use_inews use_localtime use_metamail use_mime use_mime +syn keyword slrnrcVarInt contained use_recommended_msg_id use_slrnpull use_slrnpull use_tilde use_tmpdir use_uudeview use_uudeview warn_followup_to wrap_flags wrap_method +syn keyword slrnrcVarInt contained write_newsrc_flags + +" Listed for removal +syn keyword slrnrcVarInt contained author_display display_author_realname display_score group_dsc_start_column process_verbatum_marks prompt_next_group query_reconnect +syn keyword slrnrcVarInt contained show_descriptions use_xgtitle + +" Match as a "string" too +syn region slrnrcVarIntStr contained matchgroup=slrnrcVarInt start=+"+ end=+"+ oneline contains=slrnrcVarInt,slrnrcSpaceError + +syn keyword slrnrcVarStr contained Xbrowser art_help_line art_status_line cansecret_file cc_post_string charset custom_headers custom_sort_order decode_directory +syn keyword slrnrcVarStr contained editor_command failed_posts_file followup_custom_headers followup_date_format followup_string followupto_string group_help_line +syn keyword slrnrcVarStr contained group_status_line grouplens_host grouplens_pseudoname header_help_line header_status_line hostname inews_program macro_directory +syn keyword slrnrcVarStr contained mail_editor_command metamail_command mime_charset non_Xbrowser organization overview_date_format post_editor_command post_object +syn keyword slrnrcVarStr contained postpone_directory printer_name quote_string realname reply_custom_headers reply_string replyto save_directory save_posts save_replies +syn keyword slrnrcVarStr contained score_editor_command scorefile sendmail_command server_object signature signoff_string spool_active_file spool_activetimes_file +syn keyword slrnrcVarStr contained spool_inn_root spool_newsgroups_file spool_nov_file spool_nov_root spool_overviewfmt_file spool_root supersedes_custom_headers +syn keyword slrnrcVarStr contained top_status_line username + +" Listed for removal +syn keyword slrnrcVarStr contained followup cc_followup_string + +" Match as a "string" too +syn region slrnrcVarStrStr contained matchgroup=slrnrcVarStr start=+"+ end=+"+ oneline contains=slrnrcVarStr,slrnrcSpaceError + +" Various commands +syn region slrnrcCmdLine matchgroup=slrnrcCmd start="\<\(autobaud\|color\|compatible_charsets\|group_display_format\|grouplens_add\|header_display_format\|ignore_quotes\|include\|interpret\|mono\|nnrpaccess\|posting_host\|server\|set\|setkey\|strip_re_regexp\|strip_sig_regexp\|strip_was_regexp\|unsetkey\|visible_headers\)\>" end="$" oneline contains=slrnrc\(String\|Comment\) + +" Listed for removal +syn region slrnrcCmdLine matchgroup=slrnrcCmd start="\<\(cc_followup_string\|decode_directory\|editor_command\|followup\|hostname\|organization\|quote_string\|realname\|replyto\|scorefile\|signature\|username\)\>" end="$" oneline contains=slrnrc\(String\|Comment\) + +" Setting variables +syn keyword slrnrcSet contained set +syn match slrnrcSetStr "^\s*set\s\+\S\+" skipwhite nextgroup=slrnrcString contains=slrnrcSet,slrnrcVarStr\(Str\)\= +syn match slrnrcSetInt contained "^\s*set\s\+\S\+" contains=slrnrcSet,slrnrcVarInt\(Str\)\= +syn match slrnrcSetIntLine "^\s*set\s\+\S\+\s\+\(-\=\d\+\>\|'[^']\+'\)" contains=slrnrcSetInt,slrnrcNumber,slrnrcVarInt + +" Color definitions +syn match slrnrcColorObj contained "\" +syn keyword slrnrcColorObj contained article author boldtext box cursor date description error frame from_myself group grouplens_display header_name header_number headers +syn keyword slrnrcColorObj contained high_score italicstext menu menu_press message neg_score normal pgpsignature pos_score quotes response_char selection signature status +syn keyword slrnrcColorObj contained subject thread_number tilde tree underlinetext unread_subject url verbatim + +" Listed for removal +syn keyword slrnrcColorObj contained verbatum + +syn region slrnrcColorObjStr contained matchgroup=slrnrcColorObj start=+"+ end=+"+ oneline contains=slrnrcColorObj,slrnrcSpaceError +syn keyword slrnrcColorVal contained default +syn keyword slrnrcColorVal contained black blue brightblue brightcyan brightgreen brightmagenta brightred brown cyan gray green lightgray magenta red white yellow +syn region slrnrcColorValStr contained matchgroup=slrnrcColorVal start=+"+ end=+"+ oneline contains=slrnrcColorVal,slrnrcSpaceError +" Matching a function with three arguments +syn keyword slrnrcColor contained color +syn match slrnrcColorInit contained "^\s*color\s\+\S\+" skipwhite nextgroup=slrnrcColorVal\(Str\)\= contains=slrnrcColor\(Obj\|ObjStr\)\= +syn match slrnrcColorLine "^\s*color\s\+\S\+\s\+\S\+" skipwhite nextgroup=slrnrcColorVal\(Str\)\= contains=slrnrcColor\(Init\|Val\|ValStr\) + +" Mono settings +syn keyword slrnrcMonoVal contained blink bold none reverse underline +syn region slrnrcMonoValStr contained matchgroup=slrnrcMonoVal start=+"+ end=+"+ oneline contains=slrnrcMonoVal,slrnrcSpaceError +" Color object is inherited +" Mono needs at least one argument +syn keyword slrnrcMono contained mono +syn match slrnrcMonoInit contained "^\s*mono\s\+\S\+" contains=slrnrcMono,slrnrcColorObj\(Str\)\= +syn match slrnrcMonoLine "^\s*mono\s\+\S\+\s\+\S.*" contains=slrnrcMono\(Init\|Val\|ValStr\),slrnrcComment + +" Functions in article mode +syn keyword slrnrcFunArt contained article_bob article_eob article_left article_line_down article_line_up article_page_down article_page_up article_right article_search +syn keyword slrnrcFunArt contained author_search_backward author_search_forward browse_url cancel catchup catchup_all create_score decode delete delete_thread digit_arg +syn keyword slrnrcFunArt contained enlarge_article_window evaluate_cmd exchange_mark expunge fast_quit followup forward forward_digest get_children_headers get_parent_header +syn keyword slrnrcFunArt contained goto_article goto_last_read grouplens_rate_article header_bob header_eob header_line_down header_line_up header_page_down header_page_up +syn keyword slrnrcFunArt contained help hide_article locate_article mark_spot next next_high_score next_same_subject pipe post post_postponed previous print quit redraw +syn keyword slrnrcFunArt contained repeat_last_key reply request save show_spoilers shrink_article_window skip_quotes skip_to_next_group skip_to_previous_group +syn keyword slrnrcFunArt contained subject_search_backward subject_search_forward supersede suspend tag_header toggle_collapse_threads toggle_header_formats +syn keyword slrnrcFunArt contained toggle_header_tag toggle_headers toggle_pgpsignature toggle_quotes toggle_rot13 toggle_signature toggle_sort toggle_verbatim_marks +syn keyword slrnrcFunArt contained toggle_verbatim_text uncatchup uncatchup_all undelete untag_headers view_scores wrap_article zoom_article_window + +" Listed for removal +syn keyword slrnrcFunArt contained art_bob art_eob art_xpunge article_linedn article_lineup article_pagedn article_pageup down enlarge_window goto_beginning goto_end left +syn keyword slrnrcFunArt contained locate_header_by_msgid pagedn pageup pipe_article prev print_article right scroll_dn scroll_up shrink_window skip_to_prev_group +syn keyword slrnrcFunArt contained toggle_show_author up + +" Functions in group mode +syn keyword slrnrcFunGroup contained add_group bob catchup digit_arg eob evaluate_cmd group_search group_search_backward group_search_forward help line_down line_up move_group +syn keyword slrnrcFunGroup contained page_down page_up post post_postponed quit redraw refresh_groups repeat_last_key save_newsrc select_group subscribe suspend +syn keyword slrnrcFunGroup contained toggle_group_formats toggle_hidden toggle_list_all toggle_scoring transpose_groups uncatchup unsubscribe + +" Listed for removal +syn keyword slrnrcFunGroup contained down group_bob group_eob pagedown pageup toggle_group_display uncatch_up up + +" Functions in readline mode (actually from slang's slrline.c) +syn keyword slrnrcFunRead contained bdel bol complete cycle del delbol delbow deleol down enter eol left quoted_insert right self_insert trim up + +" Binding keys +syn keyword slrnrcSetkeyObj contained article group readline +syn region slrnrcSetkeyObjStr contained matchgroup=slrnrcSetkeyObj start=+"+ end=+"+ oneline contains=slrnrcSetkeyObj +syn match slrnrcSetkeyArt contained '\("\=\)\\1\s\+\S\+' skipwhite nextgroup=slrnrcKey contains=slrnrcSetKeyObj\(Str\)\=,slrnrcFunArt +syn match slrnrcSetkeyGroup contained '\("\=\)\\1\s\+\S\+' skipwhite nextgroup=slrnrcKey contains=slrnrcSetKeyObj\(Str\)\=,slrnrcFunGroup +syn match slrnrcSetkeyRead contained '\("\=\)\\1\s\+\S\+' skipwhite nextgroup=slrnrcKey contains=slrnrcSetKeyObj\(Str\)\=,slrnrcFunRead +syn match slrnrcSetkey "^\s*setkey\>" skipwhite nextgroup=slrnrcSetkeyArt,slrnrcSetkeyGroup,slrnrcSetkeyRead + +" Unbinding keys +syn match slrnrcUnsetkey '^\s*unsetkey\s\+\("\)\=\(article\|group\|readline\)\>\1' skipwhite nextgroup=slrnrcKey contains=slrnrcSetkeyObj\(Str\)\= + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link slrnrcTodo Todo +hi def link slrnrcSpaceError Error +hi def link slrnrcNumber Number +hi def link slrnrcSpecKey SpecialChar +hi def link slrnrcKey String +hi def link slrnrcSpecChar SpecialChar +hi def link slrnrcString String +hi def link slrnSlangPreCondit Special +hi def link slrnrcComment Comment +hi def link slrnrcVarInt Identifier +hi def link slrnrcVarStr Identifier +hi def link slrnrcCmd slrnrcSet +hi def link slrnrcSet Operator +hi def link slrnrcColor Keyword +hi def link slrnrcColorObj Identifier +hi def link slrnrcColorVal String +hi def link slrnrcMono Keyword +hi def link slrnrcMonoObj Identifier +hi def link slrnrcMonoVal String +hi def link slrnrcFunArt Macro +hi def link slrnrcFunGroup Macro +hi def link slrnrcFunRead Macro +hi def link slrnrcSetkeyObj Identifier +hi def link slrnrcSetkey Keyword +hi def link slrnrcUnsetkey slrnrcSetkey + + +let b:current_syntax = "slrnrc" + +"EOF vim: ts=8 noet tw=120 sw=8 sts=0 diff --git a/.config/vim/syntax/slrnsc.vim b/.config/vim/syntax/slrnsc.vim new file mode 100644 index 0000000..9f51cad --- /dev/null +++ b/.config/vim/syntax/slrnsc.vim @@ -0,0 +1,68 @@ +" Vim syntax file +" Language: Slrn score file (based on slrn 0.9.8.0) +" Maintainer: Preben 'Peppe' Guldberg +" Last Change: 8 Oct 2004 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" characters in newsgroup names +setlocal isk=@,48-57,.,-,_,+ + +syn match slrnscComment "%.*$" +syn match slrnscSectionCom ".].*"lc=2 + +syn match slrnscGroup contained "\(\k\|\*\)\+" +syn match slrnscNumber contained "\d\+" +syn match slrnscDate contained "\(\d\{1,2}[-/]\)\{2}\d\{4}" +syn match slrnscDelim contained ":" +syn match slrnscComma contained "," +syn match slrnscOper contained "\~" +syn match slrnscEsc contained "\\[ecC<>.]" +syn match slrnscEsc contained "[?^]" +syn match slrnscEsc contained "[^\\]$\s*$"lc=1 + +syn keyword slrnscInclude contained include +syn match slrnscIncludeLine "^\s*Include\s\+\S.*$" + +syn region slrnscSection matchgroup=slrnscSectionStd start="^\s*\[" end='\]' contains=slrnscGroup,slrnscComma,slrnscSectionCom +syn region slrnscSection matchgroup=slrnscSectionNot start="^\s*\[\~" end='\]' contains=slrnscGroup,slrnscCommas,slrnscSectionCom + +syn keyword slrnscItem contained Age Bytes Date Expires From Has-Body Lines Message-Id Newsgroup References Subject Xref + +syn match slrnscScoreItem contained "%.*$" skipempty nextgroup=slrnscScoreItem contains=slrnscComment +syn match slrnscScoreItem contained "^\s*Expires:\s*\(\d\{1,2}[-/]\)\{2}\d\{4}\s*$" skipempty nextgroup=slrnscScoreItem contains=slrnscItem,slrnscDelim,slrnscDate +syn match slrnscScoreItem contained "^\s*\~\=\(Age\|Bytes\|Has-Body\|Lines\):\s*\d\+\s*$" skipempty nextgroup=slrnscScoreItem contains=slrnscOper,slrnscItem,slrnscDelim,slrnscNumber +syn match slrnscScoreItemFill contained ".*$" skipempty nextgroup=slrnscScoreItem contains=slrnscEsc +syn match slrnscScoreItem contained "^\s*\~\=\(Date\|From\|Message-Id\|Newsgroup\|References\|Subject\|Xref\):" nextgroup=slrnscScoreItemFill contains=slrnscOper,slrnscItem,slrnscDelim +syn region slrnscScoreItem contained matchgroup=Special start="^\s*\~\={::\=" end="^\s*}" skipempty nextgroup=slrnscScoreItem contains=slrnscScoreItem + +syn keyword slrnscScore contained Score +syn match slrnscScoreIdent contained "%.*" +syn match slrnScoreLine "^\s*Score::\=\s\+=\=[-+]\=\d\+\s*\(%.*\)\=$" skipempty nextgroup=slrnscScoreItem contains=slrnscScore,slrnscDelim,slrnscOper,slrnscNumber,slrnscScoreIdent + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link slrnscComment Comment +hi def link slrnscSectionCom slrnscComment +hi def link slrnscGroup String +hi def link slrnscNumber Number +hi def link slrnscDate Special +hi def link slrnscDelim Delimiter +hi def link slrnscComma SpecialChar +hi def link slrnscOper SpecialChar +hi def link slrnscEsc String +hi def link slrnscSectionStd Type +hi def link slrnscSectionNot Delimiter +hi def link slrnscItem Statement +hi def link slrnscScore Keyword +hi def link slrnscScoreIdent Identifier +hi def link slrnscInclude Keyword + + +let b:current_syntax = "slrnsc" + +"EOF vim: ts=8 noet tw=200 sw=8 sts=0 diff --git a/.config/vim/syntax/sm.vim b/.config/vim/syntax/sm.vim new file mode 100644 index 0000000..13a5bf1 --- /dev/null +++ b/.config/vim/syntax/sm.vim @@ -0,0 +1,82 @@ +" Vim syntax file +" Language: sendmail +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Charles E. Campbell +" Last Change: Oct 25, 2016 +" 2024 Feb 19 by Vim Project (announce adoption) +" Version: 9 +" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SM +if exists("b:current_syntax") + finish +endif + +" Comments +syn match smComment "^#.*$" contains=@Spell + +" Definitions, Classes, Files, Options, Precedence, Trusted Users, Mailers +syn match smDefine "^[CDF]." +syn match smDefine "^O[AaBcdDeFfgHiLmNoQqrSsTtuvxXyYzZ]" +syn match smDefine "^O\s"he=e-1 +syn match smDefine "^M[a-zA-Z0-9]\+,"he=e-1 +syn match smDefine "^T" nextgroup=smTrusted +syn match smDefine "^P" nextgroup=smMesg +syn match smTrusted "\S\+$" contained +syn match smMesg "\S*="he=e-1 contained nextgroup=smPrecedence +syn match smPrecedence "-\=[0-9]\+" contained + +" Header Format H?list-of-mailer-flags?name: format +syn match smHeaderSep contained "[?:]" +syn match smHeader "^H\(?[a-zA-Z]\+?\)\=[-a-zA-Z_]\+:" contains=smHeaderSep + +" Variables +syn match smVar "\$[a-z\.\|]" + +" Rulesets +syn match smRuleset "^S\d*" + +" Rewriting Rules +syn match smRewrite "^R" skipwhite nextgroup=smRewriteLhsToken,smRewriteLhsUser + +syn match smRewriteLhsUser contained "[^\t$]\+" skipwhite nextgroup=smRewriteLhsToken,smRewriteLhsSep +syn match smRewriteLhsToken contained "\(\$[-*+]\|\$[-=][A-Za-z]\|\$Y\)\+" skipwhite nextgroup=smRewriteLhsUser,smRewriteLhsSep + +syn match smRewriteLhsSep contained "\t\+" skipwhite nextgroup=smRewriteRhsToken,smRewriteRhsUser + +syn match smRewriteRhsUser contained "[^\t$]\+" skipwhite nextgroup=smRewriteRhsToken,smRewriteRhsSep +syn match smRewriteRhsToken contained "\(\$\d\|\$>\d\|\$#\|\$@\|\$:[-_a-zA-Z]\+\|\$[[\]]\|\$@\|\$:\|\$[A-Za-z]\)\+" skipwhite nextgroup=smRewriteRhsUser,smRewriteRhsSep + +syn match smRewriteRhsSep contained "\t\+" skipwhite nextgroup=smRewriteComment,smRewriteRhsSep +syn match smRewriteRhsSep contained "$" + +syn match smRewriteComment contained "[^\t$]*$" + +" Clauses +syn match smClauseError "\$\." +syn match smElse contained "\$|" +syn match smClauseCont contained "^\t" +syn region smClause matchgroup=Delimiter start="\$?." matchgroup=Delimiter end="\$\." contains=smElse,smClause,smVar,smClauseCont + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link smClause Special +hi def link smClauseError Error +hi def link smComment Comment +hi def link smDefine Statement +hi def link smElse Delimiter +hi def link smHeader Statement +hi def link smHeaderSep String +hi def link smMesg Special +hi def link smPrecedence Number +hi def link smRewrite Statement +hi def link smRewriteComment Comment +hi def link smRewriteLhsToken String +hi def link smRewriteLhsUser Statement +hi def link smRewriteRhsToken String +hi def link smRuleset Preproc +hi def link smTrusted Special +hi def link smVar String + +let b:current_syntax = "sm" + +" vim: ts=18 diff --git a/.config/vim/syntax/smarty.vim b/.config/vim/syntax/smarty.vim new file mode 100644 index 0000000..a39c290 --- /dev/null +++ b/.config/vim/syntax/smarty.vim @@ -0,0 +1,76 @@ +" Vim syntax file +" Language: Smarty Templates +" Maintainer: Manfred Stienstra manfred.stienstra@dwerg.net +" Last Change: Mon Nov 4 11:42:23 CET 2002 +" Filenames: *.tpl +" URL: http://www.dwerg.net/projects/vim/smarty.vim + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if !exists("main_syntax") + " quit when a syntax file was already loaded + if exists("b:current_syntax") + finish + endif + let main_syntax = 'smarty' +endif + +syn case ignore + +runtime! syntax/html.vim +"syn cluster htmlPreproc add=smartyUnZone + +syn match smartyBlock contained "[\[\]]" + +syn keyword smartyTagName capture config_load include include_php +syn keyword smartyTagName insert if elseif else ldelim rdelim literal +syn keyword smartyTagName php section sectionelse foreach foreachelse +syn keyword smartyTagName strip assign counter cycle debug eval fetch +syn keyword smartyTagName html_options html_select_date html_select_time +syn keyword smartyTagName math popup_init popup html_checkboxes html_image +syn keyword smartyTagName html_radios html_table mailto textformat + +syn keyword smartyModifier cat capitalize count_characters count_paragraphs +syn keyword smartyModifier count_sentences count_words date_format default +syn keyword smartyModifier escape indent lower nl2br regex_replace replace +syn keyword smartyModifier spacify string_format strip strip_tags truncate +syn keyword smartyModifier upper wordwrap + +syn keyword smartyInFunc neq eq + +syn keyword smartyProperty contained "file=" +syn keyword smartyProperty contained "loop=" +syn keyword smartyProperty contained "name=" +syn keyword smartyProperty contained "include=" +syn keyword smartyProperty contained "skip=" +syn keyword smartyProperty contained "section=" + +syn keyword smartyConstant "\$smarty" + +syn keyword smartyDot . + +syn region smartyZone matchgroup=Delimiter start="{" end="}" contains=smartyProperty, smartyString, smartyBlock, smartyTagName, smartyConstant, smartyInFunc, smartyModifier + +syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,smartyZone +syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,smartyZone + syn region htmlLink start="\_[^>]*\" end="
    "me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc,smartyZone + + + +hi def link smartyTagName Identifier +hi def link smartyProperty Constant +" if you want the text inside the braces to be colored, then +" remove the comment in from of the next statement +"hi def link smartyZone Include +hi def link smartyInFunc Function +hi def link smartyBlock Constant +hi def link smartyDot SpecialChar +hi def link smartyModifier Function + +let b:current_syntax = "smarty" + +if main_syntax == 'smarty' + unlet main_syntax +endif + +" vim: ts=8 diff --git a/.config/vim/syntax/smcl.vim b/.config/vim/syntax/smcl.vim new file mode 100644 index 0000000..a5baa47 --- /dev/null +++ b/.config/vim/syntax/smcl.vim @@ -0,0 +1,307 @@ +" smcl.vim -- Vim syntax file for smcl files. +" Language: SMCL -- Stata Markup and Control Language +" Maintainer: Jeff Pitblado +" Last Change: 26apr2006 +" Version: 1.1.2 + +" Log: +" 20mar2003 updated the match definition for cmdab +" 14apr2006 'syntax clear' only under version control +" check for 'b:current_syntax', removed 'did_smcl_syntax_inits' +" 26apr2006 changed 'stata_smcl' to 'smcl' + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syntax case match + +syn keyword smclCCLword current_date contained +syn keyword smclCCLword current_time contained +syn keyword smclCCLword rmsg_time contained +syn keyword smclCCLword stata_version contained +syn keyword smclCCLword version contained +syn keyword smclCCLword born_date contained +syn keyword smclCCLword flavor contained +syn keyword smclCCLword SE contained +syn keyword smclCCLword mode contained +syn keyword smclCCLword console contained +syn keyword smclCCLword os contained +syn keyword smclCCLword osdtl contained +syn keyword smclCCLword machine_type contained +syn keyword smclCCLword byteorder contained +syn keyword smclCCLword sysdir_stata contained +syn keyword smclCCLword sysdir_updates contained +syn keyword smclCCLword sysdir_base contained +syn keyword smclCCLword sysdir_site contained +syn keyword smclCCLword sysdir_plus contained +syn keyword smclCCLword sysdir_personal contained +syn keyword smclCCLword sysdir_oldplace contained +syn keyword smclCCLword adopath contained +syn keyword smclCCLword pwd contained +syn keyword smclCCLword dirsep contained +syn keyword smclCCLword max_N_theory contained +syn keyword smclCCLword max_N_current contained +syn keyword smclCCLword max_k_theory contained +syn keyword smclCCLword max_k_current contained +syn keyword smclCCLword max_width_theory contained +syn keyword smclCCLword max_width_current contained +syn keyword smclCCLword max_matsize contained +syn keyword smclCCLword min_matsize contained +syn keyword smclCCLword max_macrolen contained +syn keyword smclCCLword macrolen contained +syn keyword smclCCLword max_cmdlen contained +syn keyword smclCCLword cmdlen contained +syn keyword smclCCLword namelen contained +syn keyword smclCCLword mindouble contained +syn keyword smclCCLword maxdouble contained +syn keyword smclCCLword epsdouble contained +syn keyword smclCCLword minfloat contained +syn keyword smclCCLword maxfloat contained +syn keyword smclCCLword epsfloat contained +syn keyword smclCCLword minlong contained +syn keyword smclCCLword maxlong contained +syn keyword smclCCLword minint contained +syn keyword smclCCLword maxint contained +syn keyword smclCCLword minbyte contained +syn keyword smclCCLword maxbyte contained +syn keyword smclCCLword maxstrvarlen contained +syn keyword smclCCLword memory contained +syn keyword smclCCLword maxvar contained +syn keyword smclCCLword matsize contained +syn keyword smclCCLword N contained +syn keyword smclCCLword k contained +syn keyword smclCCLword width contained +syn keyword smclCCLword changed contained +syn keyword smclCCLword filename contained +syn keyword smclCCLword filedate contained +syn keyword smclCCLword more contained +syn keyword smclCCLword rmsg contained +syn keyword smclCCLword dp contained +syn keyword smclCCLword linesize contained +syn keyword smclCCLword pagesize contained +syn keyword smclCCLword logtype contained +syn keyword smclCCLword linegap contained +syn keyword smclCCLword scrollbufsize contained +syn keyword smclCCLword varlabelpos contained +syn keyword smclCCLword reventries contained +syn keyword smclCCLword graphics contained +syn keyword smclCCLword scheme contained +syn keyword smclCCLword printcolor contained +syn keyword smclCCLword adosize contained +syn keyword smclCCLword maxdb contained +syn keyword smclCCLword virtual contained +syn keyword smclCCLword checksum contained +syn keyword smclCCLword timeout1 contained +syn keyword smclCCLword timeout2 contained +syn keyword smclCCLword httpproxy contained +syn keyword smclCCLword h_current contained +syn keyword smclCCLword max_matsize contained +syn keyword smclCCLword min_matsize contained +syn keyword smclCCLword max_macrolen contained +syn keyword smclCCLword macrolen contained +syn keyword smclCCLword max_cmdlen contained +syn keyword smclCCLword cmdlen contained +syn keyword smclCCLword namelen contained +syn keyword smclCCLword mindouble contained +syn keyword smclCCLword maxdouble contained +syn keyword smclCCLword epsdouble contained +syn keyword smclCCLword minfloat contained +syn keyword smclCCLword maxfloat contained +syn keyword smclCCLword epsfloat contained +syn keyword smclCCLword minlong contained +syn keyword smclCCLword maxlong contained +syn keyword smclCCLword minint contained +syn keyword smclCCLword maxint contained +syn keyword smclCCLword minbyte contained +syn keyword smclCCLword maxbyte contained +syn keyword smclCCLword maxstrvarlen contained +syn keyword smclCCLword memory contained +syn keyword smclCCLword maxvar contained +syn keyword smclCCLword matsize contained +syn keyword smclCCLword N contained +syn keyword smclCCLword k contained +syn keyword smclCCLword width contained +syn keyword smclCCLword changed contained +syn keyword smclCCLword filename contained +syn keyword smclCCLword filedate contained +syn keyword smclCCLword more contained +syn keyword smclCCLword rmsg contained +syn keyword smclCCLword dp contained +syn keyword smclCCLword linesize contained +syn keyword smclCCLword pagesize contained +syn keyword smclCCLword logtype contained +syn keyword smclCCLword linegap contained +syn keyword smclCCLword scrollbufsize contained +syn keyword smclCCLword varlabelpos contained +syn keyword smclCCLword reventries contained +syn keyword smclCCLword graphics contained +syn keyword smclCCLword scheme contained +syn keyword smclCCLword printcolor contained +syn keyword smclCCLword adosize contained +syn keyword smclCCLword maxdb contained +syn keyword smclCCLword virtual contained +syn keyword smclCCLword checksum contained +syn keyword smclCCLword timeout1 contained +syn keyword smclCCLword timeout2 contained +syn keyword smclCCLword httpproxy contained +syn keyword smclCCLword httpproxyhost contained +syn keyword smclCCLword httpproxyport contained +syn keyword smclCCLword httpproxyauth contained +syn keyword smclCCLword httpproxyuser contained +syn keyword smclCCLword httpproxypw contained +syn keyword smclCCLword trace contained +syn keyword smclCCLword tracedepth contained +syn keyword smclCCLword tracesep contained +syn keyword smclCCLword traceindent contained +syn keyword smclCCLword traceexapnd contained +syn keyword smclCCLword tracenumber contained +syn keyword smclCCLword type contained +syn keyword smclCCLword level contained +syn keyword smclCCLword seed contained +syn keyword smclCCLword searchdefault contained +syn keyword smclCCLword pi contained +syn keyword smclCCLword rc contained + +" Directive for the contant and current-value class +syn region smclCCL start=/{ccl / end=/}/ oneline contains=smclCCLword + +" The order of the following syntax definitions is roughly that of the on-line +" documentation for smcl in Stata, from within Stata see help smcl. + +" Format directives for line and paragraph modes +syn match smclFormat /{smcl}/ +syn match smclFormat /{sf\(\|:[^}]\+\)}/ +syn match smclFormat /{it\(\|:[^}]\+\)}/ +syn match smclFormat /{bf\(\|:[^}]\+\)}/ +syn match smclFormat /{inp\(\|:[^}]\+\)}/ +syn match smclFormat /{input\(\|:[^}]\+\)}/ +syn match smclFormat /{err\(\|:[^}]\+\)}/ +syn match smclFormat /{error\(\|:[^}]\+\)}/ +syn match smclFormat /{res\(\|:[^}]\+\)}/ +syn match smclFormat /{result\(\|:[^}]\+\)}/ +syn match smclFormat /{txt\(\|:[^}]\+\)}/ +syn match smclFormat /{text\(\|:[^}]\+\)}/ +syn match smclFormat /{com\(\|:[^}]\+\)}/ +syn match smclFormat /{cmd\(\|:[^}]\+\)}/ +syn match smclFormat /{cmdab:[^:}]\+:[^:}()]*\(\|:\|:(\|:()\)}/ +syn match smclFormat /{hi\(\|:[^}]\+\)}/ +syn match smclFormat /{hilite\(\|:[^}]\+\)}/ +syn match smclFormat /{ul \(on\|off\)}/ +syn match smclFormat /{ul:[^}]\+}/ +syn match smclFormat /{hline\(\| \d\+\| -\d\+\|:[^}]\+\)}/ +syn match smclFormat /{dup \d\+:[^}]\+}/ +syn match smclFormat /{c [^}]\+}/ +syn match smclFormat /{char [^}]\+}/ +syn match smclFormat /{reset}/ + +" Formatting directives for line mode +syn match smclFormat /{title:[^}]\+}/ +syn match smclFormat /{center:[^}]\+}/ +syn match smclFormat /{centre:[^}]\+}/ +syn match smclFormat /{center \d\+:[^}]\+}/ +syn match smclFormat /{centre \d\+:[^}]\+}/ +syn match smclFormat /{right:[^}]\+}/ +syn match smclFormat /{lalign \d\+:[^}]\+}/ +syn match smclFormat /{ralign \d\+:[^}]\+}/ +syn match smclFormat /{\.\.\.}/ +syn match smclFormat /{col \d\+}/ +syn match smclFormat /{space \d\+}/ +syn match smclFormat /{tab}/ + +" Formatting directives for paragraph mode +syn match smclFormat /{bind:[^}]\+}/ +syn match smclFormat /{break}/ + +syn match smclFormat /{p}/ +syn match smclFormat /{p \d\+}/ +syn match smclFormat /{p \d\+ \d\+}/ +syn match smclFormat /{p \d\+ \d\+ \d\+}/ +syn match smclFormat /{pstd}/ +syn match smclFormat /{psee}/ +syn match smclFormat /{phang\(\|2\|3\)}/ +syn match smclFormat /{pmore\(\|2\|3\)}/ +syn match smclFormat /{pin\(\|2\|3\)}/ +syn match smclFormat /{p_end}/ + +syn match smclFormat /{opt \w\+\(\|:\w\+\)\(\|([^)}]*)\)}/ + +syn match smclFormat /{opth \w*\(\|:\w\+\)(\w*)}/ +syn match smclFormat /{opth "\w\+\((\w\+:[^)}]\+)\)"}/ +syn match smclFormat /{opth \w\+:\w\+(\w\+:[^)}]\+)}/ + +syn match smclFormat /{dlgtab\s*\(\|\d\+\|\d\+\s\+\d\+\):[^}]\+}/ + +syn match smclFormat /{p2colset\s\+\d\+\s\+\d\+\s\+\d\+\s\+\d\+}/ +syn match smclFormat /{p2col\s\+:[^{}]*}.*{p_end}/ +syn match smclFormat /{p2col\s\+:{[^{}]*}}.*{p_end}/ +syn match smclFormat /{p2coldent\s*:[^{}]*}.*{p_end}/ +syn match smclFormat /{p2coldent\s*:{[^{}]*}}.*{p_end}/ +syn match smclFormat /{p2line\s*\(\|\d\+\s\+\d\+\)}/ +syn match smclFormat /{p2colreset}/ + +syn match smclFormat /{synoptset\s\+\d\+\s\+\w\+}/ +syn match smclFormat /{synopt\s*:[^{}]*}.*{p_end}/ +syn match smclFormat /{synopt\s*:{[^{}]*}}.*{p_end}/ +syn match smclFormat /{syntab\s*:[^{}]*}/ +syn match smclFormat /{synopthdr}/ +syn match smclFormat /{synoptline}/ + +" Link directive for line and paragraph modes +syn match smclLink /{help [^}]\+}/ +syn match smclLink /{helpb [^}]\+}/ +syn match smclLink /{help_d:[^}]\+}/ +syn match smclLink /{search [^}]\+}/ +syn match smclLink /{search_d:[^}]\+}/ +syn match smclLink /{browse [^}]\+}/ +syn match smclLink /{view [^}]\+}/ +syn match smclLink /{view_d:[^}]\+}/ +syn match smclLink /{news:[^}]\+}/ +syn match smclLink /{net [^}]\+}/ +syn match smclLink /{net_d:[^}]\+}/ +syn match smclLink /{netfrom_d:[^}]\+}/ +syn match smclLink /{ado [^}]\+}/ +syn match smclLink /{ado_d:[^}]\+}/ +syn match smclLink /{update [^}]\+}/ +syn match smclLink /{update_d:[^}]\+}/ +syn match smclLink /{dialog [^}]\+}/ +syn match smclLink /{back:[^}]\+}/ +syn match smclLink /{clearmore:[^}]\+}/ +syn match smclLink /{stata [^}]\+}/ + +syn match smclLink /{newvar\(\|:[^}]\+\)}/ +syn match smclLink /{var\(\|:[^}]\+\)}/ +syn match smclLink /{varname\(\|:[^}]\+\)}/ +syn match smclLink /{vars\(\|:[^}]\+\)}/ +syn match smclLink /{varlist\(\|:[^}]\+\)}/ +syn match smclLink /{depvar\(\|:[^}]\+\)}/ +syn match smclLink /{depvars\(\|:[^}]\+\)}/ +syn match smclLink /{depvarlist\(\|:[^}]\+\)}/ +syn match smclLink /{indepvars\(\|:[^}]\+\)}/ + +syn match smclLink /{dtype}/ +syn match smclLink /{ifin}/ +syn match smclLink /{weight}/ + +" Comment +syn region smclComment start=/{\*/ end=/}/ oneline + +" Strings +syn region smclString matchgroup=Nothing start=/"/ end=/"/ oneline +syn region smclEString matchgroup=Nothing start=/`"/ end=/"'/ oneline contains=smclEString + +" assign highlight groups + +hi def link smclEString smclString + +hi def link smclCCLword Statement +hi def link smclCCL Type +hi def link smclFormat Statement +hi def link smclLink Underlined +hi def link smclComment Comment +hi def link smclString String + +let b:current_syntax = "smcl" + +" vim: ts=8 diff --git a/.config/vim/syntax/smil.vim b/.config/vim/syntax/smil.vim new file mode 100644 index 0000000..4cf6e84 --- /dev/null +++ b/.config/vim/syntax/smil.vim @@ -0,0 +1,146 @@ +" Vim syntax file +" Language: SMIL (Synchronized Multimedia Integration Language) +" Maintainer: Herve Foucher +" URL: http://www.helio.org/vim/syntax/smil.vim +" Last Change: 2012 Feb 03 by Thilo Six + +" To learn more about SMIL, please refer to http://www.w3.org/AudioVideo/ +" and to http://www.helio.org/products/smil/tutorial/ + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" SMIL is case sensitive +syn case match + +" illegal characters +syn match smilError "[<>&]" +syn match smilError "[()&]" + +if !exists("main_syntax") + let main_syntax = 'smil' +endif + +" tags +syn match smilSpecial contained "\\\d\d\d\|\\." +syn match smilSpecial contained "(" +syn match smilSpecial contained "id(" +syn match smilSpecial contained ")" +syn keyword smilSpecial contained remove freeze true false on off overdub caption new pause replace +syn keyword smilSpecial contained first last +syn keyword smilSpecial contained fill meet slice scroll hidden +syn region smilString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=smilSpecial +syn region smilString contained start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=smilSpecial +syn match smilValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 +syn region smilEndTag start=++ contains=smilTagN,smilTagError +syn region smilTag start=+<[^/]+ end=+>+ contains=smilTagN,smilString,smilArg,smilValue,smilTagError,smilEvent,smilCssDefinition +syn match smilTagN contained +<\s*[-a-zA-Z0-9]\++ms=s+1 contains=smilTagName,smilSpecialTagName +syn match smilTagN contained +]<"ms=s+1 + +" tag names +syn keyword smilTagName contained smil head body anchor a switch region layout meta +syn match smilTagName contained "root-layout" +syn keyword smilTagName contained par seq +syn keyword smilTagName contained animation video img audio ref text textstream +syn match smilTagName contained "\<\(head\|body\)\>" + + +" legal arg names +syn keyword smilArg contained dur begin end href target id coords show title abstract author copyright alt +syn keyword smilArg contained left top width height fit src name content fill longdesc repeat type +syn match smilArg contained "z-index" +syn match smilArg contained " end-sync" +syn match smilArg contained " region" +syn match smilArg contained "background-color" +syn match smilArg contained "system-bitrate" +syn match smilArg contained "system-captions" +syn match smilArg contained "system-overdub-or-caption" +syn match smilArg contained "system-language" +syn match smilArg contained "system-required" +syn match smilArg contained "system-screen-depth" +syn match smilArg contained "system-screen-size" +syn match smilArg contained "clip-begin" +syn match smilArg contained "clip-end" +syn match smilArg contained "skip-content" + + +" SMIL Boston ext. +" This are new SMIL functionnalities seen on www.w3.org on August 3rd 1999 + +" Animation +syn keyword smilTagName contained animate set move +syn keyword smilArg contained calcMode from to by additive values origin path +syn keyword smilArg contained accumulate hold attribute +syn match smilArg contained "xml:link" +syn keyword smilSpecial contained discrete linear spline parent layout +syn keyword smilSpecial contained top left simple + +" Linking +syn keyword smilTagName contained area +syn keyword smilArg contained actuate behavior inline sourceVolume +syn keyword smilArg contained destinationVolume destinationPlaystate tabindex +syn keyword smilArg contained class style lang dir onclick ondblclick onmousedown onmouseup onmouseover onmousemove onmouseout onkeypress onkeydown onkeyup shape nohref accesskey onfocus onblur +syn keyword smilSpecial contained play pause stop rect circ poly child par seq + +" Media Object +syn keyword smilTagName contained rtpmap +syn keyword smilArg contained port transport encoding payload clipBegin clipEnd +syn match smilArg contained "fmt-list" + +" Timing and Synchronization +syn keyword smilTagName contained excl +syn keyword smilArg contained beginEvent endEvent eventRestart endSync repeatCount repeatDur +syn keyword smilArg contained syncBehavior syncTolerance +syn keyword smilSpecial contained canSlip locked + +" special characters +syn match smilSpecialChar "&[^;]*;" + +if exists("smil_wrong_comments") + syn region smilComment start=++ +else + syn region smilComment start=++ contains=smilCommentPart,smilCommentError + syn match smilCommentError contained "[^>+ + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link smilTag Function +hi def link smilEndTag Identifier +hi def link smilArg Type +hi def link smilTagName smilStatement +hi def link smilSpecialTagName Exception +hi def link smilValue Value +hi def link smilSpecialChar Special + +hi def link smilSpecial Special +hi def link smilSpecialChar Special +hi def link smilString String +hi def link smilStatement Statement +hi def link smilComment Comment +hi def link smilCommentPart Comment +hi def link smilPreProc PreProc +hi def link smilValue String +hi def link smilCommentError smilError +hi def link smilTagError smilError +hi def link smilError Error + + +let b:current_syntax = "smil" + +if main_syntax == 'smil' + unlet main_syntax +endif + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8 diff --git a/.config/vim/syntax/smith.vim b/.config/vim/syntax/smith.vim new file mode 100644 index 0000000..b045d3b --- /dev/null +++ b/.config/vim/syntax/smith.vim @@ -0,0 +1,39 @@ +" Vim syntax file +" Language: SMITH +" Maintainer: Rafal M. Sulejman +" Last Change: 21.07.2000 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + + +syn match smithComment ";.*$" + +syn match smithNumber "\<[+-]*[0-9]\d*\>" + +syn match smithRegister "R[\[]*[0-9]*[\]]*" + +syn match smithKeyword "COR\|MOV\|MUL\|NOT\|STOP\|SUB\|NOP\|BLA\|REP" + +syn region smithString start=+"+ skip=+\\\\\|\\"+ end=+"+ + + +syn case match + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link smithRegister Identifier +hi def link smithKeyword Keyword +hi def link smithComment Comment +hi def link smithString String +hi def link smithNumber Number + + +let b:current_syntax = "smith" + +" vim: ts=2 diff --git a/.config/vim/syntax/sml.vim b/.config/vim/syntax/sml.vim new file mode 100644 index 0000000..288b2f8 --- /dev/null +++ b/.config/vim/syntax/sml.vim @@ -0,0 +1,223 @@ +" Vim syntax file +" Language: SML +" Filenames: *.sml *.sig +" Maintainer: Markus Mottl +" Previous Maintainer: Fabrizio Zeno Cornelli (invalid) +" Last Change: 2025 Nov 07 - Update Number Regex +" 2022 Apr 01 +" 2015 Aug 31 - Fixed opening of modules (Ramana Kumar) +" 2006 Oct 23 - Fixed character highlighting bug (MM) + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Disable spell checking of syntax. +syn spell notoplevel + +" SML is case sensitive. +syn case match + +" lowercase identifier - the standard way to match +syn match smlLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/ + +syn match smlKeyChar "|" + +" Errors +syn match smlBraceErr "}" +syn match smlBrackErr "\]" +syn match smlParenErr ")" +syn match smlCommentErr "\*)" +syn match smlThenErr "\" + +" Error-highlighting of "end" without synchronization: +" as keyword or as error (default) +if exists("sml_noend_error") + syn match smlKeyword "\" +else + syn match smlEndErr "\" +endif + +" Some convenient clusters +syn cluster smlAllErrs contains=smlBraceErr,smlBrackErr,smlParenErr,smlCommentErr,smlEndErr,smlThenErr + +syn cluster smlAENoParen contains=smlBraceErr,smlBrackErr,smlCommentErr,smlEndErr,smlThenErr + +syn cluster smlContained contains=smlTodo,smlPreDef,smlModParam,smlModParam1,smlPreMPRestr,smlMPRestr,smlMPRestr1,smlMPRestr2,smlMPRestr3,smlModRHS,smlFuncWith,smlFuncStruct,smlModTypeRestr,smlModTRWith,smlWith,smlWithRest,smlModType,smlFullMod + + +" Enclosing delimiters +syn region smlEncl transparent matchgroup=smlKeyword start="(" matchgroup=smlKeyword end=")" contains=ALLBUT,@smlContained,smlParenErr +syn region smlEncl transparent matchgroup=smlKeyword start="{" matchgroup=smlKeyword end="}" contains=ALLBUT,@smlContained,smlBraceErr +syn region smlEncl transparent matchgroup=smlKeyword start="\[" matchgroup=smlKeyword end="\]" contains=ALLBUT,@smlContained,smlBrackErr +syn region smlEncl transparent matchgroup=smlKeyword start="#\[" matchgroup=smlKeyword end="\]" contains=ALLBUT,@smlContained,smlBrackErr + + +" Comments +syn region smlComment start="(\*" end="\*)" contains=smlComment,smlTodo,@Spell +syn keyword smlTodo contained TODO FIXME XXX + + +" let +syn region smlEnd matchgroup=smlKeyword start="\" matchgroup=smlKeyword end="\" contains=ALLBUT,@smlContained,smlEndErr + +" local +syn region smlEnd matchgroup=smlKeyword start="\" matchgroup=smlKeyword end="\" contains=ALLBUT,@smlContained,smlEndErr + +" abstype +syn region smlNone matchgroup=smlKeyword start="\" matchgroup=smlKeyword end="\" contains=ALLBUT,@smlContained,smlEndErr + +" begin +syn region smlEnd matchgroup=smlKeyword start="\" matchgroup=smlKeyword end="\" contains=ALLBUT,@smlContained,smlEndErr + +" if +syn region smlNone matchgroup=smlKeyword start="\" matchgroup=smlKeyword end="\" contains=ALLBUT,@smlContained,smlThenErr + + +"" Modules + +" "struct" +syn region smlStruct matchgroup=smlModule start="\" matchgroup=smlModule end="\" contains=ALLBUT,@smlContained,smlEndErr + +" "sig" +syn region smlSig matchgroup=smlModule start="\" matchgroup=smlModule end="\" contains=ALLBUT,@smlContained,smlEndErr,smlModule +syn region smlModSpec matchgroup=smlKeyword start="\" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contained contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlModTRWith,smlMPRestr + +" "open" +syn region smlNone matchgroup=smlKeyword start="\" matchgroup=smlModule end="\<\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*\>" contains=@smlAllErrs,smlComment + +" "structure" - somewhat complicated stuff ;-) +syn region smlModule matchgroup=smlKeyword start="\<\(structure\|functor\)\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlPreDef +syn region smlPreDef start="."me=e-1 matchgroup=smlKeyword end="\l\|="me=e-1 contained contains=@smlAllErrs,smlComment,smlModParam,smlModTypeRestr,smlModTRWith nextgroup=smlModPreRHS +syn region smlModParam start="([^*]" end=")" contained contains=@smlAENoParen,smlModParam1 +syn match smlModParam1 "\<\u\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=smlPreMPRestr + +syn region smlPreMPRestr start="."me=e-1 end=")"me=e-1 contained contains=@smlAllErrs,smlComment,smlMPRestr,smlModTypeRestr + +syn region smlMPRestr start=":" end="."me=e-1 contained contains=@smlComment skipwhite skipempty nextgroup=smlMPRestr1,smlMPRestr2,smlMPRestr3 +syn region smlMPRestr1 matchgroup=smlModule start="\ssig\s\=" matchgroup=smlModule end="\" contained contains=ALLBUT,@smlContained,smlEndErr,smlModule +syn region smlMPRestr2 start="\sfunctor\(\s\|(\)\="me=e-1 matchgroup=smlKeyword end="->" contained contains=@smlAllErrs,smlComment,smlModParam skipwhite skipempty nextgroup=smlFuncWith +syn match smlMPRestr3 "\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*" contained +syn match smlModPreRHS "=" contained skipwhite skipempty nextgroup=smlModParam,smlFullMod +syn region smlModRHS start="." end=".\w\|([^*]"me=e-2 contained contains=smlComment skipwhite skipempty nextgroup=smlModParam,smlFullMod +syn match smlFullMod "\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*" contained skipwhite skipempty nextgroup=smlFuncWith + +syn region smlFuncWith start="([^*]"me=e-1 end=")" contained contains=smlComment,smlWith,smlFuncStruct +syn region smlFuncStruct matchgroup=smlModule start="[^a-zA-Z]struct\>"hs=s+1 matchgroup=smlModule end="\" contains=ALLBUT,@smlContained,smlEndErr + +syn match smlModTypeRestr "\<\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*\>" contained +syn region smlModTRWith start=":\s*("hs=s+1 end=")" contained contains=@smlAENoParen,smlWith +syn match smlWith "\<\(\u\(\w\|'\)*\.\)*\w\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=smlWithRest +syn region smlWithRest start="[^)]" end=")"me=e-1 contained contains=ALLBUT,@smlContained + +" "signature" +syn region smlKeyword start="\" matchgroup=smlModule end="\<\w\(\w\|'\)*\>" contains=smlComment skipwhite skipempty nextgroup=smlMTDef +syn match smlMTDef "=\s*\w\(\w\|'\)*\>"hs=s+1,me=s + +syn keyword smlKeyword and andalso case +syn keyword smlKeyword datatype else eqtype +syn keyword smlKeyword exception fn fun handle +syn keyword smlKeyword in infix infixl infixr +syn keyword smlKeyword match nonfix of orelse +syn keyword smlKeyword raise handle type +syn keyword smlKeyword val where while with withtype + +syn keyword smlType bool char exn int list option +syn keyword smlType real string unit + +syn keyword smlOperator div mod not or quot rem + +syn keyword smlBoolean true false +syn match smlConstructor "(\s*)" +syn match smlConstructor "\[\s*\]" +syn match smlConstructor "#\[\s*\]" +syn match smlConstructor "\u\(\w\|'\)*\>" + +" Module prefix +syn match smlModPath "\u\(\w\|'\)*\."he=e-1 + +syn match smlCharacter +#"\\""\|#"."\|#"\\\d\d\d"+ +syn match smlCharErr +#"\\\d\d"\|#"\\\d"+ +syn region smlString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell + +syn match smlFunDef "=>" +syn match smlRefAssign ":=" +syn match smlTopStop ";;" +syn match smlOperator "\^" +syn match smlOperator "::" +syn match smlAnyVar "\<_\>" +syn match smlKeyChar "!" +syn match smlKeyChar ";" +syn match smlKeyChar "\*" +syn match smlKeyChar "=" + +syn match smlNumber "\~\=\<\d\+\>" +syn match smlNumber "\~\=\<0x\x\+\>" +syn match smlWord "\<0w\d\+\>" +syn match smlWord "\<0wx\x\+\>" +syn match smlReal "\~\=\<\d\+\.\d\+\%([eE]\~\=\d\+\)\=\>" + +" Synchronization +syn sync minlines=20 +syn sync maxlines=500 + +syn sync match smlEndSync grouphere smlEnd "\" +syn sync match smlEndSync groupthere smlEnd "\" +syn sync match smlStructSync grouphere smlStruct "\" +syn sync match smlStructSync groupthere smlStruct "\" +syn sync match smlSigSync grouphere smlSig "\" +syn sync match smlSigSync groupthere smlSig "\" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link smlBraceErr Error +hi def link smlBrackErr Error +hi def link smlParenErr Error + +hi def link smlCommentErr Error + +hi def link smlEndErr Error +hi def link smlThenErr Error + +hi def link smlCharErr Error + +hi def link smlComment Comment + +hi def link smlModPath Include +hi def link smlModule Include +hi def link smlModParam1 Include +hi def link smlModType Include +hi def link smlMPRestr3 Include +hi def link smlFullMod Include +hi def link smlModTypeRestr Include +hi def link smlWith Include +hi def link smlMTDef Include + +hi def link smlConstructor Constant + +hi def link smlModPreRHS Keyword +hi def link smlMPRestr2 Keyword +hi def link smlKeyword Keyword +hi def link smlFunDef Keyword +hi def link smlRefAssign Keyword +hi def link smlKeyChar Keyword +hi def link smlAnyVar Keyword +hi def link smlTopStop Keyword +hi def link smlOperator Keyword + +hi def link smlBoolean Boolean +hi def link smlCharacter Character +hi def link smlNumber Number +hi def link smlWord Number +hi def link smlReal Float +hi def link smlString String +hi def link smlType Type +hi def link smlTodo Todo +hi def link smlEncl Keyword + + +let b:current_syntax = "sml" + +" vim: ts=8 diff --git a/.config/vim/syntax/snnsnet.vim b/.config/vim/syntax/snnsnet.vim new file mode 100644 index 0000000..9dc9e06 --- /dev/null +++ b/.config/vim/syntax/snnsnet.vim @@ -0,0 +1,67 @@ +" Vim syntax file +" Language: SNNS network file +" Maintainer: Davide Alberani +" Last Change: 28 Apr 2001 +" Version: 0.2 +" URL: http://digilander.iol.it/alberanid/vim/syntax/snnsnet.vim +" +" SNNS http://www-ra.informatik.uni-tuebingen.de/SNNS/ +" is a simulator for neural networks. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn match snnsnetTitle "no\." +syn match snnsnetTitle "type name" +syn match snnsnetTitle "unit name" +syn match snnsnetTitle "act\( func\)\=" +syn match snnsnetTitle "out func" +syn match snnsnetTitle "site\( name\)\=" +syn match snnsnetTitle "site function" +syn match snnsnetTitle "source:weight" +syn match snnsnetTitle "unitNo\." +syn match snnsnetTitle "delta x" +syn match snnsnetTitle "delta y" +syn keyword snnsnetTitle typeName unitName bias st position subnet layer sites name target z LLN LUN Toff Soff Ctype + +syn match snnsnetType "SNNS network definition file [Vv]\d.\d.*" contains=snnsnetNumbers +syn match snnsnetType "generated at.*" contains=snnsnetNumbers +syn match snnsnetType "network name\s*:" +syn match snnsnetType "source files\s*:" +syn match snnsnetType "no\. of units\s*:.*" contains=snnsnetNumbers +syn match snnsnetType "no\. of connections\s*:.*" contains=snnsnetNumbers +syn match snnsnetType "no\. of unit types\s*:.*" contains=snnsnetNumbers +syn match snnsnetType "no\. of site types\s*:.*" contains=snnsnetNumbers +syn match snnsnetType "learning function\s*:" +syn match snnsnetType "pruning function\s*:" +syn match snnsnetType "subordinate learning function\s*:" +syn match snnsnetType "update function\s*:" + +syn match snnsnetSection "unit definition section" +syn match snnsnetSection "unit default section" +syn match snnsnetSection "site definition section" +syn match snnsnetSection "type definition section" +syn match snnsnetSection "connection definition section" +syn match snnsnetSection "layer definition section" +syn match snnsnetSection "subnet definition section" +syn match snnsnetSection "3D translation section" +syn match snnsnetSection "time delay section" + +syn match snnsnetNumbers "\d" contained +syn match snnsnetComment "#.*$" contains=snnsnetTodo +syn keyword snnsnetTodo TODO XXX FIXME contained + + +hi def link snnsnetType Type +hi def link snnsnetComment Comment +hi def link snnsnetNumbers Number +hi def link snnsnetSection Statement +hi def link snnsnetTitle Label +hi def link snnsnetTodo Todo + + +let b:current_syntax = "snnsnet" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/snnspat.vim b/.config/vim/syntax/snnspat.vim new file mode 100644 index 0000000..cb6e9c5 --- /dev/null +++ b/.config/vim/syntax/snnspat.vim @@ -0,0 +1,62 @@ +" Vim syntax file +" Language: SNNS pattern file +" Maintainer: Davide Alberani +" Last Change: 2012 Feb 03 by Thilo Six +" Version: 0.2 +" URL: http://digilander.iol.it/alberanid/vim/syntax/snnspat.vim +" +" SNNS http://www-ra.informatik.uni-tuebingen.de/SNNS/ +" is a simulator for neural networks. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" anything that isn't part of the header, a comment or a number +" is wrong +syn match snnspatError ".*" +" hoping that matches any kind of notation... +syn match snnspatAccepted "\([-+]\=\(\d\+\.\|\.\)\=\d\+\([Ee][-+]\=\d\+\)\=\)" +syn match snnspatAccepted "\s" +syn match snnspatBrac "\[\s*\d\+\(\s\|\d\)*\]" contains=snnspatNumbers + +" the accepted fields in the header +syn match snnspatNoHeader "No\. of patterns\s*:\s*" contained +syn match snnspatNoHeader "No\. of input units\s*:\s*" contained +syn match snnspatNoHeader "No\. of output units\s*:\s*" contained +syn match snnspatNoHeader "No\. of variable input dimensions\s*:\s*" contained +syn match snnspatNoHeader "No\. of variable output dimensions\s*:\s*" contained +syn match snnspatNoHeader "Maximum input dimensions\s*:\s*" contained +syn match snnspatNoHeader "Maximum output dimensions\s*:\s*" contained +syn match snnspatGen "generated at.*" contained contains=snnspatNumbers +syn match snnspatGen "SNNS pattern definition file [Vv]\d\.\d" contained contains=snnspatNumbers + +" the header, what is not an accepted field, is an error +syn region snnspatHeader start="^SNNS" end="^\s*[-+\.]\=[0-9#]"me=e-2 contains=snnspatNoHeader,snnspatNumbers,snnspatGen,snnspatBrac + +" numbers inside the header +syn match snnspatNumbers "\d" contained +syn match snnspatComment "#.*$" contains=snnspatTodo +syn keyword snnspatTodo TODO XXX FIXME contained + + +hi def link snnspatGen Statement +hi def link snnspatHeader Error +hi def link snnspatNoHeader Define +hi def link snnspatNumbers Number +hi def link snnspatComment Comment +hi def link snnspatError Error +hi def link snnspatTodo Todo +hi def link snnspatAccepted NONE +hi def link snnspatBrac NONE + + +let b:current_syntax = "snnspat" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/snnsres.vim b/.config/vim/syntax/snnsres.vim new file mode 100644 index 0000000..2f19b67 --- /dev/null +++ b/.config/vim/syntax/snnsres.vim @@ -0,0 +1,50 @@ +" Vim syntax file +" Language: SNNS result file +" Maintainer: Davide Alberani +" Last Change: 28 Apr 2001 +" Version: 0.2 +" URL: http://digilander.iol.it/alberanid/vim/syntax/snnsres.vim +" +" SNNS http://www-ra.informatik.uni-tuebingen.de/SNNS/ +" is a simulator for neural networks. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" the accepted fields in the header +syn match snnsresNoHeader "No\. of patterns\s*:\s*" contained +syn match snnsresNoHeader "No\. of input units\s*:\s*" contained +syn match snnsresNoHeader "No\. of output units\s*:\s*" contained +syn match snnsresNoHeader "No\. of variable input dimensions\s*:\s*" contained +syn match snnsresNoHeader "No\. of variable output dimensions\s*:\s*" contained +syn match snnsresNoHeader "Maximum input dimensions\s*:\s*" contained +syn match snnsresNoHeader "Maximum output dimensions\s*:\s*" contained +syn match snnsresNoHeader "startpattern\s*:\s*" contained +syn match snnsresNoHeader "endpattern\s*:\s*" contained +syn match snnsresNoHeader "input patterns included" contained +syn match snnsresNoHeader "teaching output included" contained +syn match snnsresGen "generated at.*" contained contains=snnsresNumbers +syn match snnsresGen "SNNS result file [Vv]\d\.\d" contained contains=snnsresNumbers + +" the header, what is not an accepted field, is an error +syn region snnsresHeader start="^SNNS" end="^\s*[-+\.]\=[0-9#]"me=e-2 contains=snnsresNoHeader,snnsresNumbers,snnsresGen + +" numbers inside the header +syn match snnsresNumbers "\d" contained +syn match snnsresComment "#.*$" contains=snnsresTodo +syn keyword snnsresTodo TODO XXX FIXME contained + + +hi def link snnsresGen Statement +hi def link snnsresHeader Statement +hi def link snnsresNoHeader Define +hi def link snnsresNumbers Number +hi def link snnsresComment Comment +hi def link snnsresTodo Todo + + +let b:current_syntax = "snnsres" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/snobol4.vim b/.config/vim/syntax/snobol4.vim new file mode 100644 index 0000000..11ce2e0 --- /dev/null +++ b/.config/vim/syntax/snobol4.vim @@ -0,0 +1,113 @@ +" Vim syntax file +" Language: SNOBOL4 +" Maintainer: Rafal Sulejman +" Site: http://rms.republika.pl/vim/syntax/snobol4.vim +" Last change: : Thu, 25 Jan 2018 14:21:24 +0100 +" Changes: +" - system variables updated for SNOBOL4 2.0+ +" - strict snobol4 mode (set snobol4_strict_mode to activate) +" - incorrect HL of dots in strings corrected +" - incorrect HL of dot-variables in parens corrected +" - one character labels weren't displayed correctly. +" - nonexistent Snobol4 keywords displayed as errors. + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syntax case ignore + +" Snobol4 keywords +syn keyword snobol4Keyword any apply arb arbno arg array +syn keyword snobol4Keyword break +syn keyword snobol4Keyword char clear code collect convert copy +syn keyword snobol4Keyword data datatype date define detach differ dump dupl +syn keyword snobol4Keyword endfile eq eval +syn keyword snobol4Keyword field +syn keyword snobol4Keyword ge gt ident +syn keyword snobol4Keyword input integer item +syn keyword snobol4Keyword le len lgt local lpad lt +syn keyword snobol4Keyword ne notany +syn keyword snobol4Keyword opsyn output +syn keyword snobol4Keyword pos prototype +syn keyword snobol4Keyword remdr replace rpad rpos rtab rewind +syn keyword snobol4Keyword size span stoptr +syn keyword snobol4Keyword tab table time trace trim terminal +syn keyword snobol4Keyword unload +syn keyword snobol4Keyword value + +" CSNOBOL keywords +syn keyword snobol4ExtKeyword breakx +syn keyword snobol4ExtKeyword char chop +syn keyword snobol4ExtKeyword date delete +syn keyword snobol4ExtKeyword exp +syn keyword snobol4ExtKeyword freeze function +syn keyword snobol4ExtKeyword host +syn keyword snobol4ExtKeyword io_findunit +syn keyword snobol4ExtKeyword label lpad leq lge lle llt lne log +syn keyword snobol4ExtKeyword ord +syn keyword snobol4ExtKeyword reverse rpad rsort rename +syn keyword snobol4ExtKeyword serv_listen sset set sort sqrt substr +syn keyword snobol4ExtKeyword thaw +syn keyword snobol4ExtKeyword vdiffer + +syn region snobol4String matchgroup=Quote start=+"+ end=+"+ +syn region snobol4String matchgroup=Quote start=+'+ end=+'+ +syn match snobol4BogusStatement "^-[^ ][^ ]*" +syn match snobol4Statement "^-\(include\|copy\|module\|line\|plusopts\|case\|error\|noerrors\|list\|unlist\|execute\|noexecute\|copy\)" +syn match snobol4Constant /"[^a-z"']\.[a-z][a-z0-9\-]*"/hs=s+1 +syn region snobol4Goto start=":[sf]\{0,1}(" end=")\|$\|;" contains=ALLBUT,snobol4ParenError +syn match snobol4Number "\<\d*\(\.\d\d*\)*\>" +syn match snobol4BogusSysVar "&\w\{1,}" +syn match snobol4SysVar "&\<\(abort\|alphabet\|anchor\|arb\|bal\|case\|code\|digits\|dump\|errlimit\|errtext\|errtype\|fail\|fence\|fnclevel\|ftrace\|fullscan\|input\|lastno\|lcase\|maxlngth\|output\|parm\|rem\|rtntype\|stcount\|stfcount\|stlimit\|stno\|succeed\|trace\|trim\|ucase\)\>" +syn match snobol4ExtSysVar "&\(gtrace\|line\|file\|lastline\|lastfile\)" +syn match snobol4Label "\(^\|;\)[^-\.\+ \t\*\.]\{1,}[^ \t\*\;]*" +syn match snobol4Comment "\(^\|;\)\([\*\|!;#].*$\)" + +" Parens matching +syn cluster snobol4ParenGroup contains=snobol4ParenError +syn region snobol4Paren transparent start='(' end=')' contains=ALLBUT,@snobol4ParenGroup,snobol4ErrInBracket +syn match snobol4ParenError display "[\])]" +syn match snobol4ErrInParen display contained "[\]{}]\|<%\|%>" +syn region snobol4Bracket transparent start='\[\|<:' end=']\|:>' contains=ALLBUT,@snobol4ParenGroup,snobol4ErrInParen +syn match snobol4ErrInBracket display contained "[){}]\|<%\|%>" + +" optional shell shebang line +" syn match snobol4Comment "^\#\!.*$" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link snobol4Constant Constant +hi def link snobol4Label Label +hi def link snobol4Goto Repeat +hi def link snobol4Conditional Conditional +hi def link snobol4Repeat Repeat +hi def link snobol4Number Number +hi def link snobol4Error Error +hi def link snobol4Statement PreProc +hi def link snobol4BogusStatement snobol4Error +hi def link snobol4String String +hi def link snobol4Comment Comment +hi def link snobol4Special Special +hi def link snobol4Todo Todo +hi def link snobol4Keyword Keyword +hi def link snobol4Function Function +hi def link snobol4MathsOperator Operator +hi def link snobol4ParenError snobol4Error +hi def link snobol4ErrInParen snobol4Error +hi def link snobol4ErrInBracket snobol4Error +hi def link snobol4SysVar Keyword +hi def link snobol4BogusSysVar snobol4Error +if exists("snobol4_strict_mode") + hi def link snobol4ExtSysVar WarningMsg + hi def link snobol4ExtKeyword WarningMsg +else + hi def link snobol4ExtSysVar snobol4SysVar + hi def link snobol4ExtKeyword snobol4Keyword +endif + + +let b:current_syntax = "snobol4" +" vim: ts=8 diff --git a/.config/vim/syntax/solidity.vim b/.config/vim/syntax/solidity.vim new file mode 100644 index 0000000..5391bba --- /dev/null +++ b/.config/vim/syntax/solidity.vim @@ -0,0 +1,183 @@ +" Vim syntax file +" Language: Solidity +" Maintainer: Cothi (jiungdev@gmail.com) +" Original Author: tomlion (https://github.com/tomlion/vim-solidity/blob/master/syntax/solidity.vim) +" Last Change: 2025 Mar 25 +" +" Contributors: +" Modified by thesis (https://github.com/thesis/vim-solidity/blob/main/indent/solidity.vim) +" Modified by S0AndS0 (https://github.com/S0AndS0/vim/blob/syntax-solidity-updates/runtime/syntax/solidity.vim) + +if exists("b:current_syntax") + finish +endif + +" keyword +syn keyword solKeyword abstract anonymous as break calldata case catch constant constructor continue default switch revert require +syn keyword solKeyword ecrecover addmod mulmod keccak256 +syn keyword solKeyword delete do else emit enum external final for function if immutable import in indexed inline +syn keyword solKeyword interface internal is let match memory modifier new of payable pragma private public pure override virtual transient +syn keyword solKeyword relocatable return returns static storage struct throw try type typeof using +syn keyword solKeyword var view while + +syn keyword solConstant true false wei szabo finney ether seconds minutes hours days weeks years now +syn keyword solConstant abi block blockhash msg tx this super selfdestruct + +syn keyword solBuiltinType mapping address bool +syn keyword solBuiltinType int int8 int16 int24 int32 int40 int48 int56 int64 int72 int80 int88 int96 int104 int112 int120 int128 int136 int144 int152 int160 int168 int178 int184 int192 int200 int208 int216 int224 int232 int240 int248 int256 +syn keyword solBuiltinType uint uint8 uint16 uint24 uint32 uint40 uint48 uint56 uint64 uint72 uint80 uint88 uint96 uint104 uint112 uint120 uint128 uint136 uint144 uint152 uint160 uint168 uint178 uint184 uint192 uint200 uint208 uint216 uint224 uint232 uint240 uint248 uint256 +syn keyword solBuiltinType fixed +syn keyword solBuiltinType fixed0x8 fixed0x16 fixed0x24 fixed0x32 fixed0x40 fixed0x48 fixed0x56 fixed0x64 fixed0x72 fixed0x80 fixed0x88 fixed0x96 fixed0x104 fixed0x112 fixed0x120 fixed0x128 fixed0x136 fixed0x144 fixed0x152 fixed0x160 fixed0x168 fixed0x178 fixed0x184 fixed0x192 fixed0x200 fixed0x208 fixed0x216 fixed0x224 fixed0x232 fixed0x240 fixed0x248 fixed0x256 +syn keyword solBuiltinType fixed8x8 fixed8x16 fixed8x24 fixed8x32 fixed8x40 fixed8x48 fixed8x56 fixed8x64 fixed8x72 fixed8x80 fixed8x88 fixed8x96 fixed8x104 fixed8x112 fixed8x120 fixed8x128 fixed8x136 fixed8x144 fixed8x152 fixed8x160 fixed8x168 fixed8x178 fixed8x184 fixed8x192 fixed8x200 fixed8x208 fixed8x216 fixed8x224 fixed8x232 fixed8x240 fixed8x248 +syn keyword solBuiltinType fixed16x8 fixed16x16 fixed16x24 fixed16x32 fixed16x40 fixed16x48 fixed16x56 fixed16x64 fixed16x72 fixed16x80 fixed16x88 fixed16x96 fixed16x104 fixed16x112 fixed16x120 fixed16x128 fixed16x136 fixed16x144 fixed16x152 fixed16x160 fixed16x168 fixed16x178 fixed16x184 fixed16x192 fixed16x200 fixed16x208 fixed16x216 fixed16x224 fixed16x232 fixed16x240 +syn keyword solBuiltinType fixed24x8 fixed24x16 fixed24x24 fixed24x32 fixed24x40 fixed24x48 fixed24x56 fixed24x64 fixed24x72 fixed24x80 fixed24x88 fixed24x96 fixed24x104 fixed24x112 fixed24x120 fixed24x128 fixed24x136 fixed24x144 fixed24x152 fixed24x160 fixed24x168 fixed24x178 fixed24x184 fixed24x192 fixed24x200 fixed24x208 fixed24x216 fixed24x224 fixed24x232 +syn keyword solBuiltinType fixed32x8 fixed32x16 fixed32x24 fixed32x32 fixed32x40 fixed32x48 fixed32x56 fixed32x64 fixed32x72 fixed32x80 fixed32x88 fixed32x96 fixed32x104 fixed32x112 fixed32x120 fixed32x128 fixed32x136 fixed32x144 fixed32x152 fixed32x160 fixed32x168 fixed32x178 fixed32x184 fixed32x192 fixed32x200 fixed32x208 fixed32x216 fixed32x224 +syn keyword solBuiltinType fixed40x8 fixed40x16 fixed40x24 fixed40x32 fixed40x40 fixed40x48 fixed40x56 fixed40x64 fixed40x72 fixed40x80 fixed40x88 fixed40x96 fixed40x104 fixed40x112 fixed40x120 fixed40x128 fixed40x136 fixed40x144 fixed40x152 fixed40x160 fixed40x168 fixed40x178 fixed40x184 fixed40x192 fixed40x200 fixed40x208 fixed40x216 +syn keyword solBuiltinType fixed48x8 fixed48x16 fixed48x24 fixed48x32 fixed48x40 fixed48x48 fixed48x56 fixed48x64 fixed48x72 fixed48x80 fixed48x88 fixed48x96 fixed48x104 fixed48x112 fixed48x120 fixed48x128 fixed48x136 fixed48x144 fixed48x152 fixed48x160 fixed48x168 fixed48x178 fixed48x184 fixed48x192 fixed48x200 fixed48x208 +syn keyword solBuiltinType fixed56x8 fixed56x16 fixed56x24 fixed56x32 fixed56x40 fixed56x48 fixed56x56 fixed56x64 fixed56x72 fixed56x80 fixed56x88 fixed56x96 fixed56x104 fixed56x112 fixed56x120 fixed56x128 fixed56x136 fixed56x144 fixed56x152 fixed56x160 fixed56x168 fixed56x178 fixed56x184 fixed56x192 fixed56x200 +syn keyword solBuiltinType fixed64x8 fixed64x16 fixed64x24 fixed64x32 fixed64x40 fixed64x48 fixed64x56 fixed64x64 fixed64x72 fixed64x80 fixed64x88 fixed64x96 fixed64x104 fixed64x112 fixed64x120 fixed64x128 fixed64x136 fixed64x144 fixed64x152 fixed64x160 fixed64x168 fixed64x178 fixed64x184 fixed64x192 +syn keyword solBuiltinType fixed72x8 fixed72x16 fixed72x24 fixed72x32 fixed72x40 fixed72x48 fixed72x56 fixed72x64 fixed72x72 fixed72x80 fixed72x88 fixed72x96 fixed72x104 fixed72x112 fixed72x120 fixed72x128 fixed72x136 fixed72x144 fixed72x152 fixed72x160 fixed72x168 fixed72x178 fixed72x184 +syn keyword solBuiltinType fixed80x8 fixed80x16 fixed80x24 fixed80x32 fixed80x40 fixed80x48 fixed80x56 fixed80x64 fixed80x72 fixed80x80 fixed80x88 fixed80x96 fixed80x104 fixed80x112 fixed80x120 fixed80x128 fixed80x136 fixed80x144 fixed80x152 fixed80x160 fixed80x168 fixed80x178 +syn keyword solBuiltinType fixed88x8 fixed88x16 fixed88x24 fixed88x32 fixed88x40 fixed88x48 fixed88x56 fixed88x64 fixed88x72 fixed88x80 fixed88x88 fixed88x96 fixed88x104 fixed88x112 fixed88x120 fixed88x128 fixed88x136 fixed88x144 fixed88x152 fixed88x160 fixed88x168 +syn keyword solBuiltinType fixed96x8 fixed96x16 fixed96x24 fixed96x32 fixed96x40 fixed96x48 fixed96x56 fixed96x64 fixed96x72 fixed96x80 fixed96x88 fixed96x96 fixed96x104 fixed96x112 fixed96x120 fixed96x128 fixed96x136 fixed96x144 fixed96x152 fixed96x160 +syn keyword solBuiltinType fixed104x8 fixed104x16 fixed104x24 fixed104x32 fixed104x40 fixed104x48 fixed104x56 fixed104x64 fixed104x72 fixed104x80 fixed104x88 fixed104x96 fixed104x104 fixed104x112 fixed104x120 fixed104x128 fixed104x136 fixed104x144 fixed104x152 +syn keyword solBuiltinType fixed112x8 fixed112x16 fixed112x24 fixed112x32 fixed112x40 fixed112x48 fixed112x56 fixed112x64 fixed112x72 fixed112x80 fixed112x88 fixed112x96 fixed112x104 fixed112x112 fixed112x120 fixed112x128 fixed112x136 fixed112x144 +syn keyword solBuiltinType fixed120x8 fixed120x16 fixed120x24 fixed120x32 fixed120x40 fixed120x48 fixed120x56 fixed120x64 fixed120x72 fixed120x80 fixed120x88 fixed120x96 fixed120x104 fixed120x112 fixed120x120 fixed120x128 fixed120x136 +syn keyword solBuiltinType fixed128x8 fixed128x16 fixed128x24 fixed128x32 fixed128x40 fixed128x48 fixed128x56 fixed128x64 fixed128x72 fixed128x80 fixed128x88 fixed128x96 fixed128x104 fixed128x112 fixed128x120 fixed128x128 +syn keyword solBuiltinType fixed136x8 fixed136x16 fixed136x24 fixed136x32 fixed136x40 fixed136x48 fixed136x56 fixed136x64 fixed136x72 fixed136x80 fixed136x88 fixed136x96 fixed136x104 fixed136x112 fixed136x120 +syn keyword solBuiltinType fixed144x8 fixed144x16 fixed144x24 fixed144x32 fixed144x40 fixed144x48 fixed144x56 fixed144x64 fixed144x72 fixed144x80 fixed144x88 fixed144x96 fixed144x104 fixed144x112 +syn keyword solBuiltinType fixed152x8 fixed152x16 fixed152x24 fixed152x32 fixed152x40 fixed152x48 fixed152x56 fixed152x64 fixed152x72 fixed152x80 fixed152x88 fixed152x96 fixed152x104 +syn keyword solBuiltinType fixed160x8 fixed160x16 fixed160x24 fixed160x32 fixed160x40 fixed160x48 fixed160x56 fixed160x64 fixed160x72 fixed160x80 fixed160x88 fixed160x96 +syn keyword solBuiltinType fixed168x8 fixed168x16 fixed168x24 fixed168x32 fixed168x40 fixed168x48 fixed168x56 fixed168x64 fixed168x72 fixed168x80 fixed168x88 +syn keyword solBuiltinType fixed176x8 fixed176x16 fixed176x24 fixed176x32 fixed176x40 fixed176x48 fixed176x56 fixed176x64 fixed176x72 fixed176x80 +syn keyword solBuiltinType fixed184x8 fixed184x16 fixed184x24 fixed184x32 fixed184x40 fixed184x48 fixed184x56 fixed184x64 fixed184x72 +syn keyword solBuiltinType fixed192x8 fixed192x16 fixed192x24 fixed192x32 fixed192x40 fixed192x48 fixed192x56 fixed192x64 +syn keyword solBuiltinType fixed200x8 fixed200x16 fixed200x24 fixed200x32 fixed200x40 fixed200x48 fixed200x56 +syn keyword solBuiltinType fixed208x8 fixed208x16 fixed208x24 fixed208x32 fixed208x40 fixed208x48 +syn keyword solBuiltinType fixed216x8 fixed216x16 fixed216x24 fixed216x32 fixed216x40 +syn keyword solBuiltinType fixed224x8 fixed224x16 fixed224x24 fixed224x32 +syn keyword solBuiltinType fixed232x8 fixed232x16 fixed232x24 +syn keyword solBuiltinType fixed240x8 fixed240x16 +syn keyword solBuiltinType fixed248x8 +syn keyword solBuiltinType ufixed +syn keyword solBuiltinType ufixed0x8 ufixed0x16 ufixed0x24 ufixed0x32 ufixed0x40 ufixed0x48 ufixed0x56 ufixed0x64 ufixed0x72 ufixed0x80 ufixed0x88 ufixed0x96 ufixed0x104 ufixed0x112 ufixed0x120 ufixed0x128 ufixed0x136 ufixed0x144 ufixed0x152 ufixed0x160 ufixed0x168 ufixed0x178 ufixed0x184 ufixed0x192 ufixed0x200 ufixed0x208 ufixed0x216 ufixed0x224 ufixed0x232 ufixed0x240 ufixed0x248 ufixed0x256 +syn keyword solBuiltinType ufixed8x8 ufixed8x16 ufixed8x24 ufixed8x32 ufixed8x40 ufixed8x48 ufixed8x56 ufixed8x64 ufixed8x72 ufixed8x80 ufixed8x88 ufixed8x96 ufixed8x104 ufixed8x112 ufixed8x120 ufixed8x128 ufixed8x136 ufixed8x144 ufixed8x152 ufixed8x160 ufixed8x168 ufixed8x178 ufixed8x184 ufixed8x192 ufixed8x200 ufixed8x208 ufixed8x216 ufixed8x224 ufixed8x232 ufixed8x240 ufixed8x248 +syn keyword solBuiltinType ufixed16x8 ufixed16x16 ufixed16x24 ufixed16x32 ufixed16x40 ufixed16x48 ufixed16x56 ufixed16x64 ufixed16x72 ufixed16x80 ufixed16x88 ufixed16x96 ufixed16x104 ufixed16x112 ufixed16x120 ufixed16x128 ufixed16x136 ufixed16x144 ufixed16x152 ufixed16x160 ufixed16x168 ufixed16x178 ufixed16x184 ufixed16x192 ufixed16x200 ufixed16x208 ufixed16x216 ufixed16x224 ufixed16x232 ufixed16x240 +syn keyword solBuiltinType ufixed24x8 ufixed24x16 ufixed24x24 ufixed24x32 ufixed24x40 ufixed24x48 ufixed24x56 ufixed24x64 ufixed24x72 ufixed24x80 ufixed24x88 ufixed24x96 ufixed24x104 ufixed24x112 ufixed24x120 ufixed24x128 ufixed24x136 ufixed24x144 ufixed24x152 ufixed24x160 ufixed24x168 ufixed24x178 ufixed24x184 ufixed24x192 ufixed24x200 ufixed24x208 ufixed24x216 ufixed24x224 ufixed24x232 +syn keyword solBuiltinType ufixed32x8 ufixed32x16 ufixed32x24 ufixed32x32 ufixed32x40 ufixed32x48 ufixed32x56 ufixed32x64 ufixed32x72 ufixed32x80 ufixed32x88 ufixed32x96 ufixed32x104 ufixed32x112 ufixed32x120 ufixed32x128 ufixed32x136 ufixed32x144 ufixed32x152 ufixed32x160 ufixed32x168 ufixed32x178 ufixed32x184 ufixed32x192 ufixed32x200 ufixed32x208 ufixed32x216 ufixed32x224 +syn keyword solBuiltinType ufixed40x8 ufixed40x16 ufixed40x24 ufixed40x32 ufixed40x40 ufixed40x48 ufixed40x56 ufixed40x64 ufixed40x72 ufixed40x80 ufixed40x88 ufixed40x96 ufixed40x104 ufixed40x112 ufixed40x120 ufixed40x128 ufixed40x136 ufixed40x144 ufixed40x152 ufixed40x160 ufixed40x168 ufixed40x178 ufixed40x184 ufixed40x192 ufixed40x200 ufixed40x208 ufixed40x216 +syn keyword solBuiltinType ufixed48x8 ufixed48x16 ufixed48x24 ufixed48x32 ufixed48x40 ufixed48x48 ufixed48x56 ufixed48x64 ufixed48x72 ufixed48x80 ufixed48x88 ufixed48x96 ufixed48x104 ufixed48x112 ufixed48x120 ufixed48x128 ufixed48x136 ufixed48x144 ufixed48x152 ufixed48x160 ufixed48x168 ufixed48x178 ufixed48x184 ufixed48x192 ufixed48x200 ufixed48x208 +syn keyword solBuiltinType ufixed56x8 ufixed56x16 ufixed56x24 ufixed56x32 ufixed56x40 ufixed56x48 ufixed56x56 ufixed56x64 ufixed56x72 ufixed56x80 ufixed56x88 ufixed56x96 ufixed56x104 ufixed56x112 ufixed56x120 ufixed56x128 ufixed56x136 ufixed56x144 ufixed56x152 ufixed56x160 ufixed56x168 ufixed56x178 ufixed56x184 ufixed56x192 ufixed56x200 +syn keyword solBuiltinType ufixed64x8 ufixed64x16 ufixed64x24 ufixed64x32 ufixed64x40 ufixed64x48 ufixed64x56 ufixed64x64 ufixed64x72 ufixed64x80 ufixed64x88 ufixed64x96 ufixed64x104 ufixed64x112 ufixed64x120 ufixed64x128 ufixed64x136 ufixed64x144 ufixed64x152 ufixed64x160 ufixed64x168 ufixed64x178 ufixed64x184 ufixed64x192 +syn keyword solBuiltinType ufixed72x8 ufixed72x16 ufixed72x24 ufixed72x32 ufixed72x40 ufixed72x48 ufixed72x56 ufixed72x64 ufixed72x72 ufixed72x80 ufixed72x88 ufixed72x96 ufixed72x104 ufixed72x112 ufixed72x120 ufixed72x128 ufixed72x136 ufixed72x144 ufixed72x152 ufixed72x160 ufixed72x168 ufixed72x178 ufixed72x184 +syn keyword solBuiltinType ufixed80x8 ufixed80x16 ufixed80x24 ufixed80x32 ufixed80x40 ufixed80x48 ufixed80x56 ufixed80x64 ufixed80x72 ufixed80x80 ufixed80x88 ufixed80x96 ufixed80x104 ufixed80x112 ufixed80x120 ufixed80x128 ufixed80x136 ufixed80x144 ufixed80x152 ufixed80x160 ufixed80x168 ufixed80x178 +syn keyword solBuiltinType ufixed88x8 ufixed88x16 ufixed88x24 ufixed88x32 ufixed88x40 ufixed88x48 ufixed88x56 ufixed88x64 ufixed88x72 ufixed88x80 ufixed88x88 ufixed88x96 ufixed88x104 ufixed88x112 ufixed88x120 ufixed88x128 ufixed88x136 ufixed88x144 ufixed88x152 ufixed88x160 ufixed88x168 +syn keyword solBuiltinType ufixed96x8 ufixed96x16 ufixed96x24 ufixed96x32 ufixed96x40 ufixed96x48 ufixed96x56 ufixed96x64 ufixed96x72 ufixed96x80 ufixed96x88 ufixed96x96 ufixed96x104 ufixed96x112 ufixed96x120 ufixed96x128 ufixed96x136 ufixed96x144 ufixed96x152 ufixed96x160 +syn keyword solBuiltinType ufixed104x8 ufixed104x16 ufixed104x24 ufixed104x32 ufixed104x40 ufixed104x48 ufixed104x56 ufixed104x64 ufixed104x72 ufixed104x80 ufixed104x88 ufixed104x96 ufixed104x104 ufixed104x112 ufixed104x120 ufixed104x128 ufixed104x136 ufixed104x144 ufixed104x152 +syn keyword solBuiltinType ufixed112x8 ufixed112x16 ufixed112x24 ufixed112x32 ufixed112x40 ufixed112x48 ufixed112x56 ufixed112x64 ufixed112x72 ufixed112x80 ufixed112x88 ufixed112x96 ufixed112x104 ufixed112x112 ufixed112x120 ufixed112x128 ufixed112x136 ufixed112x144 +syn keyword solBuiltinType ufixed120x8 ufixed120x16 ufixed120x24 ufixed120x32 ufixed120x40 ufixed120x48 ufixed120x56 ufixed120x64 ufixed120x72 ufixed120x80 ufixed120x88 ufixed120x96 ufixed120x104 ufixed120x112 ufixed120x120 ufixed120x128 ufixed120x136 +syn keyword solBuiltinType ufixed128x8 ufixed128x16 ufixed128x24 ufixed128x32 ufixed128x40 ufixed128x48 ufixed128x56 ufixed128x64 ufixed128x72 ufixed128x80 ufixed128x88 ufixed128x96 ufixed128x104 ufixed128x112 ufixed128x120 ufixed128x128 +syn keyword solBuiltinType ufixed136x8 ufixed136x16 ufixed136x24 ufixed136x32 ufixed136x40 ufixed136x48 ufixed136x56 ufixed136x64 ufixed136x72 ufixed136x80 ufixed136x88 ufixed136x96 ufixed136x104 ufixed136x112 ufixed136x120 +syn keyword solBuiltinType ufixed144x8 ufixed144x16 ufixed144x24 ufixed144x32 ufixed144x40 ufixed144x48 ufixed144x56 ufixed144x64 ufixed144x72 ufixed144x80 ufixed144x88 ufixed144x96 ufixed144x104 ufixed144x112 +syn keyword solBuiltinType ufixed152x8 ufixed152x16 ufixed152x24 ufixed152x32 ufixed152x40 ufixed152x48 ufixed152x56 ufixed152x64 ufixed152x72 ufixed152x80 ufixed152x88 ufixed152x96 ufixed152x104 +syn keyword solBuiltinType ufixed160x8 ufixed160x16 ufixed160x24 ufixed160x32 ufixed160x40 ufixed160x48 ufixed160x56 ufixed160x64 ufixed160x72 ufixed160x80 ufixed160x88 ufixed160x96 +syn keyword solBuiltinType ufixed168x8 ufixed168x16 ufixed168x24 ufixed168x32 ufixed168x40 ufixed168x48 ufixed168x56 ufixed168x64 ufixed168x72 ufixed168x80 ufixed168x88 +syn keyword solBuiltinType ufixed176x8 ufixed176x16 ufixed176x24 ufixed176x32 ufixed176x40 ufixed176x48 ufixed176x56 ufixed176x64 ufixed176x72 ufixed176x80 +syn keyword solBuiltinType ufixed184x8 ufixed184x16 ufixed184x24 ufixed184x32 ufixed184x40 ufixed184x48 ufixed184x56 ufixed184x64 ufixed184x72 +syn keyword solBuiltinType ufixed192x8 ufixed192x16 ufixed192x24 ufixed192x32 ufixed192x40 ufixed192x48 ufixed192x56 ufixed192x64 +syn keyword solBuiltinType ufixed200x8 ufixed200x16 ufixed200x24 ufixed200x32 ufixed200x40 ufixed200x48 ufixed200x56 +syn keyword solBuiltinType ufixed208x8 ufixed208x16 ufixed208x24 ufixed208x32 ufixed208x40 ufixed208x48 +syn keyword solBuiltinType ufixed216x8 ufixed216x16 ufixed216x24 ufixed216x32 ufixed216x40 +syn keyword solBuiltinType ufixed224x8 ufixed224x16 ufixed224x24 ufixed224x32 +syn keyword solBuiltinType ufixed232x8 ufixed232x16 ufixed232x24 +syn keyword solBuiltinType ufixed240x8 ufixed240x16 +syn keyword solBuiltinType ufixed248x8 +syn keyword solBuiltinType string string1 string2 string3 string4 string5 string6 string7 string8 string9 string10 string11 string12 string13 string14 string15 string16 string17 string18 string19 string20 string21 string22 string23 string24 string25 string26 string27 string28 string29 string30 string31 string32 +syn keyword solBuiltinType byte bytes bytes1 bytes2 bytes3 bytes4 bytes5 bytes6 bytes7 bytes8 bytes9 bytes10 bytes11 bytes12 bytes13 bytes14 bytes15 bytes16 bytes17 bytes18 bytes19 bytes20 bytes21 bytes22 bytes23 bytes24 bytes25 bytes26 bytes27 bytes28 bytes29 bytes30 bytes31 bytes32 + +hi def link solKeyword Keyword +hi def link solConstant Constant +hi def link solBuiltinType Type +hi def link solBuiltinFunction Keyword + +syn match solOperator /\(!\||\|&\|+\|-\|<\|>\|=\|%\|\/\|*\|\~\|\^\)/ +syn match solNumber /\<-\=\d\+L\=\>\|\<0[xX]\x\+\>/ +syn match solFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ + +syn region solString start=+"+ skip=+\\\\\|\\$"\|\\"+ end=+"+ +syn region solString start=+'+ skip=+\\\\\|\\$'\|\\'+ end=+'+ + +hi def link solOperator Operator +hi def link solNumber Number +hi def link solFloat Float +hi def link solString String + +" Function +syn match solFunction /\/ nextgroup=solFuncName,solFuncArgs skipwhite +syn match solFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=solFuncArgs skipwhite + +syn region solFuncArgs contained matchgroup=solFuncParens start='(' end=')' contains=solFuncArgCommas,solBuiltinType nextgroup=solModifierName,solFuncReturns,solFuncBody keepend skipwhite skipempty +syn match solModifierName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=solModifierArgs,solModifierName skipwhite +syn region solModifierArgs contained matchgroup=solFuncParens start='(' end=')' contains=solFuncArgCommas nextgroup=solModifierName,solFuncReturns,solFuncBody skipwhite +syn region solFuncReturns contained matchgroup=solFuncParens nextgroup=solFuncBody start='(' end=')' contains=solFuncArgCommas,solBuiltinType skipwhite + +syn match solFuncArgCommas contained ',' +syn region solFuncBody start="{" end="}" fold transparent + +hi def link solFunction Type +hi def link solFuncName Function +hi def link solModifierName Function + +" Yul blocks +syn match yul /\/ skipwhite skipempty nextgroup=yulBody +syn region yulBody contained start='{' end='}' fold contains=yulAssemblyOp,solNumber,yulVarDeclaration,solLineComment,solComment skipwhite skipempty +syn keyword yulAssemblyOp contained stop add sub mul div sdiv mod smod exp not lt gt slt sgt eq iszero and or xor byte shl shr sar addmod mulmod signextend keccak256 pc pop mload mstore mstore8 sload sstore msize gas address balance selfbalance caller callvalue calldataload calldatasize calldatacopy codesize codecopy extcodesize extcodecopy returndatasize returndatacopy extcodehash create create2 call callcode delegatecall staticcall return revert selfdestruct invalid log0 log1 log2 log3 log4 chainid basefee origin gasprice blockhash coinbase timestamp number difficulty gaslimit +syn keyword yulVarDeclaration contained let + +hi def link yul Keyword +hi def link yulVarDeclaration Keyword +hi def link yulAssemblyOp Keyword + +" Contract +syn match solContract /\<\%(contract\|library\|interface\)\>/ nextgroup=solContractName skipwhite +syn match solContractName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=solContractParent skipwhite +syn region solContractParent contained start='is' end='{' contains=solContractName,solContractNoise,solContractCommas skipwhite skipempty +syn match solContractNoise contained 'is' containedin=solContractParent +syn match solContractCommas contained ',' + +hi def link solContract Type +hi def link solContractName Function + +" Event +syn match solEvent /\/ nextgroup=solEventName,solEventArgs skipwhite +syn match solEventName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=solEventArgs skipwhite +syn region solEventArgs contained matchgroup=solFuncParens start='(' end=')' contains=solEventArgCommas,solBuiltinType,solEventArgSpecial skipwhite skipempty +syn match solEventArgCommas contained ',' +syn match solEventArgSpecial contained 'indexed' + +hi def link solEvent Type +hi def link solEventName Function +hi def link solEventArgSpecial Label + +" Error +syn match solError /\/ nextgroup=solErrorName,solErrorArgs skipwhite +syn match solErrorName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=solErrorArgs skipwhite +syn region solErrorArgs contained matchgroup=solFuncParens start='(' end=')' contains=solErrorArgCommas,solBuiltinType skipwhite skipempty +syn match solErrorArgCommas contained ',' + +hi def link solError Type +hi def link solErrorName Function + +" Comment +syn keyword solCommentTodo TODO FIXME XXX TBD contained +syn match solNatSpec contained /@title\|@author\|@notice\|@dev\|@param\|@inheritdoc\|@return/ +syn region solLineComment start=+\/\/+ end=+$+ contains=solCommentTodo,solNatSpec,@Spell +syn region solLineComment start=+^\s*\/\/+ skip=+\n\s*\/\/+ end=+$+ contains=solCommentTodo,solNatSpec,@Spell fold +syn region solComment start="/\*" end="\*/" contains=solCommentTodo,solNatSpec,@Spell fold + +hi def link solCommentTodo Todo +hi def link solNatSpec Label +hi def link solLineComment Comment +hi def link solComment Comment + +let b:current_syntax = "solidity" diff --git a/.config/vim/syntax/spajson.vim b/.config/vim/syntax/spajson.vim new file mode 100644 index 0000000..78ade5f --- /dev/null +++ b/.config/vim/syntax/spajson.vim @@ -0,0 +1,50 @@ +" Vim syntax file +" Language: SPA JSON +" Maintainer: David Mandelberg +" Last Change: 2025 Mar 22 +" +" Based on parser code: +" https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/spa/include/spa/utils/json-core.h + +if exists("b:current_syntax") + finish +endif +let b:current_syntax = "spajson" + +syn sync minlines=500 + +" Treat the __BARE parser state as a keyword, to make it easier to match +" keywords and numbers only when they're not part of a larger __BARE section. +" E.g., v4l2 and pipewire-0 probably shouldn't highlight anything as +" spajsonInt. +syn iskeyword 32-126,^ ,^",^#,^:,^,,^=,^],^},^\ + +syn match spajsonEscape "\\["\\/bfnrt]" contained +syn match spajsonEscape "\\u[0-9A-Fa-f]\{4}" contained + +syn match spajsonError "." +syn match spajsonBare "\k\+" +syn match spajsonComment "#.*$" contains=@Spell +syn region spajsonString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=spajsonEscape +syn match spajsonKeyDelimiter "[:=]" +syn region spajsonArray matchgroup=spajsonBracket start="\[" end="]" contains=ALLBUT,spajsonKeyDelimiter fold +syn region spajsonObject matchgroup=spajsonBrace start="{" end="}" contains=ALL fold +syn match spajsonFloat "\<[+-]\?[0-9]\+\(\.[0-9]*\)\?\([Ee][+-]\?[0-9]\+\)\?\>" +syn match spajsonFloat "\<[+-]\?\.[0-9]\+\([Ee][+-]\?[0-9]\+\)\?\>" +syn match spajsonInt "\<[+-]\?0[Xx][0-9A-Fa-f]\+\>" +syn match spajsonInt "\<[+-]\?[1-9][0-9]*\>" +syn match spajsonInt "\<[+-]\?0[0-7]*\>" +syn keyword spajsonBoolean true false +syn keyword spajsonNull null +syn match spajsonWhitespace "[\x00\t \r\n,]" + +hi def link spajsonBoolean Boolean +hi def link spajsonBrace Delimiter +hi def link spajsonBracket Delimiter +hi def link spajsonComment Comment +hi def link spajsonError Error +hi def link spajsonEscape SpecialChar +hi def link spajsonFloat Float +hi def link spajsonInt Number +hi def link spajsonNull Constant +hi def link spajsonString String diff --git a/.config/vim/syntax/spec.vim b/.config/vim/syntax/spec.vim new file mode 100644 index 0000000..bbd6d39 --- /dev/null +++ b/.config/vim/syntax/spec.vim @@ -0,0 +1,229 @@ +" Filename: spec.vim +" Purpose: Vim syntax file +" Language: SPEC: Build/install scripts for Linux RPM packages +" Maintainer: Igor Gnatenko i.gnatenko.brain@gmail.com +" Former Maintainer: Donovan Rebbechi elflord@panix.com (until March 2014) +" Last Change: 2020 May 25 +" 2024 Sep 10 by Vim Project: add file triggers support, #15569 +" 2025 May 05 by Vim Project: update for rpm 4.2 #17258 +" 2025 Nov 09 by Vim Project: support for more distributions and tags #18703 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn sync minlines=1000 + +syn match specSpecialChar contained '[][!$()\\|>^;:{}]' +syn match specColon contained ':' +syn match specPercent contained '%' + +syn match specVariables contained '\$\h\w*' contains=specSpecialVariablesNames,specSpecialChar +syn match specVariables contained '\${\w*}' contains=specSpecialVariablesNames,specSpecialChar + +syn match specMacroIdentifier contained '%\h\w*' contains=specMacroNameLocal,specMacroNameOther,specPercent +syn match specMacroIdentifier contained '%{?\?\w*}' contains=specMacroNameLocal,specMacroNameOther,specPercent,specSpecialChar + +syn match specSpecialVariables contained '\$[0-9]\|\${[0-9]}' +syn match specCommandOpts contained '\s\(-\w\+\|--\w[a-zA-Z_-]\+\)'ms=s+1 +syn match specComment '^\s*#.*$' + + +syn case match + + +"matches with no highlight +syn match specNoNumberHilite 'X11\|X11R6\|[a-zA-Z]*\.\d\|[a-zA-Z][-/]\d' +syn match specManpageFile '[a-zA-Z]\.1' + +"Day, Month and most used license acronyms +syn keyword specLicense contained GPL LGPL BSD MIT GNU +syn keyword specWeekday contained Mon Tue Wed Thu Fri Sat Sun +syn keyword specMonth contained Jan Feb Mar Apr Jun Jul Aug Sep Oct Nov Dec +syn keyword specMonth contained January February March April May June July August September October November December + +"#, @, www +syn match specNumber '\(^-\=\|[ \t]-\=\|-\)[0-9.-]*[0-9]' +syn match specEmail contained "<\=\<[A-Za-z0-9_.-]\+@\([A-Za-z0-9_-]\+\.\)\+[A-Za-z]\+\>>\=" +syn match specURL contained '\<\(\(https\{0,1}\|ftp\)://\|\(www[23]\{0,1}\.\|ftp\.\)\)[A-Za-z0-9._/~:,#-]\+\>' +syn match specURLMacro contained '\<\(\(https\{0,1}\|ftp\)://\|\(www[23]\{0,1}\.\|ftp\.\)\)[A-Za-z0-9._/~:,#%{}-]\+\>' contains=specMacroIdentifier + +"TODO take specSpecialVariables out of the cluster for the sh* contains (ALLBUT) +"Special system directories +syn match specListedFilesPrefix contained '/\(usr\|local\|opt\|X11R6\|X11\)/'me=e-1 +syn match specListedFilesBin contained '/s\=bin/'me=e-1 +syn match specListedFilesLib contained '/\(lib\|include\)/'me=e-1 +syn match specListedFilesDoc contained '/\(man\d*\|doc\|info\)\>' +syn match specListedFilesEtc contained '/etc/'me=e-1 +syn match specListedFilesShare contained '/share/'me=e-1 +syn cluster specListedFiles contains=specListedFilesBin,specListedFilesLib,specListedFilesDoc,specListedFilesEtc,specListedFilesShare,specListedFilesPrefix,specVariables,specSpecialChar + +"specCommands +syn match specConfigure contained '\./configure' +syn match specTarCommand contained '\' + +"valid _macro names from /usr/lib/rpm/macros +syn keyword specMacroNameLocal contained _arch _binary_payload _bindir _build _build_alias _build_cpu _build_os _build_vendor _builddir _buildshell _buildsubdir _bzip2bin _datadir _dbpath _dbpath_rebuild _defaultdocdir _defaultlicensedir _docdir _excludedocs _exec_prefix _fixgroup _fixowner _fixperms _ftpport _ftpproxy _gpg_path _group_path _gzipbin _host _host_alias _host_cpu _host_os _host_vendor _httpport _httpproxy _iconsdir _includedir _infodir _install_langs _install_script_path _instchangelog _keyring _keyringpath _langpatt _lib _libdir _libexecdir _localstatedir _mandir _netsharedpath _oldincludedir _os _passwd_path _pgp_path _pgpbin _preScriptEnvironment _prefix _provides _rpmconfigdir _rpmdir _rpmfilename _rpmformat _rpmluadir _rpmmacrodir _sbindir _sharedstatedir _signature _source_payload _sourcedir _specdir _srcrpmdir _sysconfdir _sysusersdir _target _target_alias _target_cpu _target_os _target_platform _target_vendor _timecheck _tmppath _topdir _unitdir _usr _usrsrc _var _vendor + + +"------------------------------------------------------------------------------ +" here's is all the spec sections definitions: PreAmble, Description, Package, +" Scripts, Files and Changelog + +"One line macros - valid in all ScriptAreas +"tip: remember do include new items on specScriptArea's skip section +syn region specSectionMacroArea oneline matchgroup=specSectionMacro start='^%\(define\|global\|patch\d*\|setup\|autosetup\|autopatch\|configure\|GNUconfigure\|find_lang\|make_build\|makeinstall\|make_install\|include\)\>' end='$' contains=specCommandOpts,specMacroIdentifier +syn region specSectionMacroBracketArea oneline matchgroup=specSectionMacro start='^%{\(configure\|GNUconfigure\|find_lang\|make_build\|makeinstall\|make_install\)}' end='$' contains=specCommandOpts,specMacroIdentifier + +"%% Files Section %% +"TODO %config valid parameters: missingok\|noreplace +"TODO %verify valid parameters: \(not\)\= \(md5\|atime\|...\) +syn region specFilesArea matchgroup=specSection start='^%[Ff][Ii][Ll][Ee][Ss]\>' skip='%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|license\|verify\|ghost\|exclude\)\>' end='^%[a-zA-Z]'me=e-2 contains=specFilesOpts,specFilesDirective,@specListedFiles,specComment,specCommandSpecial,specMacroIdentifier +"tip: remember to include new items in specFilesArea above +syn match specFilesDirective contained '%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|license\|verify\|ghost\|exclude\)\>' + +"valid options for certain section headers +syn match specDescriptionOpts contained '\s-[ln]\s*\a'ms=s+1,me=e-1 +syn match specPackageOpts contained '\s-n\s*\w'ms=s+1,me=e-1 +syn match specFilesOpts contained '\s-f\s*\w'ms=s+1,me=e-1 + + +syn case ignore + + +"%% PreAmble Section %% +"Copyright and Serial were deprecated by License and Epoch +syn region specPreAmbleDeprecated oneline matchgroup=specError start='^\(Copyright\|Serial\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier +syn region specPreAmble oneline matchgroup=specCommand start='^\(Prereq\|Summary\|Name\|Version\|Packager\|Requires\|Recommends\|Suggests\|Supplements\|Enhances\|Icon\|URL\|SourceLicense\|Source\d*\|Patch\d*\|Prefix\|Packager\|Group\|License\|Release\|BuildRoot\|Distribution\|DistTag\|Vendor\|Provides\|ExclusiveArch\|ExcludeArch\|ExclusiveOS\|Obsoletes\|BuildArch\|BuildArchitectures\|BuildRequires\|BuildConflicts\|BuildPreReq\|Conflicts\|AutoRequires\|AutoReq\|AutoReqProv\|AutoProv\|Epoch\|ModularityLabel\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier + +"%% Description Section %% +syn region specDescriptionArea matchgroup=specSection start='^%description' end='^%'me=e-1 contains=specDescriptionOpts,specEmail,specURL,specNumber,specMacroIdentifier,specComment + +"%% Package Section %% +syn region specPackageArea matchgroup=specSection start='^%package' end='^%'me=e-1 contains=specPackageOpts,specPreAmble,specComment + +"%% Scripts Section %% +syn region specScriptArea matchgroup=specSection start='^%\(prep\|generate_buildrequires\|conf\|build\|install\|clean\|check\|pre\|postun\|preun\|post\|posttrans\|filetriggerin\|filetriggerun\|filetriggerpostun\|transfiletriggerin\|transfiletriggerun\|transfiletriggerpostun\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|autosetup\|autopatch\|find_lang\|make_build\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2 + +"%% Changelog Section %% +syn region specChangelogArea matchgroup=specSection start='^%changelog' end='^%'me=e-1 contains=specEmail,specURL,specWeekday,specMonth,specNumber,specComment,specLicense + + + +"------------------------------------------------------------------------------ +"here's the shell syntax for all the Script Sections + + +syn case match + + +"sh-like comment stile, only valid in script part +syn match shComment contained '#.*$' + +syn region dnlComment matchgroup=specComment start=+%dnl+ end=+$+ + +syn region shQuote1 contained matchgroup=shQuoteDelim start=+'+ skip=+\\'+ end=+'+ contains=specMacroIdentifier +syn region shQuote2 contained matchgroup=shQuoteDelim start=+"+ skip=+\\"+ end=+"+ contains=specVariables,specMacroIdentifier + +syn match shOperator contained '[><|!&;]\|[!=]=' +syn region shDo transparent matchgroup=specBlock start="\" end="\" contains=ALLBUT,shFunction,shDoError,shCase,specPreAmble,@specListedFiles + +syn region specIf matchgroup=specBlock start="%ifosf\|%ifos\|%ifnos\|%ifarch\|%ifnarch\|%else" end='%endif' contains=ALLBUT, specIfError, shCase + +syn region shIf transparent matchgroup=specBlock start="\" end="\" contains=ALLBUT,shFunction,shIfError,shCase,@specListedFiles + +syn region shFor matchgroup=specBlock start="\" end="\" contains=ALLBUT,shFunction,shInError,shCase,@specListedFiles + +syn region shCaseEsac transparent matchgroup=specBlock start="\" matchgroup=NONE end="\"me=s-1 contains=ALLBUT,shFunction,shCaseError,@specListedFiles nextgroup=shCaseEsac +syn region shCaseEsac matchgroup=specBlock start="\" end="\" contains=ALLBUT,shFunction,shCaseError,@specListedFilesBin +syn region shCase matchgroup=specBlock contained start=")" end=";;" contains=ALLBUT,shFunction,shCaseError,shCase,@specListedFiles + +syn sync match shDoSync grouphere shDo "\" +syn sync match shDoSync groupthere shDo "\" +syn sync match shIfSync grouphere shIf "\" +syn sync match shIfSync groupthere shIf "\" +syn sync match specIfSync grouphere specIf "%ifarch\|%ifos\|%ifnos" +syn sync match specIfSync groupthere specIf "%endIf" +syn sync match shForSync grouphere shFor "\" +syn sync match shForSync groupthere shFor "\" +syn sync match shCaseEsacSync grouphere shCaseEsac "\" +syn sync match shCaseEsacSync groupthere shCaseEsac "\" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +"main types color definitions +hi def link specSection Structure +hi def link specSectionMacro Macro +hi def link specWWWlink PreProc +hi def link specOpts Operator + +"yes, it's ugly, but white is sooo cool +if &background == "dark" +hi def specGlobalMacro ctermfg=white +else +hi def link specGlobalMacro Identifier +endif + +"sh colors +hi def link shComment Comment +hi def link dnlComment Comment +hi def link shIf Statement +hi def link shOperator Special +hi def link shQuote1 String +hi def link shQuote2 String +hi def link shQuoteDelim Statement + +"spec colors +hi def link specBlock Function +hi def link specColon Special +hi def link specCommand Statement +hi def link specCommandOpts specOpts +hi def link specCommandSpecial Special +hi def link specComment Comment +hi def link specConfigure specCommand +hi def link specDate String +hi def link specDescriptionOpts specOpts +hi def link specEmail specWWWlink +hi def link specError Error +hi def link specFilesDirective specSectionMacro +hi def link specFilesOpts specOpts +hi def link specLicense String +hi def link specMacroNameLocal specGlobalMacro +hi def link specMacroNameOther specGlobalMacro +hi def link specManpageFile NONE +hi def link specMonth specDate +hi def link specNoNumberHilite NONE +hi def link specNumber Number +hi def link specPackageOpts specOpts +hi def link specPercent Special +hi def link specSpecialChar Special +hi def link specSpecialVariables specGlobalMacro +hi def link specSpecialVariablesNames specGlobalMacro +hi def link specTarCommand specCommand +hi def link specURL specWWWlink +hi def link specURLMacro specWWWlink +hi def link specVariables Identifier +hi def link specWeekday specDate +hi def link specListedFilesBin Statement +hi def link specListedFilesDoc Statement +hi def link specListedFilesEtc Statement +hi def link specListedFilesLib Statement +hi def link specListedFilesPrefix Statement +hi def link specListedFilesShare Statement + + +let b:current_syntax = "spec" + +" vim: ts=8 diff --git a/.config/vim/syntax/specman.vim b/.config/vim/syntax/specman.vim new file mode 100644 index 0000000..79c94b7 --- /dev/null +++ b/.config/vim/syntax/specman.vim @@ -0,0 +1,169 @@ +" Vim syntax file +" Language: SPECMAN E-LANGUAGE +" Maintainer: Or Freund +" Last Update: Wed Oct 24 2001 + +"--------------------------------------------------------- +"| If anyone found an error or fix the parenthesis part | +"| I will be happy to hear about it | +"| Thanks Or. | +"--------------------------------------------------------- + +" Remove any old syntax stuff hanging around +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn keyword specmanTodo contained TODO todo ToDo FIXME XXX + +syn keyword specmanStatement var instance on compute start event expect check that routine +syn keyword specmanStatement specman is also first only with like +syn keyword specmanStatement list of all radix hex dec bin ignore illegal +syn keyword specmanStatement traceable untraceable +syn keyword specmanStatement cover using count_only trace_only at_least transition item ranges +syn keyword specmanStatement cross text call task within + +syn keyword specmanMethod initialize non_terminal testgroup delayed exit finish +syn keyword specmanMethod out append print outf appendf +syn keyword specmanMethod post_generate pre_generate setup_test finalize_test extract_test +syn keyword specmanMethod init run copy as_a set_config dut_error add clear lock quit +syn keyword specmanMethod lock unlock release swap quit to_string value stop_run +syn keyword specmanMethod crc_8 crc_32 crc_32_flip get_config add0 all_indices and_all +syn keyword specmanMethod apply average count delete exists first_index get_indices +syn keyword specmanMethod has insert is_a_permutation is_empty key key_exists key_index +syn keyword specmanMethod last last_index max max_index max_value min min_index +syn keyword specmanMethod min_value or_all pop pop0 push push0 product resize reverse +syn keyword specmanMethod sort split sum top top0 unique clear is_all_iterations +syn keyword specmanMethod get_enclosing_unit hdl_path exec deep_compare deep_compare_physical +syn keyword specmanMethod pack unpack warning error fatal +syn match specmanMethod "size()" +syn keyword specmanPacking packing low high +syn keyword specmanType locker address +syn keyword specmanType body code vec chars +syn keyword specmanType integer real bool int long uint byte bits bit time string +syn keyword specmanType byte_array external_pointer +syn keyword specmanBoolean TRUE FALSE +syn keyword specmanPreCondit #ifdef #ifndef #else + +syn keyword specmanConditional choose matches +syn keyword specmanConditional if then else when try + + + +syn keyword specmanLabel case casex casez default + +syn keyword specmanLogical and or not xor + +syn keyword specmanRepeat until repeat while for from to step each do break continue +syn keyword specmanRepeat before next sequence always -kind network +syn keyword specmanRepeat index it me in new return result select + +syn keyword specmanTemporal cycle sample events forever +syn keyword specmanTemporal wait change negedge rise fall delay sync sim true detach eventually emit + +syn keyword specmanConstant MAX_INT MIN_INT NULL UNDEF + +syn keyword specmanDefine define as computed type extend +syn keyword specmanDefine verilog vhdl variable global sys +syn keyword specmanStructure struct unit +syn keyword specmanInclude import +syn keyword specmanConstraint gen keep keeping soft before + +syn keyword specmanSpecial untyped symtab ECHO DOECHO +syn keyword specmanFile files load module ntv source_ref script read write +syn keyword specmanFSM initial idle others posedge clock cycles + + +syn match specmanOperator "[&|~>"hs=s+2 end="^<'"he=e-2 + +syn match specmanHDL "'[`.a-zA-Z0-9_@\[\]]\+\>'" + + +syn match specmanCompare "==" +syn match specmanCompare "!===" +syn match specmanCompare "===" +syn match specmanCompare "!=" +syn match specmanCompare ">=" +syn match specmanCompare "<=" +syn match specmanNumber "[0-9]:[0-9]" +syn match specmanNumber "\(\<\d\+\|\)'[bB]\s*[0-1_xXzZ?]\+\>" +syn match specmanNumber "0[bB]\s*[0-1_xXzZ?]\+\>" +syn match specmanNumber "\(\<\d\+\|\)'[oO]\s*[0-7_xXzZ?]\+\>" +syn match specmanNumber "0[oO]\s*[0-9a-fA-F_xXzZ?]\+\>" +syn match specmanNumber "\(\<\d\+\|\)'[dD]\s*[0-9_xXzZ?]\+\>" +syn match specmanNumber "\(\<\d\+\|\)'[hH]\s*[0-9a-fA-F_xXzZ?]\+\>" +syn match specmanNumber "0[xX]\s*[0-9a-fA-F_xXzZ?]\+\>" +syn match specmanNumber "\<[+-]\=[0-9_]\+\(\.[0-9_]*\|\)\(e[0-9_]*\|\)\>" + +syn region specmanString start=+"+ end=+"+ + + + +"********************************************************************** +" I took this section from c.vim but I didnt succeded to make it work +" ANY one who dare jumping to this deep watter is more than welocome! +"********************************************************************** +""catch errors caused by wrong parenthesis and brackets + +"syn cluster specmanParenGroup contains=specmanParenError +"" ,specmanNumbera,specmanComment +"if exists("specman_no_bracket_error") +"syn region specmanParen transparent start='(' end=')' contains=ALLBUT,@specmanParenGroup +"syn match specmanParenError ")" +"syn match specmanErrInParen contained "[{}]" +"else +"syn region specmanParen transparent start='(' end=')' contains=ALLBUT,@specmanParenGroup,specmanErrInBracket +"syn match specmanParenError "[\])]" +"syn match specmanErrInParen contained "[\]{}]" +"syn region specmanBracket transparent start='\[' end=']' contains=ALLBUT,@specmanParenGroup,specmanErrInParen +"syn match specmanErrInBracket contained "[);{}]" +"endif +" + +"Modify the following as needed. The trade-off is performance versus +"functionality. + +syn sync lines=50 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +" The default methods for highlighting. Can be overridden later +hi def link specmanConditional Conditional +hi def link specmanConstraint Conditional +hi def link specmanRepeat Repeat +hi def link specmanString String +hi def link specmanComment Comment +hi def link specmanConstant Macro +hi def link specmanNumber Number +hi def link specmanCompare Operator +hi def link specmanOperator Operator +hi def link specmanLogical Operator +hi def link specmanStatement Statement +hi def link specmanHDL SpecialChar +hi def link specmanMethod Function +hi def link specmanInclude Include +hi def link specmanStructure Structure +hi def link specmanBoolean Boolean +hi def link specmanFSM Label +hi def link specmanSpecial Special +hi def link specmanType Type +hi def link specmanTemporal Type +hi def link specmanFile Include +hi def link specmanPreCondit Include +hi def link specmanDefine Typedef +hi def link specmanLabel Label +hi def link specmanPacking keyword +hi def link specmanTodo Todo +hi def link specmanParenError Error +hi def link specmanErrInParen Error +hi def link specmanErrInBracket Error + +let b:current_syntax = "specman" diff --git a/.config/vim/syntax/spice.vim b/.config/vim/syntax/spice.vim new file mode 100644 index 0000000..306039b --- /dev/null +++ b/.config/vim/syntax/spice.vim @@ -0,0 +1,75 @@ +" Vim syntax file +" Language: Spice circuit simulator input netlist +" Maintainer: Noam Halevy +" Last Change: 2012 Jun 01 +" (Dominique Pelle added @Spell) +" +" This is based on sh.vim by Lennart Schultz +" but greatly simplified + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" spice syntax is case INsensitive +syn case ignore + +syn keyword spiceTodo contained TODO + +syn match spiceComment "^ \=\*.*$" contains=@Spell +syn match spiceComment "\$.*$" contains=@Spell + +" Numbers, all with engineering suffixes and optional units +"========================================================== +"floating point number, with dot, optional exponent +syn match spiceNumber "\<[0-9]\+\.[0-9]*\(e[-+]\=[0-9]\+\)\=\(meg\=\|[afpnumkg]\)\=" +"floating point number, starting with a dot, optional exponent +syn match spiceNumber "\.[0-9]\+\(e[-+]\=[0-9]\+\)\=\(meg\=\|[afpnumkg]\)\=" +"integer number with optional exponent +syn match spiceNumber "\<[0-9]\+\(e[-+]\=[0-9]\+\)\=\(meg\=\|[afpnumkg]\)\=" + +" Misc +"===== +syn match spiceWrapLineOperator "\\$" +syn match spiceWrapLineOperator "^+" + +syn match spiceStatement "^ \=\.\I\+" + +" Matching pairs of parentheses +"========================================== +syn region spiceParen transparent matchgroup=spiceOperator start="(" end=")" contains=ALLBUT,spiceParenError +syn region spiceSinglequote matchgroup=spiceOperator start=+'+ end=+'+ + +" Errors +"======= +syn match spiceParenError ")" + +" Syncs +" ===== +syn sync minlines=50 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link spiceTodo Todo +hi def link spiceWrapLineOperator spiceOperator +hi def link spiceSinglequote spiceExpr +hi def link spiceExpr Function +hi def link spiceParenError Error +hi def link spiceStatement Statement +hi def link spiceNumber Number +hi def link spiceComment Comment +hi def link spiceOperator Operator + + +let b:current_syntax = "spice" + +" insert the following to $VIM/syntax/scripts.vim +" to autodetect HSpice netlists and text listing output: +" +" " Spice netlists and text listings +" elseif getline(1) =~ 'spice\>' || getline("$") =~ '^\.end' +" so :p:h/spice.vim + +" vim: ts=8 diff --git a/.config/vim/syntax/splint.vim b/.config/vim/syntax/splint.vim new file mode 100644 index 0000000..8eba57d --- /dev/null +++ b/.config/vim/syntax/splint.vim @@ -0,0 +1,243 @@ +" Vim syntax file +" Language: splint (C with lclint/splint Annotations) +" Maintainer: Ralf Wildenhues +" Splint Home: http://www.splint.org/ +" Last Change: $Date: 2004/06/13 20:08:47 $ +" $Revision: 1.1 $ + +" Note: Splint annotated files are not detected by default. +" If you want to use this file for highlighting C code, +" please make sure splint.vim is sourced instead of c.vim, +" for example by putting +" /* vim: set filetype=splint : */ +" at the end of your code or something like +" au! BufRead,BufNewFile *.c setfiletype splint +" in your vimrc file or filetype.vim + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Read the C syntax to start with +runtime! syntax/c.vim + + +" FIXME: uses and changes several clusters defined in c.vim +" so watch for changes there + +" TODO: make a little more grammar explicit +" match flags with hyphen and underscore notation +" match flag expanded forms +" accept other comment char than @ + +syn case match +" splint annotations (taken from 'splint -help annotations') +syn match splintStateAnnot contained "\(pre\|post\):\(only\|shared\|owned\|dependent\|observer\|exposed\|isnull\|notnull\)" +syn keyword splintSpecialAnnot contained special +syn keyword splintSpecTag contained uses sets defines allocated releases +syn keyword splintModifies contained modifies +syn keyword splintRequires contained requires ensures +syn keyword splintGlobals contained globals +syn keyword splintGlobitem contained internalState fileSystem +syn keyword splintGlobannot contained undef killed +syn keyword splintWarning contained warn + +syn keyword splintModitem contained internalState fileSystem nothing +syn keyword splintReqitem contained MaxSet MaxRead result +syn keyword splintIter contained iter yield +syn keyword splintConst contained constant +syn keyword splintAlt contained alt + +syn keyword splintType contained abstract concrete mutable immutable refcounted numabstract +syn keyword splintGlobalType contained unchecked checkmod checked checkedstrict +syn keyword splintMemMgm contained dependent keep killref only owned shared temp +syn keyword splintAlias contained unique returned +syn keyword splintExposure contained observer exposed +syn keyword splintDefState contained out in partial reldef +syn keyword splintGlobState contained undef killed +syn keyword splintNullState contained null notnull relnull +syn keyword splintNullPred contained truenull falsenull nullwhentrue falsewhennull +syn keyword splintExit contained exits mayexit trueexit falseexit neverexit +syn keyword splintExec contained noreturn maynotreturn noreturnwhentrue noreturnwhenfalse alwaysreturns +syn keyword splintSef contained sef +syn keyword splintDecl contained unused external +syn keyword splintCase contained fallthrough +syn keyword splintBreak contained innerbreak loopbreak switchbreak innercontinue +syn keyword splintUnreach contained notreached +syn keyword splintSpecFunc contained printflike scanflike messagelike + +" TODO: make these region or match +syn keyword splintErrSupp contained i ignore end t +syn match splintErrSupp contained "[it]\d\+\>" +syn keyword splintTypeAcc contained access noaccess + +syn keyword splintMacro contained notfunction +syn match splintSpecType contained "\(\|unsigned\|signed\)integraltype" + +" Flags taken from 'splint -help flags full' divided in local and global flags +" Local Flags: +syn keyword splintFlag contained abstract abstractcompare accessall accessczech accessczechoslovak +syn keyword splintFlag contained accessfile accessmodule accessslovak aliasunique allblock +syn keyword splintFlag contained allempty allglobs allimponly allmacros alwaysexits +syn keyword splintFlag contained annotationerror ansi89limits assignexpose badflag bitwisesigned +syn keyword splintFlag contained boolcompare boolfalse boolint boolops booltrue +syn keyword splintFlag contained booltype bounds boundscompacterrormessages boundsread boundswrite +syn keyword splintFlag contained branchstate bufferoverflow bufferoverflowhigh bugslimit casebreak +syn keyword splintFlag contained caseinsensitivefilenames castexpose castfcnptr charindex charint +syn keyword splintFlag contained charintliteral charunsignedchar checkedglobalias checkmodglobalias checkpost +syn keyword splintFlag contained checkstrictglobalias checkstrictglobs codeimponly commentchar commenterror +syn keyword splintFlag contained compdef compdestroy compmempass constmacros constprefix +syn keyword splintFlag contained constprefixexclude constuse continuecomment controlnestdepth cppnames +syn keyword splintFlag contained csvoverwrite czech czechconsts czechfcns czechmacros +syn keyword splintFlag contained czechoslovak czechoslovakconsts czechoslovakfcns czechoslovakmacros czechoslovaktypes +syn keyword splintFlag contained czechoslovakvars czechtypes czechvars debugfcnconstraint declundef +syn keyword splintFlag contained deepbreak deparrays dependenttrans distinctexternalnames distinctinternalnames +syn keyword splintFlag contained duplicatecases duplicatequals elseifcomplete emptyret enumindex +syn keyword splintFlag contained enumint enummembers enummemuse enumprefix enumprefixexclude +syn keyword splintFlag contained evalorder evalorderuncon exitarg exportany exportconst +syn keyword splintFlag contained exportfcn exportheader exportheadervar exportiter exportlocal +syn keyword splintFlag contained exportmacro exporttype exportvar exposetrans externalnamecaseinsensitive +syn keyword splintFlag contained externalnamelen externalprefix externalprefixexclude fcnderef fcnmacros +syn keyword splintFlag contained fcnpost fcnuse fielduse fileextensions filestaticprefix +syn keyword splintFlag contained filestaticprefixexclude firstcase fixedformalarray floatdouble forblock +syn keyword splintFlag contained forcehints forempty forloopexec formalarray formatcode +syn keyword splintFlag contained formatconst formattype forwarddecl freshtrans fullinitblock +syn keyword splintFlag contained globalias globalprefix globalprefixexclude globimponly globnoglobs +syn keyword splintFlag contained globs globsimpmodsnothing globstate globuse gnuextensions +syn keyword splintFlag contained grammar hasyield hints htmlfileformat ifblock +syn keyword splintFlag contained ifempty ignorequals ignoresigns immediatetrans impabstract +syn keyword splintFlag contained impcheckedglobs impcheckedspecglobs impcheckedstatics impcheckedstrictglobs impcheckedstrictspecglobs +syn keyword splintFlag contained impcheckedstrictstatics impcheckmodglobs impcheckmodinternals impcheckmodspecglobs impcheckmodstatics +syn keyword splintFlag contained impconj implementationoptional implictconstraint impouts imptype +syn keyword splintFlag contained includenest incompletetype incondefs incondefslib indentspaces +syn keyword splintFlag contained infloops infloopsuncon initallelements initsize internalglobs +syn keyword splintFlag contained internalglobsnoglobs internalnamecaseinsensitive internalnamelen internalnamelookalike iso99limits +syn keyword splintFlag contained isoreserved isoreservedinternal iterbalance iterloopexec iterprefix +syn keyword splintFlag contained iterprefixexclude iteryield its4low its4moderate its4mostrisky +syn keyword splintFlag contained its4risky its4veryrisky keep keeptrans kepttrans +syn keyword splintFlag contained legacy libmacros likelyboundsread likelyboundswrite likelybool +syn keyword splintFlag contained likelybounds limit linelen lintcomments localprefix +syn keyword splintFlag contained localprefixexclude locindentspaces longint longintegral longsignedintegral +syn keyword splintFlag contained longunsignedintegral longunsignedunsignedintegral loopexec looploopbreak looploopcontinue +syn keyword splintFlag contained loopswitchbreak macroassign macroconstdecl macrodecl macroempty +syn keyword splintFlag contained macrofcndecl macromatchname macroparams macroparens macroredef +syn keyword splintFlag contained macroreturn macrostmt macrounrecog macrovarprefix macrovarprefixexclude +syn keyword splintFlag contained maintype matchanyintegral matchfields mayaliasunique memchecks +syn keyword splintFlag contained memimp memtrans misplacedsharequal misscase modfilesys +syn keyword splintFlag contained modglobs modglobsnomods modglobsunchecked modinternalstrict modnomods +syn keyword splintFlag contained modobserver modobserveruncon mods modsimpnoglobs modstrictglobsnomods +syn keyword splintFlag contained moduncon modunconnomods modunspec multithreaded mustdefine +syn keyword splintFlag contained mustfree mustfreefresh mustfreeonly mustmod mustnotalias +syn keyword splintFlag contained mutrep namechecks needspec nestcomment nestedextern +syn keyword splintFlag contained newdecl newreftrans nextlinemacros noaccess nocomments +syn keyword splintFlag contained noeffect noeffectuncon noparams nopp noret +syn keyword splintFlag contained null nullassign nullderef nullinit nullpass +syn keyword splintFlag contained nullptrarith nullret nullstate nullterminated +syn keyword splintFlag contained numabstract numabstractcast numabstractindex numabstractlit numabstractprint +syn keyword splintFlag contained numenummembers numliteral numstructfields observertrans obviousloopexec +syn keyword splintFlag contained oldstyle onlytrans onlyunqglobaltrans orconstraint overload +syn keyword splintFlag contained ownedtrans paramimptemp paramuse parenfileformat partial +syn keyword splintFlag contained passunknown portability predassign predbool predboolint +syn keyword splintFlag contained predboolothers predboolptr preproc protoparammatch protoparamname +syn keyword splintFlag contained protoparamprefix protoparamprefixexclude ptrarith ptrcompare ptrnegate +syn keyword splintFlag contained quiet readonlystrings readonlytrans realcompare redecl +syn keyword splintFlag contained redef redundantconstraints redundantsharequal refcounttrans relaxquals +syn keyword splintFlag contained relaxtypes repeatunrecog repexpose retalias retexpose +syn keyword splintFlag contained retimponly retval retvalbool retvalint retvalother +syn keyword splintFlag contained sefparams sefuncon shadow sharedtrans shiftimplementation +syn keyword splintFlag contained shiftnegative shortint showallconjs showcolumn showconstraintlocation +syn keyword splintFlag contained showconstraintparens showdeephistory showfunc showloadloc showscan +syn keyword splintFlag contained showsourceloc showsummary sizeofformalarray sizeoftype skipisoheaders +syn keyword splintFlag contained skipposixheaders slashslashcomment slovak slovakconsts slovakfcns +syn keyword splintFlag contained slovakmacros slovaktypes slovakvars specglobimponly specimponly +syn keyword splintFlag contained specmacros specretimponly specstructimponly specundecl specundef +syn keyword splintFlag contained stackref statemerge statetransfer staticinittrans statictrans +syn keyword splintFlag contained strictbranchstate strictdestroy strictops strictusereleased stringliterallen +syn keyword splintFlag contained stringliteralnoroom stringliteralnoroomfinalnull stringliteralsmaller stringliteraltoolong structimponly +syn keyword splintFlag contained superuser switchloopbreak switchswitchbreak syntax sysdirerrors +syn keyword splintFlag contained sysdirexpandmacros sysunrecog tagprefix tagprefixexclude temptrans +syn keyword splintFlag contained tmpcomments toctou topuse trytorecover type +syn keyword splintFlag contained typeprefix typeprefixexclude typeuse uncheckedglobalias uncheckedmacroprefix +syn keyword splintFlag contained uncheckedmacroprefixexclude uniondef unixstandard unqualifiedinittrans unqualifiedtrans +syn keyword splintFlag contained unreachable unrecog unrecogcomments unrecogdirective unrecogflagcomments +syn keyword splintFlag contained unsignedcompare unusedspecial usedef usereleased usevarargs +syn keyword splintFlag contained varuse voidabstract warnflags warnlintcomments warnmissingglobs +syn keyword splintFlag contained warnmissingglobsnoglobs warnposixheaders warnrc warnsysfiles warnunixlib +syn keyword splintFlag contained warnuse whileblock whileempty whileloopexec zerobool +syn keyword splintFlag contained zeroptr +" Global Flags: +syn keyword splintGlobalFlag contained csv dump errorstream errorstreamstderr errorstreamstdout +syn keyword splintGlobalFlag contained expect f help i isolib +syn keyword splintGlobalFlag contained larchpath lclexpect lclimportdir lcs lh +syn keyword splintGlobalFlag contained load messagestream messagestreamstderr messagestreamstdout mts +syn keyword splintGlobalFlag contained neverinclude nof nolib posixlib posixstrictlib +syn keyword splintGlobalFlag contained showalluses singleinclude skipsysheaders stats streamoverwrite +syn keyword splintGlobalFlag contained strictlib supcounts sysdirs timedist tmpdir +syn keyword splintGlobalFlag contained unixlib unixstrictlib warningstream warningstreamstderr warningstreamstdout +syn keyword splintGlobalFlag contained whichlib +syn match splintFlagExpr contained "[\+\-\=]" nextgroup=splintFlag,splintGlobalFlag + +" detect missing /*@ and wrong */ +syn match splintAnnError "@\*/" +syn cluster cCommentGroup add=splintAnnError +syn match splintAnnError2 "[^@]\*/"hs=s+1 contained +syn region splintAnnotation start="/\*@" end="@\*/" contains=@splintAnnotElem,cType keepend +syn match splintShortAnn "/\*@\*/" +syn cluster splintAnnotElem contains=splintStateAnnot,splintSpecialAnnot,splintSpecTag,splintModifies,splintRequires,splintGlobals,splintGlobitem,splintGlobannot,splintWarning,splintModitem,splintIter,splintConst,splintAlt,splintType,splintGlobalType,splintMemMgm,splintAlias,splintExposure,splintDefState,splintGlobState,splintNullState,splintNullPred,splintExit,splintExec,splintSef,splintDecl,splintCase,splintBreak,splintUnreach,splintSpecFunc,splintErrSupp,splintTypeAcc,splintMacro,splintSpecType,splintAnnError2,splintFlagExpr +syn cluster splintAllStuff contains=@splintAnnotElem,splintFlag,splintGlobalFlag +syn cluster cParenGroup add=@splintAllStuff +syn cluster cPreProcGroup add=@splintAllStuff +syn cluster cMultiGroup add=@splintAllStuff + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link splintShortAnn splintAnnotation +hi def link splintAnnotation Comment +hi def link splintAnnError splintError +hi def link splintAnnError2 splintError +hi def link splintFlag SpecialComment +hi def link splintGlobalFlag splintError +hi def link splintSpecialAnnot splintAnnKey +hi def link splintStateAnnot splintAnnKey +hi def link splintSpecTag splintAnnKey +hi def link splintModifies splintAnnKey +hi def link splintRequires splintAnnKey +hi def link splintGlobals splintAnnKey +hi def link splintGlobitem Constant +hi def link splintGlobannot splintAnnKey +hi def link splintWarning splintAnnKey +hi def link splintModitem Constant +hi def link splintIter splintAnnKey +hi def link splintConst splintAnnKey +hi def link splintAlt splintAnnKey +hi def link splintType splintAnnKey +hi def link splintGlobalType splintAnnKey +hi def link splintMemMgm splintAnnKey +hi def link splintAlias splintAnnKey +hi def link splintExposure splintAnnKey +hi def link splintDefState splintAnnKey +hi def link splintGlobState splintAnnKey +hi def link splintNullState splintAnnKey +hi def link splintNullPred splintAnnKey +hi def link splintExit splintAnnKey +hi def link splintExec splintAnnKey +hi def link splintSef splintAnnKey +hi def link splintDecl splintAnnKey +hi def link splintCase splintAnnKey +hi def link splintBreak splintAnnKey +hi def link splintUnreach splintAnnKey +hi def link splintSpecFunc splintAnnKey +hi def link splintErrSupp splintAnnKey +hi def link splintTypeAcc splintAnnKey +hi def link splintMacro splintAnnKey +hi def link splintSpecType splintAnnKey +hi def link splintAnnKey Type +hi def link splintError Error + + +let b:current_syntax = "splint" + +" vim: ts=8 diff --git a/.config/vim/syntax/spup.vim b/.config/vim/syntax/spup.vim new file mode 100644 index 0000000..222caa7 --- /dev/null +++ b/.config/vim/syntax/spup.vim @@ -0,0 +1,269 @@ +" Vim syntax file +" Language: Speedup, plant simulator from AspenTech +" Maintainer: Stefan.Schwarzer +" URL: http://www.ndh.net/home/sschwarzer/download/spup.vim +" Last Change: 2012 Feb 03 by Thilo Six +" Filename: spup.vim + +" Bugs +" - in the appropriate sections keywords are always highlighted +" even if they are not used with the appropriate meaning; +" example: in +" MODEL demonstration +" TYPE +" *area AS area +" both "area" are highlighted as spupType. +" +" If you encounter problems or have questions or suggestions, mail me + +" Remove old syntax stuff +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" don't highlight several keywords like subsections +"let strict_subsections = 1 + +" highlight types usually found in DECLARE section +if !exists("highlight_types") + let highlight_types = 1 +endif + +" one line comment syntax (# comments) +" 1. allow appended code after comment, do not complain +" 2. show code beginning with the second # as an error +" 3. show whole lines with more than one # as an error +if !exists("oneline_comments") + let oneline_comments = 2 +endif + +" Speedup SECTION regions +syn case ignore +syn region spupCdi matchgroup=spupSection start="^CDI" end="^\*\*\*\*" contains=spupCdiSubs,@spupOrdinary +syn region spupConditions matchgroup=spupSection start="^CONDITIONS" end="^\*\*\*\*" contains=spupConditionsSubs,@spupOrdinary,spupConditional,spupOperator,spupCode +syn region spupDeclare matchgroup=spupSection start="^DECLARE" end="^\*\*\*\*" contains=spupDeclareSubs,@spupOrdinary,spupTypes,spupCode +syn region spupEstimation matchgroup=spupSection start="^ESTIMATION" end="^\*\*\*\*" contains=spupEstimationSubs,@spupOrdinary +syn region spupExternal matchgroup=spupSection start="^EXTERNAL" end="^\*\*\*\*" contains=spupExternalSubs,@spupOrdinary +syn region spupFlowsheet matchgroup=spupSection start="^FLOWSHEET" end="^\*\*\*\*" contains=spupFlowsheetSubs,@spupOrdinary,spupStreams,@spupTextproc +syn region spupFunction matchgroup=spupSection start="^FUNCTION" end="^\*\*\*\*" contains=spupFunctionSubs,@spupOrdinary,spupHelp,spupCode,spupTypes +syn region spupGlobal matchgroup=spupSection start="^GLOBAL" end="^\*\*\*\*" contains=spupGlobalSubs,@spupOrdinary +syn region spupHomotopy matchgroup=spupSection start="^HOMOTOPY" end="^\*\*\*\*" contains=spupHomotopySubs,@spupOrdinary +syn region spupMacro matchgroup=spupSection start="^MACRO" end="^\*\*\*\*" contains=spupMacroSubs,@spupOrdinary,@spupTextproc,spupTypes,spupStreams,spupOperator +syn region spupModel matchgroup=spupSection start="^MODEL" end="^\*\*\*\*" contains=spupModelSubs,@spupOrdinary,spupConditional,spupOperator,spupTypes,spupStreams,@spupTextproc,spupHelp +syn region spupOperation matchgroup=spupSection start="^OPERATION" end="^\*\*\*\*" contains=spupOperationSubs,@spupOrdinary,@spupTextproc +syn region spupOptions matchgroup=spupSection start="^OPTIONS" end="^\*\*\*\*" contains=spupOptionsSubs,@spupOrdinary +syn region spupProcedure matchgroup=spupSection start="^PROCEDURE" end="^\*\*\*\*" contains=spupProcedureSubs,@spupOrdinary,spupHelp,spupCode,spupTypes +syn region spupProfiles matchgroup=spupSection start="^PROFILES" end="^\*\*\*\*" contains=@spupOrdinary,@spupTextproc +syn region spupReport matchgroup=spupSection start="^REPORT" end="^\*\*\*\*" contains=spupReportSubs,@spupOrdinary,spupHelp,@spupTextproc +syn region spupTitle matchgroup=spupSection start="^TITLE" end="^\*\*\*\*" contains=spupTitleSubs,spupComment,spupConstant,spupError +syn region spupUnit matchgroup=spupSection start="^UNIT" end="^\*\*\*\*" contains=spupUnitSubs,@spupOrdinary + +" Subsections +syn keyword spupCdiSubs INPUT FREE OUTPUT LINEARTIME MINNONZERO CALCULATE FILES SCALING contained +syn keyword spupDeclareSubs TYPE STREAM contained +syn keyword spupEstimationSubs ESTIMATE SSEXP DYNEXP RESULT contained +syn keyword spupExternalSubs TRANSMIT RECEIVE contained +syn keyword spupFlowsheetSubs STREAM contained +syn keyword spupFunctionSubs INPUT OUTPUT contained +syn keyword spupGlobalSubs VARIABLES MAXIMIZE MINIMIZE CONSTRAINT contained +syn keyword spupHomotopySubs VARY OPTIONS contained +syn keyword spupMacroSubs MODEL FLOWSHEET contained +syn keyword spupModelSubs CATEGORY SET TYPE STREAM EQUATION PROCEDURE contained +syn keyword spupOperationSubs SET PRESET INITIAL SSTATE FREE contained +syn keyword spupOptionsSubs ROUTINES TRANSLATE EXECUTION contained +syn keyword spupProcedureSubs INPUT OUTPUT SPACE PRECALL POSTCALL DERIVATIVE STREAM contained +" no subsections for Profiles +syn keyword spupReportSubs SET INITIAL FIELDS FIELDMARK DISPLAY WITHIN contained +syn keyword spupUnitSubs ROUTINES SET contained + +" additional keywords for subsections +if !exists( "strict_subsections" ) + syn keyword spupConditionsSubs STOP PRINT contained + syn keyword spupDeclareSubs UNIT SET COMPONENTS THERMO OPTIONS contained + syn keyword spupEstimationSubs VARY MEASURE INITIAL contained + syn keyword spupFlowsheetSubs TYPE FEED PRODUCT INPUT OUTPUT CONNECTION OF IS contained + syn keyword spupMacroSubs CONNECTION STREAM SET INPUT OUTPUT OF IS FEED PRODUCT TYPE contained + syn keyword spupModelSubs AS ARRAY OF INPUT OUTPUT CONNECTION contained + syn keyword spupOperationSubs WITHIN contained + syn keyword spupReportSubs LEFT RIGHT CENTER CENTRE UOM TIME DATE VERSION RELDATE contained + syn keyword spupUnitSubs IS A contained +endif + +" Speedup data types +if exists( "highlight_types" ) + syn keyword spupTypes act_coeff_liq area coefficient concentration contained + syn keyword spupTypes control_signal cond_liq cond_vap cp_mass_liq contained + syn keyword spupTypes cp_mol_liq cp_mol_vap cv_mol_liq cv_mol_vap contained + syn keyword spupTypes diffus_liq diffus_vap delta_p dens_mass contained + syn keyword spupTypes dens_mass_sol dens_mass_liq dens_mass_vap dens_mol contained + syn keyword spupTypes dens_mol_sol dens_mol_liq dens_mol_vap enthflow contained + syn keyword spupTypes enth_mass enth_mass_liq enth_mass_vap enth_mol contained + syn keyword spupTypes enth_mol_sol enth_mol_liq enth_mol_vap entr_mol contained + syn keyword spupTypes entr_mol_sol entr_mol_liq entr_mol_vap fraction contained + syn keyword spupTypes flow_mass flow_mass_liq flow_mass_vap flow_mol contained + syn keyword spupTypes flow_mol_vap flow_mol_liq flow_vol flow_vol_vap contained + syn keyword spupTypes flow_vol_liq fuga_vap fuga_liq fuga_sol contained + syn keyword spupTypes gibb_mol_sol heat_react heat_trans_coeff contained + syn keyword spupTypes holdup_heat holdup_heat_liq holdup_heat_vap contained + syn keyword spupTypes holdup_mass holdup_mass_liq holdup_mass_vap contained + syn keyword spupTypes holdup_mol holdup_mol_liq holdup_mol_vap k_value contained + syn keyword spupTypes length length_delta length_short liqfraction contained + syn keyword spupTypes liqmassfraction mass massfraction molefraction contained + syn keyword spupTypes molweight moment_inertia negative notype percent contained + syn keyword spupTypes positive pressure press_diff press_drop press_rise contained + syn keyword spupTypes ratio reaction reaction_mass rotation surf_tens contained + syn keyword spupTypes temperature temperature_abs temp_diff temp_drop contained + syn keyword spupTypes temp_rise time vapfraction vapmassfraction contained + syn keyword spupTypes velocity visc_liq visc_vap volume zmom_rate contained + syn keyword spupTypes seg_rate smom_rate tmom_rate zmom_mass seg_mass contained + syn keyword spupTypes smom_mass tmom_mass zmom_holdup seg_holdup contained + syn keyword spupTypes smom_holdup tmom_holdup contained +endif + +" stream types +syn keyword spupStreams mainstream vapour liquid contained + +" "conditional" keywords +syn keyword spupConditional IF THEN ELSE ENDIF contained +" Operators, symbols etc. +syn keyword spupOperator AND OR NOT contained +syn match spupSymbol "[,\-+=:;*/\"<>@%()]" contained +syn match spupSpecial "[&\$?]" contained +" Surprisingly, Speedup allows no unary + instead of the - +syn match spupError "[(=+\-*/]\s*+\d\+\([ed][+-]\=\d\+\)\=\>"lc=1 contained +syn match spupError "[(=+\-*/]\s*+\d\+\.\([ed][+-]\=\d\+\)\=\>"lc=1 contained +syn match spupError "[(=+\-*/]\s*+\d*\.\d\+\([ed][+-]\=\d\+\)\=\>"lc=1 contained +" String +syn region spupString start=+"+ end=+"+ oneline contained +syn region spupString start=+'+ end=+'+ oneline contained +" Identifier +syn match spupIdentifier "\<[a-z][a-z0-9_]*\>" contained +" Textprocessor directives +syn match spupTextprocGeneric "?[a-z][a-z0-9_]*\>" contained +syn region spupTextprocError matchgroup=spupTextprocGeneric start="?ERROR" end="?END"he=s-1 contained +" Number, without decimal point +syn match spupNumber "-\=\d\+\([ed][+-]\=\d\+\)\=" contained +" Number, allows 1. before exponent +syn match spupNumber "-\=\d\+\.\([ed][+-]\=\d\+\)\=" contained +" Number allows .1 before exponent +syn match spupNumber "-\=\d*\.\d\+\([ed][+-]\=\d\+\)\=" contained +" Help subsections +syn region spupHelp start="^HELP"hs=e+1 end="^\$ENDHELP"he=s-1 contained +" Fortran code +syn region spupCode start="^CODE"hs=e+1 end="^\$ENDCODE"he=s-1 contained +" oneline comments +if oneline_comments > 3 + oneline_comments = 2 " default +endif +if oneline_comments == 1 + syn match spupComment "#[^#]*#\=" +elseif oneline_comments == 2 + syn match spupError "#.*$" + syn match spupComment "#[^#]*" nextgroup=spupError +elseif oneline_comments == 3 + syn match spupComment "#[^#]*" + syn match spupError "#[^#]*#.*" +endif +" multiline comments +syn match spupOpenBrace "{" contained +syn match spupError "}" +syn region spupComment matchgroup=spupComment2 start="{" end="}" keepend contains=spupOpenBrace + +syn cluster spupOrdinary contains=spupNumber,spupIdentifier,spupSymbol +syn cluster spupOrdinary add=spupError,spupString,spupComment +syn cluster spupTextproc contains=spupTextprocGeneric,spupTextprocError + +" define synchronizing; especially OPERATION sections can become very large +syn sync clear +syn sync minlines=100 +syn sync maxlines=500 + +syn sync match spupSyncOperation grouphere spupOperation "^OPERATION" +syn sync match spupSyncCdi grouphere spupCdi "^CDI" +syn sync match spupSyncConditions grouphere spupConditions "^CONDITIONS" +syn sync match spupSyncDeclare grouphere spupDeclare "^DECLARE" +syn sync match spupSyncEstimation grouphere spupEstimation "^ESTIMATION" +syn sync match spupSyncExternal grouphere spupExternal "^EXTERNAL" +syn sync match spupSyncFlowsheet grouphere spupFlowsheet "^FLOWSHEET" +syn sync match spupSyncFunction grouphere spupFunction "^FUNCTION" +syn sync match spupSyncGlobal grouphere spupGlobal "^GLOBAL" +syn sync match spupSyncHomotopy grouphere spupHomotopy "^HOMOTOPY" +syn sync match spupSyncMacro grouphere spupMacro "^MACRO" +syn sync match spupSyncModel grouphere spupModel "^MODEL" +syn sync match spupSyncOperation grouphere spupOperation "^OPERATION" +syn sync match spupSyncOptions grouphere spupOptions "^OPTIONS" +syn sync match spupSyncProcedure grouphere spupProcedure "^PROCEDURE" +syn sync match spupSyncProfiles grouphere spupProfiles "^PROFILES" +syn sync match spupSyncReport grouphere spupReport "^REPORT" +syn sync match spupSyncTitle grouphere spupTitle "^TITLE" +syn sync match spupSyncUnit grouphere spupUnit "^UNIT" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link spupCdi spupSection +hi def link spupConditions spupSection +hi def link spupDeclare spupSection +hi def link spupEstimation spupSection +hi def link spupExternal spupSection +hi def link spupFlowsheet spupSection +hi def link spupFunction spupSection +hi def link spupGlobal spupSection +hi def link spupHomotopy spupSection +hi def link spupMacro spupSection +hi def link spupModel spupSection +hi def link spupOperation spupSection +hi def link spupOptions spupSection +hi def link spupProcedure spupSection +hi def link spupProfiles spupSection +hi def link spupReport spupSection +hi def link spupTitle spupConstant " this is correct, truly ;) +hi def link spupUnit spupSection + +hi def link spupCdiSubs spupSubs +hi def link spupConditionsSubs spupSubs +hi def link spupDeclareSubs spupSubs +hi def link spupEstimationSubs spupSubs +hi def link spupExternalSubs spupSubs +hi def link spupFlowsheetSubs spupSubs +hi def link spupFunctionSubs spupSubs +hi def link spupHomotopySubs spupSubs +hi def link spupMacroSubs spupSubs +hi def link spupModelSubs spupSubs +hi def link spupOperationSubs spupSubs +hi def link spupOptionsSubs spupSubs +hi def link spupProcedureSubs spupSubs +hi def link spupReportSubs spupSubs +hi def link spupUnitSubs spupSubs + +hi def link spupCode Normal +hi def link spupComment Comment +hi def link spupComment2 spupComment +hi def link spupConditional Statement +hi def link spupConstant Constant +hi def link spupError Error +hi def link spupHelp Normal +hi def link spupIdentifier Identifier +hi def link spupNumber Constant +hi def link spupOperator Special +hi def link spupOpenBrace spupError +hi def link spupSection Statement +hi def link spupSpecial spupTextprocGeneric +hi def link spupStreams Type +hi def link spupString Constant +hi def link spupSubs Statement +hi def link spupSymbol Special +hi def link spupTextprocError Normal +hi def link spupTextprocGeneric PreProc +hi def link spupTypes Type + + +let b:current_syntax = "spup" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim:ts=8 diff --git a/.config/vim/syntax/spyce.vim b/.config/vim/syntax/spyce.vim new file mode 100644 index 0000000..169de19 --- /dev/null +++ b/.config/vim/syntax/spyce.vim @@ -0,0 +1,104 @@ +" Vim syntax file +" Language: SPYCE +" Maintainer: Rimon Barr +" URL: http://spyce.sourceforge.net +" Last Change: 2009 Nov 11 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" we define it here so that included files can test for it +if !exists("main_syntax") + let main_syntax='spyce' +endif + +" Read the HTML syntax to start with +let b:did_indent = 1 " don't perform HTML indentation! +let html_no_rendering = 1 " do not render ,, etc... +runtime! syntax/html.vim +unlet b:current_syntax +syntax spell default " added by Bram + +" include python +syn include @Python :p:h/python.vim +syn include @Html :p:h/html.vim + +" spyce definitions +syn keyword spyceDirectiveKeyword include compact module import contained +syn keyword spyceDirectiveArg name names file contained +syn region spyceDirectiveString start=+"+ end=+"+ contained +syn match spyceDirectiveValue "=[\t ]*[^'", \t>][^, \t>]*"hs=s+1 contained + +syn match spyceBeginErrorS ,\[\[, +syn match spyceBeginErrorA ,<%, +syn cluster spyceBeginError contains=spyceBeginErrorS,spyceBeginErrorA +syn match spyceEndErrorS ,\]\], +syn match spyceEndErrorA ,%>, +syn cluster spyceEndError contains=spyceEndErrorS,spyceEndErrorA + +syn match spyceEscBeginS ,\\\[\[, +syn match spyceEscBeginA ,\\<%, +syn cluster spyceEscBegin contains=spyceEscBeginS,spyceEscBeginA +syn match spyceEscEndS ,\\\]\], +syn match spyceEscEndA ,\\%>, +syn cluster spyceEscEnd contains=spyceEscEndS,spyceEscEndA +syn match spyceEscEndCommentS ,--\\\]\], +syn match spyceEscEndCommentA ,--\\%>, +syn cluster spyceEscEndComment contains=spyceEscEndCommentS,spyceEscEndCommentA + +syn region spyceStmtS matchgroup=spyceStmtDelim start=,\[\[, end=,\]\], contains=@Python,spyceLambdaS,spyceLambdaA,spyceBeginError keepend +syn region spyceStmtA matchgroup=spyceStmtDelim start=,<%, end=,%>, contains=@Python,spyceLambdaS,spyceLambdaA,spyceBeginError keepend +syn region spyceChunkS matchgroup=spyceChunkDelim start=,\[\[\\, end=,\]\], contains=@Python,spyceLambdaS,spyceLambdaA,spyceBeginError keepend +syn region spyceChunkA matchgroup=spyceChunkDelim start=,<%\\, end=,%>, contains=@Python,spyceLambdaS,spyceLambdaA,spyceBeginError keepend +syn region spyceEvalS matchgroup=spyceEvalDelim start=,\[\[=, end=,\]\], contains=@Python,spyceLambdaS,spyceLambdaA,spyceBeginError keepend +syn region spyceEvalA matchgroup=spyceEvalDelim start=,<%=, end=,%>, contains=@Python,spyceLambdaS,spyceLambdaA,spyceBeginError keepend +syn region spyceDirectiveS matchgroup=spyceDelim start=,\[\[\., end=,\]\], contains=spyceBeginError,spyceDirectiveKeyword,spyceDirectiveArg,spyceDirectiveValue,spyceDirectiveString keepend +syn region spyceDirectiveA matchgroup=spyceDelim start=,<%@, end=,%>, contains=spyceBeginError,spyceDirectiveKeyword,spyceDirectiveArg,spyceDirectiveValue,spyceDirectiveString keepend +syn region spyceCommentS matchgroup=spyceCommentDelim start=,\[\[--, end=,--\]\], +syn region spyceCommentA matchgroup=spyceCommentDelim start=,<%--, end=,--%>, +syn region spyceLambdaS matchgroup=spyceLambdaDelim start=,\[\[spy!\?, end=,\]\], contains=@Html,@spyce extend +syn region spyceLambdaA matchgroup=spyceLambdaDelim start=,<%spy!\?, end=,%>, contains=@Html,@spyce extend + +syn cluster spyce contains=spyceStmtS,spyceStmtA,spyceChunkS,spyceChunkA,spyceEvalS,spyceEvalA,spyceCommentS,spyceCommentA,spyceDirectiveS,spyceDirectiveA + +syn cluster htmlPreproc contains=@spyce + +hi link spyceDirectiveKeyword Special +hi link spyceDirectiveArg Type +hi link spyceDirectiveString String +hi link spyceDirectiveValue String + +hi link spyceDelim Special +hi link spyceStmtDelim spyceDelim +hi link spyceChunkDelim spyceDelim +hi link spyceEvalDelim spyceDelim +hi link spyceLambdaDelim spyceDelim +hi link spyceCommentDelim Comment + +hi link spyceBeginErrorS Error +hi link spyceBeginErrorA Error +hi link spyceEndErrorS Error +hi link spyceEndErrorA Error + +hi link spyceStmtS spyce +hi link spyceStmtA spyce +hi link spyceChunkS spyce +hi link spyceChunkA spyce +hi link spyceEvalS spyce +hi link spyceEvalA spyce +hi link spyceDirectiveS spyce +hi link spyceDirectiveA spyce +hi link spyceCommentS Comment +hi link spyceCommentA Comment +hi link spyceLambdaS Normal +hi link spyceLambdaA Normal + +hi link spyce Statement + +let b:current_syntax = "spyce" +if main_syntax == 'spyce' + unlet main_syntax +endif + diff --git a/.config/vim/syntax/sql.vim b/.config/vim/syntax/sql.vim new file mode 100644 index 0000000..6de3f4a --- /dev/null +++ b/.config/vim/syntax/sql.vim @@ -0,0 +1,36 @@ +" Vim syntax file loader +" Language: SQL +" Maintainer: David Fishburn +" Last Change: Thu Sep 15 2005 10:30:02 AM +" Version: 1.0 + +" Description: Checks for a: +" buffer local variable, +" global variable, +" If the above exist, it will source the type specified. +" If none exist, it will source the default sql.vim file. +" +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Default to the standard Vim distribution file +let filename = 'sqloracle' + +" Check for overrides. Buffer variables have the highest priority. +if exists("b:sql_type_override") + " Check the runtimepath to see if the file exists + if globpath(&runtimepath, 'syntax/'.b:sql_type_override.'.vim') != '' + let filename = b:sql_type_override + endif +elseif exists("g:sql_type_default") + if globpath(&runtimepath, 'syntax/'.g:sql_type_default.'.vim') != '' + let filename = g:sql_type_default + endif +endif + +" Source the appropriate file +exec 'runtime syntax/'.filename.'.vim' + +" vim:sw=4: diff --git a/.config/vim/syntax/sqlanywhere.vim b/.config/vim/syntax/sqlanywhere.vim new file mode 100644 index 0000000..e91a99d --- /dev/null +++ b/.config/vim/syntax/sqlanywhere.vim @@ -0,0 +1,905 @@ +" Vim syntax file +" Language: SQL, Adaptive Server Anywhere +" Maintainer: David Fishburn +" Last Change: 2013 May 13 +" Version: 16.0.0 + +" Description: Updated to Adaptive Server Anywhere 16.0.0 +" Updated to Adaptive Server Anywhere 12.0.1 (including spatial data) +" Updated to Adaptive Server Anywhere 11.0.1 +" Updated to Adaptive Server Anywhere 10.0.1 +" Updated to Adaptive Server Anywhere 9.0.2 +" Updated to Adaptive Server Anywhere 9.0.1 +" Updated to Adaptive Server Anywhere 9.0.0 +" +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" The SQL reserved words, defined as keywords. + +syn keyword sqlSpecial false null true + +" common functions +syn keyword sqlFunction abs argn avg bintohex bintostr +syn keyword sqlFunction byte_length byte_substr char_length +syn keyword sqlFunction compare count count_big datalength date +syn keyword sqlFunction date_format dateadd datediff datename +syn keyword sqlFunction datepart day dayname days debug_eng +syn keyword sqlFunction dense_rank density dialect difference +syn keyword sqlFunction dow estimate estimate_source evaluate +syn keyword sqlFunction experience_estimate explanation +syn keyword sqlFunction get_identity graphical_plan +syn keyword sqlFunction graphical_ulplan greater grouping +syn keyword sqlFunction hextobin hextoint hour hours identity +syn keyword sqlFunction ifnull index_estimate inttohex isdate +syn keyword sqlFunction isencrypted isnull isnumeric +syn keyword sqlFunction lang_message length lesser like_end +syn keyword sqlFunction like_start list long_ulplan lookup max +syn keyword sqlFunction min minute minutes month monthname +syn keyword sqlFunction months newid now nullif number +syn keyword sqlFunction percent_rank plan quarter rand rank +syn keyword sqlFunction regexp_compile regexp_compile_patindex +syn keyword sqlFunction remainder rewrite rowid second seconds +syn keyword sqlFunction short_ulplan similar sortkey soundex +syn keyword sqlFunction stddev stack_trace str string strtobin strtouuid stuff +syn keyword sqlFunction subpartition substr substring sum switchoffset sysdatetimeoffset +syn keyword sqlFunction textptr todate todatetimeoffset today totimestamp traceback transactsql +syn keyword sqlFunction ts_index_statistics ts_table_statistics +syn keyword sqlFunction tsequal ulplan user_id user_name utc_now +syn keyword sqlFunction uuidtostr varexists variance watcomsql +syn keyword sqlFunction weeks wsql_state year years ymd + +" 9.0.1 functions +syn keyword sqlFunction acos asin atan atn2 cast ceiling convert cos cot +syn keyword sqlFunction char_length coalesce dateformat datetime degrees exp +syn keyword sqlFunction floor getdate insertstr +syn keyword sqlFunction log log10 lower mod pi power +syn keyword sqlFunction property radians replicate round sign sin +syn keyword sqlFunction sqldialect tan truncate truncnum +syn keyword sqlFunction base64_encode base64_decode +syn keyword sqlFunction hash compress decompress encrypt decrypt + +" 11.0.1 functions +syn keyword sqlFunction connection_extended_property text_handle_vector_match +syn keyword sqlFunction read_client_file write_client_file + +" 12.0.1 functions +syn keyword sqlFunction http_response_header + +" string functions +syn keyword sqlFunction ascii char left ltrim repeat +syn keyword sqlFunction space right rtrim trim lcase ucase +syn keyword sqlFunction locate charindex patindex replace +syn keyword sqlFunction errormsg csconvert + +" property functions +syn keyword sqlFunction db_id db_name property_name +syn keyword sqlFunction property_description property_number +syn keyword sqlFunction next_connection next_database property +syn keyword sqlFunction connection_property db_property db_extended_property +syn keyword sqlFunction event_parmeter event_condition event_condition_name + +" sa_ procedures +syn keyword sqlFunction sa_add_index_consultant_analysis +syn keyword sqlFunction sa_add_workload_query +syn keyword sqlFunction sa_app_deregister +syn keyword sqlFunction sa_app_get_infoStr +syn keyword sqlFunction sa_app_get_status +syn keyword sqlFunction sa_app_register +syn keyword sqlFunction sa_app_registration_unlock +syn keyword sqlFunction sa_app_set_infoStr +syn keyword sqlFunction sa_audit_string +syn keyword sqlFunction sa_check_commit +syn keyword sqlFunction sa_checkpoint_execute +syn keyword sqlFunction sa_conn_activity +syn keyword sqlFunction sa_conn_compression_info +syn keyword sqlFunction sa_conn_deregister +syn keyword sqlFunction sa_conn_info +syn keyword sqlFunction sa_conn_properties +syn keyword sqlFunction sa_conn_properties_by_conn +syn keyword sqlFunction sa_conn_properties_by_name +syn keyword sqlFunction sa_conn_register +syn keyword sqlFunction sa_conn_set_status +syn keyword sqlFunction sa_create_analysis_from_query +syn keyword sqlFunction sa_db_info +syn keyword sqlFunction sa_db_properties +syn keyword sqlFunction sa_disable_auditing_type +syn keyword sqlFunction sa_disable_index +syn keyword sqlFunction sa_disk_free_space +syn keyword sqlFunction sa_enable_auditing_type +syn keyword sqlFunction sa_enable_index +syn keyword sqlFunction sa_end_forward_to +syn keyword sqlFunction sa_eng_properties +syn keyword sqlFunction sa_event_schedules +syn keyword sqlFunction sa_exec_script +syn keyword sqlFunction sa_flush_cache +syn keyword sqlFunction sa_flush_statistics +syn keyword sqlFunction sa_forward_to +syn keyword sqlFunction sa_get_dtt +syn keyword sqlFunction sa_get_histogram +syn keyword sqlFunction sa_get_request_profile +syn keyword sqlFunction sa_get_request_profile_sub +syn keyword sqlFunction sa_get_request_times +syn keyword sqlFunction sa_get_server_messages +syn keyword sqlFunction sa_get_simulated_scale_factors +syn keyword sqlFunction sa_get_workload_capture_status +syn keyword sqlFunction sa_index_density +syn keyword sqlFunction sa_index_levels +syn keyword sqlFunction sa_index_statistics +syn keyword sqlFunction sa_internal_alter_index_ability +syn keyword sqlFunction sa_internal_create_analysis_from_query +syn keyword sqlFunction sa_internal_disk_free_space +syn keyword sqlFunction sa_internal_get_dtt +syn keyword sqlFunction sa_internal_get_histogram +syn keyword sqlFunction sa_internal_get_request_times +syn keyword sqlFunction sa_internal_get_simulated_scale_factors +syn keyword sqlFunction sa_internal_get_workload_capture_status +syn keyword sqlFunction sa_internal_index_density +syn keyword sqlFunction sa_internal_index_levels +syn keyword sqlFunction sa_internal_index_statistics +syn keyword sqlFunction sa_internal_java_loaded_classes +syn keyword sqlFunction sa_internal_locks +syn keyword sqlFunction sa_internal_pause_workload_capture +syn keyword sqlFunction sa_internal_procedure_profile +syn keyword sqlFunction sa_internal_procedure_profile_summary +syn keyword sqlFunction sa_internal_read_backup_history +syn keyword sqlFunction sa_internal_recommend_indexes +syn keyword sqlFunction sa_internal_reset_identity +syn keyword sqlFunction sa_internal_resume_workload_capture +syn keyword sqlFunction sa_internal_start_workload_capture +syn keyword sqlFunction sa_internal_stop_index_consultant +syn keyword sqlFunction sa_internal_stop_workload_capture +syn keyword sqlFunction sa_internal_table_fragmentation +syn keyword sqlFunction sa_internal_table_page_usage +syn keyword sqlFunction sa_internal_table_stats +syn keyword sqlFunction sa_internal_virtual_sysindex +syn keyword sqlFunction sa_internal_virtual_sysixcol +syn keyword sqlFunction sa_java_loaded_classes +syn keyword sqlFunction sa_jdk_version +syn keyword sqlFunction sa_locks +syn keyword sqlFunction sa_make_object +syn keyword sqlFunction sa_pause_workload_capture +syn keyword sqlFunction sa_proc_debug_attach_to_connection +syn keyword sqlFunction sa_proc_debug_connect +syn keyword sqlFunction sa_proc_debug_detach_from_connection +syn keyword sqlFunction sa_proc_debug_disconnect +syn keyword sqlFunction sa_proc_debug_get_connection_name +syn keyword sqlFunction sa_proc_debug_release_connection +syn keyword sqlFunction sa_proc_debug_request +syn keyword sqlFunction sa_proc_debug_version +syn keyword sqlFunction sa_proc_debug_wait_for_connection +syn keyword sqlFunction sa_procedure_profile +syn keyword sqlFunction sa_procedure_profile_summary +syn keyword sqlFunction sa_read_backup_history +syn keyword sqlFunction sa_recommend_indexes +syn keyword sqlFunction sa_recompile_views +syn keyword sqlFunction sa_remove_index_consultant_analysis +syn keyword sqlFunction sa_remove_index_consultant_workload +syn keyword sqlFunction sa_reset_identity +syn keyword sqlFunction sa_resume_workload_capture +syn keyword sqlFunction sa_server_option +syn keyword sqlFunction sa_set_simulated_scale_factor +syn keyword sqlFunction sa_setremoteuser +syn keyword sqlFunction sa_setsubscription +syn keyword sqlFunction sa_start_recording_commits +syn keyword sqlFunction sa_start_workload_capture +syn keyword sqlFunction sa_statement_text +syn keyword sqlFunction sa_stop_index_consultant +syn keyword sqlFunction sa_stop_recording_commits +syn keyword sqlFunction sa_stop_workload_capture +syn keyword sqlFunction sa_sync +syn keyword sqlFunction sa_sync_sub +syn keyword sqlFunction sa_table_fragmentation +syn keyword sqlFunction sa_table_page_usage +syn keyword sqlFunction sa_table_stats +syn keyword sqlFunction sa_update_index_consultant_workload +syn keyword sqlFunction sa_validate +syn keyword sqlFunction sa_virtual_sysindex +syn keyword sqlFunction sa_virtual_sysixcol + +" sp_ procedures +syn keyword sqlFunction sp_addalias +syn keyword sqlFunction sp_addauditrecord +syn keyword sqlFunction sp_adddumpdevice +syn keyword sqlFunction sp_addgroup +syn keyword sqlFunction sp_addlanguage +syn keyword sqlFunction sp_addlogin +syn keyword sqlFunction sp_addmessage +syn keyword sqlFunction sp_addremotelogin +syn keyword sqlFunction sp_addsegment +syn keyword sqlFunction sp_addserver +syn keyword sqlFunction sp_addthreshold +syn keyword sqlFunction sp_addtype +syn keyword sqlFunction sp_adduser +syn keyword sqlFunction sp_auditdatabase +syn keyword sqlFunction sp_auditlogin +syn keyword sqlFunction sp_auditobject +syn keyword sqlFunction sp_auditoption +syn keyword sqlFunction sp_auditsproc +syn keyword sqlFunction sp_bindefault +syn keyword sqlFunction sp_bindmsg +syn keyword sqlFunction sp_bindrule +syn keyword sqlFunction sp_changedbowner +syn keyword sqlFunction sp_changegroup +syn keyword sqlFunction sp_checknames +syn keyword sqlFunction sp_checkperms +syn keyword sqlFunction sp_checkreswords +syn keyword sqlFunction sp_clearstats +syn keyword sqlFunction sp_column_privileges +syn keyword sqlFunction sp_columns +syn keyword sqlFunction sp_commonkey +syn keyword sqlFunction sp_configure +syn keyword sqlFunction sp_cursorinfo +syn keyword sqlFunction sp_databases +syn keyword sqlFunction sp_datatype_info +syn keyword sqlFunction sp_dboption +syn keyword sqlFunction sp_dbremap +syn keyword sqlFunction sp_depends +syn keyword sqlFunction sp_diskdefault +syn keyword sqlFunction sp_displaylogin +syn keyword sqlFunction sp_dropalias +syn keyword sqlFunction sp_dropdevice +syn keyword sqlFunction sp_dropgroup +syn keyword sqlFunction sp_dropkey +syn keyword sqlFunction sp_droplanguage +syn keyword sqlFunction sp_droplogin +syn keyword sqlFunction sp_dropmessage +syn keyword sqlFunction sp_dropremotelogin +syn keyword sqlFunction sp_dropsegment +syn keyword sqlFunction sp_dropserver +syn keyword sqlFunction sp_dropthreshold +syn keyword sqlFunction sp_droptype +syn keyword sqlFunction sp_dropuser +syn keyword sqlFunction sp_estspace +syn keyword sqlFunction sp_extendsegment +syn keyword sqlFunction sp_fkeys +syn keyword sqlFunction sp_foreignkey +syn keyword sqlFunction sp_getmessage +syn keyword sqlFunction sp_help +syn keyword sqlFunction sp_helpconstraint +syn keyword sqlFunction sp_helpdb +syn keyword sqlFunction sp_helpdevice +syn keyword sqlFunction sp_helpgroup +syn keyword sqlFunction sp_helpindex +syn keyword sqlFunction sp_helpjoins +syn keyword sqlFunction sp_helpkey +syn keyword sqlFunction sp_helplanguage +syn keyword sqlFunction sp_helplog +syn keyword sqlFunction sp_helpprotect +syn keyword sqlFunction sp_helpremotelogin +syn keyword sqlFunction sp_helpsegment +syn keyword sqlFunction sp_helpserver +syn keyword sqlFunction sp_helpsort +syn keyword sqlFunction sp_helptext +syn keyword sqlFunction sp_helpthreshold +syn keyword sqlFunction sp_helpuser +syn keyword sqlFunction sp_indsuspect +syn keyword sqlFunction sp_lock +syn keyword sqlFunction sp_locklogin +syn keyword sqlFunction sp_logdevice +syn keyword sqlFunction sp_login_environment +syn keyword sqlFunction sp_modifylogin +syn keyword sqlFunction sp_modifythreshold +syn keyword sqlFunction sp_monitor +syn keyword sqlFunction sp_password +syn keyword sqlFunction sp_pkeys +syn keyword sqlFunction sp_placeobject +syn keyword sqlFunction sp_primarykey +syn keyword sqlFunction sp_procxmode +syn keyword sqlFunction sp_recompile +syn keyword sqlFunction sp_remap +syn keyword sqlFunction sp_remote_columns +syn keyword sqlFunction sp_remote_exported_keys +syn keyword sqlFunction sp_remote_imported_keys +syn keyword sqlFunction sp_remote_pcols +syn keyword sqlFunction sp_remote_primary_keys +syn keyword sqlFunction sp_remote_procedures +syn keyword sqlFunction sp_remote_tables +syn keyword sqlFunction sp_remoteoption +syn keyword sqlFunction sp_rename +syn keyword sqlFunction sp_renamedb +syn keyword sqlFunction sp_reportstats +syn keyword sqlFunction sp_reset_tsql_environment +syn keyword sqlFunction sp_role +syn keyword sqlFunction sp_server_info +syn keyword sqlFunction sp_servercaps +syn keyword sqlFunction sp_serverinfo +syn keyword sqlFunction sp_serveroption +syn keyword sqlFunction sp_setlangalias +syn keyword sqlFunction sp_setreplicate +syn keyword sqlFunction sp_setrepproc +syn keyword sqlFunction sp_setreptable +syn keyword sqlFunction sp_spaceused +syn keyword sqlFunction sp_special_columns +syn keyword sqlFunction sp_sproc_columns +syn keyword sqlFunction sp_statistics +syn keyword sqlFunction sp_stored_procedures +syn keyword sqlFunction sp_syntax +syn keyword sqlFunction sp_table_privileges +syn keyword sqlFunction sp_tables +syn keyword sqlFunction sp_tsql_environment +syn keyword sqlFunction sp_tsql_feature_not_supported +syn keyword sqlFunction sp_unbindefault +syn keyword sqlFunction sp_unbindmsg +syn keyword sqlFunction sp_unbindrule +syn keyword sqlFunction sp_volchanged +syn keyword sqlFunction sp_who +syn keyword sqlFunction xp_scanf +syn keyword sqlFunction xp_sprintf + +" server functions +syn keyword sqlFunction col_length +syn keyword sqlFunction col_name +syn keyword sqlFunction index_col +syn keyword sqlFunction object_id +syn keyword sqlFunction object_name +syn keyword sqlFunction proc_role +syn keyword sqlFunction show_role +syn keyword sqlFunction xp_cmdshell +syn keyword sqlFunction xp_msver +syn keyword sqlFunction xp_read_file +syn keyword sqlFunction xp_real_cmdshell +syn keyword sqlFunction xp_real_read_file +syn keyword sqlFunction xp_real_sendmail +syn keyword sqlFunction xp_real_startmail +syn keyword sqlFunction xp_real_startsmtp +syn keyword sqlFunction xp_real_stopmail +syn keyword sqlFunction xp_real_stopsmtp +syn keyword sqlFunction xp_real_write_file +syn keyword sqlFunction xp_scanf +syn keyword sqlFunction xp_sendmail +syn keyword sqlFunction xp_sprintf +syn keyword sqlFunction xp_startmail +syn keyword sqlFunction xp_startsmtp +syn keyword sqlFunction xp_stopmail +syn keyword sqlFunction xp_stopsmtp +syn keyword sqlFunction xp_write_file + +" http functions +syn keyword sqlFunction http_header http_variable +syn keyword sqlFunction next_http_header next_http_response_header next_http_variable +syn keyword sqlFunction sa_set_http_header sa_set_http_option +syn keyword sqlFunction sa_http_variable_info sa_http_header_info + +" http functions 9.0.1 +syn keyword sqlFunction http_encode http_decode +syn keyword sqlFunction html_encode html_decode + +" XML function support +syn keyword sqlFunction openxml xmlelement xmlforest xmlgen xmlconcat xmlagg +syn keyword sqlFunction xmlattributes + +" Spatial Compatibility Functions +syn keyword sqlFunction ST_BdMPolyFromText +syn keyword sqlFunction ST_BdMPolyFromWKB +syn keyword sqlFunction ST_BdPolyFromText +syn keyword sqlFunction ST_BdPolyFromWKB +syn keyword sqlFunction ST_CPolyFromText +syn keyword sqlFunction ST_CPolyFromWKB +syn keyword sqlFunction ST_CircularFromTxt +syn keyword sqlFunction ST_CircularFromWKB +syn keyword sqlFunction ST_CompoundFromTxt +syn keyword sqlFunction ST_CompoundFromWKB +syn keyword sqlFunction ST_GeomCollFromTxt +syn keyword sqlFunction ST_GeomCollFromWKB +syn keyword sqlFunction ST_GeomFromText +syn keyword sqlFunction ST_GeomFromWKB +syn keyword sqlFunction ST_LineFromText +syn keyword sqlFunction ST_LineFromWKB +syn keyword sqlFunction ST_MCurveFromText +syn keyword sqlFunction ST_MCurveFromWKB +syn keyword sqlFunction ST_MLineFromText +syn keyword sqlFunction ST_MLineFromWKB +syn keyword sqlFunction ST_MPointFromText +syn keyword sqlFunction ST_MPointFromWKB +syn keyword sqlFunction ST_MPolyFromText +syn keyword sqlFunction ST_MPolyFromWKB +syn keyword sqlFunction ST_MSurfaceFromTxt +syn keyword sqlFunction ST_MSurfaceFromWKB +syn keyword sqlFunction ST_OrderingEquals +syn keyword sqlFunction ST_PointFromText +syn keyword sqlFunction ST_PointFromWKB +syn keyword sqlFunction ST_PolyFromText +syn keyword sqlFunction ST_PolyFromWKB +" Spatial Structural Methods +syn keyword sqlFunction ST_CoordDim +syn keyword sqlFunction ST_CurveN +syn keyword sqlFunction ST_Dimension +syn keyword sqlFunction ST_EndPoint +syn keyword sqlFunction ST_ExteriorRing +syn keyword sqlFunction ST_GeometryN +syn keyword sqlFunction ST_GeometryType +syn keyword sqlFunction ST_InteriorRingN +syn keyword sqlFunction ST_Is3D +syn keyword sqlFunction ST_IsClosed +syn keyword sqlFunction ST_IsEmpty +syn keyword sqlFunction ST_IsMeasured +syn keyword sqlFunction ST_IsRing +syn keyword sqlFunction ST_IsSimple +syn keyword sqlFunction ST_IsValid +syn keyword sqlFunction ST_NumCurves +syn keyword sqlFunction ST_NumGeometries +syn keyword sqlFunction ST_NumInteriorRing +syn keyword sqlFunction ST_NumPoints +syn keyword sqlFunction ST_PointN +syn keyword sqlFunction ST_StartPoint +"Spatial Computation +syn keyword sqlFunction ST_Length +syn keyword sqlFunction ST_Area +syn keyword sqlFunction ST_Centroid +syn keyword sqlFunction ST_Area +syn keyword sqlFunction ST_Centroid +syn keyword sqlFunction ST_IsWorld +syn keyword sqlFunction ST_Perimeter +syn keyword sqlFunction ST_PointOnSurface +syn keyword sqlFunction ST_Distance +" Spatial Input/Output +syn keyword sqlFunction ST_AsBinary +syn keyword sqlFunction ST_AsGML +syn keyword sqlFunction ST_AsGeoJSON +syn keyword sqlFunction ST_AsSVG +syn keyword sqlFunction ST_AsSVGAggr +syn keyword sqlFunction ST_AsText +syn keyword sqlFunction ST_AsWKB +syn keyword sqlFunction ST_AsWKT +syn keyword sqlFunction ST_AsXML +syn keyword sqlFunction ST_GeomFromBinary +syn keyword sqlFunction ST_GeomFromShape +syn keyword sqlFunction ST_GeomFromText +syn keyword sqlFunction ST_GeomFromWKB +syn keyword sqlFunction ST_GeomFromWKT +syn keyword sqlFunction ST_GeomFromXML +" Spatial Cast Methods +syn keyword sqlFunction ST_CurvePolyToPoly +syn keyword sqlFunction ST_CurveToLine +syn keyword sqlFunction ST_ToCircular +syn keyword sqlFunction ST_ToCompound +syn keyword sqlFunction ST_ToCurve +syn keyword sqlFunction ST_ToCurvePoly +syn keyword sqlFunction ST_ToGeomColl +syn keyword sqlFunction ST_ToLineString +syn keyword sqlFunction ST_ToMultiCurve +syn keyword sqlFunction ST_ToMultiLine +syn keyword sqlFunction ST_ToMultiPoint +syn keyword sqlFunction ST_ToMultiPolygon +syn keyword sqlFunction ST_ToMultiSurface +syn keyword sqlFunction ST_ToPoint +syn keyword sqlFunction ST_ToPolygon +syn keyword sqlFunction ST_ToSurface + +" Array functions 16.x +syn keyword sqlFunction array array_agg array_max_cardinality trim_array +syn keyword sqlFunction error_line error_message error_procedure +syn keyword sqlFunction error_sqlcode error_sqlstate error_stack_trace + + +" keywords +syn keyword sqlKeyword absolute accent access account action active activate add address admin +syn keyword sqlKeyword aes_decrypt after aggregate algorithm allow_dup_row allow allowed alter +syn keyword sqlKeyword always and angular ansi_substring any as append apply +syn keyword sqlKeyword arbiter array asc ascii ase +syn keyword sqlKeyword assign at atan2 atomic attended +syn keyword sqlKeyword audit auditing authentication authorization axis +syn keyword sqlKeyword autoincrement autostop batch bcp before +syn keyword sqlKeyword between bit_and bit_length bit_or bit_substr bit_xor +syn keyword sqlKeyword blank blanks block +syn keyword sqlKeyword both bottom unbounded breaker bufferpool +syn keyword sqlKeyword build bulk by byte bytes cache calibrate calibration +syn keyword sqlKeyword cancel capability cardinality cascade cast +syn keyword sqlKeyword catalog catch ceil change changes char char_convert +syn keyword sqlKeyword check checkpointlog checksum class classes client cmp +syn keyword sqlKeyword cluster clustered collation +syn keyword sqlKeyword column columns +syn keyword sqlKeyword command comments committed commitid comparisons +syn keyword sqlKeyword compatible component compressed compute computes +syn keyword sqlKeyword concat configuration confirm conflict connection +syn keyword sqlKeyword console consolidate consolidated +syn keyword sqlKeyword constraint constraints content +syn keyword sqlKeyword convert coordinate coordinator copy count count_set_bits +syn keyword sqlKeyword crc createtime critical cross cube cume_dist +syn keyword sqlKeyword current cursor data data database +syn keyword sqlKeyword current_timestamp current_user cycle +syn keyword sqlKeyword databases datatype dba dbfile +syn keyword sqlKeyword dbspace dbspaces dbspacename debug decoupled +syn keyword sqlKeyword decrypted default defaults default_dbspace deferred +syn keyword sqlKeyword definer definition +syn keyword sqlKeyword delay deleting delimited dependencies desc +syn keyword sqlKeyword description deterministic directory +syn keyword sqlKeyword disable disabled disallow distinct disksandbox disk_sandbox +syn keyword sqlKeyword dn do domain download duplicate +syn keyword sqlKeyword dsetpass dttm dynamic each earth editproc effective ejb +syn keyword sqlKeyword elimination ellipsoid else elseif +syn keyword sqlKeyword email empty enable encapsulated encrypted encryption end +syn keyword sqlKeyword encoding endif engine environment erase error errors escape escapes event +syn keyword sqlKeyword event_parameter every exception exclude excluded exclusive exec +syn keyword sqlKeyword existing exists expanded expiry express exprtype extended_property +syn keyword sqlKeyword external externlogin factor failover false +syn keyword sqlKeyword fastfirstrow feature fieldproc file files filler +syn keyword sqlKeyword fillfactor final finish first first_keyword first_value +syn keyword sqlKeyword flattening +syn keyword sqlKeyword following force foreign format forjson forxml forxml_sep fp frame +syn keyword sqlKeyword free freepage french fresh full function +syn keyword sqlKeyword gb generic get_bit go global grid +syn keyword sqlKeyword group handler hash having header hexadecimal +syn keyword sqlKeyword hidden high history hg hng hold holdlock host +syn keyword sqlKeyword hours http_body http_session_timeout id identified identity ignore +syn keyword sqlKeyword ignore_dup_key ignore_dup_row immediate +syn keyword sqlKeyword in inactiv inactive inactivity included increment incremental +syn keyword sqlKeyword index index_enabled index_lparen indexonly info information +syn keyword sqlKeyword inheritance inline inner inout insensitive inserting +syn keyword sqlKeyword instead +syn keyword sqlKeyword internal intersection into introduced inverse invoker +syn keyword sqlKeyword iq is isolation +syn keyword sqlKeyword jar java java_location java_main_userid java_vm_options +syn keyword sqlKeyword jconnect jdk join json kb key keys keep language last +syn keyword sqlKeyword last_keyword last_value lateral latitude +syn keyword sqlKeyword ld ldap left len linear lf ln level like +syn keyword sqlKeyword limit local location log +syn keyword sqlKeyword logging logical login logscan long longitude low lru ls +syn keyword sqlKeyword main major manage manual mark master +syn keyword sqlKeyword match matched materialized max maxvalue maximum mb measure median membership +syn keyword sqlKeyword merge metadata methods migrate minimum minor minutes minvalue mirror +syn keyword sqlKeyword mode modify monitor move mru multiplex +syn keyword sqlKeyword name named namespaces national native natural new next nextval +syn keyword sqlKeyword ngram no noholdlock nolock nonclustered none normal not +syn keyword sqlKeyword notify null nullable_constant nulls +syn keyword sqlKeyword object objects oem_string of off offline offset olap +syn keyword sqlKeyword old on online only openstring operator +syn keyword sqlKeyword optimization optimizer option +syn keyword sqlKeyword or order ordinality organization others out outer over owner +syn keyword sqlKeyword package packetsize padding page pages +syn keyword sqlKeyword paglock parallel parameter parent part partial +syn keyword sqlKeyword partition partitions partner password path pctfree +syn keyword sqlKeyword permissions perms plan planar policy polygon populate port postfilter preceding +syn keyword sqlKeyword precisionprefetch prefilter prefix preserve preview previous +syn keyword sqlKeyword primary prior priority priqty private privilege privileges procedure profile profiling +syn keyword sqlKeyword property_is_cumulative property_is_numeric public publication publish publisher +syn keyword sqlKeyword quiesce quote quotes range readclientfile readcommitted reader readfile readonly +syn keyword sqlKeyword readpast readuncommitted readwrite rebuild +syn keyword sqlKeyword received recompile recover recursive references +syn keyword sqlKeyword referencing regex regexp regexp_substr relative relocate +syn keyword sqlKeyword rename repeatable repeatableread replicate replication +syn keyword sqlKeyword requests request_timeout required rereceive resend reserve reset +syn keyword sqlKeyword resizing resolve resource respect restart +syn keyword sqlKeyword restrict result retain retries +syn keyword sqlKeyword returns reverse right role roles +syn keyword sqlKeyword rollup root row row_number rowlock rows rowtype +syn keyword sqlKeyword sa_index_hash sa_internal_fk_verify sa_internal_termbreak +syn keyword sqlKeyword sa_order_preserving_hash sa_order_preserving_hash_big sa_order_preserving_hash_prefix +syn keyword sqlKeyword sa_file_free_pages sa_internal_type_from_catalog sa_internal_valid_hash +syn keyword sqlKeyword sa_internal_validate_value sa_json_element +syn keyword sqlKeyword scale schedule schema scope script scripted scroll search seconds secqty security +syn keyword sqlKeyword semi send sensitive sent sequence serializable +syn keyword sqlKeyword server severity session set_bit set_bits sets +syn keyword sqlKeyword shapefile share side simple since site size skip +syn keyword sqlKeyword snap snapshot soapheader soap_header +syn keyword sqlKeyword spatial split some sorted_data +syn keyword sqlKeyword sql sqlcode sqlid sqlflagger sqlstate sqrt square +syn keyword sqlKeyword stacker stale state statement statistics status stddev_pop stddev_samp +syn keyword sqlKeyword stemmer stogroup stoplist storage store +syn keyword sqlKeyword strip stripesizekb striping subpages subscribe subscription +syn keyword sqlKeyword subtransaction suser_id suser_name suspend synchronization +syn keyword sqlKeyword syntax_error table tables tablock +syn keyword sqlKeyword tablockx target tb temp template temporary term then ties +syn keyword sqlKeyword timezone timeout tls to to_char to_nchar tolerance top +syn keyword sqlKeyword trace traced_plan tracing +syn keyword sqlKeyword transfer transform transaction transactional treat tries +syn keyword sqlKeyword true try tsequal type tune uncommitted unconditionally +syn keyword sqlKeyword unenforced unicode unique unistr unit unknown unlimited unload +syn keyword sqlKeyword unpartition unquiesce updatetime updating updlock upgrade upload +syn keyword sqlKeyword upper usage use user +syn keyword sqlKeyword using utc utilities validproc +syn keyword sqlKeyword value values varchar variable +syn keyword sqlKeyword varying var_pop var_samp vcat verbosity +syn keyword sqlKeyword verify versions view virtual wait +syn keyword sqlKeyword warning wd web when where with with_auto +syn keyword sqlKeyword with_auto with_cube with_rollup without +syn keyword sqlKeyword with_lparen within word work workload write writefile +syn keyword sqlKeyword writeclientfile writer writers writeserver xlock +syn keyword sqlKeyword war xml zeros zone +" XML +syn keyword sqlKeyword raw auto elements explicit +" HTTP support +syn keyword sqlKeyword authorization secure url service next_soap_header +" HTTP 9.0.2 new procedure keywords +syn keyword sqlKeyword namespace certificate certificates clientport proxy trusted_certificates_file +" OLAP support 9.0.0 +syn keyword sqlKeyword covar_pop covar_samp corr regr_slope regr_intercept +syn keyword sqlKeyword regr_count regr_r2 regr_avgx regr_avgy +syn keyword sqlKeyword regr_sxx regr_syy regr_sxy + +" Alternate keywords +syn keyword sqlKeyword character dec options proc reference +syn keyword sqlKeyword subtrans tran syn keyword + +" Login Mode Options +syn keyword sqlKeywordLogin standard integrated kerberos LDAPUA +syn keyword sqlKeywordLogin cloudadmin mixed + +" Spatial Predicates +syn keyword sqlKeyword ST_Contains +syn keyword sqlKeyword ST_ContainsFilter +syn keyword sqlKeyword ST_CoveredBy +syn keyword sqlKeyword ST_CoveredByFilter +syn keyword sqlKeyword ST_Covers +syn keyword sqlKeyword ST_CoversFilter +syn keyword sqlKeyword ST_Crosses +syn keyword sqlKeyword ST_Disjoint +syn keyword sqlKeyword ST_Equals +syn keyword sqlKeyword ST_EqualsFilter +syn keyword sqlKeyword ST_Intersects +syn keyword sqlKeyword ST_IntersectsFilter +syn keyword sqlKeyword ST_IntersectsRect +syn keyword sqlKeyword ST_OrderingEquals +syn keyword sqlKeyword ST_Overlaps +syn keyword sqlKeyword ST_Relate +syn keyword sqlKeyword ST_Touches +syn keyword sqlKeyword ST_Within +syn keyword sqlKeyword ST_WithinFilter +" Spatial Set operations +syn keyword sqlKeyword ST_Affine +syn keyword sqlKeyword ST_Boundary +syn keyword sqlKeyword ST_Buffer +syn keyword sqlKeyword ST_ConvexHull +syn keyword sqlKeyword ST_ConvexHullAggr +syn keyword sqlKeyword ST_Difference +syn keyword sqlKeyword ST_Intersection +syn keyword sqlKeyword ST_IntersectionAggr +syn keyword sqlKeyword ST_SymDifference +syn keyword sqlKeyword ST_Union +syn keyword sqlKeyword ST_UnionAggr +" Spatial Bounds +syn keyword sqlKeyword ST_Envelope +syn keyword sqlKeyword ST_EnvelopeAggr +syn keyword sqlKeyword ST_Lat +syn keyword sqlKeyword ST_LatMax +syn keyword sqlKeyword ST_LatMin +syn keyword sqlKeyword ST_Long +syn keyword sqlKeyword ST_LongMax +syn keyword sqlKeyword ST_LongMin +syn keyword sqlKeyword ST_M +syn keyword sqlKeyword ST_MMax +syn keyword sqlKeyword ST_MMin +syn keyword sqlKeyword ST_Point +syn keyword sqlKeyword ST_X +syn keyword sqlKeyword ST_XMax +syn keyword sqlKeyword ST_XMin +syn keyword sqlKeyword ST_Y +syn keyword sqlKeyword ST_YMax +syn keyword sqlKeyword ST_YMin +syn keyword sqlKeyword ST_Z +syn keyword sqlKeyword ST_ZMax +syn keyword sqlKeyword ST_ZMin +" Spatial Collection Aggregates +syn keyword sqlKeyword ST_GeomCollectionAggr +syn keyword sqlKeyword ST_LineStringAggr +syn keyword sqlKeyword ST_MultiCurveAggr +syn keyword sqlKeyword ST_MultiLineStringAggr +syn keyword sqlKeyword ST_MultiPointAggr +syn keyword sqlKeyword ST_MultiPolygonAggr +syn keyword sqlKeyword ST_MultiSurfaceAggr +syn keyword sqlKeyword ST_Perimeter +syn keyword sqlKeyword ST_PointOnSurface +" Spatial SRS +syn keyword sqlKeyword ST_CompareWKT +syn keyword sqlKeyword ST_FormatWKT +syn keyword sqlKeyword ST_ParseWKT +syn keyword sqlKeyword ST_TransformGeom +syn keyword sqlKeyword ST_GeometryTypeFromBaseType +syn keyword sqlKeyword ST_SnapToGrid +syn keyword sqlKeyword ST_Transform +syn keyword sqlKeyword ST_SRID +syn keyword sqlKeyword ST_SRIDFromBaseType +syn keyword sqlKeyword ST_LoadConfigurationData +" Spatial Indexes +syn keyword sqlKeyword ST_LinearHash +syn keyword sqlKeyword ST_LinearUnHash + +syn keyword sqlOperator in any some all between exists +syn keyword sqlOperator like escape not is and or +syn keyword sqlOperator minus +syn keyword sqlOperator prior distinct unnest + +syn keyword sqlStatement allocate alter attach backup begin break call case catch +syn keyword sqlStatement checkpoint clear close comment commit configure connect +syn keyword sqlStatement continue create deallocate declare delete describe +syn keyword sqlStatement detach disconnect drop except execute exit explain fetch +syn keyword sqlStatement for forward from get goto grant help if include +syn keyword sqlStatement input insert install intersect leave load lock loop +syn keyword sqlStatement message open output parameters passthrough +syn keyword sqlStatement prepare print put raiserror read readtext refresh release +syn keyword sqlStatement remote remove reorganize resignal restore resume +syn keyword sqlStatement return revoke rollback save savepoint select +syn keyword sqlStatement set setuser signal start stop synchronize +syn keyword sqlStatement system trigger truncate try union unload update +syn keyword sqlStatement validate waitfor whenever while window writetext + + +syn keyword sqlType char nchar long varchar nvarchar text ntext uniqueidentifierstr xml +syn keyword sqlType bigint bit decimal double varbit +syn keyword sqlType float int integer numeric +syn keyword sqlType smallint tinyint real +syn keyword sqlType money smallmoney +syn keyword sqlType date datetime datetimeoffset smalldatetime time timestamp +syn keyword sqlType binary image varray varbinary uniqueidentifier +syn keyword sqlType unsigned +" Spatial types +syn keyword sqlType st_geometry st_point st_curve st_surface st_geomcollection +syn keyword sqlType st_linestring st_circularstring st_compoundcurve +syn keyword sqlType st_curvepolygon st_polygon +syn keyword sqlType st_multipoint st_multicurve st_multisurface +syn keyword sqlType st_multilinestring st_multipolygon + +syn keyword sqlOption Allow_nulls_by_default +syn keyword sqlOption Allow_read_client_file +syn keyword sqlOption Allow_snapshot_isolation +syn keyword sqlOption Allow_write_client_file +syn keyword sqlOption Ansi_blanks +syn keyword sqlOption Ansi_close_cursors_on_rollback +syn keyword sqlOption Ansi_permissions +syn keyword sqlOption Ansi_substring +syn keyword sqlOption Ansi_update_constraints +syn keyword sqlOption Ansinull +syn keyword sqlOption Auditing +syn keyword sqlOption Auditing_options +syn keyword sqlOption Auto_commit_on_create_local_temp_index +syn keyword sqlOption Background_priority +syn keyword sqlOption Blocking +syn keyword sqlOption Blocking_others_timeout +syn keyword sqlOption Blocking_timeout +syn keyword sqlOption Chained +syn keyword sqlOption Checkpoint_time +syn keyword sqlOption Cis_option +syn keyword sqlOption Cis_rowset_size +syn keyword sqlOption Close_on_endtrans +syn keyword sqlOption Collect_statistics_on_dml_updates +syn keyword sqlOption Conn_auditing +syn keyword sqlOption Connection_authentication +syn keyword sqlOption Continue_after_raiserror +syn keyword sqlOption Conversion_error +syn keyword sqlOption Cooperative_commit_timeout +syn keyword sqlOption Cooperative_commits +syn keyword sqlOption Database_authentication +syn keyword sqlOption Date_format +syn keyword sqlOption Date_order +syn keyword sqlOption db_publisher +syn keyword sqlOption Debug_messages +syn keyword sqlOption Dedicated_task +syn keyword sqlOption Default_dbspace +syn keyword sqlOption Default_timestamp_increment +syn keyword sqlOption Delayed_commit_timeout +syn keyword sqlOption Delayed_commits +syn keyword sqlOption Divide_by_zero_error +syn keyword sqlOption Escape_character +syn keyword sqlOption Exclude_operators +syn keyword sqlOption Extended_join_syntax +syn keyword sqlOption Extern_login_credentials +syn keyword sqlOption Fire_triggers +syn keyword sqlOption First_day_of_week +syn keyword sqlOption For_xml_null_treatment +syn keyword sqlOption Force_view_creation +syn keyword sqlOption Global_database_id +syn keyword sqlOption Http_session_timeout +syn keyword sqlOption Http_connection_pool_basesize +syn keyword sqlOption Http_connection_pool_timeout +syn keyword sqlOption Integrated_server_name +syn keyword sqlOption Isolation_level +syn keyword sqlOption Java_class_path +syn keyword sqlOption Java_location +syn keyword sqlOption Java_main_userid +syn keyword sqlOption Java_vm_options +syn keyword sqlOption Lock_rejected_rows +syn keyword sqlOption Log_deadlocks +syn keyword sqlOption Login_mode +syn keyword sqlOption Login_procedure +syn keyword sqlOption Materialized_view_optimization +syn keyword sqlOption Max_client_statements_cached +syn keyword sqlOption Max_cursor_count +syn keyword sqlOption Max_hash_size +syn keyword sqlOption Max_plans_cached +syn keyword sqlOption Max_priority +syn keyword sqlOption Max_query_tasks +syn keyword sqlOption Max_recursive_iterations +syn keyword sqlOption Max_statement_count +syn keyword sqlOption Max_temp_space +syn keyword sqlOption Min_password_length +syn keyword sqlOption Min_role_admins +syn keyword sqlOption Nearest_century +syn keyword sqlOption Non_keywords +syn keyword sqlOption Odbc_describe_binary_as_varbinary +syn keyword sqlOption Odbc_distinguish_char_and_varchar +syn keyword sqlOption Oem_string +syn keyword sqlOption On_charset_conversion_failure +syn keyword sqlOption On_tsql_error +syn keyword sqlOption Optimization_goal +syn keyword sqlOption Optimization_level +syn keyword sqlOption Optimization_workload +syn keyword sqlOption Pinned_cursor_percent_of_cache +syn keyword sqlOption Post_login_procedure +syn keyword sqlOption Precision +syn keyword sqlOption Prefetch +syn keyword sqlOption Preserve_source_format +syn keyword sqlOption Prevent_article_pkey_update +syn keyword sqlOption Priority +syn keyword sqlOption Progress_messages +syn keyword sqlOption Query_mem_timeout +syn keyword sqlOption Quoted_identifier +syn keyword sqlOption Read_past_deleted +syn keyword sqlOption Recovery_time +syn keyword sqlOption Remote_idle_timeout +syn keyword sqlOption Replicate_all +syn keyword sqlOption Request_timeout +syn keyword sqlOption Reserved_keywords +syn keyword sqlOption Return_date_time_as_string +syn keyword sqlOption Rollback_on_deadlock +syn keyword sqlOption Row_counts +syn keyword sqlOption Scale +syn keyword sqlOption Secure_feature_key +syn keyword sqlOption Sort_collation +syn keyword sqlOption Sql_flagger_error_level +syn keyword sqlOption Sql_flagger_warning_level +syn keyword sqlOption String_rtruncation +syn keyword sqlOption st_geometry_asbinary_format +syn keyword sqlOption st_geometry_astext_format +syn keyword sqlOption st_geometry_asxml_format +syn keyword sqlOption st_geometry_describe_type +syn keyword sqlOption st_geometry_interpolation +syn keyword sqlOption st_geometry_on_invalid +syn keyword sqlOption Subsume_row_locks +syn keyword sqlOption Suppress_tds_debugging +syn keyword sqlOption Synchronize_mirror_on_commit +syn keyword sqlOption Tds_empty_string_is_null +syn keyword sqlOption Temp_space_limit_check +syn keyword sqlOption Time_format +syn keyword sqlOption Time_zone_adjustment +syn keyword sqlOption Timestamp_format +syn keyword sqlOption Timestamp_with_time_zone_format +syn keyword sqlOption Truncate_timestamp_values +syn keyword sqlOption Tsql_outer_joins +syn keyword sqlOption Tsql_variables +syn keyword sqlOption Updatable_statement_isolation +syn keyword sqlOption Update_statistics +syn keyword sqlOption Upgrade_database_capability +syn keyword sqlOption User_estimates +syn keyword sqlOption Uuid_has_hyphens +syn keyword sqlOption Verify_password_function +syn keyword sqlOption Wait_for_commit +syn keyword sqlOption Webservice_namespace_host +syn keyword sqlOption Webservice_sessionid_name + +" Strings and characters: +syn region sqlString start=+"+ end=+"+ contains=@Spell +syn region sqlString start=+'+ end=+'+ contains=@Spell + +" Numbers: +syn match sqlNumber "-\=\<\d*\.\=[0-9_]\>" + +" Comments: +syn region sqlDashComment start=/--/ end=/$/ contains=@Spell +syn region sqlSlashComment start=/\/\// end=/$/ contains=@Spell +syn region sqlMultiComment start="/\*" end="\*/" contains=sqlMultiComment,@Spell +syn cluster sqlComment contains=sqlDashComment,sqlSlashComment,sqlMultiComment,@Spell +syn sync ccomment sqlComment +syn sync ccomment sqlDashComment +syn sync ccomment sqlSlashComment + +hi def link sqlDashComment Comment +hi def link sqlSlashComment Comment +hi def link sqlMultiComment Comment +hi def link sqlNumber Number +hi def link sqlOperator Operator +hi def link sqlSpecial Special +hi def link sqlKeyword Keyword +hi def link sqlStatement Statement +hi def link sqlString String +hi def link sqlType Type +hi def link sqlFunction Function +hi def link sqlOption PreProc + +let b:current_syntax = "sqlanywhere" + +" vim:sw=4: diff --git a/.config/vim/syntax/sqlforms.vim b/.config/vim/syntax/sqlforms.vim new file mode 100644 index 0000000..6077dd1 --- /dev/null +++ b/.config/vim/syntax/sqlforms.vim @@ -0,0 +1,152 @@ +" Vim syntax file +" Language: SQL*Forms (Oracle 7), based on sql.vim (vim5.0) +" Maintainer: Austin Ziegler (austin@halostatue.ca) +" Last Change: 2003 May 11 +" Prev Change: 19980710 +" URL: http://www.halostatue.ca/vim/syntax/proc.vim +" +" TODO Find a new maintainer who knows SQL*Forms. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syntax case ignore + +setlocal iskeyword=a-z,A-Z,48-57,_,.,-,> + + + " The SQL reserved words, defined as keywords. +syntax match sqlTriggers /on-.*$/ +syntax match sqlTriggers /key-.*$/ +syntax match sqlTriggers /post-.*$/ +syntax match sqlTriggers /pre-.*$/ +syntax match sqlTriggers /user-.*$/ + +syntax keyword sqlSpecial null false true + +syntax keyword sqlProcedure abort_query anchor_view bell block_menu break call +syntax keyword sqlProcedure call_input call_query clear_block clear_eol +syntax keyword sqlProcedure clear_field clear_form clear_record commit_form +syntax keyword sqlProcedure copy count_query create_record default_value +syntax keyword sqlProcedure delete_record display_error display_field down +syntax keyword sqlProcedure duplicate_field duplicate_record edit_field +syntax keyword sqlProcedure enter enter_query erase execute_query +syntax keyword sqlProcedure execute_trigger exit_form first_Record go_block +syntax keyword sqlProcedure go_field go_record help hide_menu hide_page host +syntax keyword sqlProcedure last_record list_values lock_record message +syntax keyword sqlProcedure move_view new_form next_block next_field next_key +syntax keyword sqlProcedure next_record next_set pause post previous_block +syntax keyword sqlProcedure previous_field previous_record print redisplay +syntax keyword sqlProcedure replace_menu resize_view scroll_down scroll_up +syntax keyword sqlProcedure set_field show_keys show_menu show_page +syntax keyword sqlProcedure synchronize up user_exit + +syntax keyword sqlFunction block_characteristic error_code error_text +syntax keyword sqlFunction error_type field_characteristic form_failure +syntax keyword sqlFunction form_fatal form_success name_in + +syntax keyword sqlParameters hide no_hide replace no_replace ask_commit +syntax keyword sqlParameters do_commit no_commit no_validate all_records +syntax keyword sqlParameters for_update no_restrict restrict no_screen +syntax keyword sqlParameters bar full_screen pull_down auto_help auto_skip +syntax keyword sqlParameters fixed_length enterable required echo queryable +syntax keyword sqlParameters updateable update_null upper_case attr_on +syntax keyword sqlParameters attr_off base_table first_field last_field +syntax keyword sqlParameters datatype displayed display_length field_length +syntax keyword sqlParameters list page primary_key query_length x_pos y_pos + +syntax match sqlSystem /system\.block_status/ +syntax match sqlSystem /system\.current_block/ +syntax match sqlSystem /system\.current_field/ +syntax match sqlSystem /system\.current_form/ +syntax match sqlSystem /system\.current_value/ +syntax match sqlSystem /system\.cursor_block/ +syntax match sqlSystem /system\.cursor_field/ +syntax match sqlSystem /system\.cursor_record/ +syntax match sqlSystem /system\.cursor_value/ +syntax match sqlSystem /system\.form_status/ +syntax match sqlSystem /system\.last_query/ +syntax match sqlSystem /system\.last_record/ +syntax match sqlSystem /system\.message_level/ +syntax match sqlSystem /system\.record_status/ +syntax match sqlSystem /system\.trigger_block/ +syntax match sqlSystem /system\.trigger_field/ +syntax match sqlSystem /system\.trigger_record/ +syntax match sqlSystem /\$\$date\$\$/ +syntax match sqlSystem /\$\$time\$\$/ + +syntax keyword sqlKeyword accept access add as asc by check cluster column +syntax keyword sqlKeyword compress connect current decimal default +syntax keyword sqlKeyword desc exclusive file for from group +syntax keyword sqlKeyword having identified immediate increment index +syntax keyword sqlKeyword initial into is level maxextents mode modify +syntax keyword sqlKeyword nocompress nowait of offline on online start +syntax keyword sqlKeyword successful synonym table to trigger uid +syntax keyword sqlKeyword unique user validate values view whenever +syntax keyword sqlKeyword where with option order pctfree privileges +syntax keyword sqlKeyword public resource row rowlabel rownum rows +syntax keyword sqlKeyword session share size smallint sql\*forms_version +syntax keyword sqlKeyword terse define form name title procedure begin +syntax keyword sqlKeyword default_menu_application trigger block field +syntax keyword sqlKeyword enddefine declare exception raise when cursor +syntax keyword sqlKeyword definition base_table pragma +syntax keyword sqlKeyword column_name global trigger_type text description +syntax match sqlKeyword "<<<" +syntax match sqlKeyword ">>>" + +syntax keyword sqlOperator not and or out to_number to_date message erase +syntax keyword sqlOperator in any some all between exists substr nvl +syntax keyword sqlOperator exception_init +syntax keyword sqlOperator like escape trunc lpad rpad sum +syntax keyword sqlOperator union intersect minus to_char greatest +syntax keyword sqlOperator prior distinct decode least avg +syntax keyword sqlOperator sysdate true false field_characteristic +syntax keyword sqlOperator display_field call host + +syntax keyword sqlStatement alter analyze audit comment commit create +syntax keyword sqlStatement delete drop explain grant insert lock noaudit +syntax keyword sqlStatement rename revoke rollback savepoint select set +syntax keyword sqlStatement truncate update if elsif loop then +syntax keyword sqlStatement open fetch close else end + +syntax keyword sqlType char character date long raw mlslabel number rowid +syntax keyword sqlType varchar varchar2 float integer boolean global + +syntax keyword sqlCodes sqlcode no_data_found too_many_rows others +syntax keyword sqlCodes form_trigger_failure notfound found +syntax keyword sqlCodes validate no_commit + + " Comments: +syntax region sqlComment start="/\*" end="\*/" +syntax match sqlComment "--.*" + + " Strings and characters: +syntax region sqlString start=+"+ skip=+\\\\\|\\"+ end=+"+ +syntax region sqlString start=+'+ skip=+\\\\\|\\"+ end=+'+ + + " Numbers: +syntax match sqlNumber "-\=\<[0-9]*\.\=[0-9_]\>" + +syntax sync ccomment sqlComment + + +hi def link sqlComment Comment +hi def link sqlKeyword Statement +hi def link sqlNumber Number +hi def link sqlOperator Statement +hi def link sqlProcedure Statement +hi def link sqlFunction Statement +hi def link sqlSystem Identifier +hi def link sqlSpecial Special +hi def link sqlStatement Statement +hi def link sqlString String +hi def link sqlType Type +hi def link sqlCodes Identifier +hi def link sqlTriggers PreProc + + +let b:current_syntax = "sqlforms" + +" vim: ts=8 sw=4 diff --git a/.config/vim/syntax/sqlhana.vim b/.config/vim/syntax/sqlhana.vim new file mode 100644 index 0000000..2e334bb --- /dev/null +++ b/.config/vim/syntax/sqlhana.vim @@ -0,0 +1,290 @@ +" Vim syntax file +" Language: SQL, SAP HANA In Memory Database +" Maintainer: David Fishburn +" Last Change: 2012 Oct 23 +" Version: SP4 b (Q2 2012) +" Homepage: http://www.vim.org/scripts/script.php?script_id=4275 + +" Description: Updated to SAP HANA SP4 +" +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" The SQL reserved words, defined as keywords. +" These were pulled from the following SQL reference: +" http://help.sap.com/hana/hana_sql_en.pdf +" An easy approach is to copy all text from the PDF +" into a Vim buffer. The keywords are in UPPER case, +" so you can run the following commands to be left with +" mainly the UPPER case words: +" 1. Delete all words that do not begin with a Capital +" %s/\(\<[^A-Z]\w*\>\)//g +" 2. Remove all words where the 2nd letter is not a Capital +" %s/\(\<[A-Z][^A-Z]\w*\>\)//g +" 3. Remove all non-word (or space) characters +" %s/[^0-9A-Za-z_ ]*//g +" 4. Remove some known words +" %s/\<\(SAP\|HANA\|OK\|AG\|IBM\|DB2\|AIX\|POWER\d\+\|UNIX\)\>//g +" 5. Remove blank lines and trailing spaces +" %s/\s\+$//g +" %s/^\s\+//g +" %s/^$\n//g +" 6. Convert spaces to newlines remove single character +" %s/[ ]\+/\r/g +" %g/^\w$/d +" 7. Sort and remove duplicates +" :sort +" :Uniq +" 8. Use the WhatsMissing plugin against the sqlhana.vim file. +" 9. Generated a file of all UPPER cased words which should not +" be in the syntax file. These items should be removed +" from the list in step 7. You can use WhatsNotMissing +" between step 7 and this new file to weed out the words +" we know are not syntax related. +" 10. Use the WhatsMissingRemoveMatches to remove the words +" from step 9. + +syn keyword sqlSpecial false null true + +" Supported Functions for Date/Time types +syn keyword sqlFunction ADD_DAYS ADD_MONTHS ADD_SECONDS ADD_YEARS COALESCE +syn keyword sqlFunction CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_UTCDATE +syn keyword sqlFunction CURRENT_UTCTIME CURRENT_UTCTIMESTAMP +syn keyword sqlFunction DAYNAME DAYOFMONTH DAYOFYEAR DAYS_BETWEEN EXTRACT +syn keyword sqlFunction GREATEST HOUR IFNULL ISOWEEK LAST_DAY LEAST LOCALTOUTC +syn keyword sqlFunction MINUTE MONTH MONTHNAME NEXT_DAY NOW QUARTER SECOND +syn keyword sqlFunction SECONDS_BETWEEN UTCTOLOCAL WEEK WEEKDAY YEAR + +syn keyword sqlFunction TO_CHAR TO_DATE TO_DATS TO_NCHAR TO_TIME TO_TIMESTAMP UTCTOLOCAL + +" Aggregate +syn keyword sqlFunction COUNT MIN MAX SUM AVG STDDEV VAR + +" Datatype conversion +syn keyword sqlFunction CAST TO_ALPHANUM TO_BIGINT TO_BINARY TO_BLOB TO_CHAR TO_CLOB +syn keyword sqlFunction TO_DATE TO_DATS TO_DECIMAL TO_DOUBLE TO_INT TO_INTEGER TO_NCHAR +syn keyword sqlFunction TO_NCLOB TO_NVARCHAR TO_REAL TO_SECONDDATE TO_SMALLDECIMAL +syn keyword sqlFunction TO_SMALLINT TO_TIME TO_TIMESTAMP TO_TINYINT TO_VARCHAR TO_VARBINARY + +" Number functions +syn keyword sqlFunction ABS ACOS ASIN ATAN ATAN2 BINTOHEX BITAND CEIL COS COSH COT +syn keyword sqlFunction EXP FLOOR GREATEST HEXTOBIN LEAST LN LOG MOD POWER ROUND +syn keyword sqlFunction SIGN SIN SINH SQRT TAN TANH UMINUS + +" String functions +syn keyword sqlFunction ASCII CHAR CONCAT LCASE LENGTH LOCATE LOWER LPAD LTRIM +syn keyword sqlFunction NCHAR REPLACE RPAD RTRIM SUBSTR_AFTER SUBSTR_BEFORE +syn keyword sqlFunction SUBSTRING TRIM UCASE UNICODE UPPER + +" Miscellaneous functions +syn keyword sqlFunction COALESCE CURRENT_CONNECTION CURRENT_SCHEMA CURRENT_USER +syn keyword sqlFunction GROUPING_ID IFNULL MAP NULLIF SESSION_CONTEXT SESSION_USER SYSUUIDSQL +syn keyword sqlFunction GET_NUM_SERVERS + + +" sp_ procedures +" syn keyword sqlFunction sp_addalias + + +" Reserved keywords +syn keyword sqlkeyword ALL AS AT BEFORE +syn keyword sqlkeyword BEGIN BOTH BY +syn keyword sqlkeyword CONDITION +syn keyword sqlkeyword CURRVAL CURSOR DECLARE +syn keyword sqlkeyword DISTINCT DO ELSE ELSEIF ELSIF +syn keyword sqlkeyword END EXCEPTION EXEC +syn keyword sqlkeyword FOR FROM GROUP +syn keyword sqlkeyword HAVING IN +syn keyword sqlkeyword INOUT INTO IS +syn keyword sqlkeyword LEADING +syn keyword sqlkeyword LOOP MINUS NATURAL NEXTVAL +syn keyword sqlkeyword OF ON ORDER OUT +syn keyword sqlkeyword PRIOR RETURN RETURNS REVERSE +syn keyword sqlkeyword ROWID SELECT +syn keyword sqlkeyword SQL START STOP SYSDATE +syn keyword sqlkeyword SYSTIME SYSTIMESTAMP SYSUUID +syn keyword sqlkeyword TRAILING USING UTCDATE +syn keyword sqlkeyword UTCTIME UTCTIMESTAMP VALUES +syn keyword sqlkeyword WHILE +syn keyword sqlkeyword ANY SOME EXISTS ESCAPE + +" IF keywords +syn keyword sqlkeyword IF + +" CASE keywords +syn keyword sqlKeyword WHEN THEN + +" Syntax rules common to TEXT and SHORTTEXT keywords +syn keyword sqlKeyword LANGUAGE DETECTION LINGUISTIC +syn keyword sqlkeyword MIME TYPE +syn keyword sqlkeyword EXACT WEIGHT FUZZY FUZZINESSTHRESHOLD SEARCH +syn keyword sqlkeyword PHRASE INDEX RATIO REBUILD +syn keyword sqlkeyword CONFIGURATION +syn keyword sqlkeyword SEARCH ONLY +syn keyword sqlkeyword FAST PREPROCESS +syn keyword sqlkeyword SYNC SYNCHRONOUS ASYNC ASYNCHRONOUS FLUSH QUEUE +syn keyword sqlkeyword EVERY AFTER MINUTES DOCUMENTS SUSPEND + +" Statement keywords (i.e. after ALTER or CREATE) +syn keyword sqlkeyword AUDIT POLICY +syn keyword sqlkeyword FULLTEXT +syn keyword sqlkeyword SEQUENCE RESTART +syn keyword sqlkeyword TABLE +syn keyword sqlkeyword PROCEDURE STATISTICS +syn keyword sqlkeyword SCHEMA +syn keyword sqlkeyword SYNONYM +syn keyword sqlkeyword VIEW +syn keyword sqlkeyword COLUMN +syn keyword sqlkeyword SYSTEM LICENSE +syn keyword sqlkeyword SESSION +syn keyword sqlkeyword CANCEL WORK +syn keyword sqlkeyword PLAN CACHE +syn keyword sqlkeyword LOGGING NOLOGGING RETENTION +syn keyword sqlkeyword RECONFIGURE SERVICE +syn keyword sqlkeyword RESET MONITORING +syn keyword sqlkeyword SAVE DURATION PERFTRACE FUNCTION_PROFILER +syn keyword sqlkeyword SAVEPOINT +syn keyword sqlkeyword USER +syn keyword sqlkeyword ROLE +syn keyword sqlkeyword ASC DESC +syn keyword sqlkeyword OWNED +syn keyword sqlkeyword DEPENDENCIES SCRAMBLE + +" Create sequence +syn keyword sqlkeyword INCREMENT MAXVALUE MINVALUE CYCLE + +" Create table +syn keyword sqlkeyword HISTORY GLOBAL LOCAL TEMPORARY + +" Create trigger +syn keyword sqlkeyword TRIGGER REFERENCING EACH DEFAULT +syn keyword sqlkeyword SIGNAL RESIGNAL MESSAGE_TEXT OLD NEW +syn keyword sqlkeyword EXIT HANDLER SQL_ERROR_CODE +syn keyword sqlkeyword TARGET CONDITION SIGNAL + +" Alter table +syn keyword sqlkeyword ADD DROP MODIFY GENERATED ALWAYS +syn keyword sqlkeyword UNIQUE BTREE CPBTREE PRIMARY KEY +syn keyword sqlkeyword CONSTRAINT PRELOAD NONE +syn keyword sqlkeyword ROW THREADS BATCH +syn keyword sqlkeyword MOVE PARTITION TO LOCATION PHYSICAL OTHERS +syn keyword sqlkeyword ROUNDROBIN PARTITIONS HASH RANGE VALUE +syn keyword sqlkeyword PERSISTENT DELTA AUTO AUTOMERGE + +" Create audit policy +syn keyword sqlkeyword AUDITING SUCCESSFUL UNSUCCESSFUL +syn keyword sqlkeyword PRIVILEGE STRUCTURED CHANGE LEVEL +syn keyword sqlkeyword EMERGENCY ALERT CRITICAL WARNING INFO + +" Privileges +syn keyword sqlkeyword DEBUG EXECUTE + +" Schema +syn keyword sqlkeyword CASCADE RESTRICT PARAMETERS SCAN + +" Traces +syn keyword sqlkeyword CLIENT CRASHDUMP EMERGENCYDUMP +syn keyword sqlkeyword INDEXSERVER NAMESERVER DAEMON +syn keyword sqlkeyword CLEAR REMOVE TRACES + +" Reclaim +syn keyword sqlkeyword RECLAIM DATA VOLUME VERSION SPACE DEFRAGMENT SPARSIFY + +" Join +syn keyword sqlkeyword INNER OUTER LEFT RIGHT FULL CROSS JOIN +syn keyword sqlkeyword GROUPING SETS ROLLUP CUBE +syn keyword sqlkeyword BEST LIMIT OFFSET +syn keyword sqlkeyword WITH SUBTOTAL BALANCE TOTAL +syn keyword sqlkeyword TEXT_FILTER FILL UP SORT MATCHES TOP +syn keyword sqlkeyword RESULT OVERVIEW PREFIX MULTIPLE RESULTSETS + +" Lock +syn keyword sqlkeyword EXCLUSIVE MODE NOWAIT + +" Transaction +syn keyword sqlkeyword TRANSACTION ISOLATION READ COMMITTED +syn keyword sqlkeyword REPEATABLE SERIALIZABLE WRITE + +" Saml +syn keyword sqlkeyword SAML ASSERTION PROVIDER SUBJECT ISSUER + +" User +syn keyword sqlkeyword PASSWORD IDENTIFIED EXTERNALLY ATTEMPTS ATTEMPTS +syn keyword sqlkeyword ENABLE DISABLE OFF LIFETIME FORCE DEACTIVATE +syn keyword sqlkeyword ACTIVATE IDENTITY KERBEROS + +" Grant +syn keyword sqlkeyword ADMIN BACKUP CATALOG SCENARIO INIFILE MONITOR +syn keyword sqlkeyword OPTIMIZER OPTION +syn keyword sqlkeyword RESOURCE STRUCTUREDPRIVILEGE TRACE + +" Import +syn keyword sqlkeyword CSV FILE CONTROL NO CHECK SKIP FIRST LIST +syn keyword sqlkeyword RECORD DELIMITED FIELD OPTIONALLY ENCLOSED FORMAT + +" Roles +syn keyword sqlkeyword PUBLIC CONTENT_ADMIN MODELING MONITORING + +" Miscellaneous +syn keyword sqlkeyword APPLICATION BINARY IMMEDIATE COREFILE SECURITY DEFINER +syn keyword sqlkeyword DUMMY INVOKER MATERIALIZED MESSEGE_TEXT PARAMETER PARAMETERS +syn keyword sqlkeyword PART +syn keyword sqlkeyword CONSTANT SQLEXCEPTION SQLWARNING + +syn keyword sqlOperator WHERE BETWEEN LIKE NULL CONTAINS +syn keyword sqlOperator AND OR NOT CASE +syn keyword sqlOperator UNION INTERSECT EXCEPT + +syn keyword sqlStatement ALTER CALL CALLS CREATE DROP RENAME TRUNCATE +syn keyword sqlStatement DELETE INSERT UPDATE EXPLAIN +syn keyword sqlStatement MERGE REPLACE UPSERT SELECT +syn keyword sqlStatement SET UNSET LOAD UNLOAD +syn keyword sqlStatement CONNECT DISCONNECT COMMIT LOCK ROLLBACK +syn keyword sqlStatement GRANT REVOKE +syn keyword sqlStatement EXPORT IMPORT + + +syn keyword sqlType DATE TIME SECONDDATE TIMESTAMP TINYINT SMALLINT +syn keyword sqlType INT INTEGER BIGINT SMALLDECIMAL DECIMAL +syn keyword sqlType REAL DOUBLE FLOAT +syn keyword sqlType VARCHAR NVARCHAR ALPHANUM SHORTTEXT VARBINARY +syn keyword sqlType BLOB CLOB NCLOB TEXT DAYDATE + +syn keyword sqlOption Webservice_namespace_host + +" Strings and characters: +syn region sqlString start=+"+ end=+"+ contains=@Spell +syn region sqlString start=+'+ end=+'+ contains=@Spell + +" Numbers: +syn match sqlNumber "-\=\<\d*\.\=[0-9_]\>" + +" Comments: +syn region sqlDashComment start=/--/ end=/$/ contains=@Spell +syn region sqlSlashComment start=/\/\// end=/$/ contains=@Spell +syn region sqlMultiComment start="/\*" end="\*/" contains=sqlMultiComment,@Spell +syn cluster sqlComment contains=sqlDashComment,sqlSlashComment,sqlMultiComment,@Spell +syn sync ccomment sqlComment +syn sync ccomment sqlDashComment +syn sync ccomment sqlSlashComment + +hi def link sqlDashComment Comment +hi def link sqlSlashComment Comment +hi def link sqlMultiComment Comment +hi def link sqlNumber Number +hi def link sqlOperator Operator +hi def link sqlSpecial Special +hi def link sqlKeyword Keyword +hi def link sqlStatement Statement +hi def link sqlString String +hi def link sqlType Type +hi def link sqlFunction Function +hi def link sqlOption PreProc + +let b:current_syntax = "sqlhana" + +" vim:sw=4: diff --git a/.config/vim/syntax/sqlinformix.vim b/.config/vim/syntax/sqlinformix.vim new file mode 100644 index 0000000..71418c5 --- /dev/null +++ b/.config/vim/syntax/sqlinformix.vim @@ -0,0 +1,183 @@ +" Vim syntax file +" Informix Structured Query Language (SQL) and Stored Procedure Language (SPL) +" Language: SQL, SPL (Informix Dynamic Server 2000 v9.2) +" Maintainer: Dean Hill +" Last Change: 2004 Aug 30 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + + + +" === Comment syntax group === +syn region sqlComment start="{" end="}" contains=sqlTodo +syn match sqlComment "--.*$" contains=sqlTodo +syn sync ccomment sqlComment + + + +" === Constant syntax group === +" = Boolean subgroup = +syn keyword sqlBoolean true false +syn keyword sqlBoolean null +syn keyword sqlBoolean public user +syn keyword sqlBoolean current today +syn keyword sqlBoolean year month day hour minute second fraction + +" = String subgroup = +syn region sqlString start=+"+ end=+"+ +syn region sqlString start=+'+ end=+'+ + +" = Numbers subgroup = +syn match sqlNumber "-\=\<\d*\.\=[0-9_]\>" + + + +" === Statement syntax group === +" SQL +syn keyword sqlStatement allocate alter +syn keyword sqlStatement begin +syn keyword sqlStatement close commit connect create +syn keyword sqlStatement database deallocate declare delete describe disconnect drop +syn keyword sqlStatement execute fetch flush free get grant info insert +syn keyword sqlStatement load lock open output +syn keyword sqlStatement prepare put +syn keyword sqlStatement rename revoke rollback select set start stop +syn keyword sqlStatement truncate unload unlock update +syn keyword sqlStatement whenever +" SPL +syn keyword sqlStatement call continue define +syn keyword sqlStatement exit +syn keyword sqlStatement let +syn keyword sqlStatement return system trace + +" = Conditional subgroup = +" SPL +syn keyword sqlConditional elif else if then +syn keyword sqlConditional case +" Highlight "end if" with one or more separating spaces +syn match sqlConditional "end \+if" + +" = Repeat subgroup = +" SQL/SPL +" Handle SQL triggers' "for each row" clause and SPL "for" loop +syn match sqlRepeat "for\( \+each \+row\)\=" +" SPL +syn keyword sqlRepeat foreach while +" Highlight "end for", etc. with one or more separating spaces +syn match sqlRepeat "end \+for" +syn match sqlRepeat "end \+foreach" +syn match sqlRepeat "end \+while" + +" = Exception subgroup = +" SPL +syn match sqlException "on \+exception" +syn match sqlException "end \+exception" +syn match sqlException "end \+exception \+with \+resume" +syn match sqlException "raise \+exception" + +" = Keyword subgroup = +" SQL +syn keyword sqlKeyword aggregate add as authorization autofree by +syn keyword sqlKeyword cache cascade check cluster collation +syn keyword sqlKeyword column connection constraint cross +syn keyword sqlKeyword dataskip debug default deferred_prepare +syn keyword sqlKeyword descriptor diagnostics +syn keyword sqlKeyword each escape explain external +syn keyword sqlKeyword file foreign fragment from function +syn keyword sqlKeyword group having +syn keyword sqlKeyword immediate index inner into isolation +syn keyword sqlKeyword join key +syn keyword sqlKeyword left level log +syn keyword sqlKeyword mode modify mounting new no +syn keyword sqlKeyword object of old optical option +syn keyword sqlKeyword optimization order outer +syn keyword sqlKeyword pdqpriority pload primary procedure +syn keyword sqlKeyword references referencing release reserve +syn keyword sqlKeyword residency right role routine row +syn keyword sqlKeyword schedule schema scratch session set +syn keyword sqlKeyword statement statistics synonym +syn keyword sqlKeyword table temp temporary timeout to transaction trigger +syn keyword sqlKeyword using values view violations +syn keyword sqlKeyword where with work +" Highlight "on" (if it's not followed by some words we've already handled) +syn match sqlKeyword "on \+\(exception\)\@!" +" SPL +" Highlight "end" (if it's not followed by some words we've already handled) +syn match sqlKeyword "end \+\(if\|for\|foreach\|while\|exception\)\@!" +syn keyword sqlKeyword resume returning + +" = Operator subgroup = +" SQL +syn keyword sqlOperator not and or +syn keyword sqlOperator in is any some all between exists +syn keyword sqlOperator like matches +syn keyword sqlOperator union intersect +syn keyword sqlOperator distinct unique + + + +" === Identifier syntax group === +" = Function subgroup = +" SQL +syn keyword sqlFunction abs acos asin atan atan2 avg +syn keyword sqlFunction cardinality cast char_length character_length cos count +syn keyword sqlFunction exp filetoblob filetoclob hex +syn keyword sqlFunction initcap length logn log10 lower lpad +syn keyword sqlFunction min max mod octet_length pow range replace root round rpad +syn keyword sqlFunction sin sqrt stdev substr substring sum +syn keyword sqlFunction to_char tan to_date trim trunc upper variance + + + +" === Type syntax group === +" SQL +syn keyword sqlType blob boolean byte char character clob +syn keyword sqlType date datetime dec decimal double +syn keyword sqlType float int int8 integer interval list lvarchar +syn keyword sqlType money multiset nchar numeric nvarchar +syn keyword sqlType real serial serial8 smallfloat smallint +syn keyword sqlType text varchar varying + + + +" === Todo syntax group === +syn keyword sqlTodo TODO FIXME XXX DEBUG NOTE + + + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + + +" === Comment syntax group === +hi def link sqlComment Comment + +" === Constant syntax group === +hi def link sqlNumber Number +hi def link sqlBoolean Boolean +hi def link sqlString String + +" === Statement syntax group === +hi def link sqlStatement Statement +hi def link sqlConditional Conditional +hi def link sqlRepeat Repeat +hi def link sqlKeyword Keyword +hi def link sqlOperator Operator +hi def link sqlException Exception + +" === Identifier syntax group === +hi def link sqlFunction Function + +" === Type syntax group === +hi def link sqlType Type + +" === Todo syntax group === +hi def link sqlTodo Todo + + +let b:current_syntax = "sqlinformix" diff --git a/.config/vim/syntax/sqlj.vim b/.config/vim/syntax/sqlj.vim new file mode 100644 index 0000000..fd0f8f3 --- /dev/null +++ b/.config/vim/syntax/sqlj.vim @@ -0,0 +1,91 @@ +" Vim syntax file +" Language: sqlj +" Maintainer: Andreas Fischbach +" This file is based on sql.vim && java.vim (thanx) +" with a handful of additional sql words and still +" a subset of whatever standard +" Last change: 31th Dec 2001 + +" au BufNewFile,BufRead *.sqlj so $VIM/syntax/sqlj.vim + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Read the Java syntax to start with +source :p:h/java.vim + +" SQLJ extensions +" The SQL reserved words, defined as keywords. + +syn case ignore +syn keyword sqljSpecial null + +syn keyword sqljKeyword access add as asc by check cluster column +syn keyword sqljKeyword compress connect current decimal default +syn keyword sqljKeyword desc else exclusive file for from group +syn keyword sqljKeyword having identified immediate increment index +syn keyword sqljKeyword initial into is level maxextents mode modify +syn keyword sqljKeyword nocompress nowait of offline on online start +syn keyword sqljKeyword successful synonym table then to trigger uid +syn keyword sqljKeyword unique user validate values view whenever +syn keyword sqljKeyword where with option order pctfree privileges +syn keyword sqljKeyword public resource row rowlabel rownum rows +syn keyword sqljKeyword session share size smallint + +syn keyword sqljKeyword fetch database context iterator field join +syn keyword sqljKeyword foreign outer inner isolation left right +syn keyword sqljKeyword match primary key + +syn keyword sqljOperator not and or +syn keyword sqljOperator in any some all between exists +syn keyword sqljOperator like escape +syn keyword sqljOperator union intersect minus +syn keyword sqljOperator prior distinct +syn keyword sqljOperator sysdate + +syn keyword sqljOperator max min avg sum count hex + +syn keyword sqljStatement alter analyze audit comment commit create +syn keyword sqljStatement delete drop explain grant insert lock noaudit +syn keyword sqljStatement rename revoke rollback savepoint select set +syn keyword sqljStatement truncate update begin work + +syn keyword sqljType char character date long raw mlslabel number +syn keyword sqljType rowid varchar varchar2 float integer + +syn keyword sqljType byte text serial + + +" Strings and characters: +syn region sqljString start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn region sqljString start=+'+ skip=+\\\\\|\\"+ end=+'+ + +" Numbers: +syn match sqljNumber "-\=\<\d*\.\=[0-9_]\>" + +" PreProc +syn match sqljPre "#sql" + +" Comments: +syn region sqljComment start="/\*" end="\*/" +syn match sqlComment "--.*" + +syn sync ccomment sqljComment + + +" The default methods for highlighting. Can be overridden later. +hi def link sqljComment Comment +hi def link sqljKeyword sqljSpecial +hi def link sqljNumber Number +hi def link sqljOperator sqljStatement +hi def link sqljSpecial Special +hi def link sqljStatement Statement +hi def link sqljString String +hi def link sqljType Type +hi def link sqljPre PreProc + + +let b:current_syntax = "sqlj" + diff --git a/.config/vim/syntax/sqloracle.vim b/.config/vim/syntax/sqloracle.vim new file mode 100644 index 0000000..0907b48 --- /dev/null +++ b/.config/vim/syntax/sqloracle.vim @@ -0,0 +1,150 @@ +" Vim syntax file +" Language: SQL, PL/SQL (Oracle 11g) +" Maintainer: Christian Brabandt +" Repository: https://github.com/chrisbra/vim-sqloracle-syntax +" License: Vim +" Previous Maintainer: Paul Moore +" Last Change: 2018 June 24 + +" Changes: +" 02.04.2016: Support for when keyword +" 03.04.2016: Support for join related keywords +" 22.07.2016: Support Oracle Q-Quote-Syntax +" 25.07.2016: Support for Oracle N'-Quote syntax +" 22.06.2018: Remove skip part for sqlString (do not escape strings) +" (https://web.archive.org/web/20150922065035/https://mariadb.com/kb/en/sql-99/character-string-literals/) + +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" The SQL reserved words, defined as keywords. + +syn keyword sqlSpecial false null true + +syn keyword sqlKeyword access add as asc begin by case check cluster column +syn keyword sqlKeyword cache compress connect current cursor decimal default desc +syn keyword sqlKeyword else elsif end exception exclusive file for from +syn keyword sqlKeyword function group having identified if immediate increment +syn keyword sqlKeyword index initial initrans into is level link logging loop +syn keyword sqlKeyword maxextents maxtrans mode modify monitoring +syn keyword sqlKeyword nocache nocompress nologging noparallel nowait of offline on online start +syn keyword sqlKeyword parallel successful synonym table tablespace then to trigger uid +syn keyword sqlKeyword unique user validate values view when whenever +syn keyword sqlKeyword where with option order pctfree pctused privileges procedure +syn keyword sqlKeyword public resource return row rowlabel rownum rows +syn keyword sqlKeyword session share size smallint type using +syn keyword sqlKeyword join cross inner outer left right + +syn keyword sqlOperator not and or +syn keyword sqlOperator in any some all between exists +syn keyword sqlOperator like escape +syn keyword sqlOperator union intersect minus +syn keyword sqlOperator prior distinct +syn keyword sqlOperator sysdate out + +syn keyword sqlStatement analyze audit comment commit +syn keyword sqlStatement delete drop execute explain grant lock noaudit +syn keyword sqlStatement rename revoke rollback savepoint set +syn keyword sqlStatement truncate +" next ones are contained, so folding works. +syn keyword sqlStatement create update alter select insert contained + +syn keyword sqlType bfile blob boolean char character clob date datetime +syn keyword sqlType dec decimal float int integer long mlslabel nchar +syn keyword sqlType nclob number numeric nvarchar2 precision raw rowid +syn keyword sqlType smallint real timestamp urowid varchar varchar2 varray + +" Strings: +syn region sqlString matchgroup=Quote start=+n\?"+ end=+"+ +syn region sqlString matchgroup=Quote start=+n\?'+ end=+'+ +syn region sqlString matchgroup=Quote start=+n\?q'\z([^[(<{]\)+ end=+\z1'+ +syn region sqlString matchgroup=Quote start=+n\?q'<+ end=+>'+ +syn region sqlString matchgroup=Quote start=+n\?q'{+ end=+}'+ +syn region sqlString matchgroup=Quote start=+n\?q'(+ end=+)'+ +syn region sqlString matchgroup=Quote start=+n\?q'\[+ end=+]'+ + +" Numbers: +syn match sqlNumber "-\=\<\d*\.\=[0-9_]\>" + +" Comments: +syn region sqlComment start="/\*" end="\*/" contains=sqlTodo,@Spell fold +syn match sqlComment "--.*$" contains=sqlTodo,@Spell +syn match sqlComment "^rem.*$" contains=sqlTodo,@Spell + +" Setup Folding: +" this is a hack, to get certain statements folded. +" the keywords create/update/alter/select/insert need to +" have contained option. +syn region sqlFold start='^\s*\zs\c\(Create\|Update\|Alter\|Select\|Insert\)' end=';$\|^$' transparent fold contains=ALL + +syn sync ccomment sqlComment + +" Functions: +" (Oracle 11g) +" Aggregate Functions +syn keyword sqlFunction avg collect corr corr_s corr_k count covar_pop covar_samp cume_dist dense_rank first +syn keyword sqlFunction group_id grouping grouping_id last max median min percentile_cont percentile_disc percent_rank rank +syn keyword sqlFunction regr_slope regr_intercept regr_count regr_r2 regr_avgx regr_avgy regr_sxx regr_syy regr_sxy +syn keyword sqlFunction stats_binomial_test stats_crosstab stats_f_test stats_ks_test stats_mode stats_mw_test +syn keyword sqlFunction stats_one_way_anova stats_t_test_one stats_t_test_paired stats_t_test_indep stats_t_test_indepu +syn keyword sqlFunction stats_wsr_test stddev stddev_pop stddev_samp sum +syn keyword sqlFunction sys_xmlagg var_pop var_samp variance xmlagg +" Char Functions +syn keyword sqlFunction ascii chr concat initcap instr length lower lpad ltrim +syn keyword sqlFunction nls_initcap nls_lower nlssort nls_upper regexp_instr regexp_replace +syn keyword sqlFunction regexp_substr replace rpad rtrim soundex substr translate treat trim upper +" Comparison Functions +syn keyword sqlFunction greatest least +" Conversion Functions +syn keyword sqlFunction asciistr bin_to_num cast chartorowid compose convert +syn keyword sqlFunction decompose hextoraw numtodsinterval numtoyminterval rawtohex rawtonhex rowidtochar +syn keyword sqlFunction rowidtonchar scn_to_timestamp timestamp_to_scn to_binary_double to_binary_float +syn keyword sqlFunction to_char to_char to_char to_clob to_date to_dsinterval to_lob to_multi_byte +syn keyword sqlFunction to_nchar to_nchar to_nchar to_nclob to_number to_dsinterval to_single_byte +syn keyword sqlFunction to_timestamp to_timestamp_tz to_yminterval to_yminterval translate unistr +" DataMining Functions +syn keyword sqlFunction cluster_id cluster_probability cluster_set feature_id feature_set +syn keyword sqlFunction feature_value prediction prediction_bounds prediction_cost +syn keyword sqlFunction prediction_details prediction_probability prediction_set +" Datetime Functions +syn keyword sqlFunction add_months current_date current_timestamp dbtimezone extract +syn keyword sqlFunction from_tz last_day localtimestamp months_between new_time +syn keyword sqlFunction next_day numtodsinterval numtoyminterval round sessiontimezone +syn keyword sqlFunction sys_extract_utc sysdate systimestamp to_char to_timestamp +syn keyword sqlFunction to_timestamp_tz to_dsinterval to_yminterval trunc tz_offset +" Numeric Functions +syn keyword sqlFunction abs acos asin atan atan2 bitand ceil cos cosh exp +syn keyword sqlFunction floor ln log mod nanvl power remainder round sign +syn keyword sqlFunction sin sinh sqrt tan tanh trunc width_bucket +" NLS Functions +syn keyword sqlFunction ls_charset_decl_len nls_charset_id nls_charset_name +" Various Functions +syn keyword sqlFunction bfilename cardin coalesce collect decode dump empty_blob empty_clob +syn keyword sqlFunction lnnvl nullif nvl nvl2 ora_hash powermultiset powermultiset_by_cardinality +syn keyword sqlFunction sys_connect_by_path sys_context sys_guid sys_typeid uid user userenv vsizeality +" XML Functions +syn keyword sqlFunction appendchildxml deletexml depth extract existsnode extractvalue insertchildxml +syn keyword sqlFunction insertxmlbefore path sys_dburigen sys_xmlagg sys_xmlgen updatexml xmlagg xmlcast +syn keyword sqlFunction xmlcdata xmlcolattval xmlcomment xmlconcat xmldiff xmlelement xmlexists xmlforest +syn keyword sqlFunction xmlparse xmlpatch xmlpi xmlquery xmlroot xmlsequence xmlserialize xmltable xmltransform +" Todo: +syn keyword sqlTodo TODO FIXME XXX DEBUG NOTE contained + +" Define the default highlighting. +hi def link Quote Special +hi def link sqlComment Comment +hi def link sqlFunction Function +hi def link sqlKeyword sqlSpecial +hi def link sqlNumber Number +hi def link sqlOperator sqlStatement +hi def link sqlSpecial Special +hi def link sqlStatement Statement +hi def link sqlString String +hi def link sqlType Type +hi def link sqlTodo Todo + +let b:current_syntax = "sql" +" vim: ts=8 diff --git a/.config/vim/syntax/sqr.vim b/.config/vim/syntax/sqr.vim new file mode 100644 index 0000000..40b4835 --- /dev/null +++ b/.config/vim/syntax/sqr.vim @@ -0,0 +1,262 @@ +" Vim syntax file +" Language: Structured Query Report Writer (SQR) +" Maintainer: Nathan Stratton Treadway (nathanst at ontko dot com) +" URL: http://www.ontko.com/sqr/#editor_config_files +" +" Modification History: +" 2002-Apr-12: Updated for SQR v6.x +" 2002-Jul-30: Added { and } to iskeyword definition +" 2003-Oct-15: Allow "." in variable names +" highlight entire open '... literal when it contains +" "''" inside it (e.g. "'I can''t say" is treated +" as one open string, not one terminated and one open) +" {} variables can occur inside of '...' literals +" +" Thanks to the previous maintainer of this file, Jeff Lanzarotta: +" http://lanzarotta.tripod.com/vim.html +" jefflanzarotta at yahoo dot com + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +setlocal iskeyword=@,48-57,_,-,#,$,{,} + +syn case ignore + +" BEGIN GENERATED SECTION ============================================ + +" Generated by generate_vim_syntax.sqr at 2002/04/11 13:04 +" (based on the UltraEdit syntax file for SQR 6.1.4 +" found at http://www.ontko.com/sqr/#editor_config_files ) + +syn keyword sqrSection begin-footing begin-heading begin-procedure +syn keyword sqrSection begin-program begin-report begin-setup +syn keyword sqrSection end-footing end-heading end-procedure +syn keyword sqrSection end-program end-report end-setup + +syn keyword sqrParagraph alter-color-map alter-connection +syn keyword sqrParagraph alter-locale alter-printer alter-report +syn keyword sqrParagraph begin-document begin-execute begin-select +syn keyword sqrParagraph begin-sql declare-chart declare-image +syn keyword sqrParagraph declare-color-map declare-connection +syn keyword sqrParagraph declare-layout declare-printer +syn keyword sqrParagraph declare-report declare-procedure +syn keyword sqrParagraph declare-toc declare-variable end-declare +syn keyword sqrParagraph end-document end-select exit-select end-sql +syn keyword sqrParagraph load-lookup + +syn keyword sqrReserved #current-column #current-date #current-line +syn keyword sqrReserved #end-file #page-count #return-status +syn keyword sqrReserved #sql-count #sql-status #sqr-max-columns +syn keyword sqrReserved #sqr-max-lines #sqr-pid #sqr-toc-level +syn keyword sqrReserved #sqr-toc-page $sqr-database {sqr-database} +syn keyword sqrReserved $sqr-dbcs {sqr-dbcs} $sqr-encoding +syn keyword sqrReserved {sqr-encoding} $sqr-encoding-console +syn keyword sqrReserved {sqr-encoding-console} +syn keyword sqrReserved $sqr-encoding-database +syn keyword sqrReserved {sqr-encoding-database} +syn keyword sqrReserved $sqr-encoding-file-input +syn keyword sqrReserved {sqr-encoding-file-input} +syn keyword sqrReserved $sqr-encoding-file-output +syn keyword sqrReserved {sqr-encoding-file-output} +syn keyword sqrReserved $sqr-encoding-report-input +syn keyword sqrReserved {sqr-encoding-report-input} +syn keyword sqrReserved $sqr-encoding-report-output +syn keyword sqrReserved {sqr-encoding-report-output} +syn keyword sqrReserved $sqr-encoding-source {sqr-encoding-source} +syn keyword sqrReserved $sql-error $sqr-hostname {sqr-hostname} +syn keyword sqrReserved $sqr-locale $sqr-platform {sqr-platform} +syn keyword sqrReserved $sqr-program $sqr-report $sqr-toc-text +syn keyword sqrReserved $sqr-ver $username + +syn keyword sqrPreProc #define #else #end-if #endif #if #ifdef +syn keyword sqrPreProc #ifndef #include + +syn keyword sqrCommand add array-add array-divide array-multiply +syn keyword sqrCommand array-subtract ask break call clear-array +syn keyword sqrCommand close columns commit concat connect +syn keyword sqrCommand create-array create-color-palette date-time +syn keyword sqrCommand display divide do dollar-symbol else encode +syn keyword sqrCommand end-evaluate end-if end-while evaluate +syn keyword sqrCommand execute extract find get get-color goto +syn keyword sqrCommand graphic if input last-page let lookup +syn keyword sqrCommand lowercase mbtosbs money-symbol move +syn keyword sqrCommand multiply new-page new-report next-column +syn keyword sqrCommand next-listing no-formfeed open page-number +syn keyword sqrCommand page-size position print print-bar-code +syn keyword sqrCommand print-chart print-direct print-image +syn keyword sqrCommand printer-deinit printer-init put read +syn keyword sqrCommand rollback security set-color set-delay-print +syn keyword sqrCommand set-generations set-levels set-members +syn keyword sqrCommand sbtombs show stop string subtract toc-entry +syn keyword sqrCommand unstring uppercase use use-column +syn keyword sqrCommand use-printer-type use-procedure use-report +syn keyword sqrCommand while write + +syn keyword sqrParam 3d-effects after after-bold after-page +syn keyword sqrParam after-report after-toc and as at-end before +syn keyword sqrParam background batch-mode beep before-bold +syn keyword sqrParam before-page before-report before-toc blink +syn keyword sqrParam bold border bottom-margin box break by +syn keyword sqrParam caption center char char-size char-width +syn keyword sqrParam chars-inch chart-size checksum cl +syn keyword sqrParam clear-line clear-screen color color-palette +syn keyword sqrParam cs color_ data-array +syn keyword sqrParam data-array-column-count +syn keyword sqrParam data-array-column-labels +syn keyword sqrParam data-array-row-count data-labels date +syn keyword sqrParam date-edit-mask date-seperator +syn keyword sqrParam day-of-week-case day-of-week-full +syn keyword sqrParam day-of-week-short decimal decimal-seperator +syn keyword sqrParam default-numeric delay distinct dot-leader +syn keyword sqrParam edit-option-ad edit-option-am +syn keyword sqrParam edit-option-bc edit-option-na +syn keyword sqrParam edit-option-pm encoding entry erase-page +syn keyword sqrParam extent field fill fixed fixed_nolf float +syn keyword sqrParam font font-style font-type footing +syn keyword sqrParam footing-size foreground for-append +syn keyword sqrParam for-reading for-reports for-tocs +syn keyword sqrParam for-writing format formfeed from goto-top +syn keyword sqrParam group having heading heading-size height +syn keyword sqrParam horz-line image-size in indentation +syn keyword sqrParam init-string input-date-edit-mask insert +syn keyword sqrParam integer into item-color item-size key +syn keyword sqrParam layout left-margin legend legend-placement +syn keyword sqrParam legend-presentation legend-title level +syn keyword sqrParam line-height line-size line-width lines-inch +syn keyword sqrParam local locale loops max-columns max-lines +syn keyword sqrParam maxlen money money-edit-mask money-sign +syn keyword sqrParam money-sign-location months-case months-full +syn keyword sqrParam months-short name need newline newpage +syn keyword sqrParam no-advance nolf noline noprompt normal not +syn keyword sqrParam nowait number number-edit-mask on-break +syn keyword sqrParam on-error or order orientation page-depth +syn keyword sqrParam paper-size pie-segment-explode +syn keyword sqrParam pie-segment-percent-display +syn keyword sqrParam pie-segment-quantity-display pitch +syn keyword sqrParam point-markers point-size printer +syn keyword sqrParam printer-type quiet record reset-string +syn keyword sqrParam return_value reverse right-margin rows save +syn keyword sqrParam select size skip skiplines sort source +syn keyword sqrParam sqr-database sqr-platform startup-file +syn keyword sqrParam status stop sub-title symbol-set system +syn keyword sqrParam table text thousand-seperator +syn keyword sqrParam time-seperator times title to toc +syn keyword sqrParam top-margin type underline update using +syn keyword sqrParam value vary vert-line wait warn when +syn keyword sqrParam when-other where with x-axis-grid +syn keyword sqrParam x-axis-label x-axis-major-increment +syn keyword sqrParam x-axis-major-tick-marks x-axis-max-value +syn keyword sqrParam x-axis-min-value x-axis-minor-increment +syn keyword sqrParam x-axis-minor-tick-marks x-axis-rotate +syn keyword sqrParam x-axis-scale x-axis-tick-mark-placement xor +syn keyword sqrParam y-axis-grid y-axis-label +syn keyword sqrParam y-axis-major-increment +syn keyword sqrParam y-axis-major-tick-marks y-axis-max-value +syn keyword sqrParam y-axis-min-value y-axis-minor-increment +syn keyword sqrParam y-axis-minor-tick-marks y-axis-scale +syn keyword sqrParam y-axis-tick-mark-placement y2-type +syn keyword sqrParam y2-data-array y2-data-array-row-count +syn keyword sqrParam y2-data-array-column-count +syn keyword sqrParam y2-data-array-column-labels +syn keyword sqrParam y2-axis-color-palette y2-axis-label +syn keyword sqrParam y2-axis-major-increment +syn keyword sqrParam y2-axis-major-tick-marks y2-axis-max-value +syn keyword sqrParam y2-axis-min-value y2-axis-minor-increment +syn keyword sqrParam y2-axis-minor-tick-marks y2-axis-scale + +syn keyword sqrFunction abs acos asin atan array ascii asciic ceil +syn keyword sqrFunction cos cosh chr cond deg delete dateadd +syn keyword sqrFunction datediff datenow datetostr e10 exp edit +syn keyword sqrFunction exists floor getenv instr instrb isblank +syn keyword sqrFunction isnull log log10 length lengthb lengthp +syn keyword sqrFunction lengtht lower lpad ltrim mod nvl power rad +syn keyword sqrFunction round range replace roman rpad rtrim rename +syn keyword sqrFunction sign sin sinh sqrt substr substrb substrp +syn keyword sqrFunction substrt strtodate tan tanh trunc to_char +syn keyword sqrFunction to_multi_byte to_number to_single_byte +syn keyword sqrFunction transform translate unicode upper wrapdepth + +" END GENERATED SECTION ============================================== + +" Variables +syn match sqrVariable /\(\$\|#\|&\)\(\k\|\.\)*/ + + +" Debug compiler directives +syn match sqrPreProc /\s*#debug\a\=\(\s\|$\)/ +syn match sqrSubstVar /{\k*}/ + + +" Strings +" Note: if an undoubled ! is found, this is not a valid string +" (SQR will treat the end of the line as a comment) +syn match sqrString /'\(!!\|[^!']\)*'/ contains=sqrSubstVar +syn match sqrStrOpen /'\(!!\|''\|[^!']\)*$/ +" If we find a ' followed by an unmatched ! before a matching ', +" flag the error. +syn match sqrError /'\(!!\|[^'!]\)*![^!]/me=e-1 +syn match sqrError /'\(!!\|[^'!]\)*!$/ + +" Numbers: +syn match sqrNumber /-\=\<\d*\.\=[0-9_]\>/ + + + +" Comments: +" Handle comments that start with "!=" specially; they are only valid +" in the first column of the source line. Also, "!!" is only treated +" as a start-comment if there is only whitespace ahead of it on the line. + +syn keyword sqrTodo TODO FIXME XXX DEBUG NOTE ### +syn match sqrTodo /???/ + +" See also the sqrString section above for handling of ! characters +" inside of strings. (Those patterns override the ones below.) +syn match sqrComment /!\@ +" Last Change: 2005 Jun 12 +" URL: http://www.hampft.de/vim/syntax/squid.vim +" ThanksTo: Ilya Sher , +" Michael Dotzler + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" squid.conf syntax seems to be case insensitive +syn case ignore + +syn keyword squidTodo contained TODO +syn match squidComment "#.*$" contains=squidTodo,squidTag +syn match squidTag contained "TAG: .*$" + +" Lots & lots of Keywords! +syn keyword squidConf acl always_direct announce_host announce_period +syn keyword squidConf announce_port announce_to anonymize_headers +syn keyword squidConf append_domain as_whois_server auth_param_basic +syn keyword squidConf authenticate_children authenticate_program +syn keyword squidConf authenticate_ttl broken_posts buffered_logs +syn keyword squidConf cache_access_log cache_announce cache_dir +syn keyword squidConf cache_dns_program cache_effective_group +syn keyword squidConf cache_effective_user cache_host cache_host_acl +syn keyword squidConf cache_host_domain cache_log cache_mem +syn keyword squidConf cache_mem_high cache_mem_low cache_mgr +syn keyword squidConf cachemgr_passwd cache_peer cache_peer_access +syn keyword squidConf cache_replacement_policy cache_stoplist +syn keyword squidConf cache_stoplist_pattern cache_store_log cache_swap +syn keyword squidConf cache_swap_high cache_swap_log cache_swap_low +syn keyword squidConf client_db client_lifetime client_netmask +syn keyword squidConf connect_timeout coredump_dir dead_peer_timeout +syn keyword squidConf debug_options delay_access delay_class +syn keyword squidConf delay_initial_bucket_level delay_parameters +syn keyword squidConf delay_pools deny_info dns_children dns_defnames +syn keyword squidConf dns_nameservers dns_testnames emulate_httpd_log +syn keyword squidConf err_html_text fake_user_agent firewall_ip +syn keyword squidConf forwarded_for forward_snmpd_port fqdncache_size +syn keyword squidConf ftpget_options ftpget_program ftp_list_width +syn keyword squidConf ftp_passive ftp_user half_closed_clients +syn keyword squidConf header_access header_replace hierarchy_stoplist +syn keyword squidConf high_response_time_warning high_page_fault_warning +syn keyword squidConf htcp_port http_access http_anonymizer httpd_accel +syn keyword squidConf httpd_accel_host httpd_accel_port +syn keyword squidConf httpd_accel_uses_host_header +syn keyword squidConf httpd_accel_with_proxy http_port http_reply_access +syn keyword squidConf icp_access icp_hit_stale icp_port +syn keyword squidConf icp_query_timeout ident_lookup ident_lookup_access +syn keyword squidConf ident_timeout incoming_http_average +syn keyword squidConf incoming_icp_average inside_firewall ipcache_high +syn keyword squidConf ipcache_low ipcache_size local_domain local_ip +syn keyword squidConf logfile_rotate log_fqdn log_icp_queries +syn keyword squidConf log_mime_hdrs maximum_object_size +syn keyword squidConf maximum_single_addr_tries mcast_groups +syn keyword squidConf mcast_icp_query_timeout mcast_miss_addr +syn keyword squidConf mcast_miss_encode_key mcast_miss_port memory_pools +syn keyword squidConf memory_pools_limit memory_replacement_policy +syn keyword squidConf mime_table min_http_poll_cnt min_icp_poll_cnt +syn keyword squidConf minimum_direct_hops minimum_object_size +syn keyword squidConf minimum_retry_timeout miss_access negative_dns_ttl +syn keyword squidConf negative_ttl neighbor_timeout neighbor_type_domain +syn keyword squidConf netdb_high netdb_low netdb_ping_period +syn keyword squidConf netdb_ping_rate never_direct no_cache +syn keyword squidConf passthrough_proxy pconn_timeout pid_filename +syn keyword squidConf pinger_program positive_dns_ttl prefer_direct +syn keyword squidConf proxy_auth proxy_auth_realm query_icmp quick_abort +syn keyword squidConf quick_abort quick_abort_max quick_abort_min +syn keyword squidConf quick_abort_pct range_offset_limit read_timeout +syn keyword squidConf redirect_children redirect_program +syn keyword squidConf redirect_rewrites_host_header reference_age +syn keyword squidConf reference_age refresh_pattern reload_into_ims +syn keyword squidConf request_body_max_size request_size request_timeout +syn keyword squidConf shutdown_lifetime single_parent_bypass +syn keyword squidConf siteselect_timeout snmp_access +syn keyword squidConf snmp_incoming_address snmp_port source_ping +syn keyword squidConf ssl_proxy store_avg_object_size +syn keyword squidConf store_objects_per_bucket strip_query_terms +syn keyword squidConf swap_level1_dirs swap_level2_dirs +syn keyword squidConf tcp_incoming_address tcp_outgoing_address +syn keyword squidConf tcp_recv_bufsize test_reachability udp_hit_obj +syn keyword squidConf udp_hit_obj_size udp_incoming_address +syn keyword squidConf udp_outgoing_address unique_hostname +syn keyword squidConf unlinkd_program uri_whitespace useragent_log +syn keyword squidConf visible_hostname wais_relay wais_relay_host +syn keyword squidConf wais_relay_port + +syn keyword squidOpt proxy-only weight ttl no-query default +syn keyword squidOpt round-robin multicast-responder +syn keyword squidOpt on off all deny allow +syn keyword squidopt via parent no-digest heap lru realm +syn keyword squidopt children credentialsttl none disable +syn keyword squidopt offline_toggle diskd q1 q2 + +" Security Actions for cachemgr_passwd +syn keyword squidAction shutdown info parameter server_list +syn keyword squidAction client_list +syn match squidAction "stats/\(objects\|vm_objects\|utilization\|ipcache\|fqdncache\|dns\|redirector\|io\|reply_headers\|filedescriptors\|netdb\)" +syn match squidAction "log\(/\(status\|enable\|disable\|clear\)\)\=" +syn match squidAction "squid\.conf" + +" Keywords for the acl-config +syn keyword squidAcl url_regex urlpath_regex referer_regex port proto +syn keyword squidAcl req_mime_type rep_mime_type +syn keyword squidAcl method browser user src dst +syn keyword squidAcl time dstdomain ident snmp_community + +syn match squidNumber "\<\d\+\>" +syn match squidIP "\<\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}\>" +syn match squidStr "\(^\s*acl\s\+\S\+\s\+\(\S*_regex\|re[pq]_mime_type\|browser\|_domain\|user\)\+\s\+\)\@<=.*" contains=squidRegexOpt +syn match squidRegexOpt contained "\(^\s*acl\s\+\S\+\s\+\S\+\(_regex\|_mime_type\)\s\+\)\@<=[-+]i\s\+" + +" All config is in one line, so this has to be sufficient +" Make it fast like hell :) +syn sync minlines=3 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link squidTodo Todo +hi def link squidComment Comment +hi def link squidTag Special +hi def link squidConf Keyword +hi def link squidOpt Constant +hi def link squidAction String +hi def link squidNumber Number +hi def link squidIP Number +hi def link squidAcl Keyword +hi def link squidStr String +hi def link squidRegexOpt Special + + +let b:current_syntax = "squid" + +" vim: ts=8 diff --git a/.config/vim/syntax/squirrel.vim b/.config/vim/syntax/squirrel.vim new file mode 100644 index 0000000..85bdd87 --- /dev/null +++ b/.config/vim/syntax/squirrel.vim @@ -0,0 +1,51 @@ +" Vim syntax file +" Language: squirrel +" Current Maintainer: Matt Dunford (zenmatic@gmail.com) +" URL: https://github.com/zenmatic/vim-syntax-squirrel +" Last Change: 2023 Dec 08 + +" http://squirrel-lang.org/ + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" inform C syntax that the file was included from cpp.vim +let b:filetype_in_cpp_family = 1 + +" Read the C syntax to start with +runtime! syntax/c.vim +unlet b:current_syntax +unlet b:filetype_in_cpp_family + +" squirrel extensions +syn keyword squirrelStatement delete this in yield resume base clone +syn keyword squirrelAccess local +syn keyword cConstant null +syn keyword squirrelModifier static +syn keyword squirrelType bool instanceof typeof +syn keyword squirrelExceptions throw try catch +syn keyword squirrelStructure class function extends constructor +syn keyword squirrelBoolean true false +syn keyword squirrelRepeat foreach + +syn region squirrelMultiString start='@"' end='"$' end='";$'me=e-1 + +syn match squirrelShComment "^\s*#.*$" + +" Default highlighting +hi def link squirrelAccess squirrelStatement +hi def link squirrelExceptions Exception +hi def link squirrelStatement Statement +hi def link squirrelModifier Type +hi def link squirrelType Type +hi def link squirrelStructure Structure +hi def link squirrelBoolean Boolean +hi def link squirrelMultiString String +hi def link squirrelRepeat cRepeat +hi def link squirrelShComment Comment + +let b:current_syntax = "squirrel" + +" vim: ts=8 diff --git a/.config/vim/syntax/srec.vim b/.config/vim/syntax/srec.vim new file mode 100644 index 0000000..6ac22d9 --- /dev/null +++ b/.config/vim/syntax/srec.vim @@ -0,0 +1,83 @@ +" Vim syntax file +" Language: Motorola S-Record +" Maintainer: Markus Heidelberg +" Last Change: 2015 Feb 24 + +" Each record (line) is built as follows: +" +" field digits states +" +" +----------+ +" | start | 1 ('S') srecRecStart +" +----------+ +" | type | 1 srecRecType, (srecRecTypeUnknown) +" +----------+ +" | count | 2 srecByteCount +" +----------+ +" | address | 4/6/8 srecNoAddress, srecDataAddress, srecRecCount, srecStartAddress, (srecAddressFieldUnknown) +" +----------+ +" | data | 0..504/502/500 srecDataOdd, srecDataEven, (srecDataUnexpected) +" +----------+ +" | checksum | 2 srecChecksum +" +----------+ +" +" States in parentheses in the upper format description indicate that they +" should not appear in a valid file. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn match srecRecStart "^S" + +syn match srecRecTypeUnknown "^S." contains=srecRecStart +syn match srecRecType "^S[0-35-9]" contains=srecRecStart + +syn match srecByteCount "^S.[0-9a-fA-F]\{2}" contains=srecRecTypeUnknown nextgroup=srecAddressFieldUnknown,srecChecksum +syn match srecByteCount "^S[0-35-9][0-9a-fA-F]\{2}" contains=srecRecType + +syn match srecAddressFieldUnknown "[0-9a-fA-F]\{2}" contained nextgroup=srecAddressFieldUnknown,srecChecksum + +syn match srecNoAddress "^S0[0-9a-fA-F]\{6}" contains=srecByteCount nextgroup=srecDataOdd,srecChecksum +syn match srecDataAddress "^S1[0-9a-fA-F]\{6}" contains=srecByteCount nextgroup=srecDataOdd,srecChecksum +syn match srecDataAddress "^S2[0-9a-fA-F]\{8}" contains=srecByteCount nextgroup=srecDataOdd,srecChecksum +syn match srecDataAddress "^S3[0-9a-fA-F]\{10}" contains=srecByteCount nextgroup=srecDataOdd,srecChecksum +syn match srecRecCount "^S5[0-9a-fA-F]\{6}" contains=srecByteCount nextgroup=srecDataUnexpected,srecChecksum +syn match srecRecCount "^S6[0-9a-fA-F]\{8}" contains=srecByteCount nextgroup=srecDataUnexpected,srecChecksum +syn match srecStartAddress "^S7[0-9a-fA-F]\{10}" contains=srecByteCount nextgroup=srecDataUnexpected,srecChecksum +syn match srecStartAddress "^S8[0-9a-fA-F]\{8}" contains=srecByteCount nextgroup=srecDataUnexpected,srecChecksum +syn match srecStartAddress "^S9[0-9a-fA-F]\{6}" contains=srecByteCount nextgroup=srecDataUnexpected,srecChecksum + +" alternating highlight per byte for easier reading +syn match srecDataOdd "[0-9a-fA-F]\{2}" contained nextgroup=srecDataEven,srecChecksum +syn match srecDataEven "[0-9a-fA-F]\{2}" contained nextgroup=srecDataOdd,srecChecksum +" data bytes which should not exist +syn match srecDataUnexpected "[0-9a-fA-F]\{2}" contained nextgroup=srecDataUnexpected,srecChecksum +" Data digit pair regex usage also results in only highlighting the checksum +" if the number of data characters is even. + +syn match srecChecksum "[0-9a-fA-F]\{2}$" contained + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default methods for highlighting. Can be overridden later +hi def link srecRecStart srecRecType +hi def link srecRecTypeUnknown srecRecType +hi def link srecRecType WarningMsg +hi def link srecByteCount Constant +hi def srecAddressFieldUnknown term=italic cterm=italic gui=italic +hi def link srecNoAddress DiffAdd +hi def link srecDataAddress Comment +hi def link srecRecCount srecNoAddress +hi def link srecStartAddress srecDataAddress +hi def srecDataOdd term=bold cterm=bold gui=bold +hi def srecDataEven term=NONE cterm=NONE gui=NONE +hi def link srecDataUnexpected Error +hi def link srecChecksum DiffChange + + +let b:current_syntax = "srec" + +" vim: ts=8 diff --git a/.config/vim/syntax/srt.vim b/.config/vim/syntax/srt.vim new file mode 100644 index 0000000..12fb264 --- /dev/null +++ b/.config/vim/syntax/srt.vim @@ -0,0 +1,62 @@ +" Vim syntax file +" Language: SubRip +" Maintainer: ObserverOfTime +" Filenames: *.srt +" Last Change: 2022 Sep 12 + +if exists('b:current_syntax') + finish +endif + +syn spell toplevel + +syn cluster srtSpecial contains=srtBold,srtItalics,srtStrikethrough,srtUnderline,srtFont,srtTag,srtEscape + +" Number +syn match srtNumber /^\d\+$/ contains=@NoSpell + +" Range +syn match srtRange /\d\d:\d\d:\d\d[,.]\d\d\d --> \d\d:\d\d:\d\d[,.]\d\d\d/ skipwhite contains=srtArrow,srtTime nextgroup=srtCoordinates +syn match srtArrow /-->/ contained contains=@NoSpell +syn match srtTime /\d\d:\d\d:\d\d[,.]\d\d\d/ contained contains=@NoSpell +syn match srtCoordinates /X1:\d\+ X2:\d\+ Y1:\d\+ Y2:\d\+/ contained contains=@NoSpell + +" Bold +syn region srtBold matchgroup=srtFormat start=++ end=++ contains=@srtSpecial +syn region srtBold matchgroup=srtFormat start=+{b}+ end=+{/b}+ contains=@srtSpecial + +" Italics +syn region srtItalics matchgroup=srtFormat start=++ end=++ contains=@srtSpecial +syn region srtItalics matchgroup=srtFormat start=+{i}+ end=+{/i}+ contains=@srtSpecial + +" Strikethrough +syn region srtStrikethrough matchgroup=srtFormat start=++ end=++ contains=@srtSpecial +syn region srtStrikethrough matchgroup=srtFormat start=+{s}+ end=+{/s}+ contains=@srtSpecial + +" Underline +syn region srtUnderline matchgroup=srtFormat start=++ end=++ contains=@srtSpecial +syn region srtUnderline matchgroup=srtFormat start=+{u}+ end=+{/u}+ contains=@srtSpecial + +" Font +syn region srtFont matchgroup=srtFormat start=+]\{-}>+ end=+
    + contains=@srtSpecial + +" ASS tags +syn match srtTag /{\\[^}]\{1,}}/ contains=@NoSpell + +" Special characters +syn match srtEscape /\\[nNh]/ contains=@NoSpell + +hi def link srtArrow Delimiter +hi def link srtCoordinates Label +hi def link srtEscape SpecialChar +hi def link srtFormat Special +hi def link srtNumber Number +hi def link srtTag PreProc +hi def link srtTime String + +hi srtBold cterm=bold gui=bold +hi srtItalics cterm=italic gui=italic +hi srtStrikethrough cterm=strikethrough gui=strikethrough +hi srtUnderline cterm=underline gui=underline + +let b:current_syntax = 'srt' diff --git a/.config/vim/syntax/ssa.vim b/.config/vim/syntax/ssa.vim new file mode 100644 index 0000000..3cfae81 --- /dev/null +++ b/.config/vim/syntax/ssa.vim @@ -0,0 +1,67 @@ +" Vim syntax file +" Language: SubStation Alpha +" Maintainer: ObserverOfTime +" Filenames: *.ass,*.ssa +" Last Change: 2024 Apr 28 + +if exists('b:current_syntax') + finish +endif + +" Comments +syn keyword ssaTodo TODO FIXME NOTE XXX contained +syn match ssaComment /^\(;\|!:\).*$/ contains=ssaTodo,@Spell +syn match ssaTextComment /{[^}]*}/ contained contains=@Spell + +" Sections +syn match ssaSection /^\[[a-zA-Z0-9+ ]\+\]$/ + +" Headers +syn match ssaHeader /^[^;!:]\+:/ skipwhite nextgroup=ssaField + +" Fields +syn match ssaField /[^,]*\(,\|$\)/ contained skipwhite contains=ssaDelimiter,ssaTime nextgroup=ssaField + +" Time +syn match ssaTime /\d:\d\d:\d\d\.\d\d/ contained + +" Delimiter +syn match ssaDelimiter /,/ contained + +" Dialogue +syn match ssaDialogue /^Dialogue:/ transparent skipwhite nextgroup=ssaDialogueFields +syn match ssaDialogueFields /\([^,]*,\)\{9\}/ contained transparent skipwhite contains=ssaField,ssaDelimiter nextgroup=ssaText + +" Text +syn match ssaText /.*$/ contained contains=@ssaTags,@Spell +syn cluster ssaTags contains=ssaOverrideTag,ssaEscapeChar,ssaTextComment,ssaItalics,ssaBold,ssaUnderline,ssaStrikeout + +" Override tags +syn match ssaOverrideTag /{\\[^}]\+}/ contained contains=@NoSpell + +" Special characters +syn match ssaEscapeChar /\\[nNh{}]/ contained contains=@NoSpell + +" Markup +syn region ssaItalics start=/{\\i1}/ end=/{\\i0}/ matchgroup=ssaOverrideTag keepend oneline contained contains=@ssaTags,@Spell +syn region ssaBold start=/{\\b1}/ end=/{\\b0}/ matchgroup=ssaOverrideTag keepend oneline contained contains=@ssaTags,@Spell +syn region ssaUnderline start=/{\\u1}/ end=/{\\u0}/ matchgroup=ssaOverrideTag keepend oneline contained contains=@ssaTags,@Spell +syn region ssaStrikeout start=/{\\s1}/ end=/{\\s0}/ matchgroup=ssaOverrideTag keepend oneline contained contains=@ssaTags,@Spell + +hi def link ssaDelimiter Delimiter +hi def link ssaComment Comment +hi def link ssaEscapeChar SpecialChar +hi def link ssaField String +hi def link ssaHeader Label +hi def link ssaSection StorageClass +hi def link ssaOverrideTag Special +hi def link ssaTextComment Comment +hi def link ssaTime Number +hi def link ssaTodo Todo + +hi ssaBold cterm=bold gui=bold +hi ssaItalics cterm=italic gui=italic +hi ssaStrikeout cterm=strikethrough gui=strikethrough +hi ssaUnderline cterm=underline gui=underline + +let b:current_syntax = 'ssa' diff --git a/.config/vim/syntax/sshconfig.vim b/.config/vim/syntax/sshconfig.vim new file mode 100644 index 0000000..99e10fd --- /dev/null +++ b/.config/vim/syntax/sshconfig.vim @@ -0,0 +1,300 @@ +" Vim syntax file +" Language: OpenSSH client configuration file (ssh_config) +" Author: David Necas (Yeti) +" Maintainer: Jakub Jelen +" Previous Maintainer: Dominik Fischer +" Contributor: Leonard Ehrenfried +" Contributor: Karsten Hopp +" Contributor: Dean, Adam Kenneth +" Last Change: 2022 Nov 10 +" Added RemoteCommand from pull request #4809 +" Included additional keywords from Martin. +" Included PR #5753 +" SSH Version: 8.5p1 +" + +" Setup +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +setlocal iskeyword=_,-,a-z,A-Z,48-57 + + +" case on +syn case match + + +" Comments +syn match sshconfigComment "^#.*$" contains=sshconfigTodo +syn match sshconfigComment "\s#.*$" contains=sshconfigTodo + +syn keyword sshconfigTodo TODO FIXME NOTE contained + + +" Constants +syn keyword sshconfigYesNo yes no ask confirm +syn keyword sshconfigYesNo any auto +syn keyword sshconfigYesNo force autoask none + +syn keyword sshconfigCipher 3des blowfish + +syn keyword sshconfigCiphers 3des-cbc +syn keyword sshconfigCiphers blowfish-cbc +syn keyword sshconfigCiphers cast128-cbc +syn keyword sshconfigCiphers arcfour +syn keyword sshconfigCiphers arcfour128 +syn keyword sshconfigCiphers arcfour256 +syn keyword sshconfigCiphers aes128-cbc +syn keyword sshconfigCiphers aes192-cbc +syn keyword sshconfigCiphers aes256-cbc +syn match sshconfigCiphers "\" +syn keyword sshconfigCiphers aes128-ctr +syn keyword sshconfigCiphers aes192-ctr +syn keyword sshconfigCiphers aes256-ctr +syn match sshconfigCiphers "\" +syn match sshconfigCiphers "\" +syn match sshconfigCiphers "\" + +syn keyword sshconfigMAC hmac-sha1 +syn keyword sshconfigMAC hmac-sha1-96 +syn keyword sshconfigMAC hmac-sha2-256 +syn keyword sshconfigMAC hmac-sha2-512 +syn keyword sshconfigMAC hmac-md5 +syn keyword sshconfigMAC hmac-md5-96 +syn match sshconfigMAC "\" +syn match sshconfigMAC "\" +syn match sshconfigMAC "\" +syn match sshconfigMAC "\" +syn match sshconfigMAC "\" +syn match sshconfigMAC "\" +syn match sshconfigMAC "\" +syn match sshconfigMAC "\" +syn match sshconfigMAC "\" +syn match sshconfigMAC "\" +syn match sshconfigMAC "\" +syn match sshconfigMAC "\" + +syn keyword sshconfigHostKeyAlgo ssh-ed25519 +syn match sshconfigHostKeyAlgo "\" +syn match sshconfigHostKeyAlgo "\" +syn match sshconfigHostKeyAlgo "\" +syn keyword sshconfigHostKeyAlgo ssh-rsa +syn keyword sshconfigHostKeyAlgo rsa-sha2-256 +syn keyword sshconfigHostKeyAlgo rsa-sha2-512 +syn keyword sshconfigHostKeyAlgo ssh-dss +syn keyword sshconfigHostKeyAlgo ecdsa-sha2-nistp256 +syn keyword sshconfigHostKeyAlgo ecdsa-sha2-nistp384 +syn keyword sshconfigHostKeyAlgo ecdsa-sha2-nistp521 +syn match sshconfigHostKeyAlgo "\" +syn match sshconfigHostKeyAlgo "\" +syn match sshconfigHostKeyAlgo "\" +syn match sshconfigHostKeyAlgo "\" +syn match sshconfigHostKeyAlgo "\" +syn match sshconfigHostKeyAlgo "\" +syn match sshconfigHostKeyAlgo "\" +syn match sshconfigHostKeyAlgo "\" +syn match sshconfigHostKeyAlgo "\" + +syn keyword sshconfigPreferredAuth hostbased publickey password gssapi-with-mic +syn keyword sshconfigPreferredAuth keyboard-interactive + +syn keyword sshconfigLogLevel QUIET FATAL ERROR INFO VERBOSE +syn keyword sshconfigLogLevel DEBUG DEBUG1 DEBUG2 DEBUG3 +syn keyword sshconfigSysLogFacility DAEMON USER AUTH AUTHPRIV LOCAL0 LOCAL1 +syn keyword sshconfigSysLogFacility LOCAL2 LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7 +syn keyword sshconfigAddressFamily inet inet6 + +syn match sshconfigIPQoS "\" +syn match sshconfigIPQoS "\" +syn keyword sshconfigIPQoS ef le lowdelay throughput reliability +syn keyword sshconfigKbdInteractive bsdauth pam skey + +syn keyword sshconfigKexAlgo diffie-hellman-group1-sha1 +syn keyword sshconfigKexAlgo diffie-hellman-group14-sha1 +syn keyword sshconfigKexAlgo diffie-hellman-group-exchange-sha1 +syn keyword sshconfigKexAlgo diffie-hellman-group-exchange-sha256 +syn keyword sshconfigKexAlgo diffie-hellman-group16-sha512 +syn keyword sshconfigKexAlgo diffie-hellman-group18-sha512 +syn keyword sshconfigKexAlgo diffie-hellman-group14-sha256 +syn keyword sshconfigKexAlgo ecdh-sha2-nistp256 +syn keyword sshconfigKexAlgo ecdh-sha2-nistp384 +syn keyword sshconfigKexAlgo ecdh-sha2-nistp521 +syn match sshconfigKexAlgo "\" +syn match sshconfigKexAlgo "\" + +syn keyword sshconfigTunnel point-to-point ethernet + +syn match sshconfigVar "%[CdfHhIijKkLlnprTtu]\>" +syn match sshconfigVar "%%" +syn match sshconfigSpecial "[*?]" +syn match sshconfigNumber "\<\d\+\>" +syn match sshconfigHostPort "\<\(\d\{1,3}\.\)\{3}\d\{1,3}\(:\d\+\)\?\>" +syn match sshconfigHostPort "\<\([-a-zA-Z0-9]\+\.\)\+[-a-zA-Z0-9]\{2,}\(:\d\+\)\?\>" +syn match sshconfigHostPort "\<\(\x\{,4}:\)\+\x\{,4}[:/]\d\+\>" +syn match sshconfigHostPort "\<\c\(Host \+\)\@<=.\+" +syn match sshconfigHostPort "\<\c\(Hostname \+\)\@<=.\+" + +" case off +syn case ignore + + +" Keywords +syn keyword sshconfigHostSect Host + +syn keyword sshconfigMatch canonical final exec localnetwork host originalhost tagged user localuser all + +syn keyword sshconfigKeyword AddKeysToAgent +syn keyword sshconfigKeyword AddressFamily +syn keyword sshconfigKeyword BatchMode +syn keyword sshconfigKeyword BindAddress +syn keyword sshconfigKeyword BindInterface +syn keyword sshconfigKeyword CanonicalDomains +syn keyword sshconfigKeyword CanonicalizeFallbackLocal +syn keyword sshconfigKeyword CanonicalizeHostname +syn keyword sshconfigKeyword CanonicalizeMaxDots +syn keyword sshconfigKeyword CanonicalizePermittedCNAMEs +syn keyword sshconfigKeyword CASignatureAlgorithms +syn keyword sshconfigKeyword CertificateFile +syn keyword sshconfigKeyword ChallengeResponseAuthentication +syn keyword sshconfigKeyword ChannelTimeout +syn keyword sshconfigKeyword CheckHostIP +syn keyword sshconfigKeyword Ciphers +syn keyword sshconfigKeyword ClearAllForwardings +syn keyword sshconfigKeyword Compression +syn keyword sshconfigKeyword ConnectionAttempts +syn keyword sshconfigKeyword ConnectTimeout +syn keyword sshconfigKeyword ControlMaster +syn keyword sshconfigKeyword ControlPath +syn keyword sshconfigKeyword ControlPersist +syn keyword sshconfigKeyword DynamicForward +syn keyword sshconfigKeyword EnableEscapeCommandline +syn keyword sshconfigKeyword EnableSSHKeysign +syn keyword sshconfigKeyword EscapeChar +syn keyword sshconfigKeyword ExitOnForwardFailure +syn keyword sshconfigKeyword FingerprintHash +syn keyword sshconfigKeyword ForkAfterAuthentication +syn keyword sshconfigKeyword ForwardAgent +syn keyword sshconfigKeyword ForwardX11 +syn keyword sshconfigKeyword ForwardX11Timeout +syn keyword sshconfigKeyword ForwardX11Trusted +syn keyword sshconfigKeyword GatewayPorts +syn keyword sshconfigKeyword GlobalKnownHostsFile +syn keyword sshconfigKeyword GSSAPIAuthentication +syn keyword sshconfigKeyword GSSAPIDelegateCredentials +syn keyword sshconfigKeyword HashKnownHosts +syn keyword sshconfigKeyword HostbasedAcceptedAlgorithms +syn keyword sshconfigKeyword HostbasedAuthentication +syn keyword sshconfigKeyword HostbasedKeyTypes +syn keyword sshconfigKeyword HostKeyAlgorithms +syn keyword sshconfigKeyword HostKeyAlias +syn keyword sshconfigKeyword Hostname +syn keyword sshconfigKeyword IdentitiesOnly +syn keyword sshconfigKeyword IdentityAgent +syn keyword sshconfigKeyword IdentityFile +syn keyword sshconfigKeyword IgnoreUnknown +syn keyword sshconfigKeyword Include +syn keyword sshconfigKeyword IPQoS +syn keyword sshconfigKeyword KbdInteractiveAuthentication +syn keyword sshconfigKeyword KbdInteractiveDevices +syn keyword sshconfigKeyword KexAlgorithms +syn keyword sshconfigKeyword KnownHostsCommand +syn keyword sshconfigKeyword LocalCommand +syn keyword sshconfigKeyword LocalForward +syn keyword sshconfigKeyword LogLevel +syn keyword sshconfigKeyword LogVerbose +syn keyword sshconfigKeyword MACs +syn keyword sshconfigKeyword Match +syn keyword sshconfigKeyword NoHostAuthenticationForLocalhost +syn keyword sshconfigKeyword NumberOfPasswordPrompts +syn keyword sshconfigKeyword ObscureKeystrokeTiming +syn keyword sshconfigKeyword PasswordAuthentication +syn keyword sshconfigKeyword PermitLocalCommand +syn keyword sshconfigKeyword PermitRemoteOpen +syn keyword sshconfigKeyword PKCS11Provider +syn keyword sshconfigKeyword Port +syn keyword sshconfigKeyword PreferredAuthentications +syn keyword sshconfigKeyword ProxyCommand +syn keyword sshconfigKeyword ProxyJump +syn keyword sshconfigKeyword ProxyUseFdpass +syn keyword sshconfigKeyword PubkeyAcceptedAlgorithms +syn keyword sshconfigKeyword PubkeyAcceptedKeyTypes +syn keyword sshconfigKeyword PubkeyAuthentication +syn keyword sshconfigKeyword RekeyLimit +syn keyword sshconfigKeyword RemoteCommand +syn keyword sshconfigKeyword RemoteForward +syn keyword sshconfigKeyword RequestTTY +syn keyword sshconfigKeyword RequiredRSASize +syn keyword sshconfigKeyword RevokedHostKeys +syn keyword sshconfigKeyword SecurityKeyProvider +syn keyword sshconfigKeyword SendEnv +syn keyword sshconfigKeyword ServerAliveCountMax +syn keyword sshconfigKeyword ServerAliveInterval +syn keyword sshconfigKeyword SessionType +syn keyword sshconfigKeyword SetEnv +syn keyword sshconfigKeyword SmartcardDevice +syn keyword sshconfigKeyword StdinNull +syn keyword sshconfigKeyword StreamLocalBindMask +syn keyword sshconfigKeyword StreamLocalBindUnlink +syn keyword sshconfigKeyword StrictHostKeyChecking +syn keyword sshconfigKeyword SyslogFacility +syn keyword sshconfigKeyword Tag +syn keyword sshconfigKeyword TCPKeepAlive +syn keyword sshconfigKeyword Tunnel +syn keyword sshconfigKeyword TunnelDevice +syn keyword sshconfigKeyword UpdateHostKeys +syn keyword sshconfigKeyword UseBlacklistedKeys +syn keyword sshconfigKeyword User +syn keyword sshconfigKeyword UserKnownHostsFile +syn keyword sshconfigKeyword VerifyHostKeyDNS +syn keyword sshconfigKeyword VisualHostKey +syn keyword sshconfigKeyword XAuthLocation + +" Deprecated/ignored/remove/unsupported keywords + +syn keyword sshConfigDeprecated Cipher +syn keyword sshconfigDeprecated GSSAPIClientIdentity +syn keyword sshconfigDeprecated GSSAPIKeyExchange +syn keyword sshconfigDeprecated GSSAPIRenewalForcesRekey +syn keyword sshconfigDeprecated GSSAPIServerIdentity +syn keyword sshconfigDeprecated GSSAPITrustDNS +syn keyword sshconfigDeprecated GSSAPITrustDns +syn keyword sshconfigDeprecated Protocol +syn keyword sshconfigDeprecated RSAAuthentication +syn keyword sshconfigDeprecated RhostsRSAAuthentication +syn keyword sshconfigDeprecated CompressionLevel +syn keyword sshconfigDeprecated UseRoaming +syn keyword sshconfigDeprecated UsePrivilegedPort + +" Define the default highlighting + +hi def link sshconfigComment Comment +hi def link sshconfigTodo Todo +hi def link sshconfigHostPort sshconfigConstant +hi def link sshconfigNumber Number +hi def link sshconfigConstant Constant +hi def link sshconfigYesNo Boolean +hi def link sshconfigCipher sshconfigDeprecated +hi def link sshconfigCiphers sshconfigEnum +hi def link sshconfigMAC sshconfigEnum +hi def link sshconfigHostKeyAlgo sshconfigEnum +hi def link sshconfigLogLevel sshconfigEnum +hi def link sshconfigSysLogFacility sshconfigEnum +hi def link sshconfigAddressFamily sshconfigEnum +hi def link sshconfigIPQoS sshconfigEnum +hi def link sshconfigKbdInteractive sshconfigEnum +hi def link sshconfigKexAlgo sshconfigEnum +hi def link sshconfigTunnel sshconfigEnum +hi def link sshconfigPreferredAuth sshconfigEnum +hi def link sshconfigVar sshconfigEnum +hi def link sshconfigEnum Identifier +hi def link sshconfigSpecial Special +hi def link sshconfigKeyword Keyword +hi def link sshconfigHostSect Type +hi def link sshconfigMatch Type +hi def link sshconfigDeprecated Error + +let b:current_syntax = "sshconfig" + +" vim:set ts=8 sw=2 sts=2: diff --git a/.config/vim/syntax/sshdconfig.vim b/.config/vim/syntax/sshdconfig.vim new file mode 100644 index 0000000..8b539d9 --- /dev/null +++ b/.config/vim/syntax/sshdconfig.vim @@ -0,0 +1,305 @@ +" Vim syntax file +" Language: OpenSSH server configuration file (sshd_config) +" Author: David Necas (Yeti) +" Maintainer: Jakub Jelen +" Previous Maintainer: Dominik Fischer +" Contributor: Thilo Six +" Contributor: Leonard Ehrenfried +" Contributor: Karsten Hopp +" Originally: 2009-07-09 +" Last Change: 2022 Nov 10 +" SSH Version: 8.5p1 +" + +" Setup +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +setlocal iskeyword=_,-,a-z,A-Z,48-57 + + +" case on +syn case match + + +" Comments +syn match sshdconfigComment "^#.*$" contains=sshdconfigTodo +syn match sshdconfigComment "\s#.*$" contains=sshdconfigTodo + +syn keyword sshdconfigTodo TODO FIXME NOTE contained + +" Constants +syn keyword sshdconfigYesNo yes no none + +syn keyword sshdconfigAddressFamily any inet inet6 + +syn keyword sshdconfigPrivilegeSeparation sandbox + +syn keyword sshdconfigTcpForwarding local remote + +syn keyword sshdconfigRootLogin prohibit-password without-password forced-commands-only + +syn keyword sshdconfigCiphers 3des-cbc +syn keyword sshdconfigCiphers blowfish-cbc +syn keyword sshdconfigCiphers cast128-cbc +syn keyword sshdconfigCiphers arcfour +syn keyword sshdconfigCiphers arcfour128 +syn keyword sshdconfigCiphers arcfour256 +syn keyword sshdconfigCiphers aes128-cbc +syn keyword sshdconfigCiphers aes192-cbc +syn keyword sshdconfigCiphers aes256-cbc +syn match sshdconfigCiphers "\" +syn keyword sshdconfigCiphers aes128-ctr +syn keyword sshdconfigCiphers aes192-ctr +syn keyword sshdconfigCiphers aes256-ctr +syn match sshdconfigCiphers "\" +syn match sshdconfigCiphers "\" +syn match sshdconfigCiphers "\" + +syn keyword sshdconfigMAC hmac-sha1 +syn keyword sshdconfigMAC hmac-sha1-96 +syn keyword sshdconfigMAC hmac-sha2-256 +syn keyword sshdconfigMAC hmac-sha2-512 +syn keyword sshdconfigMAC hmac-md5 +syn keyword sshdconfigMAC hmac-md5-96 +syn match sshdconfigMAC "\" +syn match sshdconfigMAC "\" +syn match sshdconfigMAC "\" +syn match sshdconfigMAC "\" +syn match sshdconfigMAC "\" +syn match sshdconfigMAC "\" +syn match sshdconfigMAC "\" +syn match sshdconfigMAC "\" +syn match sshdconfigMAC "\" +syn match sshdconfigMAC "\" +syn match sshdconfigMAC "\" +syn match sshdconfigMAC "\" + +syn keyword sshdconfigHostKeyAlgo ssh-ed25519 +syn match sshdconfigHostKeyAlgo "\" +syn match sshdconfigHostKeyAlgo "\" +syn match sshdconfigHostKeyAlgo "\" +syn keyword sshdconfigHostKeyAlgo ssh-rsa +syn keyword sshdconfigHostKeyAlgo rsa-sha2-256 +syn keyword sshdconfigHostKeyAlgo rsa-sha2-512 +syn keyword sshdconfigHostKeyAlgo ssh-dss +syn keyword sshdconfigHostKeyAlgo ecdsa-sha2-nistp256 +syn keyword sshdconfigHostKeyAlgo ecdsa-sha2-nistp384 +syn keyword sshdconfigHostKeyAlgo ecdsa-sha2-nistp521 +syn match sshdconfigHostKeyAlgo "\" +syn match sshdconfigHostKeyAlgo "\" +syn match sshdconfigHostKeyAlgo "\" +syn match sshdconfigHostKeyAlgo "\" +syn match sshdconfigHostKeyAlgo "\" +syn match sshdconfigHostKeyAlgo "\" +syn match sshdconfigHostKeyAlgo "\" +syn match sshdconfigHostKeyAlgo "\" +syn match sshdconfigHostKeyAlgo "\" + +syn keyword sshdconfigRootLogin prohibit-password without-password forced-commands-only + +syn keyword sshdconfigLogLevel QUIET FATAL ERROR INFO VERBOSE +syn keyword sshdconfigLogLevel DEBUG DEBUG1 DEBUG2 DEBUG3 +syn keyword sshdconfigSysLogFacility DAEMON USER AUTH AUTHPRIV LOCAL0 LOCAL1 +syn keyword sshdconfigSysLogFacility LOCAL2 LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7 + +syn keyword sshdconfigCompression delayed + +syn match sshdconfigIPQoS "\" +syn match sshdconfigIPQoS "\" +syn keyword sshdconfigIPQoS ef le lowdelay throughput reliability + +syn keyword sshdconfigKexAlgo diffie-hellman-group1-sha1 +syn keyword sshdconfigKexAlgo diffie-hellman-group14-sha1 +syn keyword sshdconfigKexAlgo diffie-hellman-group14-sha256 +syn keyword sshdconfigKexAlgo diffie-hellman-group16-sha512 +syn keyword sshdconfigKexAlgo diffie-hellman-group18-sha512 +syn keyword sshdconfigKexAlgo diffie-hellman-group-exchange-sha1 +syn keyword sshdconfigKexAlgo diffie-hellman-group-exchange-sha256 +syn keyword sshdconfigKexAlgo ecdh-sha2-nistp256 +syn keyword sshdconfigKexAlgo ecdh-sha2-nistp384 +syn keyword sshdconfigKexAlgo ecdh-sha2-nistp521 +syn match sshdconfigKexAlgo "\" +syn match sshdconfigKexAlgo "\" +syn match sshdconfigKexAlgo "\" + +syn keyword sshdconfigTunnel point-to-point ethernet + +syn keyword sshdconfigSubsystem internal-sftp + +syn match sshdconfigVar "%[CDFfhiKksTtUu]\>" +syn match sshdconfigVar "%%" + +syn match sshdconfigSpecial "[*?]" + +syn match sshdconfigNumber "\<\d\+\>" +syn match sshdconfigHostPort "\<\(\d\{1,3}\.\)\{3}\d\{1,3}\(:\d\+\)\?\>" +syn match sshdconfigHostPort "\<\([-a-zA-Z0-9]\+\.\)\+[-a-zA-Z0-9]\{2,}\(:\d\+\)\?\>" +" FIXME: this matches quite a few things which are NOT valid IPv6 addresses +syn match sshdconfigHostPort "\<\(\x\{,4}:\)\+\x\{,4}:\d\+\>" +syn match sshdconfigTime "\<\(\d\+[sSmMhHdDwW]\)\+\>" + + +" case off +syn case ignore + + +" Keywords +" Also includes RDomain, but that is a keyword. +syn keyword sshdconfigMatch Host User Group Address LocalAddress LocalPort + +syn keyword sshdconfigKeyword AcceptEnv +syn keyword sshdconfigKeyword AddressFamily +syn keyword sshdconfigKeyword AllowAgentForwarding +syn keyword sshdconfigKeyword AllowGroups +syn keyword sshdconfigKeyword AllowStreamLocalForwarding +syn keyword sshdconfigKeyword AllowTcpForwarding +syn keyword sshdconfigKeyword AllowUsers +syn keyword sshdconfigKeyword AuthenticationMethods +syn keyword sshdconfigKeyword AuthorizedKeysCommand +syn keyword sshdconfigKeyword AuthorizedKeysCommandUser +syn keyword sshdconfigKeyword AuthorizedKeysFile +syn keyword sshdconfigKeyword AuthorizedPrincipalsCommand +syn keyword sshdconfigKeyword AuthorizedPrincipalsCommandUser +syn keyword sshdconfigKeyword AuthorizedPrincipalsFile +syn keyword sshdconfigKeyword Banner +syn keyword sshdconfigKeyword CASignatureAlgorithms +syn keyword sshdconfigKeyword ChallengeResponseAuthentication +syn keyword sshdconfigKeyword ChannelTimeout +syn keyword sshdconfigKeyword ChrootDirectory +syn keyword sshdconfigKeyword Ciphers +syn keyword sshdconfigKeyword ClientAliveCountMax +syn keyword sshdconfigKeyword ClientAliveInterval +syn keyword sshdconfigKeyword Compression +syn keyword sshdconfigKeyword DebianBanner +syn keyword sshdconfigKeyword DenyGroups +syn keyword sshdconfigKeyword DenyUsers +syn keyword sshdconfigKeyword DisableForwarding +syn keyword sshdconfigKeyword ExposeAuthInfo +syn keyword sshdconfigKeyword FingerprintHash +syn keyword sshdconfigKeyword ForceCommand +syn keyword sshdconfigKeyword GatewayPorts +syn keyword sshdconfigKeyword GSSAPIAuthentication +syn keyword sshdconfigKeyword GSSAPICleanupCredentials +syn keyword sshdconfigKeyword GSSAPIEnablek5users +syn keyword sshdconfigKeyword GSSAPIKexAlgorithms +syn keyword sshdconfigKeyword GSSAPIKeyExchange +syn keyword sshdconfigKeyword GSSAPIStoreCredentialsOnRekey +syn keyword sshdconfigKeyword GSSAPIStrictAcceptorCheck +syn keyword sshdconfigKeyword HostbasedAcceptedAlgorithms +syn keyword sshdconfigKeyword HostbasedAcceptedKeyTypes +syn keyword sshdconfigKeyword HostbasedAuthentication +syn keyword sshdconfigKeyword HostbasedUsesNameFromPacketOnly +syn keyword sshdconfigKeyword HostCertificate +syn keyword sshdconfigKeyword HostKey +syn keyword sshdconfigKeyword HostKeyAgent +syn keyword sshdconfigKeyword HostKeyAlgorithms +syn keyword sshdconfigKeyword IgnoreRhosts +syn keyword sshdconfigKeyword IgnoreUserKnownHosts +syn keyword sshdconfigKeyword Include +syn keyword sshdconfigKeyword IPQoS +syn keyword sshdconfigKeyword KbdInteractiveAuthentication +syn keyword sshdconfigKeyword KerberosAuthentication +syn keyword sshdconfigKeyword KerberosGetAFSToken +syn keyword sshdconfigKeyword KerberosOrLocalPasswd +syn keyword sshdconfigKeyword KerberosTicketCleanup +syn keyword sshdconfigKeyword KerberosUniqueCCache +syn keyword sshdconfigKeyword KerberosUseKuserok +syn keyword sshdconfigKeyword KexAlgorithms +syn keyword sshdconfigKeyword KeyRegenerationInterval +syn keyword sshdconfigKeyword ListenAddress +syn keyword sshdconfigKeyword LoginGraceTime +syn keyword sshdconfigKeyword LogLevel +syn keyword sshdconfigKeyword LogVerbose +syn keyword sshdconfigKeyword MACs +syn keyword sshdconfigKeyword Match +syn keyword sshdconfigKeyword MaxAuthTries +syn keyword sshdconfigKeyword MaxSessions +syn keyword sshdconfigKeyword MaxStartups +syn keyword sshdconfigKeyword ModuliFile +syn keyword sshdconfigKeyword PasswordAuthentication +syn keyword sshdconfigKeyword PermitBlacklistedKeys +syn keyword sshdconfigKeyword PermitEmptyPasswords +syn keyword sshdconfigKeyword PermitListen +syn keyword sshdconfigKeyword PermitOpen +syn keyword sshdconfigKeyword PermitRootLogin +syn keyword sshdconfigKeyword PermitTTY +syn keyword sshdconfigKeyword PermitTunnel +syn keyword sshdconfigKeyword PermitUserEnvironment +syn keyword sshdconfigKeyword PermitUserRC +syn keyword sshdconfigKeyword PerSourceMaxStartups +syn keyword sshdconfigKeyword PerSourceNetBlockSize +syn keyword sshdconfigKeyword PidFile +syn keyword sshdconfigKeyword Port +syn keyword sshdconfigKeyword PrintLastLog +syn keyword sshdconfigKeyword PrintMotd +syn keyword sshdconfigKeyword Protocol +syn keyword sshdconfigKeyword PubkeyAcceptedAlgorithms +syn keyword sshdconfigKeyword PubkeyAcceptedKeyTypes +syn keyword sshdconfigKeyword PubkeyAuthentication +syn keyword sshdconfigKeyword PubkeyAuthOptions +syn keyword sshdconfigKeyword RDomain +syn keyword sshdconfigKeyword RekeyLimit +syn keyword sshdconfigKeyword RequiredRSASize +syn keyword sshdconfigKeyword RevokedKeys +syn keyword sshdconfigKeyword RhostsRSAAuthentication +syn keyword sshdconfigKeyword RSAAuthentication +syn keyword sshdconfigKeyword SecurityKeyProvider +syn keyword sshdconfigKeyword ServerKeyBits +syn keyword sshdconfigKeyword SetEnv +syn keyword sshdconfigKeyword ShowPatchLevel +syn keyword sshdconfigKeyword StreamLocalBindMask +syn keyword sshdconfigKeyword StreamLocalBindUnlink +syn keyword sshdconfigKeyword StrictModes +syn keyword sshdconfigKeyword Subsystem +syn keyword sshdconfigKeyword SyslogFacility +syn keyword sshdconfigKeyword TCPKeepAlive +syn keyword sshdconfigKeyword TrustedUserCAKeys +syn keyword sshdconfigKeyword UnusedConnectionTimeout +syn keyword sshdconfigKeyword UseBlacklist +syn keyword sshdconfigKeyword UseBlocklist +syn keyword sshdconfigKeyword UseDNS +syn keyword sshdconfigKeyword UseLogin +syn keyword sshdconfigKeyword UsePAM +syn keyword sshdconfigKeyword VersionAddendum +syn keyword sshdconfigKeyword X11DisplayOffset +syn keyword sshdconfigKeyword X11Forwarding +syn keyword sshdconfigKeyword X11MaxDisplays +syn keyword sshdconfigKeyword X11UseLocalhost +syn keyword sshdconfigKeyword XAuthLocation + + +" Define the default highlighting + +hi def link sshdconfigComment Comment +hi def link sshdconfigTodo Todo +hi def link sshdconfigHostPort sshdconfigConstant +hi def link sshdconfigTime Number +hi def link sshdconfigNumber Number +hi def link sshdconfigConstant Constant +hi def link sshdconfigYesNo Boolean +hi def link sshdconfigAddressFamily sshdconfigEnum +hi def link sshdconfigPrivilegeSeparation sshdconfigEnum +hi def link sshdconfigTcpForwarding sshdconfigEnum +hi def link sshdconfigCiphers sshdconfigEnum +hi def link sshdconfigMAC sshdconfigEnum +hi def link sshdconfigHostKeyAlgo sshdconfigEnum +hi def link sshdconfigRootLogin sshdconfigEnum +hi def link sshdconfigLogLevel sshdconfigEnum +hi def link sshdconfigSysLogFacility sshdconfigEnum +hi def link sshdconfigVar sshdconfigEnum +hi def link sshdconfigCompression sshdconfigEnum +hi def link sshdconfigIPQoS sshdconfigEnum +hi def link sshdconfigKexAlgo sshdconfigEnum +hi def link sshdconfigTunnel sshdconfigEnum +hi def link sshdconfigSubsystem sshdconfigEnum +hi def link sshdconfigEnum Function +hi def link sshdconfigSpecial Special +hi def link sshdconfigKeyword Keyword +hi def link sshdconfigMatch Type + +let b:current_syntax = "sshdconfig" + +" vim:set ts=8 sw=2 sts=2: diff --git a/.config/vim/syntax/st.vim b/.config/vim/syntax/st.vim new file mode 100644 index 0000000..ffa7820 --- /dev/null +++ b/.config/vim/syntax/st.vim @@ -0,0 +1,95 @@ +" Vim syntax file +" Language: Smalltalk +" Maintainer: Arndt Hesse +" Last Change: 2012 Feb 12 by Thilo Six + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" some Smalltalk keywords and standard methods +syn keyword stKeyword super self class true false new not +syn keyword stKeyword notNil isNil inspect out nil +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" +syn match stMethod "\:" + +" the block of local variables of a method +syn region stLocalVariables start="^[ \t]*|" end="|" + +" the Smalltalk comment +syn region stComment start="\"" end="\"" + +" the Smalltalk strings and single characters +syn region stString start='\'' skip="''" end='\'' +syn match stCharacter "$." + +syn case ignore + +" the symbols prefixed by a '#' +syn match stSymbol "\(#\<[a-z_][a-z0-9_]*\>\)" +syn match stSymbol "\(#'[^']*'\)" + +" the variables in a statement block for loops +syn match stBlockVariable "\(:[ \t]*\<[a-z_][a-z0-9_]*\>[ \t]*\)\+|" contained + +" some representations of numbers +syn match stNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" +syn match stFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" +syn match stFloat "\<\d\+e[-+]\=\d\+[fl]\=\>" + +syn case match + +" a try to highlight paren mismatches +syn region stParen transparent start='(' end=')' contains=ALLBUT,stParenError +syn match stParenError ")" +syn region stBlock transparent start='\[' end='\]' contains=ALLBUT,stBlockError +syn match stBlockError "\]" +syn region stSet transparent start='{' end='}' contains=ALLBUT,stSetError +syn match stSetError "}" + +hi link stParenError stError +hi link stSetError stError +hi link stBlockError stError + +" synchronization for syntax analysis +syn sync minlines=50 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link stKeyword Statement +hi def link stMethod Statement +hi def link stComment Comment +hi def link stCharacter Constant +hi def link stString Constant +hi def link stSymbol Special +hi def link stNumber Type +hi def link stFloat Type +hi def link stError Error +hi def link stLocalVariables Identifier +hi def link stBlockVariable Identifier + + +let b:current_syntax = "st" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/stata.vim b/.config/vim/syntax/stata.vim new file mode 100644 index 0000000..29f5052 --- /dev/null +++ b/.config/vim/syntax/stata.vim @@ -0,0 +1,450 @@ +" stata.vim -- Vim syntax file for Stata do, ado, and class files. +" Language: Stata and/or Mata +" Maintainer: Jeff Pitblado +" Last Change: 26apr2006 +" Version: 1.1.4 + +" Log: +" 14apr2006 renamed syntax groups st* to stata* +" 'syntax clear' only under version control +" check for 'b:current_syntax', removed 'did_stata_syntax_inits' +" 17apr2006 fixed start expression for stataFunc +" 26apr2006 fixed brace confusion in stataErrInParen and stataErrInBracket +" fixed paren/bracket confusion in stataFuncGroup + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syntax case match + +" comments - single line +" note that the triple slash continuing line comment comes free +syn region stataStarComment start=/^\s*\*/ end=/$/ contains=stataComment oneline +syn region stataSlashComment start="\s//" end=/$/ contains=stataComment oneline +syn region stataSlashComment start="^//" end=/$/ contains=stataComment oneline +" comments - multiple line +syn region stataComment start="/\*" end="\*/" contains=stataComment + +" global macros - simple case +syn match stataGlobal /\$\a\w*/ +" global macros - general case +syn region stataGlobal start=/\${/ end=/}/ oneline contains=@stataMacroGroup +" local macros - general case +syn region stataLocal start=/`/ end=/'/ oneline contains=@stataMacroGroup + +" numeric formats +syn match stataFormat /%-\=\d\+\.\d\+[efg]c\=/ +" numeric hex format +syn match stataFormat /%-\=21x/ +" string format +syn match stataFormat /%\(\|-\|\~\)\d\+s/ + +" Statements +syn keyword stataConditional else if +syn keyword stataRepeat foreach +syn keyword stataRepeat forv[alues] +syn keyword stataRepeat while + +" Common programming commands +syn keyword stataCommand about +syn keyword stataCommand adopath +syn keyword stataCommand adoupdate +syn keyword stataCommand assert +syn keyword stataCommand break +syn keyword stataCommand by +syn keyword stataCommand cap[ture] +syn keyword stataCommand cd +syn keyword stataCommand chdir +syn keyword stataCommand checksum +syn keyword stataCommand class +syn keyword stataCommand classutil +syn keyword stataCommand compress +syn keyword stataCommand conf[irm] +syn keyword stataCommand conren +syn keyword stataCommand continue +syn keyword stataCommand cou[nt] +syn keyword stataCommand cscript +syn keyword stataCommand cscript_log +syn keyword stataCommand #delimit +syn keyword stataCommand d[escribe] +syn keyword stataCommand dir +syn keyword stataCommand discard +syn keyword stataCommand di[splay] +syn keyword stataCommand do +syn keyword stataCommand doedit +syn keyword stataCommand drop +syn keyword stataCommand edit +syn keyword stataCommand end +syn keyword stataCommand erase +syn keyword stataCommand eret[urn] +syn keyword stataCommand err[or] +syn keyword stataCommand e[xit] +syn keyword stataCommand expand +syn keyword stataCommand expandcl +syn keyword stataCommand file +syn keyword stataCommand findfile +syn keyword stataCommand format +syn keyword stataCommand g[enerate] +syn keyword stataCommand gettoken +syn keyword stataCommand gl[obal] +syn keyword stataCommand help +syn keyword stataCommand hexdump +syn keyword stataCommand include +syn keyword stataCommand infile +syn keyword stataCommand infix +syn keyword stataCommand input +syn keyword stataCommand insheet +syn keyword stataCommand joinby +syn keyword stataCommand la[bel] +syn keyword stataCommand levelsof +syn keyword stataCommand list +syn keyword stataCommand loc[al] +syn keyword stataCommand log +syn keyword stataCommand ma[cro] +syn keyword stataCommand mark +syn keyword stataCommand markout +syn keyword stataCommand marksample +syn keyword stataCommand mata +syn keyword stataCommand matrix +syn keyword stataCommand memory +syn keyword stataCommand merge +syn keyword stataCommand mkdir +syn keyword stataCommand more +syn keyword stataCommand net +syn keyword stataCommand nobreak +syn keyword stataCommand n[oisily] +syn keyword stataCommand note[s] +syn keyword stataCommand numlist +syn keyword stataCommand outfile +syn keyword stataCommand outsheet +syn keyword stataCommand _parse +syn keyword stataCommand pause +syn keyword stataCommand plugin +syn keyword stataCommand post +syn keyword stataCommand postclose +syn keyword stataCommand postfile +syn keyword stataCommand preserve +syn keyword stataCommand print +syn keyword stataCommand printer +syn keyword stataCommand profiler +syn keyword stataCommand pr[ogram] +syn keyword stataCommand q[uery] +syn keyword stataCommand qui[etly] +syn keyword stataCommand rcof +syn keyword stataCommand reg[ress] +syn keyword stataCommand rename +syn keyword stataCommand repeat +syn keyword stataCommand replace +syn keyword stataCommand reshape +syn keyword stataCommand ret[urn] +syn keyword stataCommand _rmcoll +syn keyword stataCommand _rmcoll +syn keyword stataCommand _rmcollright +syn keyword stataCommand rmdir +syn keyword stataCommand _robust +syn keyword stataCommand save +syn keyword stataCommand sca[lar] +syn keyword stataCommand search +syn keyword stataCommand serset +syn keyword stataCommand set +syn keyword stataCommand shell +syn keyword stataCommand sleep +syn keyword stataCommand sort +syn keyword stataCommand split +syn keyword stataCommand sret[urn] +syn keyword stataCommand ssc +syn keyword stataCommand su[mmarize] +syn keyword stataCommand syntax +syn keyword stataCommand sysdescribe +syn keyword stataCommand sysdir +syn keyword stataCommand sysuse +syn keyword stataCommand token[ize] +syn keyword stataCommand translate +syn keyword stataCommand type +syn keyword stataCommand unab +syn keyword stataCommand unabcmd +syn keyword stataCommand update +syn keyword stataCommand use +syn keyword stataCommand vers[ion] +syn keyword stataCommand view +syn keyword stataCommand viewsource +syn keyword stataCommand webdescribe +syn keyword stataCommand webseek +syn keyword stataCommand webuse +syn keyword stataCommand which +syn keyword stataCommand who +syn keyword stataCommand window + +" Literals +syn match stataQuote /"/ +syn region stataEString matchgroup=Nothing start=/`"/ end=/"'/ oneline contains=@stataMacroGroup,stataQuote,stataString,stataEString +syn region stataString matchgroup=Nothing start=/"/ end=/"/ oneline contains=@stataMacroGroup + +" define clusters +syn cluster stataFuncGroup contains=@stataMacroGroup,stataFunc,stataString,stataEstring,stataParen,stataBracket +syn cluster stataMacroGroup contains=stataGlobal,stataLocal +syn cluster stataParenGroup contains=stataParenError,stataBracketError,stataBraceError,stataSpecial,stataFormat + +" Stata functions +" Math +syn region stataFunc matchgroup=Function start=/\" + +" Conditional. +syn keyword stpConditional if else elseif then +syn match stpConditional "\" + +" Repeats. +syn keyword stpRepeat for while loop +syn match stpRepeat "\" + +" Operators. +syn keyword stpOperator asc not and or desc group having in is any some all +syn keyword stpOperator between exists like escape with union intersect minus +syn keyword stpOperator out prior distinct sysdate + +" Statements. +syn keyword stpStatement alter analyze as audit avg by close clustered comment +syn keyword stpStatement commit continue count create cursor declare delete +syn keyword stpStatement drop exec execute explain fetch from index insert +syn keyword stpStatement into lock max min next noaudit nonclustered open +syn keyword stpStatement order output print raiserror recompile rename revoke +syn keyword stpStatement rollback savepoint select set sum transaction +syn keyword stpStatement truncate unique update values where + +" Functions. +syn keyword stpFunction abs acos ascii asin atan atn2 avg ceiling charindex +syn keyword stpFunction charlength convert col_name col_length cos cot count +syn keyword stpFunction curunreservedpgs datapgs datalength dateadd datediff +syn keyword stpFunction datename datepart db_id db_name degree difference +syn keyword stpFunction exp floor getdate hextoint host_id host_name index_col +syn keyword stpFunction inttohex isnull lct_admin log log10 lower ltrim max +syn keyword stpFunction min now object_id object_name patindex pi pos power +syn keyword stpFunction proc_role radians rand replace replicate reserved_pgs +syn keyword stpFunction reverse right rtrim rowcnt round show_role sign sin +syn keyword stpFunction soundex space sqrt str stuff substr substring sum +syn keyword stpFunction suser_id suser_name tan tsequal upper used_pgs user +syn keyword stpFunction user_id user_name valid_name valid_user message + +" Types. +syn keyword stpType binary bit char datetime decimal double float image +syn keyword stpType int integer long money nchar numeric precision real +syn keyword stpType smalldatetime smallint smallmoney text time tinyint +syn keyword stpType timestamp varbinary varchar + +" Globals. +syn match stpGlobals '@@char_convert' +syn match stpGlobals '@@cient_csname' +syn match stpGlobals '@@client_csid' +syn match stpGlobals '@@connections' +syn match stpGlobals '@@cpu_busy' +syn match stpGlobals '@@error' +syn match stpGlobals '@@identity' +syn match stpGlobals '@@idle' +syn match stpGlobals '@@io_busy' +syn match stpGlobals '@@isolation' +syn match stpGlobals '@@langid' +syn match stpGlobals '@@language' +syn match stpGlobals '@@max_connections' +syn match stpGlobals '@@maxcharlen' +syn match stpGlobals '@@ncharsize' +syn match stpGlobals '@@nestlevel' +syn match stpGlobals '@@pack_received' +syn match stpGlobals '@@pack_sent' +syn match stpGlobals '@@packet_errors' +syn match stpGlobals '@@procid' +syn match stpGlobals '@@rowcount' +syn match stpGlobals '@@servername' +syn match stpGlobals '@@spid' +syn match stpGlobals '@@sqlstatus' +syn match stpGlobals '@@testts' +syn match stpGlobals '@@textcolid' +syn match stpGlobals '@@textdbid' +syn match stpGlobals '@@textobjid' +syn match stpGlobals '@@textptr' +syn match stpGlobals '@@textsize' +syn match stpGlobals '@@thresh_hysteresis' +syn match stpGlobals '@@timeticks' +syn match stpGlobals '@@total_error' +syn match stpGlobals '@@total_read' +syn match stpGlobals '@@total_write' +syn match stpGlobals '@@tranchained' +syn match stpGlobals '@@trancount' +syn match stpGlobals '@@transtate' +syn match stpGlobals '@@version' + +" Todos. +syn keyword stpTodo TODO FIXME XXX DEBUG NOTE + +" Strings and characters. +syn match stpStringError "'.*$" +syn match stpString "'\([^']\|''\)*'" + +" Numbers. +syn match stpNumber "-\=\<\d*\.\=[0-9_]\>" + +" Comments. +syn region stpComment start="/\*" end="\*/" contains=stpTodo +syn match stpComment "--.*" contains=stpTodo +syn sync ccomment stpComment + +" Parens. +syn region stpParen transparent start='(' end=')' contains=ALLBUT,stpParenError +syn match stpParenError ")" + +" Syntax Synchronizing. +syn sync minlines=10 maxlines=100 + +" Define the default highlighting. +" Only when and item doesn't have highlighting yet. + +hi def link stpConditional Conditional +hi def link stpComment Comment +hi def link stpKeyword Keyword +hi def link stpNumber Number +hi def link stpOperator Operator +hi def link stpSpecial Special +hi def link stpStatement Statement +hi def link stpString String +hi def link stpStringError Error +hi def link stpType Type +hi def link stpTodo Todo +hi def link stpFunction Function +hi def link stpGlobals Macro +hi def link stpParen Normal +hi def link stpParenError Error +hi def link stpSQLKeyword Function +hi def link stpRepeat Repeat + + +let b:current_syntax = "stp" + +" vim ts=8 sw=2 diff --git a/.config/vim/syntax/strace.vim b/.config/vim/syntax/strace.vim new file mode 100644 index 0000000..20516a1 --- /dev/null +++ b/.config/vim/syntax/strace.vim @@ -0,0 +1,52 @@ +" Vim syntax file +" Language: strace output +" Maintainer: David Necas (Yeti) +" Last Change: 2022 Jan 29 + +" Setup +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case match + +" Parse the line +syn match straceSpecialChar "\\\o\{1,3}\|\\." contained +syn region straceString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=straceSpecialChar oneline +syn match straceNumber "\W[+-]\=\(\d\+\)\=\.\=\d\+\([eE][+-]\=\d\+\)\="lc=1 +syn match straceNumber "\W0x\x\+"lc=1 +syn match straceNumberRHS "\W\(0x\x\+\|-\=\d\+\)"lc=1 contained +syn match straceOtherRHS "?" contained +syn match straceConstant "[A-Z_]\{2,}" +syn region straceVerbosed start="(" end=")" matchgroup=Normal contained oneline +syn region straceReturned start="\s=\s" end="$" contains=StraceEquals,straceNumberRHS,straceOtherRHS,straceConstant,straceVerbosed oneline transparent +syn match straceEquals "\s=\s"ms=s+1,me=e-1 +syn match straceParenthesis "[][(){}]" +syn match straceSysCall "^\w\+" +syn match straceOtherPID "^\[[^]]*\]" contains=stracePID,straceNumber nextgroup=straceSysCallEmbed skipwhite +syn match straceSysCallEmbed "\w\+" contained +syn keyword stracePID pid contained +syn match straceOperator "[-+=*/!%&|:,]" +syn region straceComment start="/\*" end="\*/" oneline + +" Define the default highlighting + +hi def link straceComment Comment +hi def link straceVerbosed Comment +hi def link stracePID PreProc +hi def link straceNumber Number +hi def link straceNumberRHS Type +hi def link straceOtherRHS Type +hi def link straceString String +hi def link straceConstant Function +hi def link straceEquals Type +hi def link straceSysCallEmbed straceSysCall +hi def link straceSysCall Statement +hi def link straceParenthesis Statement +hi def link straceOperator Normal +hi def link straceSpecialChar Special +hi def link straceOtherPID PreProc + + +let b:current_syntax = "strace" diff --git a/.config/vim/syntax/structurizr.vim b/.config/vim/syntax/structurizr.vim new file mode 100644 index 0000000..c10f1a4 --- /dev/null +++ b/.config/vim/syntax/structurizr.vim @@ -0,0 +1,113 @@ +" Vim syntax file +" Language: Structurizr DSL +" Maintainer: Bastian Venthur +" Last Change: 2024-11-06 +" Remark: For a language reference, see +" https://docs.structurizr.com/dsl/language + +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" comments +syn match scomment "#.*$" +syn match scomment "//.*$" +syn region scomment start="/\*" end="\*/" + +" keywords +syn keyword skeyword animation +syn keyword skeyword autoLayout +syn keyword skeyword background +syn keyword skeyword border +syn keyword skeyword branding +syn keyword skeyword color +syn keyword skeyword colour +syn keyword skeyword component +syn keyword skeyword configuration +syn keyword skeyword container +syn keyword skeyword containerinstance +syn keyword skeyword custom +syn keyword skeyword default +syn keyword skeyword deployment +syn keyword skeyword deploymentenvironment +syn keyword skeyword deploymentgroup +syn keyword skeyword deploymentnode +syn keyword skeyword description +syn keyword skeyword dynamic +syn keyword skeyword element +syn keyword skeyword enterprise +syn keyword skeyword exclude +syn keyword skeyword filtered +syn keyword skeyword font +syn keyword skeyword fontsize +syn keyword skeyword group +syn keyword skeyword healthcheck +syn keyword skeyword height +syn keyword skeyword icon +syn keyword skeyword image +syn keyword skeyword include +syn keyword skeyword infrastructurenode +syn keyword skeyword instances +syn keyword skeyword logo +syn keyword skeyword metadata +syn keyword skeyword model +syn keyword skeyword opacity +syn keyword skeyword person +syn keyword skeyword perspectives +syn keyword skeyword properties +syn keyword skeyword relationship +syn keyword skeyword routing +syn keyword skeyword scope +syn keyword skeyword shape +syn keyword skeyword softwaresystem +syn keyword skeyword softwaresysteminstance +syn keyword skeyword stroke +syn keyword skeyword strokewidth +syn keyword skeyword styles +syn keyword skeyword systemcontext +syn keyword skeyword systemlandscape +syn keyword skeyword tag +syn keyword skeyword tags +syn keyword skeyword technology +syn keyword skeyword terminology +syn keyword skeyword theme +syn keyword skeyword themes +syn keyword skeyword thickness +syn keyword skeyword this +syn keyword skeyword title +syn keyword skeyword url +syn keyword skeyword users +syn keyword skeyword views +syn keyword skeyword visibility +syn keyword skeyword width +syn keyword skeyword workspace + +syn match skeyword "\!adrs\s\+" +syn match skeyword "\!components\s\+" +syn match skeyword "\!docs\s\+" +syn match skeyword "\!element\s\+" +syn match skeyword "\!elements\s\+" +syn match skeyword "\!extend\s\+" +syn match skeyword "\!identifiers\s\+" +syn match skeyword "\!impliedrelationships\s\+" +syn match skeyword "\!include\s\+" +syn match skeyword "\!plugin\s\+" +syn match skeyword "\!ref\s\+" +syn match skeyword "\!relationship\s\+" +syn match skeyword "\!relationships\s\+" +syn match skeyword "\!script\s\+" + +syn region sstring oneline start='"' end='"' + +syn region sblock start='{' end='}' fold transparent + +syn match soperator "\->\s+" + +hi def link sstring string +hi def link scomment comment +hi def link skeyword keyword +hi def link soperator operator + +let b:current_syntax = "structurizr" diff --git a/.config/vim/syntax/stylus.vim b/.config/vim/syntax/stylus.vim new file mode 100644 index 0000000..d8bf641 --- /dev/null +++ b/.config/vim/syntax/stylus.vim @@ -0,0 +1,51 @@ +" Vim syntax file +" Language: Stylus +" Maintainer: Hsiaoming Yang , Marc Harter +" Filenames: *.styl, *.stylus +" Based On: Tim Pope (sass.vim) +" Created: Dec 14, 2011 +" Modified: May 28, 2024 + +syn case ignore + +syn cluster stylusCssSelectors contains=cssTagName,cssSelector,cssPseudo +syn cluster stylusCssValues contains=cssValueLength,cssValueInteger,cssValueNumber,cssValueAngle,cssValueTime,cssValueFrequency,cssColorVal,cssCommonVal,cssFontVal,cssListVal,cssTextVal,cssVisualVal,cssBorderVal,cssBackgroundVal,cssFuncVal,cssAdvancedVal +syn cluster stylusCssProperties contains=cssProp,cssBackgroundProp,cssTableProp,cssBorderProp,cssFontProp,cssColorProp,cssBoxProp,cssTextProp,cssListProp,cssVisualProp,cssAdvancedProp,cssCommonProp,cssSpecialProp + +syn match stylusVariable "$\?[[:alnum:]_-]\+" +syn match stylusVariableAssignment "\%([[:alnum:]_-]\+\s*\)\@<==" nextgroup=stylusCssAttribute,stylusVariable skipwhite + +syn match stylusProperty "\%([{};]\s*\|^\)\@<=\%([[:alnum:]-]\|#{[^{}]*}\)\+:" contains=@stylusCssProperties,@stylusCssSelectors skipwhite nextgroup=stylusCssAttribute contained containedin=cssDefineBlock +syn match stylusProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+[ :]\|:[[:alnum:]-]\+\)"hs=s+1 contains=@stylusCssProperties,@stylusCssSelectors skipwhite nextgroup=stylusCssAttribute +syn match stylusProperty "^\s*\zs\s\%(:\=[[:alnum:]-]\+\s*=\)"hs=s+1 contains=@stylusCssProperties,@stylusCssSelectors skipwhite nextgroup=stylusCssAttribute + +syn match stylusCssAttribute +\%("\%([^"]\|\\"\)*"\|'\%([^']\|\\'\)*'\|#{[^{}]*}\|[^{};]\)*+ contained contains=@stylusCssValues,cssImportant,stylusFunction,stylusVariable,stylusControl,stylusUserFunction,stylusInterpolation,cssString,stylusComment,cssComment + +syn match stylusInterpolation %{[[:alnum:]_-]\+}% + +syn match stylusFunction "\<\%(red\|green\|blue\|alpha\|dark\|light\)\>(\@=" contained +syn match stylusFunction "\<\%(hue\|saturation\|lightness\|push\|unshift\|typeof\|unit\|match\)\>(\@=" contained +syn match stylusFunction "\<\%(hsla\|hsl\|rgba\|rgb\|lighten\|darken\)\>(\@=" contained +syn match stylusFunction "\<\%(abs\|ceil\|floor\|round\|min\|max\|even\|odd\|sum\|avg\|sin\|cos\|join\)\>(\@=" contained +syn match stylusFunction "\<\%(desaturate\|saturate\|invert\|unquote\|quote\|s\)\>(\@=" contained +syn match stylusFunction "\<\%(operate\|length\|warn\|error\|last\|p\|\)\>(\@=" contained +syn match stylusFunction "\<\%(opposite-position\|image-size\|add-property\)\>(\@=" contained + +syn keyword stylusVariable null true false arguments +syn keyword stylusControl if else unless for in return + +syn match stylusImport "@\%(import\|require\)" nextgroup=stylusImportList +syn match stylusImportList "[^;]\+" contained contains=cssString.*,cssMediaType,cssURL + +syn match stylusAmpersand "&" +syn match stylusClass "[[:alnum:]_-]\+" contained +syn match stylusClassChar "\.[[:alnum:]_-]\@=" nextgroup=stylusClass +syn match stylusEscape "^\s*\zs\\" +syn match stylusId "[[:alnum:]_-]\+" contained +syn match stylusIdChar "#[[:alnum:]_-]\@=" nextgroup=stylusId + +syn region stylusComment start="//" end="$" contains=cssTodo,@Spell fold + +let b:current_syntax = "stylus" + +" vim:set sw=2: diff --git a/.config/vim/syntax/sudoers.vim b/.config/vim/syntax/sudoers.vim new file mode 100644 index 0000000..4cdf598 --- /dev/null +++ b/.config/vim/syntax/sudoers.vim @@ -0,0 +1,393 @@ +" Vim syntax file +" Language: sudoers(5) configuration files +" Maintainer: Eisuke Kawashima ( e.kawaschima+vim AT gmail.com ) +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2024 Sep 02 +" Recent Changes: Support for #include and #includedir. +" Added many new options (Samuel D. Leslie) +" Update allowed Tag_Spec Runas_Spec syntax items + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" TODO: instead of 'skipnl', we would like to match a specific group that would +" match \\$ and then continue with the nextgroup, actually, the skipnl doesn't +" work... +" TODO: treat 'ALL' like a special (yay, a bundle of new rules!!!) + +syn match sudoersUserSpec '^' nextgroup=@sudoersUserInSpec skipwhite + +syn match sudoersSpecEquals contained '=' nextgroup=@sudoersCmndSpecList skipwhite + +syn cluster sudoersCmndSpecList contains=sudoersUserRunasBegin,sudoersTagSpec,@sudoersCmndInSpec + +syn keyword sudoersTodo contained TODO FIXME XXX NOTE + +syn region sudoersComment display oneline start='#' end='$' contains=sudoersTodo +syn region sudoersInclude display oneline start='[#@]\%(include\|includedir\)\>' end='$' + +syn keyword sudoersAlias User_Alias Runas_Alias nextgroup=sudoersUserAlias skipwhite skipnl +syn keyword sudoersAlias Host_Alias nextgroup=sudoersHostAlias skipwhite skipnl +syn keyword sudoersAlias Cmnd_Alias nextgroup=sudoersCmndAlias skipwhite skipnl + +syn match sudoersUserAlias contained '\<\u[A-Z0-9_]*\>' nextgroup=sudoersUserAliasEquals skipwhite skipnl +syn match sudoersUserNameInList contained '\<\l\+\>' nextgroup=@sudoersUserList skipwhite skipnl +syn match sudoersUIDInList contained '#\d\+\>' nextgroup=@sudoersUserList skipwhite skipnl +syn match sudoersGroupInList contained '%\l\+\>' nextgroup=@sudoersUserList skipwhite skipnl +syn match sudoersUserNetgroupInList contained '+\l\+\>' nextgroup=@sudoersUserList skipwhite skipnl +syn match sudoersUserAliasInList contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersUserList skipwhite skipnl + +syn match sudoersUserName contained '\<\l\+\>' nextgroup=@sudoersParameter skipwhite skipnl +syn match sudoersUID contained '#\d\+\>' nextgroup=@sudoersParameter skipwhite skipnl +syn match sudoersGroup contained '%\l\+\>' nextgroup=@sudoersParameter skipwhite skipnl +syn match sudoersUserNetgroup contained '+\l\+\>' nextgroup=@sudoersParameter skipwhite skipnl +syn match sudoersUserAliasRef contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersParameter skipwhite skipnl + +syn match sudoersUserNameInSpec contained '\<\l\+\>' nextgroup=@sudoersUserSpec skipwhite skipnl +syn match sudoersUIDInSpec contained '#\d\+\>' nextgroup=@sudoersUserSpec skipwhite skipnl +syn match sudoersGroupInSpec contained '%\l\+\>' nextgroup=@sudoersUserSpec skipwhite skipnl +syn match sudoersUserNetgroupInSpec contained '+\l\+\>' nextgroup=@sudoersUserSpec skipwhite skipnl +syn match sudoersUserAliasInSpec contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersUserSpec skipwhite skipnl + +syn match sudoersUserNameInRunas contained '\<\l\+\>' nextgroup=@sudoersUserRunas skipwhite skipnl +syn match sudoersUIDInRunas contained '#\d\+\>' nextgroup=@sudoersUserRunas skipwhite skipnl +syn match sudoersGroupInRunas contained '%\l\+\>' nextgroup=@sudoersUserRunas skipwhite skipnl +syn match sudoersUserNetgroupInRunas contained '+\l\+\>' nextgroup=@sudoersUserRunas skipwhite skipnl +syn match sudoersUserAliasInRunas contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersUserRunas skipwhite skipnl + +syn match sudoersHostAlias contained '\<\u[A-Z0-9_]*\>' nextgroup=sudoersHostAliasEquals skipwhite skipnl +syn match sudoersHostNameInList contained '\<\l\+\>' nextgroup=@sudoersHostList skipwhite skipnl +syn match sudoersIPAddrInList contained '\%(\d\{1,3}\.\)\{3}\d\{1,3}' nextgroup=@sudoersHostList skipwhite skipnl +syn match sudoersNetworkInList contained '\%(\d\{1,3}\.\)\{3}\d\{1,3}\%(/\%(\%(\d\{1,3}\.\)\{3}\d\{1,3}\|\d\+\)\)\=' nextgroup=@sudoersHostList skipwhite skipnl +syn match sudoersHostNetgroupInList contained '+\l\+\>' nextgroup=@sudoersHostList skipwhite skipnl +syn match sudoersHostAliasInList contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersHostList skipwhite skipnl + +syn match sudoersHostName contained '\<\l\+\>' nextgroup=@sudoersParameter skipwhite skipnl +syn match sudoersIPAddr contained '\%(\d\{1,3}\.\)\{3}\d\{1,3}' nextgroup=@sudoersParameter skipwhite skipnl +syn match sudoersNetwork contained '\%(\d\{1,3}\.\)\{3}\d\{1,3}\%(/\%(\%(\d\{1,3}\.\)\{3}\d\{1,3}\|\d\+\)\)\=' nextgroup=@sudoersParameter skipwhite skipnl +syn match sudoersHostNetgroup contained '+\l\+\>' nextgroup=@sudoersParameter skipwhite skipnl +syn match sudoersHostAliasRef contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersParameter skipwhite skipnl + +syn match sudoersHostNameInSpec contained '\<\l\+\>' nextgroup=@sudoersHostSpec skipwhite skipnl +syn match sudoersIPAddrInSpec contained '\%(\d\{1,3}\.\)\{3}\d\{1,3}' nextgroup=@sudoersHostSpec skipwhite skipnl +syn match sudoersNetworkInSpec contained '\%(\d\{1,3}\.\)\{3}\d\{1,3}\%(/\%(\%(\d\{1,3}\.\)\{3}\d\{1,3}\|\d\+\)\)\=' nextgroup=@sudoersHostSpec skipwhite skipnl +syn match sudoersHostNetgroupInSpec contained '+\l\+\>' nextgroup=@sudoersHostSpec skipwhite skipnl +syn match sudoersHostAliasInSpec contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersHostSpec skipwhite skipnl + +syn match sudoersCmndAlias contained '\<\u[A-Z0-9_]*\>' nextgroup=sudoersCmndAliasEquals skipwhite skipnl +syn match sudoersCmndNameInList contained '[^[:space:],:=\\]\+\%(\\[[:space:],:=\\][^[:space:],:=\\]*\)*' nextgroup=@sudoersCmndList,sudoersCommandEmpty,sudoersCommandArgs skipwhite +syn match sudoersCmndAliasInList contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersCmndList skipwhite skipnl + +syn match sudoersCmndNameInSpec contained '[^[:space:],:=\\]\+\%(\\[[:space:],:=\\][^[:space:],:=\\]*\)*' nextgroup=@sudoersCmndSpec,sudoersCommandEmptyInSpec,sudoersCommandArgsInSpec skipwhite +syn match sudoersCmndAliasInSpec contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersCmndSpec skipwhite skipnl + +syn match sudoersUserAliasEquals contained '=' nextgroup=@sudoersUserInList skipwhite skipnl +syn match sudoersUserListComma contained ',' nextgroup=@sudoersUserInList skipwhite skipnl +syn match sudoersUserListColon contained ':' nextgroup=sudoersUserAlias skipwhite skipnl +syn cluster sudoersUserList contains=sudoersUserListComma,sudoersUserListColon + +syn match sudoersUserSpecComma contained ',' nextgroup=@sudoersUserInSpec skipwhite skipnl +syn cluster sudoersUserSpec contains=sudoersUserSpecComma,@sudoersHostInSpec + +syn match sudoersUserRunasBegin contained '(' nextgroup=@sudoersUserInRunas,sudoersUserRunasColon skipwhite skipnl +syn match sudoersUserRunasComma contained ',' nextgroup=@sudoersUserInRunas skipwhite skipnl +syn match sudoersUserRunasColon contained ':' nextgroup=@sudoersUserInRunas skipwhite skipnl +syn match sudoersUserRunasEnd contained ')' nextgroup=sudoersTagSpec,@sudoersCmndInSpec skipwhite skipnl +syn cluster sudoersUserRunas contains=sudoersUserRunasComma,sudoersUserRunasColon,@sudoersUserInRunas,sudoersUserRunasEnd + + +syn match sudoersHostAliasEquals contained '=' nextgroup=@sudoersHostInList skipwhite skipnl +syn match sudoersHostListComma contained ',' nextgroup=@sudoersHostInList skipwhite skipnl +syn match sudoersHostListColon contained ':' nextgroup=sudoersHostAlias skipwhite skipnl +syn cluster sudoersHostList contains=sudoersHostListComma,sudoersHostListColon + +syn match sudoersHostSpecComma contained ',' nextgroup=@sudoersHostInSpec skipwhite skipnl +syn cluster sudoersHostSpec contains=sudoersHostSpecComma,sudoersSpecEquals + + +syn match sudoersCmndAliasEquals contained '=' nextgroup=@sudoersCmndInList skipwhite skipnl +syn match sudoersCmndListComma contained ',' nextgroup=@sudoersCmndInList skipwhite skipnl +syn match sudoersCmndListColon contained ':' nextgroup=sudoersCmndAlias skipwhite skipnl +syn cluster sudoersCmndList contains=sudoersCmndListComma,sudoersCmndListColon + +syn match sudoersCmndSpecComma contained ',' nextgroup=@sudoersCmndSpecList skipwhite skipnl +syn match sudoersCmndSpecColon contained ':' nextgroup=@sudoersUserInSpec skipwhite skipnl +syn cluster sudoersCmndSpec contains=sudoersCmndSpecComma,sudoersCmndSpecColon + +syn cluster sudoersUserInList contains=sudoersUserNegationInList,sudoersUserNameInList,sudoersUIDInList,sudoersGroupInList,sudoersUserNetgroupInList,sudoersUserAliasInList +syn cluster sudoersHostInList contains=sudoersHostNegationInList,sudoersHostNameInList,sudoersIPAddrInList,sudoersNetworkInList,sudoersHostNetgroupInList,sudoersHostAliasInList +syn cluster sudoersCmndInList contains=sudoersCmndNegationInList,sudoersCmndNameInList,sudoersCmndAliasInList + +syn cluster sudoersUser contains=sudoersUserNegation,sudoersUserName,sudoersUID,sudoersGroup,sudoersUserNetgroup,sudoersUserAliasRef +syn cluster sudoersHost contains=sudoersHostNegation,sudoersHostName,sudoersIPAddr,sudoersNetwork,sudoersHostNetgroup,sudoersHostAliasRef + +syn cluster sudoersUserInSpec contains=sudoersUserNegationInSpec,sudoersUserNameInSpec,sudoersUIDInSpec,sudoersGroupInSpec,sudoersUserNetgroupInSpec,sudoersUserAliasInSpec +syn cluster sudoersHostInSpec contains=sudoersHostNegationInSpec,sudoersHostNameInSpec,sudoersIPAddrInSpec,sudoersNetworkInSpec,sudoersHostNetgroupInSpec,sudoersHostAliasInSpec +syn cluster sudoersUserInRunas contains=sudoersUserNegationInRunas,sudoersUserNameInRunas,sudoersUIDInRunas,sudoersGroupInRunas,sudoersUserNetgroupInRunas,sudoersUserAliasInRunas +syn cluster sudoersCmndInSpec contains=sudoersCmndNegationInSpec,sudoersCmndNameInSpec,sudoersCmndAliasInSpec + +syn match sudoersUserNegationInList contained '!\+' nextgroup=@sudoersUserInList skipwhite skipnl +syn match sudoersHostNegationInList contained '!\+' nextgroup=@sudoersHostInList skipwhite skipnl +syn match sudoersCmndNegationInList contained '!\+' nextgroup=@sudoersCmndInList skipwhite skipnl + +syn match sudoersUserNegation contained '!\+' nextgroup=@sudoersUser skipwhite skipnl +syn match sudoersHostNegation contained '!\+' nextgroup=@sudoersHost skipwhite skipnl + +syn match sudoersUserNegationInSpec contained '!\+' nextgroup=@sudoersUserInSpec skipwhite skipnl +syn match sudoersHostNegationInSpec contained '!\+' nextgroup=@sudoersHostInSpec skipwhite skipnl +syn match sudoersUserNegationInRunas contained '!\+' nextgroup=@sudoersUserInRunas skipwhite skipnl +syn match sudoersCmndNegationInSpec contained '!\+' nextgroup=@sudoersCmndInSpec skipwhite skipnl + +syn match sudoersCommandArgs contained '[^[:space:],:=\\]\+\%(\\[[:space:],:=\\][^[:space:],:=\\]*\)*' nextgroup=sudoersCommandArgs,@sudoersCmndList skipwhite +syn match sudoersCommandEmpty contained '""' nextgroup=@sudoersCmndList skipwhite skipnl + +syn match sudoersCommandArgsInSpec contained '[^[:space:],:=\\]\+\%(\\[[:space:],:=\\][^[:space:],:=\\]*\)*' nextgroup=sudoersCommandArgsInSpec,@sudoersCmndSpec skipwhite +syn match sudoersCommandEmptyInSpec contained '""' nextgroup=@sudoersCmndSpec skipwhite skipnl + +syn keyword sudoersDefaultEntry Defaults nextgroup=sudoersDefaultTypeAt,sudoersDefaultTypeColon,sudoersDefaultTypeGreaterThan,@sudoersParameter skipwhite skipnl +syn match sudoersDefaultTypeAt contained '@' nextgroup=@sudoersHost skipwhite skipnl +syn match sudoersDefaultTypeColon contained ':' nextgroup=@sudoersUser skipwhite skipnl +syn match sudoersDefaultTypeGreaterThan contained '>' nextgroup=@sudoersUser skipwhite skipnl + +" TODO: could also deal with special characters here +syn match sudoersBooleanParameter contained '!' nextgroup=sudoersBooleanParameter skipwhite skipnl +syn keyword sudoersBooleanParameter contained skipwhite skipnl + \ always_query_group_plugin + \ always_set_home + \ authenticate + \ closefrom_override + \ compress_io + \ env_editor + \ env_reset + \ exec_background + \ fast_glob + \ fqdn + \ ignore_audit_errors + \ ignore_dot + \ ignore_iolog_errors + \ ignore_local_sudoers + \ ignore_logfile_errors + \ ignore_unknown_defaults + \ insults + \ log_host + \ log_input + \ log_output + \ log_year + \ long_otp_prompt + \ mail_all_cmnds + \ mail_always + \ mail_badpass + \ mail_no_host + \ mail_no_perms + \ mail_no_user + \ match_group_by_gid + \ netgroup_tuple + \ noexec + \ pam_session + \ pam_setcred + \ passprompt_override + \ path_info + \ preserve_groups + \ pwfeedback + \ requiretty + \ root_sudo + \ rootpw + \ runaspw + \ set_home + \ set_logname + \ set_utmp + \ setenv + \ shell_noargs + \ stay_setuid + \ sudoedit_checkdir + \ sudoedit_follow + \ syslog_pid + \ targetpw + \ tty_tickets + \ umask_override + \ use_netgroups + \ use_pty + \ user_command_timeouts + \ utmp_runas + \ visiblepw + +syn keyword sudoersIntegerParameter contained + \ nextgroup=sudoersIntegerParameterEquals + \ skipwhite skipnl + \ closefrom + \ command_timeout + \ loglinelen + \ maxseq + \ passwd_timeout + \ passwd_tries + \ syslog_maxlen + \ timestamp_timeout + \ umask + +syn keyword sudoersStringParameter contained + \ nextgroup=sudoersStringParameterEquals + \ skipwhite skipnl + \ askpass + \ badpass_message + \ editor + \ env_file + \ exempt_group + \ fdexec + \ group_plugin + \ iolog_dir + \ iolog_file + \ iolog_flush + \ iolog_group + \ iolog_mode + \ iolog_user + \ lecture + \ lecture_file + \ lecture_status_dir + \ listpw + \ logfile + \ mailerflags + \ mailerpath + \ mailfrom + \ mailsub + \ mailto + \ noexec_file + \ pam_login_service + \ pam_service + \ passprompt + \ restricted_env_file + \ role + \ runas_default + \ secure_path + \ sudoers_locale + \ syslog + \ syslog_badpri + \ syslog_goodpri + \ timestamp_type + \ timestampdir + \ timestampowner + \ type + \ verifypw + +syn keyword sudoersListParameter contained + \ nextgroup=sudoersListParameterEquals + \ skipwhite skipnl + \ env_check + \ env_delete + \ env_keep + +syn match sudoersParameterListComma contained ',' nextgroup=@sudoersParameter skipwhite skipnl + +syn cluster sudoersParameter contains=sudoersBooleanParameter,sudoersIntegerParameter,sudoersStringParameter,sudoersListParameter + +syn match sudoersIntegerParameterEquals contained '[+-]\==' nextgroup=sudoersIntegerValue skipwhite skipnl +syn match sudoersStringParameterEquals contained '[+-]\==' nextgroup=sudoersStringValue skipwhite skipnl +syn match sudoersListParameterEquals contained '[+-]\==' nextgroup=sudoersListValue skipwhite skipnl + +syn match sudoersIntegerValue contained '\d\+' nextgroup=sudoersParameterListComma skipwhite skipnl +syn match sudoersStringValue contained '[^[:space:],:=\\]*\%(\\[[:space:],:=\\][^[:space:],:=\\]*\)*' nextgroup=sudoersParameterListComma skipwhite skipnl +syn region sudoersStringValue contained start=+"+ skip=+\\"+ end=+"+ nextgroup=sudoersParameterListComma skipwhite skipnl +syn match sudoersListValue contained '[^[:space:],:=\\]*\%(\\[[:space:],:=\\][^[:space:],:=\\]*\)*' nextgroup=sudoersParameterListComma skipwhite skipnl +syn region sudoersListValue contained start=+"+ skip=+\\"+ end=+"+ nextgroup=sudoersParameterListComma skipwhite skipnl + +syn match sudoersTagSpec contained '\%(NO\)\=\%(EXEC\|FOLLOW\|LOG_\%(INPUT\|OUTPUT\)\|MAIL\|INTERCEPT\|PASSWD\|SETENV\):' nextgroup=sudoersTagSpec,@sudoersCmndInSpec skipwhite + +hi def link sudoersSpecEquals Operator +hi def link sudoersTodo Todo +hi def link sudoersComment Comment +hi def link sudoersAlias Keyword +hi def link sudoersUserAlias Identifier +hi def link sudoersUserNameInList String +hi def link sudoersUIDInList Number +hi def link sudoersGroupInList PreProc +hi def link sudoersUserNetgroupInList PreProc +hi def link sudoersUserAliasInList PreProc +hi def link sudoersUserName String +hi def link sudoersUID Number +hi def link sudoersGroup PreProc +hi def link sudoersUserNetgroup PreProc +hi def link sudoersUserAliasRef PreProc +hi def link sudoersUserNameInSpec String +hi def link sudoersUIDInSpec Number +hi def link sudoersGroupInSpec PreProc +hi def link sudoersUserNetgroupInSpec PreProc +hi def link sudoersUserAliasInSpec PreProc +hi def link sudoersUserNameInRunas String +hi def link sudoersUIDInRunas Number +hi def link sudoersGroupInRunas PreProc +hi def link sudoersUserNetgroupInRunas PreProc +hi def link sudoersUserAliasInRunas PreProc +hi def link sudoersHostAlias Identifier +hi def link sudoersHostNameInList String +hi def link sudoersIPAddrInList Number +hi def link sudoersNetworkInList Number +hi def link sudoersHostNetgroupInList PreProc +hi def link sudoersHostAliasInList PreProc +hi def link sudoersHostName String +hi def link sudoersIPAddr Number +hi def link sudoersNetwork Number +hi def link sudoersHostNetgroup PreProc +hi def link sudoersHostAliasRef PreProc +hi def link sudoersHostNameInSpec String +hi def link sudoersIPAddrInSpec Number +hi def link sudoersNetworkInSpec Number +hi def link sudoersHostNetgroupInSpec PreProc +hi def link sudoersHostAliasInSpec PreProc +hi def link sudoersCmndAlias Identifier +hi def link sudoersCmndNameInList String +hi def link sudoersCmndAliasInList PreProc +hi def link sudoersCmndNameInSpec String +hi def link sudoersCmndAliasInSpec PreProc +hi def link sudoersUserAliasEquals Operator +hi def link sudoersUserListComma Delimiter +hi def link sudoersUserListColon Delimiter +hi def link sudoersUserSpecComma Delimiter +hi def link sudoersUserRunasBegin Delimiter +hi def link sudoersUserRunasComma Delimiter +hi def link sudoersUserRunasColon Delimiter +hi def link sudoersUserRunasEnd Delimiter +hi def link sudoersHostAliasEquals Operator +hi def link sudoersHostListComma Delimiter +hi def link sudoersHostListColon Delimiter +hi def link sudoersHostSpecComma Delimiter +hi def link sudoersCmndAliasEquals Operator +hi def link sudoersCmndListComma Delimiter +hi def link sudoersCmndListColon Delimiter +hi def link sudoersCmndSpecComma Delimiter +hi def link sudoersCmndSpecColon Delimiter +hi def link sudoersUserNegationInList Operator +hi def link sudoersHostNegationInList Operator +hi def link sudoersCmndNegationInList Operator +hi def link sudoersUserNegation Operator +hi def link sudoersHostNegation Operator +hi def link sudoersUserNegationInSpec Operator +hi def link sudoersHostNegationInSpec Operator +hi def link sudoersUserNegationInRunas Operator +hi def link sudoersCmndNegationInSpec Operator +hi def link sudoersCommandArgs String +hi def link sudoersCommandEmpty Special +hi def link sudoersDefaultEntry Keyword +hi def link sudoersDefaultTypeAt Special +hi def link sudoersDefaultTypeColon Special +hi def link sudoersDefaultTypeGreaterThan Special +hi def link sudoersBooleanParameter Identifier +hi def link sudoersIntegerParameter Identifier +hi def link sudoersStringParameter Identifier +hi def link sudoersListParameter Identifier +hi def link sudoersParameterListComma Delimiter +hi def link sudoersIntegerParameterEquals Operator +hi def link sudoersStringParameterEquals Operator +hi def link sudoersListParameterEquals Operator +hi def link sudoersIntegerValue Number +hi def link sudoersStringValue String +hi def link sudoersListValue String +hi def link sudoersTagSpec Special +hi def link sudoersInclude Statement + +let b:current_syntax = "sudoers" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/svg.vim b/.config/vim/syntax/svg.vim new file mode 100644 index 0000000..819b5ec --- /dev/null +++ b/.config/vim/syntax/svg.vim @@ -0,0 +1,15 @@ +" Vim syntax file +" Language: SVG (Scalable Vector Graphics) +" Maintainer: Vincent Berthoux +" File Types: .svg (used in Web and vector programs) +" +" Directly call the xml syntax, because SVG is an XML +" dialect. But as some plugins base their effect on filetype, +" providing a distinct filetype from xml is better. + +if exists("b:current_syntax") + finish +endif + +runtime! syntax/xml.vim +let b:current_syntax = "svg" diff --git a/.config/vim/syntax/svn.vim b/.config/vim/syntax/svn.vim new file mode 100644 index 0000000..6239790 --- /dev/null +++ b/.config/vim/syntax/svn.vim @@ -0,0 +1,56 @@ +" Vim syntax file +" Language: Subversion (svn) commit file +" Maintainer: Dmitry Vasiliev +" URL: https://github.com/hdima/vim-scripts/blob/master/syntax/svn.vim +" Last Change: 2013-11-08 +" Filenames: svn-commit*.tmp +" Version: 1.10 + +" Contributors: +" +" List of the contributors in alphabetical order: +" +" A. S. Budden +" Ingo Karkat +" Myk Taylor +" Stefano Zacchiroli + +" quit when a syntax file was already loaded. +if exists("b:current_syntax") + finish +endif + +syn spell toplevel + +syn match svnFirstLine "\%^.*" nextgroup=svnRegion,svnBlank skipnl +syn match svnSummary "^.\{0,50\}" contained containedin=svnFirstLine nextgroup=svnOverflow contains=@Spell +syn match svnOverflow ".*" contained contains=@Spell +syn match svnBlank "^.*" contained contains=@Spell + +syn region svnRegion end="\%$" matchgroup=svnDelimiter start="^--.*--$" contains=svnRemoved,svnRenamed,svnAdded,svnModified,svnProperty,@NoSpell +syn match svnRemoved "^D .*$" contained contains=@NoSpell +syn match svnRenamed "^R[ M][ U][ +] .*$" contained contains=@NoSpell +syn match svnAdded "^A[ M][ U][ +] .*$" contained contains=@NoSpell +syn match svnModified "^M[ M][ U] .*$" contained contains=@NoSpell +syn match svnProperty "^_M[ U] .*$" contained contains=@NoSpell + +" Synchronization. +syn sync clear +syn sync match svnSync grouphere svnRegion "^--.*--$"me=s-1 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet. + +hi def link svnSummary Keyword +hi def link svnBlank Error + +hi def link svnRegion Comment +hi def link svnDelimiter NonText +hi def link svnRemoved Constant +hi def link svnAdded Identifier +hi def link svnModified Special +hi def link svnProperty Special +hi def link svnRenamed Special + + +let b:current_syntax = "svn" diff --git a/.config/vim/syntax/swayconfig.vim b/.config/vim/syntax/swayconfig.vim new file mode 100644 index 0000000..6da4c6e --- /dev/null +++ b/.config/vim/syntax/swayconfig.vim @@ -0,0 +1,174 @@ +" Vim syntax file +" Language: sway config file +" Original Author: Josef Litos (JosefLitos/i3config.vim) +" Maintainer: James Eapen +" Version: 1.2.4 +" Last Change: 2024 Oct 17 +" 2025 Sep 23 by Vim Project update swayconfig syntax #18293 + +" References: +" http://i3wm.org/docs/userguide.html#configuring +" https://github.com/swaywm/sway/blob/b69d637f7a34e239e48a4267ae94a5e7087b5834/sway/sway.5.scd +" http://vimdoc.sourceforge.net/htmldoc/syntax.html +" +" +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" before i3 load to give i3ConfigKeyword lower priority +syn cluster i3ConfigCommand contains=i3ConfigCommand,i3ConfigAction,i3ConfigActionKeyword,@i3ConfigValue,i3ConfigColor,i3ConfigKeyword + +runtime! syntax/i3config.vim + +" Sway extensions to i3 +syn keyword i3ConfigActionKeyword opacity urgent shortcuts_inhibitor splitv splith splitt contained contained skipwhite nextgroup=i3ConfigOption +syn keyword i3ConfigOption set plus minus allow deny csd v h t contained contained skipwhite nextgroup=i3ConfigOption,@i3ConfigValue + +syn keyword i3ConfigConditionProp app_id pid shell contained + +syn keyword i3ConfigWorkspaceDir prev_on_output next_on_output contained + +syn match i3ConfigBindArgument /--\(locked\|to-code\|no-repeat\|input-device=[^ '"]*\|no-warn\|inhibited\) / contained contains=i3ConfigShOper,@i3ConfigStrVar nextgroup=i3ConfigBindArgument,i3ConfigBindCombo +syn region i3ConfigBindArgument start=/--input-device=['"]/ end=/\s/ contained contains=@i3ConfigIdent,i3ConfigShOper,i3ConfigString nextgroup=i3ConfigBindArgument,i3ConfigBindCombo + +syn region i3ConfigBindCombo matchgroup=i3ConfigParen start=/{$/ end=/^\s*}$/ contained contains=i3ConfigBindArgument,i3ConfigBindCombo,i3ConfigComment fold keepend extend +" hack for blocks with start outside parsing range +syn region swayConfigBlockOrphan start=/^\s\+\(--[a-z-]\+ \)*\([$A-Z][$0-9A-Za-z_+]\+\|[a-z]\) [a-z[]/ skip=/\\$\|$\n^\s*}$/ end=/$/ contains=i3ConfigBindArgument,i3ConfigBindCombo,i3ConfigParen keepend extend + +syn region i3ConfigExec start=/ {$/ end=/^\s*}$/ contained contains=i3ConfigExecAction,@i3ConfigSh,i3ConfigComment fold keepend extend + +syn keyword swayConfigFloatingModifierOpts normal inverse none contained +syn match i3ConfigKeyword /floating_modifier \(none\|[$A-Z][0-9A-Za-z]\+ \(normal\|inverse\)\)$/ contained contains=i3ConfigVariable,i3ConfigBindModkey,swayConfigFloatingModifierOpts + +syn match swayConfigI3Param /--i3/ contains=i3ConfigShParam skipwhite nextgroup=i3ConfigEdgeOpts +syn keyword i3ConfigKeyword hide_edge_borders contained skipwhite nextgroup=swayConfigI3Param,i3ConfigEdgeOpts + +syn keyword i3ConfigBarOpts swaybar_command contained skipwhite nextgroup=@i3ConfigSh +syn region i3ConfigBarOpts matchgroup=i3ConfigBarOpts start=/gaps/ end=/$/ contained contains=@i3ConfigNumVar +syn keyword i3ConfigBarOpts height pango_markup status_edge_padding status_padding wrap_scroll tray_bindcode tray_bindsym icon_theme contained skipwhite nextgroup=i3ConfigBarOptVals,@i3ConfigValue,i3ConfigShOper +syn keyword i3ConfigBarOptVals overlay contained + +syn keyword i3ConfigExecActionKeyword swaymsg contained + +" Sway-only options +" Xwayland +syn keyword swayConfigXOpt enable disable force contained +syn keyword i3ConfigKeyword xwayland contained skipwhite nextgroup=swayConfigXOpt + +" Inhibit idle +syn keyword swayConfigInhibitOpts focus fullscreen open none visible contained +syn keyword i3ConfigActionKeyword inhibit_idle contained skipwhite nextgroup=swayConfigInhibitOpts + +" Primary selection +" Allow tearing +syn keyword i3ConfigKeyword primary_selection allow_tearing contained skipwhite nextgroup=i3ConfigBoolean + +" Swaybg command +" Swaynag command +syn keyword i3ConfigKeyword swaybg_command swaynag_command contained nextgroup=i3ConfigExec + +" Bindswitch +syn match swayConfigBindswitchArgument /--\(locked\|no-warn\|reload\) / contained nextgroup=swayConfigBindswitchArgument,swayConfigBindswitchType +syn keyword swayConfigBindswitchType lid tablet contained nextgroup=swayConfigBindswitchCombo +syn keyword swayConfigBindswitchState toggle contained +syn match swayConfigBindswitchCombo /:\(on\|off\|toggle\) / contained contains=i3ConfigColonOperator,swayConfigBindswitchState,i3ConfigBoolean nextgroup=i3ConfigBind +syn region swayConfigBindswitchType matchgroup=i3ConfigParen start=/{$/ end=/^\s*}$/ contained contains=swayConfigBindswitchArgument,swayConfigBindswitchType,i3ConfigComment fold keepend extend +syn keyword i3ConfigBindKeyword bindswitch contained skipwhite nextgroup=swayConfigBindswitchArgument,swayConfigBindswitchType +" hack for blocks with start outside parsing range +syn region swayConfigBlockOrphan start=/^\s\+\(lid\|tablet\):/ skip=/\\$\|$\n^\s*}$/ end=/$/ contains=swayConfigBindswitchArgument,swayConfigBindswitchType,i3ConfigParen keepend extend + +" Bindgesture +syn match swayConfigBindgestureArgument /--\(exact\|input-device=[:0-9A-Za-z_/-]\+\|no-warn\) / contained nextgroup=swayConfigBindgestureArgument,swayConfigBindgestureCombo +syn keyword swayConfigBindgestureType hold swipe pinch contained +syn keyword swayConfigBindgestureDir up down left right inward outward clockwise counterclockwise contained +syn match swayConfigBindgestureCombo /\(hold\(:[1-5]\)\?\|swipe\(:[3-5]\)\?\(:up\|:down\|:left\|:right\)\?\|pinch\(:[2-5]\)\?:\(+\?\(inward\|outward\|clockwise\|counterclockwise\|up\|down\|left\|right\)\)\+\) / contained contains=i3ConfigNumber,swayConfigBindgestureType,i3ConfigColonOperator,swayConfigBindgestureDir,i3ConfigBindModifier nextgroup=swayConfigBindgestureCombo,i3ConfigBind +syn region swayConfigBindgestureCombo matchgroup=i3ConfigParen start=/{$/ end=/^\s*}$/ contained contains=swayConfigBindgestureArgument,swayConfigBindgestureCombo,i3ConfigComment fold keepend extend +syn keyword i3ConfigBindKeyword bindgesture contained skipwhite nextgroup=swayConfigBindgestureArgument,swayConfigBindgestureCombo +" hack for blocks with start outside parsing range +syn region swayConfigBlockOrphan start=/^\s\+\(--[a-z-]\+ \)*\(hold\|swipe\|pinch\):/ skip=/\\$\|$\n^\s*}$/ end=/$/ contains=swayConfigBindgestureArgument,swayConfigBindgestureCombo,i3ConfigParen keepend extend + +" Tiling drag threshold +" Titlebar commands +syn keyword i3ConfigKeyword tiling_drag_threshold titlebar_border_thickness contained skipwhite nextgroup=@i3ConfigNumVar +syn match i3ConfigKeyword /titlebar_padding \(\d\+\|\$\S\+\)\( \d\+\)\?$/ contained contains=@i3ConfigNumVar + +syn match swayConfigDeviceOper /[*:;!]/ contained + +" Input devices +syn keyword swayConfigInputOpts xkb_variant xkb_rules xkb_switch_layout xkb_numlock xkb_file xkb_capslock xkb_model repeat_delay repeat_rate map_to_output map_to_region map_from_region tool_mode accel_profile dwt dwtp drag_lock drag click_method clickfinger_button_map middle_emulation tap events calibration_matrix natural_scroll left_handed pointer_accel scroll_button scroll_button_lock scroll_factor scroll_method tap_button_map contained skipwhite nextgroup=swayConfigInputOptVals,@i3ConfigValue +syn keyword swayConfigInputOptVals absolute relative adaptive flat none button_areas clickfinger toggle two_finger edge on_button_down lrm lmr next prev pen eraser brush pencil airbrush disabled_on_external_mouse disable enable contained skipwhite nextgroup=swayConfigInputOpts,@i3ConfigValue,swayConfigDeviceOper +syn match swayConfigDeviceOper /,/ contained nextgroup=swayConfigXkbOptsPair,swayConfigXkbLayout +syn match swayConfigXkbLayout /[a-z]\+/ contained nextgroup=swayConfigDeviceOper +syn keyword swayConfigInputOpts xkb_layout contained skipwhite nextgroup=swayConfigXkbLayout +syn match swayConfigXkbOptsPairVal /[0-9a-z_-]\+/ contained contains=i3ConfigNumber skipwhite nextgroup=swayConfigDeviceOper,swayConfigInputOpts +syn match swayConfigXkbOptsPair /[a-z]\+:/ contained contains=i3ConfigColonOperator nextgroup=swayConfigXkbOptsPairVal +syn keyword swayConfigInputOpts xkb_options contained skipwhite nextgroup=swayConfigXkbOptsPair +syn match swayConfigInputAngle /\(3[0-5][0-9]\|[1-2]\?[0-9]\{1,2\}\)\(\.[0-9]\+\)\?/ skipwhite nextgroup=swayConfigInputOpts +syn keyword swayConfigInputOpts rotation_angle contained skipwhite nextgroup=swayConfigInputAngle + +syn region swayConfigInput start=/\s/ skip=/\\$/ end=/\ze[,;]\|$/ contained contains=swayConfigInputOpts,@i3ConfigValue keepend +syn region swayConfigInput matchgroup=i3ConfigParen start=/ {$/ end=/^\s*}$/ contained contains=swayConfigInputOpts,@i3ConfigValue,i3ConfigComment keepend extend +syn keyword swayConfigInputType touchpad pointer keyboard touch tablet_tool tablet_pad switch contained nextgroup=swayConfigInput +syn match swayConfigInputIdent /type:!\?/ contained contains=swayConfigDeviceOper nextgroup=swayConfigInputType +syn match swayConfigInputIdent /[^t '"]\S*/ contained contains=i3ConfigOutputIdent nextgroup=swayConfigInput +syn region swayConfigInputIdent start=/['"]/ end=/\ze/ contained contains=i3ConfigOutputIdent nextgroup=swayConfigInput +syn keyword i3ConfigKeyword input contained skipwhite nextgroup=swayConfigInputIdent + +" Seat +syn keyword swayConfigSeatOpts cursor fallback hide_cursor keyboard_grouping shortcuts_inhibitor pointer_constraint xcursor_theme contained skipwhite nextgroup=swayConfigSeatOptVals,@i3ConfigValue +syn match swayConfigInputTypeSeq / \w\+/ contained contains=swayConfigInputType nextgroup=swayConfigInputTypeSeq,swayConfigSeatOpts +syn keyword swayConfigSeatOpts idle_inhibit idle_wake contained nextgroup=swayConfigInputTypeSeq +syn keyword swayConfigSeatOpts attach contained skipwhite nextgroup=swayConfigSeatIdent +syn match swayConfigSeatOptVals /when-typing/ contained skipwhite nextgroup=swayConfigSeatOptVals +syn keyword swayConfigSeatOptVals move set press release none smart activate deactivate toggle escape enable disable contained skipwhite nextgroup=swayConfigSeatOpts +syn region swayConfigSeat start=/\s/ skip=/\\$/ end=/\ze[,;]\|$/ contained contains=swayConfigSeatOpts,@i3ConfigValue keepend +syn region swayConfigSeat matchgroup=i3ConfigParen start=/ {$/ end=/^\s*}$/ contained contains=swayConfigSeatOpts,@i3ConfigValue,i3ConfigComment keepend extend +syn match swayConfigSeatIdent /[^ ]\+/ contained contains=i3ConfigOutputIdent skipwhite nextgroup=swayConfigSeat +syn keyword i3ConfigKeyword seat contained skipwhite nextgroup=swayConfigSeatIdent + +" Output monitors +syn keyword swayConfigOutputOpts mode resolution res modeline position pos scale scale_filter subpixel transform disable enable power dpms max_render_time adaptive_sync render_bit_depth color_profile allow_tearing contained skipwhite nextgroup=swayConfigOutputOptVals,@i3ConfigValue,swayConfigOutputMode +syn keyword swayConfigOutputOptVals linear nearest smart rgb bgr vrgb vbgr none clockwise anticlockwise toggle srgb icc contained skipwhite nextgroup=swayConfigOutputOptVals,@i3ConfigValue,i3ConfigShOper +syn keyword swayConfigOutputBgVals solid_color fill stretch fit center tile contained skipwhite nextgroup=@i3ConfigColVar +syn match swayConfigOutputBg /[#$]\S\+ solid_color/ contained contains=@i3ConfigColVar,swayConfigOutputBgVals +syn match swayConfigOutputBg /[^b# '"]\S*/ contained contains=i3ConfigShOper skipwhite nextgroup=swayConfigOutputBgVals +syn region swayConfigOutputBg start=/['"]/ end=/\ze/ contained contains=@i3ConfigIdent skipwhite nextgroup=swayConfigOutputBgVals +syn keyword swayConfigOutputOpts bg background contained skipwhite nextgroup=swayConfigOutputBg +syn match swayConfigOutputFPS /@[0-9.]\+Hz/ contained skipwhite nextgroup=swayConfigOutputOpts +syn match swayConfigOutputMode /\(--custom \)\?[0-9]\+x[0-9]\+/ contained contains=i3ConfigShParam skipwhite nextgroup=swayConfigOutputFPS,swayConfigOutputOpts +syn match swayConfigOutputOptVals /\(flipped-\)\?\(90\|180\|270\)\|flipped\|normal/ contained contains=i3ConfigNumber skipwhite nextgroup=swayConfigOutputOptsVals +syn region swayConfigOutput start=/\s/ skip=/\\$/ end=/\ze[,;]\|$/ contained contains=swayConfigOutputOpts,@i3ConfigValue keepend +syn region swayConfigOutput matchgroup=i3ConfigParen start=/ {$/ end=/^\s*}$/ contained contains=swayConfigOutputOpts,@i3ConfigValue,i3ConfigComment keepend extend +syn match swayConfigOutputIdent /[^ ]\+/ contained contains=i3ConfigOutputIdent skipwhite nextgroup=swayConfigOutput +syn keyword i3ConfigKeyword output contained skipwhite nextgroup=swayConfigOutputIdent + +" Define the highlighting. +hi def link swayConfigFloatingModifierOpts i3ConfigOption +hi def link swayConfigXOpt i3ConfigOption +hi def link swayConfigInhibitOpts i3ConfigOption +hi def link swayConfigBindswitchArgument i3ConfigBindArgument +hi def link swayConfigBindswitchType i3ConfigMoveType +hi def link swayConfigBindswitchState i3ConfigMoveDir +hi def link swayConfigBindgestureArgument i3ConfigBindArgument +hi def link swayConfigBindgestureType i3ConfigMoveType +hi def link swayConfigBindgestureDir i3ConfigMoveDir +hi def link swayConfigDeviceOper i3ConfigOperator +hi def link swayConfigInputType i3ConfigMoveType +hi def link swayConfigInputIdent i3ConfigMoveDir +hi def link swayConfigInputOptVals i3ConfigShParam +hi def link swayConfigInputOpts i3ConfigOption +hi def link swayConfigInputAngle i3ConfigNumber +hi def link swayConfigXkbOptsPairVal i3ConfigParamLine +hi def link swayConfigXkbOptsPair i3ConfigShParam +hi def link swayConfigXkbLayout i3ConfigParamLine +hi def link swayConfigSeatOptVals swayConfigInputOptVals +hi def link swayConfigSeatOpts swayConfigInputOpts +hi def link swayConfigOutputOptVals swayConfigInputOptVals +hi def link swayConfigOutputBgVals swayConfigInputOptVals +hi def link swayConfigOutputOpts swayConfigInputOpts +hi def link swayConfigOutputFPS Constant +hi def link swayConfigOutputMode i3ConfigNumber + +let b:current_syntax = "swayconfig" diff --git a/.config/vim/syntax/swift.vim b/.config/vim/syntax/swift.vim new file mode 100644 index 0000000..ff07be2 --- /dev/null +++ b/.config/vim/syntax/swift.vim @@ -0,0 +1,286 @@ +" This source file is part of the Swift.org open source project +" +" Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors +" Licensed under Apache License v2.0 with Runtime Library Exception +" +" See https://swift.org/LICENSE.txt for license information +" See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +" +" Vim syntax file +" Language: swift +" Maintainer: Joe Groff +" Last Change: 2018 Jan 21 +" +" Vim maintainer: Emir SARI + +if exists("b:current_syntax") + finish +endif + +let s:keepcpo = &cpo +set cpo&vim + +syn keyword swiftKeyword + \ break + \ case + \ catch + \ continue + \ default + \ defer + \ do + \ else + \ fallthrough + \ for + \ guard + \ if + \ in + \ repeat + \ return + \ switch + \ throw + \ try + \ where + \ while +syn match swiftMultiwordKeyword + \ "indirect case" + +syn keyword swiftCoreTypes + \ Any + \ AnyObject + +syn keyword swiftImport skipwhite skipempty nextgroup=swiftImportModule + \ import + +syn keyword swiftDefinitionModifier + \ convenience + \ dynamic + \ fileprivate + \ final + \ internal + \ lazy + \ nonmutating + \ open + \ override + \ prefix + \ private + \ public + \ required + \ rethrows + \ static + \ throws + \ weak + +syn keyword swiftInOutKeyword skipwhite skipempty nextgroup=swiftTypeName + \ inout + +syn keyword swiftIdentifierKeyword + \ Self + \ metatype + \ self + \ super + +syn keyword swiftFuncKeywordGeneral skipwhite skipempty nextgroup=swiftTypeParameters + \ init + +syn keyword swiftFuncKeyword + \ deinit + \ subscript + +syn keyword swiftScope + \ autoreleasepool + +syn keyword swiftMutating skipwhite skipempty nextgroup=swiftFuncDefinition + \ mutating +syn keyword swiftFuncDefinition skipwhite skipempty nextgroup=swiftTypeName,swiftOperator + \ func + +syn keyword swiftTypeDefinition skipwhite skipempty nextgroup=swiftTypeName + \ class + \ enum + \ extension + \ operator + \ precedencegroup + \ protocol + \ struct + +syn keyword swiftTypeAliasDefinition skipwhite skipempty nextgroup=swiftTypeAliasName + \ associatedtype + \ typealias + +syn match swiftMultiwordTypeDefinition skipwhite skipempty nextgroup=swiftTypeName + \ "indirect enum" + +syn keyword swiftVarDefinition skipwhite skipempty nextgroup=swiftVarName + \ let + \ var + +syn keyword swiftLabel + \ get + \ set + \ didSet + \ willSet + +syn keyword swiftBoolean + \ false + \ true + +syn keyword swiftNil + \ nil + +syn match swiftImportModule contained nextgroup=swiftImportComponent + \ /\<[A-Za-z_][A-Za-z_0-9]*\>/ +syn match swiftImportComponent contained nextgroup=swiftImportComponent + \ /\.\<[A-Za-z_][A-Za-z_0-9]*\>/ + +syn match swiftTypeAliasName contained skipwhite skipempty nextgroup=swiftTypeAliasValue + \ /\<[A-Za-z_][A-Za-z_0-9]*\>/ +syn match swiftTypeName contained skipwhite skipempty nextgroup=swiftTypeParameters + \ /\<[A-Za-z_][A-Za-z_0-9\.]*\>/ +syn match swiftVarName contained skipwhite skipempty nextgroup=swiftTypeDeclaration + \ /\<[A-Za-z_][A-Za-z_0-9]*\>/ +syn match swiftImplicitVarName + \ /\$\<[A-Za-z_0-9]\+\>/ + +" TypeName[Optionality]? +syn match swiftType contained skipwhite skipempty nextgroup=swiftTypeParameters + \ /\<[A-Za-z_][A-Za-z_0-9\.]*\>[!?]\?/ +" [Type:Type] (dictionary) or [Type] (array) +syn region swiftType contained contains=swiftTypePair,swiftType + \ matchgroup=Delimiter start=/\[/ end=/\]/ +syn match swiftTypePair contained skipwhite skipempty nextgroup=swiftTypeParameters,swiftTypeDeclaration + \ /\<[A-Za-z_][A-Za-z_0-9\.]*\>[!?]\?/ +" (Type[, Type]) (tuple) +" FIXME: we should be able to use skip="," and drop swiftParamDelim +syn region swiftType contained contains=swiftType,swiftParamDelim + \ matchgroup=Delimiter start="[^@]\?(" end=")" matchgroup=NONE skip="," +syn match swiftParamDelim contained + \ /,/ +" (generics) +syn region swiftTypeParameters contained contains=swiftVarName,swiftConstraint + \ matchgroup=Delimiter start="<" end=">" matchgroup=NONE skip="," +syn keyword swiftConstraint contained + \ where + +syn match swiftTypeAliasValue skipwhite skipempty nextgroup=swiftType + \ /=/ +syn match swiftTypeDeclaration skipwhite skipempty nextgroup=swiftType,swiftInOutKeyword + \ /:/ +syn match swiftTypeDeclaration skipwhite skipempty nextgroup=swiftType + \ /->/ + +syn match swiftKeyword + \ /\/ +syn region swiftCaseLabelRegion + \ matchgroup=swiftKeyword start=/\/ matchgroup=Delimiter end=/:/ oneline contains=TOP +syn region swiftDefaultLabelRegion + \ matchgroup=swiftKeyword start=/\/ matchgroup=Delimiter end=/:/ oneline + +syn region swiftParenthesisRegion contains=TOP + \ matchgroup=NONE start=/(/ end=/)/ + +syn region swiftString contains=swiftInterpolationRegion + \ start=/"/ skip=/\\\\\|\\"/ end=/"/ +syn region swiftInterpolationRegion contained contains=TOP + \ matchgroup=swiftInterpolation start=/\\(/ end=/)/ +syn region swiftComment contains=swiftComment,swiftLineComment,swiftTodo + \ start="/\*" end="\*/" +syn region swiftLineComment contains=swiftComment,swiftTodo + \ start="//" end="$" + +syn match swiftDecimal + \ /[+\-]\?\<\([0-9][0-9_]*\)\([.][0-9_]*\)\?\([eE][+\-]\?[0-9][0-9_]*\)\?\>/ +syn match swiftHex + \ /[+\-]\?\<0x[0-9A-Fa-f][0-9A-Fa-f_]*\(\([.][0-9A-Fa-f_]*\)\?[pP][+\-]\?[0-9][0-9_]*\)\?\>/ +syn match swiftOct + \ /[+\-]\?\<0o[0-7][0-7_]*\>/ +syn match swiftBin + \ /[+\-]\?\<0b[01][01_]*\>/ + +syn match swiftOperator skipwhite skipempty nextgroup=swiftTypeParameters + \ "\.\@!&|^~]\@!&|^~]*\|*/\@![/=\-+*%<>!&|^~]*\|->\@![/=\-+*%<>!&|^~]*\|[=+%<>!&|^~][/=\-+*%<>!&|^~]*\)" +syn match swiftOperator skipwhite skipempty nextgroup=swiftTypeParameters + \ "\.\.[<.]" + +syn match swiftChar + \ /'\([^'\\]\|\\\(["'tnr0\\]\|x[0-9a-fA-F]\{2}\|u[0-9a-fA-F]\{4}\|U[0-9a-fA-F]\{8}\)\)'/ + +syn match swiftTupleIndexNumber contains=swiftDecimal + \ /\.[0-9]\+/ +syn match swiftDecimal contained + \ /[0-9]\+/ + +syn match swiftPreproc + \ /#\(\\|\\|\\|\\|\\)/ +syn match swiftPreproc + \ /^\s*#\(\\|\\|\\|\\|\\|\\)/ +syn region swiftPreprocFalse + \ start="^\s*#\\s\+\" end="^\s*#\(\\|\\|\\)" + +syn match swiftAttribute + \ /@\<\w\+\>/ skipwhite skipempty nextgroup=swiftType,swiftTypeDefinition + +syn keyword swiftTodo MARK TODO FIXME contained + +syn match swiftCastOp skipwhite skipempty nextgroup=swiftType,swiftCoreTypes + \ "\" +syn match swiftCastOp skipwhite skipempty nextgroup=swiftType,swiftCoreTypes + \ "\[!?]\?" + +syn match swiftNilOps + \ "??" + +syn region swiftReservedIdentifier oneline + \ start=/`/ end=/`/ + +hi def link swiftImport Include +hi def link swiftImportModule Title +hi def link swiftImportComponent Identifier +hi def link swiftKeyword Statement +hi def link swiftCoreTypes Type +hi def link swiftMultiwordKeyword Statement +hi def link swiftTypeDefinition Define +hi def link swiftMultiwordTypeDefinition Define +hi def link swiftType Type +hi def link swiftTypePair Type +hi def link swiftTypeAliasName Identifier +hi def link swiftTypeName Function +hi def link swiftConstraint Special +hi def link swiftFuncDefinition Define +hi def link swiftDefinitionModifier Operator +hi def link swiftInOutKeyword Define +hi def link swiftFuncKeyword Function +hi def link swiftFuncKeywordGeneral Function +hi def link swiftTypeAliasDefinition Define +hi def link swiftVarDefinition Define +hi def link swiftVarName Identifier +hi def link swiftImplicitVarName Identifier +hi def link swiftIdentifierKeyword Identifier +hi def link swiftTypeAliasValue Delimiter +hi def link swiftTypeDeclaration Delimiter +hi def link swiftTypeParameters Delimiter +hi def link swiftBoolean Boolean +hi def link swiftString String +hi def link swiftInterpolation Special +hi def link swiftComment Comment +hi def link swiftLineComment Comment +hi def link swiftDecimal Number +hi def link swiftHex Number +hi def link swiftOct Number +hi def link swiftBin Number +hi def link swiftOperator Function +hi def link swiftChar Character +hi def link swiftLabel Operator +hi def link swiftMutating Statement +hi def link swiftPreproc PreCondit +hi def link swiftPreprocFalse Comment +hi def link swiftAttribute Type +hi def link swiftTodo Todo +hi def link swiftNil Constant +hi def link swiftCastOp Operator +hi def link swiftNilOps Operator +hi def link swiftScope PreProc + +let b:current_syntax = "swift" + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/.config/vim/syntax/swiftgyb.vim b/.config/vim/syntax/swiftgyb.vim new file mode 100644 index 0000000..566b75b --- /dev/null +++ b/.config/vim/syntax/swiftgyb.vim @@ -0,0 +1,24 @@ +" This source file is part of the Swift.org open source project +" +" Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors +" Licensed under Apache License v2.0 with Runtime Library Exception +" +" See https://swift.org/LICENSE.txt for license information +" See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +" +" Vim syntax file +" Language: gyb on swift +" +" Vim maintainer: Emir SARI + +runtime! syntax/swift.vim +unlet b:current_syntax + +syn include @Python syntax/python.vim +syn region pythonCode matchgroup=gybPythonCode start=+^ *%+ end=+$+ contains=@Python keepend +syn region pythonCode matchgroup=gybPythonCode start=+%{+ end=+}%+ contains=@Python keepend +syn match gybPythonCode /\${[^}]*}/ +hi def link gybPythonCode CursorLineNr + +let b:current_syntax = "swiftgyb" + diff --git a/.config/vim/syntax/swig.vim b/.config/vim/syntax/swig.vim new file mode 100644 index 0000000..b626212 --- /dev/null +++ b/.config/vim/syntax/swig.vim @@ -0,0 +1,99 @@ +" Vim syntax file +" Language: SWIG +" Maintainer: Julien Marrec +" Last Change: 2023 November 23 + +if exists("b:current_syntax") + finish +endif + +" Read the C++ syntax to start with +runtime! syntax/cpp.vim +unlet b:current_syntax + +" SWIG extentions +syn keyword swigInclude %include %import %importfile %includefile %module + +syn keyword swigMostCommonDirective %alias %apply %beginfile %clear %constant %define %echo %enddef %endoffile +syn keyword swigMostCommonDirective %extend %feature %director %fragment %ignore %inline +syn keyword swigMostCommonDirective %keyword %name %namewarn %native %newobject %parms %pragma +syn keyword swigMostCommonDirective %rename %template %typedef %typemap %types %varargs + +" SWIG: Language specific macros +syn keyword swigOtherLanguageSpecific %luacode %go_import + +syn keyword swigCSharp %csattributes %csconst %csconstvalue %csmethodmodifiers %csnothrowexception +syn keyword swigCSharp %dconstvalue %dmanifestconst %dmethodmodifiers + +syn keyword swigJava %javaconstvalue %javaexception %javamethodmodifiers %javaconst %nojavaexception + +syn keyword swigGuile %multiple_values %values_as_list %values_as_vector + +syn keyword swigPHP %rinit %rshutdown %minit %mshutdown + +syn keyword swigPython %pybinoperator %pybuffer_binary %pybuffer_mutable_binary %pybuffer_mutable_string %pybuffer_string +syn keyword swigPython %pythonappend %pythonbegin %pythoncode %pythondynamic %pythonnondynamic %pythonprepend + +syn keyword swigRuby %markfunc %trackobjects %bang +syn keyword swigScilab %scilabconst + +" SWIG: Insertion +syn keyword swigInsertSection %insert %begin %runtime %header %wrapper %init + +" SWIG: Other directives +syn keyword swigCstring %cstring_bounded_mutable %cstring_bounded_output %cstring_chunk_output %cstring_input_binary %cstring_mutable +syn keyword swigCstring %cstring_output_allocate %cstring_output_allocate_size %cstring_output_maxsize %cstring_output_withsize +syn keyword swigCWstring %cwstring_bounded_mutable %cwstring_bounded_output %cwstring_chunk_output %cwstring_input_binary %cwstring_mutable +syn keyword swigCWstring %cwstring_output_allocate %cwstring_output_allocate_size %cwstring_output_maxsize %cwstring_output_withsize +syn keyword swigCMalloc %malloc %calloc %realloc %free %sizeof %allocators + +syn keyword swigExceptionHandling %catches %raise %allowexception %exceptionclass %warn %warnfilter %exception +syn keyword swigContract %contract %aggregate_check + +syn keyword swigDirective %addmethods %array_class %array_functions %attribute %attribute2 %attribute2ref +syn keyword swigDirective %attribute_ref %attributeref %attributestring %attributeval %auto_ptr %callback +syn keyword swigDirective %delete_array %delobject %extend_smart_pointer %factory %fastdispatch %freefunc %immutable +syn keyword swigDirective %implicit %implicitconv %interface %interface_custom %interface_impl %intrusive_ptr %intrusive_ptr_no_wrap +syn keyword swigDirective %mutable %naturalvar %nocallback %nocopyctor %nodefaultctor %nodefaultdtor %nonaturalvar %nonspace +syn keyword swigDirective %nspace %pointer_cast %pointer_class %pointer_functions %predicate %proxycode +syn keyword swigDirective %refobject %set_output %shared_ptr %std_comp_methods +syn keyword swigDirective %std_nodefconst_type %typecheck %typemaps_string %unique_ptr %unrefobject %valuewrapper + +syn match swigVerbatimStartEnd "%[{}]" + +syn match swigUserDef "%\w\+" +syn match swigVerbatimMacro "^\s*%#\w\+\%( .*\)\?$" + +" SWIG: typemap var and typemap macros (eg: $1, $*1_type, $&n_ltype, $self) +syn match swigTypeMapVars "\$[*&_a-zA-Z0-9]\+" + +" Default highlighting +hi def link swigInclude Include +hi def link swigMostCommonDirective Structure +hi def link swigDirective Macro +hi def link swigContract swigExceptionHandling +hi def link swigExceptionHandling Exception +hi def link swigUserDef Function + +hi def link swigCMalloc Statement +hi def link swigCstring Type +hi def link swigCWstring Type + +hi def link swigCSharp swigOtherLanguageSpecific +hi def link swigJava swigOtherLanguageSpecific +hi def link swigGuile swigOtherLanguageSpecific +hi def link swigPHP swigOtherLanguageSpecific +hi def link swigPython swigOtherLanguageSpecific +hi def link swigRuby swigOtherLanguageSpecific +hi def link swigScilab swigOtherLanguageSpecific +hi def link swigOtherLanguageSpecific Special + +hi def link swigInsertSection PreProc + +hi def link swigVerbatimStartEnd Statement +hi def link swigVerbatimMacro Macro + +hi def link swigTypeMapVars SpecialChar + +let b:current_syntax = "swig" +" vim: ts=8 diff --git a/.config/vim/syntax/syncolor.vim b/.config/vim/syntax/syncolor.vim new file mode 100644 index 0000000..8b0beb8 --- /dev/null +++ b/.config/vim/syntax/syncolor.vim @@ -0,0 +1,97 @@ +" Vim syntax support file +" Maintainer: The Vim Project +" Last Change: 2023 Aug 10 +" Former Maintainer: Bram Moolenaar + +" This file sets up the default methods for highlighting. +" It is loaded from "synload.vim" and from Vim for ":syntax reset". +" Also used from init_highlight(). + +if !exists("syntax_cmd") || syntax_cmd == "on" + " ":syntax on" works like in Vim 5.7: set colors but keep links + command -nargs=* SynColor hi + command -nargs=* SynLink hi link +else + if syntax_cmd == "enable" + " ":syntax enable" keeps any existing colors + command -nargs=* SynColor hi def + command -nargs=* SynLink hi def link + elseif syntax_cmd == "reset" + " ":syntax reset" resets all colors to the default + command -nargs=* SynColor hi + command -nargs=* SynLink hi! link + else + " User defined syncolor file has already set the colors. + finish + endif +endif + +" Many terminals can only use six different colors (plus black and white). +" Therefore the number of colors used is kept low. It doesn't look nice with +" too many colors anyway. +" Careful with "cterm=bold", it changes the color to bright for some terminals. +" There are two sets of defaults: for a dark and a light background. +if &background == "dark" + SynColor Comment term=bold cterm=NONE ctermfg=Cyan ctermbg=NONE gui=NONE guifg=#80a0ff guibg=NONE + SynColor Constant term=underline cterm=NONE ctermfg=Magenta ctermbg=NONE gui=NONE guifg=#ffa0a0 guibg=NONE + SynColor Special term=bold cterm=NONE ctermfg=LightRed ctermbg=NONE gui=NONE guifg=Orange guibg=NONE + SynColor Identifier term=underline cterm=bold ctermfg=Cyan ctermbg=NONE gui=NONE guifg=#40ffff guibg=NONE + SynColor Statement term=bold cterm=NONE ctermfg=Yellow ctermbg=NONE gui=bold guifg=#ffff60 guibg=NONE + SynColor PreProc term=underline cterm=NONE ctermfg=LightBlue ctermbg=NONE gui=NONE guifg=#ff80ff guibg=NONE + SynColor Type term=underline cterm=NONE ctermfg=LightGreen ctermbg=NONE gui=bold guifg=#60ff60 guibg=NONE + SynColor Underlined term=underline cterm=underline ctermfg=LightBlue gui=underline guifg=#80a0ff + SynColor Ignore term=NONE cterm=NONE ctermfg=black ctermbg=NONE gui=NONE guifg=bg guibg=NONE + SynColor Added term=NONE cterm=NONE ctermfg=Green ctermbg=NONE gui=NONE guifg=LimeGreen guibg=NONE + SynColor Changed term=NONE cterm=NONE ctermfg=Blue ctermbg=NONE gui=NONE guifg=DodgerBlue guibg=NONE + SynColor Removed term=NONE cterm=NONE ctermfg=Red ctermbg=NONE gui=NONE guifg=Red guibg=NONE +else + SynColor Comment term=bold cterm=NONE ctermfg=DarkBlue ctermbg=NONE gui=NONE guifg=Blue guibg=NONE + SynColor Constant term=underline cterm=NONE ctermfg=DarkRed ctermbg=NONE gui=NONE guifg=Magenta guibg=NONE + " #6a5acd is SlateBlue + SynColor Special term=bold cterm=NONE ctermfg=DarkMagenta ctermbg=NONE gui=NONE guifg=#6a5acd guibg=NONE + SynColor Identifier term=underline cterm=NONE ctermfg=DarkCyan ctermbg=NONE gui=NONE guifg=DarkCyan guibg=NONE + SynColor Statement term=bold cterm=NONE ctermfg=Brown ctermbg=NONE gui=bold guifg=Brown guibg=NONE + " #6a0dad is Purple + SynColor PreProc term=underline cterm=NONE ctermfg=DarkMagenta ctermbg=NONE gui=NONE guifg=#6a0dad guibg=NONE + SynColor Type term=underline cterm=NONE ctermfg=DarkGreen ctermbg=NONE gui=bold guifg=SeaGreen guibg=NONE + SynColor Underlined term=underline cterm=underline ctermfg=DarkMagenta gui=underline guifg=SlateBlue + SynColor Ignore term=NONE cterm=NONE ctermfg=white ctermbg=NONE gui=NONE guifg=bg guibg=NONE + SynColor Added term=NONE cterm=NONE ctermfg=DarkGreen ctermbg=NONE gui=NONE guifg=SeaGreen guibg=NONE + SynColor Changed term=NONE cterm=NONE ctermfg=Blue ctermbg=NONE gui=NONE guifg=DodgerBlue guibg=NONE + SynColor Removed term=NONE cterm=NONE ctermfg=Red ctermbg=NONE gui=NONE guifg=Red guibg=NONE +endif +SynColor Error term=reverse cterm=NONE ctermfg=White ctermbg=Red gui=NONE guifg=White guibg=Red +SynColor Todo term=standout cterm=NONE ctermfg=Black ctermbg=Yellow gui=NONE guifg=Blue guibg=Yellow +SynColor Bold term=bold cterm=bold ctermfg=NONE ctermbg=NONE gui=bold guifg=NONE guibg=NONE +SynColor Italic term=italic cterm=italic ctermfg=NONE ctermbg=NONE gui=italic guifg=NONE guibg=NONE +SynColor BoldItalic term=bold,italic cterm=bold,italic ctermfg=NONE ctermbg=NONE gui=bold,italic guifg=NONE guibg=NONE + +" Common groups that link to default highlighting. +" You can specify other highlighting easily. +SynLink String Constant +SynLink Character Constant +SynLink Number Constant +SynLink Boolean Constant +SynLink Float Number +SynLink Function Identifier +SynLink Conditional Statement +SynLink Repeat Statement +SynLink Label Statement +SynLink Operator Statement +SynLink Keyword Statement +SynLink Exception Statement +SynLink Include PreProc +SynLink Define PreProc +SynLink Macro PreProc +SynLink PreCondit PreProc +SynLink StorageClass Type +SynLink Structure Type +SynLink Typedef Type +SynLink Tag Special +SynLink SpecialChar Special +SynLink Delimiter Special +SynLink SpecialComment Special +SynLink Debug Special + +delcommand SynColor +delcommand SynLink diff --git a/.config/vim/syntax/synload.vim b/.config/vim/syntax/synload.vim new file mode 100644 index 0000000..553e8b2 --- /dev/null +++ b/.config/vim/syntax/synload.vim @@ -0,0 +1,84 @@ +" Vim syntax support file +" Maintainer: The Vim Project +" Last Change: 2023 Aug 10 +" Former Maintainer: Bram Moolenaar + +" This file sets up for syntax highlighting. +" It is loaded from "syntax.vim" and "manual.vim". +" 1. Set the default highlight groups. +" 2. Install Syntax autocommands for all the available syntax files. + +if !has("syntax") + finish +endif + +" let others know that syntax has been switched on +let syntax_on = 1 + +" Set the default highlighting colors. Use a color scheme if specified. +if exists("colors_name") + exe "colors " . colors_name +else + runtime! syntax/syncolor.vim +endif + +" Line continuation is used here, remove 'C' from 'cpoptions' +let s:cpo_save = &cpo +set cpo&vim + +" First remove all old syntax autocommands. +au! Syntax + +au Syntax * call s:SynSet() + +fun! s:SynSet() + " clear syntax for :set syntax=OFF and any syntax name that doesn't exist + syn clear + if exists("b:current_syntax") + unlet b:current_syntax + endif + + 0verbose let s = expand("") + if s == "ON" + " :set syntax=ON + if &filetype == "" + echohl ErrorMsg + echo "filetype unknown" + echohl None + endif + let s = &filetype + elseif s == "OFF" + let s = "" + endif + + if s != "" + " Load the syntax file(s). When there are several, separated by dots, + " load each in sequence. Skip empty entries. + for name in split(s, '\.') + if !empty(name) + exe "runtime! syntax/" . name . ".vim syntax/" . name . "/*.vim" + endif + endfor + endif +endfun + + +" Handle adding doxygen to other languages (C, C++, C#, IDL, java, php, DataScript) +au Syntax c,cpp,cs,idl,java,php,datascript + \ if (exists('b:load_doxygen_syntax') && b:load_doxygen_syntax) + \ || (exists('g:load_doxygen_syntax') && g:load_doxygen_syntax) + \ | runtime! syntax/doxygen.vim + \ | endif + + +" Source the user-specified syntax highlighting file +if exists("mysyntaxfile") + let s:fname = expand(mysyntaxfile) + if filereadable(s:fname) + execute "source " . fnameescape(s:fname) + endif +endif + +" Restore 'cpoptions' +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/syntax.vim b/.config/vim/syntax/syntax.vim new file mode 100644 index 0000000..06b8d8f --- /dev/null +++ b/.config/vim/syntax/syntax.vim @@ -0,0 +1,45 @@ +" Vim syntax support file +" Maintainer: The Vim Project +" Last Change: 2023 Aug 10 +" Former Maintainer: Bram Moolenaar + +" This file is used for ":syntax on". +" It installs the autocommands and starts highlighting for all buffers. + +if !has("syntax") + finish +endif + +" If Syntax highlighting appears to be on already, turn it off first, so that +" any leftovers are cleared. +if exists("syntax_on") || exists("syntax_manual") + so :p:h/nosyntax.vim +endif + +" Load the Syntax autocommands and set the default methods for highlighting. +runtime syntax/synload.vim + +" Load the FileType autocommands if not done yet. +if exists("did_load_filetypes") + let s:did_ft = 1 +else + filetype on + let s:did_ft = 0 +endif + +" Set up the connection between FileType and Syntax autocommands. +" This makes the syntax automatically set when the file type is detected. +" Avoid an error when 'verbose' is set and expansion fails. +augroup syntaxset + au! FileType * 0verbose exe "set syntax=" . expand("") +augroup END + + +" Execute the syntax autocommands for the each buffer. +" If the filetype wasn't detected yet, do that now. +" Always do the syntaxset autocommands, for buffers where the 'filetype' +" already was set manually (e.g., help buffers). +doautoall syntaxset FileType +if !s:did_ft + doautoall filetypedetect BufRead +endif diff --git a/.config/vim/syntax/sysctl.vim b/.config/vim/syntax/sysctl.vim new file mode 100644 index 0000000..d99ac01 --- /dev/null +++ b/.config/vim/syntax/sysctl.vim @@ -0,0 +1,39 @@ +" Vim syntax file +" Language: sysctl.conf(5) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2011-05-02 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn match sysctlBegin display '^' + \ nextgroup=sysctlToken,sysctlComment skipwhite + +syn match sysctlToken contained display '[^=]\+' + \ nextgroup=sysctlTokenEq skipwhite + +syn match sysctlTokenEq contained display '=' nextgroup=sysctlValue skipwhite + +syn region sysctlValue contained display oneline + \ matchgroup=sysctlValue start='\S' + \ matchgroup=Normal end='\s*$' + +syn keyword sysctlTodo contained TODO FIXME XXX NOTE + +syn region sysctlComment display oneline start='^\s*[#;]' end='$' + \ contains=sysctlTodo,@Spell + +hi def link sysctlTodo Todo +hi def link sysctlComment Comment +hi def link sysctlToken Identifier +hi def link sysctlTokenEq Operator +hi def link sysctlValue String + +let b:current_syntax = "sysctl" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/systemd.vim b/.config/vim/syntax/systemd.vim new file mode 100644 index 0000000..5dfba74 --- /dev/null +++ b/.config/vim/syntax/systemd.vim @@ -0,0 +1,8 @@ +" Vim syntax file +" Language: systemd.unit(5) + +if !exists('b:current_syntax') + " Looks a lot like dosini files. + runtime! syntax/dosini.vim + let b:current_syntax = 'systemd' +endif diff --git a/.config/vim/syntax/systemverilog.vim b/.config/vim/syntax/systemverilog.vim new file mode 100644 index 0000000..94c343e --- /dev/null +++ b/.config/vim/syntax/systemverilog.vim @@ -0,0 +1,90 @@ +" Vim syntax file +" Language: SystemVerilog +" Maintainer: kocha +" Last Change: 12-Aug-2013. +" 2025 Aug 20 by Vim project: Add IEE1800-2023 block #18056 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Read in Verilog syntax files +runtime! syntax/verilog.vim +unlet b:current_syntax + +" IEEE1800-2005 +syn keyword systemverilogStatement always_comb always_ff always_latch +syn keyword systemverilogStatement class endclass new +syn keyword systemverilogStatement virtual local const protected +syn keyword systemverilogStatement package endpackage +syn keyword systemverilogStatement rand randc constraint randomize +syn keyword systemverilogStatement with inside dist +syn keyword systemverilogStatement sequence endsequence randsequence +syn keyword systemverilogStatement srandom +syn keyword systemverilogStatement logic bit byte +syn keyword systemverilogStatement int longint shortint +syn keyword systemverilogStatement struct packed +syn keyword systemverilogStatement final +syn keyword systemverilogStatement import export +syn keyword systemverilogStatement context pure +syn keyword systemverilogStatement void shortreal chandle string +syn keyword systemverilogStatement clocking endclocking iff +syn keyword systemverilogStatement interface endinterface modport +syn keyword systemverilogStatement cover covergroup coverpoint endgroup +syn keyword systemverilogStatement property endproperty +syn keyword systemverilogStatement program endprogram +syn keyword systemverilogStatement bins binsof illegal_bins ignore_bins +syn keyword systemverilogStatement alias matches solve static assert +syn keyword systemverilogStatement assume super before expect bind +syn keyword systemverilogStatement extends null tagged extern this +syn keyword systemverilogStatement first_match throughout timeprecision +syn keyword systemverilogStatement timeunit type union +syn keyword systemverilogStatement uwire var cross ref wait_order intersect +syn keyword systemverilogStatement wildcard within + +syn keyword systemverilogTypeDef typedef enum + +syn keyword systemverilogConditional randcase +syn keyword systemverilogConditional unique priority + +syn keyword systemverilogRepeat return break continue +syn keyword systemverilogRepeat do foreach + +syn keyword systemverilogLabel join_any join_none forkjoin + +" IEEE1800-2009 add +syn keyword systemverilogStatement checker endchecker +syn keyword systemverilogStatement accept_on reject_on +syn keyword systemverilogStatement sync_accept_on sync_reject_on +syn keyword systemverilogStatement eventually nexttime until until_with +syn keyword systemverilogStatement s_always s_eventually s_nexttime s_until s_until_with +syn keyword systemverilogStatement let untyped +syn keyword systemverilogStatement strong weak +syn keyword systemverilogStatement restrict global implies + +syn keyword systemverilogConditional unique0 + +" IEEE1800-2012 add +syn keyword systemverilogStatement implements +syn keyword systemverilogStatement interconnect soft nettype + +" IEEE1800-2023 add +syn region systemverilogBlockString start=+"""+ end=+"""+ contains=verilogEscape,@Spell + +" Define the default highlighting. + +" The default highlighting. +hi def link systemverilogStatement Statement +hi def link systemverilogTypeDef TypeDef +hi def link systemverilogConditional Conditional +hi def link systemverilogRepeat Repeat +hi def link systemverilogLabel Label +hi def link systemverilogGlobal Define +hi def link systemverilogNumber Number +hi def link systemverilogBlockString String + + +let b:current_syntax = "systemverilog" + +" vim: ts=8 diff --git a/.config/vim/syntax/tads.vim b/.config/vim/syntax/tads.vim new file mode 100644 index 0000000..23a65b9 --- /dev/null +++ b/.config/vim/syntax/tads.vim @@ -0,0 +1,171 @@ +" Vim syntax file +" Language: TADS +" Maintainer: Amir Karger +" $Date: 2004/06/13 19:28:45 $ +" $Revision: 1.1 $ +" Stolen from: Bram Moolenaar's C language file +" Newest version at: http://www.hec.utah.edu/~karger/vim/syntax/tads.vim +" History info at the bottom of the file + +" TODO lots more keywords +" global, self, etc. are special *objects*, not functions. They should +" probably be a different color than the special functions +" Actually, should cvtstr etc. be functions?! (change tadsFunction) +" Make global etc. into Identifiers, since we don't have regular variables? + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" A bunch of useful keywords +syn keyword tadsStatement goto break return continue pass +syn keyword tadsLabel case default +syn keyword tadsConditional if else switch +syn keyword tadsRepeat while for do +syn keyword tadsStorageClass local compoundWord formatstring specialWords +syn keyword tadsBoolean nil true + +" TADS keywords +syn keyword tadsKeyword replace modify +syn keyword tadsKeyword global self inherited +" builtin functions +syn keyword tadsKeyword cvtstr cvtnum caps lower upper substr +syn keyword tadsKeyword say length +syn keyword tadsKeyword setit setscore +syn keyword tadsKeyword datatype proptype +syn keyword tadsKeyword car cdr +syn keyword tadsKeyword defined isclass +syn keyword tadsKeyword find firstobj nextobj +syn keyword tadsKeyword getarg argcount +syn keyword tadsKeyword input yorn askfile +syn keyword tadsKeyword rand randomize +syn keyword tadsKeyword restart restore quit save undo +syn keyword tadsException abort exit exitobj + +syn keyword tadsTodo contained TODO FIXME XXX + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match tadsSpecial contained "\\." +syn region tadsDoubleString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=tadsSpecial,tadsEmbedded +syn region tadsSingleString start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=tadsSpecial +" Embedded expressions in strings +syn region tadsEmbedded contained start="<<" end=">>" contains=tadsKeyword + +" TADS doesn't have \xxx, right? +"syn match cSpecial contained "\\[0-7][0-7][0-7]\=\|\\." +"syn match cSpecialCharacter "'\\[0-7][0-7]'" +"syn match cSpecialCharacter "'\\[0-7][0-7][0-7]'" + +"catch errors caused by wrong parenthesis +"syn region cParen transparent start='(' end=')' contains=ALLBUT,cParenError,cIncluded,cSpecial,cTodo,cUserCont,cUserLabel +"syn match cParenError ")" +"syn match cInParen contained "[{}]" +syn region tadsBrace transparent start='{' end='}' contains=ALLBUT,tadsBraceError,tadsIncluded,tadsSpecial,tadsTodo +syn match tadsBraceError "}" + +"integer number (TADS has no floating point numbers) +syn case ignore +syn match tadsNumber "\<[0-9]\+\>" +"hex number +syn match tadsNumber "\<0x[0-9a-f]\+\>" +syn match tadsIdentifier "\<[a-z][a-z0-9_$]*\>" +syn case match +" flag an octal number with wrong digits +syn match tadsOctalError "\<0[0-7]*[89]" + +" Removed complicated c_comment_strings +syn region tadsComment start="/\*" end="\*/" contains=tadsTodo +syn match tadsComment "//.*" contains=tadsTodo +syntax match tadsCommentError "\*/" + +syn region tadsPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=tadsComment,tadsString,tadsNumber,tadsCommentError +syn region tadsIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match tadsIncluded contained "<[^>]*>" +syn match tadsInclude "^\s*#\s*include\>\s*["<]" contains=tadsIncluded +syn region tadsDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,tadsPreCondit,tadsIncluded,tadsInclude,tadsDefine,tadsInBrace,tadsIdentifier + +syn region tadsPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,tadsPreCondit,tadsIncluded,tadsInclude,tadsDefine,tadsInParen,tadsIdentifier + +" Highlight User Labels +" TODO labels for gotos? +"syn region cMulti transparent start='?' end=':' contains=ALLBUT,cIncluded,cSpecial,cTodo,cUserCont,cUserLabel,cBitField +" Avoid matching foo::bar() in C++ by requiring that the next char is not ':' +"syn match cUserCont "^\s*\I\i*\s*:$" contains=cUserLabel +"syn match cUserCont ";\s*\I\i*\s*:$" contains=cUserLabel +"syn match cUserCont "^\s*\I\i*\s*:[^:]" contains=cUserLabel +"syn match cUserCont ";\s*\I\i*\s*:[^:]" contains=cUserLabel + +"syn match cUserLabel "\I\i*" contained + +" identifier: class-name [, class-name [...]] [property-list] ; +" Don't highlight comment in class def +syn match tadsClassDef "\[^/]*" contains=tadsObjectDef,tadsClass +syn match tadsClass contained "\" +syn match tadsObjectDef "\<[a-zA-Z][a-zA-Z0-9_$]*\s*:\s*[a-zA-Z0-9_$]\+\(\s*,\s*[a-zA-Z][a-zA-Z0-9_$]*\)*\(\s*;\)\=" +syn keyword tadsFunction contained function +syn match tadsFunctionDef "\<[a-zA-Z][a-zA-Z0-9_$]*\s*:\s*function[^{]*" contains=tadsFunction +"syn region tadsObject transparent start = '[a-zA-Z][\i$]\s*:\s*' end=";" contains=tadsBrace,tadsObjectDef + +" How far back do we go to find matching groups +if !exists("tads_minlines") + let tads_minlines = 15 +endif +exec "syn sync ccomment tadsComment minlines=" . tads_minlines +if !exists("tads_sync_dist") + let tads_sync_dist = 100 +endif +execute "syn sync maxlines=" . tads_sync_dist + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default methods for highlighting. Can be overridden later +hi def link tadsFunctionDef Function +hi def link tadsFunction Structure +hi def link tadsClass Structure +hi def link tadsClassDef Identifier +hi def link tadsObjectDef Identifier +" no highlight for tadsEmbedded, so it prints as normal text w/in the string + +hi def link tadsOperator Operator +hi def link tadsStructure Structure +hi def link tadsTodo Todo +hi def link tadsLabel Label +hi def link tadsConditional Conditional +hi def link tadsRepeat Repeat +hi def link tadsException Exception +hi def link tadsStatement Statement +hi def link tadsStorageClass StorageClass +hi def link tadsKeyWord Keyword +hi def link tadsSpecial SpecialChar +hi def link tadsNumber Number +hi def link tadsBoolean Boolean +hi def link tadsDoubleString tadsString +hi def link tadsSingleString tadsString + +hi def link tadsOctalError tadsError +hi def link tadsCommentError tadsError +hi def link tadsBraceError tadsError +hi def link tadsInBrace tadsError +hi def link tadsError Error + +hi def link tadsInclude Include +hi def link tadsPreProc PreProc +hi def link tadsDefine Macro +hi def link tadsIncluded tadsString +hi def link tadsPreCondit PreCondit + +hi def link tadsString String +hi def link tadsComment Comment + + + +let b:current_syntax = "tads" + +" Changes: +" 11/18/99 Added a bunch of TADS functions, tadsException +" 10/22/99 Misspelled Moolenaar (sorry!), c_minlines to tads_minlines +" +" vim: ts=8 diff --git a/.config/vim/syntax/tags.vim b/.config/vim/syntax/tags.vim new file mode 100644 index 0000000..e87e3fc --- /dev/null +++ b/.config/vim/syntax/tags.vim @@ -0,0 +1,33 @@ +" Language: tags +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Charles E. Campbell +" Last Change: Oct 26, 2016 +" 2024 Feb 19 by Vim Project (announce adoption) +" Version: 8 +" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TAGS + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn match tagName "^[^\t]\+" skipwhite nextgroup=tagPath +syn match tagPath "[^\t]\+" contained skipwhite nextgroup=tagAddr contains=tagBaseFile +syn match tagBaseFile "[a-zA-Z_]\+[\.a-zA-Z_0-9]*\t"me=e-1 contained +syn match tagAddr "\d*" contained skipwhite nextgroup=tagComment +syn region tagAddr matchgroup=tagDelim start="/" skip="\(\\\\\)*\\/" matchgroup=tagDelim end="$\|/" oneline contained skipwhite nextgroup=tagComment +syn match tagComment ";.*$" contained contains=tagField +syn match tagComment "^!_TAG_.*$" +syn match tagField contained "[a-z]*:" + +" Define the default highlighting. +if !exists("skip_drchip_tags_inits") + hi def link tagBaseFile PreProc + hi def link tagComment Comment + hi def link tagDelim Delimiter + hi def link tagField Number + hi def link tagName Identifier + hi def link tagPath PreProc +endif + +let b:current_syntax = "tags" diff --git a/.config/vim/syntax/tak.vim b/.config/vim/syntax/tak.vim new file mode 100644 index 0000000..7a8fceb --- /dev/null +++ b/.config/vim/syntax/tak.vim @@ -0,0 +1,119 @@ +" Vim syntax file +" Language: TAK2, TAK3, TAK2000 thermal modeling input file +" Maintainer: Adrian Nagle, anagle@ball.com +" Last Change: 2003 May 11 +" Filenames: *.tak +" URL: http://www.naglenet.org/vim/syntax/tak.vim +" MAIN URL: http://www.naglenet.org/vim/ + + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + + + +" Ignore case +syn case ignore + + + +" +" +" Begin syntax definitions for tak input file. +" + +" Force free-form fortran format +let fortran_free_source=1 + +" Load FORTRAN syntax file +runtime! syntax/fortran.vim +unlet b:current_syntax + + + +" Define keywords for TAK and TAKOUT +syn keyword takOptions AUTODAMP CPRINT CSGDUMP GPRINT HPRINT LODTMP +syn keyword takOptions LOGIC LPRINT NCVPRINT PLOTQ QPRINT QDUMP +syn keyword takOptions SUMMARY SOLRTN UID DICTIONARIES + +syn keyword takRoutine SSITER FWDWRD FWDBCK BCKWRD + +syn keyword takControl ABSZRO BACKUP DAMP DTIMEI DTIMEL DTIMEH IFC +syn keyword takControl MAXTEMP NLOOPS NLOOPT NODELIST OUTPUT PLOT +syn keyword takControl SCALE SIGMA SSCRIT TIMEND TIMEN TIMEO TRCRIT +syn keyword takControl PLOT + +syn keyword takSolids PLATE CYL +syn keyword takSolidsArg ID MATNAM NTYPE TEMP XL YL ZL ISTRN ISTRG NNX +syn keyword takSolidsArg NNY NNZ INCX INCY INCZ IAK IAC DIFF ARITH BOUN +syn keyword takSolidsArg RMIN RMAX AXMAX NNR NNTHETA INCR INCTHETA END + +syn case ignore + +syn keyword takMacro fac pstart pstop +syn keyword takMacro takcommon fstart fstop + +syn keyword takIdentifier flq flx gen ncv per sim siv stf stv tvd tvs +syn keyword takIdentifier tvt pro thm + + + +" Define matches for TAK +syn match takFortran "^F[0-9 ]"me=e-1 +syn match takMotran "^M[0-9 ]"me=e-1 + +syn match takComment "^C.*$" +syn match takComment "^R.*$" +syn match takComment "\$.*$" + +syn match takHeader "^header[^,]*" + +syn match takIncludeFile "include \+[^ ]\+"hs=s+8 contains=fortranInclude + +syn match takInteger "-\=\<[0-9]*\>" +syn match takFloat "-\=\<[0-9]*\.[0-9]*" +syn match takScientific "-\=\<[0-9]*\.[0-9]*E[-+]\=[0-9]\+\>" + +syn match takEndData "END OF DATA" + +if exists("thermal_todo") + execute 'syn match takTodo ' . '"^'.thermal_todo.'.*$"' +else + syn match takTodo "^?.*$" +endif + + + +" Define the default highlighting +" Only when an item doesn't have highlighting yet + +hi def link takMacro Macro +hi def link takOptions Special +hi def link takRoutine Type +hi def link takControl Special +hi def link takSolids Special +hi def link takSolidsArg Statement +hi def link takIdentifier Identifier + +hi def link takFortran PreProc +hi def link takMotran PreProc + +hi def link takComment Comment +hi def link takHeader Typedef +hi def link takIncludeFile Type +hi def link takInteger Number +hi def link takFloat Float +hi def link takScientific Float + +hi def link takEndData Macro + +hi def link takTodo Todo + + + +let b:current_syntax = "tak" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/takcmp.vim b/.config/vim/syntax/takcmp.vim new file mode 100644 index 0000000..9426e02 --- /dev/null +++ b/.config/vim/syntax/takcmp.vim @@ -0,0 +1,69 @@ +" Vim syntax file +" Language: TAK2, TAK3, TAK2000 thermal modeling compare file +" Maintainer: Adrian Nagle, anagle@ball.com +" Last Change: 2003 May 11 +" Filenames: *.cmp +" URL: http://www.naglenet.org/vim/syntax/takcmp.vim +" MAIN URL: http://www.naglenet.org/vim/ + + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + + + +" Ignore case +syn case ignore + + + +" +" +" Begin syntax definitions for compare files. +" +" Define keywords for TAK compare + syn keyword takcmpUnit celsius fahrenheit + + + +" Define matches for TAK compare + syn match takcmpTitle "Steady State Temperature Comparison" + + syn match takcmpLabel "Run Date:" + syn match takcmpLabel "Run Time:" + syn match takcmpLabel "Temp. File \d Units:" + syn match takcmpLabel "Filename:" + syn match takcmpLabel "Output Units:" + + syn match takcmpHeader "^ *Node\( *File \d\)* *Node Description" + + syn match takcmpDate "\d\d\/\d\d\/\d\d" + syn match takcmpTime "\d\d:\d\d:\d\d" + syn match takcmpInteger "^ *-\=\<[0-9]*\>" + syn match takcmpFloat "-\=\<[0-9]*\.[0-9]*" + + + +" Define the default highlighting +" Only when an item doesn't have highlighting yet + +hi def link takcmpTitle Type +hi def link takcmpUnit PreProc + +hi def link takcmpLabel Statement + +hi def link takcmpHeader takHeader + +hi def link takcmpDate Identifier +hi def link takcmpTime Identifier +hi def link takcmpInteger Number +hi def link takcmpFloat Special + + + +let b:current_syntax = "takcmp" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/takout.vim b/.config/vim/syntax/takout.vim new file mode 100644 index 0000000..5e5d360 --- /dev/null +++ b/.config/vim/syntax/takout.vim @@ -0,0 +1,85 @@ +" Vim syntax file +" Language: TAK2, TAK3, TAK2000 thermal modeling output file +" Maintainer: Adrian Nagle, anagle@ball.com +" Last Change: 2003 May 11 +" Filenames: *.out +" URL: http://www.naglenet.org/vim/syntax/takout.vim +" MAIN URL: http://www.naglenet.org/vim/ + + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + + + +" Ignore case +syn case match + + + +" Load TAK syntax file +runtime! syntax/tak.vim +unlet b:current_syntax + + + +" +" +" Begin syntax definitions for tak output files. +" + +" Define keywords for TAK output +syn case match + +syn keyword takoutPos ON SI +syn keyword takoutNeg OFF ENG + + + +" Define matches for TAK output +syn match takoutTitle "TAK III" +syn match takoutTitle "Release \d.\d\d" +syn match takoutTitle " K & K Associates *Thermal Analysis Kit III *Serial Number \d\d-\d\d\d" + +syn match takoutFile ": \w*\.TAK"hs=s+2 + +syn match takoutInteger "T\=[0-9]*\>"ms=s+1 + +syn match takoutSectionDelim "[-<>]\{4,}" contains=takoutSectionTitle +syn match takoutSectionDelim ":\=\.\{4,}:\=" contains=takoutSectionTitle +syn match takoutSectionTitle "[-<:] \w[0-9A-Za-z_() ]\+ [->:]"hs=s+1,me=e-1 + +syn match takoutHeaderDelim "=\{5,}" +syn match takoutHeaderDelim "|\{5,}" +syn match takoutHeaderDelim "+\{5,}" + +syn match takoutLabel "Input File:" contains=takoutFile +syn match takoutLabel "Begin Solution: Routine" + +syn match takoutError "<<< Error >>>" + + +" Define the default highlighting +" Only when an item doesn't have highlighting yet + +hi def link takoutPos Statement +hi def link takoutNeg PreProc +hi def link takoutTitle Type +hi def link takoutFile takIncludeFile +hi def link takoutInteger takInteger + +hi def link takoutSectionDelim Delimiter +hi def link takoutSectionTitle Exception +hi def link takoutHeaderDelim SpecialComment +hi def link takoutLabel Identifier + +hi def link takoutError Error + + + +let b:current_syntax = "takout" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/tap.vim b/.config/vim/syntax/tap.vim new file mode 100644 index 0000000..6b00b1d --- /dev/null +++ b/.config/vim/syntax/tap.vim @@ -0,0 +1,86 @@ +" Vim syntax file +" Language: Verbose TAP Output +" Maintainer: Rufus Cable +" Remark: Simple syntax highlighting for TAP output +" License: Vim License (see :help license) +" Copyright: (c) 2008-2013 Rufus Cable +" Last Change: 2020 Mar 15 + +if exists("b:current_syntax") + finish +endif + +syn match tapTestDiag /^ *#.*/ contains=tapTestTodo +syn match tapTestTime /^ *\[\d\d:\d\d:\d\d\].*/ contains=tapTestFile +syn match tapTestFile /\w\+\/[^. ]*/ contained +syn match tapTestFileWithDot /\w\+\/[^ ]*/ contained + +syn match tapTestPlan /^ *\d\+\.\.\d\+$/ + +" tapTest is a line like 'ok 1', 'not ok 2', 'ok 3 - xxxx' +syn match tapTest /^ *\(not \)\?ok \d\+.*/ contains=tapTestStatusOK,tapTestStatusNotOK,tapTestLine + +" tapTestLine is the line without the ok/not ok status - i.e. number and +" optional message +syn match tapTestLine /\d\+\( .*\|$\)/ contains=tapTestNumber,tapTestLoadMessage,tapTestTodo,tapTestSkip contained + +" turn ok/not ok messages green/red respectively +syn match tapTestStatusOK /ok/ contained +syn match tapTestStatusNotOK /not ok/ contained + +" highlight todo tests +syn match tapTestTodo /\c\(# TODO\|Failed (TODO)\) .*$/ contained contains=tapTestTodoRev +syn match tapTestTodoRev /\c\/ contained + +" highlight skipped tests +syn match tapTestSkip /\c# skip .*$/ contained contains=tapTestSkipTag +syn match tapTestSkipTag /\c\(# \)\@<=skip\>/ contained + +" look behind so "ok 123" and "not ok 124" match test number +syn match tapTestNumber /\(ok \)\@<=\d\d*/ contained +syn match tapTestLoadMessage /\*\*\*.*\*\*\*/ contained contains=tapTestThreeStars,tapTestFileWithDot +syn match tapTestThreeStars /\*\*\*/ contained + +syn region tapTestRegion start=/^ *\(not \)\?ok.*$/me=e+1 end=/^\(\(not \)\?ok\|# Looks like you planned \|All tests successful\|Bailout called\)/me=s-1 fold transparent excludenl +syn region tapTestResultsOKRegion start=/^\(All tests successful\|Result: PASS\)/ end=/$/ +syn region tapTestResultsNotOKRegion start=/^\(# Looks like you planned \|Bailout called\|# Looks like you failed \|Result: FAIL\)/ end=/$/ +syn region tapTestResultsSummaryRegion start=/^Test Summary Report/ end=/^Files=.*$/ contains=tapTestResultsSummaryHeading,tapTestResultsSummaryNotOK + +syn region tapTestResultsSummaryHeading start=/^Test Summary Report/ end=/^-\+$/ contained +syn region tapTestResultsSummaryNotOK start=/TODO passed:/ end=/$/ contained + +syn region tapTestInstructionsRegion start=/\%1l/ end=/^$/ + +syn sync fromstart + +if !exists("did_tapverboseoutput_syntax_inits") + let did_tapverboseoutput_syntax_inits = 1 + + hi tapTestStatusOK term=bold ctermfg=green guifg=Green + hi tapTestStatusNotOK term=reverse ctermfg=black ctermbg=red guifg=Black guibg=Red + hi tapTestTodo term=bold ctermfg=yellow ctermbg=black guifg=Yellow guibg=Black + hi tapTestTodoRev term=reverse ctermfg=black ctermbg=yellow guifg=Black guibg=Yellow + hi tapTestSkip term=bold ctermfg=lightblue guifg=LightBlue + hi tapTestSkipTag term=reverse ctermfg=black ctermbg=lightblue guifg=Black guibg=LightBlue + hi tapTestTime term=bold ctermfg=blue guifg=Blue + hi tapTestFile term=reverse ctermfg=black ctermbg=yellow guibg=Black guifg=Yellow + hi tapTestLoadedFile term=bold ctermfg=black ctermbg=cyan guibg=Cyan guifg=Black + hi tapTestThreeStars term=reverse ctermfg=blue guifg=Blue + hi tapTestPlan term=bold ctermfg=yellow guifg=Yellow + + hi link tapTestFileWithDot tapTestLoadedFile + hi link tapTestNumber Number + hi link tapTestDiag Comment + + hi tapTestRegion ctermbg=green + + hi tapTestResultsOKRegion ctermbg=green ctermfg=black + hi tapTestResultsNotOKRegion ctermbg=red ctermfg=black + + hi tapTestResultsSummaryHeading ctermbg=blue ctermfg=white + hi tapTestResultsSummaryNotOK ctermbg=red ctermfg=black + + hi tapTestInstructionsRegion ctermbg=lightmagenta ctermfg=black +endif + +let b:current_syntax="tapVerboseOutput" diff --git a/.config/vim/syntax/tar.vim b/.config/vim/syntax/tar.vim new file mode 100644 index 0000000..815c221 --- /dev/null +++ b/.config/vim/syntax/tar.vim @@ -0,0 +1,19 @@ +" Language : Tar Listing Syntax +" Maintainer : Bram Moolenaar +" Last change: Sep 08, 2004 + +if exists("b:current_syntax") + finish +endif + +syn match tarComment '^".*' contains=tarFilename +syn match tarFilename 'tarfile \zs.*' contained +syn match tarDirectory '.*/$' + +hi def link tarComment Comment +hi def link tarFilename Constant +hi def link tarDirectory Type + +let b:current_syntax = 'tar' + +" vim: ts=8 diff --git a/.config/vim/syntax/taskdata.vim b/.config/vim/syntax/taskdata.vim new file mode 100644 index 0000000..63a8284 --- /dev/null +++ b/.config/vim/syntax/taskdata.vim @@ -0,0 +1,45 @@ +" Vim syntax file +" Language: task data +" Maintainer: John Florian +" Updated: Wed Jul 8 19:46:20 EDT 2009 + + +" quit when a syntax file was already loaded. +if exists("b:current_syntax") + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +" Key Names for values. +syn keyword taskdataKey description due end entry imask mask parent +syn keyword taskdataKey priority project recur start status tags uuid +syn match taskdataKey "annotation_\d\+" +syn match taskdataUndo "^time.*$" +syn match taskdataUndo "^\(old \|new \|---\)" + +" Values associated with key names. +" +" Strings +syn region taskdataString matchgroup=Normal start=+"+ end=+"+ + \ contains=taskdataEncoded,taskdataUUID,@Spell +" +" Special Embedded Characters (e.g., ",") +syn match taskdataEncoded "&\a\+;" contained +" UUIDs +syn match taskdataUUID "\x\{8}-\(\x\{4}-\)\{3}\x\{12}" contained + + +" The default methods for highlighting. Can be overridden later. +hi def link taskdataEncoded Function +hi def link taskdataKey Statement +hi def link taskdataString String +hi def link taskdataUUID Special +hi def link taskdataUndo Type + +let b:current_syntax = "taskdata" + +let &cpo = s:keepcpo +unlet s:keepcpo + +" vim:noexpandtab diff --git a/.config/vim/syntax/taskedit.vim b/.config/vim/syntax/taskedit.vim new file mode 100644 index 0000000..d33ca78 --- /dev/null +++ b/.config/vim/syntax/taskedit.vim @@ -0,0 +1,37 @@ +" Vim syntax file +" Language: support for 'task 42 edit' +" Maintainer: John Florian +" Updated: Wed Jul 8 19:46:32 EDT 2009 + + +" quit when a syntax file was already loaded. +if exists("b:current_syntax") + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +syn match taskeditHeading "^\s*#\s*Name\s\+Editable details\s*$" contained +syn match taskeditHeading "^\s*#\s*-\+\s\+-\+\s*$" contained +syn match taskeditReadOnly "^\s*#\s*\(UU\)\?ID:.*$" contained +syn match taskeditReadOnly "^\s*#\s*Status:.*$" contained +syn match taskeditReadOnly "^\s*#\s*i\?Mask:.*$" contained +syn match taskeditKey "^ *.\{-}:" nextgroup=taskeditString +syn match taskeditComment "^\s*#.*$" + \ contains=taskeditReadOnly,taskeditHeading +syn match taskeditString ".*$" contained contains=@Spell + + +" The default methods for highlighting. Can be overridden later. +hi def link taskeditComment Comment +hi def link taskeditHeading Function +hi def link taskeditKey Statement +hi def link taskeditReadOnly Special +hi def link taskeditString String + +let b:current_syntax = "taskedit" + +let &cpo = s:keepcpo +unlet s:keepcpo + +" vim:noexpandtab diff --git a/.config/vim/syntax/tasm.vim b/.config/vim/syntax/tasm.vim new file mode 100644 index 0000000..b8b5e69 --- /dev/null +++ b/.config/vim/syntax/tasm.vim @@ -0,0 +1,115 @@ +" Vim syntax file +" Language: TASM: turbo assembler by Borland +" Maintainer: FooLman of United Force +" Last Change: 2012 Feb 03 by Thilo Six, and 2018 Nov 27. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn case ignore +syn match tasmLabel "^[\ \t]*[@a-z_$][a-z0-9_$@]*\ *:" +syn keyword tasmDirective ALIAS ALIGN ARG ASSUME %BIN CATSRT CODESEG +syn match tasmDirective "\<\(byte\|word\|dword\|qword\)\ ptr\>" +" CALL extended syntax +syn keyword tasmDirective COMM %CONDS CONST %CREF %CREFALL %CREFREF +syn keyword tasmDirective %CREFUREF %CTLS DATASEG DB DD %DEPTH DF DISPLAY +syn keyword tasmDirective DOSSEG DP DQ DT DW ELSE EMUL END ENDIF +" IF XXXX +syn keyword tasmDirective ENDM ENDP ENDS ENUM EQU ERR EVEN EVENDATA EXITCODE +syn keyword tasmDirective EXITM EXTRN FARDATA FASTIMUL FLIPFLAG GETFIELD GLOBAL +syn keyword tasmDirective GOTO GROUP IDEAL %INCL INCLUDE INCLUDELIB INSTR IRP +"JMP +syn keyword tasmDirective IRPC JUMPS LABEL LARGESTACK %LINUM %LIST LOCAL +syn keyword tasmDirective LOCALS MACRO %MACS MASKFLAG MASM MASM51 MODEL +syn keyword tasmDirective MULTERRS NAME %NEWPAGE %NOCONDS %NOCREF %NOCTLS +syn keyword tasmDirective NOEMUL %NOINCL NOJUMPS %NOLIST NOLOCALS %NOMACS +syn keyword tasmDirective NOMASM51 NOMULTERRS NOSMART %NOSYMS %NOTRUNC NOWARN +syn keyword tasmDirective %PAGESIZE %PCNT PNO87 %POPLCTL POPSTATE PROC PROCDESC +syn keyword tasmDirective PROCTYPE PUBLIC PUBLICDLL PURGE %PUSHCTL PUSHSTATE +"rept, ret +syn keyword tasmDirective QUIRKS RADIX RECORD RETCODE SEGMENT SETFIELD +syn keyword tasmDirective SETFLAG SIZESTR SMALLSTACK SMART STACK STARTUPCODE +syn keyword tasmDirective STRUC SUBSTR %SUBTTL %SYMS TABLE %TABSIZE TBLINIT +syn keyword tasmDirective TBLINST TBLPTR TESTFLAG %TEXT %TITLE %TRUNC TYPEDEF +syn keyword tasmDirective UDATASEG UFARDATA UNION USES VERSION WAR WHILE ?DEBUG + +syn keyword tasmInstruction AAA AAD AAM AAS ADC ADD AND ARPL BOUND BSF BSR +syn keyword tasmInstruction BSWAP BT BTC BTR BTS CALL CBW CLC CLD CLI CLTS +syn keyword tasmInstruction CMC CMP CMPXCHG CMPXCHG8B CPUID CWD CDQ CWDE +syn keyword tasmInstruction DAA DAS DEC DIV ENTER RETN RETF F2XM1 +syn keyword tasmCoprocInstr FABS FADD FADDP FBLD FBSTP FCHG FCOM FCOM2 FCOMI +syn keyword tasmCoprocInstr FCOMIP FCOMP FCOMP3 FCOMP5 FCOMPP FCOS FDECSTP +syn keyword tasmCoprocInstr FDISI FDIV FDIVP FDIVR FENI FFREE FFREEP FIADD +syn keyword tasmCoprocInstr FICOM FICOMP FIDIV FIDIVR FILD FIMUL FINIT FINCSTP +syn keyword tasmCoprocInstr FIST FISTP FISUB FISUBR FLD FLD1 FLDCW FLDENV +syn keyword tasmCoprocInstr FLDL2E FLDL2T FLDLG2 FLDLN2 FLDPI FLDZ FMUL FMULP +syn keyword tasmCoprocInstr FNCLEX FNINIT FNOP FNSAVE FNSTCW FNSTENV FNSTSW +syn keyword tasmCoprocInstr FPATAN FPREM FPREM1 FPTAN FRNDINT FRSTOR FSCALE +syn keyword tasmCoprocInstr FSETPM FSIN FSINCOM FSQRT FST FSTP FSTP1 FSTP8 +syn keyword tasmCoprocInstr FSTP9 FSUB FSUBP FSUBR FSUBRP FTST FUCOM FUCOMI +syn keyword tasmCoprocInstr FUCOMPP FWAIT FXAM FXCH FXCH4 FXCH7 FXTRACT FYL2X +syn keyword tasmCoprocInstr FYL2XP1 FSTCW FCHS FSINCOS +syn keyword tasmInstruction IDIV IMUL IN INC INT INTO INVD INVLPG IRET JMP +syn keyword tasmInstruction LAHF LAR LDS LEA LEAVE LES LFS LGDT LGS LIDT LLDT +syn keyword tasmInstruction LMSW LOCK LODSB LSL LSS LTR MOV MOVSX MOVZX MUL +syn keyword tasmInstruction NEG NOP NOT OR OUT POP POPA POPAD POPF POPFD PUSH +syn keyword tasmInstruction PUSHA PUSHAD PUSHF PUSHFD RCL RCR RDMSR RDPMC RDTSC +syn keyword tasmInstruction REP RET ROL ROR RSM SAHF SAR SBB SGDT SHL SAL SHLD +syn keyword tasmInstruction SHR SHRD SIDT SMSW STC STD STI STR SUB TEST VERR +syn keyword tasmInstruction VERW WBINVD WRMSR XADD XCHG XLAT XOR +syn keyword tasmMMXinst EMMS MOVD MOVQ PACKSSDW PACKSSWB PACKUSWB PADDB +syn keyword tasmMMXinst PADDD PADDSB PADDSB PADDSW PADDUSB PADDUSW PADDW +syn keyword tasmMMXinst PAND PANDN PCMPEQB PCMPEQD PCMPEQW PCMPGTB PCMPGTD +syn keyword tasmMMXinst PCMPGTW PMADDWD PMULHW PMULLW POR PSLLD PSLLQ +syn keyword tasmMMXinst PSLLW PSRAD PSRAW PSRLD PSRLQ PSRLW PSUBB PSUBD +syn keyword tasmMMXinst PSUBSB PSUBSW PSUBUSB PSUBUSW PSUBW PUNPCKHBW +syn keyword tasmMMXinst PUNPCKHBQ PUNPCKHWD PUNPCKLBW PUNPCKLDQ PUNPCKLWD +syn keyword tasmMMXinst PXOR +"FCMOV +syn match tasmInstruction "\<\(CMPS\|MOVS\|OUTS\|SCAS\|STOS\|LODS\|INS\)[BWD]" +syn match tasmInstruction "\<\(CMOV\|SET\|J\)N\=[ABCGLESXZ]\>" +syn match tasmInstruction "\<\(CMOV\|SET\|J\)N\=[ABGL]E\>" +syn match tasmInstruction "\<\(LOOP\|REP\)N\=[EZ]\=\>" +syn match tasmRegister "\<[A-D][LH]\>" +syn match tasmRegister "\" +syn match tasmRegister "\<[C-GS]S\>" +syn region tasmComment start=";" end="$" +"HACK! comment ? ... selection +syn region tasmComment start="comment \+\$" end="\$" +syn region tasmComment start="comment \+\~" end="\~" +syn region tasmComment start="comment \+#" end="#" +syn region tasmString start="'" end="'" +syn region tasmString start='"' end='"' + +syn match tasmDec "\<-\=[0-9]\+\.\=[0-9]*\>" +syn match tasmHex "\<[0-9][0-9A-F]*H\>" +syn match tasmOct "\<[0-7]\+O\>" +syn match tasmBin "\<[01]\+B\>" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link tasmString String +hi def link tasmDec Number +hi def link tasmHex Number +hi def link tasmOct Number +hi def link tasmBin Number +hi def link tasmInstruction Keyword +hi def link tasmCoprocInstr Keyword +hi def link tasmMMXInst Keyword +hi def link tasmDirective PreProc +hi def link tasmRegister Identifier +hi def link tasmProctype PreProc +hi def link tasmComment Comment +hi def link tasmLabel Label + + +let b:current_syntax = "tasm" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/tcl.vim b/.config/vim/syntax/tcl.vim new file mode 100644 index 0000000..59cb04f --- /dev/null +++ b/.config/vim/syntax/tcl.vim @@ -0,0 +1,274 @@ +" Vim syntax file +" Language: Tcl/Tk +" Maintainer: Taylor Venable +" (previously Brett Cannon ) +" (previously Dean Copsey ) +" (previously Matt Neumann ) +" (previously Allan Kelly ) +" Original: Robin Becker +" Last Change: 2021 Nov 16 +" Version: 1.14 plus improvements from PR #8948 +" URL: (removed, no longer worked) + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Basic Tcl commands: http://www.tcl.tk/man/tcl8.6/TclCmd/contents.htm +syn keyword tclCommand after append array bgerror binary cd chan clock close concat +syn keyword tclCommand dde dict encoding eof error eval exec exit expr fblocked +syn keyword tclCommand fconfigure fcopy file fileevent flush format gets glob +syn keyword tclCommand global history http incr info interp join lappend lassign +syn keyword tclCommand lindex linsert list llength lmap load lrange lrepeat +syn keyword tclCommand lreplace lreverse lsearch lset lsort memory my namespace +syn keyword tclCommand next nextto open package pid puts pwd read refchan regexp +syn keyword tclCommand registry regsub rename scan seek self set socket source +syn keyword tclCommand split string subst tell time trace unknown unload unset +syn keyword tclCommand update uplevel upvar variable vwait + +" The 'Tcl Standard Library' commands: http://www.tcl.tk/man/tcl8.6/TclCmd/library.htm +syn keyword tclCommand auto_execok auto_import auto_load auto_mkindex auto_reset +syn keyword tclCommand auto_qualify tcl_findLibrary parray tcl_endOfWord +syn keyword tclCommand tcl_startOfNextWord tcl_startOfPreviousWord +syn keyword tclCommand tcl_wordBreakAfter tcl_wordBreakBefore + +" Global variables used by Tcl: http://www.tcl.tk/man/tcl8.6/TclCmd/tclvars.htm +syn keyword tclVars auto_path env errorCode errorInfo tcl_library tcl_patchLevel +syn keyword tclVars tcl_pkgPath tcl_platform tcl_precision tcl_rcFileName +syn keyword tclVars tcl_traceCompile tcl_traceExec tcl_wordchars +syn keyword tclVars tcl_nonwordchars tcl_version argc argv argv0 tcl_interactive + +" Strings which expr accepts as boolean values, aside from zero / non-zero. +syn keyword tclBoolean true false on off yes no + +syn keyword tclProcCommand apply coroutine proc return tailcall yield yieldto +syn keyword tclConditional if then else elseif switch +syn keyword tclConditional catch try throw finally +syn keyword tclLabel default +syn keyword tclRepeat while for foreach break continue + +syn keyword tcltkSwitch contained insert create polygon fill outline tag + +" WIDGETS +" commands associated with widgets +syn keyword tcltkWidgetSwitch contained background highlightbackground insertontime cget +syn keyword tcltkWidgetSwitch contained selectborderwidth borderwidth highlightcolor insertwidth +syn keyword tcltkWidgetSwitch contained selectforeground cursor highlightthickness padx setgrid +syn keyword tcltkWidgetSwitch contained exportselection insertbackground pady takefocus +syn keyword tcltkWidgetSwitch contained font insertborderwidth relief xscrollcommand +syn keyword tcltkWidgetSwitch contained foreground insertofftime selectbackground yscrollcommand +syn keyword tcltkWidgetSwitch contained height spacing1 spacing2 spacing3 +syn keyword tcltkWidgetSwitch contained state tabs width wrap +" button +syn keyword tcltkWidgetSwitch contained command default +" canvas +syn keyword tcltkWidgetSwitch contained closeenough confine scrollregion xscrollincrement yscrollincrement orient +" checkbutton, radiobutton +syn keyword tcltkWidgetSwitch contained indicatoron offvalue onvalue selectcolor selectimage state variable +" entry, frame +syn keyword tcltkWidgetSwitch contained show class colormap container visual +" listbox, menu +syn keyword tcltkWidgetSwitch contained selectmode postcommand selectcolor tearoff tearoffcommand title type +" menubutton, message +syn keyword tcltkWidgetSwitch contained direction aspect justify +" scale +syn keyword tcltkWidgetSwitch contained bigincrement digits from length resolution showvalue sliderlength sliderrelief tickinterval to +" scrollbar +syn keyword tcltkWidgetSwitch contained activerelief elementborderwidth +" image +syn keyword tcltkWidgetSwitch contained delete names types create +" variable reference + " ::optional::namespaces +syn match tclVarRef "$\(\(::\)\?\([[:alnum:]_]*::\)*\)\a[[:alnum:]_]*" + " ${...} may contain any character except '}' +syn match tclVarRef "${[^}]*}" + +" Used to facilitate hack to utilize string background for certain color +" schemes, e.g. inkpot and lettuce. +syn cluster tclVarRefC add=tclVarRef +syn cluster tclSpecialC add=tclSpecial + +" The syntactic unquote-splicing replacement for [expand]. +syn match tclExpand '\s{\*}' +syn match tclExpand '^{\*}' + +" menu, mane add +syn keyword tcltkWidgetSwitch contained active end last none cascade checkbutton command radiobutton separator +syn keyword tcltkWidgetSwitch contained activebackground actveforeground accelerator background bitmap columnbreak +syn keyword tcltkWidgetSwitch contained font foreground hidemargin image indicatoron label menu offvalue onvalue +syn keyword tcltkWidgetSwitch contained selectcolor selectimage state underline value variable +syn keyword tcltkWidgetSwitch contained add clone configure delete entrycget entryconfigure index insert invoke +syn keyword tcltkWidgetSwitch contained post postcascade type unpost yposition activate +"syn keyword tcltkWidgetSwitch contained +"syn match tcltkWidgetSwitch contained +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef + +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +" These words are dual purpose. +" match switches +"syn match tcltkWidgetSwitch contained "-text"hs=s+1 +syn match tcltkWidgetSwitch contained "-text\(var\)\?"hs=s+1 +syn match tcltkWidgetSwitch contained "-menu"hs=s+1 +syn match tcltkWidgetSwitch contained "-label"hs=s+1 +" match commands - 2 lines for pretty match. +"variable +" Special case - If a number follows a variable region, it must be at the end of +" the pattern, by definition. Therefore, (1) either include a number as the region +" end and exclude tclNumber from the contains list, or (2) make variable +" keepend. As (1) would put variable out of step with everything else, use (2). +syn region tcltkCommand matchgroup=tcltkCommandColor start="^\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tclString,tclNumber,tclVarRef,tcltkCommand +syn region tcltkCommand matchgroup=tcltkCommandColor start="\s\\|\[\"hs=s+1 matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tclString,tclNumber,tclVarRef,tcltkCommand +" menu +syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\s\\|\[\"hs=s+1 matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +" label +syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\s\\|\[\"hs=s+1 matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef +" text +syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidget,tcltkWidgetSwitch,tcltkSwitch,tclNumber,tclVarRef,tclString +syn region tcltkWidget matchgroup=tcltkWidgetColor start="\s\\|\[\"hs=s+1 matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidget,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef + +" This isn't contained (I don't think) so it's OK to just associate with the Color group. +" TODO: This could be wrong. +syn keyword tcltkWidgetColor toplevel + + +syn region tcltkPackConf matchgroup=tcltkPackConfColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tcltkPackConfSwitch,tclNumber,tclVarRef keepend +syn region tcltkPackConf matchgroup=tcltkPackConfColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tcltkPackConfSwitch,tclNumber,tclVarRef + + +" NAMESPACE +" commands associated with namespace +syn keyword tcltkNamespaceSwitch contained children code current delete eval +syn keyword tcltkNamespaceSwitch contained export forget import inscope origin +syn keyword tcltkNamespaceSwitch contained parent qualifiers tail which command variable +syn region tcltkCommand matchgroup=tcltkCommandColor start="\" matchgroup=NONE skip="^\s*$" end="{\|}\|]\|\"\|[^\\]*\s*$"me=e-1 contains=tclLineContinue,tcltkNamespaceSwitch + +" EXPR +" commands associated with expr +syn keyword tcltkMaths contained abs acos asin atan atan2 bool ceil cos cosh double entier +syn keyword tcltkMaths contained exp floor fmod hypot int isqrt log log10 max min pow rand +syn keyword tcltkMaths contained round sin sinh sqrt srand tan tanh wide + +syn region tcltkCommand matchgroup=tcltkCommandColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1 contains=tclLineContinue,tcltkMaths,tclNumber,tclVarRef,tclString,tcltlWidgetSwitch,tcltkCommand,tcltkPackConf + +" format +syn region tcltkCommand matchgroup=tcltkCommandColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1 contains=tclLineContinue,tcltkMaths,tclNumber,tclVarRef,tclString,tcltlWidgetSwitch,tcltkCommand,tcltkPackConf + +" PACK +" commands associated with pack +syn keyword tcltkPackSwitch contained forget info propagate slaves +syn keyword tcltkPackConfSwitch contained after anchor before expand fill in ipadx ipady padx pady side +syn region tcltkCommand matchgroup=tcltkCommandColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkPackSwitch,tcltkPackConf,tcltkPackConfSwitch,tclNumber,tclVarRef,tclString,tcltkCommand keepend + +" STRING +" commands associated with string +syn keyword tcltkStringSwitch contained compare first index last length match range tolower toupper trim trimleft trimright wordstart wordend +syn region tcltkCommand matchgroup=tcltkCommandColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkStringSwitch,tclNumber,tclVarRef,tclString,tcltkCommand + +" ARRAY +" commands associated with array +syn keyword tcltkArraySwitch contained anymore donesearch exists get names nextelement size startsearch set +" match from command name to ] or EOL +syn region tcltkCommand matchgroup=tcltkCommandColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkArraySwitch,tclNumber,tclVarRef,tclString,tcltkCommand + +" LSORT +" switches for lsort +syn keyword tcltkLsortSwitch contained ascii dictionary integer real command increasing decreasing index +" match from command name to ] or EOL +syn region tcltkCommand matchgroup=tcltkCommandColor start="\" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkLsortSwitch,tclNumber,tclVarRef,tclString,tcltkCommand + +syn keyword tclTodo contained TODO + +" Sequences which are backslash-escaped: http://www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm#M16 +" Octal, hexadecimal, Unicode codepoints, and the classics. +" Tcl takes as many valid characters in a row as it can, so \xAZ in a string is newline followed by 'Z'. +syn match tclSpecial contained '\\\(\o\{1,3}\|x\x\{1,2}\|u\x\{1,4}\|[abfnrtv]\)' +syn match tclSpecial contained '\\[\[\]\{\}\"\$]' + +" Command appearing inside another command or inside a string. +syn region tclEmbeddedStatement start='\[' end='\]' contained contains=tclCommand,tclNumber,tclLineContinue,tclString,tclVarRef,tclEmbeddedStatement +" A string needs the skip argument as it may legitimately contain \". +" Match at start of line +syn region tclString start=+^"+ end=+"+ contains=@tclSpecialC,@Spell skip=+\\\\\|\\"+ +"Match all other legal strings. +syn region tclString start=+[^\\]"+ms=s+1 end=+"+ contains=@tclSpecialC,@tclVarRefC,tclEmbeddedStatement,@Spell skip=+\\\\\|\\"+ + +" Line continuation is backslash immediately followed by newline. +syn match tclLineContinue '\\$' + +if exists('g:tcl_warn_continuation') + syn match tclNotLineContinue '\\\s\+$' +endif + +"integer number, or floating point number without a dot and with "f". +syn case ignore +syn match tclNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" +"floating point number, with dot, optional exponent +syn match tclNumber "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, starting with a dot, optional exponent +syn match tclNumber "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match tclNumber "\<\d\+e[-+]\=\d\+[fl]\=\>" +"hex number +syn match tclNumber "0x\x\+\(u\=l\=\|lu\)\>" +"syn match tclIdentifier "\<\h\w*\>" +syn case match + +syn region tclComment start="^\s*\#" skip="\\$" end="$" contains=tclTodo,@Spell +syn region tclComment start=/;\s*\#/hs=s+1 skip="\\$" end="$" contains=tclTodo,@Spell + +"syn match tclComment /^\s*\#.*$/ +"syn match tclComment /;\s*\#.*$/hs=s+1 + +"syn sync ccomment tclComment + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link tcltkSwitch Special +hi def link tclExpand Special +hi def link tclLabel Label +hi def link tclConditional Conditional +hi def link tclRepeat Repeat +hi def link tclNumber Number +hi def link tclError Error +hi def link tclCommand Statement +hi def link tclProcCommand Type +hi def link tclString String +hi def link tclComment Comment +hi def link tclSpecial Special +hi def link tclTodo Todo +" Below here are the commands and their options. +hi def link tcltkCommandColor Statement +hi def link tcltkWidgetColor Structure +hi def link tclLineContinue WarningMsg +if exists('g:tcl_warn_continuation') +hi def link tclNotLineContinue ErrorMsg +endif +hi def link tcltkStringSwitch Special +hi def link tcltkArraySwitch Special +hi def link tcltkLsortSwitch Special +hi def link tcltkPackSwitch Special +hi def link tcltkPackConfSwitch Special +hi def link tcltkMaths Special +hi def link tcltkNamespaceSwitch Special +hi def link tcltkWidgetSwitch Special +hi def link tcltkPackConfColor Identifier +hi def link tclVarRef Identifier + + +let b:current_syntax = "tcl" + +" vim: ts=8 noet nolist diff --git a/.config/vim/syntax/tcsh.vim b/.config/vim/syntax/tcsh.vim new file mode 100644 index 0000000..6837125 --- /dev/null +++ b/.config/vim/syntax/tcsh.vim @@ -0,0 +1,255 @@ +" Vim syntax file +" Language: tcsh scripts +" Maintainer: Doug Kearns +" Previous Maintainer: Gautam Iyer where NoSpam=gmail (Original Author) +" Last Change: 2021 Oct 15 + +" Description: We break up each statement into a "command" and an "end" part. +" All groups are either a "command" or part of the "end" of a statement (ie +" everything after the "command"). This is because blindly highlighting tcsh +" statements as keywords caused way too many false positives. Eg: +" +" set history=200 +" +" causes history to come up as a keyword, which we want to avoid. + +" Quit when a syntax file was already loaded +if exists('b:current_syntax') + finish +endif + +let s:oldcpo = &cpo +set cpo&vim " Line continuation is used + +syn iskeyword @,48-57,_,192-255,- + +syn case match + +" ----- Clusters ----- {{{1 +syn cluster tcshModifiers contains=tcshModifier,tcshModifierError +syn cluster tcshQuoteList contains=tcshDQuote,tcshSQuote,tcshBQuote +syn cluster tcshStatementEnds contains=@tcshQuoteList,tcshComment,@tcshVarList,tcshRedir,tcshMeta,tcshHereDoc,tcshSpecial,tcshArgument +syn cluster tcshStatements contains=tcshBuiltin,tcshCommands,tcshIf,tcshWhile +syn cluster tcshVarList contains=tcshUsrVar,tcshArgv,tcshSubst +syn cluster tcshConditions contains=tcshCmdSubst,tcshParenExpr,tcshOperator,tcshNumber,@tcshVarList + +" ----- Errors ----- {{{1 +" Define first, so can be easily overridden. +syn match tcshError contained '\v\S.+' + +" ----- Statements ----- {{{1 +" Tcsh commands: Any filename / modifiable variable (must be first!) +syn match tcshCommands '\v[a-zA-Z0-9\\./_$:-]+' contains=tcshSpecial,tcshUsrVar,tcshArgv,tcshVarError nextgroup=tcshStatementEnd + +" Builtin commands except those treated specially. Currently (un)set(env), +" (un)alias, if, while, else, bindkey +syn keyword tcshBuiltin nextgroup=tcshStatementEnd alloc bg break breaksw builtins bye case cd chdir complete continue default dirs echo echotc end endif endsw eval exec exit fg filetest foreach getspath getxvers glob goto hashstat history hup inlib jobs kill limit log login logout ls ls-F migrate newgrp nice nohup notify onintr popd printenv pushd rehash repeat rootnode sched setpath setspath settc setty setxvers shift source stop suspend switch telltc termname time umask uncomplete unhash universe unlimit ver wait warp watchlog where which + +" StatementEnd is anything after a built-in / command till the lexical end of a +" statement (;, |, ||, |&, && or end of line) +syn region tcshStatementEnd transparent contained matchgroup=tcshBuiltin start='' end='\v\\@|$' contains=@tcshConditions,tcshSpecial,@tcshStatementEnds +syn region tcshIfEnd contained matchgroup=tcshBuiltin contains=@tcshConditions,tcshSpecial start='(' end='\v\)%(\s+then>)?' skipwhite nextgroup=@tcshStatementEnds +syn region tcshIfEnd contained matchgroup=tcshBuiltin contains=tcshCommands,tcshSpecial start='\v\{\s+' end='\v\s+\}%(\s+then>)?' skipwhite nextgroup=@tcshStatementEnds keepend + +" else statements +syn keyword tcshBuiltin nextgroup=tcshIf skipwhite else + +" while statements (contains expressions / operators) +syn keyword tcshBuiltin nextgroup=@tcshConditions,tcshSpecial skipwhite while + +" Conditions (for if and while) +syn region tcshParenExpr contained contains=@tcshConditions,tcshSpecial matchgroup=tcshBuiltin start='(' end=')' +syn region tcshCmdSubst contained contains=tcshCommands matchgroup=tcshBuiltin start='\v\{\s+' end='\v\s+\}' keepend + +" Bindkey. Internal editor functions +syn keyword tcshBindkeyFuncs contained backward-char backward-delete-char + \ backward-delete-word backward-kill-line backward-word + \ beginning-of-line capitalize-word change-case + \ change-till-end-of-line clear-screen complete-word + \ complete-word-fwd complete-word-back complete-word-raw + \ copy-prev-word copy-region-as-kill dabbrev-expand delete-char + \ delete-char-or-eof delete-char-or-list + \ delete-char-or-list-or-eof delete-word digit digit-argument + \ down-history downcase-word end-of-file end-of-line + \ exchange-point-and-mark expand-glob expand-history expand-line + \ expand-variables forward-char forward-word + \ gosmacs-transpose-chars history-search-backward + \ history-search-forward insert-last-word i-search-fwd + \ i-search-back keyboard-quit kill-line kill-region + \ kill-whole-line list-choices list-choices-raw list-glob + \ list-or-eof load-average magic-space newline newline-and-hold + \ newline-and-down-history normalize-path normalize-command + \ overwrite-mode prefix-meta quoted-insert redisplay + \ run-fg-editor run-help self-insert-command sequence-lead-in + \ set-mark-command spell-word spell-line stuff-char + \ toggle-literal-history transpose-chars transpose-gosling + \ tty-dsusp tty-flush-output tty-sigintr tty-sigquit tty-sigtsusp + \ tty-start-output tty-stop-output undefined-key + \ universal-argument up-history upcase-word + \ vi-beginning-of-next-word vi-add vi-add-at-eol vi-chg-case + \ vi-chg-meta vi-chg-to-eol vi-cmd-mode vi-cmd-mode-complete + \ vi-delprev vi-delmeta vi-endword vi-eword vi-char-back + \ vi-char-fwd vi-charto-back vi-charto-fwd vi-insert + \ vi-insert-at-bol vi-repeat-char-fwd vi-repeat-char-back + \ vi-repeat-search-fwd vi-repeat-search-back vi-replace-char + \ vi-replace-mode vi-search-back vi-search-fwd vi-substitute-char + \ vi-substitute-line vi-word-back vi-word-fwd vi-undo vi-zero + \ which-command yank yank-pop e_copy_to_clipboard + \ e_paste_from_clipboard e_dosify_next e_dosify_prev e_page_up + \ e_page_down +syn keyword tcshBuiltin nextgroup=tcshBindkeyEnd bindkey +syn region tcshBindkeyEnd contained transparent matchgroup=tcshBuiltin start='' skip='\\$' end='$' contains=@tcshQuoteList,tcshComment,@tcshVarList,tcshMeta,tcshSpecial,tcshArgument,tcshBindkeyFuncs + +" Expressions start with @. +syn match tcshExprStart '\v\@\s+' nextgroup=tcshExprVar +syn match tcshExprVar contained '\v\h\w*%(\[\d+\])?' contains=tcshShellVar,tcshEnvVar nextgroup=tcshExprOp +syn match tcshExprOp contained '++\|--' +syn match tcshExprOp contained '\v\s*\=' nextgroup=tcshExprEnd +syn match tcshExprEnd contained '\v.*$'hs=e+1 contains=@tcshConditions +syn match tcshExprEnd contained '\v.{-};'hs=e contains=@tcshConditions + +" ----- Comments: ----- {{{1 +syn match tcshComment '#\s.*' contains=tcshTodo,tcshCommentTi,@Spell +syn match tcshComment '\v#($|\S.*)' contains=tcshTodo,tcshCommentTi +syn match tcshSharpBang '^#! .*$' +syn match tcshCommentTi contained '\v#\s*\u\w*(\s+\u\w*)*:'hs=s+1 contains=tcshTodo +syn match tcshTodo contained '\v\c' + +" ----- Strings ----- {{{1 +" Tcsh does not allow \" in strings unless the "backslash_quote" shell +" variable is set. Set the vim variable "tcsh_backslash_quote" to 0 if you +" want VIM to assume that no backslash quote constructs exist. + +" Backquotes are treated as commands, and are not contained in anything +if exists('tcsh_backslash_quote') && tcsh_backslash_quote == 0 + syn region tcshSQuote keepend contained start="\v\\@, >>, >>&, >>!, >>&!] +syn match tcshRedir contained '\v\<|\>\>?\&?!?' + +" Meta-chars +syn match tcshMeta contained '\v[]{}*?[]' + +" Here documents (<<) +syn region tcshHereDoc contained matchgroup=tcshShellVar start='\v\<\<\s*\z(\h\w*)' end='^\z1$' contains=@tcshVarList,tcshSpecial +syn region tcshHereDoc contained matchgroup=tcshShellVar start="\v\<\<\s*'\z(\h\w*)'" start='\v\<\<\s*"\z(\h\w*)"$' start='\v\<\<\s*\\\z(\h\w*)$' end='^\z1$' + +" Operators +syn match tcshOperator contained '&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|%\|&\|+\|-\|/\|<\|>\||' +"syn match tcshOperator contained '[(){}]' + +" Numbers +syn match tcshNumber contained '\v<-?\d+>' + +" Arguments +syn match tcshArgument contained '\v\s@<=-(\w|-)*' + +" Special characters. \xxx, or backslashed characters. +"syn match tcshSpecial contained '\v\\@ +" Last Change: 2023 Aug 10 +" Former Maintainer: Bram Moolenaar + +" Quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Known template types are very similar to HTML, E.g. golang and "Xfire User +" Interface Template" +" If you know how to recognize a more specific type for *.tmpl suggest a +" change to runtime/scripts.vim. +runtime! syntax/html.vim diff --git a/.config/vim/syntax/tera.vim b/.config/vim/syntax/tera.vim new file mode 100644 index 0000000..3fcc21d --- /dev/null +++ b/.config/vim/syntax/tera.vim @@ -0,0 +1,94 @@ +" Vim syntax file +" Language: Tera +" Maintainer: Muntasir Mahmud +" Last Change: 2025 Mar 11 + +if exists("b:current_syntax") + finish +endif + +" Detect the underlying language based on filename pattern +" For files like file.html.tera, we want to load html syntax +let s:filename = expand("%:t") +let s:dotpos = strridx(s:filename, '.', strridx(s:filename, '.tera') - 1) +let s:underlying_filetype = "" + +if s:dotpos != -1 + let s:underlying_ext = s:filename[s:dotpos+1:strridx(s:filename, '.tera')-1] + if s:underlying_ext != "" && s:underlying_ext != "tera" + let s:underlying_filetype = s:underlying_ext + endif +endif + +" Load the underlying language syntax if detected +if s:underlying_filetype != "" + execute "runtime! syntax/" . s:underlying_filetype . ".vim" + unlet! b:current_syntax +else + " Default to HTML if no specific language detected + runtime! syntax/html.vim + unlet! b:current_syntax +endif + +" Tera comment blocks: {# comment #} +syn region teraCommentBlock start="{#" end="#}" contains=@Spell + +" Tera statements: {% if condition %} +syn region teraStatement start="{%" end="%}" contains=teraKeyword,teraString,teraNumber,teraFunction,teraBoolean,teraFilter,teraOperator + +" Tera expressions: {{ variable }} +syn region teraExpression start="{{" end="}}" contains=teraString,teraNumber,teraFunction,teraBoolean,teraFilter,teraOperator,teraIdentifier + +" Special handling for raw blocks - content inside shouldn't be processed +syn region teraRawBlock start="{% raw %}" end="{% endraw %}" contains=TOP,teraCommentBlock,teraStatement,teraExpression + +" Control structure keywords +syn keyword teraKeyword contained if else elif endif for endfor in macro endmacro +syn keyword teraKeyword contained block endblock extends include import set endset +syn keyword teraKeyword contained break continue filter endfilter raw endraw + +" Identifiers - define before operators for correct priority +syn match teraIdentifier contained "\<\w\+\>" + +" Operators used in expressions and statements +syn match teraOperator contained "==\|!=\|>=\|<=\|>\|<\|+\|-\|*\|/" +syn match teraOperator contained "{\@" +syn match teraNumber contained "\<\d\+\.\d\+\>" + +" Boolean values +syn keyword teraBoolean contained true false + +" Highlighting links +hi def link teraCommentBlock Comment +hi def link teraKeyword Statement +hi def link teraOperator Operator +hi def link teraFunction Function +hi def link teraIdentifier Identifier +hi def link teraString String +hi def link teraNumber Number +hi def link teraBoolean Boolean +hi def link teraFilter Function +hi def link teraStatement Statement +hi def link teraExpression Statement + +" Clean up script-local variables +unlet s:filename +unlet s:dotpos +if exists("s:underlying_ext") + unlet s:underlying_ext +endif +unlet s:underlying_filetype + +let b:current_syntax = "tera" diff --git a/.config/vim/syntax/teraterm.vim b/.config/vim/syntax/teraterm.vim new file mode 100644 index 0000000..9115320 --- /dev/null +++ b/.config/vim/syntax/teraterm.vim @@ -0,0 +1,140 @@ +" Vim syntax file +" Language: Tera Term Language (TTL) +" Based on Tera Term Version 4.100 +" Maintainer: Ken Takata +" URL: https://github.com/k-takata/vim-teraterm +" Last Change: 2018-08-31 +" Filenames: *.ttl +" License: VIM License + +if exists("b:current_syntax") + finish +endif + +let s:save_cpo = &cpo +set cpo&vim + +syn case ignore + +syn region ttlComment start=";" end="$" contains=@Spell +syn region ttlComment start="/\*" end="\*/" contains=@Spell +syn region ttlFirstComment start="/\*" end="\*/" contained contains=@Spell + \ nextgroup=ttlStatement,ttlFirstComment + +syn match ttlCharacter "#\%(\d\+\|\$\x\+\)\>" +syn match ttlNumber "\%(\<\d\+\|\$\x\+\)\>" +syn match ttlString "'[^']*'" contains=@Spell +syn match ttlString '"[^"]*"' contains=@Spell +syn cluster ttlConstant contains=ttlCharacter,ttlNumber,ttlString + +syn match ttlLabel ":\s*\w\{1,32}\>" + +syn keyword ttlOperator and or xor not + +syn match ttlVar "\" +syn match ttlVar "\" +syn keyword ttlVar inputstr matchstr paramcnt params result timeout mtimeout + + +syn match ttlLine nextgroup=ttlStatement "^" +syn match ttlStatement contained "\s*" + \ nextgroup=ttlIf,ttlElseIf,ttlConditional,ttlRepeat, + \ ttlFirstComment,ttlComment,ttlLabel,@ttlCommand + +syn cluster ttlCommand contains=ttlControlCommand,ttlCommunicationCommand, + \ ttlStringCommand,ttlFileCommand,ttlPasswordCommand, + \ ttlMiscCommand + + +syn keyword ttlIf contained nextgroup=ttlIfExpression if +syn keyword ttlElseIf contained nextgroup=ttlElseIfExpression elseif + +syn match ttlIfExpression contained "\s.*" + \ contains=@ttlConstant,ttlVar,ttlOperator,ttlComment,ttlThen, + \ @ttlCommand +syn match ttlElseIfExpression contained "\s.*" + \ contains=@ttlConstant,ttlVar,ttlOperator,ttlComment,ttlThen + +syn keyword ttlThen contained then +syn keyword ttlConditional contained else endif + +syn keyword ttlRepeat contained for next until enduntil while endwhile +syn match ttlRepeat contained + \ "\<\%(do\|loop\)\%(\s\+\%(while\|until\)\)\?\>" +syn keyword ttlControlCommand contained + \ break call continue end execcmnd exit goto include + \ mpause pause return + + +syn keyword ttlCommunicationCommand contained + \ bplusrecv bplussend callmenu changedir clearscreen + \ closett connect cygconnect disconnect dispstr + \ enablekeyb flushrecv gethostname getmodemstatus + \ gettitle kmtfinish kmtget kmtrecv kmtsend loadkeymap + \ logautoclosemode logclose loginfo logopen logpause + \ logrotate logstart logwrite quickvanrecv + \ quickvansend recvln restoresetup scprecv scpsend + \ send sendbreak sendbroadcast sendfile sendkcode + \ sendln sendlnbroadcast sendlnmulticast sendmulticast + \ setbaud setdebug setdtr setecho setflowctrl + \ setmulticastname setrts setspeed setsync settitle + \ showtt testlink unlink wait wait4all waitevent + \ waitln waitn waitrecv waitregex xmodemrecv + \ xmodemsend ymodemrecv ymodemsend zmodemrecv + \ zmodemsend +syn keyword ttlStringCommand contained + \ code2str expandenv int2str regexoption sprintf + \ sprintf2 str2code str2int strcompare strconcat + \ strcopy strinsert strjoin strlen strmatch strremove + \ strreplace strscan strspecial strsplit strtrim + \ tolower toupper +syn keyword ttlFileCommand contained + \ basename dirname fileclose fileconcat filecopy + \ filecreate filedelete filelock filemarkptr fileopen + \ filereadln fileread filerename filesearch fileseek + \ fileseekback filestat filestrseek filestrseek2 + \ filetruncate fileunlock filewrite filewriteln + \ findfirst findnext findclose foldercreate + \ folderdelete foldersearch getdir getfileattr makepath + \ setdir setfileattr +syn keyword ttlPasswordCommand contained + \ delpassword getpassword ispassword passwordbox + \ setpassword +syn keyword ttlMiscCommand contained + \ beep bringupbox checksum8 checksum8file checksum16 + \ checksum16file checksum32 checksum32file closesbox + \ clipb2var crc16 crc16file crc32 crc32file exec + \ dirnamebox filenamebox getdate getenv getipv4addr + \ getipv6addr getspecialfolder gettime getttdir getver + \ ifdefined inputbox intdim listbox messagebox random + \ rotateleft rotateright setdate setdlgpos setenv + \ setexitcode settime show statusbox strdim uptime + \ var2clipb yesnobox + + +hi def link ttlCharacter Character +hi def link ttlNumber Number +hi def link ttlComment Comment +hi def link ttlFirstComment Comment +hi def link ttlString String +hi def link ttlLabel Label +hi def link ttlIf Conditional +hi def link ttlElseIf Conditional +hi def link ttlThen Conditional +hi def link ttlConditional Conditional +hi def link ttlRepeat Repeat +hi def link ttlControlCommand Keyword +hi def link ttlVar Identifier +hi def link ttlOperator Operator +hi def link ttlCommunicationCommand Keyword +hi def link ttlStringCommand Keyword +hi def link ttlFileCommand Keyword +hi def link ttlPasswordCommand Keyword +hi def link ttlMiscCommand Keyword + +let b:current_syntax = "teraterm" + +let &cpo = s:save_cpo +unlet s:save_cpo + +" vim: ts=8 sw=2 sts=2 diff --git a/.config/vim/syntax/terminfo.vim b/.config/vim/syntax/terminfo.vim new file mode 100644 index 0000000..2b0ab08 --- /dev/null +++ b/.config/vim/syntax/terminfo.vim @@ -0,0 +1,93 @@ +" Vim syntax file +" Language: terminfo(5) definition +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn match terminfoKeywords '[,=#|]' + +syn keyword terminfoTodo contained TODO FIXME XXX NOTE + +syn region terminfoComment display oneline start='^#' end='$' + \ contains=terminfoTodo,@Spell + +syn match terminfoNumbers '\<[0-9]\+\>' + +syn match terminfoSpecialChar '\\\(\o\{3}\|[Eenlrtbfs^\,:0]\)' +syn match terminfoSpecialChar '\^\a' + +syn match terminfoDelay '$<[0-9]\+>' + +syn keyword terminfoBooleans bw am bce ccc xhp xhpa cpix crxw xt xenl eo gn + \ hc chts km daisy hs hls in lpix da db mir + \ msgr nxon xsb npc ndscr nrrmc os mc5i xcpa + \ sam eslok hz ul xon + +syn keyword terminfoNumerics cols it lh lw lines lm xmc ma colors pairs wnum + \ ncv nlab pb vt wsl bitwin bitype bufsz btns + \ spinh spinv maddr mjump mcs npins orc orhi + \ orl orvi cps widcs + +syn keyword terminfoStrings acsc cbt bel cr cpi lpi chr cvr csr rmp tbc mgc + \ clear el1 el ed hpa cmdch cwin cup cud1 home + \ civis cub1 mrcup cnorm cuf1 ll cuu1 cvvis + \ defc dch1 dl1 dial dsl dclk hd enacs smacs + \ smam blink bold smcup smdc dim swidm sdrfq + \ smir sitm slm smicm snlq snrmq prot rev + \ invis sshm smso ssubm ssupm smul sum smxon + \ ech rmacs rmam sgr0 rmcup rmdc rwidm rmir + \ ritm rlm rmicm rshm rmso rsubm rsupm rmul + \ rum rmxon pause hook flash ff fsl wingo hup + \ is1 is2 is3 if iprog initc initp ich1 il1 ip + \ ka1 ka3 kb2 kbs kbeg kcbt kc1 kc3 kcan ktbc + \ kclr kclo kcmd kcpy kcrt kctab kdch1 kdl1 + \ kcud1 krmir kend kent kel ked kext kfnd khlp + \ khome kich1 kil1 kcub1 kll kmrk kmsg kmov + \ knxt knp kopn kopt kpp kprv kprt krdo kref + \ krfr krpl krst kres kcuf1 ksav kBEG kCAN + \ kCMD kCPY kCRT kDC kDL kslt kEND kEOL kEXT + \ kind kFND kHLP kHOM kIC kLFT kMSG kMOV kNXT + \ kOPT kPRV kPRT kri kRDO kRPL kRIT kRES kSAV + \ kSPD khts kUND kspd kund kcuu1 rmkx smkx + \ lf0 lf1 lf10 lf2 lf3 lf4 lf5 lf6 lf7 lf8 lf9 + \ fln rmln smln rmm smm mhpa mcud1 mcub1 mcuf1 + \ mvpa mcuu1 nel porder oc op pad dch dl cud + \ mcud ich indn il cub mcub cuf mcuf rin cuu + \ mccu pfkey pfloc pfx pln mc0 mc5p mc4 mc5 + \ pulse qdial rmclk rep rfi rs1 rs2 rs3 rf rc + \ vpa sc ind ri scs sgr setbsmgb smgbp sclk + \ scp setb setf smgl smglp smgr smgrp hts smgt + \ smgtp wind sbim scsd rbim rcsd subcs supcs + \ ht docr tsl tone uc hu u0 u1 u2 u3 u4 u5 u6 + \ u7 u8 u9 wait xoffc xonc zerom scesa bicr + \ binel birep csnm csin colornm defbi devt + \ dispc endbi smpch smsc rmpch rmsc getm kmous + \ minfo pctrm pfxl reqmp scesc s0ds s1ds s2ds + \ s3ds setab setaf setcolor smglr slines smgtb + \ ehhlm elhlm erhlm ethlm evhlm sgr1 slengthsL +syn match terminfoStrings display '\' + +syn match terminfoParameters '%[%dcspl+*/mAO&|^=<>!~i?te;-]' +syn match terminfoParameters "%\('[A-Z]'\|{[0-9]\{1,2}}\|p[1-9]\|P[a-z]\|g[A-Z]\)" + +hi def link terminfoComment Comment +hi def link terminfoTodo Todo +hi def link terminfoNumbers Number +hi def link terminfoSpecialChar SpecialChar +hi def link terminfoDelay Special +hi def link terminfoBooleans Type +hi def link terminfoNumerics Type +hi def link terminfoStrings Type +hi def link terminfoParameters Keyword +hi def link terminfoKeywords Keyword + +let b:current_syntax = "terminfo" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/terraform.vim b/.config/vim/syntax/terraform.vim new file mode 100644 index 0000000..1be5698 --- /dev/null +++ b/.config/vim/syntax/terraform.vim @@ -0,0 +1,32 @@ +" Vim syntax file +" Language: Terraform +" Maintainer: Gregory Anders +" Upstream: https://github.com/hashivim/vim-terraform +" Last Change: 2024-09-03 +" License: ISC +" +" Copyright (c) 2014-2016 Mark Cornick +" +" Permission to use, copy, modify, and/or distribute this software for any purpose +" with or without fee is hereby granted, provided that the above copyright notice +" and this permission notice appear in all copies. +" +" THE SOFTWARE IS PROVIDED 'AS IS' AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +" REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +" FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +" INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +" OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +" THIS SOFTWARE. + +if exists('b:current_syntax') + finish +endif + +runtime! syntax/hcl.vim + +syn keyword terraType string bool number object tuple list map set any + +hi def link terraType Type + +let b:current_syntax = 'terraform' diff --git a/.config/vim/syntax/tex.vim b/.config/vim/syntax/tex.vim new file mode 100644 index 0000000..455613c --- /dev/null +++ b/.config/vim/syntax/tex.vim @@ -0,0 +1,1395 @@ +" Vim syntax file +" Language: TeX +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Charles E. Campbell +" Last Change: Apr 22, 2022 +" 2024 Feb 19 by Vim Project: announce adoption +" 2025 Jan 18 by Vim Project: add texEmphStyle to texMatchGroup, #16228 +" 2025 Feb 08 by Vim Project: improve macro option, \providecommand, +" \newcommand and \newenvironment #16543 +" 2025 Sep 29 by Vim Project: add amsmath support #18433 +" 2025 Oct 06 by Vim Project: link texBoldStyle to Bold, etc #18505 +" Version: 121 +" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX +" +" Notes: {{{1 +" +" 1. If you have a \begin{verbatim} that appears to overrun its boundaries, +" use %stopzone. +" +" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped +" by suitable use of %stopzone. +" +" 3. If you have a slow computer, you may wish to modify +" +" syn sync maxlines=200 +" syn sync minlines=50 +" +" to values that are more to your liking. +" +" 4. There is no match-syncing for $...$ and $$...$$; hence large +" equation blocks constructed that way may exhibit syncing problems. +" (there's no difference between begin/end patterns) +" +" 5. If you have the variable "g:tex_no_error" defined then none of the +" lexical error-checking will be done. +" +" ie. let g:tex_no_error=1 +" +" 6. Please see :help latex-syntax for information on +" syntax folding :help tex-folding +" spell checking :help tex-nospell +" commands and mathzones :help tex-runon +" new command highlighting :help tex-morecommands +" error highlighting :help tex-error +" new math groups :help tex-math +" new styles :help tex-style +" using conceal mode :help tex-conceal + +" Version Clears: {{{1 +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif +let s:keepcpo= &cpo +set cpo&vim +scriptencoding utf-8 + +" by default, enable all region-based highlighting +let s:tex_fast= "bcmMprsSvV" +if exists("g:tex_fast") + if type(g:tex_fast) != 1 + " g:tex_fast exists and is not a string, so + " turn off all optional region-based highighting + let s:tex_fast= "" + else + let s:tex_fast= g:tex_fast + endif +endif + +" let user determine which classes of concealment will be supported +" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts +if !exists("g:tex_conceal") + let s:tex_conceal= 'abdmgsS' +else + let s:tex_conceal= g:tex_conceal +endif +if !exists("g:tex_superscripts") + let s:tex_superscripts= '[0-9a-zA-W.,:;+-<>/()=]' +else + let s:tex_superscripts= g:tex_superscripts +endif +if !exists("g:tex_subscripts") + let s:tex_subscripts= '[0-9aehijklmnoprstuvx,+-/().]' +else + let s:tex_subscripts= g:tex_subscripts +endif + +" Determine whether or not to use "*.sty" mode {{{1 +" The user may override the normal determination by setting +" g:tex_stylish to 1 (for "*.sty" mode) +" or to 0 else (normal "*.tex" mode) +" or on a buffer-by-buffer basis with b:tex_stylish +let s:extfname=expand("%:e") +if exists("g:tex_stylish") + let b:tex_stylish= g:tex_stylish +elseif !exists("b:tex_stylish") + if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx" + let b:tex_stylish= 1 + else + let b:tex_stylish= 0 + endif +endif + +" handle folding {{{1 +if !exists("g:tex_fold_enabled") + let s:tex_fold_enabled= 0 +elseif g:tex_fold_enabled && !has("folding") + let s:tex_fold_enabled= 0 + echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support" +else + let s:tex_fold_enabled= 1 +endif +if s:tex_fold_enabled && &fdm == "manual" + setl fdm=syntax +endif +if s:tex_fold_enabled && has("folding") + com! -nargs=* TexFold fold +else + com! -nargs=* TexFold +endif + +" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1 +" but _ is the only one that causes problems. +" One may override this iskeyword setting by providing +" g:tex_isk +if exists("g:tex_isk") + if b:tex_stylish && g:tex_isk !~ '@' + let b:tex_isk= '@,'.g:tex_isk + else + let b:tex_isk= g:tex_isk + endif +elseif b:tex_stylish + let b:tex_isk="@,48-57,a-z,A-Z,192-255" +else + let b:tex_isk="48-57,a-z,A-Z,192-255" +endif +if (v:version == 704 && has("patch-7.4.1142")) || v:version > 704 + exe "syn iskeyword ".b:tex_isk +else + exe "setl isk=".b:tex_isk +endif +if exists("g:tex_no_error") && g:tex_no_error + let s:tex_no_error= 1 +else + let s:tex_no_error= 0 +endif +if exists("g:tex_comment_nospell") && g:tex_comment_nospell + let s:tex_comment_nospell= 1 +else + let s:tex_comment_nospell= 0 +endif +if exists("g:tex_nospell") && g:tex_nospell + let s:tex_nospell = 1 +else + let s:tex_nospell = 0 +endif +if exists("g:tex_matchcheck") + let s:tex_matchcheck= g:tex_matchcheck +else + let s:tex_matchcheck= '[({[]' +endif +if exists("g:tex_excludematcher") + let s:tex_excludematcher= g:tex_excludematcher +else + let s:tex_excludematcher= 0 +endif + +" Clusters: {{{1 +" -------- +syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,@texMathZones +if !s:tex_no_error + syn cluster texCmdGroup add=texMathError +endif +syn cluster texEnvGroup contains=texDefParm,texMatcher,texMathDelim,texSpecialChar,texStatement +syn cluster texFoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texItalStyle,texEmphStyle,texNoSpell +syn cluster texBoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texBoldItalStyle,texNoSpell +syn cluster texItalGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texItalStyle,texEmphStyle,texItalBoldStyle,texNoSpell +if !s:tex_excludematcher + syn cluster texBoldGroup add=texMatcher + syn cluster texItalGroup add=texMatcher +endif +if !s:tex_nospell + if !s:tex_no_error + syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texEmphStyle,texZone,texInputFile,texOption,@Spell + syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell + syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher,@Spell + else + syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texEmphStyle,texZone,texInputFile,texOption,@Spell + syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell + syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher,@Spell + endif +else + if !s:tex_no_error + syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption + syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption + syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher + else + syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption + syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption + syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher + endif +endif +syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ +syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter +if !exists("g:tex_no_math") + syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ + syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ + syn cluster texMatchGroup add=@texMathZones + syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2 + syn cluster texMathMatchGroup contains=@texMathZones,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathMatcher,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone + syn cluster texMathZoneGroup contains=texBadPar,texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle + if !s:tex_no_error + syn cluster texMathMatchGroup add=texMathError + syn cluster texMathZoneGroup add=texMathError + endif + syn cluster texMathZoneGroup add=@NoSpell + " following used in the \part \chapter \section \subsection \subsubsection + " \paragraph \subparagraph \author \title highlighting + syn cluster texDocGroup contains=texPartZone,@texPartGroup + syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone + syn cluster texChapterGroup contains=texSectionZone,texParaZone + syn cluster texSectionGroup contains=texSubSectionZone,texParaZone + syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone + syn cluster texSubSubSectionGroup contains=texParaZone + syn cluster texParaGroup contains=texSubParaZone + if has("conceal") && &enc == 'utf-8' + syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol + syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol + endif +endif + +" Try to flag {}, [], and () mismatches: {{{1 +if s:tex_fast =~# 'm' + if !s:tex_no_error + if s:tex_matchcheck =~ '{' + syn region texMatcher matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError + syn region texMatcherNM matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup,texError + endif + if s:tex_matchcheck =~ '\[' + syn region texMatcher matchgroup=texDelimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell + syn region texMatcherNM matchgroup=texDelimiter start="\[" end="]" transparent contains=@texMatchNMGroup,texError,@NoSpell + endif + else + if s:tex_matchcheck =~ '{' + syn region texMatcher matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup + syn region texMatcherNM matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup + endif + if s:tex_matchcheck =~ '\[' + syn region texMatcher matchgroup=texDelimiter start="\[" end="]" transparent contains=@texMatchGroup + syn region texMatcherNM matchgroup=texDelimiter start="\[" end="]" transparent contains=@texMatchNMGroup + endif + endif + if s:tex_matchcheck =~ '(' + if !s:tex_nospell + syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell + else + syn region texParen start="(" end=")" transparent contains=@texMatchGroup + endif + endif +endif +if !s:tex_no_error + if s:tex_matchcheck =~ '(' + syn match texError "[}\]]" + else + syn match texError "[}\])]" + endif +endif +if s:tex_fast =~# 'M' + if !exists("g:tex_no_math") + if !s:tex_no_error + syn match texMathError "}" contained + endif + syn region texMathMatcher matchgroup=texDelimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup + endif +endif + +" TeX/LaTeX keywords: {{{1 +" Instead of trying to be All Knowing, I just match \..alphameric.. +" Note that *.tex files may not have "@" in their \commands +if exists("g:tex_tex") || b:tex_stylish + syn match texStatement "\\[a-zA-Z@]\+" +else + syn match texStatement "\\\a\+" + if !s:tex_no_error + syn match texError "\\\a*@[a-zA-Z@]*" + endif +endif + +" TeX/LaTeX delimiters: {{{1 +syn match texDelimiter "&" +syn match texDelimiter "\\\\" + +" Tex/Latex Options: {{{1 +syn match texOption "[^\\]\zs#[1-9]\|^#[1-9]" + +" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1 +if b:tex_stylish + syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1 + syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1 +else + syn match texAccent "\\[bcdvuH]\A"me=e-1 + syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1 +endif +syn match texAccent "\\[bcdvuH]$" +syn match texAccent +\\[=^.\~"`']+ +syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+ +syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$" + + +" \begin{}/\end{} section markers: {{{1 +syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName +if s:tex_fast =~# 'm' + syn region texBeginEndName matchgroup=texDelimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment + syn region texBeginEndModifier matchgroup=texDelimiter start="\[" end="]" contained contains=texComment,@texMathZones,@NoSpell +endif + +" \documentclass, \documentstyle, \usepackage: {{{1 +syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs +if s:tex_fast =~# 'm' + syn region texDocTypeArgs matchgroup=texDelimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell +endif + +" Preamble syntax-based folding support: {{{1 +if s:tex_fold_enabled && has("folding") + syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup +endif + +" TeX input: {{{1 +syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement +syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt +syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt +syn match texInputCurlies "[{}]" contained +if s:tex_fast =~# 'm' + syn region texInputFileOpt matchgroup=texDelimiter start="\[" end="\]" contained contains=texComment +endif + +" Type Styles (LaTeX 2.09): {{{1 +syn match texTypeStyle "\\rm\>" +syn match texTypeStyle "\\em\>" +syn match texTypeStyle "\\bf\>" +syn match texTypeStyle "\\it\>" +syn match texTypeStyle "\\sl\>" +syn match texTypeStyle "\\sf\>" +syn match texTypeStyle "\\sc\>" +syn match texTypeStyle "\\tt\>" + +" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1 +if s:tex_conceal !~# 'b' + syn match texTypeStyle "\\textbf\>" + syn match texTypeStyle "\\textit\>" + syn match texTypeStyle "\\emph\>" +endif +syn match texTypeStyle "\\textmd\>" +syn match texTypeStyle "\\textrm\>" + +syn match texTypeStyle "\\mathbf\>" +syn match texTypeStyle "\\mathcal\>" +syn match texTypeStyle "\\mathit\>" +syn match texTypeStyle "\\mathnormal\>" +syn match texTypeStyle "\\mathrm\>" +syn match texTypeStyle "\\mathsf\>" +syn match texTypeStyle "\\mathtt\>" + +syn match texTypeStyle "\\rmfamily\>" +syn match texTypeStyle "\\sffamily\>" +syn match texTypeStyle "\\ttfamily\>" + +syn match texTypeStyle "\\itshape\>" +syn match texTypeStyle "\\scshape\>" +syn match texTypeStyle "\\slshape\>" +syn match texTypeStyle "\\upshape\>" + +syn match texTypeStyle "\\bfseries\>" +syn match texTypeStyle "\\mdseries\>" + +" Some type sizes: {{{1 +syn match texTypeSize "\\tiny\>" +syn match texTypeSize "\\scriptsize\>" +syn match texTypeSize "\\footnotesize\>" +syn match texTypeSize "\\small\>" +syn match texTypeSize "\\normalsize\>" +syn match texTypeSize "\\large\>" +syn match texTypeSize "\\Large\>" +syn match texTypeSize "\\LARGE\>" +syn match texTypeSize "\\huge\>" +syn match texTypeSize "\\Huge\>" + +" Spacecodes (TeX'isms): {{{1 +" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x +syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar +syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained + +" Sections, subsections, etc: {{{1 +if s:tex_fast =~# 'p' + if !s:tex_nospell + TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell + TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell + TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell + TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell + TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell + TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell + TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup,@Spell + TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@Spell + TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell + TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell + else + TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup + TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup + TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup + TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup + TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup + TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup + TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup + TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup + TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup + TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup + endif +endif + +" particular support for bold and italic {{{1 +if s:tex_fast =~# 'b' + if s:tex_conceal =~# 'b' + if !exists("g:tex_nospell") || !g:tex_nospell + syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell + syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell + syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell + syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell + syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell + syn region texEmphStyle matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell + syn region texEmphStyle matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell + syn region texEmphStyle matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell + else + syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup + syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup + syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup + syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup + syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup + syn region texEmphStyle matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup + syn region texEmphStyle matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup + syn region texEmphStyle matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup + endif + endif +endif + +" Bad Math (mismatched): {{{1 +if !exists("g:tex_no_math") && !s:tex_no_error + syn match texBadMath "\\end\s*{\s*\(array\|[bBpvV]matrix\|split\|smallmatrix\)\s*}" + syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\)\*\=\s*}" + syn match texBadMath "\\[\])]" + syn match texBadPar contained "\%(\\par\>\|^\s*\n.\)" +endif + +" Math Zones: {{{1 +if !exists("g:tex_no_math") + " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2 + " Starred forms are created if starform is true. Starred + " forms have syntax group and synchronization groups with a + " "S" appended. Handles: cluster, syntax, sync, and highlighting. + fun! TexNewMathZone(sfx,mathzone,starform) + let grpname = "texMathZone".a:sfx + let syncname = "texSyncMathZone".a:sfx + if s:tex_fold_enabled + let foldcmd= " fold" + else + let foldcmd= "" + endif + exe "syn cluster texMathZones add=".grpname + if s:tex_fast =~# 'M' + exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd + exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' + exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' + endif + exe 'hi def link '.grpname.' texMath' + if a:starform + let grpname = "texMathZone".a:sfx.'S' + let syncname = "texSyncMathZone".a:sfx.'S' + exe "syn cluster texMathZones add=".grpname + if s:tex_fast =~# 'M' + exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd + exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' + exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' + endif + exe 'hi def link '.grpname.' texMath' + endif + endfun + + " Standard Math Zones: {{{2 + call TexNewMathZone("A","displaymath",1) + call TexNewMathZone("B","eqnarray",1) + call TexNewMathZone("C","equation",1) + call TexNewMathZone("D","math",1) + call TexNewMathZone("E","align",1) + call TexNewMathZone("F","alignat",1) + call TexNewMathZone("G","flalign",1) + call TexNewMathZone("H","gather",1) + call TexNewMathZone("I","multline",1) + + " Inline Math Zones: {{{2 + if s:tex_fast =~# 'M' + if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd' + syn region texMathZoneV matchgroup=texDelimiter start="\\(" matchgroup=texDelimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup + syn region texMathZoneW matchgroup=texDelimiter start="\\\[" matchgroup=texDelimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup + syn region texMathZoneX matchgroup=texDelimiter start="\$" skip="\\\\\|\\\$" matchgroup=texDelimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup + syn region texMathZoneY matchgroup=texDelimiter start="\$\$" matchgroup=texDelimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup + else + syn region texMathZoneV matchgroup=texDelimiter start="\\(" matchgroup=texDelimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup + syn region texMathZoneW matchgroup=texDelimiter start="\\\[" matchgroup=texDelimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup + syn region texMathZoneX matchgroup=texDelimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=texDelimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup + syn region texMathZoneY matchgroup=texDelimiter start="\$\$" matchgroup=texDelimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup + endif + syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup + endif + + syn match texMathOper "[_^=]" contained + + " Text Inside Math Zones: {{{2 + if s:tex_fast =~# 'M' + if !exists("g:tex_nospell") || !g:tex_nospell + syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell + else + syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup + endif + endif + + " \left..something.. and \right..something.. support: {{{2 + syn match texMathDelimBad contained "\S" + if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm' + syn match texMathDelim contained "\\left\[" + syn match texMathDelim contained "\\left\\{" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={ + syn match texMathDelim contained "\\right\\}" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=} + let s:texMathDelimList=[ + \ ['<' , '<'] , + \ ['>' , '>'] , + \ ['(' , '('] , + \ [')' , ')'] , + \ ['\[' , '['] , + \ [']' , ']'] , + \ ['\\{' , '{'] , + \ ['\\}' , '}'] , + \ ['|' , '|'] , + \ ['\\|' , '‖'] , + \ ['\\backslash' , '\'] , + \ ['\\downarrow' , '↓'] , + \ ['\\Downarrow' , '⇓'] , + \ ['\\lbrace' , '['] , + \ ['\\lceil' , '⌈'] , + \ ['\\lfloor' , '⌊'] , + \ ['\\lgroup' , '⌊'] , + \ ['\\lmoustache' , '⎛'] , + \ ['\\rbrace' , ']'] , + \ ['\\rceil' , '⌉'] , + \ ['\\rfloor' , '⌋'] , + \ ['\\rgroup' , '⌋'] , + \ ['\\rmoustache' , '⎞'] , + \ ['\\uparrow' , '↑'] , + \ ['\\Uparrow' , '↑'] , + \ ['\\updownarrow', '↕'] , + \ ['\\Updownarrow', '⇕']] + if &ambw == "double" || exists("g:tex_usedblwidth") + let s:texMathDelimList= s:texMathDelimList + [ + \ ['\\langle' , '〈'] , + \ ['\\rangle' , '〉']] + else + let s:texMathDelimList= s:texMathDelimList + [ + \ ['\\langle' , '<'] , + \ ['\\rangle' , '>']] + endif + syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad + for texmath in s:texMathDelimList + exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1] + endfor + + else + syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad + syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad + syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad + syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]" + syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow + syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow + syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow + syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow + syn keyword texMathDelimKey contained lbrace lvert rfloor + endif + syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>" + syn match texMathDelim contained "\\lefteqn\>" +endif + +" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1 +syn match texSpecialChar "\\[$&%#{}_]" +if b:tex_stylish + syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1 +else + syn match texSpecialChar "\\[SP@]\A"me=e-1 +endif +syn match texSpecialChar "\\\\" +if !exists("g:tex_no_math") + syn match texOnlyMath "[_^]" +endif +syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S" +if s:tex_conceal !~# 'S' + syn match texSpecialChar '\\glq\>' contained conceal cchar=‚ + syn match texSpecialChar '\\grq\>' contained conceal cchar=‘ + syn match texSpecialChar '\\glqq\>' contained conceal cchar=„ + syn match texSpecialChar '\\grqq\>' contained conceal cchar=“ + syn match texSpecialChar '\\hyp\>' contained conceal cchar=- +endif + +" Comments: {{{1 +" Normal TeX LaTeX : %.... +" Documented TeX Format: ^^A... -and- leading %s (only) +if !s:tex_comment_nospell + syn cluster texCommentGroup contains=texTodo,@Spell +else + syn cluster texCommentGroup contains=texTodo,@NoSpell +endif +syn case ignore +syn keyword texTodo contained combak fixme todo xxx +syn case match +if s:extfname == "dtx" + syn match texComment "\^\^A.*$" contains=@texCommentGroup + syn match texComment "^%\+" contains=@texCommentGroup +else + if s:tex_fold_enabled + " allows syntax-folding of 2 or more contiguous comment lines + " single-line comments are not folded + syn match texComment "%.*$" contains=@texCommentGroup + if s:tex_fast =~# 'c' + TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup + TexFold syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell + endif + else + syn match texComment "%.*$" contains=@texCommentGroup + if s:tex_fast =~# 'c' + syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell + endif + endif +endif + +" %begin-include ... %end-include acts like a texDocZone for \include'd files. Permits spell checking, for example, in such files. +if !s:tex_nospell + TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup,@Spell +else + TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup +endif + +" Separate lines used for verb` and verb# so that the end conditions {{{1 +" will appropriately terminate. +" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there. +if s:tex_fast =~# 'v' + if exists("g:tex_verbspell") && g:tex_verbspell + syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell + " listings package: + if b:tex_stylish + syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell + else + syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell + endif + else + syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" + if b:tex_stylish + syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" + else + syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" + endif + endif +endif + +" Tex Reference Zones: {{{1 +if s:tex_fast =~# 'r' + syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup + syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup + syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup + syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup + syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup + syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup + syn region texRefOption contained matchgroup=texDelimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite + syn region texCite contained matchgroup=texDelimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite +endif +syn match texRefZone '\\cite\%([tp]\*\=\)\=\>' nextgroup=texRefOption,texCite + +" Handle (re)newcommand, providecommand, (re)newenvironment : {{{1 +" EXAMPLE: +" +" The followings are valid (ignoring error due to redefinition): +" +" \newcommand{\foo}{body} +" \newcommand{\foo}[1]{#1} +" \newcommand{\foo}[1][def]{#1} +" +" The followings are ill-formed: +" +" \newcommand{\foo}{#1} ! Illegal parameter number in definition of \foo. +" \newcommand{\foo}[x]{…} ! Missing number, treated as zero. +" \newcommand{\foo}[10]{…} ! You already have nine parameters. +syn match texNewCmd "\\\%(\%(re\)\=new\|provide\)command\>\*\?" nextgroup=texCmdName skipwhite skipnl +if s:tex_fast =~# 'V' + syn region texCmdName contained matchgroup=texDelimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl + syn region texCmdArgs contained matchgroup=texDelimiter start="\["rs=s+1 end="]" nextgroup=texCmdDefaultPar,texCmdBody skipwhite skipnl + syn region texCmdDefaultPar contained matchgroup=texDelimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl + syn region texCmdBody contained matchgroup=texDelimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=texDelimiter end="}" contains=@texCmdGroup +endif +" EXAMPLE: +" +" The followings are valid (ignoring error due to redefinition): +" +" \newenvironment{baz}{beg}{end} +" \newenvironment{baz}[1]{beg #1}{end} +" \newenvironment{baz}[1][default]{beg #1}{end} +" +" The followings are invalid: +" +" \newenvironment{baz}{#1}{…} ! Illegal parameter number in definition of \baz. +" \newenvironment{baz}[x]{…}{…} ! Missing number, treated as zero. +" \newenvironment{baz}[10]{…}{…} ! You already have nine parameters. +" \newenvironment{baz}[1]{…}{#1} ! Illegal parameter number in definition of \endbaz. +syn match texNewEnv "\\\%(re\)\=newenvironment\>\*\?" nextgroup=texEnvName skipwhite skipnl +if s:tex_fast =~# 'V' + syn region texEnvName contained matchgroup=texDelimiter start="{"rs=s+1 end="}" nextgroup=texEnvArgs,texEnvBgn skipwhite skipnl + syn region texEnvArgs contained matchgroup=texDelimiter start="\["rs=s+1 end="]" nextgroup=texEnvDefaultPar,texEnvBgn skipwhite skipnl + syn region texEnvDefaultPar contained matchgroup=texDelimiter start="\["rs=s+1 end="]" nextgroup=texEnvBgn skipwhite skipnl + syn region texEnvBgn contained matchgroup=texDelimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup + syn region texEnvEnd contained matchgroup=texDelimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup +endif + +" Definitions/Commands: {{{1 +syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl +if b:tex_stylish + syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl + syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl +else + syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl + syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl +endif +syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl +syn match texDefParm contained "#[1-9]" + +" TeX Lengths: {{{1 +syn match texLength "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>" + +" TeX String Delimiters: {{{1 +syn match texString "\(``\|''\|,,\)" + +" makeatletter -- makeatother sections +if !s:tex_no_error + if s:tex_fast =~# 'S' + syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained + endif + syn match texStyleStatement "\\[a-zA-Z@]\+" contained + if s:tex_fast =~# 'S' + syn region texStyleMatcher matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained + syn region texStyleMatcher matchgroup=texDelimiter start="\[" end="]" contains=@texStyleGroup,texError contained + endif +endif + +" Conceal mode support (supports set cole=2) {{{1 +if has("conceal") && &enc == 'utf-8' + + " Math Symbols {{{2 + " (many of these symbols were contributed by Björn Winckler) + if s:tex_conceal =~# 'm' + let s:texMathList=[ + \ ['|' , '‖'], + \ ['aleph' , 'ℵ'], + \ ['amalg' , '∐'], + \ ['angle' , '∠'], + \ ['approx' , '≈'], + \ ['ast' , '∗'], + \ ['asymp' , '≍'], + \ ['backslash' , '∖'], + \ ['bigcap' , '∩'], + \ ['bigcirc' , '○'], + \ ['bigcup' , '∪'], + \ ['bigodot' , '⊙'], + \ ['bigoplus' , '⊕'], + \ ['bigotimes' , '⊗'], + \ ['bigsqcup' , '⊔'], + \ ['bigtriangledown', '∇'], + \ ['bigtriangleup' , '∆'], + \ ['bigvee' , '⋁'], + \ ['bigwedge' , '⋀'], + \ ['bot' , '⊥'], + \ ['bowtie' , '⋈'], + \ ['bullet' , '•'], + \ ['cap' , '∩'], + \ ['cdot' , '·'], + \ ['cdots' , '⋯'], + \ ['circ' , '∘'], + \ ['clubsuit' , '♣'], + \ ['cong' , '≅'], + \ ['coprod' , '∐'], + \ ['copyright' , '©'], + \ ['cup' , '∪'], + \ ['dagger' , '†'], + \ ['dashv' , '⊣'], + \ ['ddagger' , '‡'], + \ ['ddots' , '⋱'], + \ ['diamond' , '⋄'], + \ ['diamondsuit' , '♢'], + \ ['div' , '÷'], + \ ['doteq' , '≐'], + \ ['dots' , '…'], + \ ['downarrow' , '↓'], + \ ['Downarrow' , '⇓'], + \ ['ell' , 'ℓ'], + \ ['emptyset' , '∅'], + \ ['equiv' , '≡'], + \ ['exists' , '∃'], + \ ['flat' , '♭'], + \ ['forall' , '∀'], + \ ['frown' , '⁔'], + \ ['ge' , '≥'], + \ ['geq' , '≥'], + \ ['gets' , '←'], + \ ['gg' , '⟫'], + \ ['hbar' , 'ℏ'], + \ ['heartsuit' , '♡'], + \ ['hookleftarrow' , '↩'], + \ ['hookrightarrow' , '↪'], + \ ['iff' , '⇔'], + \ ['Im' , 'ℑ'], + \ ['imath' , 'ɩ'], + \ ['in' , '∈'], + \ ['infty' , '∞'], + \ ['int' , '∫'], + \ ['jmath' , '𝚥'], + \ ['land' , '∧'], + \ ['lceil' , '⌈'], + \ ['ldots' , '…'], + \ ['le' , '≤'], + \ ['left|' , '|'], + \ ['left\\|' , '‖'], + \ ['left(' , '('], + \ ['left\[' , '['], + \ ['left\\{' , '{'], + \ ['leftarrow' , '←'], + \ ['Leftarrow' , '⇐'], + \ ['leftharpoondown', '↽'], + \ ['leftharpoonup' , '↼'], + \ ['leftrightarrow' , '↔'], + \ ['Leftrightarrow' , '⇔'], + \ ['leq' , '≤'], + \ ['leq' , '≤'], + \ ['lfloor' , '⌊'], + \ ['ll' , '≪'], + \ ['lmoustache' , '╭'], + \ ['lor' , '∨'], + \ ['mapsto' , '↦'], + \ ['mid' , '∣'], + \ ['models' , '╞'], + \ ['mp' , '∓'], + \ ['nabla' , '∇'], + \ ['natural' , '♮'], + \ ['ne' , '≠'], + \ ['nearrow' , '↗'], + \ ['neg' , '¬'], + \ ['neq' , '≠'], + \ ['ni' , '∋'], + \ ['notin' , '∉'], + \ ['nwarrow' , '↖'], + \ ['odot' , '⊙'], + \ ['oint' , '∮'], + \ ['ominus' , '⊖'], + \ ['oplus' , '⊕'], + \ ['oslash' , '⊘'], + \ ['otimes' , '⊗'], + \ ['owns' , '∋'], + \ ['P' , '¶'], + \ ['parallel' , '║'], + \ ['partial' , '∂'], + \ ['perp' , '⊥'], + \ ['pm' , '±'], + \ ['prec' , '≺'], + \ ['preceq' , '⪯'], + \ ['prime' , '′'], + \ ['prod' , '∏'], + \ ['propto' , '∝'], + \ ['rceil' , '⌉'], + \ ['Re' , 'ℜ'], + \ ['quad' , ' '], + \ ['qquad' , ' '], + \ ['rfloor' , '⌋'], + \ ['right|' , '|'], + \ ['right\\|' , '‖'], + \ ['right)' , ')'], + \ ['right]' , ']'], + \ ['right\\}' , '}'], + \ ['rightarrow' , '→'], + \ ['Rightarrow' , '⇒'], + \ ['rightleftharpoons', '⇌'], + \ ['rmoustache' , '╮'], + \ ['S' , '§'], + \ ['searrow' , '↘'], + \ ['setminus' , '∖'], + \ ['sharp' , '♯'], + \ ['sim' , '∼'], + \ ['simeq' , '⋍'], + \ ['smile' , '‿'], + \ ['spadesuit' , '♠'], + \ ['sqcap' , '⊓'], + \ ['sqcup' , '⊔'], + \ ['sqsubset' , '⊏'], + \ ['sqsubseteq' , '⊑'], + \ ['sqsupset' , '⊐'], + \ ['sqsupseteq' , '⊒'], + \ ['star' , '✫'], + \ ['subset' , '⊂'], + \ ['subseteq' , '⊆'], + \ ['succ' , '≻'], + \ ['succeq' , '⪰'], + \ ['sum' , '∑'], + \ ['supset' , '⊃'], + \ ['supseteq' , '⊇'], + \ ['surd' , '√'], + \ ['swarrow' , '↙'], + \ ['times' , '×'], + \ ['to' , '→'], + \ ['top' , '⊤'], + \ ['triangle' , '∆'], + \ ['triangleleft' , '⊲'], + \ ['triangleright' , '⊳'], + \ ['uparrow' , '↑'], + \ ['Uparrow' , '⇑'], + \ ['updownarrow' , '↕'], + \ ['Updownarrow' , '⇕'], + \ ['vdash' , '⊢'], + \ ['vdots' , '⋮'], + \ ['vee' , '∨'], + \ ['wedge' , '∧'], + \ ['wp' , '℘'], + \ ['wr' , '≀']] + if &ambw == "double" || exists("g:tex_usedblwidth") + let s:texMathList= s:texMathList + [ + \ ['right\\rangle' , '〉'], + \ ['left\\langle' , '〈']] + else + let s:texMathList= s:texMathList + [ + \ ['right\\rangle' , '>'], + \ ['left\\langle' , '<']] + endif + for texmath in s:texMathList + if texmath[0] =~# '\w$' + exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1] + else + exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1] + endif + endfor + + if &ambw == "double" + syn match texMathSymbol '\\gg\>' contained conceal cchar=≫ + syn match texMathSymbol '\\ll\>' contained conceal cchar=≪ + else + syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫ + syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪ + endif + + syn match texMathSymbol '\\hat{a}' contained conceal cchar=â + syn match texMathSymbol '\\hat{A}' contained conceal cchar= + syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ + syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ + syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê + syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê + syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ + syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ + syn match texMathSymbol '\\hat{i}' contained conceal cchar=î + syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î + syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô + syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô + syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ + syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ + syn match texMathSymbol '\\hat{u}' contained conceal cchar=û + syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û + syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ + syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ + syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ + syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ +" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅ + + syn match texMathSymbol '\\dot{B}' contained conceal cchar=Ḃ + syn match texMathSymbol '\\dot{b}' contained conceal cchar=ḃ + syn match texMathSymbol '\\dot{D}' contained conceal cchar=Ḋ + syn match texMathSymbol '\\dot{d}' contained conceal cchar=ḋ + syn match texMathSymbol '\\dot{F}' contained conceal cchar=Ḟ + syn match texMathSymbol '\\dot{f}' contained conceal cchar=ḟ + syn match texMathSymbol '\\dot{H}' contained conceal cchar=Ḣ + syn match texMathSymbol '\\dot{h}' contained conceal cchar=ḣ + syn match texMathSymbol '\\dot{M}' contained conceal cchar=Ṁ + syn match texMathSymbol '\\dot{m}' contained conceal cchar=ṁ + syn match texMathSymbol '\\dot{N}' contained conceal cchar=Ṅ + syn match texMathSymbol '\\dot{n}' contained conceal cchar=ṅ + syn match texMathSymbol '\\dot{P}' contained conceal cchar=Ṗ + syn match texMathSymbol '\\dot{p}' contained conceal cchar=ṗ + syn match texMathSymbol '\\dot{R}' contained conceal cchar=Ṙ + syn match texMathSymbol '\\dot{r}' contained conceal cchar=ṙ + syn match texMathSymbol '\\dot{S}' contained conceal cchar=Ṡ + syn match texMathSymbol '\\dot{s}' contained conceal cchar=ṡ + syn match texMathSymbol '\\dot{T}' contained conceal cchar=Ṫ + syn match texMathSymbol '\\dot{t}' contained conceal cchar=ṫ + syn match texMathSymbol '\\dot{W}' contained conceal cchar=Ẇ + syn match texMathSymbol '\\dot{w}' contained conceal cchar=ẇ + syn match texMathSymbol '\\dot{X}' contained conceal cchar=Ẋ + syn match texMathSymbol '\\dot{x}' contained conceal cchar=ẋ + syn match texMathSymbol '\\dot{Y}' contained conceal cchar=Ẏ + syn match texMathSymbol '\\dot{y}' contained conceal cchar=ẏ + syn match texMathSymbol '\\dot{Z}' contained conceal cchar=Ż + syn match texMathSymbol '\\dot{z}' contained conceal cchar=ż + + syn match texMathSymbol '\\dot{C}' contained conceal cchar=Ċ + syn match texMathSymbol '\\dot{c}' contained conceal cchar=ċ + syn match texMathSymbol '\\dot{E}' contained conceal cchar=Ė + syn match texMathSymbol '\\dot{e}' contained conceal cchar=ė + syn match texMathSymbol '\\dot{G}' contained conceal cchar=Ġ + syn match texMathSymbol '\\dot{g}' contained conceal cchar=ġ + syn match texMathSymbol '\\dot{I}' contained conceal cchar=İ + + syn match texMathSymbol '\\dot{A}' contained conceal cchar=Ȧ + syn match texMathSymbol '\\dot{a}' contained conceal cchar=ȧ + syn match texMathSymbol '\\dot{O}' contained conceal cchar=Ȯ + syn match texMathSymbol '\\dot{o}' contained conceal cchar=ȯ + endif + + " Greek {{{2 + if s:tex_conceal =~# 'g' + fun! s:Greek(group,pat,cchar) + exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar + endfun + call s:Greek('texGreek','\\alpha\>' ,'α') + call s:Greek('texGreek','\\beta\>' ,'β') + call s:Greek('texGreek','\\gamma\>' ,'γ') + call s:Greek('texGreek','\\delta\>' ,'δ') + call s:Greek('texGreek','\\epsilon\>' ,'ϵ') + call s:Greek('texGreek','\\varepsilon\>' ,'ε') + call s:Greek('texGreek','\\zeta\>' ,'ζ') + call s:Greek('texGreek','\\eta\>' ,'η') + call s:Greek('texGreek','\\theta\>' ,'θ') + call s:Greek('texGreek','\\vartheta\>' ,'ϑ') + call s:Greek('texGreek','\\iota\>' ,'ι') + call s:Greek('texGreek','\\kappa\>' ,'κ') + call s:Greek('texGreek','\\lambda\>' ,'λ') + call s:Greek('texGreek','\\mu\>' ,'μ') + call s:Greek('texGreek','\\nu\>' ,'ν') + call s:Greek('texGreek','\\xi\>' ,'ξ') + call s:Greek('texGreek','\\pi\>' ,'π') + call s:Greek('texGreek','\\varpi\>' ,'ϖ') + call s:Greek('texGreek','\\rho\>' ,'ρ') + call s:Greek('texGreek','\\varrho\>' ,'ϱ') + call s:Greek('texGreek','\\sigma\>' ,'σ') + call s:Greek('texGreek','\\varsigma\>' ,'ς') + call s:Greek('texGreek','\\tau\>' ,'τ') + call s:Greek('texGreek','\\upsilon\>' ,'υ') + call s:Greek('texGreek','\\phi\>' ,'ϕ') + call s:Greek('texGreek','\\varphi\>' ,'φ') + call s:Greek('texGreek','\\chi\>' ,'χ') + call s:Greek('texGreek','\\psi\>' ,'ψ') + call s:Greek('texGreek','\\omega\>' ,'ω') + call s:Greek('texGreek','\\Gamma\>' ,'Γ') + call s:Greek('texGreek','\\Delta\>' ,'Δ') + call s:Greek('texGreek','\\Theta\>' ,'Θ') + call s:Greek('texGreek','\\Lambda\>' ,'Λ') + call s:Greek('texGreek','\\Xi\>' ,'Ξ') + call s:Greek('texGreek','\\Pi\>' ,'Π') + call s:Greek('texGreek','\\Sigma\>' ,'Σ') + call s:Greek('texGreek','\\Upsilon\>' ,'Υ') + call s:Greek('texGreek','\\Phi\>' ,'Φ') + call s:Greek('texGreek','\\Chi\>' ,'Χ') + call s:Greek('texGreek','\\Psi\>' ,'Ψ') + call s:Greek('texGreek','\\Omega\>' ,'Ω') + delfun s:Greek + endif + + " Superscripts/Subscripts {{{2 + if s:tex_conceal =~# 's' + if s:tex_fast =~# 's' + syn region texSuperscript matchgroup=texDelimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher + syn region texSubscript matchgroup=texDelimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher + endif + " s:SuperSub: + fun! s:SuperSub(group,leader,pat,cchar) + if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts) +" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">") + exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar + exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s' + endif + endfun + call s:SuperSub('texSuperscript','\^','0','⁰') + call s:SuperSub('texSuperscript','\^','1','¹') + call s:SuperSub('texSuperscript','\^','2','²') + call s:SuperSub('texSuperscript','\^','3','³') + call s:SuperSub('texSuperscript','\^','4','⁴') + call s:SuperSub('texSuperscript','\^','5','⁵') + call s:SuperSub('texSuperscript','\^','6','⁶') + call s:SuperSub('texSuperscript','\^','7','⁷') + call s:SuperSub('texSuperscript','\^','8','⁸') + call s:SuperSub('texSuperscript','\^','9','⁹') + call s:SuperSub('texSuperscript','\^','a','ᵃ') + call s:SuperSub('texSuperscript','\^','b','ᵇ') + call s:SuperSub('texSuperscript','\^','c','ᶜ') + call s:SuperSub('texSuperscript','\^','d','ᵈ') + call s:SuperSub('texSuperscript','\^','e','ᵉ') + call s:SuperSub('texSuperscript','\^','f','ᶠ') + call s:SuperSub('texSuperscript','\^','g','ᵍ') + call s:SuperSub('texSuperscript','\^','h','ʰ') + call s:SuperSub('texSuperscript','\^','i','ⁱ') + call s:SuperSub('texSuperscript','\^','j','ʲ') + call s:SuperSub('texSuperscript','\^','k','ᵏ') + call s:SuperSub('texSuperscript','\^','l','ˡ') + call s:SuperSub('texSuperscript','\^','m','ᵐ') + call s:SuperSub('texSuperscript','\^','n','ⁿ') + call s:SuperSub('texSuperscript','\^','o','ᵒ') + call s:SuperSub('texSuperscript','\^','p','ᵖ') + call s:SuperSub('texSuperscript','\^','r','ʳ') + call s:SuperSub('texSuperscript','\^','s','ˢ') + call s:SuperSub('texSuperscript','\^','t','ᵗ') + call s:SuperSub('texSuperscript','\^','u','ᵘ') + call s:SuperSub('texSuperscript','\^','v','ᵛ') + call s:SuperSub('texSuperscript','\^','w','ʷ') + call s:SuperSub('texSuperscript','\^','x','ˣ') + call s:SuperSub('texSuperscript','\^','y','ʸ') + call s:SuperSub('texSuperscript','\^','z','ᶻ') + call s:SuperSub('texSuperscript','\^','A','ᴬ') + call s:SuperSub('texSuperscript','\^','B','ᴮ') + call s:SuperSub('texSuperscript','\^','D','ᴰ') + call s:SuperSub('texSuperscript','\^','E','ᴱ') + call s:SuperSub('texSuperscript','\^','G','ᴳ') + call s:SuperSub('texSuperscript','\^','H','ᴴ') + call s:SuperSub('texSuperscript','\^','I','ᴵ') + call s:SuperSub('texSuperscript','\^','J','ᴶ') + call s:SuperSub('texSuperscript','\^','K','ᴷ') + call s:SuperSub('texSuperscript','\^','L','ᴸ') + call s:SuperSub('texSuperscript','\^','M','ᴹ') + call s:SuperSub('texSuperscript','\^','N','ᴺ') + call s:SuperSub('texSuperscript','\^','O','ᴼ') + call s:SuperSub('texSuperscript','\^','P','ᴾ') + call s:SuperSub('texSuperscript','\^','R','ᴿ') + call s:SuperSub('texSuperscript','\^','T','ᵀ') + call s:SuperSub('texSuperscript','\^','U','ᵁ') + call s:SuperSub('texSuperscript','\^','V','ⱽ') + call s:SuperSub('texSuperscript','\^','W','ᵂ') + call s:SuperSub('texSuperscript','\^',',','︐') + call s:SuperSub('texSuperscript','\^',':','︓') + call s:SuperSub('texSuperscript','\^',';','︔') + call s:SuperSub('texSuperscript','\^','+','⁺') + call s:SuperSub('texSuperscript','\^','-','⁻') + call s:SuperSub('texSuperscript','\^','<','˂') + call s:SuperSub('texSuperscript','\^','>','˃') + call s:SuperSub('texSuperscript','\^','/','ˊ') + call s:SuperSub('texSuperscript','\^','(','⁽') + call s:SuperSub('texSuperscript','\^',')','⁾') + call s:SuperSub('texSuperscript','\^','\.','˙') + call s:SuperSub('texSuperscript','\^','=','˭') + call s:SuperSub('texSubscript','_','0','₀') + call s:SuperSub('texSubscript','_','1','₁') + call s:SuperSub('texSubscript','_','2','₂') + call s:SuperSub('texSubscript','_','3','₃') + call s:SuperSub('texSubscript','_','4','₄') + call s:SuperSub('texSubscript','_','5','₅') + call s:SuperSub('texSubscript','_','6','₆') + call s:SuperSub('texSubscript','_','7','₇') + call s:SuperSub('texSubscript','_','8','₈') + call s:SuperSub('texSubscript','_','9','₉') + call s:SuperSub('texSubscript','_','a','ₐ') + call s:SuperSub('texSubscript','_','e','ₑ') + call s:SuperSub('texSubscript','_','h','ₕ') + call s:SuperSub('texSubscript','_','i','ᵢ') + call s:SuperSub('texSubscript','_','j','ⱼ') + call s:SuperSub('texSubscript','_','k','ₖ') + call s:SuperSub('texSubscript','_','l','ₗ') + call s:SuperSub('texSubscript','_','m','ₘ') + call s:SuperSub('texSubscript','_','n','ₙ') + call s:SuperSub('texSubscript','_','o','ₒ') + call s:SuperSub('texSubscript','_','p','ₚ') + call s:SuperSub('texSubscript','_','r','ᵣ') + call s:SuperSub('texSubscript','_','s','ₛ') + call s:SuperSub('texSubscript','_','t','ₜ') + call s:SuperSub('texSubscript','_','u','ᵤ') + call s:SuperSub('texSubscript','_','v','ᵥ') + call s:SuperSub('texSubscript','_','x','ₓ') + call s:SuperSub('texSubscript','_',',','︐') + call s:SuperSub('texSubscript','_','+','₊') + call s:SuperSub('texSubscript','_','-','₋') + call s:SuperSub('texSubscript','_','/','ˏ') + call s:SuperSub('texSubscript','_','(','₍') + call s:SuperSub('texSubscript','_',')','₎') + call s:SuperSub('texSubscript','_','\.','‸') + call s:SuperSub('texSubscript','_','r','ᵣ') + call s:SuperSub('texSubscript','_','v','ᵥ') + call s:SuperSub('texSubscript','_','x','ₓ') + call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ') + call s:SuperSub('texSubscript','_','\\delta\>','ᵨ') + call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ') + call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ') + call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ') + + delfun s:SuperSub + endif + + " Accented characters and Ligatures: {{{2 + if s:tex_conceal =~# 'a' + if b:tex_stylish + syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1 + syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1 + syn match texLigature '--' + syn match texLigature '---' + else + fun! s:Accents(chr,...) + let i= 1 + for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"] + if i > a:0 + break + endif + if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?' + let i= i + 1 + continue + endif + if accent =~# '\a' + exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i} + else + exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i} + endif + let i= i + 1 + endfor + endfun + " \` \' \^ \" \~ \. \= \c \H \k \r \u \v + call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ') + call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ') + call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č') + call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č') + call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď') + call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď') + call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě') + call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě') + call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ') + call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ') + call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ') + call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ') + call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ') + call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ') + call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ') + call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ') + call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ') + call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ') + call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ') + call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň') + call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň') + call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ') + call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ') + call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř') + call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř') + call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š') + call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š') + call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť') + call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť') + call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ') + call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ') + call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ') + call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ') + call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ') + call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ') + call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž') + call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž') + call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ') + " \` \' \^ \" \~ \. \= \c \H \k \r \u \v + delfun s:Accents + syn match texAccent '\\aa\>' conceal cchar=å + syn match texAccent '\\AA\>' conceal cchar=Å + syn match texAccent '\\o\>' conceal cchar=ø + syn match texAccent '\\O\>' conceal cchar=Ø + syn match texLigature '\\AE\>' conceal cchar=Æ + syn match texLigature '\\ae\>' conceal cchar=æ + syn match texLigature '\\oe\>' conceal cchar=œ + syn match texLigature '\\OE\>' conceal cchar=Œ + syn match texLigature '\\ss\>' conceal cchar=ß + syn match texLigature '--' conceal cchar=– + syn match texLigature '---' conceal cchar=— + endif + endif +endif + +" --------------------------------------------------------------------- +" LaTeX synchronization: {{{1 +syn sync maxlines=200 +syn sync minlines=50 + +syn sync match texSyncStop groupthere NONE "%stopzone\>" + +" Synchronization: {{{1 +" The $..$ and $$..$$ make for impossible sync patterns +" (one can't tell if a "$$" starts or stops a math zone by itself) +" The following grouptheres coupled with minlines above +" help improve the odds of good syncing. +if !exists("g:tex_no_math") + syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}" + syn sync match texSyncMathZoneA groupthere NONE "\\end{center}" + syn sync match texSyncMathZoneA groupthere NONE "\\end{description}" + syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}" + syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}" + syn sync match texSyncMathZoneA groupthere NONE "\\end{table}" + syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}" + syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>" +endif + +" --------------------------------------------------------------------- +" Highlighting: {{{1 + +" Define the default highlighting. {{{1 +if !exists("skip_tex_syntax_inits") + + " TeX highlighting groups which should share similar highlighting + if !exists("g:tex_no_error") + if !exists("g:tex_no_math") + hi def link texBadMath texError + hi def link texBadPar texBadMath + hi def link texMathDelimBad texError + hi def link texMathError texError + if !b:tex_stylish + hi def link texOnlyMath texError + endif + endif + hi def link texError Error + endif + + hi def link texBoldStyle Bold + hi def link texItalStyle Italic + hi def link texBoldItalStyle BoldItalic + hi def link texItalBoldStyle BoldItalic + hi def link texEmphStyle texItalStyle + hi def link texCite texRefZone + hi def link texDefCmd texDef + hi def link texDefName texDef + hi def link texDocType texCmdName + hi def link texDocTypeArgs texCmdArgs + hi def link texInputFileOpt texCmdArgs + hi def link texInputCurlies texDelimiter + hi def link texLigature texSpecialChar + if !exists("g:tex_no_math") + hi def link texMathDelimSet1 texMathDelim + hi def link texMathDelimSet2 texMathDelim + hi def link texMathDelimKey texMathDelim + hi def link texMathMatcher texMath + hi def link texAccent texStatement + hi def link texGreek texStatement + hi def link texSuperscript texStatement + hi def link texSubscript texStatement + hi def link texSuperscripts texSuperscript + hi def link texSubscripts texSubscript + hi def link texMathSymbol texStatement + hi def link texMathZoneV texMath + hi def link texMathZoneW texMath + hi def link texMathZoneX texMath + hi def link texMathZoneY texMath + hi def link texMathZoneV texMath + hi def link texMathZoneZ texMath + endif + hi def link texBeginEnd texCmdName + hi def link texBeginEndName texSection + hi def link texSpaceCode texStatement + hi def link texStyleStatement texStatement + hi def link texTypeSize texType + hi def link texTypeStyle texType + + " Basic TeX highlighting groups + hi def link texCmdArgs Number + hi def link texCmdName Statement + hi def link texComment Comment + hi def link texDef Statement + hi def link texDefParm Special + hi def link texDelimiter Delimiter + hi def link texEnvArgs Number + hi def link texInput Special + hi def link texInputFile Special + hi def link texLength Number + hi def link texMath Special + hi def link texMathDelim Statement + hi def link texMathOper Operator + hi def link texNewCmd Statement + hi def link texNewEnv Statement + hi def link texOption Number + hi def link texRefZone Special + hi def link texSection PreCondit + hi def link texSpaceCodeChar Special + hi def link texSpecialChar SpecialChar + hi def link texStatement Statement + hi def link texString String + hi def link texTodo Todo + hi def link texType Type + hi def link texZone PreCondit + +endif + +" Cleanup: {{{1 +delc TexFold +unlet s:extfname +let b:current_syntax = "tex" +let &cpo = s:keepcpo +unlet s:keepcpo +" vim: ts=8 fdm=marker diff --git a/.config/vim/syntax/texinfo.vim b/.config/vim/syntax/texinfo.vim new file mode 100644 index 0000000..79a4dfe --- /dev/null +++ b/.config/vim/syntax/texinfo.vim @@ -0,0 +1,46 @@ +" Vim syntax file +" Language: Texinfo (documentation format) +" Maintainer: Robert Dodier +" Latest Revision: 2021-12-15 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn match texinfoControlSequence display '\(@end [a-zA-Z@]\+\|@[a-zA-Z@]\+\)' + +syn match texinfoComment display '^\s*\(@comment\|@c\)\>.*$' + +syn region texinfoCode matchgroup=texinfoControlSequence start="@code{" end="}" contains=ALL +syn region texinfoVerb matchgroup=texinfoControlSequence start="@verb{" end="}" contains=ALL + +syn region texinfoArgument matchgroup=texinfoBrace start="{" end="}" contains=ALLBUT + +syn region texinfoExample matchgroup=texinfoControlSequence start="^@example\s*$" end="^@end example\s*$" contains=ALL + +syn region texinfoVerbatim matchgroup=texinfoControlSequence start="^@verbatim\s*$" end="^@end verbatim\s*$" + +syn region texinfoMenu matchgroup=texinfoControlSequence start="^@menu\s*$" end="^@end menu\s*$" + +if exists("g:texinfo_delimiters") + syn match texinfoDelimiter display '[][{}]' +endif + +hi def link texinfoDelimiter Delimiter +hi def link texinfoComment Comment +hi def link texinfoControlSequence Identifier +hi def link texinfoBrace Operator +hi def link texinfoArgument Special +hi def link texinfoExample String +hi def link texinfoVerbatim String +hi def link texinfoVerb String +hi def link texinfoCode String +hi def link texinfoMenu String + +let b:current_syntax = "texinfo" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/texmf.vim b/.config/vim/syntax/texmf.vim new file mode 100644 index 0000000..d1268fa --- /dev/null +++ b/.config/vim/syntax/texmf.vim @@ -0,0 +1,74 @@ +" Vim syntax file +" This is a GENERATED FILE. Please always refer to source file at the URI below. +" Language: Web2C TeX texmf.cnf configuration file +" Maintainer: David Ne\v{c}as (Yeti) +" Last Change: 2001-05-13 +" URL: http://physics.muni.cz/~yeti/download/syntax/texmf.vim + +" Setup +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case match + +" Comments +syn match texmfComment "%..\+$" contains=texmfTodo +syn match texmfComment "%\s*$" contains=texmfTodo +syn keyword texmfTodo TODO FIXME XXX NOT contained + +" Constants and parameters +syn match texmfPassedParameter "[-+]\=%\w\W" +syn match texmfPassedParameter "[-+]\=%\w$" +syn match texmfNumber "\<\d\+\>" +syn match texmfVariable "\$\(\w\k*\|{\w\k*}\)" +syn match texmfSpecial +\\"\|\\$+ +syn region texmfString start=+"+ end=+"+ skip=+\\"\\\\+ contains=texmfVariable,texmfSpecial,texmfPassedParameter + +" Assignments +syn match texmfLHSStart "^\s*\w\k*" nextgroup=texmfLHSDot,texmfEquals +syn match texmfLHSVariable "\w\k*" contained nextgroup=texmfLHSDot,texmfEquals +syn match texmfLHSDot "\." contained nextgroup=texmfLHSVariable +syn match texmfEquals "\s*=" contained + +" Specialities +syn match texmfComma "," contained +syn match texmfColons ":\|;" +syn match texmfDoubleExclam "!!" contained + +" Catch errors caused by wrong parenthesization +syn region texmfBrace matchgroup=texmfBraceBrace start="{" end="}" contains=ALLBUT,texmfTodo,texmfBraceError,texmfLHSVariable,texmfLHSDot transparent +syn match texmfBraceError "}" + +" Define the default highlighting + +hi def link texmfComment Comment +hi def link texmfTodo Todo + +hi def link texmfPassedParameter texmfVariable +hi def link texmfVariable Identifier + +hi def link texmfNumber Number +hi def link texmfString String + +hi def link texmfLHSStart texmfLHS +hi def link texmfLHSVariable texmfLHS +hi def link texmfLHSDot texmfLHS +hi def link texmfLHS Type + +hi def link texmfEquals Normal + +hi def link texmfBraceBrace texmfDelimiter +hi def link texmfComma texmfDelimiter +hi def link texmfColons texmfDelimiter +hi def link texmfDelimiter Preproc + +hi def link texmfDoubleExclam Statement +hi def link texmfSpecial Special + +hi def link texmfBraceError texmfError +hi def link texmfError Error + + +let b:current_syntax = "texmf" diff --git a/.config/vim/syntax/tf.vim b/.config/vim/syntax/tf.vim new file mode 100644 index 0000000..df6adcf --- /dev/null +++ b/.config/vim/syntax/tf.vim @@ -0,0 +1,196 @@ +" Vim syntax file +" Language: tf +" Maintainer: Lutz Eymers +" URL: http://www.isp.de/data/tf.vim +" Email: send syntax_vim.tgz +" Last Change: 2001 May 10 +" +" Options lite_minlines = x to sync at least x lines backwards + +" Remove any old syntax stuff hanging around + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case match + +if !exists("main_syntax") + let main_syntax = 'tf' +endif + +" Special global variables +syn keyword tfVar HOME LANG MAIL SHELL TERM TFHELP TFLIBDIR TFLIBRARY TZ contained +syn keyword tfVar background backslash contained +syn keyword tfVar bamf bg_output borg clearfull cleardone clock connect contained +syn keyword tfVar emulation end_color gag gethostbyname gpri hook hilite contained +syn keyword tfVar hiliteattr histsize hpri insert isize istrip kecho contained +syn keyword tfVar kprefix login lp lpquote maildelay matching max_iter contained +syn keyword tfVar max_recur mecho more mprefix oldslash prompt_sec contained +syn keyword tfVar prompt_usec proxy_host proxy_port ptime qecho qprefix contained +syn keyword tfVar quite quitdone redef refreshtime scroll shpause snarf sockmload contained +syn keyword tfVar start_color tabsize telopt sub time_format visual contained +syn keyword tfVar watch_dog watchname wordpunct wrap wraplog wrapsize contained +syn keyword tfVar wrapspace contained + +" Worldvar +syn keyword tfWorld world_name world_character world_password world_host contained +syn keyword tfWorld world_port world_mfile world_type contained + +" Number +syn match tfNumber "-\=\<\d\+\>" + +" Float +syn match tfFloat "\(-\=\<\d+\|-\=\)\.\d\+\>" + +" Operator +syn match tfOperator "[-+=?:&|!]" +syn match tfOperator "/[^*~@]"he=e-1 +syn match tfOperator ":=" +syn match tfOperator "[^/%]\*"hs=s+1 +syn match tfOperator "$\+[([{]"he=e-1,me=e-1 +syn match tfOperator "\^\[\+"he=s+1 contains=tfSpecialCharEsc + +" Relational +syn match tfRelation "&&" +syn match tfRelation "||" +syn match tfRelation "[<>/!=]=" +syn match tfRelation "[<>]" +syn match tfRelation "[!=]\~" +syn match tfRelation "[=!]/" + + +" Readonly Var +syn match tfReadonly "[#*]" contained +syn match tfReadonly "\<-\=L\=\d\{-}\>" contained +syn match tfReadonly "\" contained +syn match tfReadonly "\" contained + +" Identifier +syn match tfIdentifier "%\+[a-zA-Z_#*-0-9]\w*" contains=tfVar,tfReadonly +syn match tfIdentifier "%\+[{]"he=e-1,me=e-1 +syn match tfIdentifier "\$\+{[a-zA-Z_#*-0-9]\w*}" contains=tfWorld + +" Function names +syn keyword tfFunctions ascii char columns echo filename ftime fwrite getopts +syn keyword tfFunctions getpid idle kbdel kbgoto kbhead kblen kbmatch kbpoint +syn keyword tfFunctions kbtail kbwordleft kbwordright keycode lines mod +syn keyword tfFunctions moresize pad rand read regmatch send strcat strchr +syn keyword tfFunctions strcmp strlen strncmp strrchr strrep strstr substr +syn keyword tfFunctions systype time tolower toupper + +syn keyword tfStatement addworld bamf beep bind break cat changes connect contained +syn keyword tfStatement dc def dokey echo edit escape eval export expr fg for contained +syn keyword tfStatement gag getfile grab help hilite histsize hook if input contained +syn keyword tfStatement kill lcd let list listsockets listworlds load contained +syn keyword tfStatement localecho log nohilite not partial paste ps purge contained +syn keyword tfStatement purgeworld putfile quit quote recall recordline save contained +syn keyword tfStatement saveworld send sh shift sub substitute contained +syn keyword tfStatement suspend telnet test time toggle trig trigger unbind contained +syn keyword tfStatement undef undefn undeft unhook untrig unworld contained +syn keyword tfStatement version watchdog watchname while world contained + +" Hooks +syn keyword tfHook ACTIVITY BACKGROUND BAMF CONFAIL CONFLICT CONNECT DISCONNECT +syn keyword tfHook KILL LOAD LOADFAIL LOG LOGIN MAIL MORE PENDING PENDING +syn keyword tfHook PROCESS PROMPT PROXY REDEF RESIZE RESUME SEND SHADOW SHELL +syn keyword tfHook SIGHUP SIGTERM SIGUSR1 SIGUSR2 WORLD + +" Conditional +syn keyword tfConditional if endif then else elseif contained + +" Repeat +syn keyword tfRepeat while do done repeat for contained + +" Statement +syn keyword tfStatement break quit contained + +" Include +syn keyword tfInclude require load save loaded contained + +" Define +syn keyword tfDefine bind unbind def undef undefn undefn purge hook unhook trig untrig contained +syn keyword tfDefine set unset setenv contained + +" Todo +syn keyword tfTodo TODO Todo todo contained + +" SpecialChar +syn match tfSpecialChar "\\[abcfnrtyv\\]" contained +syn match tfSpecialChar "\\\d\{3}" contained contains=tfOctalError +syn match tfSpecialChar "\\x[0-9a-fA-F]\{2}" contained +syn match tfSpecialCharEsc "\[\+" contained + +syn match tfOctalError "[89]" contained + +" Comment +syn region tfComment start="^;" end="$" contains=tfTodo + +" String +syn region tfString oneline matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=tfIdentifier,tfSpecialChar,tfEscape +syn region tfString matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=tfIdentifier,tfSpecialChar,tfEscape + +syn match tfParentError "[)}\]]" + +" Parents +syn region tfParent matchgroup=Delimiter start="(" end=")" contains=ALLBUT,tfReadonly +syn region tfParent matchgroup=Delimiter start="\[" end="\]" contains=ALL +syn region tfParent matchgroup=Delimiter start="{" end="}" contains=ALL + +syn match tfEndCommand "%%\{-};" +syn match tfJoinLines "\\$" + +" Types + +syn match tfType "/[a-zA-Z_~@][a-zA-Z0-9_]*" contains=tfConditional,tfRepeat,tfStatement,tfInclude,tfDefine,tfStatement + +" Catch /quote .. ' +syn match tfQuotes "/quote .\{-}'" contains=ALLBUT,tfString +" Catch $(/escape ) +syn match tfEscape "(/escape .*)" + +" sync +if exists("tf_minlines") + exec "syn sync minlines=" . tf_minlines +else + syn sync minlines=100 +endif + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link tfComment Comment +hi def link tfString String +hi def link tfNumber Number +hi def link tfFloat Float +hi def link tfIdentifier Identifier +hi def link tfVar Identifier +hi def link tfWorld Identifier +hi def link tfReadonly Identifier +hi def link tfHook Identifier +hi def link tfFunctions Function +hi def link tfRepeat Repeat +hi def link tfConditional Conditional +hi def link tfLabel Label +hi def link tfStatement Statement +hi def link tfType Type +hi def link tfInclude Include +hi def link tfDefine Define +hi def link tfSpecialChar SpecialChar +hi def link tfSpecialCharEsc SpecialChar +hi def link tfParentError Error +hi def link tfTodo Todo +hi def link tfEndCommand Delimiter +hi def link tfJoinLines Delimiter +hi def link tfOperator Operator +hi def link tfRelation Operator + + +let b:current_syntax = "tf" + +if main_syntax == 'tf' + unlet main_syntax +endif + +" vim: ts=8 diff --git a/.config/vim/syntax/thrift.vim b/.config/vim/syntax/thrift.vim new file mode 100644 index 0000000..502e988 --- /dev/null +++ b/.config/vim/syntax/thrift.vim @@ -0,0 +1,74 @@ +" Vim syntax file +" Language: Thrift +" Original Author: Martin Smith +" Maintainer: Yinzuo Jiang +" Last Change: 2024/07/29 +" https://github.com/apache/thrift/blob/master/contrib/thrift.vim +" +" Licensed to the Apache Software Foundation (ASF) under one +" or more contributor license agreements. See the NOTICE file +" distributed with this work for additional information +" regarding copyright ownership. The ASF licenses this file +" to you under the Apache License, Version 2.0 (the +" "License"); you may not use this file except in compliance +" with the License. You may obtain a copy of the License at +" +" http://www.apache.org/licenses/LICENSE-2.0 +" +" Unless required by applicable law or agreed to in writing, +" software distributed under the License is distributed on an +" "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +" KIND, either express or implied. See the License for the +" specific language governing permissions and limitations +" under the License. +" + +if exists("b:current_syntax") + finish +endif + +" Todo +syn keyword thriftTodo TODO todo FIXME fixme XXX xxx contained + +" Comments +syn match thriftComment "#.*" contains=thriftTodo +syn region thriftComment start="/\*" end="\*/" contains=thriftTodo +syn match thriftComment "//.\{-}\(?>\|$\)\@=" + +" String +syn region thriftStringDouble matchgroup=None start=+"+ end=+"+ + +" Number +syn match thriftNumber "-\=\<\d\+\>" contained + +" Keywords +syn keyword thriftKeyword namespace +syn keyword thriftKeyword xsd_all xsd_optional xsd_nillable xsd_attrs +syn keyword thriftKeyword include cpp_include cpp_type const optional required +syn keyword thriftBasicTypes void bool byte i8 i16 i32 i64 double string binary +syn keyword thriftStructure map list set struct typedef exception enum throws union + +" Special +syn match thriftSpecial "\d\+:" + +" Structure +syn keyword thriftStructure service oneway extends +"async" { return tok_async; } +"exception" { return tok_xception; } +"extends" { return tok_extends; } +"throws" { return tok_throws; } +"service" { return tok_service; } +"enum" { return tok_enum; } +"const" { return tok_const; } + +hi def link thriftComment Comment +hi def link thriftKeyword Special +hi def link thriftBasicTypes Type +hi def link thriftStructure StorageClass +hi def link thriftTodo Todo +hi def link thriftString String +hi def link thriftNumber Number +hi def link thriftSpecial Special +hi def link thriftStructure Structure + +let b:current_syntax = "thrift" diff --git a/.config/vim/syntax/tiasm.vim b/.config/vim/syntax/tiasm.vim new file mode 100644 index 0000000..c79596b --- /dev/null +++ b/.config/vim/syntax/tiasm.vim @@ -0,0 +1,102 @@ +" Vim syntax file +" Language: TI linear assembly language +" Document: https://downloads.ti.com/docs/esd/SPRUI03B/#SPRUI03B_HTML/assembler-description.html +" Maintainer: Wu, Zhenyu +" Last Change: 2025 Jan 08 + +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" storage types +syn match tiasmType "\.bits" +syn match tiasmType "\.byte" +syn match tiasmType "\.char" +syn match tiasmType "\.cstring" +syn match tiasmType "\.double" +syn match tiasmType "\.field" +syn match tiasmType "\.float" +syn match tiasmType "\.half" +syn match tiasmType "\.int" +syn match tiasmType "\.long" +syn match tiasmType "\.short" +syn match tiasmType "\.string" +syn match tiasmType "\.ubyte" +syn match tiasmType "\.uchar" +syn match tiasmType "\.uhalf" +syn match tiasmType "\.uint" +syn match tiasmType "\.ulong" +syn match tiasmType "\.ushort" +syn match tiasmType "\.uword" +syn match tiasmType "\.word" + +syn match tiasmIdentifier "[a-z_][a-z0-9_]*" + +syn match tiasmDecimal "\<[1-9]\d*\>" display +syn match tiasmOctal "\<0[0-7][0-7]\+\>\|\<[0-7]\+[oO]\>" display +syn match tiasmHexadecimal "\<0[xX][0-9a-fA-F]\+\>\|\<[0-9][0-9a-fA-F]*[hH]\>" display +syn match tiasmBinary "\<0[bB][0-1]\+\>\|\<[01]\+[bB]\>" display + +syn match tiasmFloat "\<\d\+\.\d*\%(e[+-]\=\d\+\)\=\>" display +syn match tiasmFloat "\<\d\%(e[+-]\=\d\+\)\>" display + +syn match tiasmCharacter "'.'\|''\|'[^']'" + +syn region tiasmString start="\"" end="\"" skip="\"\"" + +syn match tiasmFunction "\$[a-zA-Z_][a-zA-Z_0-9]*\ze(" + +syn keyword tiasmTodo contained TODO FIXME XXX NOTE +syn region tiasmComment start=";" end="$" keepend contains=tiasmTodo,@Spell +syn match tiasmComment "^[*!].*" contains=tiasmTodo,@Spell +syn match tiasmLabel "^[^ *!;][^ :]*" + +syn match tiasmInclude "\.include" +syn match tiasmCond "\.if" +syn match tiasmCond "\.else" +syn match tiasmCond "\.endif" +syn match tiasmMacro "\.macro" +syn match tiasmMacro "\.endm" + +syn match tiasmDirective "\.[A-Za-z][0-9A-Za-z-_]*" + +syn case match + +hi def link tiasmLabel Label +hi def link tiasmComment Comment +hi def link tiasmTodo Todo +hi def link tiasmDirective Statement + +hi def link tiasmInclude Include +hi def link tiasmCond PreCondit +hi def link tiasmMacro Macro + +if exists('g:tiasm_legacy_syntax_groups') + hi def link hexNumber Number + hi def link decNumber Number + hi def link octNumber Number + hi def link binNumber Number + hi def link tiasmHexadecimal hexNumber + hi def link tiasmDecimal decNumber + hi def link tiasmOctal octNumber + hi def link tiasmBinary binNumber +else + hi def link tiasmHexadecimal Number + hi def link tiasmDecimal Number + hi def link tiasmOctal Number + hi def link tiasmBinary Number +endif +hi def link tiasmFloat Float + +hi def link tiasmString String +hi def link tiasmStringEscape Special +hi def link tiasmCharacter Character +hi def link tiasmCharacterEscape Special + +hi def link tiasmIdentifier Identifier +hi def link tiasmType Type +hi def link tiasmFunction Function + +let b:current_syntax = "tiasm" diff --git a/.config/vim/syntax/tidy.vim b/.config/vim/syntax/tidy.vim new file mode 100644 index 0000000..7ffda90 --- /dev/null +++ b/.config/vim/syntax/tidy.vim @@ -0,0 +1,276 @@ +" Vim syntax file +" Language: HMTL Tidy Configuration +" Maintainer: Doug Kearns +" Last Change: 2020 Sep 4 + +" Preamble {{{1 +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn iskeyword @,48-57,-,_ + +" Values {{{1 +syn match tidyWordSeparator contained ",\|\s" nextgroup=tidyWord skipwhite skipnl +syn match tidyMuteIDSeparator contained ",\|\s" nextgroup=tidyMuteID skipwhite skipnl + +syn case ignore +syn keyword tidyBoolean contained t[rue] f[alse] y[es] n[o] 1 0 +syn keyword tidyAutoBoolean contained t[rue] f[alse] y[es] n[o] 1 0 auto +syn case match +syn keyword tidyCustomTags contained no blocklevel empty inline pre +syn keyword tidyDoctype contained html5 omit auto strict loose transitional user +syn keyword tidyEncoding contained raw ascii latin0 latin1 utf8 iso2022 mac win1252 ibm858 utf16le utf16be utf16 big5 shiftjis +syn keyword tidyNewline contained LF CRLF CR +syn match tidyNumber contained "\<\d\+\>" +syn keyword tidyRepeat contained keep-first keep-last +syn keyword tidySorter contained alpha none +syn region tidyString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ oneline +syn region tidyString contained start=+'+ skip=+\\\\\|\\'+ end=+'+ oneline +" Tag and attribute lists +syn match tidyWord contained "\<\k\+\>:\@!" nextgroup=tidyWordSeparator skipwhite skipnl + +" Mute Message IDs {{{2 +syn keyword tidyMuteID ADDED_MISSING_CHARSET ANCHOR_DUPLICATED + \ ANCHOR_NOT_UNIQUE APOS_UNDEFINED APPLET_MISSING_ALT AREA_MISSING_ALT + \ ASCII_REQUIRES_DESCRIPTION ASSOCIATE_LABELS_EXPLICITLY + \ ASSOCIATE_LABELS_EXPLICITLY_FOR ASSOCIATE_LABELS_EXPLICITLY_ID + \ ATTRIBUTE_IS_NOT_ALLOWED ATTRIBUTE_VALUE_REPLACED + \ ATTR_VALUE_NOT_LCASE AUDIO_MISSING_TEXT_AIFF AUDIO_MISSING_TEXT_AU + \ AUDIO_MISSING_TEXT_RA AUDIO_MISSING_TEXT_RM AUDIO_MISSING_TEXT_SND + \ AUDIO_MISSING_TEXT_WAV BACKSLASH_IN_URI BAD_ATTRIBUTE_VALUE + \ BAD_ATTRIBUTE_VALUE_REPLACED BAD_CDATA_CONTENT BAD_SUMMARY_HTML5 + \ BAD_SURROGATE_LEAD BAD_SURROGATE_PAIR BAD_SURROGATE_TAIL + \ CANT_BE_NESTED COERCE_TO_ENDTAG COLOR_CONTRAST_ACTIVE_LINK + \ COLOR_CONTRAST_LINK COLOR_CONTRAST_TEXT COLOR_CONTRAST_VISITED_LINK + \ CONTENT_AFTER_BODY CUSTOM_TAG_DETECTED DATA_TABLE_MISSING_HEADERS + \ DATA_TABLE_MISSING_HEADERS_COLUMN DATA_TABLE_MISSING_HEADERS_ROW + \ DATA_TABLE_REQUIRE_MARKUP_COLUMN_HEADERS + \ DATA_TABLE_REQUIRE_MARKUP_ROW_HEADERS DISCARDING_UNEXPECTED + \ DOCTYPE_AFTER_TAGS DOCTYPE_MISSING DUPLICATE_FRAMESET + \ ELEMENT_NOT_EMPTY ELEMENT_VERS_MISMATCH_ERROR + \ ELEMENT_VERS_MISMATCH_WARN ENCODING_MISMATCH + \ ENSURE_PROGRAMMATIC_OBJECTS_ACCESSIBLE_APPLET + \ ENSURE_PROGRAMMATIC_OBJECTS_ACCESSIBLE_EMBED + \ ENSURE_PROGRAMMATIC_OBJECTS_ACCESSIBLE_OBJECT + \ ENSURE_PROGRAMMATIC_OBJECTS_ACCESSIBLE_SCRIPT ESCAPED_ILLEGAL_URI + \ FILE_CANT_OPEN FILE_CANT_OPEN_CFG FILE_NOT_FILE FIXED_BACKSLASH + \ FOUND_STYLE_IN_BODY FRAME_MISSING_LONGDESC FRAME_MISSING_NOFRAMES + \ FRAME_MISSING_TITLE FRAME_SRC_INVALID FRAME_TITLE_INVALID_NULL + \ FRAME_TITLE_INVALID_SPACES HEADERS_IMPROPERLY_NESTED + \ HEADER_USED_FORMAT_TEXT ID_NAME_MISMATCH ILLEGAL_NESTING + \ ILLEGAL_URI_CODEPOINT ILLEGAL_URI_REFERENCE + \ IMAGE_MAP_SERVER_SIDE_REQUIRES_CONVERSION + \ IMG_ALT_SUSPICIOUS_FILENAME IMG_ALT_SUSPICIOUS_FILE_SIZE + \ IMG_ALT_SUSPICIOUS_PLACEHOLDER IMG_ALT_SUSPICIOUS_TOO_LONG + \ IMG_BUTTON_MISSING_ALT IMG_MAP_CLIENT_MISSING_TEXT_LINKS + \ IMG_MAP_SERVER_REQUIRES_TEXT_LINKS IMG_MISSING_ALT IMG_MISSING_DLINK + \ IMG_MISSING_LONGDESC IMG_MISSING_LONGDESC_DLINK + \ INFORMATION_NOT_CONVEYED_APPLET INFORMATION_NOT_CONVEYED_IMAGE + \ INFORMATION_NOT_CONVEYED_INPUT INFORMATION_NOT_CONVEYED_OBJECT + \ INFORMATION_NOT_CONVEYED_SCRIPT INSERTING_AUTO_ATTRIBUTE + \ INSERTING_TAG INVALID_ATTRIBUTE INVALID_NCR INVALID_SGML_CHARS + \ INVALID_UTF16 INVALID_UTF8 INVALID_XML_ID JOINING_ATTRIBUTE + \ LANGUAGE_INVALID LANGUAGE_NOT_IDENTIFIED + \ LAYOUT_TABLES_LINEARIZE_PROPERLY LAYOUT_TABLE_INVALID_MARKUP + \ LINK_TEXT_MISSING LINK_TEXT_NOT_MEANINGFUL + \ LINK_TEXT_NOT_MEANINGFUL_CLICK_HERE LINK_TEXT_TOO_LONG + \ LIST_USAGE_INVALID_LI LIST_USAGE_INVALID_OL LIST_USAGE_INVALID_UL + \ MALFORMED_COMMENT MALFORMED_COMMENT_DROPPING MALFORMED_COMMENT_EOS + \ MALFORMED_COMMENT_WARN MALFORMED_DOCTYPE METADATA_MISSING + \ METADATA_MISSING_REDIRECT_AUTOREFRESH MISMATCHED_ATTRIBUTE_ERROR + \ MISMATCHED_ATTRIBUTE_WARN MISSING_ATTRIBUTE MISSING_ATTR_VALUE + \ MISSING_DOCTYPE MISSING_ENDTAG_BEFORE MISSING_ENDTAG_FOR + \ MISSING_ENDTAG_OPTIONAL MISSING_IMAGEMAP MISSING_QUOTEMARK + \ MISSING_QUOTEMARK_OPEN MISSING_SEMICOLON MISSING_SEMICOLON_NCR + \ MISSING_STARTTAG MISSING_TITLE_ELEMENT MOVED_STYLE_TO_HEAD + \ MULTIMEDIA_REQUIRES_TEXT NESTED_EMPHASIS NESTED_QUOTATION + \ NEWLINE_IN_URI NEW_WINDOWS_REQUIRE_WARNING_BLANK + \ NEW_WINDOWS_REQUIRE_WARNING_NEW NOFRAMES_CONTENT + \ NOFRAMES_INVALID_CONTENT NOFRAMES_INVALID_LINK + \ NOFRAMES_INVALID_NO_VALUE NON_MATCHING_ENDTAG OBJECT_MISSING_ALT + \ OBSOLETE_ELEMENT OPTION_REMOVED OPTION_REMOVED_APPLIED + \ OPTION_REMOVED_UNAPPLIED POTENTIAL_HEADER_BOLD + \ POTENTIAL_HEADER_ITALICS POTENTIAL_HEADER_UNDERLINE + \ PREVIOUS_LOCATION PROGRAMMATIC_OBJECTS_REQUIRE_TESTING_APPLET + \ PROGRAMMATIC_OBJECTS_REQUIRE_TESTING_EMBED + \ PROGRAMMATIC_OBJECTS_REQUIRE_TESTING_OBJECT + \ PROGRAMMATIC_OBJECTS_REQUIRE_TESTING_SCRIPT PROPRIETARY_ATTRIBUTE + \ PROPRIETARY_ATTR_VALUE PROPRIETARY_ELEMENT REMOVED_HTML5 + \ REMOVE_AUTO_REDIRECT REMOVE_AUTO_REFRESH REMOVE_BLINK_MARQUEE + \ REMOVE_FLICKER_ANIMATED_GIF REMOVE_FLICKER_APPLET + \ REMOVE_FLICKER_EMBED REMOVE_FLICKER_OBJECT REMOVE_FLICKER_SCRIPT + \ REPEATED_ATTRIBUTE REPLACE_DEPRECATED_HTML_APPLET + \ REPLACE_DEPRECATED_HTML_BASEFONT REPLACE_DEPRECATED_HTML_CENTER + \ REPLACE_DEPRECATED_HTML_DIR REPLACE_DEPRECATED_HTML_FONT + \ REPLACE_DEPRECATED_HTML_ISINDEX REPLACE_DEPRECATED_HTML_MENU + \ REPLACE_DEPRECATED_HTML_S REPLACE_DEPRECATED_HTML_STRIKE + \ REPLACE_DEPRECATED_HTML_U REPLACING_ELEMENT REPLACING_UNEX_ELEMENT + \ SCRIPT_MISSING_NOSCRIPT SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_CLICK + \ SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_DOWN + \ SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_MOVE + \ SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_OUT + \ SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_OVER + \ SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_UP SKIPOVER_ASCII_ART + \ SPACE_PRECEDING_XMLDECL STRING_ARGUMENT_BAD STRING_CONTENT_LOOKS + \ STRING_DOCTYPE_GIVEN STRING_MISSING_MALFORMED STRING_MUTING_TYPE + \ STRING_NO_SYSID STRING_UNKNOWN_OPTION + \ STYLESHEETS_REQUIRE_TESTING_LINK + \ STYLESHEETS_REQUIRE_TESTING_STYLE_ATTR + \ STYLESHEETS_REQUIRE_TESTING_STYLE_ELEMENT + \ STYLE_SHEET_CONTROL_PRESENTATION SUSPECTED_MISSING_QUOTE + \ TABLE_MAY_REQUIRE_HEADER_ABBR TABLE_MAY_REQUIRE_HEADER_ABBR_NULL + \ TABLE_MAY_REQUIRE_HEADER_ABBR_SPACES TABLE_MISSING_CAPTION + \ TABLE_MISSING_SUMMARY TABLE_SUMMARY_INVALID_NULL + \ TABLE_SUMMARY_INVALID_PLACEHOLDER TABLE_SUMMARY_INVALID_SPACES + \ TAG_NOT_ALLOWED_IN TEXT_EQUIVALENTS_REQUIRE_UPDATING_APPLET + \ TEXT_EQUIVALENTS_REQUIRE_UPDATING_OBJECT + \ TEXT_EQUIVALENTS_REQUIRE_UPDATING_SCRIPT TOO_MANY_ELEMENTS + \ TOO_MANY_ELEMENTS_IN TRIM_EMPTY_ELEMENT UNESCAPED_AMPERSAND + \ UNEXPECTED_ENDTAG UNEXPECTED_ENDTAG_ERR UNEXPECTED_ENDTAG_IN + \ UNEXPECTED_END_OF_FILE UNEXPECTED_END_OF_FILE_ATTR + \ UNEXPECTED_EQUALSIGN UNEXPECTED_GT UNEXPECTED_QUOTEMARK + \ UNKNOWN_ELEMENT UNKNOWN_ELEMENT_LOOKS_CUSTOM UNKNOWN_ENTITY + \ USING_BR_INPLACE_OF VENDOR_SPECIFIC_CHARS WHITE_IN_URI + \ XML_DECLARATION_DETECTED XML_ID_SYNTAX + \ contained nextgroup=tidyMuteIDSeparator skipwhite skipnl + +" Options {{{1 +syn keyword tidyCustomTagsOption custom-tags contained nextgroup=tidyCustomTagsDelimiter +syn match tidyCustomTagsDelimiter ":" nextgroup=tidyCustomTags contained skipwhite + +syn keyword tidyBooleanOption add-meta-charset add-xml-decl + \ add-xml-pi add-xml-space anchor-as-name ascii-chars + \ assume-xml-procins bare break-before-br clean coerce-endtags + \ decorate-inferred-ul drop-empty-paras drop-empty-elements + \ drop-font-tags drop-proprietary-attributes enclose-block-text + \ enclose-text escape-cdata escape-scripts fix-backslash + \ fix-style-tags fix-uri force-output gdoc gnu-emacs hide-comments + \ hide-endtags indent-attributes indent-cdata indent-with-tabs + \ input-xml join-classes join-styles keep-tabs keep-time language + \ literal-attributes logical-emphasis lower-literals markup + \ merge-emphasis mute-id ncr numeric-entities omit-optional-tags + \ output-html output-xhtml output-xml preserve-entities + \ punctuation-wrap quiet quote-ampersand quote-marks quote-nbsp raw + \ replace-color show-filename show-info show-meta-change show-warnings + \ skip-nested split strict-tags-attributes tidy-mark + \ uppercase-attributes uppercase-tags warn-proprietary-attributes + \ word-2000 wrap-asp wrap-attributes wrap-jste wrap-php + \ wrap-script-literals wrap-sections write-back + \ contained nextgroup=tidyBooleanDelimiter + +syn match tidyBooleanDelimiter ":" nextgroup=tidyBoolean contained skipwhite + +syn keyword tidyAutoBooleanOption fix-bad-comments indent merge-divs merge-spans output-bom show-body-only vertical-space contained nextgroup=tidyAutoBooleanDelimiter +syn match tidyAutoBooleanDelimiter ":" nextgroup=tidyAutoBoolean contained skipwhite + +syn keyword tidyCSSSelectorOption css-prefix contained nextgroup=tidyCSSSelectorDelimiter +syn match tidyCSSSelectorDelimiter ":" nextgroup=tidyCSSSelector contained skipwhite + +syn keyword tidyDoctypeOption doctype contained nextgroup=tidyDoctypeDelimiter +syn match tidyDoctypeDelimiter ":" nextgroup=tidyDoctype,tidyString contained skipwhite + +syn keyword tidyEncodingOption char-encoding input-encoding output-encoding contained nextgroup=tidyEncodingDelimiter +syn match tidyEncodingDelimiter ":" nextgroup=tidyEncoding contained skipwhite + +syn keyword tidyIntegerOption accessibility-check doctype-mode indent-spaces show-errors tab-size wrap contained nextgroup=tidyIntegerDelimiter +syn match tidyIntegerDelimiter ":" nextgroup=tidyNumber contained skipwhite + +syn keyword tidyNameOption slide-style contained nextgroup=tidyNameDelimiter +syn match tidyNameDelimiter ":" nextgroup=tidyName contained skipwhite + +syn keyword tidyNewlineOption newline contained nextgroup=tidyNewlineDelimiter +syn match tidyNewlineDelimiter ":" nextgroup=tidyNewline contained skipwhite + +syn keyword tidyAttributesOption priority-attributes contained nextgroup=tidyAttributesDelimiter +syn match tidyAttributesDelimiter ":" nextgroup=tidyWord contained skipwhite + +syn keyword tidyTagsOption new-blocklevel-tags new-empty-tags new-inline-tags new-pre-tags contained nextgroup=tidyTagsDelimiter +syn match tidyTagsDelimiter ":" nextgroup=tidyWord contained skipwhite + +syn keyword tidyRepeatOption repeated-attributes contained nextgroup=tidyRepeatDelimiter +syn match tidyRepeatDelimiter ":" nextgroup=tidyRepeat contained skipwhite + +syn keyword tidySorterOption sort-attributes contained nextgroup=tidySorterDelimiter +syn match tidySorterDelimiter ":" nextgroup=tidySorter contained skipwhite + +syn keyword tidyStringOption alt-text error-file gnu-emacs-file output-file contained nextgroup=tidyStringDelimiter +syn match tidyStringDelimiter ":" nextgroup=tidyString contained skipwhite + +syn keyword tidyMuteOption mute contained nextgroup=tidyMuteDelimiter +syn match tidyMuteDelimiter ":" nextgroup=tidyMuteID contained skipwhite + +syn cluster tidyOptions contains=tidy.*Option + +" Option line anchor {{{1 +syn match tidyStart "^" nextgroup=@tidyOptions +" Long standing bug - option lines (except the first) with leading whitespace +" are silently ignored. +syn match tidyErrorStart '^\s\+\ze\S' + +" Comments {{{1 +syn match tidyComment "^\s*//.*$" contains=tidyTodo +syn match tidyComment "^\s*#.*$" contains=tidyTodo +syn keyword tidyTodo TODO NOTE FIXME XXX contained + +" Default highlighting {{{1 +hi def link tidyAttributesOption Identifier +hi def link tidyAutoBooleanOption Identifier +hi def link tidyBooleanOption Identifier +hi def link tidyCSSSelectorOption Identifier +hi def link tidyCustomTagsOption Identifier +hi def link tidyDoctypeOption Identifier +hi def link tidyEncodingOption Identifier +hi def link tidyIntegerOption Identifier +hi def link tidyMuteOption Identifier +hi def link tidyNameOption Identifier +hi def link tidyNewlineOption Identifier +hi def link tidyRepeatOption Identifier +hi def link tidySorterOption Identifier +hi def link tidyStringOption Identifier +hi def link tidyTagsOption Identifier + +hi def link tidyAttributesDelimiter Special +hi def link tidyAutoBooleanDelimiter Special +hi def link tidyBooleanDelimiter Special +hi def link tidyCSSSelectorDelimiter Special +hi def link tidyCustomTagsDelimiter Special +hi def link tidyDoctypeDelimiter Special +hi def link tidyEncodingDelimiter Special +hi def link tidyIntegerDelimiter Special +hi def link tidyMuteDelimiter Special +hi def link tidyNameDelimiter Special +hi def link tidyNewlineDelimiter Special +hi def link tidyRepeatDelimiter Special +hi def link tidySorterDelimiter Special +hi def link tidyStringDelimiter Special +hi def link tidyTagsDelimiter Special + +hi def link tidyAutoBoolean Boolean +hi def link tidyBoolean Boolean +hi def link tidyCustomTags Constant +hi def link tidyDoctype Constant +hi def link tidyEncoding Constant +hi def link tidyMuteID Constant +hi def link tidyNewline Constant +hi def link tidyNumber Number +hi def link tidyRepeat Constant +hi def link tidySorter Constant +hi def link tidyString String +hi def link tidyWord Constant + +hi def link tidyComment Comment +hi def link tidyTodo Todo + +hi def link tidyErrorStart Error + +" Postscript {{{1 +let b:current_syntax = "tidy" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 fdm=marker diff --git a/.config/vim/syntax/tilde.vim b/.config/vim/syntax/tilde.vim new file mode 100644 index 0000000..d2a3360 --- /dev/null +++ b/.config/vim/syntax/tilde.vim @@ -0,0 +1,41 @@ +" Vim syntax file +" This file works only for Vim6.x +" Language: Tilde +" Maintainer: Tobias Rundström +" URL: http://www.tildesoftware.net +" CVS: $Id: tilde.vim,v 1.1 2004/06/13 19:31:51 vimboss Exp $ + +if exists("b:current_syntax") + finish +endif + +"tilde dosent care ... +syn case ignore + +syn match tildeFunction "\~[a-z_0-9]\+"ms=s+1 +syn region tildeParen start="(" end=")" contains=tildeString,tildeNumber,tildeVariable,tildeField,tildeSymtab,tildeFunction,tildeParen,tildeHexNumber,tildeOperator +syn region tildeString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ keepend +syn region tildeString contained start=+'+ skip=+\\\\\|\\"+ end=+'+ keepend +syn match tildeNumber "\d" contained +syn match tildeOperator "or\|and" contained +syn match tildeHexNumber "0x[a-z0-9]\+" contained +syn match tildeVariable "$[a-z_0-9]\+" contained +syn match tildeField "%[a-z_0-9]\+" contained +syn match tildeSymtab "@[a-z_0-9]\+" contained +syn match tildeComment "^#.*" +syn region tildeCurly start=+{+ end=+}+ contained contains=tildeLG,tildeString,tildeNumber,tildeVariable,tildeField,tildeFunction,tildeSymtab,tildeHexNumber +syn match tildeLG "=>" contained + + +hi def link tildeComment Comment +hi def link tildeFunction Operator +hi def link tildeOperator Operator +hi def link tildeString String +hi def link tildeNumber Number +hi def link tildeHexNumber Number +hi def link tildeVariable Identifier +hi def link tildeField Identifier +hi def link tildeSymtab Identifier +hi def link tildeError Error + +let b:current_syntax = "tilde" diff --git a/.config/vim/syntax/tli.vim b/.config/vim/syntax/tli.vim new file mode 100644 index 0000000..b96d4a2 --- /dev/null +++ b/.config/vim/syntax/tli.vim @@ -0,0 +1,58 @@ +" Vim syntax file +" Language: TealInfo source files (*.tli) +" Maintainer: Kurt W. Andrews +" Last Change: 2001 May 10 +" Version: 1.0 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" TealInfo Objects + +syn keyword tliObject LIST POPLIST WINDOW POPWINDOW OUTLINE CHECKMARK GOTO +syn keyword tliObject LABEL IMAGE RECT TRES PASSWORD POPEDIT POPIMAGE CHECKLIST + +" TealInfo Fields + +syn keyword tliField X Y W H BX BY BW BH SX SY FONT BFONT CYCLE DELAY TABS +syn keyword tliField STYLE BTEXT RECORD DATABASE KEY TARGET DEFAULT TEXT +syn keyword tliField LINKS MAXVAL + +" TealInfo Styles + +syn keyword tliStyle INVERTED HORIZ_RULE VERT_RULE NO_SCROLL NO_BORDER BOLD_BORDER +syn keyword tliStyle ROUND_BORDER ALIGN_RIGHT ALIGN_CENTER ALIGN_LEFT_START ALIGN_RIGHT_START +syn keyword tliStyle ALIGN_CENTER_START ALIGN_LEFT_END ALIGN_RIGHT_END ALIGN_CENTER_END +syn keyword tliStyle LOCKOUT BUTTON_SCROLL BUTTON_SELECT STROKE_FIND FILLED REGISTER + +" String and Character constants + +syn match tliSpecial "@" +syn region tliString start=+"+ end=+"+ + +"TealInfo Numbers, identifiers and comments + +syn case ignore +syn match tliNumber "\d*" +syn match tliIdentifier "\<\h\w*\>" +syn match tliComment "#.*" +syn case match + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link tliNumber Number +hi def link tliString String +hi def link tliComment Comment +hi def link tliSpecial SpecialChar +hi def link tliIdentifier Identifier +hi def link tliObject Statement +hi def link tliField Type +hi def link tliStyle PreProc + + +let b:current_syntax = "tli" + +" vim: ts=8 diff --git a/.config/vim/syntax/tmux.vim b/.config/vim/syntax/tmux.vim new file mode 100644 index 0000000..4b8454d --- /dev/null +++ b/.config/vim/syntax/tmux.vim @@ -0,0 +1,172 @@ +" Language: tmux(1) configuration file +" Version: 3.4 (git-3d8ead8a) +" URL: https://github.com/ericpruitt/tmux.vim/ +" Maintainer: Eric Pruitt +" License: 2-Clause BSD (http://opensource.org/licenses/BSD-2-Clause) + +if exists("b:current_syntax") + finish +endif + +" Explicitly change compatibility options to Vim's defaults because this file +" uses line continuations. +let s:original_cpo = &cpo +set cpo&vim + +let b:current_syntax = "tmux" +syntax iskeyword @,48-57,_,192-255,- +syntax case match + +" The values "yes" and "no" are synonyms for "on" and "off", so they do not +" appear in the option table file. +syn keyword tmuxEnums yes no + +syn keyword tmuxTodo FIXME NOTE TODO XXX contained + +syn match tmuxColour /\/ display +syn match tmuxKey /\(C-\|M-\|\^\)\+\S\+/ display +syn match tmuxNumber /\<\d\+\>/ display +syn match tmuxFlags /\s-\a\+/ display +syn match tmuxVariableExpansion /\$\({[A-Za-z_]\w*}\|[A-Za-z_]\w*\)/ display +syn match tmuxControl /\(^\|\s\)%\(if\|elif\|else\|endif\|hidden\)\($\|\s\)/ display +syn match tmuxEscape /\\\(u\x\{4\}\|U\x\{8\}\|\o\{3\}\|[\\ernt$]\)/ display + +" Missing closing bracket. +syn match tmuxInvalidVariableExpansion /\${[^}]*$/ display +" Starts with invalid character. +syn match tmuxInvalidVariableExpansion /\${[^A-Za-z_][^}]*}/ display +syn match tmuxInvalidVariableExpansion /\$[^A-Za-z_{ \t]/ display +" Contains invalid character. +syn match tmuxInvalidVariableExpansion /\${[^}]*[^A-Za-z0-9_}][^}]*}/ display + +syn region tmuxComment start=/#/ skip=/\\\@ 231 && s:i < 235)) ? 15 : "none" + exec "syn match tmuxColour" . s:i . " /\\/ display" +\ " | highlight tmuxColour" . s:i . " ctermfg=" . s:i . " ctermbg=" . s:bg + endfor +endif + +syn keyword tmuxOptions +\ activity-action after-bind-key after-capture-pane after-copy-mode +\ after-display-message after-display-panes after-kill-pane after-list-buffers +\ after-list-clients after-list-keys after-list-panes after-list-sessions +\ after-list-windows after-load-buffer after-lock-server after-new-session +\ after-new-window after-paste-buffer after-pipe-pane after-queue +\ after-refresh-client after-rename-session after-rename-window +\ after-resize-pane after-resize-window after-save-buffer after-select-layout +\ after-select-pane after-select-window after-send-keys after-set-buffer +\ after-set-environment after-set-hook after-set-option after-show-environment +\ after-show-messages after-show-options after-split-window after-unbind-key +\ aggressive-resize alert-activity alert-bell alert-silence allow-passthrough +\ allow-rename allow-set-title alternate-screen assume-paste-time +\ automatic-rename automatic-rename-format backspace base-index bell-action +\ buffer-limit client-active client-attached client-detached client-focus-in +\ client-focus-out client-resized client-session-changed clock-mode-color +\ clock-mode-colour clock-mode-style command-alias command-error copy-command +\ copy-mode-current-match-style copy-mode-mark-style copy-mode-match-style +\ cursor-color cursor-colour cursor-style default-command default-shell +\ default-size default-terminal destroy-unattached detach-on-destroy +\ display-panes-active-color display-panes-active-colour display-panes-color +\ display-panes-colour display-panes-time display-time editor escape-time +\ exit-empty exit-unattached extended-keys fill-character focus-events +\ history-file history-limit key-table lock-after-time lock-command +\ main-pane-height main-pane-width menu-border-lines menu-border-style +\ menu-selected-style menu-style message-command-style message-limit +\ message-line message-style mode-keys mode-style monitor-activity monitor-bell +\ monitor-silence mouse other-pane-height other-pane-width +\ pane-active-border-style pane-base-index pane-border-format +\ pane-border-indicators pane-border-lines pane-border-status pane-border-style +\ pane-colors pane-colours pane-died pane-exited pane-focus-in pane-focus-out +\ pane-mode-changed pane-set-clipboard pane-title-changed popup-border-lines +\ popup-border-style popup-style prefix prefix2 prompt-history-limit +\ remain-on-exit remain-on-exit-format renumber-windows repeat-time +\ scroll-on-clear session-closed session-created session-renamed +\ session-window-changed set-clipboard set-titles set-titles-string +\ silence-action status status-bg status-fg status-format status-interval +\ status-justify status-keys status-left status-left-length status-left-style +\ status-position status-right status-right-length status-right-style +\ status-style synchronize-panes terminal-features terminal-overrides +\ update-environment user-keys visual-activity visual-bell visual-silence +\ window-active-style window-layout-changed window-linked window-pane-changed +\ window-renamed window-resized window-size window-status-activity-style +\ window-status-bell-style window-status-current-format +\ window-status-current-style window-status-format window-status-last-style +\ window-status-separator window-status-style window-style window-unlinked +\ word-separators wrap-search xterm-keys + +syn keyword tmuxCommands +\ attach attach-session bind bind-key break-pane breakp capture-pane capturep +\ choose-buffer choose-client choose-session choose-tree choose-window +\ clear-history clear-prompt-history clearhist clearphist clock-mode +\ command-prompt confirm confirm-before copy-mode customize-mode delete-buffer +\ deleteb detach detach-client display display-menu display-message +\ display-panes display-popup displayp find-window findw has has-session if +\ if-shell info join-pane joinp kill-pane kill-server kill-session kill-window +\ killp killw last last-pane last-window lastp link-window linkw list-buffers +\ list-clients list-commands list-keys list-panes list-sessions list-windows +\ load-buffer loadb lock lock-client lock-server lock-session lockc locks ls +\ lsb lsc lscm lsk lsp lsw menu move-pane move-window movep movew new +\ new-session new-window neww next next-layout next-window nextl paste-buffer +\ pasteb pipe-pane pipep popup prev previous-layout previous-window prevl +\ refresh refresh-client rename rename-session rename-window renamew +\ resize-pane resize-window resizep resizew respawn-pane respawn-window +\ respawnp respawnw rotate-window rotatew run run-shell save-buffer saveb +\ select-layout select-pane select-window selectl selectp selectw send +\ send-keys send-prefix server-access server-info set set-buffer +\ set-environment set-hook set-option set-window-option setb setenv setw show +\ show-buffer show-environment show-hooks show-messages show-options +\ show-prompt-history show-window-options showb showenv showmsgs showphist +\ showw source source-file split-pane split-window splitp splitw start +\ start-server suspend-client suspendc swap-pane swap-window swapp swapw +\ switch-client switchc unbind unbind-key unlink-window unlinkw wait wait-for + +syn keyword tmuxEnums +\ absolute-centre all always any arrows bar blinking-bar blinking-block +\ blinking-underline block both bottom centre color colour current default +\ double emacs external failed heavy keep-group keep-last largest latest left +\ manual next no-detached none number off on other padded previous right +\ rounded simple single smallest top underline vi + +let &cpo = s:original_cpo +unlet! s:original_cpo s:bg s:i diff --git a/.config/vim/syntax/toml.vim b/.config/vim/syntax/toml.vim new file mode 100644 index 0000000..bcb1b0b --- /dev/null +++ b/.config/vim/syntax/toml.vim @@ -0,0 +1,81 @@ +" Vim syntax file +" Language: TOML +" Homepage: https://github.com/cespare/vim-toml +" Maintainer: Aman Verma +" Previous Maintainer: Caleb Spare +" Last Change: Oct 8, 2021 + +if exists('b:current_syntax') + finish +endif + +syn match tomlEscape /\\[btnfr"/\\]/ display contained +syn match tomlEscape /\\u\x\{4}/ contained +syn match tomlEscape /\\U\x\{8}/ contained +syn match tomlLineEscape /\\$/ contained + +" Basic strings +syn region tomlString oneline start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=tomlEscape +" Multi-line basic strings +syn region tomlString start=/"""/ end=/"""/ contains=tomlEscape,tomlLineEscape +" Literal strings +syn region tomlString oneline start=/'/ end=/'/ +" Multi-line literal strings +syn region tomlString start=/'''/ end=/'''/ + +syn match tomlInteger /[+-]\=\<[1-9]\(_\=\d\)*\>/ display +syn match tomlInteger /[+-]\=\<0\>/ display +syn match tomlInteger /[+-]\=\<0x[[:xdigit:]]\(_\=[[:xdigit:]]\)*\>/ display +syn match tomlInteger /[+-]\=\<0o[0-7]\(_\=[0-7]\)*\>/ display +syn match tomlInteger /[+-]\=\<0b[01]\(_\=[01]\)*\>/ display +syn match tomlInteger /[+-]\=\<\(inf\|nan\)\>/ display + +syn match tomlFloat /[+-]\=\<\d\(_\=\d\)*\.\d\+\>/ display +syn match tomlFloat /[+-]\=\<\d\(_\=\d\)*\(\.\d\(_\=\d\)*\)\=[eE][+-]\=\d\(_\=\d\)*\>/ display + +syn match tomlBoolean /\<\%(true\|false\)\>/ display + +" https://tools.ietf.org/html/rfc3339 +syn match tomlDate /\d\{4\}-\d\{2\}-\d\{2\}/ display +syn match tomlDate /\d\{2\}:\d\{2\}:\d\{2\}\%(\.\d\+\)\?/ display +syn match tomlDate /\d\{4\}-\d\{2\}-\d\{2\}[T ]\d\{2\}:\d\{2\}:\d\{2\}\%(\.\d\+\)\?\%(Z\|[+-]\d\{2\}:\d\{2\}\)\?/ display + +syn match tomlDotInKey /\v[^.]+\zs\./ contained display +syn match tomlKey /\v(^|[{,])\s*\zs[[:alnum:]._-]+\ze\s*\=/ contains=tomlDotInKey display +syn region tomlKeyDq oneline start=/\v(^|[{,])\s*\zs"/ end=/"\ze\s*=/ contains=tomlEscape +syn region tomlKeySq oneline start=/\v(^|[{,])\s*\zs'/ end=/'\ze\s*=/ + +syn region tomlTable oneline start=/^\s*\[[^\[]/ end=/\]/ contains=tomlKey,tomlKeyDq,tomlKeySq,tomlDotInKey + +syn region tomlTableArray oneline start=/^\s*\[\[/ end=/\]\]/ contains=tomlKey,tomlKeyDq,tomlKeySq,tomlDotInKey + +syn region tomlKeyValueArray start=/=\s*\[\zs/ end=/\]/ contains=@tomlValue + +syn region tomlArray start=/\[/ end=/\]/ contains=@tomlValue contained + +syn cluster tomlValue contains=tomlArray,tomlString,tomlInteger,tomlFloat,tomlBoolean,tomlDate,tomlComment + +syn keyword tomlTodo TODO FIXME XXX BUG contained + +syn match tomlComment /#.*/ contains=@Spell,tomlTodo + +hi def link tomlComment Comment +hi def link tomlTodo Todo +hi def link tomlTableArray Title +hi def link tomlTable Title +hi def link tomlDotInKey Normal +hi def link tomlKeySq Identifier +hi def link tomlKeyDq Identifier +hi def link tomlKey Identifier +hi def link tomlDate Constant +hi def link tomlBoolean Boolean +hi def link tomlFloat Float +hi def link tomlInteger Number +hi def link tomlString String +hi def link tomlLineEscape SpecialChar +hi def link tomlEscape SpecialChar + +syn sync minlines=500 +let b:current_syntax = 'toml' + +" vim: et sw=2 sts=2 diff --git a/.config/vim/syntax/tpp.vim b/.config/vim/syntax/tpp.vim new file mode 100644 index 0000000..e2b307b --- /dev/null +++ b/.config/vim/syntax/tpp.vim @@ -0,0 +1,83 @@ +" Vim syntax file +" Language: tpp - Text Presentation Program +" Maintainer: Debian Vim Maintainers +" Former Maintainer: Gerfried Fuchs +" Last Change: 2023 Jan 16 +" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/tpp.vim +" Filenames: *.tpp +" License: BSD +" +" XXX This file is in need of a new maintainer, Debian VIM Maintainers maintain +" it only because patches have been submitted for it by Debian users and the +" former maintainer was MIA (Missing In Action), taking over its +" maintenance was thus the only way to include those patches. +" If you care about this file, and have time to maintain it please do so! +" +" Comments are very welcome - but please make sure that you are commenting on +" the latest version of this file. +" SPAM is _NOT_ welcome - be ready to be reported! + +" quit when a syntax file was already loaded +if exists('b:current_syntax') + finish +endif + +if !exists('main_syntax') + let main_syntax = 'tpp' +endif + + +"" list of the legal switches/options +syn match tppAbstractOptionKey contained "^--\%(author\|title\|date\|footer\) *" nextgroup=tppString +syn match tppPageLocalOptionKey contained "^--\%(heading\|center\|right\|huge\|sethugefont\|exec\) *" nextgroup=tppString +syn match tppPageLocalSwitchKey contained "^--\%(horline\|-\|\%(begin\|end\)\%(\%(shell\)\?output\|slide\%(left\|right\|top\|bottom\)\)\|\%(bold\|rev\|ul\)\%(on\|off\)\|withborder\)" +syn match tppNewPageOptionKey contained "^--newpage *" nextgroup=tppString +syn match tppColorOptionKey contained "^--\%(\%(bg\|fg\)\?color\) *" +syn match tppTimeOptionKey contained "^--sleep *" + +syn match tppString contained ".*" +syn match tppColor contained "\%(white\|yellow\|red\|green\|blue\|cyan\|magenta\|black\|default\)" +syn match tppTime contained "\d\+" + +syn region tppPageLocalSwitch start="^--" end="$" contains=tppPageLocalSwitchKey oneline +syn region tppColorOption start="^--\%(\%(bg\|fg\)\?color\)" end="$" contains=tppColorOptionKey,tppColor oneline +syn region tppTimeOption start="^--sleep" end="$" contains=tppTimeOptionKey,tppTime oneline +syn region tppNewPageOption start="^--newpage" end="$" contains=tppNewPageOptionKey oneline +syn region tppPageLocalOption start="^--\%(heading\|center\|right\|huge\|sethugefont\|exec\)" end="$" contains=tppPageLocalOptionKey oneline +syn region tppAbstractOption start="^--\%(author\|title\|date\|footer\)" end="$" contains=tppAbstractOptionKey oneline + +if main_syntax !=# 'sh' + " shell command + syn include @tppShExec syntax/sh.vim + unlet b:current_syntax + + syn region shExec matchgroup=tppPageLocalOptionKey start='^--exec *' keepend end='$' contains=@tppShExec + +endif + +syn match tppComment "^--##.*$" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link tppAbstractOptionKey Special +hi def link tppPageLocalOptionKey Keyword +hi def link tppPageLocalSwitchKey Keyword +hi def link tppColorOptionKey Keyword +hi def link tppTimeOptionKey Comment +hi def link tppNewPageOptionKey PreProc +hi def link tppString String +hi def link tppColor String +hi def link tppTime Number +hi def link tppComment Comment +hi def link tppAbstractOption Error +hi def link tppPageLocalOption Error +hi def link tppPageLocalSwitch Error +hi def link tppColorOption Error +hi def link tppNewPageOption Error +hi def link tppTimeOption Error + + +let b:current_syntax = 'tpp' + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/trasys.vim b/.config/vim/syntax/trasys.vim new file mode 100644 index 0000000..d52b5ee --- /dev/null +++ b/.config/vim/syntax/trasys.vim @@ -0,0 +1,160 @@ +" Vim syntax file +" Language: TRASYS input file +" Maintainer: Adrian Nagle, anagle@ball.com +" Last Change: 2003 May 11 +" Filenames: *.inp +" URL: http://www.naglenet.org/vim/syntax/trasys.vim +" MAIN URL: http://www.naglenet.org/vim/ + + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + + +" Force free-form fortran format +let fortran_free_source=1 + +" Load FORTRAN syntax file +runtime! syntax/fortran.vim +unlet b:current_syntax + + +" Ignore case +syn case ignore + + + +" Define keywords for TRASYS +syn keyword trasysOptions model rsrec info maxfl nogo dmpdoc +syn keyword trasysOptions rsi rti rso rto bcdou cmerg emerg +syn keyword trasysOptions user1 nnmin erplot + +syn keyword trasysSurface icsn tx ty tz rotx roty rotz inc bcsn +syn keyword trasysSurface nnx nny nnz nnax nnr nnth unnx +syn keyword trasysSurface unny unnz unnax unnr unnth type idupsf +syn keyword trasysSurface imagsf act active com shade bshade axmin +syn keyword trasysSurface axmax zmin zmax rmin rmax thmin thmin +syn keyword trasysSurface thmax alpha emiss trani trans spri sprs +syn keyword trasysSurface refno posit com dupbcs dimensions +syn keyword trasysSurface dimension position prop surfn + +syn keyword trasysSurfaceType rect trap disk cyl cone sphere parab +syn keyword trasysSurfaceType box5 box6 shpero tor ogiv elem tape poly + +syn keyword trasysSurfaceArgs ff di top bottom in out both no only + +syn keyword trasysArgs fig smn nodea zero only ir sol +syn keyword trasysArgs both wband stepn initl + +syn keyword trasysOperations orbgen build + +"syn keyword trasysSubRoutine call +syn keyword trasysSubRoutine chgblk ndata ndatas odata odatas +syn keyword trasysSubRoutine pldta ffdata cmdata adsurf rbdata +syn keyword trasysSubRoutine rtdata pffshd orbit1 orbit2 orient +syn keyword trasysSubRoutine didt1 didt1s didt2 didt2s spin +syn keyword trasysSubRoutine spinav dicomp distab drdata gbdata +syn keyword trasysSubRoutine gbaprx rkdata rcdata aqdata stfaq +syn keyword trasysSubRoutine qodata qoinit modar modpr modtr +syn keyword trasysSubRoutine modprs modshd moddat rstoff rston +syn keyword trasysSubRoutine rsmerg ffread diread ffusr1 diusr1 +syn keyword trasysSubRoutine surfp didt3 didt3s romain stfrc +syn keyword trasysSubRoutine rornt rocstr romove flxdata title + +syn keyword trassyPrcsrSegm nplot oplot plot cmcal ffcal rbcal +syn keyword trassyPrcsrSegm rtcal dical drcal sfcal gbcal rccal +syn keyword trassyPrcsrSegm rkcal aqcal qocal + + + +" Define matches for TRASYS +syn match trasysOptions "list source" +syn match trasysOptions "save source" +syn match trasysOptions "no print" + +"syn match trasysSurface "^K *.* [^$]" +"syn match trasysSurface "^D *[0-9]*\.[0-9]\+" +"syn match trasysSurface "^I *.*[0-9]\+\.\=" +"syn match trasysSurface "^N *[0-9]\+" +"syn match trasysSurface "^M *[a-z[A-Z0-9]\+" +"syn match trasysSurface "^B[C][S] *[a-zA-Z0-9]*" +"syn match trasysSurface "^S *SURFN.*[0-9]" +syn match trasysSurface "P[0-9]* *="he=e-1 + +syn match trasysIdentifier "^L "he=e-1 +syn match trasysIdentifier "^K "he=e-1 +syn match trasysIdentifier "^D "he=e-1 +syn match trasysIdentifier "^I "he=e-1 +syn match trasysIdentifier "^N "he=e-1 +syn match trasysIdentifier "^M "he=e-1 +syn match trasysIdentifier "^B[C][S]" +syn match trasysIdentifier "^S "he=e-1 + +syn match trasysComment "^C.*$" +syn match trasysComment "^R.*$" +syn match trasysComment "\$.*$" + +syn match trasysHeader "^header[^,]*" + +syn match trasysMacro "^FAC" + +syn match trasysInteger "-\=\<[0-9]*\>" +syn match trasysFloat "-\=\<[0-9]*\.[0-9]*" +syn match trasysScientific "-\=\<[0-9]*\.[0-9]*E[-+]\=[0-9]\+\>" + +syn match trasysBlank "' \+'"hs=s+1,he=e-1 + +syn match trasysEndData "^END OF DATA" + +if exists("thermal_todo") + execute 'syn match trasysTodo ' . '"^'.thermal_todo.'.*$"' +else + syn match trasysTodo "^?.*$" +endif + + + +" Define regions for TRASYS +syn region trasysComment matchgroup=trasysHeader start="^HEADER DOCUMENTATION DATA" end="^HEADER[^,]*" + + + +" Define synchronizing patterns for TRASYS +syn sync maxlines=500 +syn sync match trasysSync grouphere trasysComment "^HEADER DOCUMENTATION DATA" + + + +" Define the default highlighting +" Only when an item doesn't have highlighting yet + +hi def link trasysOptions Special +hi def link trasysSurface Special +hi def link trasysSurfaceType Constant +hi def link trasysSurfaceArgs Constant +hi def link trasysArgs Constant +hi def link trasysOperations Statement +hi def link trasysSubRoutine Statement +hi def link trassyPrcsrSegm PreProc +hi def link trasysIdentifier Identifier +hi def link trasysComment Comment +hi def link trasysHeader Typedef +hi def link trasysMacro Macro +hi def link trasysInteger Number +hi def link trasysFloat Float +hi def link trasysScientific Float + +hi def link trasysBlank SpecialChar + +hi def link trasysEndData Macro + +hi def link trasysTodo Todo + + + +let b:current_syntax = "trasys" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/treetop.vim b/.config/vim/syntax/treetop.vim new file mode 100644 index 0000000..60bbf26 --- /dev/null +++ b/.config/vim/syntax/treetop.vim @@ -0,0 +1,110 @@ +" Vim syntax file +" Language: Treetop +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2011-03-14 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword treetopTodo + \ contained + \ TODO + \ FIXME + \ XXX + \ NOTE + +syn match treetopComment + \ '#.*' + \ display + \ contains=treetopTodo + +syn include @treetopRuby syntax/ruby.vim +unlet b:current_syntax + +syn keyword treetopKeyword + \ require + \ end +syn region treetopKeyword + \ matchgroup=treetopKeyword + \ start='\<\%(grammar\|include\|module\)\>\ze\s' + \ end='$' + \ transparent + \ oneline + \ keepend + \ contains=@treetopRuby +syn keyword treetopKeyword + \ rule + \ nextgroup=treetopRuleName + \ skipwhite skipnl + +syn match treetopGrammarName + \ '\u\w*' + \ contained + +syn match treetopRubyModuleName + \ '\u\w*' + \ contained + +syn match treetopRuleName + \ '\h\w*' + \ contained + +syn region treetopString + \ matchgroup=treetopStringDelimiter + \ start=+"+ + \ end=+"+ +syn region treetopString + \ matchgroup=treetopStringDelimiter + \ start=+'+ + \ end=+'+ + +syn region treetopCharacterClass + \ matchgroup=treetopCharacterClassDelimiter + \ start=+\[+ + \ skip=+\\\]+ + \ end=+\]+ + +syn region treetopRubyBlock + \ matchgroup=treetopRubyBlockDelimiter + \ start=+{+ + \ end=+}+ + \ contains=@treetopRuby + +syn region treetopSemanticPredicate + \ matchgroup=treetopSemanticPredicateDelimiter + \ start=+[!&]{+ + \ end=+}+ + \ contains=@treetopRuby + +syn region treetopSubclassDeclaration + \ matchgroup=treetopSubclassDeclarationDelimiter + \ start=+<+ + \ end=+>+ + \ contains=@treetopRuby + +syn match treetopEllipsis + \ +''+ + +hi def link treetopTodo Todo +hi def link treetopComment Comment +hi def link treetopKeyword Keyword +hi def link treetopGrammarName Constant +hi def link treetopRubyModuleName Constant +hi def link treetopRuleName Identifier +hi def link treetopString String +hi def link treetopStringDelimiter treetopString +hi def link treetopCharacterClass treetopString +hi def link treetopCharacterClassDelimiter treetopCharacterClass +hi def link treetopRubyBlockDelimiter PreProc +hi def link treetopSemanticPredicateDelimiter PreProc +hi def link treetopSubclassDeclarationDelimiter PreProc +hi def link treetopEllipsis Special + +let b:current_syntax = 'treetop' + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/trustees.vim b/.config/vim/syntax/trustees.vim new file mode 100644 index 0000000..3a7d26e --- /dev/null +++ b/.config/vim/syntax/trustees.vim @@ -0,0 +1,44 @@ +" Vim syntax file +" Language: trustees +" Maintainer: Nima Talebi +" Last Change: 2022 Jun 14 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syntax case match +syntax sync minlines=0 maxlines=0 + +" Errors & Comments +syntax match tfsError /.*/ +highlight link tfsError Error +syntax keyword tfsSpecialComment TODO XXX FIXME contained +highlight link tfsSpecialComment Todo +syntax match tfsComment ~\s*#.*~ contains=tfsSpecialComment +highlight link tfsComment Comment + +" Operators & Delimiters +highlight link tfsSpecialChar Operator +syntax match tfsSpecialChar ~[*!+]~ contained +highlight link tfsDelimiter Delimiter +syntax match tfsDelimiter ~:~ contained + +" Trustees Rules - Part 1 of 3 - The Device +syntax region tfsRuleDevice matchgroup=tfsDeviceContainer start=~\[/~ end=~\]~ nextgroup=tfsRulePath oneline +highlight link tfsRuleDevice Label +highlight link tfsDeviceContainer PreProc + +" Trustees Rules - Part 2 of 3 - The Path +syntax match tfsRulePath ~/[-_a-zA-Z0-9/]*~ nextgroup=tfsRuleACL contained contains=tfsDelimiter +highlight link tfsRulePath String + +" Trustees Rules - Part 3 of 3 - The ACLs +syntax match tfsRuleACL ~\(:\(\*\|[+]\{0,1\}[a-zA-Z0-9/]\+\):[RWEBXODCU!]\+\)\+$~ contained contains=tfsDelimiter,tfsRuleWho,tfsRuleWhat +syntax match tfsRuleWho ~\(\*\|[+]\{0,1\}[a-zA-Z0-9/]\+\)~ contained contains=tfsSpecialChar +highlight link tfsRuleWho Identifier +syntax match tfsRuleWhat ~[RWEBXODCU!]\+~ contained contains=tfsSpecialChar +highlight link tfsRuleWhat Structure + +let b:current_syntax = 'trustees' diff --git a/.config/vim/syntax/tsalt.vim b/.config/vim/syntax/tsalt.vim new file mode 100644 index 0000000..6f74ad2 --- /dev/null +++ b/.config/vim/syntax/tsalt.vim @@ -0,0 +1,206 @@ +" Vim syntax file +" Language: Telix (Modem Comm Program) SALT Script +" Maintainer: Sean M. McKee +" Last Change: 2012 Feb 03 by Thilo Six +" Version Info: @(#)tsalt.vim 1.5 97/12/16 08:11:15 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" turn case matching off +syn case ignore + +"FUNCTIONS +" Character Handling Functions +syn keyword tsaltFunction IsAscii IsAlNum IsAlpha IsCntrl IsDigit +syn keyword tsaltFunction IsLower IsUpper ToLower ToUpper + +" Connect Device Operations +syn keyword tsaltFunction Carrier cInp_Cnt cGetC cGetCT cPutC cPutN +syn keyword tsaltFunction cPutS cPutS_TR FlushBuf Get_Baud +syn keyword tsaltFunction Get_DataB Get_Port Get_StopB Hangup +syn keyword tsaltFunction KillConnectDevice MakeConnectDevice +syn keyword tsaltFunction Send_Brk Set_ConnectDevice Set_Port + +" File Input/Output Operations +syn keyword tsaltFunction fClearErr fClose fDelete fError fEOF fFlush +syn keyword tsaltFunction fGetC fGetS FileAttr FileFind FileSize +syn keyword tsaltFunction FileTime fnStrip fOpen fPutC fPutS fRead +syn keyword tsaltFunction fRename fSeek fTell fWrite + +" File Transfers and Logs +syn keyword tsaltFunction Capture Capture_Stat Printer Receive Send +syn keyword tsaltFunction Set_DefProt UsageLog Usage_Stat UStamp + +" Input String Matching +syn keyword tsaltFunction Track Track_AddChr Track_Free Track_Hit +syn keyword tsaltFunction WaitFor + +" Keyboard Operations +syn keyword tsaltFunction InKey InKeyW KeyGet KeyLoad KeySave KeySet + +" Miscellaneous Functions +syn keyword tsaltFunction ChatMode Dos Dial DosFunction ExitTelix +syn keyword tsaltFunction GetEnv GetFon HelpScreen LoadFon NewDir +syn keyword tsaltFunction Randon Redial RedirectDOS Run +syn keyword tsaltFunction Set_Terminal Show_Directory TelixVersion +syn keyword tsaltFunction Terminal TransTab Update_Term + +" Script Management +syn keyword tsaltFunction ArgCount Call CallD CompileScript GetRunPath +syn keyword tsaltFunction Is_Loaded Load_Scr ScriptVersion +syn keyword tsaltFunction TelixForWindows Unload_Scr + +" Sound Functions +syn keyword tsaltFunction Alarm PlayWave Tone + +" String Handling +syn keyword tsaltFunction CopyChrs CopyStr DelChrs GetS GetSXY +syn keyword tsaltFunction InputBox InsChrs ItoS SetChr StoI StrCat +syn keyword tsaltFunction StrChr StrCompI StrLen StrLower StrMaxLen +syn keyword tsaltFunction StrPos StrPosI StrUpper SubChr SubChrs +syn keyword tsaltFunction SubStr + +" Time, Date, and Timer Operations +syn keyword tsaltFunction CurTime Date Delay Delay_Scr Get_OnlineTime +syn keyword tsaltFunction tDay tHour tMin tMonth tSec tYear Time +syn keyword tsaltFunction Time_Up Timer_Free Time_Restart +syn keyword tsaltFunction Time_Start Time_Total + +" Video Operations +syn keyword tsaltFunction Box CNewLine Cursor_OnOff Clear_Scr +syn keyword tsaltFunction GetTermHeight GetTermWidth GetX GetY +syn keyword tsaltFunction GotoXY MsgBox NewLine PrintC PrintC_Trm +syn keyword tsaltFunction PrintN PrintN_Trm PrintS PrintS_Trm +syn keyword tsaltFunction PrintSC PRintSC_Trm +syn keyword tsaltFunction PStrA PStrAXY Scroll Status_Wind vGetChr +syn keyword tsaltFunction vGetChrs vGetChrsA vPutChr vPutChrs +syn keyword tsaltFunction vPutChrsA vRstrArea vSaveArea + +" Dynamic Data Exchange (DDE) Operations +syn keyword tsaltFunction DDEExecute DDEInitiate DDEPoke DDERequest +syn keyword tsaltFunction DDETerminate DDETerminateAll +"END FUNCTIONS + +"PREDEFINED VARIABLES +syn keyword tsaltSysVar _add_lf _alarm_on _answerback_str _asc_rcrtrans +syn keyword tsaltSysVar _asc_remabort _asc_rlftrans _asc_scpacing +syn keyword tsaltSysVar _asc_scrtrans _asc_secho _asc_slpacing +syn keyword tsaltSysVar _asc_spacechr _asc_striph _back_color +syn keyword tsaltSysVar _capture_fname _connect_str _dest_bs +syn keyword tsaltSysVar _dial_pause _dial_time _dial_post +syn keyword tsaltSysVar _dial_pref1 _dial_pref2 _dial_pref3 +syn keyword tsaltSysVar _dial_pref4 _dir_prog _down_dir +syn keyword tsaltSysVar _entry_bbstype _entry_comment _entry_enum +syn keyword tsaltSysVar _entry_name _entry_num _entry_logonname +syn keyword tsaltSysVar _entry_pass _fore_color _image_file +syn keyword tsaltSysVar _local_echo _mdm_hang_str _mdm_init_str +syn keyword tsaltSysVar _no_connect1 _no_connect2 _no_connect3 +syn keyword tsaltSysVar _no_connect4 _no_connect5 _redial_stop +syn keyword tsaltSysVar _scr_chk_key _script_dir _sound_on +syn keyword tsaltSysVar _strip_high _swap_bs _telix_dir _up_dir +syn keyword tsaltSysVar _usage_fname _zmodauto _zmod_rcrash +syn keyword tsaltSysVar _zmod_scrash +"END PREDEFINED VARIABLES + +"TYPE +syn keyword tsaltType str int +"END TYPE + +"KEYWORDS +syn keyword tsaltStatement goto break return continue +syn keyword tsaltConditional if then else +syn keyword tsaltRepeat while for do +"END KEYWORDS + +syn keyword tsaltTodo contained TODO + +" the rest is pretty close to C ----------------------------------------- + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match tsaltSpecial contained "\^\d\d\d\|\^." +syn region tsaltString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=tsaltSpecial +syn match tsaltCharacter "'[^\\]'" +syn match tsaltSpecialCharacter "'\\.'" + +"catch errors caused by wrong parenthesis +syn region tsaltParen transparent start='(' end=')' contains=ALLBUT,tsaltParenError,tsaltIncluded,tsaltSpecial,tsaltTodo +syn match tsaltParenError ")" +syn match tsaltInParen contained "[{}]" + +hi link tsaltParenError tsaltError +hi link tsaltInParen tsaltError + +"integer number, or floating point number without a dot and with "f". +syn match tsaltNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" +"floating point number, with dot, optional exponent +syn match tsaltFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, starting with a dot, optional exponent +syn match tsaltFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match tsaltFloat "\<\d\+e[-+]\=\d\+[fl]\=\>" +"hex number +syn match tsaltNumber "0x[0-9a-f]\+\(u\=l\=\|lu\)\>" +"syn match cIdentifier "\<[a-z_][a-z0-9_]*\>" + +syn region tsaltComment start="/\*" end="\*/" contains=cTodo +syn match tsaltComment "//.*" contains=cTodo +syn match tsaltCommentError "\*/" + +syn region tsaltPreCondit start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=tsaltComment,tsaltString,tsaltCharacter,tsaltNumber,tsaltCommentError +syn region tsaltIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match tsaltIncluded contained "<[^>]*>" +syn match tsaltInclude "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=tsaltIncluded +"syn match TelixSalyLineSkip "\\$" +syn region tsaltDefine start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,tsaltPreCondit,tsaltIncluded,tsaltInclude,tsaltDefine,tsaltInParen +syn region tsaltPreProc start="^[ \t]*#[ \t]*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,tsaltPreCondit,tsaltIncluded,tsaltInclude,tsaltDefine,tsaltInParen + +" Highlight User Labels +syn region tsaltMulti transparent start='?' end=':' contains=ALLBUT,tsaltIncluded,tsaltSpecial,tsaltTodo + +syn sync ccomment tsaltComment + + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link tsaltFunction Statement +hi def link tsaltSysVar Type +"hi def link tsaltLibFunc UserDefFunc +"hi def link tsaltConstants Type +"hi def link tsaltFuncArg Type +"hi def link tsaltOperator Operator +"hi def link tsaltLabel Label +"hi def link tsaltUserLabel Label +hi def link tsaltConditional Conditional +hi def link tsaltRepeat Repeat +hi def link tsaltCharacter SpecialChar +hi def link tsaltSpecialCharacter SpecialChar +hi def link tsaltNumber Number +hi def link tsaltFloat Float +hi def link tsaltCommentError tsaltError +hi def link tsaltInclude Include +hi def link tsaltPreProc PreProc +hi def link tsaltDefine Macro +hi def link tsaltIncluded tsaltString +hi def link tsaltError Error +hi def link tsaltStatement Statement +hi def link tsaltPreCondit PreCondit +hi def link tsaltType Type +hi def link tsaltString String +hi def link tsaltComment Comment +hi def link tsaltSpecial Special +hi def link tsaltTodo Todo + + +let b:current_syntax = "tsalt" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8 diff --git a/.config/vim/syntax/tsscl.vim b/.config/vim/syntax/tsscl.vim new file mode 100644 index 0000000..df804b2 --- /dev/null +++ b/.config/vim/syntax/tsscl.vim @@ -0,0 +1,204 @@ +" Vim syntax file +" Language: TSS (Thermal Synthesizer System) Command Line +" Maintainer: Adrian Nagle, anagle@ball.com +" Last Change: 2003 May 11 +" Filenames: *.tsscl +" URL: http://www.naglenet.org/vim/syntax/tsscl.vim +" MAIN URL: http://www.naglenet.org/vim/ + + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + + + +" Ignore case +syn case ignore + + + +" +" +" Begin syntax definitions for tss geometry file. +" + +" Load TSS geometry syntax file +"source $VIM/myvim/tssgm.vim +"source $VIMRUNTIME/syntax/c.vim + +" Define keywords for TSS +syn keyword tssclCommand begin radk list heatrates attr draw + +syn keyword tssclKeyword cells rays error nodes levels objects cpu +syn keyword tssclKeyword units length positions energy time unit solar +syn keyword tssclKeyword solar_constant albedo planet_power + +syn keyword tssclEnd exit + +syn keyword tssclUnits cm feet meters inches +syn keyword tssclUnits Celsius Kelvin Fahrenheit Rankine + + + +" Define matches for TSS +syn match tssclString /"[^"]\+"/ contains=ALLBUT,tssInteger,tssclKeyword,tssclCommand,tssclEnd,tssclUnits + +syn match tssclComment "#.*$" + +" rational and logical operators +" < Less than +" > Greater than +" <= Less than or equal +" >= Greater than or equal +" == or = Equal to +" != Not equal to +" && or & Logical AND +" || or | Logical OR +" ! Logical NOT +" +" algebraic operators: +" ^ or ** Exponentation +" * Multiplication +" / Division +" % Remainder +" + Addition +" - Subtraction +" +syn match tssclOper "||\||\|&&\|&\|!=\|!\|>=\|<=\|>\|<\|+\|-\|^\|\*\*\|\*\|/\|%\|==\|=\|\." skipwhite + +" CLI Directive Commands, with arguments +" +" BASIC COMMAND LIST +" *ADD input_source +" *ARITHMETIC { [ON] | OFF } +" *CLOSE unit_number +" *CPU +" *DEFINE +" *ECHO[/qualifiers] { [ON] | OFF } +" *ELSE [IF { 0 | 1 } ] +" *END { IF | WHILE } +" *EXIT +" *IF { 0 | 1 } +" *LIST/n list variable +" *OPEN[/r | /r+ | /w | /w+ ] unit_number file_name +" *PROMPT prompt_string sybol_name +" *READ/unit=unit_number[/LOCAL | /GLOBAL ] sym1 [sym2, [sym3 ...]] +" *REWIND +" *STOP +" *STRCMP string_1 string_2 difference +" *SYSTEM command +" *UNDEFINE[/LOCAL][/GLOBAL] symbol_name +" *WHILE { 0 | 1 } +" *WRITE[/unit=unit_number] output text +" +syn match tssclDirective "\*ADD" +syn match tssclDirective "\*ARITHMETIC \+\(ON\|OFF\)" +syn match tssclDirective "\*CLOSE" +syn match tssclDirective "\*CPU" +syn match tssclDirective "\*DEFINE" +syn match tssclDirective "\*ECHO" +syn match tssclConditional "\*ELSE" +syn match tssclConditional "\*END \+\(IF\|WHILE\)" +syn match tssclDirective "\*EXIT" +syn match tssclConditional "\*IF" +syn match tssclDirective "\*LIST" +syn match tssclDirective "\*OPEN" +syn match tssclDirective "\*PROMPT" +syn match tssclDirective "\*READ" +syn match tssclDirective "\*REWIND" +syn match tssclDirective "\*STOP" +syn match tssclDirective "\*STRCMP" +syn match tssclDirective "\*SYSTEM" +syn match tssclDirective "\*UNDEFINE" +syn match tssclConditional "\*WHILE" +syn match tssclDirective "\*WRITE" + +syn match tssclContChar "-$" + +" C library functoins +" Bessel functions (jn, yn) +" Error and complementary error fuctions (erf, erfc) +" Exponential functions (exp) +" Logrithm (log, log10) +" Power (pow) +" Square root (sqrt) +" Floor (floor) +" Ceiling (ceil) +" Floating point remainder (fmod) +" Floating point absolute value (fabs) +" Gamma (gamma) +" Euclidean distance function (hypot) +" Hperbolic functions (sinh, cosh, tanh) +" Trigometric functions in radians (sin, cos, tan, asin, acos, atan, atan2) +" Trigometric functions in degrees (sind, cosd, tand, asind, acosd, atand, +" atan2d) +" +" local varialbles: cl_arg1, cl_arg2, etc. (cl_arg is an array of arguments) +" cl_args is the number of arguments +" +" +" I/O: *PROMPT, *WRITE, *READ +" +" Conditional branching: +" IF, ELSE IF, END +" *IF value *IF I==10 +" *ELSE IF value *ELSE IF I<10 +" *ELSE *ELSE +" *ENDIF *ENDIF +" +" +" Iterative looping: +" WHILE +" *WHILE test +" ..... +" *END WHILE +" +" +" EXAMPLE: +" *DEFINE I = 1 +" *WHILE (I <= 10) +" *WRITE I = 'I' +" *DEFINE I = (I + 1) +" *END WHILE +" + +syn match tssclQualifier "/[^/ ]\+"hs=s+1 +syn match tssclSymbol "'\S\+'" +"syn match tssclSymbol2 " \S\+ " contained + +syn match tssclInteger "-\=\<[0-9]*\>" +syn match tssclFloat "-\=\<[0-9]*\.[0-9]*" +syn match tssclScientific "-\=\<[0-9]*\.[0-9]*E[-+]\=[0-9]\+\>" + + + +" Define the default highlighting +" Only when an item doesn't have highlighting yet + +hi def link tssclCommand Statement +hi def link tssclKeyword Special +hi def link tssclEnd Macro +hi def link tssclUnits Special + +hi def link tssclComment Comment +hi def link tssclDirective Statement +hi def link tssclConditional Conditional +hi def link tssclContChar Macro +hi def link tssclQualifier Typedef +hi def link tssclSymbol Identifier +hi def link tssclSymbol2 Symbol +hi def link tssclString String +hi def link tssclOper Operator + +hi def link tssclInteger Number +hi def link tssclFloat Number +hi def link tssclScientific Number + + + +let b:current_syntax = "tsscl" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/tssgm.vim b/.config/vim/syntax/tssgm.vim new file mode 100644 index 0000000..8ca7962 --- /dev/null +++ b/.config/vim/syntax/tssgm.vim @@ -0,0 +1,98 @@ +" Vim syntax file +" Language: TSS (Thermal Synthesizer System) Geometry +" Maintainer: Adrian Nagle, anagle@ball.com +" Last Change: 2003 May 11 +" Filenames: *.tssgm +" URL: http://www.naglenet.org/vim/syntax/tssgm.vim +" MAIN URL: http://www.naglenet.org/vim/ + + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + + + +" Ignore case +syn case ignore + + + +" +" +" Begin syntax definitions for tss geomtery file. +" + +" Define keywords for TSS +syn keyword tssgmParam units mirror param active sides submodel include +syn keyword tssgmParam iconductor nbeta ngamma optics material thickness color +syn keyword tssgmParam initial_temp +syn keyword tssgmParam initial_id node_ids node_add node_type +syn keyword tssgmParam gamma_boundaries gamma_add beta_boundaries +syn keyword tssgmParam p1 p2 p3 p4 p5 p6 rot1 rot2 rot3 tx ty tz + +syn keyword tssgmSurfType rectangle trapezoid disc ellipse triangle +syn keyword tssgmSurfType polygon cylinder cone sphere ellipic-cone +syn keyword tssgmSurfType ogive torus box paraboloid hyperboloid ellipsoid +syn keyword tssgmSurfType quadrilateral trapeziod + +syn keyword tssgmArgs OUT IN DOWN BOTH DOUBLE NONE SINGLE RADK CC FECC +syn keyword tssgmArgs white red blue green yellow orange violet pink +syn keyword tssgmArgs turquoise grey black +syn keyword tssgmArgs Arithmetic Boundary Heater + +syn keyword tssgmDelim assembly + +syn keyword tssgmEnd end + +syn keyword tssgmUnits cm feet meters inches +syn keyword tssgmUnits Celsius Kelvin Fahrenheit Rankine + + + +" Define matches for TSS +syn match tssgmDefault "^DEFAULT/LENGTH = \(ft\|in\|cm\|m\)" +syn match tssgmDefault "^DEFAULT/TEMP = [CKFR]" + +syn match tssgmComment /comment \+= \+".*"/ contains=tssParam,tssgmCommentString +syn match tssgmCommentString /".*"/ contained + +syn match tssgmSurfIdent " \S\+\.\d\+ \=$" + +syn match tssgmString /"[^" ]\+"/ms=s+1,me=e-1 contains=ALLBUT,tssInteger + +syn match tssgmArgs / = [xyz],"/ms=s+3,me=e-2 + +syn match tssgmInteger "-\=\<[0-9]*\>" +syn match tssgmFloat "-\=\<[0-9]*\.[0-9]*" +syn match tssgmScientific "-\=\<[0-9]*\.[0-9]*E[-+]\=[0-9]\+\>" + + + +" Define the default highlighting +" Only when an item doesn't have highlighting yet + +hi def link tssgmParam Statement +hi def link tssgmSurfType Type +hi def link tssgmArgs Special +hi def link tssgmDelim Typedef +hi def link tssgmEnd Macro +hi def link tssgmUnits Special + +hi def link tssgmDefault SpecialComment +hi def link tssgmComment Statement +hi def link tssgmCommentString Comment +hi def link tssgmSurfIdent Identifier +hi def link tssgmString Delimiter + +hi def link tssgmInteger Number +hi def link tssgmFloat Float +hi def link tssgmScientific Float + + + +let b:current_syntax = "tssgm" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/tssop.vim b/.config/vim/syntax/tssop.vim new file mode 100644 index 0000000..6a775b2 --- /dev/null +++ b/.config/vim/syntax/tssop.vim @@ -0,0 +1,74 @@ +" Vim syntax file +" Language: TSS (Thermal Synthesizer System) Optics +" Maintainer: Adrian Nagle, anagle@ball.com +" Last Change: 2003 May 11 +" Filenames: *.tssop +" URL: http://www.naglenet.org/vim/syntax/tssop.vim +" MAIN URL: http://www.naglenet.org/vim/ + + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + + + +" Ignore case +syn case ignore + + + +" +" +" Begin syntax definitions for tss optics file. +" + +" Define keywords for TSS +syn keyword tssopParam ir_eps ir_trans ir_spec ir_tspec ir_refract +syn keyword tssopParam sol_eps sol_trans sol_spec sol_tspec sol_refract +syn keyword tssopParam color + +"syn keyword tssopProp property + +syn keyword tssopArgs white red blue green yellow orange violet pink +syn keyword tssopArgs turquoise grey black + + + +" Define matches for TSS +syn match tssopComment /comment \+= \+".*"/ contains=tssopParam,tssopCommentString +syn match tssopCommentString /".*"/ contained + +syn match tssopProp "property " +syn match tssopProp "edit/optic " +syn match tssopPropName "^property \S\+" contains=tssopProp +syn match tssopPropName "^edit/optic \S\+$" contains=tssopProp + +syn match tssopInteger "-\=\<[0-9]*\>" +syn match tssopFloat "-\=\<[0-9]*\.[0-9]*" +syn match tssopScientific "-\=\<[0-9]*\.[0-9]*E[-+]\=[0-9]\+\>" + + + +" Define the default highlighting +" Only when an item doesn't have highlighting yet + +hi def link tssopParam Statement +hi def link tssopProp Identifier +hi def link tssopArgs Special + +hi def link tssopComment Statement +hi def link tssopCommentString Comment +hi def link tssopPropName Typedef + +hi def link tssopInteger Number +hi def link tssopFloat Float +hi def link tssopScientific Float + + + +let b:current_syntax = "tssop" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/tsv.vim b/.config/vim/syntax/tsv.vim new file mode 100644 index 0000000..f0dd9f7 --- /dev/null +++ b/.config/vim/syntax/tsv.vim @@ -0,0 +1,12 @@ +" Vim filetype plugin file +" Language: Tab separated values (TSV) +" Last Change: 2024 Jul 16 +" This runtime file is looking for a new maintainer. + +if exists('b:current_syntax') + finish +endif + +let b:csv_delimiter = '\t' " enforce tab delimiter +runtime! syntax/csv.vim +let b:current_syntax = 'tsv' diff --git a/.config/vim/syntax/tt2.vim b/.config/vim/syntax/tt2.vim new file mode 100644 index 0000000..6826fb1 --- /dev/null +++ b/.config/vim/syntax/tt2.vim @@ -0,0 +1,209 @@ +" Vim syntax file +" Language: TT2 (Perl Template Toolkit) +" Maintainer: vim-perl +" Author: Moriki, Atsushi <4woods+vim@gmail.com> +" Homepage: https://github.com/vim-perl/vim-perl +" Bugs/requests: https://github.com/vim-perl/vim-perl/issues +" License: Vim License (see :help license) +" Last Change: 2018 Mar 28 +" +" Installation: +" put tt2.vim and tt2html.vim in to your syntax directory. +" +" add below in your filetype.vim. +" au BufNewFile,BufRead *.tt2 setf tt2 +" or +" au BufNewFile,BufRead *.tt2 +" \ if ( getline(1) . getline(2) . getline(3) =~ '<\chtml' | +" \ && getline(1) . getline(2) . getline(3) !~ '<[%?]' ) | +" \ || getline(1) =~ '' +" "PHP" +" :let b:tt2_syn_tags = '' +" "TT2 and HTML" +" :let b:tt2_syn_tags = '\[% %] ' +" +" Changes: +" 0.1.3 +" Changed fileformat from 'dos' to 'unix' +" Deleted 'echo' that print obstructive message +" 0.1.2 +" Added block comment syntax +" e.g. [%# COMMENT +" COMMENT TOO %] +" [%# IT'S SAFE %] HERE IS OUTSIDE OF TT2 DIRECTIVE +" [% # WRONG!! %] HERE STILL BE COMMENT +" 0.1.1 +" Release +" 0.1.0 +" Internal + +if !exists("b:tt2_syn_tags") + let b:tt2_syn_tags = '\[% %]' + "let b:tt2_syn_tags = '\[% %] \[\* \*]' +endif + +if !exists("b:tt2_syn_inc_perl") + let b:tt2_syn_inc_perl = 1 +endif + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn case match + +syn cluster tt2_top_cluster contains=tt2_perlcode,tt2_tag_region + +" TT2 TAG Region +if exists("b:tt2_syn_tags") + + let s:str = b:tt2_syn_tags . ' ' + let s:str = substitute(s:str,'^ \+','','g') + let s:str = substitute(s:str,' \+',' ','g') + + while stridx(s:str,' ') > 0 + + let s:st = strpart(s:str,0,stridx(s:str,' ')) + let s:str = substitute(s:str,'[^ ]* ','',"") + + let s:ed = strpart(s:str,0,stridx(s:str,' ')) + let s:str = substitute(s:str,'[^ ]* ','',"") + + exec 'syn region tt2_tag_region '. + \ 'matchgroup=tt2_tag '. + \ 'start=+\(' . s:st .'\)[-]\=+ '. + \ 'end=+[-]\=\(' . s:ed . '\)+ '. + \ 'contains=@tt2_statement_cluster keepend extend' + + exec 'syn region tt2_commentblock_region '. + \ 'matchgroup=tt2_tag '. + \ 'start=+\(' . s:st .'\)[-]\=\(#\)\@=+ '. + \ 'end=+[-]\=\(' . s:ed . '\)+ '. + \ 'keepend extend' + + "Include Perl syntax when 'PERL' 'RAWPERL' block + if b:tt2_syn_inc_perl + syn include @Perl syntax/perl.vim + exec 'syn region tt2_perlcode '. + \ 'start=+\(\(RAW\)\=PERL\s*[-]\=' . s:ed . '\(\n\)\=\)\@<=+ ' . + \ 'end=+' . s:st . '[-]\=\s*END+me=s-1 contains=@Perl keepend' + endif + + "echo 'TAGS ' . s:st . ' ' . s:ed + unlet s:st + unlet s:ed + endwhile + +else + + syn region tt2_tag_region + \ matchgroup=tt2_tag + \ start=+\(\[%\)[-]\=+ + \ end=+[-]\=%\]+ + \ contains=@tt2_statement_cluster keepend extend + + syn region tt2_commentblock_region + \ matchgroup=tt2_tag + \ start=+\(\[%\)[-]\=#+ + \ end=+[-]\=%\]+ + \ keepend extend + + "Include Perl syntax when 'PERL' 'RAWPERL' block + if b:tt2_syn_inc_perl + syn include @Perl syntax/perl.vim + syn region tt2_perlcode + \ start=+\(\(RAW\)\=PERL\s*[-]\=%]\(\n\)\=\)\@<=+ + \ end=+\[%[-]\=\s*END+me=s-1 + \ contains=@Perl keepend + endif +endif + +" Directive +syn keyword tt2_directive contained + \ GET CALL SET DEFAULT DEBUG + \ LAST NEXT BREAK STOP BLOCK + \ IF IN UNLESS ELSIF FOR FOREACH WHILE SWITCH CASE + \ USE PLUGIN MACRO META + \ TRY FINAL RETURN LAST + \ CLEAR TO STEP AND OR NOT MOD DIV + \ ELSE PERL RAWPERL END +syn match tt2_directive +|+ contained +syn keyword tt2_directive contained nextgroup=tt2_string_q,tt2_string_qq,tt2_blockname skipwhite skipempty + \ INSERT INCLUDE PROCESS WRAPPER FILTER + \ THROW CATCH +syn keyword tt2_directive contained nextgroup=tt2_def_tag skipwhite skipempty + \ TAGS + +syn match tt2_def_tag "\S\+\s\+\S\+\|\<\w\+\>" contained + +syn match tt2_variable +\I\w*+ contained +syn match tt2_operator "[+*/%:?-]" contained +syn match tt2_operator "\<\(mod\|div\|or\|and\|not\)\>" contained +syn match tt2_operator "[!=<>]=\=\|&&\|||" contained +syn match tt2_operator "\(\s\)\@<=_\(\s\)\@=" contained +syn match tt2_operator "=>\|," contained +syn match tt2_deref "\([[:alnum:]_)\]}]\s*\)\@<=\." contained +syn match tt2_comment +#.*$+ contained +syn match tt2_func +\<\I\w*\(\s*(\)\@=+ contained nextgroup=tt2_bracket_r skipempty skipwhite +" +syn region tt2_bracket_r start=+(+ end=+)+ contained contains=@tt2_statement_cluster keepend extend +syn region tt2_bracket_b start=+\[+ end=+]+ contained contains=@tt2_statement_cluster keepend extend +syn region tt2_bracket_b start=+{+ end=+}+ contained contains=@tt2_statement_cluster keepend extend + +syn region tt2_string_qq start=+"+ end=+"+ skip=+\\"+ contained contains=tt2_ivariable keepend extend +syn region tt2_string_q start=+'+ end=+'+ skip=+\\'+ contained keepend extend + +syn match tt2_ivariable +\$\I\w*\>\(\.\I\w*\>\)*+ contained +syn match tt2_ivariable +\${\I\w*\>\(\.\I\w*\>\)*}+ contained + +syn match tt2_number "\d\+" contained +syn match tt2_number "\d\+\.\d\+" contained +syn match tt2_number "0x\x\+" contained +syn match tt2_number "0\o\+" contained + +syn match tt2_blockname "\f\+" contained nextgroup=tt2_blockname_joint skipwhite skipempty +syn match tt2_blockname "$\w\+" contained contains=tt2_ivariable nextgroup=tt2_blockname_joint skipwhite skipempty +syn region tt2_blockname start=+"+ end=+"+ skip=+\\"+ contained contains=tt2_ivariable nextgroup=tt2_blockname_joint keepend skipwhite skipempty +syn region tt2_blockname start=+'+ end=+'+ skip=+\\'+ contained nextgroup=tt2_blockname_joint keepend skipwhite skipempty +syn match tt2_blockname_joint "+" contained nextgroup=tt2_blockname skipwhite skipempty + +syn cluster tt2_statement_cluster contains=tt2_directive,tt2_variable,tt2_operator,tt2_string_q,tt2_string_qq,tt2_deref,tt2_comment,tt2_func,tt2_bracket_b,tt2_bracket_r,tt2_number + +" Synchronizing +syn sync minlines=50 + +hi def link tt2_tag Type +hi def link tt2_tag_region Type +hi def link tt2_commentblock_region Comment +hi def link tt2_directive Statement +hi def link tt2_variable Identifier +hi def link tt2_ivariable Identifier +hi def link tt2_operator Statement +hi def link tt2_string_qq String +hi def link tt2_string_q String +hi def link tt2_blockname String +hi def link tt2_comment Comment +hi def link tt2_func Function +hi def link tt2_number Number + +if exists("b:tt2_syn_tags") + unlet b:tt2_syn_tags +endif + +let b:current_syntax = "tt2" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim:ts=4:sw=4 diff --git a/.config/vim/syntax/tt2html.vim b/.config/vim/syntax/tt2html.vim new file mode 100644 index 0000000..8c223be --- /dev/null +++ b/.config/vim/syntax/tt2html.vim @@ -0,0 +1,22 @@ +" Vim syntax file +" Language: TT2 embedded with HTML +" Maintainer: vim-perl +" Author: Moriki, Atsushi <4woods+vim@gmail.com> +" Homepage: https://github.com/vim-perl/vim-perl +" Bugs/requests: https://github.com/vim-perl/vim-perl/issues +" License: Vim License (see :help license) +" Last Change: 2018 Mar 28 + +if exists("b:current_syntax") + finish +endif + +runtime! syntax/html.vim +unlet b:current_syntax + +runtime! syntax/tt2.vim +unlet b:current_syntax + +syn cluster htmlPreProc add=@tt2_top_cluster + +let b:current_syntax = "tt2html" diff --git a/.config/vim/syntax/tt2js.vim b/.config/vim/syntax/tt2js.vim new file mode 100644 index 0000000..52e5a3c --- /dev/null +++ b/.config/vim/syntax/tt2js.vim @@ -0,0 +1,22 @@ +" Vim syntax file +" Language: TT2 embedded with Javascript +" Maintainer: Andy Lester +" Author: Yates, Peter +" Homepage: https://github.com/vim-perl/vim-perl +" Bugs/requests: https://github.com/vim-perl/vim-perl/issues +" License: Vim License (see :help license) +" Last Change: 2018 Mar 28 + +if exists("b:current_syntax") + finish +endif + +runtime! syntax/javascript.vim +unlet b:current_syntax + +runtime! syntax/tt2.vim +unlet b:current_syntax + +syn cluster javascriptPreProc add=@tt2_top_cluster + +let b:current_syntax = "tt2js" diff --git a/.config/vim/syntax/tutor.vim b/.config/vim/syntax/tutor.vim new file mode 100644 index 0000000..7d0cd31 --- /dev/null +++ b/.config/vim/syntax/tutor.vim @@ -0,0 +1,86 @@ +" Language: Vim Tutor +" Maintainer: Vim Project +" Last Change: 2025 Apr 16 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn include @VIM syntax/vim.vim +unlet b:current_syntax +syn include @TUTORSHELL syntax/sh.vim +unlet b:current_syntax +syn include @VIMNORMAL syntax/vimnormal.vim + +syn match tutorLink /\[.\{-}\](.\{-})/ contains=tutorInlineNormal +syn match tutorLinkBands /\[\|\]\|(\|)/ contained containedin=tutorLink,tutorLinkAnchor conceal +syn match tutorLinkAnchor /(.\{-})/ contained containedin=tutorLink conceal +syn match tutorURL /\(https\?\|file\):\/\/[[:graph:]]\+\>\/\?/ +syn match tutorEmail /\<[[:graph:]]\+@[[:graph:]]\+\>/ +syn match tutorInternalAnchor /\*[[:alnum:]-]\+\*/ contained conceal containedin=tutorSection + +syn match tutorSection /^#\{1,6}\s.\+$/ fold contains=tutorInlineNormal +syn match tutorSectionBullet /#/ contained containedin=tutorSection + +syn match tutorTOC /\ctable of contents:/ + +syn match tutorConcealedEscapes /\\[`*!\[\]():$-]\@=/ conceal + +syn region tutorEmphasis matchgroup=Delimiter start=/[\*]\@/ + \ contains=@typescriptType + \ nextgroup=@typescriptExpression + \ contained skipwhite oneline + + +""""""""""""""""""""""""""""""""""""""""""""""""""" +" Source the part common with typescriptreact.vim +source :h/shared/typescriptcommon.vim + + +let b:current_syntax = "typescript" +if main_syntax == 'typescript' + unlet main_syntax +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/typescriptreact.vim b/.config/vim/syntax/typescriptreact.vim new file mode 100644 index 0000000..061ec4d --- /dev/null +++ b/.config/vim/syntax/typescriptreact.vim @@ -0,0 +1,161 @@ +" Vim syntax file +" Language: TypeScript with React (JSX) +" Maintainer: The Vim Project +" Last Change: 2024 May 26 +" Based On: Herrington Darkholme's yats.vim +" Changes: See https://github.com/HerringtonDarkholme/yats.vim +" Credits: See yats.vim on github + +if !exists("main_syntax") + if exists("b:current_syntax") + finish + endif + let main_syntax = 'typescriptreact' +endif + +let s:cpo_save = &cpo +set cpo&vim + +syntax region tsxTag + \ start=+<\([^/!?<>="':]\+\)\@=+ + \ skip=+"']\+>+ + \ end=+/\@+ + \ end=+\(/>\)\@=+ + \ contained + \ contains=tsxTagName,tsxIntrinsicTagName,tsxAttrib,tsxEscJs, + \tsxCloseString,@tsxComment + +syntax match tsxTag /<>/ contained + + +" +" s~~~~~~~~~e +" and self close tag +" +" s~~~~e +" A big start regexp borrowed from https://git.io/vDyxc +syntax region tsxRegion + \ start=+<\_s*\z([a-zA-Z1-9\$_-]\+\(\.\k\+\)*\)+ + \ skip=++ + \ end=++ + \ matchgroup=tsxCloseString end=+/>+ + \ fold + \ contains=tsxRegion,tsxCloseString,tsxCloseTag,tsxTag,tsxCommentInvalid,tsxFragment,tsxEscJs,@Spell + \ keepend + \ extend + +" <> +" s~~~~~~e +" A big start regexp borrowed from https://git.io/vDyxc +syntax region tsxFragment + \ start=+\(\((\|{\|}\|\[\|,\|&&\|||\|?\|:\|=\|=>\|\Wreturn\|^return\|\Wdefault\|^\|>\)\_s*\)\@<=<>+ + \ skip=++ + \ end=++ + \ fold + \ contains=tsxRegion,tsxCloseString,tsxCloseTag,tsxTag,tsxCommentInvalid,tsxFragment,tsxEscJs,@Spell + \ keepend + \ extend + +" +" ~~~~~~ +syntax match tsxCloseTag + \ +"']\+>+ + \ contained + \ contains=tsxTagName,tsxIntrinsicTagName + +syntax match tsxCloseTag ++ contained + +syntax match tsxCloseString + \ +/>+ + \ contained + +" +" ~~~~~~~~ +syntax match tsxCommentInvalid // display + +syntax region tsxBlockComment + \ contained + \ start="/\*" + \ end="\*/" + +syntax match tsxLineComment + \ "//.*$" + \ contained + \ display + +syntax cluster tsxComment contains=tsxBlockComment,tsxLineComment + +syntax match tsxEntity "&[^; \t]*;" contains=tsxEntityPunct +syntax match tsxEntityPunct contained "[&.;]" + +" +" ~~~ +syntax match tsxTagName + \ +["'* ]\++hs=s+1 + \ contained + \ nextgroup=tsxAttrib + \ skipwhite + \ display +syntax match tsxIntrinsicTagName + \ +[ +" ~~~ +syntax match tsxAttrib + \ +[a-zA-Z_][-0-9a-zA-Z_]*+ + \ nextgroup=tsxEqual skipwhite + \ contained + \ display + +" +" ~ +syntax match tsxEqual +=+ display contained + \ nextgroup=tsxString skipwhite + +" +" s~~~~~~e +syntax region tsxString contained start=+"+ skip=+\\"+ end=+"+ contains=tsxEntity,@Spell display +syntax region tsxString contained start=+'+ skip=+\\'+ end=+'+ contains=tsxEntity,@Spell display + +" +" s~~~~~~~~~~~~~~e +syntax region tsxEscJs + \ contained + \ contains=@typescriptValue,@tsxComment,typescriptObjectSpread + \ matchgroup=typescriptBraces + \ start=+{+ + \ end=+}+ + \ extend + + +""""""""""""""""""""""""""""""""""""""""""""""""""" +" Source the part common with typescriptreact.vim +source :h/shared/typescriptcommon.vim + + +syntax cluster typescriptExpression add=tsxRegion,tsxFragment + +hi def link tsxTag htmlTag +hi def link tsxTagName Function +hi def link tsxIntrinsicTagName htmlTagName +hi def link tsxString String +hi def link tsxNameSpace Function +hi def link tsxCommentInvalid Error +hi def link tsxBlockComment Comment +hi def link tsxLineComment Comment +hi def link tsxAttrib Type +hi def link tsxEscJs tsxEscapeJs +hi def link tsxCloseTag htmlTag +hi def link tsxCloseString Identifier + +let b:current_syntax = "typescriptreact" +if main_syntax == 'typescriptreact' + unlet main_syntax +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/typst.vim b/.config/vim/syntax/typst.vim new file mode 100644 index 0000000..8ed2f69 --- /dev/null +++ b/.config/vim/syntax/typst.vim @@ -0,0 +1,479 @@ +" Vim syntax file +" Previous Maintainer: Luca Saccarola +" Maintainer: This runtime file is looking for a new maintainer. +" Language: Typst +" Based On: https://github.com/kaarmu/typst.vim +" Last Change: 2025 Aug 05 + +if exists('b:current_syntax') + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syntax sync fromstart +syntax spell toplevel + +" Common {{{1 +syntax cluster typstCommon + \ contains=@typstComment + +" Common > Comment {{{2 +syntax cluster typstComment + \ contains=typstCommentBlock,typstCommentLine +syntax region typstCommentBlock + \ start="/\*" end="\*/" keepend + \ contains=typstCommentTodo,@Spell +syntax match typstCommentLine + \ #//.*# + \ contains=typstCommentTodo,@Spell +syntax keyword typstCommentTodo + \ contained + \ TODO FIXME XXX TBD + + +" Code {{{1 +syntax cluster typstCode + \ contains=@typstCommon + \ ,@typstCodeKeywords + \ ,@typstCodeConstants + \ ,@typstCodeIdentifiers + \ ,@typstCodeFunctions + \ ,@typstCodeParens + +" Code > Keywords {{{2 +syntax cluster typstCodeKeywords + \ contains=typstCodeConditional + \ ,typstCodeRepeat + \ ,typstCodeKeyword + \ ,typstCodeStatement +syntax keyword typstCodeConditional + \ contained + \ if else +syntax keyword typstCodeRepeat + \ contained + \ while for +syntax keyword typstCodeKeyword + \ contained + \ not in and or return +syntax region typstCodeStatement + \ contained + \ matchgroup=typstCodeStatementWord start=/\v(let|set|import|include)>/ + \ matchgroup=Noise end=/\v%(;|$)/ + \ contains=@typstCode +syntax region typstCodeStatement + \ contained + \ matchgroup=typstCodeStatementWord start=/show/ + \ matchgroup=Noise end=/\v%(:|$)/ keepend + \ contains=@typstCode + \ skipwhite nextgroup=@typstCode,typstCodeShowRocket +syntax match typstCodeShowRocket + \ contained + \ /.*=>/ + \ contains=@typstCode + \ skipwhite nextgroup=@typstCode + +" Code > Identifiers {{{2 +syntax cluster typstCodeIdentifiers + \ contains=typstCodeIdentifier + \ ,typstCodeFieldAccess +syntax match typstCodeIdentifier + \ contained + \ /\v\w\k*>(<%(let|set|show|import|include))@(<%(let|set|show|import|include))@ Functions {{{2 +syntax cluster typstCodeFunctions + \ contains=typstCodeFunction +syntax match typstCodeFunction + \ contained + \ /\v\w\k*>(<%(let|set|show|import|include))@ Constants {{{2 +syntax cluster typstCodeConstants + \ contains=typstCodeConstant + \ ,typstCodeNumberInteger + \ ,typstCodeNumberFloat + \ ,typstCodeNumberLength + \ ,typstCodeNumberAngle + \ ,typstCodeNumberRatio + \ ,typstCodeNumberFraction + \ ,typstCodeString + \ ,typstCodeLabel +syntax match typstCodeConstant + \ contained + \ /\v<%(none|auto|true|false)-@!>/ +syntax match typstCodeNumberInteger + \ contained + \ /\v<\d+>/ + +syntax match typstCodeNumberFloat + \ contained + \ /\v<\d+\.\d*>/ +syntax match typstCodeNumberLength + \ contained + \ /\v<\d+(\.\d*)?(pt|mm|cm|in|em)>/ +syntax match typstCodeNumberAngle + \ contained + \ /\v<\d+(\.\d*)?(deg|rad)>/ +syntax match typstCodeNumberRatio + \ contained + \ /\v<\d+(\.\d*)?\%/ +syntax match typstCodeNumberFraction + \ contained + \ /\v<\d+(\.\d*)?fr>/ +syntax region typstCodeString + \ contained + \ start=/"/ skip=/\v\\\\|\\"/ end=/"/ + \ contains=@Spell +syntax match typstCodeLabel + \ contained + \ /\v\<\K%(\k*-*)*\>/ + +" Code > Parens {{{2 +syntax cluster typstCodeParens + \ contains=typstCodeParen + \ ,typstCodeBrace + \ ,typstCodeBracket + \ ,typstCodeDollar + \ ,typstMarkupRawInline + \ ,typstMarkupRawBlock +syntax region typstCodeParen + \ contained + \ matchgroup=Noise start=/(/ end=/)/ + \ contains=@typstCode +syntax region typstCodeBrace + \ contained + \ matchgroup=Noise start=/{/ end=/}/ + \ contains=@typstCode +syntax region typstCodeBracket + \ contained + \ matchgroup=Noise start=/\[/ end=/\]/ + \ contains=@typstMarkup +syntax region typstCodeDollar + \ contained + \ matchgroup=Number start=/\\\@ Keywords {{{2 +syntax cluster typstHashtagKeywords + \ contains=typstHashtagConditional + \ ,typstHashtagRepeat + \ ,typstHashtagKeywords + \ ,typstHashtagStatement + +" syntax match typstHashtagControlFlowError +" \ /\v#%(if|while|for)>-@!.{-}$\_.{-}%(\{|\[|\()/ +syntax match typstHashtagControlFlow + \ /\v#%(if|while|for)>.{-}\ze%(\{|\[|\()/ + \ contains=typstHashtagConditional,typstHashtagRepeat + \ nextgroup=@typstCode +syntax region typstHashtagConditional + \ contained + \ start=/\v#if>/ end=/\v\ze(\{|\[)/ + \ contains=@typstCode +syntax region typstHashtagRepeat + \ contained + \ start=/\v#(while|for)>/ end=/\v\ze(\{|\[)/ + \ contains=@typstCode +syntax match typstHashtagKeyword + \ /\v#(return)>/ + \ skipwhite nextgroup=@typstCode +syntax region typstHashtagStatement + \ matchgroup=typstHashtagStatementWord start=/\v#(let|set|import|include)>/ + \ matchgroup=Noise end=/\v%(;|$)/ + \ contains=@typstCode +syntax region typstHashtagStatement + \ matchgroup=typstHashtagStatementWord start=/#show/ + \ matchgroup=Noise end=/\v%(:|$)/ keepend + \ contains=@typstCode + \ skipwhite nextgroup=@typstCode,typstCodeShowRocket + +" Hashtag > Constants {{{2 +syntax cluster typstHashtagConstants + \ contains=typstHashtagConstant +syntax match typstHashtagConstant + \ /\v#(none|auto|true|false)>/ + +" Hashtag > Identifiers {{{2 +syntax cluster typstHashtagIdentifiers + \ contains=typstHashtagIdentifier + \ ,typstHashtagFieldAccess +syntax match typstHashtagIdentifier + \ /\v#\w\k*>(<%(let|set|show|import|include))@(<%(let|set|show|import|include))@ Functions {{{2 +syntax cluster typstHashtagFunctions + \ contains=typstHashtagFunction +syntax match typstHashtagFunction + \ /\v#\w\k*>(<%(let|set|show|import|include))@ Parens {{{2 +syntax cluster typstHashtagParens + \ contains=typstHashtagParen + \ ,typstHashtagBrace + \ ,typstHashtagBracket + \ ,typstHashtagDollar +syntax region typstHashtagParen + \ matchgroup=Noise start=/#(/ end=/)/ + \ contains=@typstCode +syntax region typstHashtagBrace + \ matchgroup=Noise start=/#{/ end=/}/ + \ contains=@typstCode +syntax region typstHashtagBracket + \ matchgroup=Noise start=/#\[/ end=/\]/ + \ contains=@typstMarkup +syntax region typstHashtagDollar + \ matchgroup=Noise start=/#\$/ end=/\\\@ Text {{{2 +syntax cluster typstMarkupText + \ contains=typstMarkupRawInline + \ ,typstMarkupRawBlock + \ ,typstMarkupLabel + \ ,typstMarkupReference + \ ,typstMarkupUrl + \ ,typstMarkupHeading + \ ,typstMarkupBulletList + \ ,typstMarkupEnumList + \ ,typstMarkupTermList + \ ,typstMarkupBold + \ ,typstMarkupItalic + \ ,typstMarkupLinebreak + \ ,typstMarkupNonbreakingSpace + \ ,typstMarkupShy + \ ,typstMarkupDash + \ ,typstMarkupEllipsis + +" Raw Text +syntax match typstMarkupRawInline + \ /`.\{-}`/ +syntax region typstMarkupRawBlock + \ matchgroup=Macro start=/```\w*/ + \ matchgroup=Macro end=/```/ keepend +syntax region typstMarkupCodeBlockTypst + \ matchgroup=Macro start=/```typst/ + \ matchgroup=Macro end=/```/ contains=@typstCode keepend + \ concealends + +for s:name in get(g:, 'typst_embedded_languages', []) + let s:include = ['syntax include' + \ ,'@typstEmbedded_'..s:name + \ ,'syntax/'..s:name..'.vim'] + let s:rule = ['syn region' + \,s:name + \,'matchgroup=Macro' + \,'start=/```'..s:name..'\>/ end=/```/' + \,'contains=@typstEmbedded_'..s:name + \,'keepend' + \,'concealends'] + execute 'silent! ' .. join(s:include, ' ') + unlet! b:current_syntax + execute join(s:rule, ' ') +endfor + +" Label & Reference +syntax match typstMarkupLabel + \ /\v\<\K%(\k*-*)*\>/ +syntax match typstMarkupReference + \ /\v\@\K%(\k*-*)*/ + +" URL +syntax match typstMarkupUrl + \ #\v\w+://\S*# + +" Heading +syntax match typstMarkupHeading + \ /^\s*\zs=\{1,6}\s.*$/ + \ contains=typstMarkupLabel,@Spell + +" Lists +syntax match typstMarkupBulletList + \ /\v^\s*-\s+/ +syntax match typstMarkupEnumList + \ /\v^\s*(\+|\d+\.)\s+/ +syntax region typstMarkupTermList + \ oneline start=/\v^\s*\/\s/ end=/:/ + \ contains=@typstMarkup + +" Bold & Italic +syntax match typstMarkupBold + \ /\v(\w|\\)@1 Parens {{{2 +syntax cluster typstMarkupParens + \ contains=typstMarkupBracket + \ ,typstMarkupDollar +syntax region typstMarkupBracket + \ matchgroup=Noise start=/\[/ end=/\]/ + \ contains=@typstMarkup +syntax region typstMarkupDollar + \ matchgroup=Special start=/\\\@/ + \ contained +syntax region typstMathQuote + \ matchgroup=String start=/"/ skip=/\\"/ end=/"/ + \ contained + +" Math > Linked groups {{{2 +highlight default link typstMathIdentifier Identifier +highlight default link typstMathFunction Statement +highlight default link typstMathNumber Number +highlight default link typstMathSymbol Statement + +" Highlighting {{{1 + +" Highlighting > Linked groups {{{2 +highlight default link typstCommentBlock Comment +highlight default link typstCommentLine Comment +highlight default link typstCommentTodo Todo +highlight default link typstCodeConditional Conditional +highlight default link typstCodeRepeat Repeat +highlight default link typstCodeKeyword Keyword +highlight default link typstCodeConstant Constant +highlight default link typstCodeNumberInteger Number +highlight default link typstCodeNumberFloat Number +highlight default link typstCodeNumberLength Number +highlight default link typstCodeNumberAngle Number +highlight default link typstCodeNumberRatio Number +highlight default link typstCodeNumberFraction Number +highlight default link typstCodeString String +highlight default link typstCodeLabel Structure +highlight default link typstCodeStatementWord Statement +highlight default link typstCodeIdentifier Identifier +highlight default link typstCodeFieldAccess Identifier +highlight default link typstCodeFunction Function +highlight default link typstCodeParen Noise +highlight default link typstCodeBrace Noise +highlight default link typstCodeBracket Noise +highlight default link typstCodeDollar Noise +" highlight default link typstHashtagControlFlowError Error +highlight default link typstHashtagConditional Conditional +highlight default link typstHashtagRepeat Repeat +highlight default link typstHashtagKeyword Keyword +highlight default link typstHashtagConstant Constant +highlight default link typstHashtagStatementWord Statement +highlight default link typstHashtagIdentifier Identifier +highlight default link typstHashtagFieldAccess Identifier +highlight default link typstHashtagFunction Function +highlight default link typstHashtagParen Noise +highlight default link typstHashtagBrace Noise +highlight default link typstHashtagBracket Noise +highlight default link typstHashtagDollar Noise +highlight default link typstMarkupRawInline Macro +highlight default link typstMarkupRawBlock Macro +highlight default link typstMarkupLabel Structure +highlight default link typstMarkupReference Structure +highlight default link typstMarkupBulletList Structure +" highlight default link typstMarkupItalicError Error +" highlight default link typstMarkupBoldError Error +highlight default link typstMarkupEnumList Structure +highlight default link typstMarkupLinebreak Structure +highlight default link typstMarkupNonbreakingSpace Structure +highlight default link typstMarkupShy Structure +highlight default link typstMarkupDash Structure +highlight default link typstMarkupEllipsis Structure +highlight default link typstMarkupTermList Structure +highlight default link typstMarkupDollar Noise + +" Highlighting > Custom Styling {{{2 +highlight! Conceal ctermfg=NONE ctermbg=NONE guifg=NONE guibg=NONE + +highlight default typstMarkupHeading term=underline,bold cterm=underline,bold gui=underline,bold +highlight default typstMarkupUrl term=underline cterm=underline gui=underline +highlight default typstMarkupBold term=bold cterm=bold gui=bold +highlight default typstMarkupItalic term=italic cterm=italic gui=italic +highlight default typstMarkupBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic + +let b:current_syntax = 'typst' + +let &cpo = s:cpo_save +unlet s:cpo_save + +" }}}1 diff --git a/.config/vim/syntax/uc.vim b/.config/vim/syntax/uc.vim new file mode 100644 index 0000000..90d3339 --- /dev/null +++ b/.config/vim/syntax/uc.vim @@ -0,0 +1,165 @@ +" Vim syntax file +" Language: UnrealScript +" Maintainer: Mark Ferrell +" URL: ftp://ftp.chaoticdreams.org/pub/ut/vim/uc.vim +" Credits: Based on the java.vim syntax file by Claudio Fleiner +" Last change: 2003 May 31 + +" Please check :help uc.vim for comments on some of the options available. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" some characters that cannot be in a UnrealScript program (outside a string) +syn match ucError "[\\@`]" +syn match ucError "<<<\|\.\.\|=>\|<>\|||=\|&&=\|[^-]->\|\*\/" + +" we define it here so that included files can test for it +if !exists("main_syntax") + let main_syntax='uc' +endif + +syntax case ignore + +" keyword definitions +syn keyword ucBranch break continue +syn keyword ucConditional if else switch +syn keyword ucRepeat while for do foreach +syn keyword ucBoolean true false +syn keyword ucConstant null +syn keyword ucOperator new instanceof +syn keyword ucType boolean char byte short int long float double +syn keyword ucType void Pawn sound state auto exec function ipaddr +syn keyword ucType ELightType actor ammo defaultproperties bool +syn keyword ucType native noexport var out vector name local string +syn keyword ucType event +syn keyword ucStatement return +syn keyword ucStorageClass static synchronized transient volatile final +syn keyword ucMethodDecl synchronized throws + +" UnrealScript defines classes in sorta fscked up fashion +syn match ucClassDecl "^[Cc]lass[\s$]*\S*[\s$]*expands[\s$]*\S*;" contains=ucSpecial,ucSpecialChar,ucClassKeys +syn keyword ucClassKeys class expands extends +syn match ucExternal "^\#exec.*" contains=ucCommentString,ucNumber +syn keyword ucScopeDecl public protected private abstract + +" UnrealScript Functions +syn match ucFuncDef "^.*function\s*[\(]*" contains=ucType,ucStorageClass +syn match ucEventDef "^.*event\s*[\(]*" contains=ucType,ucStorageClass +syn match ucClassLabel "[a-zA-Z0-9]*\'[a-zA-Z0-9]*\'" contains=ucCharacter + +syn region ucLabelRegion transparent matchgroup=ucLabel start="\" matchgroup=NONE end=":" contains=ucNumber +syn match ucUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=ucLabel +syn keyword ucLabel default + +" The following cluster contains all java groups except the contained ones +syn cluster ucTop contains=ucExternal,ucError,ucError,ucBranch,ucLabelRegion,ucLabel,ucConditional,ucRepeat,ucBoolean,ucConstant,ucTypedef,ucOperator,ucType,ucType,ucStatement,ucStorageClass,ucMethodDecl,ucClassDecl,ucClassDecl,ucClassDecl,ucScopeDecl,ucError,ucError2,ucUserLabel,ucClassLabel + +" Comments +syn keyword ucTodo contained TODO FIXME XXX +syn region ucCommentString contained start=+"+ end=+"+ end=+\*/+me=s-1,he=s-1 contains=ucSpecial,ucCommentStar,ucSpecialChar +syn region ucComment2String contained start=+"+ end=+$\|"+ contains=ucSpecial,ucSpecialChar +syn match ucCommentCharacter contained "'\\[^']\{1,6\}'" contains=ucSpecialChar +syn match ucCommentCharacter contained "'\\''" contains=ucSpecialChar +syn match ucCommentCharacter contained "'[^\\]'" +syn region ucComment start="/\*" end="\*/" contains=ucCommentString,ucCommentCharacter,ucNumber,ucTodo +syn match ucCommentStar contained "^\s*\*[^/]"me=e-1 +syn match ucCommentStar contained "^\s*\*$" +syn match ucLineComment "//.*" contains=ucComment2String,ucCommentCharacter,ucNumber,ucTodo +hi link ucCommentString ucString +hi link ucComment2String ucString +hi link ucCommentCharacter ucCharacter + +syn cluster ucTop add=ucComment,ucLineComment + +" match the special comment /**/ +syn match ucComment "/\*\*/" + +" Strings and constants +syn match ucSpecialError contained "\\." +"syn match ucSpecialCharError contained "[^']" +syn match ucSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)" +syn region ucString start=+"+ end=+"+ contains=ucSpecialChar,ucSpecialError +syn match ucStringError +"\([^"\\]\|\\.\)*$+ +syn match ucCharacter "'[^']*'" contains=ucSpecialChar,ucSpecialCharError +syn match ucCharacter "'\\''" contains=ucSpecialChar +syn match ucCharacter "'[^\\]'" +syn match ucNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" +syn match ucNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" +syn match ucNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" +syn match ucNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" + +" unicode characters +syn match ucSpecial "\\u\d\{4\}" + +syn cluster ucTop add=ucString,ucCharacter,ucNumber,ucSpecial,ucStringError + +" catch errors caused by wrong parenthesis +syn region ucParen transparent start="(" end=")" contains=@ucTop,ucParen +syn match ucParenError ")" +hi link ucParenError ucError + +if !exists("uc_minlines") + let uc_minlines = 10 +endif +exec "syn sync ccomment ucComment minlines=" . uc_minlines + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link ucFuncDef Conditional +hi def link ucEventDef Conditional +hi def link ucBraces Function +hi def link ucBranch Conditional +hi def link ucLabel Label +hi def link ucUserLabel Label +hi def link ucConditional Conditional +hi def link ucRepeat Repeat +hi def link ucStorageClass StorageClass +hi def link ucMethodDecl ucStorageClass +hi def link ucClassDecl ucStorageClass +hi def link ucScopeDecl ucStorageClass +hi def link ucBoolean Boolean +hi def link ucSpecial Special +hi def link ucSpecialError Error +hi def link ucSpecialCharError Error +hi def link ucString String +hi def link ucCharacter Character +hi def link ucSpecialChar SpecialChar +hi def link ucNumber Number +hi def link ucError Error +hi def link ucStringError Error +hi def link ucStatement Statement +hi def link ucOperator Operator +hi def link ucOverLoaded Operator +hi def link ucComment Comment +hi def link ucDocComment Comment +hi def link ucLineComment Comment +hi def link ucConstant ucBoolean +hi def link ucTypedef Typedef +hi def link ucTodo Todo + +hi def link ucCommentTitle SpecialComment +hi def link ucDocTags Special +hi def link ucDocParam Function +hi def link ucCommentStar ucComment + +hi def link ucType Type +hi def link ucExternal Include + +hi def link ucClassKeys Conditional +hi def link ucClassLabel Conditional + +hi def link htmlComment Special +hi def link htmlCommentPart Special + + +let b:current_syntax = "uc" + +if main_syntax == 'uc' + unlet main_syntax +endif + +" vim: ts=8 diff --git a/.config/vim/syntax/uci.vim b/.config/vim/syntax/uci.vim new file mode 100644 index 0000000..fdf5bfd --- /dev/null +++ b/.config/vim/syntax/uci.vim @@ -0,0 +1,33 @@ +" Vim syntax file +" Language: OpenWrt Unified Configuration Interface +" Maintainer: Colin Caine +" Upstream: https://github.com/cmcaine/vim-uci +" Last Change: 2021 Sep 19 +" +" For more information on uci, see https://openwrt.org/docs/guide-user/base-system/uci + +if exists("b:current_syntax") + finish +endif + +" Fancy zero-width non-capturing look-behind to see what the last word was. +" Would be really nice if there was some less obscure or more efficient way to +" do this. +syntax match uciOptionName '\%(\%(option\|list\)\s\+\)\@<=\S*' +syntax match uciConfigName '\%(\%(package\|config\)\s\+\)\@<=\S*' +syntax keyword uciConfigDec package config nextgroup=uciConfigName skipwhite +syntax keyword uciOptionType option list nextgroup=uciOptionName skipwhite + +" Standard matches. +syntax match uciComment "#.*$" +syntax region uciString start=+"+ end=+"+ skip=+\\"+ +syntax region uciString start=+'+ end=+'+ skip=+\\'+ + +highlight default link uciConfigName Identifier +highlight default link uciOptionName Constant +highlight default link uciConfigDec Statement +highlight default link uciOptionType Type +highlight default link uciComment Comment +highlight default link uciString Normal + +let b:current_syntax = "uci" diff --git a/.config/vim/syntax/udevconf.vim b/.config/vim/syntax/udevconf.vim new file mode 100644 index 0000000..82fd81d --- /dev/null +++ b/.config/vim/syntax/udevconf.vim @@ -0,0 +1,39 @@ +" Vim syntax file +" Language: udev(8) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword udevconfTodo contained TODO FIXME XXX NOTE + +syn region udevconfComment display oneline start='^\s*#' end='$' + \ contains=udevconfTodo,@Spell + +syn match udevconfBegin display '^' + \ nextgroup=udevconfVariable,udevconfComment + \ skipwhite + +syn keyword udevconfVariable contained udev_root udev_db udev_rules udev_log + \ nextgroup=udevconfVariableEq + +syn match udevconfVariableEq contained '[[:space:]=]' + \ nextgroup=udevconfString skipwhite + +syn region udevconfString contained display oneline start=+"+ end=+"+ + +hi def link udevconfTodo Todo +hi def link udevconfComment Comment +hi def link udevconfVariable Identifier +hi def link udevconfVariableEq Operator +hi def link udevconfString String + +let b:current_syntax = "udevconf" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/udevperm.vim b/.config/vim/syntax/udevperm.vim new file mode 100644 index 0000000..abda0b6 --- /dev/null +++ b/.config/vim/syntax/udevperm.vim @@ -0,0 +1,69 @@ +" Vim syntax file +" Language: udev(8) permissions file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn match udevpermBegin display '^' nextgroup=udevpermDevice + +syn match udevpermDevice contained display '[^:]\+' + \ contains=udevpermPattern + \ nextgroup=udevpermUserColon + +syn match udevpermPattern contained '[*?]' +syn region udevpermPattern contained start='\[!\=' end='\]' + \ contains=udevpermPatRange + +syn match udevpermPatRange contained '[^[-]-[^]-]' + +syn match udevpermUserColon contained display ':' + \ nextgroup=udevpermUser + +syn match udevpermUser contained display '[^:]\+' + \ nextgroup=udevpermGroupColon + +syn match udevpermGroupColon contained display ':' + \ nextgroup=udevpermGroup + +syn match udevpermGroup contained display '[^:]\+' + \ nextgroup=udevpermPermColon + +syn match udevpermPermColon contained display ':' + \ nextgroup=udevpermPerm + +syn match udevpermPerm contained display '\<0\=\o\+\>' + \ contains=udevpermOctalZero + +syn match udevpermOctalZero contained display '\<0' +syn match udevpermOctalError contained display '\<0\o*[89]\d*\>' + +syn keyword udevpermTodo contained TODO FIXME XXX NOTE + +syn region udevpermComment display oneline start='^\s*#' end='$' + \ contains=udevpermTodo,@Spell + +hi def link udevpermTodo Todo +hi def link udevpermComment Comment +hi def link udevpermDevice String +hi def link udevpermPattern SpecialChar +hi def link udevpermPatRange udevpermPattern +hi def link udevpermColon Normal +hi def link udevpermUserColon udevpermColon +hi def link udevpermUser Identifier +hi def link udevpermGroupColon udevpermColon +hi def link udevpermGroup Type +hi def link udevpermPermColon udevpermColon +hi def link udevpermPerm Number +hi def link udevpermOctalZero PreProc +hi def link udevpermOctalError Error + +let b:current_syntax = "udevperm" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/udevrules.vim b/.config/vim/syntax/udevrules.vim new file mode 100644 index 0000000..ce156cc --- /dev/null +++ b/.config/vim/syntax/udevrules.vim @@ -0,0 +1,171 @@ +" Vim syntax file +" Language: udev(8) rules file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-12-18 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" TODO: Line continuations. + +syn keyword udevrulesTodo contained TODO FIXME XXX NOTE + +syn region udevrulesComment display oneline start='^\s*#' end='$' + \ contains=udevrulesTodo,@Spell + +syn keyword udevrulesRuleKey ACTION DEVPATH KERNEL SUBSYSTEM KERNELS + \ SUBSYSTEMS DRIVERS RESULT + \ nextgroup=udevrulesRuleTest + \ skipwhite + +syn keyword udevrulesRuleKey ATTRS nextgroup=udevrulesAttrsPath + +syn region udevrulesAttrsPath display transparent + \ matchgroup=udevrulesDelimiter start='{' + \ matchgroup=udevrulesDelimiter end='}' + \ contains=udevrulesPath + \ nextgroup=udevrulesRuleTest + \ skipwhite + +syn keyword udevrulesRuleKey ENV nextgroup=udevrulesEnvVar + +syn region udevrulesEnvVar display transparent + \ matchgroup=udevrulesDelimiter start='{' + \ matchgroup=udevrulesDelimiter end='}' + \ contains=udevrulesVariable + \ nextgroup=udevrulesRuleTest,udevrulesRuleEq + \ skipwhite + +syn keyword udevrulesRuleKey PROGRAM RESULT + \ nextgroup=udevrulesEStringTest,udevrulesEStringEq + \ skipwhite + +syn keyword udevrulesAssignKey NAME SYMLINK OWNER GROUP RUN + \ nextgroup=udevrulesEStringEq + \ skipwhite + +syn keyword udevrulesAssignKey MODE LABEL GOTO WAIT_FOR_SYSFS + \ nextgroup=udevrulesRuleEq + \ skipwhite + +syn keyword udevrulesAssignKey ATTR nextgroup=udevrulesAttrsPath + +syn region udevrulesAttrKey display transparent + \ matchgroup=udevrulesDelimiter start='{' + \ matchgroup=udevrulesDelimiter end='}' + \ contains=udevrulesKey + \ nextgroup=udevrulesRuleEq + \ skipwhite + +syn keyword udevrulesAssignKey IMPORT nextgroup=udevrulesImport, + \ udevrulesEStringEq + \ skipwhite + +syn region udevrulesImport display transparent + \ matchgroup=udevrulesDelimiter start='{' + \ matchgroup=udevrulesDelimiter end='}' + \ contains=udevrulesImportType + \ nextgroup=udevrulesEStringEq + \ skipwhite + +syn keyword udevrulesImportType program file parent + +syn keyword udevrulesAssignKey OPTIONS + \ nextgroup=udevrulesOptionsEq + +syn match udevrulesPath contained display '[^}]\+' + +syn match udevrulesVariable contained display '[^}]\+' + +syn match udevrulesRuleTest contained display '[=!:]=' + \ nextgroup=udevrulesString skipwhite + +syn match udevrulesEStringTest contained display '[=!+:]=' + \ nextgroup=udevrulesEString skipwhite + +syn match udevrulesRuleEq contained display '+=\|=\ze[^=]' + \ nextgroup=udevrulesString skipwhite + +syn match udevrulesEStringEq contained '+=\|=\ze[^=]' + \ nextgroup=udevrulesEString skipwhite + +syn match udevrulesOptionsEq contained '+=\|=\ze[^=]' + \ nextgroup=udevrulesOptions skipwhite + +syn region udevrulesEString contained display oneline start=+"+ end=+"+ + \ contains=udevrulesStrEscapes,udevrulesStrVars + +syn match udevrulesStrEscapes contained '%[knpbMmcPrN%]' + +" TODO: This can actually stand alone (without {…}), so add a nextgroup here. +syn region udevrulesStrEscapes contained start='%c{' end='}' + \ contains=udevrulesStrNumber + +syn region udevrulesStrEscapes contained start='%s{' end='}' + \ contains=udevrulesPath + +syn region udevrulesStrEscapes contained start='%E{' end='}' + \ contains=udevrulesVariable + +syn match udevrulesStrNumber contained '\d\++\=' + +syn match udevrulesStrVars contained display '$\%(kernel\|number\|devpath\|id\|major\|minor\|result\|parent\|root\|tempnode\)\>' + +syn region udevrulesStrVars contained start='$attr{' end='}' + \ contains=udevrulesPath + +syn region udevrulesStrVars contained start='$env{' end='}' + \ contains=udevrulesVariable + +syn match udevrulesStrVars contained display '\$\$' + +syn region udevrulesString contained display oneline start=+"+ end=+"+ + \ contains=udevrulesPattern + +syn match udevrulesPattern contained '[*?]' +syn region udevrulesPattern contained start='\[!\=' end='\]' + \ contains=udevrulesPatRange + +syn match udevrulesPatRange contained '[^[-]-[^]-]' + +syn region udevrulesOptions contained display oneline start=+"+ end=+"+ + \ contains=udevrulesOption,udevrulesOptionSep + +syn keyword udevrulesOption contained last_rule ignore_device ignore_remove + \ all_partitions + +syn match udevrulesOptionSep contained ',' + +hi def link udevrulesTodo Todo +hi def link udevrulesComment Comment +hi def link udevrulesRuleKey Keyword +hi def link udevrulesDelimiter Delimiter +hi def link udevrulesAssignKey Identifier +hi def link udevrulesPath Identifier +hi def link udevrulesVariable Identifier +hi def link udevrulesAttrKey Identifier +" XXX: setting this to Operator makes for extremely intense highlighting. +hi def link udevrulesEq Normal +hi def link udevrulesRuleEq udevrulesEq +hi def link udevrulesEStringEq udevrulesEq +hi def link udevrulesOptionsEq udevrulesEq +hi def link udevrulesEString udevrulesString +hi def link udevrulesStrEscapes SpecialChar +hi def link udevrulesStrNumber Number +hi def link udevrulesStrVars Identifier +hi def link udevrulesString String +hi def link udevrulesPattern SpecialChar +hi def link udevrulesPatRange SpecialChar +hi def link udevrulesOptions udevrulesString +hi def link udevrulesOption Type +hi def link udevrulesOptionSep Delimiter +hi def link udevrulesImportType Type + +let b:current_syntax = "udevrules" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/uil.vim b/.config/vim/syntax/uil.vim new file mode 100644 index 0000000..088a0f6 --- /dev/null +++ b/.config/vim/syntax/uil.vim @@ -0,0 +1,75 @@ +" Vim syntax file +" Language: Motif UIL (User Interface Language) +" Maintainer: Thomas Koehler +" Please be aware: I'm often slow to answer email due to a high +" non-computer related workload (sometimes 4-8 weeks) +" Last Change: 2016 September 6 +" URL: http://gott-gehabt.de/800_wer_wir_sind/thomas/Homepage/Computer/vim/syntax/uil.vim + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" A bunch of useful keywords +syn keyword uilType arguments callbacks color +syn keyword uilType compound_string controls end +syn keyword uilType exported file include +syn keyword uilType module object procedure +syn keyword uilType user_defined xbitmapfile + +syn keyword uilTodo contained TODO + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match uilSpecial contained "\\\d\d\d\|\\." +syn region uilString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell,uilSpecial +syn match uilCharacter "'[^\\]'" +syn region uilString start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@Spell,uilSpecial +syn match uilSpecialCharacter "'\\.'" +syn match uilSpecialStatement "Xm[^ =(){}:;]*" +syn match uilSpecialFunction "MrmNcreateCallback" +syn match uilRessource "XmN[^ =(){}:;]*" + +syn match uilNumber "-\=\<\d*\.\=\d\+\(e\=f\=\|[uU]\=[lL]\=\)\>" +syn match uilNumber "0[xX]\x\+\>" + +syn region uilComment start="/\*" end="\*/" contains=@Spell,uilTodo +syn match uilComment "!.*" contains=@Spell,uilTodo +syn match uilCommentError "\*/" + +syn region uilPreCondit start="^#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=uilComment,uilString,uilCharacter,uilNumber,uilCommentError +syn match uilIncluded contained "<[^>]*>" +syn match uilInclude "^#\s*include\s\+." contains=uilString,uilIncluded +syn match uilLineSkip "\\$" +syn region uilDefine start="^#\s*\(define\>\|undef\>\)" end="$" contains=uilLineSkip,uilComment,uilString,uilCharacter,uilNumber,uilCommentError + +syn sync ccomment uilComment + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default highlighting. +hi def link uilCharacter uilString +hi def link uilSpecialCharacter uilSpecial +hi def link uilNumber uilString +hi def link uilCommentError uilError +hi def link uilInclude uilPreCondit +hi def link uilDefine uilPreCondit +hi def link uilIncluded uilString +hi def link uilSpecialFunction uilRessource +hi def link uilRessource Identifier +hi def link uilSpecialStatement Keyword +hi def link uilError Error +hi def link uilPreCondit PreCondit +hi def link uilType Type +hi def link uilString String +hi def link uilComment Comment +hi def link uilSpecial Special +hi def link uilTodo Todo + + + +let b:current_syntax = "uil" + +" vim: ts=8 diff --git a/.config/vim/syntax/unison.vim b/.config/vim/syntax/unison.vim new file mode 100644 index 0000000..a1f8cb0 --- /dev/null +++ b/.config/vim/syntax/unison.vim @@ -0,0 +1,105 @@ +" Vim syntax file +" +" Language: unison +" Maintainer: Anton Parkhomenko +" Last Change: Oct 25, 2025 +" Original Author: John Williams, Paul Chiusano and Rúnar Bjarnason + +if exists("b:current_syntax") + finish +endif + +syntax include @markdown $VIMRUNTIME/syntax/markdown.vim + +syn cluster markdownLikeDocs contains=markdownBold,markdownItalic,markdownLinkText,markdownListMarker,markdownOrderedListMarker,markdownH1,markdownH2,markdownH3,markdownH4,markdownH5,markdownH6 + +syn match unisonOperator "[-!#$%&\*\+/<=>\?@\\^|~]" +syn match unisonDelimiter "[\[\](){},.]" + +" Strings and constants +syn match unisonSpecialChar contained "\\\([0-9]\+\|o[0-7]\+\|x[0-9a-fA-F]\+\|[\"\\'&\\abfnrtv]\|^[A-Z^_\[\\\]]\)" +syn match unisonSpecialChar contained "\\\(NUL\|SOH\|STX\|ETX\|EOT\|ENQ\|ACK\|BEL\|BS\|HT\|LF\|VT\|FF\|CR\|SO\|SI\|DLE\|DC1\|DC2\|DC3\|DC4\|NAK\|SYN\|ETB\|CAN\|EM\|SUB\|ESC\|FS\|GS\|RS\|US\|SP\|DEL\)" +syn match unisonSpecialCharError contained "\\&\|'''\+" +syn region unisonString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=unisonSpecialChar +syn match unisonCharacter "[^a-zA-Z0-9_']'\([^\\]\|\\[^']\+\|\\'\)'"lc=1 contains=unisonSpecialChar,unisonSpecialCharError +syn match unisonCharacter "^'\([^\\]\|\\[^']\+\|\\'\)'" contains=unisonSpecialChar,unisonSpecialCharError +syn match unisonNumber "\<[0-9]\+\>\|\<0[xX][0-9a-fA-F]\+\>\|\<0[oO][0-7]\+\>\|\<0[bB][01]\+\>" +syn match unisonFloat "\<[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=\>" + +" Keyword definitions. These must be patterns instead of keywords +" because otherwise they would match as keywords at the start of a +" "literate" comment (see lu.vim). +syn match unisonModule "\" +syn match unisonImport "\" +syn match unisonTypedef "\<\(unique\|structural\|∀\|forall\)\>" +syn match unisonStatement "\<\(ability\|do\|type\|where\|match\|cases\|;\|let\|with\|handle\)\>" +syn match unisonConditional "\<\(if\|else\|then\)\>" + +syn match unisonBoolean "\<\(true\|false\)\>" + +syn match unisonType "\<\C[A-Z][0-9A-Za-z_'!]*\>" +syn match unisonName "\<\C[a-z_][0-9A-Za-z_'!]*\>" contains=ALL +syn match unisonDef "^\C[A-Za-z_][0-9A-Za-z_'!]*:" + +" Comments +syn match unisonLineComment "---*\([^-!#$%&\*\+./<=>\?@\\^|~].*\)\?$" +syn region unisonBlockComment start="{-" end="-}" contains=unisonBlockComment +syn region unisonBelowFold start="^---" skip="." end="." contains=unisonBelowFold + +" Docs +syn region unisonDocBlock matchgroup=unisonDoc start="{{" end="}}" contains=unisonDocTypecheck,unisonDocQuasiquote,unisonDocDirective,unisonDocCode,unisonDocCodeInline,unisonDocCodeRaw,unisonDocMono,@markdownLikeDocs +syn region unisonDocQuasiquote contained matchgroup=unisonDocQuote start="{{" end= "}}" contains=TOP +syn region unisonDocCode contained matchgroup=unisonDocCode start="^\s*```\s*$" end="^\s*```\s*$" contains=TOP +syn region unisonDocTypecheck contained matchgroup=unisonDocCode start="^\s*@typecheck\s*```\s*$" end="^\s*```\s*$" contains=TOP +syn region unisonDocCodeRaw contained matchgroup=unisonDocCode start="^\s*```\s*raw\s*$" end="^\s*```\s*$" contains=NoSyntax +syn region unisonDocCodeInline contained matchgroup=unisonDocCode start="`\@" + +" things like +" > my_func 1 3 +" test> Function.tap.tests.t1 = check let +" use Nat == + +" ( 99, 100 ) === (withInitialValue 0 do +" : : : +syn match unisonWatch "^[A-Za-z]*>" + +hi def link unisonWatch Debug +hi def link unisonDocMono Delimiter +hi def link unisonDocDirective Import +hi def link unisonDocQuote Delimiter +hi def link unisonDocCode Delimiter +hi def link unisonDoc String +hi def link unisonBelowFold Comment +hi def link unisonBlockComment Comment +hi def link unisonBoolean Boolean +hi def link unisonCharacter Character +hi def link unisonComment Comment +hi def link unisonConditional Conditional +hi def link unisonConditional Conditional +hi def link unisonDebug Debug +hi def link unisonDelimiter Delimiter +hi def link unisonDocBlock String +hi def link unisonDocDirective Import +hi def link unisonDocIncluded Import +hi def link unisonFloat Float +hi def link unisonImport Include +hi def link unisonLineComment Comment +hi def link unisonLink Type +hi def link unisonName Identifier +hi def link unisonDef Typedef +hi def link unisonNumber Number +hi def link unisonOperator Operator +hi def link unisonSpecialChar SpecialChar +hi def link unisonSpecialCharError Error +hi def link unisonStatement Statement +hi def link unisonString String +hi def link unisonType Type +hi def link unisonTypedef Typedef + + +let b:current_syntax = "unison" + +" Options for vi: ts=8 sw=2 sts=2 nowrap noexpandtab ft=vim diff --git a/.config/vim/syntax/updatedb.vim b/.config/vim/syntax/updatedb.vim new file mode 100644 index 0000000..224a7dd --- /dev/null +++ b/.config/vim/syntax/updatedb.vim @@ -0,0 +1,41 @@ +" Vim syntax file +" Language: updatedb.conf(5) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2009-05-25 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword updatedbTodo contained TODO FIXME XXX NOTE + +syn region updatedbComment display oneline start='^\s*#' end='$' + \ contains=updatedbTodo,@Spell + +syn match updatedbBegin display '^' + \ nextgroup=updatedbName,updatedbComment skipwhite + +syn keyword updatedbName contained + \ PRUNEFS + \ PRUNENAMES + \ PRUNEPATHS + \ PRUNE_BIND_MOUNTS + \ nextgroup=updatedbNameEq + +syn match updatedbNameEq contained display '=' nextgroup=updatedbValue + +syn region updatedbValue contained display oneline start='"' end='"' + +hi def link updatedbTodo Todo +hi def link updatedbComment Comment +hi def link updatedbName Identifier +hi def link updatedbNameEq Operator +hi def link updatedbValue String + +let b:current_syntax = "updatedb" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/upstart.vim b/.config/vim/syntax/upstart.vim new file mode 100644 index 0000000..140cd17 --- /dev/null +++ b/.config/vim/syntax/upstart.vim @@ -0,0 +1,111 @@ +" Vim syntax file +" Language: Upstart job files +" Maintainer: Michael Biebl +" James Hunt +" Last Change: 2012 Jan 16 +" License: The Vim license +" Version: 0.4 +" Remark: Syntax highlighting for Upstart (init(8)) job files. +" +" It is inspired by the initng syntax file and includes sh.vim to do the +" highlighting of script blocks. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let is_bash = 1 +syn include @Shell syntax/sh.vim + +syn case match + +" avoid need to use 'match' for most events +setlocal iskeyword+=- + +syn match upstartComment /#.*$/ contains=upstartTodo +syn keyword upstartTodo TODO FIXME contained + +syn region upstartString start=/"/ end=/"/ skip=/\\"/ + +syn region upstartScript matchgroup=upstartStatement start="script" end="end script" contains=@upstartShellCluster + +syn cluster upstartShellCluster contains=@Shell + +" one argument +syn keyword upstartStatement description author version instance expect +syn keyword upstartStatement pid kill normal console env exit export +syn keyword upstartStatement umask nice oom chroot chdir exec + +" two arguments +syn keyword upstartStatement limit + +" one or more arguments (events) +syn keyword upstartStatement emits + +syn keyword upstartStatement on start stop + +" flag, no parameter +syn keyword upstartStatement respawn service instance manual debug task + +" prefix for exec or script +syn keyword upstartOption pre-start post-start pre-stop post-stop + +" option for kill +syn keyword upstartOption timeout +" option for oom +syn keyword upstartOption never +" options for console +syn keyword upstartOption output owner +" options for expect +syn keyword upstartOption fork daemon +" options for limit +syn keyword upstartOption unlimited + +" 'options' for start/stop on +syn keyword upstartOption and or + +" Upstart itself and associated utilities +syn keyword upstartEvent runlevel +syn keyword upstartEvent started +syn keyword upstartEvent starting +syn keyword upstartEvent startup +syn keyword upstartEvent stopped +syn keyword upstartEvent stopping +syn keyword upstartEvent control-alt-delete +syn keyword upstartEvent keyboard-request +syn keyword upstartEvent power-status-changed + +" D-Bus +syn keyword upstartEvent dbus-activation + +" Display Manager (ie gdm) +syn keyword upstartEvent desktop-session-start +syn keyword upstartEvent login-session-start + +" mountall +syn keyword upstartEvent all-swaps +syn keyword upstartEvent filesystem +syn keyword upstartEvent mounted +syn keyword upstartEvent mounting +syn keyword upstartEvent local-filesystems +syn keyword upstartEvent remote-filesystems +syn keyword upstartEvent virtual-filesystems + +" SysV umountnfs.sh +syn keyword upstartEvent mounted-remote-filesystems + +" upstart-udev-bridge and ifup/down +syn match upstartEvent /\<\i\{-1,}-device-\(added\|removed\|up\|down\)/ + +" upstart-socket-bridge +syn keyword upstartEvent socket + +hi def link upstartComment Comment +hi def link upstartTodo Todo +hi def link upstartString String +hi def link upstartStatement Statement +hi def link upstartOption Type +hi def link upstartEvent Define + +let b:current_syntax = "upstart" diff --git a/.config/vim/syntax/upstreamdat.vim b/.config/vim/syntax/upstreamdat.vim new file mode 100644 index 0000000..e3b415a --- /dev/null +++ b/.config/vim/syntax/upstreamdat.vim @@ -0,0 +1,305 @@ +" Vim syntax file +" Language: Innovation Data Processing upstream.dat file +" Maintainer: Rob Owens +" Latest Revision: 2013-11-27 + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Parameters: +syn keyword upstreamdat_Parameter ACCEPTPCREMOTE +syn keyword upstreamdat_Parameter ACCEPTREMOTE +syn keyword upstreamdat_Parameter ACTION +syn keyword upstreamdat_Parameter ACTIVATEONENTRY +syn keyword upstreamdat_Parameter ARCHIVEBIT +syn keyword upstreamdat_Parameter ARCHIVEBIT +syn keyword upstreamdat_Parameter ASCTOEBC +syn keyword upstreamdat_Parameter ASRBACKUP +syn keyword upstreamdat_Parameter ATTENDED +syn keyword upstreamdat_Parameter AUTHORITATIVE +syn keyword upstreamdat_Parameter AUTHORITATIVERESTORE +syn keyword upstreamdat_Parameter AUTHORITATIVERESTORE +syn keyword upstreamdat_Parameter BACKUPPROFILE +syn keyword upstreamdat_Parameter BACKUPPROFILE2 +syn keyword upstreamdat_Parameter BACKUPREPARSEFILES +syn keyword upstreamdat_Parameter BACKUPREPARSEFILES +syn keyword upstreamdat_Parameter BACKUPVERIFY +syn keyword upstreamdat_Parameter BLANKTRUNC +syn keyword upstreamdat_Parameter CALCDASDSIZE +syn keyword upstreamdat_Parameter CHANGEDIRATTRIBS +syn keyword upstreamdat_Parameter CHANGEDIRATTRIBS +syn keyword upstreamdat_Parameter COMPRESSLEVEL +syn keyword upstreamdat_Parameter CONTROLFILE +syn keyword upstreamdat_Parameter DASDOVERRIDE +syn keyword upstreamdat_Parameter DATELIMIT +syn keyword upstreamdat_Parameter DATELIMIT +syn keyword upstreamdat_Parameter DAYSOLD +syn keyword upstreamdat_Parameter DAYSOLD +syn keyword upstreamdat_Parameter DELETED +syn keyword upstreamdat_Parameter DELETED +syn keyword upstreamdat_Parameter DELETEPROMPTS +syn keyword upstreamdat_Parameter DELETEPROMPTS +syn keyword upstreamdat_Parameter DESTINATION +syn keyword upstreamdat_Parameter DESTINATION +syn keyword upstreamdat_Parameter DIRDELETE +syn keyword upstreamdat_Parameter DIRECTORVMC +syn keyword upstreamdat_Parameter DIRONLYRESTOREOK +syn keyword upstreamdat_Parameter DIRSONLY +syn keyword upstreamdat_Parameter DIRSONLY +syn keyword upstreamdat_Parameter DISASTERRECOVERY +syn keyword upstreamdat_Parameter DISPLAY +syn keyword upstreamdat_Parameter DRIVEALIAS +syn keyword upstreamdat_Parameter DRIVEALIAS +syn keyword upstreamdat_Parameter DUALCOPY +syn keyword upstreamdat_Parameter DUPDAYS +syn keyword upstreamdat_Parameter DUPLICATE +syn keyword upstreamdat_Parameter EBCTOASC +syn keyword upstreamdat_Parameter ENCRYPT +syn keyword upstreamdat_Parameter ENCRYPTLEVEL +syn keyword upstreamdat_Parameter EXCLUDELISTNAME +syn keyword upstreamdat_Parameter FAILBACKUPONERROR +syn keyword upstreamdat_Parameter FAILBACKUPONERROR +syn keyword upstreamdat_Parameter FAILIFNOFILES +syn keyword upstreamdat_Parameter FAILIFNOFILES +syn keyword upstreamdat_Parameter FAILIFSKIP +syn keyword upstreamdat_Parameter FAILJOB +syn keyword upstreamdat_Parameter FAILRESTOREONERROR +syn keyword upstreamdat_Parameter FAILRESTOREONERROR +syn keyword upstreamdat_Parameter FILEDATE +syn keyword upstreamdat_Parameter FILEDATE +syn keyword upstreamdat_Parameter FILEDELETE +syn keyword upstreamdat_Parameter FILEDELETE +syn keyword upstreamdat_Parameter FILES +syn keyword upstreamdat_Parameter FILES +syn keyword upstreamdat_Parameter FILESOPENFORUPDAT +syn keyword upstreamdat_Parameter FILESOPENFORUPDAT +syn keyword upstreamdat_Parameter FILETRANSFER +syn keyword upstreamdat_Parameter GETREMOTEFILES +syn keyword upstreamdat_Parameter HARDLINKDB +syn keyword upstreamdat_Parameter HARDLINKS +syn keyword upstreamdat_Parameter HARDLINKS +syn keyword upstreamdat_Parameter HIDDENFILES +syn keyword upstreamdat_Parameter HIDDENFILES +syn keyword upstreamdat_Parameter HOLDTAPE +syn keyword upstreamdat_Parameter HOLDUSERDIRS +syn keyword upstreamdat_Parameter HOSTFILENAME +syn keyword upstreamdat_Parameter HOSTRECORD +syn keyword upstreamdat_Parameter HOSTSORT +syn keyword upstreamdat_Parameter IGNOREPLUGINSFORRESTORE +syn keyword upstreamdat_Parameter INCRDB +syn keyword upstreamdat_Parameter INCRDBARCHIVEBIT +syn keyword upstreamdat_Parameter INCRDBDELETEDFILES +syn keyword upstreamdat_Parameter INCREMENTAL +syn keyword upstreamdat_Parameter INCREMENTAL +syn keyword upstreamdat_Parameter INQOPTIONS +syn keyword upstreamdat_Parameter INSTALLWIN2KAGENT +syn keyword upstreamdat_Parameter INSTALLWIN2KAGENT +syn keyword upstreamdat_Parameter JOBOPTIONS +syn keyword upstreamdat_Parameter JOBRETURNCODEMAP +syn keyword upstreamdat_Parameter JOBWAITTIMELIMIT +syn keyword upstreamdat_Parameter KEEPALIVE +syn keyword upstreamdat_Parameter LANINTERFACE +syn keyword upstreamdat_Parameter LANWSNAME +syn keyword upstreamdat_Parameter LANWSPASSWORD +syn keyword upstreamdat_Parameter LASTACCESS +syn keyword upstreamdat_Parameter LASTACCESS +syn keyword upstreamdat_Parameter LATESTDATE +syn keyword upstreamdat_Parameter LATESTDATE +syn keyword upstreamdat_Parameter LATESTTIME +syn keyword upstreamdat_Parameter LATESTTIME +syn keyword upstreamdat_Parameter LATESTVERSION +syn keyword upstreamdat_Parameter LINEBLOCK +syn keyword upstreamdat_Parameter LINETRUNC +syn keyword upstreamdat_Parameter LISTENFORREMOTE +syn keyword upstreamdat_Parameter LOCALBACKUP +syn keyword upstreamdat_Parameter LOCALBACKUPDIR +syn keyword upstreamdat_Parameter LOCALBACKUPMAX +syn keyword upstreamdat_Parameter LOCALBACKUPMAXFILESIZE +syn keyword upstreamdat_Parameter LOCALBACKUPMAXSIZE +syn keyword upstreamdat_Parameter LOCALEXCLUDEFILE +syn keyword upstreamdat_Parameter LOCALPARAMETERS +syn keyword upstreamdat_Parameter LOCALPASSWORD +syn keyword upstreamdat_Parameter LOCALRESTORE +syn keyword upstreamdat_Parameter LOCALUSER +syn keyword upstreamdat_Parameter LOFS +syn keyword upstreamdat_Parameter LOGNONFATAL +syn keyword upstreamdat_Parameter MAXBACKUPFILESFAIL +syn keyword upstreamdat_Parameter MAXBACKUPTIME +syn keyword upstreamdat_Parameter MAXDUPS +syn keyword upstreamdat_Parameter MAXFILENAMESIZE +syn keyword upstreamdat_Parameter MAXKFILESIZE +syn keyword upstreamdat_Parameter MAXLOGDAYS +syn keyword upstreamdat_Parameter MAXRESTOREFILESFAIL +syn keyword upstreamdat_Parameter MAXRESTORETIME +syn keyword upstreamdat_Parameter MAXRETRY +syn keyword upstreamdat_Parameter MAXRPTDAYS +syn keyword upstreamdat_Parameter MERGE +syn keyword upstreamdat_Parameter MIGRBITS +syn keyword upstreamdat_Parameter MIGRBITS +syn keyword upstreamdat_Parameter MINCOMPRESSSIZE +syn keyword upstreamdat_Parameter MINIMIZE +syn keyword upstreamdat_Parameter MODIFYFILE +syn keyword upstreamdat_Parameter MOUNTPOINTS +syn keyword upstreamdat_Parameter MOUNTPOINTS +syn keyword upstreamdat_Parameter NDS +syn keyword upstreamdat_Parameter NDS +syn keyword upstreamdat_Parameter NEWFILECOMPARE +syn keyword upstreamdat_Parameter NFSBELOW +syn keyword upstreamdat_Parameter NODATAOK +syn keyword upstreamdat_Parameter NODIRFORINCREMENTAL +syn keyword upstreamdat_Parameter NODIRFORINCREMENTAL +syn keyword upstreamdat_Parameter NONFILEDATABITMAP +syn keyword upstreamdat_Parameter NONFILEDATABITMAP +syn keyword upstreamdat_Parameter NOPOINTRESTORE +syn keyword upstreamdat_Parameter NOSPECINHERITANCE +syn keyword upstreamdat_Parameter NOTIFYEVENTS +syn keyword upstreamdat_Parameter NOTIFYFAILUREATTACHMENT +syn keyword upstreamdat_Parameter NOTIFYSUCCESSATTACHMENT +syn keyword upstreamdat_Parameter NOTIFYTARGETS +syn keyword upstreamdat_Parameter NOUIDGIDNAMES +syn keyword upstreamdat_Parameter NOUIDGIDNAMES +syn keyword upstreamdat_Parameter NOVELLMIGRATE +syn keyword upstreamdat_Parameter NOVELLMIGRATE +syn keyword upstreamdat_Parameter NOVELLMIGRATEADDEXT +syn keyword upstreamdat_Parameter NOVELLMIGRATEADDEXT +syn keyword upstreamdat_Parameter NOVELLPROFILE +syn keyword upstreamdat_Parameter NOVELLRECALL +syn keyword upstreamdat_Parameter NTFSADDPERMISSION +syn keyword upstreamdat_Parameter NTFSADDPERMISSION +syn keyword upstreamdat_Parameter NTREGRESTORE +syn keyword upstreamdat_Parameter OSTYPE +syn keyword upstreamdat_Parameter OUTPORT +syn keyword upstreamdat_Parameter PACKFLUSHAFTERFILE +syn keyword upstreamdat_Parameter PACKRECSIZE +syn keyword upstreamdat_Parameter PARAMETER +syn keyword upstreamdat_Parameter PASSWORD +syn keyword upstreamdat_Parameter PATHNAME +syn keyword upstreamdat_Parameter PATHNAME +syn keyword upstreamdat_Parameter PERFORMBITMAP +syn keyword upstreamdat_Parameter PERFORMNUMRECORDS +syn keyword upstreamdat_Parameter PERFORMRECORDSIZE +syn keyword upstreamdat_Parameter PLUGIN +syn keyword upstreamdat_Parameter PLUGIN +syn keyword upstreamdat_Parameter PLUGINPARAMETERS +syn keyword upstreamdat_Parameter PLUGINPARAMETERS +syn keyword upstreamdat_Parameter POSTJOB +syn keyword upstreamdat_Parameter PREJOB +syn keyword upstreamdat_Parameter PRTYCLASS +syn keyword upstreamdat_Parameter PRTYLEVEL +syn keyword upstreamdat_Parameter RECALLCLEANUP +syn keyword upstreamdat_Parameter RECALLOFFLINEFILES +syn keyword upstreamdat_Parameter RECALLOFFLINEFILES +syn keyword upstreamdat_Parameter RECORDSIZE +syn keyword upstreamdat_Parameter REMOTEADDR +syn keyword upstreamdat_Parameter REMOTEAPPLPREF +syn keyword upstreamdat_Parameter REMOTEAPPLRETRY +syn keyword upstreamdat_Parameter REMOTECONNECTTYPE +syn keyword upstreamdat_Parameter REMOTEFLAGS +syn keyword upstreamdat_Parameter REMOTEIPADAPTER +syn keyword upstreamdat_Parameter REMOTELOCALPARAMETERS +syn keyword upstreamdat_Parameter REMOTELOGMODE +syn keyword upstreamdat_Parameter REMOTELUNAME +syn keyword upstreamdat_Parameter REMOTEMAXRETRIES +syn keyword upstreamdat_Parameter REMOTEMODENAME +syn keyword upstreamdat_Parameter REMOTEPARAMETERFILE +syn keyword upstreamdat_Parameter REMOTEPORT +syn keyword upstreamdat_Parameter REMOTEREQUEST +syn keyword upstreamdat_Parameter REMOTERESTART +syn keyword upstreamdat_Parameter REMOTEROUTE +syn keyword upstreamdat_Parameter REMOTETARGETNAME +syn keyword upstreamdat_Parameter REMOTETCP +syn keyword upstreamdat_Parameter REMOTETIMEOUT +syn keyword upstreamdat_Parameter REMOTETMAXRETRY +syn keyword upstreamdat_Parameter REMOTETPN +syn keyword upstreamdat_Parameter REMOTEUSAPPL +syn keyword upstreamdat_Parameter REMOTEVERIFY +syn keyword upstreamdat_Parameter REMOTEWTOCOMP +syn keyword upstreamdat_Parameter REPORTNAME +syn keyword upstreamdat_Parameter REPORTOPTIONS +syn keyword upstreamdat_Parameter RESTARTLASTFILE +syn keyword upstreamdat_Parameter RESTART +syn keyword upstreamdat_Parameter RESTARTTYPE +syn keyword upstreamdat_Parameter RESTARTVERSIONDATE +syn keyword upstreamdat_Parameter RESTOREARCHIVEBIT +syn keyword upstreamdat_Parameter RESTORECHECKPOINT +syn keyword upstreamdat_Parameter RESTOREDATELIMIT +syn keyword upstreamdat_Parameter RESTOREDATELIMIT +syn keyword upstreamdat_Parameter RESTOREFILEFAIL +syn keyword upstreamdat_Parameter RESTOREMOUNTPOINTS +syn keyword upstreamdat_Parameter RESTOREMOUNTPOINTS +syn keyword upstreamdat_Parameter RESTORESEGMENTS +syn keyword upstreamdat_Parameter RESTORESEGMENTS +syn keyword upstreamdat_Parameter RESTORETODIFFFS +syn keyword upstreamdat_Parameter RETAIN +syn keyword upstreamdat_Parameter RETAIN +syn keyword upstreamdat_Parameter ROOTENTRY +syn keyword upstreamdat_Parameter ROOTENTRY +syn keyword upstreamdat_Parameter SAN +syn keyword upstreamdat_Parameter SCHEDULENAME +syn keyword upstreamdat_Parameter SEGMENTEDFILESIZE +syn keyword upstreamdat_Parameter SEGMENTEDFILESIZE +syn keyword upstreamdat_Parameter SEGMENTSIZE +syn keyword upstreamdat_Parameter SEGMENTSIZE +syn keyword upstreamdat_Parameter SENDHOSTDETAILS +syn keyword upstreamdat_Parameter SINGLEFS +syn keyword upstreamdat_Parameter SIZETRC +syn keyword upstreamdat_Parameter SKIP +syn keyword upstreamdat_Parameter SKIPBACKUPSCAN +syn keyword upstreamdat_Parameter SKIPOLD +syn keyword upstreamdat_Parameter SKIPOLD +syn keyword upstreamdat_Parameter SMSTARGETSERVICENAME +syn keyword upstreamdat_Parameter SMSTSA +syn keyword upstreamdat_Parameter SOLO +syn keyword upstreamdat_Parameter SORTBACKUP +syn keyword upstreamdat_Parameter SOSDISK +syn keyword upstreamdat_Parameter SOSDISK +syn keyword upstreamdat_Parameter SOSTIMESTAMP +syn keyword upstreamdat_Parameter SOSTIMESTAMP +syn keyword upstreamdat_Parameter SOSTIMESTAMPPATH +syn keyword upstreamdat_Parameter SOSTIMESTAMPPATH +syn keyword upstreamdat_Parameter SPECNUMBER +syn keyword upstreamdat_Parameter SPECNUMBER +syn keyword upstreamdat_Parameter SPECTYPE +syn keyword upstreamdat_Parameter SPECTYPE +syn keyword upstreamdat_Parameter STARTTIME +syn keyword upstreamdat_Parameter STORAGETYPE +syn keyword upstreamdat_Parameter SUBDIRECTORIES +syn keyword upstreamdat_Parameter SUBDIRECTORIES +syn keyword upstreamdat_Parameter SWITCHTOTAPEMB +syn keyword upstreamdat_Parameter TCPADDRESS +syn keyword upstreamdat_Parameter TCPTIMEOUT +syn keyword upstreamdat_Parameter TIMEOVERRIDE +syn keyword upstreamdat_Parameter TRACE +syn keyword upstreamdat_Parameter TRANSLATE +syn keyword upstreamdat_Parameter ULTRACOMP +syn keyword upstreamdat_Parameter ULTREG +syn keyword upstreamdat_Parameter ULTUPD +syn keyword upstreamdat_Parameter UNCMACHINEALIAS +syn keyword upstreamdat_Parameter UNCMACHINEALIAS +syn keyword upstreamdat_Parameter USEALEBRA +syn keyword upstreamdat_Parameter USECONTROLFILE +syn keyword upstreamdat_Parameter USEGID +syn keyword upstreamdat_Parameter USERID +syn keyword upstreamdat_Parameter USEUID +syn keyword upstreamdat_Parameter USNOUIDGIDERRORS +syn keyword upstreamdat_Parameter UTF8 +syn keyword upstreamdat_Parameter VAULTNUMBER +syn keyword upstreamdat_Parameter VERSIONDATE +syn keyword upstreamdat_Parameter WRITESPARSE +syn keyword upstreamdat_Parameter XFERECORDSIZE +syn keyword upstreamdat_Parameter XFERRECSEP +syn keyword upstreamdat_Parameter XFERRECUSECR + +" File Specs: +syn match upstreamdat_Filespec /file spec\c \d\{1,3}.*/ + +" Comments: +syn match upstreamdat_Comment /^#.*/ + +hi def link upstreamdat_Parameter Type +"hi def link upstreamdat_Filespec Underlined +hi def link upstreamdat_Comment Comment + +let b:current_syntax = "upstreamdat" diff --git a/.config/vim/syntax/upstreaminstalllog.vim b/.config/vim/syntax/upstreaminstalllog.vim new file mode 100644 index 0000000..fb23fdc --- /dev/null +++ b/.config/vim/syntax/upstreaminstalllog.vim @@ -0,0 +1,27 @@ +" Vim syntax file +" Language: Innovation Data Processing UPSTREAMInstall.log file +" Maintainer: Rob Owens +" Latest Revision: 2013-06-17 + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Date: +syn match upstreaminstalllog_Date /\u\l\l \u\l\l\s\{1,2}\d\{1,2} \d\d:\d\d:\d\d \d\d\d\d/ +" Msg Types: +syn match upstreaminstalllog_MsgD /Msg #MSI\d\{4,5}D/ +syn match upstreaminstalllog_MsgE /Msg #MSI\d\{4,5}E/ +syn match upstreaminstalllog_MsgI /Msg #MSI\d\{4,5}I/ +syn match upstreaminstalllog_MsgW /Msg #MSI\d\{4,5}W/ +" IP Address: +syn match upstreaminstalllog_IPaddr / \d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/ + +hi def link upstreaminstalllog_Date Underlined +hi def link upstreaminstalllog_MsgD Type +hi def link upstreaminstalllog_MsgE Error +hi def link upstreaminstalllog_MsgW Constant +hi def link upstreaminstalllog_IPaddr Identifier + +let b:current_syntax = "upstreaminstalllog" diff --git a/.config/vim/syntax/upstreamlog.vim b/.config/vim/syntax/upstreamlog.vim new file mode 100644 index 0000000..1439bdf --- /dev/null +++ b/.config/vim/syntax/upstreamlog.vim @@ -0,0 +1,54 @@ +" Vim syntax file +" Language: Innovation Data Processing upstream.log file +" Maintainer: Rob Owens +" Latest Revision: 2013-09-19 + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Date: +syn match upstreamlog_Date /\u\l\l \u\l\l\s\{1,2}\d\{1,2} \d\d:\d\d:\d\d \d\d\d\d/ +" Msg Types: +syn match upstreamlog_MsgD /Msg #\(Agt\|PC\|Srv\)\d\{4,5}D/ nextgroup=upstreamlog_Process skipwhite +syn match upstreamlog_MsgE /Msg #\(Agt\|PC\|Srv\)\d\{4,5}E/ nextgroup=upstreamlog_Process skipwhite +syn match upstreamlog_MsgI /Msg #\(Agt\|PC\|Srv\)\d\{4,5}I/ nextgroup=upstreamlog_Process skipwhite +syn match upstreamlog_MsgW /Msg #\(Agt\|PC\|Srv\)\d\{4,5}W/ nextgroup=upstreamlog_Process skipwhite +" Processes: +syn region upstreamlog_Process start="(" end=")" contained +" IP Address: +syn match upstreamlog_IPaddr /\( \|(\)\zs\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/ +" Profile: +syn match upstreamlog_Profile /Using default configuration for profile \zs\S\{1,8}\ze/ +syn match upstreamlog_Profile /Now running profile \zs\S\{1,8}\ze/ +syn match upstreamlog_Profile /in profile set \zs\S\{1,8}\ze/ +syn match upstreamlog_Profile /Migrate disk backup from profile \zs\S\{1,8}\ze/ +syn match upstreamlog_Profile /Profileset=\zs\S\{1,8}\ze,/ +syn match upstreamlog_Profile /Vault \(disk\|tape\) backup to vault \d\{1,4} from profile \zs\S\{1,8}\ze/ +syn match upstreamlog_Profile /Profile name \zs\"\S\{1,8}\"/ +syn match upstreamlog_Profile / Profile: \zs\S\{1,8}/ +syn match upstreamlog_Profile / Profile: \zs\S\{1,8}\ze, / +syn match upstreamlog_Profile /, profile: \zs\S\{1,8}\ze,/ +syn match upstreamlog_Profile /found Profile: \zs\S\{1,8}\ze,/ +syn match upstreamlog_Profile /Backup Profile: \zs\S\{1,8}\ze Version date/ +syn match upstreamlog_Profile /Backup profile: \zs\S\{1,8}\ze Version date/ +syn match upstreamlog_Profile /Full of \zs\S\{1,8}\ze$/ +syn match upstreamlog_Profile /Incr. of \zs\S\{1,8}\ze$/ +syn match upstreamlog_Profile /Profile=\zs\S\{1,8}\ze,/ +" Target: +syn region upstreamlog_Target start="Computer: \zs" end="\ze[\]\)]" +syn region upstreamlog_Target start="Computer name \zs\"" end="\"\ze" +syn region upstreamlog_Target start="request to registered name \zs" end=" " + + +hi def link upstreamlog_Date Underlined +hi def link upstreamlog_MsgD Type +hi def link upstreamlog_MsgE Error +hi def link upstreamlog_MsgW Constant +hi def link upstreamlog_Process Statement +hi def link upstreamlog_IPaddr Identifier +hi def link upstreamlog_Profile Identifier +hi def link upstreamlog_Target Identifier + +let b:current_syntax = "upstreamlog" diff --git a/.config/vim/syntax/upstreamrpt.vim b/.config/vim/syntax/upstreamrpt.vim new file mode 100644 index 0000000..21c2563 --- /dev/null +++ b/.config/vim/syntax/upstreamrpt.vim @@ -0,0 +1,310 @@ +" Vim syntax file +" Language: Innovation Data Processing upstream.rpt file +" Maintainer: Rob Owens +" Latest Revision: 2014-03-13 + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +setlocal foldmethod=syntax + +" Parameters: +syn keyword upstreamdat_Parameter ACCEPTPCREMOTE +syn keyword upstreamdat_Parameter ACCEPTREMOTE +syn keyword upstreamdat_Parameter ACTION +syn keyword upstreamdat_Parameter ACTIVATEONENTRY +syn keyword upstreamdat_Parameter ARCHIVEBIT +syn keyword upstreamdat_Parameter ARCHIVEBIT +syn keyword upstreamdat_Parameter ASCTOEBC +syn keyword upstreamdat_Parameter ASRBACKUP +syn keyword upstreamdat_Parameter ATTENDED +syn keyword upstreamdat_Parameter AUTHORITATIVE +syn keyword upstreamdat_Parameter AUTHORITATIVERESTORE +syn keyword upstreamdat_Parameter AUTHORITATIVERESTORE +syn keyword upstreamdat_Parameter BACKUPPROFILE +syn keyword upstreamdat_Parameter BACKUPPROFILE2 +syn keyword upstreamdat_Parameter BACKUPREPARSEFILES +syn keyword upstreamdat_Parameter BACKUPREPARSEFILES +syn keyword upstreamdat_Parameter BACKUPVERIFY +syn keyword upstreamdat_Parameter BLANKTRUNC +syn keyword upstreamdat_Parameter CALCDASDSIZE +syn keyword upstreamdat_Parameter CHANGEDIRATTRIBS +syn keyword upstreamdat_Parameter CHANGEDIRATTRIBS +syn keyword upstreamdat_Parameter COMPRESSLEVEL +syn keyword upstreamdat_Parameter CONTROLFILE +syn keyword upstreamdat_Parameter DASDOVERRIDE +syn keyword upstreamdat_Parameter DATELIMIT +syn keyword upstreamdat_Parameter DATELIMIT +syn keyword upstreamdat_Parameter DAYSOLD +syn keyword upstreamdat_Parameter DAYSOLD +syn keyword upstreamdat_Parameter DELETED +syn keyword upstreamdat_Parameter DELETED +syn keyword upstreamdat_Parameter DELETEPROMPTS +syn keyword upstreamdat_Parameter DELETEPROMPTS +syn keyword upstreamdat_Parameter DESTINATION +syn keyword upstreamdat_Parameter DESTINATION +syn keyword upstreamdat_Parameter DIRDELETE +syn keyword upstreamdat_Parameter DIRECTORVMC +syn keyword upstreamdat_Parameter DIRONLYRESTOREOK +syn keyword upstreamdat_Parameter DIRSONLY +syn keyword upstreamdat_Parameter DIRSONLY +syn keyword upstreamdat_Parameter DISASTERRECOVERY +syn keyword upstreamdat_Parameter DISPLAY +syn keyword upstreamdat_Parameter DRIVEALIAS +syn keyword upstreamdat_Parameter DRIVEALIAS +syn keyword upstreamdat_Parameter DUALCOPY +syn keyword upstreamdat_Parameter DUPDAYS +syn keyword upstreamdat_Parameter DUPLICATE +syn keyword upstreamdat_Parameter EBCTOASC +syn keyword upstreamdat_Parameter ENCRYPT +syn keyword upstreamdat_Parameter ENCRYPTLEVEL +syn keyword upstreamdat_Parameter EXCLUDELISTNAME +syn keyword upstreamdat_Parameter FAILBACKUPONERROR +syn keyword upstreamdat_Parameter FAILBACKUPONERROR +syn keyword upstreamdat_Parameter FAILIFNOFILES +syn keyword upstreamdat_Parameter FAILIFNOFILES +syn keyword upstreamdat_Parameter FAILIFSKIP +syn keyword upstreamdat_Parameter FAILJOB +syn keyword upstreamdat_Parameter FAILRESTOREONERROR +syn keyword upstreamdat_Parameter FAILRESTOREONERROR +syn keyword upstreamdat_Parameter FILEDATE +syn keyword upstreamdat_Parameter FILEDATE +syn keyword upstreamdat_Parameter FILEDELETE +syn keyword upstreamdat_Parameter FILEDELETE +syn keyword upstreamdat_Parameter FILES +syn keyword upstreamdat_Parameter FILES +syn keyword upstreamdat_Parameter FILESOPENFORUPDAT +syn keyword upstreamdat_Parameter FILESOPENFORUPDAT +syn keyword upstreamdat_Parameter FILETRANSFER +syn keyword upstreamdat_Parameter GETREMOTEFILES +syn keyword upstreamdat_Parameter HARDLINKDB +syn keyword upstreamdat_Parameter HARDLINKS +syn keyword upstreamdat_Parameter HARDLINKS +syn keyword upstreamdat_Parameter HIDDENFILES +syn keyword upstreamdat_Parameter HIDDENFILES +syn keyword upstreamdat_Parameter HOLDTAPE +syn keyword upstreamdat_Parameter HOLDUSERDIRS +syn keyword upstreamdat_Parameter HOSTFILENAME +syn keyword upstreamdat_Parameter HOSTRECORD +syn keyword upstreamdat_Parameter HOSTSORT +syn keyword upstreamdat_Parameter IGNOREPLUGINSFORRESTORE +syn keyword upstreamdat_Parameter INCRDB +syn keyword upstreamdat_Parameter INCRDBARCHIVEBIT +syn keyword upstreamdat_Parameter INCRDBDELETEDFILES +syn keyword upstreamdat_Parameter INCREMENTAL +syn keyword upstreamdat_Parameter INCREMENTAL +syn keyword upstreamdat_Parameter INQOPTIONS +syn keyword upstreamdat_Parameter INSTALLWIN2KAGENT +syn keyword upstreamdat_Parameter INSTALLWIN2KAGENT +syn keyword upstreamdat_Parameter JOBOPTIONS +syn keyword upstreamdat_Parameter JOBRETURNCODEMAP +syn keyword upstreamdat_Parameter JOBWAITTIMELIMIT +syn keyword upstreamdat_Parameter KEEPALIVE +syn keyword upstreamdat_Parameter LANINTERFACE +syn keyword upstreamdat_Parameter LANWSNAME +syn keyword upstreamdat_Parameter LANWSPASSWORD +syn keyword upstreamdat_Parameter LASTACCESS +syn keyword upstreamdat_Parameter LASTACCESS +syn keyword upstreamdat_Parameter LATESTDATE +syn keyword upstreamdat_Parameter LATESTDATE +syn keyword upstreamdat_Parameter LATESTTIME +syn keyword upstreamdat_Parameter LATESTTIME +syn keyword upstreamdat_Parameter LATESTVERSION +syn keyword upstreamdat_Parameter LINEBLOCK +syn keyword upstreamdat_Parameter LINETRUNC +syn keyword upstreamdat_Parameter LISTENFORREMOTE +syn keyword upstreamdat_Parameter LOCALBACKUP +syn keyword upstreamdat_Parameter LOCALBACKUPDIR +syn keyword upstreamdat_Parameter LOCALBACKUPMAX +syn keyword upstreamdat_Parameter LOCALBACKUPMAXFILESIZE +syn keyword upstreamdat_Parameter LOCALBACKUPMAXSIZE +syn keyword upstreamdat_Parameter LOCALEXCLUDEFILE +syn keyword upstreamdat_Parameter LOCALPARAMETERS +syn keyword upstreamdat_Parameter LOCALPASSWORD +syn keyword upstreamdat_Parameter LOCALRESTORE +syn keyword upstreamdat_Parameter LOCALUSER +syn keyword upstreamdat_Parameter LOFS +syn keyword upstreamdat_Parameter LOGNONFATAL +syn keyword upstreamdat_Parameter MAXBACKUPFILESFAIL +syn keyword upstreamdat_Parameter MAXBACKUPTIME +syn keyword upstreamdat_Parameter MAXDUPS +syn keyword upstreamdat_Parameter MAXFILENAMESIZE +syn keyword upstreamdat_Parameter MAXKFILESIZE +syn keyword upstreamdat_Parameter MAXLOGDAYS +syn keyword upstreamdat_Parameter MAXRESTOREFILESFAIL +syn keyword upstreamdat_Parameter MAXRESTORETIME +syn keyword upstreamdat_Parameter MAXRETRY +syn keyword upstreamdat_Parameter MAXRPTDAYS +syn keyword upstreamdat_Parameter MERGE +syn keyword upstreamdat_Parameter MIGRBITS +syn keyword upstreamdat_Parameter MIGRBITS +syn keyword upstreamdat_Parameter MINCOMPRESSSIZE +syn keyword upstreamdat_Parameter MINIMIZE +syn keyword upstreamdat_Parameter MODIFYFILE +syn keyword upstreamdat_Parameter MOUNTPOINTS +syn keyword upstreamdat_Parameter MOUNTPOINTS +syn keyword upstreamdat_Parameter NDS +syn keyword upstreamdat_Parameter NDS +syn keyword upstreamdat_Parameter NEWFILECOMPARE +syn keyword upstreamdat_Parameter NFSBELOW +syn keyword upstreamdat_Parameter NODATAOK +syn keyword upstreamdat_Parameter NODIRFORINCREMENTAL +syn keyword upstreamdat_Parameter NODIRFORINCREMENTAL +syn keyword upstreamdat_Parameter NONFILEDATABITMAP +syn keyword upstreamdat_Parameter NONFILEDATABITMAP +syn keyword upstreamdat_Parameter NOPOINTRESTORE +syn keyword upstreamdat_Parameter NOSPECINHERITANCE +syn keyword upstreamdat_Parameter NOTIFYEVENTS +syn keyword upstreamdat_Parameter NOTIFYFAILUREATTACHMENT +syn keyword upstreamdat_Parameter NOTIFYSUCCESSATTACHMENT +syn keyword upstreamdat_Parameter NOTIFYTARGETS +syn keyword upstreamdat_Parameter NOUIDGIDNAMES +syn keyword upstreamdat_Parameter NOUIDGIDNAMES +syn keyword upstreamdat_Parameter NOVELLMIGRATE +syn keyword upstreamdat_Parameter NOVELLMIGRATE +syn keyword upstreamdat_Parameter NOVELLMIGRATEADDEXT +syn keyword upstreamdat_Parameter NOVELLMIGRATEADDEXT +syn keyword upstreamdat_Parameter NOVELLPROFILE +syn keyword upstreamdat_Parameter NOVELLRECALL +syn keyword upstreamdat_Parameter NTFSADDPERMISSION +syn keyword upstreamdat_Parameter NTFSADDPERMISSION +syn keyword upstreamdat_Parameter NTREGRESTORE +syn keyword upstreamdat_Parameter OSTYPE +syn keyword upstreamdat_Parameter OUTPORT +syn keyword upstreamdat_Parameter PACKFLUSHAFTERFILE +syn keyword upstreamdat_Parameter PACKRECSIZE +syn keyword upstreamdat_Parameter PARAMETER +syn keyword upstreamdat_Parameter PASSWORD +syn keyword upstreamdat_Parameter PATHNAME +syn keyword upstreamdat_Parameter PATHNAME +syn keyword upstreamdat_Parameter PERFORMBITMAP +syn keyword upstreamdat_Parameter PERFORMNUMRECORDS +syn keyword upstreamdat_Parameter PERFORMRECORDSIZE +syn keyword upstreamdat_Parameter PLUGIN +syn keyword upstreamdat_Parameter PLUGIN +syn keyword upstreamdat_Parameter PLUGINPARAMETERS +syn keyword upstreamdat_Parameter PLUGINPARAMETERS +syn keyword upstreamdat_Parameter POSTJOB +syn keyword upstreamdat_Parameter PREJOB +syn keyword upstreamdat_Parameter PRTYCLASS +syn keyword upstreamdat_Parameter PRTYLEVEL +syn keyword upstreamdat_Parameter RECALLCLEANUP +syn keyword upstreamdat_Parameter RECALLOFFLINEFILES +syn keyword upstreamdat_Parameter RECALLOFFLINEFILES +syn keyword upstreamdat_Parameter RECORDSIZE +syn keyword upstreamdat_Parameter REMOTEADDR +syn keyword upstreamdat_Parameter REMOTEAPPLPREF +syn keyword upstreamdat_Parameter REMOTEAPPLRETRY +syn keyword upstreamdat_Parameter REMOTECONNECTTYPE +syn keyword upstreamdat_Parameter REMOTEFLAGS +syn keyword upstreamdat_Parameter REMOTEIPADAPTER +syn keyword upstreamdat_Parameter REMOTELOCALPARAMETERS +syn keyword upstreamdat_Parameter REMOTELOGMODE +syn keyword upstreamdat_Parameter REMOTELUNAME +syn keyword upstreamdat_Parameter REMOTEMAXRETRIES +syn keyword upstreamdat_Parameter REMOTEMODENAME +syn keyword upstreamdat_Parameter REMOTEPARAMETERFILE +syn keyword upstreamdat_Parameter REMOTEPORT +syn keyword upstreamdat_Parameter REMOTEREQUEST +syn keyword upstreamdat_Parameter REMOTERESTART +syn keyword upstreamdat_Parameter REMOTEROUTE +syn keyword upstreamdat_Parameter REMOTETARGETNAME +syn keyword upstreamdat_Parameter REMOTETCP +syn keyword upstreamdat_Parameter REMOTETIMEOUT +syn keyword upstreamdat_Parameter REMOTETMAXRETRY +syn keyword upstreamdat_Parameter REMOTETPN +syn keyword upstreamdat_Parameter REMOTEUSAPPL +syn keyword upstreamdat_Parameter REMOTEVERIFY +syn keyword upstreamdat_Parameter REMOTEWTOCOMP +syn keyword upstreamdat_Parameter REPORTNAME +syn keyword upstreamdat_Parameter REPORTOPTIONS +syn keyword upstreamdat_Parameter RESTARTLASTFILE +syn keyword upstreamdat_Parameter RESTART +syn keyword upstreamdat_Parameter RESTARTTYPE +syn keyword upstreamdat_Parameter RESTARTVERSIONDATE +syn keyword upstreamdat_Parameter RESTOREARCHIVEBIT +syn keyword upstreamdat_Parameter RESTORECHECKPOINT +syn keyword upstreamdat_Parameter RESTOREDATELIMIT +syn keyword upstreamdat_Parameter RESTOREDATELIMIT +syn keyword upstreamdat_Parameter RESTOREFILEFAIL +syn keyword upstreamdat_Parameter RESTOREMOUNTPOINTS +syn keyword upstreamdat_Parameter RESTOREMOUNTPOINTS +syn keyword upstreamdat_Parameter RESTORESEGMENTS +syn keyword upstreamdat_Parameter RESTORESEGMENTS +syn keyword upstreamdat_Parameter RESTORETODIFFFS +syn keyword upstreamdat_Parameter RETAIN +syn keyword upstreamdat_Parameter RETAIN +syn keyword upstreamdat_Parameter ROOTENTRY +syn keyword upstreamdat_Parameter ROOTENTRY +syn keyword upstreamdat_Parameter SAN +syn keyword upstreamdat_Parameter SCHEDULENAME +syn keyword upstreamdat_Parameter SEGMENTEDFILESIZE +syn keyword upstreamdat_Parameter SEGMENTEDFILESIZE +syn keyword upstreamdat_Parameter SEGMENTSIZE +syn keyword upstreamdat_Parameter SEGMENTSIZE +syn keyword upstreamdat_Parameter SENDHOSTDETAILS +syn keyword upstreamdat_Parameter SINGLEFS +syn keyword upstreamdat_Parameter SIZETRC +syn keyword upstreamdat_Parameter SKIP +syn keyword upstreamdat_Parameter SKIPBACKUPSCAN +syn keyword upstreamdat_Parameter SKIPOLD +syn keyword upstreamdat_Parameter SKIPOLD +syn keyword upstreamdat_Parameter SMSTARGETSERVICENAME +syn keyword upstreamdat_Parameter SMSTSA +syn keyword upstreamdat_Parameter SOLO +syn keyword upstreamdat_Parameter SORTBACKUP +syn keyword upstreamdat_Parameter SOSDISK +syn keyword upstreamdat_Parameter SOSDISK +syn keyword upstreamdat_Parameter SOSTIMESTAMP +syn keyword upstreamdat_Parameter SOSTIMESTAMP +syn keyword upstreamdat_Parameter SOSTIMESTAMPPATH +syn keyword upstreamdat_Parameter SOSTIMESTAMPPATH +syn keyword upstreamdat_Parameter SPECNUMBER +syn keyword upstreamdat_Parameter SPECNUMBER +syn keyword upstreamdat_Parameter SPECTYPE +syn keyword upstreamdat_Parameter SPECTYPE +syn keyword upstreamdat_Parameter STARTTIME +syn keyword upstreamdat_Parameter STORAGETYPE +syn keyword upstreamdat_Parameter SUBDIRECTORIES +syn keyword upstreamdat_Parameter SUBDIRECTORIES +syn keyword upstreamdat_Parameter SWITCHTOTAPEMB +syn keyword upstreamdat_Parameter TCPADDRESS +syn keyword upstreamdat_Parameter TCPTIMEOUT +syn keyword upstreamdat_Parameter TIMEOVERRIDE +syn keyword upstreamdat_Parameter TRACE +syn keyword upstreamdat_Parameter TRANSLATE +syn keyword upstreamdat_Parameter ULTRACOMP +syn keyword upstreamdat_Parameter ULTREG +syn keyword upstreamdat_Parameter ULTUPD +syn keyword upstreamdat_Parameter UNCMACHINEALIAS +syn keyword upstreamdat_Parameter UNCMACHINEALIAS +syn keyword upstreamdat_Parameter USEALEBRA +syn keyword upstreamdat_Parameter USECONTROLFILE +syn keyword upstreamdat_Parameter USEGID +syn keyword upstreamdat_Parameter USERID +syn keyword upstreamdat_Parameter USEUID +syn keyword upstreamdat_Parameter USNOUIDGIDERRORS +syn keyword upstreamdat_Parameter UTF8 +syn keyword upstreamdat_Parameter VAULTNUMBER +syn keyword upstreamdat_Parameter VERSIONDATE +syn keyword upstreamdat_Parameter WRITESPARSE +syn keyword upstreamdat_Parameter XFERECORDSIZE +syn keyword upstreamdat_Parameter XFERRECSEP +syn keyword upstreamdat_Parameter XFERRECUSECR + +" File Specs: +syn match upstreamdat_Filespec /file spec\c \d\{1,3}.*/ + +" Comments: +syn match upstreamdat_Comment /^#.*/ + +" List Of Parameters: +syn region upstreamdat_Parms start="Current Parameters:" end="End Of Parameters" transparent fold + +hi def link upstreamdat_Parameter Type +"hi def link upstreamdat_Filespec Underlined +hi def link upstreamdat_Comment Comment + +let b:current_syntax = "upstreamrpt" diff --git a/.config/vim/syntax/urlshortcut.vim b/.config/vim/syntax/urlshortcut.vim new file mode 100644 index 0000000..f6cc383 --- /dev/null +++ b/.config/vim/syntax/urlshortcut.vim @@ -0,0 +1,14 @@ +" Vim syntax file +" Language: MS Windows URL shortcut file +" Maintainer: ObserverOfTime +" LastChange: 2023-06-04 + +" Quit when a syntax file was already loaded. +if exists("b:current_syntax") + finish +endif + +" Just use the dosini syntax for now +runtime! syntax/dosini.vim + +let b:current_syntax = "urlshortcut" diff --git a/.config/vim/syntax/usserverlog.vim b/.config/vim/syntax/usserverlog.vim new file mode 100644 index 0000000..34a7e3d --- /dev/null +++ b/.config/vim/syntax/usserverlog.vim @@ -0,0 +1,60 @@ +" Vim syntax file +" Language: Innovation Data Processing usserver.log file +" Maintainer: Rob Owens +" Latest Revision: 2013-09-19 + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Date: +syn match usserverlog_Date /\u\l\l \u\l\l\s\{1,2}\d\{1,2} \d\d:\d\d:\d\d \d\d\d\d/ +" Msg Types: +syn match usserverlog_MsgD /Msg #\(Agt\|PC\|Srv\)\d\{4,5}D/ nextgroup=usserverlog_Process skipwhite +syn match usserverlog_MsgE /Msg #\(Agt\|PC\|Srv\)\d\{4,5}E/ nextgroup=usserverlog_Process skipwhite +syn match usserverlog_MsgI /Msg #\(Agt\|PC\|Srv\)\d\{4,5}I/ nextgroup=usserverlog_Process skipwhite +syn match usserverlog_MsgW /Msg #\(Agt\|PC\|Srv\)\d\{4,5}W/ nextgroup=usserverlog_Process skipwhite +" Processes: +syn region usserverlog_Process start="(" end=")" contained +" IP Address: +syn match usserverlog_IPaddr /\( \|(\)\zs\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/ +" Profile: +syn match usserverlog_Profile /Using default configuration for profile \zs\S\{1,8}\ze/ +syn match usserverlog_Profile /Now running profile \zs\S\{1,8}\ze/ +syn match usserverlog_Profile /in profile set \zs\S\{1,8}\ze/ +syn match usserverlog_Profile /Migrate disk backup from profile \zs\S\{1,8}\ze/ +syn match usserverlog_Profile /Using profile prefix for profile \zs\S\{1,8}\ze/ +syn match usserverlog_Profile /Add\/update profile \zs\S\{1,8}\ze/ +syn match usserverlog_Profile /Profileset=\zs\S\{1,8}\ze,/ +syn match usserverlog_Profile /profileset=\zs\S\{1,8}\ze/ +syn match usserverlog_Profile /Vault \(disk\|tape\) backup to vault \d\{1,4} from profile \zs\S\{1,8}\ze/ +syn match usserverlog_Profile /Profile name \zs\"\S\{1,8}\"/ +syn match usserverlog_Profile / Profile: \zs\S\{1,8}/ +syn match usserverlog_Profile / Profile: \zs\S\{1,8}\ze, / +syn match usserverlog_Profile /, profile: \zs\S\{1,8}\ze,/ +syn match usserverlog_Profile /Expecting Profile: \zs\S\{1,8}\ze,/ +syn match usserverlog_Profile /found Profile: \zs\S\{1,8}\ze,/ +syn match usserverlog_Profile /Profile \zs\S\{1,8} \zeis a member of group: / +syn match upstreamlog_Profile /Backup Profile: \zs\S\{1,8}\ze Version date/ +syn match upstreamlog_Profile /Backup profile: \zs\S\{1,8}\ze Version date/ +syn match usserverlog_Profile /Full of \zs\S\{1,8}\ze$/ +syn match usserverlog_Profile /Incr. of \zs\S\{1,8}\ze$/ +syn match usserverlog_Profile /Profile=\zs\S\{1,8}\ze,/ +" Target: +syn region usserverlog_Target start="Computer: \zs" end="\ze[\]\)]" +syn region usserverlog_Target start="Computer name \zs\"" end="\"\ze" +syn region usserverlog_Target start="Registration add request successful \zs" end="$" +syn region usserverlog_Target start="request to registered name \zs" end=" " +syn region usserverlog_Target start=", sending to \zs" end="$" + +hi def link usserverlog_Date Underlined +hi def link usserverlog_MsgD Type +hi def link usserverlog_MsgE Error +hi def link usserverlog_MsgW Constant +hi def link usserverlog_Process Statement +hi def link usserverlog_IPaddr Identifier +hi def link usserverlog_Profile Identifier +hi def link usserverlog_Target Identifier + +let b:current_syntax = "usserverlog" diff --git a/.config/vim/syntax/usw2kagtlog.vim b/.config/vim/syntax/usw2kagtlog.vim new file mode 100644 index 0000000..a112340 --- /dev/null +++ b/.config/vim/syntax/usw2kagtlog.vim @@ -0,0 +1,54 @@ +" Vim syntax file +" Language: Innovation Data Processing USW2KAgt.log file +" Maintainer: Rob Owens +" Latest Revision: 2014-04-01 + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Date: +syn match usw2kagtlog_Date /\u\l\l \u\l\l\s\{1,2}\d\{1,2} \d\d:\d\d:\d\d \d\d\d\d/ +" Msg Types: +syn match usw2kagtlog_MsgD /Msg #\(Agt\|PC\|Srv\)\d\{4,5}D/ nextgroup=usw2kagtlog_Process skipwhite +syn match usw2kagtlog_MsgE /Msg #\(Agt\|PC\|Srv\)\d\{4,5}E/ nextgroup=usw2kagtlog_Process skipwhite +syn match usw2kagtlog_MsgI /Msg #\(Agt\|PC\|Srv\)\d\{4,5}I/ nextgroup=usw2kagtlog_Process skipwhite +syn match usw2kagtlog_MsgW /Msg #\(Agt\|PC\|Srv\)\d\{4,5}W/ nextgroup=usw2kagtlog_Process skipwhite +" Processes: +syn region usw2kagtlog_Process start="(" end=")" contained +"syn region usw2kagtlog_Process start="Starting the processing for a \zs\"" end="\ze client request" +"syn region usw2kagtlog_Process start="Ending the processing for a \zs\"" end="\ze client request" +"syn region usw2kagtlog_Process start="Starting the processing for a \zs\"" end="\ze client\s\{0,1}\r\{0,1}\s\{1,9}request" +"syn region usw2kagtlog_Process start="Ending the processing for a \zs\"" end="\ze client\s\{0,1}\r\{0,1}\s\{1,9}request" +syn region usw2kagtlog_Process start="Starting the processing for a \zs\"" end="\ze client" +syn region usw2kagtlog_Process start="Ending the processing for a \zs\"" end="\ze client" +" IP Address: +syn match usw2kagtlog_IPaddr / \d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/ +" Profile: + +syn match usw2kagtlog_Profile /Profile name \zs\"\S\{1,8}\"/ +syn match usw2kagtlog_Profile / Profile: \zs\S\{1,8}/ +syn match usw2kagtlog_Profile / Profile: \zs\S\{1,8}\ze, / +syn match upstreamlog_Profile /Backup Profile: \zs\S\{1,8}\ze Version date/ +syn match upstreamlog_Profile /Backup profile: \zs\S\{1,8}\ze Version date/ +syn match usw2kagtlog_Profile /Full of \zs\S\{1,8}\ze$/ +syn match usw2kagtlog_Profile /Incr. of \zs\S\{1,8}\ze$/ +syn match usw2kagtlog_Profile /profile name "\zs\S\{1,8}\ze"/ +" Target: +syn region usw2kagtlog_Target start="Computer: \zs" end="\ze[\]\)]" +syn region usw2kagtlog_Target start="Computer name \zs\"" end="\"\ze" +" Agent Keywords: +syn keyword usw2kagtlog_Agentword opened closed + +hi def link usw2kagtlog_Date Underlined +hi def link usw2kagtlog_MsgD Type +hi def link usw2kagtlog_MsgE Error +hi def link usw2kagtlog_MsgW Constant +hi def link usw2kagtlog_Process Statement +hi def link usw2kagtlog_IPaddr Identifier +hi def link usw2kagtlog_Profile Identifier +hi def link usw2kagtlog_Target Identifier +hi def link usw2kagtlog_Agentword Special + +let b:current_syntax = "usw2kagentlog" diff --git a/.config/vim/syntax/valgrind.vim b/.config/vim/syntax/valgrind.vim new file mode 100644 index 0000000..a9b4a8c --- /dev/null +++ b/.config/vim/syntax/valgrind.vim @@ -0,0 +1,110 @@ +" Vim syntax file +" Language: Valgrind Memory Debugger Output +" Maintainer: Roger Luethi +" Program URL: http://devel-home.kde.org/~sewardj/ +" Last Change: 2019 Jul 24 +" +" Notes: mostly based on strace.vim and xml.vim +" +" Contributors: Christoph Gysin + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +" Lines can be long with demangled c++ functions. +setlocal synmaxcol=8000 + +syn case match +syn sync minlines=50 + +syn match valgrindSpecLine "^[+-]\{2}\d\+[+-]\{2}.*$" + +syn region valgrindRegion + \ start=+^==\z(\d\+\)== \w.*$+ + \ skip=+^==\z1==\( \| .*\| \S.*\)$+ + \ end=+^+ + \ fold + \ keepend + \ contains=valgrindPidChunk,valgrindLine + +syn region valgrindPidChunk + \ start=+^==\zs+ + \ end=+\ze==+ + \ contained + \ contains=valgrindPid0,valgrindPid1,valgrindPid2,valgrindPid3,valgrindPid4,valgrindPid5,valgrindPid6,valgrindPid7,valgrindPid8,valgrindPid9 + \ keepend + +syn match valgrindPid0 "\d\+0=" contained +syn match valgrindPid1 "\d\+1=" contained +syn match valgrindPid2 "\d\+2=" contained +syn match valgrindPid3 "\d\+3=" contained +syn match valgrindPid4 "\d\+4=" contained +syn match valgrindPid5 "\d\+5=" contained +syn match valgrindPid6 "\d\+6=" contained +syn match valgrindPid7 "\d\+7=" contained +syn match valgrindPid8 "\d\+8=" contained +syn match valgrindPid9 "\d\+9=" contained + +syn region valgrindLine + \ start=+\(^==\d\+== \)\@<=+ + \ end=+$+ + \ keepend + \ contained + \ contains=valgrindOptions,valgrindMsg,valgrindLoc + +syn match valgrindOptions "[ ]\{3}-.*$" contained + +syn match valgrindMsg "\S.*$" contained + \ contains=valgrindError,valgrindNote,valgrindSummary +syn match valgrindError "\(Invalid\|\d\+ errors\|.* definitely lost\).*$" contained +syn match valgrindNote ".*still reachable.*" contained +syn match valgrindSummary ".*SUMMARY:" contained + +syn match valgrindLoc "\s\+\(by\|at\|Address\).*$" contained + \ contains=valgrindAt,valgrindAddr,valgrindFunc,valgrindBin,valgrindSrc +syn match valgrindAt "at\s\@=" contained +syn match valgrindAddr "\W\zs0x\x\+" contained + +syn match valgrindFunc ": \zs\h[a-zA-Z0-9_:\[\]()<>&*+\-,=%!|^ @.]*\ze([^)]*)$" contained +syn match valgrindBin "(\(with\)\=in \zs\S\+)\@=" contained +syn match valgrindSrc "(\zs[^)]*:\d\+)\@=" contained + +" Define the default highlighting + +hi def link valgrindSpecLine Type +"hi def link valgrindRegion Special + +hi def link valgrindPid0 Special +hi def link valgrindPid1 Comment +hi def link valgrindPid2 Type +hi def link valgrindPid3 Constant +hi def link valgrindPid4 Number +hi def link valgrindPid5 Identifier +hi def link valgrindPid6 Statement +hi def link valgrindPid7 Error +hi def link valgrindPid8 LineNr +hi def link valgrindPid9 Normal +"hi def link valgrindLine Special + +hi def link valgrindOptions Type +"hi def link valgrindMsg Special +"hi def link valgrindLoc Special + +hi def link valgrindError Special +hi def link valgrindNote Comment +hi def link valgrindSummary Type + +hi def link valgrindAt Special +hi def link valgrindAddr Number +hi def link valgrindFunc Type +hi def link valgrindBin Comment +hi def link valgrindSrc Statement + +let b:current_syntax = "valgrind" + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/.config/vim/syntax/vb.vim b/.config/vim/syntax/vb.vim new file mode 100644 index 0000000..607f613 --- /dev/null +++ b/.config/vim/syntax/vb.vim @@ -0,0 +1,375 @@ +" Vim syntax file +" Language: Visual Basic +" Maintainer: Doug Kearns +" Former Maintainer: Tim Chase +" Former Maintainer: Robert M. Cortopassi +" (tried multiple times to contact, but email bounced) +" Last Change: +" 2021 Nov 26 Incorporated additions from Doug Kearns +" 2005 May 25 Synched with work by Thomas Barthel +" 2004 May 30 Added a few keywords + +" This was thrown together after seeing numerous requests on the +" VIM and VIM-DEV mailing lists. It is by no means complete. +" Send comments, suggestions and requests to the maintainer. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" VB is case insensitive +syn case ignore + +syn keyword vbConditional If Then ElseIf Else Select Case + +syn keyword vbOperator AddressOf And ByRef ByVal Eqv Imp In +syn keyword vbOperator Is Like Mod Not Or To Xor + +syn match vbOperator "[()+.,\-/*=&]" +syn match vbOperator "[<>]=\=" +syn match vbOperator "<>" +syn match vbOperator "\s\+_$" + +syn keyword vbBoolean True False +syn keyword vbConst Null Nothing + +syn keyword vbRepeat Do For ForEach Loop Next +syn keyword vbRepeat Step To Until Wend While + +syn keyword vbEvents AccessKeyPress Activate ActiveRowChanged +syn keyword vbEvents AfterAddFile AfterChangeFileName AfterCloseFile +syn keyword vbEvents AfterColEdit AfterColUpdate AfterDelete +syn keyword vbEvents AfterInsert AfterLabelEdit AfterRemoveFile +syn keyword vbEvents AfterUpdate AfterWriteFile AmbientChanged +syn keyword vbEvents ApplyChanges Associate AsyncProgress +syn keyword vbEvents AsyncReadComplete AsyncReadProgress AxisActivated +syn keyword vbEvents AxisLabelActivated AxisLabelSelected +syn keyword vbEvents AxisLabelUpdated AxisSelected AxisTitleActivated +syn keyword vbEvents AxisTitleSelected AxisTitleUpdated AxisUpdated +syn keyword vbEvents BeforeClick BeforeColEdit BeforeColUpdate +syn keyword vbEvents BeforeConnect BeforeDelete BeforeInsert +syn keyword vbEvents BeforeLabelEdit BeforeLoadFile BeforeUpdate +syn keyword vbEvents BeginRequest BeginTrans ButtonClick +syn keyword vbEvents ButtonCompleted ButtonDropDown ButtonGotFocus +syn keyword vbEvents ButtonLostFocus CallbackKeyDown Change Changed +syn keyword vbEvents ChartActivated ChartSelected ChartUpdated Click +syn keyword vbEvents Close CloseQuery CloseUp ColEdit ColResize +syn keyword vbEvents Collapse ColumnClick CommitTrans Compare +syn keyword vbEvents ConfigChageCancelled ConfigChanged +syn keyword vbEvents ConfigChangedCancelled Connect ConnectionRequest +syn keyword vbEvents CurrentRecordChanged DECommandAdded +syn keyword vbEvents DECommandPropertyChanged DECommandRemoved +syn keyword vbEvents DEConnectionAdded DEConnectionPropertyChanged +syn keyword vbEvents DEConnectionRemoved DataArrival DataChanged +syn keyword vbEvents DataUpdated DateClicked DblClick Deactivate +syn keyword vbEvents DevModeChange DeviceArrival DeviceOtherEvent +syn keyword vbEvents DeviceQueryRemove DeviceQueryRemoveFailed +syn keyword vbEvents DeviceRemoveComplete DeviceRemovePending +syn keyword vbEvents Disconnect DisplayChanged Dissociate +syn keyword vbEvents DoGetNewFileName Done DonePainting DownClick +syn keyword vbEvents DragDrop DragOver DropDown EditProperty EditQuery +syn keyword vbEvents EndRequest EnterCell EnterFocus ExitFocus Expand +syn keyword vbEvents FontChanged FootnoteActivated FootnoteSelected +syn keyword vbEvents FootnoteUpdated Format FormatSize GotFocus +syn keyword vbEvents HeadClick HeightChanged Hide InfoMessage +syn keyword vbEvents IniProperties InitProperties Initialize +syn keyword vbEvents ItemActivated ItemAdded ItemCheck ItemClick +syn keyword vbEvents ItemReloaded ItemRemoved ItemRenamed +syn keyword vbEvents ItemSeletected KeyDown KeyPress KeyUp LeaveCell +syn keyword vbEvents LegendActivated LegendSelected LegendUpdated +syn keyword vbEvents LinkClose LinkError LinkExecute LinkNotify +syn keyword vbEvents LinkOpen Load LostFocus MouseDown MouseMove +syn keyword vbEvents MouseUp NodeCheck NodeClick OLECompleteDrag +syn keyword vbEvents OLEDragDrop OLEDragOver OLEGiveFeedback OLESetData +syn keyword vbEvents OLEStartDrag ObjectEvent ObjectMove OnAddNew +syn keyword vbEvents OnComm Paint PanelClick PanelDblClick PathChange +syn keyword vbEvents PatternChange PlotActivated PlotSelected +syn keyword vbEvents PlotUpdated PointActivated PointLabelActivated +syn keyword vbEvents PointLabelSelected PointLabelUpdated PointSelected +syn keyword vbEvents PointUpdated PowerQuerySuspend PowerResume +syn keyword vbEvents PowerStatusChanged PowerSuspend ProcessTag +syn keyword vbEvents ProcessingTimeout QueryChangeConfig QueryClose +syn keyword vbEvents QueryComplete QueryCompleted QueryTimeout +syn keyword vbEvents QueryUnload ReadProperties RepeatedControlLoaded +syn keyword vbEvents RepeatedControlUnloaded Reposition +syn keyword vbEvents RequestChangeFileName RequestWriteFile Resize +syn keyword vbEvents ResultsChanged RetainedProject RollbackTrans +syn keyword vbEvents RowColChange RowCurrencyChange RowResize +syn keyword vbEvents RowStatusChanged Scroll SelChange SelectionChanged +syn keyword vbEvents SendComplete SendProgress SeriesActivated +syn keyword vbEvents SeriesSelected SeriesUpdated SettingChanged Show +syn keyword vbEvents SplitChange Start StateChanged StatusUpdate +syn keyword vbEvents SysColorsChanged Terminate TimeChanged Timer +syn keyword vbEvents TitleActivated TitleSelected TitleUpdated +syn keyword vbEvents UnboundAddData UnboundDeleteRow +syn keyword vbEvents UnboundGetRelativeBookmark UnboundReadData +syn keyword vbEvents UnboundWriteData Unformat Unload UpClick Updated +syn keyword vbEvents UserEvent Validate ValidationError +syn keyword vbEvents VisibleRecordChanged WillAssociate WillChangeData +syn keyword vbEvents WillDissociate WillExecute WillUpdateRows +syn keyword vbEvents WriteProperties + + +syn keyword vbFunction Abs Array Asc AscB AscW Atn Avg BOF CBool CByte +syn keyword vbFunction CCur CDate CDbl CInt CLng CSng CStr CVDate CVErr +syn keyword vbFunction CVar CallByName Cdec Choose Chr ChrB ChrW Command +syn keyword vbFunction Cos Count CreateObject CurDir DDB Date DateAdd +syn keyword vbFunction DateDiff DatePart DateSerial DateValue Day Dir +syn keyword vbFunction DoEvents EOF Environ Error Exp FV FileAttr +syn keyword vbFunction FileDateTime FileLen FilterFix Fix Format +syn keyword vbFunction FormatCurrency FormatDateTime FormatNumber +syn keyword vbFunction FormatPercent FreeFile GetAllStrings GetAttr +syn keyword vbFunction GetAutoServerSettings GetObject GetSetting Hex +syn keyword vbFunction Hour IIf IMEStatus IPmt InStr Input InputB +syn keyword vbFunction InputBox InstrB Int IsArray IsDate IsEmpty IsError +syn keyword vbFunction IsMissing IsNull IsNumeric IsObject Join LBound +syn keyword vbFunction LCase LOF LTrim Left LeftB Len LenB LoadPicture +syn keyword vbFunction LoadResData LoadResPicture LoadResString Loc Log +syn keyword vbFunction MIRR Max Mid MidB Min Minute Month MonthName +syn keyword vbFunction MsgBox NPV NPer Now Oct PPmt PV Partition Pmt +syn keyword vbFunction QBColor RGB RTrim Rate Replace Right RightB Rnd +syn keyword vbFunction Round SLN SYD Second Seek Sgn Shell Sin Space Spc +syn keyword vbFunction Split Sqr StDev StDevP Str StrComp StrConv +syn keyword vbFunction StrReverse String Sum Switch Tab Tan Time +syn keyword vbFunction TimeSerial TimeValue Timer Trim TypeName UBound +syn keyword vbFunction UCase Val Var VarP VarType Weekday WeekdayName +syn keyword vbFunction Year + +syn keyword vbMethods AboutBox Accept Activate Add AddCustom AddFile +syn keyword vbMethods AddFromFile AddFromGuid AddFromString +syn keyword vbMethods AddFromTemplate AddItem AddNew AddToAddInToolbar +syn keyword vbMethods AddToolboxProgID Append AppendAppendChunk +syn keyword vbMethods AppendChunk Arrange Assert AsyncRead BatchUpdate +syn keyword vbMethods BeginQueryEdit BeginTrans Bind BuildPath +syn keyword vbMethods CanPropertyChange Cancel CancelAsyncRead +syn keyword vbMethods CancelBatch CancelUpdate CaptureImage CellText +syn keyword vbMethods CellValue Circle Clear ClearFields ClearSel +syn keyword vbMethods ClearSelCols ClearStructure Clone Close Cls +syn keyword vbMethods ColContaining CollapseAll ColumnSize CommitTrans +syn keyword vbMethods CompactDatabase Compose Connect Copy CopyFile +syn keyword vbMethods CopyFolder CopyQueryDef Count CreateDatabase +syn keyword vbMethods CreateDragImage CreateEmbed CreateField +syn keyword vbMethods CreateFolder CreateGroup CreateIndex CreateLink +syn keyword vbMethods CreatePreparedStatement CreatePropery CreateQuery +syn keyword vbMethods CreateQueryDef CreateRelation CreateTableDef +syn keyword vbMethods CreateTextFile CreateToolWindow CreateUser +syn keyword vbMethods CreateWorkspace Customize Cut Delete +syn keyword vbMethods DeleteColumnLabels DeleteColumns DeleteFile +syn keyword vbMethods DeleteFolder DeleteLines DeleteRowLabels +syn keyword vbMethods DeleteRows DeselectAll DesignerWindow DoVerb Drag +syn keyword vbMethods Draw DriveExists Edit EditCopy EditPaste EndDoc +syn keyword vbMethods EnsureVisible EstablishConnection Execute Exists +syn keyword vbMethods Expand Export ExportReport ExtractIcon Fetch +syn keyword vbMethods FetchVerbs FileExists Files FillCache Find +syn keyword vbMethods FindFirst FindItem FindLast FindNext FindPrevious +syn keyword vbMethods FolderExists Forward GetAbsolutePathName +syn keyword vbMethods GetBaseName GetBookmark GetChunk GetClipString +syn keyword vbMethods GetData GetDrive GetDriveName GetFile GetFileName +syn keyword vbMethods GetFirstVisible GetFolder GetFormat GetHeader +syn keyword vbMethods GetLineFromChar GetNumTicks GetParentFolderName +syn keyword vbMethods GetRows GetSelectedPart GetSelection +syn keyword vbMethods GetSpecialFolder GetTempName GetText +syn keyword vbMethods GetVisibleCount GoBack GoForward Hide HitTest +syn keyword vbMethods HoldFields Idle Import InitializeLabels Insert +syn keyword vbMethods InsertColumnLabels InsertColumns InsertFile +syn keyword vbMethods InsertLines InsertObjDlg InsertRowLabels +syn keyword vbMethods InsertRows Item Keys KillDoc Layout Line Lines +syn keyword vbMethods LinkExecute LinkPoke LinkRequest LinkSend Listen +syn keyword vbMethods LoadFile LoadResData LoadResPicture LoadResString +syn keyword vbMethods LogEvent MakeCompileFile MakeCompiledFile +syn keyword vbMethods MakeReplica MoreResults Move MoveData MoveFile +syn keyword vbMethods MoveFirst MoveFolder MoveLast MoveNext +syn keyword vbMethods MovePrevious NavigateTo NewPage NewPassword +syn keyword vbMethods NextRecordset OLEDrag OnAddinsUpdate OnConnection +syn keyword vbMethods OnDisconnection OnStartupComplete Open +syn keyword vbMethods OpenAsTextStream OpenConnection OpenDatabase +syn keyword vbMethods OpenQueryDef OpenRecordset OpenResultset OpenURL +syn keyword vbMethods Overlay PSet PaintPicture PastSpecialDlg Paste +syn keyword vbMethods PeekData Play Point PopulatePartial PopupMenu +syn keyword vbMethods Print PrintForm PrintReport PropertyChanged Quit +syn keyword vbMethods Raise RandomDataFill RandomFillColumns +syn keyword vbMethods RandomFillRows ReFill Read ReadAll ReadFromFile +syn keyword vbMethods ReadLine ReadProperty Rebind Refresh RefreshLink +syn keyword vbMethods RegisterDatabase ReleaseInstance Reload Remove +syn keyword vbMethods RemoveAddInFromToolbar RemoveAll RemoveItem Render +syn keyword vbMethods RepairDatabase ReplaceLine Reply ReplyAll Requery +syn keyword vbMethods ResetCustom ResetCustomLabel ResolveName +syn keyword vbMethods RestoreToolbar Resync Rollback RollbackTrans +syn keyword vbMethods RowBookmark RowContaining RowTop Save SaveAs +syn keyword vbMethods SaveFile SaveToFile SaveToOle1File SaveToolbar +syn keyword vbMethods Scale ScaleX ScaleY Scroll SelPrint SelectAll +syn keyword vbMethods SelectPart Send SendData Set SetAutoServerSettings +syn keyword vbMethods SetData SetFocus SetOption SetSelection SetSize +syn keyword vbMethods SetText SetViewport Show ShowColor ShowFont +syn keyword vbMethods ShowHelp ShowOpen ShowPrinter ShowSave +syn keyword vbMethods ShowWhatsThis SignOff SignOn Size Skip SkipLine +syn keyword vbMethods Span Split SplitContaining StartLabelEdit +syn keyword vbMethods StartLogging Stop Synchronize Tag TextHeight +syn keyword vbMethods TextWidth ToDefaults Trace TwipsToChartPart +syn keyword vbMethods TypeByChartType URLFor Update UpdateControls +syn keyword vbMethods UpdateRecord UpdateRow Upto ValidateControls Value +syn keyword vbMethods WhatsThisMode Write WriteBlankLines WriteLine +syn keyword vbMethods WriteProperty WriteTemplate ZOrder +syn keyword vbMethods rdoCreateEnvironment rdoRegisterDataSource + +syn keyword vbStatement Alias AppActivate As Base Beep Begin Call ChDir +syn keyword vbStatement ChDrive Close Const Date Declare DefBool DefByte +syn keyword vbStatement DefCur DefDate DefDbl DefDec DefInt DefLng DefObj +syn keyword vbStatement DefSng DefStr DefVar Deftype DeleteSetting Dim Do +syn keyword vbStatement Each ElseIf End Enum Erase Error Event Exit +syn keyword vbStatement Explicit FileCopy For ForEach Function Get GoSub +syn keyword vbStatement GoTo Gosub Implements Kill LSet Let Lib LineInput +syn keyword vbStatement Load Lock Loop Mid MkDir Name Next On OnError Open +syn keyword vbStatement Option Preserve Private Property Public Put RSet +syn keyword vbStatement RaiseEvent Randomize ReDim Redim Reset Resume +syn keyword vbStatement Return RmDir SavePicture SaveSetting Seek SendKeys +syn keyword vbStatement Sendkeys Set SetAttr Static Step Stop Sub Time +syn keyword vbStatement Type Unload Unlock Until Wend While Width With +syn keyword vbStatement Write + +syn keyword vbKeyword As Binary ByRef ByVal Date Empty Error Friend Get +syn keyword vbKeyword Input Is Len Lock Me Mid New Nothing Null On +syn keyword vbKeyword Option Optional ParamArray Print Private Property +syn keyword vbKeyword Public PublicNotCreateable OnNewProcessSingleUse +syn keyword vbKeyword InSameProcessMultiUse GlobalMultiUse Resume Seek +syn keyword vbKeyword Set Static Step String Time WithEvents + +syn keyword vbTodo contained TODO + +"Datatypes +syn keyword vbTypes Boolean Byte Currency Date Decimal Double Empty +syn keyword vbTypes Integer Long Object Single String Variant + +"VB defined values +syn keyword vbDefine dbBigInt dbBinary dbBoolean dbByte dbChar +syn keyword vbDefine dbCurrency dbDate dbDecimal dbDouble dbFloat +syn keyword vbDefine dbGUID dbInteger dbLong dbLongBinary dbMemo +syn keyword vbDefine dbNumeric dbSingle dbText dbTime dbTimeStamp +syn keyword vbDefine dbVarBinary + +"VB defined values +syn keyword vbDefine vb3DDKShadow vb3DFace vb3DHighlight vb3DLight +syn keyword vbDefine vb3DShadow vbAbort vbAbortRetryIgnore +syn keyword vbDefine vbActiveBorder vbActiveTitleBar vbAlias +syn keyword vbDefine vbApplicationModal vbApplicationWorkspace +syn keyword vbDefine vbAppTaskManager vbAppWindows vbArchive vbArray +syn keyword vbDefine vbBack vbBinaryCompare vbBlack vbBlue vbBoolean +syn keyword vbDefine vbButtonFace vbButtonShadow vbButtonText vbByte +syn keyword vbDefine vbCalGreg vbCalHijri vbCancel vbCr vbCritical +syn keyword vbDefine vbCrLf vbCurrency vbCyan vbDatabaseCompare +syn keyword vbDefine vbDataObject vbDate vbDecimal vbDefaultButton1 +syn keyword vbDefine vbDefaultButton2 vbDefaultButton3 vbDefaultButton4 +syn keyword vbDefine vbDesktop vbDirectory vbDouble vbEmpty vbError +syn keyword vbDefine vbExclamation vbFirstFourDays vbFirstFullWeek +syn keyword vbDefine vbFirstJan1 vbFormCode vbFormControlMenu +syn keyword vbDefine vbFormFeed vbFormMDIForm vbFriday vbFromUnicode +syn keyword vbDefine vbGrayText vbGreen vbHidden vbHide vbHighlight +syn keyword vbDefine vbHighlightText vbHiragana vbIgnore vbIMEAlphaDbl +syn keyword vbDefine vbIMEAlphaSng vbIMEDisable vbIMEHiragana +syn keyword vbDefine vbIMEKatakanaDbl vbIMEKatakanaSng vbIMEModeAlpha +syn keyword vbDefine vbIMEModeAlphaFull vbIMEModeDisable +syn keyword vbDefine vbIMEModeHangul vbIMEModeHangulFull +syn keyword vbDefine vbIMEModeHiragana vbIMEModeKatakana +syn keyword vbDefine vbIMEModeKatakanaHalf vbIMEModeNoControl +syn keyword vbDefine vbIMEModeOff vbIMEModeOn vbIMENoOp vbIMEOff +syn keyword vbDefine vbIMEOn vbInactiveBorder vbInactiveCaptionText +syn keyword vbDefine vbInactiveTitleBar vbInfoBackground vbInformation +syn keyword vbDefine vbInfoText vbInteger vbKatakana vbKey0 vbKey1 +syn keyword vbDefine vbKey2 vbKey3 vbKey4 vbKey5 vbKey6 vbKey7 vbKey8 +syn keyword vbDefine vbKey9 vbKeyA vbKeyAdd vbKeyB vbKeyBack vbKeyC +syn keyword vbDefine vbKeyCancel vbKeyCapital vbKeyClear vbKeyControl +syn keyword vbDefine vbKeyD vbKeyDecimal vbKeyDelete vbKeyDivide +syn keyword vbDefine vbKeyDown vbKeyE vbKeyEnd vbKeyEscape vbKeyExecute +syn keyword vbDefine vbKeyF vbKeyF1 vbKeyF10 vbKeyF11 vbKeyF12 vbKeyF13 +syn keyword vbDefine vbKeyF14 vbKeyF15 vbKeyF16 vbKeyF2 vbKeyF3 vbKeyF4 +syn keyword vbDefine vbKeyF5 vbKeyF6 vbKeyF7 vbKeyF8 vbKeyF9 vbKeyG +syn keyword vbDefine vbKeyH vbKeyHelp vbKeyHome vbKeyI vbKeyInsert +syn keyword vbDefine vbKeyJ vbKeyK vbKeyL vbKeyLButton vbKeyLeft vbKeyM +syn keyword vbDefine vbKeyMButton vbKeyMenu vbKeyMultiply vbKeyN +syn keyword vbDefine vbKeyNumlock vbKeyNumpad0 vbKeyNumpad1 +syn keyword vbDefine vbKeyNumpad2 vbKeyNumpad3 vbKeyNumpad4 +syn keyword vbDefine vbKeyNumpad5 vbKeyNumpad6 vbKeyNumpad7 +syn keyword vbDefine vbKeyNumpad8 vbKeyNumpad9 vbKeyO vbKeyP +syn keyword vbDefine vbKeyPageDown vbKeyPageUp vbKeyPause vbKeyPrint +syn keyword vbDefine vbKeyQ vbKeyR vbKeyRButton vbKeyReturn vbKeyRight +syn keyword vbDefine vbKeyS vbKeySelect vbKeySeparator vbKeyShift +syn keyword vbDefine vbKeySnapshot vbKeySpace vbKeySubtract vbKeyT +syn keyword vbDefine vbKeyTab vbKeyU vbKeyUp vbKeyV vbKeyW vbKeyX +syn keyword vbDefine vbKeyY vbKeyZ vbLf vbLong vbLowerCase vbMagenta +syn keyword vbDefine vbMaximizedFocus vbMenuBar vbMenuText +syn keyword vbDefine vbMinimizedFocus vbMinimizedNoFocus vbMonday +syn keyword vbDefine vbMsgBox vbMsgBoxHelpButton vbMsgBoxRight +syn keyword vbDefine vbMsgBoxRtlReading vbMsgBoxSetForeground +syn keyword vbDefine vbMsgBoxText vbNarrow vbNewLine vbNo vbNormal +syn keyword vbDefine vbNormalFocus vbNormalNoFocus vbNull vbNullChar +syn keyword vbDefine vbNullString vbObject vbObjectError vbOK +syn keyword vbDefine vbOKCancel vbOKOnly vbProperCase vbQuestion +syn keyword vbDefine vbReadOnly vbRed vbRetry vbRetryCancel vbSaturday +syn keyword vbDefine vbScrollBars vbSingle vbString vbSunday vbSystem +syn keyword vbDefine vbSystemModal vbTab vbTextCompare vbThursday +syn keyword vbDefine vbTitleBarText vbTuesday vbUnicode vbUpperCase +syn keyword vbDefine vbUseSystem vbUseSystemDayOfWeek vbVariant +syn keyword vbDefine vbVerticalTab vbVolume vbWednesday vbWhite vbWide +syn keyword vbDefine vbWindowBackground vbWindowFrame vbWindowText +syn keyword vbDefine vbYellow vbYes vbYesNo vbYesNoCancel + +"Numbers +"integer number, or floating point number without a dot. +syn match vbNumber "\<\d\+\>" +"floating point number, with dot +syn match vbNumber "\<\d\+\.\d*\>" +"floating point number, starting with a dot +syn match vbNumber "\.\d\+\>" +"syn match vbNumber "{[[:xdigit:]-]\+}\|&[hH][[:xdigit:]]\+&" +"syn match vbNumber ":[[:xdigit:]]\+" +"syn match vbNumber "[-+]\=\<\d\+\>" +syn match vbFloat "[-+]\=\<\d\+[eE][\-+]\=\d\+" +syn match vbFloat "[-+]\=\<\d\+\.\d*\([eE][\-+]\=\d\+\)\=" +syn match vbFloat "[-+]\=\<\.\d\+\([eE][\-+]\=\d\+\)\=" + +" String and Character constants +syn region vbString start=+"+ end=+"\|$+ +syn region vbComment start="\(^\|\s\)REM\s" end="$" contains=vbTodo +syn region vbComment start="\(^\|\s\)\'" end="$" contains=vbTodo +syn match vbLineLabel "^\h\w\+:" +syn match vbLineNumber "^\d\+\(:\|\s\|$\)" +syn match vbTypeSpecifier "\<\a\w*[@\$%&!#]"ms=s+1 +syn match vbTypeSpecifier "#[a-zA-Z0-9]"me=e-1 +" Conditional Compilation +syn match vbPreProc "^#const\>" +syn region vbPreProc matchgroup=PreProc start="^#if\>" end="\" transparent contains=TOP +syn region vbPreProc matchgroup=PreProc start="^#elseif\>" end="\" transparent contains=TOP +syn match vbPreProc "^#else\>" +syn match vbPreProc "^#end\s*if\>" + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link vbBoolean Boolean +hi def link vbLineNumber Comment +hi def link vbLineLabel Comment +hi def link vbComment Comment +hi def link vbConditional Conditional +hi def link vbConst Constant +hi def link vbDefine Constant +hi def link vbError Error +hi def link vbFunction Identifier +hi def link vbIdentifier Identifier +hi def link vbNumber Number +hi def link vbFloat Float +hi def link vbMethods PreProc +hi def link vbOperator Operator +hi def link vbRepeat Repeat +hi def link vbString String +hi def link vbStatement Statement +hi def link vbKeyword Statement +hi def link vbEvents Special +hi def link vbTodo Todo +hi def link vbTypes Type +hi def link vbTypeSpecifier Type +hi def link vbPreProc PreProc + +let b:current_syntax = "vb" + +" vim: ts=8 diff --git a/.config/vim/syntax/vdf.vim b/.config/vim/syntax/vdf.vim new file mode 100644 index 0000000..c690b70 --- /dev/null +++ b/.config/vim/syntax/vdf.vim @@ -0,0 +1,54 @@ +" Vim syntax file +" Language: Valve Data Format +" Maintainer: ObserverOfTime +" Filenames: *.vdf +" Last Change: 2022 Sep 15 + +if exists('b:current_syntax') + finish +endif + +let s:cpo_save = &cpoptions +set cpoptions&vim + +" Comment +syn keyword vdfTodo contained TODO FIXME XXX +syn match vdfComment +//.*+ contains=vdfTodo + +" Macro +syn match vdfMacro /^\s*#.*/ + +" Tag +syn region vdfTag start=/"/ skip=/\\"/ end=/"/ + \ nextgroup=vdfValue skipwhite oneline + +" Section +syn region vdfSection matchgroup=vdfBrace + \ start=/{/ end=/}/ transparent fold + \ contains=vdfTag,vdfSection,vdfComment,vdfConditional + +" Conditional +syn match vdfConditional /\[\$\w\{1,1021}\]/ nextgroup=vdfTag + +" Value +syn region vdfValue start=/"/ skip=/\\"/ end=/"/ + \ oneline contained contains=vdfVariable,vdfNumber,vdfEscape +syn region vdfVariable start=/%/ skip=/\\%/ end=/%/ oneline contained +syn match vdfEscape /\\[nt\\"]/ contained +syn match vdfNumber /"-\?\d\+"/ contained + +hi def link vdfBrace Delimiter +hi def link vdfComment Comment +hi def link vdfConditional Constant +hi def link vdfEscape SpecialChar +hi def link vdfMacro Macro +hi def link vdfNumber Number +hi def link vdfTag Keyword +hi def link vdfTodo Todo +hi def link vdfValue String +hi def link vdfVariable Identifier + +let b:current_syntax = 'vdf' + +let &cpoptions = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/vera.vim b/.config/vim/syntax/vera.vim new file mode 100644 index 0000000..b41c0a6 --- /dev/null +++ b/.config/vim/syntax/vera.vim @@ -0,0 +1,348 @@ +" Vim syntax file +" Language: Vera +" Maintainer: Dave Eggum (opine at bluebottle dOt com) +" Last Change: 2005 Dec 19 + +" NOTE: extra white space at the end of the line will be highlighted if you +" add this line to your colorscheme: + +" highlight SpaceError guibg=#204050 + +" (change the value for guibg to any color you like) + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" A bunch of useful Vera keywords +syn keyword veraStatement break return continue fork join terminate +syn keyword veraStatement breakpoint proceed + +syn keyword veraLabel bad_state bad_trans bind constraint coverage_group +syn keyword veraLabel class CLOCK default function interface m_bad_state +syn keyword veraLabel m_bad_trans m_state m_trans program randseq state +syn keyword veraLabel task trans + +syn keyword veraConditional if else case casex casez randcase +syn keyword veraRepeat repeat while for do foreach +syn keyword veraModifier after all any around assoc_size async +syn keyword veraModifier before big_endian bit_normal bit_reverse export +syn keyword veraModifier extends extern little_endian local hdl_node hdl_task +syn keyword veraModifier negedge none packed protected posedge public rules +syn keyword veraModifier shadow soft static super this typedef unpacked var +syn keyword veraModifier vca virtual virtuals wildcard with + +syn keyword veraType reg string enum event bit +syn keyword veraType rand randc integer port prod + +syn keyword veraDeprecated call_func call_task close_conn get_bind get_bind_id +syn keyword veraDeprecated get_conn_err mailbox_receive mailbox_send make_client +syn keyword veraDeprecated make_server simwave_plot up_connections + +" predefined tasks and functions +syn keyword veraTask alloc assoc_index cast_assign cm_coverage +syn keyword veraTask cm_get_coverage cm_get_limit delay error error_mode +syn keyword veraTask exit fclose feof ferror fflush flag fopen fprintf +syn keyword veraTask freadb freadh freadstr get_cycle get_env get_memsize +syn keyword veraTask get_plus_arg getstate get_systime get_time get_time_unit +syn keyword veraTask initstate lock_file mailbox_get mailbox_put os_command +syn keyword veraTask printf prodget prodset psprintf query query_str query_x +syn keyword veraTask rand48 random region_enter region_exit rewind +syn keyword veraTask semaphore_get semaphore_put setstate signal_connect +syn keyword veraTask sprintf srandom sscanf stop suspend_thread sync +syn keyword veraTask timeout trace trigger unit_delay unlock_file urand48 +syn keyword veraTask urandom urandom_range vera_bit_reverse vera_crc +syn keyword veraTask vera_pack vera_pack_big_endian vera_plot +syn keyword veraTask vera_report_profile vera_unpack vera_unpack_big_endian +syn keyword veraTask vsv_call_func vsv_call_task vsv_get_conn_err +syn keyword veraTask vsv_make_client vsv_make_server vsv_up_connections +syn keyword veraTask vsv_wait_for_done vsv_wait_for_input wait_child wait_var + +syn cluster veraOperGroup contains=veraOperator,veraOperParen,veraNumber,veraString,veraOperOk,veraType +" syn match veraOperator "++\|--\|&\|\~&\||\|\~|\|^\|\~^\|\~\|><" +" syn match veraOperator "*\|/\|%\|+\|-\|<<\|>>\|<\|<=\|>\|>=\|!in" +" syn match veraOperator "=?=\|!?=\|==\|!=\|===\|!==\|&\~\|^\~\||\~" +" syn match veraOperator "&&\|||\|=\|+=\|-=\|*=\|/=\|%=\|<<=\|>>=\|&=" +" syn match veraOperator "|=\|^=\|\~&=\|\~|=\|\~^=" + +syn match veraOperator "[&|\~>" +" "hex number +" syn match veraNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" +" syn match veraNumber "\(\<[0-9]\+\|\)'[bdoh][0-9a-fxzA-FXZ_]\+\>" +syn match veraNumber "\<\(\<[0-9]\+\)\?\('[bdoh]\)\?[0-9a-fxz_]\+\>" +" syn match veraNumber "\<[+-]\=[0-9]\+\>" +" Flag the first zero of an octal number as something special +syn match veraOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=veraOctalZero +syn match veraOctalZero display contained "\<0" +syn match veraFloat display contained "\d\+f" +"floating point number, with dot, optional exponent +syn match veraFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" +"floating point number, starting with a dot, optional exponent +syn match veraFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match veraFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" +"hexadecimal floating point number, optional leading digits, with dot, with exponent +syn match veraFloat display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>" +"hexadecimal floating point number, with leading digits, optional dot, with exponent +syn match veraFloat display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>" + +" flag an octal number with wrong digits +syn match veraOctalError display contained "0\o*[89]\d*" +syn case match + +let vera_comment_strings = 1 + +if exists("vera_comment_strings") + " A comment can contain veraString, veraCharacter and veraNumber. + " But a "*/" inside a veraString in a veraComment DOES end the comment! So we + " need to use a special type of veraString: veraCommentString, which also ends on + " "*/", and sees a "*" at the start of the line as comment again. + " Unfortunately this doesn't work very well for // type of comments :-( + syntax match veraCommentSkip contained "^\s*\*\($\|\s\+\)" + syntax region veraCommentString contained start=+L\=\\\@" + +syn match veraClass "\zs\w\+\ze::" +syn match veraClass "\zs\w\+\ze\s\+\w\+\s*[=;,)\[]" contains=veraConstant,veraUserConstant +syn match veraClass "\zs\w\+\ze\s\+\w\+\s*$" contains=veraConstant,veraUserConstant +syn match veraUserMethod "\zs\w\+\ze\s*(" contains=veraConstant,veraUserConstant +syn match veraObject "\zs\w\+\ze\.\w" +syn match veraObject "\zs\w\+\ze\.\$\w" + +" Accept ` for # (Verilog) +syn region veraPreCondit start="^\s*\(`\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=veraComment,veraCppString,veraCharacter,veraCppParen,veraParenError,veraNumbers,veraCommentError,veraSpaceError +syn match veraPreCondit display "^\s*\(`\|#\)\s*\(else\|endif\)\>" +if !exists("vera_no_if0") + syn region veraCppOut start="^\s*\(`\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=veraCppOut2 + syn region veraCppOut2 contained start="0" end="^\s*\(`\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=veraSpaceError,veraCppSkip + syn region veraCppSkip contained start="^\s*\(`\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(`\|#\)\s*endif\>" contains=veraSpaceError,veraCppSkip +endif +syn region veraIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match veraIncluded display contained "<[^>]*>" +syn match veraInclude display "^\s*\(`\|#\)\s*include\>\s*["<]" contains=veraIncluded +"syn match veraLineSkip "\\$" +syn cluster veraPreProcGroup contains=veraPreCondit,veraIncluded,veraInclude,veraDefine,veraErrInParen,veraErrInBracket,veraUserLabel,veraSpecial,veraOctalZero,veraCppOut,veraCppOut2,veraCppSkip,veraFormat,veraNumber,veraFloat,veraOctal,veraOctalError,veraNumbersCom,veraString,veraCommentSkip,veraCommentString,veraComment2String,@veraCommentGroup,veraCommentStartError,veraParen,veraBracket,veraMulti +syn region veraDefine start="^\s*\(`\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@veraPreProcGroup,@Spell +syn region veraPreProc start="^\s*\(`\|#\)\s*\(pragma\>\|line\>\|warning\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@veraPreProcGroup,@Spell + +" Highlight User Labels +syn cluster veraMultiGroup contains=veraIncluded,veraSpecial,veraCommentSkip,veraCommentString,veraComment2String,@veraCommentGroup,veraCommentStartError,veraUserCont,veraUserLabel,veraBitField,veraOctalZero,veraCppOut,veraCppOut2,veraCppSkip,veraFormat,veraNumber,veraFloat,veraOctal,veraOctalError,veraNumbersCom,veraCppParen,veraCppBracket,veraCppString +syn region veraMulti transparent start='?' skip='::' end=':' contains=ALLBUT,@veraMultiGroup,@Spell +" syn region veraMulti transparent start='?' skip='::' end=':' contains=ALL +" The above causes veraCppOut2 to catch on: +" i = (isTrue) ? 0 : 1; +" which ends up commenting the rest of the file + +" Avoid matching foo::bar() by requiring that the next char is not ':' +syn cluster veraLabelGroup contains=veraUserLabel +syn match veraUserCont display "^\s*\I\i*\s*:$" contains=@veraLabelGroup +syn match veraUserCont display ";\s*\I\i*\s*:$" contains=@veraLabelGroup +syn match veraUserCont display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@veraLabelGroup +syn match veraUserCont display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@veraLabelGroup + +syn match veraUserLabel display "\I\i*" contained + +" Avoid recognizing most bitfields as labels +syn match veraBitField display "^\s*\I\i*\s*:\s*[1-9]"me=e-1 +syn match veraBitField display ";\s*\I\i*\s*:\s*[1-9]"me=e-1 + +if exists("vera_minlines") + let b:vera_minlines = vera_minlines +else + if !exists("vera_no_if0") + let b:vera_minlines = 50 " #if 0 constructs can be long + else + let b:vera_minlines = 15 " mostly for () constructs + endif +endif +exec "syn sync ccomment veraComment minlines=" . b:vera_minlines + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link veraClass Identifier +hi def link veraObject Identifier +hi def link veraUserMethod Function +hi def link veraTask Keyword +hi def link veraModifier Tag +hi def link veraDeprecated veraError +hi def link veraMethods Statement +" hi def link veraInterface Label +hi def link veraInterface Function + +hi def link veraFormat veraSpecial +hi def link veraCppString veraString +hi def link veraCommentL veraComment +hi def link veraCommentStart veraComment +hi def link veraLabel Label +hi def link veraUserLabel Label +hi def link veraConditional Conditional +hi def link veraRepeat Repeat +hi def link veraCharacter Character +hi def link veraSpecialCharacter veraSpecial +hi def link veraNumber Number +hi def link veraOctal Number +hi def link veraOctalZero PreProc " link this to Error if you want +hi def link veraFloat Float +hi def link veraOctalError veraError +hi def link veraParenError veraError +hi def link veraErrInParen veraError +hi def link veraErrInBracket veraError +hi def link veraCommentError veraError +hi def link veraCommentStartError veraError +hi def link veraSpaceError SpaceError +hi def link veraSpecialError veraError +hi def link veraOperator Operator +hi def link veraStructure Structure +hi def link veraInclude Include +hi def link veraPreProc PreProc +hi def link veraDefine Macro +hi def link veraIncluded veraString +hi def link veraError Error +hi def link veraStatement Statement +hi def link veraPreCondit PreCondit +hi def link veraType Type +" hi def link veraConstant Constant +hi def link veraConstant Keyword +hi def link veraUserConstant Constant +hi def link veraCommentString veraString +hi def link veraComment2String veraString +hi def link veraCommentSkip veraComment +hi def link veraString String +hi def link veraComment Comment +hi def link veraSpecial SpecialChar +hi def link veraTodo Todo +hi def link veraCppSkip veraCppOut +hi def link veraCppOut2 veraCppOut +hi def link veraCppOut Comment + + +let b:current_syntax = "vera" + +" vim: ts=8 diff --git a/.config/vim/syntax/verilog.vim b/.config/vim/syntax/verilog.vim new file mode 100644 index 0000000..bbaca49 --- /dev/null +++ b/.config/vim/syntax/verilog.vim @@ -0,0 +1,119 @@ +" Vim syntax file +" Language: Verilog +" Maintainer: Mun Johl +" Last Update: Wed Jul 20 16:04:19 PDT 2011 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Set the local value of the 'iskeyword' option. +" NOTE: '?' was added so that verilogNumber would be processed correctly when +" '?' is the last character of the number. +setlocal iskeyword=@,48-57,63,_,192-255 + +" A bunch of useful Verilog keywords + +syn keyword verilogStatement always and assign automatic buf +syn keyword verilogStatement bufif0 bufif1 cell cmos +syn keyword verilogStatement config deassign defparam design +syn keyword verilogStatement disable edge endconfig +syn keyword verilogStatement endfunction endgenerate endmodule +syn keyword verilogStatement endprimitive endspecify endtable endtask +syn keyword verilogStatement event force function +syn keyword verilogStatement generate genvar highz0 highz1 ifnone +syn keyword verilogStatement incdir include initial inout input +syn keyword verilogStatement instance integer large liblist +syn keyword verilogStatement library localparam macromodule medium +syn keyword verilogStatement module nand negedge nmos nor +syn keyword verilogStatement noshowcancelled not notif0 notif1 or +syn keyword verilogStatement output parameter pmos posedge primitive +syn keyword verilogStatement pull0 pull1 pulldown pullup +syn keyword verilogStatement pulsestyle_onevent pulsestyle_ondetect +syn keyword verilogStatement rcmos real realtime reg release +syn keyword verilogStatement rnmos rpmos rtran rtranif0 rtranif1 +syn keyword verilogStatement scalared showcancelled signed small +syn keyword verilogStatement specify specparam strong0 strong1 +syn keyword verilogStatement supply0 supply1 table task time tran +syn keyword verilogStatement tranif0 tranif1 tri tri0 tri1 triand +syn keyword verilogStatement trior trireg unsigned use vectored wait +syn keyword verilogStatement wand weak0 weak1 wire wor xnor xor +syn keyword verilogLabel begin end fork join +syn keyword verilogConditional if else case casex casez default endcase +syn keyword verilogRepeat forever repeat while for + +syn keyword verilogTodo contained TODO FIXME + +syn match verilogOperator "[&|~>" +syn match verilogGlobal "`celldefine" +syn match verilogGlobal "`default_nettype" +syn match verilogGlobal "`define" +syn match verilogGlobal "`else" +syn match verilogGlobal "`elsif" +syn match verilogGlobal "`endcelldefine" +syn match verilogGlobal "`endif" +syn match verilogGlobal "`ifdef" +syn match verilogGlobal "`ifndef" +syn match verilogGlobal "`include" +syn match verilogGlobal "`line" +syn match verilogGlobal "`nounconnected_drive" +syn match verilogGlobal "`resetall" +syn match verilogGlobal "`timescale" +syn match verilogGlobal "`unconnected_drive" +syn match verilogGlobal "`undef" +syn match verilogGlobal "$[a-zA-Z0-9_]\+\>" + +syn match verilogConstant "\<[A-Z][A-Z0-9_]\+\>" + +syn match verilogNumber "\(\<\d\+\|\)'[sS]\?[bB]\s*[0-1_xXzZ?]\+\>" +syn match verilogNumber "\(\<\d\+\|\)'[sS]\?[oO]\s*[0-7_xXzZ?]\+\>" +syn match verilogNumber "\(\<\d\+\|\)'[sS]\?[dD]\s*[0-9_xXzZ?]\+\>" +syn match verilogNumber "\(\<\d\+\|\)'[sS]\?[hH]\s*[0-9a-fA-F_xXzZ?]\+\>" +syn match verilogNumber "\<[+-]\=[0-9_]\+\(\.[0-9_]*\|\)\(e[0-9_]*\|\)\>" + +syn region verilogString start=+"+ skip=+\\"+ end=+"+ contains=verilogEscape,@Spell +syn match verilogEscape +\\[nt"\\]+ contained +syn match verilogEscape "\\\o\o\=\o\=" contained + +" Directives +syn match verilogDirective "//\s*synopsys\>.*$" +syn region verilogDirective start="/\*\s*synopsys\>" end="\*/" +syn region verilogDirective start="//\s*synopsys dc_script_begin\>" end="//\s*synopsys dc_script_end\>" + +syn match verilogDirective "//\s*\$s\>.*$" +syn region verilogDirective start="/\*\s*\$s\>" end="\*/" +syn region verilogDirective start="//\s*\$s dc_script_begin\>" end="//\s*\$s dc_script_end\>" + +"Modify the following as needed. The trade-off is performance versus +"functionality. +syn sync minlines=50 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default highlighting. +hi def link verilogCharacter Character +hi def link verilogConditional Conditional +hi def link verilogRepeat Repeat +hi def link verilogString String +hi def link verilogTodo Todo +hi def link verilogComment Comment +hi def link verilogConstant Constant +hi def link verilogLabel Label +hi def link verilogNumber Number +hi def link verilogOperator Special +hi def link verilogStatement Statement +hi def link verilogGlobal Define +hi def link verilogDirective SpecialComment +hi def link verilogEscape Special + + +let b:current_syntax = "verilog" + +" vim: ts=8 diff --git a/.config/vim/syntax/verilogams.vim b/.config/vim/syntax/verilogams.vim new file mode 100644 index 0000000..7551b68 --- /dev/null +++ b/.config/vim/syntax/verilogams.vim @@ -0,0 +1,132 @@ +" Vim syntax file +" Language: Verilog-AMS +" Maintainer: S. Myles Prather +" +" Version 1.1 S. Myles Prather +" Moved some keywords to the type category. +" Added the metrix suffixes to the number matcher. +" Version 1.2 Prasanna Tamhankar +" Minor reserved keyword updates. +" Last Update: Thursday September 15 15:36:03 CST 2005 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Set the local value of the 'iskeyword' option +setlocal iskeyword=@,48-57,_,192-255 + +" Annex B.1 'All keywords' +syn keyword verilogamsStatement above abs absdelay acos acosh ac_stim +syn keyword verilogamsStatement always analog analysis and asin +syn keyword verilogamsStatement asinh assign atan atan2 atanh +syn keyword verilogamsStatement buf bufif0 bufif1 ceil cmos connectmodule +syn keyword verilogamsStatement connectrules cos cosh cross ddt ddx deassign +syn keyword verilogamsStatement defparam disable discipline +syn keyword verilogamsStatement driver_update edge enddiscipline +syn keyword verilogamsStatement endconnectrules endmodule endfunction endgenerate +syn keyword verilogamsStatement endnature endparamset endprimitive endspecify +syn keyword verilogamsStatement endtable endtask event exp final_step +syn keyword verilogamsStatement flicker_noise floor flow force fork +syn keyword verilogamsStatement function generate highz0 +syn keyword verilogamsStatement highz1 hypot idt idtmod if ifnone inf initial +syn keyword verilogamsStatement initial_step inout input join +syn keyword verilogamsStatement laplace_nd laplace_np laplace_zd laplace_zp +syn keyword verilogamsStatement large last_crossing limexp ln localparam log +syn keyword verilogamsStatement macromodule max medium min module nand nature +syn keyword verilogamsStatement negedge net_resolution nmos noise_table nor not +syn keyword verilogamsStatement notif0 notif1 or output paramset pmos +syn keyword verilogamsType parameter real integer electrical input output +syn keyword verilogamsType inout reg tri tri0 tri1 triand trior trireg +syn keyword verilogamsType string from exclude aliasparam ground genvar +syn keyword verilogamsType branch time realtime +syn keyword verilogamsStatement posedge potential pow primitive pull0 pull1 +syn keyword verilogamsStatement pullup pulldown rcmos release +syn keyword verilogamsStatement rnmos rpmos rtran rtranif0 rtranif1 +syn keyword verilogamsStatement scalared sin sinh slew small specify specparam +syn keyword verilogamsStatement sqrt strong0 strong1 supply0 supply1 +syn keyword verilogamsStatement table tan tanh task timer tran tranif0 +syn keyword verilogamsStatement tranif1 transition +syn keyword verilogamsStatement vectored wait wand weak0 weak1 +syn keyword verilogamsStatement white_noise wire wor wreal xnor xor zi_nd +syn keyword verilogamsStatement zi_np zi_zd zi_zp +syn keyword verilogamsRepeat forever repeat while for +syn keyword verilogamsLabel begin end +syn keyword verilogamsConditional if else case casex casez default endcase +syn match verilogamsConstant ":inf"lc=1 +syn match verilogamsConstant "-inf"lc=1 +" Annex B.2 Discipline/nature +syn keyword verilogamsStatement abstol access continuous ddt_nature discrete +syn keyword verilogamsStatement domain idt_nature units +" Annex B.3 Connect Rules +syn keyword verilogamsStatement connect merged resolveto split + +syn match verilogamsOperator "[&|~>" + +syn match verilogamsConstant "\<[A-Z][A-Z0-9_]\+\>" + +syn match verilogamsNumber "\(\<\d\+\|\)'[bB]\s*[0-1_xXzZ?]\+\>" +syn match verilogamsNumber "\(\<\d\+\|\)'[oO]\s*[0-7_xXzZ?]\+\>" +syn match verilogamsNumber "\(\<\d\+\|\)'[dD]\s*[0-9_xXzZ?]\+\>" +syn match verilogamsNumber "\(\<\d\+\|\)'[hH]\s*[0-9a-fA-F_xXzZ?]\+\>" +syn match verilogamsNumber "\<[+-]\=[0-9_]\+\(\.[0-9_]*\|\)\(e[0-9_]*\|\)[TGMKkmunpfa]\=\>" + +syn region verilogamsString start=+"+ skip=+\\"+ end=+"+ contains=verilogamsEscape +syn match verilogamsEscape +\\[nt"\\]+ contained +syn match verilogamsEscape "\\\o\o\=\o\=" contained + +"Modify the following as needed. The trade-off is performance versus +"functionality. +syn sync lines=50 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default highlighting. +hi def link verilogamsCharacter Character +hi def link verilogamsConditional Conditional +hi def link verilogamsRepeat Repeat +hi def link verilogamsString String +hi def link verilogamsTodo Todo +hi def link verilogamsComment Comment +hi def link verilogamsConstant Constant +hi def link verilogamsLabel Label +hi def link verilogamsNumber Number +hi def link verilogamsOperator Special +hi def link verilogamsStatement Statement +hi def link verilogamsGlobal Define +hi def link verilogamsDirective SpecialComment +hi def link verilogamsEscape Special +hi def link verilogamsType Type +hi def link verilogamsSystask Function + + +let b:current_syntax = "verilogams" + +" vim: ts=8 diff --git a/.config/vim/syntax/vgrindefs.vim b/.config/vim/syntax/vgrindefs.vim new file mode 100644 index 0000000..a194c10 --- /dev/null +++ b/.config/vim/syntax/vgrindefs.vim @@ -0,0 +1,46 @@ +" Vim syntax file +" Language: Vgrindefs +" Maintainer: The Vim Project +" Last Change: 2023 Aug 10 +" Former Maintainer: Bram Moolenaar + +" The Vgrindefs file is used to specify a language for vgrind + +" Quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Comments +syn match vgrindefsComment "^#.*" + +" The fields that vgrind recognizes +syn match vgrindefsField ":ab=" +syn match vgrindefsField ":ae=" +syn match vgrindefsField ":pb=" +syn match vgrindefsField ":bb=" +syn match vgrindefsField ":be=" +syn match vgrindefsField ":cb=" +syn match vgrindefsField ":ce=" +syn match vgrindefsField ":sb=" +syn match vgrindefsField ":se=" +syn match vgrindefsField ":lb=" +syn match vgrindefsField ":le=" +syn match vgrindefsField ":nc=" +syn match vgrindefsField ":tl" +syn match vgrindefsField ":oc" +syn match vgrindefsField ":kw=" + +" Also find the ':' at the end of the line, so all ':' are highlighted +syn match vgrindefsField ":\\$" +syn match vgrindefsField ":$" +syn match vgrindefsField "\\$" + +" Define the default highlighting. +" Only used when an item doesn't have highlighting yet +hi def link vgrindefsField Statement +hi def link vgrindefsComment Comment + +let b:current_syntax = "vgrindefs" + +" vim: ts=8 diff --git a/.config/vim/syntax/vhdl.vim b/.config/vim/syntax/vhdl.vim new file mode 100644 index 0000000..06fc2e7 --- /dev/null +++ b/.config/vim/syntax/vhdl.vim @@ -0,0 +1,268 @@ +" Vim syntax file +" Language: VHDL [VHSIC (Very High Speed Integrated Circuit) Hardware Description Language] +" Maintainer: Daniel Kho +" Previous Maintainer: Czo +" Credits: Stephan Hegel +" Last Changed: 2020 Apr 04 by Daniel Kho + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" case is not significant +syn case ignore + +" VHDL 1076-2019 keywords +syn keyword vhdlStatement access after alias all +syn keyword vhdlStatement architecture array attribute +syn keyword vhdlStatement assert assume +syn keyword vhdlStatement begin block body buffer bus +syn keyword vhdlStatement case component configuration constant +syn keyword vhdlStatement context cover +syn keyword vhdlStatement default disconnect downto +syn keyword vhdlStatement elsif end entity exit +syn keyword vhdlStatement file for function +syn keyword vhdlStatement fairness force +syn keyword vhdlStatement generate generic group guarded +syn keyword vhdlStatement impure in inertial inout is +syn keyword vhdlStatement label library linkage literal loop +syn keyword vhdlStatement map +syn keyword vhdlStatement new next null +syn keyword vhdlStatement of on open others out +syn keyword vhdlStatement package port postponed procedure process pure +syn keyword vhdlStatement parameter property protected private +syn keyword vhdlStatement range record register reject report return +syn keyword vhdlStatement release restrict +syn keyword vhdlStatement select severity signal shared subtype +syn keyword vhdlStatement sequence strong +syn keyword vhdlStatement then to transport type +syn keyword vhdlStatement unaffected units until use +syn keyword vhdlStatement variable view +syn keyword vhdlStatement vpkg vmode vprop vunit +syn keyword vhdlStatement wait when while with + +" VHDL predefined severity levels +syn keyword vhdlAttribute note warning error failure + +" Linting of conditionals. +syn match vhdlStatement "\<\(if\|else\)\>" +syn match vhdlError "\" + +" Types and type qualifiers +" Predefined standard VHDL types +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" + +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" + +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn keyword vhdlType line text side width + +" Predefined standard IEEE VHDL types +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" +syn match vhdlType "\\'\=" + + +" array attributes +syn match vhdlAttribute "\'high" +syn match vhdlAttribute "\'left" +syn match vhdlAttribute "\'length" +syn match vhdlAttribute "\'low" +syn match vhdlAttribute "\'range" +syn match vhdlAttribute "\'reverse_range" +syn match vhdlAttribute "\'right" +syn match vhdlAttribute "\'ascending" +" block attributes +syn match vhdlAttribute "\'simple_name" +syn match vhdlAttribute "\'instance_name" +syn match vhdlAttribute "\'path_name" +syn match vhdlAttribute "\'foreign" " VHPI +" signal attribute +syn match vhdlAttribute "\'active" +syn match vhdlAttribute "\'delayed" +syn match vhdlAttribute "\'event" +syn match vhdlAttribute "\'last_active" +syn match vhdlAttribute "\'last_event" +syn match vhdlAttribute "\'last_value" +syn match vhdlAttribute "\'quiet" +syn match vhdlAttribute "\'stable" +syn match vhdlAttribute "\'transaction" +syn match vhdlAttribute "\'driving" +syn match vhdlAttribute "\'driving_value" +" type attributes +syn match vhdlAttribute "\'base" +syn match vhdlAttribute "\'subtype" +syn match vhdlAttribute "\'element" +syn match vhdlAttribute "\'leftof" +syn match vhdlAttribute "\'pos" +syn match vhdlAttribute "\'pred" +syn match vhdlAttribute "\'rightof" +syn match vhdlAttribute "\'succ" +syn match vhdlAttribute "\'val" +syn match vhdlAttribute "\'image" +syn match vhdlAttribute "\'value" +" VHDL-2019 interface attribute +syn match vhdlAttribute "\'converse" + +syn keyword vhdlBoolean true false + +" for this vector values case is significant +syn case match +" Values for standard VHDL types +syn match vhdlVector "\'[0L1HXWZU\-\?]\'" +syn case ignore + +syn match vhdlVector "B\"[01_]\+\"" +syn match vhdlVector "O\"[0-7_]\+\"" +syn match vhdlVector "X\"[0-9a-f_]\+\"" +syn match vhdlCharacter "'.'" +syn region vhdlString start=+"+ end=+"+ + +" floating numbers +syn match vhdlNumber "-\=\<\d\+\.\d\+\(E[+\-]\=\d\+\)\>" +syn match vhdlNumber "-\=\<\d\+\.\d\+\>" +syn match vhdlNumber "0*2#[01_]\+\.[01_]\+#\(E[+\-]\=\d\+\)\=" +syn match vhdlNumber "0*16#[0-9a-f_]\+\.[0-9a-f_]\+#\(E[+\-]\=\d\+\)\=" +" integer numbers +syn match vhdlNumber "-\=\<\d\+\(E[+\-]\=\d\+\)\>" +syn match vhdlNumber "-\=\<\d\+\>" +syn match vhdlNumber "0*2#[01_]\+#\(E[+\-]\=\d\+\)\=" +syn match vhdlNumber "0*16#[0-9a-f_]\+#\(E[+\-]\=\d\+\)\=" + +" operators +syn keyword vhdlOperator and nand or nor xor xnor +syn keyword vhdlOperator rol ror sla sll sra srl +syn keyword vhdlOperator mod rem abs not + +" Concatenation and math operators +syn match vhdlOperator "&\|+\|-\|\*\|\/" + +" Equality and comparison operators +syn match vhdlOperator "=\|\/=\|>\|<\|>=" + +" Assignment operators +syn match vhdlOperator "<=\|:=" +syn match vhdlOperator "=>" + +" VHDL-202x concurrent signal association (spaceship) operator +syn match vhdlOperator "<=>" + +" VHDL-2008 conversion, matching equality/non-equality operators +syn match vhdlOperator "??\|?=\|?\/=\|?<\|?<=\|?>\|?>=" + +" VHDL-2008 external names +syn match vhdlOperator "<<\|>>" + +" Linting for illegal operators +" '=' +syn match vhdlError "\(=\)[<=&+\-\*\/\\]\+" +syn match vhdlError "[=&+\-\*\\]\+\(=\)" +" '>', '<' +" Allow external names: '<< ... >>' +syn match vhdlError "\(>\)[<&+\-\/\\]\+" +syn match vhdlError "[&+\-\/\\]\+\(>\)" +syn match vhdlError "\(<\)[&+\-\/\\]\+" +syn match vhdlError "[>=&+\-\/\\]\+\(<\)" +" Covers most operators +" support negative sign after operators. E.g. q<=-b; +" Supports VHDL-202x spaceship (concurrent simple signal association). +syn match vhdlError "\(<=\)[<=&+\*\\?:]\+" +syn match vhdlError "[>=&+\-\*\\:]\+\(=>\)" +syn match vhdlError "\(&\|+\|\-\|\*\*\|\/=\|??\|?=\|?\/=\|?<=\|?>=\|>=\|:=\|=>\)[<>=&+\*\\?:]\+" +syn match vhdlError "[<>=&+\-\*\\:]\+\(&\|+\|\*\*\|\/=\|??\|?=\|?\/=\|?<\|?<=\|?>\|?>=\|>=\|<=\|:=\)" +syn match vhdlError "\(?<\|?>\)[<>&+\*\/\\?:]\+" +syn match vhdlError "\(<<\|>>\)[<>&+\*\/\\?:]\+" + +"syn match vhdlError "[?]\+\(&\|+\|\-\|\*\*\|??\|?=\|?\/=\|?<\|?<=\|?>\|?>=\|:=\|=>\)" +" '/' +syn match vhdlError "\(\/\)[<>&+\-\*\/\\?:]\+" +syn match vhdlError "[<>=&+\-\*\/\\:]\+\(\/\)" + +syn match vhdlSpecial "<>" +syn match vhdlSpecial "[().,;]" + + +" time +syn match vhdlTime "\<\d\+\s\+\(\([fpnum]s\)\|\(sec\)\|\(min\)\|\(hr\)\)\>" +syn match vhdlTime "\<\d\+\.\d\+\s\+\(\([fpnum]s\)\|\(sec\)\|\(min\)\|\(hr\)\)\>" + +syn case match +syn keyword vhdlTodo contained TODO NOTE +syn keyword vhdlFixme contained FIXME +syn case ignore + +syn region vhdlComment start="/\*" end="\*/" contains=vhdlTodo,vhdlFixme,@Spell +syn match vhdlComment "\(^\|\s\)--.*" contains=vhdlTodo,vhdlFixme,@Spell + +" Standard IEEE P1076.6 preprocessor directives (metacomments). +syn match vhdlPreProc "/\*\s*rtl_synthesis\s\+\(on\|off\)\s*\*/" +syn match vhdlPreProc "\(^\|\s\)--\s*rtl_synthesis\s\+\(on\|off\)\s*" +syn match vhdlPreProc "/\*\s*rtl_syn\s\+\(on\|off\)\s*\*/" +syn match vhdlPreProc "\(^\|\s\)--\s*rtl_syn\s\+\(on\|off\)\s*" + +" Industry-standard directives. These are not standard VHDL, but are commonly +" used in the industry. +syn match vhdlPreProc "/\*\s*synthesis\s\+translate_\(on\|off\)\s*\*/" +"syn match vhdlPreProc "/\*\s*simulation\s\+translate_\(on\|off\)\s*\*/" +syn match vhdlPreProc "/\*\s*pragma\s\+translate_\(on\|off\)\s*\*/" +syn match vhdlPreProc "/\*\s*pragma\s\+synthesis_\(on\|off\)\s*\*/" +syn match vhdlPreProc "/\*\s*synopsys\s\+translate_\(on\|off\)\s*\*/" + +syn match vhdlPreProc "\(^\|\s\)--\s*synthesis\s\+translate_\(on\|off\)\s*" +"syn match vhdlPreProc "\(^\|\s\)--\s*simulation\s\+translate_\(on\|off\)\s*" +syn match vhdlPreProc "\(^\|\s\)--\s*pragma\s\+translate_\(on\|off\)\s*" +syn match vhdlPreProc "\(^\|\s\)--\s*pragma\s\+synthesis_\(on\|off\)\s*" +syn match vhdlPreProc "\(^\|\s\)--\s*synopsys\s\+translate_\(on\|off\)\s*" + +"Modify the following as needed. The trade-off is performance versus functionality. +syn sync minlines=600 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link vhdlSpecial Special +hi def link vhdlStatement Statement +hi def link vhdlCharacter Character +hi def link vhdlString String +hi def link vhdlVector Number +hi def link vhdlBoolean Number +hi def link vhdlTodo Todo +hi def link vhdlFixme Fixme +hi def link vhdlComment Comment +hi def link vhdlNumber Number +hi def link vhdlTime Number +hi def link vhdlType Type +hi def link vhdlOperator Operator +hi def link vhdlError Error +hi def link vhdlAttribute Special +hi def link vhdlPreProc PreProc + + +let b:current_syntax = "vhdl" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 diff --git a/.config/vim/syntax/vim.vim b/.config/vim/syntax/vim.vim new file mode 100644 index 0000000..25879f4 --- /dev/null +++ b/.config/vim/syntax/vim.vim @@ -0,0 +1,2808 @@ +" Vim syntax file +" Language: Vim script +" Maintainer: Hirohito Higashi +" Doug Kearns +" Last Change: 2025 Nov 11 +" Former Maintainer: Charles E. Campbell + +" DO NOT CHANGE DIRECTLY. +" THIS FILE PARTLY GENERATED BY gen_syntax_vim.vim. +" (Search string "GEN_SYN_VIM:" in this file) + +" Quit when a syntax file was already loaded {{{1 +if exists("b:current_syntax") + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +" Feature testing {{{1 + +" NOTE: vimsyn_force_vim9 for internal use only +let s:vim9script = get(b:, "vimsyn_force_vim9", v:false) || "\n" .. getline(1, 32)->join("\n") =~# '\n\s*vim9\%[script]\>' + +function s:has(feature) + return has(a:feature) || index(get(g:, "vimsyn_vim_features", []), a:feature) != -1 +endfunction + +" Automatically generated keyword lists: {{{1 + +" vimTodo: contains common special-notices for comments {{{2 +" Use the vimCommentGroup cluster to add your own. +syn keyword vimTodo contained COMBAK FIXME TODO XXX +syn cluster vimCommentGroup contains=vimTodo,@Spell + +" regular vim commands {{{2 +" GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR='nextgroup=vimBang' +syn keyword vimCommand contained al[l] ar[gs] arga[dd] argd[elete] argded[upe] arge[dit] argg[lobal] argl[ocal] argu[ment] as[cii] b[uffer] bN[ext] ba[ll] bad[d] balt bd[elete] bf[irst] bl[ast] bm[odified] bn[ext] bp[revious] br[ewind] brea[k] breaka[dd] breakd[el] breakl[ist] buffers bun[load] bw[ipeout] cN[ext] cNf[ile] cabo[ve] cad[dbuffer] cadde[xpr] caddf[ile] caf[ter] cb[uffer] cbe[fore] cbel[ow] cbo[ttom] cc ccl[ose] cd ce[nter] cex[pr] cf[ile] cfir[st] cg[etfile] cgetb[uffer] cgete[xpr] changes che[ckpath] checkt[ime] chi[story] cl[ist] clip[reset] cla[st] clo[se] cle[arjumps] cn[ext] cnew[er] cnf[ile] col[der] colo[rscheme] comc[lear] comp[iler] con[tinue] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] delm[arks] deb[ug] defc[ompile] nextgroup=vimBang +syn keyword vimCommand contained di[splay] dif[fupdate] diffg[et] diffo[ff] diffp[atch] diffpu[t] diffs[plit] difft[his] dig[raphs] disa[ssemble] dj[ump] dli[st] dr[op] ds[earch] dsp[lit] e[dit] ea[rlier] em[enu] endfo[r] endt[ry] endw[hile] ene[w] ex exi[t] exu[sage] f[ile] files fin[d] fina[lly] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] foldo[pen] g[lobal] go[to] gu[i] gv[im] h[elp] helpc[lose] helpf[ind] helpt[ags] ha[rdcopy] his[tory] ij[ump] il[ist] int[ro] ip[ut] is[earch] isp[lit] ju[mps] l[ist] lN[ext] lNf[ile] la[st] lab[ove] lan[guage] lad[dexpr] laddb[uffer] laddf[ile] laf[ter] lat[er] lb[uffer] lbe[fore] lbel[ow] lbo[ttom] lc[d] lch[dir] lcl[ose] lcs[cope] le[ft] lex[pr] lf[ile] lfir[st] lg[etfile] lgetb[uffer] lgete[xpr] lhi[story] ll lla[st] lli[st] nextgroup=vimBang +syn keyword vimCommand contained lmak[e] lne[xt] lnew[er] lnf[ile] lo[adview] lockv[ar] lol[der] lop[en] lp[revious] lpf[ile] lr[ewind] lt[ag] lw[indow] ls m[ove] marks mes[sages] mk[exrc] mks[ession] mksp[ell] mkv[imrc] mkvie[w] mod[e] n[ext] nb[key] nbc[lose] nbs[tart] noh[lsearch] nu[mber] o[pen] ol[dfiles] on[ly] opt[ions] ow[nsyntax] p[rint] pa[ckadd] packl[oadall] pb[uffer] pc[lose] ped[it] po[p] pp[op] pre[serve] prev[ious] pro[mptfind] promptr[epl] ps[earch] pt[ag] ptN[ext] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pw[d] q[uit] quita[ll] qa[ll] r[ead] rec[over] red[o] redr[aw] redraws[tatus] redrawt[abline] redrawtabp[anel] reg[isters] res[ize] ret[ab] rew[ind] ri[ght] ru[ntime] rund[o] rv[iminfo] sN[ext] sa[rgument] nextgroup=vimBang +syn keyword vimCommand contained sal[l] sav[eas] sb[uffer] sbN[ext] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbp[revious] sbr[ewind] scr[iptnames] scripte[ncoding] scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] sig[n] sla[st] sn[ext] so[urce] spe[llgood] spelld[ump] spelli[nfo] spellr[epall] spellra[re] spellu[ndo] spellw[rong] spr[evious] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] stopi[nsert] stj[ump] sts[elect] sun[hide] sus[pend] sv[iew] sync[bind] smi[le] t tN[ext] ta[g] tags tabc[lose] tabe[dit] tabf[ind] tabfir[st] tabm[ove] tabl[ast] tabn[ext] tabnew tabo[nly] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] te[aroff] tf[irst] tj[ump] tl[ast] tn[ext] tp[revious] tr[ewind] try ts[elect] nextgroup=vimBang +syn keyword vimCommand contained u[ndo] undoj[oin] undol[ist] unh[ide] up[date] v[global] ve[rsion] vi[sual] vie[w] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] wi[nsize] winp[os] wl[restore] wn[ext] wp[revious] wq wqa[ll] wu[ndo] wv[iminfo] x[it] xa[ll] xr[estore] y[ank] z dl dell delel deletl deletel dp dep delp delep deletp deletep a i nextgroup=vimBang + +" Lower priority :syn-match to allow for :command/function() distinction +syn match vimCommand "\" nextgroup=vimBang +syn match vimCommand "\" nextgroup=vimBang +syn match vimCommand "\" nextgroup=vimBang +syn match vimCommand "\" nextgroup=vimBang +syn match vimCommand "\" nextgroup=vimBang +syn match vimCommand "\" nextgroup=vimBang + +" GEN_SYN_VIM: vimCommand modifier, START_STR='syn keyword vimCommandModifier', END_STR='skipwhite nextgroup=vimCommandModifierBang,@vimCmdList' +syn keyword vimCommandModifier abo[veleft] bel[owright] bo[tright] hid[e] hor[izontal] kee[pmarks] keepj[umps] keepp[atterns] keepa[lt] lefta[bove] leg[acy] loc[kmarks] noa[utocmd] nos[wapfile] rightb[elow] san[dbox] sil[ent] tab to[pleft] uns[ilent] verb[ose] vert[ical] vim9[cmd] skipwhite nextgroup=vimCommandModifierBang,@vimCmdList +" :filter is handled specially elsewhere +syn match vimCommandModifierBang contained "\a\@1<=!" skipwhite nextgroup=@vimCmdList + +" Lower priority :syn-match to allow for :command/function() distinction +syn match vimCommand "\" skipwhite nextgroup=vimCommandModifierBang,@vimCmdList +syn match vimCommand "\" skipwhite nextgroup=vimCommandModifierBang,@vimCmdList + +" Lower priority for _new_ to distinguish constructors from the command. +syn match vimCommand contained "\(\@!" +syn match vimCommand contained "\" +syn keyword vimStdPlugin contained Arguments Asm Break Cfilter Clear Continue DiffOrig Evaluate Finish Gdb Lfilter Man Over Program Run S Source Step Stop Termdebug TermdebugCommand TOhtml Until Winbar XMLent XMLns + +" vimOptions are caught only when contained in a vimSet {{{2 +" GEN_SYN_VIM: vimOption normal, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod' +syn keyword vimOption contained al aleph ari allowrevins ambw ambiwidth arab arabic arshape arabicshape acd autochdir ac autocomplete acl autocompletedelay act autocompletetimeout ai autoindent ar autoread asd autoshelldir aw autowrite awa autowriteall bg background bs backspace bk backup bkc backupcopy bdir backupdir bex backupext bsk backupskip bdlay balloondelay beval ballooneval bevalterm balloonevalterm bexpr balloonexpr bo belloff bin binary bomb brk breakat bri breakindent briopt breakindentopt bsdir browsedir bh bufhidden bl buflisted bt buftype cmp casemap cdh cdhome cd cdpath cedit ccv charconvert chi chistory cin cindent cink cinkeys cino cinoptions cinsd cinscopedecls cinw cinwords cb clipboard cpm clipmethod ch cmdheight cwh cmdwinheight cc colorcolumn skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained co columns com comments cms commentstring cp compatible cpt complete cfu completefunc cfc completefuzzycollect cia completeitemalign cot completeopt cpp completepopup csl completeslash cto completetimeout cocu concealcursor cole conceallevel cf confirm ci copyindent cpo cpoptions cm cryptmethod cspc cscopepathcomp csprg cscopeprg csqf cscopequickfix csre cscoperelative cst cscopetag csto cscopetagorder csverb cscopeverbose crb cursorbind cuc cursorcolumn cul cursorline culopt cursorlineopt debug def define deco delcombine dict dictionary diff dia diffanchors dex diffexpr dip diffopt dg digraph dir directory dy display ead eadirection ed edcompatible emo emoji enc encoding eof endoffile eol endofline ea equalalways ep equalprg eb errorbells skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained ef errorfile efm errorformat ek esckeys ei eventignore eiw eventignorewin et expandtab ex exrc fenc fileencoding fencs fileencodings ff fileformat ffs fileformats fic fileignorecase ft filetype fcs fillchars ffu findfunc fixeol fixendofline fcl foldclose fdc foldcolumn fen foldenable fde foldexpr fdi foldignore fdl foldlevel fdls foldlevelstart fmr foldmarker fdm foldmethod fml foldminlines fdn foldnestmax fdo foldopen fdt foldtext fex formatexpr flp formatlistpat fo formatoptions fp formatprg fs fsync gd gdefault gfm grepformat gp grepprg gcr guicursor gfn guifont gfs guifontset gfw guifontwide ghr guiheadroom gli guiligatures go guioptions guipty gtl guitablabel gtt guitabtooltip hf helpfile hh helpheight hlg helplang hid hidden skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained hl highlight hi history hk hkmap hkp hkmapp hls hlsearch icon iconstring ic ignorecase imaf imactivatefunc imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode ise isexpand isf isfname isi isident isk iskeyword isp isprint js joinspaces jop jumpoptions key kmp keymap km keymodel kpc keyprotocol kp keywordprg lmap langmap lm langmenu lnr langnoremap lrm langremap ls laststatus lz lazyredraw lhi lhistory lbr linebreak lines lsp linespace lisp lop lispoptions lw lispwords list lcs listchars lpl loadplugins luadll magic mef makeef menc makeencoding mp makeprg mps matchpairs mat matchtime skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained mco maxcombine mfd maxfuncdepth mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot msc maxsearchcount mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus mh mousehide mousem mousemodel mousemev mousemoveevent mouses mouseshape mouset mousetime mzq mzquantum mzschemedll mzschemegcdll nf nrformats nu number nuw numberwidth ofu omnifunc odev opendevice opfunc operatorfunc ost osctimeoutlen pp packpath para paragraphs paste pt pastetoggle pex patchexpr pm patchmode pa path perldll pi preserveindent pvh previewheight pvp previewpopup pvw previewwindow pdev printdevice penc printencoding pexpr printexpr pfn printfont pheader printheader skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained pmbcs printmbcharset pmbfn printmbfont popt printoptions prompt pb pumborder ph pumheight pmw pummaxwidth pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions report rs restorescreen ri revins rl rightleft rlc rightleftcmd rubydll ru ruler ruf rulerformat rtp runtimepath scr scroll scb scrollbind scf scrollfocus sj scrolljump so scrolloff sbo scrollopt sect sections secure sel selection slm selectmode ssop sessionoptions sh shell shcf shellcmdflag sp shellpipe shq shellquote srr shellredir ssl shellslash stmp shelltemp st shelltype sxe shellxescape sxq shellxquote sr shiftround sw shiftwidth skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained shm shortmess sn shortname sbr showbreak sc showcmd sloc showcmdloc sft showfulltag sm showmatch smd showmode stal showtabline stpl showtabpanel ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang spo spelloptions sps spellsuggest sb splitbelow spk splitkeep spr splitright sol startofline stl statusline su suffixes sua suffixesadd swf swapfile sws swapsync swb switchbuf smc synmaxcol syn syntax tcl tabclose tal tabline tpm tabpagemax tpl tabpanel tplo tabpanelopt ts tabstop tbs tagbsearch tc tagcase tfu tagfunc tl taglength tr tagrelative tag tags tgst tagstack tcldll term tbidi termbidi tenc termencoding tgc termguicolors skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained twk termwinkey twsl termwinscroll tws termwinsize twt termwintype terse ta textauto tx textmode tw textwidth tsr thesaurus tsrfu thesaurusfunc top tildeop to timeout tm timeoutlen title titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype udir undodir udf undofile ul undolevels ur undoreload uc updatecount ut updatetime vsts varsofttabstop vts vartabstop vbs verbose vfile verbosefile vdir viewdir vop viewoptions vi viminfo vif viminfofile ve virtualedit vb visualbell warn wiv weirdinvert ww whichwrap wc wildchar wcm wildcharm wig wildignore wic wildignorecase wmnu wildmenu wim wildmode wop wildoptions wak winaltkeys wcr wincolor wi window skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight wmh winminheight wmw winminwidth winptydll wiw winwidth wse wlseat wst wlsteal wtm wltimeoutlen wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes skipwhite nextgroup=vimSetEqual,vimSetMod + +" vimOptions: These are the turn-off setting variants {{{2 +" GEN_SYN_VIM: vimOption turn-off, START_STR='syn keyword vimOption contained', END_STR='' +syn keyword vimOption contained noari noallowrevins noarab noarabic noarshape noarabicshape noacd noautochdir noac noautocomplete noai noautoindent noar noautoread noasd noautoshelldir noaw noautowrite noawa noautowriteall nobk nobackup nobeval noballooneval nobevalterm noballoonevalterm nobin nobinary nobomb nobri nobreakindent nobl nobuflisted nocdh nocdhome nocin nocindent nocp nocompatible nocf noconfirm noci nocopyindent nocsre nocscoperelative nocst nocscopetag nocsverb nocscopeverbose nocrb nocursorbind nocuc nocursorcolumn nocul nocursorline nodeco nodelcombine nodiff nodg nodigraph noed noedcompatible noemo noemoji noeof noendoffile noeol noendofline noea noequalalways noeb noerrorbells noek noesckeys noet noexpandtab noex noexrc nofic nofileignorecase +syn keyword vimOption contained nofixeol nofixendofline nofen nofoldenable nofs nofsync nogd nogdefault noguipty nohid nohidden nohk nohkmap nohkp nohkmapp nohls nohlsearch noicon noic noignorecase noimc noimcmdline noimd noimdisable nois noincsearch noinf noinfercase noim noinsertmode nojs nojoinspaces nolnr nolangnoremap nolrm nolangremap nolz nolazyredraw nolbr nolinebreak nolisp nolist nolpl noloadplugins nomagic noml nomodeline nomle nomodelineexpr noma nomodifiable nomod nomodified nomore nomousef nomousefocus nomh nomousehide nomousemev nomousemoveevent nonu nonumber noodev noopendevice nopaste nopi nopreserveindent nopvw nopreviewwindow noprompt noro noreadonly nornu norelativenumber noremap nors norestorescreen nori norevins norl norightleft noru noruler +syn keyword vimOption contained noscb noscrollbind noscf noscrollfocus nosecure nossl noshellslash nostmp noshelltemp nosr noshiftround nosn noshortname nosc noshowcmd nosft noshowfulltag nosm noshowmatch nosmd noshowmode noscs nosmartcase nosi nosmartindent nosta nosmarttab nosms nosmoothscroll nospell nosb nosplitbelow nospr nosplitright nosol nostartofline noswf noswapfile notbs notagbsearch notr notagrelative notgst notagstack notbidi notermbidi notgc notermguicolors noterse nota notextauto notx notextmode notop notildeop noto notimeout notitle nottimeout notbi nottybuiltin notf nottyfast noudf noundofile novb novisualbell nowarn nowiv noweirdinvert nowic nowildignorecase nowmnu nowildmenu nowfb nowinfixbuf nowfh nowinfixheight nowfw nowinfixwidth nowst nowlsteal +syn keyword vimOption contained nowrap nows nowrapscan nowrite nowa nowriteany nowb nowritebackup noxtermcodes + +" vimOptions: These are the invertible variants {{{2 +" GEN_SYN_VIM: vimOption invertible, START_STR='syn keyword vimOption contained', END_STR='' +syn keyword vimOption contained invari invallowrevins invarab invarabic invarshape invarabicshape invacd invautochdir invac invautocomplete invai invautoindent invar invautoread invasd invautoshelldir invaw invautowrite invawa invautowriteall invbk invbackup invbeval invballooneval invbevalterm invballoonevalterm invbin invbinary invbomb invbri invbreakindent invbl invbuflisted invcdh invcdhome invcin invcindent invcp invcompatible invcf invconfirm invci invcopyindent invcsre invcscoperelative invcst invcscopetag invcsverb invcscopeverbose invcrb invcursorbind invcuc invcursorcolumn invcul invcursorline invdeco invdelcombine invdiff invdg invdigraph inved invedcompatible invemo invemoji inveof invendoffile inveol invendofline invea invequalalways inveb inverrorbells +syn keyword vimOption contained invek invesckeys invet invexpandtab invex invexrc invfic invfileignorecase invfixeol invfixendofline invfen invfoldenable invfs invfsync invgd invgdefault invguipty invhid invhidden invhk invhkmap invhkp invhkmapp invhls invhlsearch invicon invic invignorecase invimc invimcmdline invimd invimdisable invis invincsearch invinf invinfercase invim invinsertmode invjs invjoinspaces invlnr invlangnoremap invlrm invlangremap invlz invlazyredraw invlbr invlinebreak invlisp invlist invlpl invloadplugins invmagic invml invmodeline invmle invmodelineexpr invma invmodifiable invmod invmodified invmore invmousef invmousefocus invmh invmousehide invmousemev invmousemoveevent invnu invnumber invodev invopendevice invpaste invpi invpreserveindent +syn keyword vimOption contained invpvw invpreviewwindow invprompt invro invreadonly invrnu invrelativenumber invremap invrs invrestorescreen invri invrevins invrl invrightleft invru invruler invscb invscrollbind invscf invscrollfocus invsecure invssl invshellslash invstmp invshelltemp invsr invshiftround invsn invshortname invsc invshowcmd invsft invshowfulltag invsm invshowmatch invsmd invshowmode invscs invsmartcase invsi invsmartindent invsta invsmarttab invsms invsmoothscroll invspell invsb invsplitbelow invspr invsplitright invsol invstartofline invswf invswapfile invtbs invtagbsearch invtr invtagrelative invtgst invtagstack invtbidi invtermbidi invtgc invtermguicolors invterse invta invtextauto invtx invtextmode invtop invtildeop invto invtimeout invtitle +syn keyword vimOption contained invttimeout invtbi invttybuiltin invtf invttyfast invudf invundofile invvb invvisualbell invwarn invwiv invweirdinvert invwic invwildignorecase invwmnu invwildmenu invwfb invwinfixbuf invwfh invwinfixheight invwfw invwinfixwidth invwst invwlsteal invwrap invws invwrapscan invwrite invwa invwriteany invwb invwritebackup invxtermcodes +" termcap codes (which can also be set) {{{2 +" GEN_SYN_VIM: vimOption term output code, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod' +syn keyword vimOption contained t_AB t_AF t_AU t_AL t_al t_bc t_BE t_BD t_cd t_ce t_Ce t_CF t_cl t_cm t_Co t_CS t_Cs t_cs t_CV t_da t_db t_DL t_dl t_ds t_Ds t_EC t_EI t_fs t_fd t_fe t_GP t_IE t_IS t_ke t_ks t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RF t_RB t_RC t_RI t_Ri t_RK t_RS t_RT t_RV t_Sb t_SC t_se t_Sf t_SH t_SI t_Si t_so t_SR t_sr t_ST t_Te t_te t_TE t_ti t_TI t_Ts t_ts t_u7 t_ue t_us t_Us t_ut t_vb t_ve t_vi t_VS t_vs t_WP t_WS t_XM t_xn t_xs t_ZH t_ZR t_8f t_8b t_8u t_xo skipwhite nextgroup=vimSetEqual,vimSetMod +" term key codes +syn keyword vimOption contained t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ku +syn match vimOption contained "t_%1" +syn match vimOption contained "t_#2" +syn match vimOption contained "t_#4" +syn match vimOption contained "t_@7" +syn match vimOption contained "t_*7" +syn match vimOption contained "t_&8" +syn match vimOption contained "t_%i" +syn match vimOption contained "t_k;" + +" vimOptions: These are the variable names {{{2 +" GEN_SYN_VIM: vimOption normal variable, START_STR='syn keyword vimOptionVarName contained', END_STR='' +syn keyword vimOptionVarName contained al aleph ari allowrevins ambw ambiwidth arab arabic arshape arabicshape acd autochdir ac autocomplete acl autocompletedelay act autocompletetimeout ai autoindent ar autoread asd autoshelldir aw autowrite awa autowriteall bg background bs backspace bk backup bkc backupcopy bdir backupdir bex backupext bsk backupskip bdlay balloondelay beval ballooneval bevalterm balloonevalterm bexpr balloonexpr bo belloff bin binary bomb brk breakat bri breakindent briopt breakindentopt bsdir browsedir bh bufhidden bl buflisted bt buftype cmp casemap cdh cdhome cd cdpath cedit ccv charconvert chi chistory cin cindent cink cinkeys cino cinoptions cinsd cinscopedecls cinw cinwords cb clipboard cpm clipmethod ch cmdheight cwh cmdwinheight cc colorcolumn +syn keyword vimOptionVarName contained co columns com comments cms commentstring cp compatible cpt complete cfu completefunc cfc completefuzzycollect cia completeitemalign cot completeopt cpp completepopup csl completeslash cto completetimeout cocu concealcursor cole conceallevel cf confirm ci copyindent cpo cpoptions cm cryptmethod cspc cscopepathcomp csprg cscopeprg csqf cscopequickfix csre cscoperelative cst cscopetag csto cscopetagorder csverb cscopeverbose crb cursorbind cuc cursorcolumn cul cursorline culopt cursorlineopt debug def define deco delcombine dict dictionary diff dia diffanchors dex diffexpr dip diffopt dg digraph dir directory dy display ead eadirection ed edcompatible emo emoji enc encoding eof endoffile eol endofline ea equalalways ep equalprg +syn keyword vimOptionVarName contained eb errorbells ef errorfile efm errorformat ek esckeys ei eventignore eiw eventignorewin et expandtab ex exrc fenc fileencoding fencs fileencodings ff fileformat ffs fileformats fic fileignorecase ft filetype fcs fillchars ffu findfunc fixeol fixendofline fcl foldclose fdc foldcolumn fen foldenable fde foldexpr fdi foldignore fdl foldlevel fdls foldlevelstart fmr foldmarker fdm foldmethod fml foldminlines fdn foldnestmax fdo foldopen fdt foldtext fex formatexpr flp formatlistpat fo formatoptions fp formatprg fs fsync gd gdefault gfm grepformat gp grepprg gcr guicursor gfn guifont gfs guifontset gfw guifontwide ghr guiheadroom gli guiligatures go guioptions guipty gtl guitablabel gtt guitabtooltip hf helpfile hh helpheight +syn keyword vimOptionVarName contained hlg helplang hid hidden hl highlight hi history hk hkmap hkp hkmapp hls hlsearch icon iconstring ic ignorecase imaf imactivatefunc imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode ise isexpand isf isfname isi isident isk iskeyword isp isprint js joinspaces jop jumpoptions key kmp keymap km keymodel kpc keyprotocol kp keywordprg lmap langmap lm langmenu lnr langnoremap lrm langremap ls laststatus lz lazyredraw lhi lhistory lbr linebreak lines lsp linespace lisp lop lispoptions lw lispwords list lcs listchars lpl loadplugins luadll magic mef makeef menc makeencoding mp makeprg +syn keyword vimOptionVarName contained mps matchpairs mat matchtime mco maxcombine mfd maxfuncdepth mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot msc maxsearchcount mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus mh mousehide mousem mousemodel mousemev mousemoveevent mouses mouseshape mouset mousetime mzq mzquantum mzschemedll mzschemegcdll nf nrformats nu number nuw numberwidth ofu omnifunc odev opendevice opfunc operatorfunc ost osctimeoutlen pp packpath para paragraphs paste pt pastetoggle pex patchexpr pm patchmode pa path perldll pi preserveindent pvh previewheight pvp previewpopup pvw previewwindow pdev printdevice penc printencoding pexpr printexpr +syn keyword vimOptionVarName contained pfn printfont pheader printheader pmbcs printmbcharset pmbfn printmbfont popt printoptions prompt pb pumborder ph pumheight pmw pummaxwidth pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions report rs restorescreen ri revins rl rightleft rlc rightleftcmd rubydll ru ruler ruf rulerformat rtp runtimepath scr scroll scb scrollbind scf scrollfocus sj scrolljump so scrolloff sbo scrollopt sect sections secure sel selection slm selectmode ssop sessionoptions sh shell shcf shellcmdflag sp shellpipe shq shellquote srr shellredir ssl shellslash stmp shelltemp st shelltype sxe shellxescape +syn keyword vimOptionVarName contained sxq shellxquote sr shiftround sw shiftwidth shm shortmess sn shortname sbr showbreak sc showcmd sloc showcmdloc sft showfulltag sm showmatch smd showmode stal showtabline stpl showtabpanel ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang spo spelloptions sps spellsuggest sb splitbelow spk splitkeep spr splitright sol startofline stl statusline su suffixes sua suffixesadd swf swapfile sws swapsync swb switchbuf smc synmaxcol syn syntax tcl tabclose tal tabline tpm tabpagemax tpl tabpanel tplo tabpanelopt ts tabstop tbs tagbsearch tc tagcase tfu tagfunc tl taglength tr tagrelative tag tags tgst tagstack +syn keyword vimOptionVarName contained tcldll term tbidi termbidi tenc termencoding tgc termguicolors twk termwinkey twsl termwinscroll tws termwinsize twt termwintype terse ta textauto tx textmode tw textwidth tsr thesaurus tsrfu thesaurusfunc top tildeop to timeout tm timeoutlen title titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype udir undodir udf undofile ul undolevels ur undoreload uc updatecount ut updatetime vsts varsofttabstop vts vartabstop vbs verbose vfile verbosefile vdir viewdir vop viewoptions vi viminfo vif viminfofile ve virtualedit vb visualbell warn wiv weirdinvert ww whichwrap wc wildchar wcm wildcharm wig wildignore wic wildignorecase wmnu wildmenu +syn keyword vimOptionVarName contained wim wildmode wop wildoptions wak winaltkeys wcr wincolor wi window wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight wmh winminheight wmw winminwidth winptydll wiw winwidth wse wlseat wst wlsteal wtm wltimeoutlen wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes +" GEN_SYN_VIM: vimOption term output code variable, START_STR='syn keyword vimOptionVarName contained', END_STR='' +syn keyword vimOptionVarName contained t_AB t_AF t_AU t_AL t_al t_bc t_BE t_BD t_cd t_ce t_Ce t_CF t_cl t_cm t_Co t_CS t_Cs t_cs t_CV t_da t_db t_DL t_dl t_ds t_Ds t_EC t_EI t_fs t_fd t_fe t_GP t_IE t_IS t_ke t_ks t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RF t_RB t_RC t_RI t_Ri t_RK t_RS t_RT t_RV t_Sb t_SC t_se t_Sf t_SH t_SI t_Si t_so t_SR t_sr t_ST t_Te t_te t_TE t_ti t_TI t_Ts t_ts t_u7 t_ue t_us t_Us t_ut t_vb t_ve t_vi t_VS t_vs t_WP t_WS t_XM t_xn t_xs t_ZH t_ZR t_8f t_8b t_8u t_xo +syn keyword vimOptionVarName contained t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ku +syn match vimOptionVarName contained "t_%1" +syn match vimOptionVarName contained "t_#2" +syn match vimOptionVarName contained "t_#4" +syn match vimOptionVarName contained "t_@7" +syn match vimOptionVarName contained "t_*7" +syn match vimOptionVarName contained "t_&8" +syn match vimOptionVarName contained "t_%i" +syn match vimOptionVarName contained "t_k;" + +" unsupported settings: some were supported by vi but don't do anything in vim {{{2 +" GEN_SYN_VIM: Missing vimOption, START_STR='syn keyword vimErrSetting contained', END_STR='' +syn keyword vimErrSetting contained akm altkeymap anti antialias ap autoprint bf beautify biosk bioskey consk conskey fk fkmap fl flash gr graphic ht hardtabs macatsui mesg novice open opt optimize oft osfiletype redraw slow slowopen sourceany w1200 w300 w9600 +syn keyword vimErrSetting contained noakm noaltkeymap noanti noantialias noap noautoprint nobf nobeautify nobiosk nobioskey noconsk noconskey nofk nofkmap nofl noflash nogr nographic nomacatsui nomesg nonovice noopen noopt nooptimize noredraw noslow noslowopen nosourceany +syn keyword vimErrSetting contained invakm invaltkeymap invanti invantialias invap invautoprint invbf invbeautify invbiosk invbioskey invconsk invconskey invfk invfkmap invfl invflash invgr invgraphic invmacatsui invmesg invnovice invopen invopt invoptimize invredraw invslow invslowopen invsourceany + +" AutoCmd Events {{{2 +syn case ignore +" GEN_SYN_VIM: vimAutoEvent, START_STR='syn keyword vimAutoEvent contained', END_STR='skipwhite nextgroup=vimAutoEventSep,@vimAutocmdPattern' +syn keyword vimAutoEvent contained BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre CmdlineChanged CmdlineEnter CmdlineLeave CmdlineLeavePre CmdUndefined CmdwinEnter CmdwinLeave ColorScheme ColorSchemePre CompleteChanged CompleteDone CompleteDonePre CursorHold CursorHoldI CursorMoved CursorMovedC CursorMovedI DiffUpdated DirChanged DirChangedPre EncodingChanged ExitPre FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre skipwhite nextgroup=vimAutoEventSep,@vimAutocmdPattern +syn keyword vimAutoEvent contained FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave InsertLeavePre KeyInputPre MenuPopup ModeChanged OptionSet QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SafeState SafeStateAgain SessionLoadPost SessionWritePost ShellCmdPost ShellFilterPost SigUSR1 SourceCmd SourcePost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabClosed TabClosedPre TabEnter TabLeave TabNew TermChanged TerminalOpen TerminalWinOpen TermResponse TermResponseAll TextChanged TextChangedI TextChangedP TextChangedT TextYankPost VimEnter VimLeave VimLeavePre VimResized VimResume VimSuspend WinClosed WinEnter WinLeave WinNew WinNewPre WinResized skipwhite nextgroup=vimAutoEventSep,@vimAutocmdPattern +syn keyword vimAutoEvent contained WinScrolled skipwhite nextgroup=vimAutoEventSep,@vimAutocmdPattern + +syn keyword vimAutoEvent contained User skipwhite nextgroup=vimUserAutoEvent +syn match vimUserAutoEvent contained "\<\h\w*\>" skipwhite nextgroup=vimUserAutoEventSep,vimAutocmdMod,vimAutocmdBlock + +" Highlight commonly used Groupnames {{{2 +" GEN_SYN_VIM: vimGroup, START_STR='syn keyword vimGroup contained', END_STR='' +syn keyword vimGroup contained Added Bold BoldItalic Boolean Changed Character Comment Conditional Constant Debug Define Delimiter Error Exception Float Function Identifier Ignore Include Italic Keyword Label Macro Number Operator PreCondit PreProc Removed Repeat Special SpecialChar SpecialComment Statement StorageClass String Structure Tag Todo Type Typedef Underlined + +" Default highlighting groups {{{2 +" GEN_SYN_VIM: vimHLGroup, START_STR='syn keyword vimHLGroup contained', END_STR='' +syn keyword vimHLGroup contained ErrorMsg IncSearch ModeMsg NonText StatusLine StatusLineNC EndOfBuffer VertSplit VisualNOS DiffText DiffTextAdd PmenuSbar TabLineSel TabLineFill TabPanel TabPanelSel TabPanelFill Cursor lCursor TitleBar TitleBarNC QuickFixLine CursorLineSign CursorLineFold CurSearch PmenuKind PmenuKindSel PmenuMatch PmenuMatchSel PmenuExtra PmenuExtraSel PmenuBorder PopupSelected MessageWindow PopupNotification PreInsert Normal Directory LineNr CursorLineNr MoreMsg Question Search SpellBad SpellCap SpellRare SpellLocal PmenuThumb PmenuShadow Pmenu PmenuSel SpecialKey Title WarningMsg WildMenu Folded FoldColumn SignColumn Visual DiffAdd DiffChange DiffDelete TabLine CursorColumn CursorLine ColorColumn MatchParen StatusLineTerm StatusLineTermNC ToolbarLine +syn keyword vimHLGroup contained ToolbarButton TitleBar TitleBarNC Menu Tooltip Scrollbar CursorIM ComplMatchIns LineNrAbove LineNrBelow MsgArea Terminal User1 User2 User3 User4 User5 User6 User7 User8 User9 +syn match vimHLGroup contained "\" +syn case match + +" Function Names {{{2 +" GEN_SYN_VIM: vimFuncName, START_STR='syn keyword vimFuncName contained', END_STR='' +syn keyword vimFuncName contained abs acos add and append appendbufline argc argidx arglistid argv asin assert_beeps assert_equal assert_equalfile assert_exception assert_fails assert_false assert_inrange assert_match assert_nobeep assert_notequal assert_notmatch assert_report assert_true atan atan2 autocmd_add autocmd_delete autocmd_get balloon_gettext balloon_show balloon_split base64_decode base64_encode bindtextdomain blob2list blob2str browse browsedir bufadd bufexists buflisted bufload bufloaded bufname bufnr bufwinid bufwinnr byte2line byteidx byteidxcomp call ceil ch_canread ch_close ch_close_in ch_evalexpr ch_evalraw ch_getbufnr ch_getjob ch_info ch_log ch_logfile ch_open ch_read ch_readblob ch_readraw ch_sendexpr ch_sendraw ch_setoptions ch_status changenr +syn keyword vimFuncName contained char2nr charclass charcol charidx chdir cindent clearmatches cmdcomplete_info col complete complete_add complete_check complete_info complete_match confirm copy cos cosh count cscope_connection cursor debugbreak deepcopy delete deletebufline did_filetype diff diff_filler diff_hlID digraph_get digraph_getlist digraph_set digraph_setlist echoraw empty environ err_teapot escape eval eventhandler executable execute exepath exists exists_compiled exp expand expandcmd extend extendnew feedkeys filecopy filereadable filewritable filter finddir findfile flatten flattennew float2nr floor fmod fnameescape fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreach foreground fullcommand funcref function garbagecollect +syn keyword vimFuncName contained get getbufinfo getbufline getbufoneline getbufvar getcellpixels getcellwidths getchangelist getchar getcharmod getcharpos getcharsearch getcharstr getcmdcomplpat getcmdcompltype getcmdline getcmdpos getcmdprompt getcmdscreenpos getcmdtype getcmdwintype getcompletion getcompletiontype getcurpos getcursorcharpos getcwd getenv getfontname getfperm getfsize getftime getftype getimstatus getjumplist getline getloclist getmarklist getmatches getmousepos getmouseshape getpid getpos getqflist getreg getreginfo getregion getregionpos getregtype getscriptinfo getstacktrace gettabinfo gettabvar gettabwinvar gettagstack gettext getwininfo getwinpos getwinposx getwinposy getwinvar glob glob2regpat globpath has has_key haslocaldir hasmapto +syn keyword vimFuncName contained histadd histdel histget histnr hlID hlexists hlget hlset hostname iconv id indent index indexof input inputdialog inputlist inputrestore inputsave inputsecret insert instanceof interrupt invert isabsolutepath isdirectory isinf islocked isnan items job_getchannel job_info job_setoptions job_start job_status job_stop join js_decode js_encode json_decode json_encode keys keytrans len libcall libcallnr line line2byte lispindent list2blob list2str list2tuple listener_add listener_flush listener_remove localtime log log10 luaeval map maparg mapcheck maplist mapnew mapset match matchadd matchaddpos matcharg matchbufline matchdelete matchend matchfuzzy matchfuzzypos matchlist matchstr matchstrlist matchstrpos max menu_info min mkdir mode +syn keyword vimFuncName contained mzeval nextnonblank ngettext nr2char or pathshorten perleval popup_atcursor popup_beval popup_clear popup_close popup_create popup_dialog popup_filter_menu popup_filter_yesno popup_findecho popup_findinfo popup_findpreview popup_getoptions popup_getpos popup_hide popup_list popup_locate popup_menu popup_move popup_notification popup_setbuf popup_setoptions popup_settext popup_show pow preinserted prevnonblank printf prompt_getprompt prompt_setcallback prompt_setinterrupt prompt_setprompt prop_add prop_add_list prop_clear prop_find prop_list prop_remove prop_type_add prop_type_change prop_type_delete prop_type_get prop_type_list pum_getpos pumvisible py3eval pyeval pyxeval rand range readblob readdir readdirex readfile reduce reg_executing +syn keyword vimFuncName contained reg_recording reltime reltimefloat reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remote_startserver remove rename repeat resolve reverse round rubyeval screenattr screenchar screenchars screencol screenpos screenrow screenstring search searchcount searchdecl searchpair searchpairpos searchpos server2client serverlist setbufline setbufvar setcellwidths setcharpos setcharsearch setcmdline setcmdpos setcursorcharpos setenv setfperm setline setloclist setmatches setpos setqflist setreg settabvar settabwinvar settagstack setwinvar sha256 shellescape shiftwidth sign_define sign_getdefined sign_getplaced sign_jump sign_place sign_placelist sign_undefine sign_unplace sign_unplacelist simplify sin sinh slice +syn keyword vimFuncName contained sort sound_clear sound_playevent sound_playfile sound_stop soundfold spellbadword spellsuggest split sqrt srand state str2blob str2float str2list str2nr strcharlen strcharpart strchars strdisplaywidth strftime strgetchar stridx string strlen strpart strptime strridx strtrans strutf16len strwidth submatch substitute swapfilelist swapinfo swapname synID synIDattr synIDtrans synconcealed synstack system systemlist tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tan tanh tempname term_dumpdiff term_dumpload term_dumpwrite term_getaltscreen term_getansicolors term_getattr term_getcursor term_getjob term_getline term_getscrolled term_getsize term_getstatus term_gettitle term_gettty term_list term_scrape term_sendkeys term_setansicolors +syn keyword vimFuncName contained term_setapi term_setkill term_setrestore term_setsize term_start term_wait terminalprops test_alloc_fail test_autochdir test_feedinput test_garbagecollect_now test_garbagecollect_soon test_getvalue test_gui_event test_ignore_error test_mswin_event test_null_blob test_null_channel test_null_dict test_null_function test_null_job test_null_list test_null_partial test_null_string test_null_tuple test_option_not_set test_override test_refcount test_setmouse test_settime test_srand_seed test_unknown test_void timer_info timer_pause timer_start timer_stop timer_stopall tolower toupper tr trim trunc tuple2list type typename undofile undotree uniq uri_decode uri_encode utf16idx values virtcol virtcol2col visualmode wildmenumode wildtrigger +syn keyword vimFuncName contained win_execute win_findbuf win_getid win_gettype win_gotoid win_id2tabwin win_id2win win_move_separator win_move_statusline win_screenpos win_splitmove winbufnr wincol windowsversion winheight winlayout winline winnr winrestcmd winrestview winsaveview winwidth wordcount writefile xor + +" Predefined variable names {{{2 +" GEN_SYN_VIM: vimVarName, START_STR='syn keyword vimVimVarName contained', END_STR='' +syn keyword vimVimVarName contained count count1 prevcount errmsg warningmsg statusmsg shell_error this_session version lnum termresponse fname lang lc_time ctype charconvert_from charconvert_to fname_in fname_out fname_new fname_diff cmdarg foldstart foldend folddashes foldlevel progname servername dying exception throwpoint register cmdbang insertmode val key profiling fcs_reason fcs_choice beval_bufnr beval_winnr beval_winid beval_lnum beval_col beval_text scrollstart swapname swapchoice swapcommand char mouse_win mouse_winid mouse_lnum mouse_col operator searchforward hlsearch oldfiles windowid progpath completed_item option_new option_old option_oldlocal option_oldglobal option_command option_type errors false true none null numbermax numbermin numbersize +syn keyword vimVimVarName contained vim_did_enter testing t_number t_string t_func t_list t_dict t_float t_bool t_none t_job t_channel t_blob t_class t_object termrfgresp termrbgresp termu7resp termstyleresp termblinkresp event versionlong echospace argv collate exiting colornames sizeofint sizeoflong sizeofpointer maxcol python3_version t_typealias t_enum t_enumvalue stacktrace t_tuple wayland_display clipmethod termda1 termosc vim_did_init + +"--- syntax here and above generated by runtime/syntax/generator/gen_syntax_vim.vim --- + +" Special Vim Highlighting (not automatic) {{{1 + +" Neovim keyword list additions {{{2 + +if s:has("nvim") + syn keyword vimOptionVarName contained channel inccommand mousescroll pumblend redrawdebug scrollback shada shadafile statuscolumn termpastefilter termsync winbar winblend winhighlight + syn keyword vimFuncName contained api_info buffer_exists buffer_name buffer_number chanclose chansend ctxget ctxpop ctxpush ctxset ctxsize dictwatcheradd dictwatcherdel file_readable highlight_exists highlightID jobclose jobpid jobresize jobsend jobstart jobstop jobwait last_buffer_nr menu_get msgpackdump msgpackparse reg_recorded rpcnotify rpcrequest rpcstart rpcstop serverstart serverstop sockconnect stdioopen stdpath termopen test_write_list_log wait + syn match vimFuncName contained "\" + syn keyword vimVimVarName contained lua msgpack_types relnum stderr termrequest virtnum +endif + +" Set up commands for this syntax highlighting file {{{2 + +com! -nargs=* Vim9 execute s:vim9script ? "" : "contained" +com! -nargs=* VimL execute s:vim9script ? "contained" : "" + +if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[acefhiHlmpPrt]' + if g:vimsyn_folding =~# 'a' + com! -nargs=* VimFolda fold + else + com! -nargs=* VimFolda + endif + if g:vimsyn_folding =~# 'c' + com! -nargs=* VimFoldc fold + else + com! -nargs=* VimFoldc + endif + if g:vimsyn_folding =~# 'e' + com! -nargs=* VimFolde fold + else + com! -nargs=* VimFolde + endif + if g:vimsyn_folding =~# 'f' + com! -nargs=* VimFoldf fold + else + com! -nargs=* VimFoldf + endif + if g:vimsyn_folding =~# 'h' + com! -nargs=* VimFoldh fold + else + com! -nargs=* VimFoldh + endif + if g:vimsyn_folding =~# 'H' + com! -nargs=* VimFoldH fold + else + com! -nargs=* VimFoldH + endif + if g:vimsyn_folding =~# 'i' + com! -nargs=* VimFoldi fold + else + com! -nargs=* VimFoldi + endif + if g:vimsyn_folding =~# 'l' + com! -nargs=* VimFoldl fold + else + com! -nargs=* VimFoldl + endif + if g:vimsyn_folding =~# 'm' + com! -nargs=* VimFoldm fold + else + com! -nargs=* VimFoldm + endif + if g:vimsyn_folding =~# 'p' + com! -nargs=* VimFoldp fold + else + com! -nargs=* VimFoldp + endif + if g:vimsyn_folding =~# 'P' + com! -nargs=* VimFoldP fold + else + com! -nargs=* VimFoldP + endif + if g:vimsyn_folding =~# 'r' + com! -nargs=* VimFoldr fold + else + com! -nargs=* VimFoldr + endif + if g:vimsyn_folding =~# 't' + com! -nargs=* VimFoldt fold + else + com! -nargs=* VimFoldt + endif +else + com! -nargs=* VimFolda + com! -nargs=* VimFoldc + com! -nargs=* VimFolde + com! -nargs=* VimFoldf + com! -nargs=* VimFoldi + com! -nargs=* VimFoldh + com! -nargs=* VimFoldH + com! -nargs=* VimFoldl + com! -nargs=* VimFoldm + com! -nargs=* VimFoldp + com! -nargs=* VimFoldP + com! -nargs=* VimFoldr + com! -nargs=* VimFoldt +endif + +" Deprecated variable options {{{2 +if exists("g:vim_minlines") + let g:vimsyn_minlines= g:vim_minlines +endif +if exists("g:vim_maxlines") + let g:vimsyn_maxlines= g:vim_maxlines +endif +if exists("g:vimsyntax_noerror") + let g:vimsyn_noerror= g:vimsyntax_noerror +endif + +" Nulls {{{2 +" ===== +Vim9 syn keyword vim9Null null null_blob null_channel null_class null_dict null_function null_job null_list null_object null_partial null_string null_tuple + +" Booleans {{{2 +" ======== +Vim9 syn keyword vim9Boolean true false + +" Numbers {{{2 +" ======= +syn case ignore +syn match vimNumber "\<\d\+\%('\d\+\)*" skipwhite nextgroup=@vimComment,vimSubscript,vimGlobal,vimSubst1 +syn match vimNumber "\<\d\+\%('\d\+\)*\.\d\+\%(e[+-]\=\d\+\)\=" skipwhite nextgroup=@vimComment +syn match vimNumber "\<0b[01]\+\%('[01]\+\)*" skipwhite nextgroup=@vimComment,vimSubscript +syn match vimNumber "\<0o\=\o\+\%('\o\+\)*" skipwhite nextgroup=@vimComment,vimSubscript +syn match vimNumber "\<0x\x\+\%('\x\+\)*" skipwhite nextgroup=@vimComment,vimSubscript +syn match vimNumber '\<0z\>' skipwhite nextgroup=@vimComment +syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=@vimComment,vimSubscript +syn case match + +" All vimCommands are contained by vimIsCommand. {{{2 +syn cluster vimCmdList contains=vimAbb,vimAddress,vimAt,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimCommandModifier,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDefer,vimDelcommand,vimDelFunction,vimDoCommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimEval,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFiletype,vimFor,vimFunction,vimFunctionFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimImport,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimSyntime,vimSynColor,vimSynLink,vimTerminal,vimThrow,vimUniq,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimWincmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl +syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var +syn match vimCmdSep "\\\@1" nextgroup=vimBang contains=vimCommand +syn match vimBang contained "!" +syn match vimWhitespace contained "\s\+" + +syn region vimSubscript contained matchgroup=vimSubscriptBracket start="\[" end="]" nextgroup=vimSubscript contains=@vimExprList + +syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vim9Super,vim9This +syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vimVarScope +syn match vimVar "\" nextgroup=vimSubscript contains=vimVarScope +syn match vimFBVar contained "\<[bwglsta]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vimVarScope + +" match the scope prefix independently of the retrofitted scope dictionary +syn match vimVarScope contained "\<[bwglstav]:" +syn match vimVimVar contained "\<[bwglstav]:\%(\h\|\d\)\@!" nextgroup=vimSubscript + +syn match vimVarNameError contained "\<\h\w*\>" +syn match vimVimVar "\" contains=vim9Super,vim9This + +Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+[-+/*%]\==" contains=vimVar,@vimSpecialVar +Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+=<<" skipwhite nextgroup=vimLetHeredoc contains=vimVar,@vimSpecialVar +Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+\.\.=" contains=vimVar,@vimSpecialVar + +Vim9 syn match vim9LhsRegister "@["0-9\-a-zA-Z#=*+_/]\ze\s\+\%(\.\.\)\==" + +syn cluster vimExprList contains=@vimSpecialVar,@vimFunc,vimNumber,vimOper,vimOperParen,vimLambda,vimString,vimVar,@vim9ExprList +syn cluster vim9ExprList contains=vim9Boolean,vim9LambdaParams,vim9Null + +" Insertions And Appends: insert append {{{2 +" (buftype != nofile test avoids having append, change, insert show up in the command window) +" ======================= +if &buftype != 'nofile' + syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=a\%[ppend]$" matchgroup=vimCommand end="^\.$" extend + syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=c\%[hange]$" matchgroup=vimCommand end="^\.$" extend + syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=i\%[nsert]$" matchgroup=vimCommand end="^\.$" extend +endif + +" Behave! {{{2 +" ======= +if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nobehaveerror") + syn match vimBehaveError contained "[^ ]\+" +endif +syn match vimBehave "\" nextgroup=vimBehaveBang,vimBehaveModel,vimBehaveError skipwhite +syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite +syn keyword vimBehaveModel contained mswin xterm + +" Call {{{2 +" ==== +syn match vimCall "\" skipwhite nextgroup=vimVar,@vimFunc + +" Debuggreedy {{{2 +" =========== +" TODO: special-cased until generalised range/count support is implemented +syn match vimDebuggreedy "\<0\=debugg\%[reedy]\>" contains=vimCount + +" Defer {{{2 +" ===== +syn match vimDefer "\" skipwhite nextgroup=@vimFunc,vim9LambdaParams + +" *Do commands {{{2 +" ============ +syn match vimDoCommandBang contained "\a\@1<=!" skipwhite nextgroup=@vimCmdList + +syn keyword vimDoCommand argdo bufd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList +syn keyword vimDoCommand tabd[o] wind[o] skipwhite nextgroup=@vimCmdList +syn keyword vimDoCommand cdo cfd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList +syn keyword vimDoCommand ld[o] lfd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList +syn keyword vimDoCommand foldd[oopen] folddoc[losed] skipwhite nextgroup=@vimCmdList + +" Exception Handling {{{2 +syn keyword vimThrow th[row] skipwhite nextgroup=@vimExprList +syn keyword vimCatch cat[ch] skipwhite nextgroup=vimCatchPattern +syn region vimCatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline + +" Export {{{2 +" ====== +if s:vim9script + syn keyword vim9Export export skipwhite nextgroup=vim9Abstract,vim9ClassBody,vim9Const,vim9Def,vim9EnumBody,vim9Final,vim9InterfaceBody,vim9Type,vim9Var +endif + +" Filetypes {{{2 +" ========= +syn match vimFiletype "\" skipwhite nextgroup=@vimComment +syn match vimImport "\" skipwhite nextgroup=vimImportAutoload,vimImportFilename + +" Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2 +" ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking. +syn cluster vimAugroupList contains=@vimCmdList,vimFilter,@vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue + +" define +VimFolda syn region vimAugroup + \ start="\\ze\s\+\%([eE][nN][dD]\%($\|[[:space:]|"#]\)\)\@!\S" + \ matchgroup=vimAugroupKey + \ end="\" skipwhite nextgroup=vimCmdSep,vimComment +syn match vimAugroupBang contained "\a\@1<=!" skipwhite nextgroup=vimAugroupName +syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBang,vimAugroupName,vimAugroupEnd + +" remove +syn match vimAugroup "\\ze\s*\%(["|]\|$\)" skipwhite nextgroup=vimCmdSep,vimComment contains=vimAugroupKey +Vim9 syn match vimAugroup "\\ze\s*\%([#|]\|$\)" skipwhite nextgroup=vimCmdSep,vim9Comment contains=vimAugroupKey + +" Operators: {{{2 +" ========= +syn cluster vimOperGroup contains=@vimContinue,@vimExprList,vim9Comment,vim9LineComment,vimContinueString +syn match vimOper "\a\@=\|<=\|=\~\|!\~\|>\|<\)[?#]\=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString,vimSpecFile +syn match vimOper "\" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString,vimSpecFile +syn match vimOper "\" skipwhite nextgroup=@vimExprList +syn region vimLambda contained + \ matchgroup=vimLambdaBrace + \ start=+{\ze[[:space:][:alnum:]_.,]*\%(\n\s*\%(\\[[:space:][:alnum:]_.,]*\|"\\ .*\)\)*->+ + \ skip=+\n\s*\%(\\\|"\\ \)+ + \ end="}" end="$" + \ contains=@vimContinue,@vimExprList,vimLambdaParams +syn match vimLambdaParams contained "\%({\n\=\)\@1<=\_.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=@vimContinue,vimFunctionParam + +syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment +syn match vim9LambdaParen contained "[()]" +syn match vim9LambdaParams contained + \ "(\%(\" + \ skipwhite nextgroup=vim9LambdaOperator + \ contains=@vim9Continue,vimDefParam,vim9LambdaParen,vim9LambdaReturnType +syn region vim9LambdaReturnType contained start=")\@<=:\s" end="\ze\s*#" end="\ze\s*=>" contains=@vim9Continue,@vimType transparent +syn region vim9LambdaBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList + +syn match vim9LambdaOperatorComment contained "#.*" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment + +" Functions: Tag is provided for those who wish to highlight tagged functions {{{2 +" ========= +syn cluster vimFunctionBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunction,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFunctionFold,vimDefFold,vimCmdSep +syn cluster vimFunctionBodyList contains=@vimFunctionBodyCommon,vimComment,vimLineComment,vimInsert,vimConst,vimLet,vimSearch +syn cluster vimDefBodyList contains=@vimFunctionBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar,@vim9Func + +syn region vimFunctionPattern contained + \ matchgroup=vimOper + \ start="/" + \ end="$" + \ contains=@vimSubstList + +syn match vimFunctionBang contained "\a\@1<=!" skipwhite nextgroup=vimFunctionName +syn match vimDefBang contained "\a\@1<=!" skipwhite nextgroup=vimDefName +syn match vimFunctionSID contained "\c" +syn match vimFunctionScope contained "\<[bwglstav]:" +syn match vimFunctionName contained + \ "\%(<[sS][iI][dD]>\|[bwglstav]:\)\=\%([[:alnum:]_#.]\+\|{.\{-1,}}\)\+" + \ skipwhite nextgroup=vimFunctionParams,vimCmdSep,vimComment,vim9Comment + \ contains=vimFunctionError,vimFunctionScope,vimFunctionSID,Tag +syn match vimDefName contained + \ "\%(<[sS][iI][dD]>\|[bwglstav]:\)\=\%([[:alnum:]_#.]\+\|{.\{-1,}}\)\+" + \ nextgroup=vimDefTypeParams,vimDefParams,vimCmdSep,vimComment,vim9Comment + \ contains=vimFunctionError,vimFunctionScope,vimFunctionSID,Tag + +syn match vimFunction "\" skipwhite nextgroup=vimFunctionBang,vimFunctionName,vimFunctionPattern,vimCmdSep,vimComment +syn match vimDef "\" skipwhite nextgroup=vimDefBang,vimDefName,vimFunctionPattern,vimCmdSep,vimComment + +syn region vimFunctionComment contained + \ start=+".*+ + \ skip=+\n\s*\%(\\\|"\\ \)+ + \ end="$" + \ skipwhite skipempty nextgroup=vimFunctionBody,vimEndfunction +syn region vimDefComment contained + \ start="#.*" + \ skip=+\n\s*\%(\\\|#\\ \)+ + \ end="$" + \ skipwhite skipempty nextgroup=vimDefBody,vimEnddef + +syn region vimFunctionParams contained + \ matchgroup=Delimiter + \ start="(" + \ skip=+\n\s*\%(\\\|"\\ \)+ + \ end=")" + \ skipwhite skipempty nextgroup=vimFunctionBody,vimFunctionComment,vimEndfunction,vimFunctionMod,vim9CommentError + \ contains=vimFunctionParam,vimOperParen,@vimContinue +syn region vimDefParams contained + \ matchgroup=Delimiter + \ start="(" + \ end=")" + \ skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType,vimCommentError + \ contains=vimDefParam,vim9Comment,vimFunctionParamEquals,vimOperParen +syn region vimDefTypeParams contained + \ matchgroup=Delimiter + \ start="<" + \ end=">" + \ nextgroup=vimDefParams + \ contains=vim9DefTypeParam +syn match vimFunctionParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFunctionParamEquals +syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFunctionParamEquals +syn match vim9DefTypeParam contained "\<\u\w*\>" + +syn match vimFunctionParamEquals contained "=" skipwhite nextgroup=@vimExprList +syn match vimFunctionMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipempty nextgroup=vimFunctionBody,vimFunctionComment,vimEndfunction,vimFunctionMod,vim9CommentError + +syn region vimFunctionBody contained + \ start="^." + \ matchgroup=vimCommand + \ end="\" + \ skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError + \ contains=@vimFunctionBodyList +syn region vimDefBody contained + \ start="^." + \ matchgroup=vimCommand + \ end="\" + \ skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError + \ contains=@vimDefBodyList + +syn match vimEndfunction "\" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError +syn match vimEnddef "\" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError + +if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f' + syn region vimFunctionFold + \ start="\" skipwhite nextgroup=vimDelfunctionBang,vimFunctionName + +" Types: {{{2 +" ===== + +syn region vimReturnType contained + \ start=":\%(\s\|\n\)\@=" + \ skip=+\n\s*\%(\\\|#\\ \)\|^\s*#\\ + + \ end="$" + \ matchgroup=vim9Comment + "\ allow for legacy script tail comment error + \ end="\ze[#"]" + \ skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimCommentError + \ contains=@vim9Continue,@vimType + \ transparent +syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType contains=vimTypeSep + +syn match vimTypeSep contained ":\%(\s\|\n\)\@=" skipwhite nextgroup=@vimType +syn keyword vimType contained blob bool channel float job number string void +syn keyword vimTypeAny contained any +syn match vimTypeObject contained "\" +syn region vimCompoundType contained matchgroup=vimType start="\" + +syn cluster vimType contains=vimType,vimTypeAny,vimTypeObject,vimCompoundType,vimUserType + +" Classes, Enums And Interfaces: {{{2 +" ============================= + +if s:vim9script + + " Methods {{{3 + syn match vim9MethodDef contained "\" skipwhite nextgroup=vim9MethodDefName,vim9ConstructorDefName + syn match vim9MethodDefName contained "\<\h\w*\>" nextgroup=vim9MethodDefParams,vim9MethodDefTypeParams contains=@vim9MethodName + syn region vim9MethodDefParams contained + \ matchgroup=Delimiter start="(" end=")" + \ skipwhite skipnl nextgroup=vim9MethodDefBody,vim9MethodDefComment,vimEnddef,vim9MethodDefReturnType,vimCommentError + \ contains=vimDefParam,vim9Comment,vimFunctionParamEquals + syn region vim9MethodDefTypeParams contained + \ matchgroup=Delimiter + \ start="<" + \ end=">" + \ nextgroup=vim9MethodDefParams + \ contains=vim9DefTypeParam + + syn match vim9ConstructorDefName contained "\<_\=new\w*\>" + \ nextgroup=vim9ConstructorDefParams,vim9ConstuctorDefTypeParams + \ contains=@vim9MethodName + syn match vim9ConstructorDefParam contained "\<\%(this\.\)\=\h\w*\>" + \ skipwhite nextgroup=vimParamType,vimFunctionParamEquals + \ contains=vim9This,vimOper + syn region vim9ConstructorDefParams contained + \ matchgroup=Delimiter start="(" end=")" + \ skipwhite skipnl nextgroup=vim9MethodDefBody,vim9MethodDefComment,vimEnddef,vimCommentError + \ contains=vim9ConstructorDefParam,vim9Comment,vimFunctionParamEquals + syn region vim9ConstuctorDefTypeParams contained + \ matchgroup=Delimiter + \ start="<" + \ end=">" + \ nextgroup=vim9ConstructorDefParams + \ contains=vim9DefTypeParam + + syn region vim9MethodDefReturnType contained + \ start=":\%(\s\|\n\)\@=" + \ skip=+\n\s*\%(\\\|#\\ \)\|^\s*#\\ + + \ end="$" + \ matchgroup=vim9Comment + \ end="\ze#" + \ skipwhite skipnl nextgroup=vim9MethodDefBody,vim9MethodDefComment,vimEnddef,vimCommentError + \ contains=@vim9Continue,vimType,vimTypeSep + \ transparent + + syn region vim9MethodDefComment contained + \ start="#.*" + \ skip=+\n\s*\%(\\\|#\\ \)+ + \ end="$" + \ skipwhite skipempty nextgroup=vim9MethodDefBody,vimEnddef + + syn region vim9MethodDefBody contained + \ start="^.\=" matchgroup=vimCommand end="\" + \ skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError + \ contains=@vim9MethodDefBodyList + + syn cluster vim9MethodDefBodyList contains=@vimDefBodyList,vim9This,vim9Super + + if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror") + syn match vim9MethodNameError contained "\<[a-z0-9]\i\>" + endif + syn match vim9MethodName contained "\<_\=new\w*\>" + syn keyword vim9MethodName contained empty len string + + syn cluster vim9MethodName contains=vim9MethodName,vim9MethodNameError + + if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f' + syn region vim9MethodDefFold contained + \ start="\%(^\s*\%(:\=static\s\+\)\=\)\@16<=:\=def\s\+\h\w*[<(]" + \ end="^\s*:\=enddef\>" + \ contains=vim9MethodDef + \ fold keepend extend transparent + endif + + syn cluster vim9MethodDef contains=vim9MethodDef,vim9MethodDefFold + + " Classes {{{3 + syn cluster vim9ClassBodyList contains=vim9Abstract,vim9Class,vim9Comment,vim9LineComment,@vim9Continue,@vimExprList,vim9Extends,vim9Implements,@vim9MethodDef,vim9Public,vim9Static,vim9Const,vim9Final,vim9This,vim9Super,vim9Var + + syn match vim9Class contained "\" skipwhite nextgroup=vim9ClassName + syn match vim9ClassName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends,vim9Implements + syn match vim9SuperClass contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements + syn match vim9ImplementedInterface contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9InterfaceListComma,vim9Extends + syn match vim9InterfaceListComma contained "," skipwhite skipnl nextgroup=vim9ImplementedInterface + syn keyword vim9Abstract abstract skipwhite skipnl nextgroup=vim9ClassBody,vim9AbstractDef + syn keyword vim9Extends contained extends skipwhite skipnl nextgroup=vim9SuperClass + syn keyword vim9Implements contained implements skipwhite skipnl nextgroup=vim9ImplementedInterface + syn keyword vim9Public contained public + syn keyword vim9Static contained static + " FIXME: don't match as dictionary keys, remove when operators are not + " shared between Vim9 and legacy script + syn match vim9This contained "\.\@1:\@!" + " super must be folowed by '.' + syn match vim9Super contained "\.\@1" matchgroup=vimCommand end="\" contains=@vim9ClassBodyList transparent + + " Enums {{{3 + syn cluster vim9EnumBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Enum,@vimExprList,@vim9MethodDef,vim9Public,vim9Static,vim9Const,vim9Final,vim9This,vim9Var + + syn match vim9Enum contained "\" skipwhite nextgroup=vim9EnumName + + syn match vim9EnumName contained "\<\u\w*\>" skipwhite skipempty nextgroup=vim9EnumNameTrailing,vim9EnumNameEmpty,vim9EnumNameComment,@vim9EnumNameContinue,vim9EnumImplements + syn match vim9EnumNameTrailing contained "\S.*" + syn region vim9EnumNameComment contained + \ start="#" skip="\n\s*\%(\\\|#\\ \)" end="$" + \ skipwhite skipempty nextgroup=vim9EnumNameComment,vim9EnumValue + \ contains=@vimCommentGroup,vimCommentString + " vim9EnumName's "skipempty" should only apply to comments and enum values and not implements clauses + syn match vim9EnumNameEmpty contained "^" skipwhite skipempty nextgroup=vim9EnumNameComment,vim9EnumValue + " allow line continuation between enum name and "implements" + syn match vim9EnumNameContinue contained + \ "^\s*\\" + \ skipwhite skipnl nextgroup=vim9EnumNameTrailing,vim9EnumNameEmpty,vim9EnumNameComment,@vim9EnumNameContinue,vim9EnumImplements + \ contains=vimWhitespace + syn match vim9EnumNameContinueComment contained + \ "^\s*#\\ .*" + \ skipwhite skipnl nextgroup=vim9EnumNameEmpty,vim9EnumNameComment,@vim9EnumNameContinue + \ contains=vimWhitespace + syn cluster vim9EnumNameContinue contains=vim9EnumNameContinue,vim9EnumNameContinueComment + + " enforce enum value list location + syn match vim9EnumValue contained "\<\a\w*\>" nextgroup=vim9EnumValueTypeArgs,vim9EnumValueArgList,vim9EnumValueListComma,vim9Comment + syn match vim9EnumValueListComma contained "," skipwhite skipempty nextgroup=vim9EnumValue,vim9EnumValueListCommaComment + syn region vim9EnumValueListCommaComment contained + \ start="#" skip="\n\s*\%(\\\|#\\ \)" end="$" + \ skipwhite skipempty nextgroup=vim9EnumValueListCommaComment,vim9EnumValue + \ contains=@vimCommentGroup,vimCommentString + syn region vim9EnumValueTypeArgs contained + \ matchgroup=Delimiter + \ start="<\ze\a" + \ end=">" + \ nextgroup=vim9EnumValueArgList + \ contains=@vimType + \ oneline + syn region vim9EnumValueArgList contained + \ matchgroup=vimParenSep start="(" end=")" + \ nextgroup=vim9EnumValueListComma + \ contains=@vimExprList,vimContinueString,vim9Comment + + syn keyword vim9EnumImplements contained implements skipwhite nextgroup=vim9EnumImplementedInterface + syn match vim9EnumImplementedInterface contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9EnumInterfaceListComma,vim9EnumImplementedInterfaceComment,vim9EnumValue + syn match vim9EnumInterfaceListComma contained "," skipwhite nextgroup=vim9EnumImplementedInterface + syn region vim9EnumImplementedInterfaceComment contained + \ start="#" skip="\n\s*\%(\\\|#\\ \)" end="$" + \ skipwhite skipempty nextgroup=vim9EnumImplementedInterfaceComment,vim9EnumValue + \ contains=@vimCommentGroup,vimCommentString + + VimFolde syn region vim9EnumBody start="\" matchgroup=vimCommand end="\" contains=@vim9EnumBodyList transparent + + " Interfaces {{{3 + " TODO: limit to decl only - no init values + syn cluster vim9InterfaceBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Extends,vim9Interface,vim9AbstractDef,vim9Var + + syn match vim9Interface contained "\" skipwhite nextgroup=vim9InterfaceName + syn match vim9InterfaceName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends + + syn keyword vim9AbstractDef contained def skipwhite nextgroup=vim9AbstractDefName + syn match vim9AbstractDefName contained "\<\h\w*\>" skipwhite nextgroup=vim9AbstractDefParams,vim9AbstractDefTypeParams contains=@vim9MethodName + syn region vim9AbstractDefParams contained + \ matchgroup=Delimiter start="(" end=")" + \ skipwhite skipnl nextgroup=vimDefComment,vim9AbstractDefReturnType,vimCommentError + \ contains=vimDefParam,vim9Comment,vimFunctionParamEquals + syn region vim9AbstractDefReturnType contained + \ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]" + \ skipwhite skipnl nextgroup=vimDefComment,vimCommentError + \ contains=vimTypeSep + \ transparent + syn region vim9AbstractDefTypeParams contained + \ matchgroup=Delimiter + \ start="<" + \ end=">" + \ nextgroup=vim9AbstractDefParams + \ contains=vim9DefTypeParam + + VimFoldi syn region vim9InterfaceBody start="\" matchgroup=vimCommand end="\" contains=@vim9InterfaceBodyList transparent + + " Type Aliases {{{3 + syn match vim9Type "\" skipwhite nextgroup=vim9TypeAlias,vim9TypeAliasError + syn match vim9TypeAlias contained "\<\u\w*\>" skipwhite nextgroup=vim9TypeEquals + syn match vim9TypeEquals contained "=" skipwhite nextgroup=@vimType + if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_notypealiaserror") + syn match vim9TypeAliasError contained "\<\l\w*\>" skipwhite nextgroup=vim9TypeEquals + endif +endif + +" Blocks: {{{2 +" ====== +Vim9 syn region vim9Block + \ matchgroup=vimSep + \ start="{\ze\s*\%($\|[#|]\)" + \ end="^\s*\zs}" + \ skipwhite nextgroup=vim9Comment,vimCmdSep + \ contains=@vimDefBodyList + +" Keymaps: {{{2 +" ======= + +syn match vimKeymapStart "^" contained skipwhite nextgroup=vimKeymapLhs,@vimKeymapLineComment +syn match vimKeymapLhs "\S\+" contained skipwhite nextgroup=vimKeymapRhs contains=vimNotation +syn match vimKeymapRhs "\S\+" contained skipwhite nextgroup=vimKeymapTailComment contains=vimNotation +syn match vimKeymapTailComment "\S.*" contained + +" TODO: remove when :" comment is matched in parts as "ex-colon comment" --djk +if s:vim9script + syn match vim9KeymapLineComment "#.*" contained contains=@vimCommentGroup,vimCommentString,vim9CommentTitle +else + syn match vimKeymapLineComment +".*+ contained contains=@vimCommentGroup,vimCommentString,vimCommentTitle +endif +syn cluster vimKeymapLineComment contains=vim9\=KeymapLineComment + +syn region vimLoadkeymap matchgroup=vimCommand start="\" end="\%$" contains=vimKeymapStart + +" Special Filenames, Modifiers, Extension Removal: {{{2 +" =============================================== +syn match vimSpecFile "" nextgroup=vimSpecFileMod,vimSubst1 +syn match vimSpecFile "<\([acs]file\|amatch\|abuf\)>" nextgroup=vimSpecFileMod,vimSubst1 +syn match vimSpecFile "\s%[ \t:]"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1 +syn match vimSpecFile "\s%$"ms=s+1 nextgroup=vimSpecFileMod,vimSubst1 +syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1 +syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst1 +syn match vimSpecFileMod "\(:[phtre]\)\+" contained + +" User-Specified Commands: {{{2 +" ======================= +syn cluster vimUserCmdList contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,@vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange + +syn match vimUserCmd "\!\=" skipwhite nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang +syn match vimUserCmd +\!\=\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang + +syn region vimUserCmdAttrs contained + \ start="-\l" + \ start=+^\s*\%(\\\|["#]\\ \)+ + \ end="\ze\s\u" + \ skipwhite nextgroup=vimUserCmdName + \ contains=@vimContinue,vimUserCmdAttr,vimUserCmdAttrError + \ transparent +syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)" +syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr +syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrComplete,vimUserCmdError +syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber +syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs +syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange +syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey + +syn match vimUserCmdAttrNargs contained "[01*?+]" +syn match vimUserCmdAttrRange contained "%" + +if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror") + syn match vimUserCmdError contained "\S\+\>" +endif + +syn case ignore +syn keyword vimUserCmdAttrKey contained a[ddr] ban[g] bar bu[ffer] com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister] + +" GEN_SYN_VIM: vimUserCmdAttrComplete, START_STR='syn keyword vimUserCmdAttrComplete contained', END_STR='' +syn keyword vimUserCmdAttrComplete contained arglist augroup behave breakpoint buffer color command compiler cscope diff_buffer dir dir_in_path environment event expression file file_in_path filetype filetypecmd function help highlight history keymap locale mapclear mapping menu messages option packadd retab runtime scriptnames shellcmd shellcmdline sign syntax syntime tag tag_listfiles user var +syn keyword vimUserCmdAttrComplete contained arglist augroup behave breakpoint buffer color command compiler cscope diff_buffer dir dir_in_path environment event expression file file_in_path filetype function help highlight history keymap locale mapclear mapping menu messages option packadd runtime scriptnames shellcmd shellcmdline sign syntax syntime tag tag_listfiles user var +syn keyword vimUserCmdAttrComplete contained custom customlist nextgroup=vimUserCmdAttrCompleteFunc,vimUserCmdError +syn match vimUserCmdAttrCompleteFunc contained ",\%([bwglstav]:\|<[sS][iI][dD]>\)\=\h\w*\%([.#]\h\w*\)*"hs=s+1 nextgroup=vimUserCmdError contains=vimVarScope,vimFunctionSID + +" GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr contained', END_STR='' +syn keyword vimUserCmdAttrAddr contained arguments arg buffers buf lines line loaded_buffers load other quickfix qf tabs tab windows win +syn keyword vimUserCmdAttrAddr contained arguments arg buffers buf lines line loaded_buffers load other quickfix qf tabs tab windows win +syn match vimUserCmdAttrAddr contained "?" +syn case match + +syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock,vimUserCmdReplacement +syn match vimUserCmdName contained +\<\u[[:alnum:]]*\>\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimUserCmdBlock,vimUserCmdReplacement +syn region vimUserCmdReplacement contained + \ start="\S" + \ start=+^\s*\%(\\\|["#]\\ \)+ + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimContinue,@vimUserCmdList,vimComFilter + \ keepend +syn region vimUserCmdBlock contained + \ matchgroup=vimSep + \ start="{" + \ end="^\s*\zs}" + \ contains=@vimDefBodyList,@vimUserCmdList + +syn match vimDelcommand "\" skipwhite nextgroup=vimDelcommandAttr,vimDelcommandName +syn match vimDelcommandAttr contained "-buffer\>" skipwhite nextgroup=vimDelcommandName +syn match vimDelcommandName contained "\<\u[[:alnum:]]*\>" + +" Lower Priority Comments: after some vim commands... {{{2 +" ======================= +if get(g:, "vimsyn_comment_strings", 1) + syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"' extend +endif + +if s:vim9script + syn cluster vimComment contains=vim9Comment +else + syn cluster vimComment contains=vimComment +endif + +VimL syn region vimComment + \ excludenl + \ start=+"+ + \ skip=+\n\s*\%(\\\|"\\ \)+ + \ end="$" + \ contains=@vimCommentGroup,vimCommentString + \ extend +Vim9 syn region vim9Comment + \ excludenl + \ start="\%#=1\s\@1<=#\%({\@!\|{{\)" + \ skip="\n\s*\%(\\\|#\\ \)" + \ end="$" + \ contains=@vimCommentGroup,vimCommentString + \ extend + +syn match vim9CommentError contained "#.*" +syn match vimCommentError contained +".*+ + +" Environment Variables: {{{2 +" ===================== +syn match vimEnvvar "\$\I\i*" +syn match vimEnvvar "\${\I\i*}" + +" Strings {{{2 +" ======= + +" In-String Specials: +" Try to catch strings, if nothing else matches (therefore it must precede the others!) +" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside []) +" syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1 +syn match vimPatSepErr contained "\\)" +syn match vimPatSep contained "\\|" +syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\\]['"]" contains=@vimStringGroup +syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline +syn match vimNotPatSep contained "\\\\" +syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell +syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ nextgroup=vimSubscript contains=@vimStringGroup extend +syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z\\@]'+lc=1 end=+'+ nextgroup=vimSubscript contains=vimQuoteEscape extend +"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim + +syn match vimEscape contained "\\." +" syn match vimEscape contained +\\[befnrt\"]+ +syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1,8}" +syn match vimEscape contained "\\<" contains=vimNotation +syn match vimEscape contained "\\<\*[^>]*>\=>" +syn match vimQuoteEscape contained "''" + +syn region vimString oneline matchgroup=vimString start=+$'+ end=+'+ nextgroup=vimSubscript contains=@vimStringInterpolation,vimQuoteEscape extend +syn region vimString oneline matchgroup=vimString start=+$"+ end=+"+ nextgroup=vimSubscript contains=@vimStringInterpolation,@vimStringGroup extend +syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList +syn match vimStringInterpolationBrace contained "{{" +syn match vimStringInterpolationBrace contained "}}" +syn cluster vimStringInterpolation contains=vimStringInterpolationExpr,vimStringInterpolationBrace + +syn region vimContinueString contained matchgroup=vimContinueString start=+"+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+"+ end="$" skipwhite nextgroup=vimSubscript,vimComment contains=@vimContinue,@vimStringGroup +syn region vimContinueString contained matchgroup=vimContinueString start=+'+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+'+ end="$" skipwhite nextgroup=vimSubscript,vimComment contains=@vimContinue,vimQuoteEscape +syn region vimContinueString contained matchgroup=vimContinueString start=+$"+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+"+ end="$" skipwhite nextgroup=vimSubscript,vimComment contains=@vimContinue,@vimStringInterpolation,@vimStringGroup +syn region vimContinueString contained matchgroup=vimContinueString start=+$'+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+'+ end="$" skipwhite nextgroup=vimSubscript,vimComment contains=@vimContinue,@vimStringInterpolation,vimQuoteEscape + +" Substitutions: {{{2 +" ============= +syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation +syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation +syn cluster vimSubstList add=vimCollection +syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat,vimSubstFlags,vimSubstCount +syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat +syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\%(\d\+\)\@=" skipwhite nextgroup=vimSubstCount +syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat,vimSubstFlags,vimSubstCount +syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat +syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\%(\d\+\)\@=" skipwhite nextgroup=vimSubstCount +syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags +" & and # after :s are always pattern delimiters not flags +syn match vimSubstFlags contained "[&cegiIlnpr#]\+" skipwhite nextgroup=vimSubstCount +syn match vimSubstCount contained "\d\+\>" +" TODO: Vim9 illegal separators for abbreviated :s form are [-.:], :su\%[...] required +" : # is allowed but "not recommended" (see :h pattern-delimiter) +syn region vimSubstPat contained matchgroup=vimSubstDelim start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)"rs=s+1 skip="\\\\\|\\\z1" end="\z1"re=e-1,me=e-1 contains=@vimSubstList nextgroup=vimSubstRep4 oneline +syn region vimSubstRep4 contained matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList nextgroup=vimSubstFlagErr oneline +syn region vimCollection contained transparent start="\\\@\|[[\]<>'`]\)\@=" nextgroup=@vimMarkArg +VimL syn match vimExMark "\" skipwhite nextgroup=@vimMarkArg +syn match vimExMark "\" skipwhite nextgroup=@vimMarkArg + +syn match vimMarkArg contained "[a-zA-Z]\>\|[[\]<>'`]" skipwhite nextgroup=vimCmdSep,vimComment +syn match vimMarkArgError contained "["^.(){}0-9]" +syn cluster vimMarkArg contains=vimMarkArg,vimMarkArgError + +" Marks, Registers, Addresses, Filters: {{{2 +syn match vimMark "'[a-zA-Z0-9]\ze\s*$" +syn match vimMark "'[[\]{}()<>'`"^.]\ze\s*$" +syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1 +syn match vimMark "'[[\]{}()<>'`"^.]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1 +syn match vimMark ",\zs'[[\]{}()<>'`"^.]" nextgroup=vimFilter,vimMarkNumber,vimSubst1 +syn match vimMark "[!,:]\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1 +syn match vimMarkNumber "[-+]\d\+" contained contains=vimOper nextgroup=vimSubst1 +syn match vimPlainMark contained "'[a-zA-Z0-9]" +syn match vimRange "[`'][a-zA-Z0-9],[`'][a-zA-Z0-9]" contains=vimMark skipwhite nextgroup=vimFilter + +syn match vimRegister '[^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]' +syn match vimRegister '@"' +syn match vimLetRegister contained '@["@0-9\-a-zA-Z:.%#=*+~_/]' + +syn match vimAddress ",\zs[.$]" skipwhite nextgroup=vimSubst1 +syn match vimAddress "%\ze\a" skipwhite nextgroup=vimString,vimSubst1 + +syn match vimFilter "^!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile +syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile +syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile + +" Complex Repeats: (:h complex-repeat) {{{2 +" =============== +syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1 + +" NOTE: :* as an alias for :@ is not supported, this is considered a :range, +" see :help cpo-star +syn match vimAtArg contained +@\@1<=[0-9a-z".=*+:@]+ +syn match vimAt +@[0-9a-z".=*+:@]\ze\s*\%($\|[|"#]\)+ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment contains=vimAtArg +" Vim9: avoid LHS assignment mismatching of :@["#] +syn match vimAt +@\ze\s*\%($\||\|\s["#]\)+ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment + +" Set command and associated set-options (vimOptions) with comment {{{2 +syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimCmdSep,vimComment,vimSetArgs +syn region vimSetComment contained start=+"+ skip=+\n\s*\%(\\\||"\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString extend +syn match vimSetCmdSep contained "|" skipwhite nextgroup=@vimCmdList,vimSubst1,@vimFunc +syn match vimSetEscape contained "\\\%(\\[|"]\|.\)" +syn match vimSetBarEscape contained "\\|" +syn match vimSetQuoteEscape contained +\\"+ +syn region vimSetArgs contained + \ start="\l\|<" + \ skip=+\n\s*\%(\\\|["#]\\ \)\|^\s*"\\ + + \ end=+\ze\\\@1]\+>" contains=vimOption +syn region vimSetEqual contained + \ matchgroup=vimOper + \ start="[=:]\|[-+^]=" + \ skip=+\\\s\|^\s*\%(\\\|["#]\\ \)+ + \ end="\ze\s" + \ contains=@vimContinue,vimCtrlChar,vimEnvvar,vimNotation,vimSetSep,vimSetEscape,vimSetBarEscape,vimSetQuoteEscape +syn match vimSetBang contained "\a\@1<=!" skipwhite nextgroup=vimSetAll,vimSetTermcap +syn keyword vimSetAll contained all nextgroup=vimSetMod +syn keyword vimSetTermcap contained termcap +syn match vimSetSep contained "[,:]" +syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)" + +" Variable Declarations: {{{2 +" ===================== +VimL syn keyword vimLet let skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList,vimLetVar +VimL syn keyword vimConst cons[t] skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList,vimLetVar +syn region vimVarList contained + \ start="\[" end="]" + \ skipwhite nextgroup=vimLetHeredoc + \ contains=@vimContinue,@vimSpecialVar,vimVar +syn match vimLetVar contained "\<\%([bwglstav]:\)\=\h[a-zA-Z0-9#_]*\>\ze\%(\[.*]\)\=\s*=<<" skipwhite nextgroup=vimLetVarSubscript,vimLetHeredoc contains=vimVarScope,vimSubscript +hi link vimLetVar vimVar +syn region vimLetVarSubscript contained + \ matchgroup=vimSubscriptBracket + \ start="\S\@1<=\[" + \ end="]" + \ skipwhite nextgroup=vimLetVarSubscript,vimLetHeredoc + \ contains=@vimExprList + +VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars +syn match vimUnletBang contained "\a\@1<=!" skipwhite nextgroup=vimUnletVars +syn region vimUnletVars contained + \ start="$\I\|\h" skip=+\n\s*\%(\\\|"\\ \)\|^\s*"\\ + end="$" end="\ze[|"]" + \ nextgroup=vimCmdSep,vimComment + \ contains=@vimContinue,vimEnvvar,vimVar,vimVimVar + +" TODO: type error after register or environment variables (strings) +VimFoldh syn region vimLetHeredoc contained + \ matchgroup=vimLetHeredocStart + \ start="\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)" + \ matchgroup=vimLetHeredocStop + \ end="^\z1\=\z2$" + \ extend +VimFoldh syn region vimLetHeredoc contained + \ matchgroup=vimLetHeredocStart + \ start="=<<\%(\s*\)\@>\z(\L\S*\)" + \ matchgroup=vimLetHeredocStop end="^\z1$" + \ extend +VimFoldh syn region vimLetHeredoc contained + \ matchgroup=vimLetHeredocStart + \ start="\%(^\z(\s*\)\S.*\)\@<==<<\s*\%(trim\s\+eval\|eval\s\+trim\)\%(\s\+\)\@>\z(\L\S*\)" + \ matchgroup=vimLetHeredocStop + \ end="^\z1\=\z2$" + \ contains=@vimStringInterpolation + \ extend +VimFoldh syn region vimLetHeredoc contained + \ matchgroup=vimLetHeredocStart + \ start="=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)" + \ matchgroup=vimLetHeredocStop + \ end="^\z1$" + \ contains=@vimStringInterpolation + \ extend + +Vim9 syn keyword vim9Const const skipwhite nextgroup=vim9Variable,vim9VariableList +Vim9 syn keyword vim9Final final skipwhite nextgroup=vim9Variable,vim9VariableList +Vim9 syn keyword vim9Var var skipwhite nextgroup=vim9Variable,vim9VariableList + +syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vim9VariableTypeSep,vimLetHeredoc,vimOper +syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@vimSpecialVar,vim9Variable skipwhite nextgroup=vimLetHeredoc + +syn match vim9VariableTypeSep contained "\S\@1<=:\%(\s\|\n\)\@=" skipwhite nextgroup=@vim9VariableType +syn keyword vim9VariableType contained blob bool channel float job number string void skipwhite nextgroup=vimLetHeredoc +syn keyword vim9VariableTypeAny contained any skipwhite nextgroup=vimLetHeredoc +syn match vim9VariableTypeObject contained "\" skipwhite nextgroup=vimLetHeredoc +syn region vim9VariableCompoundType contained + \ matchgroup=vim9VariableType + \ start="\" skipwhite nextgroup=vimLetHeredoc + +syn cluster vim9VariableType contains=vim9VariableType,vim9VariableTypeAny,vim9VariableTypeObject,vim9VariableCompoundType,vim9VariableUserType + +" Lockvar and Unlockvar: {{{2 +" ===================== +syn keyword vimLockvar lockv[ar] skipwhite nextgroup=vimLockvarBang,vimLockvarDepth,vimLockvarVars +syn keyword vimUnlockvar unlo[ckvar] skipwhite nextgroup=vimLockvarBang,vimLockvarDepth,vimLockvarVars +syn match vimLockvarBang contained "\a\@1<=!" skipwhite nextgroup=vimLockvarVars +syn match vimLockvarDepth contained "\<[0-3]\>" skipwhite nextgroup=vimLockvarVars +syn region vimLockvarVars contained + \ start="\h" skip=+\n\s*\%(\\\|"\\ \)\|^\s*"\\ + end="$" end="\ze[|"]" + \ nextgroup=vimCmdSep,vimComment + \ contains=@vimContinue,vimVar + +hi def link vimLockvar vimCommand +hi def link vimUnlockvar vimCommand +hi def link vimLockvarBang vimBang +hi def link vimLockvarDepth vimNumber + +" For: {{{2 +" === +" handles Vim9 and legacy for now +syn region vimFor + \ matchgroup=vimCommand + \ start="\" end="\" + \ skipwhite skipnl nextgroup=@vimForInContinue,vim9ForInComment,@vimExprList + \ contains=@vimContinue,vimVar,vimVarList,vim9Variable,vim9VariableList + \ transparent + +syn match vim9ForInComment contained "#.*" skipwhite skipempty nextgroup=vimForInComment,@vimExprList + +syn match vimForInContinue contained "^\s*\zs\\" skipwhite skipnl nextgroup=@vimForInContinue,@vimExprList +syn match vimForInContinueComment contained '^\s*\zs["#]\\ .*' skipwhite skipnl nextgroup=@vimForInContinue,@vimExprList +syn cluster vimForInContinue contains=vimForInContinue,vimForInContinueComment + +" Abbreviations: {{{2 +" ============= +" GEN_SYN_VIM: vimCommand abbrev, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs' +syn keyword vimAbb ab[breviate] ca[bbrev] cnorea[bbrev] cuna[bbrev] ia[bbrev] inorea[bbrev] iuna[bbrev] norea[bbrev] una[bbreviate] skipwhite nextgroup=vimMapMod,vimMapLhs +" GEN_SYN_VIM: vimCommand abclear, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod' +syn keyword vimAbb abc[lear] cabc[lear] iabc[lear] skipwhite nextgroup=vimMapMod + +" Filename Patterns: {{{2 +" ================= + +syn match vimWildcardQuestion contained "?" +syn match vimWildcardStar contained "*" + +syn match vimWildcardBraceComma contained "," +syn region vimWildcardBrace contained + \ matchgroup=vimWildcard + \ start="{" + \ end="}" + \ contains=vimWildcardEscape,vimWildcardBrace,vimWildcardBraceComma,vimWildcardQuestion,vimWildcardStar,vimWildcardBracket + \ oneline + +syn match vimWildcardIntervalNumber contained "\d\+" +syn match vimWildcardInterval contained "\\\\\\{\d\+\%(,\d\+\)\=\\}" contains=vimWildcardIntervalNumber + + +syn match vimWildcardBracket contained "\[\%(\^\=]\=\%(\\.\|\[\([:.=]\)[^:.=]\+\1]\|[^][:space:]]\)*\)\@>]" + \ contains=vimWildcardBracketStart,vimWildcardEscape + +syn match vimWildcardBracketCharacter contained "." nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketHyphen,vimWildcardBracketEnd +syn match vimWildcardBracketRightBracket contained "]" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd +syn match vimWildcardBracketHyphen contained "-]\@!" nextgroup=@vimWildcardBracketCharacter +syn match vimWildcardBracketEscape contained "\\." nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketHyphen,vimWildcardBracketEnd +syn match vimWildcardBracketCharacterClass contained "\[:[^:]\+:]" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd +syn match vimWildcardBracketEquivalenceClass contained "\[=[^=]\+=]" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd +syn match vimWildcardBracketCollatingSymbol contained "\[\.[^.]\+\.]" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd + +syn match vimWildcardBracketStart contained "\[" nextgroup=vimWildcardBracketCaret,vimWildcardBracketRightBracket,@vimWildcardBracketCharacter +syn match vimWildcardBracketCaret contained "\^" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketRightBracket +syn match vimWildcardBracketEnd contained "]" + +syn cluster vimWildcardBracketCharacter contains=vimWildcardBracketCharacter,vimWildcardBracketEscape,vimWildcardBracketCharacterClass,vimWildcardBracketEquivalenceClass,vimWildcardBracketCollatingSymbol + +syn match vimWildcardEscape contained "\\." + +syn cluster vimWildcard contains=vimWildcardQuestion,vimWildcardStar,vimWildcardBrace,vimWildcardBracket,vimWildcardInterval + +" Autocmd and Doauto{cmd,all}: {{{2 +" =========================== + +" TODO: explicitly match the {cmd} arg rather than bailing out to TOP +syn region vimAutocmdBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList + +syn match vimAutocmdGroup contained "\%(\\["|[:space:]]\|[^"|[:space:]]\)\+" skipwhite nextgroup=vimAutoEvent,vimAutoEventGlob +syn match vimAutocmdBang contained "\a\@1<=!" skipwhite nextgroup=vimAutocmdGroup,vimAutoEvent,vimAutoEventGlob + +" TODO: cleaner handling of | in pattern position +" : match pattern items in addition to wildcards +syn region vimAutocmdPattern contained + \ start="|\@!\S" + \ skip="\\\\\|\\[,[:space:]]" + \ end="\ze[,[:space:]]" + \ end="$" + \ skipwhite nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock,@vimFunc + \ contains=vimEnvvar,@vimWildcard,vimAutocmdPatternEscape +syn match vimAutocmdBufferPattern contained "" skipwhite nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock,@vimFunc +" trailing pattern separator comma allowed +syn match vimAutocmdPatternSep contained "," skipwhite nextgroup=@vimAutocmdPattern,vimAutocmdMod,vimAutocmdBlock +syn match vimAutocmdPatternEscape contained "\\." +syn cluster vimAutocmdPattern contains=vimAutocmdPattern,vimAutocmdBufferPattern + +" TODO: Vim9 requires '++' prefix +syn match vimAutocmdMod contained "\%(++\)\=\" skipwhite nextgroup=vimAutocmdMod,vimAutocmdBlock +syn match vimAutocmdMod contained "++once\>" skipwhite nextgroup=vimAutocmdMod,vimAutocmdBlock + +" higher priority than vimAutocmdGroup, assume no group is so named +syn match vimAutoEventGlob contained "*" skipwhite nextgroup=@vimAutocmdPattern +syn match vimAutoEventSep contained "\a\@1<=," nextgroup=vimAutoEvent +syn match vimUserAutoEventSep contained "\a\@1<=," nextgroup=vimUserAutoEvent + +syn match vimAutocmd "\" skipwhite nextgroup=vimAutocmdBang,vimAutocmdGroup,vimAutoEvent,vimAutoEventGlob + + +syn match vimDoautocmdMod contained "" skipwhite nextgroup=vimAutocmdGroup,vimAutoEvent +syn match vimDoautocmd "\" skipwhite nextgroup=vimDoautocmdMod,vimAutocmdGroup,vimAutoEvent +syn match vimDoautocmd "\" skipwhite nextgroup=vimDoautocmdMod,vimAutocmdGroup,vimAutoEvent + +" Echo And Execute: -- prefer strings! {{{2 +" ================ +" NOTE: No trailing comments + +syn region vimEcho + \ matchgroup=vimCommand + \ start="\" + \ start="\" + \ start="\" + \ start="\" + \ start="\" + \ start="\" + \ skip=+\\|\|||\|\n\s*\%(\\\|["#]\\ \)+ + \ end="\ze|" + \ excludenl end="$" + \ nextgroup=vimCmdSep + \ contains=@vimContinue,@vimExprList,vim9Comment + \ transparent + +syn match vimEchohl "\" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchohlNone +syn case ignore +syn keyword vimEchohlNone contained none +syn case match + +syn cluster vimEcho contains=vimEcho,vimEchohl + +syn region vimExecute + \ matchgroup=vimCommand + \ start="\" + \ skip=+\\|\|||\|\n\s*\%(\\\|["#]\\ \)+ + \ end="\ze|" + \ excludenl end="$" + \ nextgroup=vimCmdSep + \ contains=@vimContinue,@vimExprList,vim9Comment + \ transparent + +syn region vimEval + \ matchgroup=vimCommand + \ start="\" + \ skip=+\\|\|||\|\n\s*\%(\\\|["#]\\ \)+ + \ end="\ze|" + \ excludenl end="$" + \ nextgroup=vimCmdSep + \ contains=@vimContinue,@vimExprList,vim9Comment,vimComment + \ transparent + +" Filter: {{{2 +" ====== +syn match vimExFilter "\" skipwhite nextgroup=vimExFilterBang,vimExFilterPattern +syn region vimExFilterPattern contained + \ start="[[:ident:]]" + \ end="\ze[[:space:]\n]" + \ skipwhite nextgroup=@vimCmdList + \ contains=@vimSubstList + \ oneline +syn region vimExFilterPattern contained + \ matchgroup=Delimiter + \ start="\z([^[:space:][:ident:]|"]\)" + \ skip="\\\\\|\\\z1" + \ end="\z1" + \ skipwhite nextgroup=@vimCmdList + \ contains=@vimSubstList + \ oneline +syn match vimExFilterBang contained "\a\@1<=!" skipwhite nextgroup=vimExFilterPattern + +" Grep and Make: {{{2 +" ============= +" | is the command separator, escaped with \| all other backslashes are passed through literally, no tail comments +syn match vimGrep "\" skipwhite nextgroup=vimGrepBang,vimGrepArgs,vimCmdSep +syn match vimGrepadd "\" skipwhite nextgroup=vimGrepBang,vimGrepArgs,vimCmdSep +syn region vimGrepArgs contained + \ start="|\@!\S" + \ skip=+\n\s*\%(\\\|[#"]\\ \)+ + \ matchgroup=vimCmdSep + \ end="|" + \ end="$" + "\ TODO: include vimSpecFile + \ contains=vimGrepBarEscape +syn match vimGrepBarEscape contained "\\|" +syn match vimGrepBang contained "\a\@1<=!" skipwhite nextgroup=vimGrepArgs,vimCmdSep + +syn match vimMake "\" skipwhite nextgroup=vimMakeBang,vimMakeArgs,vimCmdSep +syn region vimMakeArgs contained + \ start="|\@!\S" + \ skip=+\n\s*\%(\\\|[#"]\\ \)+ + \ matchgroup=vimCmdSep + \ end="|" + \ end="$" + "\ TODO: include vimSpecFile + \ contains=vimMakeBarEscape +syn match vimMakeBarEscape contained "\\|" +syn match vimMakeBang contained "\a\@1<=!" skipwhite nextgroup=vimMakeArgs,vimCmdSep + +syn match vimHelpgrep "\" skipwhite nextgroup=vimHelpgrepBang,vimHelpgrepPattern +syn region vimHelpgrepPattern contained + \ start="\S" + \ matchgroup=Special + \ end="@\w\w\>" + \ end="$" + \ contains=@vimSubstList + \ oneline + +" Vimgrep: {{{2 +" ======= +syn match vimVimgrep "\" skipwhite nextgroup=vimVimgrepBang,vimVimgrepPattern +syn match vimVimgrepadd "\" skipwhite nextgroup=vimVimgrepBang,vimVimgrepPattern +syn match vimVimgrepBang contained "\a\@1<=!" skipwhite nextgroup=vimVimgrepPattern +syn region vimVimgrepPattern contained + \ start="[[:ident:]]" + \ end="\ze[[:space:]\n]" + \ skipwhite nextgroup=vimVimgrepFile,vimCmdSep + \ contains=@vimSubstList + \ oneline +syn region vimVimgrepPattern contained + \ matchgroup=Delimiter + \ start="\z([^[:space:][:ident:]|"]\)" + \ skip="\\\\\|\\\z1" + \ end="\z1" + \ skipwhite nextgroup=vimVimgrepFlags,vimVimgrepFile,vimCmdSep + \ contains=@vimSubstList + \ oneline +syn match vimVimgrepEscape contained "\\\%(\\|\|.\)" +syn match vimVimgrepBarEscape contained "\\|" +syn region vimVimgrepFile contained + \ start="|\@!\S" + \ matchgroup=vimCmdSep + \ end="|" + \ end="\ze\s" + \ end="$" + \ skipwhite nextgroup=vimVimgrepFile + \ contains=vimSpecFile,vimVimgrepEscape,vimVimgrepBarEscape +syn match vimVimgrepFlags contained "\<[gjf]\{,3\}\>" skipwhite nextgroup=vimVimgrepfile + +" Maps: {{{2 +" ==== +" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs' +syn keyword vimMap cm[ap] cno[remap] im[ap] ino[remap] lm[ap] ln[oremap] nm[ap] nn[oremap] om[ap] ono[remap] smap snor[emap] tma[p] tno[remap] vm[ap] vn[oremap] xm[ap] xn[oremap] skipwhite nextgroup=vimMapMod,vimMapLhs +syn match vimMap "\" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs +syn keyword vimMap no[remap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs +" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod' +syn keyword vimMap cmapc[lear] imapc[lear] lmapc[lear] nmapc[lear] omapc[lear] smapc[lear] tmapc[lear] vmapc[lear] xmapc[lear] skipwhite nextgroup=vimMapMod +syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod +" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs' +syn keyword vimUnmap cu[nmap] iu[nmap] lu[nmap] nun[map] ou[nmap] sunm[ap] tunma[p] vu[nmap] xu[nmap] skipwhite nextgroup=vimMapMod,vimMapLhs +syn keyword vimUnmap unm[ap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs + +syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation,vimMapLeader skipwhite nextgroup=vimMapRhs +syn match vimMapLhs contained "\%(.\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation,vimMapLeader skipwhite skipnl nextgroup=vimMapRhsContinue +syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs +syn match vimMapMod contained "\%#=1<\%(buffer\|expr\|nowait\|script\|silent\|special\|unique\)\+>" contains=vimMapModKey,vimMapModErr skipwhite nextgroup=vimMapMod,vimMapLhs +syn region vimMapRhs contained + \ start="\S" + \ skip=+\\|\|\@1<=|\|\n\s*\%(\\\|["#]\\ \)+ + \ end="\ze|" + \ end="$" + \ nextgroup=vimCmdSep + \ contains=@vimContinue,vimCtrlChar,vimNotation,vimMapLeader +syn region vimMapRhsContinue contained + \ start=+^\s*\%(\\\|["#]\\ \)+ + \ skip=+\\|\|\@1<=|\|\n\s*\%(\\\|["#]\\ \)+ + \ end="\ze|" + \ end="$" + \ nextgroup=vimCmdSep + \ contains=@vimContinue,vimCtrlChar,vimNotation,vimMapLeader +syn match vimMapLeader contained "\%#=1\c<\%(local\)\=leader>" contains=vimMapLeaderKey +syn keyword vimMapModKey contained buffer expr nowait script silent special unique +syn case ignore +syn keyword vimMapLeaderKey contained leader localleader +syn case match + +" Menus: {{{2 +" ===== +" NOTE: tail comments disallowed +" GEN_SYN_VIM: vimCommand menu, START_STR='syn keyword vimMenu', END_STR='skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus' +syn keyword vimMenu am[enu] an[oremenu] aun[menu] cme[nu] cnoreme[nu] cunme[nu] ime[nu] inoreme[nu] iunme[nu] me[nu] nme[nu] nnoreme[nu] noreme[nu] nunme[nu] ome[nu] onoreme[nu] ounme[nu] sme[nu] snoreme[nu] sunme[nu] tlm[enu] tln[oremenu] tlu[nmenu] tm[enu] tu[nmenu] unme[nu] vme[nu] vnoreme[nu] vunme[nu] xme[nu] xnoreme[nu] xunme[nu] skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus +syn keyword vimMenu popu[p] skipwhite nextgroup=vimMenuBang,vimMenuName +syn region vimMenuRhs contained contains=@vimContinue,vimNotation start="|\@!\S" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ end="$" matchgroup=vimSep end="|" +syn region vimMenuRhsContinue contained contains=@vimContinue,vimNotation start=+^\s*\%(\\\|"\\ \)+ skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ end="$" matchgroup=vimSep end="|" +syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation skipwhite nextgroup=vimCmdSep,vimMenuRhs +syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+\ze\s*$" contained contains=vimMenuNotation,vimNotation skipwhite skipnl nextgroup=vimCmdSep,vimMenuRhsContinue +syn match vimMenuNotation "&\a\|&&\|\\\s\|\\\." contained +syn match vimMenuPriority "\<\d\+\%(\.\d\+\)*\>" contained skipwhite nextgroup=vimMenuName +syn match vimMenuMod "\c<\%(script\|silent\|special\)>" contained skipwhite nextgroup=vimMenuName,vimMenuPriority,vimMenuMod contains=vimMapModKey,vimMapModErr +syn keyword vimMenuStatus enable disable nextgroup=vimMenuName skipwhite +syn match vimMenuBang "\a\@1<=!" contained skipwhite nextgroup=vimMenuName,vimMenuMod + +syn region vimMenutranslate + \ matchgroup=vimCommand start="\" + \ skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ + \ end="$" matchgroup=vimCmdSep end="|" matchgroup=vimMenuClear end="\" skipwhite nextgroup=@vimExprList,vimNotation +syn match vimElse "\" skipwhite nextgroup=vimComment,vim9Comment +syn match vimEndif "\" skipwhite nextgroup=vimComment,vim9Comment + +" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2 +" ====================== +syn case ignore +syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd]-\)\{0,4}x\=\%(f\d\{1,2}\|[^ \t:]\|space\|bar\|bslash\|nl\|newline\|lf\|linefeed\|cr\|retu\%[rn]\|enter\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|csi\|right\|paste\%(start\|end\)\|left\|help\|undo\|k\=insert\|ins\|mouse\|[kz]\=home\|[kz]\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|kpoint\|space\|k\=\%(page\)\=\%(\|down\|up\|k\d\>\)\)>" contains=vimBracket + +syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket +syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket +syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket +syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket +syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket +syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket +syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket + +syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket +syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket +" syn match vimNotation contained '\%(\\\|\)\=[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket +syn match vimNotation contained '\%#=1\%(\\\|\)\=<\%([fq]-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|lt\)>' contains=vimBracket skipwhite nextgroup=vimSubst1 +syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket +syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket + +syn match vimBracket contained "[\\<>]" +syn case match + +" User Command Highlighting: {{{2 +syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([<.(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!' + +" Vim user commands + +" Compiler plugins +syn match vimCompilerSet "\" skipwhite nextgroup=vimSetArgs + +" runtime/makemenu.vim +syn match vimSynMenu "\" skipwhite nextgroup=vimSynMenuPath +syn match vimSynMenuPath contained ".*\ze:" nextgroup=vimSynMenuColon contains=vimMenuNotation +syn match vimSynMenuColon contained ":" nextgroup=vimSynMenuName +syn match vimSynMenuName contained "\w\+" + +" runtime/syntax/syncolor.vim +syn match vimSynColor "\" skipwhite nextgroup=vimSynColorGroup +syn match vimSynColorGroup contained "\<\h\w*\>" skipwhite nextgroup=vimHiKeyList contains=vimGroup +syn match vimSynLink "\" skipwhite nextgroup=vimSynLinkGroup +syn match vimSynLinkGroup contained "\<\h\w*\>" skipwhite nextgroup=vimGroup contains=vimGroup + +syn cluster vimExUserCmdList contains=vimCompilerSet,vimSynColor,vimSynLink,vimSynMenu + +" Errors And Warnings: {{{2 +" ==================== +if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror") + syn match vimFunctionError contained "[[:space:]!]\@1<=\<[a-z0-9]\w\{-}\ze\s*(" + syn match vimFunctionError contained "\%(<[sS][iI][dD]>\|[sg]:\)\d\w\{-}\ze\s*(" + syn match vimElseIfErr "\" + syn match vimBufnrWarn /\" skipwhite nextgroup=vimMatchGroup,vimMatchNone contains=vimCount +syn match vimMatchGroup contained "[[:alnum:]._-]\+" skipwhite nextgroup=vimMatchPattern +syn case ignore +syn keyword vimMatchNone contained none +syn case match +syn region vimMatchPattern contained + \ matchgroup=Delimiter + \ start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" + \ skip="\\\\\|\\\z1" + \ end="\z1" + \ contains=@vimSubstList + \ oneline + +" Normal: {{{2 +" ====== +syn match vimNormal "\!\=" skipwhite nextgroup=vimNormalArg contains=vimBang +syn region vimNormalArg contained start="\S" skip=+\n\s*\%(\\\|["#]\\ \)+ end="$" contains=@vimContinue + +" Profile: {{{2 +" ======= +syn match vimProfileBang contained "\a\@1<=!" skipwhite nextgroup=vimProfileArg +syn keyword vimProfileArg contained start skipwhite nextgroup=vimProfilePattern +syn keyword vimProfileArg contained func skipwhite nextgroup=vimProfilePattern +syn keyword vimProfileArg contained file skipwhite nextgroup=vimProfilePattern +syn keyword vimProfileArg contained stop pause skipwhite nextgroup=vimCmdSep,@vimComment +syn keyword vimProfileArg contained continue dump skipwhite nextgroup=vimCmdSep,@vimComment +" TODO: match file pattern +syn region vimProfilePattern contained + \ start="\S" + \ skip=+\\[|"#]+ + \ end="$" end=+\ze\s*[|"#]+ + \ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment +syn match vimProfile "\" skipwhite nextgroup=vimProfileBang,vimProfileArg + +syn keyword vimProfdelArg contained func skipwhite nextgroup=vimProfilePattern +syn keyword vimProfdelArg contained file skipwhite nextgroup=vimProfilePattern +syn keyword vimProfdelArg contained here skipwhite nextgroup=vimCmdSep,@vimComment +syn match vimProfdel "\" skipwhite nextgroup=vimProfdelArg + +" Redir: {{{2 +" ===== +syn match vimRedir "\" skipwhite nextgroup=vimRedirBang,vimRedirFileOperator,vimRedirVariableOperator,vimRedirRegister,vimRedirEnd +syn match vimRedirBang contained "\a\@1<=!" skipwhite nextgroup=vimRedirFileOperator + +syn match vimRedirFileOperator contained ">>\=" skipwhite nextgroup=vimRedirFile +syn region vimRedirFile contained + \ start="\S" + \ matchgroup=Normal + \ end="\s*$" + \ end="\s*\ze[|"]" + \ nextgroup=vimCmdSep,vimComment + \ contains=vimSpecFile +syn match vimRedirRegisterOperator contained ">>\=" +syn match vimRedirRegister contained "@[a-zA-Z*+"]" nextgroup=vimRedirRegisterOperator +syn match vimRedirVariableOperator contained "=>>\=" skipwhite nextgroup=vimVar +syn keyword vimRedirEnd contained END + +" Sleep: {{{2 +" ===== +syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg +syn match vimSleepBang contained "\a\@1<=!" skipwhite nextgroup=vimSleepArg +syn match vimSleepArg contained "\<\%(\d\+\)\=m\=\>" + +" Sort: {{{2 +" ==== +syn match vimSort "\" skipwhite nextgroup=vimSortBang,@vimSortOptions,vimSortPattern,vimCmdSep +syn match vimSortBang contained "\a\@1<=!" skipwhite nextgroup=@vimSortOptions,vimSortPattern,vimCmdSep +syn match vimSortOptionsError contained "\a\+" +syn match vimSortOptions contained "\<[ilur]*[nfxob]\=[ilur]*\>" skipwhite nextgroup=vimSortPattern,vimCmdSep +syn region vimSortPattern contained + \ matchgroup=Delimiter + \ start="\z([^[:space:][:alpha:]|]\)" + \ skip="\\\\\|\\\z1" + \ end="\z1" + \ skipwhite nextgroup=@vimSortOptions,vimCmdSep + \ contains=@vimSubstList + \ oneline + +syn cluster vimSortOptions contains=vimSortOptions,vimSortOptionsError + +" Terminal: {{{2 +" ======== +syn match vimTerminal "\" skipwhite nextgroup=vimTerminalOptions,vimTerminalCommand +syn match vimTerminal +\\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimTerminalOptions,vimTerminalCommand,@vimTerminalContinue + +syn match vimTerminalContinue contained "^\s*\\" skipwhite skipnl nextgroup=@vimTerminalContinue,vimTerminalOptions,vimTerminalCommand contains=vimWhitespace +syn match vimTerminalContinueComment contained '^\s*["#]\\ .*' skipwhite skipnl nextgroup=@vimTerminalContinue,vimTerminalOptions,vimTerminalCommand contains=vimWhitespace +syn cluster vimTerminalContinue contains=vimTerminalContinue,vimTerminalContinueComment + +syn region vimTerminalCommand contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimContinue + +syn region vimTerminalOptions contained + \ start="++" + \ skip=/\s\+++\|\%(\n\|^\)\s*\%(\\\|["#]\\ \)/ + \ end="\s" + \ end="$" + \ skipwhite nextgroup=vimTerminalCommand + \ contains=@vimContinue,vimTerminalOption + \ transparent + +syn match vimTerminalOption contained "++\%(\%(no\)\=close\|open\|curwin\|hidden\|norestore\|shell\)\>" +syn match vimTerminalOption contained "++kill=" nextgroup=vimTerminalKillOptionArg +syn match vimTerminalOption contained "++\%(rows\|cols\)=" nextgroup=vimTerminalSizeOptionArg +syn match vimTerminalOption contained "++eof=" nextgroup=vimTerminalEofOptionArg +syn match vimTerminalOption contained "++type=" nextgroup=vimTerminalTypeOptionArg +syn match vimTerminalOption contained "++api=" nextgroup=vimTerminalApiOptionArg + +syn match vimTerminalApiOptionArg contained "\<\S\+\>" +syn match vimTerminalEofOptionArg contained "\<\S\+\>" +syn match vimTerminalSizeOptionArg contained "\<\d\+\>" +syn keyword vimTerminalKillOptionArg contained term hup quit int kill +syn match vimTerminalKillOptionArg contained "\<\d\+\>" +syn keyword vimTerminalTypeOptionArg contained conpty winpty + +" Uniq: {{{2 +" ==== +syn match vimUniq "\" skipwhite nextgroup=vimUniqBang,@vimUniqOptions,vimUniqPattern,vimCmdSep +syn match vimUniqBang contained "\a\@1<=!" skipwhite nextgroup=@vimUniqOptions,vimUniqPattern,vimCmdSep +syn match vimUniqOptionsError contained "\a\+" +syn match vimUniqOptions contained "\<[ilur]*\>" skipwhite nextgroup=vimUniqPattern,vimCmdSep +syn region vimUniqPattern contained + \ matchgroup=Delimiter + \ start="\z([^[:space:][:alpha:]|]\)" + \ skip="\\\\\|\\\z1" + \ end="\z1" + \ skipwhite nextgroup=@vimUniqOptions,vimCmdSep + \ contains=@vimSubstList + \ oneline + +syn cluster vimUniqOptions contains=vimUniqOptions,vimUniqOptionsError + +" Wincmd: {{{2 +" ====== +syn match vimWincmd "\" skipwhite nextgroup=vimWincmdArg +" TODO: consider extracting this list from the help file +syn match vimWincmdArg contained + \ "\<[sSvnqojkhlwWtbpPrRxKJHLTfFz]\>\|[\^:=\-+_<>|\]}]\|\" + \ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment + +" only handles oneline assignments +Vim9 syn match vimWincmd "\s\=\\ze\s\+=\s*\%([#|]\|$\)" skipwhite nextgroup=vimWincmdArg + +" Syntax: {{{2 +"======= +syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial +syn region vimGroupList contained start=/^\s*["#]\\ \|^\s*\\\|[^[:space:],]\+\s*,/ skip=/\s*\n\s*\%(\\\|["#]\\ \)\|^\s*\%(\\\|["#]\\ \)/ end=/[^[:space:],]\s*$\|[^[:space:],]\ze\s\+\w/ contains=@vimContinue,vimGroupSpecial +syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP + +if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror") + syn match vimSynError contained "\i\+" + syn match vimSynError contained "\i\+=" nextgroup=vimGroupList +endif +syn match vimSynContains contained "\" skipwhite nextgroup=vimSyncKey +syn match vimSyncKey contained "\" skipwhite nextgroup=vimSyncGroup +syn match vimSyncKey contained "\" skipwhite nextgroup=vimSyncGroup +syn match vimSyncGroup contained "\<\h\w*\>" skipwhite nextgroup=vimSynRegPat,vimSyncNone +syn keyword vimSyncNone contained NONE + +" Syntime: {{{2 +" ======= +syn keyword vimSyntimeArg contained on off clear report skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep +syn keyword vimSyntime synti[me] skipwhite nextgroup=vimSyntimeArg +" Additional IsCommand: here by reasons of precedence {{{2 +" ==================== +syn match vimIsCommand "\s*\a\+" transparent contains=vimCommand,vimNotation + +" Highlighting: {{{2 +" ============ +syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,@vimComment +if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror") + syn match vimHiCtermError contained "\D\i*" +endif +syn match vimHighlight "\" skipwhite nextgroup=vimHiBang,@vimHighlightCluster +syn match vimHiBang contained "\a\@1<=!" skipwhite nextgroup=@vimHighlightCluster + +syn case ignore +" Conceal is a generated low-priority match +syn match vimHiGroup contained "\%(\\)\@!\i\+" +syn keyword vimHiNone contained NONE +syn keyword vimHiAttrib contained none bold inverse italic nocombine reverse standout strikethrough underline undercurl underdashed underdotted underdouble +syn keyword vimFgBgAttrib contained none bg background fg foreground +syn case match +syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib +syn match vimHiAttribList contained "\i\+,"he=e-1 contains=vimHiAttrib nextgroup=vimHiAttribList +syn case ignore +syn keyword vimHiCtermColor contained black blue brown cyan darkblue darkcyan darkgray darkgreen darkgrey darkmagenta darkred darkyellow gray green grey grey40 grey50 grey90 lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightred lightyellow magenta red seagreen white yellow +syn match vimHiCtermColor contained "\" +syn case match + +syn match vimHiFontname contained "[a-zA-Z\-*]\+" +syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'" +syn match vimHiGuiRgb contained "#\x\{6}" + +" Highlighting: hi group key=arg ... {{{2 +syn cluster vimHiCluster contains=vimGroup,vimHLGroup,vimHiGroup,vimHiNone,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9comment +syn region vimHiKeyList contained start="\i\+" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimHiCluster +if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror") + syn match vimHiKeyError contained "\i\+="he=e-1 +endif +syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList +syn match vimHiStartStop contained "\c\%(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption +syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList +syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError +syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError +syn match vimHiCtermfont contained "\cctermfont="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError +syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList +syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname +syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib +syn match vimHiTermcap contained "\S\+" contains=vimNotation +syn match vimHiNmbr contained '\d\+' + +" Highlight: clear {{{2 +syn keyword vimHiClear contained clear skipwhite nextgroup=vimGroup,vimHLGroup,vimHiGroup + +" Highlight: link {{{2 +" see tst24 (hi def vs hi) (Jul 06, 2018) +"syn region vimHiLink contained oneline matchgroup=vimCommand start="\(\\|\\)" end="$" contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation +" TODO: simplify and allow line continuations --djk +syn region vimHiLink contained matchgroup=Type start="\%(\\|\\)" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimHiCluster + +" Control Characters: {{{2 +" ================== +syn match vimCtrlChar "[- -]" + +" Embedded Scripts: {{{2 +" ================ +" perl,ruby : Benoit Cerrina +" python,tcl : Johannes Zellner +" mzscheme, lua : Charles Campbell + +" Allows users to specify the type of embedded script highlighting +" they want: (lua/mzscheme/perl/python/ruby/tcl support) +" g:vimsyn_embed == 0 : don't embed any scripts +" g:vimsyn_embed =~# 'l' : embed Lua +" g:vimsyn_embed =~# 'm' : embed MzScheme +" g:vimsyn_embed =~# 'p' : embed Perl +" g:vimsyn_embed =~# 'P' : embed Python +" g:vimsyn_embed =~# 'r' : embed Ruby +" g:vimsyn_embed =~# 't' : embed Tcl + +let s:interfaces = get(g:, "vimsyn_embed", "lP") + +" [-- lua --] {{{3 +if s:interfaces =~# 'l' + syn include @vimLuaScript syntax/lua.vim + unlet b:current_syntax +endif + +syn keyword vimLua lua skipwhite nextgroup=vimLuaHeredoc,vimLuaStatement +syn keyword vimLua luado skipwhite nextgroup=vimLuaStatement +syn keyword vimLua luafile + +syn region vimLuaStatement contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimLuaScript,@vimContinue +VimFoldl syn region vimLuaHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\s*\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1$+ + \ contains=@vimLuaScript +VimFoldl syn region vimLuaHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\.$+ + \ contains=@vimLuaScript +VimFoldl syn region vimLuaHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\z2$+ + \ contains=@vimLuaScript +VimFoldl syn region vimLuaHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\.$+ + \ contains=@vimLuaScript + +" [-- mzscheme --] {{{3 +if s:interfaces =~# 'm' + let s:iskKeep = &l:isk + syn include @vimMzSchemeScript syntax/scheme.vim + unlet b:current_syntax + let &l:isk = s:iskKeep +endif + +syn keyword vimMzScheme mz[scheme] skipwhite nextgroup=vimMzSchemeHeredoc,vimMzSchemeStatement +syn keyword vimMzScheme mzf[ile] + +syn region vimMzSchemeStatement contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimMzSchemeScript,@vimContinue +VimFoldm syn region vimMzSchemeHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\s*\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1$+ + \ contains=@vimMzSchemeScript +VimFoldm syn region vimMzSchemeHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\.$+ + \ contains=@vimMzSchemeScript +VimFoldm syn region vimMzSchemeHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\z2$+ + \ contains=@vimMzSchemeScript +VimFoldm syn region vimMzSchemeHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\.$+ + \ contains=@vimMzSchemeScript + +" [-- perl --] {{{3 +if s:interfaces =~# 'p' + syn include @vimPerlScript syntax/perl.vim + unlet b:current_syntax +endif + +syn keyword vimPerl pe[rl] skipwhite nextgroup=vimPerlHeredoc,vimPerlStatement +syn keyword vimPerl perld[o] skipwhite nextgroup=vimPerlStatement + +syn region vimPerlStatement contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimPerlScript,@vimContinue +VimFoldp syn region vimPerlHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\s*\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1$+ contains=@vimPerlScript +VimFoldp syn region vimPerlHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\ze\s*$+ matchgroup=vimScriptHeredocStop + \ end=+^\.$+ + \ contains=@vimPerlScript +VimFoldp syn region vimPerlHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\z2$+ + \ contains=@vimPerlScript +VimFoldp syn region vimPerlHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\.$+ + \ contains=@vimPerlScript + +" [-- python --] {{{3 +if s:interfaces =~# 'P' + syn include @vimPythonScript syntax/python2.vim + unlet b:current_syntax +endif + +syn keyword vimPython py[thon] skipwhite nextgroup=vimPythonHeredoc,vimPythonStatement +syn keyword vimPython pydo skipwhite nextgroup=vimPythonStatement +syn keyword vimPython pyfile + +syn region vimPythonStatement contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimPythonScript,@vimContinue +VimFoldP syn region vimPythonHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\s*\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1$+ + \ contains=@vimPythonScript +VimFoldP syn region vimPythonHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\.$+ + \ contains=@vimPythonScript +VimFoldP syn region vimPythonHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\z2$+ + \ contains=@vimPythonScript +VimFoldP syn region vimPythonHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\.$+ + \ contains=@vimPythonScript + +" [-- python3 --] {{{3 +if s:interfaces =~# 'P' + syn include @vimPython3Script syntax/python.vim + unlet b:current_syntax +endif + +syn keyword vimPython3 python3 py3 skipwhite nextgroup=vimPython3Heredoc,vimPython3Statement +syn keyword vimPython3 py3do skipwhite nextgroup=vimPython3Statement +syn keyword vimPython3 py3file + +syn region vimPython3Statement contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimPython3Script,@vimContinue +VimFoldP syn region vimPython3Heredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\s*\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1$+ + \ contains=@vimPython3Script +VimFoldP syn region vimPython3Heredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\.$+ + \ contains=@vimPython3Script +VimFoldP syn region vimPython3Heredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\z2$+ + \ contains=@vimPython3Script +VimFoldP syn region vimPython3Heredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\.$+ + \ contains=@vimPython3Script + +" [-- pythonx --] {{{3 +if s:interfaces =~# 'P' + if &pyxversion == 2 + syn cluster vimPythonXScript contains=@vimPythonScript + else + syn cluster vimPythonXScript contains=@vimPython3Script + endif +endif + +syn keyword vimPythonX pythonx pyx skipwhite nextgroup=vimPythonXHeredoc,vimPythonXStatement +syn keyword vimPythonX pyxdo skipwhite nextgroup=vimPythonXStatement +syn keyword vimPythonX pyxfile + +syn region vimPythonXStatement contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimPythonXScript,@vimContinue +VimFoldP syn region vimPythonXHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\s*\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1$+ + \ contains=@vimPythonXScript +VimFoldP syn region vimPythonXHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\.$+ + \ contains=@vimPythonXScript +VimFoldP syn region vimPythonXHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\z2$+ + \ contains=@vimPythonXScript +VimFoldP syn region vimPythonXHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\.$+ + \ contains=@vimPythonXScript + +" [-- ruby --] {{{3 +if s:interfaces =~# 'r' + syn include @vimRubyScript syntax/ruby.vim + unlet b:current_syntax +endif + +syn keyword vimRuby rub[y] skipwhite nextgroup=vimRubyHeredoc,vimRubyStatement +syn keyword vimRuby rubyd[o] skipwhite nextgroup=vimRubyStatement +syn keyword vimRuby rubyf[ile] + +syn region vimRubyStatement contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimRubyScript,@vimContinue +VimFoldr syn region vimRubyHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\s*\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1$+ + \ contains=@vimRubyScript +VimFoldr syn region vimRubyHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\ze\s*$+ matchgroup=vimScriptHeredocStop + \ end=+^\.$+ + \ contains=@vimRubyScript +VimFoldr syn region vimRubyHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\z2$+ + \ contains=@vimRubyScript +VimFoldr syn region vimRubyHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\.$+ + \ contains=@vimRubyScript + +" [-- tcl --] {{{3 +if s:interfaces =~# 't' + syn include @vimTclScript syntax/tcl.vim + unlet b:current_syntax +endif + +syn keyword vimTcl tcl skipwhite nextgroup=vimTclHeredoc,vimTclStatement +syn keyword vimTcl tcld[o] skipwhite nextgroup=vimTclStatement +syn keyword vimTcl tclf[ile] +syn region vimTclStatement contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimTclScript,@vimContinue +VimFoldt syn region vimTclHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\s*\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1$+ + \ contains=@vimTclScript +VimFoldt syn region vimTclHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+<<\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\.$+ + \ contains=@vimTclScript +VimFoldt syn region vimTclHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\z2$+ + \ contains=@vimTclScript +VimFoldt syn region vimTclHeredoc contained + \ matchgroup=vimScriptHeredocStart + \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ + \ matchgroup=vimScriptHeredocStop + \ end=+^\z1\=\.$+ + \ contains=@vimTclScript + +unlet s:interfaces +" Function Call Highlighting: {{{2 +" (following Gautam Iyer's suggestion) +" ========================== +syn match vimFunc contained "\<\l\w*\ze\s*(" skipwhite nextgroup=vimOperParen contains=vimFuncName +syn match vimUserFunc contained "\.\@1<=\l\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs +syn match vimUserFunc contained "\<\%([[:upper:]_]\|\%(\h\w*\.\)\+\h\)\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vim9MethodName,vim9Super,vim9This +syn match vimUserFunc contained "\<\%(g:\)\=\%(\h\w*#\)\+\h\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen contains=vimVarScope +syn match vimUserFunc contained "\%(\<[sgbwtlav]:\|<[sS][iI][dD]>\)\%(\h\w*\.\)*\h\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vimVarScope,vimNotation + +Vim9 syn match vim9UserFunc "^\s*\zs\%([sgbwtv]:\|<[sS][iI][dD]>\)\=\%(\h\w*[.#]\)*\h\w*\ze[<(]" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vimVarScope,vimNotation,vim9MethodName,vim9Super,vim9This +Vim9 syn match vim9Func "^\s*\zs\l\w*\ze(" skipwhite nextgroup=vimOperParen contains=vimFuncName + +syn cluster vimFunc contains=vimFunc,vimUserFunc +syn cluster vim9Func contains=vim9Func,vim9UserFunc + +syn region vim9TypeArgs contained + \ matchgroup=Delimiter + \ start="<\ze\a" + \ end=">" + \ nextgroup=vimOperParen + \ contains=@vimType + \ oneline + +" Beginners - Patterns that involve ^ {{{2 +" ========= +Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\%(\\\|#\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle extend +VimL syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\%(\\\|"\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle extend + +syn match vimCommentTitle '"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup +syn match vim9CommentTitle '#\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vim9CommentTitleLeader,vimTodo,@vimCommentGroup + +" allowed anywhere in the file +if !s:vim9script + syn match vimShebangError "^\s*\zs#!.*" display +endif +syn match vimShebang "\%^#!.*" display + +syn match vimContinue "^\s*\zs\\" +syn match vimContinueComment '^\s*\zs["#]\\ .*' extend +syn match vim9ContinueComment "^\s*\zs#\\ .*" extend +syn cluster vimContinue contains=vimContinue,vimContinueComment +syn cluster vim9Continue contains=vimContinue,vim9ContinueComment + +syn region vimString start='^\s*\\"' end='"' oneline keepend contains=@vimStringGroup,vimContinue +syn region vimString start="^\s*\\'" end="'" oneline keepend contains=vimQuoteEscape,vimContinue + +syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained +syn match vim9CommentTitleLeader '#\s\+'ms=s+1 contained + +" Searches And Globals: {{{2 +" ==================== +VimL syn match vimSearch '^\s*[/?].*' contains=vimSearchDelim +syn match vimSearchDelim '^\s*\zs[/?]\|[/?]$' contained +Vim9 syn match vim9Search '^\s*:[/?].*' contains=vim9SearchDelim +syn match vim9SearchDelim '^\s*\zs:[/?]\|[/?]$' contained contains=vimCmdSep +syn region vimGlobal matchgroup=Statement start='\\s\+[eE][nN][dD]" + +" ==================== +" Highlighting Settings {{{2 +" ==================== + +if !exists("skip_vim_syntax_inits") + if !exists("g:vimsyn_noerror") + hi def link vimBehaveError vimError + hi def link vimCollClassErr vimError + hi def link vimErrSetting vimError + hi def link vimFTError vimError + hi def link vimFunctionError vimError + hi def link vimFunc vimError + hi def link vim9Func vimError + hi def link vimHiAttribList vimError + hi def link vimHiCtermError vimError + hi def link vimHiKeyError vimError + hi def link vimMapModErr vimError + hi def link vimMarkArgError vimError + hi def link vimShebangError vimError + hi def link vimSortOptionsError Error + hi def link vimSubstFlagErr vimError + hi def link vimSynCaseError vimError + hi def link vimSyncError vimError + hi def link vimSynConcealError vimError + hi def link vimSynError vimError + hi def link vimSynFoldlevelError vimError + hi def link vimSynIskeywordError vimError + hi def link vimSynSpellError vimError + hi def link vimBufnrWarn vimWarn + + hi def link vim9TypeAliasError vimError + endif + + hi def link vimAbb vimCommand + hi def link vimAddress vimMark + hi def link vimAt vimCommand + hi def link vimAtArg Special + hi def link vimAugroupBang vimBang + hi def link vimAugroupError vimError + hi def link vimAugroupKey vimCommand + hi def link vimAutocmd vimCommand + hi def link vimAutocmdBang vimBang + hi def link vimAutocmdPatternEscape Special + hi def link vimAutoEvent Type + hi def link vimAutoEventGlob Type + hi def link vimAutocmdBufferPattern Special + hi def link vimAutocmdMod Special + hi def link vimAutocmdPatternSep vimSep + hi def link vimBang vimOper + hi def link vimBehaveBang vimBang + hi def link vimBehaveModel vimBehave + hi def link vimBehave vimCommand + hi def link vimBracket Delimiter + hi def link vimCall vimCommand + hi def link vimCatch vimCommand + hi def link vimCmplxRepeat SpecialChar + hi def link vimCommand Statement + hi def link vimCommandModifier vimCommand + hi def link vimCommandModifierBang vimBang + hi def link vimComment Comment + hi def link vimCommentError vimError + hi def link vimCommentString vimString + hi def link vimCommentTitle PreProc + hi def link vimCondHL vimCommand + hi def link vimConst vimCommand + hi def link vimContinue Special + hi def link vimContinueComment vimComment + hi def link vimContinueString vimString + hi def link vimCount Number + hi def link vimCtrlChar SpecialChar + hi def link vimDebuggreedy vimCommand + hi def link vimDef vimCommand + hi def link vimDefBang vimBang + hi def link vimDefComment vim9Comment + hi def link vimDefer vimCommand + hi def link vimDefParam vimVar + hi def link vimDelcommand vimCommand + hi def link vimDelcommandAttr vimUserCmdAttr + hi def link vimDelfunction vimCommand + hi def link vimDelfunctionBang vimBang + hi def link vimDoautocmd vimCommand + hi def link vimDoautocmdMod Special + hi def link vimDoCommand vimCommand + hi def link vimDoCommandBang vimBang + hi def link vimEcho vimCommand + hi def link vimEchohlNone vimGroup + hi def link vimEchohl vimCommand + hi def link vimElse vimCommand + hi def link vimElseIfErr Error + hi def link vimEndfunction vimCommand + hi def link vimEnddef vimCommand + hi def link vimEndif vimCommand + hi def link vimEnvvar PreProc + hi def link vimError Error + hi def link vimEscape Special + hi def link vimEval vimCommand + hi def link vimExFilter vimCommand + hi def link vimExFilterBang vimBang + hi def link vimExMark vimCommand + hi def link vimFBVar vimVar + hi def link vimFgBgAttrib vimHiAttrib + hi def link vimFuncEcho vimCommand + hi def link vimFor vimCommand + hi def link vimForInContinue vimContinue + hi def link vimForInContinueComment vimContinueComment + hi def link vimFTCmd vimCommand + hi def link vimFTOption vimSynType + hi def link vimFunction vimCommand + hi def link vimFunctionBang vimBang + hi def link vimFunctionComment vimComment + hi def link vimFuncName Function + hi def link vimFunctionMod Special + hi def link vimFunctionParam vimVar + hi def link vimFunctionParamEquals vimOper + hi def link vimFunctionScope vimVarScope + hi def link vimFunctionSID vimNotation + hi def link vimGrep vimCommand + hi def link vimGrepadd vimCommand + hi def link vimGrepBang vimBang + hi def link vimGroupAdd vimSynOption + hi def link vimGroupName Normal + hi def link vimGroupRem vimSynOption + hi def link vimGroupSpecial Special + hi def link vimGroup Type + hi def link vimHelpgrep vimCommand + hi def link vimHiAttrib PreProc + hi def link vimHiBang vimBang + hi def link vimHiClear Type + hi def link vimHiCtermColor Constant + hi def link vimHiCtermFgBg vimHiTerm + hi def link vimHiCtermfont vimHiTerm + hi def link vimHiCtermul vimHiTerm + hi def link vimHiCTerm vimHiTerm + hi def link vimHighlight vimCommand + hi def link vimHiGroup vimGroupName + hi def link vimHiGuiFgBg vimHiTerm + hi def link vimHiGuiFont vimHiTerm + hi def link vimHiGuiRgb vimNumber + hi def link vimHiGui vimHiTerm + hi def link vimHiNmbr Number + hi def link vimHiNone vimGroup + hi def link vimHiStartStop vimHiTerm + hi def link vimHiTerm Type + hi def link vimHLGroup vimGroup + hi def link vimImport vimCommand + hi def link vimImportAutoload Special + hi def link vimImportAs vimImport + hi def link vimInsert vimString + hi def link vim9KeymapLineComment vimKeymapLineComment + hi def link vimKeymapLineComment vimComment + hi def link vimKeymapTailComment vimComment + hi def link vimLambdaBrace Delimiter + hi def link vimLambdaOperator vimOper + hi def link vimLet vimCommand + hi def link vimLetHeredoc vimString + hi def link vimLetHeredocStart Special + hi def link vimLetHeredocStop Special + hi def link vimLetRegister vimRegister + hi def link vimLineComment vimComment + hi def link vimLua vimCommand + hi def link vimMake vimCommand + hi def link vimMakeadd vimCommand + hi def link vimMakeBang vimBang + hi def link vimMapBang vimBang + hi def link vimMapLeader vimBracket + hi def link vimMapLeaderKey vimNotation + hi def link vimMapModKey vimFunctionSID + hi def link vimMapMod vimBracket + hi def link vimMap vimCommand + hi def link vimMark Number + hi def link vimMarkNumber vimNumber + hi def link vimMatch vimCommand + hi def link vimMatchGroup vimGroup + hi def link vimMatchNone vimGroup + hi def link vimMenuBang vimBang + hi def link vimMenuClear Special + hi def link vimMenuMod vimMapMod + hi def link vimMenuName PreProc + hi def link vimMenu vimCommand + hi def link vimMenuNotation vimNotation + hi def link vimMenuPriority Number + hi def link vimMenuStatus Special + hi def link vimMenutranslateComment vimComment + hi def link vim9MethodName vimFuncName + hi def link vimMtchComment vimComment + hi def link vimMzScheme vimCommand + hi def link vimNonText NonText + hi def link vimNormal vimCommand + hi def link vimNotation Special + hi def link vimNotFunc vimCommand + hi def link vimNotPatSep vimString + hi def link vimNumber Number + hi def link vimOperError Error + hi def link vimOper Operator + hi def link vimOperContinue vimContinue + hi def link vimOperContinueComment vimContinueComment + hi def link vimOption PreProc + hi def link vimOptionVar Identifier + hi def link vimOptionVarName Identifier + hi def link vimParenSep Delimiter + hi def link vimPatSepErr vimError + hi def link vimPatSepR vimPatSep + hi def link vimPatSep SpecialChar + hi def link vimPatSepZone vimString + hi def link vimPatSepZ vimPatSep + hi def link vimPattern Type + hi def link vimPerl vimCommand + hi def link vimPlainMark vimMark + hi def link vimProfile vimCommand + hi def link vimProfileArg vimSpecial + hi def link vimProfileBang vimBang + hi def link vimProfdel vimCommand + hi def link vimProfdelArg vimSpecial + hi def link vimPython vimCommand + hi def link vimPython3 vimCommand + hi def link vimPythonX vimCommand + hi def link vimQuoteEscape vimEscape + hi def link vimRedir vimCommand + hi def link vimRedirBang vimBang + hi def link vimRedirFileOperator vimOper + hi def link vimRedirRegisterOperator vimOper + hi def link vimRedirVariableOperator vimOper + hi def link vimRedirEnd Special + hi def link vimRedirRegister vimRegister + hi def link vimRegister SpecialChar + hi def link vimRuby vimCommand + hi def link vimScriptDelim Comment + hi def link vimScriptHeredocStart vimLetHeredocStart + hi def link vimScriptHeredocStop vimLetHeredocStop + hi def link vimSearch vimString + hi def link vimSearchDelim Delimiter + hi def link vimSep Delimiter + hi def link vimSet vimCommand + hi def link vimSetAll vimOption + hi def link vimSetBang vimBang + hi def link vimSetComment vimComment + hi def link vimSetMod vimOption + hi def link vimSetSep vimSep + hi def link vimSetTermcap vimOption + hi def link vimShebang PreProc + hi def link vimSleep vimCommand + hi def link vimSleepArg Constant + hi def link vimSleepBang vimBang + hi def link vimSort vimCommand + hi def link vimSortBang vimBang + hi def link vimSortOptions Special + hi def link vimSpecFile Identifier + hi def link vimSpecFileMod vimSpecFile + hi def link vimSpecial Type + hi def link vimStringCont vimString + hi def link vimString String + hi def link vimStringEnd vimString + hi def link vimStringInterpolationBrace vimEscape + hi def link vimSubst1 vimSubst + hi def link vimSubstCount Number + hi def link vimSubstDelim Delimiter + hi def link vimSubstFlags Special + hi def link vimSubstSubstr SpecialChar + hi def link vimSubstTwoBS vimString + hi def link vimSubst vimCommand + hi def link vimSynCase Type + hi def link vimSyncCcomment Type + hi def link vimSynCchar vimSynOption + hi def link vimSynCcharValue Character + hi def link vimSyncClear Type + hi def link vimSyncFromstart Type + hi def link vimSyncGroup vimGroupName + hi def link vimSyncGroupName vimGroupName + hi def link vimSyncKey Type + hi def link vimSyncLinebreak Type + hi def link vimSyncLinecont Type + hi def link vimSyncLines Type + hi def link vimSyncMatch Type + hi def link vimSyncNone Type + hi def link vimSynConceal Type + hi def link vimSynContains vimSynOption + hi def link vimSyncRegion Type + hi def link vimSynFoldlevel Type + hi def link vimSynIskeyword Type + hi def link vimSynIskeywordSep Delimiter + hi def link vimSynKeyContainedin vimSynContains + hi def link vimSynKeyOpt vimSynOption + hi def link vimSynMtchGrp vimSynOption + hi def link vimSynMtchOpt vimSynOption + hi def link vimSynNextgroup vimSynOption + hi def link vimSynNotPatRange vimSynRegPat + hi def link vimSynOption Special + hi def link vimSynPatRange vimString + hi def link vimSynReg Type + hi def link vimSynRegOpt vimSynOption + hi def link vimSynRegPat vimString + hi def link vimSynSpell Type + hi def link vimSyntax vimCommand + hi def link vimSynType vimSpecial + hi def link vimSyntime vimCommand + hi def link vimSyntimeArg vimSpecial + hi def link vimTcl vimCommand + hi def link vimTerminal vimCommand + hi def link vimTerminalContinue vimContinue + hi def link vimTerminalContinueComment vimContinueComment + hi def link vimTerminalOption vimSpecial + hi def link vimTerminalKillOptionArg Constant + hi def link vimTerminalSizeOptionArg Constant + hi def link vimTerminalTypeOptionArg Constant + hi def link vimThrow vimCommand + hi def link vimTodo Todo + hi def link vimType Type + hi def link vimTypeAny vimType + hi def link vimTypeObject vimType + hi def link vimTypeObjectBracket vimTypeObject + hi def link vimUniq vimCommand + hi def link vimUniqBang vimBang + hi def link vimUniqOptions Special + hi def link vimUnlet vimCommand + hi def link vimUnletBang vimBang + hi def link vimUnmap vimMap + hi def link vimUserCmd vimCommand + hi def link vimUserCmdAttrAddr vimSpecial + hi def link vimUserCmdAttrComplete vimSpecial + hi def link vimUserCmdAttrCompleteFunc vimVar + hi def link vimUserCmdAttrNargs vimSpecial + hi def link vimUserCmdAttrRange vimSpecial + hi def link vimUserCmdAttrKey vimUserCmdAttr + hi def link vimUserCmdAttr Special + hi def link vimUserCmdAttrError Error + hi def link vimUserCmdError Error + hi def link vimUserCmdKey vimCommand + hi def link vimUserFunc Normal + hi def link vimVar Normal + hi def link vimVarScope Identifier + hi def link vimVimgrep vimCommand + hi def link vimVimgrepadd vimCommand + hi def link vimVimgrepBang vimBang + hi def link vimVimgrepFlags Special + hi def link vimVimVar Identifier + hi def link vimVimVarName Identifier + hi def link vimWarn WarningMsg + hi def link vimWildcard Special + hi def link vimWildcardBraceComma vimWildcard + hi def link vimWildcardBracket vimWildcard + hi def link vimWildcardBracketCaret vimWildcard + hi def link vimWildcardBracketCharacter Normal + hi def link vimWildcardBracketCharacter Normal + hi def link vimWildcardBracketCharacterClass vimWildCard + hi def link vimWildcardBracketCollatingSymbol vimWildCard + hi def link vimWildcardBracketEnd vimWildcard + hi def link vimWildcardBracketEquivalenceClass vimWildCard + hi def link vimWildcardBracketEscape vimWildcard + hi def link vimWildcardBracketHyphen vimWildcard + hi def link vimWildcardBracketRightBracket vimWildcardBracketCharacter + hi def link vimWildcardBracketStart vimWildcard + hi def link vimWildcardEscape vimWildcard + hi def link vimWildcardInterval vimWildcard + hi def link vimWildcardQuestion vimWildcard + hi def link vimWildcardStar vimWildcard + hi def link vimWinCmd vimCommand + + hi def link vim9Abstract vimCommand + hi def link vim9Boolean Boolean + hi def link vim9Class vimCommand + hi def link vim9Comment Comment + hi def link vim9CommentError vimError + hi def link vim9CommentTitle PreProc + hi def link vim9ConstructorDefParam vimVar + hi def link vim9Const vimCommand + hi def link vim9ContinueComment vimContinueComment + hi def link vim9Enum vimCommand + hi def link vim9EnumImplementedInterfaceComment vim9Comment + hi def link vim9EnumImplements vim9Implements + hi def link vim9EnumNameComment vim9Comment + hi def link vim9EnumNameContinue vimContinue + hi def link vim9EnumNameContinueComment vim9Comment + hi def link vim9EnumValueListCommaComment vim9Comment + hi def link vim9Export vimCommand + hi def link vim9Extends Keyword + hi def link vim9Final vimCommand + hi def link vim9For vimCommand + hi def link vim9ForInComment vim9Comment + hi def link vim9Implements Keyword + hi def link vim9AbstractDef vimCommand + hi def link vim9Interface vimCommand + hi def link vim9LambdaOperator vimOper + hi def link vim9LambdaOperatorComment vim9Comment + hi def link vim9LambdaParen vimParenSep + hi def link vim9LhsRegister vimLetRegister + hi def link vim9LhsVariable vimVar + hi def link vim9LineComment vimComment + hi def link vim9MethodDef vimCommand + hi def link vim9MethodDefComment vimDefComment + hi def link vim9MethodNameError vimFunctionError + hi def link vim9Null Constant + hi def link vim9Public vimCommand + hi def link vim9Search vimString + hi def link vim9SearchDelim Delimiter + hi def link vim9Static vimCommand + hi def link vim9Super Identifier + hi def link vim9This Identifier + hi def link vim9Type vimCommand + hi def link vim9TypeEquals vimOper + hi def link vim9Variable vimVar + hi def link vim9VariableType vimType + hi def link vim9VariableTypeAny vimTypeAny + hi def link vim9VariableTypeObject vimTypeObject + hi def link vim9VariableTypeObjectBracket vimTypeObjectBracket + hi def link vim9Var vimCommand + hi def link vim9Vim9ScriptArg Special + hi def link vim9Vim9Script vimCommand + + hi def link vimCompilerSet vimCommand + hi def link vimSynColor vimCommand + hi def link vimSynLink vimCommand + hi def link vimSynMenu vimCommand + hi def link vimSynMenuPath vimMenuName +endif + +" Current Syntax Variable: {{{2 +let b:current_syntax = "vim" + +" --------------------------------------------------------------------- +" Cleanup: {{{1 +delc Vim9 +delc VimL +delc VimFolda +delc VimFoldc +delc VimFolde +delc VimFoldf +delc VimFoldh +delc VimFoldH +delc VimFoldi +delc VimFoldl +delc VimFoldm +delc VimFoldp +delc VimFoldP +delc VimFoldr +delc VimFoldt +let &cpo = s:keepcpo +unlet s:keepcpo s:vim9script +" vim:ts=18 fdm=marker ft=vim diff --git a/.config/vim/syntax/viminfo.vim b/.config/vim/syntax/viminfo.vim new file mode 100644 index 0000000..06c5976 --- /dev/null +++ b/.config/vim/syntax/viminfo.vim @@ -0,0 +1,49 @@ +" Vim syntax file +" Language: Vim .viminfo file +" Maintainer: The Vim Project +" Last Change: 2023 Aug 10 +" Former Maintainer: Bram Moolenaar + +" Quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" The lines that are NOT recognized +syn match viminfoError "^[^\t].*" + +" The one-character one-liners that are recognized +syn match viminfoStatement "^[/&$@:?=%!<]" + +" The two-character one-liners that are recognized +syn match viminfoStatement "^[-'>"]." +syn match viminfoStatement +^"".+ +syn match viminfoStatement "^\~[/&]" +syn match viminfoStatement "^\~[hH]" +syn match viminfoStatement "^\~[mM][sS][lL][eE]\d\+\~\=[/&]" + +syn match viminfoOption "^\*.*=" contains=viminfoOptionName +syn match viminfoOptionName "\*\a*"ms=s+1 contained + +" Comments +syn match viminfoComment "^#.*" + +" New style lines. TODO: highlight numbers and strings. +syn match viminfoNew "^|.*" + +" Define the default highlighting. +" Only used when an item doesn't have highlighting yet +hi def link viminfoComment Comment +hi def link viminfoError Error +hi def link viminfoStatement Statement +hi def link viminfoNew String + +let b:current_syntax = "viminfo" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/vimnormal.vim b/.config/vim/syntax/vimnormal.vim new file mode 100644 index 0000000..df672c5 --- /dev/null +++ b/.config/vim/syntax/vimnormal.vim @@ -0,0 +1,16 @@ +syn match normalOp /[dcrypoaxv!"#%&.-\/:<>=?@ABCDGHIJKLMNOPQRSUVWXYZgmqstz~iu]/ nextgroup=normalMod +syn match normalMod /m\@BW\[\]`bstweE{}ftFT;,$]/ +syn match normalCount /[0-9]/ +syn region normalSearch start=/[/?]\@<=./ end=/.\@=/ contains=normalKey keepend +syn region normalChange start=/\([cr][wWbBeE()\[\]{}pst]\)\@<=./ end=/.\@=/ contains=normalKey keepend +syn match normalCharSearch /\c[ftr]\@<=\w/ +syn match normalMark /\(f\@'\@!/ + +hi! link normalOp Operator +hi! link normalMod PreProc +hi! link normalObject Structure +hi! link normalCount Number +hi! link normalMark Identifier +hi! link normalKey Special diff --git a/.config/vim/syntax/virata.vim b/.config/vim/syntax/virata.vim new file mode 100644 index 0000000..0ed54fa --- /dev/null +++ b/.config/vim/syntax/virata.vim @@ -0,0 +1,207 @@ +" Vim syntax file +" Language: Virata AConfig Configuration Script +" Maintainer: Manuel M.H. Stol +" Last Change: 2003 May 11 +" Vim URL: http://www.vim.org/lang.html +" Virata URL: http://www.globespanvirata.com/ + + +" Virata AConfig Configuration Script syntax +" Can be detected by: 1) Extension .hw, .sw, .pkg and .module +" 2) The file name pattern "mk.*\.cfg" +" 3) The string "Virata" in the first 5 lines + + +" Setup Syntax: +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif +" Virata syntax is case insensitive (mostly) +syn case ignore + + + +" Comments: +" Virata comments start with %, but % is not a keyword character +syn region virataComment start="^%" start="\s%"lc=1 keepend end="$" contains=@virataGrpInComments +syn region virataSpclComment start="^%%" start="\s%%"lc=1 keepend end="$" contains=@virataGrpInComments +syn keyword virataInCommentTodo contained TODO FIXME XXX[XXXXX] REVIEW TBD +syn cluster virataGrpInComments contains=virataInCommentTodo +syn cluster virataGrpComments contains=@virataGrpInComments,virataComment,virataSpclComment + + +" Constants: +syn match virataStringError +["]+ +syn region virataString start=+"+ skip=+\(\\\\\|\\"\)+ end=+"+ oneline contains=virataSpclCharError,virataSpclChar,@virataGrpDefSubsts +syn match virataCharacter +'[^']\{-}'+ contains=virataSpclCharError,virataSpclChar +syn match virataSpclChar contained +\\\(x\x\+\|\o\{1,3}\|['\"?\\abefnrtv]\)+ +syn match virataNumberError "\<\d\{-1,}\I\{-1,}\>" +syn match virataNumberError "\<0x\x*\X\x*\>" +syn match virataNumberError "\<\d\+\.\d*\(e[+-]\=\d\+\)\=\>" +syn match virataDecNumber "\<\d\+U\=L\=\>" +syn match virataHexNumber "\<0x\x\+U\=L\=\>" +syn match virataSizeNumber "\<\d\+[BKM]\>"he=e-1 +syn match virataSizeNumber "\<\d\+[KM]B\>"he=e-2 +syn cluster virataGrpNumbers contains=virataNumberError,virataDecNumber,virataHexNumber,virataSizeNumber +syn cluster virataGrpConstants contains=@virataGrpNumbers,virataStringError,virataString,virataCharacter,virataSpclChar + + +" Identifiers: +syn match virataIdentError contained "\<\D\S*\>" +syn match virataIdentifier contained "\<\I\i\{-}\(\-\i\{-1,}\)*\>" contains=@virataGrpDefSubsts +syn match virataFileIdent contained "\F\f*" contains=@virataGrpDefSubsts +syn cluster virataGrpIdents contains=virataIdentifier,virataIdentError +syn cluster virataGrpFileIdents contains=virataFileIdent,virataIdentError + + +" Statements: +syn match virataStatement "^\s*Config\(\(/Kernel\)\=\.\(hs\=\|s\)\)\=\>" +syn match virataStatement "^\s*Config\s\+\I\i\{-}\(\-\i\{-1,}\)*\.\(hs\=\|s\)\>" +syn match virataStatement "^\s*Make\.\I\i\{-}\(\-\i\{-1}\)*\>" skipwhite nextgroup=@virataGrpIdents +syn match virataStatement "^\s*Make\.c\(at\)\=++\s"me=e-1 skipwhite nextgroup=@virataGrpIdents +syn match virataStatement "^\s*\(Architecture\|GetEnv\|Reserved\|\(Un\)\=Define\|Version\)\>" skipwhite nextgroup=@virataGrpIdents +syn match virataStatement "^\s*\(Hardware\|ModuleSource\|\(Release\)\=Path\|Software\)\>" skipwhite nextgroup=@virataGrpFileIdents +syn match virataStatement "^\s*\(DefaultPri\|Hydrogen\)\>" skipwhite nextgroup=virataDecNumber,virataNumberError +syn match virataStatement "^\s*\(NoInit\|PCI\|SysLink\)\>" +syn match virataStatement "^\s*Allow\s\+\(ModuleConfig\)\>" +syn match virataStatement "^\s*NoWarn\s\+\(Export\|Parse\=able\|Relative]\)\>" +syn match virataStatement "^\s*Debug\s\+O\(ff\|n\)\>" + +" Import (Package |Module from ) +syn region virataImportDef transparent matchgroup=virataStatement start="^\s*Import\>" keepend end="$" contains=virataInImport,virataModuleDef,virataNumberError,virataStringError,@virataGrpDefSubsts +syn match virataInImport contained "\<\(Module\|Package\|from\)\>" skipwhite nextgroup=@virataGrpFileIdents +" Export (Header
    |SLibrary ) +syn region virataExportDef transparent matchgroup=virataStatement start="^\s*Export\>" keepend end="$" contains=virataInExport,virataNumberError,virataStringError,@virataGrpDefSubsts +syn match virataInExport contained "\<\(Header\|[SU]Library\)\>" skipwhite nextgroup=@virataGrpFileIdents +" Process is +syn region virataProcessDef transparent matchgroup=virataStatement start="^\s*Process\>" keepend end="$" contains=virataInProcess,virataInExec,virataNumberError,virataStringError,@virataGrpDefSubsts,@virataGrpIdents +syn match virataInProcess contained "\" +" Instance of +syn region virataInstanceDef transparent matchgroup=virataStatement start="^\s*Instance\>" keepend end="$" contains=virataInInstance,virataNumberError,virataStringError,@virataGrpDefSubsts,@virataGrpIdents +syn match virataInInstance contained "\" +" Module from +syn region virataModuleDef transparent matchgroup=virataStatement start="^\s*\(Package\|Module\)\>" keepend end="$" contains=virataInModule,virataNumberError,virataStringError,@virataGrpDefSubsts +syn match virataInModule contained "^\s*Package\>"hs=e-7 skipwhite nextgroup=@virataGrpIdents +syn match virataInModule contained "^\s*Module\>"hs=e-6 skipwhite nextgroup=@virataGrpIdents +syn match virataInModule contained "\" skipwhite nextgroup=@virataGrpFileIdents +" Colour from +syn region virataColourDef transparent matchgroup=virataStatement start="^\s*Colour\>" keepend end="$" contains=virataInColour,virataNumberError,virataStringError,@virataGrpDefSubsts +syn match virataInColour contained "^\s*Colour\>"hs=e-6 skipwhite nextgroup=@virataGrpIdents +syn match virataInColour contained "\" skipwhite nextgroup=@virataGrpFileIdents +" Link {} +" Object {Executable []} +syn match virataStatement "^\s*\(Link\|Object\)" +" Executable [] +syn region virataExecDef transparent matchgroup=virataStatement start="^\s*Executable\>" keepend end="$" contains=virataInExec,virataNumberError,virataStringError +syn match virataInExec contained "^\s*Executable\>" skipwhite nextgroup=@virataGrpDefSubsts,@virataGrpIdents +syn match virataInExec contained "\<\(epilogue\|pro\(logue\|cess\)\|qhandler\)\>" skipwhite nextgroup=@virataGrpDefSubsts,@virataGrpIdents +syn match virataInExec contained "\<\(priority\|stack\)\>" skipwhite nextgroup=@virataGrpDefSubsts,@virataGrpNumbers +" Message {} +" MessageId +syn match virataStatement "^\s*Message\(Id\)\=\>" skipwhite nextgroup=@virataGrpNumbers +" MakeRule {} +syn region virataMakeDef transparent matchgroup=virataStatement start="^\s*MakeRule\>" keepend end="$" contains=virataInMake,@virataGrpDefSubsts +syn case match +syn match virataInMake contained "\" +syn case ignore +" (Append|Edit|Copy)Rule +syn match virataStatement "^\s*\(Append\|Copy\|Edit\)Rule\>" +" AlterRules in +syn region virataAlterDef transparent matchgroup=virataStatement start="^\s*AlterRules\>" keepend end="$" contains=virataInAlter,@virataGrpDefSubsts +syn match virataInAlter contained "\" skipwhite nextgroup=@virataGrpIdents +" Clustering +syn cluster virataGrpInStatmnts contains=virataInImport,virataInExport,virataInExec,virataInProcess,virataInAlter,virataInInstance,virataInModule,virataInColour +syn cluster virataGrpStatements contains=@virataGrpInStatmnts,virataStatement,virataImportDef,virataExportDef,virataExecDef,virataProcessDef,virataAlterDef,virataInstanceDef,virataModuleDef,virataColourDef + + +" MkFlash.Cfg File Statements: +syn region virataCfgFileDef transparent matchgroup=virataCfgStatement start="^\s*Dir\>" start="^\s*\a\{-}File\>" start="^\s*OutputFile\d\d\=\>" start="^\s*\a\w\{-}[NP]PFile\>" keepend end="$" contains=@virataGrpFileIdents +syn region virataCfgSizeDef transparent matchgroup=virataCfgStatement start="^\s*\a\{-}Size\>" start="^\s*ConfigInfo\>" keepend end="$" contains=@virataGrpNumbers,@virataGrpDefSubsts,virataIdentError +syn region virataCfgNumberDef transparent matchgroup=virataCfgStatement start="^\s*FlashchipNum\(b\(er\=\)\=\)\=\>" start="^\s*Granularity\>" keepend end="$" contains=@virataGrpNumbers,@virataGrpDefSubsts +syn region virataCfgMacAddrDef transparent matchgroup=virataCfgStatement start="^\s*MacAddress\>" keepend end="$" contains=virataNumberError,virataStringError,virataIdentError,virataInMacAddr,@virataGrpDefSubsts +syn match virataInMacAddr contained "\x[:]\x\{1,2}\>"lc=2 +syn match virataInMacAddr contained "\s\x\{1,2}[:]\x"lc=1,me=e-1,he=e-2 nextgroup=virataInMacAddr +syn match virataCfgStatement "^\s*Target\>" skipwhite nextgroup=@virataGrpIdents +syn cluster virataGrpCfgs contains=virataCfgStatement,virataCfgFileDef,virataCfgSizeDef,virataCfgNumberDef,virataCfgMacAddrDef,virataInMacAddr + + + +" PreProcessor Instructions: +" Defines +syn match virataDefine "^\s*\(Un\)\=Set\>" skipwhite nextgroup=@virataGrpIdents +syn match virataInclude "^\s*Include\>" skipwhite nextgroup=@virataGrpFileIdents +syn match virataDefSubstError "[^$]\$"lc=1 +syn match virataDefSubstError "\$\(\w\|{\(.\{-}}\)\=\)" +syn case match +syn match virataDefSubst "\$\(\d\|[DINORS]\|{\I\i\{-}\(\-\i\{-1,}\)*}\)" +syn case ignore +" Conditionals +syn cluster virataGrpCntnPreCon contains=ALLBUT,@virataGrpInComments,@virataGrpFileIdents,@virataGrpInStatmnts +syn region virataPreConDef transparent matchgroup=virataPreCondit start="^\s*If\>" end="^\s*Endif\>" contains=@virataGrpCntnPreCon +syn match virataPreCondit contained "^\s*Else\(\s\+If\)\=\>" +syn region virataPreConDef transparent matchgroup=virataPreCondit start="^\s*ForEach\>" end="^\s*Done\>" contains=@virataGrpCntnPreCon +" Pre-Processors +syn region virataPreProc start="^\s*Error\>" start="^\s*Warning\>" oneline end="$" contains=@virataGrpConstants,@virataGrpDefSubsts +syn cluster virataGrpDefSubsts contains=virataDefSubstError,virataDefSubst +syn cluster virataGrpPreProcs contains=@virataGrpDefSubsts,virataDefine,virataInclude,virataPreConDef,virataPreCondit,virataPreProc + + +" Synchronize Syntax: +syn sync clear +syn sync minlines=50 "for multiple region nesting + + + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" Sub Links: +hi def link virataDefSubstError virataPreProcError +hi def link virataDefSubst virataPreProc +hi def link virataInAlter virataOperator +hi def link virataInExec virataOperator +hi def link virataInExport virataOperator +hi def link virataInImport virataOperator +hi def link virataInInstance virataOperator +hi def link virataInMake virataOperator +hi def link virataInModule virataOperator +hi def link virataInProcess virataOperator +hi def link virataInMacAddr virataHexNumber + +" Comment Group: +hi def link virataComment Comment +hi def link virataSpclComment SpecialComment +hi def link virataInCommentTodo Todo + +" Constant Group: +hi def link virataString String +hi def link virataStringError Error +hi def link virataCharacter Character +hi def link virataSpclChar Special +hi def link virataDecNumber Number +hi def link virataHexNumber Number +hi def link virataSizeNumber Number +hi def link virataNumberError Error + +" Identifier Group: +hi def link virataIdentError Error + +" PreProc Group: +hi def link virataPreProc PreProc +hi def link virataDefine Define +hi def link virataInclude Include +hi def link virataPreCondit PreCondit +hi def link virataPreProcError Error +hi def link virataPreProcWarn Todo + +" Directive Group: +hi def link virataStatement Statement +hi def link virataCfgStatement Statement +hi def link virataOperator Operator +hi def link virataDirective Keyword + + +let b:current_syntax = "virata" + +" vim:ts=8:sw=2:noet: diff --git a/.config/vim/syntax/vmasm.vim b/.config/vim/syntax/vmasm.vim new file mode 100644 index 0000000..c5cbb1e --- /dev/null +++ b/.config/vim/syntax/vmasm.vim @@ -0,0 +1,238 @@ +" Vim syntax file +" Language: (VAX) Macro Assembly +" Maintainer: Tom Uijldert +" Last change: 2004 May 16 +" +" This is incomplete. Feel free to contribute... +" + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" Partial list of register symbols +syn keyword vmasmReg r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 +syn keyword vmasmReg ap fp sp pc iv dv + +" All matches - order is important! +syn keyword vmasmOpcode adawi adwc ashl ashq bitb bitw bitl decb decw decl +syn keyword vmasmOpcode ediv emul incb incw incl mcomb mcomw mcoml +syn keyword vmasmOpcode movzbw movzbl movzwl popl pushl rotl sbwc +syn keyword vmasmOpcode cmpv cmpzv cmpc3 cmpc5 locc matchc movc3 movc5 +syn keyword vmasmOpcode movtc movtuc scanc skpc spanc crc extv extzv +syn keyword vmasmOpcode ffc ffs insv aobleq aoblss bbc bbs bbcci bbssi +syn keyword vmasmOpcode blbc blbs brb brw bsbb bsbw caseb casew casel +syn keyword vmasmOpcode jmp jsb rsb sobgeq sobgtr callg calls ret +syn keyword vmasmOpcode bicpsw bispsw bpt halt index movpsl nop popr pushr xfc +syn keyword vmasmOpcode insqhi insqti insque remqhi remqti remque +syn keyword vmasmOpcode addp4 addp6 ashp cmpp3 cmpp4 cvtpl cvtlp cvtps cvtpt +syn keyword vmasmOpcode cvtsp cvttp divp movp mulp subp4 subp6 editpc +syn keyword vmasmOpcode prober probew rei ldpctx svpctx mfpr mtpr bugw bugl +syn keyword vmasmOpcode vldl vldq vgathl vgathq vstl vstq vscatl vscatq +syn keyword vmasmOpcode vvcvt iota mfvp mtvp vsync +syn keyword vmasmOpcode beql[u] bgtr[u] blss[u] +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" +syn match vmasmOpcode "\" + +" Various number formats +syn match vmasmdecNumber "[+-]\=[0-9]\+\>" +syn match vmasmdecNumber "^d[0-9]\+\>" +syn match vmasmhexNumber "^x[0-9a-f]\+\>" +syn match vmasmoctNumber "^o[0-7]\+\>" +syn match vmasmbinNumber "^b[01]\+\>" +syn match vmasmfloatNumber "[-+]\=[0-9]\+E[-+]\=[0-9]\+" +syn match vmasmfloatNumber "[-+]\=[0-9]\+\.[0-9]*\(E[-+]\=[0-9]\+\)\=" + +" Valid labels +syn match vmasmLabel "^[a-z_$.][a-z0-9_$.]\{,30}::\=" +syn match vmasmLabel "\<[0-9]\{1,5}\$:\=" " Local label + +" Character string constants +" Too complex really. Could be "<...>" but those could also be +" expressions. Don't know how to handle chosen delimiters +" ("^...") +" syn region vmasmString start="<" end=">" oneline + +" Operators +syn match vmasmOperator "[-+*/@&!\\]" +syn match vmasmOperator "=" +syn match vmasmOperator "==" " Global assignment +syn match vmasmOperator "%length(.*)" +syn match vmasmOperator "%locate(.*)" +syn match vmasmOperator "%extract(.*)" +syn match vmasmOperator "^[amfc]" +syn match vmasmOperator "[bwlg]^" + +syn match vmasmOperator "\<\(not_\)\=equal\>" +syn match vmasmOperator "\" +syn match vmasmOperator "\" +syn match vmasmOperator "\" +syn match vmasmOperator "\<\(not_\)\=defined\>" +syn match vmasmOperator "\<\(not_\)\=blank\>" +syn match vmasmOperator "\" +syn match vmasmOperator "\" +syn match vmasmOperator "\" +syn match vmasmOperator "\<[gl]t\>" +syn match vmasmOperator "\" +syn match vmasmOperator "\" +syn match vmasmOperator "\" +syn match vmasmOperator "\<[nlg]e\>" +syn match vmasmOperator "\" + +" Special items for comments +syn keyword vmasmTodo contained todo + +" Comments +syn match vmasmComment ";.*" contains=vmasmTodo + +" Include +syn match vmasmInclude "\.library\>" + +" Macro definition +syn match vmasmMacro "\.macro\>" +syn match vmasmMacro "\.mexit\>" +syn match vmasmMacro "\.endm\>" +syn match vmasmMacro "\.mcall\>" +syn match vmasmMacro "\.mdelete\>" + +" Conditional assembly +syn match vmasmPreCond "\.iff\=\>" +syn match vmasmPreCond "\.if_false\>" +syn match vmasmPreCond "\.iftf\=\>" +syn match vmasmPreCond "\.if_true\(_false\)\=\>" +syn match vmasmPreCond "\.iif\>" + +" Loop control +syn match vmasmRepeat "\.irpc\=\>" +syn match vmasmRepeat "\.repeat\>" +syn match vmasmRepeat "\.rept\>" +syn match vmasmRepeat "\.endr\>" + +" Directives +syn match vmasmDirective "\.address\>" +syn match vmasmDirective "\.align\>" +syn match vmasmDirective "\.asci[cdiz]\>" +syn match vmasmDirective "\.blk[abdfghloqw]\>" +syn match vmasmDirective "\.\(signed_\)\=byte\>" +syn match vmasmDirective "\.\(no\)\=cross\>" +syn match vmasmDirective "\.debug\>" +syn match vmasmDirective "\.default displacement\>" +syn match vmasmDirective "\.[dfgh]_floating\>" +syn match vmasmDirective "\.disable\>" +syn match vmasmDirective "\.double\>" +syn match vmasmDirective "\.dsabl\>" +syn match vmasmDirective "\.enable\=\>" +syn match vmasmDirective "\.endc\=\>" +syn match vmasmDirective "\.entry\>" +syn match vmasmDirective "\.error\>" +syn match vmasmDirective "\.even\>" +syn match vmasmDirective "\.external\>" +syn match vmasmDirective "\.extrn\>" +syn match vmasmDirective "\.float\>" +syn match vmasmDirective "\.globa\=l\>" +syn match vmasmDirective "\.ident\>" +syn match vmasmDirective "\.link\>" +syn match vmasmDirective "\.list\>" +syn match vmasmDirective "\.long\>" +syn match vmasmDirective "\.mask\>" +syn match vmasmDirective "\.narg\>" +syn match vmasmDirective "\.nchr\>" +syn match vmasmDirective "\.nlist\>" +syn match vmasmDirective "\.ntype\>" +syn match vmasmDirective "\.octa\>" +syn match vmasmDirective "\.odd\>" +syn match vmasmDirective "\.opdef\>" +syn match vmasmDirective "\.packed\>" +syn match vmasmDirective "\.page\>" +syn match vmasmDirective "\.print\>" +syn match vmasmDirective "\.psect\>" +syn match vmasmDirective "\.quad\>" +syn match vmasmDirective "\.ref[1248]\>" +syn match vmasmDirective "\.ref16\>" +syn match vmasmDirective "\.restore\(_psect\)\=\>" +syn match vmasmDirective "\.save\(_psect\)\=\>" +syn match vmasmDirective "\.sbttl\>" +syn match vmasmDirective "\.\(no\)\=show\>" +syn match vmasmDirective "\.\(sub\)\=title\>" +syn match vmasmDirective "\.transfer\>" +syn match vmasmDirective "\.warn\>" +syn match vmasmDirective "\.weak\>" +syn match vmasmDirective "\.\(signed_\)\=word\>" + +syn case match + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default methods for highlighting. Can be overridden later +" Comment Constant Error Identifier PreProc Special Statement Todo Type +" +" Constant Boolean Character Number String +" Identifier Function +" PreProc Define Include Macro PreCondit +" Special Debug Delimiter SpecialChar SpecialComment Tag +" Statement Conditional Exception Keyword Label Operator Repeat +" Type StorageClass Structure Typedef + +hi def link vmasmComment Comment +hi def link vmasmTodo Todo + +hi def link vmasmhexNumber Number " Constant +hi def link vmasmoctNumber Number " Constant +hi def link vmasmbinNumber Number " Constant +hi def link vmasmdecNumber Number " Constant +hi def link vmasmfloatNumber Number " Constant + +" hi def link vmasmString String " Constant + +hi def link vmasmReg Identifier +hi def link vmasmOperator Identifier + +hi def link vmasmInclude Include " PreProc +hi def link vmasmMacro Macro " PreProc +" hi def link vmasmMacroParam Keyword " Statement + +hi def link vmasmDirective Special +hi def link vmasmPreCond Special + + +hi def link vmasmOpcode Statement +hi def link vmasmCond Conditional " Statement +hi def link vmasmRepeat Repeat " Statement + +hi def link vmasmLabel Type + +let b:current_syntax = "vmasm" + +" vim: ts=8 sw=2 diff --git a/.config/vim/syntax/voscm.vim b/.config/vim/syntax/voscm.vim new file mode 100644 index 0000000..7d6bea7 --- /dev/null +++ b/.config/vim/syntax/voscm.vim @@ -0,0 +1,94 @@ +" Vim syntax file +" Language: VOS CM macro +" Maintainer: Andrew McGill andrewm at lunch.za.net +" Last Change: Apr 06, 2007 +" Version: 1 +" URL: http://lunch.za.net/ +" + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case match +" set iskeyword=48-57,_,a-z,A-Z + +syn match voscmStatement "^!" +syn match voscmStatement "&\(label\|begin_parameters\|end_parameters\|goto\|attach_input\|break\|continue\|control\|detach_input\|display_line\|display_line_partial\|echo\|eof\|eval\|if\|mode\|return\|while\|set\|set_string\|then\|else\|do\|done\|end\)\>" +syn match voscmJump "\(&label\|&goto\) *" nextgroup=voscmLabelId +syn match voscmLabelId contained "\<[A-Za-z][A-Z_a-z0-9]* *$" +syn match voscmSetvar "\(&set_string\|&set\) *" nextgroup=voscmVariable +syn match voscmError "\(&set_string\|&set\) *&" +syn match voscmVariable contained "\<[A-Za-z][A-Z_a-z0-9]\+\>" +syn keyword voscmParamKeyword contained number req string switch allow byte disable_input hidden length longword max min no_abbrev output_path req required req_for_form word +syn region voscmParamList matchgroup=voscmParam start="&begin_parameters" end="&end_parameters" contains=voscmParamKeyword,voscmString,voscmParamName,voscmParamId +syn match voscmParamName contained "\(^\s*[A-Za-z_0-9]\+\s\+\)\@<=\k\+" +syn match voscmParamId contained "\(^\s*\)\@<=\k\+" +syn region par1 matchgroup=par1 start=/(/ end=/)/ contains=voscmFunction,voscmIdentifier,voscmString transparent +" FIXME: functions should only be allowed after a bracket ... ie (ask ...): +syn keyword voscmFunction contained abs access after ask before break byte calc ceil command_status concat +syn keyword voscmFunction contained contents path_name copy count current_dir current_module date date_time +syn keyword voscmFunction contained decimal directory_name end_of_file exists file_info floor given group_name +syn keyword voscmFunction contained has_access hexadecimal home_dir index iso_date iso_date_time language_name +syn keyword voscmFunction contained length lock_type locked ltrim master_disk max message min mod module_info +syn keyword voscmFunction contained module_name object_name online path_name person_name process_dir process_info +syn keyword voscmFunction contained process_type quote rank referencing_dir reverse rtrim search +syn keyword voscmFunction contained software_purchased string substitute substr system_name terminal_info +syn keyword voscmFunction contained terminal_name time translate trunc unique_string unquote user_name verify +syn keyword voscmFunction contained where_path +syn keyword voscmTodo contained TODO FIXME XXX DEBUG NOTE +syn match voscmTab "\t\+" + +syn keyword voscmCommand add_entry_names add_library_path add_profile analyze_pc_samples attach_default_output attach_port batch bind break_process c c_preprocess call_thru cancel_batch_requests cancel_device_reservation cancel_print_requests cc change_current_dir check_posix cobol comment_on_manual compare_dirs compare_files convert_text_file copy_dir copy_file copy_tape cpp create_data_object create_deleted_record_index create_dir create_file create_index create_record_index create_tape_volumes cvt_fixed_to_stream cvt_stream_to_fixed debug delete_dir delete_file delete_index delete_library_path detach_default_output detach_port dismount_tape display display_access display_access_list display_batch_status display_current_dir display_current_module display_date_time display_default_access_list display_device_info display_dir_status display_disk_info display_disk_usage display_error display_file display_file_status display_line display_notices display_object_module_info display_print_defaults display_print_status display_program_module display_system_usage display_tape_params display_terminal_parameters dump_file dump_record dump_tape edit edit_form emacs enforce_region_locks fortran get_external_variable give_access give_default_access handle_sig_dfl harvest_pc_samples help kill line_edit link link_dirs list list_batch_requests list_devices list_gateways list_library_paths list_modules list_port_attachments list_print_requests list_process_cmd_limits list_save_tape list_systems list_tape list_terminal_types list_users locate_files locate_large_files login logout mount_tape move_device_reservation move_dir move_file mp_debug nls_edit_form pascal pl1 position_tape preprocess_file print profile propagate_access read_tape ready remove_access remove_default_access rename reserve_device restore_object save_object send_message set set_cpu_time_limit set_expiration_date set_external_variable set_file_allocation set_implicit_locking set_index_flags set_language set_library_paths set_line_wrap_width set_log_protected_file set_owner_access set_pipe_file set_priority set_ready set_safety_switch set_second_tape set_tape_drive_params set_tape_file_params set_tape_mount_params set_terminal_parameters set_text_file set_time_zone sleep sort start_logging start_process stop_logging stop_process tail_file text_data_merge translate_links truncate_file unlink update_batch_requests update_print_requests update_process_cmd_limits use_abbreviations use_message_file vcc verify_posix_access verify_save verify_system_access walk_dir where_command where_path who_locked write_tape + +syn match voscmIdentifier "&[A-Za-z][a-z0-9_A-Z]*&" + +syn match voscmString "'[^']*'" + +" Number formats +syn match voscmNumber "\<\d\+\>" +"Floating point number part only +syn match voscmDecimalNumber "\.\d\+\([eE][-+]\=\d\)\=\>" + +"syn region voscmComment start="^[ ]*&[ ]+" end="$" +"syn match voscmComment "^[ ]*&[ ].*$" +"syn match voscmComment "^&$" +syn region voscmComment start="^[ ]*&[ ]" end="$" contains=voscmTodo +syn match voscmComment "^&$" +syn match voscmContinuation "&+$" + +"syn match voscmIdentifier "[A-Za-z0-9&._-]\+" + +"Synchronization with Statement terminator $ +" syn sync maxlines=100 + +hi def link voscmConditional Conditional +hi def link voscmStatement Statement +hi def link voscmSetvar Statement +hi def link voscmNumber Number +hi def link voscmDecimalNumber Float +hi def link voscmString String +hi def link voscmIdentifier Identifier +hi def link voscmVariable Identifier +hi def link voscmComment Comment +hi def link voscmJump Statement +hi def link voscmContinuation Macro +hi def link voscmLabelId String +hi def link voscmParamList NONE +hi def link voscmParamId Identifier +hi def link voscmParamName String +hi def link voscmParam Statement +hi def link voscmParamKeyword Statement +hi def link voscmFunction Function +hi def link voscmCommand Structure +"hi def link voscmIdentifier NONE +"hi def link voscmSpecial Special " not used +hi def link voscmTodo Todo +hi def link voscmTab Error +hi def link voscmError Error + +let b:current_syntax = "voscm" + +" vim: ts=8 diff --git a/.config/vim/syntax/vrml.vim b/.config/vim/syntax/vrml.vim new file mode 100644 index 0000000..2474493 --- /dev/null +++ b/.config/vim/syntax/vrml.vim @@ -0,0 +1,222 @@ +" Vim syntax file +" Language: VRML97 +" Modified from: VRML 1.0C by David Brown +" Maintainer: vacancy! +" Former Maintainer: Gregory Seidman +" Last change: 2006 May 03 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" keyword definitions + +syn keyword VRMLFields ambientIntensity appearance attenuation +syn keyword VRMLFields autoOffset avatarSize axisOfRotation backUrl +syn keyword VRMLFields bboxCenter bboxSize beamWidth beginCap +syn keyword VRMLFields bottom bottomRadius bottomUrl ccw center +syn keyword VRMLFields children choice collide color colorIndex +syn keyword VRMLFields colorPerVertex convex coord coordIndex +syn keyword VRMLFields creaseAngle crossSection cutOffAngle +syn keyword VRMLFields cycleInterval description diffuseColor +syn keyword VRMLFields directOutput direction diskAngle +syn keyword VRMLFields emissiveColor enabled endCap family +syn keyword VRMLFields fieldOfView fogType fontStyle frontUrl +syn keyword VRMLFields geometry groundAngle groundColor headlight +syn keyword VRMLFields height horizontal info intensity jump +syn keyword VRMLFields justify key keyValue language leftToRight +syn keyword VRMLFields leftUrl length level location loop material +syn keyword VRMLFields maxAngle maxBack maxExtent maxFront +syn keyword VRMLFields maxPosition minAngle minBack minFront +syn keyword VRMLFields minPosition mustEvaluate normal normalIndex +syn keyword VRMLFields normalPerVertex offset on orientation +syn keyword VRMLFields parameter pitch point position priority +syn keyword VRMLFields proxy radius range repeatS repeatT rightUrl +syn keyword VRMLFields rotation scale scaleOrientation shininess +syn keyword VRMLFields side size skyAngle skyColor solid source +syn keyword VRMLFields spacing spatialize specularColor speed spine +syn keyword VRMLFields startTime stopTime string style texCoord +syn keyword VRMLFields texCoordIndex texture textureTransform title +syn keyword VRMLFields top topToBottom topUrl translation +syn keyword VRMLFields transparency type url vector visibilityLimit +syn keyword VRMLFields visibilityRange whichChoice xDimension +syn keyword VRMLFields xSpacing zDimension zSpacing +syn match VRMLFields "\<[A-Za-z_][A-Za-z0-9_]*\>" contains=VRMLComment,VRMLProtos,VRMLfTypes +" syn match VRMLFields "\<[A-Za-z_][A-Za-z0-9_]*\>\(,\|\s\)*\(#.*$\)*\\(#.*$\)*\(,\|\s\)*\<[A-Za-z_][A-Za-z0-9_]*\>\(,\|\s\)*\(#.*$\)*" contains=VRMLComment,VRMLProtos +" syn region VRMLFields start="\<[A-Za-z_][A-Za-z0-9_]*\>" end=+\(,\|#\|\s\)+me=e-1 contains=VRMLComment,VRMLProtos + +syn keyword VRMLEvents addChildren ambientIntensity_changed +syn keyword VRMLEvents appearance_changed attenuation_changed +syn keyword VRMLEvents autoOffset_changed avatarSize_changed +syn keyword VRMLEvents axisOfRotation_changed backUrl_changed +syn keyword VRMLEvents beamWidth_changed bindTime bottomUrl_changed +syn keyword VRMLEvents center_changed children_changed +syn keyword VRMLEvents choice_changed collideTime collide_changed +syn keyword VRMLEvents color_changed coord_changed +syn keyword VRMLEvents cutOffAngle_changed cycleInterval_changed +syn keyword VRMLEvents cycleTime description_changed +syn keyword VRMLEvents diffuseColor_changed direction_changed +syn keyword VRMLEvents diskAngle_changed duration_changed +syn keyword VRMLEvents emissiveColor_changed enabled_changed +syn keyword VRMLEvents enterTime exitTime fogType_changed +syn keyword VRMLEvents fontStyle_changed fraction_changed +syn keyword VRMLEvents frontUrl_changed geometry_changed +syn keyword VRMLEvents groundAngle_changed headlight_changed +syn keyword VRMLEvents hitNormal_changed hitPoint_changed +syn keyword VRMLEvents hitTexCoord_changed intensity_changed +syn keyword VRMLEvents isActive isBound isOver jump_changed +syn keyword VRMLEvents keyValue_changed key_changed leftUrl_changed +syn keyword VRMLEvents length_changed level_changed +syn keyword VRMLEvents location_changed loop_changed +syn keyword VRMLEvents material_changed maxAngle_changed +syn keyword VRMLEvents maxBack_changed maxExtent_changed +syn keyword VRMLEvents maxFront_changed maxPosition_changed +syn keyword VRMLEvents minAngle_changed minBack_changed +syn keyword VRMLEvents minFront_changed minPosition_changed +syn keyword VRMLEvents normal_changed offset_changed on_changed +syn keyword VRMLEvents orientation_changed parameter_changed +syn keyword VRMLEvents pitch_changed point_changed position_changed +syn keyword VRMLEvents priority_changed radius_changed +syn keyword VRMLEvents removeChildren rightUrl_changed +syn keyword VRMLEvents rotation_changed scaleOrientation_changed +syn keyword VRMLEvents scale_changed set_ambientIntensity +syn keyword VRMLEvents set_appearance set_attenuation +syn keyword VRMLEvents set_autoOffset set_avatarSize +syn keyword VRMLEvents set_axisOfRotation set_backUrl set_beamWidth +syn keyword VRMLEvents set_bind set_bottomUrl set_center +syn keyword VRMLEvents set_children set_choice set_collide +syn keyword VRMLEvents set_color set_colorIndex set_coord +syn keyword VRMLEvents set_coordIndex set_crossSection +syn keyword VRMLEvents set_cutOffAngle set_cycleInterval +syn keyword VRMLEvents set_description set_diffuseColor +syn keyword VRMLEvents set_direction set_diskAngle +syn keyword VRMLEvents set_emissiveColor set_enabled set_fogType +syn keyword VRMLEvents set_fontStyle set_fraction set_frontUrl +syn keyword VRMLEvents set_geometry set_groundAngle set_headlight +syn keyword VRMLEvents set_height set_intensity set_jump set_key +syn keyword VRMLEvents set_keyValue set_leftUrl set_length +syn keyword VRMLEvents set_level set_location set_loop set_material +syn keyword VRMLEvents set_maxAngle set_maxBack set_maxExtent +syn keyword VRMLEvents set_maxFront set_maxPosition set_minAngle +syn keyword VRMLEvents set_minBack set_minFront set_minPosition +syn keyword VRMLEvents set_normal set_normalIndex set_offset set_on +syn keyword VRMLEvents set_orientation set_parameter set_pitch +syn keyword VRMLEvents set_point set_position set_priority +syn keyword VRMLEvents set_radius set_rightUrl set_rotation +syn keyword VRMLEvents set_scale set_scaleOrientation set_shininess +syn keyword VRMLEvents set_size set_skyAngle set_skyColor +syn keyword VRMLEvents set_source set_specularColor set_speed +syn keyword VRMLEvents set_spine set_startTime set_stopTime +syn keyword VRMLEvents set_string set_texCoord set_texCoordIndex +syn keyword VRMLEvents set_texture set_textureTransform set_topUrl +syn keyword VRMLEvents set_translation set_transparency set_type +syn keyword VRMLEvents set_url set_vector set_visibilityLimit +syn keyword VRMLEvents set_visibilityRange set_whichChoice +syn keyword VRMLEvents shininess_changed size_changed +syn keyword VRMLEvents skyAngle_changed skyColor_changed +syn keyword VRMLEvents source_changed specularColor_changed +syn keyword VRMLEvents speed_changed startTime_changed +syn keyword VRMLEvents stopTime_changed string_changed +syn keyword VRMLEvents texCoord_changed textureTransform_changed +syn keyword VRMLEvents texture_changed time topUrl_changed +syn keyword VRMLEvents touchTime trackPoint_changed +syn keyword VRMLEvents translation_changed transparency_changed +syn keyword VRMLEvents type_changed url_changed value_changed +syn keyword VRMLEvents vector_changed visibilityLimit_changed +syn keyword VRMLEvents visibilityRange_changed whichChoice_changed +syn region VRMLEvents start="\S+[^0-9]+\.[A-Za-z_]+"ms=s+1 end="\(,\|$\|\s\)"me=e-1 + +syn keyword VRMLNodes Anchor Appearance AudioClip Background +syn keyword VRMLNodes Billboard Box Collision Color +syn keyword VRMLNodes ColorInterpolator Cone Coordinate +syn keyword VRMLNodes CoordinateInterpolator Cylinder +syn keyword VRMLNodes CylinderSensor DirectionalLight +syn keyword VRMLNodes ElevationGrid Extrusion Fog FontStyle +syn keyword VRMLNodes Group ImageTexture IndexedFaceSet +syn keyword VRMLNodes IndexedLineSet Inline LOD Material +syn keyword VRMLNodes MovieTexture NavigationInfo Normal +syn keyword VRMLNodes NormalInterpolator OrientationInterpolator +syn keyword VRMLNodes PixelTexture PlaneSensor PointLight +syn keyword VRMLNodes PointSet PositionInterpolator +syn keyword VRMLNodes ProximitySensor ScalarInterpolator +syn keyword VRMLNodes Script Shape Sound Sphere SphereSensor +syn keyword VRMLNodes SpotLight Switch Text TextureCoordinate +syn keyword VRMLNodes TextureTransform TimeSensor TouchSensor +syn keyword VRMLNodes Transform Viewpoint VisibilitySensor +syn keyword VRMLNodes WorldInfo + +" the following line doesn't catch since \n +" doesn't match as an atom yet :-( +syn match VRMLNodes "[A-Za-z_][A-Za-z0-9_]*\(,\|\s\)*{"me=e-1 +syn region VRMLNodes start="\\(,\|\s\)*[A-Za-z_]"ms=e start="\\(,\|\s\)*" end="[\s]*\["me=e-1 contains=VRMLProtos,VRMLComment +syn region VRMLNodes start="PROTO\>\(,\|\s\)*[A-Za-z_]"ms=e start="PROTO\>\(,\|\s\)*" end="[\s]*\["me=e-1 contains=VRMLProtos,VRMLComment + +syn keyword VRMLTypes SFBool SFColor MFColor SFFloat MFFloat +syn keyword VRMLTypes SFImage SFInt32 MFInt32 SFNode MFNode +syn keyword VRMLTypes SFRotation MFRotation SFString MFString +syn keyword VRMLTypes SFTime MFTime SFVec2f MFVec2f SFVec3f MFVec3f + +syn keyword VRMLfTypes field exposedField eventIn eventOut + +syn keyword VRMLValues TRUE FALSE NULL + +syn keyword VRMLProtos contained EXTERNPROTO PROTO IS + +syn keyword VRMLRoutes contained ROUTE TO + +"containment! +syn include @jscript $VIMRUNTIME/syntax/javascript.vim +syn region VRMLjScriptString contained start=+"\(\(javascript\)\|\(vrmlscript\)\|\(ecmascript\)\):+ms=e+1 skip=+\\\\\|\\"+ end=+"+me=e-1 contains=@jscript + +" match definitions. +syn match VRMLSpecial contained "\\[0-9][0-9][0-9]\|\\." +syn region VRMLString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=VRMLSpecial,VRMLjScriptString +syn match VRMLCharacter "'[^\\]'" +syn match VRMLSpecialCharacter "'\\.'" +syn match VRMLNumber "[-+]\=\<[0-9]\+\(\.[0-9]\+\)\=\([eE]\{1}[-+]\=[0-9]\+\)\=\>\|0[xX][0-9a-fA-F]\+\>" +syn match VRMLNumber "0[xX][0-9a-fA-F]\+\>" +syn match VRMLComment "#.*$" + +" newlines should count as whitespace, but they can't be matched yet :-( +syn region VRMLRouteNode start="[^O]TO\(,\|\s\)*" end="\."me=e-1 contains=VRMLRoutes,VRMLComment +syn region VRMLRouteNode start="ROUTE\(,\|\s\)*" end="\."me=e-1 contains=VRMLRoutes,VRMLComment +syn region VRMLInstName start="DEF\>"hs=e+1 skip="DEF\(,\|\s\)*" end="[A-Za-z0-9_]\(\s\|$\|,\)"me=e contains=VRMLInstances,VRMLComment +syn region VRMLInstName start="USE\>"hs=e+1 skip="USE\(,\|\s\)*" end="[A-Za-z0-9_]\(\s\|$\|,\)"me=e contains=VRMLInstances,VRMLComment + +syn keyword VRMLInstances contained DEF USE +syn sync minlines=1 + +"FOLDS! +syn sync fromstart +"setlocal foldmethod=syntax +syn region braceFold start="{" end="}" transparent fold contains=TOP +syn region bracketFold start="\[" end="]" transparent fold contains=TOP +syn region VRMLString start=+"+ skip=+\\\\\|\\"+ end=+"+ fold contains=VRMLSpecial,VRMLjScriptString + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link VRMLCharacter VRMLString +hi def link VRMLSpecialCharacter VRMLSpecial +hi def link VRMLNumber VRMLString +hi def link VRMLValues VRMLString +hi def link VRMLString String +hi def link VRMLSpecial Special +hi def link VRMLComment Comment +hi def link VRMLNodes Statement +hi def link VRMLFields Type +hi def link VRMLEvents Type +hi def link VRMLfTypes LineNr +" hi VRMLfTypes ctermfg=6 guifg=Brown +hi def link VRMLInstances PreCondit +hi def link VRMLRoutes PreCondit +hi def link VRMLProtos PreProc +hi def link VRMLRouteNode Identifier +hi def link VRMLInstName Identifier +hi def link VRMLTypes Identifier + + +let b:current_syntax = "vrml" + +" vim: ts=8 diff --git a/.config/vim/syntax/vroom.vim b/.config/vim/syntax/vroom.vim new file mode 100644 index 0000000..0509e30 --- /dev/null +++ b/.config/vim/syntax/vroom.vim @@ -0,0 +1,110 @@ +" Vim syntax file +" Language: Vroom (vim testing and executable documentation) +" Maintainer: David Barnett (https://github.com/google/vim-ft-vroom) +" Last Change: 2014 Jul 23 + +" quit when a syntax file was already loaded +if exists('b:current_syntax') + finish +endif + +let s:cpo_save = &cpo +set cpo-=C + + +syn include @vroomVim syntax/vim.vim +syn include @vroomShell syntax/sh.vim + +syntax region vroomAction + \ matchgroup=vroomOutput + \ start='\m^ ' end='\m$' keepend + \ contains=vroomControlBlock + +syntax region vroomAction + \ matchgroup=vroomOutput + \ start='\m^ & ' end='\m$' keepend + \ contains=vroomControlBlock + +syntax match vroomOutput '\m^ &$' + +syntax region vroomMessageBody + \ matchgroup=vroomMessage + \ start='\m^ \~ ' end='\m$' keepend + \ contains=vroomControlBlock + +syntax region vroomColoredAction + \ matchgroup=vroomInput + \ start='\m^ > ' end='\m$' keepend + \ contains=vimNotation,vroomControlBlock +syntax region vroomAction + \ matchgroup=vroomInput + \ start='\m^ % ' end='\m$' keepend + \ contains=vimNotation,vroomControlBlock + +syntax region vroomAction + \ matchgroup=vroomContinuation + \ start='\m^ |' end='\m$' keepend + +syntax region vroomAction + \ start='\m^ \ze:' end='\m$' keepend + \ contains=@vroomVim,vroomControlBlock + +syntax region vroomAction + \ matchgroup=vroomDirective + \ start='\m^ @\i\+' end='\m$' keepend + \ contains=vroomControlBlock + +syntax region vroomSystemAction + \ matchgroup=vroomSystem + \ start='\m^ ! ' end='\m$' keepend + \ contains=@vroomShell,vroomControlBlock + +syntax region vroomHijackAction + \ matchgroup=vroomHijack + \ start='\m^ \$ ' end='\m$' keepend + \ contains=vroomControlBlock + +syntax match vroomControlBlock contains=vroomControlEscape,@vroomControls + \ '\v \([^&()][^()]*\)$' + +syntax match vroomControlEscape '\m&' contained + +syntax cluster vroomControls + \ contains=vroomDelay,vroomMode,vroomBuffer,vroomRange + \,vroomChannel,vroomBind,vroomStrictness +syntax match vroomRange '\v\.(,\+?(\d+|\$)?)?' contained +syntax match vroomRange '\v\d*,\+?(\d+|\$)?' contained +syntax match vroomBuffer '\v\d+,@!' contained +syntax match vroomDelay '\v\d+(\.\d+)?s' contained +syntax match vroomMode '\v<%(regex|glob|verbatim)' contained +syntax match vroomChannel '\v<%(stderr|stdout|command|status)>' contained +syntax match vroomBind '\v' contained +syntax match vroomStrictness '\v\<%(STRICT|RELAXED|GUESS-ERRORS)\>' contained + +highlight default link vroomInput Identifier +highlight default link vroomDirective vroomInput +highlight default link vroomControlBlock vroomInput +highlight default link vroomSystem vroomInput +highlight default link vroomOutput Statement +highlight default link vroomContinuation Constant +highlight default link vroomHijack Special +highlight default link vroomColoredAction Statement +highlight default link vroomSystemAction vroomSystem +highlight default link vroomHijackAction vroomHijack +highlight default link vroomMessage vroomOutput +highlight default link vroomMessageBody Constant + +highlight default link vroomControlEscape Special +highlight default link vroomBuffer vroomInput +highlight default link vroomRange Include +highlight default link vroomMode Constant +highlight default link vroomDelay Type +highlight default link vroomStrictness vroomMode +highlight default link vroomChannel vroomMode +highlight default link vroomBind vroomMode + +let b:current_syntax = 'vroom' + + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/vsejcl.vim b/.config/vim/syntax/vsejcl.vim new file mode 100644 index 0000000..f329836 --- /dev/null +++ b/.config/vim/syntax/vsejcl.vim @@ -0,0 +1,36 @@ +" Vim syntax file +" Language: JCL job control language - DOS/VSE +" Maintainer: Davyd Ondrejko +" URL: +" Last change: 2001 May 10 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" tags +syn keyword vsejclKeyword DLBL EXEC JOB ASSGN EOJ +syn keyword vsejclField JNM CLASS DISP USER SYSID JSEP SIZE +syn keyword vsejclField VSAM +syn region vsejclComment start="^/\*" end="$" +syn region vsejclComment start="^[\* ]\{}$" end="$" +syn region vsejclMisc start="^ " end="$" contains=Jparms +syn match vsejclString /'.\{-}'/ +syn match vsejclParms /(.\{-})/ contained + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link vsejclComment Comment +hi def link vsejclField Type +hi def link vsejclKeyword Statement +hi def link vsejclObject Constant +hi def link vsejclString Constant +hi def link vsejclMisc Special +hi def link vsejclParms Constant + + +let b:current_syntax = "vsejcl" + +" vim: ts=4 diff --git a/.config/vim/syntax/vue.vim b/.config/vim/syntax/vue.vim new file mode 100644 index 0000000..bad0e26 --- /dev/null +++ b/.config/vim/syntax/vue.vim @@ -0,0 +1,14 @@ +" Vim syntax file +" Language: Vue.js Single File Component +" Maintainer: Ralph Giles +" URL: https://vuejs.org/v2/guide/single-file-components.html +" Last Change: 2019 Jul 8 + +" Quit if a syntax file was already loaded. +if exists("b:current_syntax") + finish +endif + +" We have a collection of html, css and javascript wrapped in +" tags. The default HTML syntax highlight works well enough. +runtime! syntax/html.vim diff --git a/.config/vim/syntax/wat.vim b/.config/vim/syntax/wat.vim new file mode 100644 index 0000000..a6b926b --- /dev/null +++ b/.config/vim/syntax/wat.vim @@ -0,0 +1,97 @@ +" Vim syntax file +" Language: WebAssembly +" Maintainer: rhysd +" Last Change: Nov 14, 2023 +" For bugs, patches and license go to https://github.com/rhysd/vim-wasm + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn cluster watNotTop contains=watModule,watInstWithType,watInstGetSet,watInstGeneral,watParamInst,watControlInst,watSimdInst,watString,watNamedVar,watUnnamedVar,watFloat,watNumber,watComment,watList,watType + +" Instructions +" https://webassembly.github.io/spec/core/text/instructions.html +" Note: memarg (align=,offset=) can be added to memory instructions +syn match watInstWithType "\%((\s*\)\@<=\<\%(i32\|i64\|f32\|f64\|memory\)\.[[:alnum:]_]\+\%(/\%(i32\|i64\|f32\|f64\)\)\=\>\%(\s\+\%(align\|offset\)=\)\=" contained display +syn match watInstGeneral "\%((\s*\)\@<=\<[[:alnum:]_]\+\>" contained display +syn match watInstGetSet "\%((\s*\)\@<=\<\%(local\|global\)\.\%(get\|set\)\>" contained display +" https://webassembly.github.io/spec/core/text/instructions.html#control-instructions +syn match watControlInst "\%((\s*\)\@<=\<\%(block\|end\|loop\|if\|then\|else\|unreachable\|nop\|br\|br_if\|br_table\|return\|call\|call_indirect\)\>" contained display +" https://webassembly.github.io/spec/core/text/instructions.html#parametric-instructions +syn match watParamInst "\%((\s*\)\@<=\<\%(drop\|select\)\>" contained display +" SIMD instructions +" https://webassembly.github.io/simd/core/text/instructions.html#simd-instructions +syn match watSimdInst "\<\%(v128\|i8x16\|i16x8\|i32x4\|i64x2\|f32x4\|f64x2)\)\.[[:alnum:]_]\+\%(\s\+\%(i8x16\|i16x8\|i32x4\|i64x2\|f32x4\|f64x2\)\)\=\>" contained display + +" Identifiers +" https://webassembly.github.io/spec/core/text/values.html#text-id +syn match watNamedVar "$\+[[:alnum:]!#$%&'∗./:=>" display contained +syn match watNumber "\<-\=0x\x\%(_\=\x\)*\>" display contained + +" Comments +" https://webassembly.github.io/spec/core/text/lexical.html#comments +syn region watComment start=";;" end="$" +syn region watComment start="(;;\@!" end=";)" + +syn region watList matchgroup=watListDelimiter start="(;\@!" matchgroup=watListDelimiter end=";\@ +" Last Change: 25 Apr 2001 +" URL: http://alfie.ist.org/vim/syntax/wdiff.vim +" +" Comments are very welcome - but please make sure that you are commenting on +" the latest version of this file. +" SPAM is _NOT_ welcome - be ready to be reported! + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + + +syn region wdiffOld start=+\[-+ end=+-]+ +syn region wdiffNew start="{+" end="+}" + + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link wdiffOld Special +hi def link wdiffNew Identifier + + +let b:current_syntax = "wdiff" diff --git a/.config/vim/syntax/wdl.vim b/.config/vim/syntax/wdl.vim new file mode 100644 index 0000000..3b8369e --- /dev/null +++ b/.config/vim/syntax/wdl.vim @@ -0,0 +1,41 @@ +" Vim syntax file +" Language: wdl +" Maintainer: Matt Dunford (zenmatic@gmail.com) +" URL: https://github.com/zenmatic/vim-syntax-wdl +" Last Change: 2022 Nov 24 + +" https://github.com/openwdl/wdl + +" quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case match + +syn keyword wdlStatement alias task input command runtime input output workflow call scatter import as meta parameter_meta in version +syn keyword wdlConditional if then else +syn keyword wdlType struct Array String File Int Float Boolean Map Pair Object + +syn keyword wdlFunctions stdout stderr read_lines read_tsv read_map read_object read_objects read_json read_int read_string read_float read_boolean write_lines write_tsv write_map write_object write_objects write_json size sub range transpose zip cross length flatten prefix select_first defined basename floor ceil round + +syn region wdlCommandSection start="<<<" end=">>>" + +syn region wdlString start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn region wdlString start=+'+ skip=+\\\\\|\\'+ end=+'+ + +" Comments; their contents +syn keyword wdlTodo contained TODO FIXME XXX BUG +syn cluster wdlCommentGroup contains=wdlTodo +syn region wdlComment start="#" end="$" contains=@wdlCommentGroup + +hi def link wdlStatement Statement +hi def link wdlConditional Conditional +hi def link wdlType Type +hi def link wdlFunctions Function +hi def link wdlString String +hi def link wdlCommandSection String +hi def link wdlComment Comment +hi def link wdlTodo Todo + +let b:current_syntax = 'wdl' diff --git a/.config/vim/syntax/web.vim b/.config/vim/syntax/web.vim new file mode 100644 index 0000000..54eebda --- /dev/null +++ b/.config/vim/syntax/web.vim @@ -0,0 +1,32 @@ +" Vim syntax file +" Language: WEB +" Maintainer: Andreas Scherer +" Last Change: April 30, 2001 + +" Details of the WEB language can be found in the article by Donald E. Knuth, +" "The WEB System of Structured Documentation", included as "webman.tex" in +" the standard WEB distribution, available for anonymous ftp at +" ftp://labrea.stanford.edu/pub/tex/web/. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Although WEB is the ur-language for the "Literate Programming" paradigm, +" we base this syntax file on the modern superset, CWEB. Note: This shortcut +" may introduce some illegal constructs, e.g., CWEB's "@c" does _not_ start a +" code section in WEB. Anyway, I'm not a WEB programmer. +runtime! syntax/cweb.vim +unlet b:current_syntax + +" Replace C/C++ syntax by Pascal syntax. +syntax include @webIncludedC :p:h/pascal.vim + +" Double-@ means single-@, anywhere in the WEB source (as in CWEB). +" Don't misinterpret "@'" as the start of a Pascal string. +syntax match webIgnoredStuff "@[@']" + +let b:current_syntax = "web" + +" vim: ts=8 diff --git a/.config/vim/syntax/webmacro.vim b/.config/vim/syntax/webmacro.vim new file mode 100644 index 0000000..9597525 --- /dev/null +++ b/.config/vim/syntax/webmacro.vim @@ -0,0 +1,67 @@ +" WebMacro syntax file +" Language: WebMacro +" Maintainer: Claudio Fleiner +" URL: http://www.fleiner.com/vim/syntax/webmacro.vim +" Last Change: 2003 May 11 + +" webmacro is a nice little language that you should +" check out if you use java servlets. +" webmacro: http://www.webmacro.org + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if !exists("main_syntax") + " quit when a syntax file was already loaded + if exists("b:current_syntax") + finish + endif + let main_syntax = 'webmacro' +endif + + +runtime! syntax/html.vim +unlet b:current_syntax + +syn cluster htmlPreProc add=webmacroIf,webmacroUse,webmacroBraces,webmacroParse,webmacroInclude,webmacroSet,webmacroForeach,webmacroComment + +syn match webmacroVariable "\$[a-zA-Z0-9.()]*;\=" +syn match webmacroNumber "[-+]\=\d\+[lL]\=" contained +syn keyword webmacroBoolean true false contained +syn match webmacroSpecial "\\." contained +syn region webmacroString contained start=+"+ end=+"+ contains=webmacroSpecial,webmacroVariable +syn region webmacroString contained start=+'+ end=+'+ contains=webmacroSpecial,webmacroVariable +syn region webmacroList contained matchgroup=Structure start="\[" matchgroup=Structure end="\]" contains=webmacroString,webmacroVariable,webmacroNumber,webmacroBoolean,webmacroList + +syn region webmacroIf start="#if" start="#else" end="{"me=e-1 contains=webmacroVariable,webmacroNumber,webmacroString,webmacroBoolean,webmacroList nextgroup=webmacroBraces +syn region webmacroForeach start="#foreach" end="{"me=e-1 contains=webmacroVariable,webmacroNumber,webmacroString,webmacroBoolean,webmacroList nextgroup=webmacroBraces +syn match webmacroSet "#set .*$" contains=webmacroVariable,webmacroNumber,webmacroBoolean,webmacroString,webmacroList +syn match webmacroInclude "#include .*$" contains=webmacroVariable,webmacroNumber,webmacroBoolean,webmacroString,webmacroList +syn match webmacroParse "#parse .*$" contains=webmacroVariable,webmacroNumber,webmacroBoolean,webmacroString,webmacroList +syn region webmacroUse matchgroup=PreProc start="#use .*" matchgroup=PreProc end="^-.*" contains=webmacroHash,@HtmlTop +syn region webmacroBraces matchgroup=Structure start="{" matchgroup=Structure end="}" contained transparent +syn match webmacroBracesError "[{}]" +syn match webmacroComment "##.*$" +syn match webmacroHash "[#{}\$]" contained + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link webmacroComment CommentTitle +hi def link webmacroVariable PreProc +hi def link webmacroIf webmacroStatement +hi def link webmacroForeach webmacroStatement +hi def link webmacroSet webmacroStatement +hi def link webmacroInclude webmacroStatement +hi def link webmacroParse webmacroStatement +hi def link webmacroStatement Function +hi def link webmacroNumber Number +hi def link webmacroBoolean Boolean +hi def link webmacroSpecial Special +hi def link webmacroString String +hi def link webmacroBracesError Error + +let b:current_syntax = "webmacro" + +if main_syntax == 'webmacro' + unlet main_syntax +endif diff --git a/.config/vim/syntax/wget.vim b/.config/vim/syntax/wget.vim new file mode 100644 index 0000000..93206c2 --- /dev/null +++ b/.config/vim/syntax/wget.vim @@ -0,0 +1,241 @@ +" Vim syntax file +" Language: Wget configuration file (/etc/wgetrc ~/.wgetrc) +" Maintainer: Doug Kearns +" Last Change: 2023 Nov 05 + +" GNU Wget 1.21 built on linux-gnu. + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn match wgetComment "#.*" contains=wgetTodo contained + +syn keyword wgetTodo TODO NOTE FIXME XXX contained + +syn region wgetString start=+"+ skip=+\\\\\|\\"+ end=+"+ contained oneline +syn region wgetString start=+'+ skip=+\\\\\|\\'+ end=+'+ contained oneline + +syn case ignore + +syn keyword wgetBoolean on off yes no contained +syn keyword wgetNumber inf contained +syn match wgetNumber "\<\d\+>" contained +syn match wgetQuota "\<\d\+[kmgt]\>" contained +syn match wgetTime "\<\d\+[smhdw]\>" contained + +"{{{ Commands +let s:commands =<< trim EOL + accept + accept-regex + add-host-dir + adjust-extension + always-rest + ask-password + auth-no-challenge + background + backup-converted + backups + base + bind-address + bind-dns-address + body-data + body-file + ca-certificate + ca-directory + cache + certificate + certificate-type + check-certificate + choose-config + ciphers + compression + connect-timeout + content-disposition + content-on-error + continue + convert-file-only + convert-links + cookies + crl-file + cut-dirs + debug + default-page + delete-after + dns-cache + dns-servers + dns-timeout + dir-prefix + dir-struct + domains + dot-bytes + dots-in-line + dot-spacing + dot-style + egd-file + exclude-directories + exclude-domains + follow-ftp + follow-tags + force-html + ftp-passwd + ftp-password + ftp-user + ftp-proxy + ftps-clear-data-connection + ftps-fallback-to-ftp + ftps-implicit + ftps-resume-ssl + hsts + hsts-file + ftp-stmlf + glob + header + html-extension + htmlify + http-keep-alive + http-passwd + http-password + http-proxy + https-proxy + https-only + http-user + if-modified-since + ignore-case + ignore-length + ignore-tags + include-directories + inet4-only + inet6-only + input + input-meta-link + iri + keep-bad-hash + keep-session-cookies + kill-longer + limit-rate + load-cookies + locale + local-encoding + logfile + login + max-redirect + metalink-index + metalink-over-http + method + mirror + netrc + no-clobber + no-config + no-parent + no-proxy + numtries + output-document + page-requisites + passive-ftp + passwd + password + pinned-pubkey + post-data + post-file + prefer-family + preferred-location + preserve-permissions + private-key + private-key-type + progress + protocol-directories + proxy-passwd + proxy-password + proxy-user + quiet + quota + random-file + random-wait + read-timeout + rec-level + recursive + referer + regex-type + reject + rejected-log + reject-regex + relative-only + remote-encoding + remove-listing + report-speed + restrict-file-names + retr-symlinks + retry-connrefused + retry-on-host-error + retry-on-http-error + robots + save-cookies + save-headers + secure-protocol + server-response + show-all-dns-entries + show-progress + simple-host-check + span-hosts + spider + start-pos + strict-comments + sslcertfile + sslcertkey + timeout + timestamping + use-server-timestamps + tries + trust-server-names + unlink + use-askpass + user + use-proxy + user-agent + verbose + wait + wait-retry + warc-cdx + warc-cdx-dedup + warc-compression + warc-digests + warc-file + warc-header + warc-keep-log + warc-max-size + warc-temp-dir + wdebug + xattr +EOL +"}}} + +for cmd in s:commands + exe 'syn match wgetCommand "\<' .. substitute(cmd, '-', '[-_]\\=', "g") .. '\>" nextgroup=wgetAssignmentOperator skipwhite contained' +endfor +unlet s:commands + +syn case match + +syn match wgetLineStart "^" nextgroup=wgetCommand,wgetComment skipwhite +syn match wgetAssignmentOperator "=" nextgroup=wgetString,wgetBoolean,wgetNumber,wgetQuota,wgetTime skipwhite contained + +hi def link wgetAssignmentOperator Special +hi def link wgetBoolean Boolean +hi def link wgetCommand Identifier +hi def link wgetComment Comment +hi def link wgetNumber Number +hi def link wgetQuota Number +hi def link wgetString String +hi def link wgetTime Number +hi def link wgetTodo Todo + +let b:current_syntax = "wget" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 fdm=marker: diff --git a/.config/vim/syntax/wget2.vim b/.config/vim/syntax/wget2.vim new file mode 100644 index 0000000..3e9abdf --- /dev/null +++ b/.config/vim/syntax/wget2.vim @@ -0,0 +1,250 @@ +" Vim syntax file +" Language: Wget2 configuration file (/etc/wget2rc ~/.wget2rc) +" Maintainer: Doug Kearns +" Last Change: 2023 Nov 05 + +" GNU Wget2 2.1.0 - multithreaded metalink/file/website downloader + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn match wget2Comment "#.*" contains=wget2Todo contained + +syn keyword wget2Todo TODO NOTE FIXME XXX contained + +syn region wget2String start=+"+ skip=+\\\\\|\\"+ end=+"+ contained oneline +syn region wget2String start=+'+ skip=+\\\\\|\\'+ end=+'+ contained oneline + +syn case ignore + +syn keyword wget2Boolean on off yes no y n contained +syn keyword wget2Number infinity inf contained +syn match wget2Number "\<\d\+>" contained +syn match wget2Quota "\<\d\+[kmgt]\>" contained +syn match wget2Time "\<\d\+[smhd]\>" contained + +"{{{ Commands +let s:commands =<< trim EOL + accept + accept-regex + adjust-extension + append-output + ask-password + auth-no-challenge + background + backup-converted + backups + base + bind-address + bind-interface + body-data + body-file + ca-certificate + ca-directory + cache + certificate + certificate-type + check-certificate + check-hostname + chunk-size + clobber + compression + config + connect-timeout + content-disposition + content-on-error + continue + convert-file-only + convert-links + cookie-suffixes + cookies + crl-file + cut-dirs + cut-file-get-vars + cut-url-get-vars + dane + debug + default-http-port + default-https-port + default-page + delete-after + directories + directory-prefix + dns-cache + dns-cache-preload + dns-timeout + domains + download-attr + egd-file + exclude-directories + exclude-domains + execute + filter-mime-type + filter-urls + follow-sitemaps + follow-tags + force-atom + force-css + force-directories + force-html + force-metalink + force-progress + force-rss + force-sitemap + fsync-policy + gnupg-homedir + header + help + host-directories + hpkp + hpkp-file + hsts + hsts-file + hsts-preload + hsts-preload-file + html-extension + http-keep-alive + http-password + http-proxy + http-proxy-password + http-proxy-user + http-user + http2 + http2-only + http2-request-window + https-enforce + https-only + https-proxy + hyperlink + if-modified-since + ignore-case + ignore-length + ignore-tags + include-directories + inet4-only + inet6-only + input-encoding + input-file + keep-extension + keep-session-cookies + level + limit-rate + list-plugins + load-cookies + local-db + local-encoding + local-plugin + max-redirect + max-threads + metalink + method + mirror + netrc + netrc-file + ocsp + ocsp-date + ocsp-file + ocsp-nonce + ocsp-server + ocsp-stapling + output-document + output-file + page-requisites + parent + password + plugin + plugin-dirs + plugin-help + plugin-opt + post-data + post-file + prefer-family + private-key + private-key-type + progress + protocol-directories + proxy + quiet + quota + random-file + random-wait + read-timeout + recursive + referer + regex-type + reject + reject-regex + remote-encoding + report-speed + restrict-file-names + retry-connrefused + retry-on-http-error + robots + save-content-on + save-cookies + save-headers + secure-protocol + server-response + signature-extensions + span-hosts + spider + start-pos + stats-dns + stats-ocsp + stats-server + stats-site + stats-tls + strict-comments + tcp-fastopen + timeout + timestamping + tls-false-start + tls-resume + tls-session-file + tries + trust-server-names + unlink + use-askpass + use-server-timestamps + user + user-agent + verbose + verify-save-failed + verify-sig + version + wait + waitretry + xattr +EOL +"}}} + +for cmd in s:commands + exe 'syn match wget2Command "\<' .. substitute(cmd, '-', '[-_]\\=', "g") .. '\>" nextgroup=wget2AssignmentOperator skipwhite contained' +endfor +unlet s:commands + +syn case match + +syn match wget2LineStart "^" nextgroup=wget2Command,wget2Comment skipwhite +syn match wget2AssignmentOperator "=" nextgroup=wget2String,wget2Boolean,wget2Number,wget2Quota,wget2Time skipwhite contained + +hi def link wget2AssignmentOperator Special +hi def link wget2Boolean Boolean +hi def link wget2Command Identifier +hi def link wget2Comment Comment +hi def link wget2Number Number +hi def link wget2Quota Number +hi def link wget2String String +hi def link wget2Time Number +hi def link wget2Todo Todo + +let b:current_syntax = "wget2" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 fdm=marker: diff --git a/.config/vim/syntax/whitespace.vim b/.config/vim/syntax/whitespace.vim new file mode 100644 index 0000000..4d2e32e --- /dev/null +++ b/.config/vim/syntax/whitespace.vim @@ -0,0 +1,13 @@ +" Simplistic way to make spaces and Tabs visible + +" This can be added to an already active syntax. + +syn match Space " " +syn match Tab "\t" +if &background == "dark" + hi def Space ctermbg=darkred guibg=#500000 + hi def Tab ctermbg=darkgreen guibg=#003000 +else + hi def Space ctermbg=lightred guibg=#ffd0d0 + hi def Tab ctermbg=lightgreen guibg=#d0ffd0 +endif diff --git a/.config/vim/syntax/winbatch.vim b/.config/vim/syntax/winbatch.vim new file mode 100644 index 0000000..15ea0fc --- /dev/null +++ b/.config/vim/syntax/winbatch.vim @@ -0,0 +1,174 @@ +" Vim syntax file +" Language: WinBatch/Webbatch (*.wbt, *.web) +" Maintainer: dominique@mggen.com +" URL: http://www.mggen.com/vim/syntax/winbatch.zip +" Last change: 2001 May 10 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +syn keyword winbatchCtl if then else endif break end return exit next +syn keyword winbatchCtl while for gosub goto switch select to case +syn keyword winbatchCtl endselect endwhile endselect endswitch + +" String +syn region winbatchVar start=+%+ end=+%+ +" %var% in strings +syn region winbatchString start=+"+ end=+"+ contains=winbatchVar + +syn match winbatchComment ";.*$" +syn match winbatchLabel "^\ *:[0-9a-zA-Z_\-]\+\>" + +" constant (bezgin by @) +syn match winbatchConstant "@[0_9a-zA-Z_\-]\+" + +" number +syn match winbatchNumber "\<[0-9]\+\(u\=l\=\|lu\|f\)\>" + +syn keyword winbatchImplicit aboveicons acc_attrib acc_chng_nt acc_control acc_create +syn keyword winbatchImplicit acc_delete acc_full_95 acc_full_nt acc_list acc_pfull_nt +syn keyword winbatchImplicit acc_pmang_nt acc_print_nt acc_read acc_read_95 acc_read_nt +syn keyword winbatchImplicit acc_write amc arrange ascending attr_a attr_a attr_ci attr_ci +syn keyword winbatchImplicit attr_dc attr_dc attr_di attr_di attr_dm attr_dm attr_h attr_h +syn keyword winbatchImplicit attr_ic attr_ic attr_p attr_p attr_ri attr_ri attr_ro attr_ro +syn keyword winbatchImplicit attr_sh attr_sh attr_sy attr_sy attr_t attr_t attr_x attr_x +syn keyword winbatchImplicit avogadro backscan boltzmann cancel capslock check columns +syn keyword winbatchImplicit commonformat cr crlf ctrl default default deg2rad descending +syn keyword winbatchImplicit disable drive electric enable eulers false faraday float8 +syn keyword winbatchImplicit fwdscan gftsec globalgroup gmtsec goldenratio gravitation hidden +syn keyword winbatchImplicit icon lbutton lclick ldblclick lf lightmps lightmtps localgroup +syn keyword winbatchImplicit magfield major mbokcancel mbutton mbyesno mclick mdblclick minor +syn keyword winbatchImplicit msformat multiple ncsaformat no none none noresize normal +syn keyword winbatchImplicit notify nowait numlock off on open parsec parseonly pi +syn keyword winbatchImplicit planckergs planckjoules printer rad2deg rbutton rclick rdblclick +syn keyword winbatchImplicit regclasses regcurrent regmachine regroot regusers rows save +syn keyword winbatchImplicit scrolllock server shift single sorted stack string tab tile +syn keyword winbatchImplicit true uncheck unsorted wait wholesection word1 word2 word4 yes +syn keyword winbatchImplicit zoomed about abs acos addextender appexist appwaitclose asin +syn keyword winbatchImplicit askfilename askfiletext askitemlist askline askpassword askyesno +syn keyword winbatchImplicit atan average beep binaryalloc binarycopy binaryeodget binaryeodset +syn keyword winbatchImplicit binaryfree binaryhashrec binaryincr binaryincr2 binaryincr4 +syn keyword winbatchImplicit binaryincrflt binaryindex binaryindexnc binaryoletype binarypeek +syn keyword winbatchImplicit binarypeek2 binarypeek4 binarypeekflt binarypeekstr binarypoke +syn keyword winbatchImplicit binarypoke2 binarypoke4 binarypokeflt binarypokestr binaryread +syn keyword winbatchImplicit binarysort binarystrcnt binarywrite boxbuttondraw boxbuttonkill +syn keyword winbatchImplicit boxbuttonstat boxbuttonwait boxcaption boxcolor +syn keyword winbatchImplicit boxdataclear boxdatatag +syn keyword winbatchImplicit boxdestroy boxdrawcircle boxdrawline boxdrawrect boxdrawtext +syn keyword winbatchImplicit boxesup boxmapmode boxnew boxopen boxpen boxshut boxtext boxtextcolor +syn keyword winbatchImplicit boxtextfont boxtitle boxupdates break buttonnames by call +syn keyword winbatchImplicit callext ceiling char2num clipappend clipget clipput +syn keyword winbatchImplicit continue cos cosh datetime +syn keyword winbatchImplicit ddeexecute ddeinitiate ddepoke dderequest ddeterminate +syn keyword winbatchImplicit ddetimeout debug debugdata decimals delay dialog +syn keyword winbatchImplicit dialogbox dirattrget dirattrset dirchange direxist +syn keyword winbatchImplicit dirget dirhome diritemize dirmake dirremove dirrename +syn keyword winbatchImplicit dirwindows diskexist diskfree diskinfo diskscan disksize +syn keyword winbatchImplicit diskvolinfo display dllcall dllfree dllhinst dllhwnd dllload +syn keyword winbatchImplicit dosboxcursorx dosboxcursory dosboxgetall dosboxgetdata +syn keyword winbatchImplicit dosboxheight dosboxscrmode dosboxversion dosboxwidth dosversion +syn keyword winbatchImplicit drop edosgetinfo edosgetvar edoslistvars edospathadd edospathchk +syn keyword winbatchImplicit edospathdel edossetvar +syn keyword winbatchImplicit endsession envgetinfo envgetvar environment +syn keyword winbatchImplicit environset envitemize envlistvars envpathadd envpathchk +syn keyword winbatchImplicit envpathdel envsetvar errormode exclusive execute exetypeinfo +syn keyword winbatchImplicit exp fabs fileappend fileattrget fileattrset fileclose +syn keyword winbatchImplicit filecompare filecopy filedelete fileexist fileextension filefullname +syn keyword winbatchImplicit fileitemize filelocate filemapname filemove filenameeval1 +syn keyword winbatchImplicit filenameeval2 filenamelong filenameshort fileopen filepath +syn keyword winbatchImplicit fileread filerename fileroot filesize filetimecode filetimeget +syn keyword winbatchImplicit filetimeset filetimetouch fileverinfo filewrite fileymdhms +syn keyword winbatchImplicit findwindow floor getexacttime gettickcount +syn keyword winbatchImplicit iconarrange iconreplace ignoreinput inidelete inideletepvt +syn keyword winbatchImplicit iniitemize iniitemizepvt iniread inireadpvt iniwrite iniwritepvt +syn keyword winbatchImplicit installfile int intcontrol isdefined isfloat isint iskeydown +syn keyword winbatchImplicit islicensed isnumber itemcount itemextract iteminsert itemlocate +syn keyword winbatchImplicit itemremove itemselect itemsort keytoggleget keytoggleset +syn keyword winbatchImplicit lasterror log10 logdisk loge max message min mod mouseclick +syn keyword winbatchImplicit mouseclickbtn mousedrag mouseinfo mousemove msgtextget n3attach +syn keyword winbatchImplicit n3captureend n3captureprt n3chgpassword n3detach n3dirattrget +syn keyword winbatchImplicit n3dirattrset n3drivepath n3drivepath2 n3drivestatus n3fileattrget +syn keyword winbatchImplicit n3fileattrset n3getloginid n3getmapped n3getnetaddr n3getuser +syn keyword winbatchImplicit n3getuserid n3logout n3map n3mapdelete n3mapdir n3maproot n3memberdel +syn keyword winbatchImplicit n3memberget n3memberset n3msgsend n3msgsendall n3serverinfo +syn keyword winbatchImplicit n3serverlist n3setsrchdrv n3usergroups n3version n4attach +syn keyword winbatchImplicit n4captureend n4captureprt n4chgpassword n4detach n4dirattrget +syn keyword winbatchImplicit n4dirattrset n4drivepath n4drivestatus n4fileattrget n4fileattrset +syn keyword winbatchImplicit n4getloginid n4getmapped n4getnetaddr n4getuser n4getuserid +syn keyword winbatchImplicit n4login n4logout n4map n4mapdelete n4mapdir n4maproot n4memberdel +syn keyword winbatchImplicit n4memberget n4memberset n4msgsend n4msgsendall n4serverinfo +syn keyword winbatchImplicit n4serverlist n4setsrchdrv n4usergroups n4version netadddrive +syn keyword winbatchImplicit netaddprinter netcancelcon netdirdialog netgetcon netgetuser +syn keyword winbatchImplicit netinfo netresources netversion num2char objectclose +syn keyword winbatchImplicit objectopen parsedata pause playmedia playmidi playwaveform +syn keyword winbatchImplicit print random regapp regclosekey regconnect regcreatekey +syn keyword winbatchImplicit regdeletekey regdelvalue regentrytype regloadhive regopenkey +syn keyword winbatchImplicit regquerybin regquerydword regqueryex regqueryexpsz regqueryitem +syn keyword winbatchImplicit regquerykey regquerymulsz regqueryvalue regsetbin +syn keyword winbatchImplicit regsetdword regsetex regsetexpsz regsetmulsz regsetvalue +syn keyword winbatchImplicit regunloadhive reload reload rtstatus run runenviron +syn keyword winbatchImplicit runexit runhide runhidewait runicon runiconwait runshell runwait +syn keyword winbatchImplicit runzoom runzoomwait sendkey sendkeyschild sendkeysto +syn keyword winbatchImplicit sendmenusto shellexecute shortcutedit shortcutextra shortcutinfo +syn keyword winbatchImplicit shortcutmake sin sinh snapshot sounds sqrt +syn keyword winbatchImplicit srchfree srchinit srchnext strcat strcharcount strcmp +syn keyword winbatchImplicit strfill strfix strfixchars stricmp strindex strlen +syn keyword winbatchImplicit strlower strreplace strscan strsub strtrim strupper +syn keyword winbatchImplicit tan tanh tcpaddr2host tcpftpchdir tcpftpclose tcpftpget +syn keyword winbatchImplicit tcpftplist tcpftpmode tcpftpopen tcpftpput tcphost2addr tcphttpget +syn keyword winbatchImplicit tcphttppost tcpparmget tcpparmset tcpping tcpsmtp terminate +syn keyword winbatchImplicit textbox textboxsort textoutbufdel textoutbuffer textoutdebug +syn keyword winbatchImplicit textoutfree textoutinfo textoutreset textouttrack textouttrackb +syn keyword winbatchImplicit textouttrackp textoutwait textselect timeadd timedate +syn keyword winbatchImplicit timedelay timediffdays timediffsecs timejulianday timejultoymd +syn keyword winbatchImplicit timesubtract timewait timeymdhms version versiondll +syn keyword winbatchImplicit w3addcon w3cancelcon w3dirbrowse w3getcaps w3getcon w3netdialog +syn keyword winbatchImplicit w3netgetuser w3prtbrowse w3version w95accessadd w95accessdel +syn keyword winbatchImplicit w95adddrive w95addprinter w95cancelcon w95dirdialog w95getcon +syn keyword winbatchImplicit w95getuser w95resources w95shareadd w95sharedel w95shareset +syn keyword winbatchImplicit w95version waitforkey wallpaper webbaseconv webcloselog +syn keyword winbatchImplicit webcmddata webcondata webcounter webdatdata webdumperror webhashcode +syn keyword winbatchImplicit webislocal weblogline webopenlog webout weboutfile webparamdata +syn keyword winbatchImplicit webparamnames websettimeout webverifycard winactivate +syn keyword winbatchImplicit winactivchild winarrange winclose winclosenot winconfig winexename +syn keyword winbatchImplicit winexist winparset winparget winexistchild wingetactive +syn keyword winbatchImplicit winhelp winhide winiconize winidget winisdos winitemchild +syn keyword winbatchImplicit winitemize winitemnameid winmetrics winname winparmget +syn keyword winbatchImplicit winparmset winplace winplaceget winplaceset +syn keyword winbatchImplicit winposition winresources winshow winstate winsysinfo +syn keyword winbatchImplicit wintitle winversion winwaitchild winwaitclose winwaitexist +syn keyword winbatchImplicit winzoom wnaddcon wncancelcon wncmptrinfo wndialog +syn keyword winbatchImplicit wndlgbrowse wndlgcon wndlgcon2 wndlgcon3 +syn keyword winbatchImplicit wndlgcon4 wndlgdiscon wndlgnoshare wndlgshare wngetcaps +syn keyword winbatchImplicit wngetcon wngetuser wnnetnames wnrestore wnservers wnsharecnt +syn keyword winbatchImplicit wnsharename wnsharepath wnshares wntaccessadd wntaccessdel +syn keyword winbatchImplicit wntaccessget wntadddrive wntaddprinter wntcancelcon wntdirdialog +syn keyword winbatchImplicit wntgetcon wntgetuser wntlistgroups wntmemberdel wntmemberget +syn keyword winbatchImplicit wntmembergrps wntmemberlist wntmemberset wntresources wntshareadd +syn keyword winbatchImplicit wntsharedel wntshareset wntversion wnversion wnwrkgroups wwenvunload +syn keyword winbatchImplicit xbaseconvert xcursorset xdisklabelget xdriveready xextenderinfo +syn keyword winbatchImplicit xgetchildhwnd xgetelapsed xhex xmemcompact xmessagebox +syn keyword winbatchImplicit xsendmessage xverifyccard yield + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link winbatchLabel PreProc +hi def link winbatchCtl Operator +hi def link winbatchStatement Statement +hi def link winbatchTodo Todo +hi def link winbatchString String +hi def link winbatchVar Type +hi def link winbatchComment Comment +hi def link winbatchImplicit Special +hi def link winbatchNumber Number +hi def link winbatchConstant StorageClass + + +let b:current_syntax = "winbatch" + +" vim: ts=8 diff --git a/.config/vim/syntax/wml.vim b/.config/vim/syntax/wml.vim new file mode 100644 index 0000000..73bf822 --- /dev/null +++ b/.config/vim/syntax/wml.vim @@ -0,0 +1,150 @@ +" Vim syntax file +" Language: WML - Website MetaLanguage +" Maintainer: Gerfried Fuchs +" Filenames: *.wml +" Last Change: 07 Feb 2002 +" URL: http://alfie.ist.org/software/vim/syntax/wml.vim +" +" Original Version: Craig Small + +" Comments are very welcome - but please make sure that you are commenting on +" the latest version of this file. +" SPAM is _NOT_ welcome - be ready to be reported! + +" If you are looking for the "Wireless Markup Language" syntax file, +" please take a look at the wap.vim file done by Ralf Schandl, soon in a +" vim-package around your corner :) + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + + +" A lot of the web stuff looks like HTML so we load that first +runtime! syntax/html.vim +unlet b:current_syntax + +if !exists("main_syntax") + let main_syntax = 'wml' +endif + +" special character +syn match wmlNextLine "\\$" + +" Redfine htmlTag +syn clear htmlTag +syn region htmlTag start=+<[^/<]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition + +" +" Add in extra Arguments used by wml +syn keyword htmlTagName contained gfont imgbg imgdot lowsrc +syn keyword htmlTagName contained navbar:define navbar:header +syn keyword htmlTagName contained navbar:footer navbar:prolog +syn keyword htmlTagName contained navbar:epilog navbar:button +syn keyword htmlTagName contained navbar:filter navbar:debug +syn keyword htmlTagName contained navbar:render +syn keyword htmlTagName contained preload rollover +syn keyword htmlTagName contained space hspace vspace over +syn keyword htmlTagName contained ps ds pi ein big sc spaced headline +syn keyword htmlTagName contained ue subheadline zwue verbcode +syn keyword htmlTagName contained isolatin pod sdf text url verbatim +syn keyword htmlTagName contained xtable +syn keyword htmlTagName contained csmap fsview import box +syn keyword htmlTagName contained case:upper case:lower +syn keyword htmlTagName contained grid cell info lang: logo page +syn keyword htmlTagName contained set-var restore +syn keyword htmlTagName contained array:push array:show set-var ifdef +syn keyword htmlTagName contained say m4 symbol dump enter divert +syn keyword htmlTagName contained toc +syn keyword htmlTagName contained wml card do refresh oneevent catch spawn + +" +" The wml arguments +syn keyword htmlArg contained adjust background base bdcolor bdspace +syn keyword htmlArg contained bdwidth complete copyright created crop +syn keyword htmlArg contained direction description domainname eperlfilter +syn keyword htmlArg contained file hint imgbase imgstar interchar interline +syn keyword htmlArg contained keephr keepindex keywords layout spacing +syn keyword htmlArg contained padding nonetscape noscale notag notypo +syn keyword htmlArg contained onload oversrc pos select slices style +syn keyword htmlArg contained subselected txtcol_select txtcol_normal +syn keyword htmlArg contained txtonly via +syn keyword htmlArg contained mode columns localsrc ordered + + +" Lines starting with an # are usually comments +syn match wmlComment "^\s*#.*" +" The different exceptions to comments +syn match wmlSharpBang "^#!.*" +syn match wmlUsed contained "\s\s*[A-Za-z:_-]*" +syn match wmlUse "^\s*#\s*use\s\+" contains=wmlUsed +syn match wmlInclude "^\s*#\s*include.+" + +syn region wmlBody contained start=+<<+ end=+>>+ + +syn match wmlLocationId contained "[A-Za-z]\+" +syn region wmlLocation start=+<<+ end=+>>+ contains=wmlLocationId +"syn region wmlLocation start=+{#+ end=+#}+ contains=wmlLocationId +"syn region wmlLocationed contained start=+<<+ end=+>>+ contains=wmlLocationId + +syn match wmlDivert "\.\.[a-zA-Z_]\+>>" +syn match wmlDivertEnd "<<\.\." +" new version +"syn match wmlDivert "{#[a-zA-Z_]\+#:" +"syn match wmlDivertEnd ":##}" + +syn match wmlDefineName contained "\s\+[A-Za-z-]\+" +syn region htmlTagName start="\<\(define-tag\|define-region\)" end="\>" contains=wmlDefineName + +" The perl include stuff +if main_syntax != 'perl' + " Perl script + syn include @wmlPerlScript syntax/perl.vim + unlet b:current_syntax + + syn region perlScript start=++ keepend end=++ contains=@wmlPerlScript,wmlPerlTag +" eperl between '<:' and ':>' -- Alfie [1999-12-26] + syn region perlScript start=+<:+ keepend end=+:>+ contains=@wmlPerlScript,wmlPerlTag + syn match wmlPerlTag contained "" contains=wmlPerlTagN + syn keyword wmlPerlTagN contained perl + + hi link wmlPerlTag htmlTag + hi link wmlPerlTagN htmlStatement +endif + +" verbatim tags -- don't highlight anything in between -- Alfie [2002-02-07] +syn region wmlVerbatimText start=++ keepend end=++ contains=wmlVerbatimTag +syn match wmlVerbatimTag contained "" contains=wmlVerbatimTagN +syn keyword wmlVerbatimTagN contained verbatim +hi link wmlVerbatimTag htmlTag +hi link wmlVerbatimTagN htmlStatement + +if main_syntax == "html" + syn sync match wmlHighlight groupthere NONE "" + syn sync match wmlHighlightSkip "^.*['\"].*$" + syn sync minlines=10 +endif + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link wmlNextLine Special +hi def link wmlUse Include +hi def link wmlUsed String +hi def link wmlBody Special +hi def link wmlDiverted Label +hi def link wmlDivert Delimiter +hi def link wmlDivertEnd Delimiter +hi def link wmlLocationId Label +hi def link wmlLocation Delimiter +" hi def link wmlLocationed Delimiter +hi def link wmlDefineName String +hi def link wmlComment Comment +hi def link wmlInclude Include +hi def link wmlSharpBang PreProc + + +let b:current_syntax = "wml" diff --git a/.config/vim/syntax/wsh.vim b/.config/vim/syntax/wsh.vim new file mode 100644 index 0000000..4b664a1 --- /dev/null +++ b/.config/vim/syntax/wsh.vim @@ -0,0 +1,45 @@ +" Vim syntax file +" Language: Windows Scripting Host +" Maintainer: Paul Moore +" Last Change: Fre, 24 Nov 2000 21:54:09 +0100 + +" This reuses the XML, VB and JavaScript syntax files. While VB is not +" VBScript, it's close enough for us. No attempt is made to handle +" other languages. +" Send comments, suggestions and requests to the maintainer. + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:wsh_cpo_save = &cpo +set cpo&vim + +runtime! syntax/xml.vim +unlet b:current_syntax + +syn case ignore +syn include @wshVBScript :p:h/vb.vim +unlet b:current_syntax +syn include @wshJavaScript :p:h/javascript.vim +unlet b:current_syntax +syn region wshVBScript + \ matchgroup=xmlTag start="]*VBScript\(>\|[^>]*[^/>]>\)" + \ matchgroup=xmlEndTag end="" + \ fold + \ contains=@wshVBScript + \ keepend +syn region wshJavaScript + \ matchgroup=xmlTag start="]*J\(ava\)\=Script\(>\|[^>]*[^/>]>\)" + \ matchgroup=xmlEndTag end="" + \ fold + \ contains=@wshJavaScript + \ keepend + +syn cluster xmlRegionHook add=wshVBScript,wshJavaScript + +let b:current_syntax = "wsh" + +let &cpo = s:wsh_cpo_save +unlet s:wsh_cpo_save diff --git a/.config/vim/syntax/wsml.vim b/.config/vim/syntax/wsml.vim new file mode 100644 index 0000000..d01294c --- /dev/null +++ b/.config/vim/syntax/wsml.vim @@ -0,0 +1,113 @@ +" Vim syntax file +" Language: WSML +" Maintainer: Thomas Haselwanter +" URL: none +" Last Change: 2006 Apr 30 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" WSML +syn keyword wsmlHeader wsmlVariant +syn keyword wsmlNamespace namespace +syn keyword wsmlTopLevel concept instance relationInstance ofType usesMediator usesService relation sharedVariables importsOntology +syn keyword wsmlOntology hasValue memberOf ofType impliesType subConceptOf +syn keyword wsmlAxiom axiom definedBy +syn keyword wsmlService assumption effect postcondition precondition capability interface +syn keyword wsmlTopLevel ooMediator wwMediator wgMediator ggMediator +syn keyword wsmlMediation usesService source target +syn match wsmlDataTypes "\( _string\| _decimal\| _integer\| _float\| _double\| _iri\| _sqname\| _boolean\| _duration\| _dateTime\| _time\| _date\| _gyearmonth\| _gyear\| _gmonthday\| _gday\| _gmonth\| _hexbinary\| _base64binary\)\((\S*)\)\?" contains=wsmlString,wsmlNumber,wsmlCharacter +syn keyword wsmlTopLevel goal webService ontology +syn keyword wsmlKeywordsInsideLEs true false memberOf hasValue subConceptOf ofType impliesType and or implies impliedBy equivalent neg naf forall exists +syn keyword wsmlNFP nfp endnfp nonFunctionalProperties endNonFunctionalProperties +syn region wsmlNFPregion start="nfp\|nonFunctionalProperties" end="endnfp\|endNonFunctionalProperties" contains=ALL +syn region wsmlNamespace start="namespace" end="}" contains=wsmlIdentifier +syn match wsmlOperator "!=\|:=:\|=<\|>=\|=\|+\|\*\|/\|<->\|->\|<-\|:-\|!-\|-\|<\|>" +syn match wsmlBrace "(\|)\|\[\|\]\|{\|}" +syn match wsmlIdentifier +_"\S*"+ +syn match wsmlIdentifier "_#\d*" +syn match wsmlSqName "[0-9A-Za-z]\+#[0-9A-Za-z]\+" +syn match wsmlVariable "?[0-9A-Za-z]\+" + +" ASM-specific code +syn keyword wsmlBehavioral choreography orchestration transitionRules +syn keyword wsmlChoreographyPri stateSignature in out shared static controlled +syn keyword wsmlChoreographySec with do withGrounding forall endForall choose if then endIf +syn match wsmlChoreographyTer "\(\s\|\_^\)\(add\|delete\|update\)\s*(.*)" contains=wsmlKeywordsInsideLEs,wsmlIdentifier,wsmlSqName,wsmlString,wsmlNumber,wsmlDataTypes,wsmlVariable + +" Comments +syn keyword wsmlTodo contained TODO +syn keyword wsmlFixMe contained FIXME +if exists("wsml_comment_strings") + syn region wsmlCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=wsmlSpecial,wsmlCommentStar,wsmlSpecialChar,@Spell + syn region wsmlComment2String contained start=+"+ end=+$\|"+ contains=wsmlSpecial,wsmlSpecialChar,@Spell + syn match wsmlCommentCharacter contained "'\\[^']\{1,6\}'" contains=wsmlSpecialChar + syn match wsmlCommentCharacter contained "'\\''" contains=wsmlSpecialChar + syn match wsmlCommentCharacter contained "'[^\\]'" + syn cluster wsmlCommentSpecial add=wsmlCommentString,wsmlCommentCharacter,wsmlNumber + syn cluster wsmlCommentSpecial2 add=wsmlComment2String,wsmlCommentCharacter,wsmlNumber +endif + +syn region wsmlComment start="/\*" end="\*/" contains=@wsmlCommentSpecial,wsmlTodo,wsmlFixMe,@Spell +syn match wsmlCommentStar contained "^\s*\*[^/]"me=e-1 +syn match wsmlCommentStar contained "^\s*\*$" +syn match wsmlLineComment "//.*" contains=@wsmlCommentSpecial2,wsmlTodo,@Spell + +syn cluster wsmlTop add=wsmlComment,wsmlLineComment + +"match the special comment /**/ +syn match wsmlComment "/\*\*/" + +" Strings +syn region wsmlString start=+"+ end=+"+ contains=wsmlSpecialChar,wsmlSpecialError,@Spell +syn match wsmlCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError +syn match wsmlCharacter "'\\''" contains=javaSpecialChar +syn match wsmlCharacter "'[^\\]'" +syn match wsmlNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" +syn match wsmlNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" +syn match wsmlNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" +syn match wsmlNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" + +" unicode characters +syn match wsmlSpecial "\\u\d\{4\}" + +syn cluster wsmlTop add=wsmlString,wsmlCharacter,wsmlNumber,wsmlSpecial,wsmlStringError + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link wsmlHeader TypeDef +hi def link wsmlNamespace TypeDef +hi def link wsmlOntology Statement +hi def link wsmlAxiom TypeDef +hi def link wsmlService TypeDef +hi def link wsmlNFP TypeDef +hi def link wsmlTopLevel TypeDef +hi def link wsmlMediation TypeDef +hi def link wsmlBehavioral TypeDef +hi def link wsmlChoreographyPri TypeDef +hi def link wsmlChoreographySec Operator +hi def link wsmlChoreographyTer Special +hi def link wsmlString String +hi def link wsmlIdentifier Normal +hi def link wsmlSqName Normal +hi def link wsmlVariable Define +hi def link wsmlKeywordsInsideLEs Operator +hi def link wsmlOperator Operator +hi def link wsmlBrace Operator +hi def link wsmlCharacter Character +hi def link wsmlNumber Number +hi def link wsmlDataTypes Special +hi def link wsmlComment Comment +hi def link wsmlDocComment Comment +hi def link wsmlLineComment Comment +hi def link wsmlTodo Todo +hi def link wsmlFixMe Error +hi def link wsmlCommentTitle SpecialComment +hi def link wsmlCommentStar wsmlComment + + +let b:current_syntax = "wsml" +let b:spell_options="contained" + diff --git a/.config/vim/syntax/wvdial.vim b/.config/vim/syntax/wvdial.vim new file mode 100644 index 0000000..035138b --- /dev/null +++ b/.config/vim/syntax/wvdial.vim @@ -0,0 +1,28 @@ +" Vim syntax file +" Language: Configuration file for WvDial +" Maintainer: Prahlad Vaidyanathan +" Last Update: Mon, 15 Oct 2001 09:39:03 Indian Standard Time + +" Quit if syntax file is already loaded +if exists("b:current_syntax") + finish +endif + +syn match wvdialComment "^;.*$"lc=1 +syn match wvdialComment "[^\\];.*$"lc=1 +syn match wvdialSection "^\s*\[.*\]" +syn match wvdialValue "=.*$"ms=s+1 +syn match wvdialValue "\s*[^ ;"' ]\+"lc=1 +syn match wvdialVar "^\s*\(Inherits\|Modem\|Baud\|Init.\|Phone\|Area\ Code\|Dial\ Prefix\|Dial\ Command\|Login\|Login\| Prompt\|Password\|Password\ Prompt\|PPPD\ Path\|Force\ Address\|Remote\ Name\|Carrier\ Check\|Stupid\ [Mm]ode\|New\ PPPD\|Default\ Reply\|Auto\ Reconnect\|SetVolume\|Username\)" +syn match wvdialEqual "=" + +" The default highlighting +hi def link wvdialComment Comment +hi def link wvdialSection PreProc +hi def link wvdialVar Identifier +hi def link wvdialValue String +hi def link wvdialEqual Statement + +let b:current_syntax = "wvdial" + +"EOF vim: tw=78:ft=vim:ts=8 diff --git a/.config/vim/syntax/xbl.vim b/.config/vim/syntax/xbl.vim new file mode 100644 index 0000000..97837e3 --- /dev/null +++ b/.config/vim/syntax/xbl.vim @@ -0,0 +1,29 @@ +" Vim syntax file +" Language: XBL 1.0 +" Maintainer: Doug Kearns +" Latest Revision: 2007 November 5 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +runtime! syntax/xml.vim +unlet b:current_syntax + +syn include @javascriptTop syntax/javascript.vim +unlet b:current_syntax + +syn region xblJavascript + \ matchgroup=xmlCdataStart start=++ + \ contains=@javascriptTop keepend extend + +let b:current_syntax = "xbl" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 diff --git a/.config/vim/syntax/xcompose.vim b/.config/vim/syntax/xcompose.vim new file mode 100644 index 0000000..3637b9f --- /dev/null +++ b/.config/vim/syntax/xcompose.vim @@ -0,0 +1,37 @@ +" Vim syntax file +" Language: XCompose +" Maintainer: ObserverOfTime +" Filenames: .XCompose, Compose +" Last Change: 2023 Nov 09 + +" Comments +syn keyword xcomposeTodo contained TODO FIXME XXX +syn match xcomposeComment /#.*/ contains=xcomposeTodo + +" Includes +syn keyword xcomposeInclude include nextgroup=xcomposeFile skipwhite +syn match xcomposeFile /"\([^"]\|\\"\)\+"/ contained +syn match xcomposeSubstitution /%[HLS]/ contained containedin=xcomposeFile + +" Modifiers +syn keyword xcomposeModifier Ctrl Lock Caps Shift Alt Meta None +syn match xcomposeModifierPrefix /\s*\zs[!~]\ze\s*/ + +" Keysyms +syn match xcomposeKeysym /<[A-Za-z0-9_]\+>/ +syn match xcomposeKeysym /[A-Za-z0-9_]\+/ contained +syn match xcomposeString /"\([^"]\|\\"\)\+"/ contained nextgroup=xcomposeKeysym skipwhite +syn match xcomposeColon /:/ nextgroup=xcomposeKeysym,xcomposeString skipwhite + +hi def link xcomposeColon Delimiter +hi def link xcomposeComment Comment +hi def link xcomposeFile String +hi def link xcomposeInclude Include +hi def link xcomposeKeysym Constant +hi def link xcomposeModifier Function +hi def link xcomposeModifierPrefix Operator +hi def link xcomposeString String +hi def link xcomposeSubstitution Special +hi def link xcomposeTodo Todo + +let b:current_syntax = 'xcompose' diff --git a/.config/vim/syntax/xdefaults.vim b/.config/vim/syntax/xdefaults.vim new file mode 100644 index 0000000..7da5969 --- /dev/null +++ b/.config/vim/syntax/xdefaults.vim @@ -0,0 +1,132 @@ +" Vim syntax file +" Language: X resources files like ~/.Xdefaults (xrdb) +" Maintainer: Johannes Zellner +" Author and previous maintainer: +" Gautam H. Mudunuri +" Last Change: Di, 09 Mai 2006 23:10:23 CEST +" $Id: xdefaults.vim,v 1.2 2007/05/05 17:19:40 vimboss Exp $ +" +" REFERENCES: +" xrdb manual page +" xrdb source: ftp://ftp.x.org/pub/R6.4/xc/programs/xrdb/xrdb.c + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" turn case on +syn case match + + +if !exists("xdefaults_no_colon_errors") + " mark lines which do not contain a colon as errors. + " This does not really catch all errors but only lines + " which contain at least two WORDS and no colon. This + " was done this way so that a line is not marked as + " error while typing (which would be annoying). + syntax match xdefaultsErrorLine "^\s*[a-zA-Z.*]\+\s\+[^: ]\+" +endif + + +" syn region xdefaultsLabel start=+^[^:]\{-}:+he=e-1 skip=+\\+ end="$" +syn match xdefaultsLabel +^[^:]\{-}:+he=e-1 contains=xdefaultsPunct,xdefaultsSpecial,xdefaultsLineEnd +syn region xdefaultsValue keepend start=+:+lc=1 skip=+\\+ end=+$+ contains=xdefaultsSpecial,xdefaultsLabel,xdefaultsLineEnd + +syn match xdefaultsSpecial contained +#override+ +syn match xdefaultsSpecial contained +#augment+ +syn match xdefaultsPunct contained +[.*:]+ +syn match xdefaultsLineEnd contained +\\$+ +syn match xdefaultsLineEnd contained +\\n\\$+ +syn match xdefaultsLineEnd contained +\\n$+ + + + +" COMMENTS + +" note, that the '!' must be at the very first position of the line +syn match xdefaultsComment "^!.*$" contains=xdefaultsTodo,@Spell + +" lines starting with a '#' mark and which are not preprocessor +" lines are skipped. This is not part of the xrdb documentation. +" It was reported by Bram Moolenaar and could be confirmed by +" having a look at xrdb.c:GetEntries() +syn match xdefaultsCommentH "^#.*$" +"syn region xdefaultsComment start="^#" end="$" keepend contains=ALL +syn region xdefaultsComment start="/\*" end="\*/" contains=xdefaultsTodo,@Spell + +syntax match xdefaultsCommentError "\*/" + +syn keyword xdefaultsTodo contained TODO FIXME XXX display + + + +" PREPROCESSOR STUFF + +syn region xdefaultsPreProc start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\|else\|endif\)\>" skip="\\$" end="$" contains=xdefaultsSymbol +if !exists("xdefaults_no_if0") + syn region xdefaultsCppOut start="^\s*#\s*if\s\+0\>" end=".\|$" contains=xdefaultsCppOut2 + syn region xdefaultsCppOut2 contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=xdefaultsCppSkip + syn region xdefaultsCppSkip contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=xdefaultsCppSkip +endif +syn region xdefaultsIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match xdefaultsIncluded contained "<[^>]*>" +syn match xdefaultsInclude "^\s*#\s*include\>\s*["<]" contains=xdefaultsIncluded +syn cluster xdefaultsPreProcGroup contains=xdefaultsPreProc,xdefaultsIncluded,xdefaultsInclude,xdefaultsDefine,xdefaultsCppOut,xdefaultsCppOut2,xdefaultsCppSkip +syn region xdefaultsDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" contains=ALLBUT,@xdefaultsPreProcGroup,xdefaultsCommentH,xdefaultsErrorLine,xdefaultsLabel,xdefaultsValue +syn region xdefaultsPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@xdefaultsPreProcGroup,xdefaultsCommentH,xdefaultsErrorLine,xdefaultsLabel,xdefaultsValue + + + +" symbols as defined by xrdb +syn keyword xdefaultsSymbol contained SERVERHOST +syn match xdefaultsSymbol contained "SRVR_[a-zA-Z0-9_]\+" +syn keyword xdefaultsSymbol contained HOST +syn keyword xdefaultsSymbol contained DISPLAY_NUM +syn keyword xdefaultsSymbol contained CLIENTHOST +syn match xdefaultsSymbol contained "CLNT_[a-zA-Z0-9_]\+" +syn keyword xdefaultsSymbol contained RELEASE +syn keyword xdefaultsSymbol contained REVISION +syn keyword xdefaultsSymbol contained VERSION +syn keyword xdefaultsSymbol contained VENDOR +syn match xdefaultsSymbol contained "VNDR_[a-zA-Z0-9_]\+" +syn match xdefaultsSymbol contained "EXT_[a-zA-Z0-9_]\+" +syn keyword xdefaultsSymbol contained NUM_SCREENS +syn keyword xdefaultsSymbol contained SCREEN_NUM +syn keyword xdefaultsSymbol contained BITS_PER_RGB +syn keyword xdefaultsSymbol contained CLASS +syn keyword xdefaultsSymbol contained StaticGray GrayScale StaticColor PseudoColor TrueColor DirectColor +syn match xdefaultsSymbol contained "CLASS_\(StaticGray\|GrayScale\|StaticColor\|PseudoColor\|TrueColor\|DirectColor\)" +syn keyword xdefaultsSymbol contained COLOR +syn match xdefaultsSymbol contained "CLASS_\(StaticGray\|GrayScale\|StaticColor\|PseudoColor\|TrueColor\|DirectColor\)_[0-9]\+" +syn keyword xdefaultsSymbol contained HEIGHT +syn keyword xdefaultsSymbol contained WIDTH +syn keyword xdefaultsSymbol contained PLANES +syn keyword xdefaultsSymbol contained X_RESOLUTION +syn keyword xdefaultsSymbol contained Y_RESOLUTION + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link xdefaultsLabel Type +hi def link xdefaultsValue Constant +hi def link xdefaultsComment Comment +hi def link xdefaultsCommentH xdefaultsComment +hi def link xdefaultsPreProc PreProc +hi def link xdefaultsInclude xdefaultsPreProc +hi def link xdefaultsCppSkip xdefaultsCppOut +hi def link xdefaultsCppOut2 xdefaultsCppOut +hi def link xdefaultsCppOut Comment +hi def link xdefaultsIncluded String +hi def link xdefaultsDefine Macro +hi def link xdefaultsSymbol Statement +hi def link xdefaultsSpecial Statement +hi def link xdefaultsErrorLine Error +hi def link xdefaultsCommentError Error +hi def link xdefaultsPunct Normal +hi def link xdefaultsLineEnd Special +hi def link xdefaultsTodo Todo + + +let b:current_syntax = "xdefaults" + +" vim:ts=8 diff --git a/.config/vim/syntax/xf86conf.vim b/.config/vim/syntax/xf86conf.vim new file mode 100644 index 0000000..0f4e503 --- /dev/null +++ b/.config/vim/syntax/xf86conf.vim @@ -0,0 +1,207 @@ +" Vim syntax file +" Language: XF86Config (XFree86 configuration file) +" Maintainer: This runtime file is looking for a new maintainer. +" Last Change: 2025 Jan 06 by Jan-Arvid Harrach (#16397) +" Former Maintainer: David Ne\v{c}as (Yeti) +" Last Change By David: 2010 Nov 01 +" +" Options: let xf86conf_xfree86_version = 3 or 4 +" to force XFree86 3.x or 4.x XF86Config syntax + +" Setup +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +if !exists("b:xf86conf_xfree86_version") + if exists("xf86conf_xfree86_version") + let b:xf86conf_xfree86_version = xf86conf_xfree86_version + else + let b:xf86conf_xfree86_version = 4 + endif +endif + +syn case ignore + +" Comments +syn match xf86confComment "#.*$" contains=xf86confTodo +syn case match +syn keyword xf86confTodo FIXME TODO XXX NOT contained +syn case ignore +syn match xf86confTodo "???" contained + +" Sectioning errors +syn keyword xf86confSectionError Section contained +syn keyword xf86confSectionError EndSection +syn keyword xf86confSubSectionError SubSection +syn keyword xf86confSubSectionError EndSubSection +syn keyword xf86confModeSubSectionError Mode +syn keyword xf86confModeSubSectionError EndMode +syn cluster xf86confSectionErrors contains=xf86confSectionError,xf86confSubSectionError,xf86confModeSubSectionError + +" Values +if b:xf86conf_xfree86_version >= 4 + syn region xf86confString start=+"+ skip=+\\\\\|\\"+ end=+"+ contained contains=xf86confSpecialChar,xf86confConstant,xf86confOptionName oneline keepend nextgroup=xf86confValue skipwhite +else + syn region xf86confString start=+"+ skip=+\\\\\|\\"+ end=+"+ contained contains=xf86confSpecialChar,xf86confOptionName oneline keepend +endif +syn match xf86confSpecialChar "\\\d\d\d\|\\." contained +syn match xf86confDecimalNumber "\(\s\|-\)\zs\d*\.\=\d\+\>" +syn match xf86confFrequency "\(\s\|-\)\zs\d\+\.\=\d*\(Hz\|k\|kHz\|M\|MHz\)" +syn match xf86confOctalNumber "\<0\o\+\>" +syn match xf86confOctalNumberError "\<0\o\+[89]\d*\>" +syn match xf86confHexadecimalNumber "\<0x\x\+\>" +syn match xf86confValue "\s\+.*$" contained contains=xf86confComment,xf86confString,xf86confFrequency,xf86conf\w\+Number,xf86confConstant +syn keyword xf86confOption Option nextgroup=xf86confString skipwhite +syn match xf86confModeLineValue "\"[^\"]\+\"\(\_s\+[0-9.]\+\)\{9}" nextgroup=xf86confSync skipwhite skipnl + +" Sections and subsections +if b:xf86conf_xfree86_version >= 4 + syn region xf86confSection matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\|InputClass\|OutputClass\)\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOption,xf86confKeyword,xf86confSectionError + syn region xf86confSectionModule matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Module\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionAny,xf86confComment,xf86confOption,xf86confKeyword + syn region xf86confSectionMonitor matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Monitor\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionMode,xf86confModeLine,xf86confComment,xf86confOption,xf86confKeyword + syn region xf86confSectionModes matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Modes\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionMode,xf86confModeLine,xf86confComment + syn region xf86confSectionScreen matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Screen\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionDisplay,xf86confComment,xf86confOption,xf86confKeyword + syn region xf86confSubSectionAny matchgroup=xf86confSectionDelim start="^\s*SubSection\s\+\"[^\"]\+\"" end="^\s*EndSubSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOption,xf86confKeyword,@xf86confSectionErrors + syn region xf86confSubSectionMode matchgroup=xf86confSectionDelim start="^\s*Mode\s\+\"[^\"]\+\"" end="^\s*EndMode\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confKeyword,@xf86confSectionErrors + syn region xf86confSubSectionDisplay matchgroup=xf86confSectionDelim start="^\s*SubSection\s\+\"Display\"" end="^\s*EndSubSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOption,xf86confKeyword,@xf86confSectionErrors +else + syn region xf86confSection matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Device\|Keyboard\|Pointer\)\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOptionName,xf86confOption,xf86confKeyword + syn region xf86confSectionMX matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"\(Module\|Xinput\)\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionAny,xf86confComment,xf86confOptionName,xf86confOption,xf86confKeyword + syn region xf86confSectionMonitor matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Monitor\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionMode,xf86confModeLine,xf86confComment,xf86confOptionName,xf86confOption,xf86confKeyword + syn region xf86confSectionScreen matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Screen\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionDisplay,xf86confComment,xf86confOptionName,xf86confOption,xf86confKeyword + syn region xf86confSubSectionAny matchgroup=xf86confSectionDelim start="^\s*SubSection\s\+\"[^\"]\+\"" end="^\s*EndSubSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOptionName,xf86confOption,xf86confKeyword,@xf86confSectionErrors + syn region xf86confSubSectionMode matchgroup=xf86confSectionDelim start="^\s*Mode\s\+\"[^\"]\+\"" end="^\s*EndMode\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOptionName,xf86confOption,xf86confKeyword,@xf86confSectionErrors + syn region xf86confSubSectionDisplay matchgroup=xf86confSectionDelim start="^\s*SubSection\s\+\"Display\"" end="^\s*EndSubSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOptionName,xf86confOption,xf86confKeyword,@xf86confSectionErrors +endif + +" Options +if b:xf86conf_xfree86_version >= 4 + command -nargs=+ Xf86confdeclopt syn keyword xf86confOptionName contained +else + command -nargs=+ Xf86confdeclopt syn keyword xf86confOptionName contained nextgroup=xf86confValue,xf86confComment skipwhite +endif + +Xf86confdeclopt 18bitBus AGPFastWrite AGPMode Accel AllowClosedownGrabs AllowDeactivateGrabs +Xf86confdeclopt AllowMouseOpenFail AllowNonLocalModInDev AllowNonLocalXvidtune AlwaysCore +Xf86confdeclopt AngleOffset AutoRepeat BaudRate BeamTimeout Beep BlankTime BlockWrite BottomX +Xf86confdeclopt BottomY ButtonNumber ButtonThreshold Buttons ByteSwap CacheLines ChordMiddle +Xf86confdeclopt ClearDTR ClearDTS ClickMode CloneDisplay CloneHSync CloneMode CloneVRefresh +Xf86confdeclopt ColorKey Composite CompositeSync CoreKeyboard CorePointer Crt2Memory CrtScreen +Xf86confdeclopt CrtcNumber CyberShadow CyberStretch DDC DDCMode DMAForXv DPMS Dac6Bit DacSpeed +Xf86confdeclopt DataBits Debug DebugLevel DefaultServerLayout DeltaX DeltaY Device DeviceName +Xf86confdeclopt DisableModInDev DisableVidModeExtension Display Display1400 DontVTSwitch +Xf86confdeclopt DontZap DontZoom DoubleScan DozeMode DozeScan DozeTime DragLockButtons +Xf86confdeclopt DualCount DualRefresh EarlyRasPrecharge Emulate3Buttons Emulate3Timeout +Xf86confdeclopt EmulateWheel EmulateWheelButton EmulateWheelInertia EnablePageFlip EnterCount +Xf86confdeclopt EstimateSizesAggressively ExternDisp FPClock16 FPClock24 FPClock32 +Xf86confdeclopt FPClock8 FPDither FastDram FifoAggresive FifoConservative FifoModerate +Xf86confdeclopt FireGL3000 FixPanelSize FlatPanel FlipXY FlowControl ForceCRT1 ForceCRT2Type +Xf86confdeclopt ForceLegacyCRT ForcePCIMode FpmVRAM FrameBufferWC FullMMIO GammaBrightness +Xf86confdeclopt HWClocks HWCursor HandleSpecialKeys HistorySize Interlace Interlaced InternDisp +Xf86confdeclopt InvX InvY InvertX InvertY KeepShape LCDClock LateRasPrecharge LcdCenter +Xf86confdeclopt LeftAlt Linear MGASDRAM MMIO MMIOCache MTTR MaxX MaxY MaximumXPosition +Xf86confdeclopt MaximumYPosition MinX MinY MinimumXPosition MinimumYPosition NoAccel +Xf86confdeclopt NoAllowMouseOpenFail NoAllowNonLocalModInDev NoAllowNonLocalXvidtune +Xf86confdeclopt NoBlockWrite NoCompositeSync NoCompression NoCrtScreen NoCyberShadow NoDCC +Xf86confdeclopt NoDDC NoDac6Bit NoDebug NoDisableModInDev NoDisableVidModeExtension NoDontZap +Xf86confdeclopt NoDontZoom NoFireGL3000 NoFixPanelSize NoFpmVRAM NoFrameBufferWC NoHWClocks +Xf86confdeclopt NoHWCursor NoHal NoLcdCenter NoLinear NoMGASDRAM NoMMIO NoMMIOCache NoMTTR +Xf86confdeclopt NoOverClockMem NoOverlay NoPC98 NoPM NoPciBurst NoPciRetry NoProbeClock +Xf86confdeclopt NoSTN NoSWCursor NoShadowFb NoShowCache NoSlowEDODRAM NoStretch NoSuspendHack +Xf86confdeclopt NoTexturedVideo NoTrapSignals NoUseFBDev NoUseModeline NoUseVclk1 NoVTSysReq +Xf86confdeclopt NoXVideo NvAGP OSMImageBuffers OffTime Origin OverClockMem Overlay +Xf86confdeclopt PC98 PCIBurst PM PWMActive PWMSleep PanelDelayCompensation PanelHeight +Xf86confdeclopt PanelOff PanelWidth Parity PciBurst PciRetry Pixmap Port PressDur PressPitch +Xf86confdeclopt PressVol ProbeClocks ProgramFPRegs Protocol RGBBits ReleaseDur ReleasePitch +Xf86confdeclopt ReportingMode Resolution RightAlt RightCtl Rotate STN SWCursor SampleRate +Xf86confdeclopt ScreenNumber ScrollLock SendCoreEvents SendDragEvents Serial ServerNumLock +Xf86confdeclopt SetLcdClk SetMClk SetRefClk ShadowFb ShadowStatus ShowCache SleepMode +Xf86confdeclopt SleepScan SleepTime SlowDram SlowEDODRAM StandbyTime StopBits Stretch +Xf86confdeclopt SuspendHack SuspendTime SwapXY SyncOnGreen TV TVOutput TVOverscan TVStandard +Xf86confdeclopt TVXPosOffset TVYPosOffset TexturedVideo Threshold Tilt TopX TopY TouchTime +Xf86confdeclopt TrapSignals Type USB UseBIOS UseFB UseFBDev UseFlatPanel UseModeline +Xf86confdeclopt UseROMData UseVclk1 VTInit VTSysReq VTime VideoKey Vmin XAxisMapping +Xf86confdeclopt XLeds XVideo XaaNoCPUToScreenColorExpandFill XaaNoColor8x8PatternFillRect +Xf86confdeclopt XaaNoColor8x8PatternFillTrap XaaNoDashedBresenhamLine XaaNoDashedTwoPointLine +Xf86confdeclopt XaaNoImageWriteRect XaaNoMono8x8PatternFillRect XaaNoMono8x8PatternFillTrap +Xf86confdeclopt XaaNoOffscreenPixmaps XaaNoPixmapCache XaaNoScanlineCPUToScreenColorExpandFill +Xf86confdeclopt XaaNoScanlineImageWriteRect XaaNoScreenToScreenColorExpandFill +Xf86confdeclopt XaaNoScreenToScreenCopy XaaNoSolidBresenhamLine XaaNoSolidFillRect +Xf86confdeclopt XaaNoSolidFillTrap XaaNoSolidHorVertLine XaaNoSolidTwoPointLine Xinerama +Xf86confdeclopt XkbCompat XkbDisable XkbGeometry XkbKeycodes XkbKeymap XkbLayout XkbModel +Xf86confdeclopt XkbOptions XkbRules XkbSymbols XkbTypes XkbVariant XvBskew XvHsync XvOnCRT2 +Xf86confdeclopt XvRskew XvVsync YAxisMapping ZAxisMapping ZoomOnLCD + +delcommand Xf86confdeclopt + +" Keywords +syn keyword xf86confKeyword Device Driver FontPath Group Identifier Load ModelName ModulePath Monitor RGBPath VendorName VideoAdaptor Visual nextgroup=xf86confComment,xf86confString skipwhite +syn keyword xf86confKeyword BiosBase Black BoardName BusID ChipID ChipRev Chipset nextgroup=xf86confComment,xf86confValue +syn keyword xf86confKeyword ClockChip Clocks DacSpeed DefaultDepth DefaultFbBpp nextgroup=xf86confComment,xf86confValue +syn keyword xf86confKeyword DefaultColorDepth nextgroup=xf86confComment,xf86confValue +syn keyword xf86confKeyword Depth DisplaySize DotClock FbBpp Flags Gamma HorizSync nextgroup=xf86confComment,xf86confValue +syn keyword xf86confKeyword Hskew HTimings InputDevice IOBase MemBase Mode nextgroup=xf86confComment,xf86confValue +syn keyword xf86confKeyword Modes Ramdac Screen TextClockFreq UseModes VendorName nextgroup=xf86confComment,xf86confValue +syn keyword xf86confKeyword VertRefresh VideoRam ViewPort Virtual VScan VTimings nextgroup=xf86confComment,xf86confValue +syn keyword xf86confKeyword Weight White nextgroup=xf86confComment,xf86confValue +syn keyword xf86confMatch MatchDevicePath MatchDriver MatchLayout MatchOS MatchPnPID MatchProduct MatchTag MatchUSBID MatchVendor nextgroup=xf86confComment,xf86confString skipwhite +syn keyword xf86confMatch MatchIsPointer MatchIsKeyboard MatchIsTouchpad MatchIsTouchscreen MatchIsJoystick nextgroup=xf86confComment,xf86confValue skipwhite +syn keyword xf86confModeLine ModeLine nextgroup=xf86confComment,xf86confModeLineValue skipwhite skipnl + +" Constants +if b:xf86conf_xfree86_version >= 4 + syn keyword xf86confConstant true false on off yes no omit contained +else + syn keyword xf86confConstant Meta Compose Control +endif +syn keyword xf86confConstant StaticGray GrayScale StaticColor PseudoColor TrueColor DirectColor contained +syn keyword xf86confConstant Absolute RightOf LeftOf Above Below Relative StaticGray GrayScale StaticColor PseudoColor TrueColor DirectColor contained +syn match xf86confSync "\(\s\+[+-][CHV]_*Sync\)\+" contained + +" Synchronization +if b:xf86conf_xfree86_version >= 4 + syn sync match xf86confSyncSection grouphere xf86confSection "^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\|InputClass\|OutputClass\)\"" + syn sync match xf86confSyncSectionModule grouphere xf86confSectionModule "^\s*Section\s\+\"Module\"" + syn sync match xf86confSyncSectionModes groupthere xf86confSectionModes "^\s*Section\s\+\"Modes\"" +else + syn sync match xf86confSyncSection grouphere xf86confSection "^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Device\|Keyboard\|Pointer\)\"" + syn sync match xf86confSyncSectionMX grouphere xf86confSectionMX "^\s*Section\s\+\"\(Module\|Xinput\)\"" +endif +syn sync match xf86confSyncSectionMonitor groupthere xf86confSectionMonitor "^\s*Section\s\+\"Monitor\"" +syn sync match xf86confSyncSectionScreen groupthere xf86confSectionScreen "^\s*Section\s\+\"Screen\"" +syn sync match xf86confSyncEndSection groupthere NONE "^\s*End_*Section\s*$" + +" Define the default highlighting +hi def link xf86confComment Comment +hi def link xf86confTodo Todo +hi def link xf86confSectionDelim Statement +hi def link xf86confOptionName Identifier + +hi def link xf86confSectionError xf86confError +hi def link xf86confSubSectionError xf86confError +hi def link xf86confModeSubSectionError xf86confError +hi def link xf86confOctalNumberError xf86confError +hi def link xf86confError Error + +hi def link xf86confOption xf86confKeyword +hi def link xf86confMatch xf86confKeyword +hi def link xf86confModeLine xf86confKeyword +hi def link xf86confKeyword Type + +hi def link xf86confDecimalNumber xf86confNumber +hi def link xf86confOctalNumber xf86confNumber +hi def link xf86confHexadecimalNumber xf86confNumber +hi def link xf86confFrequency xf86confNumber +hi def link xf86confModeLineValue Constant +hi def link xf86confNumber Constant + +hi def link xf86confSync xf86confConstant +hi def link xf86confConstant Special +hi def link xf86confSpecialChar Special +hi def link xf86confString String + +hi def link xf86confValue Constant + +let b:current_syntax = "xf86conf" diff --git a/.config/vim/syntax/xhtml.vim b/.config/vim/syntax/xhtml.vim new file mode 100644 index 0000000..0c6ea73 --- /dev/null +++ b/.config/vim/syntax/xhtml.vim @@ -0,0 +1,11 @@ +" Vim syntax file +" Language: XHTML +" Maintainer: noone +" Last Change: 2003 Feb 04 + +" Load the HTML syntax for now. +runtime! syntax/html.vim + +let b:current_syntax = "xhtml" + +" vim: ts=8 diff --git a/.config/vim/syntax/xinetd.vim b/.config/vim/syntax/xinetd.vim new file mode 100644 index 0000000..fab3a91 --- /dev/null +++ b/.config/vim/syntax/xinetd.vim @@ -0,0 +1,347 @@ +" Vim syntax file +" Language: xinetd.conf(5) configuration file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword xinetdTodo contained TODO FIXME XXX NOTE + +syn region xinetdComment display oneline start='^\s*#' end='$' + \ contains=xinetdTodo,@Spell + +syn match xinetdService '^\s*service\>' + \ nextgroup=xinetdServiceName skipwhite + +syn match xinetdServiceName contained '\S\+' + \ nextgroup=xinetdServiceGroup skipwhite skipnl + +syn match xinetdDefaults '^\s*defaults' + \ nextgroup=xinetdServiceGroup skipwhite skipnl + +syn region xinetdServiceGroup contained transparent + \ matchgroup=xinetdServiceGroupD start='{' + \ matchgroup=xinetdServiceGroupD end='}' + \ contains=xinetdAttribute,xinetdReqAttribute, + \ xinetdDisable + +syn keyword xinetdReqAttribute contained user server protocol + \ nextgroup=xinetdStringEq skipwhite + +syn keyword xinetdAttribute contained id group bind + \ interface + \ nextgroup=xinetdStringEq skipwhite + +syn match xinetdStringEq contained display '=' + \ nextgroup=xinetdString skipwhite + +syn match xinetdString contained display '\S\+' + +syn keyword xinetdAttribute contained type nextgroup=xinetdTypeEq skipwhite + +syn match xinetdTypeEq contained display '=' + \ nextgroup=xinetdType skipwhite + +syn keyword xinetdType contained RPC INTERNAL TCPMUX TCPMUXPLUS + \ UNLISTED + \ nextgroup=xinetdType skipwhite + +syn keyword xinetdAttribute contained flags + \ nextgroup=xinetdFlagsEq skipwhite + +syn cluster xinetdFlagsC contains=xinetdFlags,xinetdDeprFlags + +syn match xinetdFlagsEq contained display '=' + \ nextgroup=@xinetdFlagsC skipwhite + +syn keyword xinetdFlags contained INTERCEPT NORETRY IDONLY NAMEINARGS + \ NODELAY KEEPALIVE NOLIBWRAP SENSOR IPv4 IPv6 + \ nextgroup=@xinetdFlagsC skipwhite + +syn keyword xinetdDeprFlags contained REUSE nextgroup=xinetdFlagsC skipwhite + +syn keyword xinetdDisable contained disable + \ nextgroup=xinetdBooleanEq skipwhite + +syn match xinetdBooleanEq contained display '=' + \ nextgroup=xinetdBoolean skipwhite + +syn keyword xinetdBoolean contained yes no + +syn keyword xinetdReqAttribute contained socket_type + \ nextgroup=xinetdSocketTypeEq skipwhite + +syn match xinetdSocketTypeEq contained display '=' + \ nextgroup=xinetdSocketType skipwhite + +syn keyword xinetdSocketType contained stream dgram raw seqpacket + +syn keyword xinetdReqAttribute contained wait + \ nextgroup=xinetdBooleanEq skipwhite + +syn keyword xinetdAttribute contained groups mdns + \ nextgroup=xinetdBooleanEq skipwhite + +syn keyword xinetdAttribute contained instances per_source rlimit_cpu + \ rlimit_data rlimit_rss rlimit_stack + \ nextgroup=xinetdUNumberEq skipwhite + +syn match xinetdUNumberEq contained display '=' + \ nextgroup=xinetdUnlimited,xinetdNumber + \ skipwhite + +syn keyword xinetdUnlimited contained UNLIMITED + +syn match xinetdNumber contained display '\<\d\+\>' + +syn keyword xinetdAttribute contained nice + \ nextgroup=xinetdSignedNumEq skipwhite + +syn match xinetdSignedNumEq contained display '=' + \ nextgroup=xinetdSignedNumber skipwhite + +syn match xinetdSignedNumber contained display '[+-]\=\d\+\>' + +syn keyword xinetdAttribute contained server_args + \ enabled + \ nextgroup=xinetdStringsEq skipwhite + +syn match xinetdStringsEq contained display '=' + \ nextgroup=xinetdStrings skipwhite + +syn match xinetdStrings contained display '\S\+' + \ nextgroup=xinetdStrings skipwhite + +syn keyword xinetdAttribute contained only_from no_access passenv + \ nextgroup=xinetdStringsAdvEq skipwhite + +syn match xinetdStringsAdvEq contained display '[+-]\==' + \ nextgroup=xinetdStrings skipwhite + +syn keyword xinetdAttribute contained access_times + \ nextgroup=xinetdTimeRangesEq skipwhite + +syn match xinetdTimeRangesEq contained display '=' + \ nextgroup=xinetdTimeRanges skipwhite + +syn match xinetdTimeRanges contained display + \ '\%(0?\d\|1\d\|2[0-3]\):\%(0?\d\|[1-5]\d\)-\%(0?\d\|1\d\|2[0-3]\):\%(0?\d\|[1-5]\d\)' + \ nextgroup=xinetdTimeRanges skipwhite + +syn keyword xinetdAttribute contained log_type nextgroup=xinetdLogTypeEq + \ skipwhite + +syn match xinetdLogTypeEq contained display '=' + \ nextgroup=xinetdLogType skipwhite + +syn keyword xinetdLogType contained SYSLOG nextgroup=xinetdSyslogType + \ skipwhite + +syn keyword xinetdLogType contained FILE nextgroup=xinetdLogFile skipwhite + +syn keyword xinetdSyslogType contained daemon auth authpriv user mail lpr + \ news uucp ftp local0 local1 local2 local3 + \ local4 local5 local6 local7 + \ nextgroup=xinetdSyslogLevel skipwhite + +syn keyword xinetdSyslogLevel contained emerg alert crit err warning notice + \ info debug + +syn match xinetdLogFile contained display '\S\+' + \ nextgroup=xinetdLogSoftLimit skipwhite + +syn match xinetdLogSoftLimit contained display '\<\d\+\>' + \ nextgroup=xinetdLogHardLimit skipwhite + +syn match xinetdLogHardLimit contained display '\<\d\+\>' + +syn keyword xinetdAttribute contained log_on_success + \ nextgroup=xinetdLogSuccessEq skipwhite + +syn match xinetdLogSuccessEq contained display '[+-]\==' + \ nextgroup=xinetdLogSuccess skipwhite + +syn keyword xinetdLogSuccess contained PID HOST USERID EXIT DURATION TRAFFIC + \ nextgroup=xinetdLogSuccess skipwhite + +syn keyword xinetdAttribute contained log_on_failure + \ nextgroup=xinetdLogFailureEq skipwhite + +syn match xinetdLogFailureEq contained display '[+-]\==' + \ nextgroup=xinetdLogFailure skipwhite + +syn keyword xinetdLogFailure contained HOST USERID ATTEMPT + \ nextgroup=xinetdLogFailure skipwhite + +syn keyword xinetdReqAttribute contained rpc_version + \ nextgroup=xinetdRPCVersionEq skipwhite + +syn match xinetdRPCVersionEq contained display '=' + \ nextgroup=xinetdRPCVersion skipwhite + +syn match xinetdRPCVersion contained display '\d\+\%(-\d\+\)\=\>' + +syn keyword xinetdReqAttribute contained rpc_number port + \ nextgroup=xinetdNumberEq skipwhite + +syn match xinetdNumberEq contained display '=' + \ nextgroup=xinetdNumber skipwhite + +syn keyword xinetdAttribute contained env nextgroup=xinetdEnvEq skipwhite + +syn match xinetdEnvEq contained display '+\==' + \ nextgroup=xinetdEnvName skipwhite + +syn match xinetdEnvName contained display '[^=]\+' + \ nextgroup=xinetdEnvNameEq + +syn match xinetdEnvNameEq contained display '=' nextgroup=xinetdEnvValue + +syn match xinetdEnvValue contained display '\S\+' + \ nextgroup=xinetdEnvName skipwhite + +syn keyword xinetdAttribute contained banner banner_success banner_failure + \ nextgroup=xinetdPathEq skipwhite + +syn keyword xinetdPPAttribute include includedir + \ nextgroup=xinetdPath skipwhite + +syn match xinetdPathEq contained display '=' + \ nextgroup=xinetdPath skipwhite + +syn match xinetdPath contained display '\S\+' + +syn keyword xinetdAttribute contained redirect nextgroup=xinetdRedirectEq + \ skipwhite + +syn match xinetdRedirectEq contained display '=' + \ nextgroup=xinetdRedirectIP skipwhite + +syn match xinetdRedirectIP contained display '\S\+' + \ nextgroup=xinetdNumber skipwhite + +syn keyword xinetdAttribute contained cps nextgroup=xinetdCPSEq skipwhite + +syn match xinetdCPSEq contained display '=' + \ nextgroup=xinetdCPS skipwhite + +syn match xinetdCPS contained display '\<\d\+\>' + \ nextgroup=xinetdNumber skipwhite + +syn keyword xinetdAttribute contained max_load nextgroup=xinetdFloatEq + \ skipwhite + +syn match xinetdFloatEq contained display '=' + \ nextgroup=xinetdFloat skipwhite + +syn match xinetdFloat contained display '\d\+\.\d*\|\.\d\+' + +syn keyword xinetdAttribute contained umask nextgroup=xinetdOctalEq + \ skipwhite + +syn match xinetdOctalEq contained display '=' + \ nextgroup=xinetdOctal,xinetdOctalError + \ skipwhite + +syn match xinetdOctal contained display '\<0\o\+\>' + \ contains=xinetdOctalZero +syn match xinetdOctalZero contained display '\<0' +syn match xinetdOctalError contained display '\<0\o*[89]\d*\>' + +syn keyword xinetdAttribute contained rlimit_as nextgroup=xinetdASEq + \ skipwhite + +syn match xinetdASEq contained display '=' + \ nextgroup=xinetdAS,xinetdUnlimited + \ skipwhite + +syn match xinetdAS contained display '\d\+' nextgroup=xinetdASMult + +syn match xinetdASMult contained display '[KM]' + +syn keyword xinetdAttribute contained deny_time nextgroup=xinetdDenyTimeEq + \ skipwhite + +syn match xinetdDenyTimeEq contained display '=' + \ nextgroup=xinetdDenyTime,xinetdNumber + \ skipwhite + +syn keyword xinetdDenyTime contained FOREVER NEVER + +hi def link xinetdTodo Todo +hi def link xinetdComment Comment +hi def link xinetdService Keyword +hi def link xinetdServiceName String +hi def link xinetdDefaults Keyword +hi def link xinetdServiceGroupD Delimiter +hi def link xinetdReqAttribute Keyword +hi def link xinetdAttribute Type +hi def link xinetdEq Operator +hi def link xinetdStringEq xinetdEq +hi def link xinetdString String +hi def link xinetdTypeEq xinetdEq +hi def link xinetdType Identifier +hi def link xinetdFlagsEq xinetdEq +hi def link xinetdFlags xinetdType +hi def link xinetdDeprFlags WarningMsg +hi def link xinetdDisable Special +hi def link xinetdBooleanEq xinetdEq +hi def link xinetdBoolean Boolean +hi def link xinetdSocketTypeEq xinetdEq +hi def link xinetdSocketType xinetdType +hi def link xinetdUNumberEq xinetdEq +hi def link xinetdUnlimited Define +hi def link xinetdNumber Number +hi def link xinetdSignedNumEq xinetdEq +hi def link xinetdSignedNumber xinetdNumber +hi def link xinetdStringsEq xinetdEq +hi def link xinetdStrings xinetdString +hi def link xinetdStringsAdvEq xinetdEq +hi def link xinetdTimeRangesEq xinetdEq +hi def link xinetdTimeRanges Number +hi def link xinetdLogTypeEq xinetdEq +hi def link xinetdLogType Keyword +hi def link xinetdSyslogType xinetdType +hi def link xinetdSyslogLevel Number +hi def link xinetdLogFile xinetdPath +hi def link xinetdLogSoftLimit xinetdNumber +hi def link xinetdLogHardLimit xinetdNumber +hi def link xinetdLogSuccessEq xinetdEq +hi def link xinetdLogSuccess xinetdType +hi def link xinetdLogFailureEq xinetdEq +hi def link xinetdLogFailure xinetdType +hi def link xinetdRPCVersionEq xinetdEq +hi def link xinetdRPCVersion xinetdNumber +hi def link xinetdNumberEq xinetdEq +hi def link xinetdEnvEq xinetdEq +hi def link xinetdEnvName Identifier +hi def link xinetdEnvNameEq xinetdEq +hi def link xinetdEnvValue String +hi def link xinetdPPAttribute PreProc +hi def link xinetdPathEq xinetdEq +hi def link xinetdPath String +hi def link xinetdRedirectEq xinetdEq +hi def link xinetdRedirectIP String +hi def link xinetdCPSEq xinetdEq +hi def link xinetdCPS xinetdNumber +hi def link xinetdFloatEq xinetdEq +hi def link xinetdFloat xinetdNumber +hi def link xinetdOctalEq xinetdEq +hi def link xinetdOctal xinetdNumber +hi def link xinetdOctalZero PreProc +hi def link xinetdOctalError Error +hi def link xinetdASEq xinetdEq +hi def link xinetdAS xinetdNumber +hi def link xinetdASMult PreProc +hi def link xinetdDenyTimeEq xinetdEq +hi def link xinetdDenyTime PreProc + +let b:current_syntax = "xinetd" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/xkb.vim b/.config/vim/syntax/xkb.vim new file mode 100644 index 0000000..22be56d --- /dev/null +++ b/.config/vim/syntax/xkb.vim @@ -0,0 +1,79 @@ +" Vim syntax file +" This is a GENERATED FILE. Please always refer to source file at the URI below. +" Language: XKB (X Keyboard Extension) components +" Maintainer: David Ne\v{c}as (Yeti) +" Last Change: 2020 Oct 18 +" URL: http://trific.ath.cx/Ftp/vim/syntax/xkb.vim + +" Setup +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case match +syn sync minlines=100 + +" Comments +syn region xkbComment start="//" skip="\\$" end="$" keepend contains=xkbTodo +syn region xkbComment start="/\*" matchgroup=NONE end="\*/" contains=xkbCommentStartError,xkbTodo +syn match xkbCommentError "\*/" +syntax match xkbCommentStartError "/\*" contained +syn sync ccomment xkbComment +syn keyword xkbTodo TODO FIXME contained + +" Literal strings +syn match xkbSpecialChar "\\\d\d\d\|\\." contained +syn region xkbString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=xkbSpecialChar oneline + +" Catch errors caused by wrong parenthesization +syn region xkbParen start='(' end=')' contains=ALLBUT,xkbParenError,xkbSpecial,xkbTodo transparent +syn match xkbParenError ")" +syn region xkbBrace start='{' end='}' contains=ALLBUT,xkbBraceError,xkbSpecial,xkbTodo transparent +syn match xkbBraceError "}" +syn region xkbBracket start='\[' end='\]' contains=ALLBUT,xkbBracketError,xkbSpecial,xkbTodo transparent +syn match xkbBracketError "\]" + +" Physical keys +syn match xkbPhysicalKey "<\w\+>" + +" Keywords +syn keyword xkbPreproc augment include replace +syn keyword xkbConstant False True +syn keyword xkbModif override replace +syn keyword xkbIdentifier action affect alias allowExplicit approx baseColor button clearLocks color controls cornerRadius count ctrls description driveskbd font fontSize gap group groups height indicator indicatorDrivesKeyboard interpret key keys labelColor latchToLock latchMods left level_name map maximum minimum modifier_map modifiers name offColor onColor outline preserve priority repeat row section setMods shape slant solid symbols text top type useModMapMods virtualModifier virtualMods virtual_modifiers weight whichModState width +syn keyword xkbFunction AnyOf ISOLock LatchGroup LatchMods LockControls LockGroup LockMods LockPointerButton MovePtr NoAction PointerButton SetControls SetGroup SetMods SetPtrDflt Terminate +syn keyword xkbTModif default hidden partial virtual +syn keyword xkbSect alphanumeric_keys alternate_group function_keys keypad_keys modifier_keys xkb_compatibility xkb_geometry xkb_keycodes xkb_keymap xkb_semantics xkb_symbols xkb_types + +" Define the default highlighting + +hi def link xkbModif xkbPreproc +hi def link xkbTModif xkbPreproc +hi def link xkbPreproc Preproc + +hi def link xkbIdentifier Keyword +hi def link xkbFunction Function +hi def link xkbSect Type +hi def link xkbPhysicalKey Identifier +hi def link xkbKeyword Keyword + +hi def link xkbComment Comment +hi def link xkbTodo Todo + +hi def link xkbConstant Constant +hi def link xkbString String + +hi def link xkbSpecialChar xkbSpecial +hi def link xkbSpecial Special + +hi def link xkbParenError xkbBalancingError +hi def link xkbBraceError xkbBalancingError +hi def link xkbBraketError xkbBalancingError +hi def link xkbBalancingError xkbError +hi def link xkbCommentStartError xkbCommentError +hi def link xkbCommentError xkbError +hi def link xkbError Error + + +let b:current_syntax = "xkb" diff --git a/.config/vim/syntax/xmath.vim b/.config/vim/syntax/xmath.vim new file mode 100644 index 0000000..466c115 --- /dev/null +++ b/.config/vim/syntax/xmath.vim @@ -0,0 +1,227 @@ +" Vim syntax file +" Language: xmath (a simulation tool) +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Charles E. Campbell +" Last Change: Aug 31, 2016 +" 2024 Feb 19 by Vim Project (announce adoption) +" Version: 10 +" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_XMATH + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" parenthesis sanity checker +syn region xmathZone matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" transparent contains=ALLBUT,xmathError,xmathBraceError,xmathCurlyError +syn region xmathZone matchgroup=Delimiter start="{" matchgroup=Delimiter end="}" transparent contains=ALLBUT,xmathError,xmathBraceError,xmathParenError +syn region xmathZone matchgroup=Delimiter start="\[" matchgroup=Delimiter end="]" transparent contains=ALLBUT,xmathError,xmathCurlyError,xmathParenError +syn match xmathError "[)\]}]" +syn match xmathBraceError "[)}]" contained +syn match xmathCurlyError "[)\]]" contained +syn match xmathParenError "[\]}]" contained +syn match xmathComma "[,;:]" +syn match xmathComma "\.\.\.$" + +" A bunch of useful xmath keywords +syn case ignore +syn keyword xmathFuncCmd function endfunction command endcommand +syn keyword xmathStatement abort beep debug default define +syn keyword xmathStatement execute exit pause return undefine +syn keyword xmathConditional if else elseif endif +syn keyword xmathRepeat while for endwhile endfor +syn keyword xmathCmd anigraph deletedatastore keep renamedatastore +syn keyword xmathCmd autocode deletestd linkhyper renamestd +syn keyword xmathCmd build deletesuperblock linksim renamesuperblock +syn keyword xmathCmd comment deletetransition listusertype save +syn keyword xmathCmd copydatastore deleteusertype load sbadisplay +syn keyword xmathCmd copystd detailmodel lock set +syn keyword xmathCmd copysuperblock display minmax_display setsbdefault +syn keyword xmathCmd createblock documentit modifyblock show +syn keyword xmathCmd createbubble editcatalog modifybubble showlicense +syn keyword xmathCmd createconnection erase modifystd showsbdefault +syn keyword xmathCmd creatertf expandsuperbubble modifysuperblock stop +syn keyword xmathCmd createstd for modifytransition stopcosim +syn keyword xmathCmd createsuperblock go modifyusertype syntax +syn keyword xmathCmd createsuperbubble goto new unalias +syn keyword xmathCmd createtransition hardcopy next unlock +syn keyword xmathCmd createusertype help polargraph usertype +syn keyword xmathCmd delete hyperbuild print whatis +syn keyword xmathCmd deleteblock if printmodel while +syn keyword xmathCmd deletebubble ifilter quit who +syn keyword xmathCmd deleteconnection ipcwc remove xgraph + +syn keyword xmathFunc abcd eye irea querystdoptions +syn keyword xmathFunc abs eyepattern is querysuperblock +syn keyword xmathFunc acos feedback ISID querysuperblockopt +syn keyword xmathFunc acosh fft ISID Models querytransition +syn keyword xmathFunc adconversion fftpdm kronecker querytransitionopt +syn keyword xmathFunc afeedback filter length qz +syn keyword xmathFunc all find limit rampinvar +syn keyword xmathFunc ambiguity firparks lin random +syn keyword xmathFunc amdemod firremez lin30 randpdm +syn keyword xmathFunc analytic firwind linearfm randpert +syn keyword xmathFunc analyze fmdemod linfnorm randsys +syn keyword xmathFunc any forwdiff lintodb rank +syn keyword xmathFunc append fprintf list rayleigh +syn keyword xmathFunc argn frac log rcepstrum +syn keyword xmathFunc argv fracred log10 rcond +syn keyword xmathFunc arma freq logm rdintegrate +syn keyword xmathFunc arma2ss freqcircle lognormal read +syn keyword xmathFunc armax freqcont logspace real +syn keyword xmathFunc ascii frequencyhop lowpass rectify +syn keyword xmathFunc asin fsesti lpopt redschur +syn keyword xmathFunc asinh fslqgcomp lqgcomp reflect +syn keyword xmathFunc atan fsregu lqgltr regulator +syn keyword xmathFunc atan2 fwls ls residue +syn keyword xmathFunc atanh gabor ls2unc riccati +syn keyword xmathFunc attach_ac100 garb ls2var riccati_eig +syn keyword xmathFunc backdiff gaussian lsjoin riccati_schur +syn keyword xmathFunc balance gcexp lu ricean +syn keyword xmathFunc balmoore gcos lyapunov rifd +syn keyword xmathFunc bandpass gdfileselection makecontinuous rlinfo +syn keyword xmathFunc bandstop gdmessage makematrix rlocus +syn keyword xmathFunc bj gdselection makepoly rms +syn keyword xmathFunc blknorm genconv margin rootlocus +syn keyword xmathFunc bode get markoff roots +syn keyword xmathFunc bpm get_info30 matchedpz round +syn keyword xmathFunc bpm2inn get_inn max rref +syn keyword xmathFunc bpmjoin gfdm maxlike rve_get +syn keyword xmathFunc bpmsplit gfsk mean rve_info +syn keyword xmathFunc bst gfskernel mergeseg rve_reset +syn keyword xmathFunc buttconstr gfunction min rve_update +syn keyword xmathFunc butterworth ggauss minimal samplehold +syn keyword xmathFunc cancel giv mkpert schur +syn keyword xmathFunc canform giv2var mkphase sdf +syn keyword xmathFunc ccepstrum givjoin mma sds +syn keyword xmathFunc char gpsk mmaget sdtrsp +syn keyword xmathFunc chebconstr gpulse mmaput sec +syn keyword xmathFunc chebyshev gqam mod sech +syn keyword xmathFunc check gqpsk modal siginterp +syn keyword xmathFunc cholesky gramp modalstate sign +syn keyword xmathFunc chop gsawtooth modcarrier sim +syn keyword xmathFunc circonv gsigmoid mreduce sim30 +syn keyword xmathFunc circorr gsin mtxplt simin +syn keyword xmathFunc clock gsinc mu simin30 +syn keyword xmathFunc clocus gsqpsk mulhank simout +syn keyword xmathFunc clsys gsquarewave multipath simout30 +syn keyword xmathFunc coherence gstep musynfit simtransform +syn keyword xmathFunc colorind GuiDialogCreate mxstr2xmstr sin +syn keyword xmathFunc combinepf GuiDialogDestroy mxstring2xmstring singriccati +syn keyword xmathFunc commentof GuiFlush names sinh +syn keyword xmathFunc compare GuiGetValue nichols sinm +syn keyword xmathFunc complementaryerf GuiManage noisefilt size +syn keyword xmathFunc complexenvelope GuiPlot none smargin +syn keyword xmathFunc complexfreqshift GuiPlotGet norm sns2sys +syn keyword xmathFunc concatseg GuiSetValue numden sort +syn keyword xmathFunc condition GuiShellCreate nyquist spectrad +syn keyword xmathFunc conj GuiShellDeiconify obscf spectrum +syn keyword xmathFunc conmap GuiShellDestroy observable spline +syn keyword xmathFunc connect GuiShellIconify oe sprintf +syn keyword xmathFunc conpdm GuiShellLower ones sqrt +syn keyword xmathFunc constellation GuiShellRaise ophank sqrtm +syn keyword xmathFunc consys GuiShellRealize optimize sresidualize +syn keyword xmathFunc controllable GuiShellUnrealize optscale ss2arma +syn keyword xmathFunc convolve GuiTimer orderfilt sst +syn keyword xmathFunc correlate GuiToolCreate orderstate ssv +syn keyword xmathFunc cos GuiToolDestroy orth stable +syn keyword xmathFunc cosh GuiToolExist oscmd stair +syn keyword xmathFunc cosm GuiUnmanage oscope starp +syn keyword xmathFunc cot GuiWidgetExist osscale step +syn keyword xmathFunc coth h2norm padcrop stepinvar +syn keyword xmathFunc covariance h2syn partialsum string +syn keyword xmathFunc csc hadamard pdm stringex +syn keyword xmathFunc csch hankelsv pdmslice substr +syn keyword xmathFunc csum hessenberg pem subsys +syn keyword xmathFunc ctrcf highpass perfplots sum +syn keyword xmathFunc ctrlplot hilbert period svd +syn keyword xmathFunc daug hilberttransform pfscale svplot +syn keyword xmathFunc dbtolin hinfcontr phaseshift sweep +syn keyword xmathFunc dct hinfnorm pinv symbolmap +syn keyword xmathFunc decimate hinfsyn plot sys2sns +syn keyword xmathFunc defFreqRange histogram plot30 sysic +syn keyword xmathFunc defTimeRange idfreq pmdemod Sysid +syn keyword xmathFunc delay idimpulse poisson system +syn keyword xmathFunc delsubstr idsim poissonimpulse tan +syn keyword xmathFunc det ifft poleplace tanh +syn keyword xmathFunc detrend imag poles taper +syn keyword xmathFunc dht impinvar polezero tfid +syn keyword xmathFunc diagonal impplot poltrend toeplitz +syn keyword xmathFunc differentiate impulse polyfit trace +syn keyword xmathFunc directsequence index polynomial tril +syn keyword xmathFunc discretize indexlist polyval trim +syn keyword xmathFunc divide initial polyvalm trim30 +syn keyword xmathFunc domain initmodel prbs triu +syn keyword xmathFunc dst initx0 product trsp +syn keyword xmathFunc eig inn2bpm psd truncate +syn keyword xmathFunc ellipconstr inn2pe put_inn tustin +syn keyword xmathFunc elliptic inn2unc qpopt uniform +syn keyword xmathFunc erf insertseg qr val +syn keyword xmathFunc error int quantize variance +syn keyword xmathFunc estimator integrate queryblock videolines +syn keyword xmathFunc etfe integratedump queryblockoptions wcbode +syn keyword xmathFunc exist interp querybubble wcgain +syn keyword xmathFunc exp interpolate querybubbleoptionswindow +syn keyword xmathFunc expm inv querycatalog wtbalance +syn keyword xmathFunc extractchan invhilbert queryconnection zeros +syn keyword xmathFunc extractseg iqmix querystd + +syn case match + +" Labels (supports xmath's goto) +syn match xmathLabel "^\s*<[a-zA-Z_][a-zA-Z0-9]*>" + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match xmathSpecial contained "\\\d\d\d\|\\." +syn region xmathString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=xmathSpecial,@Spell +syn match xmathCharacter "'[^\\]'" +syn match xmathSpecialChar "'\\.'" + +syn match xmathNumber "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>" + +" Comments: +" xmath supports #... (like Unix shells) +" and #{ ... }# comment blocks +syn cluster xmathCommentGroup contains=xmathString,xmathTodo,@Spell +syn keyword xmathTodo contained COMBAK DEBUG FIXME Todo TODO XXX +syn match xmathComment "#.*$" contains=@xmathCommentGroup +syn region xmathCommentBlock start="#{" end="}#" contains=@xmathCommentGroup + +" synchronizing +syn sync match xmathSyncComment grouphere xmathCommentBlock "#{" +syn sync match xmathSyncComment groupthere NONE "}#" + +" Define the default highlighting. +if !exists("skip_xmath_syntax_inits") + + hi def link xmathBraceError xmathError + hi def link xmathCmd xmathStatement + hi def link xmathCommentBlock xmathComment + hi def link xmathCurlyError xmathError + hi def link xmathFuncCmd xmathStatement + hi def link xmathParenError xmathError + + " The default methods for highlighting. Can be overridden later + hi def link xmathCharacter Character + hi def link xmathComma Delimiter + hi def link xmathComment Comment + hi def link xmathCommentBlock Comment + hi def link xmathConditional Conditional + hi def link xmathError Error + hi def link xmathFunc Function + hi def link xmathLabel PreProc + hi def link xmathNumber Number + hi def link xmathRepeat Repeat + hi def link xmathSpecial Type + hi def link xmathSpecialChar SpecialChar + hi def link xmathStatement Statement + hi def link xmathString String + hi def link xmathTodo Todo + +endif + +let b:current_syntax = "xmath" + +" vim: ts=17 diff --git a/.config/vim/syntax/xml.vim b/.config/vim/syntax/xml.vim new file mode 100644 index 0000000..d99f8b4 --- /dev/null +++ b/.config/vim/syntax/xml.vim @@ -0,0 +1,361 @@ +" Vim syntax file +" Language: XML +" Maintainer: Christian Brabandt +" Repository: https://github.com/chrisbra/vim-xml-ftplugin +" Previous Maintainer: Johannes Zellner +" Author: Paul Siegmann +" Last Changed: Nov 03, 2019 +" Filenames: *.xml +" Last Change: +" 20190923 - Fix xmlEndTag to match xmlTag (vim/vim#884) +" 20190924 - Fix xmlAttribute property (amadeus/vim-xml@d8ce1c946) +" 20191103 - Enable spell checking globally +" 20210428 - Improve syntax synchronizing + +" CONFIGURATION: +" syntax folding can be turned on by +" +" let g:xml_syntax_folding = 1 +" +" before the syntax file gets loaded (e.g. in ~/.vimrc). +" This might slow down syntax highlighting significantly, +" especially for large files. +" +" CREDITS: +" The original version was derived by Paul Siegmann from +" Claudio Fleiner's html.vim. +" +" REFERENCES: +" [1] http://www.w3.org/TR/2000/REC-xml-20001006 +" [2] http://www.w3.org/XML/1998/06/xmlspec-report-19980910.htm +" +" as pointed out according to reference [1] +" +" 2.3 Common Syntactic Constructs +" [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender +" [5] Name ::= (Letter | '_' | ':') (NameChar)* +" +" NOTE: +" 1) empty tag delimiters "/>" inside attribute values (strings) +" confuse syntax highlighting. +" 2) for large files, folding can be pretty slow, especially when +" loading a file the first time and viewoptions contains 'folds' +" so that folds of previous sessions are applied. +" Don't use 'foldmethod=syntax' in this case. + + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:xml_cpo_save = &cpo +set cpo&vim + +syn case match + +" Allow spell checking in tag values, +" there is no syntax region for that, +" so enable spell checking in top-level elements +" This text is spell checked +syn spell toplevel + +" mark illegal characters +syn match xmlError "[<&]" + +" strings (inside tags) aka VALUES +" +" EXAMPLE: +" +" +" ^^^^^^^ +syn region xmlString contained start=+"+ end=+"+ contains=xmlEntity,@Spell display +syn region xmlString contained start=+'+ end=+'+ contains=xmlEntity,@Spell display + + +" punctuation (within attributes) e.g. +" ^ ^ +" syn match xmlAttribPunct +[-:._]+ contained display +syn match xmlAttribPunct +[:.]+ contained display + +" no highlighting for xmlEqual (xmlEqual has no highlighting group) +syn match xmlEqual +=+ display + + +" attribute, everything before the '=' +" +" PROVIDES: @xmlAttribHook +" +" EXAMPLE: +" +" +" ^^^^^^^^^^^^^ +" +syn match xmlAttrib + \ +[-'"<]\@1\%(['"]\@!\|$\)+ + \ contained + \ contains=xmlAttribPunct,@xmlAttribHook + \ display + + +" namespace spec +" +" PROVIDES: @xmlNamespaceHook +" +" EXAMPLE: +" +" +" ^^^ +" +if exists("g:xml_namespace_transparent") +syn match xmlNamespace + \ +\(<\|"':]\+[:]\@=+ + \ contained + \ contains=@xmlNamespaceHook + \ transparent + \ display +else +syn match xmlNamespace + \ +\(<\|"':]\+[:]\@=+ + \ contained + \ contains=@xmlNamespaceHook + \ display +endif + + +" tag name +" +" PROVIDES: @xmlTagHook +" +" EXAMPLE: +" +" +" ^^^ +" +syn match xmlTagName + \ +\%(<\|"']\++ + \ contained + \ contains=xmlNamespace,xmlAttribPunct,@xmlTagHook + \ display + + +if exists('g:xml_syntax_folding') + + " start tag + " use matchgroup=xmlTag to skip over the leading '<' + " + " PROVIDES: @xmlStartTagHook + " + " EXAMPLE: + " + " + " s^^^^^^^^^^^^^^^e + " + syn region xmlTag + \ matchgroup=xmlTag start=+<[^ /!?<>"']\@=+ + \ matchgroup=xmlTag end=+>+ + \ contained + \ contains=xmlError,xmlTagName,xmlAttrib,xmlEqual,xmlString,@xmlStartTagHook + + + " highlight the end tag + " + " PROVIDES: @xmlTagHook + " (should we provide a separate @xmlEndTagHook ?) + " + " EXAMPLE: + " + " + " ^^^^^^ + " + syn region xmlEndTag + \ matchgroup=xmlTag start=+"']\@=+ + \ matchgroup=xmlTag end=+>+ + \ contained + \ contains=xmlTagName,xmlNamespace,xmlAttribPunct,@xmlTagHook + + " tag elements with syntax-folding. + " NOTE: NO HIGHLIGHTING -- highlighting is done by contained elements + " + " PROVIDES: @xmlRegionHook + " + " EXAMPLE: + " + " + " + " + " + " some data + " + " + syn region xmlRegion + \ start=+<\z([^ /!?<>"']\+\)+ + \ skip=++ + \ end=++ + \ end=+/>+ + \ fold + \ contains=xmlTag,xmlEndTag,xmlCdata,xmlRegion,xmlComment,xmlEntity,xmlProcessing,@xmlRegionHook,@Spell + \ keepend + \ extend + +else + + " no syntax folding: + " - contained attribute removed + " - xmlRegion not defined + " + syn region xmlTag + \ matchgroup=xmlTag start=+<[^ /!?<>"']\@=+ + \ matchgroup=xmlTag end=+>+ + \ contains=xmlError,xmlTagName,xmlAttrib,xmlEqual,xmlString,@xmlStartTagHook + + syn region xmlEndTag + \ matchgroup=xmlTag start=+"']\@=+ + \ matchgroup=xmlTag end=+>+ + \ contains=xmlTagName,xmlNamespace,xmlAttribPunct,@xmlTagHook + +endif + + +" &entities; compare with dtd +syn match xmlEntity "&[^; \t]*;" contains=xmlEntityPunct +syn match xmlEntityPunct contained "[&.;]" + +if exists('g:xml_syntax_folding') + + " The real comments (this implements the comments as defined by xml, + " but not all xml pages actually conform to it. Errors are flagged. + syn region xmlComment + \ start=++ + \ contains=xmlCommentStart,xmlCommentError + \ extend + \ fold + +else + + " no syntax folding: + " - fold attribute removed + " + syn region xmlComment + \ start=++ + \ contains=xmlCommentStart,xmlCommentError + \ extend + +endif + +syn match xmlCommentStart contained "+ + \ contains=xmlCdataStart,xmlCdataEnd,@xmlCdataHook,@Spell + \ keepend + \ extend + +" using the following line instead leads to corrupt folding at CDATA regions +" syn match xmlCdata ++ contains=xmlCdataStart,xmlCdataEnd,@xmlCdataHook +syn match xmlCdataStart ++ contained + + +" Processing instructions +" This allows "?>" inside strings -- good idea? +syn region xmlProcessing matchgroup=xmlProcessingDelim start="" contains=xmlAttrib,xmlEqual,xmlString + + +if exists('g:xml_syntax_folding') + + " DTD -- we use dtd.vim here + syn region xmlDocType matchgroup=xmlDocTypeDecl + \ start="" + \ fold + \ contains=xmlDocTypeKeyword,xmlInlineDTD,xmlString +else + + " no syntax folding: + " - fold attribute removed + " + syn region xmlDocType matchgroup=xmlDocTypeDecl + \ start="" + \ contains=xmlDocTypeKeyword,xmlInlineDTD,xmlString + +endif + +syn keyword xmlDocTypeKeyword contained DOCTYPE PUBLIC SYSTEM +syn region xmlInlineDTD contained matchgroup=xmlDocTypeDecl start="\[" end="]" contains=@xmlDTD +syn include @xmlDTD :p:h/dtd.vim +unlet b:current_syntax + + +" synchronizing + +syn sync match xmlSyncComment grouphere xmlComment ++ + +" The following is slow on large documents (and the doctype is optional +" syn sync match xmlSyncDT grouphere xmlDocType +\_.\(+ + +if exists('g:xml_syntax_folding') + syn sync match xmlSync grouphere xmlRegion +\_.\(<[^ /!?<>"']\+\)\@=+ + " syn sync match xmlSync grouphere xmlRegion "<[^ /!?<>"']*>" + syn sync match xmlSync groupthere xmlRegion +"']\+>+ +endif + +syn sync minlines=100 maxlines=200 + + +" The default highlighting. +hi def link xmlTodo Todo +hi def link xmlTag Function +hi def link xmlTagName Function +hi def link xmlEndTag Identifier +if !exists("g:xml_namespace_transparent") + hi def link xmlNamespace Tag +endif +hi def link xmlEntity Statement +hi def link xmlEntityPunct Type + +hi def link xmlAttribPunct Comment +hi def link xmlAttrib Type + +hi def link xmlString String +hi def link xmlComment Comment +hi def link xmlCommentStart xmlComment +hi def link xmlCommentPart Comment +hi def link xmlCommentError Error +hi def link xmlError Error + +hi def link xmlProcessingDelim Comment +hi def link xmlProcessing Type + +hi def link xmlCdata String +hi def link xmlCdataCdata Statement +hi def link xmlCdataStart Type +hi def link xmlCdataEnd Type + +hi def link xmlDocTypeDecl Function +hi def link xmlDocTypeKeyword Statement +hi def link xmlInlineDTD Function + +let b:current_syntax = "xml" + +let &cpo = s:xml_cpo_save +unlet s:xml_cpo_save + +" vim: ts=4 diff --git a/.config/vim/syntax/xmodmap.vim b/.config/vim/syntax/xmodmap.vim new file mode 100644 index 0000000..28cae3e --- /dev/null +++ b/.config/vim/syntax/xmodmap.vim @@ -0,0 +1,677 @@ +" Vim syntax file +" Language: xmodmap(1) definition file +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2006-04-19 + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword xmodmapTodo contained TODO FIXME XXX NOTE + +syn region xmodmapComment display oneline start='^!' end='$' + \ contains=xmodmapTodo,@Spell + +syn case ignore +syn match xmodmapInt display '\<\d\+\>' +syn match xmodmapHex display '\<0x\x\+\>' +syn match xmodmapOctal display '\<0\o\+\>' +syn match xmodmapOctalError display '\<0\o*[89]\d*' +syn case match + +syn match xmodmapKeySym display '\<[A-Za-z]\>' + +" #include +syn keyword xmodmapKeySym XK_VoidSymbol XK_BackSpace XK_Tab XK_Linefeed + \ XK_Clear XK_Return XK_Pause XK_Scroll_Lock + \ XK_Sys_Req XK_Escape XK_Delete XK_Multi_key + \ XK_Codeinput XK_SingleCandidate + \ XK_MultipleCandidate XK_PreviousCandidate + \ XK_Kanji XK_Muhenkan XK_Henkan_Mode + \ XK_Henkan XK_Romaji XK_Hiragana XK_Katakana + \ XK_Hiragana_Katakana XK_Zenkaku XK_Hankaku + \ XK_Zenkaku_Hankaku XK_Touroku XK_Massyo + \ XK_Kana_Lock XK_Kana_Shift XK_Eisu_Shift + \ XK_Eisu_toggle XK_Kanji_Bangou XK_Zen_Koho + \ XK_Mae_Koho XK_Home XK_Left XK_Up XK_Right + \ XK_Down XK_Prior XK_Page_Up XK_Next + \ XK_Page_Down XK_End XK_Begin XK_Select + \ XK_Print XK_Execute XK_Insert XK_Undo XK_Redo + \ XK_Menu XK_Find XK_Cancel XK_Help XK_Break + \ XK_Mode_switch XK_script_switch XK_Num_Lock + \ XK_KP_Space XK_KP_Tab XK_KP_Enter XK_KP_F1 + \ XK_KP_F2 XK_KP_F3 XK_KP_F4 XK_KP_Home + \ XK_KP_Left XK_KP_Up XK_KP_Right XK_KP_Down + \ XK_KP_Prior XK_KP_Page_Up XK_KP_Next + \ XK_KP_Page_Down XK_KP_End XK_KP_Begin + \ XK_KP_Insert XK_KP_Delete XK_KP_Equal + \ XK_KP_Multiply XK_KP_Add XK_KP_Separator + \ XK_KP_Subtract XK_KP_Decimal XK_KP_Divide + \ XK_KP_0 XK_KP_1 XK_KP_2 XK_KP_3 XK_KP_4 + \ XK_KP_5 XK_KP_6 XK_KP_7 XK_KP_8 XK_KP_9 XK_F1 + \ XK_F2 XK_F3 XK_F4 XK_F5 XK_F6 XK_F7 XK_F8 + \ XK_F9 XK_F10 XK_F11 XK_L1 XK_F12 XK_L2 XK_F13 + \ XK_L3 XK_F14 XK_L4 XK_F15 XK_L5 XK_F16 XK_L6 + \ XK_F17 XK_L7 XK_F18 XK_L8 XK_F19 XK_L9 XK_F20 + \ XK_L10 XK_F21 XK_R1 XK_F22 XK_R2 XK_F23 + \ XK_R3 XK_F24 XK_R4 XK_F25 XK_R5 XK_F26 + \ XK_R6 XK_F27 XK_R7 XK_F28 XK_R8 XK_F29 + \ XK_R9 XK_F30 XK_R10 XK_F31 XK_R11 XK_F32 + \ XK_R12 XK_F33 XK_R13 XK_F34 XK_R14 XK_F35 + \ XK_R15 XK_Shift_L XK_Shift_R XK_Control_L + \ XK_Control_R XK_Caps_Lock XK_Shift_Lock + \ XK_Meta_L XK_Meta_R XK_Alt_L XK_Alt_R + \ XK_Super_L XK_Super_R XK_Hyper_L XK_Hyper_R + \ XK_dead_hook XK_dead_horn XK_3270_Duplicate + \ XK_3270_FieldMark XK_3270_Right2 XK_3270_Left2 + \ XK_3270_BackTab XK_3270_EraseEOF + \ XK_3270_EraseInput XK_3270_Reset + \ XK_3270_Quit XK_3270_PA1 XK_3270_PA2 + \ XK_3270_PA3 XK_3270_Test XK_3270_Attn + \ XK_3270_CursorBlink XK_3270_AltCursor + \ XK_3270_KeyClick XK_3270_Jump + \ XK_3270_Ident XK_3270_Rule XK_3270_Copy + \ XK_3270_Play XK_3270_Setup XK_3270_Record + \ XK_3270_ChangeScreen XK_3270_DeleteWord + \ XK_3270_ExSelect XK_3270_CursorSelect + \ XK_3270_PrintScreen XK_3270_Enter XK_space + \ XK_exclam XK_quotedbl XK_numbersign XK_dollar + \ XK_percent XK_ampersand XK_apostrophe + \ XK_quoteright XK_parenleft XK_parenright + \ XK_asterisk XK_plus XK_comma XK_minus + \ XK_period XK_slash XK_0 XK_1 XK_2 XK_3 + \ XK_4 XK_5 XK_6 XK_7 XK_8 XK_9 XK_colon + \ XK_semicolon XK_less XK_equal XK_greater + \ XK_question XK_at XK_A XK_B XK_C XK_D XK_E + \ XK_F XK_G XK_H XK_I XK_J XK_K XK_L XK_M XK_N + \ XK_O XK_P XK_Q XK_R XK_S XK_T XK_U XK_V XK_W + \ XK_X XK_Y XK_Z XK_bracketleft XK_backslash + \ XK_bracketright XK_asciicircum XK_underscore + \ XK_grave XK_quoteleft XK_a XK_b XK_c XK_d + \ XK_e XK_f XK_g XK_h XK_i XK_j XK_k XK_l + \ XK_m XK_n XK_o XK_p XK_q XK_r XK_s XK_t XK_u + \ XK_v XK_w XK_x XK_y XK_z XK_braceleft XK_bar + \ XK_braceright XK_asciitilde XK_nobreakspace + \ XK_exclamdown XK_cent XK_sterling XK_currency + \ XK_yen XK_brokenbar XK_section XK_diaeresis + \ XK_copyright XK_ordfeminine XK_guillemotleft + \ XK_notsign XK_hyphen XK_registered XK_macron + \ XK_degree XK_plusminus XK_twosuperior + \ XK_threesuperior XK_acute XK_mu XK_paragraph + \ XK_periodcentered XK_cedilla XK_onesuperior + \ XK_masculine XK_guillemotright XK_onequarter + \ XK_onehalf XK_threequarters XK_questiondown + \ XK_Agrave XK_Aacute XK_Acircumflex XK_Atilde + \ XK_Adiaeresis XK_Aring XK_AE XK_Ccedilla + \ XK_Egrave XK_Eacute XK_Ecircumflex + \ XK_Ediaeresis XK_Igrave XK_Iacute + \ XK_Icircumflex XK_Idiaeresis XK_ETH XK_Eth + \ XK_Ntilde XK_Ograve XK_Oacute XK_Ocircumflex + \ XK_Otilde XK_Odiaeresis XK_multiply + \ XK_Ooblique XK_Ugrave XK_Uacute XK_Ucircumflex + \ XK_Udiaeresis XK_Yacute XK_THORN XK_Thorn + \ XK_ssharp XK_agrave XK_aacute XK_acircumflex + \ XK_atilde XK_adiaeresis XK_aring XK_ae + \ XK_ccedilla XK_egrave XK_eacute XK_ecircumflex + \ XK_ediaeresis XK_igrave XK_iacute + \ XK_icircumflex XK_idiaeresis XK_eth XK_ntilde + \ XK_ograve XK_oacute XK_ocircumflex XK_otilde + \ XK_odiaeresis XK_division XK_oslash XK_ugrave + \ XK_uacute XK_ucircumflex XK_udiaeresis + \ XK_yacute XK_thorn XK_ydiaeresis XK_Aogonek + \ XK_breve XK_Lstroke XK_Lcaron XK_Sacute + \ XK_Scaron XK_Scedilla XK_Tcaron XK_Zacute + \ XK_Zcaron XK_Zabovedot XK_aogonek XK_ogonek + \ XK_lstroke XK_lcaron XK_sacute XK_caron + \ XK_scaron XK_scedilla XK_tcaron XK_zacute + \ XK_doubleacute XK_zcaron XK_zabovedot + \ XK_Racute XK_Abreve XK_Lacute XK_Cacute + \ XK_Ccaron XK_Eogonek XK_Ecaron XK_Dcaron + \ XK_Dstroke XK_Nacute XK_Ncaron XK_Odoubleacute + \ XK_Rcaron XK_Uring XK_Udoubleacute + \ XK_Tcedilla XK_racute XK_abreve XK_lacute + \ XK_cacute XK_ccaron XK_eogonek XK_ecaron + \ XK_dcaron XK_dstroke XK_nacute XK_ncaron + \ XK_odoubleacute XK_udoubleacute XK_rcaron + \ XK_uring XK_tcedilla XK_abovedot XK_Hstroke + \ XK_Hcircumflex XK_Iabovedot XK_Gbreve + \ XK_Jcircumflex XK_hstroke XK_hcircumflex + \ XK_idotless XK_gbreve XK_jcircumflex + \ XK_Cabovedot XK_Ccircumflex XK_Gabovedot + \ XK_Gcircumflex XK_Ubreve XK_Scircumflex + \ XK_cabovedot XK_ccircumflex XK_gabovedot + \ XK_gcircumflex XK_ubreve XK_scircumflex XK_kra + \ XK_kappa XK_Rcedilla XK_Itilde XK_Lcedilla + \ XK_Emacron XK_Gcedilla XK_Tslash XK_rcedilla + \ XK_itilde XK_lcedilla XK_emacron XK_gcedilla + \ XK_tslash XK_ENG XK_eng XK_Amacron XK_Iogonek + \ XK_Eabovedot XK_Imacron XK_Ncedilla XK_Omacron + \ XK_Kcedilla XK_Uogonek XK_Utilde XK_Umacron + \ XK_amacron XK_iogonek XK_eabovedot XK_imacron + \ XK_ncedilla XK_omacron XK_kcedilla XK_uogonek + \ XK_utilde XK_umacron XK_Babovedot XK_babovedot + \ XK_Dabovedot XK_Wgrave XK_Wacute XK_dabovedot + \ XK_Ygrave XK_Fabovedot XK_fabovedot + \ XK_Mabovedot XK_mabovedot XK_Pabovedot + \ XK_wgrave XK_pabovedot XK_wacute XK_Sabovedot + \ XK_ygrave XK_Wdiaeresis XK_wdiaeresis + \ XK_sabovedot XK_Wcircumflex XK_Tabovedot + \ XK_Ycircumflex XK_wcircumflex + \ XK_tabovedot XK_ycircumflex XK_OE XK_oe + \ XK_Ydiaeresis XK_overline XK_kana_fullstop + \ XK_kana_openingbracket XK_kana_closingbracket + \ XK_kana_comma XK_kana_conjunctive + \ XK_kana_middledot XK_kana_WO XK_kana_a + \ XK_kana_i XK_kana_u XK_kana_e XK_kana_o + \ XK_kana_ya XK_kana_yu XK_kana_yo + \ XK_kana_tsu XK_kana_tu XK_prolongedsound + \ XK_kana_A XK_kana_I XK_kana_U XK_kana_E + \ XK_kana_O XK_kana_KA XK_kana_KI XK_kana_KU + \ XK_kana_KE XK_kana_KO XK_kana_SA XK_kana_SHI + \ XK_kana_SU XK_kana_SE XK_kana_SO XK_kana_TA + \ XK_kana_CHI XK_kana_TI XK_kana_TSU + \ XK_kana_TU XK_kana_TE XK_kana_TO XK_kana_NA + \ XK_kana_NI XK_kana_NU XK_kana_NE XK_kana_NO + \ XK_kana_HA XK_kana_HI XK_kana_FU XK_kana_HU + \ XK_kana_HE XK_kana_HO XK_kana_MA XK_kana_MI + \ XK_kana_MU XK_kana_ME XK_kana_MO XK_kana_YA + \ XK_kana_YU XK_kana_YO XK_kana_RA XK_kana_RI + \ XK_kana_RU XK_kana_RE XK_kana_RO XK_kana_WA + \ XK_kana_N XK_voicedsound XK_semivoicedsound + \ XK_kana_switch XK_Farsi_0 XK_Farsi_1 + \ XK_Farsi_2 XK_Farsi_3 XK_Farsi_4 XK_Farsi_5 + \ XK_Farsi_6 XK_Farsi_7 XK_Farsi_8 XK_Farsi_9 + \ XK_Arabic_percent XK_Arabic_superscript_alef + \ XK_Arabic_tteh XK_Arabic_peh XK_Arabic_tcheh + \ XK_Arabic_ddal XK_Arabic_rreh XK_Arabic_comma + \ XK_Arabic_fullstop XK_Arabic_0 XK_Arabic_1 + \ XK_Arabic_2 XK_Arabic_3 XK_Arabic_4 + \ XK_Arabic_5 XK_Arabic_6 XK_Arabic_7 + \ XK_Arabic_8 XK_Arabic_9 XK_Arabic_semicolon + \ XK_Arabic_question_mark XK_Arabic_hamza + \ XK_Arabic_maddaonalef XK_Arabic_hamzaonalef + \ XK_Arabic_hamzaonwaw XK_Arabic_hamzaunderalef + \ XK_Arabic_hamzaonyeh XK_Arabic_alef + \ XK_Arabic_beh XK_Arabic_tehmarbuta + \ XK_Arabic_teh XK_Arabic_theh XK_Arabic_jeem + \ XK_Arabic_hah XK_Arabic_khah XK_Arabic_dal + \ XK_Arabic_thal XK_Arabic_ra XK_Arabic_zain + \ XK_Arabic_seen XK_Arabic_sheen + \ XK_Arabic_sad XK_Arabic_dad XK_Arabic_tah + \ XK_Arabic_zah XK_Arabic_ain XK_Arabic_ghain + \ XK_Arabic_tatweel XK_Arabic_feh XK_Arabic_qaf + \ XK_Arabic_kaf XK_Arabic_lam XK_Arabic_meem + \ XK_Arabic_noon XK_Arabic_ha XK_Arabic_heh + \ XK_Arabic_waw XK_Arabic_alefmaksura + \ XK_Arabic_yeh XK_Arabic_fathatan + \ XK_Arabic_dammatan XK_Arabic_kasratan + \ XK_Arabic_fatha XK_Arabic_damma + \ XK_Arabic_kasra XK_Arabic_shadda + \ XK_Arabic_sukun XK_Arabic_madda_above + \ XK_Arabic_hamza_above XK_Arabic_hamza_below + \ XK_Arabic_jeh XK_Arabic_veh XK_Arabic_keheh + \ XK_Arabic_gaf XK_Arabic_noon_ghunna + \ XK_Arabic_heh_doachashmee XK_Farsi_yeh + \ XK_Arabic_yeh_baree XK_Arabic_heh_goal + \ XK_Arabic_switch XK_Cyrillic_GHE_bar + \ XK_Cyrillic_ghe_bar XK_Cyrillic_ZHE_descender + \ XK_Cyrillic_zhe_descender + \ XK_Cyrillic_KA_descender + \ XK_Cyrillic_ka_descender + \ XK_Cyrillic_KA_vertstroke + \ XK_Cyrillic_ka_vertstroke + \ XK_Cyrillic_EN_descender + \ XK_Cyrillic_en_descender + \ XK_Cyrillic_U_straight XK_Cyrillic_u_straight + \ XK_Cyrillic_U_straight_bar + \ XK_Cyrillic_u_straight_bar + \ XK_Cyrillic_HA_descender + \ XK_Cyrillic_ha_descender + \ XK_Cyrillic_CHE_descender + \ XK_Cyrillic_che_descender + \ XK_Cyrillic_CHE_vertstroke + \ XK_Cyrillic_che_vertstroke XK_Cyrillic_SHHA + \ XK_Cyrillic_shha XK_Cyrillic_SCHWA + \ XK_Cyrillic_schwa XK_Cyrillic_I_macron + \ XK_Cyrillic_i_macron XK_Cyrillic_O_bar + \ XK_Cyrillic_o_bar XK_Cyrillic_U_macron + \ XK_Cyrillic_u_macron XK_Serbian_dje + \ XK_Macedonia_gje XK_Cyrillic_io + \ XK_Ukrainian_ie XK_Ukranian_je + \ XK_Macedonia_dse XK_Ukrainian_i XK_Ukranian_i + \ XK_Ukrainian_yi XK_Ukranian_yi XK_Cyrillic_je + \ XK_Serbian_je XK_Cyrillic_lje XK_Serbian_lje + \ XK_Cyrillic_nje XK_Serbian_nje XK_Serbian_tshe + \ XK_Macedonia_kje XK_Ukrainian_ghe_with_upturn + \ XK_Byelorussian_shortu XK_Cyrillic_dzhe + \ XK_Serbian_dze XK_numerosign + \ XK_Serbian_DJE XK_Macedonia_GJE + \ XK_Cyrillic_IO XK_Ukrainian_IE XK_Ukranian_JE + \ XK_Macedonia_DSE XK_Ukrainian_I XK_Ukranian_I + \ XK_Ukrainian_YI XK_Ukranian_YI XK_Cyrillic_JE + \ XK_Serbian_JE XK_Cyrillic_LJE XK_Serbian_LJE + \ XK_Cyrillic_NJE XK_Serbian_NJE XK_Serbian_TSHE + \ XK_Macedonia_KJE XK_Ukrainian_GHE_WITH_UPTURN + \ XK_Byelorussian_SHORTU XK_Cyrillic_DZHE + \ XK_Serbian_DZE XK_Cyrillic_yu + \ XK_Cyrillic_a XK_Cyrillic_be XK_Cyrillic_tse + \ XK_Cyrillic_de XK_Cyrillic_ie XK_Cyrillic_ef + \ XK_Cyrillic_ghe XK_Cyrillic_ha XK_Cyrillic_i + \ XK_Cyrillic_shorti XK_Cyrillic_ka + \ XK_Cyrillic_el XK_Cyrillic_em XK_Cyrillic_en + \ XK_Cyrillic_o XK_Cyrillic_pe XK_Cyrillic_ya + \ XK_Cyrillic_er XK_Cyrillic_es XK_Cyrillic_te + \ XK_Cyrillic_u XK_Cyrillic_zhe XK_Cyrillic_ve + \ XK_Cyrillic_softsign XK_Cyrillic_yeru + \ XK_Cyrillic_ze XK_Cyrillic_sha XK_Cyrillic_e + \ XK_Cyrillic_shcha XK_Cyrillic_che + \ XK_Cyrillic_hardsign XK_Cyrillic_YU + \ XK_Cyrillic_A XK_Cyrillic_BE XK_Cyrillic_TSE + \ XK_Cyrillic_DE XK_Cyrillic_IE XK_Cyrillic_EF + \ XK_Cyrillic_GHE XK_Cyrillic_HA XK_Cyrillic_I + \ XK_Cyrillic_SHORTI XK_Cyrillic_KA + \ XK_Cyrillic_EL XK_Cyrillic_EM XK_Cyrillic_EN + \ XK_Cyrillic_O XK_Cyrillic_PE XK_Cyrillic_YA + \ XK_Cyrillic_ER XK_Cyrillic_ES XK_Cyrillic_TE + \ XK_Cyrillic_U XK_Cyrillic_ZHE XK_Cyrillic_VE + \ XK_Cyrillic_SOFTSIGN XK_Cyrillic_YERU + \ XK_Cyrillic_ZE XK_Cyrillic_SHA XK_Cyrillic_E + \ XK_Cyrillic_SHCHA XK_Cyrillic_CHE + \ XK_Cyrillic_HARDSIGN XK_Greek_ALPHAaccent + \ XK_Greek_EPSILONaccent XK_Greek_ETAaccent + \ XK_Greek_IOTAaccent XK_Greek_IOTAdieresis + \ XK_Greek_OMICRONaccent XK_Greek_UPSILONaccent + \ XK_Greek_UPSILONdieresis + \ XK_Greek_OMEGAaccent XK_Greek_accentdieresis + \ XK_Greek_horizbar XK_Greek_alphaaccent + \ XK_Greek_epsilonaccent XK_Greek_etaaccent + \ XK_Greek_iotaaccent XK_Greek_iotadieresis + \ XK_Greek_iotaaccentdieresis + \ XK_Greek_omicronaccent XK_Greek_upsilonaccent + \ XK_Greek_upsilondieresis + \ XK_Greek_upsilonaccentdieresis + \ XK_Greek_omegaaccent XK_Greek_ALPHA + \ XK_Greek_BETA XK_Greek_GAMMA XK_Greek_DELTA + \ XK_Greek_EPSILON XK_Greek_ZETA XK_Greek_ETA + \ XK_Greek_THETA XK_Greek_IOTA XK_Greek_KAPPA + \ XK_Greek_LAMDA XK_Greek_LAMBDA XK_Greek_MU + \ XK_Greek_NU XK_Greek_XI XK_Greek_OMICRON + \ XK_Greek_PI XK_Greek_RHO XK_Greek_SIGMA + \ XK_Greek_TAU XK_Greek_UPSILON XK_Greek_PHI + \ XK_Greek_CHI XK_Greek_PSI XK_Greek_OMEGA + \ XK_Greek_alpha XK_Greek_beta XK_Greek_gamma + \ XK_Greek_delta XK_Greek_epsilon XK_Greek_zeta + \ XK_Greek_eta XK_Greek_theta XK_Greek_iota + \ XK_Greek_kappa XK_Greek_lamda XK_Greek_lambda + \ XK_Greek_mu XK_Greek_nu XK_Greek_xi + \ XK_Greek_omicron XK_Greek_pi XK_Greek_rho + \ XK_Greek_sigma XK_Greek_finalsmallsigma + \ XK_Greek_tau XK_Greek_upsilon XK_Greek_phi + \ XK_Greek_chi XK_Greek_psi XK_Greek_omega + \ XK_Greek_switch XK_leftradical + \ XK_topleftradical XK_horizconnector + \ XK_topintegral XK_botintegral + \ XK_vertconnector XK_topleftsqbracket + \ XK_botleftsqbracket XK_toprightsqbracket + \ XK_botrightsqbracket XK_topleftparens + \ XK_botleftparens XK_toprightparens + \ XK_botrightparens XK_leftmiddlecurlybrace + \ XK_rightmiddlecurlybrace + \ XK_topleftsummation XK_botleftsummation + \ XK_topvertsummationconnector + \ XK_botvertsummationconnector + \ XK_toprightsummation XK_botrightsummation + \ XK_rightmiddlesummation XK_lessthanequal + \ XK_notequal XK_greaterthanequal XK_integral + \ XK_therefore XK_variation XK_infinity + \ XK_nabla XK_approximate XK_similarequal + \ XK_ifonlyif XK_implies XK_identical XK_radical + \ XK_includedin XK_includes XK_intersection + \ XK_union XK_logicaland XK_logicalor + \ XK_partialderivative XK_function XK_leftarrow + \ XK_uparrow XK_rightarrow XK_downarrow XK_blank + \ XK_soliddiamond XK_checkerboard XK_ht XK_ff + \ XK_cr XK_lf XK_nl XK_vt XK_lowrightcorner + \ XK_uprightcorner XK_upleftcorner + \ XK_lowleftcorner XK_crossinglines + \ XK_horizlinescan1 XK_horizlinescan3 + \ XK_horizlinescan5 XK_horizlinescan7 + \ XK_horizlinescan9 XK_leftt XK_rightt XK_bott + \ XK_topt XK_vertbar XK_emspace XK_enspace + \ XK_em3space XK_em4space XK_digitspace + \ XK_punctspace XK_thinspace XK_hairspace + \ XK_emdash XK_endash XK_signifblank XK_ellipsis + \ XK_doubbaselinedot XK_onethird XK_twothirds + \ XK_onefifth XK_twofifths XK_threefifths + \ XK_fourfifths XK_onesixth XK_fivesixths + \ XK_careof XK_figdash XK_leftanglebracket + \ XK_decimalpoint XK_rightanglebracket + \ XK_marker XK_oneeighth XK_threeeighths + \ XK_fiveeighths XK_seveneighths XK_trademark + \ XK_signaturemark XK_trademarkincircle + \ XK_leftopentriangle XK_rightopentriangle + \ XK_emopencircle XK_emopenrectangle + \ XK_leftsinglequotemark XK_rightsinglequotemark + \ XK_leftdoublequotemark XK_rightdoublequotemark + \ XK_prescription XK_minutes XK_seconds + \ XK_latincross XK_hexagram XK_filledrectbullet + \ XK_filledlefttribullet XK_filledrighttribullet + \ XK_emfilledcircle XK_emfilledrect + \ XK_enopencircbullet XK_enopensquarebullet + \ XK_openrectbullet XK_opentribulletup + \ XK_opentribulletdown XK_openstar + \ XK_enfilledcircbullet XK_enfilledsqbullet + \ XK_filledtribulletup XK_filledtribulletdown + \ XK_leftpointer XK_rightpointer XK_club + \ XK_diamond XK_heart XK_maltesecross + \ XK_dagger XK_doubledagger XK_checkmark + \ XK_ballotcross XK_musicalsharp XK_musicalflat + \ XK_malesymbol XK_femalesymbol XK_telephone + \ XK_telephonerecorder XK_phonographcopyright + \ XK_caret XK_singlelowquotemark + \ XK_doublelowquotemark XK_cursor + \ XK_leftcaret XK_rightcaret XK_downcaret + \ XK_upcaret XK_overbar XK_downtack XK_upshoe + \ XK_downstile XK_underbar XK_jot XK_quad + \ XK_uptack XK_circle XK_upstile XK_downshoe + \ XK_rightshoe XK_leftshoe XK_lefttack + \ XK_righttack XK_hebrew_doublelowline + \ XK_hebrew_aleph XK_hebrew_bet XK_hebrew_beth + \ XK_hebrew_gimel XK_hebrew_gimmel + \ XK_hebrew_dalet XK_hebrew_daleth + \ XK_hebrew_he XK_hebrew_waw XK_hebrew_zain + \ XK_hebrew_zayin XK_hebrew_chet XK_hebrew_het + \ XK_hebrew_tet XK_hebrew_teth XK_hebrew_yod + \ XK_hebrew_finalkaph XK_hebrew_kaph + \ XK_hebrew_lamed XK_hebrew_finalmem + \ XK_hebrew_mem XK_hebrew_finalnun XK_hebrew_nun + \ XK_hebrew_samech XK_hebrew_samekh + \ XK_hebrew_ayin XK_hebrew_finalpe XK_hebrew_pe + \ XK_hebrew_finalzade XK_hebrew_finalzadi + \ XK_hebrew_zade XK_hebrew_zadi XK_hebrew_qoph + \ XK_hebrew_kuf XK_hebrew_resh XK_hebrew_shin + \ XK_hebrew_taw XK_hebrew_taf XK_Hebrew_switch + \ XK_Thai_kokai XK_Thai_khokhai XK_Thai_khokhuat + \ XK_Thai_khokhwai XK_Thai_khokhon + \ XK_Thai_khorakhang XK_Thai_ngongu + \ XK_Thai_chochan XK_Thai_choching + \ XK_Thai_chochang XK_Thai_soso XK_Thai_chochoe + \ XK_Thai_yoying XK_Thai_dochada XK_Thai_topatak + \ XK_Thai_thothan XK_Thai_thonangmontho + \ XK_Thai_thophuthao XK_Thai_nonen + \ XK_Thai_dodek XK_Thai_totao XK_Thai_thothung + \ XK_Thai_thothahan XK_Thai_thothong + \ XK_Thai_nonu XK_Thai_bobaimai XK_Thai_popla + \ XK_Thai_phophung XK_Thai_fofa XK_Thai_phophan + \ XK_Thai_fofan XK_Thai_phosamphao XK_Thai_moma + \ XK_Thai_yoyak XK_Thai_rorua XK_Thai_ru + \ XK_Thai_loling XK_Thai_lu XK_Thai_wowaen + \ XK_Thai_sosala XK_Thai_sorusi XK_Thai_sosua + \ XK_Thai_hohip XK_Thai_lochula XK_Thai_oang + \ XK_Thai_honokhuk XK_Thai_paiyannoi + \ XK_Thai_saraa XK_Thai_maihanakat + \ XK_Thai_saraaa XK_Thai_saraam XK_Thai_sarai + \ XK_Thai_saraii XK_Thai_saraue XK_Thai_sarauee + \ XK_Thai_sarau XK_Thai_sarauu XK_Thai_phinthu + \ XK_Thai_maihanakat_maitho XK_Thai_baht + \ XK_Thai_sarae XK_Thai_saraae XK_Thai_sarao + \ XK_Thai_saraaimaimuan XK_Thai_saraaimaimalai + \ XK_Thai_lakkhangyao XK_Thai_maiyamok + \ XK_Thai_maitaikhu XK_Thai_maiek XK_Thai_maitho + \ XK_Thai_maitri XK_Thai_maichattawa + \ XK_Thai_thanthakhat XK_Thai_nikhahit + \ XK_Thai_leksun XK_Thai_leknung XK_Thai_leksong + \ XK_Thai_leksam XK_Thai_leksi XK_Thai_lekha + \ XK_Thai_lekhok XK_Thai_lekchet XK_Thai_lekpaet + \ XK_Thai_lekkao XK_Hangul XK_Hangul_Start + \ XK_Hangul_End XK_Hangul_Hanja XK_Hangul_Jamo + \ XK_Hangul_Romaja XK_Hangul_Codeinput + \ XK_Hangul_Jeonja XK_Hangul_Banja + \ XK_Hangul_PreHanja XK_Hangul_PostHanja + \ XK_Hangul_SingleCandidate + \ XK_Hangul_MultipleCandidate + \ XK_Hangul_PreviousCandidate XK_Hangul_Special + \ XK_Hangul_switch XK_Hangul_Kiyeog + \ XK_Hangul_SsangKiyeog XK_Hangul_KiyeogSios + \ XK_Hangul_Nieun XK_Hangul_NieunJieuj + \ XK_Hangul_NieunHieuh XK_Hangul_Dikeud + \ XK_Hangul_SsangDikeud XK_Hangul_Rieul + \ XK_Hangul_RieulKiyeog XK_Hangul_RieulMieum + \ XK_Hangul_RieulPieub XK_Hangul_RieulSios + \ XK_Hangul_RieulTieut XK_Hangul_RieulPhieuf + \ XK_Hangul_RieulHieuh XK_Hangul_Mieum + \ XK_Hangul_Pieub XK_Hangul_SsangPieub + \ XK_Hangul_PieubSios XK_Hangul_Sios + \ XK_Hangul_SsangSios XK_Hangul_Ieung + \ XK_Hangul_Jieuj XK_Hangul_SsangJieuj + \ XK_Hangul_Cieuc XK_Hangul_Khieuq + \ XK_Hangul_Tieut XK_Hangul_Phieuf + \ XK_Hangul_Hieuh XK_Hangul_A XK_Hangul_AE + \ XK_Hangul_YA XK_Hangul_YAE XK_Hangul_EO + \ XK_Hangul_E XK_Hangul_YEO XK_Hangul_YE + \ XK_Hangul_O XK_Hangul_WA XK_Hangul_WAE + \ XK_Hangul_OE XK_Hangul_YO XK_Hangul_U + \ XK_Hangul_WEO XK_Hangul_WE XK_Hangul_WI + \ XK_Hangul_YU XK_Hangul_EU XK_Hangul_YI + \ XK_Hangul_I XK_Hangul_J_Kiyeog + \ XK_Hangul_J_SsangKiyeog XK_Hangul_J_KiyeogSios + \ XK_Hangul_J_Nieun XK_Hangul_J_NieunJieuj + \ XK_Hangul_J_NieunHieuh XK_Hangul_J_Dikeud + \ XK_Hangul_J_Rieul XK_Hangul_J_RieulKiyeog + \ XK_Hangul_J_RieulMieum XK_Hangul_J_RieulPieub + \ XK_Hangul_J_RieulSios XK_Hangul_J_RieulTieut + \ XK_Hangul_J_RieulPhieuf XK_Hangul_J_RieulHieuh + \ XK_Hangul_J_Mieum XK_Hangul_J_Pieub + \ XK_Hangul_J_PieubSios XK_Hangul_J_Sios + \ XK_Hangul_J_SsangSios XK_Hangul_J_Ieung + \ XK_Hangul_J_Jieuj XK_Hangul_J_Cieuc + \ XK_Hangul_J_Khieuq XK_Hangul_J_Tieut + \ XK_Hangul_J_Phieuf XK_Hangul_J_Hieuh + \ XK_Hangul_RieulYeorinHieuh + \ XK_Hangul_SunkyeongeumMieum + \ XK_Hangul_SunkyeongeumPieub XK_Hangul_PanSios + \ XK_Hangul_KkogjiDalrinIeung + \ XK_Hangul_SunkyeongeumPhieuf + \ XK_Hangul_YeorinHieuh XK_Hangul_AraeA + \ XK_Hangul_AraeAE XK_Hangul_J_PanSios + \ XK_Hangul_J_KkogjiDalrinIeung + \ XK_Hangul_J_YeorinHieuh XK_Korean_Won + \ XK_Armenian_eternity XK_Armenian_ligature_ew + \ XK_Armenian_full_stop XK_Armenian_verjaket + \ XK_Armenian_parenright XK_Armenian_parenleft + \ XK_Armenian_guillemotright + \ XK_Armenian_guillemotleft XK_Armenian_em_dash + \ XK_Armenian_dot XK_Armenian_mijaket + \ XK_Armenian_separation_mark XK_Armenian_but + \ XK_Armenian_comma XK_Armenian_en_dash + \ XK_Armenian_hyphen XK_Armenian_yentamna + \ XK_Armenian_ellipsis XK_Armenian_exclam + \ XK_Armenian_amanak XK_Armenian_accent + \ XK_Armenian_shesht XK_Armenian_question + \ XK_Armenian_paruyk XK_Armenian_AYB + \ XK_Armenian_ayb XK_Armenian_BEN + \ XK_Armenian_ben XK_Armenian_GIM + \ XK_Armenian_gim XK_Armenian_DA XK_Armenian_da + \ XK_Armenian_YECH XK_Armenian_yech + \ XK_Armenian_ZA XK_Armenian_za XK_Armenian_E + \ XK_Armenian_e XK_Armenian_AT XK_Armenian_at + \ XK_Armenian_TO XK_Armenian_to + \ XK_Armenian_ZHE XK_Armenian_zhe + \ XK_Armenian_INI XK_Armenian_ini + \ XK_Armenian_LYUN XK_Armenian_lyun + \ XK_Armenian_KHE XK_Armenian_khe + \ XK_Armenian_TSA XK_Armenian_tsa + \ XK_Armenian_KEN XK_Armenian_ken XK_Armenian_HO + \ XK_Armenian_ho XK_Armenian_DZA XK_Armenian_dza + \ XK_Armenian_GHAT XK_Armenian_ghat + \ XK_Armenian_TCHE XK_Armenian_tche + \ XK_Armenian_MEN XK_Armenian_men XK_Armenian_HI + \ XK_Armenian_hi XK_Armenian_NU XK_Armenian_nu + \ XK_Armenian_SHA XK_Armenian_sha XK_Armenian_VO + \ XK_Armenian_vo XK_Armenian_CHA XK_Armenian_cha + \ XK_Armenian_PE XK_Armenian_pe XK_Armenian_JE + \ XK_Armenian_je XK_Armenian_RA XK_Armenian_ra + \ XK_Armenian_SE XK_Armenian_se XK_Armenian_VEV + \ XK_Armenian_vev XK_Armenian_TYUN + \ XK_Armenian_tyun XK_Armenian_RE + \ XK_Armenian_re XK_Armenian_TSO + \ XK_Armenian_tso XK_Armenian_VYUN + \ XK_Armenian_vyun XK_Armenian_PYUR + \ XK_Armenian_pyur XK_Armenian_KE XK_Armenian_ke + \ XK_Armenian_O XK_Armenian_o XK_Armenian_FE + \ XK_Armenian_fe XK_Armenian_apostrophe + \ XK_Armenian_section_sign XK_Georgian_an + \ XK_Georgian_ban XK_Georgian_gan + \ XK_Georgian_don XK_Georgian_en XK_Georgian_vin + \ XK_Georgian_zen XK_Georgian_tan + \ XK_Georgian_in XK_Georgian_kan XK_Georgian_las + \ XK_Georgian_man XK_Georgian_nar XK_Georgian_on + \ XK_Georgian_par XK_Georgian_zhar + \ XK_Georgian_rae XK_Georgian_san + \ XK_Georgian_tar XK_Georgian_un + \ XK_Georgian_phar XK_Georgian_khar + \ XK_Georgian_ghan XK_Georgian_qar + \ XK_Georgian_shin XK_Georgian_chin + \ XK_Georgian_can XK_Georgian_jil + \ XK_Georgian_cil XK_Georgian_char + \ XK_Georgian_xan XK_Georgian_jhan + \ XK_Georgian_hae XK_Georgian_he XK_Georgian_hie + \ XK_Georgian_we XK_Georgian_har XK_Georgian_hoe + \ XK_Georgian_fi XK_Ccedillaabovedot + \ XK_Xabovedot XK_Qabovedot XK_IE XK_UO + \ XK_Zstroke XK_ccedillaabovedot XK_xabovedot + \ XK_qabovedot XK_ie XK_uo XK_zstroke XK_SCHWA + \ XK_schwa XK_Lbelowdot XK_Lstrokebelowdot + \ XK_lbelowdot XK_lstrokebelowdot XK_Gtilde + \ XK_gtilde XK_Abelowdot XK_abelowdot + \ XK_Ahook XK_ahook XK_Acircumflexacute + \ XK_acircumflexacute XK_Acircumflexgrave + \ XK_acircumflexgrave XK_Acircumflexhook + \ XK_acircumflexhook XK_Acircumflextilde + \ XK_acircumflextilde XK_Acircumflexbelowdot + \ XK_acircumflexbelowdot XK_Abreveacute + \ XK_abreveacute XK_Abrevegrave XK_abrevegrave + \ XK_Abrevehook XK_abrevehook XK_Abrevetilde + \ XK_abrevetilde XK_Abrevebelowdot + \ XK_abrevebelowdot XK_Ebelowdot XK_ebelowdot + \ XK_Ehook XK_ehook XK_Etilde XK_etilde + \ XK_Ecircumflexacute XK_ecircumflexacute + \ XK_Ecircumflexgrave XK_ecircumflexgrave + \ XK_Ecircumflexhook XK_ecircumflexhook + \ XK_Ecircumflextilde XK_ecircumflextilde + \ XK_Ecircumflexbelowdot XK_ecircumflexbelowdot + \ XK_Ihook XK_ihook XK_Ibelowdot XK_ibelowdot + \ XK_Obelowdot XK_obelowdot XK_Ohook XK_ohook + \ XK_Ocircumflexacute XK_ocircumflexacute + \ XK_Ocircumflexgrave XK_ocircumflexgrave + \ XK_Ocircumflexhook XK_ocircumflexhook + \ XK_Ocircumflextilde XK_ocircumflextilde + \ XK_Ocircumflexbelowdot XK_ocircumflexbelowdot + \ XK_Ohornacute XK_ohornacute XK_Ohorngrave + \ XK_ohorngrave XK_Ohornhook XK_ohornhook + \ XK_Ohorntilde XK_ohorntilde XK_Ohornbelowdot + \ XK_ohornbelowdot XK_Ubelowdot XK_ubelowdot + \ XK_Uhook XK_uhook XK_Uhornacute XK_uhornacute + \ XK_Uhorngrave XK_uhorngrave XK_Uhornhook + \ XK_uhornhook XK_Uhorntilde XK_uhorntilde + \ XK_Uhornbelowdot XK_uhornbelowdot XK_Ybelowdot + \ XK_ybelowdot XK_Yhook XK_yhook XK_Ytilde + \ XK_ytilde XK_Ohorn XK_ohorn XK_Uhorn XK_uhorn + \ XK_combining_tilde XK_combining_grave + \ XK_combining_acute XK_combining_hook + \ XK_combining_belowdot XK_EcuSign XK_ColonSign + \ XK_CruzeiroSign XK_FFrancSign XK_LiraSign + \ XK_MillSign XK_NairaSign XK_PesetaSign + \ XK_RupeeSign XK_WonSign XK_NewSheqelSign + \ XK_DongSign XK_EuroSign + +" #include +syn keyword xmodmapKeySym SunXK_Sys_Req SunXK_Print_Screen SunXK_Compose + \ SunXK_AltGraph SunXK_PageUp SunXK_PageDown + \ SunXK_Undo SunXK_Again SunXK_Find SunXK_Stop + \ SunXK_Props SunXK_Front SunXK_Copy SunXK_Open + \ SunXK_Paste SunXK_Cut SunXK_PowerSwitch + \ SunXK_AudioLowerVolume SunXK_AudioMute + \ SunXK_AudioRaiseVolume SunXK_VideoDegauss + \ SunXK_VideoLowerBrightness + \ SunXK_VideoRaiseBrightness + \ SunXK_PowerSwitchShift + +" #include +syn keyword xmodmapKeySym XF86XK_ModeLock XF86XK_Standby + \ XF86XK_AudioLowerVolume XF86XK_AudioMute + \ XF86XK_AudioRaiseVolume XF86XK_AudioPlay + \ XF86XK_AudioStop XF86XK_AudioPrev + \ XF86XK_AudioNext XF86XK_HomePage + \ XF86XK_Mail XF86XK_Start XF86XK_Search + \ XF86XK_AudioRecord XF86XK_Calculator + \ XF86XK_Memo XF86XK_ToDoList XF86XK_Calendar + \ XF86XK_PowerDown XF86XK_ContrastAdjust + \ XF86XK_RockerUp XF86XK_RockerDown + \ XF86XK_RockerEnter XF86XK_Back XF86XK_Forward + \ XF86XK_Stop XF86XK_Refresh XF86XK_PowerOff + \ XF86XK_WakeUp XF86XK_Eject XF86XK_ScreenSaver + \ XF86XK_WWW XF86XK_Sleep XF86XK_Favorites + \ XF86XK_AudioPause XF86XK_AudioMedia + \ XF86XK_MyComputer XF86XK_VendorHome + \ XF86XK_LightBulb XF86XK_Shop XF86XK_History + \ XF86XK_OpenURL XF86XK_AddFavorite + \ XF86XK_HotLinks XF86XK_BrightnessAdjust + \ XF86XK_Finance XF86XK_Community + \ XF86XK_AudioRewind XF86XK_XF86BackForward + \ XF86XK_Launch0 XF86XK_Launch1 XF86XK_Launch2 + \ XF86XK_Launch3 XF86XK_Launch4 XF86XK_Launch5 + \ XF86XK_Launch6 XF86XK_Launch7 XF86XK_Launch8 + \ XF86XK_Launch9 XF86XK_LaunchA XF86XK_LaunchB + \ XF86XK_LaunchC XF86XK_LaunchD XF86XK_LaunchE + \ XF86XK_LaunchF XF86XK_ApplicationLeft + \ XF86XK_ApplicationRight XF86XK_Book + \ XF86XK_CD XF86XK_Calculater XF86XK_Clear + \ XF86XK_Close XF86XK_Copy XF86XK_Cut + \ XF86XK_Display XF86XK_DOS XF86XK_Documents + \ XF86XK_Excel XF86XK_Explorer XF86XK_Game + \ XF86XK_Go XF86XK_iTouch XF86XK_LogOff + \ XF86XK_Market XF86XK_Meeting XF86XK_MenuKB + \ XF86XK_MenuPB XF86XK_MySites XF86XK_New + \ XF86XK_News XF86XK_OfficeHome XF86XK_Open + \ XF86XK_Option XF86XK_Paste XF86XK_Phone + \ XF86XK_Q XF86XK_Reply XF86XK_Reload + \ XF86XK_RotateWindows XF86XK_RotationPB + \ XF86XK_RotationKB XF86XK_Save XF86XK_ScrollUp + \ XF86XK_ScrollDown XF86XK_ScrollClick + \ XF86XK_Send XF86XK_Spell XF86XK_SplitScreen + \ XF86XK_Support XF86XK_TaskPane XF86XK_Terminal + \ XF86XK_Tools XF86XK_Travel XF86XK_UserPB + \ XF86XK_User1KB XF86XK_User2KB XF86XK_Video + \ XF86XK_WheelButton XF86XK_Word XF86XK_Xfer + \ XF86XK_ZoomIn XF86XK_ZoomOut XF86XK_Away + \ XF86XK_Messenger XF86XK_WebCam + \ XF86XK_MailForward XF86XK_Pictures + \ XF86XK_Music XF86XK_Switch_VT_1 + \ XF86XK_Switch_VT_2 XF86XK_Switch_VT_3 + \ XF86XK_Switch_VT_4 XF86XK_Switch_VT_5 + \ XF86XK_Switch_VT_6 XF86XK_Switch_VT_7 + \ XF86XK_Switch_VT_8 XF86XK_Switch_VT_9 + \ XF86XK_Switch_VT_10 XF86XK_Switch_VT_11 + \ XF86XK_Switch_VT_12 XF86XK_Ungrab + \ XF86XK_ClearGrab XF86XK_Next_VMode + \ XF86XK_Prev_VMode + +syn keyword xmodmapKeyword keycode keysym clear add remove pointer + +hi def link xmodmapComment Comment +hi def link xmodmapTodo Todo +hi def link xmodmapInt Number +hi def link xmodmapHex Number +hi def link xmodmapOctal Number +hi def link xmodmapOctalError Error +hi def link xmodmapKeySym Constant +hi def link xmodmapKeyword Keyword + +let b:current_syntax = "xmodmap" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/syntax/xpm.vim b/.config/vim/syntax/xpm.vim new file mode 100644 index 0000000..0cfdbe5 --- /dev/null +++ b/.config/vim/syntax/xpm.vim @@ -0,0 +1,154 @@ +" Vim syntax file +" Language: X Pixmap +" Maintainer: Ronald Schild +" Last Change: 2023 May 24 +" Version: 5.4n.2 +" Jemma Nelson added termguicolors support +" Dominique Pellé fixed spelling support +" Christian J. Robinson fixed use of global variables, moved +" loop into a compiled function + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn spell notoplevel + +syn keyword xpmType char +syn keyword xpmStorageClass static +syn keyword xpmTodo TODO FIXME XXX contained +syn region xpmComment start="/\*" end="\*/" contains=xpmTodo,@Spell +syn region xpmPixelString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@xpmColors + +if has("gui_running") || has("termguicolors") && &termguicolors + +def s:CreateSyntax(): void + var color = "" + var chars = "" + var colors = 0 + var cpp = 0 + var n = 0 + var lines = getline(1, '$') + + for line in lines # scanning all lines + + var s = matchstr(line, '".\{-1,}"') + + if s != "" # does line contain a string? + + if n == 0 # first string is the Values string + + var values = split(s[1 : -2]) + + # Values string invalid, bail out + if len(values) != 4 && len(values) != 6 && len(values) != 7 + return + endif + + # get the 3rd value: colors = number of colors + colors = str2nr(values[2]) + # get the 4th value: cpp = number of character per pixel + cpp = str2nr(values[3]) + + # these values must be positive, nonzero + if colors < 1 || cpp < 1 + return + endif + + # Highlight the Values string as normal string (no pixel string). + # Only when there is no slash, it would terminate the pattern. + if s !~ '/' + exe 'syn match xpmValues /' .. s .. '/' + endif + hi link xpmValues String + + n = 1 # n = color index + + elseif n <= colors # string is a color specification + + # get chars = length string representing the pixels + # (first incl. the following whitespace) + chars = substitute(s, '"\(.\{' .. cpp .. '}\s\).*"', '\1', '') + + # now get color, first try 'c' key if any (color visual) + color = substitute(s, '".*\sc\s\+\(.\{-}\)\s*\(\(g4\=\|[ms]\)\s.*\)*\s*"', '\1', '') + if color == s + # no 'c' key, try 'g' key (grayscale with more than 4 levels) + color = substitute(s, '".*\sg\s\+\(.\{-}\)\s*\(\(g4\|[ms]\)\s.*\)*\s*"', '\1', '') + if color == s + # next try: 'g4' key (4-level grayscale) + color = substitute(s, '".*\sg4\s\+\(.\{-}\)\s*\([ms]\s.*\)*\s*"', '\1', '') + if color == s + # finally try 'm' key (mono visual) + color = substitute(s, '".*\sm\s\+\(.\{-}\)\s*\(s\s.*\)*\s*"', '\1', '') + if color == s + color = "" + endif + endif + endif + endif + + # Vim cannot handle RGB codes with more than 6 hex digits + if color =~ '#\x\{10,}$' + color = substitute(color, '\(\x\x\)\x\x', '\1', 'g') + elseif color =~ '#\x\{7,}$' + color = substitute(color, '\(\x\x\)\x', '\1', 'g') + # nor with 3 digits + elseif color =~ '#\x\{3}$' + color = substitute(color, '\(\x\)\(\x\)\(\x\)', '0\10\20\3', '') + endif + + # escape meta characters in patterns + s = escape(s, '/\*^$.~[]') + chars = escape(chars, '/\*^$.~[]') + + # now create syntax items + # highlight the color string as normal string (no pixel string) + exe 'syn match xpmCol' .. n .. 'Def /' .. s .. '/ contains=xpmCol' .. n .. 'inDef' + exe 'hi link xpmCol' .. n .. 'Def String' + + # but highlight the first whitespace after chars in its color + exe 'syn match xpmCol' .. n .. 'inDef /"' .. chars .. '/hs=s+' .. (cpp + 1) .. ' contained' + exe 'hi link xpmCol' .. n .. 'inDef xpmColor' .. n + + # remove the following whitespace from chars + chars = substitute(chars, '.$', '', '') + + # and create the syntax item contained in the pixel strings + exe 'syn match xpmColor' .. n .. ' /' .. chars .. '/ contained' + exe 'syn cluster xpmColors add=xpmColor' .. n + + # if no color or color = "None" show background + if color == "" || substitute(color, '.*', '\L&', '') == 'none' + exe 'hi xpmColor' .. n .. ' guifg=bg' + exe 'hi xpmColor' .. n .. ' guibg=NONE' + elseif color !~ "'" + exe 'hi xpmColor' .. n .. " guifg='" .. color .. "'" + exe 'hi xpmColor' .. n .. " guibg='" .. color .. "'" + endif + n += 1 + else + break # no more color string + endif + endif + endfor +enddef + +call s:CreateSyntax() + +endif " has("gui_running") || has("termguicolors") && &termguicolors + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link xpmType Type +hi def link xpmStorageClass StorageClass +hi def link xpmTodo Todo +hi def link xpmComment Comment +hi def link xpmPixelString String + + +let b:current_syntax = "xpm" + +" vim: ts=8:sw=3:noet: diff --git a/.config/vim/syntax/xpm2.vim b/.config/vim/syntax/xpm2.vim new file mode 100644 index 0000000..dfa6945 --- /dev/null +++ b/.config/vim/syntax/xpm2.vim @@ -0,0 +1,153 @@ +" Vim syntax file +" Language: X Pixmap v2 +" Maintainer: Steve Wall (hitched97@velnet.com) +" Last Change: 2017 Feb 01 +" (Dominique Pelle added @Spell) +" Version: 5.8 +" Jemma Nelson added termguicolors support +" +" Made from xpm.vim by Ronald Schild + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn region xpm2PixelString start="^" end="$" contains=@xpm2Colors +syn keyword xpm2Todo TODO FIXME XXX contained +syn match xpm2Comment "\!.*$" contains=@Spell,xpm2Todo + + +command -nargs=+ Hi hi def + +if has("gui_running") || has("termguicolors") && &termguicolors + + let color = "" + let chars = "" + let colors = 0 + let cpp = 0 + let n = 0 + let i = 1 + + while i <= line("$") " scanning all lines + + let s = getline(i) + if match(s,"\!.*$") != -1 + let s = matchstr(s, "^[^\!]*") + endif + if s != "" " does line contain a string? + + if n == 0 " first string is the Values string + + " get the 3rd value: colors = number of colors + let colors = substitute(s, '\s*\d\+\s\+\d\+\s\+\(\d\+\).*', '\1', '') + " get the 4th value: cpp = number of character per pixel + let cpp = substitute(s, '\s*\d\+\s\+\d\+\s\+\d\+\s\+\(\d\+\).*', '\1', '') + if cpp =~ '[^0-9]' + break " if cpp is not made of digits there must be something wrong + endif + + " Highlight the Values string as normal string (no pixel string). + " Only when there is no slash, it would terminate the pattern. + if s !~ '/' + exe 'syn match xpm2Values /' . s . '/' + endif + hi def link xpm2Values Statement + + let n = 1 " n = color index + + elseif n <= colors " string is a color specification + + " get chars = length string representing the pixels + " (first incl. the following whitespace) + let chars = substitute(s, '\(.\{'.cpp.'}\s\+\).*', '\1', '') + + " now get color, first try 'c' key if any (color visual) + let color = substitute(s, '.*\sc\s\+\(.\{-}\)\s*\(\(g4\=\|[ms]\)\s.*\)*\s*', '\1', '') + if color == s + " no 'c' key, try 'g' key (grayscale with more than 4 levels) + let color = substitute(s, '.*\sg\s\+\(.\{-}\)\s*\(\(g4\|[ms]\)\s.*\)*\s*', '\1', '') + if color == s + " next try: 'g4' key (4-level grayscale) + let color = substitute(s, '.*\sg4\s\+\(.\{-}\)\s*\([ms]\s.*\)*\s*', '\1', '') + if color == s + " finally try 'm' key (mono visual) + let color = substitute(s, '.*\sm\s\+\(.\{-}\)\s*\(s\s.*\)*\s*', '\1', '') + if color == s + let color = "" + endif + endif + endif + endif + + " Vim cannot handle RGB codes with more than 6 hex digits + if color =~ '#\x\{10,}$' + let color = substitute(color, '\(\x\x\)\x\x', '\1', 'g') + elseif color =~ '#\x\{7,}$' + let color = substitute(color, '\(\x\x\)\x', '\1', 'g') + " nor with 3 digits + elseif color =~ '#\x\{3}$' + let color = substitute(color, '\(\x\)\(\x\)\(\x\)', '0\10\20\3', '') + endif + + " escape meta characters in patterns + let s = escape(s, '/\*^$.~[]') + let chars = escape(chars, '/\*^$.~[]') + + " change whitespace to "\s\+" + let s = substitute(s, "[ \t][ \t]*", "\\\\s\\\\+", "g") + let chars = substitute(chars, "[ \t][ \t]*", "\\\\s\\\\+", "g") + + " now create syntax items + " highlight the color string as normal string (no pixel string) + exe 'syn match xpm2Col'.n.'Def /'.s.'/ contains=xpm2Col'.n.'inDef' + exe 'hi def link xpm2Col'.n.'Def Constant' + + " but highlight the first whitespace after chars in its color + exe 'syn match xpm2Col'.n.'inDef /^'.chars.'/hs=s+'.(cpp).' contained' + exe 'hi def link xpm2Col'.n.'inDef xpm2Color'.n + + " remove the following whitespace from chars + let chars = substitute(chars, '\\s\\+$', '', '') + + " and create the syntax item contained in the pixel strings + exe 'syn match xpm2Color'.n.' /'.chars.'/ contained' + exe 'syn cluster xpm2Colors add=xpm2Color'.n + + " if no color or color = "None" show background + if color == "" || substitute(color, '.*', '\L&', '') == 'none' + exe 'Hi xpm2Color'.n.' guifg=bg guibg=NONE' + elseif color !~ "'" + exe 'Hi xpm2Color'.n." guifg='".color."' guibg='".color."'" + endif + let n = n + 1 + else + break " no more color string + endif + endif + let i = i + 1 + endwhile + + unlet color chars colors cpp n i s + +endif " has("gui_running") || has("termguicolors") && &termguicolors + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +" The default highlighting. +hi def link xpm2Type Type +hi def link xpm2StorageClass StorageClass +hi def link xpm2Todo Todo +hi def link xpm2Comment Comment +hi def link xpm2PixelString String + +delcommand Hi + +let b:current_syntax = "xpm2" + +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: ts=8:sw=2:noet: diff --git a/.config/vim/syntax/xquery.vim b/.config/vim/syntax/xquery.vim new file mode 100644 index 0000000..0c6b72a --- /dev/null +++ b/.config/vim/syntax/xquery.vim @@ -0,0 +1,82 @@ +" Vim syntax file +" Language: XQuery +" Author: René Neumann +" Author: Steve Spigarelli +" Original Author: Jean-Marc Vanel +" Last Change: mar jui 12 18:04:05 CEST 2005 +" Filenames: *.xq +" URL: http://jmvanel.free.fr/vim/xquery.vim + +" REFERENCES: +" [1] http://www.w3.org/TR/xquery/ + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" - is allowed in keywords +setlocal iskeyword+=- + +runtime syntax/xml.vim + +syn case match + +" From XQuery grammar: +syn keyword xqStatement ancestor ancestor-or-self and as ascending at attribute base-uri boundary-space by case cast castable child collation construction declare default descendant descendant-or-self descending div document element else empty encoding eq every except external following following-sibling for function ge greatest gt idiv if import in inherit-namespaces instance intersect is le least let lt mod module namespace ne no of or order ordered ordering parent preceding preceding-sibling preserve return satisfies schema self some stable strip then to treat typeswitch union unordered validate variable version where xmlspace xquery yes + +" TODO contains clashes with vim keyword +syn keyword xqFunction abs adjust-date-to-timezone adjust-date-to-timezone adjust-dateTime-to-timezone adjust-dateTime-to-timezone adjust-time-to-timezone adjust-time-to-timezone avg base-uri base-uri boolean ceiling codepoint-equal codepoints-to-string collection collection compare concat count current-date current-dateTime current-time data dateTime day-from-date day-from-dateTime days-from-duration deep-equal deep-equal default-collation distinct-values distinct-values doc doc-available document-uri empty ends-with ends-with error error error error escape-uri exactly-one exists false floor hours-from-dateTime hours-from-duration hours-from-time id id idref idref implicit-timezone in-scope-prefixes index-of index-of insert-before lang lang last local-name local-name local-name-from-QName lower-case matches matches max max min min minutes-from-dateTime minutes-from-duration minutes-from-time month-from-date month-from-dateTime months-from-duration name name namespace-uri namespace-uri namespace-uri-for-prefix namespace-uri-from-QName nilled node-name normalize-space normalize-space normalize-unicode normalize-unicode not number number one-or-more position prefix-from-QName QName remove replace replace resolve-QName resolve-uri resolve-uri reverse root root round round-half-to-even round-half-to-even seconds-from-dateTime seconds-from-duration seconds-from-time starts-with starts-with static-base-uri string string string-join string-length string-length string-to-codepoints subsequence subsequence substring substring substring-after substring-after substring-before substring-before sum sum timezone-from-date timezone-from-dateTime timezone-from-time tokenize tokenize trace translate true unordered upper-case year-from-date year-from-dateTime years-from-duration zero-or-one + +syn keyword xqOperator add-dayTimeDuration-to-date add-dayTimeDuration-to-dateTime add-dayTimeDuration-to-time add-dayTimeDurations add-yearMonthDuration-to-date add-yearMonthDuration-to-dateTime add-yearMonthDurations base64Binary-equal boolean-equal boolean-greater-than boolean-less-than concatenate date-equal date-greater-than date-less-than dateTime-equal dateTime-greater-than dateTime-less-than dayTimeDuration-equal dayTimeDuration-greater-than dayTimeDuration-less-than divide-dayTimeDuration divide-dayTimeDuration-by-dayTimeDuration divide-yearMonthDuration divide-yearMonthDuration-by-yearMonthDuration except gDay-equal gMonth-equal gMonthDay-equal gYear-equal gYearMonth-equal hexBinary-equal intersect is-same-node multiply-dayTimeDuration multiply-yearMonthDuration node-after node-before NOTATION-equal numeric-add numeric-divide numeric-equal numeric-greater-than numeric-integer-divide numeric-less-than numeric-mod numeric-multiply numeric-subtract numeric-unary-minus numeric-unary-plus QName-equal subtract-dates-yielding-dayTimeDuration subtract-dateTimes-yielding-dayTimeDuration subtract-dayTimeDuration-from-date subtract-dayTimeDuration-from-dateTime subtract-dayTimeDuration-from-time subtract-dayTimeDurations subtract-times subtract-yearMonthDuration-from-date subtract-yearMonthDuration-from-dateTime subtract-yearMonthDurations time-equal time-greater-than time-less-than to union yearMonthDuration-equal yearMonthDuration-greater-than yearMonthDuration-less-than + +syn match xqType "xs:\(\|Datatype\|primitive\|string\|boolean\|float\|double\|decimal\|duration\|dateTime\|time\|date\|gYearMonth\|gYear\|gMonthDay\|gDay\|gMonth\|hexBinary\|base64Binary\|anyURI\|QName\|NOTATION\|\|normalizedString\|token\|language\|IDREFS\|ENTITIES\|NMTOKEN\|NMTOKENS\|Name\|NCName\|ID\|IDREF\|ENTITY\|integer\|nonPositiveInteger\|negativeInteger\|long\|int\|short\|byte\|nonNegativeInteger\|unsignedLong\|unsignedInt\|unsignedShort\|unsignedByte\|positiveInteger\)" + + +" From XPath grammar: +syn keyword xqXPath some every in in satisfies if then else to div idiv mod union intersect except instance of treat castable cast eq ne lt le gt ge is child descendant attribute self descendant-or-self following-sibling following namespace parent ancestor preceding-sibling preceding ancestor-or-self void item node document-node text comment processing-instruction attribute schema-attribute schema-element + +" eXist extensions +syn match xqExist "&=" + +" XQdoc +syn match XQdoc contained "@\(param\|return\|author\)\>" + +" floating point number, with dot, optional exponent +syn match xqFloat "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" +" floating point number, starting with a dot, optional exponent +syn match xqFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +" floating point number, without dot, with exponent +syn match xqFloat "\d\+e[-+]\=\d\+[fl]\=\>" +syn match xqNumber "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" +syn match xqNumber "\<\d\+\>" + +syn region xqString start=+\z(['"]\)+ skip=+\\.+ end=+\z1+ +syn region xqComment start='(:' excludenl end=':)' contains=XQdoc + +syn match xqVariable "$\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*\>" +syn match xqSeparator ",\|;" +syn region xqCode transparent contained start='{' excludenl end='}' contains=xqFunction,xqCode,xmlRegionBis,xqComment,xqStatement,xmlString,xqSeparator,xqNumber,xqVariable,xqString keepend extend + +syn region xmlRegionBis start=+<\z([^ /!?<>"']\+\)+ skip=++ end=++ end=+/>+ fold contains=xmlTag,xmlEndTag,xmlCdata,xmlRegionBis,xmlComment,xmlEntity,xmlProcessing,xqCode keepend extend + +hi def link xqNumber Number +hi def link xqFloat Number +hi def link xqString String +hi def link xqVariable Identifier +hi def link xqComment Comment +hi def link xqSeparator Operator +hi def link xqStatement Statement +hi def link xqFunction Function +hi def link xqOperator Operator +hi def link xqType Type +hi def link xqXPath Operator +hi def link XQdoc Special +hi def link xqExist Operator + +" override the xml highlighting +"hi link xmlTag Structure +"hi link xmlTagName Structure +"hi link xmlEndTag Structure + +let b:current_syntax = "xquery" diff --git a/.config/vim/syntax/xs.vim b/.config/vim/syntax/xs.vim new file mode 100644 index 0000000..2145ede --- /dev/null +++ b/.config/vim/syntax/xs.vim @@ -0,0 +1,3680 @@ +" Vim syntax file +" Language: XS (Perl extension interface language) +" Author: Autogenerated from perl headers, on an original basis of Michael W. Dodge +" Maintainer: vim-perl +" Previous: Vincent Pit +" Homepage: https://github.com/vim-perl/vim-perl +" Bugs/requests: https://github.com/vim-perl/vim-perl/issues +" License: Vim License (see :help license) +" Last Change: 2018 Mar 28 + +if exists("b:current_syntax") + finish +endif + +runtime! syntax/c.vim + +" Configuration: +" let xs_superseded = 0 " mark C functions superseded by Perl replacements (ex. memcpy vs Copy) +" let xs_not_core = 0 " mark private core functions + +if get(g:, 'xs_superseded', 0) +syn keyword xsSuperseded atof atol calloc clearerr exit fclose feof ferror +syn keyword xsSuperseded fflush fgetc fgetpos fgets fopen fprintf fputc fputs +syn keyword xsSuperseded fread free freopen fseek fsetpos fwrite getc getenv +syn keyword xsSuperseded isalnum isalpha iscntrl isdigit isgraph islower +syn keyword xsSuperseded isprint ispunct isspace isupper isxdigit malloc +syn keyword xsSuperseded memcpy memmove memset printf putc rand realloc +syn keyword xsSuperseded rewind setenv sprintf srand stderr stdin stdout +syn keyword xsSuperseded strcat strcmp strcpy strdup strlen strncat strncmp +syn keyword xsSuperseded strncpy strstr strtod strtol strtoul system tolower +syn keyword xsSuperseded toupper ungetc +endif +if get(g:, 'xs_not_core', 0) +syn keyword xsPrivate F0convert Perl__add_range_to_invlist +syn keyword xsPrivate Perl__core_swash_init Perl__get_encoding +syn keyword xsPrivate Perl__get_swash_invlist Perl__invlist_contents +syn keyword xsPrivate Perl__invlist_dump +syn keyword xsPrivate Perl__invlist_intersection_maybe_complement_2nd +syn keyword xsPrivate Perl__invlist_invert Perl__invlist_populate_swatch +syn keyword xsPrivate Perl__invlist_search +syn keyword xsPrivate Perl__invlist_union_maybe_complement_2nd +syn keyword xsPrivate Perl__load_PL_utf8_foldclosures Perl__new_invlist +syn keyword xsPrivate Perl__setup_canned_invlist Perl__swash_inversion_hash +syn keyword xsPrivate Perl__swash_to_invlist Perl__to_fold_latin1 +syn keyword xsPrivate Perl__warn_problematic_locale Perl_av_reify +syn keyword xsPrivate Perl_current_re_engine Perl_cv_ckproto_len_flags +syn keyword xsPrivate Perl_emulate_cop_io Perl_find_rundefsvoffset +syn keyword xsPrivate Perl_get_re_arg Perl_grok_atoUV Perl_isALNUM_lazy +syn keyword xsPrivate Perl_isIDFIRST_lazy Perl_is_uni_alnum +syn keyword xsPrivate Perl_is_uni_alnum_lc Perl_is_uni_alnumc +syn keyword xsPrivate Perl_is_uni_alnumc_lc Perl_is_uni_alpha +syn keyword xsPrivate Perl_is_uni_alpha_lc Perl_is_uni_ascii +syn keyword xsPrivate Perl_is_uni_ascii_lc Perl_is_uni_blank +syn keyword xsPrivate Perl_is_uni_blank_lc Perl_is_uni_cntrl +syn keyword xsPrivate Perl_is_uni_cntrl_lc Perl_is_uni_digit +syn keyword xsPrivate Perl_is_uni_digit_lc Perl_is_uni_graph +syn keyword xsPrivate Perl_is_uni_graph_lc Perl_is_uni_idfirst +syn keyword xsPrivate Perl_is_uni_idfirst_lc Perl_is_uni_lower +syn keyword xsPrivate Perl_is_uni_lower_lc Perl_is_uni_print +syn keyword xsPrivate Perl_is_uni_print_lc Perl_is_uni_punct +syn keyword xsPrivate Perl_is_uni_punct_lc Perl_is_uni_space +syn keyword xsPrivate Perl_is_uni_space_lc Perl_is_uni_upper +syn keyword xsPrivate Perl_is_uni_upper_lc Perl_is_uni_xdigit +syn keyword xsPrivate Perl_is_uni_xdigit_lc Perl_is_utf8_alnum +syn keyword xsPrivate Perl_is_utf8_alnumc Perl_is_utf8_alpha +syn keyword xsPrivate Perl_is_utf8_ascii Perl_is_utf8_blank Perl_is_utf8_char +syn keyword xsPrivate Perl_is_utf8_cntrl Perl_is_utf8_digit +syn keyword xsPrivate Perl_is_utf8_graph Perl_is_utf8_idcont +syn keyword xsPrivate Perl_is_utf8_idfirst Perl_is_utf8_lower +syn keyword xsPrivate Perl_is_utf8_mark Perl_is_utf8_perl_space +syn keyword xsPrivate Perl_is_utf8_perl_word Perl_is_utf8_posix_digit +syn keyword xsPrivate Perl_is_utf8_print Perl_is_utf8_punct +syn keyword xsPrivate Perl_is_utf8_space Perl_is_utf8_upper +syn keyword xsPrivate Perl_is_utf8_xdigit Perl_is_utf8_xidcont +syn keyword xsPrivate Perl_is_utf8_xidfirst Perl_mg_find_mglob Perl_mg_length +syn keyword xsPrivate Perl_multideref_stringify Perl_new_warnings_bitfield +syn keyword xsPrivate Perl_op_clear Perl_ptr_table_clear Perl_qerror +syn keyword xsPrivate Perl_reg_named_buff Perl_reg_named_buff_iter +syn keyword xsPrivate Perl_reg_numbered_buff_fetch +syn keyword xsPrivate Perl_reg_numbered_buff_length +syn keyword xsPrivate Perl_reg_numbered_buff_store Perl_reg_qr_package +syn keyword xsPrivate Perl_reg_temp_copy Perl_regprop Perl_report_uninit +syn keyword xsPrivate Perl_sv_magicext_mglob Perl_sv_setsv_cow +syn keyword xsPrivate Perl_to_uni_lower_lc Perl_to_uni_title_lc +syn keyword xsPrivate Perl_to_uni_upper_lc Perl_try_amagic_bin +syn keyword xsPrivate Perl_try_amagic_un Perl_utf8_to_uvchr +syn keyword xsPrivate Perl_utf8_to_uvuni Perl_utf8_to_uvuni_buf +syn keyword xsPrivate Perl_valid_utf8_to_uvuni Perl_validate_proto +syn keyword xsPrivate Perl_vivify_defelem Perl_yylex S_F0convert +syn keyword xsPrivate S__append_range_to_invlist S__make_exactf_invlist +syn keyword xsPrivate S_add_above_Latin1_folds S_add_data S_add_multi_match +syn keyword xsPrivate S_add_utf16_textfilter S_adjust_size_and_find_bucket +syn keyword xsPrivate S_advance_one_SB S_advance_one_WB S_amagic_cmp +syn keyword xsPrivate S_amagic_cmp_locale S_amagic_i_ncmp S_amagic_ncmp +syn keyword xsPrivate S_anonymise_cv_maybe S_ao S_apply_attrs +syn keyword xsPrivate S_apply_attrs_my S_assert_uft8_cache_coherent +syn keyword xsPrivate S_assignment_type S_backup_one_SB S_backup_one_WB +syn keyword xsPrivate S_bad_type_gv S_bad_type_pv +syn keyword xsPrivate S_check_locale_boundary_crossing S_check_type_and_open +syn keyword xsPrivate S_check_uni S_checkcomma S_ckwarn_common +syn keyword xsPrivate S_clear_placeholders S_clear_special_blocks +syn keyword xsPrivate S_cntrl_to_mnemonic S_construct_ahocorasick_from_trie +syn keyword xsPrivate S_cop_free S_could_it_be_a_POSIX_class S_cr_textfilter +syn keyword xsPrivate S_curse S_cv_dump S_deb_curcv S_deb_stack_n S_debprof +syn keyword xsPrivate S_debug_start_match S_del_sv +syn keyword xsPrivate S_deprecate_commaless_var_list S_destroy_matcher +syn keyword xsPrivate S_div128 S_do_chomp S_do_delete_local S_do_oddball +syn keyword xsPrivate S_do_smartmatch S_do_trans_complex +syn keyword xsPrivate S_do_trans_complex_utf8 S_do_trans_count +syn keyword xsPrivate S_do_trans_count_utf8 S_do_trans_simple +syn keyword xsPrivate S_do_trans_simple_utf8 S_docatch S_doeval S_dofindlabel +syn keyword xsPrivate S_doform S_dooneliner S_doopen_pm S_doparseform +syn keyword xsPrivate S_dopoptoeval S_dopoptogiven S_dopoptolabel +syn keyword xsPrivate S_dopoptoloop S_dopoptosub_at S_dopoptowhen +syn keyword xsPrivate S_dump_exec_pos S_dump_trie S_dump_trie_interim_list +syn keyword xsPrivate S_dump_trie_interim_table S_dumpuntil S_dup_attrlist +syn keyword xsPrivate S_exec_failed S_expect_number S_filter_gets +syn keyword xsPrivate S_finalize_op S_find_and_forget_pmops +syn keyword xsPrivate S_find_array_subscript S_find_beginning S_find_byclass +syn keyword xsPrivate S_find_default_stash S_find_hash_subscript +syn keyword xsPrivate S_find_in_my_stash S_find_uninit_var S_first_symbol +syn keyword xsPrivate S_fixup_errno_string S_fold_constants S_forbid_setid +syn keyword xsPrivate S_force_ident S_force_ident_maybe_lex S_force_list +syn keyword xsPrivate S_force_next S_force_strict_version S_force_version +syn keyword xsPrivate S_force_word S_forget_pmop S_form_short_octal_warning +syn keyword xsPrivate S_gen_constant_list S_get_ANYOF_cp_list_for_ssc +syn keyword xsPrivate S_get_aux_mg S_get_num S_glob_2number +syn keyword xsPrivate S_glob_assign_glob S_grok_bslash_N S_grok_bslash_c +syn keyword xsPrivate S_grok_bslash_o S_group_end S_gv_init_svtype +syn keyword xsPrivate S_gv_is_in_main S_gv_magicalize S_gv_magicalize_isa +syn keyword xsPrivate S_handle_regex_sets S_hfreeentries S_hsplit +syn keyword xsPrivate S_hv_auxinit S_hv_auxinit_internal S_hv_delete_common +syn keyword xsPrivate S_hv_free_ent_ret S_hv_magic_check S_hv_notallowed +syn keyword xsPrivate S_incline S_incpush S_incpush_if_exists +syn keyword xsPrivate S_incpush_use_sep S_ingroup S_init_ids S_init_interp +syn keyword xsPrivate S_init_main_stash S_init_perllib +syn keyword xsPrivate S_init_postdump_symbols S_init_predump_symbols +syn keyword xsPrivate S_inplace_aassign S_intuit_method S_intuit_more +syn keyword xsPrivate S_invlist_extend S_invlist_iternext +syn keyword xsPrivate S_invoke_exception_hook S_isFOO_lc S_isFOO_utf8_lc +syn keyword xsPrivate S_isGCB S_isSB S_isWB S_is_an_int +syn keyword xsPrivate S_is_handle_constructor S_is_ssc_worth_it S_isa_lookup +syn keyword xsPrivate S_join_exact S_leave_common S_listkids +syn keyword xsPrivate S_looks_like_bool S_magic_methcall1 S_make_matcher +syn keyword xsPrivate S_make_trie S_matcher_matches_sv S_maybe_multimagic_gv +syn keyword xsPrivate S_mayberelocate S_measure_struct S_mem_log_common +syn keyword xsPrivate S_mess_alloc S_minus_v S_missingterm S_modkids +syn keyword xsPrivate S_more_sv S_move_proto_attr S_mro_clean_isarev +syn keyword xsPrivate S_mro_gather_and_rename S_mro_get_linear_isa_dfs +syn keyword xsPrivate S_mul128 S_mulexp10 S_my_bytes_to_utf8 S_my_exit_jump +syn keyword xsPrivate S_my_kid S_need_utf8 S_newGIVWHENOP S_new_constant +syn keyword xsPrivate S_new_he S_new_logop S_next_symbol S_nextchar +syn keyword xsPrivate S_no_bareword_allowed S_no_fh_allowed S_no_op +syn keyword xsPrivate S_not_a_number S_not_incrementable S_nuke_stacks +syn keyword xsPrivate S_num_overflow S_open_script S_openn_cleanup +syn keyword xsPrivate S_openn_setup S_pack_rec S_pad_alloc_name +syn keyword xsPrivate S_pad_check_dup S_pad_findlex S_pad_reset S_parse_body +syn keyword xsPrivate S_parse_gv_stash_name S_parse_ident +syn keyword xsPrivate S_parse_lparen_question_flags S_pending_ident S_pidgone +syn keyword xsPrivate S_pm_description S_pmtrans +syn keyword xsPrivate S_populate_ANYOF_from_invlist S_printbuf +syn keyword xsPrivate S_process_special_blocks S_ptr_table_find +syn keyword xsPrivate S_put_charclass_bitmap_innards S_put_code_point +syn keyword xsPrivate S_put_range S_qsortsvu S_re_croak2 S_ref_array_or_hash +syn keyword xsPrivate S_refcounted_he_value S_refkids S_refto S_reg +syn keyword xsPrivate S_reg2Lanode S_reg_check_named_buff_matched S_reg_node +syn keyword xsPrivate S_reg_recode S_reg_scan_name S_reganode S_regatom +syn keyword xsPrivate S_regbranch S_regclass S_regcppop S_regcppush +syn keyword xsPrivate S_regdump_extflags S_regdump_intflags +syn keyword xsPrivate S_regex_set_precedence S_reghop3 S_reghop4 +syn keyword xsPrivate S_reghopmaybe3 S_reginclass S_reginsert S_regmatch +syn keyword xsPrivate S_regnode_guts S_regpatws S_regpiece S_regrepeat +syn keyword xsPrivate S_regtail S_regtail_study S_regtry S_require_tie_mod +syn keyword xsPrivate S_restore_magic S_run_body S_run_user_filter +syn keyword xsPrivate S_rxres_free S_rxres_restore S_save_hek_flags +syn keyword xsPrivate S_save_lines S_save_magic_flags S_save_pushptri32ptr +syn keyword xsPrivate S_save_scalar_at S_scalar_mod_type S_scalarboolean +syn keyword xsPrivate S_scalarkids S_scalarseq S_scan_commit S_scan_const +syn keyword xsPrivate S_scan_formline S_scan_heredoc S_scan_ident +syn keyword xsPrivate S_scan_inputsymbol S_scan_pat S_scan_str S_scan_subst +syn keyword xsPrivate S_scan_trans S_scan_word S_search_const S_sequence_num +syn keyword xsPrivate S_set_ANYOF_arg S_share_hek_flags S_simplify_sort +syn keyword xsPrivate S_skipspace_flags S_sortcv S_sortcv_stacked +syn keyword xsPrivate S_sortcv_xsub S_space_join_names_mortal S_ssc_and +syn keyword xsPrivate S_ssc_anything S_ssc_finalize S_ssc_init +syn keyword xsPrivate S_ssc_is_anything S_ssc_is_cp_posixl_init S_ssc_or +syn keyword xsPrivate S_stdize_locale S_strip_return S_study_chunk +syn keyword xsPrivate S_sublex_done S_sublex_push S_sublex_start +syn keyword xsPrivate S_sv_2iuv_common S_sv_2iuv_non_preserve S_sv_add_arena +syn keyword xsPrivate S_sv_buf_to_rw S_sv_display S_sv_dup_common +syn keyword xsPrivate S_sv_dup_inc_multiple S_sv_exp_grow S_sv_i_ncmp +syn keyword xsPrivate S_sv_ncmp S_sv_pos_b2u_midway S_sv_pos_u2b_cached +syn keyword xsPrivate S_sv_pos_u2b_forwards S_sv_pos_u2b_midway +syn keyword xsPrivate S_sv_release_COW S_swallow_bom S_swash_scan_list_line +syn keyword xsPrivate S_swatch_get S_to_byte_substr S_to_lower_latin1 +syn keyword xsPrivate S_to_utf8_substr S_tokenize_use S_tokeq S_tokereport +syn keyword xsPrivate S_too_few_arguments_pv S_too_many_arguments_pv +syn keyword xsPrivate S_uiv_2buf S_unpack_rec S_unreferenced_to_tmp_stack +syn keyword xsPrivate S_unshare_hek_or_pvn S_unwind_handler_stack +syn keyword xsPrivate S_update_debugger_info S_usage S_utf16_textfilter +syn keyword xsPrivate S_utf8_mg_len_cache_update S_utf8_mg_pos_cache_update +syn keyword xsPrivate S_validate_suid S_visit S_with_queued_errors +syn keyword xsPrivate S_xs_version_bootcheck S_yywarn _add_range_to_invlist +syn keyword xsPrivate _append_range_to_invlist _core_swash_init _get_encoding +syn keyword xsPrivate _get_swash_invlist _invlist_array_init +syn keyword xsPrivate _invlist_contains_cp _invlist_contents _invlist_dump +syn keyword xsPrivate _invlist_intersection +syn keyword xsPrivate _invlist_intersection_maybe_complement_2nd +syn keyword xsPrivate _invlist_invert _invlist_len _invlist_populate_swatch +syn keyword xsPrivate _invlist_search _invlist_subtract _invlist_union +syn keyword xsPrivate _invlist_union_maybe_complement_2nd +syn keyword xsPrivate _load_PL_utf8_foldclosures _make_exactf_invlist +syn keyword xsPrivate _new_invlist _setup_canned_invlist +syn keyword xsPrivate _swash_inversion_hash _swash_to_invlist _to_fold_latin1 +syn keyword xsPrivate _warn_problematic_locale add_above_Latin1_folds +syn keyword xsPrivate add_cp_to_invlist add_data add_multi_match +syn keyword xsPrivate add_utf16_textfilter adjust_size_and_find_bucket +syn keyword xsPrivate advance_one_SB advance_one_WB +syn keyword xsPrivate alloc_maybe_populate_EXACT amagic_cmp amagic_cmp_locale +syn keyword xsPrivate amagic_i_ncmp amagic_ncmp anonymise_cv_maybe ao +syn keyword xsPrivate apply_attrs apply_attrs_my assert_uft8_cache_coherent +syn keyword xsPrivate assignment_type av_reify backup_one_SB backup_one_WB +syn keyword xsPrivate bad_type_gv bad_type_pv check_locale_boundary_crossing +syn keyword xsPrivate check_type_and_open check_uni checkcomma ckwarn_common +syn keyword xsPrivate clear_placeholders clear_special_blocks +syn keyword xsPrivate cntrl_to_mnemonic compute_EXACTish +syn keyword xsPrivate construct_ahocorasick_from_trie cop_free +syn keyword xsPrivate could_it_be_a_POSIX_class cr_textfilter +syn keyword xsPrivate current_re_engine curse cv_ckproto_len_flags cv_dump +syn keyword xsPrivate deb_curcv deb_stack_n debprof debug_start_match del_sv +syn keyword xsPrivate deprecate_commaless_var_list destroy_matcher div128 +syn keyword xsPrivate do_aexec do_chomp do_delete_local do_exec do_oddball +syn keyword xsPrivate do_smartmatch do_trans_complex do_trans_complex_utf8 +syn keyword xsPrivate do_trans_count do_trans_count_utf8 do_trans_simple +syn keyword xsPrivate do_trans_simple_utf8 docatch doeval dofindlabel doform +syn keyword xsPrivate dooneliner doopen_pm doparseform dopoptoeval +syn keyword xsPrivate dopoptogiven dopoptolabel dopoptoloop dopoptosub_at +syn keyword xsPrivate dopoptowhen dump_exec_pos dump_trie +syn keyword xsPrivate dump_trie_interim_list dump_trie_interim_table +syn keyword xsPrivate dumpuntil dup_attrlist exec_failed expect_number +syn keyword xsPrivate filter_gets finalize_op find_and_forget_pmops +syn keyword xsPrivate find_array_subscript find_beginning find_byclass +syn keyword xsPrivate find_default_stash find_hash_subscript find_in_my_stash +syn keyword xsPrivate find_rundefsvoffset find_uninit_var first_symbol +syn keyword xsPrivate fixup_errno_string fold_constants forbid_setid +syn keyword xsPrivate force_ident force_ident_maybe_lex force_list force_next +syn keyword xsPrivate force_strict_version force_version force_word +syn keyword xsPrivate forget_pmop form_short_octal_warning free_c_backtrace +syn keyword xsPrivate gen_constant_list get_ANYOF_cp_list_for_ssc get_aux_mg +syn keyword xsPrivate get_invlist_iter_addr get_invlist_offset_addr +syn keyword xsPrivate get_invlist_previous_index_addr get_num glob_2number +syn keyword xsPrivate glob_assign_glob grok_atoUV grok_bslash_N grok_bslash_c +syn keyword xsPrivate grok_bslash_o grok_bslash_x group_end gv_init_svtype +syn keyword xsPrivate gv_is_in_main gv_magicalize gv_magicalize_isa +syn keyword xsPrivate handle_regex_sets hfreeentries hsplit hv_auxinit +syn keyword xsPrivate hv_auxinit_internal hv_delete_common hv_free_ent_ret +syn keyword xsPrivate hv_magic_check hv_notallowed incline incpush +syn keyword xsPrivate incpush_if_exists incpush_use_sep ingroup init_ids +syn keyword xsPrivate init_interp init_main_stash init_perllib +syn keyword xsPrivate init_postdump_symbols init_predump_symbols +syn keyword xsPrivate inplace_aassign intuit_method intuit_more invlist_array +syn keyword xsPrivate invlist_clone invlist_extend invlist_highest +syn keyword xsPrivate invlist_is_iterating invlist_iterfinish +syn keyword xsPrivate invlist_iterinit invlist_iternext invlist_max +syn keyword xsPrivate invlist_previous_index invlist_set_len +syn keyword xsPrivate invlist_set_previous_index invlist_trim +syn keyword xsPrivate invoke_exception_hook isALNUM_lazy isFOO_lc +syn keyword xsPrivate isFOO_utf8_lc isGCB isIDFIRST_lazy isSB isWB is_an_int +syn keyword xsPrivate is_handle_constructor is_ssc_worth_it is_uni_alnum +syn keyword xsPrivate is_uni_alnum_lc is_uni_alnumc is_uni_alnumc_lc +syn keyword xsPrivate is_uni_alpha is_uni_alpha_lc is_uni_ascii +syn keyword xsPrivate is_uni_ascii_lc is_uni_blank is_uni_blank_lc +syn keyword xsPrivate is_uni_cntrl is_uni_cntrl_lc is_uni_digit +syn keyword xsPrivate is_uni_digit_lc is_uni_graph is_uni_graph_lc +syn keyword xsPrivate is_uni_idfirst is_uni_idfirst_lc is_uni_lower +syn keyword xsPrivate is_uni_lower_lc is_uni_print is_uni_print_lc +syn keyword xsPrivate is_uni_punct is_uni_punct_lc is_uni_space +syn keyword xsPrivate is_uni_space_lc is_uni_upper is_uni_upper_lc +syn keyword xsPrivate is_uni_xdigit is_uni_xdigit_lc is_utf8_alnum +syn keyword xsPrivate is_utf8_alnumc is_utf8_alpha is_utf8_ascii +syn keyword xsPrivate is_utf8_blank is_utf8_char is_utf8_cntrl is_utf8_digit +syn keyword xsPrivate is_utf8_graph is_utf8_idcont is_utf8_idfirst +syn keyword xsPrivate is_utf8_lower is_utf8_mark is_utf8_perl_space +syn keyword xsPrivate is_utf8_perl_word is_utf8_posix_digit is_utf8_print +syn keyword xsPrivate is_utf8_punct is_utf8_space is_utf8_upper +syn keyword xsPrivate is_utf8_xdigit is_utf8_xidcont is_utf8_xidfirst +syn keyword xsPrivate isa_lookup join_exact leave_common listkids +syn keyword xsPrivate looks_like_bool magic_methcall1 make_matcher make_trie +syn keyword xsPrivate matcher_matches_sv maybe_multimagic_gv mayberelocate +syn keyword xsPrivate measure_struct mem_log_common mess_alloc mg_find_mglob +syn keyword xsPrivate mg_length minus_v missingterm modkids more_sv +syn keyword xsPrivate move_proto_attr mro_clean_isarev mro_gather_and_rename +syn keyword xsPrivate mro_get_linear_isa_dfs mul128 mulexp10 +syn keyword xsPrivate multideref_stringify my_bytes_to_utf8 my_exit_jump +syn keyword xsPrivate my_kid need_utf8 newGIVWHENOP new_he new_logop +syn keyword xsPrivate next_symbol nextchar no_bareword_allowed no_fh_allowed +syn keyword xsPrivate no_op not_a_number not_incrementable nuke_stacks +syn keyword xsPrivate num_overflow op_clear open_script openn_cleanup +syn keyword xsPrivate openn_setup pack_rec pad_alloc_name pad_check_dup +syn keyword xsPrivate pad_findlex pad_reset parse_body parse_gv_stash_name +syn keyword xsPrivate parse_ident parse_lparen_question_flags pending_ident +syn keyword xsPrivate pidgone pm_description pmtrans +syn keyword xsPrivate populate_ANYOF_from_invlist printbuf +syn keyword xsPrivate process_special_blocks ptr_table_clear ptr_table_find +syn keyword xsPrivate put_charclass_bitmap_innards put_code_point put_range +syn keyword xsPrivate qerror qsortsvu re_croak2 ref_array_or_hash +syn keyword xsPrivate refcounted_he_value refkids refto reg reg2Lanode +syn keyword xsPrivate reg_check_named_buff_matched reg_named_buff +syn keyword xsPrivate reg_named_buff_iter reg_node reg_numbered_buff_fetch +syn keyword xsPrivate reg_numbered_buff_length reg_numbered_buff_store +syn keyword xsPrivate reg_qr_package reg_recode reg_scan_name reg_skipcomment +syn keyword xsPrivate reg_temp_copy reganode regatom regbranch regclass +syn keyword xsPrivate regcppop regcppush regcurly regdump_extflags +syn keyword xsPrivate regdump_intflags regex_set_precedence reghop3 reghop4 +syn keyword xsPrivate reghopmaybe3 reginclass reginsert regmatch regnode_guts +syn keyword xsPrivate regpatws regpiece regpposixcc regprop regrepeat regtail +syn keyword xsPrivate regtail_study regtry report_uninit require_tie_mod +syn keyword xsPrivate restore_magic run_body run_user_filter rxres_free +syn keyword xsPrivate rxres_restore save_hek_flags save_lines +syn keyword xsPrivate save_magic_flags save_pushptri32ptr save_scalar_at +syn keyword xsPrivate scalar_mod_type scalarboolean scalarkids scalarseq +syn keyword xsPrivate scan_commit scan_const scan_formline scan_heredoc +syn keyword xsPrivate scan_ident scan_inputsymbol scan_pat scan_str +syn keyword xsPrivate scan_subst scan_trans scan_word search_const +syn keyword xsPrivate sequence_num set_ANYOF_arg share_hek_flags +syn keyword xsPrivate simplify_sort skipspace_flags sortcv sortcv_stacked +syn keyword xsPrivate sortcv_xsub space_join_names_mortal ssc_add_range +syn keyword xsPrivate ssc_and ssc_anything ssc_clear_locale ssc_cp_and +syn keyword xsPrivate ssc_finalize ssc_init ssc_intersection ssc_is_anything +syn keyword xsPrivate ssc_is_cp_posixl_init ssc_or ssc_union stdize_locale +syn keyword xsPrivate strip_return study_chunk sublex_done sublex_push +syn keyword xsPrivate sublex_start sv_2iuv_common sv_2iuv_non_preserve +syn keyword xsPrivate sv_add_arena sv_buf_to_rw sv_copypv sv_display +syn keyword xsPrivate sv_dup_common sv_dup_inc_multiple sv_exp_grow sv_i_ncmp +syn keyword xsPrivate sv_magicext_mglob sv_ncmp sv_only_taint_gmagic +syn keyword xsPrivate sv_or_pv_pos_u2b sv_pos_b2u_midway sv_pos_u2b_cached +syn keyword xsPrivate sv_pos_u2b_forwards sv_pos_u2b_midway sv_release_COW +syn keyword xsPrivate sv_setsv_cow swallow_bom swash_scan_list_line +syn keyword xsPrivate swatch_get to_byte_substr to_lower_latin1 +syn keyword xsPrivate to_uni_lower_lc to_uni_title_lc to_uni_upper_lc +syn keyword xsPrivate to_utf8_substr tokenize_use tokeq tokereport +syn keyword xsPrivate too_few_arguments_pv too_many_arguments_pv uiv_2buf +syn keyword xsPrivate unpack_rec unreferenced_to_tmp_stack unshare_hek_or_pvn +syn keyword xsPrivate unwind_handler_stack update_debugger_info usage +syn keyword xsPrivate utf16_textfilter utf8_mg_len_cache_update +syn keyword xsPrivate utf8_mg_pos_cache_update utf8_to_uvchr utf8_to_uvuni +syn keyword xsPrivate utf8_to_uvuni_buf valid_utf8_to_uvuni validate_proto +syn keyword xsPrivate visit vivify_defelem with_queued_errors yylex yywarn +endif +syn keyword xsType AMT AMTS ANY AV BHK BINOP BLOCK CHECKPOINT CLONE_PARAMS +syn keyword xsType COP COPHH CV DB_Hash_t DB_Prefix_t DEBUG_t Direntry_t +syn keyword xsType Fpos_t Free_t GCB_enum GP GV Gid_t Groups_t HE HEK HV I16 +syn keyword xsType I32 I64 I8 IO IV Int64 JMPENV LISTOP LOGOP LOOP MAGIC +syn keyword xsType METHOP MGS MGVTBL Malloc_t Mmap_t Mode_t NV Netdb_hlen_t +syn keyword xsType Netdb_host_t Netdb_name_t Netdb_net_t OP OPCODE OPSLAB +syn keyword xsType OPSLOT Off_t Optype PAD PADLIST PADNAME PADNAMELIST +syn keyword xsType PADOFFSET PADOP PERL_CONTEXT PERL_DRAND48_T PERL_SI PMOP +syn keyword xsType PTR_TBL_ENT_t PTR_TBL_t PVOP PerlHandShakeInterpreter +syn keyword xsType PerlIO PerlIO_funcs PerlIO_list_s PerlIO_list_t PerlIOl +syn keyword xsType PerlInterpreter Pid_t Quad_t REGEXP RExC_state_t +syn keyword xsType Rand_seed_t SB_enum SSize_t STRLEN STRUCT_SV SUBLEXINFO SV +syn keyword xsType SVOP Select_fd_set_t Shmat_t Signal_t Sigsave_t Size_t +syn keyword xsType Sock_size_t Stat_t TM64 Time64_T Time_t U16 U32 U64 U8 +syn keyword xsType UNOP UNOP_AUX UV Uid_t Uquad_t WB_enum XINVLIST XOP XPV +syn keyword xsType XPVAV XPVBM XPVCV XPVFM XPVGV XPVHV XPVIO XPVIV XPVLV +syn keyword xsType XPVMG XPVNV XPVUV Year _PerlIO _PerlIO_funcs +syn keyword xsType _char_class_number _pMY_CXT _pTHX _reg_ac_data +syn keyword xsType _reg_trie_data _reg_trie_state _reg_trie_trans +syn keyword xsType _reg_trie_trans_list_elem _sublex_info _xhvnameu _xivu +syn keyword xsType _xmgu _xnvu am_table am_table_short block_eval +syn keyword xsType block_format block_givwhen block_hooks block_loop +syn keyword xsType block_sub bound_type clone_params custom_op cv_flags_t +syn keyword xsType expectation gccbug_semun line_t magic mem_log_type methop +syn keyword xsType mgvtbl mro_alg mro_meta my_cxt_t opcode opslab opslot p5rx +syn keyword xsType pMY_CXT pMY_CXT_ pTHX pTHX_ padlist padname +syn keyword xsType padname_with_str padnamelist padtidy_type perl_cond +syn keyword xsType perl_debug_pad perl_drand48_t perl_key +syn keyword xsType perl_memory_debug_header perl_mstats perl_mstats_t +syn keyword xsType perl_mutex perl_os_thread perl_phase perl_vars +syn keyword xsType pthread_addr_t ptr_tbl ptr_tbl_ent refcounted_he +syn keyword xsType reg_ac_data reg_code_block reg_data reg_substr_data +syn keyword xsType reg_substr_datum reg_trie_data reg_trie_state +syn keyword xsType reg_trie_trans reg_trie_trans_le regex_charset regnode +syn keyword xsType regnode_1 regnode_2 regnode_2L regnode_charclass +syn keyword xsType regnode_charclass_class regnode_charclass_posixl +syn keyword xsType regnode_ssc regnode_string semun shared_he svtype ufuncs +syn keyword xsType unop_aux xop_flags_enum xpv xpvav xpvcv xpvfm xpvgv xpvhv +syn keyword xsType xpvhv_aux xpvinvlist xpvio xpviv xpvlv xpvmg xpvnv xpvuv +syn keyword xsType yytokentype +syn keyword xsString IVdf NVef NVff NVgf SVf SVf256 SVf32 SVf_ UVof UVuf UVxf +syn keyword xsConstant CXt_BLOCK CXt_EVAL CXt_FORMAT CXt_GIVEN CXt_LOOP_FOR +syn keyword xsConstant CXt_LOOP_LAZYIV CXt_LOOP_LAZYSV CXt_LOOP_PLAIN +syn keyword xsConstant CXt_NULL CXt_SUB CXt_SUBST CXt_WHEN GCB_BOUND GCB_CR +syn keyword xsConstant GCB_Control GCB_EDGE GCB_Extend GCB_L GCB_LF GCB_LV +syn keyword xsConstant GCB_LVT GCB_Other GCB_Prepend GCB_Regional_Indicator +syn keyword xsConstant GCB_SpacingMark GCB_T GCB_V G_ARRAY G_DISCARD G_EVAL +syn keyword xsConstant G_FAKINGEVAL G_KEEPERR G_METHOD G_METHOD_NAMED +syn keyword xsConstant G_NOARGS G_NODEBUG G_RE_REPARSING G_SCALAR +syn keyword xsConstant G_UNDEF_FILL G_VOID G_WANT G_WARN_ALL_MASK +syn keyword xsConstant G_WARN_ALL_OFF G_WARN_ALL_ON G_WARN_OFF G_WARN_ON +syn keyword xsConstant G_WARN_ONCE G_WRITING_TO_STDERR OA_AVREF OA_BASEOP +syn keyword xsConstant OA_BASEOP_OR_UNOP OA_BINOP OA_CLASS_MASK OA_COP +syn keyword xsConstant OA_CVREF OA_DANGEROUS OA_DEFGV OA_FILEREF +syn keyword xsConstant OA_FILESTATOP OA_FOLDCONST OA_HVREF OA_LIST OA_LISTOP +syn keyword xsConstant OA_LOGOP OA_LOOP OA_LOOPEXOP OA_MARK OA_METHOP +syn keyword xsConstant OA_OPTIONAL OA_OTHERINT OA_PADOP OA_PMOP +syn keyword xsConstant OA_PVOP_OR_SVOP OA_RETSCALAR OA_SCALAR OA_SCALARREF +syn keyword xsConstant OA_SVOP OA_TARGET OA_TARGLEX OA_UNOP OA_UNOP_AUX +syn keyword xsConstant OP_AASSIGN OP_ABS OP_ACCEPT OP_ADD OP_AEACH OP_AELEM +syn keyword xsConstant OP_AELEMFAST OP_AELEMFAST_LEX OP_AKEYS OP_ALARM OP_AND +syn keyword xsConstant OP_ANDASSIGN OP_ANONCODE OP_ANONCONST OP_ANONHASH +syn keyword xsConstant OP_ANONLIST OP_ASLICE OP_ATAN2 OP_AV2ARYLEN OP_AVALUES +syn keyword xsConstant OP_BACKTICK OP_BIND OP_BINMODE OP_BIT_AND OP_BIT_OR +syn keyword xsConstant OP_BIT_XOR OP_BLESS OP_BREAK OP_CALLER OP_CHDIR +syn keyword xsConstant OP_CHMOD OP_CHOMP OP_CHOP OP_CHOWN OP_CHR OP_CHROOT +syn keyword xsConstant OP_CLONECV OP_CLOSE OP_CLOSEDIR OP_COMPLEMENT +syn keyword xsConstant OP_CONCAT OP_COND_EXPR OP_CONNECT OP_CONST OP_CONTINUE +syn keyword xsConstant OP_COREARGS OP_COS OP_CRYPT OP_CUSTOM OP_DBMCLOSE +syn keyword xsConstant OP_DBMOPEN OP_DBSTATE OP_DEFINED OP_DELETE OP_DIE +syn keyword xsConstant OP_DIVIDE OP_DOFILE OP_DOR OP_DORASSIGN OP_DUMP +syn keyword xsConstant OP_EACH OP_EGRENT OP_EHOSTENT OP_ENETENT OP_ENTER +syn keyword xsConstant OP_ENTEREVAL OP_ENTERGIVEN OP_ENTERITER OP_ENTERLOOP +syn keyword xsConstant OP_ENTERSUB OP_ENTERTRY OP_ENTERWHEN OP_ENTERWRITE +syn keyword xsConstant OP_EOF OP_EPROTOENT OP_EPWENT OP_EQ OP_ESERVENT +syn keyword xsConstant OP_EXEC OP_EXISTS OP_EXIT OP_EXP OP_FC OP_FCNTL +syn keyword xsConstant OP_FILENO OP_FLIP OP_FLOCK OP_FLOP OP_FORK OP_FORMLINE +syn keyword xsConstant OP_FTATIME OP_FTBINARY OP_FTBLK OP_FTCHR OP_FTCTIME +syn keyword xsConstant OP_FTDIR OP_FTEEXEC OP_FTEOWNED OP_FTEREAD OP_FTEWRITE +syn keyword xsConstant OP_FTFILE OP_FTIS OP_FTLINK OP_FTMTIME OP_FTPIPE +syn keyword xsConstant OP_FTREXEC OP_FTROWNED OP_FTRREAD OP_FTRWRITE +syn keyword xsConstant OP_FTSGID OP_FTSIZE OP_FTSOCK OP_FTSUID OP_FTSVTX +syn keyword xsConstant OP_FTTEXT OP_FTTTY OP_FTZERO OP_GE OP_GELEM OP_GETC +syn keyword xsConstant OP_GETLOGIN OP_GETPEERNAME OP_GETPGRP OP_GETPPID +syn keyword xsConstant OP_GETPRIORITY OP_GETSOCKNAME OP_GGRENT OP_GGRGID +syn keyword xsConstant OP_GGRNAM OP_GHBYADDR OP_GHBYNAME OP_GHOSTENT OP_GLOB +syn keyword xsConstant OP_GMTIME OP_GNBYADDR OP_GNBYNAME OP_GNETENT OP_GOTO +syn keyword xsConstant OP_GPBYNAME OP_GPBYNUMBER OP_GPROTOENT OP_GPWENT +syn keyword xsConstant OP_GPWNAM OP_GPWUID OP_GREPSTART OP_GREPWHILE +syn keyword xsConstant OP_GSBYNAME OP_GSBYPORT OP_GSERVENT OP_GSOCKOPT OP_GT +syn keyword xsConstant OP_GV OP_GVSV OP_HELEM OP_HEX OP_HINTSEVAL OP_HSLICE +syn keyword xsConstant OP_INDEX OP_INT OP_INTROCV OP_IOCTL OP_ITER OP_I_ADD +syn keyword xsConstant OP_I_DIVIDE OP_I_EQ OP_I_GE OP_I_GT OP_I_LE OP_I_LT +syn keyword xsConstant OP_I_MODULO OP_I_MULTIPLY OP_I_NCMP OP_I_NE +syn keyword xsConstant OP_I_NEGATE OP_I_POSTDEC OP_I_POSTINC OP_I_PREDEC +syn keyword xsConstant OP_I_PREINC OP_I_SUBTRACT OP_JOIN OP_KEYS OP_KILL +syn keyword xsConstant OP_KVASLICE OP_KVHSLICE OP_LAST OP_LC OP_LCFIRST OP_LE +syn keyword xsConstant OP_LEAVE OP_LEAVEEVAL OP_LEAVEGIVEN OP_LEAVELOOP +syn keyword xsConstant OP_LEAVESUB OP_LEAVESUBLV OP_LEAVETRY OP_LEAVEWHEN +syn keyword xsConstant OP_LEAVEWRITE OP_LEFT_SHIFT OP_LENGTH OP_LINESEQ +syn keyword xsConstant OP_LINK OP_LIST OP_LISTEN OP_LOCALTIME OP_LOCK OP_LOG +syn keyword xsConstant OP_LSLICE OP_LSTAT OP_LT OP_LVAVREF OP_LVREF +syn keyword xsConstant OP_LVREFSLICE OP_MAPSTART OP_MAPWHILE OP_MATCH +syn keyword xsConstant OP_METHOD OP_METHOD_NAMED OP_METHOD_REDIR +syn keyword xsConstant OP_METHOD_REDIR_SUPER OP_METHOD_SUPER OP_MKDIR +syn keyword xsConstant OP_MODULO OP_MSGCTL OP_MSGGET OP_MSGRCV OP_MSGSND +syn keyword xsConstant OP_MULTIDEREF OP_MULTIPLY OP_NBIT_AND OP_NBIT_OR +syn keyword xsConstant OP_NBIT_XOR OP_NCMP OP_NCOMPLEMENT OP_NE OP_NEGATE +syn keyword xsConstant OP_NEXT OP_NEXTSTATE OP_NOT OP_NULL OP_OCT OP_ONCE +syn keyword xsConstant OP_OPEN OP_OPEN_DIR OP_OR OP_ORASSIGN OP_ORD OP_PACK +syn keyword xsConstant OP_PADANY OP_PADAV OP_PADCV OP_PADHV OP_PADRANGE +syn keyword xsConstant OP_PADSV OP_PIPE_OP OP_POP OP_POS OP_POSTDEC +syn keyword xsConstant OP_POSTINC OP_POW OP_PREDEC OP_PREINC OP_PRINT +syn keyword xsConstant OP_PROTOTYPE OP_PRTF OP_PUSH OP_PUSHMARK OP_PUSHRE +syn keyword xsConstant OP_QR OP_QUOTEMETA OP_RAND OP_RANGE OP_RCATLINE +syn keyword xsConstant OP_REACH OP_READ OP_READDIR OP_READLINE OP_READLINK +syn keyword xsConstant OP_RECV OP_REDO OP_REF OP_REFASSIGN OP_REFGEN +syn keyword xsConstant OP_REGCMAYBE OP_REGCOMP OP_REGCRESET OP_RENAME +syn keyword xsConstant OP_REPEAT OP_REQUIRE OP_RESET OP_RETURN OP_REVERSE +syn keyword xsConstant OP_REWINDDIR OP_RIGHT_SHIFT OP_RINDEX OP_RKEYS +syn keyword xsConstant OP_RMDIR OP_RUNCV OP_RV2AV OP_RV2CV OP_RV2GV OP_RV2HV +syn keyword xsConstant OP_RV2SV OP_RVALUES OP_SASSIGN OP_SAY OP_SBIT_AND +syn keyword xsConstant OP_SBIT_OR OP_SBIT_XOR OP_SCALAR OP_SCHOMP OP_SCHOP +syn keyword xsConstant OP_SCMP OP_SCOMPLEMENT OP_SCOPE OP_SEEK OP_SEEKDIR +syn keyword xsConstant OP_SELECT OP_SEMCTL OP_SEMGET OP_SEMOP OP_SEND OP_SEQ +syn keyword xsConstant OP_SETPGRP OP_SETPRIORITY OP_SGE OP_SGRENT OP_SGT +syn keyword xsConstant OP_SHIFT OP_SHMCTL OP_SHMGET OP_SHMREAD OP_SHMWRITE +syn keyword xsConstant OP_SHOSTENT OP_SHUTDOWN OP_SIN OP_SLE OP_SLEEP OP_SLT +syn keyword xsConstant OP_SMARTMATCH OP_SNE OP_SNETENT OP_SOCKET OP_SOCKPAIR +syn keyword xsConstant OP_SORT OP_SPLICE OP_SPLIT OP_SPRINTF OP_SPROTOENT +syn keyword xsConstant OP_SPWENT OP_SQRT OP_SRAND OP_SREFGEN OP_SSELECT +syn keyword xsConstant OP_SSERVENT OP_SSOCKOPT OP_STAT OP_STRINGIFY OP_STUB +syn keyword xsConstant OP_STUDY OP_SUBST OP_SUBSTCONT OP_SUBSTR OP_SUBTRACT +syn keyword xsConstant OP_SYMLINK OP_SYSCALL OP_SYSOPEN OP_SYSREAD OP_SYSSEEK +syn keyword xsConstant OP_SYSTEM OP_SYSWRITE OP_TELL OP_TELLDIR OP_TIE +syn keyword xsConstant OP_TIED OP_TIME OP_TMS OP_TRANS OP_TRANSR OP_TRUNCATE +syn keyword xsConstant OP_UC OP_UCFIRST OP_UMASK OP_UNDEF OP_UNLINK OP_UNPACK +syn keyword xsConstant OP_UNSHIFT OP_UNSTACK OP_UNTIE OP_UTIME OP_VALUES +syn keyword xsConstant OP_VEC OP_WAIT OP_WAITPID OP_WANTARRAY OP_WARN OP_XOR +syn keyword xsConstant OP_max OPf_FOLDED OPf_KIDS OPf_KNOW OPf_LIST OPf_MOD +syn keyword xsConstant OPf_PARENS OPf_REF OPf_SPECIAL OPf_STACKED OPf_WANT +syn keyword xsConstant OPf_WANT_LIST OPf_WANT_SCALAR OPf_WANT_VOID +syn keyword xsConstant OPpALLOW_FAKE OPpARG1_MASK OPpARG2_MASK OPpARG3_MASK +syn keyword xsConstant OPpARG4_MASK OPpASSIGN_BACKWARDS OPpASSIGN_COMMON +syn keyword xsConstant OPpASSIGN_CV_TO_GV OPpCONST_BARE OPpCONST_ENTERED +syn keyword xsConstant OPpCONST_NOVER OPpCONST_SHORTCIRCUIT OPpCONST_STRICT +syn keyword xsConstant OPpCOREARGS_DEREF1 OPpCOREARGS_DEREF2 +syn keyword xsConstant OPpCOREARGS_PUSHMARK OPpCOREARGS_SCALARMOD OPpDEREF +syn keyword xsConstant OPpDEREF_AV OPpDEREF_HV OPpDEREF_SV OPpDONT_INIT_GV +syn keyword xsConstant OPpEARLY_CV OPpENTERSUB_AMPER OPpENTERSUB_DB +syn keyword xsConstant OPpENTERSUB_HASTARG OPpENTERSUB_INARGS +syn keyword xsConstant OPpENTERSUB_LVAL_MASK OPpENTERSUB_NOPAREN +syn keyword xsConstant OPpEVAL_BYTES OPpEVAL_COPHH OPpEVAL_HAS_HH +syn keyword xsConstant OPpEVAL_RE_REPARSING OPpEVAL_UNICODE OPpEXISTS_SUB +syn keyword xsConstant OPpFLIP_LINENUM OPpFT_ACCESS OPpFT_AFTER_t +syn keyword xsConstant OPpFT_STACKED OPpFT_STACKING OPpGREP_LEX +syn keyword xsConstant OPpHINT_STRICT_REFS OPpHUSH_VMSISH OPpITER_DEF +syn keyword xsConstant OPpITER_REVERSED OPpLIST_GUESSED OPpLVALUE +syn keyword xsConstant OPpLVAL_DEFER OPpLVAL_INTRO OPpLVREF_AV OPpLVREF_CV +syn keyword xsConstant OPpLVREF_ELEM OPpLVREF_HV OPpLVREF_ITER OPpLVREF_SV +syn keyword xsConstant OPpLVREF_TYPE OPpMAYBE_LVSUB OPpMAYBE_TRUEBOOL +syn keyword xsConstant OPpMAY_RETURN_CONSTANT OPpMULTIDEREF_DELETE +syn keyword xsConstant OPpMULTIDEREF_EXISTS OPpOFFBYONE OPpOPEN_IN_CRLF +syn keyword xsConstant OPpOPEN_IN_RAW OPpOPEN_OUT_CRLF OPpOPEN_OUT_RAW +syn keyword xsConstant OPpOUR_INTRO OPpPADRANGE_COUNTMASK +syn keyword xsConstant OPpPADRANGE_COUNTSHIFT OPpPAD_STATE OPpPV_IS_UTF8 +syn keyword xsConstant OPpREFCOUNTED OPpREPEAT_DOLIST OPpREVERSE_INPLACE +syn keyword xsConstant OPpRUNTIME OPpSLICE OPpSLICEWARNING OPpSORT_DESCEND +syn keyword xsConstant OPpSORT_INPLACE OPpSORT_INTEGER OPpSORT_NUMERIC +syn keyword xsConstant OPpSORT_QSORT OPpSORT_REVERSE OPpSORT_STABLE +syn keyword xsConstant OPpSPLIT_IMPLIM OPpSUBSTR_REPL_FIRST OPpTARGET_MY +syn keyword xsConstant OPpTRANS_ALL OPpTRANS_COMPLEMENT OPpTRANS_DELETE +syn keyword xsConstant OPpTRANS_FROM_UTF OPpTRANS_GROWS OPpTRANS_IDENTICAL +syn keyword xsConstant OPpTRANS_SQUASH OPpTRANS_TO_UTF OPpTRUEBOOL +syn keyword xsConstant PERL_MAGIC_READONLY_ACCEPTABLE +syn keyword xsConstant PERL_MAGIC_TYPE_IS_VALUE_MAGIC +syn keyword xsConstant PERL_MAGIC_TYPE_READONLY_ACCEPTABLE +syn keyword xsConstant PERL_MAGIC_UTF8_CACHESIZE PERL_MAGIC_VALUE_MAGIC +syn keyword xsConstant PERL_MAGIC_VTABLE_MASK PERL_MAGIC_arylen +syn keyword xsConstant PERL_MAGIC_arylen_p PERL_MAGIC_backref PERL_MAGIC_bm +syn keyword xsConstant PERL_MAGIC_checkcall PERL_MAGIC_collxfrm +syn keyword xsConstant PERL_MAGIC_dbfile PERL_MAGIC_dbline +syn keyword xsConstant PERL_MAGIC_debugvar PERL_MAGIC_defelem PERL_MAGIC_env +syn keyword xsConstant PERL_MAGIC_envelem PERL_MAGIC_ext PERL_MAGIC_fm +syn keyword xsConstant PERL_MAGIC_hints PERL_MAGIC_hintselem PERL_MAGIC_isa +syn keyword xsConstant PERL_MAGIC_isaelem PERL_MAGIC_lvref PERL_MAGIC_nkeys +syn keyword xsConstant PERL_MAGIC_overload_table PERL_MAGIC_pos PERL_MAGIC_qr +syn keyword xsConstant PERL_MAGIC_regdata PERL_MAGIC_regdatum +syn keyword xsConstant PERL_MAGIC_regex_global PERL_MAGIC_rhash +syn keyword xsConstant PERL_MAGIC_shared PERL_MAGIC_shared_scalar +syn keyword xsConstant PERL_MAGIC_sig PERL_MAGIC_sigelem PERL_MAGIC_substr +syn keyword xsConstant PERL_MAGIC_sv PERL_MAGIC_symtab PERL_MAGIC_taint +syn keyword xsConstant PERL_MAGIC_tied PERL_MAGIC_tiedelem +syn keyword xsConstant PERL_MAGIC_tiedscalar PERL_MAGIC_utf8 PERL_MAGIC_uvar +syn keyword xsConstant PERL_MAGIC_uvar_elem PERL_MAGIC_vec PERL_MAGIC_vstring +syn keyword xsConstant REGEX_ASCII_MORE_RESTRICTED_CHARSET +syn keyword xsConstant REGEX_ASCII_RESTRICTED_CHARSET REGEX_DEPENDS_CHARSET +syn keyword xsConstant REGEX_LOCALE_CHARSET REGEX_UNICODE_CHARSET SB_ATerm +syn keyword xsConstant SB_BOUND SB_CR SB_Close SB_EDGE SB_Extend SB_Format +syn keyword xsConstant SB_LF SB_Lower SB_Numeric SB_OLetter SB_Other +syn keyword xsConstant SB_SContinue SB_STerm SB_Sep SB_Sp SB_Upper SVfARG +syn keyword xsConstant SVf_AMAGIC SVf_BREAK SVf_FAKE SVf_IOK SVf_IVisUV +syn keyword xsConstant SVf_IsCOW SVf_NOK SVf_OK SVf_OOK SVf_POK SVf_PROTECT +syn keyword xsConstant SVf_READONLY SVf_ROK SVf_THINKFIRST SVf_UTF8 SVp_IOK +syn keyword xsConstant SVp_NOK SVp_POK SVp_SCREAM SVpad_OUR SVpad_STATE +syn keyword xsConstant SVpad_TYPED SVpav_REAL SVpav_REIFY SVpbm_TAIL +syn keyword xsConstant SVpbm_VALID SVpgv_GP SVphv_CLONEABLE SVphv_HASKFLAGS +syn keyword xsConstant SVphv_LAZYDEL SVphv_SHAREKEYS SVprv_PCS_IMPORTED +syn keyword xsConstant SVprv_WEAKREF SVs_GMG SVs_OBJECT SVs_PADMY +syn keyword xsConstant SVs_PADSTALE SVs_PADTMP SVs_RMG SVs_SMG SVs_TEMP +syn keyword xsConstant SVt_INVLIST SVt_IV SVt_LAST SVt_NULL SVt_NV SVt_PV +syn keyword xsConstant SVt_PVAV SVt_PVBM SVt_PVCV SVt_PVFM SVt_PVGV SVt_PVHV +syn keyword xsConstant SVt_PVIO SVt_PVIV SVt_PVLV SVt_PVMG SVt_PVNV +syn keyword xsConstant SVt_REGEXP SVt_RV TRADITIONAL_BOUND WB_ALetter +syn keyword xsConstant WB_BOUND WB_CR WB_Double_Quote WB_EDGE WB_Extend +syn keyword xsConstant WB_ExtendNumLet WB_Format WB_Hebrew_Letter WB_Katakana +syn keyword xsConstant WB_LF WB_MidLetter WB_MidNum WB_MidNumLet WB_Newline +syn keyword xsConstant WB_Numeric WB_Other WB_Regional_Indicator +syn keyword xsConstant WB_Single_Quote WB_UNKNOWN XATTRBLOCK XATTRTERM XBLOCK +syn keyword xsConstant XBLOCKTERM XOPERATOR XOPe_xop_class XOPe_xop_desc +syn keyword xsConstant XOPe_xop_name XOPe_xop_peep XOPe_xop_ptr XPOSTDEREF +syn keyword xsConstant XREF XSTATE XTERM XTERMBLOCK XTERMORDORDOR +syn keyword xsConstant _CC_ENUM_ALPHA _CC_ENUM_ALPHANUMERIC _CC_ENUM_ASCII +syn keyword xsConstant _CC_ENUM_BLANK _CC_ENUM_CASED _CC_ENUM_CNTRL +syn keyword xsConstant _CC_ENUM_DIGIT _CC_ENUM_GRAPH _CC_ENUM_LOWER +syn keyword xsConstant _CC_ENUM_PRINT _CC_ENUM_PUNCT _CC_ENUM_SPACE +syn keyword xsConstant _CC_ENUM_UPPER _CC_ENUM_VERTSPACE _CC_ENUM_WORDCHAR +syn keyword xsConstant _CC_ENUM_XDIGIT padtidy_FORMAT padtidy_SUB +syn keyword xsConstant padtidy_SUBCLONE +syn keyword xsException XCPT_CATCH XCPT_RETHROW XCPT_TRY_END XCPT_TRY_START +syn keyword xsException dXCPT +syn keyword xsKeyword ALIAS: BOOT: CASE: CLEANUP: CODE: C_ARGS: DISABLE +syn keyword xsKeyword ENABLE FALLBACK: IN INCLUDE: INIT: INPUT: INTERFACE: +syn keyword xsKeyword INTERFACE_MACRO: IN_OUT IN_OUTLIST MODULE NO_INIT: +syn keyword xsKeyword NO_OUTPUT: OUT OUTLIST OUTPUT: OVERLOAD: PACKAGE +syn keyword xsKeyword POSTCALL: PPCODE: PREFIX PREINIT: PROTOTYPE: +syn keyword xsKeyword PROTOTYPES: REQUIRE: SCOPE: VERSIONCHECK: length +syn keyword xsFunction GetVars Gv_AMupdate PerlIO_clearerr PerlIO_close +syn keyword xsFunction PerlIO_eof PerlIO_error PerlIO_fileno PerlIO_fill +syn keyword xsFunction PerlIO_flush PerlIO_get_base PerlIO_get_bufsiz +syn keyword xsFunction PerlIO_get_cnt PerlIO_get_ptr PerlIO_read PerlIO_seek +syn keyword xsFunction PerlIO_set_cnt PerlIO_set_ptrcnt PerlIO_setlinebuf +syn keyword xsFunction PerlIO_stderr PerlIO_stdin PerlIO_stdout PerlIO_tell +syn keyword xsFunction PerlIO_unread PerlIO_write Perl_GetVars +syn keyword xsFunction Perl_Gv_AMupdate Perl_PerlIO_clearerr +syn keyword xsFunction Perl_PerlIO_close Perl_PerlIO_context_layers +syn keyword xsFunction Perl_PerlIO_eof Perl_PerlIO_error Perl_PerlIO_fileno +syn keyword xsFunction Perl_PerlIO_fill Perl_PerlIO_flush +syn keyword xsFunction Perl_PerlIO_get_base Perl_PerlIO_get_bufsiz +syn keyword xsFunction Perl_PerlIO_get_cnt Perl_PerlIO_get_ptr +syn keyword xsFunction Perl_PerlIO_read Perl_PerlIO_seek Perl_PerlIO_set_cnt +syn keyword xsFunction Perl_PerlIO_set_ptrcnt Perl_PerlIO_setlinebuf +syn keyword xsFunction Perl_PerlIO_stderr Perl_PerlIO_stdin +syn keyword xsFunction Perl_PerlIO_stdout Perl_PerlIO_tell Perl_PerlIO_unread +syn keyword xsFunction Perl_PerlIO_write Perl__get_regclass_nonbitmap_data +syn keyword xsFunction Perl__is_cur_LC_category_utf8 +syn keyword xsFunction Perl__is_in_locale_category Perl__is_uni_FOO +syn keyword xsFunction Perl__is_uni_perl_idcont Perl__is_uni_perl_idstart +syn keyword xsFunction Perl__is_utf8_FOO Perl__is_utf8_idcont +syn keyword xsFunction Perl__is_utf8_idstart Perl__is_utf8_mark +syn keyword xsFunction Perl__is_utf8_perl_idcont Perl__is_utf8_perl_idstart +syn keyword xsFunction Perl__is_utf8_xidcont Perl__is_utf8_xidstart +syn keyword xsFunction Perl__new_invlist_C_array Perl__to_uni_fold_flags +syn keyword xsFunction Perl__to_utf8_fold_flags Perl__to_utf8_lower_flags +syn keyword xsFunction Perl__to_utf8_title_flags Perl__to_utf8_upper_flags +syn keyword xsFunction Perl_alloccopstash Perl_amagic_call +syn keyword xsFunction Perl_amagic_deref_call Perl_any_dup +syn keyword xsFunction Perl_apply_attrs_string Perl_atfork_lock +syn keyword xsFunction Perl_atfork_unlock Perl_av_arylen_p Perl_av_clear +syn keyword xsFunction Perl_av_create_and_push Perl_av_create_and_unshift_one +syn keyword xsFunction Perl_av_delete Perl_av_exists Perl_av_extend +syn keyword xsFunction Perl_av_fetch Perl_av_fill Perl_av_iter_p Perl_av_len +syn keyword xsFunction Perl_av_make Perl_av_pop Perl_av_push Perl_av_shift +syn keyword xsFunction Perl_av_store Perl_av_undef Perl_av_unshift +syn keyword xsFunction Perl_block_end Perl_block_gimme Perl_block_start +syn keyword xsFunction Perl_blockhook_register Perl_bytes_cmp_utf8 +syn keyword xsFunction Perl_bytes_from_utf8 Perl_bytes_to_utf8 Perl_call_argv +syn keyword xsFunction Perl_call_atexit Perl_call_list Perl_call_method +syn keyword xsFunction Perl_call_pv Perl_call_sv Perl_caller_cx Perl_calloc +syn keyword xsFunction Perl_cast_i32 Perl_cast_iv Perl_cast_ulong +syn keyword xsFunction Perl_cast_uv Perl_ck_entersub_args_list +syn keyword xsFunction Perl_ck_entersub_args_proto +syn keyword xsFunction Perl_ck_entersub_args_proto_or_list Perl_ck_warner +syn keyword xsFunction Perl_ck_warner_d Perl_ckwarn Perl_ckwarn_d +syn keyword xsFunction Perl_clone_params_del Perl_clone_params_new +syn keyword xsFunction Perl_cop_fetch_label Perl_cop_store_label Perl_croak +syn keyword xsFunction Perl_croak_no_modify Perl_croak_nocontext +syn keyword xsFunction Perl_croak_sv Perl_croak_xs_usage Perl_csighandler +syn keyword xsFunction Perl_custom_op_desc Perl_custom_op_name +syn keyword xsFunction Perl_custom_op_register Perl_cv_clone Perl_cv_const_sv +syn keyword xsFunction Perl_cv_get_call_checker Perl_cv_name +syn keyword xsFunction Perl_cv_set_call_checker +syn keyword xsFunction Perl_cv_set_call_checker_flags Perl_cv_undef +syn keyword xsFunction Perl_cx_dump Perl_cx_dup Perl_cxinc Perl_deb +syn keyword xsFunction Perl_deb_nocontext Perl_debop Perl_debprofdump +syn keyword xsFunction Perl_debstack Perl_debstackptrs Perl_delimcpy +syn keyword xsFunction Perl_despatch_signals Perl_die Perl_die_nocontext +syn keyword xsFunction Perl_die_sv Perl_dirp_dup Perl_do_aspawn +syn keyword xsFunction Perl_do_binmode Perl_do_close Perl_do_gv_dump +syn keyword xsFunction Perl_do_gvgv_dump Perl_do_hv_dump Perl_do_join +syn keyword xsFunction Perl_do_magic_dump Perl_do_op_dump Perl_do_open9 +syn keyword xsFunction Perl_do_openn Perl_do_pmop_dump Perl_do_spawn +syn keyword xsFunction Perl_do_spawn_nowait Perl_do_sprintf Perl_do_sv_dump +syn keyword xsFunction Perl_doing_taint Perl_doref Perl_dounwind +syn keyword xsFunction Perl_dowantarray Perl_dump_all Perl_dump_c_backtrace +syn keyword xsFunction Perl_dump_eval Perl_dump_form Perl_dump_indent +syn keyword xsFunction Perl_dump_mstats Perl_dump_packsubs Perl_dump_sub +syn keyword xsFunction Perl_dump_vindent Perl_eval_pv Perl_eval_sv +syn keyword xsFunction Perl_fbm_compile Perl_fbm_instr Perl_filter_add +syn keyword xsFunction Perl_filter_del Perl_filter_read Perl_find_runcv +syn keyword xsFunction Perl_find_rundefsv Perl_foldEQ Perl_foldEQ_latin1 +syn keyword xsFunction Perl_foldEQ_locale Perl_foldEQ_utf8_flags Perl_form +syn keyword xsFunction Perl_form_nocontext Perl_fp_dup Perl_fprintf_nocontext +syn keyword xsFunction Perl_free_global_struct Perl_free_tmps Perl_get_av +syn keyword xsFunction Perl_get_c_backtrace_dump Perl_get_context Perl_get_cv +syn keyword xsFunction Perl_get_cvn_flags Perl_get_hv Perl_get_mstats +syn keyword xsFunction Perl_get_op_descs Perl_get_op_names Perl_get_ppaddr +syn keyword xsFunction Perl_get_sv Perl_get_vtbl Perl_getcwd_sv Perl_gp_dup +syn keyword xsFunction Perl_gp_free Perl_gp_ref Perl_grok_bin Perl_grok_hex +syn keyword xsFunction Perl_grok_infnan Perl_grok_number +syn keyword xsFunction Perl_grok_number_flags Perl_grok_numeric_radix +syn keyword xsFunction Perl_grok_oct Perl_gv_add_by_type Perl_gv_autoload_pv +syn keyword xsFunction Perl_gv_autoload_pvn Perl_gv_autoload_sv Perl_gv_check +syn keyword xsFunction Perl_gv_const_sv Perl_gv_dump Perl_gv_efullname +syn keyword xsFunction Perl_gv_efullname4 Perl_gv_fetchfile +syn keyword xsFunction Perl_gv_fetchfile_flags Perl_gv_fetchmeth_pv +syn keyword xsFunction Perl_gv_fetchmeth_pv_autoload Perl_gv_fetchmeth_pvn +syn keyword xsFunction Perl_gv_fetchmeth_pvn_autoload Perl_gv_fetchmeth_sv +syn keyword xsFunction Perl_gv_fetchmeth_sv_autoload +syn keyword xsFunction Perl_gv_fetchmethod_autoload +syn keyword xsFunction Perl_gv_fetchmethod_pv_flags +syn keyword xsFunction Perl_gv_fetchmethod_pvn_flags +syn keyword xsFunction Perl_gv_fetchmethod_sv_flags Perl_gv_fetchpv +syn keyword xsFunction Perl_gv_fetchpvn_flags Perl_gv_fetchsv +syn keyword xsFunction Perl_gv_fullname Perl_gv_fullname4 Perl_gv_handler +syn keyword xsFunction Perl_gv_init_pv Perl_gv_init_pvn Perl_gv_init_sv +syn keyword xsFunction Perl_gv_name_set Perl_gv_stashpv Perl_gv_stashpvn +syn keyword xsFunction Perl_gv_stashsv Perl_he_dup Perl_hek_dup +syn keyword xsFunction Perl_hv_assert Perl_hv_clear +syn keyword xsFunction Perl_hv_clear_placeholders Perl_hv_common +syn keyword xsFunction Perl_hv_common_key_len Perl_hv_copy_hints_hv +syn keyword xsFunction Perl_hv_delayfree_ent Perl_hv_eiter_p +syn keyword xsFunction Perl_hv_eiter_set Perl_hv_fill Perl_hv_free_ent +syn keyword xsFunction Perl_hv_iterinit Perl_hv_iterkey Perl_hv_iterkeysv +syn keyword xsFunction Perl_hv_iternext_flags Perl_hv_iternextsv +syn keyword xsFunction Perl_hv_iterval Perl_hv_ksplit Perl_hv_name_set +syn keyword xsFunction Perl_hv_placeholders_get Perl_hv_placeholders_set +syn keyword xsFunction Perl_hv_rand_set Perl_hv_riter_p Perl_hv_riter_set +syn keyword xsFunction Perl_hv_scalar Perl_init_global_struct +syn keyword xsFunction Perl_init_i18nl10n Perl_init_i18nl14n Perl_init_stacks +syn keyword xsFunction Perl_init_tm Perl_instr Perl_intro_my +syn keyword xsFunction Perl_is_invariant_string Perl_is_lvalue_sub +syn keyword xsFunction Perl_is_utf8_string Perl_is_utf8_string_loclen +syn keyword xsFunction Perl_isinfnan Perl_leave_scope Perl_lex_bufutf8 +syn keyword xsFunction Perl_lex_discard_to Perl_lex_grow_linestr +syn keyword xsFunction Perl_lex_next_chunk Perl_lex_peek_unichar +syn keyword xsFunction Perl_lex_read_space Perl_lex_read_to +syn keyword xsFunction Perl_lex_read_unichar Perl_lex_start Perl_lex_stuff_pv +syn keyword xsFunction Perl_lex_stuff_pvn Perl_lex_stuff_sv Perl_lex_unstuff +syn keyword xsFunction Perl_load_module Perl_load_module_nocontext +syn keyword xsFunction Perl_looks_like_number Perl_magic_dump Perl_malloc +syn keyword xsFunction Perl_markstack_grow Perl_mess Perl_mess_nocontext +syn keyword xsFunction Perl_mess_sv Perl_mfree Perl_mg_clear Perl_mg_copy +syn keyword xsFunction Perl_mg_dup Perl_mg_find Perl_mg_findext Perl_mg_free +syn keyword xsFunction Perl_mg_free_type Perl_mg_get Perl_mg_magical +syn keyword xsFunction Perl_mg_set Perl_mg_size Perl_mini_mktime +syn keyword xsFunction Perl_moreswitches Perl_mro_get_from_name +syn keyword xsFunction Perl_mro_get_linear_isa Perl_mro_get_private_data +syn keyword xsFunction Perl_mro_method_changed_in Perl_mro_register +syn keyword xsFunction Perl_mro_set_mro Perl_mro_set_private_data +syn keyword xsFunction Perl_my_atof Perl_my_atof2 Perl_my_bcopy Perl_my_bzero +syn keyword xsFunction Perl_my_chsize Perl_my_cxt_index Perl_my_cxt_init +syn keyword xsFunction Perl_my_dirfd Perl_my_exit Perl_my_failure_exit +syn keyword xsFunction Perl_my_fflush_all Perl_my_fork Perl_my_memcmp +syn keyword xsFunction Perl_my_memset Perl_my_pclose Perl_my_popen +syn keyword xsFunction Perl_my_popen_list Perl_my_setenv Perl_my_setlocale +syn keyword xsFunction Perl_my_snprintf Perl_my_socketpair Perl_my_sprintf +syn keyword xsFunction Perl_my_strerror Perl_my_strftime Perl_my_strlcat +syn keyword xsFunction Perl_my_strlcpy Perl_my_vsnprintf Perl_newANONATTRSUB +syn keyword xsFunction Perl_newANONHASH Perl_newANONLIST Perl_newANONSUB +syn keyword xsFunction Perl_newASSIGNOP Perl_newAVREF Perl_newBINOP +syn keyword xsFunction Perl_newCONDOP Perl_newCONSTSUB Perl_newCONSTSUB_flags +syn keyword xsFunction Perl_newCVREF Perl_newDEFSVOP Perl_newFORM +syn keyword xsFunction Perl_newFOROP Perl_newGIVENOP Perl_newGVOP +syn keyword xsFunction Perl_newGVREF Perl_newGVgen_flags Perl_newHVREF +syn keyword xsFunction Perl_newHVhv Perl_newLISTOP Perl_newLOGOP +syn keyword xsFunction Perl_newLOOPEX Perl_newLOOPOP Perl_newMETHOP +syn keyword xsFunction Perl_newMETHOP_named Perl_newMYSUB Perl_newNULLLIST +syn keyword xsFunction Perl_newOP Perl_newPADNAMELIST Perl_newPADNAMEouter +syn keyword xsFunction Perl_newPADNAMEpvn Perl_newPADOP Perl_newPMOP +syn keyword xsFunction Perl_newPROG Perl_newPVOP Perl_newRANGE Perl_newRV +syn keyword xsFunction Perl_newRV_noinc Perl_newSLICEOP Perl_newSTATEOP +syn keyword xsFunction Perl_newSV Perl_newSVOP Perl_newSVREF Perl_newSV_type +syn keyword xsFunction Perl_newSVhek Perl_newSViv Perl_newSVnv Perl_newSVpv +syn keyword xsFunction Perl_newSVpv_share Perl_newSVpvf +syn keyword xsFunction Perl_newSVpvf_nocontext Perl_newSVpvn +syn keyword xsFunction Perl_newSVpvn_flags Perl_newSVpvn_share Perl_newSVrv +syn keyword xsFunction Perl_newSVsv Perl_newSVuv Perl_newUNOP +syn keyword xsFunction Perl_newUNOP_AUX Perl_newWHENOP Perl_newWHILEOP +syn keyword xsFunction Perl_newXS Perl_newXS_flags Perl_new_collate +syn keyword xsFunction Perl_new_ctype Perl_new_numeric Perl_new_stackinfo +syn keyword xsFunction Perl_new_version Perl_ninstr Perl_nothreadhook +syn keyword xsFunction Perl_op_append_elem Perl_op_append_list +syn keyword xsFunction Perl_op_contextualize Perl_op_convert_list +syn keyword xsFunction Perl_op_dump Perl_op_free Perl_op_linklist +syn keyword xsFunction Perl_op_null Perl_op_parent Perl_op_prepend_elem +syn keyword xsFunction Perl_op_refcnt_lock Perl_op_refcnt_unlock +syn keyword xsFunction Perl_op_scope Perl_op_sibling_splice Perl_pack_cat +syn keyword xsFunction Perl_packlist Perl_pad_add_anon Perl_pad_add_name_pv +syn keyword xsFunction Perl_pad_add_name_pvn Perl_pad_add_name_sv +syn keyword xsFunction Perl_pad_alloc Perl_pad_compname_type +syn keyword xsFunction Perl_pad_findmy_pv Perl_pad_findmy_pvn +syn keyword xsFunction Perl_pad_findmy_sv Perl_pad_new Perl_pad_setsv +syn keyword xsFunction Perl_pad_sv Perl_pad_tidy Perl_padnamelist_fetch +syn keyword xsFunction Perl_padnamelist_store Perl_parse_arithexpr +syn keyword xsFunction Perl_parse_barestmt Perl_parse_block +syn keyword xsFunction Perl_parse_fullexpr Perl_parse_fullstmt +syn keyword xsFunction Perl_parse_label Perl_parse_listexpr +syn keyword xsFunction Perl_parse_stmtseq Perl_parse_termexpr Perl_parser_dup +syn keyword xsFunction Perl_pmop_dump Perl_pop_scope Perl_pregcomp +syn keyword xsFunction Perl_pregexec Perl_pregfree Perl_pregfree2 +syn keyword xsFunction Perl_prescan_version Perl_printf_nocontext +syn keyword xsFunction Perl_ptr_table_fetch Perl_ptr_table_free +syn keyword xsFunction Perl_ptr_table_new Perl_ptr_table_split +syn keyword xsFunction Perl_ptr_table_store Perl_push_scope Perl_pv_display +syn keyword xsFunction Perl_pv_escape Perl_pv_pretty Perl_pv_uni_display +syn keyword xsFunction Perl_quadmath_format_needed +syn keyword xsFunction Perl_quadmath_format_single Perl_re_compile +syn keyword xsFunction Perl_re_dup_guts Perl_re_intuit_start +syn keyword xsFunction Perl_re_intuit_string Perl_realloc Perl_reentrant_free +syn keyword xsFunction Perl_reentrant_init Perl_reentrant_retry +syn keyword xsFunction Perl_reentrant_size Perl_reg_named_buff_all +syn keyword xsFunction Perl_reg_named_buff_exists Perl_reg_named_buff_fetch +syn keyword xsFunction Perl_reg_named_buff_firstkey +syn keyword xsFunction Perl_reg_named_buff_nextkey Perl_reg_named_buff_scalar +syn keyword xsFunction Perl_regclass_swash Perl_regdump Perl_regdupe_internal +syn keyword xsFunction Perl_regexec_flags Perl_regfree_internal +syn keyword xsFunction Perl_reginitcolors Perl_regnext Perl_repeatcpy +syn keyword xsFunction Perl_require_pv Perl_rninstr Perl_rsignal +syn keyword xsFunction Perl_rsignal_state Perl_runops_debug +syn keyword xsFunction Perl_runops_standard Perl_rv2cv_op_cv Perl_rvpv_dup +syn keyword xsFunction Perl_safesyscalloc Perl_safesysfree Perl_safesysmalloc +syn keyword xsFunction Perl_safesysrealloc Perl_save_I16 Perl_save_I32 +syn keyword xsFunction Perl_save_I8 Perl_save_adelete Perl_save_aelem_flags +syn keyword xsFunction Perl_save_alloc Perl_save_aptr Perl_save_ary +syn keyword xsFunction Perl_save_bool Perl_save_clearsv Perl_save_delete +syn keyword xsFunction Perl_save_destructor Perl_save_destructor_x +syn keyword xsFunction Perl_save_generic_pvref Perl_save_generic_svref +syn keyword xsFunction Perl_save_gp Perl_save_hash Perl_save_hdelete +syn keyword xsFunction Perl_save_helem_flags Perl_save_hints Perl_save_hptr +syn keyword xsFunction Perl_save_int Perl_save_item Perl_save_iv +syn keyword xsFunction Perl_save_list Perl_save_long Perl_save_nogv +syn keyword xsFunction Perl_save_padsv_and_mortalize Perl_save_pptr +syn keyword xsFunction Perl_save_pushi32ptr Perl_save_pushptr +syn keyword xsFunction Perl_save_pushptrptr Perl_save_re_context +syn keyword xsFunction Perl_save_scalar Perl_save_set_svflags +syn keyword xsFunction Perl_save_shared_pvref Perl_save_sptr Perl_save_svref +syn keyword xsFunction Perl_save_vptr Perl_savepv Perl_savepvn +syn keyword xsFunction Perl_savesharedpv Perl_savesharedpvn +syn keyword xsFunction Perl_savesharedsvpv Perl_savestack_grow +syn keyword xsFunction Perl_savestack_grow_cnt Perl_savesvpv Perl_scan_bin +syn keyword xsFunction Perl_scan_hex Perl_scan_num Perl_scan_oct +syn keyword xsFunction Perl_scan_version Perl_scan_vstring Perl_seed +syn keyword xsFunction Perl_set_context Perl_set_numeric_local +syn keyword xsFunction Perl_set_numeric_radix Perl_set_numeric_standard +syn keyword xsFunction Perl_setdefout Perl_share_hek Perl_si_dup Perl_sortsv +syn keyword xsFunction Perl_sortsv_flags Perl_ss_dup Perl_stack_grow +syn keyword xsFunction Perl_start_subparse Perl_str_to_version +syn keyword xsFunction Perl_sv_2bool_flags Perl_sv_2cv Perl_sv_2io +syn keyword xsFunction Perl_sv_2iv_flags Perl_sv_2mortal Perl_sv_2nv_flags +syn keyword xsFunction Perl_sv_2pv_flags Perl_sv_2pvbyte Perl_sv_2pvutf8 +syn keyword xsFunction Perl_sv_2uv_flags Perl_sv_backoff Perl_sv_bless +syn keyword xsFunction Perl_sv_cat_decode Perl_sv_catpv Perl_sv_catpv_flags +syn keyword xsFunction Perl_sv_catpv_mg Perl_sv_catpvf Perl_sv_catpvf_mg +syn keyword xsFunction Perl_sv_catpvf_mg_nocontext Perl_sv_catpvf_nocontext +syn keyword xsFunction Perl_sv_catpvn_flags Perl_sv_catsv_flags Perl_sv_chop +syn keyword xsFunction Perl_sv_clear Perl_sv_cmp Perl_sv_cmp_flags +syn keyword xsFunction Perl_sv_cmp_locale Perl_sv_cmp_locale_flags +syn keyword xsFunction Perl_sv_collxfrm_flags Perl_sv_copypv_flags +syn keyword xsFunction Perl_sv_dec Perl_sv_dec_nomg Perl_sv_derived_from +syn keyword xsFunction Perl_sv_derived_from_pv Perl_sv_derived_from_pvn +syn keyword xsFunction Perl_sv_derived_from_sv Perl_sv_destroyable +syn keyword xsFunction Perl_sv_does Perl_sv_does_pv Perl_sv_does_pvn +syn keyword xsFunction Perl_sv_does_sv Perl_sv_dump Perl_sv_dup +syn keyword xsFunction Perl_sv_dup_inc Perl_sv_eq_flags +syn keyword xsFunction Perl_sv_force_normal_flags Perl_sv_free +syn keyword xsFunction Perl_sv_get_backrefs Perl_sv_gets Perl_sv_grow +syn keyword xsFunction Perl_sv_inc Perl_sv_inc_nomg Perl_sv_insert_flags +syn keyword xsFunction Perl_sv_isa Perl_sv_isobject Perl_sv_iv Perl_sv_len +syn keyword xsFunction Perl_sv_len_utf8 Perl_sv_magic Perl_sv_magicext +syn keyword xsFunction Perl_sv_newmortal Perl_sv_newref Perl_sv_nosharing +syn keyword xsFunction Perl_sv_nounlocking Perl_sv_nv Perl_sv_peek +syn keyword xsFunction Perl_sv_pos_b2u Perl_sv_pos_b2u_flags Perl_sv_pos_u2b +syn keyword xsFunction Perl_sv_pos_u2b_flags Perl_sv_pvbyten +syn keyword xsFunction Perl_sv_pvbyten_force Perl_sv_pvn +syn keyword xsFunction Perl_sv_pvn_force_flags Perl_sv_pvn_nomg +syn keyword xsFunction Perl_sv_pvutf8n Perl_sv_pvutf8n_force +syn keyword xsFunction Perl_sv_recode_to_utf8 Perl_sv_reftype Perl_sv_replace +syn keyword xsFunction Perl_sv_report_used Perl_sv_reset Perl_sv_rvweaken +syn keyword xsFunction Perl_sv_setiv Perl_sv_setiv_mg Perl_sv_setnv +syn keyword xsFunction Perl_sv_setnv_mg Perl_sv_setpv Perl_sv_setpv_mg +syn keyword xsFunction Perl_sv_setpvf Perl_sv_setpvf_mg +syn keyword xsFunction Perl_sv_setpvf_mg_nocontext Perl_sv_setpvf_nocontext +syn keyword xsFunction Perl_sv_setpviv Perl_sv_setpviv_mg Perl_sv_setpvn +syn keyword xsFunction Perl_sv_setpvn_mg Perl_sv_setref_iv Perl_sv_setref_nv +syn keyword xsFunction Perl_sv_setref_pv Perl_sv_setref_pvn Perl_sv_setref_uv +syn keyword xsFunction Perl_sv_setsv_flags Perl_sv_setsv_mg Perl_sv_setuv +syn keyword xsFunction Perl_sv_setuv_mg Perl_sv_tainted Perl_sv_true +syn keyword xsFunction Perl_sv_uni_display Perl_sv_unmagic Perl_sv_unmagicext +syn keyword xsFunction Perl_sv_unref_flags Perl_sv_untaint Perl_sv_upgrade +syn keyword xsFunction Perl_sv_usepvn_flags Perl_sv_utf8_decode +syn keyword xsFunction Perl_sv_utf8_downgrade Perl_sv_utf8_encode +syn keyword xsFunction Perl_sv_utf8_upgrade_flags_grow Perl_sv_uv +syn keyword xsFunction Perl_sv_vcatpvf Perl_sv_vcatpvf_mg Perl_sv_vcatpvfn +syn keyword xsFunction Perl_sv_vcatpvfn_flags Perl_sv_vsetpvf +syn keyword xsFunction Perl_sv_vsetpvf_mg Perl_sv_vsetpvfn Perl_swash_fetch +syn keyword xsFunction Perl_swash_init Perl_sync_locale Perl_sys_init +syn keyword xsFunction Perl_sys_init3 Perl_sys_intern_clear +syn keyword xsFunction Perl_sys_intern_dup Perl_sys_intern_init Perl_sys_term +syn keyword xsFunction Perl_taint_env Perl_taint_proper Perl_to_uni_lower +syn keyword xsFunction Perl_to_uni_title Perl_to_uni_upper Perl_to_utf8_case +syn keyword xsFunction Perl_unlnk Perl_unpack_str Perl_unpackstring +syn keyword xsFunction Perl_unsharepvn Perl_upg_version Perl_utf16_to_utf8 +syn keyword xsFunction Perl_utf16_to_utf8_reversed Perl_utf8_distance +syn keyword xsFunction Perl_utf8_hop Perl_utf8_length Perl_utf8_to_bytes +syn keyword xsFunction Perl_utf8n_to_uvchr Perl_utf8n_to_uvuni +syn keyword xsFunction Perl_uvoffuni_to_utf8_flags Perl_uvuni_to_utf8 +syn keyword xsFunction Perl_uvuni_to_utf8_flags Perl_valid_utf8_to_uvchr +syn keyword xsFunction Perl_vcmp Perl_vcroak Perl_vdeb Perl_vform +syn keyword xsFunction Perl_vload_module Perl_vmess Perl_vnewSVpvf +syn keyword xsFunction Perl_vnormal Perl_vnumify Perl_vstringify Perl_vverify +syn keyword xsFunction Perl_vwarn Perl_vwarner Perl_warn Perl_warn_nocontext +syn keyword xsFunction Perl_warn_sv Perl_warner Perl_warner_nocontext +syn keyword xsFunction Perl_whichsig_pv Perl_whichsig_pvn Perl_whichsig_sv +syn keyword xsFunction Perl_wrap_op_checker _get_regclass_nonbitmap_data +syn keyword xsFunction _is_cur_LC_category_utf8 _is_in_locale_category +syn keyword xsFunction _is_uni_FOO _is_uni_perl_idcont _is_uni_perl_idstart +syn keyword xsFunction _is_utf8_FOO _is_utf8_char_slow _is_utf8_idcont +syn keyword xsFunction _is_utf8_idstart _is_utf8_mark _is_utf8_perl_idcont +syn keyword xsFunction _is_utf8_perl_idstart _is_utf8_xidcont +syn keyword xsFunction _is_utf8_xidstart _new_invlist_C_array +syn keyword xsFunction _to_uni_fold_flags _to_utf8_fold_flags +syn keyword xsFunction _to_utf8_lower_flags _to_utf8_title_flags +syn keyword xsFunction _to_utf8_upper_flags alloccopstash amagic_call +syn keyword xsFunction amagic_deref_call any_dup append_utf8_from_native_byte +syn keyword xsFunction apply_attrs_string atfork_lock atfork_unlock av_clear +syn keyword xsFunction av_delete av_exists av_extend av_fetch av_fill av_len +syn keyword xsFunction av_make av_pop av_push av_shift av_store av_top_index +syn keyword xsFunction av_undef av_unshift block_end block_gimme block_start +syn keyword xsFunction bytes_cmp_utf8 bytes_from_utf8 bytes_to_utf8 call_argv +syn keyword xsFunction call_atexit call_list call_method call_pv call_sv +syn keyword xsFunction caller_cx cast_i32 cast_iv cast_ulong cast_uv +syn keyword xsFunction ck_entersub_args_list ck_entersub_args_proto +syn keyword xsFunction ck_entersub_args_proto_or_list ck_warner ck_warner_d +syn keyword xsFunction croak croak_memory_wrap croak_no_modify +syn keyword xsFunction croak_nocontext croak_sv croak_xs_usage csighandler +syn keyword xsFunction custom_op_desc custom_op_name cv_clone cv_const_sv +syn keyword xsFunction cv_get_call_checker cv_name cv_set_call_checker +syn keyword xsFunction cv_set_call_checker_flags cv_undef cx_dump cx_dup +syn keyword xsFunction cxinc deb deb_nocontext debop debprofdump debstack +syn keyword xsFunction debstackptrs delimcpy despatch_signals die +syn keyword xsFunction die_nocontext die_sv dirp_dup do_aspawn do_binmode +syn keyword xsFunction do_close do_gv_dump do_gvgv_dump do_hv_dump do_join +syn keyword xsFunction do_magic_dump do_op_dump do_open9 do_openn +syn keyword xsFunction do_pmop_dump do_spawn do_spawn_nowait do_sprintf +syn keyword xsFunction do_sv_dump doing_taint doref dounwind dowantarray +syn keyword xsFunction dump_all dump_c_backtrace dump_eval dump_form +syn keyword xsFunction dump_indent dump_mstats dump_packsubs dump_sub +syn keyword xsFunction dump_vindent eval_pv eval_sv fbm_compile fbm_instr +syn keyword xsFunction filter_add filter_del filter_read find_runcv +syn keyword xsFunction find_rundefsv foldEQ foldEQ_latin1 foldEQ_locale +syn keyword xsFunction foldEQ_utf8_flags form form_nocontext fp_dup +syn keyword xsFunction fprintf_nocontext free_global_struct free_tmps get_av +syn keyword xsFunction get_c_backtrace_dump get_context get_cv get_cvn_flags +syn keyword xsFunction get_hv get_mstats get_op_descs get_op_names get_ppaddr +syn keyword xsFunction get_sv get_vtbl getcwd_sv gp_dup gp_free gp_ref +syn keyword xsFunction grok_bin grok_hex grok_infnan grok_number +syn keyword xsFunction grok_number_flags grok_numeric_radix grok_oct +syn keyword xsFunction gv_add_by_type gv_autoload_pv gv_autoload_pvn +syn keyword xsFunction gv_autoload_sv gv_check gv_const_sv gv_dump +syn keyword xsFunction gv_efullname gv_efullname4 gv_fetchfile +syn keyword xsFunction gv_fetchfile_flags gv_fetchmeth_pv +syn keyword xsFunction gv_fetchmeth_pv_autoload gv_fetchmeth_pvn +syn keyword xsFunction gv_fetchmeth_pvn_autoload gv_fetchmeth_sv +syn keyword xsFunction gv_fetchmeth_sv_autoload gv_fetchmethod_autoload +syn keyword xsFunction gv_fetchmethod_pv_flags gv_fetchmethod_pvn_flags +syn keyword xsFunction gv_fetchmethod_sv_flags gv_fetchpv gv_fetchpvn_flags +syn keyword xsFunction gv_fetchsv gv_fullname gv_fullname4 gv_handler +syn keyword xsFunction gv_init_pv gv_init_pvn gv_init_sv gv_name_set +syn keyword xsFunction gv_stashpv gv_stashpvn gv_stashsv he_dup hek_dup +syn keyword xsFunction hv_clear hv_clear_placeholders hv_common +syn keyword xsFunction hv_common_key_len hv_copy_hints_hv hv_delayfree_ent +syn keyword xsFunction hv_free_ent hv_iterinit hv_iterkey hv_iterkeysv +syn keyword xsFunction hv_iternext_flags hv_iternextsv hv_iterval hv_ksplit +syn keyword xsFunction hv_name_set hv_rand_set hv_scalar init_global_struct +syn keyword xsFunction init_i18nl10n init_i18nl14n init_stacks init_tm instr +syn keyword xsFunction intro_my is_invariant_string is_lvalue_sub +syn keyword xsFunction is_safe_syscall is_utf8_string is_utf8_string_loclen +syn keyword xsFunction isinfnan leave_scope lex_bufutf8 lex_discard_to +syn keyword xsFunction lex_grow_linestr lex_next_chunk lex_peek_unichar +syn keyword xsFunction lex_read_space lex_read_to lex_read_unichar lex_start +syn keyword xsFunction lex_stuff_pv lex_stuff_pvn lex_stuff_sv lex_unstuff +syn keyword xsFunction load_module load_module_nocontext looks_like_number +syn keyword xsFunction magic_dump markstack_grow mess mess_nocontext mess_sv +syn keyword xsFunction mg_clear mg_copy mg_dup mg_find mg_findext mg_free +syn keyword xsFunction mg_free_type mg_get mg_magical mg_set mg_size +syn keyword xsFunction mini_mktime moreswitches mro_get_linear_isa +syn keyword xsFunction mro_method_changed_in my_atof my_atof2 my_bcopy +syn keyword xsFunction my_bzero my_chsize my_dirfd my_exit my_failure_exit +syn keyword xsFunction my_fflush_all my_fork my_memcmp my_memset my_pclose +syn keyword xsFunction my_popen my_popen_list my_setenv my_setlocale +syn keyword xsFunction my_socketpair my_strerror my_strftime newANONATTRSUB +syn keyword xsFunction newANONHASH newANONLIST newANONSUB newASSIGNOP +syn keyword xsFunction newAVREF newBINOP newCONDOP newCONSTSUB +syn keyword xsFunction newCONSTSUB_flags newCVREF newDEFSVOP newFORM newFOROP +syn keyword xsFunction newGIVENOP newGVOP newGVREF newGVgen_flags newHVREF +syn keyword xsFunction newHVhv newLISTOP newLOGOP newLOOPEX newLOOPOP +syn keyword xsFunction newMETHOP newMETHOP_named newMYSUB newNULLLIST newOP +syn keyword xsFunction newPADNAMELIST newPADNAMEouter newPADNAMEpvn newPADOP +syn keyword xsFunction newPMOP newPROG newPVOP newRANGE newRV newRV_noinc +syn keyword xsFunction newSLICEOP newSTATEOP newSV newSVOP newSVREF +syn keyword xsFunction newSV_type newSVhek newSViv newSVnv newSVpv +syn keyword xsFunction newSVpv_share newSVpvf newSVpvf_nocontext newSVpvn +syn keyword xsFunction newSVpvn_flags newSVpvn_share newSVrv newSVsv newSVuv +syn keyword xsFunction newUNOP newUNOP_AUX newWHENOP newWHILEOP newXS +syn keyword xsFunction newXS_flags new_collate new_ctype new_numeric +syn keyword xsFunction new_stackinfo new_version ninstr nothreadhook +syn keyword xsFunction op_append_elem op_append_list op_contextualize +syn keyword xsFunction op_convert_list op_dump op_free op_linklist op_null +syn keyword xsFunction op_parent op_prepend_elem op_refcnt_lock +syn keyword xsFunction op_refcnt_unlock op_scope op_sibling_splice pack_cat +syn keyword xsFunction packlist pad_add_anon pad_add_name_pv pad_add_name_pvn +syn keyword xsFunction pad_add_name_sv pad_alloc pad_compname_type +syn keyword xsFunction pad_findmy_pv pad_findmy_pvn pad_findmy_sv pad_new +syn keyword xsFunction pad_setsv pad_sv pad_tidy padnamelist_fetch +syn keyword xsFunction padnamelist_store parse_arithexpr parse_barestmt +syn keyword xsFunction parse_block parse_fullexpr parse_fullstmt parse_label +syn keyword xsFunction parse_listexpr parse_stmtseq parse_termexpr parser_dup +syn keyword xsFunction pmop_dump pop_scope pregcomp pregexec pregfree +syn keyword xsFunction pregfree2 prescan_version printf_nocontext +syn keyword xsFunction ptr_table_fetch ptr_table_free ptr_table_new +syn keyword xsFunction ptr_table_split ptr_table_store push_scope pv_display +syn keyword xsFunction pv_escape pv_pretty pv_uni_display +syn keyword xsFunction quadmath_format_needed quadmath_format_single +syn keyword xsFunction re_compile re_dup_guts re_intuit_start +syn keyword xsFunction re_intuit_string reentrant_free reentrant_init +syn keyword xsFunction reentrant_retry reentrant_size reg_named_buff_all +syn keyword xsFunction reg_named_buff_exists reg_named_buff_fetch +syn keyword xsFunction reg_named_buff_firstkey reg_named_buff_nextkey +syn keyword xsFunction reg_named_buff_scalar regclass_swash regdump +syn keyword xsFunction regdupe_internal regexec_flags regfree_internal +syn keyword xsFunction reginitcolors regnext repeatcpy require_pv rninstr +syn keyword xsFunction rsignal rsignal_state runops_debug runops_standard +syn keyword xsFunction rv2cv_op_cv rvpv_dup safesyscalloc safesysfree +syn keyword xsFunction safesysmalloc safesysrealloc save_I16 save_I32 save_I8 +syn keyword xsFunction save_adelete save_aelem_flags save_alloc save_aptr +syn keyword xsFunction save_ary save_bool save_clearsv save_delete +syn keyword xsFunction save_destructor save_destructor_x save_generic_pvref +syn keyword xsFunction save_generic_svref save_gp save_hash save_hdelete +syn keyword xsFunction save_helem_flags save_hints save_hptr save_int +syn keyword xsFunction save_item save_iv save_list save_long save_nogv +syn keyword xsFunction save_padsv_and_mortalize save_pptr save_pushi32ptr +syn keyword xsFunction save_pushptr save_pushptrptr save_re_context +syn keyword xsFunction save_scalar save_set_svflags save_shared_pvref +syn keyword xsFunction save_sptr save_svref save_vptr savepv savepvn +syn keyword xsFunction savesharedpv savesharedpvn savesharedsvpv +syn keyword xsFunction savestack_grow savestack_grow_cnt savesvpv scan_bin +syn keyword xsFunction scan_hex scan_num scan_oct scan_version scan_vstring +syn keyword xsFunction seed set_context set_numeric_local set_numeric_radix +syn keyword xsFunction set_numeric_standard setdefout share_hek si_dup sortsv +syn keyword xsFunction sortsv_flags ss_dup stack_grow start_subparse +syn keyword xsFunction str_to_version sv_2bool_flags sv_2cv sv_2io +syn keyword xsFunction sv_2iv_flags sv_2mortal sv_2nv_flags sv_2pv_flags +syn keyword xsFunction sv_2pvbyte sv_2pvutf8 sv_2uv_flags sv_backoff sv_bless +syn keyword xsFunction sv_cat_decode sv_catpv sv_catpv_flags sv_catpv_mg +syn keyword xsFunction sv_catpvf sv_catpvf_mg sv_catpvf_mg_nocontext +syn keyword xsFunction sv_catpvf_nocontext sv_catpvn_flags sv_catsv_flags +syn keyword xsFunction sv_chop sv_clear sv_cmp_flags sv_cmp_locale_flags +syn keyword xsFunction sv_collxfrm_flags sv_copypv_flags sv_dec sv_dec_nomg +syn keyword xsFunction sv_derived_from sv_derived_from_pv sv_derived_from_pvn +syn keyword xsFunction sv_derived_from_sv sv_destroyable sv_does sv_does_pv +syn keyword xsFunction sv_does_pvn sv_does_sv sv_dump sv_dup sv_dup_inc +syn keyword xsFunction sv_eq_flags sv_force_normal_flags sv_free +syn keyword xsFunction sv_get_backrefs sv_gets sv_grow sv_inc sv_inc_nomg +syn keyword xsFunction sv_insert_flags sv_isa sv_isobject sv_iv sv_len +syn keyword xsFunction sv_len_utf8 sv_magic sv_magicext sv_newmortal +syn keyword xsFunction sv_newref sv_nosharing sv_nounlocking sv_nv sv_peek +syn keyword xsFunction sv_pos_b2u sv_pos_b2u_flags sv_pos_u2b +syn keyword xsFunction sv_pos_u2b_flags sv_pvbyten sv_pvbyten_force sv_pvn +syn keyword xsFunction sv_pvn_force_flags sv_pvn_nomg sv_pvutf8n +syn keyword xsFunction sv_pvutf8n_force sv_recode_to_utf8 sv_reftype +syn keyword xsFunction sv_replace sv_report_used sv_reset sv_rvweaken +syn keyword xsFunction sv_setiv sv_setiv_mg sv_setnv sv_setnv_mg sv_setpv +syn keyword xsFunction sv_setpv_mg sv_setpvf sv_setpvf_mg +syn keyword xsFunction sv_setpvf_mg_nocontext sv_setpvf_nocontext sv_setpviv +syn keyword xsFunction sv_setpviv_mg sv_setpvn sv_setpvn_mg sv_setref_iv +syn keyword xsFunction sv_setref_nv sv_setref_pv sv_setref_pvn sv_setref_uv +syn keyword xsFunction sv_setsv_flags sv_setsv_mg sv_setuv sv_setuv_mg +syn keyword xsFunction sv_tainted sv_true sv_uni_display sv_unmagic +syn keyword xsFunction sv_unmagicext sv_unref_flags sv_untaint sv_upgrade +syn keyword xsFunction sv_usepvn_flags sv_utf8_decode sv_utf8_downgrade +syn keyword xsFunction sv_utf8_encode sv_utf8_upgrade_flags_grow sv_uv +syn keyword xsFunction sv_vcatpvf sv_vcatpvf_mg sv_vcatpvfn sv_vcatpvfn_flags +syn keyword xsFunction sv_vsetpvf sv_vsetpvf_mg sv_vsetpvfn swash_fetch +syn keyword xsFunction swash_init sync_locale sys_intern_clear sys_intern_dup +syn keyword xsFunction sys_intern_init taint_env taint_proper to_uni_lower +syn keyword xsFunction to_uni_title to_uni_upper to_utf8_case unlnk +syn keyword xsFunction unpack_str unpackstring unsharepvn upg_version +syn keyword xsFunction utf16_to_utf8 utf16_to_utf8_reversed utf8_distance +syn keyword xsFunction utf8_hop utf8_length utf8_to_bytes utf8n_to_uvchr +syn keyword xsFunction utf8n_to_uvuni uvoffuni_to_utf8_flags uvuni_to_utf8 +syn keyword xsFunction uvuni_to_utf8_flags valid_utf8_to_uvchr vcmp vcroak +syn keyword xsFunction vdeb vform vload_module vmess vnewSVpvf vnormal +syn keyword xsFunction vnumify vstringify vverify vwarn vwarner warn +syn keyword xsFunction warn_nocontext warn_sv warner warner_nocontext +syn keyword xsFunction whichsig_pv whichsig_pvn whichsig_sv wrap_op_checker +syn keyword xsVariable MARK MY_CXT ORIGMARK PL_I PL_No PL_Vars PL_VarsPtr +syn keyword xsVariable PL_Yes PL_a2e PL_bincompat_options PL_bitcount +syn keyword xsVariable PL_block_type PL_bufend PL_bufptr PL_charclass +syn keyword xsVariable PL_check PL_copline PL_core_reg_engine PL_cshname +syn keyword xsVariable PL_e2a PL_e2utf PL_error_count PL_expect PL_fold +syn keyword xsVariable PL_fold_latin1 PL_fold_locale PL_force_link_funcs +syn keyword xsVariable PL_freq PL_global_struct_size PL_hexdigit PL_in_my +syn keyword xsVariable PL_in_my_stash PL_interp_size PL_interp_size_5_18_0 +syn keyword xsVariable PL_last_lop PL_last_lop_op PL_last_uni PL_latin1_lc +syn keyword xsVariable PL_lex_allbrackets PL_lex_brackets PL_lex_brackstack +syn keyword xsVariable PL_lex_casemods PL_lex_casestack PL_lex_defer +syn keyword xsVariable PL_lex_dojoin PL_lex_fakeeof PL_lex_formbrack +syn keyword xsVariable PL_lex_inpat PL_lex_inwhat PL_lex_op PL_lex_repl +syn keyword xsVariable PL_lex_starts PL_lex_state PL_lex_stuff PL_linestart +syn keyword xsVariable PL_linestr PL_magic_data PL_magic_vtable_names +syn keyword xsVariable PL_memory_wrap PL_mod_latin1_uc PL_multi_close +syn keyword xsVariable PL_multi_end PL_multi_open PL_multi_start PL_nexttoke +syn keyword xsVariable PL_nexttype PL_nextval PL_no_aelem PL_no_dir_func +syn keyword xsVariable PL_no_func PL_no_helem_sv PL_no_localize_ref PL_no_mem +syn keyword xsVariable PL_no_modify PL_no_myglob PL_no_security +syn keyword xsVariable PL_no_sock_func PL_no_symref PL_no_symref_sv +syn keyword xsVariable PL_no_usym PL_no_wrongref PL_oldbufptr PL_oldoldbufptr +syn keyword xsVariable PL_op_desc PL_op_name PL_op_private_bitdef_ix +syn keyword xsVariable PL_op_private_bitdefs PL_op_private_bitfields +syn keyword xsVariable PL_op_private_labels PL_op_private_valid PL_opargs +syn keyword xsVariable PL_phase_names PL_ppaddr PL_preambled +syn keyword xsVariable PL_reg_extflags_name PL_reg_intflags_name PL_reg_name +syn keyword xsVariable PL_regkind PL_revision PL_rsfp PL_rsfp_filters +syn keyword xsVariable PL_runops_dbg PL_runops_std PL_sh_path PL_sig_name +syn keyword xsVariable PL_sig_num PL_simple PL_simple_bitmask PL_sublex_info +syn keyword xsVariable PL_subversion PL_tokenbuf PL_utf2e PL_utf8skip +syn keyword xsVariable PL_uudmap PL_uuemap PL_valid_types_IVX +syn keyword xsVariable PL_valid_types_IV_set PL_valid_types_NVX +syn keyword xsVariable PL_valid_types_NV_set PL_valid_types_PVX +syn keyword xsVariable PL_valid_types_RV PL_varies PL_varies_bitmask +syn keyword xsVariable PL_version PL_warn_nl PL_warn_nosemi PL_warn_reserved +syn keyword xsVariable PL_warn_uninit PL_warn_uninit_sv RETVAL SP TARG +syn keyword xsVariable _aMY_CXT _aTHX aMY_CXT aMY_CXT_ aTHX aTHX_ items +syn keyword xsMacro ABORT ACCEPT ADDOP AHOCORASICK AHOCORASICKC +syn keyword xsMacro ALLOC_THREAD_KEY AMG_CALLun AMG_CALLunary AMGf_assign +syn keyword xsMacro AMGf_noleft AMGf_noright AMGf_numarg AMGf_numeric +syn keyword xsMacro AMGf_set AMGf_unary AMGf_want_list AMGfallNEVER AMGfallNO +syn keyword xsMacro AMGfallYES AMT_AMAGIC AMT_AMAGIC_off AMT_AMAGIC_on +syn keyword xsMacro AMTf_AMAGIC ANDAND ANDOP ANGSTROM_SIGN ANONSUB ANYOF +syn keyword xsMacro ANYOFL ANYOF_ALNUM ANYOF_ALNUML ANYOF_ALPHA +syn keyword xsMacro ANYOF_ALPHANUMERIC ANYOF_ASCII ANYOF_BIT ANYOF_BITMAP +syn keyword xsMacro ANYOF_BITMAP_BYTE ANYOF_BITMAP_CLEAR +syn keyword xsMacro ANYOF_BITMAP_CLEARALL ANYOF_BITMAP_SET +syn keyword xsMacro ANYOF_BITMAP_SETALL ANYOF_BITMAP_SIZE ANYOF_BITMAP_TEST +syn keyword xsMacro ANYOF_BITMAP_ZERO ANYOF_BLANK ANYOF_CASED +syn keyword xsMacro ANYOF_CLASS_CLEAR ANYOF_CLASS_OR ANYOF_CLASS_SET +syn keyword xsMacro ANYOF_CLASS_SETALL ANYOF_CLASS_TEST +syn keyword xsMacro ANYOF_CLASS_TEST_ANY_SET ANYOF_CLASS_ZERO ANYOF_CNTRL +syn keyword xsMacro ANYOF_COMMON_FLAGS ANYOF_DIGIT ANYOF_FLAGS +syn keyword xsMacro ANYOF_FLAGS_ALL ANYOF_FOLD_SHARP_S ANYOF_GRAPH +syn keyword xsMacro ANYOF_HAS_NONBITMAP_NON_UTF8_MATCHES +syn keyword xsMacro ANYOF_HAS_UTF8_NONBITMAP_MATCHES ANYOF_HORIZWS +syn keyword xsMacro ANYOF_INVERT ANYOF_LOCALE_FLAGS ANYOF_LOC_FOLD +syn keyword xsMacro ANYOF_LOWER ANYOF_MATCHES_ALL_ABOVE_BITMAP +syn keyword xsMacro ANYOF_MATCHES_ALL_NON_UTF8_NON_ASCII ANYOF_MATCHES_POSIXL +syn keyword xsMacro ANYOF_MAX ANYOF_NALNUM ANYOF_NALNUML ANYOF_NALPHA +syn keyword xsMacro ANYOF_NALPHANUMERIC ANYOF_NASCII ANYOF_NBLANK +syn keyword xsMacro ANYOF_NCASED ANYOF_NCNTRL ANYOF_NDIGIT ANYOF_NGRAPH +syn keyword xsMacro ANYOF_NHORIZWS ANYOF_NLOWER ANYOF_NPRINT ANYOF_NPUNCT +syn keyword xsMacro ANYOF_NSPACE ANYOF_NSPACEL ANYOF_NUPPER ANYOF_NVERTWS +syn keyword xsMacro ANYOF_NWORDCHAR ANYOF_NXDIGIT ANYOF_ONLY_HAS_BITMAP +syn keyword xsMacro ANYOF_POSIXL_AND ANYOF_POSIXL_CLEAR ANYOF_POSIXL_MAX +syn keyword xsMacro ANYOF_POSIXL_OR ANYOF_POSIXL_SET ANYOF_POSIXL_SETALL +syn keyword xsMacro ANYOF_POSIXL_SKIP ANYOF_POSIXL_SSC_TEST_ALL_SET +syn keyword xsMacro ANYOF_POSIXL_SSC_TEST_ANY_SET ANYOF_POSIXL_TEST +syn keyword xsMacro ANYOF_POSIXL_TEST_ALL_SET ANYOF_POSIXL_TEST_ANY_SET +syn keyword xsMacro ANYOF_POSIXL_ZERO ANYOF_PRINT ANYOF_PUNCT ANYOF_SKIP +syn keyword xsMacro ANYOF_SPACE ANYOF_SPACEL ANYOF_UNIPROP ANYOF_UPPER +syn keyword xsMacro ANYOF_VERTWS ANYOF_WARN_SUPER ANYOF_WORDCHAR ANYOF_XDIGIT +syn keyword xsMacro ARCHLIB ARCHLIB_EXP ARCHNAME ARG ARG1 ARG1_LOC ARG1_SET +syn keyword xsMacro ARG2 ARG2L ARG2L_LOC ARG2L_SET ARG2_LOC ARG2_SET ARGTARG +syn keyword xsMacro ARG_LOC ARG_SET ARG_VALUE ARG__SET ARROW +syn keyword xsMacro ASCII_MORE_RESTRICT_PAT_MODS ASCII_RESTRICT_PAT_MOD +syn keyword xsMacro ASCII_RESTRICT_PAT_MODS ASCII_TO_NATIVE ASCTIME_R_PROTO +syn keyword xsMacro ASSERT_CURPAD_ACTIVE ASSERT_CURPAD_LEGAL ASSIGNOP ASSUME +syn keyword xsMacro Atof Atol Atoul AvALLOC AvARRAY AvARYLEN AvFILL AvFILLp +syn keyword xsMacro AvMAX AvREAL AvREALISH AvREAL_off AvREAL_on AvREAL_only +syn keyword xsMacro AvREIFY AvREIFY_off AvREIFY_on AvREIFY_only BADVERSION +syn keyword xsMacro BASEOP BHKf_bhk_eval BHKf_bhk_post_end BHKf_bhk_pre_end +syn keyword xsMacro BHKf_bhk_start BIN BIN_EXP BITANDOP BITMAP_BYTE +syn keyword xsMacro BITMAP_TEST BITOROP BIT_BUCKET BIT_DIGITS BOL +syn keyword xsMacro BOM_UTF8_FIRST_BYTE BOM_UTF8_TAIL BOUND BOUNDA BOUNDL +syn keyword xsMacro BOUNDU BRANCH BRANCHJ BRANCH_next BRANCH_next_fail +syn keyword xsMacro BSD_GETPGRP BSD_SETPGRP BSDish BUFSIZ BYTEORDER +syn keyword xsMacro BhkDISABLE BhkENABLE BhkENTRY BhkENTRY_set BhkFLAGS Bit +syn keyword xsMacro BmFLAGS BmPREVIOUS BmRARE BmUSEFUL CALLREGCOMP +syn keyword xsMacro CALLREGCOMP_ENG CALLREGDUPE CALLREGDUPE_PVT CALLREGEXEC +syn keyword xsMacro CALLREGFREE CALLREGFREE_PVT CALLREG_INTUIT_START +syn keyword xsMacro CALLREG_INTUIT_STRING CALLREG_NAMED_BUFF_ALL +syn keyword xsMacro CALLREG_NAMED_BUFF_CLEAR CALLREG_NAMED_BUFF_COUNT +syn keyword xsMacro CALLREG_NAMED_BUFF_DELETE CALLREG_NAMED_BUFF_EXISTS +syn keyword xsMacro CALLREG_NAMED_BUFF_FETCH CALLREG_NAMED_BUFF_FIRSTKEY +syn keyword xsMacro CALLREG_NAMED_BUFF_NEXTKEY CALLREG_NAMED_BUFF_SCALAR +syn keyword xsMacro CALLREG_NAMED_BUFF_STORE CALLREG_NUMBUF_FETCH +syn keyword xsMacro CALLREG_NUMBUF_LENGTH CALLREG_NUMBUF_STORE +syn keyword xsMacro CALLREG_PACKAGE CALLRUNOPS CALL_BLOCK_HOOKS +syn keyword xsMacro CALL_CHECKER_REQUIRE_GV CALL_FPTR CANY CAN_COW_FLAGS +syn keyword xsMacro CAN_COW_MASK CAN_PROTOTYPE CAN_VAPROTO +syn keyword xsMacro CASE_STD_PMMOD_FLAGS_PARSE_SET CASTFLAGS CASTNEGFLOAT +syn keyword xsMacro CAT2 CATCH_GET CATCH_SET CHANGE_MULTICALL_FLAGS CHARBITS +syn keyword xsMacro CHARSET_PAT_MODS CHECK_MALLOC_TAINT +syn keyword xsMacro CHECK_MALLOC_TOO_LATE_FOR CHECK_MALLOC_TOO_LATE_FOR_ +syn keyword xsMacro CLEAR_ARGARRAY CLEAR_ERRSV CLONEf_CLONE_HOST +syn keyword xsMacro CLONEf_COPY_STACKS CLONEf_JOIN_IN CLONEf_KEEP_PTR_TABLE +syn keyword xsMacro CLOSE CLUMP CLUMP_2IV CLUMP_2UV COLONATTR +syn keyword xsMacro COMBINING_GRAVE_ACCENT_UTF8 COMMIT COMMIT_next +syn keyword xsMacro COMMIT_next_fail COND_BROADCAST COND_DESTROY COND_INIT +syn keyword xsMacro COND_SIGNAL COND_WAIT CONTINUE CONTINUE_PAT_MOD +syn keyword xsMacro COPHH_KEY_UTF8 COP_SEQMAX_INC COP_SEQ_RANGE_HIGH +syn keyword xsMacro COP_SEQ_RANGE_LOW CPERLarg CPERLarg_ CPERLscope CPPLAST +syn keyword xsMacro CPPMINUS CPPRUN CPPSTDIN CRYPT_R_PROTO CR_NATIVE CSH +syn keyword xsMacro CTERMID_R_PROTO CTIME_R_PROTO CTYPE256 CURLY CURLYM +syn keyword xsMacro CURLYM_A CURLYM_A_fail CURLYM_B CURLYM_B_fail CURLYN +syn keyword xsMacro CURLYX CURLYX_end CURLYX_end_fail CURLY_B_max +syn keyword xsMacro CURLY_B_max_fail CURLY_B_min CURLY_B_min_fail +syn keyword xsMacro CURLY_B_min_known CURLY_B_min_known_fail +syn keyword xsMacro CURRENT_FEATURE_BUNDLE CURRENT_HINTS CUTGROUP +syn keyword xsMacro CUTGROUP_next CUTGROUP_next_fail CV_NAME_NOTQUAL +syn keyword xsMacro CV_UNDEF_KEEP_NAME CVf_ANON CVf_ANONCONST CVf_AUTOLOAD +syn keyword xsMacro CVf_BUILTIN_ATTRS CVf_CLONE CVf_CLONED CVf_CONST +syn keyword xsMacro CVf_CVGV_RC CVf_DYNFILE CVf_HASEVAL CVf_ISXSUB +syn keyword xsMacro CVf_LEXICAL CVf_LVALUE CVf_METHOD CVf_NAMED CVf_NODEBUG +syn keyword xsMacro CVf_SLABBED CVf_UNIQUE CVf_WEAKOUTSIDE CXINC CXTYPEMASK +syn keyword xsMacro CX_CURPAD_SAVE CX_CURPAD_SV CXp_FOR_DEF CXp_FOR_LVREF +syn keyword xsMacro CXp_HASARGS CXp_MULTICALL CXp_ONCE CXp_REAL CXp_SUB_RE +syn keyword xsMacro CXp_SUB_RE_FAKE CXp_TRYBLOCK C_ARRAY_END C_ARRAY_LENGTH +syn keyword xsMacro C_FAC_POSIX CopFILE CopFILEAV CopFILEAVx CopFILEGV +syn keyword xsMacro CopFILEGV_set CopFILESV CopFILE_free CopFILE_set +syn keyword xsMacro CopFILE_setn CopHINTHASH_get CopHINTHASH_set CopHINTS_get +syn keyword xsMacro CopHINTS_set CopLABEL CopLABEL_alloc CopLABEL_len +syn keyword xsMacro CopLABEL_len_flags CopLINE CopLINE_dec CopLINE_inc +syn keyword xsMacro CopLINE_set CopSTASH CopSTASHPV CopSTASHPV_set +syn keyword xsMacro CopSTASH_eq CopSTASH_ne CopSTASH_set Copy CopyD CowREFCNT +syn keyword xsMacro Ctl CvANON CvANONCONST CvANONCONST_off CvANONCONST_on +syn keyword xsMacro CvANON_off CvANON_on CvAUTOLOAD CvAUTOLOAD_off +syn keyword xsMacro CvAUTOLOAD_on CvCLONE CvCLONED CvCLONED_off CvCLONED_on +syn keyword xsMacro CvCLONE_off CvCLONE_on CvCONST CvCONST_off CvCONST_on +syn keyword xsMacro CvCVGV_RC CvCVGV_RC_off CvCVGV_RC_on CvDEPTH +syn keyword xsMacro CvDEPTHunsafe CvDYNFILE CvDYNFILE_off CvDYNFILE_on CvEVAL +syn keyword xsMacro CvEVAL_off CvEVAL_on CvFILE CvFILEGV CvFILE_set_from_cop +syn keyword xsMacro CvFLAGS CvGV CvGV_set CvHASEVAL CvHASEVAL_off +syn keyword xsMacro CvHASEVAL_on CvHASGV CvHSCXT CvISXSUB CvISXSUB_off +syn keyword xsMacro CvISXSUB_on CvLEXICAL CvLEXICAL_off CvLEXICAL_on CvLVALUE +syn keyword xsMacro CvLVALUE_off CvLVALUE_on CvMETHOD CvMETHOD_off +syn keyword xsMacro CvMETHOD_on CvNAMED CvNAMED_off CvNAMED_on CvNAME_HEK_set +syn keyword xsMacro CvNODEBUG CvNODEBUG_off CvNODEBUG_on CvOUTSIDE +syn keyword xsMacro CvOUTSIDE_SEQ CvPADLIST CvPADLIST_set CvPROTO CvPROTOLEN +syn keyword xsMacro CvROOT CvSLABBED CvSLABBED_off CvSLABBED_on CvSPECIAL +syn keyword xsMacro CvSPECIAL_off CvSPECIAL_on CvSTART CvSTASH CvSTASH_set +syn keyword xsMacro CvUNIQUE CvUNIQUE_off CvUNIQUE_on CvWEAKOUTSIDE +syn keyword xsMacro CvWEAKOUTSIDE_off CvWEAKOUTSIDE_on CvXSUB CvXSUBANY +syn keyword xsMacro CxFOREACH CxFOREACHDEF CxHASARGS CxITERVAR +syn keyword xsMacro CxITERVAR_PADSV CxLABEL CxLABEL_len CxLABEL_len_flags +syn keyword xsMacro CxLVAL CxMULTICALL CxOLD_IN_EVAL CxOLD_OP_TYPE CxONCE +syn keyword xsMacro CxPADLOOP CxPOPSUB_DONE CxREALEVAL CxTRYBLOCK CxTYPE +syn keyword xsMacro CxTYPE_is_LOOP DBL_DIG DBL_MAX DBL_MIN DBM_ckFilter +syn keyword xsMacro DBM_setFilter DBVARMG_COUNT DBVARMG_SIGNAL DBVARMG_SINGLE +syn keyword xsMacro DBVARMG_TRACE DB_VERSION_MAJOR_CFG DB_VERSION_MINOR_CFG +syn keyword xsMacro DB_VERSION_PATCH_CFG DEBUG_A DEBUG_A_FLAG DEBUG_A_TEST +syn keyword xsMacro DEBUG_A_TEST_ DEBUG_B DEBUG_BUFFERS_r DEBUG_B_FLAG +syn keyword xsMacro DEBUG_B_TEST DEBUG_B_TEST_ DEBUG_C DEBUG_COMPILE_r +syn keyword xsMacro DEBUG_CX DEBUG_C_FLAG DEBUG_C_TEST DEBUG_C_TEST_ DEBUG_D +syn keyword xsMacro DEBUG_DB_RECURSE_FLAG DEBUG_DUMP_r DEBUG_D_FLAG +syn keyword xsMacro DEBUG_D_TEST DEBUG_D_TEST_ DEBUG_EXECUTE_r DEBUG_EXTRA_r +syn keyword xsMacro DEBUG_FLAGS_r DEBUG_GPOS_r DEBUG_H DEBUG_H_FLAG +syn keyword xsMacro DEBUG_H_TEST DEBUG_H_TEST_ DEBUG_INTUIT_r DEBUG_J_FLAG +syn keyword xsMacro DEBUG_J_TEST DEBUG_J_TEST_ DEBUG_L DEBUG_L_FLAG +syn keyword xsMacro DEBUG_L_TEST DEBUG_L_TEST_ DEBUG_M DEBUG_MASK +syn keyword xsMacro DEBUG_MATCH_r DEBUG_M_FLAG DEBUG_M_TEST DEBUG_M_TEST_ +syn keyword xsMacro DEBUG_OFFSETS_r DEBUG_OPTIMISE_MORE_r DEBUG_OPTIMISE_r +syn keyword xsMacro DEBUG_P DEBUG_PARSE_r DEBUG_P_FLAG DEBUG_P_TEST +syn keyword xsMacro DEBUG_P_TEST_ DEBUG_Pv DEBUG_Pv_TEST DEBUG_Pv_TEST_ +syn keyword xsMacro DEBUG_R DEBUG_R_FLAG DEBUG_R_TEST DEBUG_R_TEST_ DEBUG_S +syn keyword xsMacro DEBUG_SCOPE DEBUG_STACK_r DEBUG_STATE_r DEBUG_S_FLAG +syn keyword xsMacro DEBUG_S_TEST DEBUG_S_TEST_ DEBUG_T DEBUG_TEST_r +syn keyword xsMacro DEBUG_TOP_FLAG DEBUG_TRIE_COMPILE_MORE_r +syn keyword xsMacro DEBUG_TRIE_COMPILE_r DEBUG_TRIE_EXECUTE_MORE_r +syn keyword xsMacro DEBUG_TRIE_EXECUTE_r DEBUG_TRIE_r DEBUG_T_FLAG +syn keyword xsMacro DEBUG_T_TEST DEBUG_T_TEST_ DEBUG_U DEBUG_U_FLAG +syn keyword xsMacro DEBUG_U_TEST DEBUG_U_TEST_ DEBUG_Uv DEBUG_Uv_TEST +syn keyword xsMacro DEBUG_Uv_TEST_ DEBUG_X DEBUG_X_FLAG DEBUG_X_TEST +syn keyword xsMacro DEBUG_X_TEST_ DEBUG_Xv DEBUG_Xv_TEST DEBUG_Xv_TEST_ +syn keyword xsMacro DEBUG__ DEBUG_c DEBUG_c_FLAG DEBUG_c_TEST DEBUG_c_TEST_ +syn keyword xsMacro DEBUG_f DEBUG_f_FLAG DEBUG_f_TEST DEBUG_f_TEST_ DEBUG_l +syn keyword xsMacro DEBUG_l_FLAG DEBUG_l_TEST DEBUG_l_TEST_ DEBUG_m +syn keyword xsMacro DEBUG_m_FLAG DEBUG_m_TEST DEBUG_m_TEST_ DEBUG_o +syn keyword xsMacro DEBUG_o_FLAG DEBUG_o_TEST DEBUG_o_TEST_ DEBUG_p +syn keyword xsMacro DEBUG_p_FLAG DEBUG_p_TEST DEBUG_p_TEST_ DEBUG_q +syn keyword xsMacro DEBUG_q_FLAG DEBUG_q_TEST DEBUG_q_TEST_ DEBUG_r +syn keyword xsMacro DEBUG_r_FLAG DEBUG_r_TEST DEBUG_r_TEST_ DEBUG_s +syn keyword xsMacro DEBUG_s_FLAG DEBUG_s_TEST DEBUG_s_TEST_ DEBUG_t_FLAG +syn keyword xsMacro DEBUG_t_TEST DEBUG_t_TEST_ DEBUG_u DEBUG_u_FLAG +syn keyword xsMacro DEBUG_u_TEST DEBUG_u_TEST_ DEBUG_v DEBUG_v_FLAG +syn keyword xsMacro DEBUG_v_TEST DEBUG_v_TEST_ DEBUG_x DEBUG_x_FLAG +syn keyword xsMacro DEBUG_x_TEST DEBUG_x_TEST_ +syn keyword xsMacro DECLARATION_FOR_LC_NUMERIC_MANIPULATION +syn keyword xsMacro DECLARATION_FOR_STORE_LC_NUMERIC_SET_TO_NEEDED +syn keyword xsMacro DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED DEFAULT +syn keyword xsMacro DEFAULT_PAT_MOD DEFINEP DEFSV DEFSV_set DEL_NATIVE +syn keyword xsMacro DEPENDS_PAT_MOD DEPENDS_PAT_MODS DETACH DIE DM_ARRAY_ISA +syn keyword xsMacro DM_DELAY DM_EGID DM_EUID DM_GID DM_RGID DM_RUID DM_UID DO +syn keyword xsMacro DOINIT DOLSHARP DONT_DECLARE_STD DORDOR DOROP DOSISH +syn keyword xsMacro DOTDOT DOUBLEKIND DOUBLESIZE DOUBLE_BIG_ENDIAN +syn keyword xsMacro DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN +syn keyword xsMacro DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN +syn keyword xsMacro DOUBLE_IS_IEEE_754_32_BIT_BIG_ENDIAN +syn keyword xsMacro DOUBLE_IS_IEEE_754_32_BIT_LITTLE_ENDIAN +syn keyword xsMacro DOUBLE_IS_IEEE_754_64_BIT_BIG_ENDIAN +syn keyword xsMacro DOUBLE_IS_IEEE_754_64_BIT_LITTLE_ENDIAN +syn keyword xsMacro DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE +syn keyword xsMacro DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE +syn keyword xsMacro DOUBLE_IS_UNKNOWN_FORMAT DOUBLE_LITTLE_ENDIAN +syn keyword xsMacro DOUBLE_MIX_ENDIAN DO_UTF8 DPTR2FPTR DRAND48_R_PROTO +syn keyword xsMacro DUP_WARNINGS Drand01 ELSE ELSIF EMBEDMYMALLOC END +syn keyword xsMacro ENDGRENT_R_PROTO ENDHOSTENT_R_PROTO ENDLIKE +syn keyword xsMacro ENDNETENT_R_PROTO ENDPROTOENT_R_PROTO ENDPWENT_R_PROTO +syn keyword xsMacro ENDSERVENT_R_PROTO END_EXTERN_C ENTER ENTER_with_name +syn keyword xsMacro ENTRY_PROBE EOF EOL EOS EQOP ERRSV ESC_NATIVE EVAL +syn keyword xsMacro EVAL_AB EVAL_AB_fail EVAL_INEVAL EVAL_INREQUIRE +syn keyword xsMacro EVAL_KEEPERR EVAL_NULL EVAL_RE_REPARSING EVAL_WARNONLY +syn keyword xsMacro EXACT EXACTF EXACTFA EXACTFA_NO_TRIE EXACTFL EXACTFLU8 +syn keyword xsMacro EXACTFU EXACTFU_SS EXACTL EXEC_ARGV_CAST EXEC_PAT_MOD +syn keyword xsMacro EXEC_PAT_MODS EXPECT EXT EXTCONST EXTEND EXTEND_MORTAL +syn keyword xsMacro EXTERN_C EXTPERLIO EXTRA_SIZE EXTRA_STEP_2ARGS EXT_MGVTBL +syn keyword xsMacro EXT_PAT_MODS FAKE_BIT_BUCKET FAKE_DEFAULT_SIGNAL_HANDLERS +syn keyword xsMacro FAKE_PERSISTENT_SIGNAL_HANDLERS FALSE FBMcf_TAIL +syn keyword xsMacro FBMcf_TAIL_DOLLAR FBMcf_TAIL_DOLLARM FBMcf_TAIL_Z +syn keyword xsMacro FBMcf_TAIL_z FBMrf_MULTILINE FCNTL_CAN_LOCK FD_CLR +syn keyword xsMacro FD_ISSET FD_SET FD_ZERO FEATURE_ARYBASE_IS_ENABLED +syn keyword xsMacro FEATURE_BITWISE_IS_ENABLED FEATURE_BUNDLE_510 +syn keyword xsMacro FEATURE_BUNDLE_511 FEATURE_BUNDLE_515 +syn keyword xsMacro FEATURE_BUNDLE_CUSTOM FEATURE_BUNDLE_DEFAULT +syn keyword xsMacro FEATURE_EVALBYTES_IS_ENABLED FEATURE_FC_IS_ENABLED +syn keyword xsMacro FEATURE_IS_ENABLED FEATURE_LEXSUBS_IS_ENABLED +syn keyword xsMacro FEATURE_POSTDEREF_IS_ENABLED +syn keyword xsMacro FEATURE_POSTDEREF_QQ_IS_ENABLED +syn keyword xsMacro FEATURE_REFALIASING_IS_ENABLED FEATURE_SAY_IS_ENABLED +syn keyword xsMacro FEATURE_SIGNATURES_IS_ENABLED FEATURE_STATE_IS_ENABLED +syn keyword xsMacro FEATURE_SWITCH_IS_ENABLED FEATURE_UNICODE_IS_ENABLED +syn keyword xsMacro FEATURE_UNIEVAL_IS_ENABLED FEATURE___SUB___IS_ENABLED +syn keyword xsMacro FFLUSH_NULL FF_0DECIMAL FF_BLANK FF_CHECKCHOP FF_CHECKNL +syn keyword xsMacro FF_CHOP FF_DECIMAL FF_END FF_FETCH FF_HALFSPACE FF_ITEM +syn keyword xsMacro FF_LINEGLOB FF_LINEMARK FF_LINESNGL FF_LITERAL FF_MORE +syn keyword xsMacro FF_NEWLINE FF_SKIP FF_SPACE FILE FILE_base FILE_bufsiz +syn keyword xsMacro FILE_cnt FILE_ptr FILL_ADVANCE_NODE +syn keyword xsMacro FILL_ADVANCE_NODE_2L_ARG FILL_ADVANCE_NODE_ARG +syn keyword xsMacro FILTER_DATA FILTER_ISREADER FILTER_READ +syn keyword xsMacro FIND_RUNCV_level_eq FIND_RUNCV_padid_eq +syn keyword xsMacro FIRST_SURROGATE_UTF8_FIRST_BYTE FITS_IN_8_BITS FLAGS +syn keyword xsMacro FLEXFILENAMES FOLDEQ_LOCALE FOLDEQ_S1_ALREADY_FOLDED +syn keyword xsMacro FOLDEQ_S1_FOLDS_SANE FOLDEQ_S2_ALREADY_FOLDED +syn keyword xsMacro FOLDEQ_S2_FOLDS_SANE FOLDEQ_UTF8_NOMIX_ASCII +syn keyword xsMacro FOLD_FLAGS_FULL FOLD_FLAGS_LOCALE FOLD_FLAGS_NOMIX_ASCII +syn keyword xsMacro FOR FORMAT FORMLBRACK FORMRBRACK FPTR2DPTR FP_PINF +syn keyword xsMacro FP_QNAN FREETMPS FREE_THREAD_KEY FSEEKSIZE FUNC FUNC0 +syn keyword xsMacro FUNC0OP FUNC0SUB FUNC1 FUNCMETH FUNCTION__ F_atan2_amg +syn keyword xsMacro F_cos_amg F_exp_amg F_log_amg F_pow_amg F_sin_amg +syn keyword xsMacro F_sqrt_amg Fflush FmLINES FreeOp Fstat GCB_ENUM_COUNT +syn keyword xsMacro GCC_DIAG_IGNORE GCC_DIAG_PRAGMA GCC_DIAG_RESTORE +syn keyword xsMacro GDBMNDBM_H_USES_PROTOTYPES GETATARGET GETGRENT_R_PROTO +syn keyword xsMacro GETGRGID_R_PROTO GETGRNAM_R_PROTO GETHOSTBYADDR_R_PROTO +syn keyword xsMacro GETHOSTBYNAME_R_PROTO GETHOSTENT_R_PROTO GETLOGIN_R_PROTO +syn keyword xsMacro GETNETBYADDR_R_PROTO GETNETBYNAME_R_PROTO +syn keyword xsMacro GETNETENT_R_PROTO GETPROTOBYNAME_R_PROTO +syn keyword xsMacro GETPROTOBYNUMBER_R_PROTO GETPROTOENT_R_PROTO +syn keyword xsMacro GETPWENT_R_PROTO GETPWNAM_R_PROTO GETPWUID_R_PROTO +syn keyword xsMacro GETSERVBYNAME_R_PROTO GETSERVBYPORT_R_PROTO +syn keyword xsMacro GETSERVENT_R_PROTO GETSPNAM_R_PROTO GETTARGET +syn keyword xsMacro GETTARGETSTACKED GET_RE_DEBUG_FLAGS +syn keyword xsMacro GET_RE_DEBUG_FLAGS_DECL GIMME GIMME_V GIVEN +syn keyword xsMacro GLOBAL_PAT_MOD GMTIME_MAX GMTIME_MIN GMTIME_R +syn keyword xsMacro GMTIME_R_PROTO GOSTART GOSUB GPOS GPf_ALIASED_SV +syn keyword xsMacro GRAMBARESTMT GRAMBLOCK GRAMEXPR GRAMFULLSTMT GRAMPROG +syn keyword xsMacro GRAMSTMTSEQ GREEK_CAPITAL_LETTER_IOTA_UTF8 +syn keyword xsMacro GREEK_CAPITAL_LETTER_MU GREEK_SMALL_LETTER_MU +syn keyword xsMacro GREEK_SMALL_LETTER_MU_UTF8 GROK_NUMERIC_RADIX GROUPP +syn keyword xsMacro GRPASSWD GV_ADD GV_ADDMG GV_ADDMULTI GV_ADDWARN +syn keyword xsMacro GV_AUTOLOAD GV_AUTOLOAD_ISMETHOD GV_CACHE_ONLY GV_CROAK +syn keyword xsMacro GV_NOADD_MASK GV_NOADD_NOINIT GV_NOEXPAND GV_NOINIT +syn keyword xsMacro GV_NOTQUAL GV_NO_SVGMAGIC GV_SUPER GVf_ASSUMECV +syn keyword xsMacro GVf_IMPORTED GVf_IMPORTED_AV GVf_IMPORTED_CV +syn keyword xsMacro GVf_IMPORTED_HV GVf_IMPORTED_SV GVf_INTRO GVf_MULTI +syn keyword xsMacro Gconvert Gid_t_f Gid_t_sign Gid_t_size GvALIASED_SV +syn keyword xsMacro GvALIASED_SV_off GvALIASED_SV_on GvASSIGN_GENERATION +syn keyword xsMacro GvASSIGN_GENERATION_set GvASSUMECV GvASSUMECV_off +syn keyword xsMacro GvASSUMECV_on GvAV GvAVn GvCV GvCVGEN GvCV_set GvCVu +syn keyword xsMacro GvEGV GvEGVx GvENAME GvENAMELEN GvENAMEUTF8 GvENAME_HEK +syn keyword xsMacro GvESTASH GvFILE GvFILEGV GvFILE_HEK GvFILEx GvFLAGS +syn keyword xsMacro GvFORM GvGP GvGPFLAGS GvGP_set GvHV GvHVn GvIMPORTED +syn keyword xsMacro GvIMPORTED_AV GvIMPORTED_AV_off GvIMPORTED_AV_on +syn keyword xsMacro GvIMPORTED_CV GvIMPORTED_CV_off GvIMPORTED_CV_on +syn keyword xsMacro GvIMPORTED_HV GvIMPORTED_HV_off GvIMPORTED_HV_on +syn keyword xsMacro GvIMPORTED_SV GvIMPORTED_SV_off GvIMPORTED_SV_on +syn keyword xsMacro GvIMPORTED_off GvIMPORTED_on GvINTRO GvINTRO_off +syn keyword xsMacro GvINTRO_on GvIN_PAD GvIN_PAD_off GvIN_PAD_on GvIO GvIOn +syn keyword xsMacro GvIOp GvLINE GvMULTI GvMULTI_off GvMULTI_on GvNAME +syn keyword xsMacro GvNAMELEN GvNAMELEN_get GvNAMEUTF8 GvNAME_HEK GvNAME_get +syn keyword xsMacro GvREFCNT GvSTASH GvSV GvSVn GvXPVGV Gv_AMG HANDY_H +syn keyword xsMacro HASATTRIBUTE_DEPRECATED HASATTRIBUTE_FORMAT +syn keyword xsMacro HASATTRIBUTE_MALLOC HASATTRIBUTE_NONNULL +syn keyword xsMacro HASATTRIBUTE_NORETURN HASATTRIBUTE_PURE +syn keyword xsMacro HASATTRIBUTE_UNUSED HASATTRIBUTE_WARN_UNUSED_RESULT +syn keyword xsMacro HASCONST HASHBRACK HASVOLATILE HAS_ACCESS HAS_ACOSH +syn keyword xsMacro HAS_ALARM HAS_ASINH HAS_ATANH HAS_ATOLL HAS_BACKTRACE +syn keyword xsMacro HAS_BCMP HAS_BCOPY HAS_BOOL HAS_BUILTIN_CHOOSE_EXPR +syn keyword xsMacro HAS_BUILTIN_EXPECT HAS_BZERO HAS_C99 +syn keyword xsMacro HAS_C99_VARIADIC_MACROS HAS_CBRT HAS_CHOWN HAS_CHROOT +syn keyword xsMacro HAS_CLEARENV HAS_COPYSIGN HAS_COPYSIGNL HAS_CRYPT +syn keyword xsMacro HAS_CTERMID HAS_CUSERID HAS_DBL_DIG HAS_DBMINIT_PROTO +syn keyword xsMacro HAS_DIFFTIME HAS_DIRFD HAS_DLADDR HAS_DLERROR +syn keyword xsMacro HAS_DRAND48_PROTO HAS_DUP2 HAS_EACCESS HAS_ENDGRENT +syn keyword xsMacro HAS_ENDHOSTENT HAS_ENDNETENT HAS_ENDPROTOENT HAS_ENDPWENT +syn keyword xsMacro HAS_ENDSERVENT HAS_ERF HAS_ERFC HAS_EXP2 HAS_EXPM1 +syn keyword xsMacro HAS_FCHDIR HAS_FCHMOD HAS_FCHOWN HAS_FCNTL HAS_FDIM +syn keyword xsMacro HAS_FD_SET HAS_FEGETROUND HAS_FGETPOS HAS_FINITE +syn keyword xsMacro HAS_FINITEL HAS_FLOCK HAS_FLOCK_PROTO HAS_FMA HAS_FMAX +syn keyword xsMacro HAS_FMIN HAS_FORK HAS_FPATHCONF HAS_FPCLASSIFY HAS_FREXPL +syn keyword xsMacro HAS_FSEEKO HAS_FSETPOS HAS_FSTATFS HAS_FSTATVFS HAS_FSYNC +syn keyword xsMacro HAS_FTELLO HAS_FUTIMES HAS_GETADDRINFO HAS_GETCWD +syn keyword xsMacro HAS_GETGRENT HAS_GETGROUPS HAS_GETHOSTBYADDR +syn keyword xsMacro HAS_GETHOSTBYNAME HAS_GETHOSTENT HAS_GETHOSTNAME +syn keyword xsMacro HAS_GETHOST_PROTOS HAS_GETITIMER HAS_GETLOGIN +syn keyword xsMacro HAS_GETMNTENT HAS_GETNAMEINFO HAS_GETNETBYADDR +syn keyword xsMacro HAS_GETNETBYNAME HAS_GETNETENT HAS_GETNET_PROTOS +syn keyword xsMacro HAS_GETPAGESIZE HAS_GETPGID HAS_GETPGRP HAS_GETPPID +syn keyword xsMacro HAS_GETPRIORITY HAS_GETPROTOBYNAME HAS_GETPROTOBYNUMBER +syn keyword xsMacro HAS_GETPROTOENT HAS_GETPROTO_PROTOS HAS_GETPWENT +syn keyword xsMacro HAS_GETSERVBYNAME HAS_GETSERVBYPORT HAS_GETSERVENT +syn keyword xsMacro HAS_GETSERV_PROTOS HAS_GETSPNAM HAS_GETTIMEOFDAY +syn keyword xsMacro HAS_GNULIBC HAS_GROUP HAS_HASMNTOPT HAS_HTONL HAS_HTONS +syn keyword xsMacro HAS_HYPOT HAS_ILOGB HAS_ILOGBL HAS_INETNTOP HAS_INETPTON +syn keyword xsMacro HAS_INET_ATON HAS_INT64_T HAS_IOCTL HAS_IPV6_MREQ +syn keyword xsMacro HAS_IP_MREQ HAS_IP_MREQ_SOURCE HAS_ISASCII HAS_ISBLANK +syn keyword xsMacro HAS_ISFINITE HAS_ISINF HAS_ISINFL HAS_ISNAN HAS_ISNANL +syn keyword xsMacro HAS_ISNORMAL HAS_J0 HAS_J0L HAS_KILL HAS_KILLPG +syn keyword xsMacro HAS_LCHOWN HAS_LC_MONETARY_2008 HAS_LDBL_DIG HAS_LDEXPL +syn keyword xsMacro HAS_LGAMMA HAS_LGAMMA_R HAS_LINK HAS_LLRINT HAS_LLRINTL +syn keyword xsMacro HAS_LLROUND HAS_LLROUNDL HAS_LOCALECONV HAS_LOCKF +syn keyword xsMacro HAS_LOG1P HAS_LOG2 HAS_LOGB HAS_LONG_DOUBLE HAS_LONG_LONG +syn keyword xsMacro HAS_LRINT HAS_LRINTL HAS_LROUND HAS_LROUNDL +syn keyword xsMacro HAS_LSEEK_PROTO HAS_LSTAT HAS_MADVISE HAS_MBLEN +syn keyword xsMacro HAS_MBSTOWCS HAS_MBTOWC HAS_MEMCHR HAS_MEMCMP HAS_MEMCPY +syn keyword xsMacro HAS_MEMMOVE HAS_MEMSET HAS_MKDIR HAS_MKDTEMP HAS_MKFIFO +syn keyword xsMacro HAS_MKSTEMP HAS_MKSTEMPS HAS_MKTIME HAS_MMAP HAS_MODFL +syn keyword xsMacro HAS_MODFL_PROTO HAS_MPROTECT HAS_MSG HAS_MSG_CTRUNC +syn keyword xsMacro HAS_MSG_DONTROUTE HAS_MSG_OOB HAS_MSG_PEEK HAS_MSG_PROXY +syn keyword xsMacro HAS_MSYNC HAS_MUNMAP HAS_NAN HAS_NEARBYINT HAS_NEXTAFTER +syn keyword xsMacro HAS_NEXTTOWARD HAS_NICE HAS_NL_LANGINFO HAS_NTOHL +syn keyword xsMacro HAS_NTOHS HAS_OPEN3 HAS_PASSWD HAS_PATHCONF HAS_PAUSE +syn keyword xsMacro HAS_PIPE HAS_POLL HAS_PRCTL HAS_PRCTL_SET_NAME +syn keyword xsMacro HAS_PROCSELFEXE HAS_PTHREAD_ATFORK +syn keyword xsMacro HAS_PTHREAD_ATTR_SETSCOPE +syn keyword xsMacro HAS_PTHREAD_UNCHECKED_GETSPECIFIC_NP HAS_PTHREAD_YIELD +syn keyword xsMacro HAS_PTRDIFF_T HAS_READDIR HAS_READLINK HAS_READV +syn keyword xsMacro HAS_RECVMSG HAS_REGCOMP HAS_REMAINDER HAS_REMQUO +syn keyword xsMacro HAS_RENAME HAS_REWINDDIR HAS_RINT HAS_RMDIR HAS_ROUND +syn keyword xsMacro HAS_SANE_MEMCMP HAS_SBRK_PROTO HAS_SCALBN HAS_SCALBNL +syn keyword xsMacro HAS_SCHED_YIELD HAS_SCM_RIGHTS HAS_SEEKDIR HAS_SELECT +syn keyword xsMacro HAS_SEM HAS_SENDMSG HAS_SETEGID HAS_SETEUID HAS_SETGRENT +syn keyword xsMacro HAS_SETGROUPS HAS_SETHOSTENT HAS_SETITIMER HAS_SETLINEBUF +syn keyword xsMacro HAS_SETLOCALE HAS_SETNETENT HAS_SETPGID HAS_SETPGRP +syn keyword xsMacro HAS_SETPRIORITY HAS_SETPROTOENT HAS_SETPWENT HAS_SETREGID +syn keyword xsMacro HAS_SETRESGID HAS_SETRESUID HAS_SETREUID HAS_SETSERVENT +syn keyword xsMacro HAS_SETSID HAS_SETVBUF HAS_SHM HAS_SHMAT_PROTOTYPE +syn keyword xsMacro HAS_SIGACTION HAS_SIGNBIT HAS_SIGPROCMASK HAS_SIGSETJMP +syn keyword xsMacro HAS_SIN6_SCOPE_ID HAS_SKIP_LOCALE_INIT HAS_SNPRINTF +syn keyword xsMacro HAS_SOCKADDR_IN6 HAS_SOCKATMARK HAS_SOCKATMARK_PROTO +syn keyword xsMacro HAS_SOCKET HAS_SQRTL HAS_STAT HAS_STATIC_INLINE +syn keyword xsMacro HAS_STRCHR HAS_STRCOLL HAS_STRFTIME HAS_STRTOD HAS_STRTOL +syn keyword xsMacro HAS_STRTOLD HAS_STRTOLL HAS_STRTOQ HAS_STRTOUL +syn keyword xsMacro HAS_STRTOULL HAS_STRTOUQ HAS_STRUCT_CMSGHDR +syn keyword xsMacro HAS_STRUCT_MSGHDR HAS_STRUCT_STATFS +syn keyword xsMacro HAS_STRUCT_STATFS_F_FLAGS HAS_STRXFRM HAS_SYMLINK +syn keyword xsMacro HAS_SYSCALL HAS_SYSCALL_PROTO HAS_SYSCONF HAS_SYSTEM +syn keyword xsMacro HAS_SYS_ERRLIST HAS_TCGETPGRP HAS_TCSETPGRP HAS_TELLDIR +syn keyword xsMacro HAS_TELLDIR_PROTO HAS_TGAMMA HAS_TIME HAS_TIMEGM +syn keyword xsMacro HAS_TIMES HAS_TM_TM_GMTOFF HAS_TM_TM_ZONE HAS_TRUNC +syn keyword xsMacro HAS_TRUNCATE HAS_TRUNCL HAS_TZNAME HAS_UALARM HAS_UMASK +syn keyword xsMacro HAS_UNAME HAS_UNSETENV HAS_USLEEP HAS_USLEEP_PROTO +syn keyword xsMacro HAS_USTAT HAS_UTIME HAS_VPRINTF HAS_VSNPRINTF HAS_WAIT +syn keyword xsMacro HAS_WAIT4 HAS_WAITPID HAS_WCSCMP HAS_WCSTOMBS HAS_WCSXFRM +syn keyword xsMacro HAS_WCTOMB HAS_WRITEV HEK_BASESIZE HEK_FLAGS HEK_HASH +syn keyword xsMacro HEK_KEY HEK_LEN HEK_UTF8 HEK_UTF8_off HEK_UTF8_on +syn keyword xsMacro HEK_WASUTF8 HEK_WASUTF8_off HEK_WASUTF8_on HEKf HEKf256 +syn keyword xsMacro HEKfARG HE_SVSLOT HEf_SVKEY HINTS_REFCNT_INIT +syn keyword xsMacro HINTS_REFCNT_LOCK HINTS_REFCNT_TERM HINTS_REFCNT_UNLOCK +syn keyword xsMacro HINT_BLOCK_SCOPE HINT_BYTES HINT_EXPLICIT_STRICT_REFS +syn keyword xsMacro HINT_EXPLICIT_STRICT_SUBS HINT_EXPLICIT_STRICT_VARS +syn keyword xsMacro HINT_FEATURE_MASK HINT_FEATURE_SHIFT HINT_FILETEST_ACCESS +syn keyword xsMacro HINT_INTEGER HINT_LEXICAL_IO_IN HINT_LEXICAL_IO_OUT +syn keyword xsMacro HINT_LOCALE HINT_LOCALE_PARTIAL HINT_LOCALIZE_HH +syn keyword xsMacro HINT_NEW_BINARY HINT_NEW_FLOAT HINT_NEW_INTEGER +syn keyword xsMacro HINT_NEW_RE HINT_NEW_STRING HINT_NO_AMAGIC HINT_RE_EVAL +syn keyword xsMacro HINT_RE_FLAGS HINT_RE_TAINT HINT_SORT_MERGESORT +syn keyword xsMacro HINT_SORT_QUICKSORT HINT_SORT_SORT_BITS HINT_SORT_STABLE +syn keyword xsMacro HINT_STRICT_REFS HINT_STRICT_SUBS HINT_STRICT_VARS +syn keyword xsMacro HINT_UNI_8_BIT HINT_UTF8 HS_APIVERLEN_MAX HS_CXT +syn keyword xsMacro HS_GETAPIVERLEN HS_GETINTERPSIZE HS_GETXSVERLEN HS_KEY +syn keyword xsMacro HS_KEYp HS_XSVERLEN_MAX HSf_IMP_CXT HSf_NOCHK HSf_POPMARK +syn keyword xsMacro HSf_SETXSUBFN HSm_APIVERLEN HSm_INTRPSIZE HSm_KEY_MATCH +syn keyword xsMacro HSm_XSVERLEN HV_DELETE HV_DISABLE_UVAR_XKEY +syn keyword xsMacro HV_FETCH_EMPTY_HE HV_FETCH_ISEXISTS HV_FETCH_ISSTORE +syn keyword xsMacro HV_FETCH_JUST_SV HV_FETCH_LVALUE +syn keyword xsMacro HV_ITERNEXT_WANTPLACEHOLDERS HV_NAME_SETALL +syn keyword xsMacro HVhek_ENABLEHVKFLAGS HVhek_FREEKEY HVhek_KEYCANONICAL +syn keyword xsMacro HVhek_MASK HVhek_PLACEHOLD HVhek_UNSHARED HVhek_UTF8 +syn keyword xsMacro HVhek_WASUTF8 HVrhek_IV HVrhek_PV HVrhek_PV_UTF8 +syn keyword xsMacro HVrhek_UV HVrhek_delete HVrhek_typemask HVrhek_undef +syn keyword xsMacro HYPHEN_UTF8 H_EBCDIC_TABLES H_PERL H_REGCHARCLASS +syn keyword xsMacro H_UNICODE_CONSTANTS H_UTF8 HeHASH HeKEY HeKEY_hek +syn keyword xsMacro HeKEY_sv HeKFLAGS HeKLEN HeKLEN_UTF8 HeKUTF8 HeKWASUTF8 +syn keyword xsMacro HeNEXT HePV HeSVKEY HeSVKEY_force HeSVKEY_set HeUTF8 +syn keyword xsMacro HeVAL HvAMAGIC HvAMAGIC_off HvAMAGIC_on HvARRAY HvAUX +syn keyword xsMacro HvAUXf_NO_DEREF HvAUXf_SCAN_STASH HvEITER HvEITER_get +syn keyword xsMacro HvEITER_set HvENAME HvENAMELEN HvENAMELEN_get HvENAMEUTF8 +syn keyword xsMacro HvENAME_HEK HvENAME_HEK_NN HvENAME_get HvFILL HvHASKFLAGS +syn keyword xsMacro HvHASKFLAGS_off HvHASKFLAGS_on HvKEYS HvLASTRAND_get +syn keyword xsMacro HvLAZYDEL HvLAZYDEL_off HvLAZYDEL_on HvMAX HvMROMETA +syn keyword xsMacro HvNAME HvNAMELEN HvNAMELEN_get HvNAMEUTF8 HvNAME_HEK +syn keyword xsMacro HvNAME_HEK_NN HvNAME_get HvPLACEHOLDERS +syn keyword xsMacro HvPLACEHOLDERS_get HvPLACEHOLDERS_set HvRAND_get HvRITER +syn keyword xsMacro HvRITER_get HvRITER_set HvSHAREKEYS HvSHAREKEYS_off +syn keyword xsMacro HvSHAREKEYS_on HvTOTALKEYS HvUSEDKEYS I16SIZE I16TYPE +syn keyword xsMacro I16_MAX I16_MIN I32SIZE I32TYPE I32_MAX I32_MAX_P1 +syn keyword xsMacro I32_MIN I64SIZE I64TYPE I8SIZE I8TYPE I8_TO_NATIVE +syn keyword xsMacro I8_TO_NATIVE_UTF8 IF IFMATCH IFMATCH_A IFMATCH_A_fail +syn keyword xsMacro IFTHEN IGNORE_PAT_MOD ILLEGAL_UTF8_BYTE INIT INIT_THREADS +syn keyword xsMacro INIT_TRACK_MEMPOOL INSUBP INT2PTR INT32_MIN INT64_C +syn keyword xsMacro INT64_MIN INTSIZE INT_64_T INT_PAT_MODS IN_BYTES +syn keyword xsMacro IN_ENCODING IN_LC IN_LC_ALL_COMPILETIME IN_LC_ALL_RUNTIME +syn keyword xsMacro IN_LC_COMPILETIME IN_LC_PARTIAL_COMPILETIME +syn keyword xsMacro IN_LC_PARTIAL_RUNTIME IN_LC_RUNTIME IN_LOCALE +syn keyword xsMacro IN_LOCALE_COMPILETIME IN_LOCALE_RUNTIME +syn keyword xsMacro IN_PERL_COMPILETIME IN_PERL_RUNTIME IN_SOME_LOCALE_FORM +syn keyword xsMacro IN_SOME_LOCALE_FORM_COMPILETIME +syn keyword xsMacro IN_SOME_LOCALE_FORM_RUNTIME IN_UNI_8_BIT +syn keyword xsMacro IN_UTF8_CTYPE_LOCALE IOCPARM_LEN IOf_ARGV IOf_DIDTOP +syn keyword xsMacro IOf_FAKE_DIRP IOf_FLUSH IOf_NOLINE IOf_START IOf_UNTAINT +syn keyword xsMacro ISA_VERSION_OBJ IS_ANYOF_TRIE +syn keyword xsMacro IS_NUMBER_GREATER_THAN_UV_MAX IS_NUMBER_INFINITY +syn keyword xsMacro IS_NUMBER_IN_UV IS_NUMBER_NAN IS_NUMBER_NEG +syn keyword xsMacro IS_NUMBER_NOT_INT IS_NUMBER_TRAILING IS_NUMERIC_RADIX +syn keyword xsMacro IS_PADCONST IS_PADGV IS_SAFE_PATHNAME IS_SAFE_SYSCALL +syn keyword xsMacro IS_TRIE_AC IS_UTF8_CHAR IS_UTF8_CHAR_FAST IVSIZE IVTYPE +syn keyword xsMacro IV_DIG IV_MAX IV_MAX_P1 IV_MIN I_32 I_ARPA_INET I_ASSERT +syn keyword xsMacro I_BFD I_CRYPT I_DBM I_DIRENT I_DLFCN I_EXECINFO I_FENV +syn keyword xsMacro I_FLOAT I_GDBM I_GDBMNDBM I_GRP I_INTTYPES I_LANGINFO +syn keyword xsMacro I_LIMITS I_LOCALE I_MATH I_MNTENT I_NETDB I_NETINET_IN +syn keyword xsMacro I_NETINET_TCP I_POLL I_PTHREAD I_PWD I_QUADMATH I_SHADOW +syn keyword xsMacro I_STDARG I_STDBOOL I_STDDEF I_STDINT I_STDLIB I_STRING +syn keyword xsMacro I_SYSLOG I_SYSUIO I_SYSUTSNAME I_SYS_DIR I_SYS_FILE +syn keyword xsMacro I_SYS_IOCTL I_SYS_MOUNT I_SYS_PARAM I_SYS_POLL +syn keyword xsMacro I_SYS_RESOURCE I_SYS_SELECT I_SYS_STAT I_SYS_STATFS +syn keyword xsMacro I_SYS_STATVFS I_SYS_TIME I_SYS_TIMES I_SYS_TYPES I_SYS_UN +syn keyword xsMacro I_SYS_VFS I_SYS_WAIT I_TERMIOS I_TIME I_UNISTD I_USTAT +syn keyword xsMacro I_UTIME I_V I_VALUES IoANY IoBOTTOM_GV IoBOTTOM_NAME +syn keyword xsMacro IoDIRP IoFLAGS IoFMT_GV IoFMT_NAME IoIFP IoLINES +syn keyword xsMacro IoLINES_LEFT IoOFP IoPAGE IoPAGE_LEN IoTOP_GV IoTOP_NAME +syn keyword xsMacro IoTYPE IoTYPE_APPEND IoTYPE_CLOSED IoTYPE_IMPLICIT +syn keyword xsMacro IoTYPE_NUMERIC IoTYPE_PIPE IoTYPE_RDONLY IoTYPE_RDWR +syn keyword xsMacro IoTYPE_SOCKET IoTYPE_STD IoTYPE_WRONLY IsSet +syn keyword xsMacro JMPENV_BOOTSTRAP JMPENV_JUMP JMPENV_POP JMPENV_PUSH JOIN +syn keyword xsMacro KEEPCOPY_PAT_MOD KEEPCOPY_PAT_MODS KEEPS KEEPS_next +syn keyword xsMacro KEEPS_next_fail KELVIN_SIGN KEYWORD_PLUGIN_DECLINE +syn keyword xsMacro KEYWORD_PLUGIN_EXPR KEYWORD_PLUGIN_STMT KEY_AUTOLOAD +syn keyword xsMacro KEY_BEGIN KEY_CHECK KEY_DESTROY KEY_END KEY_INIT KEY_NULL +syn keyword xsMacro KEY_UNITCHECK KEY___DATA__ KEY___END__ KEY___FILE__ +syn keyword xsMacro KEY___LINE__ KEY___PACKAGE__ KEY___SUB__ KEY_abs +syn keyword xsMacro KEY_accept KEY_alarm KEY_and KEY_atan2 KEY_bind +syn keyword xsMacro KEY_binmode KEY_bless KEY_break KEY_caller KEY_chdir +syn keyword xsMacro KEY_chmod KEY_chomp KEY_chop KEY_chown KEY_chr KEY_chroot +syn keyword xsMacro KEY_close KEY_closedir KEY_cmp KEY_connect KEY_continue +syn keyword xsMacro KEY_cos KEY_crypt KEY_dbmclose KEY_dbmopen KEY_default +syn keyword xsMacro KEY_defined KEY_delete KEY_die KEY_do KEY_dump KEY_each +syn keyword xsMacro KEY_else KEY_elsif KEY_endgrent KEY_endhostent +syn keyword xsMacro KEY_endnetent KEY_endprotoent KEY_endpwent KEY_endservent +syn keyword xsMacro KEY_eof KEY_eq KEY_eval KEY_evalbytes KEY_exec KEY_exists +syn keyword xsMacro KEY_exit KEY_exp KEY_fc KEY_fcntl KEY_fileno KEY_flock +syn keyword xsMacro KEY_for KEY_foreach KEY_fork KEY_format KEY_formline +syn keyword xsMacro KEY_ge KEY_getc KEY_getgrent KEY_getgrgid KEY_getgrnam +syn keyword xsMacro KEY_gethostbyaddr KEY_gethostbyname KEY_gethostent +syn keyword xsMacro KEY_getlogin KEY_getnetbyaddr KEY_getnetbyname +syn keyword xsMacro KEY_getnetent KEY_getpeername KEY_getpgrp KEY_getppid +syn keyword xsMacro KEY_getpriority KEY_getprotobyname KEY_getprotobynumber +syn keyword xsMacro KEY_getprotoent KEY_getpwent KEY_getpwnam KEY_getpwuid +syn keyword xsMacro KEY_getservbyname KEY_getservbyport KEY_getservent +syn keyword xsMacro KEY_getsockname KEY_getsockopt KEY_given KEY_glob +syn keyword xsMacro KEY_gmtime KEY_goto KEY_grep KEY_gt KEY_hex KEY_if +syn keyword xsMacro KEY_index KEY_int KEY_ioctl KEY_join KEY_keys KEY_kill +syn keyword xsMacro KEY_last KEY_lc KEY_lcfirst KEY_le KEY_length KEY_link +syn keyword xsMacro KEY_listen KEY_local KEY_localtime KEY_lock KEY_log +syn keyword xsMacro KEY_lstat KEY_lt KEY_m KEY_map KEY_mkdir KEY_msgctl +syn keyword xsMacro KEY_msgget KEY_msgrcv KEY_msgsnd KEY_my KEY_ne KEY_next +syn keyword xsMacro KEY_no KEY_not KEY_oct KEY_open KEY_opendir KEY_or +syn keyword xsMacro KEY_ord KEY_our KEY_pack KEY_package KEY_pipe KEY_pop +syn keyword xsMacro KEY_pos KEY_print KEY_printf KEY_prototype KEY_push KEY_q +syn keyword xsMacro KEY_qq KEY_qr KEY_quotemeta KEY_qw KEY_qx KEY_rand +syn keyword xsMacro KEY_read KEY_readdir KEY_readline KEY_readlink +syn keyword xsMacro KEY_readpipe KEY_recv KEY_redo KEY_ref KEY_rename +syn keyword xsMacro KEY_require KEY_reset KEY_return KEY_reverse +syn keyword xsMacro KEY_rewinddir KEY_rindex KEY_rmdir KEY_s KEY_say +syn keyword xsMacro KEY_scalar KEY_seek KEY_seekdir KEY_select KEY_semctl +syn keyword xsMacro KEY_semget KEY_semop KEY_send KEY_setgrent KEY_sethostent +syn keyword xsMacro KEY_setnetent KEY_setpgrp KEY_setpriority KEY_setprotoent +syn keyword xsMacro KEY_setpwent KEY_setservent KEY_setsockopt KEY_shift +syn keyword xsMacro KEY_shmctl KEY_shmget KEY_shmread KEY_shmwrite +syn keyword xsMacro KEY_shutdown KEY_sin KEY_sleep KEY_socket KEY_socketpair +syn keyword xsMacro KEY_sort KEY_splice KEY_split KEY_sprintf KEY_sqrt +syn keyword xsMacro KEY_srand KEY_stat KEY_state KEY_study KEY_sub KEY_substr +syn keyword xsMacro KEY_symlink KEY_syscall KEY_sysopen KEY_sysread +syn keyword xsMacro KEY_sysseek KEY_system KEY_syswrite KEY_tell KEY_telldir +syn keyword xsMacro KEY_tie KEY_tied KEY_time KEY_times KEY_tr KEY_truncate +syn keyword xsMacro KEY_uc KEY_ucfirst KEY_umask KEY_undef KEY_unless +syn keyword xsMacro KEY_unlink KEY_unpack KEY_unshift KEY_untie KEY_until +syn keyword xsMacro KEY_use KEY_utime KEY_values KEY_vec KEY_wait KEY_waitpid +syn keyword xsMacro KEY_wantarray KEY_warn KEY_when KEY_while KEY_write KEY_x +syn keyword xsMacro KEY_xor KEY_y LABEL LATIN1_TO_NATIVE +syn keyword xsMacro LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE +syn keyword xsMacro LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE_NATIVE +syn keyword xsMacro LATIN_CAPITAL_LETTER_SHARP_S +syn keyword xsMacro LATIN_CAPITAL_LETTER_SHARP_S_UTF8 +syn keyword xsMacro LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS +syn keyword xsMacro LATIN_SMALL_LETTER_A_WITH_RING_ABOVE +syn keyword xsMacro LATIN_SMALL_LETTER_A_WITH_RING_ABOVE_NATIVE +syn keyword xsMacro LATIN_SMALL_LETTER_LONG_S LATIN_SMALL_LETTER_LONG_S_UTF8 +syn keyword xsMacro LATIN_SMALL_LETTER_SHARP_S +syn keyword xsMacro LATIN_SMALL_LETTER_SHARP_S_NATIVE +syn keyword xsMacro LATIN_SMALL_LETTER_Y_WITH_DIAERESIS +syn keyword xsMacro LATIN_SMALL_LETTER_Y_WITH_DIAERESIS_NATIVE +syn keyword xsMacro LATIN_SMALL_LIGATURE_LONG_S_T +syn keyword xsMacro LATIN_SMALL_LIGATURE_LONG_S_T_UTF8 +syn keyword xsMacro LATIN_SMALL_LIGATURE_ST LATIN_SMALL_LIGATURE_ST_UTF8 +syn keyword xsMacro LDBL_DIG LEAVE LEAVESUB LEAVE_SCOPE LEAVE_with_name +syn keyword xsMacro LEX_DONT_CLOSE_RSFP LEX_EVALBYTES LEX_IGNORE_UTF8_HINTS +syn keyword xsMacro LEX_KEEP_PREVIOUS LEX_NOTPARSING LEX_START_COPIED +syn keyword xsMacro LEX_START_FLAGS LEX_START_SAME_FILTER LEX_STUFF_UTF8 +syn keyword xsMacro LF_NATIVE LIBERAL LIBM_LIB_VERSION LIB_INVARG LIKELY +syn keyword xsMacro LINKLIST LNBREAK LOADED_FILE_PROBE LOADING_FILE_PROBE +syn keyword xsMacro LOCAL LOCALE_PAT_MOD LOCALE_PAT_MODS LOCALTIME_MAX +syn keyword xsMacro LOCALTIME_MIN LOCALTIME_R LOCALTIME_R_PROTO +syn keyword xsMacro LOCAL_PATCH_COUNT LOCK_DOLLARZERO_MUTEX +syn keyword xsMacro LOCK_LC_NUMERIC_STANDARD LOCK_NUMERIC_STANDARD LOC_SED +syn keyword xsMacro LOGICAL LONGDOUBLE_BIG_ENDIAN LONGDOUBLE_DOUBLEDOUBLE +syn keyword xsMacro LONGDOUBLE_LITTLE_ENDIAN LONGDOUBLE_X86_80_BIT LONGJMP +syn keyword xsMacro LONGLONGSIZE LONGSIZE LONG_DOUBLEKIND LONG_DOUBLESIZE +syn keyword xsMacro LONG_DOUBLE_EQUALS_DOUBLE LONG_DOUBLE_IS_DOUBLE +syn keyword xsMacro LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN +syn keyword xsMacro LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN +syn keyword xsMacro LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN +syn keyword xsMacro LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN +syn keyword xsMacro LONG_DOUBLE_IS_UNKNOWN_FORMAT +syn keyword xsMacro LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN +syn keyword xsMacro LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN LOOPEX +syn keyword xsMacro LOOP_PAT_MODS LSEEKSIZE LSTOP LSTOPSUB LVRET L_R_TZSET +syn keyword xsMacro LvFLAGS LvSTARGOFF LvTARG LvTARGLEN LvTARGOFF LvTYPE +syn keyword xsMacro MALLOC_CHECK_TAINT MALLOC_CHECK_TAINT2 MALLOC_CTL_H +syn keyword xsMacro MALLOC_INIT MALLOC_OVERHEAD MALLOC_TERM +syn keyword xsMacro MALLOC_TOO_LATE_FOR MARKPOINT MARKPOINT_next +syn keyword xsMacro MARKPOINT_next_fail MASK MATCHOP MAXARG MAXO MAXPATHLEN +syn keyword xsMacro MAXSYSFD MAX_CHARSET_NAME_LENGTH MAX_FEATURE_LEN +syn keyword xsMacro MAX_PORTABLE_UTF8_TWO_BYTE +syn keyword xsMacro MAX_PRINT_A_FOR_USE_ONLY_BY_REGCOMP_DOT_C +syn keyword xsMacro MAX_RECURSE_EVAL_NOCHANGE_DEPTH MAX_UTF8_TWO_BYTE +syn keyword xsMacro MAYBE_DEREF_GV MAYBE_DEREF_GV_flags MAYBE_DEREF_GV_nomg +syn keyword xsMacro MBOL MB_CUR_MAX MDEREF_ACTION_MASK MDEREF_AV_gvav_aelem +syn keyword xsMacro MDEREF_AV_gvsv_vivify_rv2av_aelem MDEREF_AV_padav_aelem +syn keyword xsMacro MDEREF_AV_padsv_vivify_rv2av_aelem +syn keyword xsMacro MDEREF_AV_pop_rv2av_aelem MDEREF_AV_vivify_rv2av_aelem +syn keyword xsMacro MDEREF_FLAG_last MDEREF_HV_gvhv_helem +syn keyword xsMacro MDEREF_HV_gvsv_vivify_rv2hv_helem MDEREF_HV_padhv_helem +syn keyword xsMacro MDEREF_HV_padsv_vivify_rv2hv_helem +syn keyword xsMacro MDEREF_HV_pop_rv2hv_helem MDEREF_HV_vivify_rv2hv_helem +syn keyword xsMacro MDEREF_INDEX_MASK MDEREF_INDEX_const MDEREF_INDEX_gvsv +syn keyword xsMacro MDEREF_INDEX_none MDEREF_INDEX_padsv MDEREF_MASK +syn keyword xsMacro MDEREF_SHIFT MDEREF_reload MEMBER_TO_FPTR MEM_ALIGNBYTES +syn keyword xsMacro MEM_LOG_ALLOC MEM_LOG_FREE MEM_LOG_REALLOC MEM_SIZE +syn keyword xsMacro MEM_SIZE_MAX MEM_WRAP_CHECK MEM_WRAP_CHECK_ +syn keyword xsMacro MEM_WRAP_CHECK_1 MEM_WRAP_CHECK_2 MEOL METHOD MEXTEND +syn keyword xsMacro MGf_BYTES MGf_COPY MGf_DUP MGf_GSKIP MGf_LOCAL +syn keyword xsMacro MGf_MINMATCH MGf_PERSIST MGf_REFCOUNTED MGf_REQUIRE_GV +syn keyword xsMacro MGf_TAINTEDDIR MICRO_SIGN MICRO_SIGN_NATIVE MINMOD +syn keyword xsMacro MJD_OFFSET_DEBUG MRO_GET_PRIVATE_DATA MSPAGAIN MULOP +syn keyword xsMacro MULTICALL MULTILINE_PAT_MOD MULTIPLICITY MURMUR_C1 +syn keyword xsMacro MURMUR_C2 MURMUR_C3 MURMUR_C4 MURMUR_C5 MURMUR_DOBLOCK +syn keyword xsMacro MURMUR_DOBYTES MUTABLE_AV MUTABLE_CV MUTABLE_GV +syn keyword xsMacro MUTABLE_HV MUTABLE_IO MUTABLE_PTR MUTABLE_SV +syn keyword xsMacro MUTEX_DESTROY MUTEX_INIT MUTEX_INIT_NEEDS_MUTEX_ZEROED +syn keyword xsMacro MUTEX_LOCK MUTEX_UNLOCK MY MY_CXT_CLONE MY_CXT_INDEX +syn keyword xsMacro MY_CXT_INIT MY_CXT_INIT_ARG MY_CXT_INIT_INTERP M_PAT_MODS +syn keyword xsMacro MgBYTEPOS MgBYTEPOS_set MgPV MgPV_const MgPV_nolen_const +syn keyword xsMacro MgTAINTEDDIR MgTAINTEDDIR_off MgTAINTEDDIR_on Mkdir Move +syn keyword xsMacro MoveD NAN_COMPARE_BROKEN NATIVE8_TO_UNI +syn keyword xsMacro NATIVE_BYTE_IS_INVARIANT NATIVE_SKIP NATIVE_TO_ASCII +syn keyword xsMacro NATIVE_TO_I8 NATIVE_TO_LATIN1 NATIVE_TO_UNI NATIVE_TO_UTF +syn keyword xsMacro NATIVE_UTF8_TO_I8 NBOUND NBOUNDA NBOUNDL NBOUNDU +syn keyword xsMacro NBSP_NATIVE NBSP_UTF8 NDBM_H_USES_PROTOTYPES NDEBUG +syn keyword xsMacro NEED_PTHREAD_INIT NEED_VA_COPY NEGATIVE_INDICES_VAR +syn keyword xsMacro NETDB_R_OBSOLETE NEWSV NEW_VERSION NEXTOPER +syn keyword xsMacro NEXT_LINE_CHAR NEXT_OFF NGROUPP NOAMP NOCAPTURE_PAT_MOD +syn keyword xsMacro NOCAPTURE_PAT_MODS NODE_ALIGN NODE_ALIGN_FILL NODE_STEP_B +syn keyword xsMacro NODE_STEP_REGNODE NODE_SZ_STR NOLINE NONDESTRUCT_PAT_MOD +syn keyword xsMacro NONDESTRUCT_PAT_MODS +syn keyword xsMacro NON_OTHER_COUNT_FOR_USE_ONLY_BY_REGCOMP_DOT_C NOOP +syn keyword xsMacro NORETURN_FUNCTION_END NORMAL NOTHING NOTOP NOT_IN_PAD +syn keyword xsMacro NOT_REACHED NO_ENV_ARRAY_IN_MAIN NO_LOCALE +syn keyword xsMacro NO_LOCALECONV_MON_THOUSANDS_SEP NO_TAINT_SUPPORT NPOSIXA +syn keyword xsMacro NPOSIXD NPOSIXL NPOSIXU NREF NREFF NREFFA NREFFL NREFFU +syn keyword xsMacro NSIG NUM2PTR NUM_ANYOF_CODE_POINTS NVSIZE NVTYPE +syn keyword xsMacro NV_BIG_ENDIAN NV_DIG NV_EPSILON NV_INF NV_LITTLE_ENDIAN +syn keyword xsMacro NV_MANT_DIG NV_MAX NV_MAX_10_EXP NV_MAX_EXP NV_MIN +syn keyword xsMacro NV_MIN_10_EXP NV_MIN_EXP NV_MIX_ENDIAN NV_NAN +syn keyword xsMacro NV_OVERFLOWS_INTEGERS_AT NV_PRESERVES_UV_BITS +syn keyword xsMacro NV_WITHIN_IV NV_WITHIN_UV New NewOp NewOpSz Newc Newx +syn keyword xsMacro Newxc Newxz Newz NofAMmeth Null Nullav Nullch Nullcv +syn keyword xsMacro Nullfp Nullgv Nullhe Nullhek Nullhv Nullop Nullsv OASHIFT +syn keyword xsMacro OCSHIFT OCTAL_VALUE OFFUNISKIP ONCE_PAT_MOD ONCE_PAT_MODS +syn keyword xsMacro OPEN OPERAND OPFAIL OPSLOT_HEADER OPSLOT_HEADER_P +syn keyword xsMacro OPTIMIZED OP_BINARY OP_CHECK_MUTEX_INIT +syn keyword xsMacro OP_CHECK_MUTEX_LOCK OP_CHECK_MUTEX_TERM +syn keyword xsMacro OP_CHECK_MUTEX_UNLOCK OP_CLASS OP_DESC OP_ENTRY_PROBE +syn keyword xsMacro OP_FREED OP_GIMME OP_GIMME_REVERSE OP_IS_DIRHOP +syn keyword xsMacro OP_IS_FILETEST OP_IS_FILETEST_ACCESS OP_IS_INFIX_BIT +syn keyword xsMacro OP_IS_NUMCOMPARE OP_IS_SOCKET OP_LVALUE_NO_CROAK OP_NAME +syn keyword xsMacro OP_REFCNT_INIT OP_REFCNT_LOCK OP_REFCNT_TERM +syn keyword xsMacro OP_REFCNT_UNLOCK OP_SIBLING OP_TYPE_IS OP_TYPE_ISNT +syn keyword xsMacro OP_TYPE_ISNT_AND_WASNT OP_TYPE_ISNT_AND_WASNT_NN +syn keyword xsMacro OP_TYPE_ISNT_NN OP_TYPE_IS_NN OP_TYPE_IS_OR_WAS +syn keyword xsMacro OP_TYPE_IS_OR_WAS_NN OROP OROR OSNAME OSVERS O_CREAT +syn keyword xsMacro O_RDONLY O_RDWR O_TEXT O_WRONLY Off Off_t_size +syn keyword xsMacro OpHAS_SIBLING OpLASTSIB_set OpMAYBESIB_set OpMORESIB_set +syn keyword xsMacro OpREFCNT_dec OpREFCNT_inc OpREFCNT_set OpSIBLING OpSLAB +syn keyword xsMacro OpSLOT OpslabREFCNT_dec OpslabREFCNT_dec_padok OutCopFILE +syn keyword xsMacro PADNAME_FROM_PV PADNAMEt_LVALUE PADNAMEt_OUR +syn keyword xsMacro PADNAMEt_OUTER PADNAMEt_STATE PADNAMEt_TYPED PAD_BASE_SV +syn keyword xsMacro PAD_CLONE_VARS PAD_COMPNAME PAD_COMPNAME_FLAGS +syn keyword xsMacro PAD_COMPNAME_FLAGS_isOUR PAD_COMPNAME_GEN +syn keyword xsMacro PAD_COMPNAME_GEN_set PAD_COMPNAME_OURSTASH +syn keyword xsMacro PAD_COMPNAME_PV PAD_COMPNAME_SV PAD_COMPNAME_TYPE +syn keyword xsMacro PAD_FAKELEX_ANON PAD_FAKELEX_MULTI PAD_RESTORE_LOCAL +syn keyword xsMacro PAD_SAVE_LOCAL PAD_SAVE_SETNULLPAD PAD_SETSV PAD_SET_CUR +syn keyword xsMacro PAD_SET_CUR_NOSAVE PAD_SV PAD_SVl PARENT_FAKELEX_FLAGS +syn keyword xsMacro PARENT_PAD_INDEX PARSE_OPTIONAL PASS1 PASS2 PATCHLEVEL +syn keyword xsMacro PERLDB_ALL PERLDB_GOTO PERLDB_INTER PERLDB_LINE +syn keyword xsMacro PERLDB_NAMEANON PERLDB_NAMEEVAL PERLDB_NOOPT +syn keyword xsMacro PERLDB_SAVESRC PERLDB_SAVESRC_INVALID +syn keyword xsMacro PERLDB_SAVESRC_NOSUBS PERLDB_SINGLE PERLDB_SUB +syn keyword xsMacro PERLDB_SUBLINE PERLDB_SUB_NN PERLDBf_GOTO PERLDBf_INTER +syn keyword xsMacro PERLDBf_LINE PERLDBf_NAMEANON PERLDBf_NAMEEVAL +syn keyword xsMacro PERLDBf_NONAME PERLDBf_NOOPT PERLDBf_SAVESRC +syn keyword xsMacro PERLDBf_SAVESRC_INVALID PERLDBf_SAVESRC_NOSUBS +syn keyword xsMacro PERLDBf_SINGLE PERLDBf_SUB PERLDBf_SUBLINE +syn keyword xsMacro PERLIOBUF_DEFAULT_BUFSIZ PERLIO_DUP_CLONE PERLIO_DUP_FD +syn keyword xsMacro PERLIO_FUNCS_CAST PERLIO_FUNCS_CONST PERLIO_FUNCS_DECL +syn keyword xsMacro PERLIO_F_APPEND PERLIO_F_CANREAD PERLIO_F_CANWRITE +syn keyword xsMacro PERLIO_F_CLEARED PERLIO_F_CRLF PERLIO_F_EOF +syn keyword xsMacro PERLIO_F_ERROR PERLIO_F_FASTGETS PERLIO_F_LINEBUF +syn keyword xsMacro PERLIO_F_NOTREG PERLIO_F_OPEN PERLIO_F_RDBUF +syn keyword xsMacro PERLIO_F_TEMP PERLIO_F_TRUNCATE PERLIO_F_TTY +syn keyword xsMacro PERLIO_F_UNBUF PERLIO_F_UTF8 PERLIO_F_WRBUF PERLIO_INIT +syn keyword xsMacro PERLIO_IS_STDIO PERLIO_K_BUFFERED PERLIO_K_CANCRLF +syn keyword xsMacro PERLIO_K_DESTRUCT PERLIO_K_DUMMY PERLIO_K_FASTGETS +syn keyword xsMacro PERLIO_K_MULTIARG PERLIO_K_RAW PERLIO_K_UTF8 +syn keyword xsMacro PERLIO_LAYERS PERLIO_NOT_STDIO PERLIO_STDTEXT PERLIO_TERM +syn keyword xsMacro PERLIO_USING_CRLF PERLSI_DESTROY PERLSI_DIEHOOK +syn keyword xsMacro PERLSI_MAGIC PERLSI_MAIN PERLSI_OVERLOAD PERLSI_REQUIRE +syn keyword xsMacro PERLSI_SIGNAL PERLSI_SORT PERLSI_UNDEF PERLSI_UNKNOWN +syn keyword xsMacro PERLSI_WARNHOOK PERL_ABS PERL_ALLOC_CHECK PERL_ANY_COW +syn keyword xsMacro PERL_API_REVISION PERL_API_SUBVERSION PERL_API_VERSION +syn keyword xsMacro PERL_API_VERSION_STRING PERL_ARENA_ROOTS_SIZE +syn keyword xsMacro PERL_ARENA_SIZE PERL_ARGS_ASSERT_ADD_ABOVE_LATIN1_FOLDS +syn keyword xsMacro PERL_ARGS_ASSERT_ADD_DATA +syn keyword xsMacro PERL_ARGS_ASSERT_ADD_MULTI_MATCH +syn keyword xsMacro PERL_ARGS_ASSERT_ADD_UTF16_TEXTFILTER +syn keyword xsMacro PERL_ARGS_ASSERT_ADJUST_SIZE_AND_FIND_BUCKET +syn keyword xsMacro PERL_ARGS_ASSERT_ADVANCE_ONE_SB +syn keyword xsMacro PERL_ARGS_ASSERT_ADVANCE_ONE_WB +syn keyword xsMacro PERL_ARGS_ASSERT_ALLOCCOPSTASH PERL_ARGS_ASSERT_ALLOCMY +syn keyword xsMacro PERL_ARGS_ASSERT_ALLOC_MAYBE_POPULATE_EXACT +syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_CALL PERL_ARGS_ASSERT_AMAGIC_CMP +syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_CMP_LOCALE +syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL +syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_I_NCMP +syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_NCMP +syn keyword xsMacro PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE +syn keyword xsMacro PERL_ARGS_ASSERT_ANY_DUP +syn keyword xsMacro PERL_ARGS_ASSERT_APPEND_UTF8_FROM_NATIVE_BYTE +syn keyword xsMacro PERL_ARGS_ASSERT_APPLY PERL_ARGS_ASSERT_APPLY_ATTRS +syn keyword xsMacro PERL_ARGS_ASSERT_APPLY_ATTRS_MY +syn keyword xsMacro PERL_ARGS_ASSERT_APPLY_ATTRS_STRING +syn keyword xsMacro PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT +syn keyword xsMacro PERL_ARGS_ASSERT_AV_ARYLEN_P PERL_ARGS_ASSERT_AV_CLEAR +syn keyword xsMacro PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH +syn keyword xsMacro PERL_ARGS_ASSERT_AV_CREATE_AND_UNSHIFT_ONE +syn keyword xsMacro PERL_ARGS_ASSERT_AV_DELETE PERL_ARGS_ASSERT_AV_EXISTS +syn keyword xsMacro PERL_ARGS_ASSERT_AV_EXTEND +syn keyword xsMacro PERL_ARGS_ASSERT_AV_EXTEND_GUTS PERL_ARGS_ASSERT_AV_FETCH +syn keyword xsMacro PERL_ARGS_ASSERT_AV_FILL PERL_ARGS_ASSERT_AV_ITER_P +syn keyword xsMacro PERL_ARGS_ASSERT_AV_LEN PERL_ARGS_ASSERT_AV_MAKE +syn keyword xsMacro PERL_ARGS_ASSERT_AV_POP PERL_ARGS_ASSERT_AV_PUSH +syn keyword xsMacro PERL_ARGS_ASSERT_AV_REIFY PERL_ARGS_ASSERT_AV_SHIFT +syn keyword xsMacro PERL_ARGS_ASSERT_AV_STORE PERL_ARGS_ASSERT_AV_TOP_INDEX +syn keyword xsMacro PERL_ARGS_ASSERT_AV_UNDEF PERL_ARGS_ASSERT_AV_UNSHIFT +syn keyword xsMacro PERL_ARGS_ASSERT_BACKUP_ONE_SB +syn keyword xsMacro PERL_ARGS_ASSERT_BACKUP_ONE_WB +syn keyword xsMacro PERL_ARGS_ASSERT_BAD_TYPE_GV PERL_ARGS_ASSERT_BAD_TYPE_PV +syn keyword xsMacro PERL_ARGS_ASSERT_BIND_MATCH +syn keyword xsMacro PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER +syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_CMP_UTF8 +syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_FROM_UTF8 +syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_TO_UTF8 PERL_ARGS_ASSERT_CALL_ARGV +syn keyword xsMacro PERL_ARGS_ASSERT_CALL_LIST PERL_ARGS_ASSERT_CALL_METHOD +syn keyword xsMacro PERL_ARGS_ASSERT_CALL_PV PERL_ARGS_ASSERT_CALL_SV +syn keyword xsMacro PERL_ARGS_ASSERT_CANDO PERL_ARGS_ASSERT_CHECKCOMMA +syn keyword xsMacro PERL_ARGS_ASSERT_CHECK_LOCALE_BOUNDARY_CROSSING +syn keyword xsMacro PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN +syn keyword xsMacro PERL_ARGS_ASSERT_CHECK_UTF8_PRINT +syn keyword xsMacro PERL_ARGS_ASSERT_CK_ANONCODE PERL_ARGS_ASSERT_CK_BACKTICK +syn keyword xsMacro PERL_ARGS_ASSERT_CK_BITOP PERL_ARGS_ASSERT_CK_CMP +syn keyword xsMacro PERL_ARGS_ASSERT_CK_CONCAT PERL_ARGS_ASSERT_CK_DEFINED +syn keyword xsMacro PERL_ARGS_ASSERT_CK_DELETE PERL_ARGS_ASSERT_CK_EACH +syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE +syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST +syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO +syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST +syn keyword xsMacro PERL_ARGS_ASSERT_CK_EOF PERL_ARGS_ASSERT_CK_EVAL +syn keyword xsMacro PERL_ARGS_ASSERT_CK_EXEC PERL_ARGS_ASSERT_CK_EXISTS +syn keyword xsMacro PERL_ARGS_ASSERT_CK_FTST PERL_ARGS_ASSERT_CK_FUN +syn keyword xsMacro PERL_ARGS_ASSERT_CK_GLOB PERL_ARGS_ASSERT_CK_GREP +syn keyword xsMacro PERL_ARGS_ASSERT_CK_INDEX PERL_ARGS_ASSERT_CK_JOIN +syn keyword xsMacro PERL_ARGS_ASSERT_CK_LENGTH PERL_ARGS_ASSERT_CK_LFUN +syn keyword xsMacro PERL_ARGS_ASSERT_CK_LISTIOB PERL_ARGS_ASSERT_CK_MATCH +syn keyword xsMacro PERL_ARGS_ASSERT_CK_METHOD PERL_ARGS_ASSERT_CK_NULL +syn keyword xsMacro PERL_ARGS_ASSERT_CK_OPEN PERL_ARGS_ASSERT_CK_PROTOTYPE +syn keyword xsMacro PERL_ARGS_ASSERT_CK_READLINE +syn keyword xsMacro PERL_ARGS_ASSERT_CK_REFASSIGN PERL_ARGS_ASSERT_CK_REPEAT +syn keyword xsMacro PERL_ARGS_ASSERT_CK_REQUIRE PERL_ARGS_ASSERT_CK_RETURN +syn keyword xsMacro PERL_ARGS_ASSERT_CK_RFUN PERL_ARGS_ASSERT_CK_RVCONST +syn keyword xsMacro PERL_ARGS_ASSERT_CK_SASSIGN PERL_ARGS_ASSERT_CK_SELECT +syn keyword xsMacro PERL_ARGS_ASSERT_CK_SHIFT PERL_ARGS_ASSERT_CK_SMARTMATCH +syn keyword xsMacro PERL_ARGS_ASSERT_CK_SORT PERL_ARGS_ASSERT_CK_SPAIR +syn keyword xsMacro PERL_ARGS_ASSERT_CK_SPLIT PERL_ARGS_ASSERT_CK_STRINGIFY +syn keyword xsMacro PERL_ARGS_ASSERT_CK_SUBR PERL_ARGS_ASSERT_CK_SUBSTR +syn keyword xsMacro PERL_ARGS_ASSERT_CK_SVCONST PERL_ARGS_ASSERT_CK_TELL +syn keyword xsMacro PERL_ARGS_ASSERT_CK_TRUNC PERL_ARGS_ASSERT_CK_WARNER +syn keyword xsMacro PERL_ARGS_ASSERT_CK_WARNER_D +syn keyword xsMacro PERL_ARGS_ASSERT_CLEAR_PLACEHOLDERS +syn keyword xsMacro PERL_ARGS_ASSERT_CLEAR_SPECIAL_BLOCKS +syn keyword xsMacro PERL_ARGS_ASSERT_CLONE_PARAMS_DEL +syn keyword xsMacro PERL_ARGS_ASSERT_CLONE_PARAMS_NEW +syn keyword xsMacro PERL_ARGS_ASSERT_CLOSEST_COP +syn keyword xsMacro PERL_ARGS_ASSERT_COMPUTE_EXACTISH +syn keyword xsMacro PERL_ARGS_ASSERT_CONSTRUCT_AHOCORASICK_FROM_TRIE +syn keyword xsMacro PERL_ARGS_ASSERT_COP_FETCH_LABEL +syn keyword xsMacro PERL_ARGS_ASSERT_COP_FREE +syn keyword xsMacro PERL_ARGS_ASSERT_COP_STORE_LABEL +syn keyword xsMacro PERL_ARGS_ASSERT_CORESUB_OP +syn keyword xsMacro PERL_ARGS_ASSERT_CORE_PROTOTYPE +syn keyword xsMacro PERL_ARGS_ASSERT_COULD_IT_BE_A_POSIX_CLASS +syn keyword xsMacro PERL_ARGS_ASSERT_CROAK_SV PERL_ARGS_ASSERT_CROAK_XS_USAGE +syn keyword xsMacro PERL_ARGS_ASSERT_CURSE PERL_ARGS_ASSERT_CUSTOM_OP_DESC +syn keyword xsMacro PERL_ARGS_ASSERT_CUSTOM_OP_GET_FIELD +syn keyword xsMacro PERL_ARGS_ASSERT_CUSTOM_OP_NAME +syn keyword xsMacro PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER +syn keyword xsMacro PERL_ARGS_ASSERT_CVGV_FROM_HEK PERL_ARGS_ASSERT_CVGV_SET +syn keyword xsMacro PERL_ARGS_ASSERT_CVSTASH_SET +syn keyword xsMacro PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_CV_CLONE PERL_ARGS_ASSERT_CV_CLONE_INTO +syn keyword xsMacro PERL_ARGS_ASSERT_CV_DUMP +syn keyword xsMacro PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER +syn keyword xsMacro PERL_ARGS_ASSERT_CV_NAME +syn keyword xsMacro PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER +syn keyword xsMacro PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_CV_UNDEF PERL_ARGS_ASSERT_CV_UNDEF_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_CX_DUMP PERL_ARGS_ASSERT_CX_DUP +syn keyword xsMacro PERL_ARGS_ASSERT_DEB PERL_ARGS_ASSERT_DEBOP +syn keyword xsMacro PERL_ARGS_ASSERT_DEBPROF +syn keyword xsMacro PERL_ARGS_ASSERT_DEBUG_START_MATCH +syn keyword xsMacro PERL_ARGS_ASSERT_DEB_NOCONTEXT +syn keyword xsMacro PERL_ARGS_ASSERT_DEB_STACK_N +syn keyword xsMacro PERL_ARGS_ASSERT_DEFELEM_TARGET PERL_ARGS_ASSERT_DELIMCPY +syn keyword xsMacro PERL_ARGS_ASSERT_DEL_SV PERL_ARGS_ASSERT_DESTROY_MATCHER +syn keyword xsMacro PERL_ARGS_ASSERT_DIE_SV PERL_ARGS_ASSERT_DIE_UNWIND +syn keyword xsMacro PERL_ARGS_ASSERT_DIRP_DUP PERL_ARGS_ASSERT_DIV128 +syn keyword xsMacro PERL_ARGS_ASSERT_DOFILE PERL_ARGS_ASSERT_DOFINDLABEL +syn keyword xsMacro PERL_ARGS_ASSERT_DOFORM PERL_ARGS_ASSERT_DOONELINER +syn keyword xsMacro PERL_ARGS_ASSERT_DOOPEN_PM PERL_ARGS_ASSERT_DOPARSEFORM +syn keyword xsMacro PERL_ARGS_ASSERT_DOPOPTOLABEL +syn keyword xsMacro PERL_ARGS_ASSERT_DOPOPTOSUB_AT PERL_ARGS_ASSERT_DOREF +syn keyword xsMacro PERL_ARGS_ASSERT_DO_AEXEC PERL_ARGS_ASSERT_DO_AEXEC5 +syn keyword xsMacro PERL_ARGS_ASSERT_DO_ASPAWN PERL_ARGS_ASSERT_DO_BINMODE +syn keyword xsMacro PERL_ARGS_ASSERT_DO_CHOMP PERL_ARGS_ASSERT_DO_DUMP_PAD +syn keyword xsMacro PERL_ARGS_ASSERT_DO_EOF PERL_ARGS_ASSERT_DO_EXEC +syn keyword xsMacro PERL_ARGS_ASSERT_DO_EXEC3 PERL_ARGS_ASSERT_DO_GVGV_DUMP +syn keyword xsMacro PERL_ARGS_ASSERT_DO_GV_DUMP PERL_ARGS_ASSERT_DO_HV_DUMP +syn keyword xsMacro PERL_ARGS_ASSERT_DO_IPCCTL PERL_ARGS_ASSERT_DO_IPCGET +syn keyword xsMacro PERL_ARGS_ASSERT_DO_JOIN PERL_ARGS_ASSERT_DO_MAGIC_DUMP +syn keyword xsMacro PERL_ARGS_ASSERT_DO_MSGRCV PERL_ARGS_ASSERT_DO_MSGSND +syn keyword xsMacro PERL_ARGS_ASSERT_DO_NCMP PERL_ARGS_ASSERT_DO_ODDBALL +syn keyword xsMacro PERL_ARGS_ASSERT_DO_OPEN PERL_ARGS_ASSERT_DO_OPEN6 +syn keyword xsMacro PERL_ARGS_ASSERT_DO_OPEN9 PERL_ARGS_ASSERT_DO_OPENN +syn keyword xsMacro PERL_ARGS_ASSERT_DO_OPEN_RAW PERL_ARGS_ASSERT_DO_OP_DUMP +syn keyword xsMacro PERL_ARGS_ASSERT_DO_PMOP_DUMP PERL_ARGS_ASSERT_DO_PRINT +syn keyword xsMacro PERL_ARGS_ASSERT_DO_SEMOP PERL_ARGS_ASSERT_DO_SHMIO +syn keyword xsMacro PERL_ARGS_ASSERT_DO_SPAWN +syn keyword xsMacro PERL_ARGS_ASSERT_DO_SPAWN_NOWAIT +syn keyword xsMacro PERL_ARGS_ASSERT_DO_SPRINTF PERL_ARGS_ASSERT_DO_SV_DUMP +syn keyword xsMacro PERL_ARGS_ASSERT_DO_SYSSEEK PERL_ARGS_ASSERT_DO_TELL +syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS +syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COMPLEX +syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COMPLEX_UTF8 +syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COUNT +syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COUNT_UTF8 +syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_SIMPLE +syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_SIMPLE_UTF8 +syn keyword xsMacro PERL_ARGS_ASSERT_DO_VECGET PERL_ARGS_ASSERT_DO_VECSET +syn keyword xsMacro PERL_ARGS_ASSERT_DO_VOP PERL_ARGS_ASSERT_DRAND48_INIT_R +syn keyword xsMacro PERL_ARGS_ASSERT_DRAND48_R PERL_ARGS_ASSERT_DUMPUNTIL +syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_C_BACKTRACE +syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_EXEC_POS PERL_ARGS_ASSERT_DUMP_FORM +syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_INDENT PERL_ARGS_ASSERT_DUMP_MSTATS +syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_PACKSUBS +syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_PACKSUBS_PERL +syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_SUB PERL_ARGS_ASSERT_DUMP_SUB_PERL +syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_SV_CHILD PERL_ARGS_ASSERT_DUMP_TRIE +syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_LIST +syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_TABLE +syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_VINDENT +syn keyword xsMacro PERL_ARGS_ASSERT_DUP_ATTRLIST +syn keyword xsMacro PERL_ARGS_ASSERT_EMULATE_COP_IO PERL_ARGS_ASSERT_EVAL_PV +syn keyword xsMacro PERL_ARGS_ASSERT_EVAL_SV PERL_ARGS_ASSERT_EXEC_FAILED +syn keyword xsMacro PERL_ARGS_ASSERT_EXPECT_NUMBER PERL_ARGS_ASSERT_F0CONVERT +syn keyword xsMacro PERL_ARGS_ASSERT_FBM_COMPILE PERL_ARGS_ASSERT_FBM_INSTR +syn keyword xsMacro PERL_ARGS_ASSERT_FEATURE_IS_ENABLED +syn keyword xsMacro PERL_ARGS_ASSERT_FILTER_DEL PERL_ARGS_ASSERT_FILTER_GETS +syn keyword xsMacro PERL_ARGS_ASSERT_FILTER_READ PERL_ARGS_ASSERT_FINALIZE_OP +syn keyword xsMacro PERL_ARGS_ASSERT_FINALIZE_OPTREE +syn keyword xsMacro PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS +syn keyword xsMacro PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT +syn keyword xsMacro PERL_ARGS_ASSERT_FIND_BEGINNING +syn keyword xsMacro PERL_ARGS_ASSERT_FIND_BYCLASS +syn keyword xsMacro PERL_ARGS_ASSERT_FIND_DEFAULT_STASH +syn keyword xsMacro PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT +syn keyword xsMacro PERL_ARGS_ASSERT_FIND_IN_MY_STASH +syn keyword xsMacro PERL_ARGS_ASSERT_FIND_RUNDEFSV2 +syn keyword xsMacro PERL_ARGS_ASSERT_FIND_SCRIPT +syn keyword xsMacro PERL_ARGS_ASSERT_FIND_UNINIT_VAR +syn keyword xsMacro PERL_ARGS_ASSERT_FIRST_SYMBOL +syn keyword xsMacro PERL_ARGS_ASSERT_FIXUP_ERRNO_STRING +syn keyword xsMacro PERL_ARGS_ASSERT_FOLDEQ PERL_ARGS_ASSERT_FOLDEQ_LATIN1 +syn keyword xsMacro PERL_ARGS_ASSERT_FOLDEQ_LOCALE +syn keyword xsMacro PERL_ARGS_ASSERT_FOLDEQ_UTF8_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_FOLD_CONSTANTS +syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_IDENT +syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_STRICT_VERSION +syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_VERSION +syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_WORD PERL_ARGS_ASSERT_FORGET_PMOP +syn keyword xsMacro PERL_ARGS_ASSERT_FORM PERL_ARGS_ASSERT_FORM_NOCONTEXT +syn keyword xsMacro PERL_ARGS_ASSERT_FORM_SHORT_OCTAL_WARNING +syn keyword xsMacro PERL_ARGS_ASSERT_FPRINTF_NOCONTEXT +syn keyword xsMacro PERL_ARGS_ASSERT_FP_DUP +syn keyword xsMacro PERL_ARGS_ASSERT_FREE_GLOBAL_STRUCT +syn keyword xsMacro PERL_ARGS_ASSERT_GETCWD_SV PERL_ARGS_ASSERT_GETENV_LEN +syn keyword xsMacro PERL_ARGS_ASSERT_GET_AND_CHECK_BACKSLASH_N_NAME +syn keyword xsMacro PERL_ARGS_ASSERT_GET_ANYOF_CP_LIST_FOR_SSC +syn keyword xsMacro PERL_ARGS_ASSERT_GET_AUX_MG PERL_ARGS_ASSERT_GET_AV +syn keyword xsMacro PERL_ARGS_ASSERT_GET_CV PERL_ARGS_ASSERT_GET_CVN_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_GET_DB_SUB +syn keyword xsMacro PERL_ARGS_ASSERT_GET_DEBUG_OPTS +syn keyword xsMacro PERL_ARGS_ASSERT_GET_HASH_SEED PERL_ARGS_ASSERT_GET_HV +syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_ITER_ADDR +syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_OFFSET_ADDR +syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_PREVIOUS_INDEX_ADDR +syn keyword xsMacro PERL_ARGS_ASSERT_GET_MSTATS PERL_ARGS_ASSERT_GET_NUM +syn keyword xsMacro PERL_ARGS_ASSERT_GET_SV PERL_ARGS_ASSERT_GLOB_2NUMBER +syn keyword xsMacro PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB PERL_ARGS_ASSERT_GP_DUP +syn keyword xsMacro PERL_ARGS_ASSERT_GROK_ATOUV PERL_ARGS_ASSERT_GROK_BIN +syn keyword xsMacro PERL_ARGS_ASSERT_GROK_BSLASH_N +syn keyword xsMacro PERL_ARGS_ASSERT_GROK_BSLASH_O +syn keyword xsMacro PERL_ARGS_ASSERT_GROK_BSLASH_X PERL_ARGS_ASSERT_GROK_HEX +syn keyword xsMacro PERL_ARGS_ASSERT_GROK_INFNAN PERL_ARGS_ASSERT_GROK_NUMBER +syn keyword xsMacro PERL_ARGS_ASSERT_GROK_NUMBER_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_GROK_NUMERIC_RADIX +syn keyword xsMacro PERL_ARGS_ASSERT_GROK_OCT PERL_ARGS_ASSERT_GROUP_END +syn keyword xsMacro PERL_ARGS_ASSERT_GV_AMUPDATE +syn keyword xsMacro PERL_ARGS_ASSERT_GV_AUTOLOAD_PV +syn keyword xsMacro PERL_ARGS_ASSERT_GV_AUTOLOAD_PVN +syn keyword xsMacro PERL_ARGS_ASSERT_GV_AUTOLOAD_SV PERL_ARGS_ASSERT_GV_CHECK +syn keyword xsMacro PERL_ARGS_ASSERT_GV_CONST_SV +syn keyword xsMacro PERL_ARGS_ASSERT_GV_EFULLNAME +syn keyword xsMacro PERL_ARGS_ASSERT_GV_EFULLNAME3 +syn keyword xsMacro PERL_ARGS_ASSERT_GV_EFULLNAME4 +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHFILE +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHFILE_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_PVN_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_PV_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PV +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PVN +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PVN_AUTOLOAD +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PV_AUTOLOAD +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_SV +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_SV_AUTOLOAD +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHPV +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHPVN_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHSV PERL_ARGS_ASSERT_GV_FULLNAME +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FULLNAME3 +syn keyword xsMacro PERL_ARGS_ASSERT_GV_FULLNAME4 PERL_ARGS_ASSERT_GV_INIT_PV +syn keyword xsMacro PERL_ARGS_ASSERT_GV_INIT_PVN PERL_ARGS_ASSERT_GV_INIT_SV +syn keyword xsMacro PERL_ARGS_ASSERT_GV_INIT_SVTYPE +syn keyword xsMacro PERL_ARGS_ASSERT_GV_IS_IN_MAIN +syn keyword xsMacro PERL_ARGS_ASSERT_GV_MAGICALIZE +syn keyword xsMacro PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA +syn keyword xsMacro PERL_ARGS_ASSERT_GV_NAME_SET PERL_ARGS_ASSERT_GV_OVERRIDE +syn keyword xsMacro PERL_ARGS_ASSERT_GV_SETREF PERL_ARGS_ASSERT_GV_STASHPV +syn keyword xsMacro PERL_ARGS_ASSERT_GV_STASHPVN +syn keyword xsMacro PERL_ARGS_ASSERT_GV_STASHPVN_INTERNAL +syn keyword xsMacro PERL_ARGS_ASSERT_GV_STASHSV +syn keyword xsMacro PERL_ARGS_ASSERT_GV_TRY_DOWNGRADE +syn keyword xsMacro PERL_ARGS_ASSERT_HANDLE_REGEX_SETS +syn keyword xsMacro PERL_ARGS_ASSERT_HEK_DUP PERL_ARGS_ASSERT_HE_DUP +syn keyword xsMacro PERL_ARGS_ASSERT_HFREEENTRIES +syn keyword xsMacro PERL_ARGS_ASSERT_HFREE_NEXT_ENTRY PERL_ARGS_ASSERT_HSPLIT +syn keyword xsMacro PERL_ARGS_ASSERT_HV_ASSERT PERL_ARGS_ASSERT_HV_AUXINIT +syn keyword xsMacro PERL_ARGS_ASSERT_HV_AUXINIT_INTERNAL +syn keyword xsMacro PERL_ARGS_ASSERT_HV_BACKREFERENCES_P +syn keyword xsMacro PERL_ARGS_ASSERT_HV_CLEAR_PLACEHOLDERS +syn keyword xsMacro PERL_ARGS_ASSERT_HV_COMMON_KEY_LEN +syn keyword xsMacro PERL_ARGS_ASSERT_HV_DELAYFREE_ENT +syn keyword xsMacro PERL_ARGS_ASSERT_HV_DELETE PERL_ARGS_ASSERT_HV_DELETE_ENT +syn keyword xsMacro PERL_ARGS_ASSERT_HV_EITER_P PERL_ARGS_ASSERT_HV_EITER_SET +syn keyword xsMacro PERL_ARGS_ASSERT_HV_ENAME_ADD +syn keyword xsMacro PERL_ARGS_ASSERT_HV_ENAME_DELETE +syn keyword xsMacro PERL_ARGS_ASSERT_HV_EXISTS PERL_ARGS_ASSERT_HV_EXISTS_ENT +syn keyword xsMacro PERL_ARGS_ASSERT_HV_FETCH PERL_ARGS_ASSERT_HV_FETCH_ENT +syn keyword xsMacro PERL_ARGS_ASSERT_HV_FILL PERL_ARGS_ASSERT_HV_FREE_ENT +syn keyword xsMacro PERL_ARGS_ASSERT_HV_FREE_ENT_RET +syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERINIT PERL_ARGS_ASSERT_HV_ITERKEY +syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERKEYSV +syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERNEXT +syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERNEXTSV +syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERNEXT_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERVAL +syn keyword xsMacro PERL_ARGS_ASSERT_HV_KILL_BACKREFS +syn keyword xsMacro PERL_ARGS_ASSERT_HV_KSPLIT PERL_ARGS_ASSERT_HV_MAGIC +syn keyword xsMacro PERL_ARGS_ASSERT_HV_MAGIC_CHECK +syn keyword xsMacro PERL_ARGS_ASSERT_HV_NAME_SET +syn keyword xsMacro PERL_ARGS_ASSERT_HV_NOTALLOWED +syn keyword xsMacro PERL_ARGS_ASSERT_HV_PLACEHOLDERS_GET +syn keyword xsMacro PERL_ARGS_ASSERT_HV_PLACEHOLDERS_P +syn keyword xsMacro PERL_ARGS_ASSERT_HV_PLACEHOLDERS_SET +syn keyword xsMacro PERL_ARGS_ASSERT_HV_RAND_SET PERL_ARGS_ASSERT_HV_RITER_P +syn keyword xsMacro PERL_ARGS_ASSERT_HV_RITER_SET PERL_ARGS_ASSERT_HV_SCALAR +syn keyword xsMacro PERL_ARGS_ASSERT_INCLINE PERL_ARGS_ASSERT_INCPUSH +syn keyword xsMacro PERL_ARGS_ASSERT_INCPUSH_IF_EXISTS +syn keyword xsMacro PERL_ARGS_ASSERT_INCPUSH_USE_SEP +syn keyword xsMacro PERL_ARGS_ASSERT_INIT_ARGV_SYMBOLS +syn keyword xsMacro PERL_ARGS_ASSERT_INIT_POSTDUMP_SYMBOLS +syn keyword xsMacro PERL_ARGS_ASSERT_INIT_TM PERL_ARGS_ASSERT_INPLACE_AASSIGN +syn keyword xsMacro PERL_ARGS_ASSERT_INSTR PERL_ARGS_ASSERT_INTUIT_METHOD +syn keyword xsMacro PERL_ARGS_ASSERT_INTUIT_MORE +syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_ARRAY +syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_CLONE +syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_EXTEND +syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_HIGHEST +syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_IS_ITERATING +syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_ITERFINISH +syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_ITERINIT +syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_ITERNEXT +syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_MAX +syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_PREVIOUS_INDEX +syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_SET_LEN +syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_SET_PREVIOUS_INDEX +syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_TRIM PERL_ARGS_ASSERT_IO_CLOSE +syn keyword xsMacro PERL_ARGS_ASSERT_ISALNUM_LAZY PERL_ARGS_ASSERT_ISA_LOOKUP +syn keyword xsMacro PERL_ARGS_ASSERT_ISFOO_UTF8_LC +syn keyword xsMacro PERL_ARGS_ASSERT_ISIDFIRST_LAZY +syn keyword xsMacro PERL_ARGS_ASSERT_ISINFNANSV PERL_ARGS_ASSERT_ISSB +syn keyword xsMacro PERL_ARGS_ASSERT_ISWB PERL_ARGS_ASSERT_IS_AN_INT +syn keyword xsMacro PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR +syn keyword xsMacro PERL_ARGS_ASSERT_IS_INVARIANT_STRING +syn keyword xsMacro PERL_ARGS_ASSERT_IS_SAFE_SYSCALL +syn keyword xsMacro PERL_ARGS_ASSERT_IS_SSC_WORTH_IT +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_ALNUM +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_ALNUMC +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_ALPHA +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_ASCII +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_BLANK +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CHAR +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CHAR_BUF +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CNTRL +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_COMMON +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_DIGIT +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_GRAPH +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_IDCONT +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_IDFIRST +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_LOWER +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_MARK +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PERL_SPACE +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PERL_WORD +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_POSIX_DIGIT +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PRINT +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PUNCT +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_SPACE +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_STRING +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_STRING_LOC +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_STRING_LOCLEN +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_UPPER +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_XDIGIT +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_XIDCONT +syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_XIDFIRST PERL_ARGS_ASSERT_JMAYBE +syn keyword xsMacro PERL_ARGS_ASSERT_JOIN_EXACT PERL_ARGS_ASSERT_KEYWORD +syn keyword xsMacro PERL_ARGS_ASSERT_KEYWORD_PLUGIN_STANDARD +syn keyword xsMacro PERL_ARGS_ASSERT_LEAVE_COMMON +syn keyword xsMacro PERL_ARGS_ASSERT_LEX_DISCARD_TO +syn keyword xsMacro PERL_ARGS_ASSERT_LEX_READ_TO +syn keyword xsMacro PERL_ARGS_ASSERT_LEX_STUFF_PV +syn keyword xsMacro PERL_ARGS_ASSERT_LEX_STUFF_PVN +syn keyword xsMacro PERL_ARGS_ASSERT_LEX_STUFF_SV +syn keyword xsMacro PERL_ARGS_ASSERT_LEX_UNSTUFF PERL_ARGS_ASSERT_LOAD_MODULE +syn keyword xsMacro PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT +syn keyword xsMacro PERL_ARGS_ASSERT_LOCALIZE +syn keyword xsMacro PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL +syn keyword xsMacro PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER PERL_ARGS_ASSERT_LOP +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARARYLEN_P +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARENV +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARHINT +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARHINTS +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARISA +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARPACK +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARSIG +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_COPYCALLCHECKER +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_EXISTSPACK +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_FREEOVRLD +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GET +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETARYLEN +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETDEBUGVAR +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETDEFELEM +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETNKEYS +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETPACK +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETPOS +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETSIG +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETSUBSTR +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETTAINT +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETUVAR +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETVEC +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_METHCALL +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_METHCALL1 +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_METHPACK +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_NEXTPACK +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_REGDATA_CNT +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_REGDATUM_GET +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SCALARPACK +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SET +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETARYLEN +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETDBLINE +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETDEBUGVAR +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETDEFELEM +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETENV +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETHINT +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETISA +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETLVREF +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETMGLOB +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETNKEYS +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETPACK +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETPOS +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETREGEXP +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETSIG +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETSUBSTR +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETTAINT +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETUTF8 +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETUVAR +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETVEC +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SIZEPACK +syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_WIPEPACK +syn keyword xsMacro PERL_ARGS_ASSERT_MAKE_MATCHER PERL_ARGS_ASSERT_MAKE_TRIE +syn keyword xsMacro PERL_ARGS_ASSERT_MALLOCED_SIZE +syn keyword xsMacro PERL_ARGS_ASSERT_MATCHER_MATCHES_SV +syn keyword xsMacro PERL_ARGS_ASSERT_MAYBERELOCATE +syn keyword xsMacro PERL_ARGS_ASSERT_MAYBE_MULTIMAGIC_GV +syn keyword xsMacro PERL_ARGS_ASSERT_MEASURE_STRUCT +syn keyword xsMacro PERL_ARGS_ASSERT_MEM_COLLXFRM +syn keyword xsMacro PERL_ARGS_ASSERT_MEM_LOG_COMMON PERL_ARGS_ASSERT_MESS +syn keyword xsMacro PERL_ARGS_ASSERT_MESS_NOCONTEXT PERL_ARGS_ASSERT_MESS_SV +syn keyword xsMacro PERL_ARGS_ASSERT_MG_CLEAR PERL_ARGS_ASSERT_MG_COPY +syn keyword xsMacro PERL_ARGS_ASSERT_MG_DUP PERL_ARGS_ASSERT_MG_FIND_MGLOB +syn keyword xsMacro PERL_ARGS_ASSERT_MG_FREE PERL_ARGS_ASSERT_MG_FREE_TYPE +syn keyword xsMacro PERL_ARGS_ASSERT_MG_GET PERL_ARGS_ASSERT_MG_LENGTH +syn keyword xsMacro PERL_ARGS_ASSERT_MG_LOCALIZE PERL_ARGS_ASSERT_MG_MAGICAL +syn keyword xsMacro PERL_ARGS_ASSERT_MG_SET PERL_ARGS_ASSERT_MG_SIZE +syn keyword xsMacro PERL_ARGS_ASSERT_MINI_MKTIME +syn keyword xsMacro PERL_ARGS_ASSERT_MORESWITCHES +syn keyword xsMacro PERL_ARGS_ASSERT_MOVE_PROTO_ATTR +syn keyword xsMacro PERL_ARGS_ASSERT_MRO_CLEAN_ISAREV +syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GATHER_AND_RENAME +syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_FROM_NAME +syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_LINEAR_ISA +syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_LINEAR_ISA_DFS +syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_PRIVATE_DATA +syn keyword xsMacro PERL_ARGS_ASSERT_MRO_ISA_CHANGED_IN +syn keyword xsMacro PERL_ARGS_ASSERT_MRO_META_DUP +syn keyword xsMacro PERL_ARGS_ASSERT_MRO_META_INIT +syn keyword xsMacro PERL_ARGS_ASSERT_MRO_METHOD_CHANGED_IN +syn keyword xsMacro PERL_ARGS_ASSERT_MRO_PACKAGE_MOVED +syn keyword xsMacro PERL_ARGS_ASSERT_MRO_REGISTER +syn keyword xsMacro PERL_ARGS_ASSERT_MRO_SET_MRO +syn keyword xsMacro PERL_ARGS_ASSERT_MRO_SET_PRIVATE_DATA +syn keyword xsMacro PERL_ARGS_ASSERT_MUL128 +syn keyword xsMacro PERL_ARGS_ASSERT_MULTIDEREF_STRINGIFY +syn keyword xsMacro PERL_ARGS_ASSERT_MY_ATOF PERL_ARGS_ASSERT_MY_ATOF2 +syn keyword xsMacro PERL_ARGS_ASSERT_MY_ATTRS PERL_ARGS_ASSERT_MY_BCOPY +syn keyword xsMacro PERL_ARGS_ASSERT_MY_BYTES_TO_UTF8 +syn keyword xsMacro PERL_ARGS_ASSERT_MY_BZERO PERL_ARGS_ASSERT_MY_CXT_INDEX +syn keyword xsMacro PERL_ARGS_ASSERT_MY_CXT_INIT PERL_ARGS_ASSERT_MY_KID +syn keyword xsMacro PERL_ARGS_ASSERT_MY_MEMCMP PERL_ARGS_ASSERT_MY_MEMSET +syn keyword xsMacro PERL_ARGS_ASSERT_MY_POPEN PERL_ARGS_ASSERT_MY_POPEN_LIST +syn keyword xsMacro PERL_ARGS_ASSERT_MY_SNPRINTF PERL_ARGS_ASSERT_MY_SPRINTF +syn keyword xsMacro PERL_ARGS_ASSERT_MY_STRFTIME +syn keyword xsMacro PERL_ARGS_ASSERT_MY_VSNPRINTF PERL_ARGS_ASSERT_NEED_UTF8 +syn keyword xsMacro PERL_ARGS_ASSERT_NEWAVREF PERL_ARGS_ASSERT_NEWCONDOP +syn keyword xsMacro PERL_ARGS_ASSERT_NEWFOROP PERL_ARGS_ASSERT_NEWGIVENOP +syn keyword xsMacro PERL_ARGS_ASSERT_NEWGIVWHENOP PERL_ARGS_ASSERT_NEWGP +syn keyword xsMacro PERL_ARGS_ASSERT_NEWGVGEN_FLAGS PERL_ARGS_ASSERT_NEWGVOP +syn keyword xsMacro PERL_ARGS_ASSERT_NEWHVREF PERL_ARGS_ASSERT_NEWLOGOP +syn keyword xsMacro PERL_ARGS_ASSERT_NEWLOOPEX PERL_ARGS_ASSERT_NEWMETHOP +syn keyword xsMacro PERL_ARGS_ASSERT_NEWMETHOP_NAMED +syn keyword xsMacro PERL_ARGS_ASSERT_NEWMYSUB +syn keyword xsMacro PERL_ARGS_ASSERT_NEWPADNAMEOUTER +syn keyword xsMacro PERL_ARGS_ASSERT_NEWPADNAMEPVN PERL_ARGS_ASSERT_NEWPADOP +syn keyword xsMacro PERL_ARGS_ASSERT_NEWPROG PERL_ARGS_ASSERT_NEWRANGE +syn keyword xsMacro PERL_ARGS_ASSERT_NEWRV PERL_ARGS_ASSERT_NEWRV_NOINC +syn keyword xsMacro PERL_ARGS_ASSERT_NEWSTUB PERL_ARGS_ASSERT_NEWSVAVDEFELEM +syn keyword xsMacro PERL_ARGS_ASSERT_NEWSVOP PERL_ARGS_ASSERT_NEWSVPVF +syn keyword xsMacro PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT +syn keyword xsMacro PERL_ARGS_ASSERT_NEWSVREF PERL_ARGS_ASSERT_NEWSVRV +syn keyword xsMacro PERL_ARGS_ASSERT_NEWWHENOP PERL_ARGS_ASSERT_NEWXS +syn keyword xsMacro PERL_ARGS_ASSERT_NEWXS_DEFFILE +syn keyword xsMacro PERL_ARGS_ASSERT_NEWXS_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_NEW_CONSTANT PERL_ARGS_ASSERT_NEW_CTYPE +syn keyword xsMacro PERL_ARGS_ASSERT_NEW_LOGOP PERL_ARGS_ASSERT_NEW_VERSION +syn keyword xsMacro PERL_ARGS_ASSERT_NEW_WARNINGS_BITFIELD +syn keyword xsMacro PERL_ARGS_ASSERT_NEXTARGV PERL_ARGS_ASSERT_NEXTCHAR +syn keyword xsMacro PERL_ARGS_ASSERT_NEXT_SYMBOL PERL_ARGS_ASSERT_NINSTR +syn keyword xsMacro PERL_ARGS_ASSERT_NOPERL_DIE PERL_ARGS_ASSERT_NOT_A_NUMBER +syn keyword xsMacro PERL_ARGS_ASSERT_NOT_INCREMENTABLE +syn keyword xsMacro PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED +syn keyword xsMacro PERL_ARGS_ASSERT_NO_FH_ALLOWED PERL_ARGS_ASSERT_NO_OP +syn keyword xsMacro PERL_ARGS_ASSERT_OOPSAV PERL_ARGS_ASSERT_OOPSHV +syn keyword xsMacro PERL_ARGS_ASSERT_OPENN_CLEANUP +syn keyword xsMacro PERL_ARGS_ASSERT_OPENN_SETUP PERL_ARGS_ASSERT_OPEN_SCRIPT +syn keyword xsMacro PERL_ARGS_ASSERT_OPMETHOD_STASH +syn keyword xsMacro PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE +syn keyword xsMacro PERL_ARGS_ASSERT_OPSLAB_FREE +syn keyword xsMacro PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD +syn keyword xsMacro PERL_ARGS_ASSERT_OP_CLEAR +syn keyword xsMacro PERL_ARGS_ASSERT_OP_CONTEXTUALIZE +syn keyword xsMacro PERL_ARGS_ASSERT_OP_DUMP PERL_ARGS_ASSERT_OP_INTEGERIZE +syn keyword xsMacro PERL_ARGS_ASSERT_OP_LINKLIST PERL_ARGS_ASSERT_OP_NULL +syn keyword xsMacro PERL_ARGS_ASSERT_OP_PARENT PERL_ARGS_ASSERT_OP_REFCNT_DEC +syn keyword xsMacro PERL_ARGS_ASSERT_OP_RELOCATE_SV +syn keyword xsMacro PERL_ARGS_ASSERT_OP_STD_INIT PERL_ARGS_ASSERT_PACKAGE +syn keyword xsMacro PERL_ARGS_ASSERT_PACKAGE_VERSION +syn keyword xsMacro PERL_ARGS_ASSERT_PACKLIST PERL_ARGS_ASSERT_PACK_CAT +syn keyword xsMacro PERL_ARGS_ASSERT_PACK_REC PERL_ARGS_ASSERT_PADLIST_DUP +syn keyword xsMacro PERL_ARGS_ASSERT_PADLIST_STORE +syn keyword xsMacro PERL_ARGS_ASSERT_PADNAMELIST_DUP +syn keyword xsMacro PERL_ARGS_ASSERT_PADNAMELIST_FETCH +syn keyword xsMacro PERL_ARGS_ASSERT_PADNAMELIST_FREE +syn keyword xsMacro PERL_ARGS_ASSERT_PADNAMELIST_STORE +syn keyword xsMacro PERL_ARGS_ASSERT_PADNAME_DUP +syn keyword xsMacro PERL_ARGS_ASSERT_PADNAME_FREE +syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_ANON +syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_NAME_PV +syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_NAME_PVN +syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_NAME_SV +syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_WEAKREF +syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ALLOC_NAME +syn keyword xsMacro PERL_ARGS_ASSERT_PAD_CHECK_DUP +syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDLEX +syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDMY_PV +syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDMY_PVN +syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDMY_SV +syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FIXUP_INNER_ANONS +syn keyword xsMacro PERL_ARGS_ASSERT_PAD_PUSH PERL_ARGS_ASSERT_PAD_SETSV +syn keyword xsMacro PERL_ARGS_ASSERT_PARSER_DUP PERL_ARGS_ASSERT_PARSER_FREE +syn keyword xsMacro PERL_ARGS_ASSERT_PARSER_FREE_NEXTTOKE_OPS +syn keyword xsMacro PERL_ARGS_ASSERT_PARSE_GV_STASH_NAME +syn keyword xsMacro PERL_ARGS_ASSERT_PARSE_IDENT +syn keyword xsMacro PERL_ARGS_ASSERT_PARSE_LPAREN_QUESTION_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_PARSE_UNICODE_OPTS +syn keyword xsMacro PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE +syn keyword xsMacro PERL_ARGS_ASSERT_PERLIO_READ +syn keyword xsMacro PERL_ARGS_ASSERT_PERLIO_UNREAD +syn keyword xsMacro PERL_ARGS_ASSERT_PERLIO_WRITE +syn keyword xsMacro PERL_ARGS_ASSERT_PERL_ALLOC_USING +syn keyword xsMacro PERL_ARGS_ASSERT_PERL_CLONE +syn keyword xsMacro PERL_ARGS_ASSERT_PERL_CLONE_USING +syn keyword xsMacro PERL_ARGS_ASSERT_PERL_CONSTRUCT +syn keyword xsMacro PERL_ARGS_ASSERT_PERL_DESTRUCT PERL_ARGS_ASSERT_PERL_FREE +syn keyword xsMacro PERL_ARGS_ASSERT_PERL_PARSE PERL_ARGS_ASSERT_PERL_RUN +syn keyword xsMacro PERL_ARGS_ASSERT_PMRUNTIME PERL_ARGS_ASSERT_PMTRANS +syn keyword xsMacro PERL_ARGS_ASSERT_PM_DESCRIPTION +syn keyword xsMacro PERL_ARGS_ASSERT_POPULATE_ANYOF_FROM_INVLIST +syn keyword xsMacro PERL_ARGS_ASSERT_POPULATE_ISA PERL_ARGS_ASSERT_PREGCOMP +syn keyword xsMacro PERL_ARGS_ASSERT_PREGEXEC PERL_ARGS_ASSERT_PREGFREE2 +syn keyword xsMacro PERL_ARGS_ASSERT_PRESCAN_VERSION +syn keyword xsMacro PERL_ARGS_ASSERT_PRINTBUF +syn keyword xsMacro PERL_ARGS_ASSERT_PRINTF_NOCONTEXT +syn keyword xsMacro PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS +syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_FETCH +syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_FIND +syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_SPLIT +syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_STORE +syn keyword xsMacro PERL_ARGS_ASSERT_PUT_CHARCLASS_BITMAP_INNARDS +syn keyword xsMacro PERL_ARGS_ASSERT_PUT_CODE_POINT +syn keyword xsMacro PERL_ARGS_ASSERT_PUT_RANGE PERL_ARGS_ASSERT_PV_DISPLAY +syn keyword xsMacro PERL_ARGS_ASSERT_PV_ESCAPE PERL_ARGS_ASSERT_PV_PRETTY +syn keyword xsMacro PERL_ARGS_ASSERT_PV_UNI_DISPLAY PERL_ARGS_ASSERT_QERROR +syn keyword xsMacro PERL_ARGS_ASSERT_QSORTSVU +syn keyword xsMacro PERL_ARGS_ASSERT_QUADMATH_FORMAT_NEEDED +syn keyword xsMacro PERL_ARGS_ASSERT_QUADMATH_FORMAT_SINGLE +syn keyword xsMacro PERL_ARGS_ASSERT_REENTRANT_RETRY +syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PV +syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PVN +syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_SV +syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PV +syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PVN +syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_SV +syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_VALUE +syn keyword xsMacro PERL_ARGS_ASSERT_REFTO PERL_ARGS_ASSERT_REG +syn keyword xsMacro PERL_ARGS_ASSERT_REG2LANODE PERL_ARGS_ASSERT_REGANODE +syn keyword xsMacro PERL_ARGS_ASSERT_REGATOM PERL_ARGS_ASSERT_REGBRANCH +syn keyword xsMacro PERL_ARGS_ASSERT_REGCLASS PERL_ARGS_ASSERT_REGCLASS_SWASH +syn keyword xsMacro PERL_ARGS_ASSERT_REGCPPOP PERL_ARGS_ASSERT_REGCPPUSH +syn keyword xsMacro PERL_ARGS_ASSERT_REGCURLY PERL_ARGS_ASSERT_REGDUMP +syn keyword xsMacro PERL_ARGS_ASSERT_REGDUPE_INTERNAL +syn keyword xsMacro PERL_ARGS_ASSERT_REGEXEC_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_REGFREE_INTERNAL +syn keyword xsMacro PERL_ARGS_ASSERT_REGHOP3 PERL_ARGS_ASSERT_REGHOP4 +syn keyword xsMacro PERL_ARGS_ASSERT_REGHOPMAYBE3 PERL_ARGS_ASSERT_REGINCLASS +syn keyword xsMacro PERL_ARGS_ASSERT_REGINSERT PERL_ARGS_ASSERT_REGMATCH +syn keyword xsMacro PERL_ARGS_ASSERT_REGNODE_GUTS PERL_ARGS_ASSERT_REGPATWS +syn keyword xsMacro PERL_ARGS_ASSERT_REGPIECE PERL_ARGS_ASSERT_REGPPOSIXCC +syn keyword xsMacro PERL_ARGS_ASSERT_REGPROP PERL_ARGS_ASSERT_REGREPEAT +syn keyword xsMacro PERL_ARGS_ASSERT_REGTAIL PERL_ARGS_ASSERT_REGTAIL_STUDY +syn keyword xsMacro PERL_ARGS_ASSERT_REGTRY +syn keyword xsMacro PERL_ARGS_ASSERT_REG_CHECK_NAMED_BUFF_MATCHED +syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF +syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_ALL +syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_EXISTS +syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_FETCH +syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_FIRSTKEY +syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_ITER +syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_NEXTKEY +syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_SCALAR +syn keyword xsMacro PERL_ARGS_ASSERT_REG_NODE +syn keyword xsMacro PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_FETCH +syn keyword xsMacro PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_LENGTH +syn keyword xsMacro PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_STORE +syn keyword xsMacro PERL_ARGS_ASSERT_REG_QR_PACKAGE +syn keyword xsMacro PERL_ARGS_ASSERT_REG_RECODE +syn keyword xsMacro PERL_ARGS_ASSERT_REG_SCAN_NAME +syn keyword xsMacro PERL_ARGS_ASSERT_REG_SKIPCOMMENT +syn keyword xsMacro PERL_ARGS_ASSERT_REG_TEMP_COPY PERL_ARGS_ASSERT_REPEATCPY +syn keyword xsMacro PERL_ARGS_ASSERT_REPORT_REDEFINED_CV +syn keyword xsMacro PERL_ARGS_ASSERT_REQUIRE_PV +syn keyword xsMacro PERL_ARGS_ASSERT_REQUIRE_TIE_MOD +syn keyword xsMacro PERL_ARGS_ASSERT_RE_COMPILE PERL_ARGS_ASSERT_RE_CROAK2 +syn keyword xsMacro PERL_ARGS_ASSERT_RE_DUP_GUTS +syn keyword xsMacro PERL_ARGS_ASSERT_RE_INTUIT_START +syn keyword xsMacro PERL_ARGS_ASSERT_RE_INTUIT_STRING +syn keyword xsMacro PERL_ARGS_ASSERT_RE_OP_COMPILE PERL_ARGS_ASSERT_RNINSTR +syn keyword xsMacro PERL_ARGS_ASSERT_RSIGNAL_SAVE +syn keyword xsMacro PERL_ARGS_ASSERT_RUN_USER_FILTER +syn keyword xsMacro PERL_ARGS_ASSERT_RV2CV_OP_CV PERL_ARGS_ASSERT_RVPV_DUP +syn keyword xsMacro PERL_ARGS_ASSERT_RXRES_FREE +syn keyword xsMacro PERL_ARGS_ASSERT_RXRES_RESTORE +syn keyword xsMacro PERL_ARGS_ASSERT_RXRES_SAVE PERL_ARGS_ASSERT_SAME_DIRENT +syn keyword xsMacro PERL_ARGS_ASSERT_SAVESHAREDSVPV PERL_ARGS_ASSERT_SAVESVPV +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_ADELETE +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_AELEM_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_ALIASED_SV +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_APTR PERL_ARGS_ASSERT_SAVE_ARY +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_BOOL PERL_ARGS_ASSERT_SAVE_CLEARSV +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_DELETE +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_DESTRUCTOR +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_GENERIC_PVREF +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_GENERIC_SVREF +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_GP PERL_ARGS_ASSERT_SAVE_HASH +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HDELETE +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HEK_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HELEM_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HPTR PERL_ARGS_ASSERT_SAVE_I16 +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_I32 PERL_ARGS_ASSERT_SAVE_I8 +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_INT PERL_ARGS_ASSERT_SAVE_ITEM +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_IV PERL_ARGS_ASSERT_SAVE_LINES +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_LIST PERL_ARGS_ASSERT_SAVE_LONG +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_MAGIC_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_MORTALIZESV +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_NOGV PERL_ARGS_ASSERT_SAVE_PPTR +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SCALAR +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SCALAR_AT +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SET_SVFLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SHARED_PVREF +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SPTR PERL_ARGS_ASSERT_SAVE_STRLEN +syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SVREF PERL_ARGS_ASSERT_SAVE_VPTR +syn keyword xsMacro PERL_ARGS_ASSERT_SCALARBOOLEAN +syn keyword xsMacro PERL_ARGS_ASSERT_SCALARVOID PERL_ARGS_ASSERT_SCAN_BIN +syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_COMMIT PERL_ARGS_ASSERT_SCAN_CONST +syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_FORMLINE +syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_HEREDOC PERL_ARGS_ASSERT_SCAN_HEX +syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_IDENT +syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_INPUTSYMBOL +syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_NUM PERL_ARGS_ASSERT_SCAN_OCT +syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_PAT PERL_ARGS_ASSERT_SCAN_STR +syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_SUBST PERL_ARGS_ASSERT_SCAN_TRANS +syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_VERSION +syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_VSTRING PERL_ARGS_ASSERT_SCAN_WORD +syn keyword xsMacro PERL_ARGS_ASSERT_SEARCH_CONST PERL_ARGS_ASSERT_SETDEFOUT +syn keyword xsMacro PERL_ARGS_ASSERT_SET_ANYOF_ARG +syn keyword xsMacro PERL_ARGS_ASSERT_SET_CONTEXT PERL_ARGS_ASSERT_SET_PADLIST +syn keyword xsMacro PERL_ARGS_ASSERT_SHARE_HEK +syn keyword xsMacro PERL_ARGS_ASSERT_SHARE_HEK_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SHOULD_WARN_NL +syn keyword xsMacro PERL_ARGS_ASSERT_SIMPLIFY_SORT PERL_ARGS_ASSERT_SI_DUP +syn keyword xsMacro PERL_ARGS_ASSERT_SKIPSPACE_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SLAB_FREE PERL_ARGS_ASSERT_SLAB_TO_RO +syn keyword xsMacro PERL_ARGS_ASSERT_SLAB_TO_RW PERL_ARGS_ASSERT_SOFTREF2XV +syn keyword xsMacro PERL_ARGS_ASSERT_SORTCV PERL_ARGS_ASSERT_SORTCV_STACKED +syn keyword xsMacro PERL_ARGS_ASSERT_SORTCV_XSUB PERL_ARGS_ASSERT_SORTSV +syn keyword xsMacro PERL_ARGS_ASSERT_SORTSV_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SPACE_JOIN_NAMES_MORTAL +syn keyword xsMacro PERL_ARGS_ASSERT_SSC_ADD_RANGE PERL_ARGS_ASSERT_SSC_AND +syn keyword xsMacro PERL_ARGS_ASSERT_SSC_ANYTHING +syn keyword xsMacro PERL_ARGS_ASSERT_SSC_CLEAR_LOCALE +syn keyword xsMacro PERL_ARGS_ASSERT_SSC_CP_AND PERL_ARGS_ASSERT_SSC_FINALIZE +syn keyword xsMacro PERL_ARGS_ASSERT_SSC_INIT +syn keyword xsMacro PERL_ARGS_ASSERT_SSC_INTERSECTION +syn keyword xsMacro PERL_ARGS_ASSERT_SSC_IS_ANYTHING +syn keyword xsMacro PERL_ARGS_ASSERT_SSC_IS_CP_POSIXL_INIT +syn keyword xsMacro PERL_ARGS_ASSERT_SSC_OR PERL_ARGS_ASSERT_SSC_UNION +syn keyword xsMacro PERL_ARGS_ASSERT_SS_DUP PERL_ARGS_ASSERT_STACK_GROW +syn keyword xsMacro PERL_ARGS_ASSERT_START_GLOB +syn keyword xsMacro PERL_ARGS_ASSERT_STDIZE_LOCALE +syn keyword xsMacro PERL_ARGS_ASSERT_STRIP_RETURN +syn keyword xsMacro PERL_ARGS_ASSERT_STR_TO_VERSION +syn keyword xsMacro PERL_ARGS_ASSERT_STUDY_CHUNK +syn keyword xsMacro PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH +syn keyword xsMacro PERL_ARGS_ASSERT_SV_2BOOL_FLAGS PERL_ARGS_ASSERT_SV_2CV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_2IO PERL_ARGS_ASSERT_SV_2IUV_COMMON +syn keyword xsMacro PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE +syn keyword xsMacro PERL_ARGS_ASSERT_SV_2IV PERL_ARGS_ASSERT_SV_2IV_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_2NUM PERL_ARGS_ASSERT_SV_2NV_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PV PERL_ARGS_ASSERT_SV_2PVBYTE +syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PVBYTE_NOLEN +syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PVUTF8 +syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PVUTF8_NOLEN +syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PV_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PV_NOLEN PERL_ARGS_ASSERT_SV_2UV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_2UV_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_ADD_ARENA +syn keyword xsMacro PERL_ARGS_ASSERT_SV_ADD_BACKREF +syn keyword xsMacro PERL_ARGS_ASSERT_SV_BACKOFF PERL_ARGS_ASSERT_SV_BLESS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_BUF_TO_RO +syn keyword xsMacro PERL_ARGS_ASSERT_SV_BUF_TO_RW PERL_ARGS_ASSERT_SV_CATPV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVF PERL_ARGS_ASSERT_SV_CATPVF_MG +syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT +syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT +syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVN +syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVN_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVN_MG +syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPV_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPV_MG PERL_ARGS_ASSERT_SV_CATSV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATSV_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATSV_MG +syn keyword xsMacro PERL_ARGS_ASSERT_SV_CAT_DECODE PERL_ARGS_ASSERT_SV_CHOP +syn keyword xsMacro PERL_ARGS_ASSERT_SV_CLEAR +syn keyword xsMacro PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_COPYPV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_COPYPV_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_DEL_BACKREF +syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM +syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM_PV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM_PVN +syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM_SV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_DISPLAY PERL_ARGS_ASSERT_SV_DOES +syn keyword xsMacro PERL_ARGS_ASSERT_SV_DOES_PV PERL_ARGS_ASSERT_SV_DOES_PVN +syn keyword xsMacro PERL_ARGS_ASSERT_SV_DOES_SV PERL_ARGS_ASSERT_SV_DUMP +syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUP PERL_ARGS_ASSERT_SV_DUP_COMMON +syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUP_INC +syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE +syn keyword xsMacro PERL_ARGS_ASSERT_SV_EXP_GROW +syn keyword xsMacro PERL_ARGS_ASSERT_SV_FORCE_NORMAL +syn keyword xsMacro PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_FREE2 PERL_ARGS_ASSERT_SV_GETS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_GET_BACKREFS PERL_ARGS_ASSERT_SV_GROW +syn keyword xsMacro PERL_ARGS_ASSERT_SV_INSERT +syn keyword xsMacro PERL_ARGS_ASSERT_SV_INSERT_FLAGS PERL_ARGS_ASSERT_SV_ISA +syn keyword xsMacro PERL_ARGS_ASSERT_SV_IV PERL_ARGS_ASSERT_SV_I_NCMP +syn keyword xsMacro PERL_ARGS_ASSERT_SV_KILL_BACKREFS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG +syn keyword xsMacro PERL_ARGS_ASSERT_SV_MAGIC PERL_ARGS_ASSERT_SV_MAGICEXT +syn keyword xsMacro PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB +syn keyword xsMacro PERL_ARGS_ASSERT_SV_NCMP PERL_ARGS_ASSERT_SV_NV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_ONLY_TAINT_GMAGIC +syn keyword xsMacro PERL_ARGS_ASSERT_SV_OR_PV_POS_U2B +syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_B2U +syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY +syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B +syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_CACHED +syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY PERL_ARGS_ASSERT_SV_PV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVBYTE PERL_ARGS_ASSERT_SV_PVBYTEN +syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE PERL_ARGS_ASSERT_SV_PVN +syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVN_FORCE +syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVN_NOMG PERL_ARGS_ASSERT_SV_PVUTF8 +syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVUTF8N +syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE +syn keyword xsMacro PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8 +syn keyword xsMacro PERL_ARGS_ASSERT_SV_REF PERL_ARGS_ASSERT_SV_REFTYPE +syn keyword xsMacro PERL_ARGS_ASSERT_SV_RELEASE_COW +syn keyword xsMacro PERL_ARGS_ASSERT_SV_REPLACE PERL_ARGS_ASSERT_SV_RESET +syn keyword xsMacro PERL_ARGS_ASSERT_SV_RVWEAKEN PERL_ARGS_ASSERT_SV_SETHEK +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETIV PERL_ARGS_ASSERT_SV_SETIV_MG +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETNV PERL_ARGS_ASSERT_SV_SETNV_MG +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPV PERL_ARGS_ASSERT_SV_SETPVF +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVF_MG +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVIV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVIV_MG PERL_ARGS_ASSERT_SV_SETPVN +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVN_MG +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPV_MG +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_IV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_NV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_PV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_PVN +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_UV PERL_ARGS_ASSERT_SV_SETSV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETSV_COW +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETSV_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETSV_MG PERL_ARGS_ASSERT_SV_SETUV +syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETUV_MG PERL_ARGS_ASSERT_SV_TAINT +syn keyword xsMacro PERL_ARGS_ASSERT_SV_TAINTED PERL_ARGS_ASSERT_SV_UNGLOB +syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNI_DISPLAY +syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNMAGIC +syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNMAGICEXT PERL_ARGS_ASSERT_SV_UNREF +syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNREF_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNTAINT PERL_ARGS_ASSERT_SV_UPGRADE +syn keyword xsMacro PERL_ARGS_ASSERT_SV_USEPVN +syn keyword xsMacro PERL_ARGS_ASSERT_SV_USEPVN_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_USEPVN_MG +syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_DECODE +syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE +syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_ENCODE +syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_UPGRADE +syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW +syn keyword xsMacro PERL_ARGS_ASSERT_SV_UV PERL_ARGS_ASSERT_SV_VCATPVF +syn keyword xsMacro PERL_ARGS_ASSERT_SV_VCATPVFN +syn keyword xsMacro PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_SV_VCATPVF_MG +syn keyword xsMacro PERL_ARGS_ASSERT_SV_VSETPVF PERL_ARGS_ASSERT_SV_VSETPVFN +syn keyword xsMacro PERL_ARGS_ASSERT_SV_VSETPVF_MG +syn keyword xsMacro PERL_ARGS_ASSERT_SWALLOW_BOM PERL_ARGS_ASSERT_SWASH_FETCH +syn keyword xsMacro PERL_ARGS_ASSERT_SWASH_INIT +syn keyword xsMacro PERL_ARGS_ASSERT_SWASH_SCAN_LIST_LINE +syn keyword xsMacro PERL_ARGS_ASSERT_SWATCH_GET PERL_ARGS_ASSERT_SYS_INIT +syn keyword xsMacro PERL_ARGS_ASSERT_SYS_INIT3 +syn keyword xsMacro PERL_ARGS_ASSERT_SYS_INTERN_DUP +syn keyword xsMacro PERL_ARGS_ASSERT_TAINT_PROPER +syn keyword xsMacro PERL_ARGS_ASSERT_TIED_METHOD +syn keyword xsMacro PERL_ARGS_ASSERT_TOKENIZE_USE PERL_ARGS_ASSERT_TOKEQ +syn keyword xsMacro PERL_ARGS_ASSERT_TOKEREPORT +syn keyword xsMacro PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV +syn keyword xsMacro PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV +syn keyword xsMacro PERL_ARGS_ASSERT_TO_BYTE_SUBSTR +syn keyword xsMacro PERL_ARGS_ASSERT_TO_UNI_LOWER +syn keyword xsMacro PERL_ARGS_ASSERT_TO_UNI_TITLE +syn keyword xsMacro PERL_ARGS_ASSERT_TO_UNI_UPPER +syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_CASE +syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_FOLD +syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_LOWER +syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_SUBSTR +syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_TITLE +syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_UPPER +syn keyword xsMacro PERL_ARGS_ASSERT_TRANSLATE_SUBSTR_OFFSETS +syn keyword xsMacro PERL_ARGS_ASSERT_UIV_2BUF PERL_ARGS_ASSERT_UNLNK +syn keyword xsMacro PERL_ARGS_ASSERT_UNPACKSTRING PERL_ARGS_ASSERT_UNPACK_REC +syn keyword xsMacro PERL_ARGS_ASSERT_UNPACK_STR +syn keyword xsMacro PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK +syn keyword xsMacro PERL_ARGS_ASSERT_UPG_VERSION +syn keyword xsMacro PERL_ARGS_ASSERT_UTF16_TEXTFILTER +syn keyword xsMacro PERL_ARGS_ASSERT_UTF16_TO_UTF8 +syn keyword xsMacro PERL_ARGS_ASSERT_UTF16_TO_UTF8_REVERSED +syn keyword xsMacro PERL_ARGS_ASSERT_UTF8N_TO_UVCHR +syn keyword xsMacro PERL_ARGS_ASSERT_UTF8N_TO_UVUNI +syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_DISTANCE PERL_ARGS_ASSERT_UTF8_HOP +syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_LENGTH +syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE +syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE +syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_BYTES +syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVCHR +syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVUNI +syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVUNI_BUF +syn keyword xsMacro PERL_ARGS_ASSERT_UTILIZE +syn keyword xsMacro PERL_ARGS_ASSERT_UVOFFUNI_TO_UTF8_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_UVUNI_TO_UTF8 +syn keyword xsMacro PERL_ARGS_ASSERT_UVUNI_TO_UTF8_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT_VALIDATE_PROTO +syn keyword xsMacro PERL_ARGS_ASSERT_VALIDATE_SUID +syn keyword xsMacro PERL_ARGS_ASSERT_VALID_UTF8_TO_UVCHR +syn keyword xsMacro PERL_ARGS_ASSERT_VALID_UTF8_TO_UVUNI +syn keyword xsMacro PERL_ARGS_ASSERT_VCMP PERL_ARGS_ASSERT_VDEB +syn keyword xsMacro PERL_ARGS_ASSERT_VFORM PERL_ARGS_ASSERT_VISIT +syn keyword xsMacro PERL_ARGS_ASSERT_VIVIFY_DEFELEM +syn keyword xsMacro PERL_ARGS_ASSERT_VIVIFY_REF PERL_ARGS_ASSERT_VLOAD_MODULE +syn keyword xsMacro PERL_ARGS_ASSERT_VMESS PERL_ARGS_ASSERT_VNEWSVPVF +syn keyword xsMacro PERL_ARGS_ASSERT_VNORMAL PERL_ARGS_ASSERT_VNUMIFY +syn keyword xsMacro PERL_ARGS_ASSERT_VSTRINGIFY PERL_ARGS_ASSERT_VVERIFY +syn keyword xsMacro PERL_ARGS_ASSERT_VWARN PERL_ARGS_ASSERT_VWARNER +syn keyword xsMacro PERL_ARGS_ASSERT_WAIT4PID PERL_ARGS_ASSERT_WARN +syn keyword xsMacro PERL_ARGS_ASSERT_WARNER PERL_ARGS_ASSERT_WARNER_NOCONTEXT +syn keyword xsMacro PERL_ARGS_ASSERT_WARN_NOCONTEXT PERL_ARGS_ASSERT_WARN_SV +syn keyword xsMacro PERL_ARGS_ASSERT_WATCH PERL_ARGS_ASSERT_WHICHSIG_PV +syn keyword xsMacro PERL_ARGS_ASSERT_WHICHSIG_PVN +syn keyword xsMacro PERL_ARGS_ASSERT_WHICHSIG_SV +syn keyword xsMacro PERL_ARGS_ASSERT_WIN32_CROAK_NOT_IMPLEMENTED +syn keyword xsMacro PERL_ARGS_ASSERT_WITH_QUEUED_ERRORS +syn keyword xsMacro PERL_ARGS_ASSERT_WRAP_OP_CHECKER +syn keyword xsMacro PERL_ARGS_ASSERT_WRITE_TO_STDERR +syn keyword xsMacro PERL_ARGS_ASSERT_XS_HANDSHAKE +syn keyword xsMacro PERL_ARGS_ASSERT_XS_VERSION_BOOTCHECK +syn keyword xsMacro PERL_ARGS_ASSERT_YYERROR PERL_ARGS_ASSERT_YYERROR_PV +syn keyword xsMacro PERL_ARGS_ASSERT_YYERROR_PVN PERL_ARGS_ASSERT_YYWARN +syn keyword xsMacro PERL_ARGS_ASSERT__APPEND_RANGE_TO_INVLIST +syn keyword xsMacro PERL_ARGS_ASSERT__CORE_SWASH_INIT +syn keyword xsMacro PERL_ARGS_ASSERT__GET_REGCLASS_NONBITMAP_DATA +syn keyword xsMacro PERL_ARGS_ASSERT__GET_SWASH_INVLIST +syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_ARRAY_INIT +syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_CONTAINS_CP +syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_CONTENTS +syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_DUMP +syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_INTERSECTION_MAYBE_COMPLEMENT_2ND +syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_INVERT +syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_LEN +syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_POPULATE_SWATCH +syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_SEARCH +syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_UNION_MAYBE_COMPLEMENT_2ND +syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8_CHAR_SLOW +syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8_FOO +syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8_IDCONT +syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8_IDSTART +syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8_MARK +syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8_PERL_IDCONT +syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8_PERL_IDSTART +syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8_XIDCONT +syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8_XIDSTART +syn keyword xsMacro PERL_ARGS_ASSERT__MAKE_EXACTF_INVLIST +syn keyword xsMacro PERL_ARGS_ASSERT__NEW_INVLIST_C_ARRAY +syn keyword xsMacro PERL_ARGS_ASSERT__SETUP_CANNED_INVLIST +syn keyword xsMacro PERL_ARGS_ASSERT__SWASH_INVERSION_HASH +syn keyword xsMacro PERL_ARGS_ASSERT__SWASH_TO_INVLIST +syn keyword xsMacro PERL_ARGS_ASSERT__TO_FOLD_LATIN1 +syn keyword xsMacro PERL_ARGS_ASSERT__TO_UNI_FOLD_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT__TO_UPPER_TITLE_LATIN1 +syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_FOLD_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_LOWER_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_TITLE_FLAGS +syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_UPPER_FLAGS PERL_ASYNC_CHECK +syn keyword xsMacro PERL_BITFIELD16 PERL_BITFIELD32 PERL_BITFIELD8 +syn keyword xsMacro PERL_CALLCONV PERL_CALLCONV_NO_RET PERL_CHECK_INITED +syn keyword xsMacro PERL_CKDEF PERL_DEB PERL_DEB2 PERL_DEBUG PERL_DEBUG_PAD +syn keyword xsMacro PERL_DEBUG_PAD_ZERO PERL_DECIMAL_VERSION +syn keyword xsMacro PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION +syn keyword xsMacro PERL_DONT_CREATE_GVSV PERL_DRAND48_QUAD +syn keyword xsMacro PERL_ENABLE_EXPERIMENTAL_REGEX_OPTIMISATIONS +syn keyword xsMacro PERL_ENABLE_EXTENDED_TRIE_OPTIMISATION +syn keyword xsMacro PERL_ENABLE_POSITIVE_ASSERTION_STUDY +syn keyword xsMacro PERL_ENABLE_TRIE_OPTIMISATION PERL_EXIT_ABORT +syn keyword xsMacro PERL_EXIT_DESTRUCT_END PERL_EXIT_EXPECTED PERL_EXIT_WARN +syn keyword xsMacro PERL_EXPORT_C PERL_FILE_IS_ABSOLUTE PERL_FILTER_EXISTS +syn keyword xsMacro PERL_FLUSHALL_FOR_CHILD PERL_FPU_INIT PERL_FPU_POST_EXEC +syn keyword xsMacro PERL_FPU_PRE_EXEC PERL_FS_VERSION PERL_FS_VER_FMT +syn keyword xsMacro PERL_GCC_BRACE_GROUPS_FORBIDDEN PERL_GET_CONTEXT +syn keyword xsMacro PERL_GET_INTERP PERL_GET_THX PERL_GET_VARS +syn keyword xsMacro PERL_GIT_UNPUSHED_COMMITS PERL_GLOBAL_STRUCT +syn keyword xsMacro PERL_GPROF_MONCONTROL PERL_HASH PERL_HASH_DEFAULT_HvMAX +syn keyword xsMacro PERL_HASH_FUNC PERL_HASH_FUNC_ONE_AT_A_TIME_HARD +syn keyword xsMacro PERL_HASH_INTERNAL PERL_HASH_ITER_BUCKET +syn keyword xsMacro PERL_HASH_RANDOMIZE_KEYS PERL_HASH_SEED +syn keyword xsMacro PERL_HASH_SEED_BYTES PERL_HASH_WITH_SEED +syn keyword xsMacro PERL_HV_ALLOC_AUX_SIZE PERL_HV_ARRAY_ALLOC_BYTES +syn keyword xsMacro PERL_IMPLICIT_CONTEXT PERL_INTERPRETER_SIZE_UPTO_MEMBER +syn keyword xsMacro PERL_INT_MAX PERL_INT_MIN PERL_LOADMOD_DENY +syn keyword xsMacro PERL_LOADMOD_IMPORT_OPS PERL_LOADMOD_NOIMPORT +syn keyword xsMacro PERL_LONG_MAX PERL_LONG_MIN PERL_MALLOC_WRAP +syn keyword xsMacro PERL_MEMORY_DEBUG_HEADER_SIZE PERL_MG_UFUNC +syn keyword xsMacro PERL_MY_SNPRINTF_GUARDED PERL_MY_SNPRINTF_POST_GUARD +syn keyword xsMacro PERL_MY_VSNPRINTF_GUARDED PERL_MY_VSNPRINTF_POST_GUARD +syn keyword xsMacro PERL_NEW_COPY_ON_WRITE PERL_NO_DEV_RANDOM +syn keyword xsMacro PERL_OBJECT_THIS PERL_OBJECT_THIS_ PERL_PADNAME_MINIMAL +syn keyword xsMacro PERL_PADSEQ_INTRO PERL_PATCHNUM PERL_POISON_EXPR +syn keyword xsMacro PERL_PPADDR_INITED PERL_PPDEF PERL_PRESERVE_IVUV +syn keyword xsMacro PERL_PRIeldbl PERL_PRIfldbl PERL_PRIgldbl +syn keyword xsMacro PERL_PV_ESCAPE_ALL PERL_PV_ESCAPE_DWIM +syn keyword xsMacro PERL_PV_ESCAPE_FIRSTCHAR PERL_PV_ESCAPE_NOBACKSLASH +syn keyword xsMacro PERL_PV_ESCAPE_NOCLEAR PERL_PV_ESCAPE_NONASCII +syn keyword xsMacro PERL_PV_ESCAPE_QUOTE PERL_PV_ESCAPE_RE PERL_PV_ESCAPE_UNI +syn keyword xsMacro PERL_PV_ESCAPE_UNI_DETECT PERL_PV_PRETTY_DUMP +syn keyword xsMacro PERL_PV_PRETTY_ELLIPSES PERL_PV_PRETTY_EXACTSIZE +syn keyword xsMacro PERL_PV_PRETTY_LTGT PERL_PV_PRETTY_NOCLEAR +syn keyword xsMacro PERL_PV_PRETTY_QUOTE PERL_PV_PRETTY_REGPROP PERL_QUAD_MAX +syn keyword xsMacro PERL_QUAD_MIN PERL_REENTR_API PERL_REGMATCH_SLAB_SLOTS +syn keyword xsMacro PERL_RELOCATABLE_INC PERL_REVISION PERL_SAWAMPERSAND +syn keyword xsMacro PERL_SCAN_ALLOW_UNDERSCORES PERL_SCAN_DISALLOW_PREFIX +syn keyword xsMacro PERL_SCAN_GREATER_THAN_UV_MAX PERL_SCAN_SILENT_ILLDIGIT +syn keyword xsMacro PERL_SCAN_SILENT_NON_PORTABLE PERL_SCAN_TRAILING +syn keyword xsMacro PERL_SCNfldbl PERL_SCRIPT_MODE PERL_SEEN_HV_FUNC_H +syn keyword xsMacro PERL_SET_CONTEXT PERL_SET_INTERP PERL_SET_PHASE +syn keyword xsMacro PERL_SET_THX PERL_SHORT_MAX PERL_SHORT_MIN +syn keyword xsMacro PERL_SIGNALS_UNSAFE_FLAG PERL_SNPRINTF_CHECK +syn keyword xsMacro PERL_STACK_OVERFLOW_CHECK PERL_STATIC_INLINE +syn keyword xsMacro PERL_STATIC_INLINE_NO_RET PERL_STATIC_NO_RET +syn keyword xsMacro PERL_STRLEN_EXPAND_SHIFT PERL_STRLEN_ROUNDUP +syn keyword xsMacro PERL_STRLEN_ROUNDUP_QUANTUM PERL_SUBVERSION +syn keyword xsMacro PERL_SUB_DEPTH_WARN PERL_SYS_FPU_INIT PERL_SYS_INIT +syn keyword xsMacro PERL_SYS_INIT3 PERL_SYS_INIT3_BODY PERL_SYS_INIT_BODY +syn keyword xsMacro PERL_SYS_TERM PERL_SYS_TERM_BODY PERL_TARGETARCH +syn keyword xsMacro PERL_UCHAR_MAX PERL_UCHAR_MIN PERL_UINT_MAX PERL_UINT_MIN +syn keyword xsMacro PERL_ULONG_MAX PERL_ULONG_MIN PERL_UNICODE_ALL_FLAGS +syn keyword xsMacro PERL_UNICODE_ARGV PERL_UNICODE_ARGV_FLAG +syn keyword xsMacro PERL_UNICODE_DEFAULT_FLAGS PERL_UNICODE_IN +syn keyword xsMacro PERL_UNICODE_INOUT PERL_UNICODE_INOUT_FLAG +syn keyword xsMacro PERL_UNICODE_IN_FLAG PERL_UNICODE_LOCALE +syn keyword xsMacro PERL_UNICODE_LOCALE_FLAG PERL_UNICODE_MAX +syn keyword xsMacro PERL_UNICODE_OUT PERL_UNICODE_OUT_FLAG PERL_UNICODE_STD +syn keyword xsMacro PERL_UNICODE_STDERR PERL_UNICODE_STDERR_FLAG +syn keyword xsMacro PERL_UNICODE_STDIN PERL_UNICODE_STDIN_FLAG +syn keyword xsMacro PERL_UNICODE_STDOUT PERL_UNICODE_STDOUT_FLAG +syn keyword xsMacro PERL_UNICODE_STD_FLAG PERL_UNICODE_UTF8CACHEASSERT +syn keyword xsMacro PERL_UNICODE_UTF8CACHEASSERT_FLAG +syn keyword xsMacro PERL_UNICODE_WIDESYSCALLS PERL_UNICODE_WIDESYSCALLS_FLAG +syn keyword xsMacro PERL_UNUSED_ARG PERL_UNUSED_CONTEXT PERL_UNUSED_DECL +syn keyword xsMacro PERL_UNUSED_RESULT PERL_UNUSED_VAR PERL_UQUAD_MAX +syn keyword xsMacro PERL_UQUAD_MIN PERL_USES_PL_PIDSTATUS +syn keyword xsMacro PERL_USE_GCC_BRACE_GROUPS PERL_USHORT_MAX PERL_USHORT_MIN +syn keyword xsMacro PERL_VERSION PERL_VERSION_DECIMAL PERL_VERSION_GE +syn keyword xsMacro PERL_VERSION_LT PERL_VERSION_STRING +syn keyword xsMacro PERL_WAIT_FOR_CHILDREN PERL_WARNHOOK_FATAL +syn keyword xsMacro PERL_WRITE_MSG_TO_CONSOLE PERL_XS_EXPORT_C +syn keyword xsMacro PHASE_CHANGE_PROBE PHOSTNAME PIPESOCK_MODE PIPE_OPEN_MODE +syn keyword xsMacro PLUGEXPR PLUGSTMT PLUS PL_AboveLatin1 PL_Argv PL_Cmd +syn keyword xsMacro PL_DBcontrol PL_DBcv PL_DBgv PL_DBline PL_DBsignal +syn keyword xsMacro PL_DBsignal_iv PL_DBsingle PL_DBsingle_iv PL_DBsub +syn keyword xsMacro PL_DBtrace PL_DBtrace_iv PL_Dir PL_Env PL_GCB_invlist +syn keyword xsMacro PL_Gappctx PL_Gcheck PL_Gcheck_mutex PL_Gcsighandlerp +syn keyword xsMacro PL_Gcurinterp PL_Gdo_undump PL_Gdollarzero_mutex +syn keyword xsMacro PL_Gfold_locale PL_Ghash_seed PL_Ghash_seed_set +syn keyword xsMacro PL_Ghints_mutex PL_Gkeyword_plugin PL_Gmalloc_mutex +syn keyword xsMacro PL_Gmmap_page_size PL_Gmy_ctx_mutex PL_Gmy_cxt_index +syn keyword xsMacro PL_Gop_mutex PL_Gop_seq PL_Gop_sequence +syn keyword xsMacro PL_Gperlio_debug_fd PL_Gperlio_fd_refcnt +syn keyword xsMacro PL_Gperlio_fd_refcnt_size PL_Gperlio_mutex PL_Gppaddr +syn keyword xsMacro PL_Gsh_path PL_Gsig_defaulting PL_Gsig_handlers_initted +syn keyword xsMacro PL_Gsig_ignoring PL_Gsig_trapped PL_Gsigfpe_saved +syn keyword xsMacro PL_Gsv_placeholder PL_Gthr_key PL_Gtimesbase +syn keyword xsMacro PL_Guse_safe_putenv PL_Gveto_cleanup PL_Gwatch_pvx +syn keyword xsMacro PL_HASH_RAND_BITS_ENABLED PL_HasMultiCharFold PL_InBitmap +syn keyword xsMacro PL_LIO PL_Latin1 PL_Mem PL_MemParse PL_MemShared +syn keyword xsMacro PL_NonL1NonFinalFold PL_Posix_ptrs PL_Proc +syn keyword xsMacro PL_RANDOM_STATE_TYPE PL_SB_invlist PL_Sock PL_StdIO PL_Sv +syn keyword xsMacro PL_UpperLatin1 PL_WB_invlist PL_XPosix_ptrs PL_Xpv +syn keyword xsMacro PL_amagic_generation PL_an PL_appctx PL_argvgv +syn keyword xsMacro PL_argvout_stack PL_argvoutgv PL_basetime PL_beginav +syn keyword xsMacro PL_beginav_save PL_blockhooks PL_body_arenas +syn keyword xsMacro PL_body_roots PL_bodytarget PL_breakable_sub_gen +syn keyword xsMacro PL_check_mutex PL_checkav PL_checkav_save PL_chopset +syn keyword xsMacro PL_clocktick PL_collation_ix PL_collation_name +syn keyword xsMacro PL_collation_standard PL_collxfrm_base PL_collxfrm_mult +syn keyword xsMacro PL_colors PL_colorset PL_compcv PL_compiling PL_comppad +syn keyword xsMacro PL_comppad_name PL_comppad_name_fill +syn keyword xsMacro PL_comppad_name_floor PL_constpadix PL_cop_seqmax +syn keyword xsMacro PL_cryptseen PL_cshlen PL_csighandlerp PL_curcop +syn keyword xsMacro PL_curcopdb PL_curinterp PL_curpad PL_curpm PL_curstack +syn keyword xsMacro PL_curstackinfo PL_curstash PL_curstname +syn keyword xsMacro PL_custom_op_descs PL_custom_op_names PL_custom_ops +syn keyword xsMacro PL_cv_has_eval PL_dbargs PL_debstash PL_debug +syn keyword xsMacro PL_debug_pad PL_def_layerlist PL_defgv PL_defoutgv +syn keyword xsMacro PL_defstash PL_delaymagic PL_delaymagic_egid +syn keyword xsMacro PL_delaymagic_euid PL_delaymagic_gid PL_delaymagic_uid +syn keyword xsMacro PL_destroyhook PL_diehook PL_dirty PL_do_undump +syn keyword xsMacro PL_dollarzero_mutex PL_doswitches PL_dowarn PL_dumper_fd +syn keyword xsMacro PL_dumpindent PL_e_script PL_efloatbuf PL_efloatsize +syn keyword xsMacro PL_encoding PL_endav PL_envgv PL_errgv PL_errors +syn keyword xsMacro PL_eval_root PL_eval_start PL_evalseq PL_exit_flags +syn keyword xsMacro PL_exitlist PL_exitlistlen PL_fdpid PL_filemode +syn keyword xsMacro PL_firstgv PL_forkprocess PL_formtarget PL_generation +syn keyword xsMacro PL_gensym PL_globalstash PL_globhook PL_hash_rand_bits +syn keyword xsMacro PL_hash_rand_bits_enabled PL_hash_seed PL_hash_seed_set +syn keyword xsMacro PL_hintgv PL_hints PL_hints_mutex PL_hv_fetch_ent_mh +syn keyword xsMacro PL_in_clean_all PL_in_clean_objs PL_in_eval +syn keyword xsMacro PL_in_load_module PL_in_utf8_CTYPE_locale PL_incgv +syn keyword xsMacro PL_initav PL_inplace PL_isarev PL_keyword_plugin +syn keyword xsMacro PL_known_layers PL_last_in_gv PL_last_swash_hv +syn keyword xsMacro PL_last_swash_key PL_last_swash_klen PL_last_swash_slen +syn keyword xsMacro PL_last_swash_tmps PL_lastfd PL_lastgotoprobe +syn keyword xsMacro PL_laststatval PL_laststype PL_lex_encoding PL_localizing +syn keyword xsMacro PL_localpatches PL_lockhook PL_main_cv PL_main_root +syn keyword xsMacro PL_main_start PL_mainstack PL_malloc_mutex PL_markstack +syn keyword xsMacro PL_markstack_max PL_markstack_ptr PL_max_intro_pending +syn keyword xsMacro PL_maxo PL_maxsysfd PL_memory_debug_header PL_mess_sv +syn keyword xsMacro PL_min_intro_pending PL_minus_E PL_minus_F PL_minus_a +syn keyword xsMacro PL_minus_c PL_minus_l PL_minus_n PL_minus_p +syn keyword xsMacro PL_mmap_page_size PL_modcount PL_modglobal +syn keyword xsMacro PL_multideref_pc PL_my_ctx_mutex PL_my_cxt_index +syn keyword xsMacro PL_my_cxt_keys PL_my_cxt_list PL_my_cxt_size PL_nomemok +syn keyword xsMacro PL_numeric_local PL_numeric_name PL_numeric_radix_sv +syn keyword xsMacro PL_numeric_standard PL_ofsgv PL_oldname PL_op +syn keyword xsMacro PL_op_exec_cnt PL_op_mask PL_op_mutex PL_op_seq +syn keyword xsMacro PL_op_sequence PL_opfreehook PL_origalen PL_origargc +syn keyword xsMacro PL_origargv PL_origenviron PL_origfilename PL_ors_sv +syn keyword xsMacro PL_osname PL_pad_reset_pending PL_padix PL_padix_floor +syn keyword xsMacro PL_padlist_generation PL_padname_const PL_padname_undef +syn keyword xsMacro PL_parser PL_patchlevel PL_peepp PL_perl_destruct_level +syn keyword xsMacro PL_perldb PL_perlio PL_perlio_debug_fd +syn keyword xsMacro PL_perlio_fd_refcnt PL_perlio_fd_refcnt_size +syn keyword xsMacro PL_perlio_mutex PL_phase PL_pidstatus PL_preambleav +syn keyword xsMacro PL_profiledata PL_psig_name PL_psig_pend PL_psig_ptr +syn keyword xsMacro PL_ptr_table PL_random_state PL_reentrant_buffer +syn keyword xsMacro PL_reentrant_retint PL_reg_curpm PL_regex_pad +syn keyword xsMacro PL_regex_padav PL_registered_mros PL_regmatch_slab +syn keyword xsMacro PL_regmatch_state PL_replgv PL_restartjmpenv PL_restartop +syn keyword xsMacro PL_rpeepp PL_rs PL_runops PL_savebegin PL_savestack +syn keyword xsMacro PL_savestack_ix PL_savestack_max PL_sawalias +syn keyword xsMacro PL_sawampersand PL_scopestack PL_scopestack_ix +syn keyword xsMacro PL_scopestack_max PL_scopestack_name PL_secondgv +syn keyword xsMacro PL_sharehook PL_sig_defaulting PL_sig_handlers_initted +syn keyword xsMacro PL_sig_ignoring PL_sig_pending PL_sig_trapped +syn keyword xsMacro PL_sigfpe_saved PL_sighandlerp PL_signalhook PL_signals +syn keyword xsMacro PL_sort_RealCmp PL_sortcop PL_sortstash PL_splitstr +syn keyword xsMacro PL_srand_called PL_stack_base PL_stack_max PL_stack_sp +syn keyword xsMacro PL_start_env PL_stashcache PL_stashpad PL_stashpadix +syn keyword xsMacro PL_stashpadmax PL_statbuf PL_statcache PL_statgv +syn keyword xsMacro PL_statname PL_statusvalue PL_statusvalue_posix +syn keyword xsMacro PL_statusvalue_vms PL_stderrgv PL_stdingv PL_strtab +syn keyword xsMacro PL_sub_generation PL_subline PL_subname PL_sv_arenaroot +syn keyword xsMacro PL_sv_consts PL_sv_count PL_sv_no PL_sv_placeholder +syn keyword xsMacro PL_sv_root PL_sv_serial PL_sv_undef PL_sv_yes +syn keyword xsMacro PL_sys_intern PL_taint_warn PL_tainted PL_tainting +syn keyword xsMacro PL_thr_key PL_threadhook PL_timesbase PL_timesbuf +syn keyword xsMacro PL_tmps_floor PL_tmps_ix PL_tmps_max PL_tmps_stack +syn keyword xsMacro PL_top_env PL_toptarget PL_unicode PL_unitcheckav +syn keyword xsMacro PL_unitcheckav_save PL_unlockhook PL_unsafe +syn keyword xsMacro PL_use_safe_putenv PL_utf8_charname_begin +syn keyword xsMacro PL_utf8_charname_continue PL_utf8_foldable +syn keyword xsMacro PL_utf8_foldclosures PL_utf8_idcont PL_utf8_idstart +syn keyword xsMacro PL_utf8_mark PL_utf8_perl_idcont PL_utf8_perl_idstart +syn keyword xsMacro PL_utf8_swash_ptrs PL_utf8_tofold PL_utf8_tolower +syn keyword xsMacro PL_utf8_totitle PL_utf8_toupper PL_utf8_xidcont +syn keyword xsMacro PL_utf8_xidstart PL_utf8cache PL_utf8locale +syn keyword xsMacro PL_veto_cleanup PL_vtbl_arylen PL_vtbl_arylen_p +syn keyword xsMacro PL_vtbl_backref PL_vtbl_bm PL_vtbl_checkcall +syn keyword xsMacro PL_vtbl_collxfrm PL_vtbl_dbline PL_vtbl_debugvar +syn keyword xsMacro PL_vtbl_defelem PL_vtbl_env PL_vtbl_envelem PL_vtbl_fm +syn keyword xsMacro PL_vtbl_hints PL_vtbl_hintselem PL_vtbl_isa +syn keyword xsMacro PL_vtbl_isaelem PL_vtbl_lvref PL_vtbl_mglob PL_vtbl_nkeys +syn keyword xsMacro PL_vtbl_ovrld PL_vtbl_pack PL_vtbl_packelem PL_vtbl_pos +syn keyword xsMacro PL_vtbl_regdata PL_vtbl_regdatum PL_vtbl_regexp +syn keyword xsMacro PL_vtbl_sigelem PL_vtbl_substr PL_vtbl_sv PL_vtbl_taint +syn keyword xsMacro PL_vtbl_utf8 PL_vtbl_uvar PL_vtbl_vec PL_warn_locale +syn keyword xsMacro PL_warnhook PL_watch_pvx PL_watchaddr PL_watchok +syn keyword xsMacro PL_xsubfilename PMFUNC PM_GETRE PM_SETRE PMf_BASE_SHIFT +syn keyword xsMacro PMf_CHARSET PMf_CODELIST_PRIVATE PMf_CONST PMf_CONTINUE +syn keyword xsMacro PMf_EVAL PMf_EXTENDED PMf_EXTENDED_MORE PMf_FOLD +syn keyword xsMacro PMf_GLOBAL PMf_HAS_CV PMf_IS_QR PMf_KEEP PMf_KEEPCOPY +syn keyword xsMacro PMf_MULTILINE PMf_NOCAPTURE PMf_NONDESTRUCT PMf_ONCE +syn keyword xsMacro PMf_RETAINT PMf_SINGLELINE PMf_SPLIT PMf_STRICT PMf_USED +syn keyword xsMacro PMf_USE_RE_EVAL PNf PNfARG POPBLOCK POPEVAL POPFORMAT +syn keyword xsMacro POPLOOP POPMARK POPSTACK POPSTACK_TO POPSUB POPSUBST +syn keyword xsMacro POP_MULTICALL POP_SAVEARRAY POPi POPl POPn POPp POPpbytex +syn keyword xsMacro POPpconstx POPpx POPs POPu POPul POSIXA POSIXD POSIXL +syn keyword xsMacro POSIXU POSIX_CC_COUNT POSIX_SWASH_COUNT POSTDEC POSTINC +syn keyword xsMacro POSTJOIN POWOP PP PREC_LOW PREDEC PREGf_ANCH +syn keyword xsMacro PREGf_ANCH_GPOS PREGf_ANCH_MBOL PREGf_ANCH_SBOL +syn keyword xsMacro PREGf_CANY_SEEN PREGf_CUTGROUP_SEEN PREGf_GPOS_FLOAT +syn keyword xsMacro PREGf_GPOS_SEEN PREGf_IMPLICIT PREGf_NAUGHTY PREGf_NOSCAN +syn keyword xsMacro PREGf_SKIP PREGf_USE_RE_EVAL PREGf_VERBARG_SEEN PREINC +syn keyword xsMacro PRESCAN_VERSION PREVOPER PRINTF_FORMAT_NULL_OK PRIVATEREF +syn keyword xsMacro PRIVLIB PRIVLIB_EXP PRIVSHIFT PROCSELFEXE_PATH PRUNE +syn keyword xsMacro PSEUDO PTHREAD_ATFORK PTHREAD_ATTR_SETDETACHSTATE +syn keyword xsMacro PTHREAD_CREATE PTHREAD_CREATE_JOINABLE +syn keyword xsMacro PTHREAD_GETSPECIFIC PTHREAD_GETSPECIFIC_INT PTR2IV PTR2NV +syn keyword xsMacro PTR2UV PTR2nat PTR2ul PTRSIZE PTRV PUSHBLOCK PUSHEVAL +syn keyword xsMacro PUSHFORMAT PUSHGIVEN PUSHLOOP_FOR PUSHLOOP_PLAIN PUSHMARK +syn keyword xsMacro PUSHSTACK PUSHSTACKi PUSHSUB PUSHSUBST PUSHSUB_BASE +syn keyword xsMacro PUSHSUB_DB PUSHSUB_GET_LVALUE_MASK PUSHTARG PUSHWHEN +syn keyword xsMacro PUSH_MULTICALL PUSH_MULTICALL_FLAGS PUSHi PUSHmortal +syn keyword xsMacro PUSHn PUSHp PUSHs PUSHu PUTBACK PWGECOS PWPASSWD PadARRAY +syn keyword xsMacro PadMAX PadlistARRAY PadlistMAX PadlistNAMES +syn keyword xsMacro PadlistNAMESARRAY PadlistNAMESMAX PadlistREFCNT +syn keyword xsMacro PadnameFLAGS PadnameIsOUR PadnameIsSTATE +syn keyword xsMacro PadnameIsSTATE_on PadnameLEN PadnameLVALUE +syn keyword xsMacro PadnameLVALUE_on PadnameOURSTASH PadnameOURSTASH_set +syn keyword xsMacro PadnameOUTER PadnamePROTOCV PadnamePV PadnameREFCNT +syn keyword xsMacro PadnameREFCNT_dec PadnameSV PadnameTYPE PadnameTYPE_set +syn keyword xsMacro PadnameUTF8 PadnamelistARRAY PadnamelistMAX +syn keyword xsMacro PadnamelistMAXNAMED PadnamelistREFCNT +syn keyword xsMacro PadnamelistREFCNT_dec Pause PeRl_CaTiFy PeRl_INT64_C +syn keyword xsMacro PeRl_StGiFy PeRl_UINT64_C PerlDir_chdir PerlDir_close +syn keyword xsMacro PerlDir_mapA PerlDir_mapW PerlDir_mkdir PerlDir_open +syn keyword xsMacro PerlDir_read PerlDir_rewind PerlDir_rmdir PerlDir_seek +syn keyword xsMacro PerlDir_tell PerlEnv_ENVgetenv PerlEnv_ENVgetenv_len +syn keyword xsMacro PerlEnv_clearenv PerlEnv_free_childdir +syn keyword xsMacro PerlEnv_free_childenv PerlEnv_get_child_IO +syn keyword xsMacro PerlEnv_get_childdir PerlEnv_get_childenv PerlEnv_getenv +syn keyword xsMacro PerlEnv_getenv_len PerlEnv_lib_path PerlEnv_os_id +syn keyword xsMacro PerlEnv_putenv PerlEnv_sitelib_path PerlEnv_uname +syn keyword xsMacro PerlEnv_vendorlib_path PerlIOArg PerlIOBase PerlIONext +syn keyword xsMacro PerlIOSelf PerlIOValid PerlIO_canset_cnt +syn keyword xsMacro PerlIO_exportFILE PerlIO_fast_gets PerlIO_fdopen +syn keyword xsMacro PerlIO_findFILE PerlIO_getc PerlIO_getname +syn keyword xsMacro PerlIO_has_base PerlIO_has_cntptr PerlIO_importFILE +syn keyword xsMacro PerlIO_isutf8 PerlIO_open PerlIO_printf PerlIO_putc +syn keyword xsMacro PerlIO_puts PerlIO_releaseFILE PerlIO_reopen +syn keyword xsMacro PerlIO_rewind PerlIO_stdoutf PerlIO_tmpfile PerlIO_ungetc +syn keyword xsMacro PerlIO_vprintf PerlLIO_access PerlLIO_chmod PerlLIO_chown +syn keyword xsMacro PerlLIO_chsize PerlLIO_close PerlLIO_dup PerlLIO_dup2 +syn keyword xsMacro PerlLIO_flock PerlLIO_fstat PerlLIO_ioctl PerlLIO_isatty +syn keyword xsMacro PerlLIO_link PerlLIO_lseek PerlLIO_lstat PerlLIO_mkstemp +syn keyword xsMacro PerlLIO_mktemp PerlLIO_open PerlLIO_open3 PerlLIO_read +syn keyword xsMacro PerlLIO_rename PerlLIO_setmode PerlLIO_stat +syn keyword xsMacro PerlLIO_tmpnam PerlLIO_umask PerlLIO_unlink PerlLIO_utime +syn keyword xsMacro PerlLIO_write PerlMemParse_calloc PerlMemParse_free +syn keyword xsMacro PerlMemParse_free_lock PerlMemParse_get_lock +syn keyword xsMacro PerlMemParse_is_locked PerlMemParse_malloc +syn keyword xsMacro PerlMemParse_realloc PerlMemShared_calloc +syn keyword xsMacro PerlMemShared_free PerlMemShared_free_lock +syn keyword xsMacro PerlMemShared_get_lock PerlMemShared_is_locked +syn keyword xsMacro PerlMemShared_malloc PerlMemShared_realloc PerlMem_calloc +syn keyword xsMacro PerlMem_free PerlMem_free_lock PerlMem_get_lock +syn keyword xsMacro PerlMem_is_locked PerlMem_malloc PerlMem_realloc +syn keyword xsMacro PerlProc_DynaLoad PerlProc_GetOSError PerlProc__exit +syn keyword xsMacro PerlProc_abort PerlProc_crypt PerlProc_execl +syn keyword xsMacro PerlProc_execv PerlProc_execvp PerlProc_exit +syn keyword xsMacro PerlProc_fork PerlProc_getegid PerlProc_geteuid +syn keyword xsMacro PerlProc_getgid PerlProc_getlogin PerlProc_getpid +syn keyword xsMacro PerlProc_gettimeofday PerlProc_getuid PerlProc_kill +syn keyword xsMacro PerlProc_killpg PerlProc_lasthost PerlProc_longjmp +syn keyword xsMacro PerlProc_pause PerlProc_pclose PerlProc_pipe +syn keyword xsMacro PerlProc_popen PerlProc_popen_list PerlProc_setgid +syn keyword xsMacro PerlProc_setjmp PerlProc_setuid PerlProc_signal +syn keyword xsMacro PerlProc_sleep PerlProc_spawnvp PerlProc_times +syn keyword xsMacro PerlProc_wait PerlProc_waitpid PerlSIO_canset_cnt +syn keyword xsMacro PerlSIO_clearerr PerlSIO_fast_gets PerlSIO_fclose +syn keyword xsMacro PerlSIO_fdopen PerlSIO_fdupopen PerlSIO_feof +syn keyword xsMacro PerlSIO_ferror PerlSIO_fflush PerlSIO_fgetc +syn keyword xsMacro PerlSIO_fgetpos PerlSIO_fgets PerlSIO_fileno +syn keyword xsMacro PerlSIO_fopen PerlSIO_fputc PerlSIO_fputs PerlSIO_fread +syn keyword xsMacro PerlSIO_freopen PerlSIO_fseek PerlSIO_fsetpos +syn keyword xsMacro PerlSIO_ftell PerlSIO_fwrite PerlSIO_get_base +syn keyword xsMacro PerlSIO_get_bufsiz PerlSIO_get_cnt PerlSIO_get_ptr +syn keyword xsMacro PerlSIO_has_base PerlSIO_has_cntptr PerlSIO_init +syn keyword xsMacro PerlSIO_printf PerlSIO_rewind PerlSIO_set_cnt +syn keyword xsMacro PerlSIO_set_ptr PerlSIO_setbuf PerlSIO_setlinebuf +syn keyword xsMacro PerlSIO_setvbuf PerlSIO_stderr PerlSIO_stdin +syn keyword xsMacro PerlSIO_stdout PerlSIO_stdoutf PerlSIO_tmpfile +syn keyword xsMacro PerlSIO_ungetc PerlSIO_vprintf PerlSock_accept +syn keyword xsMacro PerlSock_bind PerlSock_closesocket PerlSock_connect +syn keyword xsMacro PerlSock_endhostent PerlSock_endnetent +syn keyword xsMacro PerlSock_endprotoent PerlSock_endservent +syn keyword xsMacro PerlSock_gethostbyaddr PerlSock_gethostbyname +syn keyword xsMacro PerlSock_gethostent PerlSock_gethostname +syn keyword xsMacro PerlSock_getnetbyaddr PerlSock_getnetbyname +syn keyword xsMacro PerlSock_getnetent PerlSock_getpeername +syn keyword xsMacro PerlSock_getprotobyname PerlSock_getprotobynumber +syn keyword xsMacro PerlSock_getprotoent PerlSock_getservbyname +syn keyword xsMacro PerlSock_getservbyport PerlSock_getservent +syn keyword xsMacro PerlSock_getsockname PerlSock_getsockopt PerlSock_htonl +syn keyword xsMacro PerlSock_htons PerlSock_inet_addr PerlSock_inet_ntoa +syn keyword xsMacro PerlSock_listen PerlSock_ntohl PerlSock_ntohs +syn keyword xsMacro PerlSock_recv PerlSock_recvfrom PerlSock_select +syn keyword xsMacro PerlSock_send PerlSock_sendto PerlSock_sethostent +syn keyword xsMacro PerlSock_setnetent PerlSock_setprotoent +syn keyword xsMacro PerlSock_setservent PerlSock_setsockopt PerlSock_shutdown +syn keyword xsMacro PerlSock_socket PerlSock_socketpair Perl_acos Perl_asin +syn keyword xsMacro Perl_assert Perl_atan Perl_atan2 Perl_atof Perl_atof2 +syn keyword xsMacro Perl_ceil Perl_cos Perl_cosh Perl_custom_op_xop +syn keyword xsMacro Perl_debug_log Perl_drand48 Perl_drand48_init +syn keyword xsMacro Perl_error_log Perl_exp Perl_floor Perl_fmod +syn keyword xsMacro Perl_fp_class_denorm Perl_fp_class_inf Perl_fp_class_nan +syn keyword xsMacro Perl_fp_class_ndenorm Perl_fp_class_ninf +syn keyword xsMacro Perl_fp_class_nnorm Perl_fp_class_norm +syn keyword xsMacro Perl_fp_class_nzero Perl_fp_class_pdenorm +syn keyword xsMacro Perl_fp_class_pinf Perl_fp_class_pnorm +syn keyword xsMacro Perl_fp_class_pzero Perl_fp_class_qnan Perl_fp_class_snan +syn keyword xsMacro Perl_fp_class_zero Perl_free_c_backtrace Perl_frexp +syn keyword xsMacro Perl_isfinite Perl_isfinitel Perl_isinf Perl_isnan +syn keyword xsMacro Perl_ldexp Perl_log Perl_log10 Perl_malloc_good_size +syn keyword xsMacro Perl_modf Perl_pow Perl_pp_accept Perl_pp_aelemfast_lex +syn keyword xsMacro Perl_pp_andassign Perl_pp_avalues Perl_pp_bind +syn keyword xsMacro Perl_pp_bit_xor Perl_pp_chmod Perl_pp_chomp +syn keyword xsMacro Perl_pp_connect Perl_pp_cos Perl_pp_custom +syn keyword xsMacro Perl_pp_dbmclose Perl_pp_dofile Perl_pp_dor +syn keyword xsMacro Perl_pp_dorassign Perl_pp_dump Perl_pp_egrent +syn keyword xsMacro Perl_pp_enetent Perl_pp_eprotoent Perl_pp_epwent +syn keyword xsMacro Perl_pp_eservent Perl_pp_exp Perl_pp_fcntl +syn keyword xsMacro Perl_pp_ftatime Perl_pp_ftbinary Perl_pp_ftblk +syn keyword xsMacro Perl_pp_ftchr Perl_pp_ftctime Perl_pp_ftdir +syn keyword xsMacro Perl_pp_fteexec Perl_pp_fteowned Perl_pp_fteread +syn keyword xsMacro Perl_pp_ftewrite Perl_pp_ftfile Perl_pp_ftmtime +syn keyword xsMacro Perl_pp_ftpipe Perl_pp_ftrexec Perl_pp_ftrwrite +syn keyword xsMacro Perl_pp_ftsgid Perl_pp_ftsize Perl_pp_ftsock +syn keyword xsMacro Perl_pp_ftsuid Perl_pp_ftsvtx Perl_pp_ftzero +syn keyword xsMacro Perl_pp_getpeername Perl_pp_getsockname Perl_pp_ggrgid +syn keyword xsMacro Perl_pp_ggrnam Perl_pp_ghbyaddr Perl_pp_ghbyname +syn keyword xsMacro Perl_pp_gnbyaddr Perl_pp_gnbyname Perl_pp_gpbyname +syn keyword xsMacro Perl_pp_gpbynumber Perl_pp_gpwnam Perl_pp_gpwuid +syn keyword xsMacro Perl_pp_gsbyname Perl_pp_gsbyport Perl_pp_gsockopt +syn keyword xsMacro Perl_pp_hex Perl_pp_i_postdec Perl_pp_i_postinc +syn keyword xsMacro Perl_pp_i_predec Perl_pp_i_preinc Perl_pp_keys +syn keyword xsMacro Perl_pp_kill Perl_pp_lcfirst Perl_pp_lineseq +syn keyword xsMacro Perl_pp_listen Perl_pp_localtime Perl_pp_log +syn keyword xsMacro Perl_pp_lstat Perl_pp_mapstart Perl_pp_msgctl +syn keyword xsMacro Perl_pp_msgget Perl_pp_msgrcv Perl_pp_msgsnd +syn keyword xsMacro Perl_pp_nbit_xor Perl_pp_orassign Perl_pp_padany +syn keyword xsMacro Perl_pp_pop Perl_pp_postdec Perl_pp_predec Perl_pp_reach +syn keyword xsMacro Perl_pp_read Perl_pp_recv Perl_pp_regcmaybe +syn keyword xsMacro Perl_pp_rindex Perl_pp_rv2hv Perl_pp_rvalues Perl_pp_say +syn keyword xsMacro Perl_pp_sbit_xor Perl_pp_scalar Perl_pp_schomp +syn keyword xsMacro Perl_pp_scope Perl_pp_seek Perl_pp_semop Perl_pp_send +syn keyword xsMacro Perl_pp_sge Perl_pp_sgrent Perl_pp_sgt Perl_pp_shmctl +syn keyword xsMacro Perl_pp_shmget Perl_pp_shmread Perl_pp_shutdown +syn keyword xsMacro Perl_pp_slt Perl_pp_snetent Perl_pp_socket +syn keyword xsMacro Perl_pp_sprotoent Perl_pp_spwent Perl_pp_sqrt +syn keyword xsMacro Perl_pp_sservent Perl_pp_ssockopt Perl_pp_symlink +syn keyword xsMacro Perl_pp_transr Perl_pp_unlink Perl_pp_utime +syn keyword xsMacro Perl_pp_values Perl_safesysmalloc_size Perl_sharepvn +syn keyword xsMacro Perl_signbit Perl_sin Perl_sinh Perl_sqrt Perl_strtod +syn keyword xsMacro Perl_tan Perl_tanh Perl_va_copy PmopSTASH PmopSTASHPV +syn keyword xsMacro PmopSTASHPV_set PmopSTASH_set Poison PoisonFree PoisonNew +syn keyword xsMacro PoisonPADLIST PoisonWith QR_PAT_MODS QUADKIND QUAD_IS_INT +syn keyword xsMacro QUAD_IS_INT64_T QUAD_IS_LONG QUAD_IS_LONG_LONG +syn keyword xsMacro QUAD_IS___INT64 QUESTION_MARK_CTRL QWLIST RANDBITS +syn keyword xsMacro RANDOM_R_PROTO RD_NODATA READDIR64_R_PROTO +syn keyword xsMacro READDIR_R_PROTO READ_XDIGIT REENTRANT_PROTO_B_B +syn keyword xsMacro REENTRANT_PROTO_B_BI REENTRANT_PROTO_B_BW +syn keyword xsMacro REENTRANT_PROTO_B_CCD REENTRANT_PROTO_B_CCS +syn keyword xsMacro REENTRANT_PROTO_B_IBI REENTRANT_PROTO_B_IBW +syn keyword xsMacro REENTRANT_PROTO_B_SB REENTRANT_PROTO_B_SBI +syn keyword xsMacro REENTRANT_PROTO_I_BI REENTRANT_PROTO_I_BW +syn keyword xsMacro REENTRANT_PROTO_I_CCSBWR REENTRANT_PROTO_I_CCSD +syn keyword xsMacro REENTRANT_PROTO_I_CII REENTRANT_PROTO_I_CIISD +syn keyword xsMacro REENTRANT_PROTO_I_CSBI REENTRANT_PROTO_I_CSBIR +syn keyword xsMacro REENTRANT_PROTO_I_CSBWR REENTRANT_PROTO_I_CSBWRE +syn keyword xsMacro REENTRANT_PROTO_I_CSD REENTRANT_PROTO_I_CWISBWRE +syn keyword xsMacro REENTRANT_PROTO_I_CWISD REENTRANT_PROTO_I_D +syn keyword xsMacro REENTRANT_PROTO_I_H REENTRANT_PROTO_I_IBI +syn keyword xsMacro REENTRANT_PROTO_I_IBW REENTRANT_PROTO_I_ICBI +syn keyword xsMacro REENTRANT_PROTO_I_ICSBWR REENTRANT_PROTO_I_ICSD +syn keyword xsMacro REENTRANT_PROTO_I_ID REENTRANT_PROTO_I_IISD +syn keyword xsMacro REENTRANT_PROTO_I_ISBWR REENTRANT_PROTO_I_ISD +syn keyword xsMacro REENTRANT_PROTO_I_LISBI REENTRANT_PROTO_I_LISD +syn keyword xsMacro REENTRANT_PROTO_I_SB REENTRANT_PROTO_I_SBI +syn keyword xsMacro REENTRANT_PROTO_I_SBIE REENTRANT_PROTO_I_SBIH +syn keyword xsMacro REENTRANT_PROTO_I_SBIR REENTRANT_PROTO_I_SBWR +syn keyword xsMacro REENTRANT_PROTO_I_SBWRE REENTRANT_PROTO_I_SD +syn keyword xsMacro REENTRANT_PROTO_I_TISD REENTRANT_PROTO_I_TS +syn keyword xsMacro REENTRANT_PROTO_I_TSBI REENTRANT_PROTO_I_TSBIR +syn keyword xsMacro REENTRANT_PROTO_I_TSBWR REENTRANT_PROTO_I_TSR +syn keyword xsMacro REENTRANT_PROTO_I_TsISBWRE REENTRANT_PROTO_I_UISBWRE +syn keyword xsMacro REENTRANT_PROTO_I_uISBWRE REENTRANT_PROTO_S_CBI +syn keyword xsMacro REENTRANT_PROTO_S_CCSBI REENTRANT_PROTO_S_CIISBIE +syn keyword xsMacro REENTRANT_PROTO_S_CSBI REENTRANT_PROTO_S_CSBIE +syn keyword xsMacro REENTRANT_PROTO_S_CWISBIE REENTRANT_PROTO_S_CWISBWIE +syn keyword xsMacro REENTRANT_PROTO_S_ICSBI REENTRANT_PROTO_S_ISBI +syn keyword xsMacro REENTRANT_PROTO_S_LISBI REENTRANT_PROTO_S_SBI +syn keyword xsMacro REENTRANT_PROTO_S_SBIE REENTRANT_PROTO_S_SBW +syn keyword xsMacro REENTRANT_PROTO_S_TISBI REENTRANT_PROTO_S_TSBI +syn keyword xsMacro REENTRANT_PROTO_S_TSBIE REENTRANT_PROTO_S_TWISBIE +syn keyword xsMacro REENTRANT_PROTO_V_D REENTRANT_PROTO_V_H +syn keyword xsMacro REENTRANT_PROTO_V_ID REENTR_H REENTR_MEMZERO REF +syn keyword xsMacro REFCOUNTED_HE_EXISTS REFCOUNTED_HE_KEY_UTF8 REFF REFFA +syn keyword xsMacro REFFL REFFU REFGEN REF_HE_KEY REGMATCH_STATE_MAX +syn keyword xsMacro REGNODE_MAX REGNODE_SIMPLE REGNODE_VARIES REG_ANY +syn keyword xsMacro REG_CANY_SEEN REG_CUTGROUP_SEEN REG_EXTFLAGS_NAME_SIZE +syn keyword xsMacro REG_GOSTART_SEEN REG_GPOS_SEEN REG_INFTY +syn keyword xsMacro REG_INTFLAGS_NAME_SIZE REG_LOOKBEHIND_SEEN REG_MAGIC +syn keyword xsMacro REG_RECURSE_SEEN REG_RUN_ON_COMMENT_SEEN +syn keyword xsMacro REG_TOP_LEVEL_BRANCHES_SEEN REG_UNBOUNDED_QUANTIFIER_SEEN +syn keyword xsMacro REG_UNFOLDED_MULTI_SEEN REG_VERBARG_SEEN +syn keyword xsMacro REG_ZERO_LEN_SEEN RELOP RENUM REQUIRE RESTORE_ERRNO +syn keyword xsMacro RESTORE_LC_NUMERIC RESTORE_LC_NUMERIC_STANDARD +syn keyword xsMacro RESTORE_LC_NUMERIC_UNDERLYING RESTORE_NUMERIC_LOCAL +syn keyword xsMacro RESTORE_NUMERIC_STANDARD RETPUSHNO RETPUSHUNDEF +syn keyword xsMacro RETPUSHYES RETSETNO RETSETTARG RETSETUNDEF RETSETYES +syn keyword xsMacro RETURN RETURNOP RETURNX RETURN_PROBE REXEC_CHECKED +syn keyword xsMacro REXEC_COPY_SKIP_POST REXEC_COPY_SKIP_PRE REXEC_COPY_STR +syn keyword xsMacro REXEC_FAIL_ON_UNDERFLOW REXEC_IGNOREPOS REXEC_NOT_FIRST +syn keyword xsMacro REXEC_SCREAM RE_DEBUG_COMPILE_DUMP RE_DEBUG_COMPILE_FLAGS +syn keyword xsMacro RE_DEBUG_COMPILE_MASK RE_DEBUG_COMPILE_OPTIMISE +syn keyword xsMacro RE_DEBUG_COMPILE_PARSE RE_DEBUG_COMPILE_TEST +syn keyword xsMacro RE_DEBUG_COMPILE_TRIE RE_DEBUG_EXECUTE_INTUIT +syn keyword xsMacro RE_DEBUG_EXECUTE_MASK RE_DEBUG_EXECUTE_MATCH +syn keyword xsMacro RE_DEBUG_EXECUTE_TRIE RE_DEBUG_EXTRA_BUFFERS +syn keyword xsMacro RE_DEBUG_EXTRA_GPOS RE_DEBUG_EXTRA_MASK +syn keyword xsMacro RE_DEBUG_EXTRA_OFFDEBUG RE_DEBUG_EXTRA_OFFSETS +syn keyword xsMacro RE_DEBUG_EXTRA_OPTIMISE RE_DEBUG_EXTRA_STACK +syn keyword xsMacro RE_DEBUG_EXTRA_STATE RE_DEBUG_EXTRA_TRIE RE_DEBUG_FLAG +syn keyword xsMacro RE_DEBUG_FLAGS RE_PV_COLOR_DECL RE_PV_QUOTED_DECL +syn keyword xsMacro RE_SV_DUMPLEN RE_SV_ESCAPE RE_SV_TAIL +syn keyword xsMacro RE_TRACK_PATTERN_OFFSETS RE_TRIE_MAXBUF_INIT +syn keyword xsMacro RE_TRIE_MAXBUF_NAME RMS_DIR RMS_FAC RMS_FEX RMS_FNF +syn keyword xsMacro RMS_IFI RMS_ISI RMS_PRV ROTL32 ROTL64 ROTL_UV +syn keyword xsMacro RUNOPS_DEFAULT RV2CVOPCV_FLAG_MASK RV2CVOPCV_MARK_EARLY +syn keyword xsMacro RV2CVOPCV_MAYBE_NAME_GV RV2CVOPCV_RETURN_NAME_GV +syn keyword xsMacro RV2CVOPCV_RETURN_STUB RX_ANCHORED_SUBSTR RX_ANCHORED_UTF8 +syn keyword xsMacro RX_BUFF_IDX_CARET_FULLMATCH RX_BUFF_IDX_CARET_POSTMATCH +syn keyword xsMacro RX_BUFF_IDX_CARET_PREMATCH RX_BUFF_IDX_FULLMATCH +syn keyword xsMacro RX_BUFF_IDX_POSTMATCH RX_BUFF_IDX_PREMATCH +syn keyword xsMacro RX_CHECK_SUBSTR RX_COMPFLAGS RX_ENGINE RX_EXTFLAGS +syn keyword xsMacro RX_FLOAT_SUBSTR RX_FLOAT_UTF8 RX_GOFS RX_HAS_CUTGROUP +syn keyword xsMacro RX_INTFLAGS RX_ISTAINTED RX_LASTCLOSEPAREN RX_LASTPAREN +syn keyword xsMacro RX_MATCH_COPIED RX_MATCH_COPIED_off RX_MATCH_COPIED_on +syn keyword xsMacro RX_MATCH_COPIED_set RX_MATCH_COPY_FREE RX_MATCH_TAINTED +syn keyword xsMacro RX_MATCH_TAINTED_off RX_MATCH_TAINTED_on +syn keyword xsMacro RX_MATCH_TAINTED_set RX_MATCH_UTF8 RX_MATCH_UTF8_off +syn keyword xsMacro RX_MATCH_UTF8_on RX_MATCH_UTF8_set RX_MINLEN RX_MINLENRET +syn keyword xsMacro RX_NPARENS RX_OFFS RX_PRECOMP RX_PRECOMP_const RX_PRELEN +syn keyword xsMacro RX_REFCNT RX_SAVED_COPY RX_SUBBEG RX_SUBCOFFSET RX_SUBLEN +syn keyword xsMacro RX_SUBOFFSET RX_TAINT_on RX_UTF8 RX_WRAPLEN RX_WRAPPED +syn keyword xsMacro RX_WRAPPED_const RX_ZERO_LEN RXapif_ALL RXapif_CLEAR +syn keyword xsMacro RXapif_DELETE RXapif_EXISTS RXapif_FETCH RXapif_FIRSTKEY +syn keyword xsMacro RXapif_NEXTKEY RXapif_ONE RXapif_REGNAME RXapif_REGNAMES +syn keyword xsMacro RXapif_REGNAMES_COUNT RXapif_SCALAR RXapif_STORE +syn keyword xsMacro RXf_BASE_SHIFT RXf_CHECK_ALL RXf_COPY_DONE RXf_EVAL_SEEN +syn keyword xsMacro RXf_INTUIT_TAIL RXf_IS_ANCHORED RXf_MATCH_UTF8 +syn keyword xsMacro RXf_NO_INPLACE_SUBST RXf_NULL RXf_PMf_CHARSET +syn keyword xsMacro RXf_PMf_COMPILETIME RXf_PMf_EXTENDED +syn keyword xsMacro RXf_PMf_EXTENDED_MORE RXf_PMf_FLAGCOPYMASK RXf_PMf_FOLD +syn keyword xsMacro RXf_PMf_KEEPCOPY RXf_PMf_MULTILINE RXf_PMf_NOCAPTURE +syn keyword xsMacro RXf_PMf_SINGLELINE RXf_PMf_SPLIT RXf_PMf_STD_PMMOD +syn keyword xsMacro RXf_PMf_STD_PMMOD_SHIFT RXf_PMf_STRICT RXf_SKIPWHITE +syn keyword xsMacro RXf_SPLIT RXf_START_ONLY RXf_TAINTED RXf_TAINTED_SEEN +syn keyword xsMacro RXf_UNBOUNDED_QUANTIFIER_SEEN RXf_USE_INTUIT +syn keyword xsMacro RXf_USE_INTUIT_ML RXf_USE_INTUIT_NOML RXf_WHITE RXi_GET +syn keyword xsMacro RXi_GET_DECL RXi_SET RXp_COMPFLAGS RXp_EXTFLAGS +syn keyword xsMacro RXp_INTFLAGS RXp_MATCH_COPIED RXp_MATCH_COPIED_off +syn keyword xsMacro RXp_MATCH_COPIED_on RXp_MATCH_TAINTED +syn keyword xsMacro RXp_MATCH_TAINTED_on RXp_MATCH_UTF8 RXp_PAREN_NAMES ReANY +syn keyword xsMacro ReREFCNT_dec ReREFCNT_inc Renew Renewc RsPARA RsRECORD +syn keyword xsMacro RsSIMPLE RsSNARF SAFE_TRIE_NODENUM SANY SAVEADELETE +syn keyword xsMacro SAVEBOOL SAVECLEARSV SAVECOMPILEWARNINGS SAVECOMPPAD +syn keyword xsMacro SAVECOPFILE SAVECOPFILE_FREE SAVECOPLINE +syn keyword xsMacro SAVECOPSTASH_FREE SAVEDELETE SAVEDESTRUCTOR +syn keyword xsMacro SAVEDESTRUCTOR_X SAVEFREECOPHH SAVEFREEOP SAVEFREEPADNAME +syn keyword xsMacro SAVEFREEPV SAVEFREESV SAVEGENERICPV SAVEGENERICSV +syn keyword xsMacro SAVEHDELETE SAVEHINTS SAVEI16 SAVEI32 SAVEI8 SAVEINT +syn keyword xsMacro SAVEIV SAVELONG SAVEMORTALIZESV SAVEOP +syn keyword xsMacro SAVEPADSVANDMORTALIZE SAVEPARSER SAVEPPTR SAVESETSVFLAGS +syn keyword xsMacro SAVESHAREDPV SAVESPTR SAVESTACK_POS SAVESWITCHSTACK +syn keyword xsMacro SAVETMPS SAVEVPTR SAVE_DEFSV SAVE_ERRNO SAVE_MASK +syn keyword xsMacro SAVE_TIGHT_SHIFT SAVEf_KEEPOLDELEM SAVEf_SETMAGIC +syn keyword xsMacro SAVEt_ADELETE SAVEt_AELEM SAVEt_ALLOC SAVEt_APTR +syn keyword xsMacro SAVEt_ARG0_MAX SAVEt_ARG1_MAX SAVEt_ARG2_MAX SAVEt_AV +syn keyword xsMacro SAVEt_BOOL SAVEt_CLEARPADRANGE SAVEt_CLEARSV +syn keyword xsMacro SAVEt_COMPILE_WARNINGS SAVEt_COMPPAD SAVEt_DELETE +syn keyword xsMacro SAVEt_DESTRUCTOR SAVEt_DESTRUCTOR_X SAVEt_FREECOPHH +syn keyword xsMacro SAVEt_FREEOP SAVEt_FREEPADNAME SAVEt_FREEPV SAVEt_FREESV +syn keyword xsMacro SAVEt_GENERIC_PVREF SAVEt_GENERIC_SVREF SAVEt_GP +syn keyword xsMacro SAVEt_GP_ALIASED_SV SAVEt_GVSLOT SAVEt_GVSV SAVEt_HELEM +syn keyword xsMacro SAVEt_HINTS SAVEt_HPTR SAVEt_HV SAVEt_I16 SAVEt_I32 +syn keyword xsMacro SAVEt_I32_SMALL SAVEt_I8 SAVEt_INT SAVEt_INT_SMALL +syn keyword xsMacro SAVEt_ITEM SAVEt_IV SAVEt_LONG SAVEt_MORTALIZESV +syn keyword xsMacro SAVEt_NSTAB SAVEt_OP SAVEt_PADSV_AND_MORTALIZE +syn keyword xsMacro SAVEt_PARSER SAVEt_PPTR SAVEt_READONLY_OFF +syn keyword xsMacro SAVEt_REGCONTEXT SAVEt_SAVESWITCHSTACK SAVEt_SET_SVFLAGS +syn keyword xsMacro SAVEt_SHARED_PVREF SAVEt_SPTR SAVEt_STACK_POS +syn keyword xsMacro SAVEt_STRLEN SAVEt_SV SAVEt_SVREF SAVEt_VPTR +syn keyword xsMacro SAWAMPERSAND_LEFT SAWAMPERSAND_MIDDLE SAWAMPERSAND_RIGHT +syn keyword xsMacro SBOL SB_ENUM_COUNT SCAN_DEF SCAN_REPL SCAN_TR +syn keyword xsMacro SCAN_VERSION SCHED_YIELD SCOPE_SAVES_SIGNAL_MASK SEEK_CUR +syn keyword xsMacro SEEK_END SEEK_SET SELECT_MIN_BITS SEOL SETERRNO +syn keyword xsMacro SETGRENT_R_PROTO SETHOSTENT_R_PROTO SETLOCALE_R_PROTO +syn keyword xsMacro SETNETENT_R_PROTO SETPROTOENT_R_PROTO SETPWENT_R_PROTO +syn keyword xsMacro SETSERVENT_R_PROTO SETTARG SET_MARK_OFFSET +syn keyword xsMacro SET_NUMERIC_LOCAL SET_NUMERIC_STANDARD +syn keyword xsMacro SET_NUMERIC_UNDERLYING SET_THR SET_THREAD_SELF SETi SETn +syn keyword xsMacro SETp SETs SETu SHARP_S_SKIP SHIFTOP SHORTSIZE SH_PATH +syn keyword xsMacro SIGABRT SIGILL SIG_NAME SIG_NUM SIG_SIZE SINGLE_PAT_MOD +syn keyword xsMacro SIPROUND SITEARCH SITEARCH_EXP SITELIB SITELIB_EXP +syn keyword xsMacro SITELIB_STEM SIZE_ALIGN SIZE_ONLY SKIP SKIP_next +syn keyword xsMacro SKIP_next_fail SLOPPYDIVIDE SOCKET_OPEN_MODE SPAGAIN +syn keyword xsMacro SPRINTF_RETURNS_STRLEN SRAND48_R_PROTO SRANDOM_R_PROTO +syn keyword xsMacro SSCHECK SSC_MATCHES_EMPTY_STRING SSGROW SSNEW SSNEWa +syn keyword xsMacro SSNEWat SSNEWt SSPOPBOOL SSPOPDPTR SSPOPDXPTR SSPOPINT +syn keyword xsMacro SSPOPIV SSPOPLONG SSPOPPTR SSPOPUV SSPTR SSPTRt +syn keyword xsMacro SSPUSHBOOL SSPUSHDPTR SSPUSHDXPTR SSPUSHINT SSPUSHIV +syn keyword xsMacro SSPUSHLONG SSPUSHPTR SSPUSHUV SS_ACCVIO SS_ADD_BOOL +syn keyword xsMacro SS_ADD_DPTR SS_ADD_DXPTR SS_ADD_END SS_ADD_INT SS_ADD_IV +syn keyword xsMacro SS_ADD_LONG SS_ADD_PTR SS_ADD_UV SS_BUFFEROVF +syn keyword xsMacro SS_DEVOFFLINE SS_IVCHAN SS_MAXPUSH SS_NOPRIV SS_NORMAL +syn keyword xsMacro SSize_t_MAX ST STANDARD_C STAR STARTPERL START_EXTERN_C +syn keyword xsMacro START_MY_CXT STATIC STATIC_ASSERT_1 STATIC_ASSERT_2 +syn keyword xsMacro STATIC_ASSERT_GLOBAL STATIC_ASSERT_STMT +syn keyword xsMacro STATUS_ALL_FAILURE STATUS_ALL_SUCCESS STATUS_CURRENT +syn keyword xsMacro STATUS_EXIT STATUS_EXIT_SET STATUS_NATIVE +syn keyword xsMacro STATUS_NATIVE_CHILD_SET STATUS_UNIX STATUS_UNIX_EXIT_SET +syn keyword xsMacro STATUS_UNIX_SET STDCHAR STDIO_STREAM_ARRAY STD_PAT_MODS +syn keyword xsMacro STD_PMMOD_FLAGS_CLEAR STD_PMMOD_FLAGS_PARSE_X_WARN +syn keyword xsMacro STMT_END STMT_START STORE_LC_NUMERIC_FORCE_TO_UNDERLYING +syn keyword xsMacro STORE_LC_NUMERIC_SET_TO_NEEDED +syn keyword xsMacro STORE_LC_NUMERIC_STANDARD_SET_UNDERLYING +syn keyword xsMacro STORE_LC_NUMERIC_UNDERLYING_SET_STANDARD +syn keyword xsMacro STORE_NUMERIC_LOCAL_SET_STANDARD +syn keyword xsMacro STORE_NUMERIC_STANDARD_FORCE_LOCAL +syn keyword xsMacro STORE_NUMERIC_STANDARD_SET_LOCAL STRERROR_R_PROTO STRING +syn keyword xsMacro STRINGIFY STRUCT_OFFSET STRUCT_SV STR_LEN STR_SZ +syn keyword xsMacro STR_WITH_LEN ST_INO_SIGN ST_INO_SIZE SUB +syn keyword xsMacro SUBST_TAINT_BOOLRET SUBST_TAINT_PAT SUBST_TAINT_REPL +syn keyword xsMacro SUBST_TAINT_RETAINT SUBST_TAINT_STR SUBVERSION SUCCEED +syn keyword xsMacro SUSPEND SVTYPEMASK SV_CATBYTES SV_CATUTF8 +syn keyword xsMacro SV_CHECK_THINKFIRST SV_CHECK_THINKFIRST_COW_DROP SV_CONST +syn keyword xsMacro SV_CONSTS_COUNT SV_CONST_BINMODE SV_CONST_CLEAR +syn keyword xsMacro SV_CONST_CLOSE SV_CONST_DELETE SV_CONST_DESTROY +syn keyword xsMacro SV_CONST_EOF SV_CONST_EXISTS SV_CONST_EXTEND +syn keyword xsMacro SV_CONST_FETCH SV_CONST_FETCHSIZE SV_CONST_FILENO +syn keyword xsMacro SV_CONST_FIRSTKEY SV_CONST_GETC SV_CONST_NEXTKEY +syn keyword xsMacro SV_CONST_OPEN SV_CONST_POP SV_CONST_PRINT SV_CONST_PRINTF +syn keyword xsMacro SV_CONST_PUSH SV_CONST_READ SV_CONST_READLINE +syn keyword xsMacro SV_CONST_RETURN SV_CONST_SCALAR SV_CONST_SEEK +syn keyword xsMacro SV_CONST_SHIFT SV_CONST_SPLICE SV_CONST_STORE +syn keyword xsMacro SV_CONST_STORESIZE SV_CONST_TELL SV_CONST_TIEARRAY +syn keyword xsMacro SV_CONST_TIEHANDLE SV_CONST_TIEHASH SV_CONST_TIESCALAR +syn keyword xsMacro SV_CONST_UNSHIFT SV_CONST_UNTIE SV_CONST_WRITE +syn keyword xsMacro SV_COW_DROP_PV SV_COW_OTHER_PVS SV_COW_REFCNT_MAX +syn keyword xsMacro SV_COW_SHARED_HASH_KEYS SV_DO_COW_SVSETSV +syn keyword xsMacro SV_FORCE_UTF8_UPGRADE SV_GMAGIC SV_HAS_TRAILING_NUL +syn keyword xsMacro SV_IMMEDIATE_UNREF SV_MUTABLE_RETURN SV_NOSTEAL +syn keyword xsMacro SV_SAVED_COPY SV_SKIP_OVERLOAD SV_SMAGIC +syn keyword xsMacro SV_UNDEF_RETURNS_NULL SV_UTF8_NO_ENCODING SVrepl_EVAL +syn keyword xsMacro SVt_FIRST SVt_MASK SWITCHSTACK SYMBIAN SYSTEM_GMTIME_MAX +syn keyword xsMacro SYSTEM_GMTIME_MIN SYSTEM_LOCALTIME_MAX +syn keyword xsMacro SYSTEM_LOCALTIME_MIN S_IEXEC S_IFIFO S_IFMT S_IREAD +syn keyword xsMacro S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISBLK +syn keyword xsMacro S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISLNK S_ISREG S_ISSOCK +syn keyword xsMacro S_ISUID S_IWGRP S_IWOTH S_IWRITE S_IWUSR S_IXGRP S_IXOTH +syn keyword xsMacro S_IXUSR S_PAT_MODS Safefree Semctl Sigjmp_buf Siglongjmp +syn keyword xsMacro Sigsetjmp Size_t_MAX Size_t_size StGiFy StashHANDLER Stat +syn keyword xsMacro Strerror Strtol Strtoul StructCopy SvAMAGIC SvANY +syn keyword xsMacro SvCANCOW SvCANEXISTDELETE SvCOMPILED SvCOMPILED_off +syn keyword xsMacro SvCOMPILED_on SvCUR SvCUR_set SvDESTROYABLE SvEND +syn keyword xsMacro SvEND_set SvENDx SvEVALED SvEVALED_off SvEVALED_on SvFAKE +syn keyword xsMacro SvFAKE_off SvFAKE_on SvFLAGS SvGAMAGIC SvGETMAGIC SvGID +syn keyword xsMacro SvGMAGICAL SvGMAGICAL_off SvGMAGICAL_on SvGROW +syn keyword xsMacro SvGROW_mutable SvIMMORTAL SvIOK SvIOK_UV SvIOK_nog +syn keyword xsMacro SvIOK_nogthink SvIOK_notUV SvIOK_off SvIOK_on SvIOK_only +syn keyword xsMacro SvIOK_only_UV SvIOKp SvIOKp_on SvIS_FREED SvIV SvIVX +syn keyword xsMacro SvIVXx SvIV_nomg SvIV_please SvIV_please_nomg SvIV_set +syn keyword xsMacro SvIVx SvIsCOW SvIsCOW_normal SvIsCOW_off SvIsCOW_on +syn keyword xsMacro SvIsCOW_shared_hash SvIsUV SvIsUV_off SvIsUV_on SvLEN +syn keyword xsMacro SvLEN_set SvLENx SvLOCK SvMAGIC SvMAGICAL SvMAGICAL_off +syn keyword xsMacro SvMAGICAL_on SvMAGIC_set SvNIOK SvNIOK_nog +syn keyword xsMacro SvNIOK_nogthink SvNIOK_off SvNIOKp SvNOK SvNOK_nog +syn keyword xsMacro SvNOK_nogthink SvNOK_off SvNOK_on SvNOK_only SvNOKp +syn keyword xsMacro SvNOKp_on SvNV SvNVX SvNVXx SvNV_nomg SvNV_set SvNVx +syn keyword xsMacro SvOBJECT SvOBJECT_off SvOBJECT_on SvOK SvOK_off +syn keyword xsMacro SvOK_off_exc_UV SvOKp SvOOK SvOOK_off SvOOK_offset +syn keyword xsMacro SvOOK_on SvOURSTASH SvOURSTASH_set SvPADMY SvPADMY_on +syn keyword xsMacro SvPADSTALE SvPADSTALE_off SvPADSTALE_on SvPADTMP +syn keyword xsMacro SvPADTMP_off SvPADTMP_on SvPAD_OUR SvPAD_OUR_on +syn keyword xsMacro SvPAD_STATE SvPAD_STATE_on SvPAD_TYPED SvPAD_TYPED_on +syn keyword xsMacro SvPCS_IMPORTED SvPCS_IMPORTED_off SvPCS_IMPORTED_on +syn keyword xsMacro SvPEEK SvPOK SvPOK_byte_nog SvPOK_byte_nogthink +syn keyword xsMacro SvPOK_byte_pure_nogthink SvPOK_nog SvPOK_nogthink +syn keyword xsMacro SvPOK_off SvPOK_on SvPOK_only SvPOK_only_UTF8 +syn keyword xsMacro SvPOK_pure_nogthink SvPOK_utf8_nog SvPOK_utf8_nogthink +syn keyword xsMacro SvPOK_utf8_pure_nogthink SvPOKp SvPOKp_on SvPV SvPVX +syn keyword xsMacro SvPVX_const SvPVX_mutable SvPVXtrue SvPVXx SvPV_const +syn keyword xsMacro SvPV_flags SvPV_flags_const SvPV_flags_const_nolen +syn keyword xsMacro SvPV_flags_mutable SvPV_force SvPV_force_flags +syn keyword xsMacro SvPV_force_flags_mutable SvPV_force_flags_nolen +syn keyword xsMacro SvPV_force_mutable SvPV_force_nolen SvPV_force_nomg +syn keyword xsMacro SvPV_force_nomg_nolen SvPV_free SvPV_mutable SvPV_nolen +syn keyword xsMacro SvPV_nolen_const SvPV_nomg SvPV_nomg_const +syn keyword xsMacro SvPV_nomg_const_nolen SvPV_nomg_nolen SvPV_renew SvPV_set +syn keyword xsMacro SvPV_shrink_to_cur SvPVbyte SvPVbyte_force SvPVbyte_nolen +syn keyword xsMacro SvPVbytex SvPVbytex_force SvPVbytex_nolen SvPVutf8 +syn keyword xsMacro SvPVutf8_force SvPVutf8_nolen SvPVutf8x SvPVutf8x_force +syn keyword xsMacro SvPVx SvPVx_const SvPVx_force SvPVx_nolen +syn keyword xsMacro SvPVx_nolen_const SvREADONLY SvREADONLY_off SvREADONLY_on +syn keyword xsMacro SvREFCNT SvREFCNT_IMMORTAL SvREFCNT_dec SvREFCNT_dec_NN +syn keyword xsMacro SvREFCNT_inc SvREFCNT_inc_NN SvREFCNT_inc_simple +syn keyword xsMacro SvREFCNT_inc_simple_NN SvREFCNT_inc_simple_void +syn keyword xsMacro SvREFCNT_inc_simple_void_NN SvREFCNT_inc_void +syn keyword xsMacro SvREFCNT_inc_void_NN SvRELEASE_IVX SvRELEASE_IVX_ +syn keyword xsMacro SvRMAGICAL SvRMAGICAL_off SvRMAGICAL_on SvROK SvROK_off +syn keyword xsMacro SvROK_on SvRV SvRV_const SvRV_set SvRVx SvRX SvRXOK +syn keyword xsMacro SvSCREAM SvSCREAM_off SvSCREAM_on SvSETMAGIC SvSHARE +syn keyword xsMacro SvSHARED_HASH SvSHARED_HEK_FROM_PV SvSMAGICAL +syn keyword xsMacro SvSMAGICAL_off SvSMAGICAL_on SvSTASH SvSTASH_set +syn keyword xsMacro SvSetMagicSV SvSetMagicSV_nosteal SvSetSV SvSetSV_and +syn keyword xsMacro SvSetSV_nosteal SvSetSV_nosteal_and SvTAIL SvTAIL_off +syn keyword xsMacro SvTAIL_on SvTAINT SvTAINTED SvTAINTED_off SvTAINTED_on +syn keyword xsMacro SvTEMP SvTEMP_off SvTEMP_on SvTHINKFIRST SvTIED_mg +syn keyword xsMacro SvTIED_obj SvTRUE SvTRUE_NN SvTRUE_common SvTRUE_nomg +syn keyword xsMacro SvTRUE_nomg_NN SvTRUEx SvTRUEx_nomg SvTYPE SvUID SvUNLOCK +syn keyword xsMacro SvUOK SvUOK_nog SvUOK_nogthink SvUPGRADE SvUTF8 +syn keyword xsMacro SvUTF8_off SvUTF8_on SvUV SvUVX SvUVXx SvUV_nomg SvUV_set +syn keyword xsMacro SvUVx SvVALID SvVALID_off SvVALID_on SvVOK SvVSTRING_mg +syn keyword xsMacro SvWEAKREF SvWEAKREF_off SvWEAKREF_on Sv_Grow TAIL TAINT +syn keyword xsMacro TAINTING_get TAINTING_set TAINT_ENV TAINT_IF TAINT_NOT +syn keyword xsMacro TAINT_PROPER TAINT_WARN_get TAINT_WARN_set TAINT_get +syn keyword xsMacro TAINT_set THING THR THREAD_CREATE +syn keyword xsMacro THREAD_CREATE_NEEDS_STACK THREAD_POST_CREATE +syn keyword xsMacro THREAD_RET_CAST THREAD_RET_TYPE +syn keyword xsMacro TIED_METHOD_ARGUMENTS_ON_STACK +syn keyword xsMacro TIED_METHOD_MORTALIZE_NOT_NEEDED TIED_METHOD_SAY +syn keyword xsMacro TIME64_CONFIG_H TIME64_H TM TMPNAM_R_PROTO TOO_LATE_FOR +syn keyword xsMacro TOO_LATE_FOR_ TOPBLOCK TOPMARK TOPi TOPl TOPm1s TOPn TOPp +syn keyword xsMacro TOPp1s TOPpx TOPs TOPu TOPul TRIE TRIEC TRIE_BITMAP +syn keyword xsMacro TRIE_BITMAP_BYTE TRIE_BITMAP_CLEAR TRIE_BITMAP_SET +syn keyword xsMacro TRIE_BITMAP_TEST TRIE_CHARCOUNT TRIE_NODEIDX TRIE_NODENUM +syn keyword xsMacro TRIE_WORDS_OFFSET TRIE_next TRIE_next_fail TRUE +syn keyword xsMacro TTYNAME_R_PROTO TWO_BYTE_UTF8_TO_NATIVE +syn keyword xsMacro TWO_BYTE_UTF8_TO_UNI TYPE_CHARS TYPE_DIGITS Timeval +syn keyword xsMacro U16SIZE U16TYPE U16_CONST U16_MAX U16_MIN U32SIZE U32TYPE +syn keyword xsMacro U32_ALIGNMENT_REQUIRED U32_CONST U32_MAX U32_MAX_P1 +syn keyword xsMacro U32_MAX_P1_HALF U32_MIN U64SIZE U64TYPE U64_CONST U8SIZE +syn keyword xsMacro U8TO16_LE U8TO32_LE U8TO64_LE U8TYPE U8_MAX U8_MIN +syn keyword xsMacro UCHARAT UINT32_MIN UINT64_C UINT64_MIN UMINUS +syn keyword xsMacro UNALIGNED_SAFE UNDERBAR UNICODE_ALLOW_ANY +syn keyword xsMacro UNICODE_ALLOW_SUPER UNICODE_ALLOW_SURROGATE +syn keyword xsMacro UNICODE_BYTE_ORDER_MARK UNICODE_DISALLOW_FE_FF +syn keyword xsMacro UNICODE_DISALLOW_ILLEGAL_INTERCHANGE +syn keyword xsMacro UNICODE_DISALLOW_NONCHAR UNICODE_DISALLOW_SUPER +syn keyword xsMacro UNICODE_DISALLOW_SURROGATE +syn keyword xsMacro UNICODE_GREEK_CAPITAL_LETTER_SIGMA +syn keyword xsMacro UNICODE_GREEK_SMALL_LETTER_FINAL_SIGMA +syn keyword xsMacro UNICODE_GREEK_SMALL_LETTER_SIGMA +syn keyword xsMacro UNICODE_IS_BYTE_ORDER_MARK UNICODE_IS_FE_FF +syn keyword xsMacro UNICODE_IS_NONCHAR UNICODE_IS_REPLACEMENT +syn keyword xsMacro UNICODE_IS_SUPER UNICODE_IS_SURROGATE UNICODE_LINE_SEPA_0 +syn keyword xsMacro UNICODE_LINE_SEPA_1 UNICODE_LINE_SEPA_2 +syn keyword xsMacro UNICODE_PARA_SEPA_0 UNICODE_PARA_SEPA_1 +syn keyword xsMacro UNICODE_PARA_SEPA_2 UNICODE_PAT_MOD UNICODE_PAT_MODS +syn keyword xsMacro UNICODE_REPLACEMENT UNICODE_SURROGATE_FIRST +syn keyword xsMacro UNICODE_SURROGATE_LAST UNICODE_WARN_FE_FF +syn keyword xsMacro UNICODE_WARN_ILLEGAL_INTERCHANGE UNICODE_WARN_NONCHAR +syn keyword xsMacro UNICODE_WARN_SUPER UNICODE_WARN_SURROGATE UNIOP UNIOPSUB +syn keyword xsMacro UNISKIP UNI_DISPLAY_BACKSLASH UNI_DISPLAY_ISPRINT +syn keyword xsMacro UNI_DISPLAY_QQ UNI_DISPLAY_REGEX UNI_IS_INVARIANT +syn keyword xsMacro UNI_TO_NATIVE UNKNOWN_ERRNO_MSG UNLESS UNLESSM UNLIKELY +syn keyword xsMacro UNLINK UNLOCK_DOLLARZERO_MUTEX UNLOCK_LC_NUMERIC_STANDARD +syn keyword xsMacro UNLOCK_NUMERIC_STANDARD UNOP_AUX_item_sv UNTIL +syn keyword xsMacro UPG_VERSION USE USE_64_BIT_ALL USE_64_BIT_INT +syn keyword xsMacro USE_64_BIT_RAWIO USE_64_BIT_STDIO USE_BSDPGRP +syn keyword xsMacro USE_DYNAMIC_LOADING USE_ENVIRON_ARRAY USE_HASH_SEED +syn keyword xsMacro USE_HEAP_INSTEAD_OF_STACK USE_LARGE_FILES USE_LEFT +syn keyword xsMacro USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE +syn keyword xsMacro USE_LOCALE_MESSAGES USE_LOCALE_MONETARY +syn keyword xsMacro USE_LOCALE_NUMERIC USE_LOCALE_TIME USE_PERLIO +syn keyword xsMacro USE_PERL_PERTURB_KEYS USE_REENTRANT_API +syn keyword xsMacro USE_SEMCTL_SEMID_DS USE_SEMCTL_SEMUN USE_STAT_BLOCKS +syn keyword xsMacro USE_STAT_RDEV USE_STDIO USE_STRUCT_COPY USE_SYSTEM_GMTIME +syn keyword xsMacro USE_SYSTEM_LOCALTIME USE_THREADS USE_TM64 +syn keyword xsMacro USE_UTF8_IN_NAMES USING_MSVC6 UTF8SKIP UTF8_ACCUMULATE +syn keyword xsMacro UTF8_ALLOW_ANY UTF8_ALLOW_ANYUV UTF8_ALLOW_CONTINUATION +syn keyword xsMacro UTF8_ALLOW_DEFAULT UTF8_ALLOW_EMPTY UTF8_ALLOW_FFFF +syn keyword xsMacro UTF8_ALLOW_LONG UTF8_ALLOW_NON_CONTINUATION +syn keyword xsMacro UTF8_ALLOW_SHORT UTF8_ALLOW_SURROGATE UTF8_CHECK_ONLY +syn keyword xsMacro UTF8_DISALLOW_FE_FF UTF8_DISALLOW_ILLEGAL_INTERCHANGE +syn keyword xsMacro UTF8_DISALLOW_NONCHAR UTF8_DISALLOW_SUPER +syn keyword xsMacro UTF8_DISALLOW_SURROGATE UTF8_EIGHT_BIT_HI +syn keyword xsMacro UTF8_EIGHT_BIT_LO +syn keyword xsMacro UTF8_FIRST_PROBLEMATIC_CODE_POINT_FIRST_BYTE +syn keyword xsMacro UTF8_IS_ABOVE_LATIN1 UTF8_IS_CONTINUATION +syn keyword xsMacro UTF8_IS_CONTINUED UTF8_IS_DOWNGRADEABLE_START +syn keyword xsMacro UTF8_IS_INVARIANT UTF8_IS_NEXT_CHAR_DOWNGRADEABLE +syn keyword xsMacro UTF8_IS_NONCHAR_ +syn keyword xsMacro UTF8_IS_NONCHAR_GIVEN_THAT_NON_SUPER_AND_GE_PROBLEMATIC +syn keyword xsMacro UTF8_IS_REPLACEMENT UTF8_IS_START UTF8_IS_SUPER +syn keyword xsMacro UTF8_IS_SURROGATE UTF8_MAXBYTES UTF8_MAXBYTES_CASE +syn keyword xsMacro UTF8_MAXLEN UTF8_MAX_FOLD_CHAR_EXPAND UTF8_QUAD_MAX +syn keyword xsMacro UTF8_TWO_BYTE_HI UTF8_TWO_BYTE_HI_nocast UTF8_TWO_BYTE_LO +syn keyword xsMacro UTF8_TWO_BYTE_LO_nocast UTF8_WARN_FE_FF +syn keyword xsMacro UTF8_WARN_ILLEGAL_INTERCHANGE UTF8_WARN_NONCHAR +syn keyword xsMacro UTF8_WARN_SUPER UTF8_WARN_SURROGATE UTF8f UTF8fARG +syn keyword xsMacro UTF_ACCUMULATION_OVERFLOW_MASK UTF_ACCUMULATION_SHIFT +syn keyword xsMacro UTF_CONTINUATION_MARK UTF_CONTINUATION_MASK +syn keyword xsMacro UTF_START_MARK UTF_START_MASK UTF_TO_NATIVE +syn keyword xsMacro UVCHR_IS_INVARIANT UVCHR_SKIP UVSIZE UVTYPE UVXf UV_DIG +syn keyword xsMacro UV_MAX UV_MAX_P1 UV_MAX_P1_HALF UV_MIN UVf U_32 U_I U_L +syn keyword xsMacro U_S U_V Uid_t_f Uid_t_sign Uid_t_size VAL_EAGAIN +syn keyword xsMacro VAL_O_NONBLOCK VCMP VERB VNORMAL VNUMIFY VOL VSTRINGIFY +syn keyword xsMacro VTBL_amagic VTBL_amagicelem VTBL_arylen VTBL_bm +syn keyword xsMacro VTBL_collxfrm VTBL_dbline VTBL_defelem VTBL_env +syn keyword xsMacro VTBL_envelem VTBL_fm VTBL_glob VTBL_isa VTBL_isaelem +syn keyword xsMacro VTBL_mglob VTBL_nkeys VTBL_pack VTBL_packelem VTBL_pos +syn keyword xsMacro VTBL_regdata VTBL_regdatum VTBL_regexp VTBL_sigelem +syn keyword xsMacro VTBL_substr VTBL_sv VTBL_taint VTBL_uvar VTBL_vec +syn keyword xsMacro VT_NATIVE VUTIL_REPLACE_CORE VVERIFY WARN_ALL +syn keyword xsMacro WARN_ALLstring WARN_AMBIGUOUS WARN_BAREWORD WARN_CLOSED +syn keyword xsMacro WARN_CLOSURE WARN_DEBUGGING WARN_DEPRECATED WARN_DIGIT +syn keyword xsMacro WARN_EXEC WARN_EXITING WARN_EXPERIMENTAL +syn keyword xsMacro WARN_EXPERIMENTAL__AUTODEREF WARN_EXPERIMENTAL__BITWISE +syn keyword xsMacro WARN_EXPERIMENTAL__CONST_ATTR +syn keyword xsMacro WARN_EXPERIMENTAL__LEXICAL_SUBS +syn keyword xsMacro WARN_EXPERIMENTAL__LEXICAL_TOPIC +syn keyword xsMacro WARN_EXPERIMENTAL__POSTDEREF +syn keyword xsMacro WARN_EXPERIMENTAL__REFALIASING +syn keyword xsMacro WARN_EXPERIMENTAL__REGEX_SETS +syn keyword xsMacro WARN_EXPERIMENTAL__RE_STRICT +syn keyword xsMacro WARN_EXPERIMENTAL__SIGNATURES +syn keyword xsMacro WARN_EXPERIMENTAL__SMARTMATCH +syn keyword xsMacro WARN_EXPERIMENTAL__WIN32_PERLIO WARN_GLOB +syn keyword xsMacro WARN_ILLEGALPROTO WARN_IMPRECISION WARN_INPLACE +syn keyword xsMacro WARN_INTERNAL WARN_IO WARN_LAYER WARN_LOCALE WARN_MALLOC +syn keyword xsMacro WARN_MISC WARN_MISSING WARN_NEWLINE WARN_NONCHAR +syn keyword xsMacro WARN_NONEstring WARN_NON_UNICODE WARN_NUMERIC WARN_ONCE +syn keyword xsMacro WARN_OVERFLOW WARN_PACK WARN_PARENTHESIS WARN_PIPE +syn keyword xsMacro WARN_PORTABLE WARN_PRECEDENCE WARN_PRINTF WARN_PROTOTYPE +syn keyword xsMacro WARN_QW WARN_RECURSION WARN_REDEFINE WARN_REDUNDANT +syn keyword xsMacro WARN_REGEXP WARN_RESERVED WARN_SEMICOLON WARN_SEVERE +syn keyword xsMacro WARN_SIGNAL WARN_SUBSTR WARN_SURROGATE WARN_SYNTAX +syn keyword xsMacro WARN_SYSCALLS WARN_TAINT WARN_THREADS WARN_UNINITIALIZED +syn keyword xsMacro WARN_UNOPENED WARN_UNPACK WARN_UNTIE WARN_UTF8 WARN_VOID +syn keyword xsMacro WARNshift WARNsize WB_ENUM_COUNT WEXITSTATUS WHEN WHILE +syn keyword xsMacro WHILEM WHILEM_A_max WHILEM_A_max_fail WHILEM_A_min +syn keyword xsMacro WHILEM_A_min_fail WHILEM_A_pre WHILEM_A_pre_fail +syn keyword xsMacro WHILEM_B_max WHILEM_B_max_fail WHILEM_B_min +syn keyword xsMacro WHILEM_B_min_fail WIDEST_UTYPE WIFEXITED WIFSIGNALED +syn keyword xsMacro WIFSTOPPED WIN32SCK_IS_STDSCK WNOHANG WORD WSTOPSIG +syn keyword xsMacro WTERMSIG WUNTRACED XDIGIT_VALUE XHvTOTALKEYS +syn keyword xsMacro XOPd_xop_class XOPd_xop_desc XOPd_xop_name XOPd_xop_peep +syn keyword xsMacro XOPf_xop_class XOPf_xop_desc XOPf_xop_name XOPf_xop_peep +syn keyword xsMacro XPUSHTARG XPUSHi XPUSHmortal XPUSHn XPUSHp XPUSHs XPUSHu +syn keyword xsMacro XPUSHundef XS XSANY XSINTERFACE_CVT XSINTERFACE_CVT_ANON +syn keyword xsMacro XSINTERFACE_FUNC XSINTERFACE_FUNC_SET XSPROTO XSRETURN +syn keyword xsMacro XSRETURN_EMPTY XSRETURN_IV XSRETURN_NO XSRETURN_NV +syn keyword xsMacro XSRETURN_PV XSRETURN_PVN XSRETURN_UNDEF XSRETURN_UV +syn keyword xsMacro XSRETURN_YES XST_mIV XST_mNO XST_mNV XST_mPV XST_mPVN +syn keyword xsMacro XST_mUNDEF XST_mUV XST_mYES XS_APIVERSION_BOOTCHECK +syn keyword xsMacro XS_APIVERSION_POPMARK_BOOTCHECK +syn keyword xsMacro XS_APIVERSION_SETXSUBFN_POPMARK_BOOTCHECK +syn keyword xsMacro XS_BOTHVERSION_BOOTCHECK XS_BOTHVERSION_POPMARK_BOOTCHECK +syn keyword xsMacro XS_BOTHVERSION_SETXSUBFN_POPMARK_BOOTCHECK +syn keyword xsMacro XS_DYNAMIC_FILENAME XS_EXTERNAL XS_INTERNAL +syn keyword xsMacro XS_SETXSUBFN_POPMARK XS_VERSION_BOOTCHECK XSprePUSH +syn keyword xsMacro XTENDED_PAT_MOD XopDISABLE XopENABLE XopENTRY +syn keyword xsMacro XopENTRYCUSTOM XopENTRY_set XopFLAGS YADAYADA YIELD +syn keyword xsMacro YYEMPTY YYSTYPE_IS_DECLARED YYSTYPE_IS_TRIVIAL +syn keyword xsMacro YYTOKENTYPE Zero ZeroD _ _CANNOT _CC_ALPHA +syn keyword xsMacro _CC_ALPHANUMERIC _CC_ASCII _CC_BLANK _CC_CASED +syn keyword xsMacro _CC_CHARNAME_CONT _CC_CNTRL _CC_DIGIT _CC_GRAPH +syn keyword xsMacro _CC_IDFIRST _CC_IS_IN_SOME_FOLD _CC_LOWER +syn keyword xsMacro _CC_MNEMONIC_CNTRL _CC_NONLATIN1_FOLD +syn keyword xsMacro _CC_NONLATIN1_SIMPLE_FOLD _CC_NON_FINAL_FOLD _CC_PRINT +syn keyword xsMacro _CC_PUNCT _CC_QUOTEMETA _CC_SPACE _CC_UPPER _CC_VERTSPACE +syn keyword xsMacro _CC_WORDCHAR _CC_XDIGIT _CC_mask _CC_mask_A +syn keyword xsMacro _CHECK_AND_OUTPUT_WIDE_LOCALE_CP_MSG +syn keyword xsMacro _CHECK_AND_OUTPUT_WIDE_LOCALE_UTF8_MSG +syn keyword xsMacro _CHECK_AND_WARN_PROBLEMATIC_LOCALE +syn keyword xsMacro _CORE_SWASH_INIT_ACCEPT_INVLIST +syn keyword xsMacro _CORE_SWASH_INIT_RETURN_IF_UNDEF +syn keyword xsMacro _CORE_SWASH_INIT_USER_DEFINED_PROPERTY _CPERLarg +syn keyword xsMacro _FIRST_NON_SWASH_CC _GNU_SOURCE +syn keyword xsMacro _HAS_NONLATIN1_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C +syn keyword xsMacro _HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C +syn keyword xsMacro _HIGHEST_REGCOMP_DOT_H_SYNC _INC_PERL_XSUB_H +syn keyword xsMacro _IS_IN_SOME_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C +syn keyword xsMacro _IS_MNEMONIC_CNTRL_ONLY_FOR_USE_BY_REGCOMP_DOT_C +syn keyword xsMacro _IS_NON_FINAL_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C _LC_CAST +syn keyword xsMacro _MEM_WRAP_NEEDS_RUNTIME_CHECK _MEM_WRAP_WILL_WRAP +syn keyword xsMacro _NOT_IN_NUMERIC_STANDARD _NOT_IN_NUMERIC_UNDERLYING +syn keyword xsMacro _NV_BODYLESS_UNION _OP_SIBPARENT_FIELDNAME _PERLIOL_H +syn keyword xsMacro _PERLIO_H _PERL_OBJECT_THIS _REGEXP_COMMON +syn keyword xsMacro _RXf_PMf_CHARSET_SHIFT _RXf_PMf_SHIFT_COMPILETIME +syn keyword xsMacro _RXf_PMf_SHIFT_NEXT _STDIO_H _STDIO_INCLUDED _V +syn keyword xsMacro _XPVCV_COMMON _XPV_HEAD __ASSERT_ __BASE_TWO_BYTE_HI +syn keyword xsMacro __BASE_TWO_BYTE_LO __Inc__IPerl___ +syn keyword xsMacro __PATCHLEVEL_H_INCLUDED__ __PL_inf_float_int32 +syn keyword xsMacro __PL_nan_float_int32 __STDIO_LOADED +syn keyword xsMacro __attribute__deprecated__ __attribute__format__ +syn keyword xsMacro __attribute__format__null_ok__ __attribute__malloc__ +syn keyword xsMacro __attribute__nonnull__ __attribute__noreturn__ +syn keyword xsMacro __attribute__pure__ __attribute__unused__ +syn keyword xsMacro __attribute__warn_unused_result__ __filbuf __flsbuf +syn keyword xsMacro __has_builtin __perlapi_h__ _config_h_ _exit _filbuf +syn keyword xsMacro _flsbuf _generic_LC _generic_LC_base +syn keyword xsMacro _generic_LC_func_utf8 _generic_LC_swash_utf8 +syn keyword xsMacro _generic_LC_swash_uvchr _generic_LC_underscore +syn keyword xsMacro _generic_LC_utf8 _generic_LC_uvchr _generic_func_utf8 +syn keyword xsMacro _generic_isCC _generic_isCC_A _generic_swash_uni +syn keyword xsMacro _generic_swash_utf8 _generic_toFOLD_LC +syn keyword xsMacro _generic_toLOWER_LC _generic_toUPPER_LC _generic_uni +syn keyword xsMacro _generic_utf8 _generic_utf8_no_upper_latin1 _isQMC +syn keyword xsMacro _isQUOTEMETA _swab_16_ _swab_32_ _swab_64_ aTHXa aTHXo +syn keyword xsMacro aTHXo_ aTHXx aTHXx_ abort accept access +syn keyword xsMacro anchored_end_shift anchored_offset anchored_substr +syn keyword xsMacro anchored_utf8 asctime assert assert_ assert_not_ROK +syn keyword xsMacro assert_not_glob atoll av_tindex bcmp bind blk_eval +syn keyword xsMacro blk_format blk_gimme blk_givwhen blk_loop blk_oldcop +syn keyword xsMacro blk_oldmarksp blk_oldpm blk_oldscopesp blk_oldsp blk_sub +syn keyword xsMacro blk_u16 bool boolSV cBINOP cBINOPo cBINOPx cBOOL cCOP +syn keyword xsMacro cCOPo cCOPx cGVOP_gv cGVOPo_gv cGVOPx_gv cLISTOP cLISTOPo +syn keyword xsMacro cLISTOPx cLOGOP cLOGOPo cLOGOPx cLOOP cLOOPo cLOOPx +syn keyword xsMacro cMETHOPx cMETHOPx_meth cMETHOPx_rclass cPADOP cPADOPo +syn keyword xsMacro cPADOPx cPMOP cPMOPo cPMOPx cPVOP cPVOPo cPVOPx cSVOP +syn keyword xsMacro cSVOP_sv cSVOPo cSVOPo_sv cSVOPx cSVOPx_sv cSVOPx_svp +syn keyword xsMacro cUNOP cUNOP_AUX cUNOP_AUXo cUNOP_AUXx cUNOPo cUNOPx chdir +syn keyword xsMacro check_end_shift check_offset_max check_offset_min +syn keyword xsMacro check_substr check_utf8 child_offset_bits chmod chsize +syn keyword xsMacro ckDEAD ckWARN ckWARN2 ckWARN2_d ckWARN3 ckWARN3_d ckWARN4 +syn keyword xsMacro ckWARN4_d ckWARN_d close closedir connect cop_hints_2hv +syn keyword xsMacro cop_hints_fetch_pv cop_hints_fetch_pvn +syn keyword xsMacro cop_hints_fetch_pvs cop_hints_fetch_sv cophh_2hv +syn keyword xsMacro cophh_copy cophh_delete_pv cophh_delete_pvn +syn keyword xsMacro cophh_delete_pvs cophh_delete_sv cophh_fetch_pv +syn keyword xsMacro cophh_fetch_pvn cophh_fetch_pvs cophh_fetch_sv cophh_free +syn keyword xsMacro cophh_new_empty cophh_store_pv cophh_store_pvn +syn keyword xsMacro cophh_store_pvs cophh_store_sv crypt ctermid ctime +syn keyword xsMacro cv_ckproto cx_type cxstack cxstack_ix cxstack_max +syn keyword xsMacro dATARGET dAX dAXMARK dEXT dEXTCONST dITEMS dJMPENV dMARK +syn keyword xsMacro dMULTICALL dMY_CXT dMY_CXT_INTERP dMY_CXT_SV dNOOP +syn keyword xsMacro dORIGMARK dPOPPOPiirl dPOPPOPnnrl dPOPPOPssrl dPOPTOPiirl +syn keyword xsMacro dPOPTOPiirl_nomg dPOPTOPiirl_ul_nomg dPOPTOPnnrl +syn keyword xsMacro dPOPTOPnnrl_nomg dPOPTOPssrl dPOPXiirl dPOPXiirl_ul_nomg +syn keyword xsMacro dPOPXnnrl dPOPXssrl dPOPiv dPOPnv dPOPnv_nomg dPOPss +syn keyword xsMacro dPOPuv dSAVEDERRNO dSAVE_ERRNO dSP dSS_ADD dTARG dTARGET +syn keyword xsMacro dTARGETSTACKED dTHR dTHX dTHXa dTHXo dTHXoa dTHXs dTHXx +syn keyword xsMacro dTOPiv dTOPnv dTOPss dTOPuv dUNDERBAR dVAR dXSARGS +syn keyword xsMacro dXSBOOTARGSAPIVERCHK dXSBOOTARGSNOVERCHK +syn keyword xsMacro dXSBOOTARGSXSAPIVERCHK dXSFUNCTION dXSI32 dXSTARG +syn keyword xsMacro dXSUB_SYS deprecate djSP do_open dup dup2 endgrent +syn keyword xsMacro endhostent endnetent endprotoent endpwent endservent +syn keyword xsMacro environ execl execv execvp fcntl fd_set fdopen fileno +syn keyword xsMacro float_end_shift float_max_offset float_min_offset +syn keyword xsMacro float_substr float_utf8 flock flockfile foldEQ_utf8 +syn keyword xsMacro frewind fscanf fstat ftell ftruncate ftrylockfile +syn keyword xsMacro funlockfile fwrite1 get_cvs getc_unlocked getegid geteuid +syn keyword xsMacro getgid getgrent getgrgid getgrnam gethostbyaddr +syn keyword xsMacro gethostbyname gethostent gethostname getlogin +syn keyword xsMacro getnetbyaddr getnetbyname getnetent getpeername getpid +syn keyword xsMacro getprotobyname getprotobynumber getprotoent getpwent +syn keyword xsMacro getpwnam getpwuid getservbyname getservbyport getservent +syn keyword xsMacro getsockname getsockopt getspnam gettimeofday getuid getw +syn keyword xsMacro gv_AVadd gv_HVadd gv_IOadd gv_SVadd gv_autoload4 +syn keyword xsMacro gv_efullname3 gv_fetchmeth gv_fetchmeth_autoload +syn keyword xsMacro gv_fetchmethod gv_fetchmethod_flags gv_fetchpvn +syn keyword xsMacro gv_fetchpvs gv_fetchsv_nomg gv_fullname3 gv_init +syn keyword xsMacro gv_method_changed gv_stashpvs htoni htonl htons htovl +syn keyword xsMacro htovs hv_delete hv_delete_ent hv_deletehek hv_exists +syn keyword xsMacro hv_exists_ent hv_fetch hv_fetch_ent hv_fetchhek hv_fetchs +syn keyword xsMacro hv_iternext hv_magic hv_store hv_store_ent hv_store_flags +syn keyword xsMacro hv_storehek hv_stores hv_undef ibcmp ibcmp_locale +syn keyword xsMacro ibcmp_utf8 inet_addr inet_ntoa init_os_extras ioctl +syn keyword xsMacro isALNUM isALNUMC isALNUMC_A isALNUMC_L1 isALNUMC_LC +syn keyword xsMacro isALNUMC_LC_utf8 isALNUMC_LC_uvchr isALNUMC_uni +syn keyword xsMacro isALNUMC_utf8 isALNUMU isALNUM_LC isALNUM_LC_utf8 +syn keyword xsMacro isALNUM_LC_uvchr isALNUM_lazy_if isALNUM_uni isALNUM_utf8 +syn keyword xsMacro isALPHA isALPHANUMERIC isALPHANUMERIC_A isALPHANUMERIC_L1 +syn keyword xsMacro isALPHANUMERIC_LC isALPHANUMERIC_LC_utf8 +syn keyword xsMacro isALPHANUMERIC_LC_uvchr isALPHANUMERIC_uni +syn keyword xsMacro isALPHANUMERIC_utf8 isALPHAU isALPHA_A isALPHA_FOLD_EQ +syn keyword xsMacro isALPHA_FOLD_NE isALPHA_L1 isALPHA_LC isALPHA_LC_utf8 +syn keyword xsMacro isALPHA_LC_uvchr isALPHA_uni isALPHA_utf8 isASCII +syn keyword xsMacro isASCII_A isASCII_L1 isASCII_LC isASCII_LC_utf8 +syn keyword xsMacro isASCII_LC_uvchr isASCII_uni isASCII_utf8 isBLANK +syn keyword xsMacro isBLANK_A isBLANK_L1 isBLANK_LC isBLANK_LC_uni +syn keyword xsMacro isBLANK_LC_utf8 isBLANK_LC_uvchr isBLANK_uni isBLANK_utf8 +syn keyword xsMacro isCHARNAME_CONT isCNTRL isCNTRL_A isCNTRL_L1 isCNTRL_LC +syn keyword xsMacro isCNTRL_LC_utf8 isCNTRL_LC_uvchr isCNTRL_uni isCNTRL_utf8 +syn keyword xsMacro isDIGIT isDIGIT_A isDIGIT_L1 isDIGIT_LC isDIGIT_LC_utf8 +syn keyword xsMacro isDIGIT_LC_uvchr isDIGIT_uni isDIGIT_utf8 isGRAPH +syn keyword xsMacro isGRAPH_A isGRAPH_L1 isGRAPH_LC isGRAPH_LC_utf8 +syn keyword xsMacro isGRAPH_LC_uvchr isGRAPH_uni isGRAPH_utf8 isGV +syn keyword xsMacro isGV_with_GP isGV_with_GP_off isGV_with_GP_on isIDCONT +syn keyword xsMacro isIDCONT_A isIDCONT_L1 isIDCONT_LC isIDCONT_LC_utf8 +syn keyword xsMacro isIDCONT_LC_uvchr isIDCONT_uni isIDCONT_utf8 isIDFIRST +syn keyword xsMacro isIDFIRST_A isIDFIRST_L1 isIDFIRST_LC isIDFIRST_LC_utf8 +syn keyword xsMacro isIDFIRST_LC_uvchr isIDFIRST_lazy_if isIDFIRST_uni +syn keyword xsMacro isIDFIRST_utf8 isLEXWARN_off isLEXWARN_on isLOWER +syn keyword xsMacro isLOWER_A isLOWER_L1 isLOWER_LC isLOWER_LC_utf8 +syn keyword xsMacro isLOWER_LC_uvchr isLOWER_uni isLOWER_utf8 isOCTAL +syn keyword xsMacro isOCTAL_A isOCTAL_L1 isPRINT isPRINT_A isPRINT_L1 +syn keyword xsMacro isPRINT_LC isPRINT_LC_utf8 isPRINT_LC_uvchr isPRINT_uni +syn keyword xsMacro isPRINT_utf8 isPSXSPC isPSXSPC_A isPSXSPC_L1 isPSXSPC_LC +syn keyword xsMacro isPSXSPC_LC_utf8 isPSXSPC_LC_uvchr isPSXSPC_uni +syn keyword xsMacro isPSXSPC_utf8 isPUNCT isPUNCT_A isPUNCT_L1 isPUNCT_LC +syn keyword xsMacro isPUNCT_LC_utf8 isPUNCT_LC_uvchr isPUNCT_uni isPUNCT_utf8 +syn keyword xsMacro isREGEXP isSPACE isSPACE_A isSPACE_L1 isSPACE_LC +syn keyword xsMacro isSPACE_LC_utf8 isSPACE_LC_uvchr isSPACE_uni isSPACE_utf8 +syn keyword xsMacro isUPPER isUPPER_A isUPPER_L1 isUPPER_LC isUPPER_LC_utf8 +syn keyword xsMacro isUPPER_LC_uvchr isUPPER_uni isUPPER_utf8 isUTF8_CHAR +syn keyword xsMacro isVERTWS_uni isVERTWS_utf8 isWARN_ONCE isWARN_on +syn keyword xsMacro isWARNf_on isWORDCHAR isWORDCHAR_A isWORDCHAR_L1 +syn keyword xsMacro isWORDCHAR_LC isWORDCHAR_LC_utf8 isWORDCHAR_LC_uvchr +syn keyword xsMacro isWORDCHAR_lazy_if isWORDCHAR_uni isWORDCHAR_utf8 +syn keyword xsMacro isXDIGIT isXDIGIT_A isXDIGIT_L1 isXDIGIT_LC +syn keyword xsMacro isXDIGIT_LC_utf8 isXDIGIT_LC_uvchr isXDIGIT_uni +syn keyword xsMacro isXDIGIT_utf8 is_ANYOF_SYNTHETIC is_FOLDS_TO_MULTI_utf8 +syn keyword xsMacro is_HORIZWS_cp_high is_HORIZWS_high is_LAX_VERSION +syn keyword xsMacro is_LNBREAK_latin1_safe is_LNBREAK_safe +syn keyword xsMacro is_LNBREAK_utf8_safe is_MULTI_CHAR_FOLD_latin1_safe +syn keyword xsMacro is_MULTI_CHAR_FOLD_utf8_safe +syn keyword xsMacro is_MULTI_CHAR_FOLD_utf8_safe_part0 +syn keyword xsMacro is_MULTI_CHAR_FOLD_utf8_safe_part1 is_NONCHAR_utf8 +syn keyword xsMacro is_PATWS_cp is_PATWS_safe +syn keyword xsMacro is_PROBLEMATIC_LOCALE_FOLDEDS_START_cp +syn keyword xsMacro is_PROBLEMATIC_LOCALE_FOLDEDS_START_utf8 +syn keyword xsMacro is_PROBLEMATIC_LOCALE_FOLD_cp +syn keyword xsMacro is_PROBLEMATIC_LOCALE_FOLD_utf8 is_QUOTEMETA_high +syn keyword xsMacro is_QUOTEMETA_high_part0 is_QUOTEMETA_high_part1 +syn keyword xsMacro is_REPLACEMENT_utf8_safe is_STRICT_VERSION +syn keyword xsMacro is_SURROGATE_utf8 is_UTF8_CHAR_utf8_no_length_checks +syn keyword xsMacro is_VERTWS_cp_high is_VERTWS_high is_XDIGIT_cp_high +syn keyword xsMacro is_XDIGIT_high is_XPERLSPACE_cp_high is_XPERLSPACE_high +syn keyword xsMacro is_ascii_string is_utf8_char_buf is_utf8_string_loc +syn keyword xsMacro isatty isnormal kBINOP kCOP kGVOP_gv kLISTOP kLOGOP kLOOP +syn keyword xsMacro kPADOP kPMOP kPVOP kSVOP kSVOP_sv kUNOP kUNOP_AUX kill +syn keyword xsMacro killpg lex_stuff_pvs link listen lockf longjmp lseek +syn keyword xsMacro lstat mPUSHi mPUSHn mPUSHp mPUSHs mPUSHu mXPUSHi mXPUSHn +syn keyword xsMacro mXPUSHp mXPUSHs mXPUSHu memEQ memEQs memNE memNEs memchr +syn keyword xsMacro memcmp memzero mkdir mktemp my my_binmode my_lstat +syn keyword xsMacro my_setlocale my_snprintf my_sprintf my_stat my_strlcat +syn keyword xsMacro my_strlcpy my_vsnprintf newATTRSUB newAV newGVgen newHV +syn keyword xsMacro newIO newRV_inc newSUB newSVpadname newSVpvn_utf8 +syn keyword xsMacro newSVpvs newSVpvs_flags newSVpvs_share newXSproto ntohi +syn keyword xsMacro ntohl ntohs opASSIGN op_lvalue open opendir pTHX_1 +syn keyword xsMacro pTHX_12 pTHX_2 pTHX_3 pTHX_4 pTHX_5 pTHX_6 pTHX_7 pTHX_8 +syn keyword xsMacro pTHX_9 pTHX_FORMAT pTHX_VALUE pTHX_VALUE_ pTHX__FORMAT +syn keyword xsMacro pTHX__VALUE pTHX__VALUE_ pTHXo pTHXo_ pTHXx pTHXx_ pVAR +syn keyword xsMacro pWARN_ALL pWARN_NONE pWARN_STD packWARN packWARN2 +syn keyword xsMacro packWARN3 packWARN4 pad_add_name_pvs pad_findmy_pvs +syn keyword xsMacro pad_peg padadd_NO_DUP_CHECK padadd_OUR padadd_STALEOK +syn keyword xsMacro padadd_STATE padnew_CLONE padnew_SAVE padnew_SAVESUB +syn keyword xsMacro panic_write2 pause pclose pipe popen prepare_SV_for_RV +syn keyword xsMacro pthread_attr_init pthread_condattr_default pthread_create +syn keyword xsMacro pthread_key_create pthread_keycreate +syn keyword xsMacro pthread_mutexattr_default pthread_mutexattr_init +syn keyword xsMacro pthread_mutexattr_settype putc_unlocked putenv putw read +syn keyword xsMacro readdir readdir64 recv recvfrom ref +syn keyword xsMacro refcounted_he_fetch_pvs refcounted_he_new_pvs rename +syn keyword xsMacro rewinddir rmdir safecalloc safefree safemalloc +syn keyword xsMacro saferealloc save_aelem save_freeop save_freepv +syn keyword xsMacro save_freesv save_helem save_mortalizesv save_op savepvs +syn keyword xsMacro savesharedpvs sb_dstr sb_iters sb_m sb_maxiters +syn keyword xsMacro sb_oldsave sb_orig sb_rflags sb_rx sb_rxres sb_rxtainted +syn keyword xsMacro sb_s sb_strend sb_targ seedDrand01 seekdir select send +syn keyword xsMacro sendto set_ANYOF_SYNTHETIC setbuf setgid setgrent +syn keyword xsMacro sethostent setjmp setlinebuf setlocale setmode setnetent +syn keyword xsMacro setprotoent setpwent setregid setreuid setservent +syn keyword xsMacro setsockopt setuid setvbuf share_hek_hek sharepvn shutdown +syn keyword xsMacro signal sleep socket socketpair specialWARN stat stdoutf +syn keyword xsMacro strEQ strGE strGT strLE strLT strNE strchr strerror +syn keyword xsMacro strnEQ strnNE strrchr strtoll strtoull sv_2bool +syn keyword xsMacro sv_2bool_nomg sv_2iv sv_2nv sv_2pv sv_2pv_nolen +syn keyword xsMacro sv_2pv_nomg sv_2pvbyte_nolen sv_2pvutf8_nolen sv_2uv +syn keyword xsMacro sv_cathek sv_catpv_nomg sv_catpvn sv_catpvn_mg +syn keyword xsMacro sv_catpvn_nomg sv_catpvn_nomg_maybeutf8 +syn keyword xsMacro sv_catpvn_nomg_utf8_upgrade sv_catpvs sv_catpvs_flags +syn keyword xsMacro sv_catpvs_mg sv_catpvs_nomg sv_catsv sv_catsv_mg +syn keyword xsMacro sv_catsv_nomg sv_catxmlpvs sv_cmp sv_cmp_locale +syn keyword xsMacro sv_collxfrm sv_copypv_nomg sv_eq sv_force_normal +syn keyword xsMacro sv_insert sv_mortalcopy sv_nolocking sv_nounlocking +syn keyword xsMacro sv_or_pv_len_utf8 sv_pv sv_pvbyte sv_pvn_force +syn keyword xsMacro sv_pvn_force_nomg sv_pvutf8 sv_setgid sv_setpvs +syn keyword xsMacro sv_setpvs_mg sv_setref_pvs sv_setsv sv_setsv_nomg +syn keyword xsMacro sv_setuid sv_taint sv_unref sv_usepvn sv_usepvn_mg +syn keyword xsMacro sv_utf8_upgrade sv_utf8_upgrade_flags +syn keyword xsMacro sv_utf8_upgrade_nomg tTHX telldir times tmpfile tmpnam +syn keyword xsMacro toCTRL toFOLD toFOLD_A toFOLD_LC toFOLD_uni toFOLD_utf8 +syn keyword xsMacro toLOWER toLOWER_A toLOWER_L1 toLOWER_LATIN1 toLOWER_LC +syn keyword xsMacro toLOWER_uni toLOWER_utf8 toTITLE toTITLE_A toTITLE_uni +syn keyword xsMacro toTITLE_utf8 toUPPER toUPPER_A toUPPER_LATIN1_MOD +syn keyword xsMacro toUPPER_LC toUPPER_uni toUPPER_utf8 to_uni_fold +syn keyword xsMacro to_utf8_fold to_utf8_lower to_utf8_title to_utf8_upper +syn keyword xsMacro truncate tryAMAGICbin_MG tryAMAGICunDEREF +syn keyword xsMacro tryAMAGICunTARGETlist tryAMAGICun_MG ttyname umask uname +syn keyword xsMacro unlink unpackWARN1 unpackWARN2 unpackWARN3 unpackWARN4 +syn keyword xsMacro utf8_to_uvchr_buf utime uvchr_to_utf8 uvchr_to_utf8_flags +syn keyword xsMacro vTHX vfprintf vtohl vtohs wait want_vtbl_bm want_vtbl_fm +syn keyword xsMacro whichsig write xio_any xio_dirp xiv_iv xlv_targoff +syn keyword xsMacro xpv_len xuv_uv yystype + +" Define the default highlighting. +hi def link xsPrivate Error +hi def link xsSuperseded Error +hi def link xsType Type +hi def link xsString String +hi def link xsConstant Constant +hi def link xsException Exception +hi def link xsKeyword Keyword +hi def link xsFunction Function +hi def link xsVariable Identifier +hi def link xsMacro Macro + +let b:current_syntax = "xs" + +" vim: ts=8 diff --git a/.config/vim/syntax/xsd.vim b/.config/vim/syntax/xsd.vim new file mode 100644 index 0000000..5ba6b44 --- /dev/null +++ b/.config/vim/syntax/xsd.vim @@ -0,0 +1,61 @@ +" Vim syntax file +" Language: XSD (XML Schema) +" Maintainer: Johannes Zellner +" Last Change: Tue, 27 Apr 2004 14:54:59 CEST +" Filenames: *.xsd +" $Id: xsd.vim,v 1.1 2004/06/13 18:20:48 vimboss Exp $ + +" REFERENCES: +" [1] http://www.w3.org/TR/xmlschema-0 +" + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +runtime syntax/xml.vim + +syn cluster xmlTagHook add=xsdElement +syn case match + +syn match xsdElement '\%(xsd:\)\@<=all' +syn match xsdElement '\%(xsd:\)\@<=annotation' +syn match xsdElement '\%(xsd:\)\@<=any' +syn match xsdElement '\%(xsd:\)\@<=anyAttribute' +syn match xsdElement '\%(xsd:\)\@<=appInfo' +syn match xsdElement '\%(xsd:\)\@<=attribute' +syn match xsdElement '\%(xsd:\)\@<=attributeGroup' +syn match xsdElement '\%(xsd:\)\@<=choice' +syn match xsdElement '\%(xsd:\)\@<=complexContent' +syn match xsdElement '\%(xsd:\)\@<=complexType' +syn match xsdElement '\%(xsd:\)\@<=documentation' +syn match xsdElement '\%(xsd:\)\@<=element' +syn match xsdElement '\%(xsd:\)\@<=enumeration' +syn match xsdElement '\%(xsd:\)\@<=extension' +syn match xsdElement '\%(xsd:\)\@<=field' +syn match xsdElement '\%(xsd:\)\@<=group' +syn match xsdElement '\%(xsd:\)\@<=import' +syn match xsdElement '\%(xsd:\)\@<=include' +syn match xsdElement '\%(xsd:\)\@<=key' +syn match xsdElement '\%(xsd:\)\@<=keyref' +syn match xsdElement '\%(xsd:\)\@<=length' +syn match xsdElement '\%(xsd:\)\@<=list' +syn match xsdElement '\%(xsd:\)\@<=maxInclusive' +syn match xsdElement '\%(xsd:\)\@<=maxLength' +syn match xsdElement '\%(xsd:\)\@<=minInclusive' +syn match xsdElement '\%(xsd:\)\@<=minLength' +syn match xsdElement '\%(xsd:\)\@<=pattern' +syn match xsdElement '\%(xsd:\)\@<=redefine' +syn match xsdElement '\%(xsd:\)\@<=restriction' +syn match xsdElement '\%(xsd:\)\@<=schema' +syn match xsdElement '\%(xsd:\)\@<=selector' +syn match xsdElement '\%(xsd:\)\@<=sequence' +syn match xsdElement '\%(xsd:\)\@<=simpleContent' +syn match xsdElement '\%(xsd:\)\@<=simpleType' +syn match xsdElement '\%(xsd:\)\@<=union' +syn match xsdElement '\%(xsd:\)\@<=unique' + +hi def link xsdElement Statement + +" vim: ts=8 diff --git a/.config/vim/syntax/xslt.vim b/.config/vim/syntax/xslt.vim new file mode 100644 index 0000000..900b8ca --- /dev/null +++ b/.config/vim/syntax/xslt.vim @@ -0,0 +1,71 @@ +" Vim syntax file +" Language: XSLT +" Maintainer: Bogdan Barbu +" Previous Maintainer: Johannes Zellner +" Last Change: Fri, 17 Jan 2020 07:15:37 +0200 +" Filenames: *.xsl +" $Id: xslt.vim,v 1.1 2004/06/13 15:52:10 vimboss Exp $ + +" REFERENCES: +" [1] http://www.w3.org/TR/xslt +" [2] http://www.w3.org/TR/xslt20 + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +runtime syntax/xml.vim + +syn cluster xmlTagHook add=xslElement +syn case match + +syn match xslElement '\%(xsl:\)\@<=analyze-string' +syn match xslElement '\%(xsl:\)\@<=apply-imports' +syn match xslElement '\%(xsl:\)\@<=apply-templates' +syn match xslElement '\%(xsl:\)\@<=attribute' +syn match xslElement '\%(xsl:\)\@<=attribute-set' +syn match xslElement '\%(xsl:\)\@<=call-template' +syn match xslElement '\%(xsl:\)\@<=character-map' +syn match xslElement '\%(xsl:\)\@<=choose' +syn match xslElement '\%(xsl:\)\@<=comment' +syn match xslElement '\%(xsl:\)\@<=copy' +syn match xslElement '\%(xsl:\)\@<=copy-of' +syn match xslElement '\%(xsl:\)\@<=decimal-format' +syn match xslElement '\%(xsl:\)\@<=document' +syn match xslElement '\%(xsl:\)\@<=element' +syn match xslElement '\%(xsl:\)\@<=fallback' +syn match xslElement '\%(xsl:\)\@<=for-each' +syn match xslElement '\%(xsl:\)\@<=for-each-group' +syn match xslElement '\%(xsl:\)\@<=function' +syn match xslElement '\%(xsl:\)\@<=if' +syn match xslElement '\%(xsl:\)\@<=include' +syn match xslElement '\%(xsl:\)\@<=import' +syn match xslElement '\%(xsl:\)\@<=import-schema' +syn match xslElement '\%(xsl:\)\@<=key' +syn match xslElement '\%(xsl:\)\@<=message' +syn match xslElement '\%(xsl:\)\@<=namespace' +syn match xslElement '\%(xsl:\)\@<=namespace-alias' +syn match xslElement '\%(xsl:\)\@<=number' +syn match xslElement '\%(xsl:\)\@<=otherwise' +syn match xslElement '\%(xsl:\)\@<=output' +syn match xslElement '\%(xsl:\)\@<=param' +syn match xslElement '\%(xsl:\)\@<=perform-sort' +syn match xslElement '\%(xsl:\)\@<=processing-instruction' +syn match xslElement '\%(xsl:\)\@<=preserve-space' +syn match xslElement '\%(xsl:\)\@<=script' +syn match xslElement '\%(xsl:\)\@<=sequence' +syn match xslElement '\%(xsl:\)\@<=sort' +syn match xslElement '\%(xsl:\)\@<=strip-space' +syn match xslElement '\%(xsl:\)\@<=stylesheet' +syn match xslElement '\%(xsl:\)\@<=template' +syn match xslElement '\%(xsl:\)\@<=transform' +syn match xslElement '\%(xsl:\)\@<=text' +syn match xslElement '\%(xsl:\)\@<=value-of' +syn match xslElement '\%(xsl:\)\@<=variable' +syn match xslElement '\%(xsl:\)\@<=when' +syn match xslElement '\%(xsl:\)\@<=with-param' + +hi def link xslElement Statement + +" vim: ts=8 diff --git a/.config/vim/syntax/xxd.vim b/.config/vim/syntax/xxd.vim new file mode 100644 index 0000000..1c06b42 --- /dev/null +++ b/.config/vim/syntax/xxd.vim @@ -0,0 +1,32 @@ +" Vim syntax file +" Language: bin using xxd +" Maintainer: This runtime file is looking for a new maintainer. +" Former Maintainer: Charles E. Campbell +" Last Change: Aug 31, 2016 +" Version: 11 +" 2024 Feb 19 by Vim Project (announce adoption) +" Notes: use :help xxd to see how to invoke it +" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_XXD + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn match xxdAddress "^[0-9a-f]\+:" contains=xxdSep +syn match xxdSep contained ":" +syn match xxdAscii " .\{,16\}\r\=$"hs=s+2 contains=xxdDot +syn match xxdDot contained "[.\r]" + +" Define the default highlighting. +if !exists("skip_xxd_syntax_inits") + + hi def link xxdAddress Constant + hi def link xxdSep Identifier + hi def link xxdAscii Statement + +endif + +let b:current_syntax = "xxd" + +" vim: ts=4 diff --git a/.config/vim/syntax/yacc.vim b/.config/vim/syntax/yacc.vim new file mode 100644 index 0000000..8100489 --- /dev/null +++ b/.config/vim/syntax/yacc.vim @@ -0,0 +1,121 @@ +" Vim syntax file +" Language: Yacc +" Former Maintainer: Charles E. Campbell +" Last Change: Mar 25, 2019 +" Version: 17 +" 2024 Feb 19 by Vim Project (announce adoption) +" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_YACC +" +" Options: {{{1 +" g:yacc_uses_cpp : if this variable exists, then C++ is loaded rather than C + +" --------------------------------------------------------------------- +" this version of syntax/yacc.vim requires 6.0 or later +if exists("b:current_syntax") + syntax clear +endif + +" --------------------------------------------------------------------- +" Folding Support {{{1 +if has("folding") + com! -nargs=+ SynFold fold +else + com! -nargs=+ SynFold +endif + +" --------------------------------------------------------------------- +" Read the C syntax to start with {{{1 +" Read the C/C++ syntax to start with +let s:Cpath= fnameescape(expand(":p:h").(exists("g:yacc_uses_cpp")? "/cpp.vim" : "/c.vim")) +if !filereadable(s:Cpath) + for s:Cpath in split(globpath(&rtp,(exists("g:yacc_uses_cpp")? "syntax/cpp.vim" : "syntax/c.vim")),"\n") + if filereadable(fnameescape(s:Cpath)) + let s:Cpath= fnameescape(s:Cpath) + break + endif + endfor +endif +exe "syn include @yaccCode ".s:Cpath + +" --------------------------------------------------------------------- +" Yacc Clusters: {{{1 +syn cluster yaccInitCluster contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam,yaccParseOption +syn cluster yaccRulesCluster contains=yaccNonterminal,yaccString,yaccComment + +" --------------------------------------------------------------------- +" Yacc Sections: {{{1 +SynFold syn region yaccInit start='.'ms=s-1,rs=s-1 matchgroup=yaccSectionSep end='^%%\ze\(\s*/[*/].*\)\=$'me=e-2,re=e-2 contains=@yaccInitCluster nextgroup=yaccRules skipwhite skipempty contained +SynFold syn region yaccInit2 start='\%^.'ms=s-1,rs=s-1 matchgroup=yaccSectionSep end='^%%\ze\(\s*/[*/].*\)\=$'me=e-2,re=e-2 contains=@yaccInitCluster nextgroup=yaccRules skipwhite skipempty +SynFold syn region yaccHeader2 matchgroup=yaccSep start="^\s*\zs%{" end="^\s*%}" contains=@yaccCode nextgroup=yaccInit skipwhite skipempty contained +SynFold syn region yaccHeader matchgroup=yaccSep start="^\s*\zs%{" end="^\s*%}" contains=@yaccCode nextgroup=yaccInit skipwhite skipempty +SynFold syn region yaccRules matchgroup=yaccSectionSep start='^%%\ze\(\s*/[*/].*\)\=$' end='^%%\ze\(\s*/[*/].*\)\=$'me=e-2,re=e-2 contains=@yaccRulesCluster nextgroup=yaccEndCode skipwhite skipempty contained +SynFold syn region yaccEndCode matchgroup=yaccSectionSep start='^%%\ze\(\s*/[*/].*\)\=$' end='\%$' contains=@yaccCode contained + +" --------------------------------------------------------------------- +" Yacc Commands: {{{1 +syn match yaccDefines '^%define\s\+.*$' +syn match yaccParseParam '%\(parse\|lex\)-param\>' skipwhite nextgroup=yaccParseParamStr +syn match yaccParseOption '%\%(api\.pure\|pure-parser\|locations\|error-verbose\)\>' +syn region yaccParseParamStr contained matchgroup=Delimiter start='{' end='}' contains=cStructure + +syn match yaccDelim "[:|]" contained +syn match yaccOper "@\d\+" contained + +syn match yaccKey "^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>" contained +syn match yaccKey "\s%\(prec\|expect\)\>" contained +syn match yaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+" contained +syn keyword yaccKeyActn yyerrok yyclearin contained + +syn match yaccUnionStart "^%union" skipwhite skipnl nextgroup=yaccUnion contained +SynFold syn region yaccUnion matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode contained +syn match yaccBrkt "[<>]" contained +syn match yaccType "<[a-zA-Z_][a-zA-Z0-9_]*>" contains=yaccBrkt contained + +SynFold syn region yaccNonterminal start="^\s*\a\w*\ze\_s*\(/\*\_.\{-}\*/\)\=\_s*:" matchgroup=yaccDelim end=";" matchgroup=yaccSectionSep end='^%%$'me=e-2,re=e-2 contains=yaccAction,yaccDelim,yaccString,yaccComment contained +syn region yaccComment start="/\*" end="\*/" +syn region yaccComment start="//" end="$" +syn match yaccString "'[^']*'" contained + + +" --------------------------------------------------------------------- +" I'd really like to highlight just the outer {}. Any suggestions??? {{{1 +syn match yaccCurlyError "[{}]" +SynFold syn region yaccAction matchgroup=yaccCurly start="{" end="}" contains=@yaccCode,yaccVar contained +syn match yaccVar '\$\d\+\|\$\$\|\$<\I\i*>\$\|\$<\I\i*>\d\+' containedin=cParen,cPreProc,cMulti contained + +" --------------------------------------------------------------------- +" Yacc synchronization: {{{1 +syn sync fromstart + +" --------------------------------------------------------------------- +" Define the default highlighting. {{{1 +if !exists("skip_yacc_syn_inits") + hi def link yaccBrkt yaccStmt + hi def link yaccComment Comment + hi def link yaccCurly Delimiter + hi def link yaccCurlyError Error + hi def link yaccDefines cDefine + hi def link yaccDelim Delimiter + hi def link yaccKeyActn Special + hi def link yaccKey yaccStmt + hi def link yaccNonterminal Function + hi def link yaccOper yaccStmt + hi def link yaccParseOption cDefine + hi def link yaccParseParam yaccParseOption + hi def link yaccSectionSep Todo + hi def link yaccSep Delimiter + hi def link yaccStmt Statement + hi def link yaccString String + hi def link yaccType Type + hi def link yaccUnionStart yaccKey + hi def link yaccVar Special +endif + +" --------------------------------------------------------------------- +" Cleanup: {{{1 +delcommand SynFold +let b:current_syntax = "yacc" + +" --------------------------------------------------------------------- +" Modelines: {{{1 +" vim: ts=15 fdm=marker diff --git a/.config/vim/syntax/yaml.vim b/.config/vim/syntax/yaml.vim new file mode 100644 index 0000000..e992bc0 --- /dev/null +++ b/.config/vim/syntax/yaml.vim @@ -0,0 +1,275 @@ +" Vim syntax file +" Language: YAML (YAML Ain't Markup Language) 1.2 +" Maintainer: Nikolai Pavlov +" First author: Nikolai Weibull +" Latest Revision: 2024-04-01 + +if exists('b:current_syntax') + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Choose the schema to use +" TODO: Validate schema +if !exists('b:yaml_schema') + if exists('g:yaml_schema') + let b:yaml_schema = g:yaml_schema + else + let b:yaml_schema = 'core' + endif +endif + +let s:ns_char = '\%([\n\r\uFEFF \t]\@!\p\)' +let s:ns_word_char = '[[:alnum:]_\-]' +let s:ns_uri_char = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$,.!~*''()[\]]\)' +let s:ns_tag_char = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$.~*''()]\)' +let s:c_indicator = '[\-?:,[\]{}#&*!|>''"%@`]' +let s:c_flow_indicator = '[,[\]{}]' + +let s:ns_anchor_char = substitute(s:ns_char, '\v\C[\zs', '\=s:c_flow_indicator[1:-2]', '') +let s:ns_char_without_c_indicator = substitute(s:ns_char, '\v\C[\zs', '\=s:c_indicator[1:-2]', '') + +let s:_collection = '[^\@!\(\%(\\\.\|\[^\\\]]\)\+\)]' +let s:_neg_collection = '[^\(\%(\\\.\|\[^\\\]]\)\+\)]' +function s:SimplifyToAssumeAllPrintable(p) + return substitute(a:p, '\V\C\\%('.s:_collection.'\\@!\\p\\)', '[^\1]', '') +endfunction +let s:ns_char = s:SimplifyToAssumeAllPrintable(s:ns_char) +let s:ns_anchor_char = s:SimplifyToAssumeAllPrintable(s:ns_anchor_char) +let s:ns_char_without_c_indicator = s:SimplifyToAssumeAllPrintable(s:ns_char_without_c_indicator) + +function s:SimplifyAdjacentCollections(p) + return substitute(a:p, '\V\C'.s:_collection.'\\|'.s:_collection, '[\1\2]', 'g') +endfunction +let s:ns_uri_char = s:SimplifyAdjacentCollections(s:ns_uri_char) +let s:ns_tag_char = s:SimplifyAdjacentCollections(s:ns_tag_char) + +let s:c_verbatim_tag = '!<'.s:ns_uri_char.'\+>' +let s:c_named_tag_handle = '!'.s:ns_word_char.'\+!' +let s:c_secondary_tag_handle = '!!' +let s:c_primary_tag_handle = '!' +let s:c_tag_handle = '\%('.s:c_named_tag_handle. + \ '\|'.s:c_secondary_tag_handle. + \ '\|'.s:c_primary_tag_handle.'\)' +let s:c_ns_shorthand_tag = s:c_tag_handle . s:ns_tag_char.'\+' +let s:c_non_specific_tag = '!' +let s:c_ns_tag_property = s:c_verbatim_tag. + \ '\|'.s:c_ns_shorthand_tag. + \ '\|'.s:c_non_specific_tag + +let s:c_ns_anchor_name = s:ns_anchor_char.'\+' +let s:c_ns_anchor_property = '&'.s:c_ns_anchor_name +let s:c_ns_alias_node = '\*'.s:c_ns_anchor_name +let s:c_ns_properties = '\%(\%('.s:c_ns_tag_property.'\|'.s:c_ns_anchor_property.'\)\s\+\)\+' + +let s:ns_directive_name = s:ns_char.'\+' + +let s:ns_local_tag_prefix = '!'.s:ns_uri_char.'*' +let s:ns_global_tag_prefix = s:ns_tag_char.s:ns_uri_char.'*' +let s:ns_tag_prefix = s:ns_local_tag_prefix. + \ '\|'.s:ns_global_tag_prefix + +let s:ns_plain_safe_out = s:ns_char +let s:ns_plain_safe_in = '\%('.s:c_flow_indicator.'\@!'.s:ns_char.'\)' + +let s:ns_plain_safe_in = substitute(s:ns_plain_safe_in, '\V\C\\%('.s:_collection.'\\@!'.s:_neg_collection.'\\)', '[^\1\2]', '') +let s:ns_plain_safe_in_without_colhash = substitute(s:ns_plain_safe_in, '\V\C'.s:_neg_collection, '[^\1:#]', '') +let s:ns_plain_safe_out_without_colhash = substitute(s:ns_plain_safe_out, '\V\C'.s:_neg_collection, '[^\1:#]', '') + +let s:ns_plain_first_in = '\%('.s:ns_char_without_c_indicator.'\|[?:\-]\%('.s:ns_plain_safe_in.'\)\@=\)' +let s:ns_plain_first_out = '\%('.s:ns_char_without_c_indicator.'\|[?:\-]\%('.s:ns_plain_safe_out.'\)\@=\)' + +let s:ns_plain_char_in = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_in.'\|'.s:ns_plain_safe_in_without_colhash.'\)' +let s:ns_plain_char_out = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_out.'\|'.s:ns_plain_safe_out_without_colhash.'\)' + +let s:ns_plain_out = s:ns_plain_first_out . s:ns_plain_char_out.'*' +let s:ns_plain_in = s:ns_plain_first_in . s:ns_plain_char_in.'*' + + +syn keyword yamlTodo contained TODO FIXME XXX NOTE + +syn region yamlComment display oneline start='\%\(^\|\s\)#' end='$' + \ contains=yamlTodo + +execute 'syn region yamlDirective oneline start='.string('^\ze%'.s:ns_directive_name.'\s\+').' '. + \ 'end="$" '. + \ 'contains=yamlTAGDirective,'. + \ 'yamlYAMLDirective,'. + \ 'yamlReservedDirective '. + \ 'keepend' + +syn match yamlTAGDirective /%TAG\ze\s/ contained nextgroup=yamlTagHandle skipwhite +execute 'syn match yamlTagHandle' string(s:c_tag_handle) 'contained nextgroup=yamlTagPrefix skipwhite' +execute 'syn match yamlTagPrefix' string(s:ns_tag_prefix) 'contained nextgroup=yamlComment skipwhite' + +syn match yamlYAMLDirective /%YAML\ze\s/ contained nextgroup=yamlYAMLVersion skipwhite +syn match yamlYAMLVersion /\d\+\.\d\+/ contained nextgroup=yamlComment skipwhite + +execute 'syn match yamlReservedDirective contained nextgroup=yamlComment '. + \string('%\%(\%(TAG\|YAML\)\s\)\@!'.s:ns_directive_name) + +syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start='"' skip='\\"' end='"' + \ contains=yamlEscape contained nextgroup=yamlFlowMappingDelimiter,yamlComment skipwhite +syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start="'" skip="''" end="'" + \ contains=yamlSingleEscape contained nextgroup=yamlFlowMappingDelimiter,yamlComment skipwhite +syn match yamlEscape contained '\\\%([\\"abefnrtv\^0_ NLP\n]\|x\x\x\|u\x\{4}\|U\x\{8}\)' +syn match yamlSingleEscape contained "''" + +syn cluster yamlConstant contains=yamlBool,yamlNull + +syn cluster yamlFlowNode contains=yamlFlowString,yamlFlowMapping,yamlFlowCollection +syn cluster yamlFlowNode add=yamlFlowMappingKey,yamlFlowMappingKeyStart,yamlFlowMappingMerge +syn cluster yamlFlowNode add=@yamlConstant,yamlPlainScalar,yamlFloat,yamlComment +syn cluster yamlFlowNode add=yamlTimestamp,yamlInteger,yamlAlias,yamlFlowNodeProperties +syn region yamlFlowMapping matchgroup=yamlFlowIndicator start='{\@]\%([1-9][+-]\|[+-]\?[1-9]\?\)\%(\s\+#.*\)\?$' contained + \ contains=yamlComment nextgroup=yamlBlockString skipnl +syn region yamlBlockString start=/^\z(\s\+\)/ skip=/^$/ end=/^\%(\z1\)\@!/ contained + +syn cluster yamlBlockNode contains=@yamlFlowNode,yamlBlockMappingKey,yamlBlockMappingKeyString, + \yamlBlockMappingMerge,yamlBlockMappingKeyStart,yamlBlockCollectionItemStart, + \yamlBlockNodeProperties,yamlBlockScalarHeader + +syn cluster yamlScalarWithSpecials contains=yamlPlainScalar,yamlBlockMappingKey,yamlFlowMappingKey + +let s:_bounder = s:SimplifyToAssumeAllPrintable('\%([[\]{}, \t]\@!\p\)') +if b:yaml_schema is# 'json' + syn keyword yamlNull null contained containedin=@yamlScalarWithSpecials + syn keyword yamlBool true false + exe 'syn match yamlInteger /'.s:_bounder.'\@1 +" Last Change: 2003 May 11 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case ignore + +" Common Z80 Assembly instructions +syn keyword z8aInstruction adc add and bit ccf cp cpd cpdr cpi cpir cpl +syn keyword z8aInstruction daa di djnz ei exx halt im in +syn keyword z8aInstruction ind ini indr inir jp jr ld ldd lddr ldi ldir +syn keyword z8aInstruction neg nop or otdr otir out outd outi +syn keyword z8aInstruction res rl rla rlc rlca rld +syn keyword z8aInstruction rr rra rrc rrca rrd sbc scf set sla sra +syn keyword z8aInstruction srl sub xor +" syn keyword z8aInstruction push pop call ret reti retn inc dec ex rst + +" Any other stuff +syn match z8aIdentifier "[a-z_][a-z0-9_]*" + +" Instructions changing stack +syn keyword z8aSpecInst push pop call ret reti retn rst +syn match z8aInstruction "\" +syn match z8aInstruction "\" +syn match z8aInstruction "\" +syn match z8aSpecInst "\"me=s+3 +syn match z8aSpecInst "\"me=s+3 +syn match z8aSpecInst "\"me=s+2 + +"Labels +syn match z8aLabel "[a-z_][a-z0-9_]*:" +syn match z8aSpecialLabel "[a-z_][a-z0-9_]*::" + +" PreProcessor commands +syn match z8aPreProc "\.org" +syn match z8aPreProc "\.globl" +syn match z8aPreProc "\.db" +syn match z8aPreProc "\.dw" +syn match z8aPreProc "\.ds" +syn match z8aPreProc "\.byte" +syn match z8aPreProc "\.word" +syn match z8aPreProc "\.blkb" +syn match z8aPreProc "\.blkw" +syn match z8aPreProc "\.ascii" +syn match z8aPreProc "\.asciz" +syn match z8aPreProc "\.module" +syn match z8aPreProc "\.title" +syn match z8aPreProc "\.sbttl" +syn match z8aPreProc "\.even" +syn match z8aPreProc "\.odd" +syn match z8aPreProc "\.area" +syn match z8aPreProc "\.page" +syn match z8aPreProc "\.setdp" +syn match z8aPreProc "\.radix" +syn match z8aInclude "\.include" +syn match z8aPreCondit "\.if" +syn match z8aPreCondit "\.else" +syn match z8aPreCondit "\.endif" + +" Common strings +syn match z8aString "\".*\"" +syn match z8aString "\'.*\'" + +" Numbers +syn match z8aNumber "[0-9]\+" +syn match z8aNumber "0[xXhH][0-9a-fA-F]\+" +syn match z8aNumber "0[bB][0-1]*" +syn match z8aNumber "0[oO\@qQ][0-7]\+" +syn match z8aNumber "0[dD][0-9]\+" + +" Character constant +syn match z8aString "\#\'."hs=s+1 + +" Comments +syn match z8aComment ";.*" + +syn case match + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link z8aSection Special +hi def link z8aLabel Label +hi def link z8aSpecialLabel Label +hi def link z8aComment Comment +hi def link z8aInstruction Statement +hi def link z8aSpecInst Statement +hi def link z8aInclude Include +hi def link z8aPreCondit PreCondit +hi def link z8aPreProc PreProc +hi def link z8aNumber Number +hi def link z8aString String + + +let b:current_syntax = "z8a" +" vim: ts=8 diff --git a/.config/vim/syntax/zathurarc.vim b/.config/vim/syntax/zathurarc.vim new file mode 100644 index 0000000..32997c2 --- /dev/null +++ b/.config/vim/syntax/zathurarc.vim @@ -0,0 +1,37 @@ +" Vim syntax file +" Language: Zathurarc +" Maintainer: Wu, Zhenyu +" Documentation: https://pwmt.org/projects/zathura/documentation/ +" Upstream: https://github.com/Freed-Wu/zathurarc.vim +" Latest Revision: 2024-09-16 + +if exists('b:current_syntax') + finish +endif +let b:current_syntax = 'zathurarc' + +syntax case match +syntax iskeyword @,48-57,_,192-255,- + +syntax region zathurarcComment start="\%([ \t]*\&\([^\\]\zs\|^\)\)#" end="$" +syntax match zathurarcBracket /[<>]/ contained +syntax match zathurarcNotation `<[A-Z][a-z0-9]\+>` contains=zathurarcBracket +syntax match zathurarcNumber `\<[0-9.]\>` +syntax region zathurarcString start=`"` skip=`\\"` end=`"` +syntax region zathurarcString start=`'` skip=`\\'` end=`'` +syntax keyword zathurarcMode normal fullscreen presentation index +syntax keyword zathurarcBoolean true false +syntax keyword zathurarcCommand include map set unmap +syntax keyword zathurarcOption abort-clear-search adjust-open advance-pages-per-row completion-bg completion-fg completion-group-bg completion-group-fg completion-highlight-bg completion-highlight-fg continuous-hist-save database dbus-raise-window dbus-service default-bg default-fg double-click-follow exec-command filemonitor first-page-column font guioptions highlight-active-color highlight-color highlight-fg highlight-transparency incremental-search index-active-bg index-active-fg index-bg index-fg inputbar-bg inputbar-fg link-hadjust link-zoom n-completion-items notification-bg notification-error-bg notification-error-fg notification-fg notification-warning-bg notification-warning-fg page-cache-size page-padding page-right-to-left page-thumbnail-size pages-per-row recolor recolor-darkcolor recolor-keephue recolor-lightcolor recolor-reverse-video render-loading render-loading-bg render-loading-fg sandbox scroll-full-overlap scroll-hstep scroll-page-aware scroll-step scroll-wrap search-hadjust selection-clipboard selection-notification show-directories show-hidden show-recent statusbar-basename statusbar-bg statusbar-fg statusbar-h-padding statusbar-home-tilde statusbar-page-percent statusbar-v-padding synctex synctex-editor-command vertical-center window-height window-icon window-icon-document window-title-basename window-title-home-tilde window-title-page window-width zoom-center zoom-max zoom-min zoom-step + +highlight default link zathurarcComment Comment +highlight default link zathurarcNumber Number +highlight default link zathurarcMode Macro +highlight default link zathurarcString String +highlight default link zathurarcBoolean Boolean +" same as vim +highlight default link zathurarcBracket Delimiter +highlight default link zathurarcNotation Special +highlight default link zathurarcCommand Statement +highlight default link zathurarcOption PreProc +" ex: nowrap diff --git a/.config/vim/syntax/zig.vim b/.config/vim/syntax/zig.vim new file mode 100644 index 0000000..121b019 --- /dev/null +++ b/.config/vim/syntax/zig.vim @@ -0,0 +1,297 @@ +" Vim syntax file +" Language: Zig +" Upstream: https://github.com/ziglang/zig.vim + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +let s:zig_syntax_keywords = { + \ 'zigBoolean': ["true" + \ , "false"] + \ , 'zigNull': ["null"] + \ , 'zigType': ["bool" + \ , "f16" + \ , "f32" + \ , "f64" + \ , "f80" + \ , "f128" + \ , "void" + \ , "type" + \ , "anytype" + \ , "anyerror" + \ , "anyframe" + \ , "volatile" + \ , "linksection" + \ , "noreturn" + \ , "allowzero" + \ , "i0" + \ , "u0" + \ , "isize" + \ , "usize" + \ , "comptime_int" + \ , "comptime_float" + \ , "c_char" + \ , "c_short" + \ , "c_ushort" + \ , "c_int" + \ , "c_uint" + \ , "c_long" + \ , "c_ulong" + \ , "c_longlong" + \ , "c_ulonglong" + \ , "c_longdouble" + \ , "anyopaque"] + \ , 'zigConstant': ["undefined" + \ , "unreachable"] + \ , 'zigConditional': ["if" + \ , "else" + \ , "switch"] + \ , 'zigRepeat': ["while" + \ , "for"] + \ , 'zigComparatorWord': ["and" + \ , "or" + \ , "orelse"] + \ , 'zigStructure': ["struct" + \ , "enum" + \ , "union" + \ , "error" + \ , "packed" + \ , "opaque"] + \ , 'zigException': ["error"] + \ , 'zigVarDecl': ["var" + \ , "const" + \ , "comptime" + \ , "threadlocal"] + \ , 'zigDummyVariable': ["_"] + \ , 'zigKeyword': ["fn" + \ , "try" + \ , "test" + \ , "pub" + \ , "usingnamespace"] + \ , 'zigExecution': ["return" + \ , "break" + \ , "continue"] + \ , 'zigMacro': ["defer" + \ , "errdefer" + \ , "async" + \ , "nosuspend" + \ , "await" + \ , "suspend" + \ , "resume" + \ , "export" + \ , "extern"] + \ , 'zigPreProc': ["catch" + \ , "inline" + \ , "noinline" + \ , "asm" + \ , "callconv" + \ , "noalias"] + \ , 'zigBuiltinFn': ["align" + \ , "@addWithOverflow" + \ , "@as" + \ , "@atomicLoad" + \ , "@atomicStore" + \ , "@bitCast" + \ , "@breakpoint" + \ , "@trap" + \ , "@alignCast" + \ , "@alignOf" + \ , "@cDefine" + \ , "@cImport" + \ , "@cInclude" + \ , "@cUndef" + \ , "@clz" + \ , "@cmpxchgWeak" + \ , "@cmpxchgStrong" + \ , "@compileError" + \ , "@compileLog" + \ , "@constCast" + \ , "@ctz" + \ , "@popCount" + \ , "@divExact" + \ , "@divFloor" + \ , "@divTrunc" + \ , "@embedFile" + \ , "@export" + \ , "@extern" + \ , "@tagName" + \ , "@TagType" + \ , "@errorName" + \ , "@call" + \ , "@errorReturnTrace" + \ , "@fence" + \ , "@fieldParentPtr" + \ , "@field" + \ , "@unionInit" + \ , "@frameAddress" + \ , "@import" + \ , "@inComptime" + \ , "@newStackCall" + \ , "@asyncCall" + \ , "@ptrFromInt" + \ , "@max" + \ , "@min" + \ , "@memcpy" + \ , "@memset" + \ , "@mod" + \ , "@mulAdd" + \ , "@mulWithOverflow" + \ , "@splat" + \ , "@src" + \ , "@bitOffsetOf" + \ , "@byteOffsetOf" + \ , "@offsetOf" + \ , "@OpaqueType" + \ , "@panic" + \ , "@prefetch" + \ , "@ptrCast" + \ , "@intFromPtr" + \ , "@rem" + \ , "@returnAddress" + \ , "@setCold" + \ , "@Type" + \ , "@shuffle" + \ , "@reduce" + \ , "@select" + \ , "@setRuntimeSafety" + \ , "@setEvalBranchQuota" + \ , "@setFloatMode" + \ , "@shlExact" + \ , "@This" + \ , "@hasDecl" + \ , "@hasField" + \ , "@shlWithOverflow" + \ , "@shrExact" + \ , "@sizeOf" + \ , "@bitSizeOf" + \ , "@sqrt" + \ , "@byteSwap" + \ , "@subWithOverflow" + \ , "@intCast" + \ , "@floatCast" + \ , "@floatFromInt" + \ , "@intFromFloat" + \ , "@intFromBool" + \ , "@errorCast" + \ , "@truncate" + \ , "@typeInfo" + \ , "@typeName" + \ , "@TypeOf" + \ , "@atomicRmw" + \ , "@errorFromInt" + \ , "@intFromError" + \ , "@enumFromInt" + \ , "@intFromEnum" + \ , "@setAlignStack" + \ , "@frame" + \ , "@Frame" + \ , "@frameSize" + \ , "@bitReverse" + \ , "@Vector" + \ , "@volatileCast" + \ , "@sin" + \ , "@cos" + \ , "@tan" + \ , "@exp" + \ , "@exp2" + \ , "@log" + \ , "@log2" + \ , "@log10" + \ , "@abs" + \ , "@floor" + \ , "@ceil" + \ , "@trunc" + \ , "@wasmMemorySize" + \ , "@wasmMemoryGrow" + \ , "@round"] + \ } + +function! s:syntax_keyword(dict) + for key in keys(a:dict) + execute 'syntax keyword' key join(a:dict[key], ' ') + endfor +endfunction + +call s:syntax_keyword(s:zig_syntax_keywords) + +syntax match zigType "\v<[iu][1-9]\d*>" +syntax match zigOperator display "\V\[-+/*=^&?|!><%~]" +syntax match zigArrowCharacter display "\V->" + +" 12_34 (. but not ..)? (12_34)? (exponent 12_34)? +syntax match zigDecNumber display "\v<\d%(_?\d)*%(\.\.@!)?%(\d%(_?\d)*)?%([eE][+-]?\d%(_?\d)*)?" +syntax match zigHexNumber display "\v<0x\x%(_?\x)*%(\.\.@!)?%(\x%(_?\x)*)?%([pP][+-]?\d%(_?\d)*)?" +syntax match zigOctNumber display "\v<0o\o%(_?\o)*" +syntax match zigBinNumber display "\v<0b[01]%(_?[01])*" + +syntax match zigCharacterInvalid display contained /b\?'\zs[\n\r\t']\ze'/ +syntax match zigCharacterInvalidUnicode display contained /b'\zs[^[:cntrl:][:graph:][:alnum:][:space:]]\ze'/ +syntax match zigCharacter /b'\([^\\]\|\\\(.\|x\x\{2}\)\)'/ contains=zigEscape,zigEscapeError,zigCharacterInvalid,zigCharacterInvalidUnicode +syntax match zigCharacter /'\([^\\]\|\\\(.\|x\x\{2}\|u\x\{4}\|U\x\{6}\)\)'/ contains=zigEscape,zigEscapeUnicode,zigEscapeError,zigCharacterInvalid + +syntax region zigBlock start="{" end="}" transparent fold + +syntax region zigCommentLine start="//" end="$" contains=zigTodo,@Spell +syntax region zigCommentLineDoc start="//[/!]/\@!" end="$" contains=zigTodo,@Spell + +syntax match zigMultilineStringPrefix /c\?\\\\/ contained containedin=zigMultilineString +syntax region zigMultilineString matchgroup=zigMultilineStringDelimiter start="c\?\\\\" end="$" contains=zigMultilineStringPrefix display + +syntax keyword zigTodo contained TODO + +syntax region zigString matchgroup=zigStringDelimiter start=+c\?"+ skip=+\\\\\|\\"+ end=+"+ oneline contains=zigEscape,zigEscapeUnicode,zigEscapeError,@Spell +syntax match zigEscapeError display contained /\\./ +syntax match zigEscape display contained /\\\([nrt\\'"]\|x\x\{2}\)/ +syntax match zigEscapeUnicode display contained /\\\(u\x\{4}\|U\x\{6}\)/ + +highlight default link zigDecNumber zigNumber +highlight default link zigHexNumber zigNumber +highlight default link zigOctNumber zigNumber +highlight default link zigBinNumber zigNumber + +highlight default link zigBuiltinFn Statement +highlight default link zigKeyword Keyword +highlight default link zigType Type +highlight default link zigCommentLine Comment +highlight default link zigCommentLineDoc Comment +highlight default link zigDummyVariable Comment +highlight default link zigTodo Todo +highlight default link zigString String +highlight default link zigStringDelimiter String +highlight default link zigMultilineString String +highlight default link zigMultilineStringContent String +highlight default link zigMultilineStringPrefix String +highlight default link zigMultilineStringDelimiter Delimiter +highlight default link zigCharacterInvalid Error +highlight default link zigCharacterInvalidUnicode zigCharacterInvalid +highlight default link zigCharacter Character +highlight default link zigEscape Special +highlight default link zigEscapeUnicode zigEscape +highlight default link zigEscapeError Error +highlight default link zigBoolean Boolean +highlight default link zigNull Boolean +highlight default link zigConstant Constant +highlight default link zigNumber Number +highlight default link zigArrowCharacter zigOperator +highlight default link zigOperator Operator +highlight default link zigStructure Structure +highlight default link zigExecution Special +highlight default link zigMacro Macro +highlight default link zigConditional Conditional +highlight default link zigComparatorWord Keyword +highlight default link zigRepeat Repeat +highlight default link zigSpecial Special +highlight default link zigVarDecl Function +highlight default link zigPreProc PreProc +highlight default link zigException Exception + +delfunction s:syntax_keyword + +let b:current_syntax = "zig" + +let &cpo = s:cpo_save +unlet! s:cpo_save diff --git a/.config/vim/syntax/zimbu.vim b/.config/vim/syntax/zimbu.vim new file mode 100644 index 0000000..4725595 --- /dev/null +++ b/.config/vim/syntax/zimbu.vim @@ -0,0 +1,161 @@ +" Vim syntax file +" Language: Zimbu +" Maintainer: The·Vim·Project· +" Last Change: 2023 Aug 13 +" Note: Zimbu seems to be dead :( + +if exists("b:current_syntax") + finish +endif + +syn include @Ccode syntax/c.vim + +syn keyword zimbuTodo TODO FIXME XXX contained +syn match zimbuNoBar "|" contained +syn match zimbuParam "|[^| ]\+|" contained contains=zimbuNoBar +syn match zimbuNoBacktick "`" contained +syn match zimbuCode "`[^`]\+`" contained contains=zimbuNoBacktick +syn match zimbuComment "#.*$" contains=zimbuTodo,zimbuParam,zimbuCode,@Spell +syn match zimbuComment "/\*.\{-}\*/" contains=zimbuTodo,zimbuParam,zimbuCode,@Spell + +syn match zimbuChar "'\\\=.'" + +syn keyword zimbuBasicType bool status +syn keyword zimbuBasicType int1 int2 int3 int4 int5 int6 int7 +syn keyword zimbuBasicType int9 int10 int11 int12 int13 int14 int15 +syn keyword zimbuBasicType int int8 int16 int32 int64 bigInt +syn keyword zimbuBasicType nat nat8 byte nat16 nat32 nat64 bigNat +syn keyword zimbuBasicType nat1 nat2 nat3 nat4 nat5 nat6 nat7 +syn keyword zimbuBasicType nat9 nat10 nat11 nat12 nat13 nat14 nat15 +syn keyword zimbuBasicType float float32 float64 float80 float128 +syn keyword zimbuBasicType fixed1 fixed2 fixed3 fixed4 fixed5 fixed6 +syn keyword zimbuBasicType fixed7 fixed8 fixed9 fixed10 fixed11 fixed12 +syn keyword zimbuBasicType fixed13 fixed14 fixed15 + +syn keyword zimbuCompType string varString +syn keyword zimbuCompType byteString varByteString +syn keyword zimbuCompType tuple array list dict dictList set callback +syn keyword zimbuCompType sortedList multiDict multiDictList multiSet +syn keyword zimbuCompType complex complex32 complex64 complex80 complex128 +syn keyword zimbuCompType proc func def thread evalThread lock cond pipe + +syn keyword zimbuType VAR dyn type USE GET +syn match zimbuType "IO.File" +syn match zimbuType "IO.Stat" + +syn keyword zimbuStatement IF ELSE ELSEIF IFNIL WHILE REPEAT FOR IN TO STEP +syn keyword zimbuStatement DO UNTIL SWITCH WITH +syn keyword zimbuStatement TRY CATCH FINALLY +syn keyword zimbuStatement GENERATE_IF GENERATE_ELSE GENERATE_ELSEIF +syn keyword zimbuStatement GENERATE_ERROR +syn keyword zimbuStatement BUILD_IF BUILD_ELSE BUILD_ELSEIF +syn keyword zimbuStatement CASE DEFAULT FINAL ABSTRACT VIRTUAL DEFINE REPLACE +syn keyword zimbuStatement IMPLEMENTS EXTENDS PARENT LOCAL +syn keyword zimbuStatement PART ALIAS TYPE CONNECT WRAP +syn keyword zimbuStatement BREAK CONTINUE PROCEED +syn keyword zimbuStatement RETURN EXIT THROW DEFER +syn keyword zimbuStatement IMPORT AS OPTIONS MAIN +syn keyword zimbuStatement INTERFACE PIECE INCLUDE MODULE ENUM BITS +syn keyword zimbuStatement SHARED STATIC +syn keyword zimbuStatement LAMBDA +syn match zimbuStatement "\<\(FUNC\|PROC\|DEF\)\>" +syn match zimbuStatement "\" +syn match zimbuStatement "}" + +syn match zimbuAttribute "@backtrace=no\>" +syn match zimbuAttribute "@backtrace=yes\>" +syn match zimbuAttribute "@abstract\>" +syn match zimbuAttribute "@earlyInit\>" +syn match zimbuAttribute "@default\>" +syn match zimbuAttribute "@define\>" +syn match zimbuAttribute "@replace\>" +syn match zimbuAttribute "@final\>" +syn match zimbuAttribute "@primitive\>" +syn match zimbuAttribute "@notOnExit\>" + +syn match zimbuAttribute "@private\>" +syn match zimbuAttribute "@protected\>" +syn match zimbuAttribute "@public\>" +syn match zimbuAttribute "@local\>" +syn match zimbuAttribute "@file\>" +syn match zimbuAttribute "@directory\>" +syn match zimbuAttribute "@read=private\>" +syn match zimbuAttribute "@read=protected\>" +syn match zimbuAttribute "@read=public\>" +syn match zimbuAttribute "@read=file\>" +syn match zimbuAttribute "@read=directory\>" +syn match zimbuAttribute "@items=private\>" +syn match zimbuAttribute "@items=protected\>" +syn match zimbuAttribute "@items=public\>" +syn match zimbuAttribute "@items=file\>" +syn match zimbuAttribute "@items=directory\>" + +syn keyword zimbuMethod NEW EQUAL COPY COMPARE SIZE GET SET INIT EARLYINIT + +syn keyword zimbuOperator IS ISNOT ISA ISNOTA + +syn keyword zimbuModule ARG CHECK E GC IO LOG PROTO SYS HTTP ZC ZWT T TIME THREAD + +syn match zimbuImport "\.\zsPROTO" +syn match zimbuImport "\.\zsCHEADER" + +"syn match zimbuString +"\([^"\\]\|\\.\)*\("\|$\)+ contains=zimbuStringExpr +syn region zimbuString start=+"+ skip=+[^"\\]\|\\.+ end=+"\|$+ contains=zimbuStringExpr +syn match zimbuString +R"\([^"]\|""\)*\("\|$\)+ +syn region zimbuLongString start=+''"+ end=+"''+ +syn match zimbuStringExpr +\\([^)]*)+hs=s+2,he=e-1 contained contains=zimbuString,zimbuParenPairOuter +syn region zimbuParenPairOuter start=+(+ms=s+1 end=+)+me=e-1 contained contains=zimbuString,zimbuParenPair +syn region zimbuParenPair start=+(+ end=+)+ contained contains=zimbuString,zimbuParenPair + +syn keyword zimbuFixed TRUE FALSE NIL THIS THISTYPE FAIL OK +syn keyword zimbuError NULL + +" trailing whitespace +syn match zimbuSpaceError display excludenl "\S\s\+$"ms=s+1 +" mixed tabs and spaces +syn match zimbuSpaceError display " \+\t" +syn match zimbuSpaceError display "\t\+ " + +syn match zimbuUses contained "\ +" Last Change: 2023 Jun 18 +" +" Zserio is a serialization schema language for modeling binary +" data types, bitstreams or file formats. Based on the zserio +" language it is possible to automatically generate encoders and +" decoders for a given schema in various target languages +" (e.g. Java, C++, Python). +" +" Zserio is an evolution of the DataScript language. +" +" For more information, see: +" - http://zserio.org/ +" - https://github.com/ndsev/zserio + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:keepcpo= &cpo +set cpo&vim + +syn case match + +syn keyword zserioPackage import package zserio_compatibility_version +syn keyword zserioType bit bool string +syn keyword zserioType int int8 int16 int32 int64 +syn keyword zserioType uint8 uint16 uint32 uint64 +syn keyword zserioType float16 float32 float64 +syn keyword zserioType varint varint16 varint32 varint64 +syn keyword zserioType varuint varsize varuint16 varuint32 varuint64 +syn keyword zserioAlign align +syn keyword zserioLabel case default +syn keyword zserioConditional if condition +syn keyword zserioBoolean true false +syn keyword zserioCompound struct union choice on enum bitmask subtype +syn keyword zserioKeyword function return +syn keyword zserioOperator lengthof valueof instanceof numbits isset +syn keyword zserioRpc service pubsub topic publish subscribe +syn keyword zserioRule rule_group rule +syn keyword zserioStorageClass const implicit packed instantiate +syn keyword zserioTodo contained TODO FIXME XXX +syn keyword zserioSql sql sql_table sql_database sql_virtual sql_without_rowid +syn keyword zserioSql explicit using + +" zserioCommentGroup allows adding matches for special things in comments. +syn cluster zserioCommentGroup contains=zserioTodo + +syn match zserioOffset display "^\s*[a-zA-Z_:\.][a-zA-Z0-9_:\.]*\s*:" + +syn match zserioNumber display "\<\d\+\>" +syn match zserioNumberHex display "\<0[xX]\x\+\>" +syn match zserioNumberBin display "\<[01]\+[bB]\>" contains=zserioBinaryB +syn match zserioBinaryB display contained "[bB]\>" +syn match zserioOctal display "\<0\o\+\>" contains=zserioOctalZero +syn match zserioOctalZero display contained "\<0" + +syn match zserioOctalError display "\<0\o*[89]\d*\>" + +syn match zserioCommentError display "\*/" +syn match zserioCommentStartError display "/\*"me=e-1 contained + +syn region zserioCommentL + \ start="//" skip="\\$" end="$" keepend + \ contains=@zserioCommentGroup,@Spell +syn region zserioComment + \ matchgroup=zserioCommentStart start="/\*" end="\*/" + \ contains=@zserioCommentGroup,zserioCommentStartError,@Spell extend + +syn region zserioString + \ start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell + +syn sync ccomment zserioComment + +" Define the default highlighting. +hi def link zserioType Type +hi def link zserioEndian StorageClass +hi def link zserioStorageClass StorageClass +hi def link zserioAlign Label +hi def link zserioLabel Label +hi def link zserioOffset Label +hi def link zserioSql PreProc +hi def link zserioCompound Structure +hi def link zserioConditional Conditional +hi def link zserioBoolean Boolean +hi def link zserioKeyword Statement +hi def link zserioRpc Keyword +hi def link zserioRule Keyword +hi def link zserioString String +hi def link zserioNumber Number +hi def link zserioNumberBin Number +hi def link zserioBinaryB Special +hi def link zserioOctal Number +hi def link zserioOctalZero Special +hi def link zserioOctalError Error +hi def link zserioNumberHex Number +hi def link zserioTodo Todo +hi def link zserioOperator Operator +hi def link zserioPackage Include +hi def link zserioCommentError Error +hi def link zserioCommentStartError Error +hi def link zserioCommentStart zserioComment +hi def link zserioCommentL zserioComment +hi def link zserioComment Comment + +let b:current_syntax = "zserio" + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/.config/vim/syntax/zsh.vim b/.config/vim/syntax/zsh.vim new file mode 100644 index 0000000..04b39ae --- /dev/null +++ b/.config/vim/syntax/zsh.vim @@ -0,0 +1,362 @@ +" Vim syntax file +" Language: Zsh shell script +" Maintainer: Christian Brabandt +" Previous Maintainer: Nikolai Weibull +" Latest Revision: 2024 Jan 04 +" License: Vim (see :h license) +" Repository: https://github.com/chrisbra/vim-zsh + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +function! s:ContainedGroup() + " needs 7.4.2008 for execute() function + let result='TOP' + " vim-pandoc syntax defines the @langname cluster for embedded syntax languages + " However, if no syntax is defined yet, `syn list @zsh` will return + " "No syntax items defined", so make sure the result is actually a valid syn cluster + for cluster in ['markdownHighlight_zsh', 'zsh'] + try + " markdown syntax defines embedded clusters as @markdownhighlight_, + " pandoc just uses @, so check both for both clusters + let a=split(execute('syn list @'. cluster), "\n") + if len(a) == 2 && a[0] =~# '^---' && a[1] =~? cluster + return '@'. cluster + endif + catch /E392/ + " ignore + endtry + endfor + return result +endfunction + +let s:contained=s:ContainedGroup() + +syn iskeyword @,48-57,_,192-255,#,- +if get(g:, 'zsh_fold_enable', 0) + setlocal foldmethod=syntax +endif + +syn match zshQuoted '\\.' +syn match zshPOSIXQuoted '\\[xX][0-9a-fA-F]\{1,2}' +syn match zshPOSIXQuoted '\\[0-7]\{1,3}' +syn match zshPOSIXQuoted '\\u[0-9a-fA-F]\{1,4}' +syn match zshPOSIXQuoted '\\U[1-9a-fA-F]\{1,8}' + +syn region zshString matchgroup=zshStringDelimiter start=+"+ end=+"+ + \ contains=@Spell,zshQuoted,@zshDerefs,@zshSubstQuoted fold +syn region zshString matchgroup=zshStringDelimiter start=+'+ end=+'+ fold + \ contains=@Spell +syn region zshPOSIXString matchgroup=zshStringDelimiter start=+\$'+ + \ skip=+\\[\\']+ end=+'+ contains=zshPOSIXQuoted,zshQuoted +syn match zshJobSpec '%\(\d\+\|?\=\w\+\|[%+-]\)' + +syn match zshNumber '[+-]\=\<\d\+\>' +syn match zshNumber '[+-]\=\<0x\x\+\>' +syn match zshNumber '[+-]\=\<0\o\+\>' +syn match zshNumber '[+-]\=\d\+#[-+]\=\w\+\>' +syn match zshNumber '[+-]\=\d\+\.\d\+\>' + +syn keyword zshPrecommand noglob nocorrect exec command builtin - time + +syn keyword zshDelimiter do done end + +syn keyword zshConditional if then elif else fi esac select + +syn keyword zshCase case nextgroup=zshCaseWord skipwhite +syn match zshCaseWord /\S\+/ nextgroup=zshCaseIn skipwhite contained transparent +syn keyword zshCaseIn in nextgroup=zshComment,zshCasePattern skipwhite skipnl contained +syn match zshCasePattern /\S[^)]*)/ contained + +syn keyword zshRepeat while until repeat + +syn keyword zshRepeat for foreach nextgroup=zshVariable skipwhite + +syn keyword zshException always + +syn keyword zshKeyword function nextgroup=zshKSHFunction skipwhite + +syn match zshKSHFunction contained '\w\S\+' +syn match zshFunction '^\s*\k\+\ze\s*()' + +syn match zshOperator '||\|&&\|;\|&!\=' + + " <<<, <, <>, and variants. +syn match zshRedir '\d\=\(<<<\|<&\s*[0-9p-]\=\|<>\?\)' + " >, >>, and variants. +syn match zshRedir '\d\=\(>&\s*[0-9p-]\=\|&>>\?\|>>\?&\?\)[|!]\=' + " | and |&, but only if it's not preceded or + " followed by a | to avoid matching ||. +syn match zshRedir '|\@1' + +syn match zshLongDeref '\$\%(ARGC\|argv\|status\|pipestatus\|CPUTYPE\|EGID\|EUID\|ERRNO\|GID\|HOST\|LINENO\|LOGNAME\)' +syn match zshLongDeref '\$\%(MACHTYPE\|OLDPWD OPTARG\|OPTIND\|OSTYPE\|PPID\|PWD\|RANDOM\|SECONDS\|SHLVL\|signals\)' +syn match zshLongDeref '\$\%(TRY_BLOCK_ERROR\|TTY\|TTYIDLE\|UID\|USERNAME\|VENDOR\|ZSH_NAME\|ZSH_VERSION\|REPLY\|reply\|TERM\)' + +syn match zshDollarVar '\$\h\w*' +syn match zshDeref '\$[=^~]*[#+]*\h\w*\>' + +syn match zshCommands '\%(^\|\s\)[.:]\ze\s' +syn keyword zshCommands alias autoload bg bindkey break bye cap cd + \ chdir clone comparguments compcall compctl + \ compdescribe compfiles compgroups compquote + \ comptags comptry compvalues continue dirs + \ disable disown echo echotc echoti emulate + \ enable eval exec exit export false fc fg + \ functions getcap getln getopts hash history + \ jobs kill let limit log logout popd print + \ printf prompt pushd pushln pwd r read + \ rehash return sched set setcap shift + \ source stat suspend test times trap true + \ ttyctl type ulimit umask unalias unfunction + \ unhash unlimit unset vared wait + \ whence where which zcompile zformat zftp zle + \ zmodload zparseopts zprof zpty zrecompile + \ zregexparse zsocket zstyle ztcp + +" Options, generated by from the zsh source with the make-options.zsh script. +syn case ignore +syn match zshOptStart + \ /\v^\s*%(%(un)?setopt|set\s+[-+]o)/ + \ nextgroup=zshOption skipwhite +syn keyword zshOption nextgroup=zshOption,zshComment skipwhite contained + \ auto_cd no_auto_cd autocd noautocd auto_pushd no_auto_pushd autopushd noautopushd cdable_vars + \ no_cdable_vars cdablevars nocdablevars cd_silent no_cd_silent cdsilent nocdsilent chase_dots + \ no_chase_dots chasedots nochasedots chase_links no_chase_links chaselinks nochaselinks posix_cd + \ posixcd no_posix_cd noposixcd pushd_ignore_dups no_pushd_ignore_dups pushdignoredups + \ nopushdignoredups pushd_minus no_pushd_minus pushdminus nopushdminus pushd_silent no_pushd_silent + \ pushdsilent nopushdsilent pushd_to_home no_pushd_to_home pushdtohome nopushdtohome + \ always_last_prompt no_always_last_prompt alwayslastprompt noalwayslastprompt always_to_end + \ no_always_to_end alwaystoend noalwaystoend auto_list no_auto_list autolist noautolist auto_menu + \ no_auto_menu automenu noautomenu auto_name_dirs no_auto_name_dirs autonamedirs noautonamedirs + \ auto_param_keys no_auto_param_keys autoparamkeys noautoparamkeys auto_param_slash + \ no_auto_param_slash autoparamslash noautoparamslash auto_remove_slash no_auto_remove_slash + \ autoremoveslash noautoremoveslash bash_auto_list no_bash_auto_list bashautolist nobashautolist + \ complete_aliases no_complete_aliases completealiases nocompletealiases complete_in_word + \ no_complete_in_word completeinword nocompleteinword glob_complete no_glob_complete globcomplete + \ noglobcomplete hash_list_all no_hash_list_all hashlistall nohashlistall list_ambiguous + \ no_list_ambiguous listambiguous nolistambiguous list_beep no_list_beep listbeep nolistbeep + \ list_packed no_list_packed listpacked nolistpacked list_rows_first no_list_rows_first listrowsfirst + \ nolistrowsfirst list_types no_list_types listtypes nolisttypes menu_complete no_menu_complete + \ menucomplete nomenucomplete rec_exact no_rec_exact recexact norecexact bad_pattern no_bad_pattern + \ badpattern nobadpattern bare_glob_qual no_bare_glob_qual bareglobqual nobareglobqual brace_ccl + \ no_brace_ccl braceccl nobraceccl case_glob no_case_glob caseglob nocaseglob case_match + \ no_case_match casematch nocasematch case_paths no_case_paths casepaths nocasepaths csh_null_glob + \ no_csh_null_glob cshnullglob nocshnullglob equals no_equals noequals extended_glob no_extended_glob + \ extendedglob noextendedglob force_float no_force_float forcefloat noforcefloat glob no_glob noglob + \ glob_assign no_glob_assign globassign noglobassign glob_dots no_glob_dots globdots noglobdots + \ glob_star_short no_glob_star_short globstarshort noglobstarshort glob_subst no_glob_subst globsubst + \ noglobsubst hist_subst_pattern no_hist_subst_pattern histsubstpattern nohistsubstpattern + \ ignore_braces no_ignore_braces ignorebraces noignorebraces ignore_close_braces + \ no_ignore_close_braces ignoreclosebraces noignoreclosebraces ksh_glob no_ksh_glob kshglob nokshglob + \ magic_equal_subst no_magic_equal_subst magicequalsubst nomagicequalsubst mark_dirs no_mark_dirs + \ markdirs nomarkdirs multibyte no_multibyte nomultibyte nomatch no_nomatch nonomatch null_glob + \ no_null_glob nullglob nonullglob numeric_glob_sort no_numeric_glob_sort numericglobsort + \ nonumericglobsort rc_expand_param no_rc_expand_param rcexpandparam norcexpandparam rematch_pcre + \ no_rematch_pcre rematchpcre norematchpcre sh_glob no_sh_glob shglob noshglob unset no_unset nounset + \ warn_create_global no_warn_create_global warncreateglobal nowarncreateglobal warn_nested_var + \ no_warn_nested_var warnnestedvar no_warnnestedvar append_history no_append_history appendhistory + \ noappendhistory bang_hist no_bang_hist banghist nobanghist extended_history no_extended_history + \ extendedhistory noextendedhistory hist_allow_clobber no_hist_allow_clobber histallowclobber + \ nohistallowclobber hist_beep no_hist_beep histbeep nohistbeep hist_expire_dups_first + \ no_hist_expire_dups_first histexpiredupsfirst nohistexpiredupsfirst hist_fcntl_lock + \ no_hist_fcntl_lock histfcntllock nohistfcntllock hist_find_no_dups no_hist_find_no_dups + \ histfindnodups nohistfindnodups hist_ignore_all_dups no_hist_ignore_all_dups histignorealldups + \ nohistignorealldups hist_ignore_dups no_hist_ignore_dups histignoredups nohistignoredups + \ hist_ignore_space no_hist_ignore_space histignorespace nohistignorespace hist_lex_words + \ no_hist_lex_words histlexwords nohistlexwords hist_no_functions no_hist_no_functions + \ histnofunctions nohistnofunctions hist_no_store no_hist_no_store histnostore nohistnostore + \ hist_reduce_blanks no_hist_reduce_blanks histreduceblanks nohistreduceblanks hist_save_by_copy + \ no_hist_save_by_copy histsavebycopy nohistsavebycopy hist_save_no_dups no_hist_save_no_dups + \ histsavenodups nohistsavenodups hist_verify no_hist_verify histverify nohistverify + \ inc_append_history no_inc_append_history incappendhistory noincappendhistory + \ inc_append_history_time no_inc_append_history_time incappendhistorytime noincappendhistorytime + \ share_history no_share_history sharehistory nosharehistory all_export no_all_export allexport + \ noallexport global_export no_global_export globalexport noglobalexport global_rcs no_global_rcs + \ globalrcs noglobalrcs rcs no_rcs norcs aliases no_aliases noaliases clobber no_clobber noclobber + \ clobber_empty no_clobber_empty clobberempty noclobberempty correct no_correct nocorrect correct_all + \ no_correct_all correctall nocorrectall dvorak no_dvorak nodvorak flow_control no_flow_control + \ flowcontrol noflowcontrol ignore_eof no_ignore_eof ignoreeof noignoreeof interactive_comments + \ no_interactive_comments interactivecomments nointeractivecomments hash_cmds no_hash_cmds hashcmds + \ nohashcmds hash_dirs no_hash_dirs hashdirs nohashdirs hash_executables_only + \ no_hash_executables_only hashexecutablesonly nohashexecutablesonly mail_warning no_mail_warning + \ mailwarning nomailwarning path_dirs no_path_dirs pathdirs nopathdirs path_script no_path_script + \ pathscript nopathscript print_eight_bit no_print_eight_bit printeightbit noprinteightbit + \ print_exit_value no_print_exit_value printexitvalue noprintexitvalue rc_quotes no_rc_quotes + \ rcquotes norcquotes rm_star_silent no_rm_star_silent rmstarsilent normstarsilent rm_star_wait + \ no_rm_star_wait rmstarwait normstarwait short_loops no_short_loops shortloops noshortloops + \ short_repeat no_short_repeat shortrepeat noshortrepeat sun_keyboard_hack no_sun_keyboard_hack + \ sunkeyboardhack nosunkeyboardhack auto_continue no_auto_continue autocontinue noautocontinue + \ auto_resume no_auto_resume autoresume noautoresume bg_nice no_bg_nice bgnice nobgnice check_jobs + \ no_check_jobs checkjobs nocheckjobs check_running_jobs no_check_running_jobs checkrunningjobs + \ nocheckrunningjobs hup no_hup nohup long_list_jobs no_long_list_jobs longlistjobs nolonglistjobs + \ monitor no_monitor nomonitor notify no_notify nonotify posix_jobs posixjobs no_posix_jobs + \ noposixjobs prompt_bang no_prompt_bang promptbang nopromptbang prompt_cr no_prompt_cr promptcr + \ nopromptcr prompt_sp no_prompt_sp promptsp nopromptsp prompt_percent no_prompt_percent + \ promptpercent nopromptpercent prompt_subst no_prompt_subst promptsubst nopromptsubst + \ transient_rprompt no_transient_rprompt transientrprompt notransientrprompt alias_func_def + \ no_alias_func_def aliasfuncdef noaliasfuncdef c_bases no_c_bases cbases nocbases c_precedences + \ no_c_precedences cprecedences nocprecedences debug_before_cmd no_debug_before_cmd debugbeforecmd + \ nodebugbeforecmd err_exit no_err_exit errexit noerrexit err_return no_err_return errreturn + \ noerrreturn eval_lineno no_eval_lineno evallineno noevallineno exec no_exec noexec function_argzero + \ no_function_argzero functionargzero nofunctionargzero local_loops no_local_loops localloops + \ nolocalloops local_options no_local_options localoptions nolocaloptions local_patterns + \ no_local_patterns localpatterns nolocalpatterns local_traps no_local_traps localtraps nolocaltraps + \ multi_func_def no_multi_func_def multifuncdef nomultifuncdef multios no_multios nomultios + \ octal_zeroes no_octal_zeroes octalzeroes nooctalzeroes pipe_fail no_pipe_fail pipefail nopipefail + \ source_trace no_source_trace sourcetrace nosourcetrace typeset_silent no_typeset_silent + \ typesetsilent notypesetsilent typeset_to_unset no_typeset_to_unset typesettounset notypesettounset + \ verbose no_verbose noverbose xtrace no_xtrace noxtrace append_create no_append_create appendcreate + \ noappendcreate bash_rematch no_bash_rematch bashrematch nobashrematch bsd_echo no_bsd_echo bsdecho + \ nobsdecho continue_on_error no_continue_on_error continueonerror nocontinueonerror + \ csh_junkie_history no_csh_junkie_history cshjunkiehistory nocshjunkiehistory csh_junkie_loops + \ no_csh_junkie_loops cshjunkieloops nocshjunkieloops csh_junkie_quotes no_csh_junkie_quotes + \ cshjunkiequotes nocshjunkiequotes csh_nullcmd no_csh_nullcmd cshnullcmd nocshnullcmd ksh_arrays + \ no_ksh_arrays ksharrays noksharrays ksh_autoload no_ksh_autoload kshautoload nokshautoload + \ ksh_option_print no_ksh_option_print kshoptionprint nokshoptionprint ksh_typeset no_ksh_typeset + \ kshtypeset nokshtypeset ksh_zero_subscript no_ksh_zero_subscript kshzerosubscript + \ nokshzerosubscript posix_aliases no_posix_aliases posixaliases noposixaliases posix_argzero + \ no_posix_argzero posixargzero noposixargzero posix_builtins no_posix_builtins posixbuiltins + \ noposixbuiltins posix_identifiers no_posix_identifiers posixidentifiers noposixidentifiers + \ posix_strings no_posix_strings posixstrings noposixstrings posix_traps no_posix_traps posixtraps + \ noposixtraps sh_file_expansion no_sh_file_expansion shfileexpansion noshfileexpansion sh_nullcmd + \ no_sh_nullcmd shnullcmd noshnullcmd sh_option_letters no_sh_option_letters shoptionletters + \ noshoptionletters sh_word_split no_sh_word_split shwordsplit noshwordsplit traps_async + \ no_traps_async trapsasync notrapsasync interactive no_interactive nointeractive login no_login + \ nologin privileged no_privileged noprivileged restricted no_restricted norestricted shin_stdin + \ no_shin_stdin shinstdin noshinstdin single_command no_single_command singlecommand nosinglecommand + \ beep no_beep nobeep combining_chars no_combining_chars combiningchars nocombiningchars emacs + \ no_emacs noemacs overstrike no_overstrike nooverstrike single_line_zle no_single_line_zle + \ singlelinezle nosinglelinezle vi no_vi novi zle no_zle nozle brace_expand no_brace_expand + \ braceexpand nobraceexpand dot_glob no_dot_glob dotglob nodotglob hash_all no_hash_all hashall + \ nohashall hist_append no_hist_append histappend nohistappend hist_expand no_hist_expand histexpand + \ nohistexpand log no_log nolog mail_warn no_mail_warn mailwarn nomailwarn one_cmd no_one_cmd onecmd + \ noonecmd physical no_physical nophysical prompt_vars no_prompt_vars promptvars nopromptvars stdin + \ no_stdin nostdin track_all no_track_all trackall notrackall +syn case match + +syn keyword zshTypes float integer local typeset declare private readonly + +" XXX: this may be too much +" syn match zshSwitches '\s\zs--\=[a-zA-Z0-9-]\+' + +" TODO: $[...] is the same as $((...)), so add that as well. +syn cluster zshSubst contains=zshSubst,zshOldSubst,zshMathSubst +syn cluster zshSubstQuoted contains=zshSubstQuoted,zshOldSubst,zshMathSubst +exe 'syn region zshSubst matchgroup=zshSubstDelim transparent start=/\$(/ skip=/\\)/ end=/)/ contains='.s:contained. ' fold' +exe 'syn region zshSubstQuoted matchgroup=zshSubstDelim transparent start=/\$(/ skip=/\\)/ end=/)/ contains='.s:contained. ' fold' +syn region zshSubstQuoted matchgroup=zshSubstDelim start='\${' skip='\\}' end='}' contains=@zshSubst,zshBrackets,zshQuoted fold +syn region zshParentheses transparent start='(' skip='\\)' end=')' fold +syn region zshGlob start='(#' end=')' +syn region zshMathSubst matchgroup=zshSubstDelim transparent + \ start='\%(\$\?\)[<=>]\@' + +syn keyword zshTodo contained TODO FIXME XXX NOTE + +syn region zshComment oneline start='\%(^\|\s\+\)#' end='$' + \ contains=zshTodo,@Spell fold + +syn region zshComment start='^\s*#' end='^\%(\s*#\)\@!' + \ contains=zshTodo,@Spell fold + +syn match zshPreProc '^\%1l#\%(!\|compdef\|autoload\).*$' + +hi def link zshTodo Todo +hi def link zshComment Comment +hi def link zshPreProc PreProc +hi def link zshQuoted SpecialChar +hi def link zshPOSIXQuoted SpecialChar +hi def link zshString String +hi def link zshStringDelimiter zshString +hi def link zshPOSIXString zshString +hi def link zshJobSpec Special +hi def link zshPrecommand Special +hi def link zshDelimiter Keyword +hi def link zshConditional Conditional +hi def link zshCase zshConditional +hi def link zshCaseIn zshCase +hi def link zshException Exception +hi def link zshRepeat Repeat +hi def link zshKeyword Keyword +hi def link zshFunction None +hi def link zshKSHFunction zshFunction +hi def link zshHereDoc String +hi def link zshOperator None +hi def link zshRedir Operator +hi def link zshVariable None +hi def link zshVariableDef zshVariable +hi def link zshDereferencing PreProc +hi def link zshShortDeref zshDereferencing +hi def link zshLongDeref zshDereferencing +hi def link zshDeref zshDereferencing +hi def link zshDollarVar zshDereferencing +hi def link zshCommands Keyword +hi def link zshOptStart Keyword +hi def link zshOption Constant +hi def link zshTypes Type +hi def link zshSwitches Special +hi def link zshNumber Number +hi def link zshSubst PreProc +hi def link zshSubstQuoted zshSubst +hi def link zshMathSubst zshSubst +hi def link zshOldSubst zshSubst +hi def link zshSubstDelim zshSubst +hi def link zshGlob zshSubst + +let b:current_syntax = "zsh" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/view/=+git=+vimwiki=+index.wiki= b/.config/vim/view/=+git=+vimwiki=+index.wiki= new file mode 100644 index 0000000..050ab7f --- /dev/null +++ b/.config/vim/view/=+git=+vimwiki=+index.wiki= @@ -0,0 +1,20 @@ +let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 +argglobal +setlocal fdm=expr +setlocal fde=VimwikiFoldLevel(v:lnum) +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=2 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +let s:l = 1 - ((0 * winheight(0) + 17) / 35) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 1 +normal! 0 +let &g:so = s:so_save | let &g:siso = s:siso_save +nohlsearch +doautoall SessionLoadPost +" vim: set ft=vim : diff --git a/.config/vim/view/~=+vimwiki=+Blossom.wiki= b/.config/vim/view/~=+vimwiki=+Blossom.wiki= new file mode 100644 index 0000000..580ffa2 --- /dev/null +++ b/.config/vim/view/~=+vimwiki=+Blossom.wiki= @@ -0,0 +1,19 @@ +let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 +argglobal +setlocal fdm=expr +setlocal fde=VimwikiFoldLevel(v:lnum) +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=2 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +let s:l = 1 - ((0 * winheight(0) + 17) / 35) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 1 +normal! 06| +let &g:so = s:so_save | let &g:siso = s:siso_save +doautoall SessionLoadPost +" vim: set ft=vim : diff --git a/.config/vim/view/~=+vimwiki=+diary=+2025-11-23.wiki= b/.config/vim/view/~=+vimwiki=+diary=+2025-11-23.wiki= new file mode 100644 index 0000000..29e246a --- /dev/null +++ b/.config/vim/view/~=+vimwiki=+diary=+2025-11-23.wiki= @@ -0,0 +1,20 @@ +let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 +argglobal +setlocal fdm=expr +setlocal fde=VimwikiFoldLevel(v:lnum) +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=2 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +let s:l = 6 - ((5 * winheight(0) + 17) / 35) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 6 +normal! 061| +let &g:so = s:so_save | let &g:siso = s:siso_save +nohlsearch +doautoall SessionLoadPost +" vim: set ft=vim : diff --git a/.config/vim/view/~=+vimwiki=+diary=+2025-11-24.wiki= b/.config/vim/view/~=+vimwiki=+diary=+2025-11-24.wiki= new file mode 100644 index 0000000..c125556 --- /dev/null +++ b/.config/vim/view/~=+vimwiki=+diary=+2025-11-24.wiki= @@ -0,0 +1,24 @@ +let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 +argglobal +setlocal fdm=expr +setlocal fde=VimwikiFoldLevel(v:lnum) +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=2 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +3 +sil! normal! zo +6 +sil! normal! zc +let s:l = 37 - ((36 * winheight(0) + 17) / 35) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 37 +normal! 027| +let &g:so = s:so_save | let &g:siso = s:siso_save +nohlsearch +doautoall SessionLoadPost +" vim: set ft=vim : diff --git a/.config/vim/view/~=+vimwiki=+diary=+2025-12-03.wiki= b/.config/vim/view/~=+vimwiki=+diary=+2025-12-03.wiki= new file mode 100644 index 0000000..2e984a8 --- /dev/null +++ b/.config/vim/view/~=+vimwiki=+diary=+2025-12-03.wiki= @@ -0,0 +1,19 @@ +let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 +argglobal +setlocal fdm=expr +setlocal fde=VimwikiFoldLevel(v:lnum) +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=2 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +let s:l = 6 - ((5 * winheight(0) + 17) / 35) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 6 +normal! 0695| +let &g:so = s:so_save | let &g:siso = s:siso_save +doautoall SessionLoadPost +" vim: set ft=vim : diff --git a/.config/vim/view/~=+vimwiki=+diary=+2025-12-12.wiki= b/.config/vim/view/~=+vimwiki=+diary=+2025-12-12.wiki= new file mode 100644 index 0000000..b0cffa6 --- /dev/null +++ b/.config/vim/view/~=+vimwiki=+diary=+2025-12-12.wiki= @@ -0,0 +1,22 @@ +let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 +argglobal +setlocal fdm=expr +setlocal fde=VimwikiFoldLevel(v:lnum) +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=2 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +3 +sil! normal! zo +let s:l = 26 - ((25 * winheight(0) + 17) / 35) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 26 +normal! 0112| +let &g:so = s:so_save | let &g:siso = s:siso_save +nohlsearch +doautoall SessionLoadPost +" vim: set ft=vim : diff --git a/.config/vim/view/~=+vimwiki=+diary=+2026-01-01.wiki= b/.config/vim/view/~=+vimwiki=+diary=+2026-01-01.wiki= new file mode 100644 index 0000000..fb21040 --- /dev/null +++ b/.config/vim/view/~=+vimwiki=+diary=+2026-01-01.wiki= @@ -0,0 +1,21 @@ +let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 +argglobal +setlocal fdm=expr +setlocal fde=VimwikiFoldLevel(v:lnum) +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=2 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +6 +sil! normal! zo +let s:l = 13 - ((12 * winheight(0) + 17) / 35) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 13 +normal! 07| +let &g:so = s:so_save | let &g:siso = s:siso_save +doautoall SessionLoadPost +" vim: set ft=vim : diff --git a/.config/vim/view/~=+vimwiki=+diary=+Blossom.wiki= b/.config/vim/view/~=+vimwiki=+diary=+Blossom.wiki= new file mode 100644 index 0000000..061b459 --- /dev/null +++ b/.config/vim/view/~=+vimwiki=+diary=+Blossom.wiki= @@ -0,0 +1,19 @@ +let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 +argglobal +setlocal fdm=expr +setlocal fde=VimwikiFoldLevel(v:lnum) +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=2 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +let s:l = 1 - ((0 * winheight(0) + 17) / 35) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 1 +normal! 0 +let &g:so = s:so_save | let &g:siso = s:siso_save +doautoall SessionLoadPost +" vim: set ft=vim : diff --git a/.config/vim/view/~=+vimwiki=+index.wiki= b/.config/vim/view/~=+vimwiki=+index.wiki= new file mode 100644 index 0000000..8b16fbd --- /dev/null +++ b/.config/vim/view/~=+vimwiki=+index.wiki= @@ -0,0 +1,28 @@ +let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 +argglobal +setlocal fdm=expr +setlocal fde=VimwikiFoldLevel(v:lnum) +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=3 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +3 +sil! normal! zo +4 +sil! normal! zo +15 +sil! normal! zo +22 +sil! normal! zc +let s:l = 17 - ((15 * winheight(0) + 17) / 35) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 17 +normal! 05| +let &g:so = s:so_save | let &g:siso = s:siso_save +nohlsearch +doautoall SessionLoadPost +" vim: set ft=vim : diff --git a/.config/vim/view/~=+vimwiki=+linux.wiki= b/.config/vim/view/~=+vimwiki=+linux.wiki= new file mode 100644 index 0000000..061b459 --- /dev/null +++ b/.config/vim/view/~=+vimwiki=+linux.wiki= @@ -0,0 +1,19 @@ +let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 +argglobal +setlocal fdm=expr +setlocal fde=VimwikiFoldLevel(v:lnum) +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=2 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +let s:l = 1 - ((0 * winheight(0) + 17) / 35) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 1 +normal! 0 +let &g:so = s:so_save | let &g:siso = s:siso_save +doautoall SessionLoadPost +" vim: set ft=vim : diff --git a/.config/vim/view/~=+vimwiki=+test.wiki= b/.config/vim/view/~=+vimwiki=+test.wiki= new file mode 100644 index 0000000..e98ad0e --- /dev/null +++ b/.config/vim/view/~=+vimwiki=+test.wiki= @@ -0,0 +1,19 @@ +let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 +argglobal +setlocal fdm=expr +setlocal fde=VimwikiFoldLevel(v:lnum) +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=3 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +let s:l = 1 - ((0 * winheight(0) + 17) / 35) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 1 +normal! 0 +let &g:so = s:so_save | let &g:siso = s:siso_save +doautoall SessionLoadPost +" vim: set ft=vim : diff --git a/.config/vim/view/~=+vimwiki=+vimwiki.wiki= b/.config/vim/view/~=+vimwiki=+vimwiki.wiki= new file mode 100644 index 0000000..ce33903 --- /dev/null +++ b/.config/vim/view/~=+vimwiki=+vimwiki.wiki= @@ -0,0 +1,19 @@ +let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 +argglobal +setlocal fdm=expr +setlocal fde=VimwikiFoldLevel(v:lnum) +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=2 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +let s:l = 2 - ((1 * winheight(0) + 17) / 35) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 2 +normal! 03| +let &g:so = s:so_save | let &g:siso = s:siso_save +doautoall SessionLoadPost +" vim: set ft=vim : diff --git a/.config/vim/view/~=+vimwiki=+weeby-neety.wiki= b/.config/vim/view/~=+vimwiki=+weeby-neety.wiki= new file mode 100644 index 0000000..050ab7f --- /dev/null +++ b/.config/vim/view/~=+vimwiki=+weeby-neety.wiki= @@ -0,0 +1,20 @@ +let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 +argglobal +setlocal fdm=expr +setlocal fde=VimwikiFoldLevel(v:lnum) +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=2 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +let s:l = 1 - ((0 * winheight(0) + 17) / 35) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 1 +normal! 0 +let &g:so = s:so_save | let &g:siso = s:siso_save +nohlsearch +doautoall SessionLoadPost +" vim: set ft=vim : diff --git a/.config/vim/vimrc b/.config/vim/vimrc new file mode 100644 index 0000000..c0cd4c0 --- /dev/null +++ b/.config/vim/vimrc @@ -0,0 +1,128 @@ +"########################## +"## Configuración básica ## +"########################## + +colorscheme ale +set nocompatible +syntax enable +filetype plugin on +let mapleader ="," +set encoding=utf-8 +set expandtab +set softtabstop=4 +set tabstop=4 +set shiftwidth=4 +set number relativenumber +set wildmode=longest,list,full +set omnifunc=syntaxcomplete#Complete +autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o +" Evitar que vim cargue configuración por defecto y que respete XDG +let skip_defaults_vim=1 +silent !mkdir $XDG_CACHE_HOME/vim/{swapfiles,backup} -p > /dev/null 2>&1 +set directory=$XDG_CACHE_HOME/vim/swapfiles// +set backupdir=$XDG_CACHE_HOME/vim/backup// +set viminfo+=n$XDG_CACHE_HOME/vim/viminfo +set packpath=$XDG_CONFIG_HOME/vim/ +set runtimepath^=$XDG_CONFIG_HOME/vim +set runtimepath+=$XDG_CONFIG_HOME/vim/after, + \$XDG_CONFIG_HOME/vim/ftplugin, + \$XDG_CONFIG_HOME/vim/spell/ +let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" +" Revisión de ortografía en español apagada en general para ser activada por tipo de archivo en ftplugin +set spellfile=$XDG_CONFIG_HOME/vim/spell/es.utf-8.add +function! ToggleSpellCheck() + set spell! spelllang=es + if &spell + echo "Revisión ortográfica ACTIVADA" + else + echo "Revisión ortográfica DESACTIVADA" + endif +endfunction +nnoremap :call ToggleSpellCheck() +" Cambiar orientaciones de split a cosas mas razonables +set splitbelow splitright +" Cambiar cursor en modo insertar +let &t_SI = "\e[6 q" +let &t_EI = "\e[2 q" +" Remapear teclas +map h +map j +map k +map l +map q :w/tmp/`tiempo -t`-%:q! +map Q :q! +map :w +map W :wq +map H :foldclose +map L :foldopen +" Autocompletar rutas estilo kakoune -> ¶ se escribe con +inoremap ¶ + +"########################## +"## Macros ## +"########################## + +"Dado el hecho de que he cambiado lo que hace «q», los macros ya no se pueden grabar, por tanto hay que hacrelos de forma manual con el comando :let por ejemplo: digamos que guardo un macro en el «1» antes era «q»«1»serieDeAccionesAGrabar«q» y para correrlo era @1. pues ahora es escribir en la linea de comandos :let @1="serieDeAccionesAGrabar" y de igual manera se puede correr haciendo uso de @1. Los puntos IMPORTANTES que hay que tomar a consideración es que para que funcione se tiene que hacer uso de \e dentro de Doble Comilla «"», ¿por qué? no tengo ni idea pinche vim, pero si pongo o , al igual que en :map, los considera como «<»«E»«s»«c»«>» y «<»«C»«R»«>» respectivamente. +" \e matches +" \t matches +" \r matches +" \b matches + + +"########################## +"## Plugins ## +"########################## + +" Instalar con Pathogen [una vez instalado el plugin en ~/.vim/bundle] correr dentro de vim :Helptags y Pathogen buscará cada carpeta localizada en bundle +execute pathogen#infect() + +" --------VimWiki--------- +let g:vimwiki_list = [{'path':'/git/vimwiki', 'auto_diary_index': 1}] +let g:vimwiki_global_ext=0 +let g:vimwiki_folding='expr' +function! VimwikiFindAllIncompleteTasks() + VimwikiSearch /- \[ \]/ + lopen +endfunction +nmap wa :call VimwikiFindAllIncompleteTasks() + +" ---------Netrw---------- +let g:netrw_banner = 0 +let g:netrw_liststyle = 3 +let g:netrw_browse_split = 4 +let g:netrw_winsize = 20 +map , :Lex + +let g:vim_asciidoc_initial_foldlevel=2 + +"########################## +"## Quickbits ## +"########################## + +" Saltar a la siguiente marca con doble espacio POR ALGUNA RAZÓN C-@ == CTRL+Space +noremap /<++>ca< +inoremap /<++>ca< + +" Autocerrar ([{ al ponerlos. La gente usa un plugin para eso, no puedo creerlo +inoremap ( ()<++>4hi +inoremap [ []<++>4hi +inoremap { {}<++>4hi +inoremap < <><++>4hi +inoremap " ""<++>4hi + +" Escribir un basic.html en cualquier texto +noremap h i<++>5k^/\/T>i + + +"######################## +"## HTML ## +"######################## + +" --------Normal--------- +" Escribir un basic.html +autocmd FileType html noremap h i<++>5k^/\/T>i + +" -------Insertar-------- +" Empezar a escribir en italica +autocmd FileType html inoremap ;i <++>FeT>i + diff --git a/rc b/rc new file mode 100644 index 0000000..186060b --- /dev/null +++ b/rc @@ -0,0 +1,9 @@ +# anexar a .zshrc o .bashrc + +export VIMINIT="source /home/ale/.config/vim/vimrc" +export VIMCONFIG="/home/ale/.config/vim" +export EDITOR="/bin/vim" + +alias vimrc="vim ~/.config/vim/vimrc" +alias vimwiki="vim -c VimwikiIndex" +alias diario="vim -c VimwikiMakeDiaryNote" diff --git a/vimwiki/Astrallazgo.wiki b/vimwiki/Astrallazgo.wiki new file mode 100644 index 0000000..3e5534e --- /dev/null +++ b/vimwiki/Astrallazgo.wiki @@ -0,0 +1 @@ +== Starfinder 2E == diff --git a/vimwiki/Blossom.wiki b/vimwiki/Blossom.wiki new file mode 100644 index 0000000..ba790e8 --- /dev/null +++ b/vimwiki/Blossom.wiki @@ -0,0 +1 @@ +Bombón diff --git a/vimwiki/FirstRule.wiki b/vimwiki/FirstRule.wiki new file mode 100644 index 0000000..866cc8d --- /dev/null +++ b/vimwiki/FirstRule.wiki @@ -0,0 +1,3 @@ +[[index]] + +Indispensable para encontrar lo básico de animación y físicas diff --git a/vimwiki/Hallasenderos.wiki b/vimwiki/Hallasenderos.wiki new file mode 100644 index 0000000..f94e187 --- /dev/null +++ b/vimwiki/Hallasenderos.wiki @@ -0,0 +1,4 @@ +Me aburre la fantasía medieval pero es lo que más vende, personalmente prefiero Starfinder por lo que le daría más atención a [[Astrallazgo]] que sería básicamente lo mismo porque Paizo así lo planeó + +=== 225JN === +Leer tanto puto PDF me aburre, si lo paso a markdown puedo perfectamente pasarlo a epub, audio, etc. pero es complicado. Hoy creo por fin encontré un camino a la iluminación [[inkscape]] importa PDFs y los separa en grupos, así puedo fácilmente quitar imágenes y paja; así como reorganizar la ubicación del texto. Lo malo que en sí no reconoce el texto ya que para él solo son vectores, así que hay que exportar (con al menos 300ppi de resolución) para después usar [[tesseract]] y así ya tener plaintext que posteriormente podré estilizar a .md diff --git a/vimwiki/TTRPGStats.wiki b/vimwiki/TTRPGStats.wiki new file mode 100644 index 0000000..067acf8 --- /dev/null +++ b/vimwiki/TTRPGStats.wiki @@ -0,0 +1,3 @@ +[[index]] + +2D capaz de ser reproducido desde el explorador con online para jugar remotamente diff --git a/vimwiki/Time4.wiki b/vimwiki/Time4.wiki new file mode 100644 index 0000000..3c1553a --- /dev/null +++ b/vimwiki/Time4.wiki @@ -0,0 +1,3 @@ +[[index]] + +La razón de mi vida diff --git a/vimwiki/YAZNIG.wiki b/vimwiki/YAZNIG.wiki new file mode 100644 index 0000000..ba45674 --- /dev/null +++ b/vimwiki/YAZNIG.wiki @@ -0,0 +1,3 @@ +[[index]] + +El más comercial de todos, ver la manera de adaptarlo a móvil y a todas las plataformas disponibles diff --git a/vimwiki/diary/2025-11-23.wiki b/vimwiki/diary/2025-11-23.wiki new file mode 100644 index 0000000..a419b2a --- /dev/null +++ b/vimwiki/diary/2025-11-23.wiki @@ -0,0 +1,12 @@ +225KN + += 5.0069 = +Hoy voy a cambiar. Debo dedicarme más a mis proyectos, la vida es corta y honestamente se me está escapando. Lo primero es organizar un ToDo descente, estuve pensando y es posible que IA me ayude con eso. El problema es que ollama volvió a fallar ya definitivamente lo desinstale de [[../Vanessa|Vanessa]] porque cada que actualizo se rompe entonces hasta que [[../Starfire|Starfire]] este en condiciones no voy a instalarlo nuevamente, y por lo que veo no actualizarlo para nada porque siempre se rompe (que raro). + +Pero por lo mientras voy a ver si bing me puede ayudar en esto, esa será la meta del día de hoy y como proposito nuevo debo; en primera, hacer ejercicio diario y en segunda escribir mi diario... diario. xD + +- [X] ToDo funcional + += 7.1893 = +Funcionó la integración de vimwiki con taskwarrior a través de taskwiki. El problema que traía era que vimwiki le cambiaba el `filetype` a los archivos markdown provocando los retardos que experimentaba. Al ajustar .vimrc pudé evitar ese comportamiento. De pasada y como bono pasé todos los archivos ~/.vimrc y ~/.vim a ~/.config/vim como Dios manda y funciona adecuadamente, ya copié los archivos a /git/dotAle y estan en github para su futura reimplementación. + diff --git a/vimwiki/diary/2025-11-24.wiki b/vimwiki/diary/2025-11-24.wiki new file mode 100644 index 0000000..735710c --- /dev/null +++ b/vimwiki/diary/2025-11-24.wiki @@ -0,0 +1,37 @@ +225KO + += 7.1735 = +Ya me estoy acostumbrando más a vim y al parecer creo que va a salir bien no le veo problemas, incluso encontré que TODO DONE FIXME FIXED y XXX tienen notaciones especiales y que hay maneras de modificar .vimrc para agregar más palabras clave; aunque de momento no lo siento necesario + +== Aprendí la importancia de XDG: == + XDG_CONFIG_HOME + Where user-specific configurations should be written (analogous to /etc). + Should default to $HOME/.config. + + XDG_CACHE_HOME + Where user-specific non-essential (cached) data should be written (analogous to /var/cache). + Should default to $HOME/.cache. + + XDG_DATA_HOME + Where user-specific data files should be written (analogous to /usr/share). + Should default to $HOME/.local/share. + + XDG_STATE_HOME + Where user-specific state files should be written (analogous to /var/lib). + Should default to $HOME/.local/state. + + XDG_RUNTIME_DIR + Used for non-essential, user-specific data files such as sockets, named pipes, etc. + Not required to have a default value; warnings should be issued if not set or equivalents provided. + Must be owned by the user with an access mode of 0700. + Filesystem fully featured by standards of OS. + Must be on the local filesystem. + May be subject to periodic cleanup. + Modified every 6 hours or set sticky bit if persistence is desired. + Can only exist for the duration of the user's login. + Should not store large files as it may be mounted as a tmpfs. + pam_systemd sets this to /run/user/$UID. + + += 7.3985 = +En [[../Blossom|Blossom]] pude modificar .zshrc de tal manera que `XDG_CONFIG_HOME` y otros se encuentren en /home/ale/.config etc. a pesar de estar en usuario root. Eso me ayudará a unificar dotfiles y que no importe si estoy en [[../Vanessa|Vanessa]], [[../Starfire|Starfire]], [[../Roxanne|Roxanne]] o la que sea diff --git a/vimwiki/diary/2025-12-03.wiki b/vimwiki/diary/2025-12-03.wiki new file mode 100644 index 0000000..8526439 --- /dev/null +++ b/vimwiki/diary/2025-12-03.wiki @@ -0,0 +1,6 @@ +225L3 + += 7.4092 = +Ayer rompí el sistema de la compu de mi madre, el problema fue timeshift(https://github.com/linuxmint/timeshift) que estaba desperdiciando demasiado espacio en disco y al querer eliminar los caches fue cuando lo desmadré. Al parecer, creo yo, está demasiado integrado a _mint_ por eso se puso loco cuando quise eliminarlo. Después de mucho estar probando terminé instalandole ArchBTW, específicamente Garuda con escritorio KDE básico para que le diera más uso a lo que anteriormente era Roxanne ya que al mismo tiempo le dí una PC más poderosa para ayudarla en sus renders partícularmente, además el HDD ya estaba a punto de morir y cómo ésta tenía una SSD de 960GB le cupo toda la información tranquilamente, además la instruí en la idea de hacer respaldos periódicos para evitarme más dolores en un futuro. + +Ahora Roxanne será más humilde pero creo iguamente le instalaré Garuda con el monitor 1366x768 y a Vilma la configure de tal manera que trabaje remotamente. Por otro lado estoy pensando que sí urge configurar la red para poder pasarla a mi cuarto sin preocupaciones. Estoy pensando que un switch SFT+ de mikrotik sería la opción más económica para 10G, uniendo principalmente a Nami con Starfire y aún me quedarían 2 puertos disponibles. Starfire se quedaría con la 290X mostrando los LG 4k DP y 1080XL HDMI con el cuadradito VGA y la tele igual por VGA. Me quedé con un monitor DELL de más que puedo usar para los servidores, los cuales como el cliché indica estarán en mi closet. diff --git a/vimwiki/diary/2025-12-12.wiki b/vimwiki/diary/2025-12-12.wiki new file mode 100644 index 0000000..745f2a9 --- /dev/null +++ b/vimwiki/diary/2025-12-12.wiki @@ -0,0 +1,26 @@ +225LC + += 4.2666 = +Hoy encontré la maravilla que es JPEG-XL usando la librería `libjxl` que ya viene integrada en cualquier distro, trae los programas `cjxl` y `djxl` para cifrar y descifrar .jxl respectivamente. + +usando `cjxl` para hacer una imagen lossy y una lossless a partir de un .png tuve los siguientes resultados: + +| archivo | tamaño | +| --- | --- | +| orig.png | 232.2KiB | +| lossless.jxl | 122.9KiB | +| lossy.jxl | 29.5KiB | + +Todos al mismo tamaño. Los comandos que usé fueron: + +{{{sh +cjxl orig.png lossless.jxl -q 100 -e 10 +}}} + +{{{sh +cjxl orig.png lossy.jxl -q 69 +}}} + +nice... la calidad si le bajaba de ahí sí reducía el tamaño (lo intenté con 36) pero sí comenzaban a surgir artefactos por apenas un par de kilobytes + +para más referencias y comparativa contra AVIF está este blog https://tonisagrista.com/blog/2023/jpegxl-vs-avif/ diff --git a/vimwiki/diary/2026-01-01.wiki b/vimwiki/diary/2026-01-01.wiki new file mode 100644 index 0000000..d60d35f --- /dev/null +++ b/vimwiki/diary/2026-01-01.wiki @@ -0,0 +1,16 @@ +226A1 + += 5.8039 = +Volví a caer en el vicio de Instagram™®©, lo bueno que la experiencia con _Gnome Boxes_ y Xavier Sánchez Cordero tuve ya la experiencia de usar la extensión para Firefox https://github.com/TheKonka/instagram-download-browser-extension que tanto sirve para reels como baja tanto nombre de usuario como fecha ya determinada, ahora lo que tengo que hacer es un programa que las imágenes las convierta ya sea a AVIF o JXL en un tamaño 1280x800 y los vídeos dependiendo del caso extraiga imágenes, haga un GIF o lo comprima lo más posible, por tanto tendré que meter casos pero creo que es bastante asequible, solo es cosa de empeñarse tantito. Para determinar el formato adecuado tendré que investigar lo que acepta _Immich_ + += 6.8720 = +Muy bien ya quedó claro: para imágenes vamos a usar JXL y dado que son descargadas de interné y además estás sumamente comprimidas en los servidores de facebook vamos a usarlo lossy de esta manera +{{{bash + cjxl input.img lossy.jxl -q 69 +}}} + +por otro lado para vídeos vamos a usar un AVIF animado: +{{{bash + ffmpeg -i input.vid -pix_fmt yuv420p -f yuv4mpegpipe output.y4m + avifenc output.y4m animated.avif +}}} diff --git a/vimwiki/diary/diary.wiki b/vimwiki/diary/diary.wiki new file mode 100644 index 0000000..2eff6ad --- /dev/null +++ b/vimwiki/diary/diary.wiki @@ -0,0 +1 @@ += Diary = diff --git a/vimwiki/index.wiki b/vimwiki/index.wiki new file mode 100644 index 0000000..a7d7573 --- /dev/null +++ b/vimwiki/index.wiki @@ -0,0 +1,41 @@ += VIMWIKI = + += Proyectos = +== Juegos de Alcantarilla == +=== TTRPG === + [[Hallasenderos]] - Adaptación y doblaje de Pathfinder 2E + [[Astrallazgo]] - Adaptación y doblaje de Starfinder 2E +=== Godot === + [[TTRPGStats]] - Hoja de personaje + [[FirstRule]] - Beat'em All 3D + [[YAZNIG]] - Yet Another Zombie-game Now In Godot + [[Time4]] - El juego de mis sueños -> Hay un TIEMPO y un lugar para todo y se llama Universidad +=== Mesa === + [[Tiro]] - ¡Hay tiro! ¡Hay tiro! En la casa del Boxeo +== Digiworld == +=== ale.lat === + [[weeby-neety]] - Anime + [[GAG]] - God-Awful Games + [[µsK]] - Música +=== Somalía === + [[pirataSomalí]] - ¡Yo ho ho, y una botella de ron! +== Paranoia == + [[offline]] - Poder subsistir sin necesidad de Internet + [[respaldos]] - Redundancia siempre es la clave + += Computación = + [[Blossom]] - Pequeña y móvil + [[Daphne]] - HTPC + [[Frankie]] - Transmission + [[Nami]] - NAS + [[Pebbles]] - raspberry + [[Roxanne]] - Común para jugar + [[Starfire]] - Poderosa y principal + [[Vanessa]] - Arch BTW + [[Vilma]] - Windows + += Conocimiento = + [[vimwiki]] - Base teórica + += Pruebas = + [[test]] - para probar funciones y demás sin romper nada diff --git a/vimwiki/linux.wiki b/vimwiki/linux.wiki new file mode 100644 index 0000000..3a01b1d --- /dev/null +++ b/vimwiki/linux.wiki @@ -0,0 +1,81 @@ +I'd just like to interject for a moment. What you're referring to as Linux, is in fact, GNU/Linux, or as I've recently taken to calling it, GNU plus Linux. Linux is not an operating system unto itself, but rather another free component of a fully functioning GNU system made useful by the GNU corelibs, shell utilities and vital system components comprising a full OS as defined by POSIX. +Many computer users run a modified version of the GNU system every day, without realizing it. Through a peculiar turn of events, the version of GNU which is widely used today is often called "Linux", and many of its users are not aware that it is basically the GNU system, developed by the GNU Project. +There really is a Linux, and these people are using it, but it is just a part of the system they use. Linux is the kernel: the program in the system that allocates the machine's resources to the other programs that you run. The kernel is an essential part of an operating system, but useless by itself; it can only function in the context of a complete operating system. Linux is normally used in combination with the GNU operating system: the whole system is basically GNU with Linux added, or GNU/Linux. All the so-called "Linux" distributions are really distributions of GNU/Linux. + +No, Richard, it's 'Linux', not 'GNU/Linux'. The most important contributions that the FSF made to Linux were the creation of the GPL and the GCC compiler. Those are fine and inspired products. GCC is a monumental achievement and has earned you, RMS, and the Free Software Foundation countless kudos and much appreciation. +Following are some reasons for you to mull over, including some already answered in your FAQ. +One guy, Linus Torvalds, used GCC to make his operating system (yes, Linux is an OS -- more on this later). He named it 'Linux' with a little help from his friends. Why doesn't he call it GNU/Linux? Because he wrote it, with more help from his friends, not you. You named your stuff, I named my stuff -- including the software I wrote using GCC -- and Linus named his stuff. The proper name is Linux because Linus Torvalds says so. Linus has spoken. Accept his authority. To do otherwise is to become a nag. You don't want to be known as a nag, do you? +(An operating system) != (a distribution). Linux is an operating system. By my definition, an operating system is that software which provides and limits access to hardware resources on a computer. That definition applies whereever you see Linux in use. However, Linux is usually distributed with a collection of utilities and applications to make it easily configurable as a desktop system, a server, a development box, or a graphics workstation, or whatever the user needs. In such a configuration, we have a Linux (based) distribution. Therein lies your strongest argument for the unwieldy title 'GNU/Linux' (when said bundled software is largely from the FSF). Go bug the distribution makers on that one. Take your beef to Red Hat, Mandrake, and Slackware. At least there you have an argument. Linux alone is an operating system that can be used in various applications without any GNU software whatsoever. Embedded applications come to mind as an obvious example. +Next, even if we limit the GNU/Linux title to the GNU-based Linux distributions, we run into another obvious problem. XFree86 may well be more important to a particular Linux installation than the sum of all the GNU contributions. More properly, shouldn't the distribution be called XFree86/Linux? Or, at a minimum, XFree86/GNU/Linux? Of course, it would be rather arbitrary to draw the line there when many other fine contributions go unlisted. Yes, I know you've heard this one before. Get used to it. You'll keep hearing it until you can cleanly counter it. +You seem to like the lines-of-code metric. There are many lines of GNU code in a typical Linux distribution. You seem to suggest that (more LOC) == (more important). However, I submit to you that raw LOC numbers do not directly correlate with importance. I would suggest that clock cycles spent on code is a better metric. For example, if my system spends 90% of its time executing XFree86 code, XFree86 is probably the single most important collection of code on my system. Even if I loaded ten times as many lines of useless bloatware on my system and I never excuted that bloatware, it certainly isn't more important code than XFree86. Obviously, this metric isn't perfect either, but LOC really, really sucks. Please refrain from using it ever again in supporting any argument. +Last, I'd like to point out that we Linux and GNU users shouldn't be fighting among ourselves over naming other people's software. But what the heck, I'm in a bad mood now. I think I'm feeling sufficiently obnoxious to make the point that GCC is so very famous and, yes, so very useful only because Linux was developed. In a show of proper respect and gratitude, shouldn't you and everyone refer to GCC as 'the Linux compiler'? Or at least, 'Linux GCC'? Seriously, where would your masterpiece be without Linux? Languishing with the HURD? +If there is a moral buried in this rant, maybe it is this: +Be grateful for your abilities and your incredible success and your considerable fame. Continue to use that success and fame for good, not evil. Also, be especially grateful for Linux' huge contribution to that success. You, RMS, the Free Software Foundation, and GNU software have reached their current high profiles largely on the back of Linux. You have changed the world. Now, go forth and don't be a nag. + +- [[arch]] + - [[x86_64]] + - [[aarch]] + - [[riscv]] +- [[firmware]] + - [[bios]] + - [[UEFI]] + - [[coreboot]] + - [[libreboot]] +- biblioteca estándar de [[c]] + - [[glibc]] + - [[musl]] +- [[kernel]] + - [[stable]] + - [[linux-hardened]] + - [[linux-lts]] + - [[linux-rt]] + - [[linux-zen]] +- [[partition]] + - [[btrfs]] + - [[ext4]] + - [[f2fs]] + - [[fat]] + - [[ntfs]] + - [[xfs]] +- [[bootloader]] + - [[EFI]] + - [[UKI]] + - [[grub]] + - [[rEFInd]] + - [[syslinux]] + - [[systemd-boot]] +- [[init]] + - [[dinit]] + - [[openrc]] + - [[runit]] + - [[s6]] + - [[systemd]] +- [[CLI]] + - shell + - [[bash]] + - [[fish]] + - [[sh]] + - [[ssh]] + - [[zsh]] + - multimedia + - [[ffmpeg]] + - [[handbrake-cli]] + - [[imagemagick]] + - [[mediainfo]] + - utilidades + - [[cron]] + - [[cmake]] + - [[samba]] +- [[GUI]] + - [[xorg]] + - [[wayland]] + - [[dbus]] + + +== Distros == +[[Archlinux]] +[[Debian]] +[[LFS]] - Linux From Scratch +[[RHEL]] - Red Hat Enterprise Linux +[[Slackware]] +[[Void]] diff --git a/vimwiki/vimwiki.wiki b/vimwiki/vimwiki.wiki new file mode 100644 index 0000000..1821bb5 --- /dev/null +++ b/vimwiki/vimwiki.wiki @@ -0,0 +1,2 @@ + +- [[linux]] -- 2.47.3