Compare commits

...

115 Commits

Author SHA1 Message Date
Yasuhiro Matsumoto
e7745b7cbf patch 9.2.0411: tabpanel: no Vim script functions for the tabpanel
Problem:  tabpanel: no Vim script functions for the tabpanel
Solution: Add tabpanel_getinfo() and tabpanel_scroll()
          (Yasuhiro Matsumoto).

tabpanel_getinfo() returns a dict describing the tabpanel (align,
columns, scrollbar, offset, total, max_offset).

tabpanel_scroll(n) scrolls the tabpanel by n rows (positive for
down, negative for up). With {absolute: 1} the argument is used as
the new absolute offset instead of a delta. The offset is clamped to
the valid range; returns true when it actually changes.

closes: #20056

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-28 20:31:34 +00:00
Jesse Rosenstock
6146f3382f patch 9.2.0410: test suite races when run with parallel make
Problem:  Running "make test" with -jN causes spurious failures because
          the old-style tests share filenames (test.ok, test.out, X*,
          viminfo) in the working directory.
Solution: Add .NOTPARALLEL to the testdir Makefile to prevent parallel
          execution of tests (Jesse Rosenstock).

closes: #20082

Co-authored-by: Gemini
Signed-off-by: Jesse Rosenstock <jmr@google.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-28 19:23:41 +00:00
Hirohito Higashi
30b4240730 runtime(doc): Update docs related to tabpanel
closes: #20083

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-28 19:19:53 +00:00
glepnir
6cb4173294 patch 9.2.0409: memory leaks in copy_substring_from_pos()
Problem:  Memory leak in error path of copy_substring_from_pos().
Solution: Free the garray on OOM in copy_substring_from_pos()
          (glepnir).

closes: #20086

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-28 19:14:22 +00:00
Jaehwang Jung
e47daed442 patch 9.2.0408: Insert-mode <Cmd> edits can corrupt undo
Problem:  A <Cmd> command in Insert mode can edit the current buffer,
          e.g., with setline(). That edit appends to the current undo
          block, but Insert mode does not know that the cursor line may
          need to be saved again before the next typed edit. If the next
          typed edit is a <BS> at the start of a line, it can join away
          the line that was changed by the <Cmd> command before Insert
          mode saves that updated line. The newest undo entry can then
          still refer to the joined-away line, so undo sees a range past
          the end of the buffer and fails with E438.
Solution: If a <Cmd> command in Insert mode changes the buffer, set
          ins_need_undo so stop_arrow() refreshes Insstart. This lets
          the next edit properly decide whether a new undo entry is
          needed (Jaehwang Jung)

closes: #20087
AI-assisted: Codex

Signed-off-by: Jaehwang Jung <tomtomjhj@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-28 19:06:15 +00:00
Hirohito Higashi
2d43240659 patch 9.2.0407: tabpanel: A few issues with the tabpanel
Problem:  Several issues around the tabpanel scrollbar:
          1. :set tabpanelopt= completion did not offer "scroll" and
              "scrollbar".
          2. gt/gT and other tab switches did not update the scrollbar
              thumb; the current tab could move outside the visible
              panel range without the view following.
          3. When tpl_scroll_offset was at its maximum, the thumb's
              bottom did not reach the last screen row due to integer
              truncation in thumb_top (e.g. 31 tabs on 24 rows + :tablast
              left a one-row gap).
          4. For align:right the scrollbar was drawn on the panel's
              left edge (adjacent to the buffer area), which breaks the
              common convention that a vertical scrollbar sits on the
              right.
Solution: - Add "scroll" and "scrollbar" to the 'tabpanelopt' expansion
            list.  Cover the completion in test_options.vim and extend
            util/gen_opt_test.vim with the new valid/invalid values;
            drop the now-redundant acceptance test from
            test_tabpanel.vim.
          - In draw_tabpanel(), remember the last-drawn curtab and,
            when it changes, adjust tpl_scroll_offset so curtab_row
            falls inside [offset, offset + Rows).  Mouse wheel and
            drag leave curtab unchanged, so the user's chosen offset
            is preserved.
          - In draw_tabpanel_scrollbar(), compute thumb_top as
            (Rows - thumb_height) * tpl_scroll_offset
            / (tpl_total_rows - Rows), mirroring the mapping already
            used by tabpanel_drag_scrollbar().  This guarantees the
            thumb's bottom reaches the last row at the maximum offset.
          - In draw_tabpanel(), place the scrollbar at the tabpanel's
            right edge for both align:left and align:right (previously
            align:right put it on the panel's left edge next to the
            vertical separator).  For align:right this means the
            scrollbar now sits at the screen's right edge.
          - Update :h tabpanel-scroll to describe the new, align-
            independent placement.
          - Add Test_tabpanel_scrollbar_follows_curtab() and
            Test_tabpanel_scrollbar_reaches_bottom() to exercise the
            regressions fixed by items 2 and 3.

closes: #20052

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 21:16:56 +00:00
Shane Harper
7e76514896 patch 9.2.0406: VisualNOS not used when Wayland selection ownership lost
Problem:  VisualNOS not used when Wayland selection ownership lost
          (lilydjwg)
Solution: Don't require X_DISPLAY != NULL to use VisualNOS
          (Shane Harper).

fixes:   #19914
related: #19812
related: #19659
closes:  #20066

Signed-off-by: Shane Harper <shane@shaneharper.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 19:58:46 +00:00
Christian Brabandt
ae196b2d58 patch 9.2.0405: when jumping to tags, will open URLs
Problem:  when jumping to tags, will open URLs
          (Srinivas Piskala Ganesh Babu)
Solution: Disallow trying to open remote files.

closes: #20068

Supported by AI

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 18:43:10 +00:00
Christian Brabandt
3958188f6a patch 9.2.0404: redraw_listener_add() does not check secure flag
Problem:  redraw_listener_add() does not check secure flag
Solution: Check for check_secure() in f_redraw_listener_add()

closes: #20070

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 18:34:01 +00:00
Christian Brabandt
f1a9449206 patch 9.2.0403: Vim9: def function sandbox bypass
Problem:  Vim9: def function sandbox bypass
          (Srinivas Piskala Ganesh Babu)
Solution: Check for sandbox flag in call_user_func() and call_dfunc()
          when executing Vim9 script functions

closes: #20071

Supported by AI

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 18:14:49 +00:00
Yasuhiro Matsumoto
7070a85d94 patch 9.2.0402: pum: opacity not applied to wildmenu pum
Problem:  pum: opacity not applied to wildmenu pum
Solution: Call pum_call_update_screen() in cmdline_pum_display() when
          opacity is set, fix flicker by checking against expected row
          (Yasuhiro Matsumoto).

closes: #20072

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 18:05:12 +00:00
Christian Brabandt
0bc64b19a2 patch 9.2.0401: tests: still a few flaky tests
Problem:  tests: still a few flaky tests
Solution: Add WaitForAssert to test_messages.vim, use a smaller terminal
          window for test_tabpanel, add TermWait() in test_messages
          to handle DECQRM messages.

closes: #20074

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 18:00:14 +00:00
Barrett Ruth
dd9b31fb62 patch 9.2.0400: sandbox callbacks selected through 'complete'
Problem:  Modeline-tainted 'complete' values can invoke completion
          callbacks outside the sandbox.
Solution: Enter the sandbox for both 'complete' callback phases and add
          a regression test (Barrett Ruth)

closes: #20078

Signed-off-by: Barrett Ruth <br.barrettruth@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 17:18:17 +00:00
Yasuhiro Matsumoto
a622dda915 patch 9.2.0399: MS-Windows: compile warning in strptime.c
Problem:  MS-Windows: compile warning in strptime.c
          (John Marriott, after v9.2.0398)
Solution: Fix the compile warning (Yasuhiro Matsumoto).

Use _get_tzname() instead of the deprecated tzname[] global on UCRT and
MSVC builds; older MinGW (msvcrt.dll) keeps using tzname[] as a
fallback.

related: #20054
closes:  #20079

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 17:10:25 +00:00
Christian Brabandt
96be27309c runtime(doc): fix :z command description again
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-27 17:06:47 +00:00
Yasuhiro Matsumoto
036e40e6d8 patch 9.2.0398: MS-Windows: missing strptime() support
Problem:  MS-Windows: missing strptime() support
Solution: Port NetBSD's strptime fallback to Vim
          (Yasuhiro Matsumoto).

The MSVC and MinGW C runtimes do not provide strptime(), so the
strptime() builtin was unavailable on Windows.  Port NetBSD's
lib/libc/time/strptime.c (rev 1.67) and compile it into the Windows
builds.  The BSD 2-clause notice from the original is preserved in the
file.  Windows-specific adjustments: English-only locale tables, the
fromzone()/tzalloc() path is stubbed out (no IANA tzfile loader on
Windows), and tm_gmtoff / tm_zone stores are elided.

Also call tzset() before mktime() in f_strptime() so changes to \$TZ
are honored.

Skip the POSIX DST TZ assertion in Test_strptime() on MS-Windows since
the CRT tzset() does not parse POSIX TZ strings with DST rules.

closes: #20054

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 17:31:41 +00:00
Yasuhiro Matsumoto
22aedc4a90 patch 9.2.0397: tabpanel: double-click opens a new tab
Problem:  tabpanel: double-click opens a new tab page
Solution: Do not create a new tab page when using a double click
          (Yasuhiro Matsumoto).

The tabpanel click handler inherited the tabline behavior where a
double-click opens a new, empty tab page.  Unlike the tabline, the
tabpanel has no "empty area": every row maps to some tab, so this
fires on any double-click in the tabpanel and can generate stray
empty tabs.  The behavior is also not documented for the tabpanel.

Skip the new-tab branch when the click originated in the tabpanel
and fall through to the regular tab-switch path instead.  The
tabline behavior is unchanged.

closes: #20044

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 16:53:58 +00:00
Doug Kearns
076366bd4e runtime(javascript): Fix regex highlighting after (
- Fix regex highlighting after opening parens, javascriptParens was
  matching later.  Fixes issue #20069.
- Add missing regex flags.
- Mark the file as unmaintained.  Thanks Claudio for all your work.

closes: #20076

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 14:52:21 +00:00
zeertzjq
c23bfd7922 runtime(help): fix wrong check for existing HelpComplete function
To check for an existing HelpComplete function, exists('*HelpComplete')
should be used, as exists('HelpComplete') still returns 0 after sourcing
the ftplugin.

closes: #20073

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 14:36:23 +00:00
Doug Kearns
3cc7d50716 runtime(algol68): Add new syntax file, ftplugin and filetype detection
- Add a syntax file update to Neville Dempsey's long-serving version
- Add a new rudimentary ftplugin
- Add filetype detection

Changes to the syntax file include:
- improved prelude, number and symbol highlighting
- prelude highlighting tests
- updated boiler plate

Note that these runtime files currently target Algol 68 Genie employing
the default UPPER stropping regime.  Support for GNU Algol 68 should
also be usable with the UPPER stropping regime, although somewhat less
complete.  Full support for the SUPPER stropping regime in GNU Algol 68
is also planned.

closes: #19818

Co-authored-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Janis Papanagnou <janis_papanagnou@hotmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 14:31:55 +00:00
Doug Kearns
1ce03d674a runtime(dockerfile): Update syntax, fix RUN command highlighting
Allow for docker comments to be interspersed in a multiline (continued)
RUN command argument.

fixes:  #8364
closes: #19829

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 14:26:19 +00:00
Yasuhiro Matsumoto
2baef82cd1 patch 9.2.0396: tests: Test_error_callback_terminal is flaky on macOS
Problem:  tests: Test_error_callback_terminal is flaky on macOS
Solution: Use WaitForAssert() to make it more reliable
          (Yasuhiro Matsumoto).

term_wait() only waits for terminal screen updates and does not
guarantee that the err_io 'pipe' callback has fired, so on macOS
the assert_match() against g:error frequently runs before sh has
written "sh: XXXX: not found", causing the test to flake.

Replace term_wait() + assert_match() with WaitForAssert() so each
assertion polls until the callback delivers the expected output.
Also defer sending "exit" until the stderr message has been seen,
to avoid losing the stderr write to the exit race.

closes: #20075

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 09:22:38 +00:00
Christian Brabandt
bf6892aaab runtime(doc): Update documentation on :z
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 09:18:07 +00:00
Peter Cardenas
0ca1121d1f runtime(help): make help omnifunc global
closes: #20024

Signed-off-by: Peter Cardenas <16930781+PeterCardenas@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 08:42:57 +00:00
D. Ben Knoble
8d9c383aaf patch 9.2.0395: tests: Test_backupskip() may read from $HOME
Problem:  tests: Test_backupskip() may read from $HOME
Solution: Set $HOME to an empty value, use --clean
          (D Ben Knoble)

Even though we unset HOME, we can see via scriptnames that user files
are still sourced! One of my installed plugins warns when not compiled
with +python3, so this test has a "press Enter" prompt.

Use `--clean` like most other GetVimProg()'s do to fix it. Some tests
use `system()` instead, but that turns this test into a failure rather
than passing; I'm not sure why other tests don't suffer from this.

To prove to ourselves, we can use code like this:

    diff --git i/src/testdir/test_options.vim w/src/testdir/test_options.vim
    index a408e20e1..044364a54 100644
    --- i/src/testdir/test_options.vim
    +++ w/src/testdir/test_options.vim
    @@ -1179,6 +1179,7 @@ func Test_backupskip()
       " P_NODUP).  Run this in a separate instance and write v:errors in a file,
       " so that we see what happens on startup.
       let after =<< trim [CODE]
    +      call writefile([execute('scriptnames')], 'foo')
           let bsklist = split(&backupskip, ',')
           call assert_equal(uniq(copy(bsklist)), bsklist)
           call writefile(['errors:'] + v:errors, 'Xtestout')
    @@ -1196,7 +1197,7 @@ func Test_backupskip()
       " unset $HOME, so that it won't try to read init files
       let saveenv['HOME'] = getenv("HOME")
       call setenv('HOME', v:null)
    -  exe 'silent !' . cmd
    +  exe 'silent !' . cmd .. ' --cmd "echo &rtp"'
       call assert_equal(['errors:'], readfile('Xtestout'))

       " restore environment variables

Here, that causes "foo" to include a bunch of files under ~/.vim. I'm
not sure why this happens, but lets paper over it for the test.

We can also tell that (orthogonal to --clean) setting HOME='' works too.
Let's do that in addition since unsetting HOME isn't quite enough.

closes: #20051

Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 08:33:59 +00:00
Yasuhiro Matsumoto
8f9cde4592 patch 9.2.0394: xxd: offsets greater than LONG_MAX print as negative
Problem:  xxd: offsets greater than LONG_MAX print as negative
Solution: Use "%lu" to print unsigned long value
          (Yasuhiro Matsumoto)

closes: #20055

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 08:22:23 +00:00
svardew
807f2cd789 CI: Fix syntax error in lychee URL checker
fixes: #20040

Signed-off-by: svardew <svardew@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 08:16:59 +00:00
Christian Brabandt
1de887681d No guidance for AI coding agents
Problem:  No guidance for AI coding agents working in the Vim
          repository.
Solution: Add AGENTS.md to the repository documenting build
          and test commands, repository layout, commit format,
          C and Vim9-script conventions, test conventions, help
          file style, and release policy, so that AI agents can
          produce patches that match project expectations.

closes: #20039

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 08:11:59 +00:00
dependabot[bot]
e7eef554f3 CI: Bump the github-actions group across 1 directory with 3 updates
Bumps the github-actions group with 3 updates in the / directory: [msys2/setup-msys2](https://github.com/msys2/setup-msys2), [actions/cache](https://github.com/actions/cache) and [github/codeql-action](https://github.com/github/codeql-action).

Updates `msys2/setup-msys2` from 2.31.0 to 2.31.1
- [Release notes](https://github.com/msys2/setup-msys2/releases)
- [Changelog](https://github.com/msys2/setup-msys2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/msys2/setup-msys2/compare/v2.31.0...v2.31.1)

Updates `actions/cache` from 5.0.4 to 5.0.5
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v5.0.4...v5.0.5)

Updates `github/codeql-action` from 4.35.1 to 4.35.2
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4.35.1...v4.35.2)

---
updated-dependencies:
- dependency-name: msys2/setup-msys2
  dependency-version: 2.31.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/cache
  dependency-version: 5.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: github/codeql-action
  dependency-version: 4.35.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

closes: #20063

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 08:05:33 +00:00
Yasuhiro Matsumoto
0c2ac3480a patch 9.2.0393: MS-Windows: link error with XPM support on UCRT64
Problem:  MS-Windows: link error with XPM support on UCRT64
Solution: Make_cyg_ming.mak: allow XPM to point to system layout with
          X11/ headers (Yasuhiro Matsumoto)

When XPM is set to a system prefix such as /msys64/ucrt64 (where xpm.h
lives in include/X11/), the existing -I flags miss the header.  Add
-I $(XPM)/include/X11 so both the bundled layout (xpm/include/xpm.h)
and the system layout (include/X11/xpm.h) work.

closes: #20064

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 07:57:14 +00:00
Hirohito Higashi
32a30cb5a0 runtime(doc): Update docs about tabpanel
closes: #20067

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-25 17:56:30 +00:00
Christian Brabandt
1940bcb243 patch 9.2.0392: tests: Some tests are flaky
Problem:  tests: Some tests are flaky and cause CI to fail
Solution: Add WaitForAsserts() calls to reduce flakiness

closes: #20050

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-25 17:50:47 +00:00
Christian Brabandt
5f7c52408f runtime(doc): Update the ga output to match the actual output
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-25 17:46:51 +00:00
Christian Brabandt
10b57290d3 patch 9.2.0391: tests: Comment in test_vim9_cmd breaks syntax highlighting
Problem:  tests: Comment in test_vim9_cmd breaks syntax highlighting
Solution: Move the comment into the function and use the # as comment
          marker instead

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-25 16:49:21 +00:00
Vitaliy Gromov
0f9218851d translation(ru): Fix typo in "може" to "можете" in lang/README.ru.txt
closes: #20047

Signed-off-by: Vitaliy Gromov <101171374+VitaliyGromov@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-23 16:03:31 +00:00
Bruno Belanyi
521eac1877 patch 9.2.0390: filetype: some Beancount files are not recognized
Problem:  filetype: some Beancount files are not recognized
Solution: Detect *.bean files as beancount filetype
          (Bruno Belanyi)

closes: #20037

Signed-off-by: Bruno Belanyi <bruno@belanyi.fr>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-23 15:56:30 +00:00
Hirohito Higashi
44f707da6a patch 9.2.0389: DECRQM still leaves stray "pp" on Apple Terminal.app
Problem:  DECRQM was still sent to Apple Terminal.app before its DA2
          reply was processed, leaving a literal "pp" on screen.
          may_req_decrqm() was called from vim_main2()
          right after may_req_termresponse(), at which point
          term_props[TPR_DECRQM].tpr_status was still TPR_UNKNOWN, so
          the `!= TPR_NO` guard let the request through (after v9.2.0387)
Solution: Send DECRQM from handle_version_response() once
          term_props[TPR_DECRQM].tpr_status == TPR_YES, the same
          pattern already used for t_RS (TPR_CURSOR_STYLE) and t_RC
          (TPR_CURSOR_BLINK), which deliberately wait for the DA2
          reply to avoid the same echo-on-screen issue on Apple
          Terminal.app and Gnome terminal.  Drop the now-unused
          may_req_decrqm() helper and its call site in vim_main2()
          (Hirohito Higashi).

fixes:   #19852
related: #19938
closes:  #20038

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: John Marriott <basilisk@internode.on.net>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-22 20:29:08 +00:00
zeertzjq
f194676c93 patch 9.2.0388: strange indent in update_topline()
Problem:  strange indent in update_topline()
Solution: Fix the indentation (zeertzjq)

closes: #20033

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-22 16:09:06 +00:00
Hirohito Higashi
cee8fd73eb patch 9.2.0387: DECRQM request may leave stray chars in terminal
Problem:  Sending DECRQM from handle_version_response() caused DECRPM
          responses to arrive during user input processing, leaving
          bytes in typebuf when clear_showcmd() ran.  This made
          visual-mode showcmd (e.g. "7" line count after V<C-D><C-D>)
          intermittently disappear, failing many screendump tests on CI.
Solution: Move DECRQM request out of handle_version_response() and send
          it at startup via may_req_decrqm(), following the existing
          may_req_termresponse() and may_req_bg_color() pattern.
          Add TPR_DECRQM property set per terminal from the DA2 reply,
          and route DECRQM sends through a may_req_decrqm() helper using
          the termrequest_T pattern, skipping terminals known to
          mishandle it (Foxe Chen, Hirohito Higashi).

fixes:  #19852
closes: #19938

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Hirohito Higashi <h.east.727@gmail.com>
Co-Authored-By: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 21:03:25 +00:00
Yasuhiro Matsumoto
2ea4a7c3b7 patch 9.2.0386: No scroll/scrollbar support in the tabpanel
Problem:  No scroll/scrollbar support in the tabpanel
Solution: Add support for it (Yasuhiro Matsumoto)

closes: #19979

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 20:39:22 +00:00
D. Ben Knoble
10040bc9cd runtime(sh): allow "#" in special derefs
Code like ${!#} flags the "#" as shDerefWordError [1]; the "!prefix"
syntax region delegates to one of the shDerefSpecial handlers via
@shDerefList, but it misses the "#" case as valid for ${##} and ${!#}.

[1]: https://vi.stackexchange.com/q/48617/10604

Correct that. Indirection is only valid in Bash in Ksh, so rearrange the
"!" handling to be conditional.

closes: #20016

Helped-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 19:59:07 +00:00
zeertzjq
33f3965087 patch 9.2.0385: Integer overflow with "ze" and large 'sidescrolloff'
Problem:  Integer overflow with "ze" and large 'sidescrolloff'.
Solution: Check for overflow to avoid negative w_leftcol (zeertzjq).

closes: #20026

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 19:41:37 +00:00
zeertzjq
3918f3232f runtime(doc): fix incorrect description of 'scrolloffpad'
closes: #20029

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 19:34:18 +00:00
Jon Parise
16d28548d2 runtime(graphql): Update syntax script to September 2025 spec
A new graphqlEscape syntax graph has been introduced to represent escape
sequences within strings, including the braced unicode form (\u{H+})
added in the September 2025 specification.

See: https://spec.graphql.org/September2025/

closes: #20030

Signed-off-by: Jon Parise <jon@indelible.org>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 19:25:54 +00:00
Jaehwang Jung
d4fb31762e patch 9.2.0384: stale Insstart after <Cmd> cursor move breaks undo
Problem:  A <Cmd> command executed from Insert mode can sync undo and
          move the cursor before the next edit. stop_arrow() saved the
          new cursor line for undo, but left Insstart at the previous
          insertion point. A line-start backspace could then delete
          lines above the saved line without saving the joined range,
          leaving a pending undo entry whose bottom resolved above
          its top and raising E340.
Solution: Update Insstart and Insstart_textlen after the pending undo
          save so the next edit starts from the command-updated cursor
          position (Jaehwang Jung).

closes: #20031

AI-assisted: Codex

Signed-off-by: Jaehwang Jung <tomtomjhj@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 19:24:14 +00:00
Christian Brabandt
405e2fb6d5 patch 9.2.0383: [security]: runtime(netrw): shell-injection via sftp: and file: URLs
Problem:  runtime(netrw): shell-injection via sftp: and file: URLs
          (Joshua Rogers)
Solution: Escape temporary file names, harden filename suffix regex,
          drop unused g:netrw_tmpfile_escape variable

Supported by AI

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-21 19:08:05 +00:00
Foxe Chen
d0b6ee320b patch 9.2.0382: Wayland: focus-stealing is non-working
Problem:  Wayland: focus-stealing is non-working
Solution: Remove it, the feature could be re-implemented using
          clipboard-providers feature, see :h wayland-primary-selection
          (Foxe Chen).

closes: #19984

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 18:24:17 +00:00
Christian Brabandt
ec3f79e037 patch 9.2.0381: Vim9: Missing check_secure() in exec_instructions()
Problem:  Vim9: Missing check_secure() when executing ISN_STOREENV
          instruction (Andrej Tomči)
Solution: Add check_secure(), add test.

closes: #19992

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 17:44:45 +00:00
glepnir
b328686d6a patch 9.2.0380: completion: a few issues in completion code
Problem: ins_compl_stop() sets compl_best_matches = 0, but that's a
         pointer, should reset compl_num_bests instead,
         find_common_prefix() reads cpt_sources_array[cur_source] without
         checking cur_source != -1 which causes an OOB for -1,
         find_next_completion_match(): second `if` in the pending loop
         should be `else if`. Forward paging only moves one step per call.

Solution: Reset compl_num_bests instead, add a check for cur_source not
          equal -1, change if to else if (glepnir)

closes: #20000

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 17:36:56 +00:00
Hirohito Higashi
fe3c27ce0b patch 9.2.0379: gui.color_approx is never used
Problem:  gui.color_approx in gui_T has not been assigned anywhere since
          patch 7.4.2094 ("The color allocation in X11 is overly
          complicated", 2016), which dropped the single "gui.color_approx = TRUE;"
          site.  Because the member is zero-initialized and never written, the
          check "if (gui.color_approx)" in gui_mch_init() is always false and the
          "E458: Cannot allocate colormap entry, ..." warning can never be
          emitted.
Solution: Remove the struct member and the unreachable branch.  The E458
          error definition is removed. Update the example error code
          "E458" in the ex_eval.c comment to "E457" accordingly.

closes: #20007

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 17:24:15 +00:00
Hirohito Higashi
146d5da0d1 patch 9.2.0378: Using int as bool type in win_T struct
Problem:  Several win_T fields are declared as "int" or "char" but are
          used strictly as boolean flags with TRUE/FALSE values.  The
          integer types obscure the boolean intent and are wider than
          needed.
Solution: Change the following win_T members to bool (stdbool.h) and
          update their assignments from TRUE/FALSE to true/false
          accordingly.

The following conversions have been done:
- int -> bool (10 members):
  w_set_curswant, w_botfill, w_old_botfill, w_do_win_fix_cursor,
  w_popup_fixed, w_border_highlight_isset, w_cline_folded,
  w_redr_status, w_arg_idx_invalid, w_has_scrollbar
- char -> bool (4 members):
  w_topline_was_set, w_ru_empty, w_fold_manual, w_foldinvalid

No existing code compares these members against TRUE/FALSE explicitly or
uses ++/-- / bitwise ops on them, so only plain assignments are
affected.

Excluded:
- w_locked (recursion counter with ++/--),
- w_want_scrollbar (may hold -1 from dict_get_bool),
- w_winbar_height (used in arithmetic and exposed as number via
  getwininfo()).

related: #20005
closes:  #20008

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 17:12:29 +00:00
Hirohito Higashi
3c3050e648 patch 9.2.0377: Using int as bool type in gui_T struct
Problem:  Several gui_T fields are declared as "int" or "char" but are
          used strictly as boolean flags with TRUE/FALSE values.  The
          integer types obscure the boolean intent and are wider than
          needed.
Solution: Change the following gui_T members to bool (stdbool.h) and
          update their assignments from TRUE/FALSE to true/false
          accordingly (Hirohito Higashi)

The following conversions have been done:
- int -> bool (11 members):
  in_focus, in_use, starting, dying, dofork, dospawn,
  pointer_hidden, force_redraw, directx_enabled, font_can_bold,
  which_scrollbars[3]
- char -> bool (2 members):
  cursor_is_valid, menu_is_active

No existing code compares these members against TRUE/FALSE explicitly
(e.g. "== TRUE"), so only plain assignments are affected.

gui_init() used counter-style "--gui.starting" / "++gui.starting" to
temporarily clear the flag across a call to gui_mch_enable_menu().
With gui.starting now bool this triggers -Werror=bool-operation, so
replace it with an explicit save/restore.

X11 Bool members (rsrc_rev_video, color_approx) are intentionally left
unchanged: rsrc_rev_video is registered as an X Toolkit resource with
XtRBool / sizeof(Bool) and must keep the int-sized X11 Bool type.

closes: #20005

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 16:33:57 +00:00
Furkan Sahin
f74a41620b patch 9.2.0376: Vim9: elseif condition compiled in dead branch
Problem:  When an `if` condition is constant true, the `else` block is
          skipped during compilation. However, any `elseif` condition
          within that skipped block was still compiled. This caused
          errors when the condition referenced variables only declared
          in the skipped block or when it checked for missing features
          (like `has('clipboard')`) (Coacher)
Solution: In compile_elseif(), when scope->se_skip_save is
          already SKIP_YES, skip compiling the elseif condition
          expression using skip_expr_cctx() (Furkan Sahin)

fixes:  #19160
closes: #20021

Signed-off-by: Furkan Sahin <furkan-dev@proton.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 16:22:50 +00:00
Furkan Sahin
c9d4c1dc43 patch 9.2.0375: prop_find() does not find a virt text in starting line
Problem:  prop_find() does not find a virt text in the starting line
          (@rickhowe, after v9.2.0320)
Solution: Do not skip virtual text properties with tp_col == MAXCOL on
          the starting line (Furkan Sahin)

The column matching logic incorrectly skipped virtual text properties
with tp_col == MAXCOL on the starting line.  Exclude such properties
from the column range check so they are always found.

fixes:  #20013
closes: #20019

Signed-off-by: Furkan Sahin <furkan-dev@proton.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 16:20:12 +00:00
Barrett Ruth
c62342e5cf patch 9.2.0374: c_CTRL-{G,T} does not handle offset
Problem:  c_CTRL-{G,T} does not handle offset, when cycling between
          matches
Solution: Refactor parsing logic into parse_search_pattern_offset() and
          handle offsets, note: highlighting does not handle offsets
          yet (Barrett Ruth).

fixes:  #19991
closes: #19998

Signed-off-by: Barrett Ruth <br.barrettruth@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 16:08:47 +00:00
zeertzjq
49e8630a28 patch 9.2.0373: Ctrl-R mapping not triggered during completion
Problem:  Ctrl-R mapping not triggered during completion.
Solution: Move Ctrl-R check out of vim_is_ctrl_x_key()
          (zeertzjq).

fixes:  #20004
closes: #20006

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 15:46:08 +00:00
Yasuhiro Matsumoto
73ba353c9d patch 9.2.0372: pum: rendering issues with multibyte text and opacity
Problem:  pum: rendering issues with multibyte text and opacity
Solution: Fix trailing-cell handling near popup text boundary,
          use popup attrs on opaque popup text,
          preserve right border when bg wide char spills,
          blend popup text bg with underlying bg,
          fix wide background char corruption
          (Yasuhiro Matsumoto)

closes: #20017

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 15:35:39 +00:00
Eisuke Kawashima
1c88aee1fa runtime: Remove wrong syn oneline keyword from a few syntax files
Also:
- drop a few trailing whitespaces
- mark the oneline keyword for :syn keyword as error in the
  Vim syntax script, add tests for it.

closes: #20018

Signed-off-by: Eisuke Kawashima <e-kwsm@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 15:14:31 +00:00
Bez Hermoso
b30803b231 patch 9.2.0371: filetype: ghostty config files are not recognized
Problem:  filetype: ghostty config files are not recognized
Solution: Detect ghostty configuration files as ghostty filetype,
          include a simple ghostty filetype plugin (Bez Hermoso)

closes: #20002

Co-authored-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: Bez Hermoso <me@bez.dev>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 14:50:37 +00:00
Hirohito Higashi
2c436be6f7 patch 9.2.0370: duplicate code with literal string_T assignment
Problem:  Duplicate code with literal string_T assignment
Solution: Add STR_LITERAL_SET() macro for string_T literal assignment
          (Hirohito Higashi).

Previously, assigning a string literal to a string_T variable required
two lines that repeated the literal:

    s.string = (char_u *)"open";
    s.length = STRLEN_LITERAL("open");

Writing the literal twice is error-prone -- a typo in one of them
leaves the pointer and the cached length out of sync.

Add a STR_LITERAL_SET() macro in macros.h so that the assignment can
be written in one statement with the literal appearing only once:

    STR_LITERAL_SET(s, "open");

Replace all occurrences of the two-line pattern across the codebase
with the new macro.

No functional change.

related: #19999
related: #20023
closes:  #20025

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-20 14:43:52 +00:00
Hirohito Higashi
6ecff78129 patch 9.2.0369: multiple definitions of STRING_INIT macro
Problem:  multiple definitions of STRING_INIT macro
Solution: Refactor use of STRING_INIT and use a single
          STR_LITERAL_INIT() macro instead
          (Hirohito Higashi)

Consolidate the ad-hoc STRING_INIT() macros that were defined and used
locally in multiple source files. Define a single STR_LITERAL_INIT()
macro in macros.h and replace all previous STRING_INIT() usages with it.

No functional change.

related: #19999
closes:  #20023

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 21:51:51 +00:00
John Marriott
c13232699d patch 9.2.0368: too many strlen() calls when adding strings to dicts
Problem:  too many strlen() calls when adding strings to dicts
Solution: Refactor code to use string_T, use dict_add_string_len()
          instead of dict_add_string() (John Marriott)

Additionally:
- In textprop.c, in function prop_fill_dict() use a string_T to store
  local variable text_align.
- In popupwin.c, use a string_T to store struct member pp_name in struct
  poppos_entry_T.
- In mark.c, refactor function add_mark() to pass in the length of
  argument mname.
- In insexpand.c:
  ->Use a string_T to store the elements of static array
    ctrl_x_mode_names.
  ->Refactor function trigger_complete_done_event():
  ->->change type of argument char_u *word to string_T *word.
  ->->make one access of array ctrl_x_mode_names instead of two.
  ->Refactor function ins_compl_mode() to accept a string_T to return the
    resulting string.
- In fileio.c:
  ->Refactor function getftypewfd() to accept a string_T to return the
    resulting string.
  ->In function create_readdirex_item() use a string_T to store local
    variable q.
- In cmdexpand.c, store global cmdline_orig as a string_T.
- In autocmd.c, in function f_autocmd_get() use a string_T to store local
  variables event_name and group_name. Measure their lengths once when
  they are assigned so they are not remeasured on each call to
  dict_add_string() in the subsequent for loop.
- In channel.c, in function channel_part_info() drop local variable status
  and use s instead. Make s a string_T.

closes: #19999

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 21:10:43 +00:00
Yasuhiro Matsumoto
723c0acf25 patch 9.2.0367: runtime(netrw): ~ note expanded on MS Windows
Problem:  runtime(netrw): ~ note expanded on MS Windows
          (Tom Vamvanij)
Solution: Expand ~ on MS Windows (Yasuhiro Matsumoto)

On Windows, ":Explore ~" did nothing because the tilde expansion was
gated to Unix/Cygwin only.  Additionally, substitute() interprets
backslashes in the replacement string specially (e.g. \U as a case
modifier), which would corrupt $HOME values like C:\Users\name even
if the branch were taken.

Include has("win32") in the guard, anchor the pattern to the start of
the string, and escape backslashes, ampersands and tildes in $HOME
before substituting.

fixes:  #20003
closes: #20014

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 20:40:58 +00:00
Yasuhiro Matsumoto
237d77e07c patch 9.2.0366: pum: flicker when updating pum in place
Problem:  pum: flicker when updating pum in place
Solution: Skip update_screen() when the popup menu is redrawn
          at the same position (Yasuhiro Matsumoto).

closes: #20015

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 20:25:02 +00:00
Hirohito Higashi
1966a1c896 patch 9.2.0365: using int as bool
Problem:  using int as bool
Solution: refactor: use bool type for internal flags in buf_T
          (Hirohito Higashi)

Change the type of 23 internal state flag fields in buf_T from int
to bool for improved type clarity and code readability.

These fields are pure boolean flags that are never accessed via the
option system's varp (which uses *(int *)varp = value), never compared
with int fields holding non-0/1 values, and never use tristate values.

Converted fields:
- State flags: b_dev_valid, b_saving, b_mod_set, b_new_change,
  b_marks_read, b_modified_was_set, b_did_filetype, b_keep_filetype,
  b_au_did_filetype, b_u_synced, b_scanned, b_p_initialized
- Characteristic flags: b_has_textprop, b_may_swap, b_did_warn,
  b_help, b_spell, b_shortname, b_has_sign_column, b_netbeans_file,
  b_was_netbeans_file, b_write_to_channel, b_diff_failed

All TRUE/FALSE assignments to these fields have been updated to
true/false accordingly. The type of temporary save variables
(e.g. help_save in tag.c) has also been adjusted to bool.

Option value fields (b_p_XXX) are kept as int because they are
accessed via the option system and some use tristate (-1) semantics.
Fields compared with int option values (b_start_eof, b_start_eol,
b_start_bomb) are also kept as int to preserve comparison integrity.

closes: #20020

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 20:10:20 +00:00
Christian Brabandt
618a327ce6 patch 9.2.0364: tests: test_smoothscroll_textoff_showbreak() fails
Problem:  tests: test_smoothscroll_textoff_showbreak() fails
          (after v9.2.0363)
Solution: Add missing CheckRunVimInTerminal

related: #20011

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 20:01:11 +00:00
Furkan Sahin
f2e920321c patch 9.2.0363: Vim9: variable shadowed by script-local function
Problem:  Vim9: variable shadowed by script-local function
          (Mao-Yining)
Solution: Set is_global flag to true in find_func() (Furkan Sahin)

fixes:  #20009
closes: #20011

Signed-off-by: Furkan Sahin <furkan-dev@proton.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 18:44:45 +00:00
Jaehwang Jung
0e31fb024c patch 9.2.0362: division by zero with smoothscroll and small windows
Problem:  Resizing a smoothscrolled wrapped window to its textoff width
          with 'showbreak' can leave wrapped continuation lines with
          zero text width. win_lbr_chartabsize() still runs the partial max_head_vcol calculation in
          that state and divides by width2, crashing during redraw.
Solution: Skip that partial head calculation when the wrapped
          continuation width is zero, matching the other width2 guards
          in charset.c (Jaehwang Jung)

closes: #20012

AI-assisted: Codex

Signed-off-by: Jaehwang Jung <tomtomjhj@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-19 18:32:55 +00:00
dependabot[bot]
336533b355 CI: Bump the github-actions group across 2 directories with 4 updates
Bumps the github-actions group with 3 updates in the / directory: [msys2/setup-msys2](https://github.com/msys2/setup-msys2), [actions/cache](https://github.com/actions/cache) and [github/codeql-action](https://github.com/github/codeql-action).
Bumps the github-actions group with 1 update in the /.github/actions/test_artifacts directory: [actions/github-script](https://github.com/actions/github-script).

Updates `msys2/setup-msys2` from 2 to 2.31.0
- [Release notes](https://github.com/msys2/setup-msys2/releases)
- [Changelog](https://github.com/msys2/setup-msys2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/msys2/setup-msys2/compare/v2...v2.31.0)

Updates `actions/cache` from 5 to 5.0.4
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v5...v5.0.4)

Updates `github/codeql-action` from 4 to 4.35.1
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4...v4.35.1)

Updates `actions/github-script` from 8 to 9
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v8...v9)

---
updated-dependencies:
- dependency-name: msys2/setup-msys2
  dependency-version: 2.31.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: actions/cache
  dependency-version: 5.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: github/codeql-action
  dependency-version: 4.35.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: actions/github-script
  dependency-version: '9'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

closes: #20001

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-17 16:16:15 +00:00
Zdenek Dohnal
01d9a1951f patch 9.2.0361: tests: no tests for ch_listen() with IPs
Problem:  tests: no tests for ch_listen() with IPs
Solution: Add tests that this is disallowed
          (Zdenek Dohnal)

The functionality was removed, so the test is to make sure it fails
as expected.

closes: #19997

Signed-off-by: Zdenek Dohnal <zdohnal@redhat.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-17 15:55:53 +00:00
Keith Smiley
30d42855eb runtime(vim9): remove extra escaping in Open
Before 71fd19d7ac this function went
through a `:!` command on all platforms, so it needed special escaping for `#` and
others. After that commit it doesn't go through that path on unix
platforms. Then with 48581f2ba9 this
escaping was re-added on unix and it's needs since it goes through
`sh -c`, but it should not have the extra escaping specific to `:!`.

Specifically my original broken command is:

```
PATH=/usr/bin:/bin VIMRUNTIME=~/dev/vim/runtime ./src/vim -u NONE -c 'call dist#vim9#Open("7bce9f5c69/vimrc (L19)")'
```

Where the `#L19` ends up being opened as `%5C#L19`. But I verified this
case still works as well:

```
PATH=/usr/bin:/bin VIMRUNTIME=~/dev/vim/runtime ./src/vim -u NONE -c 'call dist#vim9#Open("foo bar.txt")'
```

Which is what would otherwise break if we weren't doing any shell
escaping on unix.

closes: #19996

Signed-off-by: Keith Smiley <keithbsmiley@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-17 15:02:39 +00:00
zeertzjq
e666597622 runtime(doc): make window option description a bit less vague
Say explicitly that ":setlocal" sets the local value, while ":set" also
sets the global value.

related: #19993

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-17 14:51:53 +00:00
tecis
68d3129a05 runtime(django): Removed unsupported template statements and filters by current LTS.
Removed djangoStatement:

- ifequal: Depricated version 4.0.
- endifequal: Depricated version 4.0.
- ifnotequal: Depricated version 4.0.
- endifnotequal: Depricated version 4.0.
- parsed
- trans: Renamed to `translate` in version 4.0.
- blocktrans: Renamed to `blocktranslate` in version 4.0.
- endblocktrans: Renamed to `endblocktranslate` in version 4.0.

Removed djangoFilter:

- fix_ampersands: Removed in version 1.8.
- length_is: Removed in version 5.1.

sources:

- Current LTS is version [5.2](https://www.djangoproject.com/download/#supported-versions).
- Documentation template builtins [5.2](https://docs.djangoproject.com/en/5.2/ref/templates/builtins/#truncatechars-html).
- Documentation template builtins [6](https://docs.djangoproject.com/en/6.0/ref/templates/builtins).
- [Django Deprecation Timeline](https://docs.djangoproject.com/en/6.0/internals/deprecation)

closes: #19994

Signed-off-by: tecis <67809811+tecis@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-17 14:48:23 +00:00
tecis
8bcae3ca5d runtime(django): Add missing djangoStatement get_language_info.
Source: [get_language_info](https://docs.djangoproject.com/en/6.0/topics/i18n/translation/#get-language-info) .

related: #19994

Signed-off-by: tecis <67809811+tecis@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-17 14:46:01 +00:00
tecis
6b26afea3b runtime(django): Add missing statements and filters.
Added the fallowing.

djangoStatement:

- querystring: Added in version Django 5.2.
- lorem: Added in version Django 1.8.
- verbatim: Added in version Django 1.10.

djangoFilter:

- force_escape: Added in version Django 1.8.
- iriencode: Added in version Django 1.8.
- json_script: Added in version 2.1.
- truncatechars_html: Added in version 1.7.

> According to current documentation the added keywords are supported [Django version 6](https://docs.djangoproject.com/en/6.0/ref/templates/builtins).

related: #19994

Signed-off-by: tecis <67809811+tecis@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-17 14:44:51 +00:00
Christian Brabandt
450895d86b runtime(make): fix wrong highlighting with $ inside double quotes
fixes: #19986

Co-authored-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-16 21:25:43 +00:00
Yasuhiro Matsumoto
1c299f2631 patch 9.2.0360: Cannot handle mouse-clicks in the tabpanel
Problem:  Cannot handle mouse-clicks in the tabpanel
Solution: Add support using the %[FuncName] atom for the tabpanel
          (Yasuhiro Matsumoto)

Extend the statusline/tabline click region mechanism to work with
'tabpanel'. The callback receives a dict with "area" set to "tabpanel"
and a "tabnr" key indicating which tab page label was clicked.

closes: #19960

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-16 20:33:00 +00:00
Hirohito Higashi
25e9fc44a8 patch 9.2.0359: wrong VertSplitNC highlighting on winbar
Problem:  wrong VertSplitNC highlighting on winbar
          (Maxim Kim, after v9.2.0349)
Solution: Use VertSplit instead of VertSplitNC for winbar rows
          (Hirohito Higashi).

vsep_row_is_curwin() and right_neighbor_at_row() used W_WINROW() which
excludes winbar rows from the window's range.  This caused the vertical
separator at winbar rows to use VertSplitNC even when curwin is adjacent.

Use w_winrow directly so winbar rows are included in the range check.

fixes:  #19985
closes: #19987

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-16 20:12:08 +00:00
Yasuhiro Matsumoto
b076c49282 patch 9.2.0358: runtime(vimball): still path traversal attacks possible
Problem:  runtime(vimball): still path traversal attacks possible
Solution: block Windows driver letter paths (Yasuhiro Matsumoto)

The path traversal check in vimball#Vimball() did not reject file
names starting with a Windows drive letter (e.g. "C:/foo"). Backslashes
are normalized to forward slashes earlier, so UNC paths are caught by
the leading-slash check, but absolute drive-letter paths slipped
through and could write outside of g:vimball_home on Windows.

Add a "^\a:" check next to the existing "^/" check, and cover it with
a new test.

closes: #19989

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-16 20:03:39 +00:00
Yasuhiro Matsumoto
ab02d65b1f runtime(gzip): Remove compatibility fall-backs, harden random filename generation
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-16 19:21:56 +00:00
Yasuhiro Matsumoto
21c0cd29f8 runtime(netrw): add missing escape() calls
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 20:47:29 +00:00
Christian Brabandt
e6a84bb6b0 runtime(tar): missing g:tar_secure in tar#Extract()
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-16 14:42:47 +02:00
Christian Brabandt
c78194e41d patch 9.2.0357: [security]: command injection via backticks in tag files
Problem:  [security]: command injection via backticks in tag files
          (Srinivas Piskala Ganesh Babu, Andy Ngo)
Solution: Disallow backticks before attempting to expand filenames.

Github Advisory:
https://github.com/vim/vim/security/advisories/GHSA-cwgx-gcj7-6qh8

Supported by AI

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 20:24:21 +00:00
McAuley Penney
a414630393 patch 9.2.0356: Cannot apply 'scrolloff' context lines at end of file
Problem:  Cannot apply 'scrolloff' context lines at end of file
Solution: Add the 'scrolloffpad' option to keep 'scrolloff' context even
          when at the end of the file (McAuley Penney).

closes: #19040

Signed-off-by: McAuley Penney <jacobmpenney@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 19:17:13 +00:00
q1uf3ng
490b737f3e patch 9.2.0355: runtime(tar): missing path traversal checks in tar#Extract()
Problem:  runtime(tar): missing path traversal checks in tar#Extract()
Solution: Add check for leading slash, however gnu tar should already
          detect this (q1uf3ng)

tar#Extract() did not check for ../ sequences or absolute paths,
unlike zip#Extract() which was patched in recent commits. Add the
same checks: ../ (relative traversal), leading slash (Unix), drive
letter and UNC/leading slash (Windows).

closes: #19981

Signed-off-by: q1uf3ng <q1uf3ng@protone.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 18:36:20 +00:00
Martin Schwan
0e02be1919 patch 9.2.0354: filetype: not all Bitbake include files are recognized
Problem:  filetype: not all Bitbake include files are recognized
Solution: Enhance the file detection logic and consider varflags
          (Martin Schwan)

closes: #19983

Signed-off-by: Martin Schwan <m.schwan@phytec.de>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 18:11:07 +00:00
Martin Schwan
2041478e2a runtime(bitbake): support forward-slashes in bitbake varflags
Enable syntax highlighting for forward-slashes in Bitbake variables with
varflags. Bitbake allows for forward-slashes in both the variable name
and their potential varflags. E.g. the following should match:

    FOO_BAR[baz] = "foobar"
    FOO_BAR_foo/bar[baz] = "foobar"
    FOO_BAR_foo/bar[baz/bazzer] = "foobar"

Also allow plus-signs in variable names, to be in line with normal
variable names.

related: #19983

Signed-off-by: Martin Schwan <m.schwan@phytec.de>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 18:07:18 +00:00
John Marriott
7cc73a6c66 patch 9.2.0353: Missing out-of-memory check in register.c
Problem:  Missing out-of-memory check in register.c
Solution: Check for memory allocation failure and return NULL
          (John Marriott).

closes: #19949

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 17:54:22 +00:00
Hirohito Higashi
60e925ca0e runtime(doc): Tweak documentation style in channel.txt
closes: #19978

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 17:00:19 +00:00
Foxe Chen
2252d2c1e5 patch 9.2.0352: 'winhighlight' of left window blends into right window
Problem: 'winhighlight' of left window blends into right window
Solution: Allow to push a NULL highlight override (Foxe Chen)

closes: #19980

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 16:52:09 +00:00
Yasuhiro Matsumoto
bfa46a52f6 patch 9.2.0351: repeat_string() can be improved
Problem:  repeat_string() can be improved
Solution: Replace the for() loop by an exponential growing while loop
          (Yasuhiro Matsumoto)

closes: #19977

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 04:12:55 +00:00
q1uf3ng
351a16c88f runtime(zip): also block single leading slash and absolute paths in Extract
zip#Write(): the Windows path check did not match a single leading
slash (/path), which resolves to the current drive root on Windows.
Simplify the regex to match any leading slash or backslash.

zip#Extract(): add absolute path checks for both Unix and Windows,
matching the existing checks in zip#Write().

closes: #19976

Signed-off-by: q1uf3ng <glna9@protonmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-15 04:03:02 +00:00
Christian Brabandt
4c28794716 patch 9.2.0350: Enabling modelines poses a risk
Problem:  Enabling modelines poses a risk, cannot whitelist specific
          modelines
Solution: Include the 'modelinestrict' option, enabled by default, that
          allows only a few very specific modelines, all others will be
          ignored

When set (which it is by default), only the following settings will be
applied, all others will be ignored:

  'autoindent'
  'cindent'
  'commentstring'
  'expandtab'
  'filetype'
  'foldcolumn'
  'foldenable'
  'foldmethod'
  'modifiable'
  'readonly'
  'rightleft'
  'shiftwidth'
  'smartindent'
  'softtabstop'
  'spell'
  'spelllang'
  'tabstop'
  'textwidth'
  'varsofttabstop'
  'vartabstop'

Supported by AI

closes: #19875

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 18:57:41 +00:00
Hirohito Higashi
c72196529b patch 9.2.0349: cannot style non-current window separator
Problem:  cannot style non-current window separator
Solution: Add the VertSplitNC highlighting group
          (Hirohito Higashi).

Add VertSplitNC highlight group for vertical separators of non-current
windows, similar to StatusLine/StatusLineNC distinction.  The separator
adjacent to the current window uses VertSplit, others use VertSplitNC.
Default: linked to VertSplit.

At the current window's status line rows, the separator cell is drawn as
a space with the StatusLine highlight so it blends into the status line
without a stray fillchar glyph.

Also:
- :redrawstatus[!] now also redraws vertical separators.
- statusline height changes trigger vsep redraw.

closes: #19951

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 18:42:38 +00:00
Christian Brabandt
91b402f575 patch 9.2.0348: potential buffer underrun when setting statusline like option
Problem:  potential buffer underrun when settings statusline like option
          (q1uf3ng)
Solution: Validate that p > out before accessing p[-1]

closes: #19961

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 18:18:36 +00:00
Ozaki Kiichi
f9cb0d14dc CI: Separate out ASan tests
closes: #19962

Signed-off-by: Ozaki Kiichi <gclient.gaap@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 18:13:32 +00:00
Yegappan Lakshmanan
39875daec2 patch 9.2.0347: Vim9: script-local variable not found
Problem:  Vim9: script-local variable not found after function call
          (Mao-Yining)
Solution: Accept a script local variable in a function which overrides a
          previous block-scope variable (Yegappan Lakshmanan)

fixes:  #19959
closes: #19963

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 17:02:21 +00:00
Hirohito Higashi
c4fe1e958a patch 9.2.0346: Wrong cursor position when entering command line window
Problem:  Wrong cursor position when entering command line window
Solution: Add check_cursor() command to verify the cursor position
          (Hirohito Higashi).

When opening the command-line window with CTRL-F after typing a command
that fills the screen width, the cursor was placed past the end of the
line.  Add check_cursor() after setting State to MODE_NORMAL so the
cursor is adjusted to the last character.

Also fix the cmdwin prefix character (e.g. ':') being drawn on wrapped
continuation rows.  Draw an empty space instead so that the text
alignment is preserved.

closes: #19964

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 16:56:03 +00:00
zeertzjq
efbd482116 patch 9.2.0345: Wrong autoformatting with 'autocomplete'
Problem:  Wrong autoformatting with 'autocomplete'.
Solution: Don't trigger autoformatting when ending autocompletion
          without selecting an item (zeertzjq).

fixes:  #19954
closes: #19970

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 16:48:55 +00:00
Zdenek Dohnal
962a540d76 patch 9.2.0344: channel: ch_listen() can bind to network interface
Problem:  channel: ch_listen() can bind to network interface
Solution: Only allow to use Unix domain sockets or localhost interface
          (Zdenek Dohnal)

related: #19231
related: #19799
closes:  #19973

Signed-off-by: Zdenek Dohnal <zdohnal@redhat.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 16:37:25 +00:00
Hirohito Higashi
4b6f3f1d16 runtime(doc): Tweak documentation style in options.txt
closes: #19971

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 16:31:10 +00:00
James McCoy
9d95410aa4 patch 9.2.0343: tests: test_clientserver may fail on slower systems
Problem:  tests: test_clientserver may fail on slower systems
Solution: Wait for argc() before checking argv() (James McCoy).

On slower systems, the argv() check may run before the server has
populated the arg list.

Add a wait for argc() to be 3 to be more tolerant of such systems

closes: #19974

Signed-off-by: James McCoy <jamessan@jamessan.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 16:25:50 +00:00
Christian Brabandt
c922202ea2 patch 9.2.0342: tests: test_excmd.vim leaves swapfiles behind
Problem:  tests: test_excmd.vim leaves swapfiles behind
Solution: Close open buffer using :bw!

related: #19975

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 16:12:10 +00:00
q1uf3ng
fcc4276db3 patch 9.2.0341: some functions can be run from the sandbox
Problem:  some functions can be run from the sandbox
Solution: Block them, so they are not accessible from a modeline
          (q1uf3ng)

closes: #19975

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: q1uf3ng <q1uf3ng@protone.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 15:58:40 +00:00
Christian Brabandt
6836599733 runtime(zip): Detect path traversal issues on Windows
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 14:42:48 +02:00
Christian Brabandt
86dcb1878c Revert "runtime(jjdescription): allow to configure summary width"
This reverts commit 86ae6858ab.

related: #19905

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-13 15:50:07 +02:00
Yasuhiro Matsumoto
efedcd1e6f patch 9.2.0340: pum_redraw() may cause flicker
Problem:  pum_redraw() may cause flicker
Solution: Wrap pum_redraw() in synchronized output to avoid flicker
          (Yasuhiro Matsumoto)

closes: #19955

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-12 16:24:09 +00:00
Yasuhiro Matsumoto
dc4734448b Fix a few typos
closes: #19953

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-12 16:19:36 +00:00
Yasuhiro Matsumoto
105d65e29b patch 9.2.0339: regexp: nfa_regmatch() allocates and frees too often
Problem:  nfa_regmatch() allocates and frees two list buffers on every
          call, causing unnecessary memory allocation overhead for
          frequently used patterns.
Solution: Cache the list buffers in the regprog struct and reuse them
          on subsequent top-level calls. Recursive calls still allocate
          their own buffers. Free cached buffers in nfa_regfree()
          (Yasuhiro Matsumoto).

Benchmark: 10K lines, `:%s` x50 iterations

| Pattern | Before | After | Improvement |
|---|---|---|---|
| `\<\(\w\+\%(ing\|tion\|ed\|ly\)\|\w\{3,}\)\>` (many matches) | 4.384s | 4.299s | -2% |
| `\(foo\|bar\|baz\)\{3,}\(qux\|quux\|corge\)\{2,}...` (no match, high nstate) | 16.927s | 3.015s | -82% |

closes: #19956

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-12 16:12:22 +00:00
Emilia
86ae6858ab runtime(jjdescription): allow to configure summary width
Allow to configure max length for the summary line and fall back to gits
setting.

closes: #19905

Signed-off-by: Emilia <emilia@bewitching.dev>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-11 15:37:40 +00:00
Yasuhiro Matsumoto
0802e00f2a patch 9.2.0338: Cannot handle mouseclicks in the tabline
Problem:  Cannot handle mouseclicks in the tabline
Solution: Support %[FuncName] click regions in 'tabline', add "area" key
          to the click info dict (Yasuhiro Matsumoto).

The previous implementation resolved and stored click regions only for
per-window statuslines; the tabline path in win_redr_custom() (wp==NULL)
parsed %[FuncName] but discarded the regions, and tabline clicks were
dispatched via TabPageIdxs[] which didn't know about them.

Add a global tabline_stl_click array populated from the tabline path,
refactor stl_click_handler() to take the regions directly, and dispatch
matching clicks from do_mouse() before falling through to tab selection.
The winid entry in the callback dict is 0 for tabline clicks.

related: #19841
closes:  #19950

Supported by AI.

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-11 15:26:14 +00:00
James McCoy
8fd37e42a6 patch 9.2.0337: list indexing broken on big-endian 32-bit platforms
Problem:  check_range_index_one() expects a long * but n1 is a
          varnumber_T. Casting varnumber_T * to long * is undefined
          behaviour and reads the wrong bytes on big-endian platforms
          (John Paul Adrian Glaubitz)
Solution: Use a local long variable and pass that pointer to
          check_range_index_one() (James McCoy)

fixes:  #19798
closes: #19952

Signed-off-by: James McCoy <jamessan@jamessan.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-11 15:04:00 +00:00
Christian Brabandt
01be43047f runtime(hlyank): verify winid in lambda before matchdelete()
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-11 14:53:48 +00:00
Cimbali
e29f33ef51 patch 9.2.0336: libvterm: no terminal reflow support
Problem:  libvterm: no terminal reflow support
Solution: Support for reflowing, sync libvterm to revision 843
          (Cimbali)

fixes:  #2865
closes: #8365
closes: #19863

Co-authored-by: Paul "LeoNerd" Evans <leonerd@leonerd.org.uk>
Signed-off-by: Cimbali <me@cimba.li>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-10 22:15:36 +00:00
Yasuhiro Matsumoto
71c10dcd58 patch 9.2.0335: json_encode() uses recursive algorithm
Problem:  json_encode() uses recursive algorithm
Solution: Convert from recursive to iterative algorithm to prevent
          stack overflow on deep recursive levels
          (Yasuhiro Matsumoto).

closes: #19839

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-10 21:37:44 +00:00
499 changed files with 13845 additions and 4762 deletions

2
.github/MAINTAINERS vendored
View File

@@ -133,6 +133,7 @@ runtime/doc/xxd-ru.1 @RestorerZ
runtime/doc/xxd-ru.UTF-8.1 @RestorerZ
runtime/ftplugin/abaqus.vim @costerwi
runtime/ftplugin/abnf.vim @A4-Tacks
runtime/ftplugin/algol68.vim @dkearns
runtime/ftplugin/antlr4.vim @jiangyinzuo
runtime/ftplugin/apache.vim @dubgeiser
runtime/ftplugin/arduino.vim @k-takata
@@ -472,6 +473,7 @@ runtime/syntax/shared/hgcommitDiff.vim @vegerot
runtime/syntax/abaqus.vim @costerwi
runtime/syntax/abnf.vim @A4-Tacks
runtime/syntax/aidl.vim @dpelle
runtime/syntax/algol68.vim @dkearns
runtime/syntax/amiga.vim @sodero
runtime/syntax/ant.vim @dkearns
runtime/syntax/antlr4.vim @jiangyinzuo

View File

@@ -0,0 +1,324 @@
name: Build Vim on Linux
description: Build Vim on Linux
inputs:
features:
description: Vim features
required: true
compiler:
description: Compiler
required: true
architecture:
description: Architecture
required: false
extra:
description: Extra flags
required: true
shadow:
description: Shadow directory
required: false
interface:
description: Interface of language interpreter
required: false
lua_ver:
description: Lua version
required: false
python3:
description: Python3 ABI type
required: false
coverage:
description: Enable coverage
required: false
runs:
using: "composite"
steps:
- name: Check Filelist (for packaging)
shell: bash
run: |
echo '::group::Check Filelist (for packaging)'
# If any files in the repository are not listed in Filelist this will
# exit with an error code and list the missing entries.
make -f ci/unlisted.make
echo '::endgroup::'
- name: Check hlgroups (are any new hlgroups added, but not handled in highlight.c)
shell: bash
run: |
echo '::group::Check hlgroups (are any new hlgroups added, but not handled in highlight.c)'
# If any highlight groups have been documented, but not handled in
# highlight.c, nor listed as 'intentionally left out' in hlgroups.ignore,
# exit with an error code and list the missing entries.
make -C ci -f hlgroups.make
echo '::endgroup::'
- name: Report executable syntax tests
if: contains(fromJSON(inputs.extra), 'syn_test_execs')
shell: bash
run: |
echo '::group::Report executable syntax tests'
# Search and list all found executable syntax tests, and exit with
# an error code.
make -C runtime/syntax executables
echo '::endgroup::'
- name: Add i386 packages to dpkg
if: inputs.architecture == 'i386'
shell: bash
run: |
echo '::group::Add i386 packages to dpkg'
sudo dpkg --add-architecture i386
echo '::endgroup::'
- name: Uninstall snap
shell: bash
run: |
echo '::group::Uninstall snap'
sudo bash ci/remove_snap.sh
echo '::endgroup::'
- name: Enable debug packages
shell: bash
run: |
echo '::group::Enable debug packages'
# Some of the ASAN suppressions are in libraries linked with dlopen
# and symbolization of them requires these debug packages.
sudo apt install ubuntu-dbgsym-keyring
sudo cp ci/ddebs.list /etc/apt/sources.list.d/ddebs.list
sudo cp ci/pinned-pkgs /etc/apt/preferences.d/pinned-pkgs
echo '::endgroup::'
- name: Install packages
shell: bash
run: |
echo '::group::Install packages'
# This is added by default, and it is often broken, but we don't need anything from it
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
PKGS=( \
gettext \
x11-utils \
labwc \
wl-clipboard \
wayland-utils \
libgtk-3-dev:${{ inputs.architecture }} \
libgtk-3-bin:${{ inputs.architecture }} \
desktop-file-utils \
libc6-dbgsym:${{ inputs.architecture }} \
libtool-bin \
libncurses-dev:${{ inputs.architecture }} \
libxt-dev:${{ inputs.architecture }} \
libegl-mesa0:${{ inputs.architecture }} \
libegl1:${{ inputs.architecture }} \
libegl1-mesa-dev:${{ inputs.architecture }} \
libepoxy-dev:${{ inputs.architecture }} \
libwayland-egl1:${{ inputs.architecture }} \
libwayland-client0:${{ inputs.architecture }} \
libwayland-cursor0:${{ inputs.architecture }} \
locales-all \
software-properties-common \
)
if ${{ contains(fromJSON(inputs.extra), 'asan') }} && ${{ contains(inputs.architecture, 'native') }}; then
PKGS+=( \
libepoxy0-dbgsym:${{ inputs.architecture }} \
libxdamage1-dbgsym:${{ inputs.architecture }} \
libxcb1-dbgsym:${{ inputs.architecture }} \
libgtk-3-bin-dbgsym:${{ inputs.architecture }} \
libgtk-3-0t64-dbgsym:${{ inputs.architecture }} \
libglib2.0-0t64-dbgsym:${{ inputs.architecture }} \
libglib2.0-bin-dbgsym:${{ inputs.architecture }} \
libglib2.0-dev-bin-dbgsym:${{ inputs.architecture }} \
)
fi
if ${{ inputs.features == 'huge' }}; then
LUA_VER=${{ inputs.lua_ver || '5.4' }}
PKGS+=( \
autoconf \
gdb \
lcov \
libcanberra-dev \
libperl-dev \
python3-dev \
liblua${LUA_VER}-dev \
lua${LUA_VER} \
ruby-dev \
tcl-dev \
cscope \
libsodium-dev \
attr \
libattr1-dev
)
fi
if ${{ contains(fromJSON(inputs.extra), 'proto') }}; then
PKGS+=( python3-clang )
fi
sudo apt-get update && sudo apt-get upgrade -y --allow-downgrades && sudo apt-get install -y --allow-downgrades "${PKGS[@]}"
- name: Install gcc-${{ env.GCC_VER }}
if: inputs.compiler == 'gcc'
shell: bash
run: |
echo '::group::Install gcc-${{ env.GCC_VER }}'
# ubuntu-toolchain-r/test PPA for gcc-13 compiler
# disabled because the installation failed, causing test failures
# sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt-get update -y
sudo apt-get install -y gcc-${{ env.GCC_VER }}:${{ inputs.architecture }}
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ env.GCC_VER }} 100
sudo update-alternatives --set gcc /usr/bin/gcc-${{ env.GCC_VER }}
echo '::endgroup::'
- name: Install clang-${{ env.CLANG_VER }}
if: inputs.compiler == 'clang'
shell: bash
run: |
echo '::group::Install clang-${{ env.CLANG_VER }}'
. /etc/lsb-release
curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/llvm-archive-keyring.gpg > /dev/null
echo "Types: deb
URIs: https://apt.llvm.org/${DISTRIB_CODENAME}/
Suites: llvm-toolchain-${DISTRIB_CODENAME}-${{ env.CLANG_VER }}
Components: main
Signed-By: /usr/share/keyrings/llvm-archive-keyring.gpg" | sudo tee /etc/apt/sources.list.d/llvm-toolchain.sources > /dev/null
sudo apt-get update -y
sudo apt-get install -y clang-${{ env.CLANG_VER }} llvm-${{ env.CLANG_VER }}
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ env.CLANG_VER }} 100
sudo update-alternatives --set clang /usr/bin/clang-${{ env.CLANG_VER }}
sudo update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-${{ env.CLANG_VER }} 100
sudo update-alternatives --install /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-${{ env.CLANG_VER }} 100
echo '::endgroup::'
- name: Set up environment
shell: bash
run: |
echo '::group::Set up environment'
mkdir -p "${LOG_DIR}"
mkdir -p "${HOME}/bin"
echo "${HOME}/bin" >> $GITHUB_PATH
(
echo "LINUX_VERSION=$(uname -r)"
echo "NPROC=$(getconf _NPROCESSORS_ONLN)"
echo "TMPDIR=$(mktemp -d -p /tmp)"
case "${{ inputs.features }}" in
tiny)
echo "TEST=testtiny"
if ${{ contains(fromJSON(inputs.extra), 'nogui') }}; then
CONFOPT="--disable-gui"
fi
;;
normal)
;;
huge)
echo "TEST=scripttests test_libvterm indenttest syntaxtest"
INTERFACE=${{ inputs.interface || 'yes' }}
if ${{ inputs.python3 == 'stable-abi' }}; then
PYTHON3_CONFOPT="--with-python3-stable-abi=3.8"
fi
# The ubuntu-24.04 CI runner does not provide a python2 package.
CONFOPT="--enable-perlinterp=${INTERFACE} --enable-pythoninterp=no --enable-python3interp=${INTERFACE} --enable-rubyinterp=${INTERFACE} --enable-luainterp=${INTERFACE} --enable-tclinterp=${INTERFACE} ${PYTHON3_CONFOPT}"
;;
esac
if ${{ contains(fromJSON(inputs.extra), 'no_x11_wl') }}; then
CONFOPT="${CONFOPT} --without-x --disable-gui --without-wayland --enable-socketserver"
fi
if ${{ inputs.coverage == true }}; then
CFLAGS="${CFLAGS} --coverage -DUSE_GCOV_FLUSH"
echo "LDFLAGS=--coverage"
fi
if ${{ contains(fromJSON(inputs.extra), 'uchar') }}; then
CFLAGS="${CFLAGS} -funsigned-char"
fi
if ${{ contains(fromJSON(inputs.extra), 'testgui') }}; then
echo "TEST=-C src testgui"
fi
if ${{ contains(fromJSON(inputs.extra), 'unittests') }}; then
echo "TEST=unittests"
fi
if ${{ contains(fromJSON(inputs.extra), 'asan') }}; then
echo "SANITIZER_CFLAGS=-g -O0 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize-recover=all -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer"
echo "ASAN_OPTIONS=print_stacktrace=1:log_path=${LOG_DIR}/asan"
echo "UBSAN_OPTIONS=print_stacktrace=1:log_path=${LOG_DIR}/ubsan"
echo "LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/src/testdir/lsan-suppress.txt"
fi
if ${{ contains(fromJSON(inputs.extra), 'vimtags') }}; then
echo "TEST=-C runtime/doc vimtags VIMEXE=../../${SRCDIR}/vim"
fi
if ${{ contains(fromJSON(inputs.extra), 'proto') }}; then
echo "TEST=-C src protoclean proto"
fi
echo "CFLAGS=${CFLAGS}"
echo "CONFOPT=${CONFOPT}"
# Disables GTK attempt to integrate with the accessibility service that does run in CI.
echo "NO_AT_BRIDGE=1"
) >> $GITHUB_ENV
echo '::endgroup::'
- name: Set up system
shell: bash
run: |
echo '::group::Set up system'
if [[ ${CC} = clang ]]; then
# Use llvm-cov instead of gcov when compiler is clang.
ln -fs /usr/bin/llvm-cov ${HOME}/bin/gcov
fi
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0
sudo usermod -a -G audio "${USER}"
sudo bash ci/setup-xvfb.sh
echo '::endgroup::'
- name: Check autoconf
if: contains(fromJSON(inputs.extra), 'unittests')
shell: bash
run: |
echo '::group::Check autoconf'
make -C src autoconf
echo '::endgroup::'
- name: Set up shadow dir
if: inputs.shadow
shell: bash
run: |
echo '::group::Set up shadow dir'
make -C src shadow
echo "SRCDIR=${{ inputs.shadow }}" >> $GITHUB_ENV
echo "SHADOWOPT=-C ${{ inputs.shadow }}" >> $GITHUB_ENV
echo '::endgroup::'
- name: Configure
shell: bash
run: |
echo '::group::Configure'
./configure --with-features=${{ inputs.features }} ${CONFOPT} --enable-fail-if-missing
# Append various warning flags to CFLAGS.
sed -i -f ci/config.mk.sed ${SRCDIR}/auto/config.mk
sed -i -f ci/config.mk.${CC}.sed ${SRCDIR}/auto/config.mk
if [[ ${CC} = clang ]]; then
# Suppress some warnings produced by clang 12 and later.
sed -i -f ci/config.mk.clang-12.sed ${SRCDIR}/auto/config.mk
fi
echo '::endgroup::'
- name: Build
if: (!contains(fromJSON(inputs.extra), 'unittests'))
shell: bash
run: |
echo '::group::Build'
make ${SHADOWOPT} -j${NPROC}
echo '::endgroup::'
- name: Check version
if: (!contains(fromJSON(inputs.extra), 'unittests'))
shell: bash
run: |
echo '::group::Check version'
"${SRCDIR}"/vim --version
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit
if ${{ inputs.features == 'huge' }}; then
# Also check that optional and dynamic features are configured and working
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 \
-c "let g:required=['gettext', 'sodium', 'sound', 'perl', 'python3', 'lua', 'ruby', 'tcl']" \
-S ci/if_feat_check.vim -c quit
fi
echo '::endgroup::'

View File

@@ -1,10 +1,10 @@
name: 'test_artifacts'
name: "test_artifacts"
description: "Upload failed test artifacts"
runs:
using: "composite"
steps:
- name: Collect matrix properties for naming
uses: actions/github-script@v8
uses: actions/github-script@v9
id: matrix-props
env:
MATRIX_PROPS: ${{ toJSON(matrix) }}
@@ -40,9 +40,10 @@ runs:
# A file, directory or wildcard pattern that describes what
# to upload.
path: |
${{ github.workspace }}/runtime/indent/testdir/*.fail
${{ github.workspace }}/runtime/syntax/testdir/failed/*
${{ github.workspace }}/src/testdir/failed/*
${{ github.workspace }}/logs/**/*.symbolized
${{ github.workspace }}/runtime/indent/testdir/*.fail
${{ github.workspace }}/runtime/syntax/testdir/failed/*
${{ github.workspace }}/src/testdir/failed/*
# The desired behavior if no files are found using the
# provided path.
if-no-files-found: ignore

View File

@@ -2,7 +2,7 @@ name: GitHub CI
on:
push:
branches: ['**']
branches: ["**"]
pull_request:
# Cancels all previous workflow runs for pull requests that have not completed.
@@ -28,7 +28,7 @@ jobs:
LEAK_CFLAGS: -DEXITFREE
LOG_DIR: ${{ github.workspace }}/logs
TERM: xterm
DISPLAY: ':99'
DISPLAY: ":99"
DEBIAN_FRONTEND: noninteractive
strategy:
@@ -67,12 +67,6 @@ jobs:
coverage: true
interface: dynamic
extra: [uchar, testgui]
- features: huge
compiler: clang
# Lua5.1 is the most widely used version (since it's what LuaJIT is
# compatible with), so ensure it works
lua_ver: '5.1'
extra: [asan]
- features: huge
compiler: gcc
coverage: true
@@ -90,254 +84,26 @@ jobs:
extra: [no_x11_wl]
steps:
- name: Checkout repository from github
- name: Checkout repository from GitHub
uses: actions/checkout@v6
- name: Check Filelist (for packaging)
run: |
# If any files in the repository are not listed in Filelist this will
# exit with an error code and list the missing entries.
make -f ci/unlisted.make
- name: Check hlgroups (are any new hlgroups added, but not handled in highlight.c)
run: |
# If any highlight groups have been documented, but not handled in
# highlight.c, nor listed as 'intentionally left out' in hlgroups.ignore,
# exit with an error code and list the missing entries.
make -C ci -f hlgroups.make
- name: Report executable syntax tests
if: contains(matrix.extra, 'syn_test_execs')
run: |
# Search and list all found executable syntax tests, and exit with
# an error code.
make -C runtime/syntax executables
- run: sudo dpkg --add-architecture i386
if: matrix.architecture == 'i386'
- name: Uninstall snap
run: |
sudo bash ci/remove_snap.sh
- name: Enable debug packages
run: |
# Some of the ASAN suppressions are in libraries linked with dlopen
# and symbolization of them requires these debug packages.
sudo apt install ubuntu-dbgsym-keyring
sudo cp ci/ddebs.list /etc/apt/sources.list.d/ddebs.list
sudo cp ci/pinned-pkgs /etc/apt/preferences.d/pinned-pkgs
- name: Install packages
run: |
# This is added by default, and it is often broken, but we don't need anything from it
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
PKGS=( \
gettext \
x11-utils \
labwc \
wl-clipboard \
wayland-utils \
libgtk-3-dev:${{ matrix.architecture }} \
libgtk-3-bin:${{ matrix.architecture }} \
desktop-file-utils \
libc6-dbgsym:${{ matrix.architecture }} \
libtool-bin \
libncurses-dev:${{ matrix.architecture }} \
libxt-dev:${{ matrix.architecture }} \
libegl-mesa0:${{ matrix.architecture }} \
libegl1:${{ matrix.architecture }} \
libegl1-mesa-dev:${{ matrix.architecture }} \
libepoxy-dev:${{ matrix.architecture }} \
libwayland-egl1:${{ matrix.architecture }} \
libwayland-client0:${{ matrix.architecture }} \
libwayland-cursor0:${{ matrix.architecture }} \
locales-all \
software-properties-common \
)
if ${{ contains(matrix.extra, 'asan') }} && ${{ contains(matrix.architecture, 'native') }}; then
PKGS+=( \
libepoxy0-dbgsym:${{ matrix.architecture }} \
libxdamage1-dbgsym:${{ matrix.architecture }} \
libxcb1-dbgsym:${{ matrix.architecture }} \
libgtk-3-bin-dbgsym:${{ matrix.architecture }} \
libgtk-3-0t64-dbgsym:${{ matrix.architecture }} \
libglib2.0-0t64-dbgsym:${{ matrix.architecture }} \
libglib2.0-bin-dbgsym:${{ matrix.architecture }} \
libglib2.0-dev-bin-dbgsym:${{ matrix.architecture }} \
)
fi
if ${{ matrix.features == 'huge' }}; then
LUA_VER=${{ matrix.lua_ver || '5.4' }}
PKGS+=( \
autoconf \
gdb \
lcov \
libcanberra-dev \
libperl-dev \
python3-dev \
liblua${LUA_VER}-dev \
lua${LUA_VER} \
ruby-dev \
tcl-dev \
cscope \
libsodium-dev \
attr \
libattr1-dev
)
fi
if ${{ contains(matrix.extra, 'proto') }}; then
PKGS+=( python3-clang )
fi
sudo apt-get update && sudo apt-get upgrade -y --allow-downgrades && sudo apt-get install -y --allow-downgrades "${PKGS[@]}"
- name: Install gcc-${{ env.GCC_VER }}
if: matrix.compiler == 'gcc'
run: |
# ubuntu-toolchain-r/test PPA for gcc-13 compiler
# disabled because the installation failed, causing test failures
# sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt-get update -y
sudo apt-get install -y gcc-${{ env.GCC_VER }}:${{ matrix.architecture }}
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ env.GCC_VER }} 100
sudo update-alternatives --set gcc /usr/bin/gcc-${{ env.GCC_VER }}
- name: Install clang-${{ env.CLANG_VER }}
if: matrix.compiler == 'clang'
run: |
. /etc/lsb-release
curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/llvm-archive-keyring.gpg > /dev/null
echo "Types: deb
URIs: https://apt.llvm.org/${DISTRIB_CODENAME}/
Suites: llvm-toolchain-${DISTRIB_CODENAME}-${{ env.CLANG_VER }}
Components: main
Signed-By: /usr/share/keyrings/llvm-archive-keyring.gpg" | sudo tee /etc/apt/sources.list.d/llvm-toolchain.sources > /dev/null
sudo apt-get update -y
sudo apt-get install -y clang-${{ env.CLANG_VER }} llvm-${{ env.CLANG_VER }}
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ env.CLANG_VER }} 100
sudo update-alternatives --set clang /usr/bin/clang-${{ env.CLANG_VER }}
sudo update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-${{ env.CLANG_VER }} 100
sudo update-alternatives --install /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-${{ env.CLANG_VER }} 100
- name: Set up environment
run: |
mkdir -p "${LOG_DIR}"
mkdir -p "${HOME}/bin"
echo "${HOME}/bin" >> $GITHUB_PATH
(
echo "LINUX_VERSION=$(uname -r)"
echo "NPROC=$(getconf _NPROCESSORS_ONLN)"
echo "TMPDIR=$(mktemp -d -p /tmp)"
case "${{ matrix.features }}" in
tiny)
echo "TEST=testtiny"
if ${{ contains(matrix.extra, 'nogui') }}; then
CONFOPT="--disable-gui"
fi
;;
normal)
;;
huge)
echo "TEST=scripttests test_libvterm indenttest syntaxtest"
INTERFACE=${{ matrix.interface || 'yes' }}
if ${{ matrix.python3 == 'stable-abi' }}; then
PYTHON3_CONFOPT="--with-python3-stable-abi=3.8"
fi
# The ubuntu-24.04 CI runner does not provide a python2 package.
CONFOPT="--enable-perlinterp=${INTERFACE} --enable-pythoninterp=no --enable-python3interp=${INTERFACE} --enable-rubyinterp=${INTERFACE} --enable-luainterp=${INTERFACE} --enable-tclinterp=${INTERFACE} ${PYTHON3_CONFOPT}"
;;
esac
if ${{ contains(matrix.extra, 'no_x11_wl') }}; then
CONFOPT="${CONFOPT} --without-x --disable-gui --without-wayland --enable-socketserver"
fi
if ${{ matrix.coverage == true }}; then
CFLAGS="${CFLAGS} --coverage -DUSE_GCOV_FLUSH"
echo "LDFLAGS=--coverage"
fi
if ${{ contains(matrix.extra, 'uchar') }}; then
CFLAGS="${CFLAGS} -funsigned-char"
fi
if ${{ contains(matrix.extra, 'testgui') }}; then
echo "TEST=-C src testgui"
fi
if ${{ contains(matrix.extra, 'unittests') }}; then
echo "TEST=unittests"
fi
if ${{ contains(matrix.extra, 'asan') }}; then
echo "SANITIZER_CFLAGS=-g -O0 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize-recover=all -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer"
echo "ASAN_OPTIONS=print_stacktrace=1:log_path=${LOG_DIR}/asan"
echo "UBSAN_OPTIONS=print_stacktrace=1:log_path=${LOG_DIR}/ubsan"
echo "LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/src/testdir/lsan-suppress.txt"
fi
if ${{ contains(matrix.extra, 'vimtags') }}; then
echo "TEST=-C runtime/doc vimtags VIMEXE=../../${SRCDIR}/vim"
fi
if ${{ contains(matrix.extra, 'proto') }}; then
echo "TEST=-C src protoclean proto"
fi
echo "CFLAGS=${CFLAGS}"
echo "CONFOPT=${CONFOPT}"
# Disables GTK attempt to integrate with the accessibility service that does run in CI.
echo "NO_AT_BRIDGE=1"
) >> $GITHUB_ENV
- name: Set up system
run: |
if [[ ${CC} = clang ]]; then
# Use llvm-cov instead of gcov when compiler is clang.
ln -fs /usr/bin/llvm-cov ${HOME}/bin/gcov
fi
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0
sudo usermod -a -G audio "${USER}"
sudo bash ci/setup-xvfb.sh
- name: Check autoconf
if: contains(matrix.extra, 'unittests')
run: |
make -C src autoconf
- name: Set up shadow dir
if: matrix.shadow
run: |
make -C src shadow
echo "SRCDIR=${{ matrix.shadow }}" >> $GITHUB_ENV
echo "SHADOWOPT=-C ${{ matrix.shadow }}" >> $GITHUB_ENV
- name: Configure
run: |
./configure --with-features=${{ matrix.features }} ${CONFOPT} --enable-fail-if-missing
# Append various warning flags to CFLAGS.
sed -i -f ci/config.mk.sed ${SRCDIR}/auto/config.mk
sed -i -f ci/config.mk.${CC}.sed ${SRCDIR}/auto/config.mk
if [[ ${CC} = clang ]]; then
# Suppress some warnings produced by clang 12 and later.
sed -i -f ci/config.mk.clang-12.sed ${SRCDIR}/auto/config.mk
fi
- name: Build
if: (!contains(matrix.extra, 'unittests'))
run: |
make ${SHADOWOPT} -j${NPROC}
- name: Check version
if: (!contains(matrix.extra, 'unittests'))
run: |
"${SRCDIR}"/vim --version
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit
if ${{ matrix.features == 'huge' }}; then
# Also check that optional and dynamic features are configured and working
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 \
-c "let g:required=['gettext', 'sodium', 'sound', 'perl', 'python3', 'lua', 'ruby', 'tcl']" \
-S ci/if_feat_check.vim -c quit
fi
timeout-minutes: 15
uses: ./.github/actions/build_vim_on_linux
with:
features: ${{ matrix.features }}
compiler: ${{ matrix.compiler }}
architecture: ${{ matrix.architecture }}
extra: ${{ toJSON(matrix.extra) }}
shadow: ${{ matrix.shadow }}
interface: ${{ matrix.interface }}
lua_ver: ${{ matrix.lua_ver }}
python3: ${{ matrix.python3 }}
coverage: ${{ matrix.coverage }}
- name: Test
timeout-minutes: 45
run: |
make ${SHADOWOPT} ${TEST}
timeout-minutes: 20
run: make ${SHADOWOPT} ${TEST}
# Enable to debug failing tests live and ssh into the CI runners
# - name: Setup tmate session
@@ -346,7 +112,8 @@ jobs:
# with:
# limit-access-to-actor: true
- if: ${{ !cancelled() }}
- name: Upload failed test artifacts
if: ${{ !cancelled() }}
uses: ./.github/actions/test_artifacts
- name: Vim tags
@@ -410,15 +177,73 @@ jobs:
flags: linux,${{ matrix.features }}-${{ matrix.compiler }}-${{ join(matrix.extra, '-') }}
token: ${{ secrets.CODECOV_TOKEN }}
linux-asan:
runs-on: ubuntu-24.04
env:
CC: clang
CLANG_VER: 21
SRCDIR: ./src
LEAK_CFLAGS: -DEXITFREE
LOG_DIR: ${{ github.workspace }}/logs
TERM: xterm
DISPLAY: ":99"
DEBIAN_FRONTEND: noninteractive
strategy:
fail-fast: false
matrix:
testset:
- tinytests
- newtests.1
- newtests.2
steps:
- name: Checkout repository from GitHub
uses: actions/checkout@v6
- name: Build
timeout-minutes: 15
uses: ./.github/actions/build_vim_on_linux
with:
features: huge
compiler: clang
extra: '["asan"]'
# Lua5.1 is the most widely used version (since it's what LuaJIT is
# compatible with), so ensure it works
lua_ver: "5.1"
- name: Test (tinytests)
if: matrix.testset == 'tinytests'
timeout-minutes: 20
run: make ${TEST} NEW_TESTS_RES=
- name: Test (newtests)
if: startsWith(matrix.testset, 'newtests')
timeout-minutes: 20
env:
JOB_INDEX: ${{ strategy.job-index }}
JOB_TOTAL: ${{ strategy.job-total }}
run: |
set -x
make -C src/testdir SCRIPTS_TINY_OUT= \
NEW_TESTS_RES="$(python3 ci/gen_testset.py $((JOB_TOTAL-1)) | jq -r --argjson i $((JOB_INDEX-1)) '.[$i]|join(" ")')"
- name: ASan logs
if: contains(matrix.extra, 'asan') && !cancelled()
if: ${{ !cancelled() }}
run: |
for f in $(grep -lR '#[[:digit:]]* *0x[[:xdigit:]]*' "${LOG_DIR}"); do
echo "$f"
asan_symbolize -l "$f"
(
echo "$f"
asan_symbolize -l "$f"
) | tee "$f".symbolized
false # in order to fail a job
done
- name: Upload failed test artifacts
if: ${{ !cancelled() }}
uses: ./.github/actions/test_artifacts
macos:
runs-on: ${{ matrix.runner }}
@@ -436,7 +261,7 @@ jobs:
runner: [macos-15-intel, macos-26]
steps:
- name: Checkout repository from github
- name: Checkout repository from GitHub
uses: actions/checkout@v6
- name: Install packages
@@ -503,7 +328,8 @@ jobs:
run: |
make ${TEST}
- if: ${{ !cancelled() }}
- name: Upload failed test artifacts
if: ${{ !cancelled() }}
uses: ./.github/actions/test_artifacts
windows:
@@ -513,7 +339,7 @@ jobs:
# Interfaces
# Lua
LUA_VER: 54
LUA_VER_DOT: '5.4'
LUA_VER_DOT: "5.4"
LUA_RELEASE: 5.4.2
LUA32_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win32_dllw6_lib.zip
LUA64_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win64_dllw6_lib.zip
@@ -522,16 +348,16 @@ jobs:
LUA_DIR_SLASH: D:/Lua
# Python 2
PYTHON_VER: 27
PYTHON_VER_DOT: '2.7'
PYTHON_VER_DOT: "2.7"
PYTHON_DIR: 'C:\Python27'
# Python 3
PYTHON3_VER: 313
PYTHON3_VER_DOT: '3.13'
PYTHON3_VER_DOT: "3.13"
# Other dependencies
# winpty
WINPTY_URL: https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip
# libsodium
SODIUM_VER: '1.0.20'
SODIUM_VER: "1.0.20"
# SODIUM_MSVC_URL: https://download.libsodium.org/libsodium/releases/libsodium-%SODIUM_VER%-stable-msvc.zip
SODIUM_MSVC_URL: https://github.com/jedisct1/libsodium/releases/download/%SODIUM_VER%-RELEASE/libsodium-%SODIUM_VER%-msvc.zip
SODIUM_MSVC_VER: v143
@@ -609,7 +435,7 @@ jobs:
echo "SODIUM_DIR=${SODIUM_DIR}" >> $GITHUB_ENV
echo "GETTEXT_PATH=D:\gettext${{ matrix.arch == 'x64' && '64' || '32' }}" >> $GITHUB_ENV
- uses: msys2/setup-msys2@v2
- uses: msys2/setup-msys2@v2.31.1
if: matrix.toolchain == 'mingw'
with:
update: true
@@ -619,7 +445,7 @@ jobs:
msystem: ${{ env.MSYSTEM }}
release: false
- name: Checkout repository from github
- name: Checkout repository from GitHub
uses: actions/checkout@v6
- name: Create a list of download URLs
@@ -633,7 +459,7 @@ jobs:
echo %GETTEXT64_URL%>> urls.txt
- name: Cache downloaded files
uses: actions/cache@v5
uses: actions/cache@v5.0.5
with:
path: downloads
key: ${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('urls.txt') }}
@@ -833,7 +659,8 @@ jobs:
nmake -nologo -f Make_mvc.mak tiny VIMPROG=..\vim || exit 1
)
- if: ${{ !cancelled() }}
- name: Upload failed test artifacts
if: ${{ !cancelled() }}
uses: ./.github/actions/test_artifacts
- name: Generate gcov files

View File

@@ -48,7 +48,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
uses: github/codeql-action/init@v4.35.2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -59,7 +59,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v4
uses: github/codeql-action/autobuild@v4.35.2
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -73,4 +73,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
uses: github/codeql-action/analyze@v4.35.2

325
AGENTS.md Normal file
View File

@@ -0,0 +1,325 @@
# AGENTS.md
Guidance for AI coding agents working in the Vim repository.
## Project
Vim is a text editor written in C. The canonical repository is
https://github.com/vim/vim. The code is old and has grown organically over
the past 30+ years. Some files are vendored from upstream projects
(`src/xdiff`, `src/libvterm`); parts of the runtime are occasionally shared
with forks like Neovim.
Vim strives to be portable across several different operating systems and
aims to be a stable, robust editor gradually developing new features while
remaining backwards compatible as much as possible.
At the same time, Vim can be compiled with different feature sets, from the
POSIX compatible minimal vi to a full-fledged GUI editor which includes
additional scripting interfaces.
See `runtime/doc/develop.txt` for the high level design goals.
## Build and test
# Full build on Unix/Linux (from src/):
make
# Run the full test suite:
make test
# Generate proto files
make proto
# Run a single test file:
cd src/testdir && make test_name.res
Output is in testdir/messages and testdir/test.log
Builds on Windows depend on the Environment, see `src/INSTALLpc.txt`
for Cygwin/MSYS and MSVC ways to build Vim
Before submitting any patch, at minimum:
1. The build succeeds without new warnings.
2. Relevant tests pass.
3. The code matches the style of the file being edited.
## Layout
- `src/` - the C source. Subsystem names are usually obvious from filenames
(`buffer.c`, `window.c`, `search.c`, `vim9compile.c`, etc.).
- `src/proto/` - function prototypes, one `.pro` file per source file.
Regenerated; do not hand-edit unless you know what you're doing.
- `src/po` - Translations
- `src/xxd` - for the xxd subproject
- `src/xdiff` - for the xdiff library (imported from git)
- `src/libvterm` - for the libvterm library
- `src/testdir/` - tests. Vim-script files named `test_*.vim`.
Screendump expected output lives in `src/testdir/dumps/`.
- `runtime/doc/` - user-facing documentation in Vim help format, when updating,
also update the Last Change header
- `runtime/syntax/generator` - Syntax script for Vim Script, automatically generated
from Vims source
- `runtime/` - runtime files shipped with Vim, when updating, also update the
Last Change header and a short description if this file has no maintainer
If the file has a maintainer, changes should go via them (so make a merge
request against the upstream repo instead)
- `src/version.c` - contains the `included_patches[]` list. Every
patch touching anything below `src/` (with the exception of `src/po`) needs a
new entry at the top, will be updated only when merging into
the master tree.
## Commit format
Vim uses a strict commit message format. The subject line is a
one-sentence **problem statement**, not a description of the fix:
patch 9.2.NNNN: short description of the problem
Problem: Restatement of the problem as a full sentence, possibly
with a reporter attribution in parentheses.
Solution: Short description of the fix, ending with the author's
name in parentheses.
optional longer description of the problem and solution goes here in prose.
Do not use bullet points.
fixes: #NNNN
related: #NNNN
closes: #NNNN
Co-authored-by: Name
Signed-off-by: Author Name <email>
Rules:
- **Subject line states the problem**, not the solution. "fix typo" is
wrong; "typo in foo() causes OOB read" is right.
- **Problem line is a full sentence with a trailing period.** It mirrors
the subject.
- **Solution line ends with `(Author Name)`** — parentheses, period
after them.
- **Longer prose**, if any, goes after the Problem/Solution header
- **`fixes:` references the issue** the patch fixes.
**`closes:` references the PR** that introduces the fix.
**`related:` references related issues**, including issues that caused this
one.
All can appear. Colon, aligned, no trailing period.
- **`Signed-off-by:` is required** — DCO.
- **`Co-Authored-By:` is allowed** and is the accepted way to
acknowledge AI assistance transparently. Human
coauthors should usually also have their own Signed-off-by.
## C code conventions
- **Indentation is 4 spaces per level.** Existing files use tabs with
`ts=8 sts=4 sw=4 noet` (set by the modeline in the file),
so tabs of width 8 appear where two levels of indent collapse. `sign.c`,
`sound.c`, and any new file must use spaces only and follow the style from
the .editorconfig file.
- **Opening braces go on their own line (Allman style)** — for function
definitions and for control-flow constructs (`if`/`else`/`for`/`while`/
`do`) alike.
- **Function definitions**: return type on its own indented line, with
the function name beginning on the next line.
- Initialize locals where a reader cannot trivially see the first
assignment (common for pointers and return-value accumulators).
Don't add `= 0` initializers for values that are always assigned
before use — they can hide real uninitialized-read bugs from
the compiler.
- `for (int i = 0; ...)` loop declarations are fine in files that
use them; older files may declare the counter at the top of the
block.
- **Function-scope declarations at the top of a block** is the historical
style, but mid-block declarations are acceptable in files that have
adopted them. Match the surrounding code.
- **Custom types end in `_T`** (e.g., `buf_T`, `linenr_T`, `pos_T`).
Never use `_t` — it collides with POSIX typedefs.
- **C language is C95 plus specific C99 features**: `//` comments,
mixed declarations and statements, `__func__`, `bool`/`_Bool`,
variadic macros, compound literals, `static inline`, trailing enum
commas. Do not reach for later C standards — Vim still must build
with Compaq C on OpenVMS. See `*assumptions-C-compiler*` in
`develop.txt` for the full list.
- **`bool` / `true` / `false` are acceptable.** Vim is transitioning
from `int` with `TRUE`/`FALSE` to C99 `bool`. Do not "fix" `bool`
back to `int`. Within a single patch, be consistent — don't mix
`true` and `TRUE` in new code.
- **Do not mass-convert** `TRUE`/`FALSE` to `true`/`false` across files
unless that is the patch's explicit purpose. Opportunistic
conversions create noise in diffs.
- **`STRLEN_LITERAL("...")`** should be used when the length of a
string literal is needed. Avoid `STRLEN()` on literals.
- **`vim_snprintf_safelen()`** returns the written length; prefer it
over `vim_snprintf()` when the length is then needed.
- **Prefer `dict_add_string_len()`** when the string length is already
known, over `dict_add_string()` which calls `STRLEN()`.
- **String/buffer parameters go `(char_u *buf, size_t buflen)`** —
length alongside pointer, in bytes. Use `size_t` for byte counts,
`int` only where required by legacy APIs.
- **Guards before divisions.** Check for divisor zero explicitly, even
when a composite earlier guard would prevent it. Relying on
transitive guards is fragile.
- When introducing new allocations, verify the cleanup paths handle all exit
conditions (early return, error branches, etc).
**Use Vim wrappers instead of libc where one exists:**
| libc | Vim | Why |
|---------------|------------------------|-----------------------------|
| `free()` | `vim_free()` | Tolerates NULL |
| `malloc()` | `alloc()` / `lalloc()` | Checks for OOM |
| `strcpy()` | `STRCPY()` | Cast for `char_u *` |
| `strchr()` | `vim_strchr()` | Handles special characters |
| `strrchr()` | `vim_strrchr()` | Handles special characters |
| `memcpy()` | `mch_memmove()` | Handles overlapping copies |
| `bcopy()` | `mch_memmove()` | Handles overlapping copies |
| `memset()` | `vim_memset()` | Uniform across systems |
| `isspace()` | `vim_isspace()` | Handles bytes > 127 |
| `iswhite()` | `vim_iswhite()` | TRUE only for tab and space |
Further rules, not spelled out here, live in `runtime/doc/develop.txt`:
- `*style-names*` — reserved name patterns (`is*`, `to*`, `str*`, `mem*`,
`wcs*`, `.*_t`, `__.*`), forbidden identifiers (`delete`, `this`, `new`,
`time`, `index`), and the 31-character function-name limit.
- `*style-spaces*`, `*style-examples*` — spacing and one-statement-per-line.
- `*style-various*``FEAT_` feature prefix, uppercase `#define`,
`#ifdef HAVE_X` rather than `#if HAVE_X`, no `'\"'`.
- `*assumptions-makefiles*` — POSIX.1-2001 `make` only in the main
Makefiles (no `%` rules, `:=`, `.ONESHELL`, GNU conditionals).
- Vim uses `char_u` instead of `char` type
- Vim uses the macros `STRLEN`, `STRCPY`, `STRCMP`, `STRCAT` that work
with the `char_u` type.
- `*style-clang-format*``sign.c` and `sound.c` are formatted with
`clang-format`; re-run it after editing those files.
## Vim9 script conventions (in tests and runtime files)
- Write modern Vim style (new files can use Vim9 script, but compatibility
with Neovim and other forks is a concern, so in doubt please ask!)
- **Drop `l:` prefix from local variables** in Vim-script tests.
- **Don't add `CheckFeature` inside individual tests** if it's already
at the top of the file.
- If a test file doesn't gate features at the top, add CheckFeature to
individual tests that depend on specific build features.
## Test conventions
- Tests are in `src/testdir/test_*.vim`.
- Reproducible tests beat "it doesn't crash" tests. If a patch fixes
a rendering bug, add a screendump test. If it fixes incorrect output,
assert the output.
- Add comprehensive tests for newly added features and include them
in existing tests if possible
- **Screendump tests** use `CheckScreendump`, `RunVimInTerminal`,
`VerifyScreenDump`, and live dumps in `src/testdir/dumps/`.
- `v9.CheckScriptSuccess(lines)` / `v9.CheckScriptFailure(lines, error, lnum)`
are the standard way to test Vim9 script behavior at script-load time.
- When fixing a bug reported as an issue, include a test that
reproduces the original report, not just a minimal synthetic case.
- Tests for Syntax runtime are in `runtime/syntax/testdir`
- Tests for Indent runtime are in `runtime/indent/testdir`
## Common gotchas
- **Distinguish what code enforces from what docs claim.** If a patch
changes documented behavior, say so in the Problem/Solution.
- **Generated files** (`src/auto/configure`, generated Wayland protocol
C, etc.) should only be regenerated when their source changes.
Mixing unrelated regeneration into a functional patch creates noise.
## Documentation
- User-facing option or feature changes require a `runtime/doc/*.txt`
update in the same patch.
- When editing an existing help file, bump the `Last change:` header
at the top.
### Help file style
See `runtime/doc/helphelp.txt` (`*help-writing*`) for the authoritative
reference. Key conventions:
- **File header**: first line is `*filename.txt*` then a tab then a
short description. That description appears under `LOCAL ADDITIONS`
in `help.txt`. The version and `Last change:` date go on the second
line, right aligned.
- **Modeline**: every help file ends with a Vim modeline — typically
`vim:tw=78:ts=8:noet:ft=help:norl:`.
- **Layout**: `'textwidth'` 78, `'tabstop'` 8, indent and align with
tab characters. Two spaces between sentences. Run `:retab`
(not `:retab!`, and review the diff) after editing.
- **Tags** are defined as `*tag-name*`, usually right-aligned on the
line where the thing they name is introduced. Tag names must be
unique across all of `runtime/doc/`; for plugin help, prefix with
the plugin name.
- **Cross-references inside help text**:
- `|tag-name|` — hot-link to an existing tag.
- `` `:cmd` `` — Ex command, highlighted as a code block.
- `'option'` — option name, in single quotes.
- `<Key>` or `CTRL-X` — special keys.
- `{placeholder}` — user-supplied argument.
- **Sections** are separated by a line of `=` starting in column 1.
Column or subsection headings end with `~` to trigger heading
highlighting.
- **Code blocks** start with `>` at the end of the introducing line
and end with `<` as the first non-blank on a later line (any line
starting in column 1 also implicitly closes the block). Use `>vim`
(or another language name) to request syntax highlighting inside
the block.
- **Notation** — `Note`, `Todo`, `Error` and a few similar words are
auto-highlighted; do not try to fake the highlighting by other means.
- **Language**: gender-neutral language is preferred for new or updated
text; existing wording does not need to be rewritten for this alone.
## Release policy
Vim alternates between development cycles and stability periods — see
`runtime/doc/develop.txt` `*design-policy*`.
- **During a stability period** only clear bug fixes, security fixes,
documentation updates, translations, and runtime file updates are
accepted. No new features, no backwards-incompatible changes.
- **Once released in a minor version**, C-core features must stay
backwards-compatible. Runtime files have a bit more flexibility so
their maintainers can correct old behavior.
- **Deprecated features** stay reachable via config (do not hard-error),
are documented as deprecated, can be disabled at compile time, and
may be removed in a later cycle.
## Security
Before reporting a suspected security issue or submitting a patch
that touches security-sensitive code, read `SECURITY.md`. Follow
the disclosure process described there.
## Before submitting
1. Commit message follows the format above.
2. All modified code compiles without new warnings.
3. Tests pass, and new functionality has regression tests.
4. Documentation is updated for user-visible changes.
5. Signed-off-by is present.
6. Diff contains only changes relevant to the stated problem —
no stray whitespace fixes, no unrelated refactors, no unrelated
regeneration of `auto/configure`.
7. For multi-patch series: each commit compiles and passes its own
tests. A known-broken intermediate state that a later patch fixes
is not acceptable — squash instead.
## When in doubt
- Make the smallest possible change to achieve the goal. Do not rewrite
entire files or functions when a targeted edit suffices.
- Read surrounding code and match its style rather than imposing an
"improvement."
- Err toward smaller, more focused patches. A patch that does three
things is three patches.
- If a patch fixes a symptom of a deeper bug, say so in the Problem
and acknowledge the scope limitation in the Solution.
- Before claiming a bug exists, reproduce it. Before claiming code does X, read
the code. Do not rely on training-data memory of file contents.
- Before running shell commands that modify files outside the working tree,
install packages, push branches, or invoke network operations, confirm with
the user.

View File

@@ -13,6 +13,7 @@ SRC_ALL = \
.github/workflows/codeql-analysis.yml \
.github/workflows/coverity.yml \
.github/workflows/link-check.yml \
.github/actions/build_vim_on_linux/action.yml \
.github/actions/test_artifacts/action.yml \
.github/dependabot.yml \
.gitignore \
@@ -23,6 +24,7 @@ SRC_ALL = \
.editorconfig \
ci/appveyor.bat \
ci/config.mk*.sed \
ci/gen_testset.py \
ci/if_ver*.vim \
ci/if_feat_check.vim \
ci/lychee.toml \
@@ -151,6 +153,7 @@ SRC_ALL = \
src/spellfile.c \
src/spellsuggest.c \
src/strings.c \
src/strptime.c \
src/structs.h \
src/syntax.c \
src/tabpanel.c \
@@ -440,6 +443,7 @@ SRC_ALL = \
src/libvterm/t/66screen_extent.test \
src/libvterm/t/67screen_dbl_wh.test \
src/libvterm/t/68screen_termprops.test \
src/libvterm/t/69screen_pushline.test \
src/libvterm/t/69screen_reflow.test \
src/libvterm/t/90vttest_01-movement-1.test \
src/libvterm/t/90vttest_01-movement-2.test \
@@ -1195,6 +1199,7 @@ IGNORE = \
.github/FUNDING.yml \
.github/labeler.yml \
.github/workflows/label.yml \
AGENTS.md \
SECURITY.md \
ci/unlisted.make \
ci/hlgroups.make \

43
ci/gen_testset.py Normal file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/env python3
import argparse
import itertools
import json
import re
import subprocess
def generate_testset(n):
cp = subprocess.run(["make", "-C", "src/testdir", "-npq"], capture_output=True)
tests = set()
for line in cp.stdout.decode().split("\n"):
if re.match(r"^(NEW_TESTS_RES|TEST_VIM9_RES) = ", line):
tests.update(re.findall(r"\btest\w+\.res\b", line))
tests = sorted(list(tests))
# move test_alot*.res to the end
tests = (
[t for t in tests if not t.startswith("test_alot")]
+ [t for t in tests if t.startswith("test_alot_")]
+ ["test_alot.res"]
)
targets = tests
if n > 1:
targets = [ts for ts in itertools.batched(tests, n)]
targets = [[t for t in ts if t] for ts in itertools.zip_longest(*targets)]
return targets
def main():
parser = argparse.ArgumentParser()
parser.add_argument("n", type=int, nargs="?", default=1)
args = parser.parse_args()
print(json.dumps(generate_testset(args.n)))
if __name__ == "__main__":
main()

View File

@@ -13,7 +13,7 @@ extensions = ["c", "h", "md", "html", "txt"]
accept = ["100..=103", "200..=299", "429"]
# Retry each request a few times on transient network errors
retries = 2
max_retries = 2
retry_wait_time = 2
# Timeout per request in seconds

View File

@@ -137,7 +137,7 @@ README_vms.txt VMS
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Для системе macOS вы може использовать MacVim: https://macvim.org
Для системе macOS вы можете использовать MacVim: https://macvim.org
Последние новости о редакторе Vim можно найти на его домашней странице:
https://www.vim.org/

View File

@@ -3,7 +3,7 @@ vim9script
# Vim functions for file type detection
#
# Maintainer: The Vim Project <https://github.com/vim/vim>
# Last Change: 2026 Apr 03
# Last Change: 2026 Apr 23
# Former Maintainer: Bram Moolenaar <Bram@vim.org>
# These functions are moved here from runtime/filetype.vim to make startup
@@ -915,7 +915,7 @@ export def FTinc()
elseif line =~ '^\s*\%({\|(\*\)' || line =~? ft_pascal_keywords
setf pascal
return
elseif line =~# '\<\%(require\|inherit\)\>' || line =~# '[A-Z][A-Za-z0-9_:${}/]*\s\+\%(??\|[?:+.]\)\?=.\? '
elseif line =~# '\<\%(require\|inherit\)\>' || line =~# '[A-Z][A-Za-z0-9_:${}/]*\(\[[A-Za-z0-9_:/]\+\]\)*\s\+\%(??\|[?:+.]\)\?=.\? '
setf bitbake
return
endif
@@ -1726,6 +1726,8 @@ const ft_from_ext = {
"tdf": "ahdl",
# AIDL
"aidl": "aidl",
# Algol 68
"a68": "algol68",
# AMPL
"run": "ampl",
# ANTLR / PCCTS
@@ -1798,6 +1800,7 @@ const ft_from_ext = {
# BDF font
"bdf": "bdf",
# Beancount
"bean": "beancount",
"beancount": "beancount",
# BibTeX bibliography database file
"bib": "bib",
@@ -3113,7 +3116,9 @@ const ft_from_ext = {
"bp": "bp",
# Tiltfile
"Tiltfile": "tiltfile",
"tiltfile": "tiltfile"
"tiltfile": "tiltfile",
# Ghostty
"ghostty": "ghostty",
}
# Key: file name (the final path component, excluding the drive and root)
# Value: filetype

View File

@@ -3,7 +3,7 @@ vim9script
# Vim runtime support library
#
# Maintainer: The Vim Project <https://github.com/vim/vim>
# Last Change: 2026 Apr 06
# Last Change: 2026 Apr 17
export def IsSafeExecutable(filetype: string, executable: string): bool
if empty(exepath(executable))
@@ -139,7 +139,11 @@ export def Open(file: string)
setlocal shell&
defer setbufvar('%', '&shell', shell)
endif
Launch($"{Viewer()} {shellescape(file, 1)}")
if has('unix') && !has('win32unix') && !exists('$WSL_DISTRO_NAME')
Launch($"{Viewer()} {shellescape(file)}")
else
Launch($"{Viewer()} {shellescape(file, 1)}")
endif
enddef
# Uncomment this line to check for compilation errors early

View File

@@ -1,6 +1,6 @@
" Vim autoload file for editing compressed files.
" Maintainer: The Vim Project <https://github.com/vim/vim>
" Last Change: 2024 Nov 25
" Last Change: 2026 Apr 26
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
" These functions are used by the gzip plugin.
@@ -82,13 +82,8 @@ fun gzip#read(cmd)
let empty = line("'[") == 1 && line("']") == line("$")
let tmp = tempname()
let tmpe = tmp . "." . expand("<afile>:e")
if exists('*fnameescape')
let tmp_esc = fnameescape(tmp)
let tmpe_esc = fnameescape(tmpe)
else
let tmp_esc = escape(tmp, ' ')
let tmpe_esc = escape(tmpe, ' ')
endif
let tmp_esc = fnameescape(tmp)
let tmpe_esc = fnameescape(tmpe)
" write the just read lines to a temp file "'[,']w tmp.gz"
execute "silent '[,']w " . tmpe_esc
" uncompress the temp file: call system("gzip -dn tmp.gz")
@@ -101,22 +96,14 @@ fun gzip#read(cmd)
let ok = 1
" delete the compressed lines; remember the line number
let l = line("'[") - 1
if exists(":lockmarks")
lockmarks '[,']d _
else
'[,']d _
endif
lockmarks '[,']d _
" read in the uncompressed lines "'[-1r tmp"
" Use ++edit if the buffer was empty, keep the 'ff' and 'fenc' options.
setlocal nobin
if exists(":lockmarks")
if empty
execute "silent lockmarks " . l . "r ++edit " . tmp_esc
else
execute "silent lockmarks " . l . "r " . tmp_esc
endif
if empty
execute "silent lockmarks " . l . "r ++edit " . tmp_esc
else
execute "silent " . l . "r " . tmp_esc
execute "silent lockmarks " . l . "r " . tmp_esc
endif
" if buffer became empty, delete trailing blank line
@@ -143,11 +130,7 @@ fun gzip#read(cmd)
" When uncompressed the whole buffer, do autocommands
if ok && empty
if exists('*fnameescape')
let fname = fnameescape(expand("%:r"))
else
let fname = escape(expand("%:r"), " \t\n*?[{`$\\%#'\"|!<")
endif
let fname = fnameescape(expand("%:r"))
if filereadable(undofile(expand("%")))
exe "sil rundo " . fnameescape(undofile(expand("%")))
endif
@@ -191,8 +174,9 @@ fun gzip#appre(cmd)
call s:set_compression(readfile(nm, "b", 1)[0])
endif
" Rename to a weird name to avoid the risk of overwriting another file
let nmt = expand("<afile>:p:h") . "/X~=@l9q5"
" Rename to a unique name to avoid the risk of overwriting another file
" or being targeted by a symlink in a shared directory.
let nmt = s:samedir_tempname(nm)
let nmte = nmt . "." . expand("<afile>:e")
if rename(nm, nmte) == 0
if &patchmode != "" && getfsize(nm . &patchmode) == -1
@@ -208,22 +192,27 @@ fun gzip#appre(cmd)
endfun
" find a file name for the file to be compressed. Use "name" without an
" extension if possible. Otherwise use a weird name to avoid overwriting an
" existing file.
" extension if possible. Otherwise use a unique name to avoid overwriting an
" existing file or following a symlink set up by another user.
fun s:tempname(name)
let fn = fnamemodify(a:name, ":r")
if !filereadable(fn) && !isdirectory(fn)
return fn
endif
return fnamemodify(a:name, ":p:h") . "/X~=@l9q5"
return s:samedir_tempname(a:name)
endfun
" Generate an unpredictable file name in the same directory as "name", using
" the random component of tempname() to avoid symlink attacks in shared
" directories (e.g. /tmp).
fun s:samedir_tempname(name)
let tmp = tempname()
return fnamemodify(a:name, ":p:h") . "/" . fnamemodify(tmp, ":h:t") . fnamemodify(tmp, ":t")
endfun
fun s:escape(name)
" shellescape() was added by patch 7.0.111
if exists("*shellescape")
return shellescape(a:name)
endif
return "'" . a:name . "'"
return shellescape(a:name)
endfun
" vim: set sw=2 :

View File

@@ -23,6 +23,8 @@
" 2026 Apr 06 by Vim Project: fix bugs with lz4 support (#19925)
" 2026 Apr 09 by Vim Project: fix bugs with zstd support (#19930)
" 2026 Apr 09 by Vim Project: fix bug with dotted filename (#19930)
" 2026 Apr 15 by Vim Project: fix more path traversal issues (#19981)
" 2026 Apr 16 by Vim Project: use g:tar_secure in tar#Extract()
"
" Contains many ideas from Michael Toren's <tar.vim>
"
@@ -612,6 +614,24 @@ fun! tar#Extract()
let &report= repkeep
return
endif
if fname =~ '^[.]\?[.]/' || simplify(fname) =~ '\.\.[/\\]'
call s:Msg('tar#Extract', 'error', "Path Traversal Attack detected, not extracting!")
let &report= repkeep
return
endif
if has("unix")
if fname =~ '^/'
call s:Msg('tar#Extract', 'error', "Path Traversal Attack detected, not extracting!")
let &report= repkeep
return
endif
else
if fname =~ '^\%(\a:[\\/]\|[\\/]\)'
call s:Msg('tar#Extract', 'error', "Path Traversal Attack detected, not extracting!")
let &report= repkeep
return
endif
endif
let extractcmd= s:WinPath(g:tar_extractcmd)
let tarball = expand("%")
@@ -621,7 +641,7 @@ fun! tar#Extract()
endif
if tarball =~# "\.tar$"
call system(extractcmd." ".shellescape(tarball)." ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
@@ -630,7 +650,7 @@ fun! tar#Extract()
elseif tarball =~# "\.tgz$"
let extractcmd= substitute(extractcmd,"-","-z","")
call system(extractcmd." ".shellescape(tarball)." ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
@@ -639,7 +659,7 @@ fun! tar#Extract()
elseif tarball =~# "\.tar\.gz$"
let extractcmd= substitute(extractcmd,"-","-z","")
call system(extractcmd." ".shellescape(tarball)." ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
@@ -648,7 +668,7 @@ fun! tar#Extract()
elseif tarball =~# "\.tbz$"
let extractcmd= substitute(extractcmd,"-","-j","")
call system(extractcmd." ".shellescape(tarball)." ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
@@ -657,7 +677,7 @@ fun! tar#Extract()
elseif tarball =~# "\.tar\.bz2$"
let extractcmd= substitute(extractcmd,"-","-j","")
call system(extractcmd." ".shellescape(tarball)." ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
@@ -666,7 +686,7 @@ fun! tar#Extract()
elseif tarball =~# "\.tar\.bz3$"
let extractcmd= substitute(extractcmd,"-","-j","")
call system(extractcmd." ".shellescape(tarball)." ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
@@ -675,7 +695,7 @@ fun! tar#Extract()
elseif tarball =~# "\.txz$"
let extractcmd= substitute(extractcmd,"-","-J","")
call system(extractcmd." ".shellescape(tarball)." ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
@@ -684,7 +704,7 @@ fun! tar#Extract()
elseif tarball =~# "\.tar\.xz$"
let extractcmd= substitute(extractcmd,"-","-J","")
call system(extractcmd." ".shellescape(tarball)." ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
@@ -693,7 +713,7 @@ fun! tar#Extract()
elseif tarball =~# "\.tzst$"
let extractcmd= substitute(extractcmd,"-","--zstd -","")
call system(extractcmd." ".shellescape(tarball)." ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
@@ -702,7 +722,7 @@ fun! tar#Extract()
elseif tarball =~# "\.tar\.zst$"
let extractcmd= substitute(extractcmd,"-","--zstd -","")
call system(extractcmd." ".shellescape(tarball)." ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
@@ -713,7 +733,7 @@ fun! tar#Extract()
if has("linux")
let extractcmd= substitute(extractcmd,"-","-I lz4 -","")
endif
call system(extractcmd." ".shellescape(tarball)." ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else
@@ -724,7 +744,7 @@ fun! tar#Extract()
if has("linux")
let extractcmd= substitute(extractcmd,"-","-I lz4 -","")
endif
call system(extractcmd." ".shellescape(tarball)." ".shellescape(fname))
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
else

View File

@@ -1,13 +1,10 @@
" vimball.vim : construct a file containing both paths and files
" Maintainer: This runtime file is looking for a new maintainer.
" Original Author: Charles E. Campbell
" Date: Apr 11, 2016
" Date: Apr 16, 2026
" Version: 37 (with modifications from the Vim Project)
" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
" Last Change:
" 2025 Feb 28 by Vim Project: add support for bzip3 (#16755)
" 2026 Apr 05 by Vim Project: Detect path traversal attacks
" 2026 Apr 09 by Vim Project: Detect more path traversal attacks
" Copyright: (c) 2004-2011 by Charles E. Campbell
" The VIM LICENSE applies to Vimball.vim, and Vimball.txt
" (see |copyright|) except use "Vimball" instead of "Vim".
@@ -230,8 +227,11 @@ fun! vimball#Vimball(really,...)
let fsize = substitute(getline(linenr+1),'^\(\d\+\).\{-}$','\1','')+0
let fenc = substitute(getline(linenr+1),'^\d\+\s*\(\S\{-}\)$','\1','')
let filecnt = filecnt + 1
" Do not allow a leading / or .. anywhere in the file name
if fname =~ '\.\.' || fname =~ '^/'
" Do not allow a leading /, .. anywhere, or a Windows drive letter
" (e.g. C:/foo) in the file name. Backslashes were already converted
" to forward slashes above, so this also catches \\server\share UNC
" paths via the leading-slash check.
if fname =~ '\.\.' || fname =~ '^/' || fname =~ '^\a:'
echomsg "(Vimball) Path Traversal Attack detected, aborting..."
exe "tabn ".curtabnr
bw! Vimball

View File

@@ -22,6 +22,8 @@
" 2026 Mar 08 by Vim Project: Make ZipUpdatePS() check for powershell
" 2026 Apr 01 by Vim Project: Detect more path traversal attacks
" 2026 Apr 05 by Vim Project: Detect more path traversal attacks
" 2026 Apr 14 by Vim Project: Detect more path traversal attacks on Windows
" 2026 Apr 15 by Vim Project: Detect more path traversal attacks on Windows
" License: Vim License (see vim's :help license)
" Copyright: Copyright (C) 2005-2019 Charles E. Campbell {{{1
" Permission is hereby granted to use and distribute this code,
@@ -405,7 +407,12 @@ fun! zip#Write(fname)
else
let zipfile = substitute(a:fname,'^.\{-}zipfile://\(.\{-}\)::[^\\].*$','\1','')
let fname = substitute(a:fname,'^.\{-}zipfile://.\{-}::\([^\\].*\)$','\1','')
" TODO: what to check on MS-Windows to avoid writing absolute paths?
" fname should not start with drive letter, UNC path, or leading slash
if fname =~ '^\%(\a:[\\/]\|[\\/]\)'
call s:Mess('Error', "***error*** (zip#Write) Path Traversal Attack detected, not writing!")
call s:ChgDir(curdir,s:WARNING,"(zip#Write) unable to return to ".curdir."!")
return
endif
endif
if fname =~ '^[.]\{1,2}/'
let gnu_cmd = g:zip_zipcmd . ' -d ' . s:Escape(fnamemodify(zipfile,":p"),0) . ' ' . s:Escape(fname,0)
@@ -499,6 +506,18 @@ fun! zip#Extract()
call s:Mess('Error', "***error*** (zip#Browse) Path Traversal Attack detected, not extracting!")
return
endif
" block absolute paths
if has("unix")
if fname =~ '^/'
call s:Mess('Error', "***error*** (zip#Extract) Path Traversal Attack detected, not extracting!")
return
endif
else
if fname =~ '^\%(\a:[\\/]\|[\\/]\)'
call s:Mess('Error', "***error*** (zip#Extract) Path Traversal Attack detected, not extracting!")
return
endif
endif
if filereadable(fname)
call s:Mess('Error', "***error*** (zip#Extract) <" .. fname .."> already exists in directory, not overwriting!")
return

View File

@@ -1,4 +1,4 @@
*builtin.txt* For Vim version 9.2. Last change: 2026 Apr 10
*builtin.txt* For Vim version 9.2. Last change: 2026 Apr 28
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -107,7 +107,8 @@ ch_getbufnr({handle}, {what}) Number get buffer number for {handle}/{what}
ch_getjob({channel}) Job get the Job of {channel}
ch_info({handle}) Dict info about channel {handle}
ch_listen({address} [, {options}])
Channel listen on {address}
Channel listen on {address} - port on loopback
or UNIX domain socket
ch_log({msg} [, {handle}]) none write {msg} in the channel log file
ch_logfile({fname} [, {mode}]) none start logging channel activity
ch_open({address} [, {options}])
@@ -704,6 +705,8 @@ tabpagebuflist([{arg}]) List list of buffer numbers in tab page
tabpagenr([{arg}]) Number number of current or last tab page
tabpagewinnr({tabarg} [, {arg}])
Number number of current window in tab page
tabpanel_getinfo() Dict get current state of the tabpanel
tabpanel_scroll({n} [, {opts}]) Bool scroll the tabpanel
tagfiles() List tags files used
taglist({expr} [, {filename}]) List list of tags matching {expr}
tan({expr}) Float tangent of {expr}
@@ -6862,6 +6865,8 @@ listener_add({callback} [, {buf} [, {unbuffered}]]) *listener_add()*
second argument: >
GetBuffer()->listener_add(callback)
<
This function is not available in the |sandbox|.
Return type: |Number|
@@ -6876,6 +6881,8 @@ listener_flush([{buf}]) *listener_flush()*
Can also be used as a |method|: >
GetBuffer()->listener_flush()
<
This function is not available in the |sandbox|.
Return type: void
@@ -6887,6 +6894,8 @@ listener_remove({id}) *listener_remove()*
Can also be used as a |method|: >
GetListenerId()->listener_remove()
<
This function is not available in the |sandbox|.
Return type: |Number|
@@ -8866,6 +8875,8 @@ redraw_listener_add({opts}) *redraw_listener_add()*
Can also be used as a |method|: >
GetOpts()->redraw_listener_add()
<
This function is not available in the |sandbox|.
Return type: |Number|
@@ -11316,7 +11327,12 @@ strptime({format}, {timestring}) *strptime()*
can try different {format} values until you get a non-zero
result.
Note: On MS-Windows, where the C runtime does not provide
strptime(), Vim uses a built-in fallback that always uses
English locale names regardless of the active locale.
See also |strftime()|.
Examples: >
:echo strptime("%Y %b %d %X", "1997 Apr 27 11:49:23")
< 862156163 >
@@ -11870,6 +11886,38 @@ tabpagewinnr({tabarg} [, {arg}]) *tabpagewinnr()*
Return type: |Number|
tabpanel_getinfo() *tabpanel_getinfo()*
Return a |Dictionary| describing the current state of the
tabpanel (see |tabpanel|). The dictionary has these keys:
align "left" or "right"
columns width in screen columns
scrollbar |TRUE| if a scrollbar is shown
offset current scroll offset in rows
total total number of rows rendered
max_offset largest valid value for "offset"
The "total" and "max_offset" values are only accurate after
the tabpanel has been drawn at least once.
Return type: dict<any>
tabpanel_scroll({n} [, {opts}]) *tabpanel_scroll()*
Scroll the tabpanel by {n} rows. Positive values scroll down
(later tabs become visible), negative values scroll up. The
new offset is clamped to the valid range.
When {opts} is a |Dictionary| and its "absolute" entry is
|TRUE|, {n} is used as the new absolute scroll offset
instead of a delta.
Returns |TRUE| if the scroll offset changed, |FALSE|
otherwise (for example when the tabpanel is not shown, or
the offset is already at the requested value).
Return type: |vim9-boolean|
tagfiles() *tagfiles()*
Returns a |List| with the file names used to search for tags
for the current buffer. This is the 'tags' option expanded.
@@ -11989,6 +12037,7 @@ terminalprops() *terminalprops()*
underline_rgb whether |t_8u| works **
mouse mouse type supported
kitty whether Kitty terminal was detected
decrqm whether sending DECRQM sequences work
** value 'u' for unknown, 'y' for yes, 'n' for no
@@ -12008,6 +12057,9 @@ terminalprops() *terminalprops()*
For "mouse" the value 'u' is unknown
If "decrqm" is 'y', then Vim will query support for the
'termsync' and 'termresize' ("inband") options.
Also see:
- 'ambiwidth' - detected by using |t_u7|.
- |v:termstyleresp| and |v:termblinkresp| for the response to
@@ -13353,8 +13405,6 @@ vtp Compiled for vcon support |+vtp| (check vcon to find
out if it works in the current console).
wayland Compiled with Wayland protocol support.
wayland_clipboard Compiled with support for Wayland clipboard.
wayland_focus_steal Compiled with support for Wayland clipboard focus
stealing.
wildignore Compiled with 'wildignore' option.
wildmenu Compiled with 'wildmenu' option.
win16 old version for MS-Windows 3.1 (always false)

View File

@@ -1,4 +1,4 @@
*channel.txt* For Vim version 9.2. Last change: 2026 Apr 06
*channel.txt* For Vim version 9.2. Last change: 2026 Apr 15
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -132,7 +132,7 @@ Start Vim and create a listening channel: >
endfunc
" Start listening on port 8765
let server = ch_listen('localhost:8765', {"callback": "OnAccept"})
let server = ch_listen('8765', {"callback": "OnAccept"})
From another Vim instance (or any program) you can connect to it: >
let channel = ch_open('localhost:8765')
@@ -637,8 +637,7 @@ ch_info({handle}) *ch_info()*
"status" "open", "buffered" or "closed", like
ch_status()
When opened with ch_open():
"hostname" the hostname of the address
"port" the port of the address
"port" the port on loopback
"path" the path of the Unix-domain socket
"sock_status" "open" or "closed"
"sock_mode" "NL", "RAW", "JSON" or "JS"
@@ -668,22 +667,23 @@ ch_info({handle}) *ch_info()*
Return type: dict<any>
ch_listen({address} [, {options}]) *E1573* *E1574* *ch_listen()*
Listen on {address} for incoming channel connections.
This creates a server-side channel, unlike |ch_open()|
which connects to an existing server.
Listen on {address} - port on loopback or UNIX domain socket
for incoming channel connections. This creates a server-side
channel, unlike |ch_open()| which connects to an existing
server.
Returns a Channel. Use |ch_status()| to check for failure.
{address} is a String, see |channel-address| for the possible
accepted forms, however binding to all interfaces is not
allowed for security reasons.
accepted forms, however in case of TCP sockets it allows to
set only a port and binds to loopback address for security
reasons.
Note: IPv6 is not yet supported.
If {options} is given it must be a |Dictionary|.
See |channel-open-options|.
The "callback" in {options} is invoked when a new
connection is accepted. It receives two arguments: the
new Channel and the client address as a String (e.g.
"127.0.0.1:12345").
The "callback" in {options} is invoked when a new connection
is accepted. It receives two arguments: the new Channel and
the client address as a String (e.g. "127.0.0.1:12345").
Use |ch_open()| to connect to an existing server instead.

View File

@@ -1,4 +1,4 @@
*cmdline.txt* For Vim version 9.2. Last change: 2026 Mar 17
*cmdline.txt* For Vim version 9.2. Last change: 2026 Apr 20
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -466,14 +466,15 @@ CTRL-L A match is done on the pattern in front of the cursor. If
*c_CTRL-G* */_CTRL-G*
CTRL-G When 'incsearch' is set, entering a search pattern for "/" or
"?" and the current match is displayed then CTRL-G will move
to the next match (does not take |search-offset| into account)
to the next match. The |search-offset| is applied when <CR>
is pressed, but does not affect the match highlighting.
Use CTRL-T to move to the previous match. Hint: on a regular
keyboard G is below T.
*c_CTRL-T* */_CTRL-T*
CTRL-T When 'incsearch' is set, entering a search pattern for "/" or
"?" and the current match is displayed then CTRL-T will move
to the previous match (does not take |search-offset| into
account).
to the previous match. The |search-offset| is applied when
<CR> is pressed, but does not affect the match highlighting.
Use CTRL-G to move to the next match. Hint: on a regular
keyboard T is above G.

View File

@@ -1,4 +1,4 @@
*filetype.txt* For Vim version 9.2. Last change: 2026 Apr 09
*filetype.txt* For Vim version 9.2. Last change: 2026 Apr 13
VIM REFERENCE MANUAL by Bram Moolenaar

View File

@@ -1,4 +1,4 @@
*options.txt* For Vim version 9.2. Last change: 2026 Apr 09
*options.txt* For Vim version 9.2. Last change: 2026 Apr 28
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -324,12 +324,12 @@ that was last closed are used again. If this buffer has been edited in this
window, the values from back then are used. Otherwise the values from the
last closed window where the buffer was edited last are used.
It's possible to set a local window option specifically for a type of buffer.
When you edit another buffer in the same window, you don't want to keep
using these local window options. Therefore Vim keeps a global value of the
local window options, which is used when editing another buffer. Each window
has its own copy of these values. Thus these are local to the window, but
global to all buffers in the window. With this you can do: >
":setlocal" can be used to set a local window option specifically for a type
of buffer. When you edit another buffer in the same window, you don't want to
keep using these local window options. Meanwhile ":set" also sets a global
value of a local window option, which is used when editing another buffer.
Each window has its own copy of these global values, making them local to the
window, but global to all buffers in the window. With this you can do: >
:e one
:set list
:e two
@@ -4757,7 +4757,8 @@ A jump table for the options with a short description can be found at |Q_op|.
l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,
a:LineNrAbove,b:LineNrBelow,
N:CursorLineNr,r:Question,s:StatusLine,
S:StatusLineNC,c:VertSplit,t:Title,
S:StatusLineNC,c:VertSplit,
|:VertSplitNC,t:Title,
v:Visual,V:VisualNOS,w:WarningMsg,
W:WildMenu,f:Folded,F:FoldColumn,
A:DiffAdd,C:DiffChange,D:DiffDelete,
@@ -4805,6 +4806,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|hl-StatusLineNC| S status lines of not-current windows
|hl-Title| t Titles for output from ":set all", ":autocmd" etc.
|hl-VertSplit| c column used to separate vertically split windows
|hl-VertSplitNC| | column separating non-current vertically split
windows
|hl-Visual| v Visual mode
|hl-VisualNOS| V Visual mode when Vim is "Not Owning the
Selection" Only X11 Gui's |gui-x11|,
@@ -6196,6 +6199,48 @@ A jump table for the options with a short description can be found at |Q_op|.
NOTE: 'modeline' is set to the Vi default value when 'compatible' is
set and to the Vim default value when 'compatible' is reset.
*'modelinestrict'* *'mlst'* *'nomodelinestrict'* *'nomlst'*
'modelinestrict' 'mlst' boolean (default: on)
global
When on, only a safe subset of options can be set from a |modeline|.
The following options are allowed:
'autoindent'
'cindent'
'commentstring'
'expandtab'
'filetype'
'foldcolumn'
'foldenable'
'foldmethod'
'modifiable'
'readonly'
'rightleft'
'shiftwidth'
'smartindent'
'softtabstop'
'spell'
'spelllang'
'tabstop'
'textwidth'
'varsofttabstop'
'vartabstop'
Any other option set from a modeline will be silently ignored.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
The behaviour of 'modeline', 'modelinestrict' and 'modelineexpr' is
as follows:
'modeline'| 'modelinestrict'| 'modelineexpr' | Meaning
----------+-----------------+-------------------+--------~
on | off | on | All options can be set
on | on | any | Only whitelisted
| | | options can be set
on | off | off | All options except for
| | | expr options can be set
off | any | any | No options can be set
*'modifiable'* *'ma'* *'nomodifiable'* *'noma'*
*E21*
'modifiable' 'ma' boolean (default on)
@@ -7532,8 +7577,8 @@ A jump table for the options with a short description can be found at |Q_op|.
Minimal number of screen lines to keep above and below the cursor.
This will make some context visible around where you are working. If
you set it to a very large value (999) the cursor line will always be
in the middle of the window (except at the start or end of the file or
when long lines wrap).
in the middle of the window (except at the start or end of the file,
see 'scrolloffpad', or when long lines wrap).
After using the local value, go back the global value with one of
these two: >
setlocal scrolloff<
@@ -7541,7 +7586,24 @@ A jump table for the options with a short description can be found at |Q_op|.
< For scrolling horizontally see 'sidescrolloff'.
NOTE: This option is set to 0 when 'compatible' is set.
*'scrollopt'* *'sbo'*
*'scrolloffpad'* *'sop'*
'scrolloffpad' 'sop' number (default 0)
global or local to window |global-local|
When 'scrolloff' and 'scrolloffpad' are greater than zero, allow
the cursor to remain centered when at the end of the file.
Normally, 'scrolloff' will not keep the cursor centered at the
end of the file.
A value of 0 disables this feature. Any value above 0 enables it.
For a window-local value, -1 means to use the global value.
Values below -1 are invalid.
After using the local value, go back the global value with one of
these two: >
setlocal scrolloffpad<
setlocal scrolloffpad=-1
< *'scrollopt'* *'sbo'*
'scrollopt' 'sbo' string (default "ver,jump")
global
This is a comma-separated list of words that specifies how
@@ -8620,13 +8682,14 @@ A jump table for the options with a short description can be found at |Q_op|.
applied to StatusLineNC for the statusline of non-current
windows.
The number N must be between 1 and 9. See |hl-User1..9|
*stl-%@*
*stl-%@*
@ - Inserts a newline. This only takes effect when the "maxheight"
value of 'statuslineopt' is greater than 1, or for |tabpanel|.
*stl-%[FuncName]*
*stl-%[FuncName]*
%[ defines clickable regions in the statusline. When the user clicks
on a region with the mouse, the specified function is called.
on a region with the mouse, the specified function is called. The
same syntax can also be used in 'tabline' and 'tabpanel'.
%[FuncName] Start of a clickable region. "FuncName" is the name
of a Vim function to call when the region is clicked.
@@ -8644,11 +8707,17 @@ A jump table for the options with a short description can be found at |Q_op|.
"button" Mouse button: "l" (left), "m" (middle), "r" (right).
"mods" Modifier keys: combination of "s" (shift), "c" (ctrl),
"a" (alt). Empty string if no modifiers.
"winid" |window-ID| of the window whose statusline was clicked.
"winid" |window-ID| of the window whose statusline was clicked,
or 0 when the click was in 'tabline' or 'tabpanel'.
"area" "statusline", "tabline", or "tabpanel". Indicates
which option the clicked region belongs to.
"tabnr" (tabpanel only) Tab page number of the clicked label.
If the function returns non-zero, the statusline is redrawn.
Dragging the statusline to resize the window still works even when
click handlers are defined.
click handlers are defined. When used in 'tabline' or 'tabpanel',
clicks in %[FuncName] regions are dispatched to the callback
instead of the default tab-selection behavior.
Example: >
func! ClickFile(info)
@@ -8983,24 +9052,22 @@ A jump table for the options with a short description can be found at |Q_op|.
Optional settings for the |tabpanel|, It can consist of the following
items. Items must be separated by a comma.
align:{text} Specifies the position of the tabpanel.
Currently supported positions are:
left left-side
align:{text} Specifies the position of the tabpanel.
Currently supported positions are:
left left-side (default)
right right-side
(default "left")
columns:{n} Number of columns of the tabpanel.
If this value is 0 or less than 'columns', the
tab panel will not be displayed.
(default 20)
vert Use a vertical separator for tabpanel.
The vertical separator character is taken from
"tpl_vert" in 'fillchars'.
(default off)
columns:{n} Number of columns of the tabpanel. (default 20)
If this value is 0 or less than 'columns', the
tabpanel will not be displayed.
scrollbar A one-column scrollbar is always displayed at the
right edge of the tabpanel, regardless of the
"align:" setting. (default off)
See |tabpanel-scroll|.
vert The vertical separator is drawn at the boundary
between the tabpanel and the buffer area.
(default off)
The character to be drawn uses "tpl_vert" from
'fillchars'.
Examples: >
:set tabpanelopt=columns:16,align:right
:set tabpanelopt=
@@ -10600,11 +10667,10 @@ A jump table for the options with a short description can be found at |Q_op|.
*'wlsteal'* *'wst'* *'nowlsteal'* *'nowst'*
'wlsteal' 'wst' boolean (default off)
global
{only when the |+wayland_focus_steal| feature is
included}
DEPRECATED: This option is no longer used; changing it has no effect.
When enabled, then allow Vim to steal focus by creating a temporary
surface, in order to access the clipboard. For more information see
|wayland-focus-steal|.
surface, in order to access the clipboard.
*'wltimeoutlen'* *'wtm'*
'wltimeoutlen' 'wtm' number (default 500)
@@ -10617,9 +10683,6 @@ A jump table for the options with a short description can be found at |Q_op|.
some cases. On the other hand, it may also mean you receive errors
when the compositor takes more time to respond than usual.
Additionally, this option is also used as the maximum timeout when
waiting for a surface to gain focus, see |wayland-focus-steal|.
*'wrap'* *'nowrap'*
'wrap' boolean (default on)
local to window

View File

@@ -2854,10 +2854,6 @@ your browsing preferences. (see also: |netrw-settings|)
such as listing, file removal, etc.
default: ssh
*g:netrw_tmpfile_escape* =' &;'
escape() is applied to all temporary files
to escape these characters.
*g:netrw_timefmt* specify format string to vim's strftime().
The default, "%c", is "the preferred date
and time representation for the current

View File

@@ -1,4 +1,4 @@
*pi_tar.txt* For Vim version 9.2. Last change: 2026 Feb 14
*pi_tar.txt* For Vim version 9.2. Last change: 2026 Apr 16
+====================+
| Tar File Interface |
@@ -101,10 +101,17 @@ Copyright 2005-2017: *tar-copyright*
4. History *tar-history*
unreleased:
Apr 16, 2026 * add missing g:tar_secure into tar#Extract
Apr 15, 2026 * add path traversal checks in tar#Extract()
Apr 09, 2026 * fix zstd support and dotted filename support
Apr 06, 2026 * fix lz4 support
Feb 07, 2026 * make path traversal detection more robust
Feb 06, 2026 * fix bug with nowrapscan
Jul 16, 2025 * update minimum required Vim version
Jul 13, 2025 * drop leading /
May 19, 2025 * restore working directory after read/write
Apr 16, 2025 * decouple from netrw by adding s:WinPath()
instead of shelling out to file(1)
instead of shelling out to file(1)
Mar 02, 2025 * determine the compression using readblob()
Mar 02, 2025 * escape the filename before using :read
Mar 01, 2025 * fix syntax error in tar#Read()

View File

@@ -1,4 +1,4 @@
*pi_vimball.txt* For Vim version 9.2. Last change: 2026 Apr 05
*pi_vimball.txt* For Vim version 9.2. Last change: 2026 Apr 16
----------------
Vimball Archiver
@@ -166,6 +166,11 @@ WINDOWS *vimball-windows*
==============================================================================
4. Vimball History *vimball-history* {{{1
unreleased:
Feb 28, 2025 * add support for bzip3 (#16755)
Apr 05, 2026 * Detect path traversal attacks
Apr 09, 2026 * Detect more path traversal attacks
Apr 16, 2026 * Block Windows drive letter paths
37 : Jul 18, 2014 * (by request of T. Miedema) added augroup around
the autocmds in vimballPlugin.vim
Jul 06, 2015 * there are two uses of tabc; changed to tabc!

View File

@@ -1,4 +1,4 @@
*quickref.txt* For Vim version 9.2. Last change: 2026 Apr 07
*quickref.txt* For Vim version 9.2. Last change: 2026 Apr 21
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -823,6 +823,7 @@ Short explanation of each option: *option-list*
'modeline' 'ml' recognize modelines at start or end of file
'modelineexpr' 'mle' allow setting expression options from a modeline
'modelines' 'mls' number of lines checked for modelines
'modelinestrict' 'mlst' only allow safe options in modelines
'modifiable' 'ma' changes to the text are not possible
'modified' 'mod' buffer has been modified
'more' pause listings when the whole screen is filled
@@ -894,6 +895,7 @@ Short explanation of each option: *option-list*
'scrollfocus' 'scf' scroll wheel applies to window under pointer
'scrolljump' 'sj' minimum number of lines to scroll
'scrolloff' 'so' minimum nr. of lines above and below cursor
'scrolloffpad' 'sop' vertically center cursor at end of file
'scrollopt' 'sbo' how 'scrollbind' should behave
'sections' 'sect' nroff macros that separate sections
'secure' secure mode for reading .vimrc in current dir

View File

@@ -1,4 +1,4 @@
*syntax.txt* For Vim version 9.2. Last change: 2026 Mar 22
*syntax.txt* For Vim version 9.2. Last change: 2026 Apr 27
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -849,6 +849,20 @@ ADA
See |ft-ada-syntax|
ALGOL 68 *algol68* *ft-algol68-syntax*
This syntax file currently targets the Algol 68 Genie project using the
default UPPER stropping regime. It should also be usuable in other
environments using the UPPER stropping regime, though somewhat less complete.
Highlighting can be further configured with the following variables.
Variable Highlight ~
*algol68_no_preludes* no prelude identifiers, procedures or
bold word operators
*algol68_symbolic_operators* all prelude symbolic operators
ANT *ant.vim* *ft-ant-syntax*
The ant syntax file provides syntax highlighting for javascript and python
@@ -5978,7 +5992,14 @@ EndOfBuffer Filler lines (~) after the last line in the buffer.
*hl-ErrorMsg*
ErrorMsg Error messages on the command line.
*hl-VertSplit*
VertSplit Column separating vertically split windows.
VertSplit Column separating vertically split windows that are adjacent
to the current window. On the current window's status line
rows, the separator cell is drawn as a space with the
|hl-StatusLine| highlight so it blends into the status line
without a stray fillchar glyph.
*hl-VertSplitNC*
VertSplitNC Column separating vertically split windows of non-current
windows. By default, highlighted like |hl-VertSplit|.
*hl-Folded*
Folded Line used for closed folds.
*hl-FoldColumn*
@@ -6134,7 +6155,8 @@ TitleBarNC Title bar for inactive Gui's window.
Visual Visual mode selection.
*hl-VisualNOS*
VisualNOS Visual mode selection when vim is "Not Owning the Selection".
Only X11 Gui's |gui-x11| and |xterm-clipboard| supports this.
Only X11 Gui's |gui-x11|, |xterm-clipboard| and |wayland-selections|
supports this.
*hl-WarningMsg*
WarningMsg Warning messages.
*hl-WildMenu*

View File

@@ -1,4 +1,4 @@
*tabpage.txt* For Vim version 9.2. Last change: 2026 Feb 14
*tabpage.txt* For Vim version 9.2. Last change: 2026 Apr 28
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -482,6 +482,42 @@ The vertical separator character is taken from "tpl_vert" in 'fillchars'.
You can customize the appearance of the tab page labels using the highlight
groups: |hl-TabPanel| |hl-TabPanelSel| |hl-TabPanelFill|
SCROLLING IN THE TABPANEL *tabpanel-scroll*
When the total height of the tab page list exceeds the visible screen height,
mouse wheel events over the tabpanel area scroll the tab page list up or down.
The scroll step follows the 'mousescroll' setting. Wheel events inside the
tabpanel area are consumed by the tabpanel and do not trigger
|<ScrollWheelUp>| or |<ScrollWheelDown>| mappings.
The current tab page is always brought into view: when the selected tab page
changes (by |gt|, |gT|, |:tabnext| etc.), the panel scrolls so the current
entry is visible.
To show a vertical scrollbar indicating the current scroll position, add
"scrollbar" to 'tabpanelopt': >
:set tabpanelopt+=scrollbar
A one-column scrollbar is always displayed at the right edge of the tabpanel,
regardless of the "align:" setting in 'tabpanelopt'. Clicking on the
scrollbar column moves the thumb to the click position, and the thumb can be
dragged to scroll continuously.
The scrollbar uses the |hl-PmenuSbar| highlight group for the track and
|hl-PmenuThumb| for the thumb.
The scroll offset is remembered across redraws.
MOUSE CLICKS IN THE TABPANEL *tabpanel-mouse*
A left click on a row in the tabpanel selects the tab page that the row
belongs to. Unlike the tabline, a double click in the tabpanel does not open
a new, empty tab page; it is treated the same as a single click.
For finer-grained control, the 'tabpanel' value may contain |stl-%[FuncName]|
click regions. Clicks on those regions are dispatched to the callback
function instead of falling through to tab selection.
==============================================================================
6. Setting 'guitablabel' *setting-guitablabel*

View File

@@ -531,6 +531,7 @@ $quote eval.txt /*$quote*
'ml' options.txt /*'ml'*
'mle' options.txt /*'mle'*
'mls' options.txt /*'mls'*
'mlst' options.txt /*'mlst'*
'mm' options.txt /*'mm'*
'mmd' options.txt /*'mmd'*
'mmp' options.txt /*'mmp'*
@@ -539,6 +540,7 @@ $quote eval.txt /*$quote*
'modeline' options.txt /*'modeline'*
'modelineexpr' options.txt /*'modelineexpr'*
'modelines' options.txt /*'modelines'*
'modelinestrict' options.txt /*'modelinestrict'*
'modifiable' options.txt /*'modifiable'*
'modified' options.txt /*'modified'*
'mopt' options.txt /*'mopt'*
@@ -706,9 +708,11 @@ $quote eval.txt /*$quote*
'nomh' options.txt /*'nomh'*
'noml' options.txt /*'noml'*
'nomle' options.txt /*'nomle'*
'nomlst' options.txt /*'nomlst'*
'nomod' options.txt /*'nomod'*
'nomodeline' options.txt /*'nomodeline'*
'nomodelineexpr' options.txt /*'nomodelineexpr'*
'nomodelinestrict' options.txt /*'nomodelinestrict'*
'nomodifiable' options.txt /*'nomodifiable'*
'nomodified' options.txt /*'nomodified'*
'nomore' options.txt /*'nomore'*
@@ -949,6 +953,7 @@ $quote eval.txt /*$quote*
'scrollfocus' options.txt /*'scrollfocus'*
'scrolljump' options.txt /*'scrolljump'*
'scrolloff' options.txt /*'scrolloff'*
'scrolloffpad' options.txt /*'scrolloffpad'*
'scrollopt' options.txt /*'scrollopt'*
'scs' options.txt /*'scs'*
'sect' options.txt /*'sect'*
@@ -1007,6 +1012,7 @@ $quote eval.txt /*$quote*
'so' options.txt /*'so'*
'softtabstop' options.txt /*'softtabstop'*
'sol' options.txt /*'sol'*
'sop' options.txt /*'sop'*
'sourceany' vi_diff.txt /*'sourceany'*
'sp' options.txt /*'sp'*
'spc' options.txt /*'spc'*
@@ -1556,7 +1562,6 @@ $quote eval.txt /*$quote*
+vtp various.txt /*+vtp*
+wayland various.txt /*+wayland*
+wayland_clipboard various.txt /*+wayland_clipboard*
+wayland_focus_steal various.txt /*+wayland_focus_steal*
+wildignore various.txt /*+wildignore*
+wildmenu various.txt /*+wildmenu*
+windows various.txt /*+windows*
@@ -4773,6 +4778,7 @@ E1572 options.txt /*E1572*
E1573 channel.txt /*E1573*
E1574 channel.txt /*E1574*
E1575 builtin.txt /*E1575*
E1576 tagsrch.txt /*E1576*
E158 sign.txt /*E158*
E159 sign.txt /*E159*
E16 cmdline.txt /*E16*
@@ -6228,6 +6234,9 @@ added-win32-GUI version5.txt /*added-win32-GUI*
aff-dic-format spell.txt /*aff-dic-format*
after-directory options.txt /*after-directory*
aleph options.txt /*aleph*
algol68 syntax.txt /*algol68*
algol68_no_preludes syntax.txt /*algol68_no_preludes*
algol68_symbolic_operators syntax.txt /*algol68_symbolic_operators*
alt intro.txt /*alt*
alt-input debugger.txt /*alt-input*
alternate-file editing.txt /*alternate-file*
@@ -7514,6 +7523,7 @@ ft-ada-options ft_ada.txt /*ft-ada-options*
ft-ada-plugin ft_ada.txt /*ft-ada-plugin*
ft-ada-syntax ft_ada.txt /*ft-ada-syntax*
ft-ada-variables ft_ada.txt /*ft-ada-variables*
ft-algol68-syntax syntax.txt /*ft-algol68-syntax*
ft-ant-syntax syntax.txt /*ft-ant-syntax*
ft-apache-syntax syntax.txt /*ft-apache-syntax*
ft-arduino-plugin filetype.txt /*ft-arduino-plugin*
@@ -7965,7 +7975,6 @@ g:netrw_ssh_browse_reject pi_netrw.txt /*g:netrw_ssh_browse_reject*
g:netrw_ssh_cmd pi_netrw.txt /*g:netrw_ssh_cmd*
g:netrw_sshport pi_netrw.txt /*g:netrw_sshport*
g:netrw_timefmt pi_netrw.txt /*g:netrw_timefmt*
g:netrw_tmpfile_escape pi_netrw.txt /*g:netrw_tmpfile_escape*
g:netrw_uid pi_netrw.txt /*g:netrw_uid*
g:netrw_use_noswf pi_netrw.txt /*g:netrw_use_noswf*
g:netrw_use_nt_rcp pi_netrw.txt /*g:netrw_use_nt_rcp*
@@ -8487,6 +8496,7 @@ hl-User1 syntax.txt /*hl-User1*
hl-User1..9 syntax.txt /*hl-User1..9*
hl-User9 syntax.txt /*hl-User9*
hl-VertSplit syntax.txt /*hl-VertSplit*
hl-VertSplitNC syntax.txt /*hl-VertSplitNC*
hl-Visual syntax.txt /*hl-Visual*
hl-VisualNOS syntax.txt /*hl-VisualNOS*
hl-WarningMsg syntax.txt /*hl-WarningMsg*
@@ -10884,6 +10894,10 @@ tabpagebuflist() builtin.txt /*tabpagebuflist()*
tabpagenr() builtin.txt /*tabpagenr()*
tabpagewinnr() builtin.txt /*tabpagewinnr()*
tabpanel tabpage.txt /*tabpanel*
tabpanel-mouse tabpage.txt /*tabpanel-mouse*
tabpanel-scroll tabpage.txt /*tabpanel-scroll*
tabpanel_getinfo() builtin.txt /*tabpanel_getinfo()*
tabpanel_scroll() builtin.txt /*tabpanel_scroll()*
tag tagsrch.txt /*tag*
tag-! tagsrch.txt /*tag-!*
tag-binary-search tagsrch.txt /*tag-binary-search*
@@ -11798,8 +11812,6 @@ waittime channel.txt /*waittime*
warningmsg-variable eval.txt /*warningmsg-variable*
wayland wayland.txt /*wayland*
wayland-and-x11 wayland.txt /*wayland-and-x11*
wayland-focus-steal wayland.txt /*wayland-focus-steal*
wayland-gnome wayland.txt /*wayland-gnome*
wayland-gui wayland.txt /*wayland-gui*
wayland-persist wayland.txt /*wayland-persist*
wayland-primary-selection wayland.txt /*wayland-primary-selection*

View File

@@ -579,6 +579,9 @@ ctags).
have an absolute or relative path. It may contain environment
variables and wildcards (although the use of wildcards is
doubtful). It cannot contain a <Tab>.
*E1576*
Using a remote file via network protocol (e.g. using
http://remote/file.txt) is not allowed.
{tagaddress} The Ex command that positions the cursor on the tag. It can
be any Ex command, although restrictions apply (see
|tag-security|). Posix only allows line numbers and search

View File

@@ -1,4 +1,4 @@
*usr_41.txt* For Vim version 9.2. Last change: 2026 Feb 16
*usr_41.txt* For Vim version 9.2. Last change: 2026 Apr 28
VIM USER MANUAL by Bram Moolenaar
@@ -1081,6 +1081,8 @@ Buffers, windows and the argument list:
tabpagebuflist() return List of buffers in a tab page
tabpagenr() get the number of a tab page
tabpagewinnr() like winnr() for a specified tab page
tabpanel_getinfo() get current state of the tabpanel
tabpanel_scroll() scroll the tabpanel
winnr() get the window number for the current window
bufwinid() get the window ID of a specific buffer
bufwinnr() get the window number of a specific buffer

View File

@@ -1,4 +1,4 @@
*various.txt* For Vim version 9.2. Last change: 2026 Apr 06
*various.txt* For Vim version 9.2. Last change: 2026 Apr 27
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -60,10 +60,9 @@ ga Print the ascii value of the character under the
but printable according to the 'isprint' option, the
non-printable version is also given.
When the character is larger than 127, the <M-x> form
is also printed. For example:
<~A> <M-^A> 129, Hex 81, Octal 201 ~
<p> <|~> <M-~> 254, Hex fe, Octal 376 ~
When the character is larger than 127:
<<81>> 129, Hex 0081, Octal 201 ~
<p> 254, Hex 00fe, Octal 376 ~
(where <p> is a special character)
The <Nul> character in a file is stored internally as
@@ -185,6 +184,9 @@ g8 Print the hex values of the bytes used in the
If the mark is "=", a line of dashes is printed
around the current line.
If the 'number' option is set, absolute line numbers
will be included in the output.
*:z!*
:[range]z![+-^.=][count]
Like ":z", but when [count] is not specified, it
@@ -529,9 +531,6 @@ T *+vreplace* |gR| and |gr|
*+vtp* on MS-Windows console: support for 'termguicolors'
N *+wayland* Unix only: support for the Wayland protocol.
N *+wayland_clipboard* Unix only: support for Wayland selections/clipboard.
N *+wayland_focus_steal*
Unix only: support for Wayland clipboard on
compositors without a data control protocol
T *+wildignore* 'wildignore' Always enabled since 9.0.0278
T *+wildmenu* 'wildmenu' Always enabled since 9.0.0279
T *+windows* more than one window; Always enabled since 8.0.1118.

View File

@@ -1,4 +1,4 @@
*version9.txt* For Vim version 9.2. Last change: 2026 Apr 09
*version9.txt* For Vim version 9.2. Last change: 2026 Apr 28
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -41954,7 +41954,7 @@ Vim Arguments: ~
Configure Switches: ~
--with-wayland Enable the |wayland| feature.
--enable-wayland-focus-steal Enable the |wayland-focus-steal| feature.
--enable-wayland-focus-steal Enable the wayland-focus-steal feature.
--enable-socketserver Enable the |socketserver-clientserver|
feature.
@@ -52613,12 +52613,16 @@ Other ~
pairs individually (e.g. 'listchars', 'fillchars', 'diffopt').
- |system()| and |systemlist()| functions accept a list as first argument,
bypassing the shell completely.
- Allow mouse clickable regions in the |status-line| using the
|stl-%[FuncName]| atom.
- Allow mouse clickable regions in the 'statusline', 'tabline' and the
'tabpanel' using the |stl-%[FuncName]| atom.
- Enable reflow support in the |:terminal|.
- Enabled scrolling for the tabpanel when the tab page list exceeds the screen
height. Also added the "scrollbar" sub-option to 'tabpanelopt'.
Platform specific ~
-----------------
- support OpenType font features in 'guifont' for DirectWrite (Win32)
- Include strptime() fallback for MS-Windows
xxd ~
---
@@ -52633,6 +52637,11 @@ Changed ~
- |js_decode()| rejects lone surrogates
- virtual text properties on lines deleted by a multi-line substitute
are moved to the resulting joined line instead of being dropped.
- Only a few whitelisted options are allowed to be set by a modeline to
improve overall security, see for details: 'modelinestrict'
- Removed the Wayland focus steal feature 'wlsteal', since it causes too many
issues and can now be re-implemted using the |clipboard-providers| feature
if needed, see |wayland-primary-selection| for an example.
*added-9.3*
Added ~
@@ -52642,6 +52651,8 @@ Various syntax, indent and other plugins were added.
Functions: ~
|ch_listen()| listen on {address}
|tabpanel_getinfo()| get current state of the |tabpanel|
|tabpanel_scroll()| scroll the |tabpanel|
Autocommands: ~
@@ -52649,7 +52660,9 @@ Autocommands: ~
Options: ~
'pumopt' Additional options for the popup menu
'modelinestrict' Only allow safe options to be set from a modeline.
'pumopt' Additional options for the popup menu.
'scrolloffpad' Vertically center cursor at end of file.
'statuslineopt' Extra window-local options for the 'statusline', to
configure the height.
't_BS' Begin synchronized update.
@@ -52658,6 +52671,10 @@ Options: ~
'termsync' Enable support for terminal DEC 2026 sync mode.
'winhighlight' Window-local highlight group mappings.
Highlighting: ~
|hl-VertSplitNC| Column separator of non-current window.
==============================================================================
PATCHES *patches-9.3* *bug-fixes-9.3*
*patches-after-9.2*

View File

@@ -1,4 +1,4 @@
*wayland.txt* For Vim version 9.2. Last change: 2026 Feb 14
*wayland.txt* For Vim version 9.2. Last change: 2026 Apr 20
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -54,15 +54,12 @@ try connecting again.
2. Wayland Selections *wayland-selections*
Vim supports the wlr-data-control-unstable-v1 and ext-data-control-v1
protocols, for accessing the current Wayland selection. These are the best
case scenario protocols, see |wayland-focus-steal|. Selection in this case
protocols, for accessing the current Wayland selection. Selection in this case
essentially means the "clipboard." You can check if your Wayland compositor
supports either of these protocols by running the wayland-info command, which
should be bundled with libwayland on your system: >
wayland-info | grep -E '(ext_data_control|zwlr_data_control)'
<If grep finds a match, then you have either or both protocols on your system.
If you don't get any match, then please see |wayland-focus-steal| for more
information.
Some compositors that are known to support either or both protocols:
1. KWin (KDE)
@@ -90,39 +87,65 @@ Vim determines which one to use when accessing the clipboard using the
*wayland-primary-selection*
If you find X11 style primary selections useful, Wayland also implements this
behaviour in its own protocols:
feature using the protocols that Vim supports. This is unless you are using
version 1 (not the same as the 'v1' in the protocol name), of the
wlr-data-control protocol, then primary selection will not be supported. You
can check this using >
wayland-info | grep -E '(ext_data_control|zwlr_data_control)'
If the "version:" entry for "zwlr_data_control_manager_v1" is "2" or greater,
then primary selection is supported. If you also get
"ext_data_control_manager_v1", then Vim will use that protocol instead, which
has primary selection support builtin into it.
- The primary selection protocol is the most widely supported, but requires
focus in order to be used, see |wayland-focus-steal|.
If your Wayland compositor does not support the wlr-data-control-v1 or the
ext-data-control-v1 protocol, Vim cannot access the clipboard directly through
the Wayland protocol. External tools such as wl-clipboard can be used instead
via a user-defined |clipboard-providers|.
- Data control protocol available on your system, such as the ext or wlr
protocols, then primary selection is also supported. This is unless you are
using version 1 (not the same as the 'v1' in the protocol name), of the
wlr-data-control protocol. Then the primary selection protocol will be used
as a fallback.
Example: define a provider that shells out to `wl-copy` and `wl-paste`: >vim9
*wayland-focus-steal* *wayland-gnome*
If you are using the GNOME desktop environment on Wayland, as of this writing,
there is no method of accessing/modifying the clipboard for external clients
such as Vim without being focused. Focused in this case means the client has
received some sort of input event, such as a window being focused. This is
what the wlr-data-control-unstable-v1 and ext-data-control-v1 protocols solve.
If your Wayland compositor does not support the above protocols, then the
above explanation applies.
vim9script
To solve this problem, Vim implements a way of gaining focus in order to
access the clipboard, by creating a temporary transparent top-level surface.
This is by default disabled and can be enabled via the 'wlsteal' option.
Moreover, a seat that has a keyboard is also required, see 'wlseat', and the
xdg-shell protocol must be available. Additionally, Vim must be compiled with
the |+wayland_focus_steal| feature.
def Available(): bool
return executable('wl-copy') && executable('wl-paste')
enddef
Note that this method can have several side effects from the result of focus
stealing. For example, if you have a taskbar that shows currently opened apps
in your desktop environment, then when Vim attempts to steal focus, it may
"flicker," as if a window was opened then immediately closed after.
Additionally, if you are in fullscreen mode, this focus stealing won't work,
because the created surface won't ever gain focus. If this happens, Vim will
seem to freeze temporarily, see 'wltimeoutlen' for more information.
def Copy(reg: string, type: string, str: list<string>)
var args = "wl-copy"
if reg == "*"
args ..= " -p"
endif
system(args, str)
enddef
def Paste(reg: string): tuple<string, list<string>>
var args = "wl-paste --type text/plain;charset=utf-8"
if reg == "*"
args ..= " -p"
endif
return ("", systemlist(args))
enddef
v:clipproviders["wl_clipboard"] = {
available: Available,
copy: {
"+": Copy,
"*": Copy
},
paste: {
"+": Paste,
"*": Paste
}
}
set clipmethod=wl_clipboard
This relies on the wl-clipboard package being installed
(https://github.com/bugaevc/wl-clipboard).
vim:tw=78:ts=8:noet:ft=help:norl

View File

@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: The Vim Project <https://github.com/vim/vim>
" Last Change: 2026 Apr 08
" Last Change: 2026 Apr 20
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
" If the filetype can be detected from extension or file name(the final path component),
@@ -1617,6 +1617,10 @@ au BufNewFile,BufRead *.txt
\| setf text
\| endif
" Ghostty configuration
au BufNewFile,BufRead */ghostty/config setf ghostty
au BufNewFile,BufRead */ghostty/themes/* call s:StarSetf('ghostty')
au BufNewFile,BufRead */com.mitchellh.ghostty/config setf ghostty
" Generic log file

View File

@@ -0,0 +1,47 @@
" Vim filetype plugin
" Language: Algol 68
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2026 Apr 23
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
" TODO: 'comments'
setlocal commentstring=#\ %s\ #
let &l:include='\c\%(^\|;\)\s*\%(PR\|PRAGMAT\)\s\+\%(read\|include\)'
let b:undo_ftplugin = "setl cms< inc<"
if exists("loaded_matchit") && !exists("b:match_words")
let b:match_ignorecase = 0
let b:match_words = '\<BEGIN\>:\<END\>,' ..
\ '\<IF\>:\<THEN\>:\<ELIF\>:\<ELSE\>:\<FI\>,' ..
\ '\<CASE\>:\<IN\>:\<OUSE\>:\<OUT\>:\<ESAC\>,' ..
"\ TODO: loops have overlapping start and intermediate keywords like
"\ `TO` which are difficult to match with patterns alone.
\ '\<DO\>:\<OD\>'
let b:match_skip = 's:Comment\|String\|PreProc'
let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_skip b:match_words"
endif
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "Algol 68 Source Files (*.a68)\t*.a68\n"
if has("win32")
let b:browsefilter ..= "All Files (*.*)\t*\n"
else
let b:browsefilter ..= "All Files (*)\t*\n"
endif
let b:undo_ftplugin ..= " | unlet! b:browsefilter"
endif
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8

View File

@@ -0,0 +1,10 @@
" Vim filetype plugin file
" Language: ghostty
" Quit if a ftplugin file was already loaded
if exists("b:did_ftplugin")
finish
endif
" Use the cfg plugin, it's similar enough.
runtime! ftplugin/cfg.vim

View File

@@ -4,6 +4,7 @@
" Last Change: 2025 Apr 08
" 2025 Apr 08 by Vim project (set 'omnifunc' and 'iskeyword', #17073)
" 2025 Aug 08 by Vim project (unset comment options, #17889)
" 2026 Apr 26 by Vim project (make HelpComplete global, #20024)
if exists("b:did_ftplugin")
finish
@@ -17,14 +18,14 @@ let b:undo_ftplugin = "setl isk< fo< tw< cole< cocu< keywordprg< omnifunc< comme
setl comments= cms=
setlocal formatoptions+=tcroql textwidth=78 keywordprg=:help omnifunc=s:HelpComplete
setlocal formatoptions+=tcroql textwidth=78 keywordprg=:help omnifunc=HelpComplete
let &l:iskeyword='!-~,^*,^|,^",192-255'
if has("conceal")
setlocal cole=2 cocu=nc
endif
if !exists('*s:HelpComplete')
func s:HelpComplete(findstart, base)
if !exists('*HelpComplete')
func HelpComplete(findstart, base)
if a:findstart
let colnr = col('.') - 1 " Get the column number before the cursor
let line = getline('.')

View File

@@ -1,7 +1,7 @@
" These commands create the option window.
"
" Maintainer: The Vim Project <https://github.com/vim/vim>
" Last Change: 2026 Apr 07
" Last Change: 2026 Apr 21
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
" If there already is an option window, jump to that one.
@@ -351,6 +351,8 @@ call append("$", "\t" .. s:local_to_window)
call <SID>BinOptionL("sms")
call <SID>AddOption("scrolloff", gettext("number of screen lines to show around the cursor"))
call append("$", " \tset so=" . &so)
call <SID>AddOption("scrolloffpad", gettext("vertically center cursor even at end of file"))
call append("$", " \tset sop=" . &sop)
call <SID>AddOption("wrap", gettext("long lines wrap"))
call append("$", "\t" .. s:local_to_window)
call <SID>BinOptionL("wrap")
@@ -833,10 +835,6 @@ if has('wayland')
call <SID>AddOption("wlseat", gettext("Wayland seat to use"))
call <SID>OptionG("wse", &wse)
endif
if has("wayland_focus_steal")
call <SID>AddOption("wlsteal", gettext("Enable wayland focus stealing functionality in order to access the clipboard"))
call <SID>BinOptionG("wst", &wst)
endif
call <SID>AddOption("keymodel", gettext("\"startsel\" and/or \"stopsel\"; what special keys can do"))
call <SID>OptionG("km", &km)
@@ -1108,6 +1106,8 @@ call append("$", "\t" .. s:local_to_buffer)
call <SID>BinOptionL("ml")
call <SID>AddOption("modelineexpr", gettext("allow setting expression options from a modeline"))
call <SID>BinOptionG("mle", &mle)
call <SID>AddOption("modelinestrict", gettext("only allow safe options to be set from a modeline"))
call <SID>BinOptionG("modelinestrict", &modelinestrict)
call <SID>AddOption("modelines", gettext("number of lines to check for modelines"))
call append("$", " \tset mls=" . &mls)
call <SID>AddOption("binary", gettext("binary file editing"))

View File

@@ -1,7 +1,7 @@
vim9script
# Highlight Yank plugin
# Last Change: 2025 Mar 22
# Last Change: 2026 Apr 11
def HighlightedYank()
@@ -28,7 +28,11 @@ def HighlightedYank()
return [v[0][1], col_beg, col_end - col_beg]
}))
var winid = win_getid()
timer_start(duration, (_) => m->matchdelete(winid))
timer_start(duration, (_) => {
if winbufnr(winid) != -1
m->matchdelete(winid)
endif
})
endif
enddef

View File

@@ -24,6 +24,10 @@
" 2026 Mar 01 by Vim Project include portnumber in hostname checking #19533
" 2026 Apr 01 by Vim Project use fnameescape() with netrw#FileUrlEdit()
" 2026 Apr 05 by Vim Project Fix netrw#RFC2396() #19913
" 2026 Apr 15 by Vim Project Add missing escape()
" 2026 Apr 19 by Vim Project expand ~ on Windows #20003
" 2026 Apr 21 by Vim Project fix shell-injection via tempfile suffix (sftp://, file://)
" 2026 Apr 21 by Vim Project drop unused g:netrw_tmpfile_escape
" Copyright: Copyright (C) 2016 Charles E. Campbell {{{1
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
@@ -398,7 +402,6 @@ else
call s:NetrwInit("g:netrw_glob_escape",'*[]?`{~$\')
endif
call s:NetrwInit("g:netrw_menu_escape",'.&? \')
call s:NetrwInit("g:netrw_tmpfile_escape",' &;')
call s:NetrwInit("s:netrw_map_escape","<|\n\r\\\<C-V>\"")
if has("gui_running") && (&enc == 'utf-8' || &enc == 'utf-16' || &enc == 'ucs-4')
let s:treedepthstring= "│ "
@@ -529,8 +532,8 @@ function netrw#Explore(indx,dosplit,style,...)
NetrwKeepj norm! 0
if a:0 > 0
if a:1 =~ '^\~' && (has("unix") || g:netrw_cygwin)
let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),''))
if a:1 =~ '^\~' && (has("unix") || has("win32") || g:netrw_cygwin)
let dirname= simplify(substitute(a:1,'^\~',escape(expand("$HOME"),'\&~'),''))
elseif a:1 == '.'
let dirname= simplify(exists("b:netrw_curdir")? b:netrw_curdir : getcwd())
if dirname !~ '/$'
@@ -1819,14 +1822,14 @@ function netrw#NetRead(mode,...)
".........................................
" NetRead: (sftp) NetRead Method #9 {{{3
elseif b:netrw_method == 9
call netrw#os#Execute(s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".netrw#os#Escape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile)
call netrw#os#Execute(s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".netrw#os#Escape(g:netrw_machine.":".b:netrw_fname,1)." ".netrw#os#Escape(tmpfile,1))
let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
let b:netrw_lastfile = choice
".........................................
" NetRead: (file) NetRead Method #10 {{{3
elseif b:netrw_method == 10 && exists("g:netrw_file_cmd")
call netrw#os#Execute(s:netrw_silentxfer."!".g:netrw_file_cmd." ".netrw#os#Escape(b:netrw_fname,1)." ".tmpfile)
call netrw#os#Execute(s:netrw_silentxfer."!".g:netrw_file_cmd." ".netrw#os#Escape(b:netrw_fname,1)." ".netrw#os#Escape(tmpfile,1))
let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
let b:netrw_lastfile = choice
@@ -5304,6 +5307,8 @@ function s:NetrwMarkFileCompress(islocal)
if a:islocal
if g:netrw_keepdir
let fname= netrw#os#Escape(netrw#fs#ComposePath(curdir,fname))
else
let fname= netrw#os#Escape(fname)
endif
call system(exe." ".fname)
if v:shell_error
@@ -5638,6 +5643,8 @@ function s:NetrwMarkFileExe(islocal,enbloc)
if a:islocal
if g:netrw_keepdir
let fname= netrw#os#Escape(netrw#fs#WinPath(netrw#fs#ComposePath(curdir,fname)))
else
let fname= netrw#os#Escape(netrw#fs#WinPath(fname))
endif
else
let fname= netrw#os#Escape(netrw#fs#WinPath(b:netrw_curdir.fname))
@@ -8959,14 +8966,17 @@ function s:GetTempfile(fname)
endif
" use fname's suffix for the temporary file
" Restrict the suffix to word characters so shell metacharacters in a
" remote filename (e.g. sftp://host/foo.txt;id) cannot ride along into
" the tempfile name and out into a downstream shell command.
if a:fname != ""
if a:fname =~ '\.[^./]\+$'
if a:fname =~ '\.\w\+$'
if a:fname =~ '\.tar\.gz$' || a:fname =~ '\.tar\.bz2$' || a:fname =~ '\.tar\.xz$'
let suffix = ".tar".substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e')
let suffix = ".tar".substitute(a:fname,'^.*\(\.\w\+\)$','\1','e')
elseif a:fname =~ '.txz$'
let suffix = ".txz".substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e')
let suffix = ".txz".substitute(a:fname,'^.*\(\.\w\+\)$','\1','e')
else
let suffix = substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e')
let suffix = substitute(a:fname,'^.*\(\.\w\+\)$','\1','e')
endif
let tmpfile= substitute(tmpfile,'\.tmp$','','e')
let tmpfile .= suffix

View File

@@ -2854,10 +2854,6 @@ your browsing preferences. (see also: |netrw-settings|)
such as listing, file removal, etc.
default: ssh
*g:netrw_tmpfile_escape* =' &;'
escape() is applied to all temporary files
to escape these characters.
*g:netrw_timefmt* specify format string to vim's strftime().
The default, "%c", is "the preferred date
and time representation for the current

469
runtime/syntax/algol68.vim Normal file
View File

@@ -0,0 +1,469 @@
" Vim syntax file
" Language: Algol 68
" Version: 0.4
" Maintainer: Janis Papanagnou
" Previous Maintainer: NevilleD.ALGOL_68@sgr-a.net
" Last Change: 2026 Apr 23
if exists("b:current_syntax")
finish
endif
syn sync minlines=250 maxlines=500
" Algol68 Final Report, unrevised
syn keyword algol68PreProc PRIORITY
syn keyword algol68Operator BTB CTB CONJ QUOTE CT CTAB EITHER SIGN
" Algol68 Revised Report
syn keyword algol68Boolean TRUE FALSE
syn keyword algol68Conditional IF THEN ELSE ELIF FI
syn keyword algol68Conditional CASE IN OUT OUSE ESAC
syn keyword algol68Constant NIL SKIP EMPTY
syn keyword algol68Statement MODE OP PRIO PROC
syn keyword algol68Label GOTO
syn match algol68Label "\<GO TO\>"
syn keyword algol68Operator ABS REPR ROUND ENTIER ARG BIN LENG SHORTEN ODD
syn keyword algol68Operator SHL SHR ROL ROR UP DOWN LEVEL LWB UPB I RE IM
syn keyword algol68Operator OVER MOD ELEM SET CLEAR
syn keyword algol68Operator LT LE GE GT
syn keyword algol68Operator EQ NE
syn keyword algol68Operator AND OR XOR NOT
" Genie short-circuit pseudo operators
syn keyword algol68Operator THEF ANDF ANDTH ELSF ORF OREL
syn keyword algol68Operator ANDTHEN ORELSE
syn keyword algol68Operator MINUSAB PLUSAB TIMESAB DIVAB OVERAB MODAB PLUSTO
syn keyword algol68Operator IS ISNT OF AT
syn keyword algol68Operator SORT ELEMS
syn keyword algol68Repeat FOR FROM BY UPTO DOWNTO TO WHILE DO UNTIL OD
syn keyword algol68Statement PAR BEGIN END EXIT
syn keyword algol68Struct STRUCT
syn keyword algol68PreProc VECTOR
syn keyword algol68Type FLEX HEAP LOC LONG REF SHORT
syn keyword algol68Type VOID BOOL INT REAL COMPL CHAR STRING COMPLEX
syn keyword algol68Type BITS BYTES FILE CHANNEL PIPE SEMA SOUND
syn keyword algol68Type FORMAT STRUCT UNION
" Genie extensions in addition to ROUND and ENTIER
syn keyword algol68Operator FLOOR CEIL NINT TRUNC FRAC FIX
" 20011222az: Added new items.
syn keyword algol68Todo contained TODO FIXME XXX DEBUG NOTE
" String
syn region algol68String matchgroup=algol68String start=+"+ end=+"+ contains=algol68StringEscape
syn match algol68StringEscape contained '""'
syn match algol68StringEscape contained "\\$"
syn match algol68Identifier "\<[a-z][a-z0-9_]*\>"
if exists("algol68_symbolic_operators")
syn match algol68SymbolOperator "\\"
syn match algol68SymbolOperator ":=\|="
syn match algol68SymbolOperator "[~^]"
syn match algol68SymbolOperator "[~^]="
syn match algol68SymbolOperator "[<>]"
syn match algol68SymbolOperator "[<>]="
syn match algol68SymbolOperator "\%([-+*%/]\|%\*\)"
syn match algol68SymbolOperator "\%([-+*%/]\|%\*\):="
syn match algol68SymbolOperator "+=:"
syn match algol68SymbolOperator "*\*\|&"
endif
syn match algol68Number "\<\d\+\%(\s\+\d\+\)*\>"
syn match algol68Float "\c\.\d\+\%(\s\+\d\+\)*\%(\s*[e\\⏨]\s*[-+]\?\s*\d\+\%(\s\+\d\+\)*\)\?\>"
syn match algol68Float "\c\<\d\+\%(\s\+\d\+\)*\%(\s*[e\\⏨]\s*[-+]\?\s*\d\+\%(\s\+\d\+\)*\)\>"
syn match algol68Float "\c\<\d\+\%(\s\+\d\+\)*\s*\.\s*\d\+\%(\s\+\d\+\)*\%(\s*[e\\⏨]\s*[-+]\?\s*\d\+\%(\s\+\d\+\)*\)\?\>"
syn match algol68HexNumber "\c\<2r\s*[01]\+\%(\s\+[01]\+\)*\>"
syn match algol68HexNumber "\c\<4r\s*[0-3]\+\%(\s\+[0-3]\+\)*\>"
syn match algol68HexNumber "\c\<8r\s*[0-7]\+\%(\s\+[0-7]\+\)*\>"
syn match algol68HexNumber "\c\<16r\s*[0-9a-f]\+\%(\s\+[0-9a-f]\+\)*\>"
syn region algol68Special start="\$" end="\$" contains=algol68String
syn region algol68Comment start="¢" end="¢" contains=algol68Todo,algol68SpaceError
syn region algol68Comment start="£" end="£" contains=algol68Todo,algol68SpaceError
syn region algol68Comment start="#" end="#" contains=algol68Todo,algol68SpaceError
syn region algol68Comment start="\<CO\>" end="\<CO\>" contains=algol68Todo,algol68SpaceError
syn region algol68Comment start="\<COMMENT\>" end="\<COMMENT\>" contains=algol68Todo,algol68SpaceError
syn region algol68PreProc start="\<PR\>" end="\<PR\>" contains=algol68Todo,algol68SpaceError
syn region algol68PreProc start="\<PRAGMAT\>" end="\<PRAGMAT\>" contains=algol68Todo,algol68SpaceError
" algol68r
syn region algol68Comment start="{" end="}" contains=algol68Todo,algol68SpaceError
syn region algol68Comment start="{{{" end="}}}" contains=algol68Todo,algol68SpaceError
" ALGOL 68r
syn keyword algol68PreProc DECS CONTEXT configinfo A68CONFIG KEEP FINISH USE SYSPROCS IOSTATE FORALL
" ALGOL 68c
syn keyword algol68PreProc USING ENVIRON FOREACH ASSERT
if !exists("algol68_no_preludes")
" THE STANDARD ENVIRONMENT
" Enquiries
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(blank\|formfeed\|newline\|null\|tab\|eof\)\s*char\%(acter\)\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(max\s*abs\|exp\|error\)\s*char\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(long\s*\)\?long\s*\)\?max\s*\%(bits\|int\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(long\s*\)\?long\s*\)\?\%(max\|min\|small\)\s*real\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\?\%(bits\|bytes\|exp\|int\|real\)\s*width\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(bits\|bytes\|compl\|int\|real\)\s*\%(lengths\|shorths\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(blank\|flip\|flop\)\>\%(\s*[a-z0-9]\)\@!"
" Transput Files and Channels
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<stand\s*\%(in\|out\|back\|error\)\%(\s*channel\)\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<stand\s*draw\s*channel\>\%(\s*[a-z0-9]\)\@!"
" Transput Event Routines
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<on\s*\%(\%(line\|page\|\%(logical\s*\|physical\s*\)\?file\|format\)\s*\)end\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<on\s*\%(\%(format\|value\|open\|transput\)\s*\)error\>\%(\s*[a-z0-9]\)\@!"
" Connections to Files
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(open\|establish\|append\|create\|associate\|close\|lock\|erase\|scratch\)\>\%(\s*[a-z0-9]\)\@!"
" Positioning on Files
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<new\s*line\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<new\s*page\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<back\s*space\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(reset\|rewind\|rewrite\|set\|seek\|space\)\>\%(\s*[a-z0-9]\)\@!"
" I/O on Files (Standard)
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(get\|put\|print\|read\|write\)\%(f\|\s*bin\)\?\>\%(\s*[a-z0-9]\)\@!"
" I/O on Files (Algol68C)
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(print\|read\)\s*\%(\%(long\s*\)\?long\s*\)\?\%(int\|real\|complex\|bits\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(print\|read\)\s*\%(bool\|char\|string\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<read\s*line\>\%(\s*[a-z0-9]\)\@!"
" Enquiries on Files
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(get\|put\|bin\|set\|reset\|rewind\|reidf\|draw\)\s*possible\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<end\s*of\s*\%(file\|line\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(make\s*\)\?term\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(compressible\|eof\|eoln\)\>\%(\s*[a-z0-9]\)\@!"
" Keyboard Control
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cooked\|raw\)\>\%(\s*[a-z0-9]\)\@!"
" Math Constants
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(long\s*\)\?long\s*\)\?\%(min\s*real\|\%(minus\s*\)\?infinity\|\%(min\s*\)\?inf\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[qd]\)\?pi\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<mp\s*radix\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<nan\>\%(\s*[a-z0-9]\)\@!"
" Math Basic Functions
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\%([a-z0-9]\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[qd]\)\?\%(sqrt\|cbrt\|curt\|exp\|ln\|log\)\>\%(\s*[a-z0-9]\)\@!\%(\s\{1,7}[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<ln\s*abs\>\%(\s*[a-z0-9]\)\@!"
" Math Trigonometric Functions
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[qd]\)\?\%(arc\s*\|a\)\?\%(sin\|cos\|tan\|cot\|sec\|csc\|cas\)\%(h\|\%(\s*dg\)\)\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[qd]\)\?\%(arc\s*\|a\)\?tan2\%(\s*dg\)\?\>\%(\s*[a-z0-9]\)\@!"
" long-long-sinpi/cospi/tanpi/cotpi
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[qd]\)\?\%(sin\|cos\|tan\|cot\)\s*pi\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<ln\s*\%(sinh\|cosh\)\>\%(\s*[a-z0-9]\)\@!"
" a special case in Genie?
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<atan\s*int\>\%(\s*[a-z0-9]\)\@!"
" Random Number Generator
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(long\s*\)\?long\s*\)\?\%(next\s*\)\?random\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<first\s*random\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<rnd\>\%(\s*[a-z0-9]\)\@!"
" Garbage Collection and Memory
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<collect\s*seconds\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<garbage\%(\s*\%(collections\|freed\|refused\|seconds\)\)\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<gc\s*heap\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<on\s*gc\s*event\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<preemptive\s*\%(gc\|sweep\%(\s*heap\)\?\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<sweep\s*heap\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<sweeps\%(\s*refused\)\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(system\s*\)\?\%(heap\|stack\)\s*pointer\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(actual\|system\)\s*stack\s*size\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(blocks\|collections\)\>\%(\s*[a-z0-9]\)\@!"
" I/O on Strings
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(puts\|gets\|string\)f\?\>\%(\s*[a-z0-9]\)\@!"
" Character Type Tests
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<is\s*\%(alnum\|alpha\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\)\>\%(\s*[a-z0-9]\)\@!"
" Operations on Characters
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<to\s*\%(upper\|lower\)\>\%(\s*[a-z0-9]\)\@!"
" Search in Strings
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(char\|last\s*char\|string\)\s*in\s*string\>\%(\s*[a-z0-9]\)\@!"
" Time and Date
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cpu\|wall\|utc\|local\)\s*time\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(wall\s*\)\?clock\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(wall\s*\)\?seconds\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<sleep\>\%(\s*[a-z0-9]\)\@!"
" Type Operations
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(long\s*\)\?\%(bits\|bytes\)\s*pack\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(long\s*long\s*\)\?bits\s*pack\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\%([a-z0-9]\s\+\)\@8<!\<\%(bits\|whole\|fixed\|float\|real\)\>\%(\s*[a-z0-9]\)\@!\%(\s*[a-z0-9]\)\@!"
" Runtime
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(program\s*\)\?idf\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(backtrace\|break\|debug\|monitor\|abend\|evaluate\|system\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(i32\|i64\|r64\|r128\)mach\>\%(\s*[a-z0-9]\)\@!"
" UNIX EXTENSIONS
" Environment Functions
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(a68g\s*\)\?\%(argc\|argv\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<get\s*env\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<reset\s*errno\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<str\s*error\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(get\|set\)\s*pwd\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(rows\|columns\|abend\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<errno\>\%(\s*[a-z0-9]\)\@!"
" Processes
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<execve\%(\s*child\%(\s*pipe\)\?\|\s*output\)\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<exec\%(\s*sub\%(\s*pipeline\|\s*output\)\?\)\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<fork\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<wait\s*pid\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<create\s*pipe\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<peek\s*char\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<sig\s*segv\>\%(\s*[a-z0-9]\)\@!"
" File types and attributes
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<file\s*is\s*\%(block\s*device\|char\s*device\|directory\|regular\|fifo\|link\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<file\s*mode\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<get\s*directory\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<real\s*path\>\%(\s*[a-z0-9]\)\@!"
" Fetching web page contents and sending requests
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<https\?\s*\%(content\|timeout\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<tcp\s*request\>\%(\s*[a-z0-9]\)\@!"
" Regular expressions in string manipulation
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<grep\s*in\s*\%(sub\)\?string\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<sub\s*in\s*string\>\%(\s*[a-z0-9]\)\@!"
" Curses support
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<curses\s*\%(start\|end\|clear\|refresh\|get\s*char\|put\s*char\|move\|lines\|columns\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<curses\s*\%(green\|cyan\|red\|yellow\|magenta\|blue\|white\)\%(\s*inverse\)\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<curses\s*del\s*char\>\%(\s*[a-z0-9]\)\@!"
" POSTGRESQL CLIENT ROUTINES
" Connecting to a server
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<pq\s*\%(connect\s*db\|finish\|reset\|parameter\s*status\)\>\%(\s*[a-z0-9]\)\@!"
" Sending queries and retrieving results
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<pq\s*\%(exec\|ntuples\|nfields\|fname\|fnumber\|fformat\|get\s*is\s*null\|get\s*value\|cmd\s*status\|cmd\s*tuples\)\>\%(\s*[a-z0-9]\)\@!"
" Connection status information
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<pq\s*\%(\%(result\s*\)\?error\s*message\|db\|user\|pass\|host\|port\|tty\|options\|\%(protocol\|server\)\s*version\|socket\|backend\s*pid\)\>\%(\s*[a-z0-9]\)\@!"
" SOUND
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(new\|get\|set\)\s*sound\>\%(\s*[a-z0-9]\)\@!"
syn keyword algol68Operator RESOLUTION CHANNELS RATE SAMPLES
" DRAWING USING THE GNU PLOTTING UTILITIES
" Setting up a graphics device
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<draw\s*\%(device\|erase\|show\|move\|aspect\|fill\s*style\|line\s*style\|line\s*width\|clear\|flush\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<make\s*device\>\%(\s*[a-z0-9]\)\@!"
" Specifying colours
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<draw\s*\%(\%(background\s*\)\?colou\?r\%(\s*name\)\?\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<draw\s*get\s*colou\?r\s*name\>\%(\s*[a-z0-9]\)\@!"
" Drawing objects
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<draw\s*\%(point\|line\|rect\|circle\|ball\|star\)\>\%(\s*[a-z0-9]\)\@!"
" Drawing text
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<draw\s*\%(text\%(\s*angle\)\?\|font\s*\%(name\|size\)\)\>\%(\s*[a-z0-9]\)\@!"
" EXTRA NUMERICAL PROCEDURES
" COMPLEX Functions
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[qd]\)\?c\%(omplex\s*\)\?\%(sqrt\|exp\|ln\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(long\s*\)\?long\s*\)\?complex\s*\%(arc\s*\)\?\%(sin\|cos\|tan\)h\?\>\%(\s*[a-z0-9]\)\@!"
" cas casin casinh dcas dcasin dcasinh qcas qcasin qcasinh longcas longlongcas
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[dq]\?\)ca\?\%(sin\|cos\|tan\)h\?\>\%(\s*[a-z0-9]\)\@!"
" a special case in Genie?
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<long\s*complex\s*atanh\>\%(\s*[a-z0-9]\)\@!"
" REAL Airy Functions
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<airy\s*[ab]i\%(\s*deriv\)\?\%(\s*scaled\)\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<airy\s*[ab]i\%(\s*derivative\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<airy\s*zero\s*[ab]i\%(\s*deriv\)\?\>\%(\s*[a-z0-9]\)\@!"
" REAL Bessel Functions
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(jn\|yn\|in\|exp\s*in\|kn\|exp\s*kn\|jl\|yl\|exp\s*il\|exp\s*kl\|jnu\|ynu\|inu\|exp\s*inu\|knu\|exp\s*knu\)\>\%(\s*[a-z0-9]\)\@!"
" only a few could be sensibly merged; we keep them apart
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(il[012]\?\s*scaled\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(in[01]\%(\s*scaled\)\?\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(in\s*u\?\s*scaled\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(j\%(\l[012]\|n[01]\)\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(kl[012]\?\s*scaled\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(kn[01]\%(\s*scaled\)\?\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(kn\s*[u_]\?\s*scaled\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*ln\s*knu\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(y\%(\l[012]\|n[01]\)\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*zero\s*j\%([01]\|nu\)\>\%(\s*[a-z0-9]\)\@!"
" REAL Elliptic Integrals
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<elliptic\s*integral\s*\%(k\|e\|rf\<rd\|rj\|rc\)\>\%(\s*[a-z0-9]\)\@!"
" REAL Error and Gamma Functions
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(ln\s*\)\?\%(fact\|choose\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<prime\s*factors\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[qd]\)\?\%(inv\%(erse\)\?\s*\)\?erfc\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<mpfr\s*\%(\%(\%(long\s*\)\?long\s*\)\|q\)\?\%(inv\s*\)\?erfc\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(\%(mpfr\s*\)\?long\s*\)\?long\s*\)\|\%(d\|\%(mpfr\s*\)\?q\)\)\?\%(beta\|gamma\)\%(\s*inc\s*g\?f\?\)\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<beta\s*inc\s*gsl\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(\%(mpfr\s*\)\?long\s*\)\?long\s*\)\|\%(d\|\%(mpfr\s*\)\?q\)\)\?ln\s*\%(beta\|gamma\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<mpfr\s*mp\>\%(\s*[a-z0-9]\)\@!"
" is the following a special case in Genie?
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<mpfr\s*\%(long\s*\|d\)gamma\s*inc\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "gamma\s*\%(\%(inc\s*\%(gsl\|[pq]\)\)\|inv\|star\)\>\%(\s*\%([a-z_]\|\l\d\+\)\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<lj[ef]\s*126\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<ln1p\>\%(\s*[a-z0-9]\)\@!"
" Scaling Factors
" strangely missing some common factors (hecto, deca, deci, centi),
" also myria, and the more extreme factors (quetta, ronna, ronto, quecto)
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<num\s*\%(yotta\|zetta\|exa\|peta\|tera\|giga\|mega\|kilo\|milli\|micro\|nano\|pico\|femto\|atto\|zepto\|yocto\)\>\%(\s*[a-z0-9]\)\@!"
" Physical Constants
" Fundamental Constants
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(boltzmann\|faraday\|gauss\|hectare\|\%(kilometers\|miles\)\s*per\s*hour\|micron\|molar\s*gas\|planck\s*constant\%(\s*bar\)\?\|speed\s*of\s*light\|standard\s*gas\s*volume\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<mksa\s*vacuum\s*\%(permeability\|permittivity\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<num\s*avogadro\>\%(\s*[a-z0-9]\)\@!"
" Astronomy and Astrophysics
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(astronomical\s*unit\|grav\s*accel\|gravitational\s*constant\|light\s*year\|parsec\|solar\s*mass\)\>\%(\s*[a-z0-9]\)\@!"
" Atomic and Nuclear Physics
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(angstrom\|barn\|bohr\s*magneton\|bohr\s*radius\|electron\s*\%(charge\|magnetic\s*moment\|volt\)\|mass\s*\%(electron\|muon\|neutron\|proton\)\|nuclear\s*magneton\|proton\s*magnetic\s*moment\|rydberg\|unified\s*atomic\s*mass\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<num\s*fine\s*structure\>\%(\s*[a-z0-9]\)\@!"
" Time
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(day\|hour\|minute\|week\)\>\%(\s*[a-z0-9]\)\@!"
" Imperial units
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(foot\|inch\|mil\|mile\|yard\|\%(tex\)\?point\)\>\%(\s*[a-z0-9]\)\@!"
" Nautical units
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(fathom\|knot\|nautical\s*mile\)\>\%(\s*[a-z0-9]\)\@!"
" Volume
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(acre\|\%(canadian\|uk\|us\)\s*gallon\|liter\|pint\|quart\|cup\|fluid\s*ounce\|\%(table\|tea\)\s*spoon\)\>\%(\s*[a-z0-9]\)\@!"
" Mass and weight
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(carat\|\%(gram\|\%(kilo\s*\)\?pound\)\s*force\|\%(metric\s*\|uk\s*\)\?ton\|\%(ounce\|pound\)\s*mass\|poundal\|troy\s*ounce\)\>\%(\s*[a-z0-9]\)\@!"
" Thermal energy and power
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(btu\|calorie\|horsepower\|therm\)\>\%(\s*[a-z0-9]\)\@!"
" Pressure
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(bar\|inch\s*of\s*\%(mercury\|water\)\|meter\s*of\s*mercury\|psi\|std\s*atmosphere\|torr\)\>\%(\s*[a-z0-9]\)\@!"
" Viscosity
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(poise\|stokes\)\>\%(\s*[a-z0-9]\)\@!"
" Light and illumination
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(foot\s*candle\|foot\s*lambert\|lambert\|lumen\|lux\|phot\|stilb\)\>\%(\s*[a-z0-9]\)\@!"
" Radioactivity
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(curie\|rad\|roentgen\)\>\%(\s*[a-z0-9]\)\@!"
" Force and energy
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(dyne\|erg\|joule\|newton\)\>\%(\s*[a-z0-9]\)\@!"
" Functions from GSL
syn keyword algol68Operator CV RV T INV PINV MEAN DET TRACE NORM DYAD BEFORE ABOVE
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<angle\s*restrict\s*\%(pos\|symm\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<conical\s*p\s*\%([01]\|cylreg\|m\?half\|sph\s*reg\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<cholesky\s*\%(decomp\|solve\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<debye\s*[1-6]\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<ellint\s*\%([defp]\|[ekp]\s*comp\|r[cdfj]\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(expint\s*\%(3\|e[12in]\)\|expm1\|exprel[2n]\?\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<fermi\s*dirac\s*\%([012]\|3\?half\|inc0\|int\|m1\|mhalf\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<fft\s*\%(complex\s*\)\?\%(forward\|backward\|inverse\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(gegenpoly\|laguerre\)\s*[123n]\s*real\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<lambert\s*\%(w0\|wm1\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<legendre\s*\%(h3d\%([01]\)\?\|p[123l]\|q[01l]\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<pseudo\s*inv\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<psi\s*\%(1\%(\s*int\|\s*piy\)\?\|int\|n\)\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<synchrotron\s*[12]\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<taylor\s*coeff\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<transport\s*[2-5]\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<zeta\%(\s*m1\)\?\%(\s*int\)\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(chi\|ci\|clausen\|dawson\|digamma\|dilog\|\%(ln\s*\)\?doublefact\|eta\|eta\s*int\|hermite\s*func\|hypot\|hzeta\|laplace\|shi\|si\|sinc\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<ln1\s*\%(plusx\%(mx\)\?\)\?\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(compl\s*\)\?\%(matrix\|vector\)\s*echo\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<print\s*\%(matrix\|vector\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(complex\s*\)\?lu\s*\%(decomp\|det\|inv\|solve\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<left\s*columns\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(ols\|tls\|pcacv\|pcasvd\|pcr\|pls[12]\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(ln\s*poch\|poch\s*\%(rel\)\?\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<qr\s*\%(decomp\|\%(ls\s*\)\?solve\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<svd\s*\%(decomp\|solve\)\>\%(\s*[a-z0-9]\)\@!"
" Functions from R Mathlib
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*[dpqr]n\?\s*binom\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*\%(di\|tri\|tetra\|penta\|psi\)\s*gamma\>\%(\s*[a-z0-9]\)\@!"
" note: Genie documents 'r rn chisq' but it's missing in the code?
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*[dpqr]n\?\s*chisq\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*[dpqr]\%(\s*n\)\?\s*f\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*[dpq]\%(\s*n\)\?\s*t\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*[dpqr]\s*\%(l\s*\)\?norm\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*[dpqr]\s*\%(beta\|cauchy\|exp\|geom\|hyper\|logis\|pois\|sign\s*rank\|t\|unif\|weibull\|wilcox\)\>\%(\s*[a-z0-9]\)\@!"
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*[pq]\s*tu\s*key\>\%(\s*[a-z0-9]\)\@!"
endif
" Define the default highlighting.
hi def link algol68Boolean Boolean
hi def link algol68Comment Comment
hi def link algol68Conditional Conditional
hi def link algol68Constant Constant
hi def link algol68Float Float
hi def link algol68Function Function
hi def link algol68Label Label
hi def link algol68MatrixDelimiter Identifier
hi def link algol68HexNumber Number
hi def link algol68Number Number
hi def link algol68Operator Operator
hi def link algol68Predefined Identifier
hi def link algol68PreProc PreProc
hi def link algol68Repeat Repeat
hi def link algol68SpaceError Error
hi def link algol68Statement Statement
hi def link algol68String String
hi def link algol68StringEscape Special
hi def link algol68Struct algol68Statement
hi def link algol68SymbolOperator algol68Operator
hi def link algol68Todo Todo
hi def link algol68Type Type
hi def link algol68ShowTab Error
let b:current_syntax = "algol68"
" vim: ts=8 sw=2

View File

@@ -3,6 +3,8 @@
" Maintainer: Michael Wong
" https://github.com/mmikeww/autohotkey.vim
" Latest Revision: 2022-07-25
" Last Change:
" 2026 Apr 20 by Vim project: remove wrong oneline keyword #20018
" Previous Maintainers: SungHyun Nam <goweol@gmail.com>
" Nikolai Weibull <now@bitwi.se>
@@ -35,7 +37,6 @@ syn region autohotkeyString
syn match autohotkeyVariable
\ display
\ oneline
\ contains=autohotkeyBuiltinVariable
\ keepend
\ '%\S\{-}%'
@@ -123,7 +124,7 @@ syn keyword autohotkeyCommand
syn keyword autohotkeyFunction
\ InStr RegExMatch RegExReplace StrLen SubStr Asc Chr Func
\ DllCall VarSetCapacity WinActive WinExist IsLabel OnMessage
\ 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

View File

@@ -7,6 +7,7 @@
" Last Change: 2022 Jul 25
" 2025 Oct 13 by Vim project: update multiline function syntax #18565
" 2026 Apr 07 by Vim project: update syntax script #19931
" 2026 Apr 15 by Vim project: allow forward-slashes in bitbake varflags #19983
"
" This file is licensed under the MIT license, see COPYING.MIT in
" this source distribution for the terms.
@@ -59,7 +60,7 @@ syn match bbVarValue ".*$" contained contains=bbString,bbVarDeref,bbV
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 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

View File

@@ -5,8 +5,10 @@
" Previous Maintainer: Vincent Berthoux <twinside@gmail.com>
" File Types: .cabal
" Last Change: 22 Oct 2022
" 2026 Apr 20 by Vim project: remove wrong oneline keyword #20018
"
" v1.6: Added support for foreign-libraries
" Added highlighting for various fields
" 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`.
@@ -25,7 +27,7 @@
" 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.
" by GHC, found with a GHC warning, but undocumented.
" Whatever...
"
" v1.1: Fixed operator problems and added ftdetect file
@@ -186,7 +188,7 @@ syn match cabalVersionRegionA
\ contains=cabalVersionOperator,cabalVersion
\ keepend
\ /\%(==\|\^\?>=\|<=\|<\|>\)\s*\d\+\%(\.\d\+\)*\%(\.\*\)\?\>/
" version inside `version: ...`
" version inside `version: ...`
syn match cabalVersionRegionB
\ contains=cabalStatementRegion,cabalVersionOperator,cabalVersion
\ /^\s*\%(cabal-\)\?version\s*:.*$/
@@ -198,7 +200,6 @@ syn match cabalName contained /:\@<=.*/
syn match cabalNameRegion
\ contains=cabalStatementRegion,cabalName
\ nextgroup=cabalStatementRegion
\ oneline
\ /^\c\s*name\s*:.*$/
" author region
@@ -206,7 +207,6 @@ syn match cabalAuthor contained /:\@<=.*/
syn match cabalAuthorRegion
\ contains=cabalStatementRegion,cabalStatement,cabalAuthor
\ nextgroup=cabalStatementRegion
\ oneline
\ /^\c\s*author\s*:.*$/
" maintainer region
@@ -214,7 +214,6 @@ syn match cabalMaintainer contained /:\@<=.*/
syn match cabalMaintainerRegion
\ contains=cabalStatementRegion,cabalStatement,cabalMaintainer
\ nextgroup=cabalStatementRegion
\ oneline
\ /^\c\s*maintainer\s*:.*$/
" license region
@@ -222,7 +221,6 @@ syn match cabalLicense contained /:\@<=.*/
syn match cabalLicenseRegion
\ contains=cabalStatementRegion,cabalStatement,cabalLicense
\ nextgroup=cabalStatementRegion
\ oneline
\ /^\c\s*license\s*:.*$/
" license-file region
@@ -230,7 +228,6 @@ 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
@@ -238,7 +235,6 @@ 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

View File

@@ -3,6 +3,7 @@
" Maintainer: Dave Hodder <dmh@dmh.org.uk>
" Last Change: 2021 Nov 29
" 2026 Feb 12 by Vim Project add partial support #19386
" 2026 Apr 17 by Vim Project Update to Django 5.2 version #19994
" quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -22,24 +23,23 @@ syn keyword djangoStatement contained autoescape csrf_token empty
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 in include load not now
syn keyword djangoStatement contained regroup reversed spaceless
syn keyword djangoStatement contained endspaceless templatetag openblock
syn keyword djangoStatement contained closeblock openvariable closevariable
syn keyword djangoStatement contained openbrace closebrace opencomment
syn keyword djangoStatement contained openbrace closebrace opencomment or
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 get_current_language noop get_available_languages
syn keyword djangoStatement contained get_current_language_bidi get_language_info plural
syn keyword djangoStatement contained translate blocktranslate endblocktranslate
syn keyword djangoStatement contained partialdef endpartialdef partial
syn keyword djangoStatement contained querystring lorem verbatim
" 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 filesizeformat first
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
@@ -48,6 +48,7 @@ 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
syn keyword djangoFilter contained force_escape iriencode json_script truncatechars_html
" Keywords to highlight within comments
syn keyword djangoTodo contained TODO FIXME XXX

View File

@@ -1,6 +1,7 @@
" dockerfile.vim - Syntax highlighting for Dockerfiles
" Maintainer: Honza Pokorny <https://honza.ca>
" Last Change: 2024 Dec 20
" 2026 Mar 26 by Vim Project: dockerfileShell comments (#19829)
" License: BSD
" https://docs.docker.com/engine/reference/builder/
@@ -31,7 +32,7 @@ syntax match dockerfileInstruction contained /\v<(SHELL|VOLUME)>/
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 dockerfileShell contained keepend start=/\v/ skip=/\v\\\_.|^\s*#.*/ 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

View File

@@ -1860,10 +1860,11 @@ syn keyword vimSynType contained include skipwhite nextgroup=vimSynIncludeClust
syn match vimSynIncludeCluster contained "@[_a-zA-Z0-9]\+\>"
" Syntax: keyword {{{2
syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynContainedin
syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynContainedin,vimSynKeyError
syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
syn match vimSynKeyOpt contained "\%#=1\<\%(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
syn match vimSynKeyError contained "\<oneline\>"
" Syntax: match {{{2
syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynContainedin,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
@@ -2431,6 +2432,7 @@ if !exists("skip_vim_syntax_inits")
hi def link vimSyncError vimError
hi def link vimSynConcealError vimError
hi def link vimSynError vimError
hi def link vimSynKeyError vimError
hi def link vimSynFoldlevelError vimError
hi def link vimSynIskeywordError vimError
hi def link vimSynSpellError vimError

View File

@@ -4,7 +4,7 @@
" Filenames: *.graphql *.graphqls *.gql
" URL: https://github.com/jparise/vim-graphql
" License: MIT <https://opensource.org/license/mit>
" Last Change: 2024 Dec 21
" Last Change: 2026 Apr 21
if !exists('main_syntax')
if exists('b:current_syntax')
@@ -26,8 +26,13 @@ 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 region graphqlString start=+"+ skip=+\\\\\|\\"+ end=+"\|$+ contains=graphqlEscape
syn region graphqlString start=+"""+ skip=+\\"""+ end=+"""+ contains=graphqlEscape
syn match graphqlEscape +\\["\\/bfnrt]+ contained display
syn match graphqlEscape +\\u\x\{4}+ contained display
syn match graphqlEscape +\\u{\x\+}+ contained display
syn match graphqlEscape +\\""\"+ contained display
syn keyword graphqlKeyword repeatable nextgroup=graphqlKeyword skipwhite
syn keyword graphqlKeyword on nextgroup=graphqlType,graphqlDirectiveLocation skipwhite
@@ -45,11 +50,11 @@ syn match graphqlVariable "\<\$\h\w*\>" display
syn match graphqlName "\<\h\w*\>" display
syn match graphqlType "\<_*\u\w*\>" display
" https://spec.graphql.org/October2021/#ExecutableDirectiveLocation
" https://spec.graphql.org/September2025/#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
" https://spec.graphql.org/September2025/#TypeSystemDirectiveLocation
syn keyword graphqlDirectiveLocation SCHEMA SCALAR OBJECT FIELD_DEFINITION
syn keyword graphqlDirectiveLocation ARGUMENT_DEFINITION INTERFACE UNION
syn keyword graphqlDirectiveLocation ENUM ENUM_VALUE INPUT_OBJECT
@@ -73,6 +78,7 @@ hi def link graphqlBoolean Boolean
hi def link graphqlNull Keyword
hi def link graphqlNumber Number
hi def link graphqlString String
hi def link graphqlEscape Special
hi def link graphqlDirective PreProc
hi def link graphqlDirectiveLocation Special

View File

@@ -1,18 +1,12 @@
" Vim syntax file
" Language: JavaScript
" Maintainer: Claudio Fleiner <claudio@fleiner.com>
" Updaters: Scott Shattuck (ss) <ss@technicalpursuit.com>
" URL: http://www.fleiner.com/vim/syntax/javascript.vim
" Changes: (ss) added keywords, reserved words, and other identifiers
" (ss) repaired several quoting and grouping glitches
" (ss) fixed regex parsing issue with multiple qualifiers [gi]
" (ss) additional factoring of keywords, globals, and members
" Last Change: 2022 Jun 09
" 2013 Jun 12: adjusted javaScriptRegexpString (Kevin Locke)
" 2018 Apr 14: adjusted javaScriptRegexpString (LongJohnCoder)
" 2024 Aug 14: fix a few stylistic issues (#15480)
" 2025 Aug 07: as is a reserved keyword (#17912)
" 2025 Sep 24: using is a reserved keyword (Devin Weaver)
" Language: JavaScript
" Maintainer: This runtime file is looking for a maintainer.
" Previous Maintainer: Claudio Fleiner <claudio@fleiner.com>
" Contributors: Scott Shattuck <ss@technicalpursuit.com>
" Kevin Locke
" LongJohnCoder
" Devin Weaver
" Last Change: 2026 Apr 26
" tuning parameters:
" unlet javaScript_fold
@@ -52,7 +46,14 @@ syn match javaScriptNumber "\<\d\+\(_\d\+\)*[eE][+-]\?\d\+\>"
syn match javaScriptNumber "\<[1-9]\d*\(_\d\+\)*\(\.\(\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\)\?\)\?\>"
syn match javaScriptNumber "\<\(\d\+\(_\d\+\)*\)\?\.\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\>"
syn match javaScriptNumber "\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\)\?\>"
syn region javaScriptRegexpString start=+[,(=+]\s*/[^/*]+ms=e-1,me=e-1 skip=+\\\\\|\\/+ end=+/[gimuys]\{0,2\}\s*$+ end=+/[gimuys]\{0,2\}\s*[+;.,)\]}]+me=e-1 end=+/[gimuys]\{0,2\}\s\+\/+me=e-1 contains=@htmlPreproc,javaScriptComment oneline
syn region javaScriptRegexpString
\ start=+\%([,(=+]\s*\)\@8<=/[^/*]+
\ skip=+\\\\\|\\/+
\ end=+/[dgimsuvy]\{0,7\}\ze\s*$+
\ end=+/[dgimsuvy]\{0,7\}\ze\s*[+;.,)\]}]+
\ end=+/[dgimsuvy]\{0,7\}\ze\s\+\/+
\ contains=@htmlPreproc,javaScriptComment
\ oneline
syn keyword javaScriptConditional if else switch
syn keyword javaScriptRepeat while for do in of

View File

@@ -9,6 +9,7 @@
" 2025 Oct 25 by Vim project: update makeTargetinDefine highlighting (#18570)
" 2025 Dec 23 by Vim project: fix too greedy match (#18938)
" 2025 Dec 23 by Vim project: wrong highlight with paranthesis inside quotes (#18818)
" 2026 Apr 17 by Vim project: wrong highlight $ inside quotes (#19986)
" quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -41,7 +42,7 @@ endif
syn match makeIdent "\$\$\w*"
syn match makeIdent "\$\$\$\$\w*" containedin=makeDefine
syn match makeIdent "\$[^({]"
syn match makeIdent "\$\$[^({]" containedin=makeDefine
syn match makeIdent "\$\$[^({\"']" containedin=makeDefine
if get(b:, 'make_flavor', s:make_flavor) == 'microsoft'
syn region makeIdent start="\$(" end=")" contains=makeStatement,makeIdent,makeDString,makeSString
syn region makeIdent start="\${" end="}" contains=makeStatement,makeIdent,makeDString,makeSString

View File

@@ -2,6 +2,7 @@
" Language: Monk (See-Beyond Technologies)
" Maintainer: Mike Litherland <litherm@ccf.org>
" Last Change: 2012 Feb 03 by Thilo Six
" 2026 Apr 20 by Vim project: remove wrong oneline keyword #20018
" This syntax file is good enough for my needs, but others
" may desire more features. Suggestions and bug reports
@@ -33,8 +34,8 @@ syn case ignore
" Fascist highlighting: everything that doesn't fit the rules is an error...
syn match monkError oneline ![^ \t()";]*!
syn match monkError oneline ")"
syn match monkError ![^ \t()";]*!
syn match monkError ")"
" Quoted and backquoted stuff
@@ -131,51 +132,51 @@ syn keyword monkFunc valid-integer? verify-type
" 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 monkNumber "[-#+0-9.][-#+/0-9a-f@i.boxesfdl]*"
syn match monkError ![-#+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 ![+-]$!
syn match monkOther ![+-][ \t()";]!me=e-1
syn match monkOther ![+-]$!
" ... 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 !\.$!
syn match monkDelimiter !\.[ \t()";]!me=e-1
syn match monkDelimiter !\.$!
" ... 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 monkBoolean "#[tf]"
syn match monkError !#[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()";]\+!
syn match monkChar "#\\"
syn match monkChar "#\\."
syn match monkError !#\\.[^ \t()";]\+!
syn match monkChar "#\\space"
syn match monkError !#\\space[^ \t()";]\+!
syn match monkChar "#\\newline"
syn match monkError !#\\newline[^ \t()";]\+!
" This keeps all other stuff unhighlighted, except *stuff* and <stuff>:
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 ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*,
syn match monkError ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
syn match monkOther oneline "\.\.\."
syn match monkError oneline !\.\.\.[^ \t()";]\+!
syn match monkOther "\.\.\."
syn match monkError !\.\.\.[^ \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 ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[ \t()";],me=e-1
syn match monkConstant ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*$,
syn match monkError ,\*[-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()";]*,
syn match monkConstant ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t()";],me=e-1
syn match monkConstant ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$,
syn match monkError ,<[-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]*"
syn match monkSyntax "\(\~input\|\[I\]->\)[^ \t]*"
syn match monkFunc "\(\~output\|\[O\]->\)[^ \t]*"
" Non-quoted lists, and strings:

View File

@@ -24,6 +24,7 @@
" 2026 Feb 15 improve comment handling #19414
" 2026 Mar 23 improve matching of function definitions #19638
" 2026 Apr 02 improve matching of function definitions #19849
" 2026 Apr 19 improve detection of special variables #20016
" }}}
" Version: 208
" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
@@ -751,13 +752,15 @@ endif
if exists("b:is_bash")
syn region shDeref matchgroup=PreProc start="\${!" end="\*\=}" contains=@shDerefList,shDerefOffset
syn match shDerefVar contained "{\@<=!\h\w*" nextgroup=@shDerefVarList
syn match shDerefSpecial contained "\({!\)\@<=[[:alnum:]*#@_]\+" nextgroup=@shDerefVarList,shDerefOp
endif
if (exists("b:is_kornshell") && !exists("b:is_ksh88"))
syn match shDerefVar contained "{\@<=!\h\w*[[:alnum:]_.]*" nextgroup=@shDerefVarList
syn match shDerefSpecial contained "\({!\)\@<=[[:alnum:]*#@_]\+" nextgroup=@shDerefVarList,shDerefOp
endif
syn match shDerefSpecial contained "{\@<=[-*@?0]" nextgroup=shDerefOp,shDerefOffset,shDerefOpError
syn match shDerefSpecial contained "\({[#!]\)\@<=[[:alnum:]*@_]\+" nextgroup=@shDerefVarList,shDerefOp
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")

View File

@@ -306,13 +306,13 @@ syntax keyword typescriptRepeat do while for nextgroup=typescript
syntax keyword typescriptRepeat for nextgroup=typescriptLoopParen,typescriptAsyncFor skipwhite skipempty
syntax keyword typescriptBranch break continue containedin=typescriptBlock
syntax keyword typescriptCase case nextgroup=@typescriptPrimitive skipwhite containedin=typescriptBlock
syntax keyword typescriptDefault default containedin=typescriptBlock nextgroup=@typescriptValue,typescriptClassKeyword,typescriptInterfaceKeyword skipwhite oneline
syntax keyword typescriptDefault default containedin=typescriptBlock nextgroup=@typescriptValue,typescriptClassKeyword,typescriptInterfaceKeyword skipwhite
syntax keyword typescriptStatementKeyword with
syntax keyword typescriptStatementKeyword yield skipwhite nextgroup=@typescriptValue containedin=typescriptBlock
syntax keyword typescriptTry try
syntax keyword typescriptExceptions throw finally
syntax keyword typescriptExceptions catch nextgroup=typescriptCall skipwhite skipempty oneline
syntax keyword typescriptExceptions catch nextgroup=typescriptCall skipwhite skipempty
syntax keyword typescriptDebugger debugger
syntax keyword typescriptAsyncFor await nextgroup=typescriptLoopParen skipwhite skipempty contained
@@ -1766,9 +1766,9 @@ endif
" patch
" patch for generated code
syntax keyword typescriptGlobal Promise
\ nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg,typescriptTypeArguments oneline
\ nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg,typescriptTypeArguments
syntax keyword typescriptGlobal Map WeakMap
\ nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg,typescriptTypeArguments oneline
\ nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg,typescriptTypeArguments
syntax keyword typescriptConstructor contained constructor
\ nextgroup=@typescriptCallSignature

View File

@@ -0,0 +1,20 @@
>#+0#0000e05#ffffff0| +0#0000000&@73
| +0#0000e05&@3|V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|a|l|g|o|l|6|8|_|s|y|m|b|o|l|i|c|_|o|p|e|r|a|t|o|r|s| |=| |1| +0#0000000&@19
|#+0#0000e05&| +0#0000000&@73
|#+0#0000e05&| +0#0000000&@73
| +0#0000e05&@3|A|l|g|o|l| |6|8| |p|r|e|l|u|d|e| |i|d|e|n|t|i|f|i|e|r| |f|r|o|m| |t|h|e| |G|e|n|i|e| |s|o|u|r|c|e| |c|o|d|e| |f|i|l|e|s|.| +0#0000000&@9
| +0#0000e05&@3| +0#0000000&@70
| +0#0000e05&@3|P|r|o|v|i|d|e|d| |a|s| |a| |b|a|s|e| |t|o| |v|e|r|i|f|y| |t|h|e| |c|o|r@1|e|c|t| |s|y|n|t|a|x| |h|i|g|h|l|i|g|h|t|i|n|g| +0#0000000&@10
| +0#0000e05&@3|o|f| |t|h|e| |a|l|g|o|l|6|8|.|v|i|m| |s|y|n|t|a|x| |f|i|l|e| |f|o|r| |t|h|e| |V|i|m| |e|d|i|t|o|r|.| +0#0000000&@20
| +0#0000e05&@3| +0#0000000&@70
| +0#0000e05&@3|T|h|e|r|e|'|s| |f|o|u|r| |s|e|c|t|i|o|n|s|,| |e|a|c|h| |r|e|p|r|e|s|e|n|t|i|n|g| |a|n| |o|r|i|g|i|n|a|l| |f|i|l|e|,| +0#0000000&@12
| +0#0000e05&@3|t|h|a|t| |a|r|e| |e|n|c|l|o|s|e|d| |i|n| |t|h|e| |U|n|i|x|-|'|m|o|r|e|'| |f|o|r|m| |t|o| |s|t|a|n|d| |o|u|t|.| +0#0000000&@15
| +0#0000e05&@3| +0#0000000&@70
| +0#0000e05&@3|S|o|m|e| |i|n|f|o|r|m|a|l| |c|o|m@1|e|n|t|s| |f|r|o|m| |t|h|e| |s|o|u|r|c|e| |c|o|d|e| |l|e|f|t| |i|n|t|a|c|t| |a|s| +0#0000000&@12
| +0#0000e05&@3|a| |c|o|m@1|e|n|t| |i|n| |A|l|g|o|l| |6|8| |s|y|n|t|a|x|.| +0#0000000&@41
| +0#0000e05&@3| +0#0000000&@70
| +0#0000e05&@3|D|e|p|e|n|d|i|n|g| |o|n| |t|h|e| |l|a|n|g|u|a|g|e| |c|o|n|t|e|x|t| |t|h|e|r|e|'|s| |d|u|p|l|i|c|a|t|e|s| |i|n| |t|h|e| +0#0000000&@11
| +0#0000e05&@3|l|i|s|t|,| |t|h|a|t| |a|r|e| |k|e|p|t| |f|o|r| |c|l|a|r|i|t|y| |g|i|v|e|n| |t|h|e| |a|s@1|o|c|i|a|t|e|d| |i|n|f|o|r|m|a|l| +0#0000000&@9
| +0#0000e05&@3|c|o|m@1|e|n|t| |a|s@1|o|c|i|a|t|e|d| |w|i|t|h| |t|h|e|m|.| +0#0000000&@41
| +0#0000e05&@3| +0#0000000&@70
@57|1|,|1| @10|T|o|p|

View File

@@ -0,0 +1,20 @@
| +0#0000e05#ffffff0@3|a| |c|o|m@1|e|n|t| |i|n| |A|l|g|o|l| |6|8| |s|y|n|t|a|x|.| +0#0000000&@41
| +0#0000e05&@3| +0#0000000&@70
| +0#0000e05&@3|D|e|p|e|n|d|i|n|g| |o|n| |t|h|e| |l|a|n|g|u|a|g|e| |c|o|n|t|e|x|t| |t|h|e|r|e|'|s| |d|u|p|l|i|c|a|t|e|s| |i|n| |t|h|e| +0#0000000&@11
| +0#0000e05&@3|l|i|s|t|,| |t|h|a|t| |a|r|e| |k|e|p|t| |f|o|r| |c|l|a|r|i|t|y| |g|i|v|e|n| |t|h|e| |a|s@1|o|c|i|a|t|e|d| |i|n|f|o|r|m|a|l| +0#0000000&@9
| +0#0000e05&@3|c|o|m@1|e|n|t| |a|s@1|o|c|i|a|t|e|d| |w|i|t|h| |t|h|e|m|.| +0#0000000&@41
| +0#0000e05&@2> | +0#0000000&@70
| +0#0000e05&@3|S|o|m|e| |e|n|t|r|i|e|s| |d|e|l|i|b|e|r|a|t|e|l|y| |c|o|n|t|a|i|n| |t|w|o| |i|d|e|n|t|i|f|i|e|r| |v|a|r|i|a|n|t|s| |t|h|a|t| +0#0000000&@8
| +0#0000e05&@3|m|a|y| |b|e| |u|s|e|d| |a|s| |a|l|t|e|r|n|a|t|i|v|e| |f|o|r|m| |i|n| |a|n| |A|l|g|o|l| |6|8| |G|e|n|i|e| |p|r|o|g|r|a|m|.| +0#0000000&@9
| +0#0000e05&@3| +0#0000000&@70
| +0#0000e05&@3|T|h|e| |i|d|e|n|t|i|f|i|e|r|s| |a|r|e| |p|r|e|s|e|n|t|e|d| |i|n| |t|w|o| |v|a|r|i|a|n|t|s| |s|e|p|a|r|a|t|e|d| |b|y| |a| +0#0000000&@10
| +0#0000e05&@3|t|a|b|u|l|a|t|o|r|;| |f|i|r|s|t| |w|i|t|h| |s|p|a|c|e|s|,| |t|h|e|n| |i|n| |c|a|n|o|n|i|c|a|l| |f|o|r|m| |w|i|t|h|o|u|t| +0#0000000&@10
| +0#0000e05&@3|s|p|a|c|e|s|.| |V|a|r|i|a|n|t|s| |w|i|t|h| |s|p|a|c|e|s| |a|r|e| |s|u|p@1|o|r|t|e|d| |b|y| |t|h|e| |V|i|m| |s|y|n|t|a|x| +0#0000000&@10
| +0#0000e05&@3|f|i|l|e| |a|s| |t|h|e| |A|l|g|o|l| |6|8| |l|a|n|g|u|a|g|e| |d|o|e|s|.| +0#0000000&@35
| +0#0000e05&@3|B|u|t| |n|o|t|e| |t|h|a|t| |w|h|i|l|e| |A|l|g|o|l| |6|8| |a|l@1|o|w|s| |a|r|b|i|t|r|a|r|y| |s|p|a|c|i|n|g| |w|i|t|h|i|n| +0#0000000&@10
| +0#0000e05&@3|i|d|e|n|t|i|f|i|e|r|s| |-| |e|v|e|n| |a|s| |e|x|t|r|e|m|e| |a|s| |w|r|i|t|i|n|g| |o|n|e| |c|h|a|r|a|c|t|e|r| |p|e|r| +0#0000000&@12
| +0#0000e05&@3|l|i|n|e|!| |-| |t|h|e| |V|i|m| |s|y|n|t|a|x| |f|i|l|e| |f|o|r| |A|l|g|o|l| |6|8| |h|a|d| |d|e|l|i|b|e|r|a|t|e|l|y| +0#0000000&@13
| +0#0000e05&@3|b|e@1|n| |d|e|f|i|n|e|d| |i|n| |a| |w|a|y| |r|e|s|t|r|i|c|t|i|n|g| |t|h|e| |h|i|g|h|l|i|g|h|t|e|d| |o|p|t|i|o|n|s|;| +0#0000000&@12
| +0#0000e05&@3|s|p|a|c|i|n|g| |c|a|n| |u|s|u|a|l@1|y| |b|e| |i|n|s|e|r|t|e|d| |w|h|e|r|e| |"|n|a|t|u|r|a|l| |w|o|r|d|s|"| |w|o|u|l|d| +0#0000000&@11
| +0#0000e05&@3|a|l@1|o|w| |a| |s|e|p|a|r|a|t|i|o|n| |(|s|a|y| |f|o|r| |'|i|n|t|w|i|d|t|h|'| |y|o|u| |m|a|y| |w|r|i|t|e|,| |e|.|g|.|,| +0#0000000&@11
@57|1|9|,|4| @10|0|%|

View File

@@ -0,0 +1,20 @@
| +0#0000e05#ffffff0@3|a|l@1|o|w| |a| |s|e|p|a|r|a|t|i|o|n| |(|s|a|y| |f|o|r| |'|i|n|t|w|i|d|t|h|'| |y|o|u| |m|a|y| |w|r|i|t|e|,| |e|.|g|.|,| +0#0000000&@11
| +0#0000e05&@3|'|i|n|t| |w|i|d|t|h|'| |b|u|t| |n|o|t| |'|i|n|t| |w|i|d| |t|h|'|;| |t|h|e| |l|a|t@1|e|r| |w|o|u|l|d| |n|o|t| |g|e|t| +0#0000000&@12
| +0#0000e05&@3|h|i|g|h|l|i|g|h|t|e|d|)|.| +0#0000000&@57
| +0#0000e05&@3| +0#0000000&@70
| +0#0000e05&@3|M|o|d|e|l|i|n|e|s| |a|r|e| |s|e|t| |t|o| |s|i|m|p|l|y| |i|n|s|p|e|c|t| |t|h|e| |c|o|r@1|e|c|t| |h|i|g|h|l|i|g|h|t|i|n|g| +0#0000000&@10
| +0#0000e05&@3>i|n| |t|h|i|s| |f|i|l|e|.| +0#0000000&@57
| +0#0000e05&@3| +0#0000000&@70
| +0#0000e05&@3|J|a|n|i|s| |P|a|p|a|n|a|g|n|o|u|,| |2|0|2|6|-|0|4|-|2|3| +0#0000000&@42
|#+0#0000e05&| +0#0000000&@73
@75
|#+0#0000e05&|:@12| +0#0000000&@60
|p+0#0000e05&|r|e|l|u|d|e|.|c| +0#0000000&@65
|:+0#0000e05&@12|#| +0#0000000&@60
@75
|#+0#0000e05&| |P|r|i|m|i|t|i|v|e| |A|6|8| |m|o|i|d|s|.| |#| +0#0000000&@50
@2|V+0#00e0003&|O|I|D| +0#0000000&@41|V+0#00e0003&|O|I|D| +0#0000000&@22
|#+0#0000e05&| |S|t|a|n|d|a|r|d| |p|r|e|c|i|s|i|o|n|.| |#| +0#0000000&@51
@2|I+0#00e0003&|N|T| +0#0000000&@42|I+0#00e0003&|N|T| +0#0000000&@23
@2|R+0#00e0003&|E|A|L| +0#0000000&@41|R+0#00e0003&|E|A|L| +0#0000000&@22
@57|3|7|,|5| @10|1|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|R+0#00e0003&|E|A|L| +0#0000000&@41|R+0#00e0003&|E|A|L| +0#0000000&@22
@2|C+0#00e0003&|O|M|P|L|E|X| +0#0000000&@38|C+0#00e0003&|O|M|P|L|E|X| +0#0000000&@19
@2|C+0#00e0003&|O|M|P|L| +0#0000000&@40|C+0#00e0003&|O|M|P|L| +0#0000000&@21
@2|B+0#00e0003&|I|T|S| +0#0000000&@41|B+0#00e0003&|I|T|S| +0#0000000&@22
@2|B+0#00e0003&|Y|T|E|S| +0#0000000&@40|B+0#00e0003&|Y|T|E|S| +0#0000000&@21
>#+0#0000e05&| |M|u|l|t|i|p|l|e| |p|r|e|c|i|s|i|o|n|.| |#| +0#0000000&@51
@2|I+0#00e0003&|N|T| +0#0000000&@42|I+0#00e0003&|N|T| +0#0000000&@23
@2|R+0#00e0003&|E|A|L| +0#0000000&@41|R+0#00e0003&|E|A|L| +0#0000000&@22
@2|C+0#00e0003&|O|M|P|L|E|X| +0#0000000&@38|C+0#00e0003&|O|M|P|L|E|X| +0#0000000&@19
@2|C+0#00e0003&|O|M|P|L| +0#0000000&@40|C+0#00e0003&|O|M|P|L| +0#0000000&@21
@2|B+0#00e0003&|I|T|S| +0#0000000&@41|B+0#00e0003&|I|T|S| +0#0000000&@22
@2|B+0#00e0003&|Y|T|E|S| +0#0000000&@40|B+0#00e0003&|Y|T|E|S| +0#0000000&@21
@2|R+0#00e0003&|E|A|L| +0#0000000&@41|R+0#00e0003&|E|A|L| +0#0000000&@22
@2|I+0#00e0003&|N|T| +0#0000000&@42|I+0#00e0003&|N|T| +0#0000000&@23
@2|C+0#00e0003&|O|M|P|L|E|X| +0#0000000&@38|C+0#00e0003&|O|M|P|L|E|X| +0#0000000&@19
@2|C+0#00e0003&|O|M|P|L| +0#0000000&@40|C+0#00e0003&|O|M|P|L| +0#0000000&@21
@2|B+0#00e0003&|I|T|S| +0#0000000&@41|B+0#00e0003&|I|T|S| +0#0000000&@22
|#+0#0000e05&| |O|t|h|e|r|.| |#| +0#0000000&@64
@2|B+0#00e0003&|O@1|L| +0#0000000&@41|B+0#00e0003&|O@1|L| +0#0000000&@22
@57|5@1|,|1| @10|2|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|B+0#00e0003&|O@1|L| +0#0000000&@41|B+0#00e0003&|O@1|L| +0#0000000&@22
@2|C+0#00e0003&|H|A|R| +0#0000000&@41|C+0#00e0003&|H|A|R| +0#0000000&@22
@2|S+0#00e0003&|T|R|I|N|G| +0#0000000&@39|S+0#00e0003&|T|R|I|N|G| +0#0000000&@20
@2|F+0#00e0003&|I|L|E| +0#0000000&@41|F+0#00e0003&|I|L|E| +0#0000000&@22
@2|C+0#00e0003&|H|A|N@1|E|L| +0#0000000&@38|C+0#00e0003&|H|A|N@1|E|L| +0#0000000&@19
@2>P+0#00e0003&|I|P|E| +0#0000000&@41|P+0#00e0003&|I|P|E| +0#0000000&@22
@2|F+0#00e0003&|O|R|M|A|T| +0#0000000&@39|F+0#00e0003&|O|R|M|A|T| +0#0000000&@20
@2|S+0#00e0003&|E|M|A| +0#0000000&@41|S+0#00e0003&|E|M|A| +0#0000000&@22
@2|S+0#00e0003&|O|U|N|D| +0#0000000&@40|S+0#00e0003&|O|U|N|D| +0#0000000&@21
|#+0#0000e05&| |I|d|e|n|t|i|f|i|e|r|s|.| |#| +0#0000000&@58
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |p|i|;+0#0000000&| @1|q+0#00e0e07&|p|i|;+0#0000000&| @26|l+0#00e0e07&|o|n|g|l|o|n|g|p|i|;+0#0000000&| @1|q+0#00e0e07&|p|i| +0#0000000&@10
|#+0#0000e05&| |#| +0#0000000&@71
@2|b+0#00e0e07&|i|t|s| |l|e|n|g|t|h|s|;+0#0000000&| @32|b+0#00e0e07&|i|t|s|l|e|n|g|t|h|s| +0#0000000&@15
@2|b+0#00e0e07&|i|t|s| |s|h|o|r|t|h|s|;+0#0000000&| @32|b+0#00e0e07&|i|t|s@1|h|o|r|t|h|s| +0#0000000&@15
@2|b+0#00e0e07&|i|t|s| |w|i|d|t|h|;+0#0000000&| @34|b+0#00e0e07&|i|t|s|w|i|d|t|h| +0#0000000&@17
@2|b+0#00e0e07&|y|t|e|s| |l|e|n|g|t|h|s|;+0#0000000&| @31|b+0#00e0e07&|y|t|e|s|l|e|n|g|t|h|s| +0#0000000&@14
@2|b+0#00e0e07&|y|t|e|s| |s|h|o|r|t|h|s|;+0#0000000&| @31|b+0#00e0e07&|y|t|e|s@1|h|o|r|t|h|s| +0#0000000&@14
@2|b+0#00e0e07&|y|t|e|s| |w|i|d|t|h|;+0#0000000&| @33|b+0#00e0e07&|y|t|e|s|w|i|d|t|h| +0#0000000&@16
@2|c+0#00e0e07&|o|m|p|l| |l|e|n|g|t|h|s|;+0#0000000&| @31|c+0#00e0e07&|o|m|p|l@1|e|n|g|t|h|s| +0#0000000&@14
@57|7|3|,|3| @10|3|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|c+0#00e0e07&|o|m|p|l| |l|e|n|g|t|h|s|;+0#0000000&| @31|c+0#00e0e07&|o|m|p|l@1|e|n|g|t|h|s| +0#0000000&@14
@2|c+0#00e0e07&|o|m|p|l| |s|h|o|r|t|h|s|;+0#0000000&| @31|c+0#00e0e07&|o|m|p|l|s|h|o|r|t|h|s| +0#0000000&@14
@2|e+0#00e0e07&|x|p| |w|i|d|t|h|;+0#0000000&| @35|e+0#00e0e07&|x|p|w|i|d|t|h| +0#0000000&@18
@2|i+0#00e0e07&|n|f|i|n|i|t|y|;+0#0000000&| @36|i+0#00e0e07&|n|f|i|n|i|t|y| +0#0000000&@18
@2|i+0#00e0e07&|n|f|;+0#0000000&| @41|i+0#00e0e07&|n|f| +0#0000000&@23
@2>i+0#00e0e07&|n|t| |l|e|n|g|t|h|s|;+0#0000000&| @33|i+0#00e0e07&|n|t|l|e|n|g|t|h|s| +0#0000000&@16
@2|i+0#00e0e07&|n|t| |s|h|o|r|t|h|s|;+0#0000000&| @33|i+0#00e0e07&|n|t|s|h|o|r|t|h|s| +0#0000000&@16
@2|i+0#00e0e07&|n|t| |w|i|d|t|h|;+0#0000000&| @35|i+0#00e0e07&|n|t|w|i|d|t|h| +0#0000000&@18
@2|l+0#00e0e07&|o|n|g| |b|i|t|s| |w|i|d|t|h|;+0#0000000&| @29|l+0#00e0e07&|o|n|g|b|i|t|s|w|i|d|t|h| +0#0000000&@13
@2|l+0#00e0e07&|o|n|g| |b|y|t|e|s| |w|i|d|t|h|;+0#0000000&| @28|l+0#00e0e07&|o|n|g|b|y|t|e|s|w|i|d|t|h| +0#0000000&@12
@2|l+0#00e0e07&|o|n|g| |e|x|p| |w|i|d|t|h|;+0#0000000&| @30|l+0#00e0e07&|o|n|g|e|x|p|w|i|d|t|h| +0#0000000&@14
@2|l+0#00e0e07&|o|n|g| |i|n|t| |w|i|d|t|h|;+0#0000000&| @30|l+0#00e0e07&|o|n|g|i|n|t|w|i|d|t|h| +0#0000000&@14
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |e|x|p|w|i|d|t|h|;+0#0000000&| @26|l+0#00e0e07&|o|n|g|l|o|n|g|e|x|p|w|i|d|t|h| +0#0000000&@10
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |i|n|f|i|n|i|t|y|;+0#0000000&| @26|l+0#00e0e07&|o|n|g|l|o|n|g|i|n|f|i|n|i|t|y| +0#0000000&@10
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |i|n|f|;+0#0000000&| @31|l+0#00e0e07&|o|n|g|l|o|n|g|i|n|f| +0#0000000&@15
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |i|n|t|w|i|d|t|h|;+0#0000000&| @26|l+0#00e0e07&|o|n|g|l|o|n|g|i|n|t|w|i|d|t|h| +0#0000000&@10
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |m|a|x|i|n|t|;+0#0000000&| @28|l+0#00e0e07&|o|n|g|l|o|n|g|m|a|x|i|n|t| +0#0000000&@12
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |m|a|x|r|e|a|l|;+0#0000000&| @27|l+0#00e0e07&|o|n|g|l|o|n|g|m|a|x|r|e|a|l| +0#0000000&@11
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |m|i|n|i|n|f|;+0#0000000&| @28|l+0#00e0e07&|o|n|g|l|o|n|g|m|i|n|i|n|f| +0#0000000&@12
@57|9|1|,|3| @10|4|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|l+0#00e0e07&|o|n|g| |l|o|n|g| |m|i|n|i|n|f|;+0#0000000&| @28|l+0#00e0e07&|o|n|g|l|o|n|g|m|i|n|i|n|f| +0#0000000&@12
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |m|i|n|r|e|a|l|;+0#0000000&| @27|l+0#00e0e07&|o|n|g|l|o|n|g|m|i|n|r|e|a|l| +0#0000000&@11
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |m|i|n|u|s| |i|n|f|i|n|i|t|y|;+0#0000000&| @20|l+0#00e0e07&|o|n|g|l|o|n|g|m|i|n|u|s|i|n|f|i|n|i|t|y| +0#0000000&@5
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |r|e|a|l| |w|i|d|t|h|;+0#0000000&| @24|l+0#00e0e07&|o|n|g|l|o|n|g|r|e|a|l|w|i|d|t|h| +0#0000000&@9
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |s|m|a|l@1| |r|e|a|l|;+0#0000000&| @24|l+0#00e0e07&|o|n|g|l|o|n|g|s|m|a|l@1|r|e|a|l| +0#0000000&@9
@2>l+0#00e0e07&|o|n|g| |r|e|a|l| |w|i|d|t|h|;+0#0000000&| @29|l+0#00e0e07&|o|n|g|r|e|a|l|w|i|d|t|h| +0#0000000&@13
@2|m+0#00e0e07&|a|x| |a|b|s| |c|h|a|r|;+0#0000000&| @32|m+0#00e0e07&|a|x|a|b|s|c|h|a|r| +0#0000000&@16
@2|m+0#00e0e07&|a|x| |b|i|t|s|;+0#0000000&| @36|m+0#00e0e07&|a|x|b|i|t|s| +0#0000000&@19
@2|m+0#00e0e07&|a|x| |i|n|t|;+0#0000000&| @37|m+0#00e0e07&|a|x|i|n|t| +0#0000000&@20
@2|m+0#00e0e07&|a|x| |r|e|a|l|;+0#0000000&| @36|m+0#00e0e07&|a|x|r|e|a|l| +0#0000000&@19
@2|m+0#00e0e07&|i|n| |i|n|f|;+0#0000000&| @37|m+0#00e0e07&|i|n|i|n|f| +0#0000000&@20
@2|m+0#00e0e07&|i|n| |r|e|a|l|;+0#0000000&| @36|m+0#00e0e07&|i|n|r|e|a|l| +0#0000000&@19
@2|m+0#00e0e07&|i|n|u|s| |i|n|f|i|n|i|t|y|;+0#0000000&| @30|m+0#00e0e07&|i|n|u|s|i|n|f|i|n|i|t|y| +0#0000000&@13
@2|m+0#00e0e07&|p|r|a|d|i|x|;+0#0000000&| @37|m+0#00e0e07&|p|r|a|d|i|x| +0#0000000&@19
@2|n+0#00e0e07&|a|n|;+0#0000000&| @41|n+0#00e0e07&|a|n| +0#0000000&@23
@2|p+0#00e0e07&|i|;+0#0000000&| @42|p+0#00e0e07&|i| +0#0000000&@24
@2|r+0#00e0e07&|e|a|l| |l|e|n|g|t|h|s|;+0#0000000&| @32|r+0#00e0e07&|e|a|l@1|e|n|g|t|h|s| +0#0000000&@15
@2|r+0#00e0e07&|e|a|l| |s|h|o|r|t|h|s|;+0#0000000&| @32|r+0#00e0e07&|e|a|l|s|h|o|r|t|h|s| +0#0000000&@15
@2|r+0#00e0e07&|e|a|l| |w|i|d|t|h|;+0#0000000&| @34|r+0#00e0e07&|e|a|l|w|i|d|t|h| +0#0000000&@17
@57|1|0|9|,|3| @9|4|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|r+0#00e0e07&|e|a|l| |w|i|d|t|h|;+0#0000000&| @34|r+0#00e0e07&|e|a|l|w|i|d|t|h| +0#0000000&@17
@2|s+0#00e0e07&|m|a|l@1| |r|e|a|l|;+0#0000000&| @34|s+0#00e0e07&|m|a|l@1|r|e|a|l| +0#0000000&@17
@2|c+0#00e0e07&|l|o|c|k|;+0#0000000&| @39|c+0#00e0e07&|l|o|c|k| +0#0000000&@21
@2|c+0#00e0e07&|p|u| |t|i|m|e|;+0#0000000&| @36|c+0#00e0e07&|p|u|t|i|m|e| +0#0000000&@19
@2|s+0#00e0e07&|e|c|o|n|d|s|;+0#0000000&| @37|s+0#00e0e07&|e|c|o|n|d|s| +0#0000000&@19
@2>w+0#00e0e07&|a|l@1| |c|l|o|c|k|;+0#0000000&| @34|w+0#00e0e07&|a|l@1|c|l|o|c|k| +0#0000000&@17
@2|w+0#00e0e07&|a|l@1| |s|e|c|o|n|d|s|;+0#0000000&| @32|w+0#00e0e07&|a|l@1|s|e|c|o|n|d|s| +0#0000000&@15
@2|w+0#00e0e07&|a|l@1| |t|i|m|e|;+0#0000000&| @35|w+0#00e0e07&|a|l@1|t|i|m|e| +0#0000000&@18
@2|b+0#00e0e07&|l|o|c|k|s|;+0#0000000&| @38|b+0#00e0e07&|l|o|c|k|s| +0#0000000&@20
@2|c+0#00e0e07&|o|l@1|e|c|t|i|o|n|s|;+0#0000000&| @33|c+0#00e0e07&|o|l@1|e|c|t|i|o|n|s| +0#0000000&@15
@2|c+0#00e0e07&|o|l@1|e|c|t| |s|e|c|o|n|d|s|;+0#0000000&| @29|c+0#00e0e07&|o|l@1|e|c|t|s|e|c|o|n|d|s| +0#0000000&@12
@2|g+0#00e0e07&|a|r|b|a|g|e|;+0#0000000&| @37|g+0#00e0e07&|a|r|b|a|g|e| +0#0000000&@19
@2|g+0#00e0e07&|a|r|b|a|g|e| |c|o|l@1|e|c|t|i|o|n|s|;+0#0000000&| @25|g+0#00e0e07&|a|r|b|a|g|e|c|o|l@1|e|c|t|i|o|n|s| +0#0000000&@8
@2|g+0#00e0e07&|a|r|b|a|g|e| |f|r|e@1|d|;+0#0000000&| @31|g+0#00e0e07&|a|r|b|a|g|e|f|r|e@1|d| +0#0000000&@14
@2|g+0#00e0e07&|a|r|b|a|g|e| |r|e|f|u|s|e|d|;+0#0000000&| @29|g+0#00e0e07&|a|r|b|a|g|e|r|e|f|u|s|e|d| +0#0000000&@12
@2|g+0#00e0e07&|a|r|b|a|g|e| |s|e|c|o|n|d|s|;+0#0000000&| @29|g+0#00e0e07&|a|r|b|a|g|e|s|e|c|o|n|d|s| +0#0000000&@12
@2|o+0#00e0e07&|n| |g|c| |e|v|e|n|t|;+0#0000000&| @33|o+0#00e0e07&|n|g|c|e|v|e|n|t| +0#0000000&@17
@2|s+0#00e0e07&|w|e@1|p|s|;+0#0000000&| @38|s+0#00e0e07&|w|e@1|p|s| +0#0000000&@20
@2|s+0#00e0e07&|w|e@1|p|s| |r|e|f|u|s|e|d|;+0#0000000&| @30|s+0#00e0e07&|w|e@1|p|s|r|e|f|u|s|e|d| +0#0000000&@13
@57|1|2|7|,|3| @9|5|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|s+0#00e0e07&|w|e@1|p|s| |r|e|f|u|s|e|d|;+0#0000000&| @30|s+0#00e0e07&|w|e@1|p|s|r|e|f|u|s|e|d| +0#0000000&@13
@2|s+0#00e0e07&|t|a|c|k| |p|o|i|n|t|e|r|;+0#0000000&| @31|s+0#00e0e07&|t|a|c|k|p|o|i|n|t|e|r| +0#0000000&@14
@2|s+0#00e0e07&|y|s|t|e|m| |s|t|a|c|k| |p|o|i|n|t|e|r|;+0#0000000&| @24|s+0#00e0e07&|y|s|t|e|m|s|t|a|c|k|p|o|i|n|t|e|r| +0#0000000&@8
@2|s+0#00e0e07&|y|s|t|e|m| |s|t|a|c|k| |s|i|z|e|;+0#0000000&| @27|s+0#00e0e07&|y|s|t|e|m|s|t|a|c|k|s|i|z|e| +0#0000000&@11
@2|a+0#00e0e07&|c|t|u|a|l| |s|t|a|c|k| |s|i|z|e|;+0#0000000&| @27|a+0#00e0e07&|c|t|u|a|l|s|t|a|c|k|s|i|z|e| +0#0000000&@11
@2>h+0#00e0e07&|e|a|p| |p|o|i|n|t|e|r|;+0#0000000&| @32|h+0#00e0e07&|e|a|p@1|o|i|n|t|e|r| +0#0000000&@15
@2|s+0#00e0e07&|y|s|t|e|m| |h|e|a|p| |p|o|i|n|t|e|r|;+0#0000000&| @25|s+0#00e0e07&|y|s|t|e|m|h|e|a|p@1|o|i|n|t|e|r| +0#0000000&@9
@2|g+0#00e0e07&|c| |h|e|a|p|;+0#0000000&| @37|g+0#00e0e07&|c|h|e|a|p| +0#0000000&@20
@2|s+0#00e0e07&|w|e@1|p| |h|e|a|p|;+0#0000000&| @34|s+0#00e0e07&|w|e@1|p|h|e|a|p| +0#0000000&@17
@2|p+0#00e0e07&|r|e@1|m|p|t|i|v|e| |g|c|;+0#0000000&| @31|p+0#00e0e07&|r|e@1|m|p|t|i|v|e|g|c| +0#0000000&@14
@2|p+0#00e0e07&|r|e@1|m|p|t|i|v|e| |s|w|e@1|p|;+0#0000000&| @28|p+0#00e0e07&|r|e@1|m|p|t|i|v|e|s|w|e@1|p| +0#0000000&@11
@2|p+0#00e0e07&|r|e@1|m|p|t|i|v|e| |s|w|e@1|p|h|e|a|p|;+0#0000000&| @24|p+0#00e0e07&|r|e@1|m|p|t|i|v|e|s|w|e@1|p|h|e|a|p| +0#0000000&@7
@2|b+0#00e0e07&|a|c|k|t|r|a|c|e|;+0#0000000&| @35|b+0#00e0e07&|a|c|k|t|r|a|c|e| +0#0000000&@17
@2|b+0#00e0e07&|r|e|a|k|;+0#0000000&| @39|b+0#00e0e07&|r|e|a|k| +0#0000000&@21
@2|d+0#00e0e07&|e|b|u|g|;+0#0000000&| @39|d+0#00e0e07&|e|b|u|g| +0#0000000&@21
@2|m+0#00e0e07&|o|n|i|t|o|r|;+0#0000000&| @37|m+0#00e0e07&|o|n|i|t|o|r| +0#0000000&@19
@2|a+0#00e0e07&|b|e|n|d|;+0#0000000&| @39|a+0#00e0e07&|b|e|n|d| +0#0000000&@21
@2|e+0#00e0e07&|v|a|l|u|a|t|e|;+0#0000000&| @36|e+0#00e0e07&|v|a|l|u|a|t|e| +0#0000000&@18
@2|s+0#00e0e07&|y|s|t|e|m|;+0#0000000&| @38|s+0#00e0e07&|y|s|t|e|m| +0#0000000&@20
@57|1|4|5|,|3| @9|6|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|s+0#00e0e07&|y|s|t|e|m|;+0#0000000&| @38|s+0#00e0e07&|y|s|t|e|m| +0#0000000&@20
@2|s+0#00e0e07&|l|e@1|p|;+0#0000000&| @39|s+0#00e0e07&|l|e@1|p| +0#0000000&@21
|#+0#0000e05&| |M|a|c|h|i|n|e| |e|n|v|i|r|o|n| |p|a|r|a|m|e|t|e|r|s|.| |#| +0#0000000&@43
@2|i+0#00e0e07&|3|2|m|a|c|h|;+0#0000000&| @37|i+0#00e0e07&|3|2|m|a|c|h| +0#0000000&@19
@2|r+0#00e0e07&|6|4|m|a|c|h|;+0#0000000&| @37|r+0#00e0e07&|6|4|m|a|c|h| +0#0000000&@19
@2>i+0#00e0e07&|6|4|m|a|c|h|;+0#0000000&| @37|i+0#00e0e07&|6|4|m|a|c|h| +0#0000000&@19
@2|r+0#00e0e07&|1|2|8|m|a|c|h|;+0#0000000&| @36|r+0#00e0e07&|1|2|8|m|a|c|h| +0#0000000&@18
|#+0#0000e05&| |B|I|T|S| |p|r|o|c|e|d|u|r|e|s|.| |#| +0#0000000&@54
@2|b+0#00e0e07&|i|t|s| |p|a|c|k|;+0#0000000&| @35|b+0#00e0e07&|i|t|s|p|a|c|k| +0#0000000&@18
|#+0#0000e05&| |R|N|G| |p|r|o|c|e|d|u|r|e|s|.| |#| +0#0000000&@55
@2|f+0#00e0e07&|i|r|s|t| |r|a|n|d|o|m|;+0#0000000&| @32|f+0#00e0e07&|i|r|s|t|r|a|n|d|o|m| +0#0000000&@15
@2|n+0#00e0e07&|e|x|t| |r|a|n|d|o|m|;+0#0000000&| @33|n+0#00e0e07&|e|x|t|r|a|n|d|o|m| +0#0000000&@16
@2|r+0#00e0e07&|a|n|d|o|m|;+0#0000000&| @38|r+0#00e0e07&|a|n|d|o|m| +0#0000000&@20
@2|r+0#00e0e07&|n|d|;+0#0000000&| @41|r+0#00e0e07&|n|d| +0#0000000&@23
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |n|e|x|t|r|a|n|d|o|m|;+0#0000000&| @24|l+0#00e0e07&|o|n|g|l|o|n|g|n|e|x|t|r|a|n|d|o|m| +0#0000000&@8
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |r|a|n|d|o|m|;+0#0000000&| @28|l+0#00e0e07&|o|n|g|l|o|n|g|r|a|n|d|o|m| +0#0000000&@12
|#+0#0000e05&| |P|r|i|o|r|i|t|i|e|s|.| |#| +0#0000000&@59
|#+0#0000e05&| |I|N|T| |o|p|s|.| |#| +0#0000000&@62
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@57|1|6|3|,|3| @9|7|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|A+0#af5f00255&|B|S| +0#0000000&@42|A+0#af5f00255&|B|S| +0#0000000&@23
@2|S+0#af5f00255&|I|G|N| +0#0000000&@41|S+0#af5f00255&|I|G|N| +0#0000000&@22
@2|O+0#af5f00255&|D@1| +0#0000000&@42|O+0#af5f00255&|D@1| +0#0000000&@23
@2>=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
@2|~+0#af5f00255&|=| +0#0000000&@43|~+0#af5f00255&|=| +0#0000000&@24
@2|^+0#af5f00255&|=| +0#0000000&@43|^+0#af5f00255&|=| +0#0000000&@24
@2|<+0#af5f00255&| +0#0000000&@44|<+0#af5f00255&| +0#0000000&@25
@2|<+0#af5f00255&|=| +0#0000000&@43|<+0#af5f00255&|=| +0#0000000&@24
@2|>+0#af5f00255&| +0#0000000&@44|>+0#af5f00255&| +0#0000000&@25
@2|>+0#af5f00255&|=| +0#0000000&@43|>+0#af5f00255&|=| +0#0000000&@24
@2|E+0#af5f00255&|Q| +0#0000000&@43|E+0#af5f00255&|Q| +0#0000000&@24
@2|N+0#af5f00255&|E| +0#0000000&@43|N+0#af5f00255&|E| +0#0000000&@24
@2|L+0#af5f00255&|T| +0#0000000&@43|L+0#af5f00255&|T| +0#0000000&@24
@2|L+0#af5f00255&|E| +0#0000000&@43|L+0#af5f00255&|E| +0#0000000&@24
@2|G+0#af5f00255&|T| +0#0000000&@43|G+0#af5f00255&|T| +0#0000000&@24
@2|G+0#af5f00255&|E| +0#0000000&@43|G+0#af5f00255&|E| +0#0000000&@24
@57|1|8|1|,|3| @9|8|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|s+0#00e0e07&|y|n|c|h|r|o|t|r|o|n| |2|;+0#0000000&| @31|s+0#00e0e07&|y|n|c|h|r|o|t|r|o|n|2| +0#0000000&@14
@2|t+0#00e0e07&|a|y|l|o|r| |c|o|e|f@1|;+0#0000000&| @32|t+0#00e0e07&|a|y|l|o|r|c|o|e|f@1| +0#0000000&@15
@2|t+0#00e0e07&|r|a|n|s|p|o|r|t| |2|;+0#0000000&| @33|t+0#00e0e07&|r|a|n|s|p|o|r|t|2| +0#0000000&@16
@2|t+0#00e0e07&|r|a|n|s|p|o|r|t| |3|;+0#0000000&| @33|t+0#00e0e07&|r|a|n|s|p|o|r|t|3| +0#0000000&@16
@2|t+0#00e0e07&|r|a|n|s|p|o|r|t| |4|;+0#0000000&| @33|t+0#00e0e07&|r|a|n|s|p|o|r|t|4| +0#0000000&@16
@2>t+0#00e0e07&|r|a|n|s|p|o|r|t| |5|;+0#0000000&| @33|t+0#00e0e07&|r|a|n|s|p|o|r|t|5| +0#0000000&@16
@2|z+0#00e0e07&|e|t|a| |i|n|t|;+0#0000000&| @36|z+0#00e0e07&|e|t|a|i|n|t| +0#0000000&@19
@2|z+0#00e0e07&|e|t|a| |m|1| |i|n|t|;+0#0000000&| @33|z+0#00e0e07&|e|t|a|m|1|i|n|t| +0#0000000&@17
@2|z+0#00e0e07&|e|t|a| |m|1|;+0#0000000&| @37|z+0#00e0e07&|e|t|a|m|1| +0#0000000&@20
@2|z+0#00e0e07&|e|t|a|;+0#0000000&| @40|z+0#00e0e07&|e|t|a| +0#0000000&@22
|#+0#0000e05&| |V|e|c|t|o|r| |a|n|d| |m|a|t|r|i|x| |p|r|e|t@1|y| |p|r|i|n|t|.| |#| +0#0000000&@39
@2|p+0#00e0e07&|r|i|n|t| |v|e|c|t|o|r|;+0#0000000&| @32|p+0#00e0e07&|r|i|n|t|v|e|c|t|o|r| +0#0000000&@15
@2|p+0#00e0e07&|r|i|n|t| |m|a|t|r|i|x|;+0#0000000&| @32|p+0#00e0e07&|r|i|n|t|m|a|t|r|i|x| +0#0000000&@15
|#+0#0000e05&| |V|e|c|t|o|r| |a|n|d| |m|a|t|r|i|x| |m|o|n|a|d|i|c|.| |#| +0#0000000&@44
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|C+0#af5f00255&|V| +0#0000000&@43|C+0#af5f00255&|V| +0#0000000&@24
@2|R+0#af5f00255&|V| +0#0000000&@43|R+0#af5f00255&|V| +0#0000000&@24
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@57|1|7|6@1|,|3| @7|8|3|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|T+0#af5f00255&| +0#0000000&@44|T+0#af5f00255&| +0#0000000&@25
@2|I+0#af5f00255&|N|V| +0#0000000&@42|I+0#af5f00255&|N|V| +0#0000000&@23
@2|P+0#af5f00255&|I|N|V| +0#0000000&@41|P+0#af5f00255&|I|N|V| +0#0000000&@22
@2>M+0#af5f00255&|E|A|N| +0#0000000&@41|M+0#af5f00255&|E|A|N| +0#0000000&@22
@2|D+0#af5f00255&|E|T| +0#0000000&@42|D+0#af5f00255&|E|T| +0#0000000&@23
@2|T+0#af5f00255&|R|A|C|E| +0#0000000&@40|T+0#af5f00255&|R|A|C|E| +0#0000000&@21
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|T+0#af5f00255&| +0#0000000&@44|T+0#af5f00255&| +0#0000000&@25
@2|I+0#af5f00255&|N|V| +0#0000000&@42|I+0#af5f00255&|N|V| +0#0000000&@23
@2|D+0#af5f00255&|E|T| +0#0000000&@42|D+0#af5f00255&|E|T| +0#0000000&@23
@2|T+0#af5f00255&|R|A|C|E| +0#0000000&@40|T+0#af5f00255&|R|A|C|E| +0#0000000&@21
|#+0#0000e05&| |V|e|c|t|o|r| |a|n|d| |m|a|t|r|i|x| |d|y|a|d|i|c|.| |#| +0#0000000&@45
@2|=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
@57|1|7|8|4|,|3| @7|8|4|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|++0#af5f00255&|:|=| +0#0000000&@42|++0#af5f00255&|:|=| +0#0000000&@23
@2|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@39|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@20
@2>-+0#af5f00255&|:|=| +0#0000000&@42|-+0#af5f00255&|:|=| +0#0000000&@23
@2|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@38|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@19
@2|=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&|-| +0#0000000&@43|/+0#af5f00255&|-| +0#0000000&@24
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|B+0#af5f00255&|E|F|O|R|E| +0#0000000&@39|B+0#af5f00255&|E|F|O|R|E| +0#0000000&@20
@2|A+0#af5f00255&|B|O|V|E| +0#0000000&@40|A+0#af5f00255&|B|O|V|E| +0#0000000&@21
@2|++0#af5f00255&|:|=| +0#0000000&@42|++0#af5f00255&|:|=| +0#0000000&@23
@2|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@39|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@20
@2|-+0#af5f00255&|:|=| +0#0000000&@42|-+0#af5f00255&|:|=| +0#0000000&@23
@2|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@38|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@19
@2|=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
@57|1|8|0|2|,|3| @7|8|5|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|++0#af5f00255&|:|=| +0#0000000&@42|++0#af5f00255&|:|=| +0#0000000&@23
@2|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@39|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@20
@2>-+0#af5f00255&|:|=| +0#0000000&@42|-+0#af5f00255&|:|=| +0#0000000&@23
@2|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@38|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@19
@2|=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|++0#af5f00255&|:|=| +0#0000000&@42|++0#af5f00255&|:|=| +0#0000000&@23
@2|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@39|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@20
@2|-+0#af5f00255&|:|=| +0#0000000&@42|-+0#af5f00255&|:|=| +0#0000000&@23
@2|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@38|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@19
|#+0#0000e05&| |V|e|c|t|o|r| |a|n|d| |m|a|t|r|i|x| |s|c|a|l|i|n|g|.| |#| +0#0000000&@44
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&| +0#0000000&@44|/+0#af5f00255&| +0#0000000&@25
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
@57|1|8|2|0|,|3| @7|8|6|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&| +0#0000000&@44|/+0#af5f00255&| +0#0000000&@25
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&| +0#0000000&@44|/+0#af5f00255&| +0#0000000&@25
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
@2>/+0#af5f00255&| +0#0000000&@44|/+0#af5f00255&| +0#0000000&@25
@2|*+0#af5f00255&|:|=| +0#0000000&@42|*+0#af5f00255&|:|=| +0#0000000&@23
@2|/+0#af5f00255&|:|=| +0#0000000&@42|/+0#af5f00255&|:|=| +0#0000000&@23
@2|*+0#af5f00255&|:|=| +0#0000000&@42|*+0#af5f00255&|:|=| +0#0000000&@23
@2|/+0#af5f00255&|:|=| +0#0000000&@42|/+0#af5f00255&|:|=| +0#0000000&@23
@2|*+0#af5f00255&|:|=| +0#0000000&@42|*+0#af5f00255&|:|=| +0#0000000&@23
@2|/+0#af5f00255&|:|=| +0#0000000&@42|/+0#af5f00255&|:|=| +0#0000000&@23
@2|*+0#af5f00255&|:|=| +0#0000000&@42|*+0#af5f00255&|:|=| +0#0000000&@23
@2|/+0#af5f00255&|:|=| +0#0000000&@42|/+0#af5f00255&|:|=| +0#0000000&@23
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
|#+0#0000e05&| |M|a|t|r|i|x| |t|i|m|e|s| |v|e|c|t|o|r| |o|r| |m|a|t|r|i|x|.| |#| +0#0000000&@40
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
|#+0#0000e05&| |V|e|c|t|o|r| |a|n|d| |m|a|t|r|i|x| |m|i|s|c|e|l@1|a|n|e|o|u|s|.| |#| +0#0000000&@38
@2|v+0#00e0e07&|e|c|t|o|r| |e|c|h|o|;+0#0000000&| @33|v+0#00e0e07&|e|c|t|o|r|e|c|h|o| +0#0000000&@16
@57|1|8|3|8|,|3| @7|8|7|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|v+0#00e0e07&|e|c|t|o|r| |e|c|h|o|;+0#0000000&| @33|v+0#00e0e07&|e|c|t|o|r|e|c|h|o| +0#0000000&@16
@2|m+0#00e0e07&|a|t|r|i|x| |e|c|h|o|;+0#0000000&| @33|m+0#00e0e07&|a|t|r|i|x|e|c|h|o| +0#0000000&@16
@2|c+0#00e0e07&|o|m|p|l| |v|e|c|t|o|r| |e|c|h|o|;+0#0000000&| @27|c+0#00e0e07&|o|m|p|l|v|e|c|t|o|r|e|c|h|o| +0#0000000&@11
@2|c+0#00e0e07&|o|m|p|l| |m|a|t|r|i|x| |e|c|h|o|;+0#0000000&| @27|c+0#00e0e07&|o|m|p|l|m|a|t|r|i|x|e|c|h|o| +0#0000000&@11
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
@2>N+0#af5f00255&|O|R|M| +0#0000000&@41|N+0#af5f00255&|O|R|M| +0#0000000&@22
@2|D+0#af5f00255&|Y|A|D| +0#0000000&@41|D+0#af5f00255&|Y|A|D| +0#0000000&@22
|#+0#0000e05&| |P|r|i|n|c|i|p|l|e| |C|o|m|p|o|n|e|n|t| |A|n|a|l|y|s|i|s|.| |#| +0#0000000&@41
@2|p+0#00e0e07&|c|a|c|v|;+0#0000000&| @39|p+0#00e0e07&|c|a|c|v| +0#0000000&@21
@2|p+0#00e0e07&|c|a|s|v|d|;+0#0000000&| @38|p+0#00e0e07&|c|a|s|v|d| +0#0000000&@20
|#+0#0000e05&| |T|o|t|a|l| |L|e|a|s|t| |S|q|u|a|r|e| |r|e|g|r|e|s@1|i|o|n|.| |#| +0#0000000&@40
@2|o+0#00e0e07&|l|s|;+0#0000000&| @41|o+0#00e0e07&|l|s| +0#0000000&@23
@2|t+0#00e0e07&|l|s|;+0#0000000&| @41|t+0#00e0e07&|l|s| +0#0000000&@23
|#+0#0000e05&| |P|a|r|t|i|a|l| |L|e|a|s|t| |S|q|u|a|r|e|s| |r|e|g|r|e|s@1|i|o|n|.| |#| +0#0000000&@37
@2|p+0#00e0e07&|c|r|;+0#0000000&| @41|p+0#00e0e07&|c|r| +0#0000000&@23
@2|p+0#00e0e07&|l|s|1|;+0#0000000&| @40|p+0#00e0e07&|l|s|1| +0#0000000&@22
@2|p+0#00e0e07&|l|s|2|;+0#0000000&| @40|p+0#00e0e07&|l|s|2| +0#0000000&@22
|#+0#0000e05&| |R|o|u|t|i|n|e| |l|e|f|t| |c|o|l|u|m|n|s|,| |a| |G|S|L| |a|l|t|e|r|n|a|t|i|v|e| |t|o| |t|r|i|m@1|i|n|g| |c|o|l|u|m|n|s|.| |#| +0#0000000&@10
@2|l+0#00e0e07&|e|f|t| |c|o|l|u|m|n|s|;+0#0000000&| @32|l+0#00e0e07&|e|f|t|c|o|l|u|m|n|s| +0#0000000&@15
@57|1|8|5|6|,|3| @7|8@1|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|l+0#00e0e07&|e|f|t| |c|o|l|u|m|n|s|;+0#0000000&| @32|l+0#00e0e07&|e|f|t|c|o|l|u|m|n|s| +0#0000000&@15
|#+0#0000e05&| |M|o@1|r|e|-|P|e|n|r|o|s|e| |p|s|e|u|d|o| |i|n|v|e|r|s|e|.| |#| +0#0000000&@41
@2|p+0#00e0e07&|s|e|u|d|o| |i|n|v|;+0#0000000&| @34|p+0#00e0e07&|s|e|u|d|o|i|n|v| +0#0000000&@17
|#+0#0000e05&| |L|U| |d|e|c|o|m|p|o|s|i|t|i|o|n|.| |#| +0#0000000&@53
@2|l+0#00e0e07&|u| |d|e|c|o|m|p|;+0#0000000&| @35|l+0#00e0e07&|u|d|e|c|o|m|p| +0#0000000&@18
@2>l+0#00e0e07&|u| |d|e|t|;+0#0000000&| @38|l+0#00e0e07&|u|d|e|t| +0#0000000&@21
@2|l+0#00e0e07&|u| |i|n|v|;+0#0000000&| @38|l+0#00e0e07&|u|i|n|v| +0#0000000&@21
@2|l+0#00e0e07&|u| |s|o|l|v|e|;+0#0000000&| @36|l+0#00e0e07&|u|s|o|l|v|e| +0#0000000&@19
@2|c+0#00e0e07&|o|m|p|l|e|x| |l|u| |d|e|c|o|m|p|;+0#0000000&| @27|c+0#00e0e07&|o|m|p|l|e|x|l|u|d|e|c|o|m|p| +0#0000000&@11
@2|c+0#00e0e07&|o|m|p|l|e|x| |l|u| |d|e|t|;+0#0000000&| @30|c+0#00e0e07&|o|m|p|l|e|x|l|u|d|e|t| +0#0000000&@14
@2|c+0#00e0e07&|o|m|p|l|e|x| |l|u| |i|n|v|;+0#0000000&| @30|c+0#00e0e07&|o|m|p|l|e|x|l|u|i|n|v| +0#0000000&@14
@2|c+0#00e0e07&|o|m|p|l|e|x| |l|u| |s|o|l|v|e|;+0#0000000&| @28|c+0#00e0e07&|o|m|p|l|e|x|l|u|s|o|l|v|e| +0#0000000&@12
|#+0#0000e05&| |S|V|D| |d|e|c|o|m|p|o|s|i|t|i|o|n|.| |#| +0#0000000&@52
@2|s+0#00e0e07&|v|d| |d|e|c|o|m|p|;+0#0000000&| @34|s+0#00e0e07&|v|d@1|e|c|o|m|p| +0#0000000&@17
@2|s+0#00e0e07&|v|d| |s|o|l|v|e|;+0#0000000&| @35|s+0#00e0e07&|v|d|s|o|l|v|e| +0#0000000&@18
|#+0#0000e05&| |Q|R| |d|e|c|o|m|p|o|s|i|t|i|o|n|.| |#| +0#0000000&@53
@2|q+0#00e0e07&|r| |d|e|c|o|m|p|;+0#0000000&| @35|q+0#00e0e07&|r|d|e|c|o|m|p| +0#0000000&@18
@2|q+0#00e0e07&|r| |s|o|l|v|e|;+0#0000000&| @36|q+0#00e0e07&|r|s|o|l|v|e| +0#0000000&@19
@2|q+0#00e0e07&|r| |l|s@1|o|l|v|e|;+0#0000000&| @34|q+0#00e0e07&|r|l|s@1|o|l|v|e| +0#0000000&@17
@57|1|8|7|4|,|3| @7|8|9|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|q+0#00e0e07&|r| |l|s@1|o|l|v|e|;+0#0000000&| @34|q+0#00e0e07&|r|l|s@1|o|l|v|e| +0#0000000&@17
|#+0#0000e05&| |C|h|o|l|e|s|k|y| |d|e|c|o|m|p|o|s|i|t|i|o|n|.| |#| +0#0000000&@47
@2|c+0#00e0e07&|h|o|l|e|s|k|y| |d|e|c|o|m|p|;+0#0000000&| @29|c+0#00e0e07&|h|o|l|e|s|k|y|d|e|c|o|m|p| +0#0000000&@12
@2|c+0#00e0e07&|h|o|l|e|s|k|y| |s|o|l|v|e|;+0#0000000&| @30|c+0#00e0e07&|h|o|l|e|s|k|y|s|o|l|v|e| +0#0000000&@13
|#+0#0000e05&| |C|o|n|s|t|a|n|t|s| |e|x| |G|S|L|.| |#| +0#0000000&@53
@2>c+0#00e0e07&|g|s| |s|p|e@1|d| |o|f| |l|i|g|h|t|;+0#0000000&| @26|c+0#00e0e07&|g|s@1|p|e@1|d|o|f|l|i|g|h|t| +0#0000000&@11
@2|c+0#00e0e07&|g|s| |g|r|a|v|i|t|a|t|i|o|n|a|l| |c|o|n|s|t|a|n|t|;+0#0000000&| @18|c+0#00e0e07&|g|s|g|r|a|v|i|t|a|t|i|o|n|a|l|c|o|n|s|t|a|n|t| +0#0000000&@2
@2|c+0#00e0e07&|g|s| |p|l|a|n|c|k| |c|o|n|s|t|a|n|t|;+0#0000000&| @25|c+0#00e0e07&|g|s|p|l|a|n|c|k|c|o|n|s|t|a|n|t| +0#0000000&@9
@2|c+0#00e0e07&|g|s| |p|l|a|n|c|k| |c|o|n|s|t|a|n|t| |b|a|r|;+0#0000000&| @21|c+0#00e0e07&|g|s|p|l|a|n|c|k|c|o|n|s|t|a|n|t|b|a|r| +0#0000000&@6
@2|c+0#00e0e07&|g|s| |a|s|t|r|o|n|o|m|i|c|a|l| |u|n|i|t|;+0#0000000&| @23|c+0#00e0e07&|g|s|a|s|t|r|o|n|o|m|i|c|a|l|u|n|i|t| +0#0000000&@7
@2|c+0#00e0e07&|g|s| |l|i|g|h|t| |y|e|a|r|;+0#0000000&| @30|c+0#00e0e07&|g|s|l|i|g|h|t|y|e|a|r| +0#0000000&@14
@2|c+0#00e0e07&|g|s| |p|a|r|s|e|c|;+0#0000000&| @34|c+0#00e0e07&|g|s|p|a|r|s|e|c| +0#0000000&@17
@2|c+0#00e0e07&|g|s| |g|r|a|v| |a|c@1|e|l|;+0#0000000&| @30|c+0#00e0e07&|g|s|g|r|a|v|a|c@1|e|l| +0#0000000&@14
@2|c+0#00e0e07&|g|s| |e|l|e|c|t|r|o|n| |v|o|l|t|;+0#0000000&| @27|c+0#00e0e07&|g|s|e|l|e|c|t|r|o|n|v|o|l|t| +0#0000000&@11
@2|c+0#00e0e07&|g|s| |m|a|s@1| |e|l|e|c|t|r|o|n|;+0#0000000&| @27|c+0#00e0e07&|g|s|m|a|s@1|e|l|e|c|t|r|o|n| +0#0000000&@11
@2|c+0#00e0e07&|g|s| |m|a|s@1| |m|u|o|n|;+0#0000000&| @31|c+0#00e0e07&|g|s|m|a|s@1|m|u|o|n| +0#0000000&@15
@2|c+0#00e0e07&|g|s| |m|a|s@1| |p|r|o|t|o|n|;+0#0000000&| @29|c+0#00e0e07&|g|s|m|a|s@1|p|r|o|t|o|n| +0#0000000&@13
@2|c+0#00e0e07&|g|s| |m|a|s@1| |n|e|u|t|r|o|n|;+0#0000000&| @28|c+0#00e0e07&|g|s|m|a|s@1|n|e|u|t|r|o|n| +0#0000000&@12
@2|c+0#00e0e07&|g|s| |r|y|d|b|e|r|g|;+0#0000000&| @33|c+0#00e0e07&|g|s|r|y|d|b|e|r|g| +0#0000000&@16
@57|1|8|9|2|,|3| @7|8|9|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|c+0#00e0e07&|g|s| |r|y|d|b|e|r|g|;+0#0000000&| @33|c+0#00e0e07&|g|s|r|y|d|b|e|r|g| +0#0000000&@16
@2|c+0#00e0e07&|g|s| |b|o|l|t|z|m|a|n@1|;+0#0000000&| @31|c+0#00e0e07&|g|s|b|o|l|t|z|m|a|n@1| +0#0000000&@14
@2|c+0#00e0e07&|g|s| |b|o|h|r| |m|a|g|n|e|t|o|n|;+0#0000000&| @27|c+0#00e0e07&|g|s|b|o|h|r|m|a|g|n|e|t|o|n| +0#0000000&@11
@2|c+0#00e0e07&|g|s| |n|u|c|l|e|a|r| |m|a|g|n|e|t|o|n|;+0#0000000&| @24|c+0#00e0e07&|g|s|n|u|c|l|e|a|r|m|a|g|n|e|t|o|n| +0#0000000&@8
@2|c+0#00e0e07&|g|s| |e|l|e|c|t|r|o|n| |m|a|g|n|e|t|i|c| |m|o|m|e|n|t|;+0#0000000&| @16|c+0#00e0e07&|g|s|e|l|e|c|t|r|o|n|m|a|g|n|e|t|i|c|m|o|m|e|n|t| +0#0000000&@1
@2>c+0#00e0e07&|g|s| |p|r|o|t|o|n| |m|a|g|n|e|t|i|c| |m|o|m|e|n|t|;+0#0000000&| @18|c+0#00e0e07&|g|s|p|r|o|t|o|n|m|a|g|n|e|t|i|c|m|o|m|e|n|t| +0#0000000&@3
@2|c+0#00e0e07&|g|s| |m|o|l|a|r| |g|a|s|;+0#0000000&| @31|c+0#00e0e07&|g|s|m|o|l|a|r|g|a|s| +0#0000000&@15
@2|c+0#00e0e07&|g|s| |s|t|a|n|d|a|r|d| |g|a|s| |v|o|l|u|m|e|;+0#0000000&| @21|c+0#00e0e07&|g|s@1|t|a|n|d|a|r|d|g|a|s|v|o|l|u|m|e| +0#0000000&@6
@2|c+0#00e0e07&|g|s| |m|i|n|u|t|e|;+0#0000000&| @34|c+0#00e0e07&|g|s|m|i|n|u|t|e| +0#0000000&@17
@2|c+0#00e0e07&|g|s| |h|o|u|r|;+0#0000000&| @36|c+0#00e0e07&|g|s|h|o|u|r| +0#0000000&@19
@2|c+0#00e0e07&|g|s| |d|a|y|;+0#0000000&| @37|c+0#00e0e07&|g|s|d|a|y| +0#0000000&@20
@2|c+0#00e0e07&|g|s| |w|e@1|k|;+0#0000000&| @36|c+0#00e0e07&|g|s|w|e@1|k| +0#0000000&@19
@2|c+0#00e0e07&|g|s| |i|n|c|h|;+0#0000000&| @36|c+0#00e0e07&|g|s|i|n|c|h| +0#0000000&@19
@2|c+0#00e0e07&|g|s| |f|o@1|t|;+0#0000000&| @36|c+0#00e0e07&|g|s|f|o@1|t| +0#0000000&@19
@2|c+0#00e0e07&|g|s| |y|a|r|d|;+0#0000000&| @36|c+0#00e0e07&|g|s|y|a|r|d| +0#0000000&@19
@2|c+0#00e0e07&|g|s| |m|i|l|e|;+0#0000000&| @36|c+0#00e0e07&|g|s|m|i|l|e| +0#0000000&@19
@2|c+0#00e0e07&|g|s| |n|a|u|t|i|c|a|l| |m|i|l|e|;+0#0000000&| @27|c+0#00e0e07&|g|s|n|a|u|t|i|c|a|l|m|i|l|e| +0#0000000&@11
@2|c+0#00e0e07&|g|s| |f|a|t|h|o|m|;+0#0000000&| @34|c+0#00e0e07&|g|s|f|a|t|h|o|m| +0#0000000&@17
@2|c+0#00e0e07&|g|s| |m|i|l|;+0#0000000&| @37|c+0#00e0e07&|g|s|m|i|l| +0#0000000&@20
@57|1|9|1|0|,|3| @7|9|0|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|c+0#00e0e07&|g|s| |m|i|l|;+0#0000000&| @37|c+0#00e0e07&|g|s|m|i|l| +0#0000000&@20
@2|c+0#00e0e07&|g|s| |p|o|i|n|t|;+0#0000000&| @35|c+0#00e0e07&|g|s|p|o|i|n|t| +0#0000000&@18
@2|c+0#00e0e07&|g|s| |t|e|x|p|o|i|n|t|;+0#0000000&| @32|c+0#00e0e07&|g|s|t|e|x|p|o|i|n|t| +0#0000000&@15
@2|c+0#00e0e07&|g|s| |m|i|c|r|o|n|;+0#0000000&| @34|c+0#00e0e07&|g|s|m|i|c|r|o|n| +0#0000000&@17
@2|c+0#00e0e07&|g|s| |a|n|g|s|t|r|o|m|;+0#0000000&| @32|c+0#00e0e07&|g|s|a|n|g|s|t|r|o|m| +0#0000000&@15
@2>c+0#00e0e07&|g|s| |h|e|c|t|a|r|e|;+0#0000000&| @33|c+0#00e0e07&|g|s|h|e|c|t|a|r|e| +0#0000000&@16
@2|c+0#00e0e07&|g|s| |a|c|r|e|;+0#0000000&| @36|c+0#00e0e07&|g|s|a|c|r|e| +0#0000000&@19
@2|c+0#00e0e07&|g|s| |b|a|r|n|;+0#0000000&| @36|c+0#00e0e07&|g|s|b|a|r|n| +0#0000000&@19
@2|c+0#00e0e07&|g|s| |l|i|t|e|r|;+0#0000000&| @35|c+0#00e0e07&|g|s|l|i|t|e|r| +0#0000000&@18
@2|c+0#00e0e07&|g|s| |u|s| |g|a|l@1|o|n|;+0#0000000&| @31|c+0#00e0e07&|g|s|u|s|g|a|l@1|o|n| +0#0000000&@15
@2|c+0#00e0e07&|g|s| |q|u|a|r|t|;+0#0000000&| @35|c+0#00e0e07&|g|s|q|u|a|r|t| +0#0000000&@18
@2|c+0#00e0e07&|g|s| |p|i|n|t|;+0#0000000&| @36|c+0#00e0e07&|g|s|p|i|n|t| +0#0000000&@19
@2|c+0#00e0e07&|g|s| |c|u|p|;+0#0000000&| @37|c+0#00e0e07&|g|s|c|u|p| +0#0000000&@20
@2|c+0#00e0e07&|g|s| |f|l|u|i|d| |o|u|n|c|e|;+0#0000000&| @29|c+0#00e0e07&|g|s|f|l|u|i|d|o|u|n|c|e| +0#0000000&@13
@2|c+0#00e0e07&|g|s| |t|a|b|l|e| |s|p|o@1|n|;+0#0000000&| @29|c+0#00e0e07&|g|s|t|a|b|l|e|s|p|o@1|n| +0#0000000&@13
@2|c+0#00e0e07&|g|s| |t|e|a| |s|p|o@1|n|;+0#0000000&| @31|c+0#00e0e07&|g|s|t|e|a|s|p|o@1|n| +0#0000000&@15
@2|c+0#00e0e07&|g|s| |c|a|n|a|d|i|a|n| |g|a|l@1|o|n|;+0#0000000&| @25|c+0#00e0e07&|g|s|c|a|n|a|d|i|a|n|g|a|l@1|o|n| +0#0000000&@9
@2|c+0#00e0e07&|g|s| |u|k| |g|a|l@1|o|n|;+0#0000000&| @31|c+0#00e0e07&|g|s|u|k|g|a|l@1|o|n| +0#0000000&@15
@2|c+0#00e0e07&|g|s| |m|i|l|e|s| |p|e|r| |h|o|u|r|;+0#0000000&| @26|c+0#00e0e07&|g|s|m|i|l|e|s|p|e|r|h|o|u|r| +0#0000000&@11
@57|1|9|2|8|,|3| @7|9|1|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|G+0#af5f00255&|E| +0#0000000&@43|G+0#af5f00255&|E| +0#0000000&@24
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
@2|O+0#af5f00255&|V|E|R| +0#0000000&@41|O+0#af5f00255&|V|E|R| +0#0000000&@22
@2>%+0#af5f00255&| +0#0000000&@44|%+0#af5f00255&| +0#0000000&@25
@2|M+0#af5f00255&|O|D| +0#0000000&@42|M+0#af5f00255&|O|D| +0#0000000&@23
@2|%+0#af5f00255&|*| +0#0000000&@43|%+0#af5f00255&|*| +0#0000000&@24
@2|*+0#af5f00255&@1| +0#0000000&@43|*+0#af5f00255&@1| +0#0000000&@24
@2|U+0#af5f00255&|P| +0#0000000&@43|U+0#af5f00255&|P| +0#0000000&@24
@2|^+0#af5f00255&| +0#0000000&@44|^+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&| +0#0000000&@44|/+0#af5f00255&| +0#0000000&@25
@2|++0#af5f00255&|:|=| +0#0000000&@42|++0#af5f00255&|:|=| +0#0000000&@23
@2|-+0#af5f00255&|:|=| +0#0000000&@42|-+0#af5f00255&|:|=| +0#0000000&@23
@2|*+0#af5f00255&|:|=| +0#0000000&@42|*+0#af5f00255&|:|=| +0#0000000&@23
@2|%+0#af5f00255&|:|=| +0#0000000&@42|%+0#af5f00255&|:|=| +0#0000000&@23
@2|%+0#af5f00255&|*|:|=| +0#0000000&@41|%+0#af5f00255&|*|:|=| +0#0000000&@22
@2|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@39|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@20
@2|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@38|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@19
@57|1|9@1|,|3| @9|9|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|c+0#00e0e07&|g|s| |m|i|l|e|s| |p|e|r| |h|o|u|r|;+0#0000000&| @26|c+0#00e0e07&|g|s|m|i|l|e|s|p|e|r|h|o|u|r| +0#0000000&@11
@2|c+0#00e0e07&|g|s| |k|i|l|o|m|e|t|e|r|s| |p|e|r| |h|o|u|r|;+0#0000000&| @21|c+0#00e0e07&|g|s|k|i|l|o|m|e|t|e|r|s|p|e|r|h|o|u|r| +0#0000000&@6
@2|c+0#00e0e07&|g|s| |k|n|o|t|;+0#0000000&| @36|c+0#00e0e07&|g|s|k|n|o|t| +0#0000000&@19
@2|c+0#00e0e07&|g|s| |p|o|u|n|d| |m|a|s@1|;+0#0000000&| @30|c+0#00e0e07&|g|s|p|o|u|n|d|m|a|s@1| +0#0000000&@14
@2|c+0#00e0e07&|g|s| |o|u|n|c|e| |m|a|s@1|;+0#0000000&| @30|c+0#00e0e07&|g|s|o|u|n|c|e|m|a|s@1| +0#0000000&@14
@2>c+0#00e0e07&|g|s| |t|o|n|;+0#0000000&| @37|c+0#00e0e07&|g|s|t|o|n| +0#0000000&@20
@2|c+0#00e0e07&|g|s| |m|e|t|r|i|c|t|o|n|;+0#0000000&| @31|c+0#00e0e07&|g|s|m|e|t|r|i|c|t|o|n| +0#0000000&@14
@2|c+0#00e0e07&|g|s| |u|k|t|o|n|;+0#0000000&| @35|c+0#00e0e07&|g|s|u|k|t|o|n| +0#0000000&@18
@2|c+0#00e0e07&|g|s| |t|r|o|y| |o|u|n|c|e|;+0#0000000&| @30|c+0#00e0e07&|g|s|t|r|o|y|o|u|n|c|e| +0#0000000&@14
@2|c+0#00e0e07&|g|s| |c|a|r|a|t|;+0#0000000&| @35|c+0#00e0e07&|g|s|c|a|r|a|t| +0#0000000&@18
@2|c+0#00e0e07&|g|s| |u|n|i|f|i|e|d| |a|t|o|m|i|c| |m|a|s@1|;+0#0000000&| @21|c+0#00e0e07&|g|s|u|n|i|f|i|e|d|a|t|o|m|i|c|m|a|s@1| +0#0000000&@6
@2|c+0#00e0e07&|g|s| |g|r|a|m| |f|o|r|c|e|;+0#0000000&| @30|c+0#00e0e07&|g|s|g|r|a|m|f|o|r|c|e| +0#0000000&@14
@2|c+0#00e0e07&|g|s| |p|o|u|n|d| |f|o|r|c|e|;+0#0000000&| @29|c+0#00e0e07&|g|s|p|o|u|n|d|f|o|r|c|e| +0#0000000&@13
@2|c+0#00e0e07&|g|s| |k|i|l|o| |p|o|u|n|d| |f|o|r|c|e|;+0#0000000&| @24|c+0#00e0e07&|g|s|k|i|l|o|p|o|u|n|d|f|o|r|c|e| +0#0000000&@9
@2|c+0#00e0e07&|g|s| |p|o|u|n|d|a|l|;+0#0000000&| @33|c+0#00e0e07&|g|s|p|o|u|n|d|a|l| +0#0000000&@16
@2|c+0#00e0e07&|g|s| |c|a|l|o|r|i|e|;+0#0000000&| @33|c+0#00e0e07&|g|s|c|a|l|o|r|i|e| +0#0000000&@16
@2|c+0#00e0e07&|g|s| |b|t|u|;+0#0000000&| @37|c+0#00e0e07&|g|s|b|t|u| +0#0000000&@20
@2|c+0#00e0e07&|g|s| |t|h|e|r|m|;+0#0000000&| @35|c+0#00e0e07&|g|s|t|h|e|r|m| +0#0000000&@18
@2|c+0#00e0e07&|g|s| |h|o|r|s|e|p|o|w|e|r|;+0#0000000&| @30|c+0#00e0e07&|g|s|h|o|r|s|e|p|o|w|e|r| +0#0000000&@13
@57|1|9|4|6|,|3| @7|9|2|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|c+0#00e0e07&|g|s| |h|o|r|s|e|p|o|w|e|r|;+0#0000000&| @30|c+0#00e0e07&|g|s|h|o|r|s|e|p|o|w|e|r| +0#0000000&@13
@2|c+0#00e0e07&|g|s| |b|a|r|;+0#0000000&| @37|c+0#00e0e07&|g|s|b|a|r| +0#0000000&@20
@2|c+0#00e0e07&|g|s| |s|t|d| |a|t|m|o|s|p|h|e|r|e|;+0#0000000&| @26|c+0#00e0e07&|g|s@1|t|d|a|t|m|o|s|p|h|e|r|e| +0#0000000&@10
@2|c+0#00e0e07&|g|s| |t|o|r@1|;+0#0000000&| @36|c+0#00e0e07&|g|s|t|o|r@1| +0#0000000&@19
@2|c+0#00e0e07&|g|s| |m|e|t|e|r| |o|f| |m|e|r|c|u|r|y|;+0#0000000&| @24|c+0#00e0e07&|g|s|m|e|t|e|r|o|f|m|e|r|c|u|r|y| +0#0000000&@9
@2>c+0#00e0e07&|g|s| |i|n|c|h| |o|f| |m|e|r|c|u|r|y|;+0#0000000&| @25|c+0#00e0e07&|g|s|i|n|c|h|o|f|m|e|r|c|u|r|y| +0#0000000&@10
@2|c+0#00e0e07&|g|s| |i|n|c|h| |o|f| |w|a|t|e|r|;+0#0000000&| @27|c+0#00e0e07&|g|s|i|n|c|h|o|f|w|a|t|e|r| +0#0000000&@12
@2|c+0#00e0e07&|g|s| |p|s|i|;+0#0000000&| @37|c+0#00e0e07&|g|s|p|s|i| +0#0000000&@20
@2|c+0#00e0e07&|g|s| |p|o|i|s|e|;+0#0000000&| @35|c+0#00e0e07&|g|s|p|o|i|s|e| +0#0000000&@18
@2|c+0#00e0e07&|g|s| |s|t|o|k|e|s|;+0#0000000&| @34|c+0#00e0e07&|g|s@1|t|o|k|e|s| +0#0000000&@17
@2|c+0#00e0e07&|g|s| |f|a|r|a|d|a|y|;+0#0000000&| @33|c+0#00e0e07&|g|s|f|a|r|a|d|a|y| +0#0000000&@16
@2|c+0#00e0e07&|g|s| |e|l|e|c|t|r|o|n| |c|h|a|r|g|e|;+0#0000000&| @25|c+0#00e0e07&|g|s|e|l|e|c|t|r|o|n|c|h|a|r|g|e| +0#0000000&@9
@2|c+0#00e0e07&|g|s| |g|a|u|s@1|;+0#0000000&| @35|c+0#00e0e07&|g|s|g|a|u|s@1| +0#0000000&@18
@2|c+0#00e0e07&|g|s| |s|t|i|l|b|;+0#0000000&| @35|c+0#00e0e07&|g|s@1|t|i|l|b| +0#0000000&@18
@2|c+0#00e0e07&|g|s| |l|u|m|e|n|;+0#0000000&| @35|c+0#00e0e07&|g|s|l|u|m|e|n| +0#0000000&@18
@2|c+0#00e0e07&|g|s| |l|u|x|;+0#0000000&| @37|c+0#00e0e07&|g|s|l|u|x| +0#0000000&@20
@2|c+0#00e0e07&|g|s| |p|h|o|t|;+0#0000000&| @36|c+0#00e0e07&|g|s|p|h|o|t| +0#0000000&@19
@2|c+0#00e0e07&|g|s| |f|o@1|t| |c|a|n|d|l|e|;+0#0000000&| @29|c+0#00e0e07&|g|s|f|o@1|t|c|a|n|d|l|e| +0#0000000&@13
@2|c+0#00e0e07&|g|s| |l|a|m|b|e|r|t|;+0#0000000&| @33|c+0#00e0e07&|g|s|l|a|m|b|e|r|t| +0#0000000&@16
@57|1|9|6|4|,|3| @7|9|3|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|c+0#00e0e07&|g|s| |l|a|m|b|e|r|t|;+0#0000000&| @33|c+0#00e0e07&|g|s|l|a|m|b|e|r|t| +0#0000000&@16
@2|c+0#00e0e07&|g|s| |f|o@1|t| |l|a|m|b|e|r|t|;+0#0000000&| @28|c+0#00e0e07&|g|s|f|o@1|t|l|a|m|b|e|r|t| +0#0000000&@12
@2|c+0#00e0e07&|g|s| |c|u|r|i|e|;+0#0000000&| @35|c+0#00e0e07&|g|s|c|u|r|i|e| +0#0000000&@18
@2|c+0#00e0e07&|g|s| |r|o|e|n|t|g|e|n|;+0#0000000&| @32|c+0#00e0e07&|g|s|r|o|e|n|t|g|e|n| +0#0000000&@15
@2|c+0#00e0e07&|g|s| |r|a|d|;+0#0000000&| @37|c+0#00e0e07&|g|s|r|a|d| +0#0000000&@20
@2>c+0#00e0e07&|g|s| |s|o|l|a|r| |m|a|s@1|;+0#0000000&| @30|c+0#00e0e07&|g|s@1|o|l|a|r|m|a|s@1| +0#0000000&@14
@2|c+0#00e0e07&|g|s| |b|o|h|r| |r|a|d|i|u|s|;+0#0000000&| @29|c+0#00e0e07&|g|s|b|o|h|r@1|a|d|i|u|s| +0#0000000&@13
@2|c+0#00e0e07&|g|s| |n|e|w|t|o|n|;+0#0000000&| @34|c+0#00e0e07&|g|s|n|e|w|t|o|n| +0#0000000&@17
@2|c+0#00e0e07&|g|s| |d|y|n|e|;+0#0000000&| @36|c+0#00e0e07&|g|s|d|y|n|e| +0#0000000&@19
@2|c+0#00e0e07&|g|s| |j|o|u|l|e|;+0#0000000&| @35|c+0#00e0e07&|g|s|j|o|u|l|e| +0#0000000&@18
@2|c+0#00e0e07&|g|s| |e|r|g|;+0#0000000&| @37|c+0#00e0e07&|g|s|e|r|g| +0#0000000&@20
@2|m+0#00e0e07&|k|s|a| |s|p|e@1|d| |o|f| |l|i|g|h|t|;+0#0000000&| @25|m+0#00e0e07&|k|s|a|s|p|e@1|d|o|f|l|i|g|h|t| +0#0000000&@10
@2|m+0#00e0e07&|k|s|a| |g|r|a|v|i|t|a|t|i|o|n|a|l| |c|o|n|s|t|a|n|t|;+0#0000000&| @17|m+0#00e0e07&|k|s|a|g|r|a|v|i|t|a|t|i|o|n|a|l|c|o|n|s|t|a|n|t| +0#0000000&@1
@2|m+0#00e0e07&|k|s|a| |p|l|a|n|c|k| |c|o|n|s|t|a|n|t|;+0#0000000&| @24|m+0#00e0e07&|k|s|a|p|l|a|n|c|k|c|o|n|s|t|a|n|t| +0#0000000&@8
@2|m+0#00e0e07&|k|s|a| |p|l|a|n|c|k| |c|o|n|s|t|a|n|t| |b|a|r|;+0#0000000&| @20|m+0#00e0e07&|k|s|a|p|l|a|n|c|k|c|o|n|s|t|a|n|t|b|a|r| +0#0000000&@5
@2|m+0#00e0e07&|k|s|a| |v|a|c|u@1|m| |p|e|r|m|e|a|b|i|l|i|t|y|;+0#0000000&| @20|m+0#00e0e07&|k|s|a|v|a|c|u@1|m|p|e|r|m|e|a|b|i|l|i|t|y| +0#0000000&@4
@2|m+0#00e0e07&|k|s|a| |a|s|t|r|o|n|o|m|i|c|a|l| |u|n|i|t|;+0#0000000&| @22|m+0#00e0e07&|k|s|a@1|s|t|r|o|n|o|m|i|c|a|l|u|n|i|t| +0#0000000&@6
@2|m+0#00e0e07&|k|s|a| |l|i|g|h|t| |y|e|a|r|;+0#0000000&| @29|m+0#00e0e07&|k|s|a|l|i|g|h|t|y|e|a|r| +0#0000000&@13
@2|m+0#00e0e07&|k|s|a| |p|a|r|s|e|c|;+0#0000000&| @33|m+0#00e0e07&|k|s|a|p|a|r|s|e|c| +0#0000000&@16
@57|1|9|8|2|,|3| @7|9|4|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|m+0#00e0e07&|k|s|a| |p|a|r|s|e|c|;+0#0000000&| @33|m+0#00e0e07&|k|s|a|p|a|r|s|e|c| +0#0000000&@16
@2|m+0#00e0e07&|k|s|a| |g|r|a|v| |a|c@1|e|l|;+0#0000000&| @29|m+0#00e0e07&|k|s|a|g|r|a|v|a|c@1|e|l| +0#0000000&@13
@2|m+0#00e0e07&|k|s|a| |e|l|e|c|t|r|o|n| |v|o|l|t|;+0#0000000&| @26|m+0#00e0e07&|k|s|a|e|l|e|c|t|r|o|n|v|o|l|t| +0#0000000&@10
@2|m+0#00e0e07&|k|s|a| |m|a|s@1| |e|l|e|c|t|r|o|n|;+0#0000000&| @26|m+0#00e0e07&|k|s|a|m|a|s@1|e|l|e|c|t|r|o|n| +0#0000000&@10
@2|m+0#00e0e07&|k|s|a| |m|a|s@1| |m|u|o|n|;+0#0000000&| @30|m+0#00e0e07&|k|s|a|m|a|s@1|m|u|o|n| +0#0000000&@14
@2>m+0#00e0e07&|k|s|a| |m|a|s@1| |p|r|o|t|o|n|;+0#0000000&| @28|m+0#00e0e07&|k|s|a|m|a|s@1|p|r|o|t|o|n| +0#0000000&@12
@2|m+0#00e0e07&|k|s|a| |m|a|s@1| |n|e|u|t|r|o|n|;+0#0000000&| @27|m+0#00e0e07&|k|s|a|m|a|s@1|n|e|u|t|r|o|n| +0#0000000&@11
@2|m+0#00e0e07&|k|s|a| |r|y|d|b|e|r|g|;+0#0000000&| @32|m+0#00e0e07&|k|s|a|r|y|d|b|e|r|g| +0#0000000&@15
@2|m+0#00e0e07&|k|s|a| |b|o|l|t|z|m|a|n@1|;+0#0000000&| @30|m+0#00e0e07&|k|s|a|b|o|l|t|z|m|a|n@1| +0#0000000&@13
@2|m+0#00e0e07&|k|s|a| |b|o|h|r| |m|a|g|n|e|t|o|n|;+0#0000000&| @26|m+0#00e0e07&|k|s|a|b|o|h|r|m|a|g|n|e|t|o|n| +0#0000000&@10
@2|m+0#00e0e07&|k|s|a| |n|u|c|l|e|a|r| |m|a|g|n|e|t|o|n|;+0#0000000&| @23|m+0#00e0e07&|k|s|a|n|u|c|l|e|a|r|m|a|g|n|e|t|o|n| +0#0000000&@7
@2|m+0#00e0e07&|k|s|a| |e|l|e|c|t|r|o|n| |m|a|g|n|e|t|i|c| |m|o|m|e|n|t|;+0#0000000&| @15|m+0#00e0e07&|k|s|a|e|l|e|c|t|r|o|n|m|a|g|n|e|t|i|c|m|o|m|e|n|t| +0#0000000&
@2|m+0#00e0e07&|k|s|a| |p|r|o|t|o|n| |m|a|g|n|e|t|i|c| |m|o|m|e|n|t|;+0#0000000&| @17|m+0#00e0e07&|k|s|a|p|r|o|t|o|n|m|a|g|n|e|t|i|c|m|o|m|e|n|t| +0#0000000&@2
@2|m+0#00e0e07&|k|s|a| |m|o|l|a|r| |g|a|s|;+0#0000000&| @30|m+0#00e0e07&|k|s|a|m|o|l|a|r|g|a|s| +0#0000000&@14
@2|m+0#00e0e07&|k|s|a| |s|t|a|n|d|a|r|d| |g|a|s| |v|o|l|u|m|e|;+0#0000000&| @20|m+0#00e0e07&|k|s|a|s|t|a|n|d|a|r|d|g|a|s|v|o|l|u|m|e| +0#0000000&@5
@2|m+0#00e0e07&|k|s|a| |m|i|n|u|t|e|;+0#0000000&| @33|m+0#00e0e07&|k|s|a|m|i|n|u|t|e| +0#0000000&@16
@2|m+0#00e0e07&|k|s|a| |h|o|u|r|;+0#0000000&| @35|m+0#00e0e07&|k|s|a|h|o|u|r| +0#0000000&@18
@2|m+0#00e0e07&|k|s|a| |d|a|y|;+0#0000000&| @36|m+0#00e0e07&|k|s|a|d|a|y| +0#0000000&@19
@2|m+0#00e0e07&|k|s|a| |w|e@1|k|;+0#0000000&| @35|m+0#00e0e07&|k|s|a|w|e@1|k| +0#0000000&@18
@57|2|0@2|,|3| @7|9|5|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|m+0#00e0e07&|k|s|a| |w|e@1|k|;+0#0000000&| @35|m+0#00e0e07&|k|s|a|w|e@1|k| +0#0000000&@18
@2|m+0#00e0e07&|k|s|a| |i|n|c|h|;+0#0000000&| @35|m+0#00e0e07&|k|s|a|i|n|c|h| +0#0000000&@18
@2|m+0#00e0e07&|k|s|a| |f|o@1|t|;+0#0000000&| @35|m+0#00e0e07&|k|s|a|f|o@1|t| +0#0000000&@18
@2|m+0#00e0e07&|k|s|a| |y|a|r|d|;+0#0000000&| @35|m+0#00e0e07&|k|s|a|y|a|r|d| +0#0000000&@18
@2|m+0#00e0e07&|k|s|a| |m|i|l|e|;+0#0000000&| @35|m+0#00e0e07&|k|s|a|m|i|l|e| +0#0000000&@18
@2>m+0#00e0e07&|k|s|a| |n|a|u|t|i|c|a|l| |m|i|l|e|;+0#0000000&| @26|m+0#00e0e07&|k|s|a|n|a|u|t|i|c|a|l|m|i|l|e| +0#0000000&@10
@2|m+0#00e0e07&|k|s|a| |f|a|t|h|o|m|;+0#0000000&| @33|m+0#00e0e07&|k|s|a|f|a|t|h|o|m| +0#0000000&@16
@2|m+0#00e0e07&|k|s|a| |m|i|l|;+0#0000000&| @36|m+0#00e0e07&|k|s|a|m|i|l| +0#0000000&@19
@2|m+0#00e0e07&|k|s|a| |p|o|i|n|t|;+0#0000000&| @34|m+0#00e0e07&|k|s|a|p|o|i|n|t| +0#0000000&@17
@2|m+0#00e0e07&|k|s|a| |t|e|x|p|o|i|n|t|;+0#0000000&| @31|m+0#00e0e07&|k|s|a|t|e|x|p|o|i|n|t| +0#0000000&@14
@2|m+0#00e0e07&|k|s|a| |m|i|c|r|o|n|;+0#0000000&| @33|m+0#00e0e07&|k|s|a|m|i|c|r|o|n| +0#0000000&@16
@2|m+0#00e0e07&|k|s|a| |a|n|g|s|t|r|o|m|;+0#0000000&| @31|m+0#00e0e07&|k|s|a@1|n|g|s|t|r|o|m| +0#0000000&@14
@2|m+0#00e0e07&|k|s|a| |h|e|c|t|a|r|e|;+0#0000000&| @32|m+0#00e0e07&|k|s|a|h|e|c|t|a|r|e| +0#0000000&@15
@2|m+0#00e0e07&|k|s|a| |a|c|r|e|;+0#0000000&| @35|m+0#00e0e07&|k|s|a@1|c|r|e| +0#0000000&@18
@2|m+0#00e0e07&|k|s|a| |b|a|r|n|;+0#0000000&| @35|m+0#00e0e07&|k|s|a|b|a|r|n| +0#0000000&@18
@2|m+0#00e0e07&|k|s|a| |l|i|t|e|r|;+0#0000000&| @34|m+0#00e0e07&|k|s|a|l|i|t|e|r| +0#0000000&@17
@2|m+0#00e0e07&|k|s|a| |u|s| |g|a|l@1|o|n|;+0#0000000&| @30|m+0#00e0e07&|k|s|a|u|s|g|a|l@1|o|n| +0#0000000&@14
@2|m+0#00e0e07&|k|s|a| |q|u|a|r|t|;+0#0000000&| @34|m+0#00e0e07&|k|s|a|q|u|a|r|t| +0#0000000&@17
@2|m+0#00e0e07&|k|s|a| |p|i|n|t|;+0#0000000&| @35|m+0#00e0e07&|k|s|a|p|i|n|t| +0#0000000&@18
@57|2|0|1|8|,|3| @7|9|5|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|m+0#00e0e07&|k|s|a| |p|i|n|t|;+0#0000000&| @35|m+0#00e0e07&|k|s|a|p|i|n|t| +0#0000000&@18
@2|m+0#00e0e07&|k|s|a| |c|u|p|;+0#0000000&| @36|m+0#00e0e07&|k|s|a|c|u|p| +0#0000000&@19
@2|m+0#00e0e07&|k|s|a| |f|l|u|i|d| |o|u|n|c|e|;+0#0000000&| @28|m+0#00e0e07&|k|s|a|f|l|u|i|d|o|u|n|c|e| +0#0000000&@12
@2|m+0#00e0e07&|k|s|a| |t|a|b|l|e| |s|p|o@1|n|;+0#0000000&| @28|m+0#00e0e07&|k|s|a|t|a|b|l|e|s|p|o@1|n| +0#0000000&@12
@2|m+0#00e0e07&|k|s|a| |t|e|a| |s|p|o@1|n|;+0#0000000&| @30|m+0#00e0e07&|k|s|a|t|e|a|s|p|o@1|n| +0#0000000&@14
@2>m+0#00e0e07&|k|s|a| |c|a|n|a|d|i|a|n| |g|a|l@1|o|n|;+0#0000000&| @24|m+0#00e0e07&|k|s|a|c|a|n|a|d|i|a|n|g|a|l@1|o|n| +0#0000000&@8
@2|m+0#00e0e07&|k|s|a| |u|k| |g|a|l@1|o|n|;+0#0000000&| @30|m+0#00e0e07&|k|s|a|u|k|g|a|l@1|o|n| +0#0000000&@14
@2|m+0#00e0e07&|k|s|a| |m|i|l|e|s| |p|e|r| |h|o|u|r|;+0#0000000&| @25|m+0#00e0e07&|k|s|a|m|i|l|e|s|p|e|r|h|o|u|r| +0#0000000&@10
@2|m+0#00e0e07&|k|s|a| |k|i|l|o|m|e|t|e|r|s| |p|e|r| |h|o|u|r|;+0#0000000&| @20|m+0#00e0e07&|k|s|a|k|i|l|o|m|e|t|e|r|s|p|e|r|h|o|u|r| +0#0000000&@5
@2|m+0#00e0e07&|k|s|a| |k|n|o|t|;+0#0000000&| @35|m+0#00e0e07&|k|s|a|k|n|o|t| +0#0000000&@18
@2|m+0#00e0e07&|k|s|a| |p|o|u|n|d| |m|a|s@1|;+0#0000000&| @29|m+0#00e0e07&|k|s|a|p|o|u|n|d|m|a|s@1| +0#0000000&@13
@2|m+0#00e0e07&|k|s|a| |o|u|n|c|e| |m|a|s@1|;+0#0000000&| @29|m+0#00e0e07&|k|s|a|o|u|n|c|e|m|a|s@1| +0#0000000&@13
@2|m+0#00e0e07&|k|s|a| |t|o|n|;+0#0000000&| @36|m+0#00e0e07&|k|s|a|t|o|n| +0#0000000&@19
@2|m+0#00e0e07&|k|s|a| |m|e|t|r|i|c|t|o|n|;+0#0000000&| @30|m+0#00e0e07&|k|s|a|m|e|t|r|i|c|t|o|n| +0#0000000&@13
@2|m+0#00e0e07&|k|s|a| |u|k|t|o|n|;+0#0000000&| @34|m+0#00e0e07&|k|s|a|u|k|t|o|n| +0#0000000&@17
@2|m+0#00e0e07&|k|s|a| |t|r|o|y| |o|u|n|c|e|;+0#0000000&| @29|m+0#00e0e07&|k|s|a|t|r|o|y|o|u|n|c|e| +0#0000000&@13
@2|m+0#00e0e07&|k|s|a| |c|a|r|a|t|;+0#0000000&| @34|m+0#00e0e07&|k|s|a|c|a|r|a|t| +0#0000000&@17
@2|m+0#00e0e07&|k|s|a| |u|n|i|f|i|e|d| |a|t|o|m|i|c| |m|a|s@1|;+0#0000000&| @20|m+0#00e0e07&|k|s|a|u|n|i|f|i|e|d|a|t|o|m|i|c|m|a|s@1| +0#0000000&@5
@2|m+0#00e0e07&|k|s|a| |g|r|a|m| |f|o|r|c|e|;+0#0000000&| @29|m+0#00e0e07&|k|s|a|g|r|a|m|f|o|r|c|e| +0#0000000&@13
@57|2|0|3|6|,|3| @7|9|6|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|m+0#00e0e07&|k|s|a| |g|r|a|m| |f|o|r|c|e|;+0#0000000&| @29|m+0#00e0e07&|k|s|a|g|r|a|m|f|o|r|c|e| +0#0000000&@13
@2|m+0#00e0e07&|k|s|a| |p|o|u|n|d| |f|o|r|c|e|;+0#0000000&| @28|m+0#00e0e07&|k|s|a|p|o|u|n|d|f|o|r|c|e| +0#0000000&@12
@2|m+0#00e0e07&|k|s|a| |k|i|l|o| |p|o|u|n|d| |f|o|r|c|e|;+0#0000000&| @23|m+0#00e0e07&|k|s|a|k|i|l|o|p|o|u|n|d|f|o|r|c|e| +0#0000000&@8
@2|m+0#00e0e07&|k|s|a| |p|o|u|n|d|a|l|;+0#0000000&| @32|m+0#00e0e07&|k|s|a|p|o|u|n|d|a|l| +0#0000000&@15
@2|m+0#00e0e07&|k|s|a| |c|a|l|o|r|i|e|;+0#0000000&| @32|m+0#00e0e07&|k|s|a|c|a|l|o|r|i|e| +0#0000000&@15
@2>m+0#00e0e07&|k|s|a| |b|t|u|;+0#0000000&| @36|m+0#00e0e07&|k|s|a|b|t|u| +0#0000000&@19
@2|m+0#00e0e07&|k|s|a| |t|h|e|r|m|;+0#0000000&| @34|m+0#00e0e07&|k|s|a|t|h|e|r|m| +0#0000000&@17
@2|m+0#00e0e07&|k|s|a| |h|o|r|s|e|p|o|w|e|r|;+0#0000000&| @29|m+0#00e0e07&|k|s|a|h|o|r|s|e|p|o|w|e|r| +0#0000000&@12
@2|m+0#00e0e07&|k|s|a| |b|a|r|;+0#0000000&| @36|m+0#00e0e07&|k|s|a|b|a|r| +0#0000000&@19
@2|m+0#00e0e07&|k|s|a| |s|t|d|a|t|m|o|s|p|h|e|r|e|;+0#0000000&| @26|m+0#00e0e07&|k|s|a|s|t|d|a|t|m|o|s|p|h|e|r|e| +0#0000000&@9
@2|m+0#00e0e07&|k|s|a| |t|o|r@1|;+0#0000000&| @35|m+0#00e0e07&|k|s|a|t|o|r@1| +0#0000000&@18
@2|m+0#00e0e07&|k|s|a| |m|e|t|e|r| |o|f| |m|e|r|c|u|r|y|;+0#0000000&| @23|m+0#00e0e07&|k|s|a|m|e|t|e|r|o|f|m|e|r|c|u|r|y| +0#0000000&@8
@2|m+0#00e0e07&|k|s|a| |i|n|c|h| |o|f| |m|e|r|c|u|r|y|;+0#0000000&| @24|m+0#00e0e07&|k|s|a|i|n|c|h|o|f|m|e|r|c|u|r|y| +0#0000000&@9
@2|m+0#00e0e07&|k|s|a| |i|n|c|h| |o|f| |w|a|t|e|r|;+0#0000000&| @26|m+0#00e0e07&|k|s|a|i|n|c|h|o|f|w|a|t|e|r| +0#0000000&@11
@2|m+0#00e0e07&|k|s|a| |p|s|i|;+0#0000000&| @36|m+0#00e0e07&|k|s|a|p|s|i| +0#0000000&@19
@2|m+0#00e0e07&|k|s|a| |p|o|i|s|e|;+0#0000000&| @34|m+0#00e0e07&|k|s|a|p|o|i|s|e| +0#0000000&@17
@2|m+0#00e0e07&|k|s|a| |s|t|o|k|e|s|;+0#0000000&| @33|m+0#00e0e07&|k|s|a|s|t|o|k|e|s| +0#0000000&@16
@2|m+0#00e0e07&|k|s|a| |f|a|r|a|d|a|y|;+0#0000000&| @32|m+0#00e0e07&|k|s|a|f|a|r|a|d|a|y| +0#0000000&@15
@2|m+0#00e0e07&|k|s|a| |e|l|e|c|t|r|o|n| |c|h|a|r|g|e|;+0#0000000&| @24|m+0#00e0e07&|k|s|a|e|l|e|c|t|r|o|n|c|h|a|r|g|e| +0#0000000&@8
@57|2|0|5|4|,|3| @7|9|7|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|m+0#00e0e07&|k|s|a| |e|l|e|c|t|r|o|n| |c|h|a|r|g|e|;+0#0000000&| @24|m+0#00e0e07&|k|s|a|e|l|e|c|t|r|o|n|c|h|a|r|g|e| +0#0000000&@8
@2|m+0#00e0e07&|k|s|a| |g|a|u|s@1|;+0#0000000&| @34|m+0#00e0e07&|k|s|a|g|a|u|s@1| +0#0000000&@17
@2|m+0#00e0e07&|k|s|a| |s|t|i|l|b|;+0#0000000&| @34|m+0#00e0e07&|k|s|a|s|t|i|l|b| +0#0000000&@17
@2|m+0#00e0e07&|k|s|a| |l|u|m|e|n|;+0#0000000&| @34|m+0#00e0e07&|k|s|a|l|u|m|e|n| +0#0000000&@17
@2|m+0#00e0e07&|k|s|a| |l|u|x|;+0#0000000&| @36|m+0#00e0e07&|k|s|a|l|u|x| +0#0000000&@19
@2>m+0#00e0e07&|k|s|a| |p|h|o|t|;+0#0000000&| @35|m+0#00e0e07&|k|s|a|p|h|o|t| +0#0000000&@18
@2|m+0#00e0e07&|k|s|a| |f|o@1|t| |c|a|n|d|l|e|;+0#0000000&| @28|m+0#00e0e07&|k|s|a|f|o@1|t|c|a|n|d|l|e| +0#0000000&@12
@2|m+0#00e0e07&|k|s|a| |l|a|m|b|e|r|t|;+0#0000000&| @32|m+0#00e0e07&|k|s|a|l|a|m|b|e|r|t| +0#0000000&@15
@2|m+0#00e0e07&|k|s|a| |f|o@1|t| |l|a|m|b|e|r|t|;+0#0000000&| @27|m+0#00e0e07&|k|s|a|f|o@1|t|l|a|m|b|e|r|t| +0#0000000&@11
@2|m+0#00e0e07&|k|s|a| |c|u|r|i|e|;+0#0000000&| @34|m+0#00e0e07&|k|s|a|c|u|r|i|e| +0#0000000&@17
@2|m+0#00e0e07&|k|s|a| |r|o|e|n|t|g|e|n|;+0#0000000&| @31|m+0#00e0e07&|k|s|a|r|o|e|n|t|g|e|n| +0#0000000&@14
@2|m+0#00e0e07&|k|s|a| |r|a|d|;+0#0000000&| @36|m+0#00e0e07&|k|s|a|r|a|d| +0#0000000&@19
@2|m+0#00e0e07&|k|s|a| |s|o|l|a|r| |m|a|s@1|;+0#0000000&| @29|m+0#00e0e07&|k|s|a|s|o|l|a|r|m|a|s@1| +0#0000000&@13
@2|m+0#00e0e07&|k|s|a| |b|o|h|r| |r|a|d|i|u|s|;+0#0000000&| @28|m+0#00e0e07&|k|s|a|b|o|h|r@1|a|d|i|u|s| +0#0000000&@12
@2|m+0#00e0e07&|k|s|a| |v|a|c|u@1|m| |p|e|r|m|i|t@1|i|v|i|t|y|;+0#0000000&| @20|m+0#00e0e07&|k|s|a|v|a|c|u@1|m|p|e|r|m|i|t@1|i|v|i|t|y| +0#0000000&@4
@2|m+0#00e0e07&|k|s|a| |n|e|w|t|o|n|;+0#0000000&| @33|m+0#00e0e07&|k|s|a|n|e|w|t|o|n| +0#0000000&@16
@2|m+0#00e0e07&|k|s|a| |d|y|n|e|;+0#0000000&| @35|m+0#00e0e07&|k|s|a|d|y|n|e| +0#0000000&@18
@2|m+0#00e0e07&|k|s|a| |j|o|u|l|e|;+0#0000000&| @34|m+0#00e0e07&|k|s|a|j|o|u|l|e| +0#0000000&@17
@2|m+0#00e0e07&|k|s|a| |e|r|g|;+0#0000000&| @36|m+0#00e0e07&|k|s|a|e|r|g| +0#0000000&@19
@57|2|0|7|2|,|3| @7|9|8|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|m+0#00e0e07&|k|s|a| |e|r|g|;+0#0000000&| @36|m+0#00e0e07&|k|s|a|e|r|g| +0#0000000&@19
@2|n+0#00e0e07&|u|m| |f|i|n|e| |s|t|r|u|c|t|u|r|e|;+0#0000000&| @26|n+0#00e0e07&|u|m|f|i|n|e|s|t|r|u|c|t|u|r|e| +0#0000000&@10
@2|n+0#00e0e07&|u|m| |a|v|o|g|a|d|r|o|;+0#0000000&| @32|n+0#00e0e07&|u|m|a|v|o|g|a|d|r|o| +0#0000000&@15
@2|n+0#00e0e07&|u|m| |y|o|t@1|a|;+0#0000000&| @35|n+0#00e0e07&|u|m|y|o|t@1|a| +0#0000000&@18
@2|n+0#00e0e07&|u|m| |z|e|t@1|a|;+0#0000000&| @35|n+0#00e0e07&|u|m|z|e|t@1|a| +0#0000000&@18
@2>n+0#00e0e07&|u|m| |e|x|a|;+0#0000000&| @37|n+0#00e0e07&|u|m|e|x|a| +0#0000000&@20
@2|n+0#00e0e07&|u|m| |p|e|t|a|;+0#0000000&| @36|n+0#00e0e07&|u|m|p|e|t|a| +0#0000000&@19
@2|n+0#00e0e07&|u|m| |t|e|r|a|;+0#0000000&| @36|n+0#00e0e07&|u|m|t|e|r|a| +0#0000000&@19
@2|n+0#00e0e07&|u|m| |g|i|g|a|;+0#0000000&| @36|n+0#00e0e07&|u|m|g|i|g|a| +0#0000000&@19
@2|n+0#00e0e07&|u|m| |m|e|g|a|;+0#0000000&| @36|n+0#00e0e07&|u|m@1|e|g|a| +0#0000000&@19
@2|n+0#00e0e07&|u|m| |k|i|l|o|;+0#0000000&| @36|n+0#00e0e07&|u|m|k|i|l|o| +0#0000000&@19
@2|n+0#00e0e07&|u|m| |m|i|l@1|i|;+0#0000000&| @35|n+0#00e0e07&|u|m@1|i|l@1|i| +0#0000000&@18
@2|n+0#00e0e07&|u|m| |m|i|c|r|o|;+0#0000000&| @35|n+0#00e0e07&|u|m@1|i|c|r|o| +0#0000000&@18
@2|n+0#00e0e07&|u|m| |n|a|n|o|;+0#0000000&| @36|n+0#00e0e07&|u|m|n|a|n|o| +0#0000000&@19
@2|n+0#00e0e07&|u|m| |p|i|c|o|;+0#0000000&| @36|n+0#00e0e07&|u|m|p|i|c|o| +0#0000000&@19
@2|n+0#00e0e07&|u|m| |f|e|m|t|o|;+0#0000000&| @35|n+0#00e0e07&|u|m|f|e|m|t|o| +0#0000000&@18
@2|n+0#00e0e07&|u|m| |a|t@1|o|;+0#0000000&| @36|n+0#00e0e07&|u|m|a|t@1|o| +0#0000000&@19
@2|n+0#00e0e07&|u|m| |z|e|p|t|o|;+0#0000000&| @35|n+0#00e0e07&|u|m|z|e|p|t|o| +0#0000000&@18
@2|n+0#00e0e07&|u|m| |y|o|c|t|o|;+0#0000000&| @35|n+0#00e0e07&|u|m|y|o|c|t|o| +0#0000000&@18
@57|2|0|9|0|,|3| @7|9@1|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|n+0#00e0e07&|u|m| |y|o|c|t|o|;+0#0000000&| @35|n+0#00e0e07&|u|m|y|o|c|t|o| +0#0000000&@18
|#+0#0000e05&| |F@1|T|.| |#| +0#0000000&@66
@2|p+0#00e0e07&|r|i|m|e|f|a|c|t|o|r|s|;+0#0000000&| @32|p+0#00e0e07&|r|i|m|e|f|a|c|t|o|r|s| +0#0000000&@14
@2|f+0#00e0e07&@1|t| |c|o|m|p|l|e|x| |f|o|r|w|a|r|d|;+0#0000000&| @25|f+0#00e0e07&@1|t|c|o|m|p|l|e|x|f|o|r|w|a|r|d| +0#0000000&@9
@2|f+0#00e0e07&@1|t| |c|o|m|p|l|e|x| |b|a|c|k|w|a|r|d|;+0#0000000&| @24|f+0#00e0e07&@1|t|c|o|m|p|l|e|x|b|a|c|k|w|a|r|d| +0#0000000&@8
@2>f+0#00e0e07&@1|t| |c|o|m|p|l|e|x| |i|n|v|e|r|s|e|;+0#0000000&| @25|f+0#00e0e07&@1|t|c|o|m|p|l|e|x|i|n|v|e|r|s|e| +0#0000000&@9
@2|f+0#00e0e07&@1|t| |f|o|r|w|a|r|d|;+0#0000000&| @33|f+0#00e0e07&@1|t|f|o|r|w|a|r|d| +0#0000000&@16
@2|f+0#00e0e07&@1|t| |b|a|c|k|w|a|r|d|;+0#0000000&| @32|f+0#00e0e07&@1|t|b|a|c|k|w|a|r|d| +0#0000000&@15
@2|f+0#00e0e07&@1|t| |i|n|v|e|r|s|e|;+0#0000000&| @33|f+0#00e0e07&@1|t|i|n|v|e|r|s|e| +0#0000000&@16
|#+0#0000e05&| |L|a|p|l|a|c|e|.| |#| +0#0000000&@62
@2|l+0#00e0e07&|a|p|l|a|c|e|;+0#0000000&| @37|l+0#00e0e07&|a|p|l|a|c|e| +0#0000000&@19
@75
@75
|#+0#0000e05&| |v|i|m|:| |s|y|n|t|a|x|=|a|l|g|o|l|6|8| |t|s|=|4|8| +0#0000000&@47
|#+0#0000e05&| +0#0000000&@73
|~+0#4040ff13&| @73
|~| @73
|~| @73
|~| @73
| +0#0000000&@56|2|1|0|8|,|3| @7|B|o|t|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@38|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@19
@2|T+0#af5f00255&|I|M|E|S|A|B| +0#0000000&@38|T+0#af5f00255&|I|M|E|S|A|B| +0#0000000&@19
@2|O+0#af5f00255&|V|E|R|A|B| +0#0000000&@39|O+0#af5f00255&|V|E|R|A|B| +0#0000000&@20
@2|M+0#af5f00255&|O|D|A|B| +0#0000000&@40|M+0#af5f00255&|O|D|A|B| +0#0000000&@21
|#+0#0000e05&| |R|E|A|L| |o|p|s|.| |#| +0#0000000&@61
@2>++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|A+0#af5f00255&|B|S| +0#0000000&@42|A+0#af5f00255&|B|S| +0#0000000&@23
@2|S+0#af5f00255&|I|G|N| +0#0000000&@41|S+0#af5f00255&|I|G|N| +0#0000000&@22
@2|R+0#af5f00255&|O|U|N|D| +0#0000000&@40|R+0#af5f00255&|O|U|N|D| +0#0000000&@21
@2|E+0#af5f00255&|N|T|I|E|R| +0#0000000&@39|E+0#af5f00255&|N|T|I|E|R| +0#0000000&@20
@2|F+0#af5f00255&|L|O@1|R| +0#0000000&@40|F+0#af5f00255&|L|O@1|R| +0#0000000&@21
@2|C+0#af5f00255&|E|I|L| +0#0000000&@41|C+0#af5f00255&|E|I|L| +0#0000000&@22
@2|N+0#af5f00255&|I|N|T| +0#0000000&@41|N+0#af5f00255&|I|N|T| +0#0000000&@22
@2|T+0#af5f00255&|R|U|N|C| +0#0000000&@40|T+0#af5f00255&|R|U|N|C| +0#0000000&@21
@2|F+0#af5f00255&|R|A|C| +0#0000000&@41|F+0#af5f00255&|R|A|C| +0#0000000&@22
@2|F+0#af5f00255&|I|X| +0#0000000&@42|F+0#af5f00255&|I|X| +0#0000000&@23
@2|=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
@57|2|1|7|,|3| @8|1|0|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
@2|~+0#af5f00255&|=| +0#0000000&@43|~+0#af5f00255&|=| +0#0000000&@24
@2|^+0#af5f00255&|=| +0#0000000&@43|^+0#af5f00255&|=| +0#0000000&@24
@2|<+0#af5f00255&| +0#0000000&@44|<+0#af5f00255&| +0#0000000&@25
@2|<+0#af5f00255&|=| +0#0000000&@43|<+0#af5f00255&|=| +0#0000000&@24
@2>>+0#af5f00255&| +0#0000000&@44|>+0#af5f00255&| +0#0000000&@25
@2|>+0#af5f00255&|=| +0#0000000&@43|>+0#af5f00255&|=| +0#0000000&@24
@2|E+0#af5f00255&|Q| +0#0000000&@43|E+0#af5f00255&|Q| +0#0000000&@24
@2|N+0#af5f00255&|E| +0#0000000&@43|N+0#af5f00255&|E| +0#0000000&@24
@2|L+0#af5f00255&|T| +0#0000000&@43|L+0#af5f00255&|T| +0#0000000&@24
@2|L+0#af5f00255&|E| +0#0000000&@43|L+0#af5f00255&|E| +0#0000000&@24
@2|G+0#af5f00255&|T| +0#0000000&@43|G+0#af5f00255&|T| +0#0000000&@24
@2|G+0#af5f00255&|E| +0#0000000&@43|G+0#af5f00255&|E| +0#0000000&@24
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&| +0#0000000&@44|/+0#af5f00255&| +0#0000000&@25
@2|*+0#af5f00255&@1| +0#0000000&@43|*+0#af5f00255&@1| +0#0000000&@24
@2|U+0#af5f00255&|P| +0#0000000&@43|U+0#af5f00255&|P| +0#0000000&@24
@57|2|3|5|,|3| @8|1|0|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|U+0#af5f00255&|P| +0#0000000&@43|U+0#af5f00255&|P| +0#0000000&@24
@2|^+0#af5f00255&| +0#0000000&@44|^+0#af5f00255&| +0#0000000&@25
@2|*+0#af5f00255&@1| +0#0000000&@43|*+0#af5f00255&@1| +0#0000000&@24
@2|U+0#af5f00255&|P| +0#0000000&@43|U+0#af5f00255&|P| +0#0000000&@24
@2|^+0#af5f00255&| +0#0000000&@44|^+0#af5f00255&| +0#0000000&@25
@2>++0#af5f00255&|:|=| +0#0000000&@42|++0#af5f00255&|:|=| +0#0000000&@23
@2|-+0#af5f00255&|:|=| +0#0000000&@42|-+0#af5f00255&|:|=| +0#0000000&@23
@2|*+0#af5f00255&|:|=| +0#0000000&@42|*+0#af5f00255&|:|=| +0#0000000&@23
@2|/+0#af5f00255&|:|=| +0#0000000&@42|/+0#af5f00255&|:|=| +0#0000000&@23
@2|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@39|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@20
@2|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@38|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@19
@2|T+0#af5f00255&|I|M|E|S|A|B| +0#0000000&@38|T+0#af5f00255&|I|M|E|S|A|B| +0#0000000&@19
@2|D+0#af5f00255&|I|V|A|B| +0#0000000&@40|D+0#af5f00255&|I|V|A|B| +0#0000000&@21
|#+0#0000e05&| |P|r|o|c|e|d|u|r|e|s| |#| +0#0000000&@60
@2|a+0#00e0e07&|r|c| |c|o|s| |d|g|;+0#0000000&| @1|a+0#00e0e07&|c|o|s| |d|g|;+0#0000000&| @24|a+0#00e0e07&|r|c@1|o|s|d|g|;+0#0000000&| @1|a+0#00e0e07&|c|o|s|d|g| +0#0000000&@9
@2|a+0#00e0e07&|r|c| |c|o|s|h|;+0#0000000&| @1|a+0#00e0e07&|c|o|s|h|;+0#0000000&| @28|a+0#00e0e07&|r|c@1|o|s|h|;+0#0000000&| @1|a+0#00e0e07&|c|o|s|h| +0#0000000&@11
@2|a+0#00e0e07&|r|c| |c|o|t|;+0#0000000&| @1|a+0#00e0e07&|c|o|t|;+0#0000000&| @30|a+0#00e0e07&|r|c@1|o|t|;+0#0000000&| @1|a+0#00e0e07&|c|o|t| +0#0000000&@13
@2|a+0#00e0e07&|r|c| |c|o|t| |d|g|;+0#0000000&| @1|a+0#00e0e07&|c|o|t| |d|g|;+0#0000000&| @24|a+0#00e0e07&|r|c@1|o|t|d|g|;+0#0000000&| @1|a+0#00e0e07&|c|o|t|d|g| +0#0000000&@9
@2|a+0#00e0e07&|r|c| |c|s|c|;+0#0000000&| @1|a+0#00e0e07&|c|s|c|;+0#0000000&| @30|a+0#00e0e07&|r|c@1|s|c|;+0#0000000&| @1|a+0#00e0e07&|c|s|c| +0#0000000&@13
@57|2|5|3|,|3| @8|1@1|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|a+0#00e0e07&|r|c| |c|s|c|;+0#0000000&| @1|a+0#00e0e07&|c|s|c|;+0#0000000&| @30|a+0#00e0e07&|r|c@1|s|c|;+0#0000000&| @1|a+0#00e0e07&|c|s|c| +0#0000000&@13
@2|a+0#00e0e07&|r|c| |c|s|c| |d|g|;+0#0000000&| @1|a+0#00e0e07&|c|s|c| |d|g|;+0#0000000&| @24|a+0#00e0e07&|r|c@1|s|c|d|g|;+0#0000000&| @1|a+0#00e0e07&|c|s|c|d|g| +0#0000000&@9
@2|a+0#00e0e07&|r|c| |s|e|c|;+0#0000000&| @1|a+0#00e0e07&|s|e|c|;+0#0000000&| @30|a+0#00e0e07&|r|c|s|e|c|;+0#0000000&| @1|a+0#00e0e07&|s|e|c| +0#0000000&@13
@2|a+0#00e0e07&|r|c| |s|e|c| |d|g|;+0#0000000&| @1|a+0#00e0e07&|s|e|c| |d|g|;+0#0000000&| @24|a+0#00e0e07&|r|c|s|e|c|d|g|;+0#0000000&| @1|a+0#00e0e07&|s|e|c|d|g| +0#0000000&@9
@2|a+0#00e0e07&|r|c| |s|i|n| |d|g|;+0#0000000&| @1|a+0#00e0e07&|s|i|n| |d|g|;+0#0000000&| @24|a+0#00e0e07&|r|c|s|i|n|d|g|;+0#0000000&| @1|a+0#00e0e07&|s|i|n|d|g| +0#0000000&@9
@2>a+0#00e0e07&|r|c| |s|i|n|h|;+0#0000000&| @1|a+0#00e0e07&|s|i|n|h|;+0#0000000&| @28|a+0#00e0e07&|r|c|s|i|n|h|;+0#0000000&| @1|a+0#00e0e07&|s|i|n|h| +0#0000000&@11
@2|a+0#00e0e07&|r|c| |t|a|n| |d|g|;+0#0000000&| @1|a+0#00e0e07&|t|a|n| |d|g|;+0#0000000&| @24|a+0#00e0e07&|r|c|t|a|n|d|g|;+0#0000000&| @1|a+0#00e0e07&|t|a|n|d|g| +0#0000000&@9
@2|a+0#00e0e07&|r|c| |t|a|n|h|;+0#0000000&| @1|a+0#00e0e07&|t|a|n|h|;+0#0000000&| @28|a+0#00e0e07&|r|c|t|a|n|h|;+0#0000000&| @1|a+0#00e0e07&|t|a|n|h| +0#0000000&@11
@2|a+0#00e0e07&|r|c| |c|o|s|;+0#0000000&| @1|a+0#00e0e07&|c|o|s|;+0#0000000&| @30|a+0#00e0e07&|r|c@1|o|s|;+0#0000000&| @1|a+0#00e0e07&|c|o|s| +0#0000000&@13
@2|a+0#00e0e07&|r|c| |s|i|n|;+0#0000000&| @1|a+0#00e0e07&|s|i|n|;+0#0000000&| @30|a+0#00e0e07&|r|c|s|i|n|;+0#0000000&| @1|a+0#00e0e07&|s|i|n| +0#0000000&@13
@2|a+0#00e0e07&|r|c| |t|a|n|;+0#0000000&| @1|a+0#00e0e07&|t|a|n|;+0#0000000&| @30|a+0#00e0e07&|r|c|t|a|n|;+0#0000000&| @1|a+0#00e0e07&|t|a|n| +0#0000000&@13
@2|c+0#00e0e07&|a|s|;+0#0000000&| @41|c+0#00e0e07&|a|s| +0#0000000&@23
@2|c+0#00e0e07&|b|r|t|;+0#0000000&| @40|c+0#00e0e07&|b|r|t| +0#0000000&@22
@2|c+0#00e0e07&|o|s| |d|g|;+0#0000000&| @38|c+0#00e0e07&|o|s|d|g| +0#0000000&@21
@2|c+0#00e0e07&|o|s|h|;+0#0000000&| @40|c+0#00e0e07&|o|s|h| +0#0000000&@22
@2|c+0#00e0e07&|o|s| |p|i|;+0#0000000&| @38|c+0#00e0e07&|o|s|p|i| +0#0000000&@21
@2|c+0#00e0e07&|o|t| |d|g|;+0#0000000&| @38|c+0#00e0e07&|o|t|d|g| +0#0000000&@21
@2|c+0#00e0e07&|o|t|;+0#0000000&| @41|c+0#00e0e07&|o|t| +0#0000000&@23
@2|c+0#00e0e07&|o|t| |p|i|;+0#0000000&| @38|c+0#00e0e07&|o|t|p|i| +0#0000000&@21
@57|2|7|1|,|3| @8|1|2|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|c+0#00e0e07&|o|t| |p|i|;+0#0000000&| @38|c+0#00e0e07&|o|t|p|i| +0#0000000&@21
@2|c+0#00e0e07&|s|c| |d|g|;+0#0000000&| @38|c+0#00e0e07&|s|c|d|g| +0#0000000&@21
@2|c+0#00e0e07&|s|c|;+0#0000000&| @41|c+0#00e0e07&|s|c| +0#0000000&@23
@2|c+0#00e0e07&|u|r|t|;+0#0000000&| @40|c+0#00e0e07&|u|r|t| +0#0000000&@22
@2|e+0#00e0e07&|r|f|c|;+0#0000000&| @40|e+0#00e0e07&|r|f|c| +0#0000000&@22
@2>e+0#00e0e07&|r|f|;+0#0000000&| @41|e+0#00e0e07&|r|f| +0#0000000&@23
@2|g+0#00e0e07&|a|m@1|a|;+0#0000000&| @39|g+0#00e0e07&|a|m@1|a| +0#0000000&@21
@2|i+0#00e0e07&|n|v| |e|r|f|c|;+0#0000000&| @36|i+0#00e0e07&|n|v|e|r|f|c| +0#0000000&@19
@2|i+0#00e0e07&|n|v| |e|r|f|;+0#0000000&| @37|i+0#00e0e07&|n|v|e|r|f| +0#0000000&@20
@2|i+0#00e0e07&|n|v|e|r|s|e| |e|r|f|c|;+0#0000000&| @32|i+0#00e0e07&|n|v|e|r|s|e@1|r|f|c| +0#0000000&@15
@2|i+0#00e0e07&|n|v|e|r|s|e| |e|r|f|;+0#0000000&| @33|i+0#00e0e07&|n|v|e|r|s|e@1|r|f| +0#0000000&@16
@2|l+0#00e0e07&|n|1|p|;+0#0000000&| @40|l+0#00e0e07&|n|1|p| +0#0000000&@22
@2|l+0#00e0e07&|n| |g|a|m@1|a|;+0#0000000&| @36|l+0#00e0e07&|n|g|a|m@1|a| +0#0000000&@19
@2|s+0#00e0e07&|e|c| |d|g|;+0#0000000&| @38|s+0#00e0e07&|e|c|d|g| +0#0000000&@21
@2|s+0#00e0e07&|e|c|;+0#0000000&| @41|s+0#00e0e07&|e|c| +0#0000000&@23
@2|s+0#00e0e07&|i|n| |d|g|;+0#0000000&| @38|s+0#00e0e07&|i|n|d|g| +0#0000000&@21
@2|s+0#00e0e07&|i|n|h|;+0#0000000&| @40|s+0#00e0e07&|i|n|h| +0#0000000&@22
@2|s+0#00e0e07&|i|n| |p|i|;+0#0000000&| @38|s+0#00e0e07&|i|n|p|i| +0#0000000&@21
@2|t+0#00e0e07&|a|n| |d|g|;+0#0000000&| @38|t+0#00e0e07&|a|n|d|g| +0#0000000&@21
@57|2|8|9|,|3| @8|1|3|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|t+0#00e0e07&|a|n| |d|g|;+0#0000000&| @38|t+0#00e0e07&|a|n|d|g| +0#0000000&@21
@2|t+0#00e0e07&|a|n|h|;+0#0000000&| @40|t+0#00e0e07&|a|n|h| +0#0000000&@22
@2|t+0#00e0e07&|a|n| |p|i|;+0#0000000&| @38|t+0#00e0e07&|a|n|p|i| +0#0000000&@21
@2|c+0#00e0e07&|o|s|;+0#0000000&| @41|c+0#00e0e07&|o|s| +0#0000000&@23
@2|e+0#00e0e07&|x|p|;+0#0000000&| @41|e+0#00e0e07&|x|p| +0#0000000&@23
@2>l+0#00e0e07&|n|;+0#0000000&| @42|l+0#00e0e07&|n| +0#0000000&@24
@2|l+0#00e0e07&|o|g|;+0#0000000&| @41|l+0#00e0e07&|o|g| +0#0000000&@23
@2|s+0#00e0e07&|i|n|;+0#0000000&| @41|s+0#00e0e07&|i|n| +0#0000000&@23
@2|s+0#00e0e07&|q|r|t|;+0#0000000&| @40|s+0#00e0e07&|q|r|t| +0#0000000&@22
@2|t+0#00e0e07&|a|n|;+0#0000000&| @41|t+0#00e0e07&|a|n| +0#0000000&@23
|#+0#0000e05&| |M|i|s|c|e|l@1|a|n|e|o|u|s|.| |#| +0#0000000&@56
@2|a+0#00e0e07&|r|c| |t|a|n|2|;+0#0000000&| @1|a+0#00e0e07&|t|a|n|2|;+0#0000000&| @28|a+0#00e0e07&|r|c|t|a|n|2|;+0#0000000&| @1|a+0#00e0e07&|t|a|n|2| +0#0000000&@11
@2|a+0#00e0e07&|r|c| |t|a|n|2| |d|g|;+0#0000000&| @1|a+0#00e0e07&|t|a|n|2| |d|g|;+0#0000000&| @22|a+0#00e0e07&|r|c|t|a|n|2|d|g|;+0#0000000&| @1|a+0#00e0e07&|t|a|n|2|d|g| +0#0000000&@7
@2|b+0#00e0e07&|e|t|a|;+0#0000000&| @40|b+0#00e0e07&|e|t|a| +0#0000000&@22
@2|b+0#00e0e07&|e|t|a|i|n|c|;+0#0000000&| @37|b+0#00e0e07&|e|t|a|i|n|c| +0#0000000&@19
@2|c+0#00e0e07&|h|o@1|s|e|;+0#0000000&| @38|c+0#00e0e07&|h|o@1|s|e| +0#0000000&@20
@2|f+0#00e0e07&|a|c|t|;+0#0000000&| @40|f+0#00e0e07&|a|c|t| +0#0000000&@22
@2|g+0#00e0e07&|a|m@1|a| |i|n|c|;+0#0000000&| @35|g+0#00e0e07&|a|m@1|a|i|n|c| +0#0000000&@18
@2|g+0#00e0e07&|a|m@1|a| |i|n|c|f|;+0#0000000&| @34|g+0#00e0e07&|a|m@1|a|i|n|c|f| +0#0000000&@17
@57|3|0|7|,|3| @8|1|4|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|g+0#00e0e07&|a|m@1|a| |i|n|c|f|;+0#0000000&| @34|g+0#00e0e07&|a|m@1|a|i|n|c|f| +0#0000000&@17
@2|g+0#00e0e07&|a|m@1|a| |i|n|c|g|;+0#0000000&| @34|g+0#00e0e07&|a|m@1|a|i|n|c|g| +0#0000000&@17
@2|g+0#00e0e07&|a|m@1|a| |i|n|c|g|f|;+0#0000000&| @33|g+0#00e0e07&|a|m@1|a|i|n|c|g|f| +0#0000000&@16
@2|l+0#00e0e07&|j|e|1|2|6|;+0#0000000&| @38|l+0#00e0e07&|j|e|1|2|6| +0#0000000&@20
@2|l+0#00e0e07&|j|f|1|2|6|;+0#0000000&| @38|l+0#00e0e07&|j|f|1|2|6| +0#0000000&@20
@2>l+0#00e0e07&|n| |b|e|t|a|;+0#0000000&| @37|l+0#00e0e07&|n|b|e|t|a| +0#0000000&@20
@2|l+0#00e0e07&|n| |c|h|o@1|s|e|;+0#0000000&| @35|l+0#00e0e07&|n|c|h|o@1|s|e| +0#0000000&@18
@2|l+0#00e0e07&|n| |f|a|c|t|;+0#0000000&| @37|l+0#00e0e07&|n|f|a|c|t| +0#0000000&@20
|#+0#0000e05&| |C|O|M|P|L|E|X| |o|p|s|.| |#| +0#0000000&@58
@2|I+0#af5f00255&| +0#0000000&@44|I+0#af5f00255&| +0#0000000&@25
@2|++0#af5f00255&|*| +0#0000000&@43|++0#af5f00255&|*| +0#0000000&@24
@2|I+0#af5f00255&| +0#0000000&@44|I+0#af5f00255&| +0#0000000&@25
@2|++0#af5f00255&|*| +0#0000000&@43|++0#af5f00255&|*| +0#0000000&@24
@2|R+0#af5f00255&|E| +0#0000000&@43|R+0#af5f00255&|E| +0#0000000&@24
@2|I+0#af5f00255&|M| +0#0000000&@43|I+0#af5f00255&|M| +0#0000000&@24
@2|A+0#af5f00255&|B|S| +0#0000000&@42|A+0#af5f00255&|B|S| +0#0000000&@23
@2|A+0#af5f00255&|R|G| +0#0000000&@42|A+0#af5f00255&|R|G| +0#0000000&@23
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@57|3|2|5|,|3| @8|1|5|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|C+0#af5f00255&|O|N|J| +0#0000000&@41|C+0#af5f00255&|O|N|J| +0#0000000&@22
@2|=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
@2|~+0#af5f00255&|=| +0#0000000&@43|~+0#af5f00255&|=| +0#0000000&@24
@2>^+0#af5f00255&|=| +0#0000000&@43|^+0#af5f00255&|=| +0#0000000&@24
@2|E+0#af5f00255&|Q| +0#0000000&@43|E+0#af5f00255&|Q| +0#0000000&@24
@2|N+0#af5f00255&|E| +0#0000000&@43|N+0#af5f00255&|E| +0#0000000&@24
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&| +0#0000000&@44|/+0#af5f00255&| +0#0000000&@25
@2|*+0#af5f00255&@1| +0#0000000&@43|*+0#af5f00255&@1| +0#0000000&@24
@2|U+0#af5f00255&|P| +0#0000000&@43|U+0#af5f00255&|P| +0#0000000&@24
@2|^+0#af5f00255&| +0#0000000&@44|^+0#af5f00255&| +0#0000000&@25
@2|++0#af5f00255&|:|=| +0#0000000&@42|++0#af5f00255&|:|=| +0#0000000&@23
@2|-+0#af5f00255&|:|=| +0#0000000&@42|-+0#af5f00255&|:|=| +0#0000000&@23
@2|*+0#af5f00255&|:|=| +0#0000000&@42|*+0#af5f00255&|:|=| +0#0000000&@23
@2|/+0#af5f00255&|:|=| +0#0000000&@42|/+0#af5f00255&|:|=| +0#0000000&@23
@57|3|4|3|,|3| @8|1|6|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|/+0#af5f00255&|:|=| +0#0000000&@42|/+0#af5f00255&|:|=| +0#0000000&@23
@2|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@39|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@20
@2|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@38|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@19
@2|T+0#af5f00255&|I|M|E|S|A|B| +0#0000000&@38|T+0#af5f00255&|I|M|E|S|A|B| +0#0000000&@19
@2|D+0#af5f00255&|I|V|A|B| +0#0000000&@40|D+0#af5f00255&|I|V|A|B| +0#0000000&@21
@2>c+0#00e0e07&|o|m|p|l|e|x| |a|r|c@1|o|s|h|;+0#0000000&| @1|c+0#00e0e07&|a|c|o|s|h|;+0#0000000&| @20|c+0#00e0e07&|o|m|p|l|e|x|a|r|c@1|o|s|h|;+0#0000000&| @1|c+0#00e0e07&|a|c|o|s|h| +0#0000000&@3
@2|c+0#00e0e07&|o|m|p|l|e|x| |a|r|c@1|o|s|;+0#0000000&| @1|c+0#00e0e07&|a|c|o|s|;+0#0000000&| @22|c+0#00e0e07&|o|m|p|l|e|x|a|r|c@1|o|s|;+0#0000000&| @1|c+0#00e0e07&|a|c|o|s| +0#0000000&@5
@2|c+0#00e0e07&|o|m|p|l|e|x| |a|r|c|s|i|n|h|;+0#0000000&| @1|c+0#00e0e07&|a|s|i|n|h|;+0#0000000&| @20|c+0#00e0e07&|o|m|p|l|e|x|a|r|c|s|i|n|h|;+0#0000000&| @1|c+0#00e0e07&|a|s|i|n|h| +0#0000000&@3
@2|c+0#00e0e07&|o|m|p|l|e|x| |a|r|c|s|i|n|;+0#0000000&| @1|c+0#00e0e07&|a|s|i|n|;+0#0000000&| @22|c+0#00e0e07&|o|m|p|l|e|x|a|r|c|s|i|n|;+0#0000000&| @1|c+0#00e0e07&|a|s|i|n| +0#0000000&@5
@2|c+0#00e0e07&|o|m|p|l|e|x| |a|r|c|t|a|n|h|;+0#0000000&| @1|c+0#00e0e07&|a|t|a|n|h|;+0#0000000&| @20|c+0#00e0e07&|o|m|p|l|e|x|a|r|c|t|a|n|h|;+0#0000000&| @1|c+0#00e0e07&|a|t|a|n|h| +0#0000000&@3
@2|c+0#00e0e07&|o|m|p|l|e|x| |a|r|c|t|a|n|;+0#0000000&| @1|c+0#00e0e07&|a|t|a|n|;+0#0000000&| @22|c+0#00e0e07&|o|m|p|l|e|x|a|r|c|t|a|n|;+0#0000000&| @1|c+0#00e0e07&|a|t|a|n| +0#0000000&@5
@2|c+0#00e0e07&|o|m|p|l|e|x| |c|o|s|h|;+0#0000000&| @1|c+0#00e0e07&@1|o|s|h|;+0#0000000&| @24|c+0#00e0e07&|o|m|p|l|e|x|c|o|s|h|;+0#0000000&| @1|c+0#00e0e07&@1|o|s|h| +0#0000000&@7
@2|c+0#00e0e07&|o|m|p|l|e|x| |c|o|s|;+0#0000000&| @1|c+0#00e0e07&@1|o|s|;+0#0000000&| @26|c+0#00e0e07&|o|m|p|l|e|x|c|o|s|;+0#0000000&| @1|c+0#00e0e07&@1|o|s| +0#0000000&@9
@2|c+0#00e0e07&|o|m|p|l|e|x| |e|x|p|;+0#0000000&| @1|c+0#00e0e07&|e|x|p|;+0#0000000&| @26|c+0#00e0e07&|o|m|p|l|e|x|e|x|p|;+0#0000000&| @1|c+0#00e0e07&|e|x|p| +0#0000000&@9
@2|c+0#00e0e07&|o|m|p|l|e|x| |l|n|;+0#0000000&| @1|c+0#00e0e07&|l|n|;+0#0000000&| @28|c+0#00e0e07&|o|m|p|l|e|x|l|n|;+0#0000000&| @1|c+0#00e0e07&|l|n| +0#0000000&@11
@2|c+0#00e0e07&|o|m|p|l|e|x| |s|i|n|h|;+0#0000000&| @1|c+0#00e0e07&|s|i|n|h|;+0#0000000&| @24|c+0#00e0e07&|o|m|p|l|e|x|s|i|n|h|;+0#0000000&| @1|c+0#00e0e07&|s|i|n|h| +0#0000000&@7
@2|c+0#00e0e07&|o|m|p|l|e|x| |s|i|n|;+0#0000000&| @1|c+0#00e0e07&|s|i|n|;+0#0000000&| @26|c+0#00e0e07&|o|m|p|l|e|x|s|i|n|;+0#0000000&| @1|c+0#00e0e07&|s|i|n| +0#0000000&@9
@2|c+0#00e0e07&|o|m|p|l|e|x| |s|q|r|t|;+0#0000000&| @1|c+0#00e0e07&|s|q|r|t|;+0#0000000&| @24|c+0#00e0e07&|o|m|p|l|e|x|s|q|r|t|;+0#0000000&| @1|c+0#00e0e07&|s|q|r|t| +0#0000000&@7
@2|c+0#00e0e07&|o|m|p|l|e|x| |t|a|n|h|;+0#0000000&| @1|c+0#00e0e07&|t|a|n|h|;+0#0000000&| @24|c+0#00e0e07&|o|m|p|l|e|x|t|a|n|h|;+0#0000000&| @1|c+0#00e0e07&|t|a|n|h| +0#0000000&@7
@57|3|6|1|,|3| @8|1|6|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|c+0#00e0e07&|o|m|p|l|e|x| |t|a|n|h|;+0#0000000&| @1|c+0#00e0e07&|t|a|n|h|;+0#0000000&| @24|c+0#00e0e07&|o|m|p|l|e|x|t|a|n|h|;+0#0000000&| @1|c+0#00e0e07&|t|a|n|h| +0#0000000&@7
@2|c+0#00e0e07&|o|m|p|l|e|x| |t|a|n|;+0#0000000&| @1|c+0#00e0e07&|t|a|n|;+0#0000000&| @26|c+0#00e0e07&|o|m|p|l|e|x|t|a|n|;+0#0000000&| @1|c+0#00e0e07&|t|a|n| +0#0000000&@9
|#+0#0000e05&| |B|O@1|L| |o|p|s|.| |#| +0#0000000&@61
@2|N+0#af5f00255&|O|T| +0#0000000&@42|N+0#af5f00255&|O|T| +0#0000000&@23
@2|~+0#af5f00255&| +0#0000000&@44|~+0#af5f00255&| +0#0000000&@25
@2>A+0#af5f00255&|B|S| +0#0000000&@42|A+0#af5f00255&|B|S| +0#0000000&@23
@2|O+0#af5f00255&|R| +0#0000000&@43|O+0#af5f00255&|R| +0#0000000&@24
@2|A+0#af5f00255&|N|D| +0#0000000&@42|A+0#af5f00255&|N|D| +0#0000000&@23
@2|&+0#af5f00255&| +0#0000000&@44|&+0#af5f00255&| +0#0000000&@25
@2|X+0#af5f00255&|O|R| +0#0000000&@42|X+0#af5f00255&|O|R| +0#0000000&@23
@2|=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
@2|~+0#af5f00255&|=| +0#0000000&@43|~+0#af5f00255&|=| +0#0000000&@24
@2|^+0#af5f00255&|=| +0#0000000&@43|^+0#af5f00255&|=| +0#0000000&@24
@2|E+0#af5f00255&|Q| +0#0000000&@43|E+0#af5f00255&|Q| +0#0000000&@24
@2|N+0#af5f00255&|E| +0#0000000&@43|N+0#af5f00255&|E| +0#0000000&@24
|#+0#0000e05&| |C|H|A|R| |o|p|s|.| |#| +0#0000000&@61
@2|=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
@57|3|7|9|,|3| @8|1|7|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
@2|~+0#af5f00255&|=| +0#0000000&@43|~+0#af5f00255&|=| +0#0000000&@24
@2|^+0#af5f00255&|=| +0#0000000&@43|^+0#af5f00255&|=| +0#0000000&@24
@2|<+0#af5f00255&| +0#0000000&@44|<+0#af5f00255&| +0#0000000&@25
@2|<+0#af5f00255&|=| +0#0000000&@43|<+0#af5f00255&|=| +0#0000000&@24
@2>>+0#af5f00255&| +0#0000000&@44|>+0#af5f00255&| +0#0000000&@25
@2|>+0#af5f00255&|=| +0#0000000&@43|>+0#af5f00255&|=| +0#0000000&@24
@2|E+0#af5f00255&|Q| +0#0000000&@43|E+0#af5f00255&|Q| +0#0000000&@24
@2|N+0#af5f00255&|E| +0#0000000&@43|N+0#af5f00255&|E| +0#0000000&@24
@2|L+0#af5f00255&|T| +0#0000000&@43|L+0#af5f00255&|T| +0#0000000&@24
@2|L+0#af5f00255&|E| +0#0000000&@43|L+0#af5f00255&|E| +0#0000000&@24
@2|G+0#af5f00255&|T| +0#0000000&@43|G+0#af5f00255&|T| +0#0000000&@24
@2|G+0#af5f00255&|E| +0#0000000&@43|G+0#af5f00255&|E| +0#0000000&@24
@2|A+0#af5f00255&|B|S| +0#0000000&@42|A+0#af5f00255&|B|S| +0#0000000&@23
@2|R+0#af5f00255&|E|P|R| +0#0000000&@41|R+0#af5f00255&|E|P|R| +0#0000000&@22
@2|i+0#00e0e07&|s| |a|l|n|u|m|;+0#0000000&| @36|i+0#00e0e07&|s|a|l|n|u|m| +0#0000000&@19
@2|i+0#00e0e07&|s| |a|l|p|h|a|;+0#0000000&| @36|i+0#00e0e07&|s|a|l|p|h|a| +0#0000000&@19
@2|i+0#00e0e07&|s| |c|n|t|r|l|;+0#0000000&| @36|i+0#00e0e07&|s|c|n|t|r|l| +0#0000000&@19
@2|i+0#00e0e07&|s| |d|i|g|i|t|;+0#0000000&| @36|i+0#00e0e07&|s|d|i|g|i|t| +0#0000000&@19
@57|3|9|7|,|3| @8|1|8|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|i+0#00e0e07&|s| |d|i|g|i|t|;+0#0000000&| @36|i+0#00e0e07&|s|d|i|g|i|t| +0#0000000&@19
@2|i+0#00e0e07&|s| |g|r|a|p|h|;+0#0000000&| @36|i+0#00e0e07&|s|g|r|a|p|h| +0#0000000&@19
@2|i+0#00e0e07&|s| |l|o|w|e|r|;+0#0000000&| @36|i+0#00e0e07&|s|l|o|w|e|r| +0#0000000&@19
@2|i+0#00e0e07&|s| |p|r|i|n|t|;+0#0000000&| @36|i+0#00e0e07&|s|p|r|i|n|t| +0#0000000&@19
@2|i+0#00e0e07&|s| |p|u|n|c|t|;+0#0000000&| @36|i+0#00e0e07&|s|p|u|n|c|t| +0#0000000&@19
@2>i+0#00e0e07&|s| |s|p|a|c|e|;+0#0000000&| @36|i+0#00e0e07&|s@1|p|a|c|e| +0#0000000&@19
@2|i+0#00e0e07&|s| |u|p@1|e|r|;+0#0000000&| @36|i+0#00e0e07&|s|u|p@1|e|r| +0#0000000&@19
@2|i+0#00e0e07&|s| |x|d|i|g|i|t|;+0#0000000&| @35|i+0#00e0e07&|s|x|d|i|g|i|t| +0#0000000&@18
@2|t+0#00e0e07&|o| |l|o|w|e|r|;+0#0000000&| @36|t+0#00e0e07&|o|l|o|w|e|r| +0#0000000&@19
@2|t+0#00e0e07&|o| |u|p@1|e|r|;+0#0000000&| @36|t+0#00e0e07&|o|u|p@1|e|r| +0#0000000&@19
|#+0#0000e05&| |B|I|T|S| |o|p|s|.| |#| +0#0000000&@61
@2|A+0#af5f00255&|B|S| +0#0000000&@42|A+0#af5f00255&|B|S| +0#0000000&@23
@2|B+0#af5f00255&|I|N| +0#0000000&@42|B+0#af5f00255&|I|N| +0#0000000&@23
@2|N+0#af5f00255&|O|T| +0#0000000&@42|N+0#af5f00255&|O|T| +0#0000000&@23
@2|~+0#af5f00255&| +0#0000000&@44|~+0#af5f00255&| +0#0000000&@25
@2|=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
@2|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
@2|~+0#af5f00255&|=| +0#0000000&@43|~+0#af5f00255&|=| +0#0000000&@24
@2|^+0#af5f00255&|=| +0#0000000&@43|^+0#af5f00255&|=| +0#0000000&@24
@57|4|1|5|,|3| @8|1|9|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|^+0#af5f00255&|=| +0#0000000&@43|^+0#af5f00255&|=| +0#0000000&@24
@2|<+0#af5f00255&|=| +0#0000000&@43|<+0#af5f00255&|=| +0#0000000&@24
@2|>+0#af5f00255&|=| +0#0000000&@43|>+0#af5f00255&|=| +0#0000000&@24
@2|E+0#af5f00255&|Q| +0#0000000&@43|E+0#af5f00255&|Q| +0#0000000&@24
@2|N+0#af5f00255&|E| +0#0000000&@43|N+0#af5f00255&|E| +0#0000000&@24
@2>L+0#af5f00255&|E| +0#0000000&@43|L+0#af5f00255&|E| +0#0000000&@24
@2|G+0#af5f00255&|E| +0#0000000&@43|G+0#af5f00255&|E| +0#0000000&@24
@2|<+0#af5f00255&| +0#0000000&@44|<+0#af5f00255&| +0#0000000&@25
@2|>+0#af5f00255&| +0#0000000&@44|>+0#af5f00255&| +0#0000000&@25
@2|L+0#af5f00255&|T| +0#0000000&@43|L+0#af5f00255&|T| +0#0000000&@24
@2|G+0#af5f00255&|T| +0#0000000&@43|G+0#af5f00255&|T| +0#0000000&@24
@2|A+0#af5f00255&|N|D| +0#0000000&@42|A+0#af5f00255&|N|D| +0#0000000&@23
@2|&+0#af5f00255&| +0#0000000&@44|&+0#af5f00255&| +0#0000000&@25
@2|O+0#af5f00255&|R| +0#0000000&@43|O+0#af5f00255&|R| +0#0000000&@24
@2|X+0#af5f00255&|O|R| +0#0000000&@42|X+0#af5f00255&|O|R| +0#0000000&@23
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
@2|O+0#af5f00255&|V|E|R| +0#0000000&@41|O+0#af5f00255&|V|E|R| +0#0000000&@22
@57|4|3@1|,|3| @8|2|0|%|

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@1|O+0#af5f00255&|V|E|R| +0#0000000&@41|O+0#af5f00255&|V|E|R| +0#0000000&@22
@2|M+0#af5f00255&|O|D| +0#0000000&@42|M+0#af5f00255&|O|D| +0#0000000&@23
@2|S+0#af5f00255&|H|L| +0#0000000&@42|S+0#af5f00255&|H|L| +0#0000000&@23
@2|U+0#af5f00255&|P| +0#0000000&@43|U+0#af5f00255&|P| +0#0000000&@24
@2|S+0#af5f00255&|H|R| +0#0000000&@42|S+0#af5f00255&|H|R| +0#0000000&@23
@2>D+0#af5f00255&|O|W|N| +0#0000000&@41|D+0#af5f00255&|O|W|N| +0#0000000&@22
@2|R+0#af5f00255&|O|L| +0#0000000&@42|R+0#af5f00255&|O|L| +0#0000000&@23
@2|R+0#af5f00255&|O|R| +0#0000000&@42|R+0#af5f00255&|O|R| +0#0000000&@23
@2|E+0#af5f00255&|L|E|M| +0#0000000&@41|E+0#af5f00255&|L|E|M| +0#0000000&@22
@2|S+0#af5f00255&|E|T| +0#0000000&@42|S+0#af5f00255&|E|T| +0#0000000&@23
@2|C+0#af5f00255&|L|E|A|R| +0#0000000&@40|C+0#af5f00255&|L|E|A|R| +0#0000000&@21
|#+0#0000e05&| |L|O|N|G| |L|O|N|G| |I|N|T| |i|n| |s|o|f|t|w|a|r|e| |#| +0#0000000&@45
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
@2|A+0#af5f00255&|B|S| +0#0000000&@42|A+0#af5f00255&|B|S| +0#0000000&@23
@2|S+0#af5f00255&|I|G|N| +0#0000000&@41|S+0#af5f00255&|I|G|N| +0#0000000&@22
@2|O+0#af5f00255&|D@1| +0#0000000&@42|O+0#af5f00255&|D@1| +0#0000000&@23
@2|E+0#af5f00255&|N|T|I|E|R| +0#0000000&@39|E+0#af5f00255&|N|T|I|E|R| +0#0000000&@20
@2|R+0#af5f00255&|O|U|N|D| +0#0000000&@40|R+0#af5f00255&|O|U|N|D| +0#0000000&@21
@57|4|5|1|,|3| @8|2|1|%|

Some files were not shown because too many files have changed in this diff Show More