70 Commits

Author SHA1 Message Date
Brennen Bearnes cf05d533a4 WIP: update tested versions of vim
Adjusting the list per discussion here:

https://github.com/vimwiki/vimwiki/issues/1445

    nvim 0.10.2
    vim 7.4.2367
    vim 8.2.5172
    vim 9.0.2190
    vim 9.1.0786

Currently nvim 0.10.2 fails to build, so not testing that.  Seems like
vim-testbed is fairly out-of-date.  I filed this re: project status:

https://github.com/Vimjas/vim-testbed/issues/91

I'm not entirely sure what's up with the commented-out partial (?) sets of
tests for a-k*, l*, m* for different versions. Just conserving resources
by partially testing older versions?
2024-11-30 22:19:49 -07:00
Matthieu Talbot 72792615e7 Update vimwiki.txt
Fix parameter that was renamed in some example.
2024-10-13 22:07:48 -06:00
Brennen Bearnes 5cca07970c test/tag.vader: update hardcoded version to 2024.01.24
This should fix part of #1445.
2024-10-13 21:46:44 -06:00
Tinmarino 705ad1e0dd Fix #1412: Markdown Link creation when cursor is on word 2024.01.24 (or 2024-06-15) 2024-06-23 12:11:20 -04:00
Tinmarino 7ad424ea42 Conf: Add syntax variable open_link_add_ext to be able to open link with another extension (#1271)
Configure the feature adding extension .md to files at link opening.
The new feature (2023) was implemented by Brennen and fixing many other tickets but also openend #1271. So let's just add a configuration variable!
https://github.com/vimwiki/vimwiki/commit/d7ec12645a0460a7d200279c52915e6e080e9869
2024-06-19 13:07:55 -04:00
SukkaW 69318e74c8 docs: no longer recommends polyfill.io 2024-03-16 14:23:28 -03:00
Brennen Bearnes fde35bb87e v2024.01.24: Tweak README.md, update version number and changelog. 2024-01-24 20:14:13 -07:00
qadzek 2d17e6147b docs: describe undocumented key mappings 2024-01-24 19:31:47 -07:00
Brennen Bearnes d0e6d5e517 v2024.01.22: update version number and changelog
Includes some recent authors on the contributor list, and an attempt at
getting the changelog up to date.
2024-01-22 21:04:26 -07:00
Charles Schimmelpfennig 0bb1b4945b Support angle bracket escaped markdown urls (#1211)
* add angle brackets to regex definition

* revert unecessary change to markdown link suffix

* Update vimwiki.txt

---------

Co-authored-by: Charles Schimmelpfennig <charles.schimmelpfennig@corteva.com>
Co-authored-by: NobleRat <tinmarino@gmail.com>
2023-10-31 13:45:18 -03:00
Tinmarino a479154770 Fix previous commit tests 2023-10-31 13:01:15 -03:00
Tinmarino 90b23b466f Fix: Folding code blocks using markdown syntax folds the entire rest of the file (#1323) 2023-10-31 12:40:39 -03:00
Tinmarino 68664e5d72 prettify small 2023-10-31 12:11:31 -03:00
Bence Ferdinandy 5d86b625f5 Fix: count ignored when looking up diary frequency
When calling VimwikiMakeYesterdayDiary (or Tomorrow) the wiki_nr is
looked up by vimwiki#diary#diary_date_link without access to the passed
count, which would result in the creation of the file in the correct
place, but with the diary_frequency of another wiki. Modify
vimwiki#diary#diary_date_link to take a possible third argument as the
wiki_nr+1 and modify the commands to pass <count> as the third argument.

Fixes: #1365
2023-10-16 10:12:32 -03:00
Justin McIntyre 65575fb103 Update README.md
Fixed documentation error
2023-10-16 10:08:24 -03:00
Aarón Fas f0fe154ede Fix wrong example snippet for listsysms option. 2023-07-31 08:27:35 -04:00
Tinmarino 09804c2a5f Fix: Jump to nested anchor bugged with markdown (issue #1356) 2023-07-10 12:47:03 -04:00
Jiaming Chen acc92fb648 Make auto_tags preserve existing tag section structure 2023-07-10 11:26:40 -04:00
Tinmarino 65b9f0e68b CI: add test for tag in codeblock should not be parsed (issue #1034) 2023-06-26 19:30:39 -04:00
Tinmarino c79f15a90b CI: Fix previous test for (issue #1279) 2023-06-23 12:28:52 -04:00
Tinmarino 26adc84dc3 Configure default syntax bloquote marker to include :: (issue #1279) 2023-06-23 12:11:40 -04:00
Tinmarino 942da42b96 CI: add test for unicode rxTableSep (issue #1297) 2023-06-22 19:33:54 -04:00
Julian Prein c5b7f7e76f Fix: Handle multibyte chars properly in get_cells (#1298) (fixes #1297)
Previously vimwiki#tbl#get_cells() would act on `line` as a normal
string (i.e. using `[idx]` and strpart()). This breaks when the column
separator (s:s_rep() or rxTableSep) is a multibyte character like the
vertical box drawing character │. In that case the separator is never
found and only one empty cell is returned. This also affects
vimwiki#tbl#format() which in turn clears the whole table each time the
insert mode is left.

Fix this issue by initially splitting the line into a list of the
characters. Getting the elements with `[idx]` now returns each character
instead of a byte. In addition len() is used in place of strlen() as
well as slicing together with join() instead of strpart().

Fixes: #1297 ("Table formatting breaks on multibyte separator")
2023-06-22 19:10:54 -04:00
Tinmarino bc3bc208d7 CI: Add test for colored convertion wiki syntax (issue #1311) 2023-06-22 18:57:16 -04:00
Tinmarino 40c2bbdcf3 Fix: HTML convertion for code is stripping newlines (issue #1311)
Initially titled: Can't enable syntax highlighting for codes in HTML files when converting wiki to HTML
2023-06-22 18:36:18 -04:00
Tinmarino e0a04e11b8 CI: Add test for highlight dates (issue #309, pr #1315) 2023-06-22 12:45:03 -04:00
Alex Claman 322d22bef8 Add basic GTD-style token highlighting (#1315)
* Add basic GTD-style token highlighting

* Update vimwiki.txt

* Revert "Update vimwiki.txt" This reverts commit bd7c9cfe68.
2023-06-22 12:43:03 -04:00
nolleh7707 5d0c9d3173 docs: add description for disable extension support, to avoid accidently working as wiki for normal docs 2023-06-22 11:35:04 -04:00
Joe Planisky f3b50e5f17 add jplanisky to contributors 2023-06-22 11:17:58 -04:00
Joe Planisky 85c47d1f97 add mixed (concatenated & discrete) tags to #1326 tests 2023-06-22 11:17:58 -04:00
Joe Planisky 89315912b1 fix duplicate tag issue #1326 2023-06-22 11:17:58 -04:00
Joe Planisky a1ca439719 fix cleanup in duplicate tags test 2023-06-22 11:17:58 -04:00
Joe Planisky 22fd036804 Add new Vader test for issue 1326 (duplicate tags) 2023-06-22 11:17:58 -04:00
Tinmarino 88620a2be0 Syntax: admit space trailing the yaml delimiters 2023-06-16 11:14:00 -04:00
Tinmarino 0069c5fb4e Improvement: gqq autowrap leading :: definition as &l:comments (#1279) 2023-06-14 14:04:08 -04:00
Tinmarino 738e24134e Fix previous commit refactoring with: get_globlinks_raw and complete_links_raw 2023-06-14 13:12:13 -04:00
Tinmarino 298a409b74 Fix: VimwikiGoto completion with file with space (#1229) 2023-06-14 13:04:26 -04:00
Tinmarino 69a5682d6f Merge pull request #1324 from rddunphy/dev
File name prompt fixes
2023-06-14 12:29:28 -04:00
Tinmarino 0700fa4068 Fix: Italics broken with 7a48268 commit (#1331) 2023-06-14 11:43:54 -04:00
Tinmarino 2cff9776e8 Feature: Recognize message:// URLs on Mac #1332 2023-06-14 11:34:57 -04:00
Tinmarino 65c3d48227 Comment: previous commit typo 2023-06-14 11:34:24 -04:00
Tinmarino cd2fa19f86 Doc: Explain how to clear typeface highlight (#1346) 2023-06-14 10:43:12 -04:00
Tinmarino d63948d873 Util: add vimwiki#vars#set_syntaxlocal function for consistency 2023-06-14 10:43:12 -04:00
Luke Atkinson cd9cfd299e Fix vimwiki#diary#calendar_sign when g:vimwiki_list is not set
If a user is happy with the default vimwiki location, they may not set
the g:vimwiki_list global variable. In this case, the
len(g:vimwiki_list) vimwiki#diary#calendar_sign function throws an
error every time it is called. This function is called for every day
displayed in the calendar which is very noisy. Checking if the variable
exists before doing the length check prevents the error and the rest of
the function works fine if the variable is not set.
2023-05-12 22:05:10 -04:00
Tinmarino 7a48268d24 Fix commit 72d0220, breaking syntax for bold due to bad punctuation preceded right flank (issue #1325) 2023-04-19 15:13:50 -04:00
Brennen Bearnes 71edcf6802 update g:vimwiki_version for latest release
I missed this before tagging; this will be v2023.04.04_1.
2023-04-04 20:28:34 -06:00
Brennen Bearnes be45bd65f5 Doc: Note changes for 2023.04.04 2023-04-04 20:13:34 -06:00
R. David Dunphy ba02c38346 Use fnameescape() instead of escape() in edit_file() 2023-04-02 01:32:03 +01:00
R. David Dunphy 864f066405 Don't escape filenames for goto() 2023-04-02 01:08:36 +01:00
R. David Dunphy 8f651834fd Cancel goto() if input was empty 2023-04-02 00:57:52 +01:00
Brennen Bearnes 11350f572b is_diary_file(): use filereadable() to check a single file
Intended to address #1267 - "get_diary_files() takes very long to
execute on Windows - this leads to very slow link-creation using the
Enter key".

In theory, this should be a performance improvement for link creation on
systems with very slow filesystem access (this came up under Windows, but
ought to be a general optimization).  It does nothing for generating the
entire list of diary files, which by nature has to get the whole list
anyway.

  - Uses a filereadable() call against a path instead of checking the
    results of get_diary_files() for most calls.

  - Introduces is_among_diary_files() for the case where you want to
    check against a get_diary_files() list.

  - is_diary_file() will pass through to is_among_diary_files() if it gets
    invoked with a second parameter, to retain backwards compatibility on
    the off chance anyone has scripted against this behavior.  I'm not sure
    this is necessary, but trying to be cautious with the implicit API
    here.

  - Includes a test/api_base_is_diary_file.vader

My original version of this change assumed that input would be in the
form of "2023-01-01", instead of a fully-qualifed filename.  As it is,
it expects a full path to the file, in keeping with the list returned by
vimwiki#diary#get_diary_files().

Bug: #1267
2023-03-30 17:08:58 -06:00
Tinmarino dec6a9ecab CI: Lint run_test: reorder function in top>down 2023-03-22 01:22:25 -03:00
Tinmarino 57107c7c56 CI: Lint run_test: all in function 2023-03-22 01:17:20 -03:00
Tinmarino 72d02207b0 Syntax: Fasten highlighting, from 200ms to 20ms for first screen update
Problem:

The loading of a .md file was slow due to multiple nested lookback.
It is advised in vim help to prefer \zs, see :h /\@<
Anyway, it is useless to nest them.

089.080  000.085  000.085: sourcing /home/mtourneb/.vim/after/syntax/vimwiki.vim
089.264  005.184: opening buffers
089.322  000.058: BufEnter autocommands
089.323  000.001: editing files in windows
089.414  000.091: VimEnter autocommands
089.415  000.001: before starting main loop
303.698  214.283: first screen update
303.700  000.002: --- VIM STARTED ---

Solution:

Remove the function s:expand_delimiter in vars.vim.
It was doing a duplicate job with vimwiki#u#hi_expand_regex
And ... well avoid lookback as much as possible

091.784  000.087  000.087: sourcing /home/mtourneb/.vim/after/syntax/vimwiki.vim
091.991  006.034: opening buffers
092.050  000.059: BufEnter autocommands
092.052  000.002: editing files in windows
092.172  000.120: VimEnter autocommands
092.173  000.001: before starting main loop
112.574  020.401: first screen update
112.578  000.004: --- VIM STARTED ---
2023-03-18 01:50:53 -03:00
Tinmarino f4bd841a4c Tags: improve VimwikiSearchTags which was not using user configuration (issue #1316) (v2) 2023-03-17 22:05:47 -03:00
Tinmarino 5eb5c9c71f Fix: ugly debug echom at start #1317 2023-03-17 19:17:41 -03:00
Tinmarino 8640988c5c Markdown typeface: match closer to GFM specification, also add tests 2023-03-17 16:08:27 -03:00
Tinmarino f5399ffdfa Improve typeface specification closer to GFM and test 2023-03-17 13:44:05 -03:00
Tinmarino a7aa5eb1ea Doc: replace http by https 2023-03-17 04:51:14 -03:00
Tinmarino 1d35ff035d Fix: Bug: VimwikiGoto without argument creates empty page (issue #1229) 2023-03-17 03:59:05 -03:00
Tinmarino c9af9c7807 Doc: add changelog for issue #1261 2023-03-17 03:49:56 -03:00
Tinmarino 8374bcfccf Feature: Support for <mark> in Markdown (issue #1261) 2023-03-17 03:46:56 -03:00
Tinmarino cde5dbc92a Feature: permit blockquote automatic continuation (issue #1274) (fixed) 2023-03-17 02:27:08 -03:00
Tinmarino 6993610585 Doc: add #1316 to changelog 2023-03-17 00:07:27 -03:00
Tinmarino 29ac6ee589 Doc: Rename most recent release? #1314 2023-03-17 00:06:42 -03:00
Tinmarino 035b2f15c7 Permit tags in heading #1316 2023-03-17 00:05:48 -03:00
Tinmarino eab70aedaa CI: Add basic syntax test 2023-03-17 00:05:48 -03:00
Tinmarino 91fe25ad5f Fix bad header highlighting with nvim (issue #1291) 2023-03-15 13:09:25 -03:00
Tinmarino 5db16850da Fix VimwikiAddHeaderLevel map (like 3=), borken by previous 5e564bb10d, (Issue #1270) 2023-03-15 02:06:57 -03:00
Tinmarino 87c44caef9 Doc: Add some changelog, release v2022.03.15 2023-03-15 01:03:39 -03:00
39 changed files with 2677 additions and 463 deletions
+31 -11
View File
@@ -1,14 +1,16 @@
---
# Copied from previous .travis.yml by tinmarino the 2023-03-09 # Copied from previous .travis.yml by tinmarino the 2023-03-09
# Commented out to avoid verbosity on github commit status # Commented out to avoid verbosity on github commit status
name: CI name: CI
#description: Vimwiki CI test bank
# yamllint disable-line rule:truthy
on: [push, pull_request, workflow_dispatch] on: [push, pull_request, workflow_dispatch]
jobs: jobs:
Typos: Typos:
# Copyed from: https://github.com/junegunn/fzf/blob/master/.github/workflows/typos.yml # Copied from: https://github.com/junegunn/fzf/blob/master/
# -- .github/workflows/typos.yml
name: Typos name: Typos
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
@@ -20,9 +22,23 @@ jobs:
config: ./test/resources/typos_config.toml config: ./test/resources/typos_config.toml
Yamllint:
# Copied from: https://github.com/junegunn/fzf/blob/master/
# -- .github/workflows/typos.yml
name: Yamllint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: ibiqlik/action-yamllint@v3
with:
file_or_dir: .github/workflows/test-vader-action.yml
Vint: Vint:
# Copyed from: https://github.com/LudvigHz/vint-action # Copied from: https://github.com/LudvigHz/vint-action
# And local test/run_test.sh # And local ./test/run_test.sh
name: Vint name: Vint
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
@@ -46,22 +62,26 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
opt: [ opt: [
#"vint", # "vint",
"-n vim_7.4.2367",
"-n vim_8.2.5172",
"-n vim_9.0.2190",
"-n vim_9.1.0786",
"-n vim_7.3.429",
"-n vim_8.1.0519",
# TODO add me when test works on Vim, 9.0 # TODO add me when test works on Vim, 9.0
# -- Currently I experienced some surprised due to defaults # -- Currently I experienced some surprised due to defaults
# -- tinmarino 2023-03-10 # -- tinmarino 2023-03-10
# "-n v9.0.1396", # "-n v9.0.1396",
"-n nvim_0.3.8", # This build isn't currently working with vim-testbed:
# "-n nvim_0.10.2",
# Cannot quote as it is expanded from $OPT after quote removal # Cannot quote as it is expanded from $OPT after quote removal
# So I decided to escape the * # So I decided to escape the *
"-n vim_7.4.1099 -f '[a-k]*.vader'", # "-n vim_7.4.1099 -f '[a-k]*.vader'",
"-n vim_7.4.1546 -f 'l*.vader'", # "-n vim_7.4.1546 -f 'l*.vader'",
"-n vim_8.0.0027 -f '[m-z]*.vader'", # "-n vim_8.0.0027 -f '[m-z]*.vader'",
] ]
steps: steps:
# This action is required to fetch the code to test # This action is required to fetch the code to test
+8 -7
View File
@@ -17,10 +17,11 @@ RUN git checkout de8a976f1eae2c2b680604205c3e8b5c8882493c
# Build vim and neovim versions we want to test # Build vim and neovim versions we want to test
WORKDIR / WORKDIR /
RUN install_vim -tag v7.3.429 -name vim_7.3.429 -build RUN install_vim -tag v7.4.2367 -name vim_7.4.2367 -build
RUN install_vim -tag v7.4.1099 -name vim_7.4.1099 -build RUN install_vim -tag v8.2.5172 -name vim_8.2.5172 -build
RUN install_vim -tag v7.4.1546 -name vim_7.4.1546 -build RUN install_vim -tag v9.0.2190 -name v9.0.2190 -build
RUN install_vim -tag v8.0.0027 -name vim_8.0.0027 -build RUN install_vim -tag v9.1.0786 -name v9.1.0786 -build
RUN install_vim -tag v8.1.0519 -name vim_8.1.0519 -build
RUN install_vim -tag v9.0.1396 -name v9.0.1396 -build # TODO: This one doesn't build - vim-testbed seems way out of date:
RUN install_vim -tag neovim:v0.3.8 -name nvim_0.3.8 -build # TODO: tag neovim:v0.10.2, name nvim_0.10.2
# (Format as install_vim instances above.)
+45 -17
View File
@@ -28,7 +28,6 @@ VimWiki is a personal wiki for Vim -- a number of linked text files that have
their own syntax highlighting. See the [VimWiki Wiki](https://vimwiki.github.io/vimwikiwiki/) their own syntax highlighting. See the [VimWiki Wiki](https://vimwiki.github.io/vimwikiwiki/)
for an example website built with VimWiki! for an example website built with VimWiki!
For the latest features and fixes checkout the [dev branch](https://github.com/vimwiki/vimwiki/tree/dev).
If you are interested in contributing see [this section](#helping-vimwiki). If you are interested in contributing see [this section](#helping-vimwiki).
With VimWiki, you can: With VimWiki, you can:
@@ -40,8 +39,8 @@ With VimWiki, you can:
- Export everything to HTML - Export everything to HTML
To do a quick start, press `<Leader>ww` (default is `\ww`) to go to your index To do a quick start, press `<Leader>ww` (default is `\ww`) to go to your index
wiki file. By default, it is located in `~/vimwiki/index.wiki`. See `:h vimwiki_list` wiki file. By default, it is located in `~/vimwiki/index.wiki`. See
for registering a different path/wiki. `:h vimwiki_list` for registering a different path/wiki.
Feed it with the following example: Feed it with the following example:
@@ -77,8 +76,10 @@ The result should look something like:
## Installation ## Installation
VimWiki has been tested on **Vim >= 7.3**. It will likely work on older VimWiki has been tested on **Vim >= 7.3**. It may work on older versions but
versions but will not be officially supported. will not be officially supported. It is known to work on NeoVim, although
it is likely to have
[NeoVim-specific bugs](https://github.com/vimwiki/vimwiki/labels/neovim).
### Prerequisites ### Prerequisites
@@ -143,7 +144,7 @@ vim +PluginInstall +qall
#### Manual Install #### Manual Install
Download the [zip archive](https://github.com/vimwiki/vimwiki/archive/master.zip) Download the [zip archive](https://github.com/vimwiki/vimwiki/archive/dev.zip)
and extract it in `~/.vim/bundle/` and extract it in `~/.vim/bundle/`
Then launch Vim, run `:Helptags` and then `:help vimwiki` to verify it was Then launch Vim, run `:Helptags` and then `:help vimwiki` to verify it was
@@ -185,6 +186,16 @@ _italic_ -- italic text
For other syntax elements, see `:h vimwiki-syntax` For other syntax elements, see `:h vimwiki-syntax`
### Todo lists
```text
- [.] Partially completed item with sub-tasks
- [X] Completed sub-task
- [ ] Incomplete sub-task
- [ ] Other incomplete sub-task
- [ ] Incomplete item
```
## Key bindings ## Key bindings
### Normal mode ### Normal mode
@@ -222,11 +233,13 @@ more bindings.
## Changing Wiki Syntax ## Changing Wiki Syntax
VimWiki currently ships with 3 syntaxes: VimWiki (default), Markdown VimWiki currently ships with 3 syntaxes: VimWiki (default), Markdown
(markdown), and MediaWiki (media). (markdown), and MediaWiki (media). Of these, the native VimWiki syntax is
best supported, followed by Markdown. No promises are made for MediaWiki.
**NOTE:** Only the default syntax ships with a built-in HTML converter. For **NOTE:** Only the default syntax ships with a built-in HTML converter. For
Markdown or MediaWiki see `:h vimwiki-option-custom_wiki2html`. Some examples Markdown or MediaWiki see `:h vimwiki-option-custom_wiki2html`. Some examples
and 3rd party tools are available [here](https://vimwiki.github.io/vimwikiwiki/Related%20Tools.html#Related%20Tools-External%20Tools). and 3rd party tools are available
[here](https://vimwiki.github.io/vimwikiwiki/Related%20Tools.html#Related%20Tools-External%20Tools).
If you would prefer to use either Markdown or MediaWiki syntaxes, set the If you would prefer to use either Markdown or MediaWiki syntaxes, set the
following option in your `.vimrc`: following option in your `.vimrc`:
@@ -234,18 +247,31 @@ following option in your `.vimrc`:
```vim ```vim
let g:vimwiki_list = [{'path': '~/vimwiki/', let g:vimwiki_list = [{'path': '~/vimwiki/',
\ 'syntax': 'markdown', 'ext': '.md'}] \ 'syntax': 'markdown', 'ext': 'md'}]
``` ```
This option will treat all markdown files in your system as part of vimwiki (check `set filetype?`). Add This option will treat all markdown files in your system as part of vimwiki
(check `set filetype?`). Add
```vim ```vim
let g:vimwiki_global_ext = 0 let g:vimwiki_global_ext = 0
``` ```
to your `.vimrc` to restrict Vimwiki's operation to only those paths listed in `g:vimwiki_list`.
Other markdown files wouldn't be treated as wiki pages. to your `.vimrc` to restrict Vimwiki's operation to only those paths listed in
`g:vimwiki_list`. Other markdown files wouldn't be treated as wiki pages.
See [g:vimwiki_global_ext](https://github.com/vimwiki/vimwiki/blob/619f04f89861c58e5a6415a4f83847752928252d/doc/vimwiki.txt#L2631). See [g:vimwiki_global_ext](https://github.com/vimwiki/vimwiki/blob/619f04f89861c58e5a6415a4f83847752928252d/doc/vimwiki.txt#L2631).
if you want to turn off support for other extension(for example, disabling
accidently creating new wiki and link for normal markdown files), set the
following option in your `.vimrc` before packadd vimwiki:
```vim
let g:vimwiki_ext2syntax = {}
```
See [g:vimiki_ext2syntax](https://github.com/vimwiki/vimwiki/blob/619f04f89861c58e5a6415a4f83847752928252d/doc/vimwiki.txt#L2652)
## Getting help ## Getting help
[GitHub issues](https://github.com/vimwiki/vimwiki/issues) are the primary [GitHub issues](https://github.com/vimwiki/vimwiki/issues) are the primary
@@ -253,18 +279,20 @@ method for raising bug reports or feature requests.
Additional resources: Additional resources:
- The IRC channel [#vimwiki](ircs://irc.libera.chat:6697/vimwiki) on irc.libera.chat - The IRC channel [#vimwiki](ircs://irc.libera.chat:6697/vimwiki) on
irc.libera.chat is the "official" discussion and support channel
- [Connect via webchat](https://web.libera.chat/?channels=#vimwiki) - [Connect via webchat](https://web.libera.chat/?channels=#vimwiki)
- Connect via Matrix/Element: [#vimwiki:libera.chat](https://matrix.to/#/#vimwiki:libera.chat) - [@vimwiki@wikis.world](https://wikis.world/@vimwiki) on the Fediverse
- Post to the [mailing list](https://groups.google.com/forum/#!forum/vimwiki).
## Helping VimWiki ## Helping VimWiki
VimWiki has a lot of users but only very few recurring developers or people VimWiki has a lot of users but only very few recurring developers or people
helping the community. Your help is therefore appreciated. Everyone can help! helping the community. Your help is therefore appreciated. Everyone can help!
See [#625](https://github.com/vimwiki/vimwiki/issues/625) for information on how you can help. See [#625](https://github.com/vimwiki/vimwiki/issues/625) for information on how
you can help.
Also, take a look at [CONTRIBUTING.md](https://github.com/vimwiki/vimwiki/blob/master/CONTRIBUTING.md) and [design_notes.md](doc/design_notes.md) Also, take a look at [CONTRIBUTING.md](https://github.com/vimwiki/vimwiki/blob/master/CONTRIBUTING.md)
and [design_notes.md](doc/design_notes.md)
---- ----
+87 -21
View File
@@ -262,11 +262,20 @@ function! vimwiki#base#resolve_link(link_text, ...) abort
\ vimwiki#vars#get_wikilocal('ext', link_infos.index) \ vimwiki#vars#get_wikilocal('ext', link_infos.index)
endif endif
else else
" append extension iff one not already present or it's not the targeted " append extension if one not already present or it's not the targeted
" wiki extension - https://github.com/vimwiki/vimwiki/issues/950 " wiki extension - https://github.com/vimwiki/vimwiki/issues/950
let ext = fnamemodify(link_text, ':e') let ext = fnamemodify(link_text, ':e')
let ext_with_dot = '.' . ext let ext_with_dot = '.' . ext
if ext ==? '' || ext_with_dot !=? vimwiki#vars#get_wikilocal('ext', link_infos.index)
" Check if a .md must be added
" See #1271 to modify files with a "."
let do_add_ext = ext ==? ''
if vimwiki#vars#get_syntaxlocal('open_link_add_ext')
let do_add_ext = do_add_ext || ext_with_dot !=? vimwiki#vars#get_wikilocal('ext', link_infos.index)
endif
" Add the dot
if do_add_ext
let link_infos.filename .= vimwiki#vars#get_wikilocal('ext', link_infos.index) let link_infos.filename .= vimwiki#vars#get_wikilocal('ext', link_infos.index)
endif endif
endif endif
@@ -394,9 +403,33 @@ function! vimwiki#base#open_link(cmd, link, ...) abort
endfunction endfunction
function! vimwiki#base#nop1(stg) abort
" Nop with one arg, used if callback is required
return a:stg
endfunction
function! vimwiki#base#get_globlinks_escaped(...) abort function! vimwiki#base#get_globlinks_escaped(...) abort
" Proxy: Called by command completion
let args = copy(a:000)
call insert(args, 'fnameescape')
return call('vimwiki#base#get_globlinks_callback', args)
endfunction
function! vimwiki#base#get_globlinks_raw(...) abort
" Proxy: Called by command completion
let args = copy(a:000)
call insert(args, 'vimwiki#base#nop1')
return call('vimwiki#base#get_globlinks_callback', args)
endfunction
function! vimwiki#base#get_globlinks_callback(callback, ...) abort
" Escape global link " Escape global link
" Called by command completion " Called by command completion
" [1] callback <string> of a function converting file <string> => escaped file <string>
" -- ex: fnameescape
let s_arg_lead = a:0 > 0 ? a:1 : '' let s_arg_lead = a:0 > 0 ? a:1 : ''
" only get links from the current dir " only get links from the current dir
" change to the directory of the current file " change to the directory of the current file
@@ -414,8 +447,8 @@ function! vimwiki#base#get_globlinks_escaped(...) abort
" " use smart case matching " " use smart case matching
let r_arg = substitute(s_arg_lead, '\u', '[\0\l\0]', 'g') let r_arg = substitute(s_arg_lead, '\u', '[\0\l\0]', 'g')
call filter(lst, '-1 != match(v:val, r_arg)') call filter(lst, '-1 != match(v:val, r_arg)')
" Apply fnameescape() to each item " Apply callback to each item
call map(lst, 'fnameescape(v:val)') call map(lst, a:callback . '(v:val)')
" Return list (for customlist completion) " Return list (for customlist completion)
return lst return lst
endfunction endfunction
@@ -449,7 +482,7 @@ function! vimwiki#base#generate_links(create, ...) abort
let use_caption = vimwiki#vars#get_wikilocal('generated_links_caption', wiki_nr) let use_caption = vimwiki#vars#get_wikilocal('generated_links_caption', wiki_nr)
for link in links for link in links
let link_infos = vimwiki#base#resolve_link(link) let link_infos = vimwiki#base#resolve_link(link)
if !vimwiki#base#is_diary_file(link_infos.filename, copy(l:diary_file_paths)) if !vimwiki#base#is_among_diary_files(link_infos.filename, copy(l:diary_file_paths))
let link_tpl = vimwiki#vars#get_syntaxlocal('Link1') let link_tpl = vimwiki#vars#get_syntaxlocal('Link1')
let link_caption = vimwiki#base#read_caption(link_infos.filename) let link_caption = vimwiki#base#read_caption(link_infos.filename)
@@ -492,8 +525,13 @@ endfunction
function! vimwiki#base#goto(...) abort function! vimwiki#base#goto(...) abort
" Jump: to other wikifile, specified on command mode " Jump: to other wikifile, specified on command mode
" Called: by command VimwikiGoto (Exported) " Called: by command VimwikiGoto (Exported)
let key = a:0 > 0 ? a:1 : input('Enter name: ', '', let key = a:0 > 0 && a:1 !=# '' ? a:1 : input('Enter name: ', '',
\ 'customlist,vimwiki#base#complete_links_escaped') \ 'customlist,vimwiki#base#complete_links_raw')
if key ==# ''
" Input cancelled
return
endif
let anchor = a:0 > 1 ? a:2 : '' let anchor = a:0 > 1 ? a:2 : ''
@@ -853,6 +891,9 @@ function! s:jump_to_anchor(anchor) abort
let anchor = vimwiki#u#escape(a:anchor) let anchor = vimwiki#u#escape(a:anchor)
let segments = split(anchor, '#', 0) let segments = split(anchor, '#', 0)
" Start at beginning => Independent of link position
call cursor(1, 1)
" For markdown: there is only one segment " For markdown: there is only one segment
for segment in segments for segment in segments
" Craft segment pattern so that it is case insensitive and also matches dashes " Craft segment pattern so that it is case insensitive and also matches dashes
@@ -873,7 +914,6 @@ function! s:jump_to_segment(segment, segment_norm_re, segment_nb) abort
" Called: jump_to_anchor with suffix and withtou suffix " Called: jump_to_anchor with suffix and withtou suffix
" Save cursor %% Initialize at top of line " Save cursor %% Initialize at top of line
let oldpos = getpos('.') let oldpos = getpos('.')
call cursor(1, 1)
" Get anchor regex " Get anchor regex
let anchor_header = s:safesubstitute( let anchor_header = s:safesubstitute(
@@ -931,9 +971,6 @@ function! s:jump_to_segment(segment, segment_norm_re, segment_nb) abort
return 0 return 0
endif endif
" Or keep on (i.e more than once segment)
let oldpos = getpos('.')
" Said 'fail' to caller " Said 'fail' to caller
return 1 return 1
endfunction endfunction
@@ -1106,7 +1143,7 @@ function! vimwiki#base#edit_file(command, filename, anchor, ...) abort
" :param: anchor " :param: anchor
" :param: (1) vimwiki_prev_link " :param: (1) vimwiki_prev_link
" :param: (2) vimwiki#u#ft_is_vw() " :param: (2) vimwiki#u#ft_is_vw()
let fname = escape(a:filename, '% *|#`') let fname = fnameescape(a:filename)
let dir = fnamemodify(a:filename, ':p:h') let dir = fnamemodify(a:filename, ':p:h')
let ok = vimwiki#path#mkdir(dir, 1) let ok = vimwiki#path#mkdir(dir, 1)
@@ -2236,7 +2273,7 @@ function! vimwiki#base#AddHeaderLevel(...) abort
" Clause, argument must be <= 1 " Clause, argument must be <= 1
" Actually argument is not used :-) " Actually argument is not used :-)
if a:1 > 1 if a:1 > 1
call vimwiki#base#AddHeaderLevel(1) call vimwiki#base#AddHeaderLevel(a:1 - 1)
endif endif
let lnum = line('.') let lnum = line('.')
let line = getline(lnum) let line = getline(lnum)
@@ -2270,7 +2307,7 @@ function! vimwiki#base#RemoveHeaderLevel(...) abort
" Clause, argument must be <= 1 " Clause, argument must be <= 1
" Actually argument is not used :-) " Actually argument is not used :-)
if a:1 > 1 if a:1 > 1
call vimwiki#base#RemoveHeaderLevel(1) call vimwiki#base#RemoveHeaderLevel(a:1 - 1)
endif endif
let lnum = line('.') let lnum = line('.')
let line = getline(lnum) let line = getline(lnum)
@@ -2639,13 +2676,10 @@ function! s:clean_url(url) abort
endfunction endfunction
function! vimwiki#base#is_diary_file(filename, ...) abort function! vimwiki#base#is_among_diary_files(filename, diary_file_paths) abort
" Check if 1.filename is a diary file " Check if filename is in a list of diary files
" An optional second argument allows you to pass in a list of diary files rather
" than generating a list on each call to the function.
let l:diary_file_paths = a:0 > 0 ? a:1 : vimwiki#diary#get_diary_files()
let l:normalised_file_paths = let l:normalised_file_paths =
\ map(l:diary_file_paths, 'vimwiki#path#normalize(v:val)') \ map(a:diary_file_paths, 'vimwiki#path#normalize(v:val)')
" Escape single quote (Issue #886) " Escape single quote (Issue #886)
let filename = substitute(a:filename, "'", "''", 'g') let filename = substitute(a:filename, "'", "''", 'g')
let l:matching_files = let l:matching_files =
@@ -2654,6 +2688,32 @@ function! vimwiki#base#is_diary_file(filename, ...) abort
endfunction endfunction
function! vimwiki#base#is_diary_file(filename, ...) abort
" Check if filename is a diary file.
"
" For our purposes, a diary file is any readable file with the current wiki
" extension in diary_rel_path.
"
" An optional second argument allows you to pass in a list of diary files
" rather than generating a list on each call to the function. This is
" handled by passing off to is_among_diary_files(). This behavior is
" retained just in case anyone has scripted against is_diary_file(), but
" shouldn't be used internally by VimWiki code. Call is_among_diary_files()
" directly instead.
" Handle the case with diary file paths passed in:
if a:0 > 0
return vimwiki#base#is_among_diary_files(a:filename, a:1)
endif
let l:readable = filereadable(a:filename)
let l:diary_path = vimwiki#vars#get_wikilocal('path') .
\ vimwiki#vars#get_wikilocal('diary_rel_path')
let l:in_diary_path = (0 == stridx(a:filename, l:diary_path))
return l:readable && l:in_diary_path
endfunction
function! vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) abort function! vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) abort
" Treat link string towards normalization " Treat link string towards normalization
" [__LinkDescription__](__LinkUrl__.__FileExtension__) " [__LinkDescription__](__LinkUrl__.__FileExtension__)
@@ -2840,11 +2900,17 @@ endfunction
function! vimwiki#base#complete_links_escaped(ArgLead, CmdLine, CursorPos) abort function! vimwiki#base#complete_links_escaped(ArgLead, CmdLine, CursorPos) abort
" Complete escaping globlinks " Complete globlinks escaping
return vimwiki#base#get_globlinks_escaped(a:ArgLead) return vimwiki#base#get_globlinks_escaped(a:ArgLead)
endfunction endfunction
function! vimwiki#base#complete_links_raw(ArgLead, CmdLine, CursorPos) abort
" Complete globlinks as raw string (unescaped)
return vimwiki#base#get_globlinks_raw(a:ArgLead)
endfunction
function! vimwiki#base#complete_file(ArgLead, CmdLine, CursorPos) abort function! vimwiki#base#complete_file(ArgLead, CmdLine, CursorPos) abort
" Complete filename relative to current file " Complete filename relative to current file
" Called: rename_file " Called: rename_file
+7 -3
View File
@@ -37,8 +37,12 @@ endfunction
function! vimwiki#diary#diary_date_link(...) abort function! vimwiki#diary#diary_date_link(...) abort
" Return: <String> date " Return: <String> date
if a:0 > 2
let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr') " user supply wiki number as 1 indexed, not 0 indexed
let wiki_nr = a:3 - 1
else
let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr')
endif
if wiki_nr < 0 " this happens when called outside a wiki buffer if wiki_nr < 0 " this happens when called outside a wiki buffer
let wiki_nr = 0 let wiki_nr = 0
endif endif
@@ -523,7 +527,7 @@ endfunction
function! vimwiki#diary#calendar_sign(day, month, year) abort function! vimwiki#diary#calendar_sign(day, month, year) abort
" Callback function for Calendar.vim " Callback function for Calendar.vim
" Clause: no wiki no sign #290 " Clause: no wiki no sign #290
if len(g:vimwiki_list) <= 0 if exists('g:vimwiki_list') && len(g:vimwiki_list) <= 0
return return
endif endif
let day = s:prefix_zero(a:day) let day = s:prefix_zero(a:day)
+2 -2
View File
@@ -1898,12 +1898,12 @@ function! s:convert_file(path_html, wikifile) abort
endwhile endwhile
let tmp = ('tmp'. split(system('mktemp -p . --suffix=.' . type, 'silent'), 'tmp')[-1])[:-2] let tmp = ('tmp'. split(system('mktemp -p . --suffix=.' . type, 'silent'), 'tmp')[-1])[:-2]
call system('echo ' . shellescape(join(html_lines[start : cur - 1], '\n')) . ' > ' . tmp) call system('echo ' . shellescape(join(html_lines[start : cur - 1], "\n")) . ' > ' . tmp)
call system(g:vimwiki_global_vars['listing_hl_command'] . ' ' . tmp . ' > ' . tmp . '.html') call system(g:vimwiki_global_vars['listing_hl_command'] . ' ' . tmp . ' > ' . tmp . '.html')
let html_out = system('cat ' . tmp . '.html') let html_out = system('cat ' . tmp . '.html')
call system('rm ' . tmp . ' ' . tmp . '.html') call system('rm ' . tmp . ' ' . tmp . '.html')
let i = cur let i = cur
let html_lines = html_lines[0 : start - 1] + split(html_out, '\n') + html_lines[cur : ] let html_lines = html_lines[0 : start - 1] + split(html_out, "\n") + html_lines[cur : ]
endif endif
let i += 1 let i += 1
endwhile endwhile
+48 -10
View File
@@ -1,9 +1,18 @@
" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Title: Vimwiki list functions
" Vimwiki autoload plugin file "
" Description: Everything concerning lists and checkboxes " Description:
" Everything concerning lists and checkboxes
"
" Also helpers for blockquotes as this file has intelligence and map (issue #1274)
" i <Cr>
" n o
" n O
" Which also got exploited for blocquotes
"
" Home: https://github.com/vimwiki/vimwiki/ " Home: https://github.com/vimwiki/vimwiki/
if exists('g:loaded_vimwiki_list_auto') || &compatible if exists('g:loaded_vimwiki_list_auto') || &compatible
finish finish
endif endif
@@ -145,11 +154,24 @@ function! s:line_has_marker(lnum) abort
" Returns: 2 if there is a marker and text " Returns: 2 if there is a marker and text
" 1 for a marker and no text " 1 for a marker and no text
" 0 for no marker at all (empty line or only text) " 0 for no marker at all (empty line or only text)
if getline(a:lnum) =~# vimwiki#vars#get_wikilocal('rxListItem').'\s*$'
" Concatenate regex list and blockquote item
let rx_list_or_blockquote =
\ '\%('
\ . vimwiki#vars#get_wikilocal('rxListItem')
\ . '\|'
\ . vimwiki#vars#get_wikilocal('rxBlockquoteItem')
\ . '\)'
" Search for marker
if getline(a:lnum) =~# rx_list_or_blockquote . '\s*$'
" Found without text
return 1 return 1
elseif getline(a:lnum) =~# vimwiki#vars#get_wikilocal('rxListItem').'\s*\S' elseif getline(a:lnum) =~# rx_list_or_blockquote . '\s*\S'
" Found with text
return 2 return 2
else else
" Not found
return 0 return 0
endif endif
endfunction endfunction
@@ -178,12 +200,17 @@ endfunction
" --------------------------------------------------------- " ---------------------------------------------------------
function! s:get_item(lnum) abort function! s:get_item(lnum) abort
" Returns: the mainly used data structure in this file " Return: the mainly used data structure in this file
" An item represents a single list item and is a dictionary with the keys " An item represents a single list item and is a dictionary with the keys
" lnum - the line number of the list item " lnum - the line number of the list item
" type - 1 for bulleted item, 2 for numbered item, 0 for a regular line (default) " type - the type of marker at current line
" - 0 for a regular line (default)
" - 1 for bulleted item
" - 2 for numbered item
" - 3 a blockquote item (see #1274 to add line-continuation trick to blockquotes)
" mrkr - the concrete marker, e.g. '**' or 'b)' (default '') " mrkr - the concrete marker, e.g. '**' or 'b)' (default '')
" cb - the char in the checkbox or '' if there is no checkbox " cb - the char in the checkbox or '' if there is no checkbox
" Init default " Init default
let item = {'lnum': a:lnum} let item = {'lnum': a:lnum}
let item.type = 0 let item.type = 0
@@ -195,7 +222,15 @@ function! s:get_item(lnum) abort
return item return item
endif endif
" Search for list on current line " Clause: Search for blockquotes (#1274) and return it if found
let matches = matchlist(getline(a:lnum), vimwiki#vars#get_wikilocal('rxBlockquoteItem'))
if len(matches) >= 1 && matches[1] !=? ''
let item.type = 3
let item.mrkr = matches[1]
return item
endif
" List: Search for list on current line if no blockquotes
let matches = matchlist(getline(a:lnum), vimwiki#vars#get_wikilocal('rxListItem')) let matches = matchlist(getline(a:lnum), vimwiki#vars#get_wikilocal('rxListItem'))
" Clause: If not on a list line => do not work " Clause: If not on a list line => do not work
if matches == [] || if matches == [] ||
@@ -205,6 +240,7 @@ function! s:get_item(lnum) abort
endif endif
" Fill item " Fill item
" The checkbox inner is the last match
let item.cb = matches[3] let item.cb = matches[3]
if matches[1] !=? '' if matches[1] !=? ''
let item.type = 1 let item.type = 1
@@ -1117,7 +1153,7 @@ function! s:remove_done_in_list(item, recursive) abort
if a:item.type == 0 if a:item.type == 0
return return
endif endif
" Recurse self on list item " Recurse self on list item
let first_item = s:get_first_item_in_list(a:item, 0) let first_item = s:get_first_item_in_list(a:item, 0)
let total_lines_removed = 0 let total_lines_removed = 0
@@ -1183,7 +1219,7 @@ function! vimwiki#lst#remove_done_in_range(first_line, last_line) abort
endif endif
let cur_ln = s:get_next_line(cur_ln) let cur_ln = s:get_next_line(cur_ln)
endwhile endwhile
" Update all parent state (percentage of done) " Update all parent state (percentage of done)
for parent_item in parent_items_of_lines for parent_item in parent_items_of_lines
call s:update_state(parent_item) call s:update_state(parent_item)
@@ -1842,3 +1878,5 @@ function! vimwiki#lst#fold_level(lnum) abort
endif endif
return '=' return '='
endfunction endfunction
" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
+2 -1
View File
@@ -100,7 +100,8 @@ function! s:normalize_link_syntax_n() abort
let sub = vimwiki#base#normalize_link_in_diary(lnk) let sub = vimwiki#base#normalize_link_in_diary(lnk)
else else
let sub = vimwiki#base#normalize_link_helper(lnk, let sub = vimwiki#base#normalize_link_helper(lnk,
\ vimwiki#vars#get_global('rxWord'), '', \ vimwiki#vars#get_global('rxWord'),
\ vimwiki#vars#get_global('rxWord'),
\ vimwiki#vars#get_syntaxlocal('Link1')) \ vimwiki#vars#get_syntaxlocal('Link1'))
endif endif
call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub) call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub)
+95 -75
View File
@@ -117,43 +117,40 @@ function! s:scan_tags(lines, page_name) abort
endfor endfor
let current_complete_anchor .= header let current_complete_anchor .= header
endif endif
continue " tags are not allowed in headers " See: issue #1316 to allow tags in header
" continue " tags are not allowed in headers
endif endif
" Scan line for tags. There can be many of them. " Scan line for tags. There can be many of them.
let str = line let str = line
while 1 " Get all matches
" Get all matches let tag_groups = []
let tag_groups = [] call substitute(str, tag_search_rx, '\=add(tag_groups, submatch(0))', 'g')
call substitute(str, tag_search_rx, '\=add(tag_groups, submatch(0))', 'g') if tag_groups == []
if tag_groups == [] continue
break endif
endif for tag_group in tag_groups
let tagend = matchend(str, tag_search_rx) for tag in split(tag_group, tag_format.sep)
let str = str[(tagend):] " Create metadata entry
for tag_group in tag_groups let entry = {}
for tag in split(tag_group, tag_format.sep) let entry.tagname = tag
" Create metadata entry let entry.lineno = line_nr
let entry = {} if line_nr <= PROXIMITY_LINES_NR && header_line_nr < 0
let entry.tagname = tag " Tag appeared at the top of the file
let entry.lineno = line_nr let entry.link = a:page_name
if line_nr <= PROXIMITY_LINES_NR && header_line_nr < 0 let entry.description = entry.link
" Tag appeared at the top of the file elseif line_nr <= (header_line_nr + PROXIMITY_LINES_NR)
let entry.link = a:page_name " Tag appeared right below a header
let entry.description = entry.link let entry.link = a:page_name . '#' . current_complete_anchor
elseif line_nr <= (header_line_nr + PROXIMITY_LINES_NR) let entry.description = current_header_description
" Tag appeared right below a header else
let entry.link = a:page_name . '#' . current_complete_anchor " Tag stands on its own
let entry.description = current_header_description let entry.link = a:page_name . '#' . tag
else let entry.description = entry.link
" Tag stands on its own endif
let entry.link = a:page_name . '#' . tag call add(entries, entry)
let entry.description = entry.link
endif
call add(entries, entry)
endfor
endfor endfor
endwhile endfor
endfor " loop over lines endfor " loop over lines
return entries return entries
@@ -363,65 +360,70 @@ function! vimwiki#tags#generate_tags(create, ...) abort
" make a dictionary { tag_name: [tag_links, ...] } " make a dictionary { tag_name: [tag_links, ...] }
let tags_entries = {} let tags_entries = {}
for tagname in self.specific_tags
let tags_entries[tagname] = []
endfor
for entries in values(metadata) for entries in values(metadata)
for entry in entries for entry in entries
if has_key(tags_entries, entry.tagname) if has_key(tags_entries, entry.tagname)
call add(tags_entries[entry.tagname], [entry.link, entry.description]) call add(tags_entries[entry.tagname], [entry.link, entry.description])
else else
let tags_entries[entry.tagname] = [[entry.link, entry.description]] if need_all_tags
let tags_entries[entry.tagname] = [[entry.link, entry.description]]
endif
endif endif
endfor endfor
unlet entry " needed for older vims with sticky type checking since name is reused unlet entry " needed for older vims with sticky type checking since name is reused
endfor endfor
let tagnames = need_all_tags ? sort(keys(tags_entries)) : self.specific_tags
let lines = [] let lines = []
let bullet = repeat(' ', vimwiki#lst#get_list_margin()).vimwiki#lst#default_symbol().' ' let bullet = repeat(' ', vimwiki#lst#get_list_margin()).vimwiki#lst#default_symbol().' '
let current_dir = vimwiki#base#current_subdir() let current_dir = vimwiki#base#current_subdir()
for tagname in sort(keys(tags_entries)) for tagname in tagnames
if need_all_tags || index(self.specific_tags, tagname) != -1 if len(lines) > 0
if len(lines) > 0 call add(lines, '')
endif
let tag_tpl = printf('rxH%d_Template', self.header_level + 1)
call add(lines, s:safesubstitute(vimwiki#vars#get_syntaxlocal(tag_tpl), '__Header__', tagname, ''))
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown'
for _ in range(vimwiki#vars#get_global('markdown_header_style'))
call add(lines, '') call add(lines, '')
endif
let tag_tpl = printf('rxH%d_Template', self.header_level + 1)
call add(lines, s:safesubstitute(vimwiki#vars#get_syntaxlocal(tag_tpl), '__Header__', tagname, ''))
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown'
for _ in range(vimwiki#vars#get_global('markdown_header_style'))
call add(lines, '')
endfor
endif
for [taglink, tagdescription] in sort(tags_entries[tagname])
let taglink = vimwiki#path#relpath(current_dir, taglink)
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown'
let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink3Template')
let link_infos = vimwiki#base#resolve_link(taglink)
if empty(link_infos.anchor)
let link_tpl = vimwiki#vars#get_syntaxlocal('Link1')
let entry = s:safesubstitute(link_tpl, '__LinkUrl__', taglink, '')
let entry = s:safesubstitute(entry, '__LinkDescription__', tagdescription, '')
let file_extension = vimwiki#vars#get_wikilocal('ext', vimwiki#vars#get_bufferlocal('wiki_nr'))
let entry = s:safesubstitute(entry, '__FileExtension__', file_extension , '')
else
let link_caption = split(tagdescription, '#', 0)[-1]
let link_text = split(taglink, '#', 1)[0]
let entry = s:safesubstitute(link_tpl, '__LinkUrl__', link_text, '')
let entry = s:safesubstitute(entry, '__LinkAnchor__', link_infos.anchor, '')
let entry = s:safesubstitute(entry, '__LinkDescription__', link_caption, '')
let file_extension = vimwiki#vars#get_wikilocal('ext', vimwiki#vars#get_bufferlocal('wiki_nr'))
let entry = s:safesubstitute(entry, '__FileExtension__', file_extension , '')
endif
call add(lines, bullet . entry)
else
let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate1')
let file_extension = vimwiki#vars#get_wikilocal('ext', vimwiki#vars#get_bufferlocal('wiki_nr'))
let link_tpl = s:safesubstitute(link_tpl, '__FileExtension__', file_extension , '')
call add(lines, bullet . substitute(link_tpl, '__LinkUrl__', taglink, ''))
endif
endfor endfor
endif endif
for [taglink, tagdescription] in sort(tags_entries[tagname])
let taglink = vimwiki#path#relpath(current_dir, taglink)
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown'
let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink3Template')
let link_infos = vimwiki#base#resolve_link(taglink)
if empty(link_infos.anchor)
let link_tpl = vimwiki#vars#get_syntaxlocal('Link1')
let entry = s:safesubstitute(link_tpl, '__LinkUrl__', taglink, '')
let entry = s:safesubstitute(entry, '__LinkDescription__', tagdescription, '')
let file_extension = vimwiki#vars#get_wikilocal('ext', vimwiki#vars#get_bufferlocal('wiki_nr'))
let entry = s:safesubstitute(entry, '__FileExtension__', file_extension , '')
else
let link_caption = split(tagdescription, '#', 0)[-1]
let link_text = split(taglink, '#', 1)[0]
let entry = s:safesubstitute(link_tpl, '__LinkUrl__', link_text, '')
let entry = s:safesubstitute(entry, '__LinkAnchor__', link_infos.anchor, '')
let entry = s:safesubstitute(entry, '__LinkDescription__', link_caption, '')
let file_extension = vimwiki#vars#get_wikilocal('ext', vimwiki#vars#get_bufferlocal('wiki_nr'))
let entry = s:safesubstitute(entry, '__FileExtension__', file_extension , '')
endif
call add(lines, bullet . entry)
else
let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate1')
let file_extension = vimwiki#vars#get_wikilocal('ext', vimwiki#vars#get_bufferlocal('wiki_nr'))
let link_tpl = s:safesubstitute(link_tpl, '__FileExtension__', file_extension , '')
call add(lines, bullet . substitute(link_tpl, '__LinkUrl__', taglink, ''))
endif
endfor
endfor endfor
return lines return lines
@@ -448,3 +450,21 @@ function! vimwiki#tags#complete_tags(ArgLead, CmdLine, CursorPos) abort
let taglist = vimwiki#tags#get_tags() let taglist = vimwiki#tags#get_tags()
return join(taglist, "\n") return join(taglist, "\n")
endfunction endfunction
function! vimwiki#tags#search_tags(tag_pattern) abort
" See #1316 and rxTags in vars.vim
let tf = vimwiki#vars#get_syntaxlocal('tag_format')
" Craft regex
let rx_this_tag = '/'
let rx_this_tag .= tf.pre . '\@<=' . tf.pre_mark
let rx_this_tag .= '\%(' . tf.in . tf.sep . '\)*'
let rx_this_tag .= a:tag_pattern
let rx_this_tag .= '\%(' . tf.sep . tf.in . '\)*'
let rx_this_tag .= tf.post_mark . tf.post . '\@='
let rx_this_tag .= '/'
" Search in current wiki folder
return vimwiki#base#search(rx_this_tag)
endfunction
+7 -6
View File
@@ -149,7 +149,9 @@ function! vimwiki#tbl#get_cells(line, ...) abort
let state = 'NONE' let state = 'NONE'
let cell_start = 0 let cell_start = 0
let quote_start = 0 let quote_start = 0
let len = strlen(a:line) - 1 " Split byte string into list of character to properly handle multibyte chars
let chars = split(a:line, '\zs')
let len = len(chars) - 1
" 'Simple' FSM " 'Simple' FSM
while state !=# 'CELL' while state !=# 'CELL'
@@ -157,10 +159,9 @@ function! vimwiki#tbl#get_cells(line, ...) abort
let state = 'CELL' let state = 'CELL'
endif endif
for idx in range(quote_start, len) for idx in range(quote_start, len)
" The only way I know Vim can do Unicode... let ch = chars[idx]
let ch = a:line[idx]
if state ==# 'NONE' if state ==# 'NONE'
if ch ==# s:s_sep() && (idx < 1 || a:line[idx-1] !=# '\') if ch ==# s:s_sep() && (idx < 1 || chars[idx-1] !=# '\')
let cell_start = idx + 1 let cell_start = idx + 1
let state = 'CELL' let state = 'CELL'
endif endif
@@ -168,8 +169,8 @@ function! vimwiki#tbl#get_cells(line, ...) abort
if ch ==# '[' || ch ==# '{' if ch ==# '[' || ch ==# '{'
let state = 'BEFORE_QUOTE_START' let state = 'BEFORE_QUOTE_START'
let quote_start = idx let quote_start = idx
elseif ch ==# s:s_sep() && (idx < 1 || a:line[idx-1] !=# '\') elseif ch ==# s:s_sep() && (idx < 1 || chars[idx-1] !=# '\')
let cell = strpart(a:line, cell_start, idx - cell_start) let cell = join(chars[cell_start : idx-1], '')
if a:0 && a:1 if a:0 && a:1
let cell = substitute(cell, '^ \(.*\) $', '\1', '') let cell = substitute(cell, '^ \(.*\) $', '\1', '')
else else
+38 -27
View File
@@ -295,13 +295,19 @@ endfunction
function! vimwiki#u#get_punctuation_string() abort function! vimwiki#u#get_punctuation_string() abort
" Faster " Faster
" See: https://github.github.com/gfm/#ascii-punctuation-character " See: https://github.github.com/gfm/#ascii-punctuation-character
return '!"#$%&''()*+,-./:;<=>?@\[\\\]^`{}|~' " res = '!"#$%&''()*+,-./:;<=>?@\[\\\]^`{}|~'
" But I removed the * as it is treated as a special case
return '!"#$%&''()+,-./:;<=>?@\[\\\]^`{}|~'
endfunction endfunction
function! vimwiki#u#hi_expand_regex(lst) abort function! vimwiki#u#hi_expand_regex(lst) abort
" Helper: Expand regex from reduced typeface delimiters " Helper: Expand regex from reduced typeface delimiters
" :param: list<list,delimiters>> with reduced regex " :param: list<list<delimiters>> with reduced regex
" 1: Left delimiter (regex)
" 2: Right delimiter (regex)
" 3: Possible characters to ignore (regex: default '$^' => never match)
" 4: Can multiply delimiter (boolean: default 0 => do not repeat)
" Return: list with extended regex delimiters (not inside a word) " Return: list with extended regex delimiters (not inside a word)
" -- [['\*_', '_\*']] -> [['\*_\S\@=', '\S\@<=_\*\%(\s\|$\)\@=']] " -- [['\*_', '_\*']] -> [['\*_\S\@=', '\S\@<=_\*\%(\s\|$\)\@=']]
" Note: For purposes of this definition, the beginning and the end of the line count as Unicode whitespace. " Note: For purposes of this definition, the beginning and the end of the line count as Unicode whitespace.
@@ -313,42 +319,46 @@ function! vimwiki#u#hi_expand_regex(lst) abort
for a_delimiter in a:lst for a_delimiter in a:lst
let r_left_del = a_delimiter[0] let r_left_del = a_delimiter[0]
let r_right_del = a_delimiter[1] let r_right_del = a_delimiter[1]
let r_repeat_del = len(a_delimiter) >= 3 ? a_delimiter[2] : '$^'
let b_can_mult = len(a_delimiter) >= 4 ? a_delimiter[3] : 0
" Craft the repeatable middle
let r_mult = b_can_mult ? '\+' : ''
let r_left_repeat = '\%(\%(' . r_left_del . '\)' . r_mult . '\)'
let r_right_repeat = '\%(\%(' . r_right_del . '\)' . r_mult . '\)'
let r_unescaped_repeat = '\%(\\\|\\\@<!' . r_repeat_del . '\)'
" Regex Start: " Regex Start:
" Left-Flanking is not followed by space (or need of line) " Left-Flanking is not followed by space (or need of line)
let r_left_prefix = '\%(^\|[[:space:]]\@<=\)'
let r_left_prefix = '\\\@<!'
" -- not followed by Unicode whitespace,
let r_left_suffix = '\%([^[:space:]]\@=\)'
" Left Case1: not followed by punctuation " Left Case1: not followed by punctuation, start with blacklist
let r_left_suffix1 = '\%(\%([^[:space:]' . punctuation . ']\)\@=\)'
" -- Can escape the leftflank " -- Can escape the leftflank
let r_left_prefix1 = '\%(^\|\\\@<!\)' let r_left_prefix1 = '\%(^\|' . r_unescaped_repeat . '\@<!\)'
let r_left_suffix1 = '\%(\%([[:space:]\n' . punctuation . ']\|' . r_unescaped_repeat . '\)\@!\)'
" Left Case2: followed by punctuation so must be preceded by Unicode whitespace or start of line or a punctuation character. " Left Case2: followed by punctuation so must be preceded by whitelisted Unicode whitespace or start of line or a punctuation character.
let r_left_prefix2 = '\%(\%(^\|[[:space:]\n' . punctuation . ']\)\@<=\)'
let r_left_suffix2 = '\%([' . punctuation . ']\@=\)' let r_left_suffix2 = '\%([' . punctuation . ']\@=\)'
let r_left_prefix2 = '\%(\%(^\|[[:space:]' . punctuation . ']\)\@<=\)'
" Left Concatenate " Left Concatenate
let r_start = '\%(' . r_left_prefix1 . r_left_del . r_left_suffix1 let r_start = '\%(' . r_left_prefix1 . '\zs' . r_left_repeat . '\ze' . r_left_suffix1
let r_start .= '\|' . r_left_prefix2 . r_left_del . r_left_suffix2 . '\)' let r_start .= '\|' . r_left_prefix2 . '\zs' . r_left_repeat . '\ze' . r_left_suffix2 . '\)'
" Regex End: " Regex End:
" not preceded by Unicode whitespace " not preceded by Unicode whitespace
let r_right_prefix = '\(^\|[^[:space:]]\@<=\)' let r_right_prefix = '\(^\|[^[:space:]]\@<=\)'
" Right Case1: not preceded by a punctuation character (or start of line) " Right Case1: not preceded by a punctuation character (or start of line)
let r_right_prefix1 = '\%(\%(^\|[^[:space:]' . punctuation . ']\)\@<=\)' let r_right_prefix1 = '\%(^\|\%([[:space:]\n' . punctuation . ']\|' . r_unescaped_repeat . '\)\@<!\)'
let r_right_suffix1 = '' let r_right_suffix1 = '\%($\|' . r_unescaped_repeat . '\@!\)'
" Right Case2: preceded by a punctuation character and followed by Unicode whitespace or end of line or a punctuation character " Right Case2: preceded by a punctuation character and followed by Unicode whitespace or end of line or a punctuation character
let r_right_prefix2 = '\%([' . punctuation . ']\@<=\)' let r_right_prefix2 = '\%([' . punctuation . ']\@<=\)'
let r_right_suffix2 = '\%(\%($\|[[:space:]' . punctuation . ']\)\@<=\)' let r_right_suffix2 = '\%(\%($\|[[:space:]\n' . punctuation . ']\)\@=\)'
" Right Concatenate " Right Concatenate
let r_end = '\%(' . r_right_prefix1 . r_right_del . r_right_suffix1 let r_end = '\%(' . r_right_prefix1 . r_right_repeat . r_right_suffix1
let r_end .= '\|' . r_right_prefix2 . r_right_del . r_right_suffix2 . '\)' let r_end .= '\|' . r_right_prefix2 . r_right_repeat . r_right_suffix2 . '\)'
call add(res, [r_start, r_end]) call add(res, [r_start, r_end])
endfor endfor
@@ -359,7 +369,8 @@ endfunction
function! vimwiki#u#hi_tag(tag_pre, tag_post, syntax_group, contains, ...) abort function! vimwiki#u#hi_tag(tag_pre, tag_post, syntax_group, contains, ...) abort
" Helper: Create highlight region between two tags " Helper: Create highlight region between two tags
" :param: tag <string> example '<b>' " :param: tag_pre <string>: opening tag example '<b>'
" :param: tag_post <string>: closing tag example '</b>'
" :param: syntax_group <string> example: VimwikiBold " :param: syntax_group <string> example: VimwikiBold
" :param: contains <string> coma separated and prefixed, default VimwikiHTMLTag " :param: contains <string> coma separated and prefixed, default VimwikiHTMLTag
" :param: (1) <boolean> is contained " :param: (1) <boolean> is contained
@@ -407,6 +418,13 @@ function! vimwiki#u#hi_typeface(dic) abort
let nested = vimwiki#u#get_syntax_dic().nested let nested = vimwiki#u#get_syntax_dic().nested
" Bold Italic
if has_key(a:dic, 'bold_italic')
for bi in a:dic['bold_italic']
call vimwiki#u#hi_tag(bi[0], bi[1], 'VimwikiBoldItalic', nested . ',VimwikiBoldItalicUnderline')
endfor
endif
" Italic " Italic
for i in a:dic['italic'] for i in a:dic['italic']
" -- Italic 1 " -- Italic 1
@@ -435,13 +453,6 @@ function! vimwiki#u#hi_typeface(dic) abort
call vimwiki#u#hi_tag(b[0], b[1], 'VimwikiUnderlineItalicBold', nested, 2) call vimwiki#u#hi_tag(b[0], b[1], 'VimwikiUnderlineItalicBold', nested, 2)
endfor endfor
" Bold Italic
if has_key(a:dic, 'bold_italic')
for bi in a:dic['bold_italic']
call vimwiki#u#hi_tag(bi[0], bi[1], 'VimwikiBoldItalic', nested . ',VimwikiBoldItalicUnderline')
endfor
endif
" Underline " Underline
for u in a:dic['underline'] for u in a:dic['underline']
" -- Underline 1 " -- Underline 1
+80 -20
View File
@@ -1,6 +1,5 @@
" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Title: Vimwiki variable definition and manipulation functions
" Vimwiki autoload plugin file "
" Description: Vimwiki variable definition and manipulation
" Home: https://github.com/vimwiki/vimwiki/ " Home: https://github.com/vimwiki/vimwiki/
" ------------------------------------------------------------------------------------------------ " ------------------------------------------------------------------------------------------------
@@ -178,7 +177,7 @@ function! s:get_default_global() abort
\ [ \ [
\ 'http', 'https', 'file', 'ftp', 'gopher', 'telnet', 'nntp', 'ldap', \ 'http', 'https', 'file', 'ftp', 'gopher', 'telnet', 'nntp', 'ldap',
\ 'rsync', 'imap', 'pop', 'irc', 'ircs', 'cvs', 'svn', 'svn+ssh', \ 'rsync', 'imap', 'pop', 'irc', 'ircs', 'cvs', 'svn', 'svn+ssh',
\ 'git', 'ssh', 'fish', 'sftp', 'thunderlink' \ 'git', 'ssh', 'fish', 'sftp', 'thunderlink', 'message'
\ ]}, \ ]},
\ 'schemes_any': {'type': type([]), 'default': ['mailto', 'matrix', 'news', 'xmpp', 'sip', 'sips', 'doi', 'urn', 'tel', 'data']}, \ 'schemes_any': {'type': type([]), 'default': ['mailto', 'matrix', 'news', 'xmpp', 'sip', 'sips', 'doi', 'urn', 'tel', 'data']},
\ 'table_auto_fmt': {'type': type(0), 'default': 1, 'min': 0, 'max': 1}, \ 'table_auto_fmt': {'type': type(0), 'default': 1, 'min': 0, 'max': 1},
@@ -477,6 +476,7 @@ function! s:get_default_wikilocal() abort
\ 'auto_toc': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, \ 'auto_toc': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
\ 'automatic_nested_syntaxes': {'type': type(0), 'default': 1, 'min': 0, 'max': 1}, \ 'automatic_nested_syntaxes': {'type': type(0), 'default': 1, 'min': 0, 'max': 1},
\ 'base_url': {'type': type(''), 'default': '', 'min_length': 1}, \ 'base_url': {'type': type(''), 'default': '', 'min_length': 1},
\ 'bullet_types': {'type': type([]), 'default': []},
\ 'color_dic': {'type': type({}), 'default': { \ 'color_dic': {'type': type({}), 'default': {
\ 'default': ['', '#d79921'], \ 'default': ['', '#d79921'],
\ 'red': ['#cc241d', ''], \ 'red': ['#cc241d', ''],
@@ -498,6 +498,7 @@ function! s:get_default_wikilocal() abort
\ 'css_name': {'type': type(''), 'default': 'style.css', 'min_length': 1}, \ 'css_name': {'type': type(''), 'default': 'style.css', 'min_length': 1},
\ 'custom_wiki2html': {'type': type(''), 'default': ''}, \ 'custom_wiki2html': {'type': type(''), 'default': ''},
\ 'custom_wiki2html_args': {'type': type(''), 'default': ''}, \ 'custom_wiki2html_args': {'type': type(''), 'default': ''},
\ 'cycle_bullets': {'type': type(0), 'default': 0},
\ 'diary_frequency': {'type': type(''), 'default': 'daily', 'possible_values': ['daily', 'weekly', 'monthly', 'yearly']}, \ 'diary_frequency': {'type': type(''), 'default': 'daily', 'possible_values': ['daily', 'weekly', 'monthly', 'yearly']},
\ 'diary_start_week_day': {'type': type(''), 'default': 'monday', 'possible_values': ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']}, \ 'diary_start_week_day': {'type': type(''), 'default': 'monday', 'possible_values': ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']},
\ 'diary_header': {'type': type(''), 'default': 'Diary', 'min_length': 1}, \ 'diary_header': {'type': type(''), 'default': 'Diary', 'min_length': 1},
@@ -507,8 +508,6 @@ function! s:get_default_wikilocal() abort
\ 'diary_sort': {'type': type(''), 'default': 'desc', 'possible_values': ['asc', 'desc']}, \ 'diary_sort': {'type': type(''), 'default': 'desc', 'possible_values': ['asc', 'desc']},
\ 'exclude_files': {'type': type([]), 'default': []}, \ 'exclude_files': {'type': type([]), 'default': []},
\ 'ext': {'type': type(''), 'default': '.wiki', 'min_length': 1}, \ 'ext': {'type': type(''), 'default': '.wiki', 'min_length': 1},
\ 'bullet_types': {'type': type([]), 'default': []},
\ 'cycle_bullets': {'type': type(0), 'default': 0},
\ 'html_filename_parameterization': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, \ 'html_filename_parameterization': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
\ 'generated_links_caption': {'type': type(0), 'default': 0 }, \ 'generated_links_caption': {'type': type(0), 'default': 0 },
\ 'index': {'type': type(''), 'default': 'index', 'min_length': 1}, \ 'index': {'type': type(''), 'default': 'index', 'min_length': 1},
@@ -610,6 +609,8 @@ function! s:normalize_wikilocal_settings() abort
endif endif
call s:populate_list_vars(wiki_settings) call s:populate_list_vars(wiki_settings)
call s:populate_blockquote_vars(wiki_settings)
" Check nested syntax " Check nested syntax
for keyword in keys(wiki_settings.nested_syntaxes) for keyword in keys(wiki_settings.nested_syntaxes)
if type(keyword) != type('') || empty(keyword) || type(wiki_settings.nested_syntaxes[keyword]) != type('') || if type(keyword) != type('') || empty(keyword) || type(wiki_settings.nested_syntaxes[keyword]) != type('') ||
@@ -675,6 +676,7 @@ function! s:get_default_syntaxlocal() abort
" type, default, min, max, possible_values, min_length " type, default, min, max, possible_values, min_length
return extend(s:get_common_syntaxlocal(), { return extend(s:get_common_syntaxlocal(), {
\ 'blockquote_markers': {'type': type([]), 'default': ['>', '::']},
\ 'bold_match': {'type': type(''), 'default': '\%(^\|\s\|[[:punct:]]\)\@<=\*__Text__\*\%([[:punct:]]\|\s\|$\)\@='}, \ 'bold_match': {'type': type(''), 'default': '\%(^\|\s\|[[:punct:]]\)\@<=\*__Text__\*\%([[:punct:]]\|\s\|$\)\@='},
\ 'bold_search': {'type': type(''), 'default': '\%(^\|\s\|[[:punct:]]\)\@<=\*\zs\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)\ze\*\%([[:punct:]]\|\s\|$\)\@='}, \ 'bold_search': {'type': type(''), 'default': '\%(^\|\s\|[[:punct:]]\)\@<=\*\zs\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)\ze\*\%([[:punct:]]\|\s\|$\)\@='},
\ 'bullet_types': {'type': type([]), 'default': ['-', '*', '#']}, \ 'bullet_types': {'type': type([]), 'default': ['-', '*', '#']},
@@ -683,7 +685,6 @@ function! s:get_default_syntaxlocal() abort
\ 'list_markers': {'type': type([]), 'default': ['-', '1.', '*', 'I)', 'a)']}, \ 'list_markers': {'type': type([]), 'default': ['-', '1.', '*', 'I)', 'a)']},
\ 'number_types': {'type': type([]), 'default': ['1)', '1.', 'i)', 'I)', 'a)', 'A)']}, \ 'number_types': {'type': type([]), 'default': ['1)', '1.', 'i)', 'I)', 'a)', 'A)']},
\ 'recurring_bullets': {'type': type(0), 'default': 0}, \ 'recurring_bullets': {'type': type(0), 'default': 0},
\ 'comment_regex': {'type': type(''), 'default': '^\s*%%.*$'},
\ 'header_symbol': {'type': type(''), 'default': '='}, \ 'header_symbol': {'type': type(''), 'default': '='},
\ 'rxHR': {'type': type(''), 'default': '^-----*$'}, \ 'rxHR': {'type': type(''), 'default': '^-----*$'},
\ 'rxListDefine': {'type': type(''), 'default': '::\(\s\|$\)'}, \ 'rxListDefine': {'type': type(''), 'default': '::\(\s\|$\)'},
@@ -698,10 +699,10 @@ function! s:get_default_syntaxlocal() abort
\ 'post_mark': '}}}'}}, \ 'post_mark': '}}}'}},
\ 'symH': {'type': type(1), 'default': 1}, \ 'symH': {'type': type(1), 'default': 1},
\ 'typeface': {'type': type({}), 'default': { \ 'typeface': {'type': type({}), 'default': {
\ 'bold': vimwiki#u#hi_expand_regex([['\*', '\*']]), \ 'bold': vimwiki#u#hi_expand_regex([['\*', '\*', '[*]', 0]]),
\ 'italic': vimwiki#u#hi_expand_regex([['_', '_']]), \ 'italic': vimwiki#u#hi_expand_regex([['_', '_', '[_]', 0]]),
\ 'underline': vimwiki#u#hi_expand_regex([]), \ 'underline': vimwiki#u#hi_expand_regex([]),
\ 'bold_italic': vimwiki#u#hi_expand_regex([['\*_', '_\*'], ['_\*', '\*_']]), \ 'bold_italic': vimwiki#u#hi_expand_regex([['\*_', '_\*', '[*_]', 1], ['_\*', '\*_', '[*_]', 1]]),
\ 'code': [ \ 'code': [
\ ['\%(^\|[^`]\)\@<=`\%($\|[^`]\)\@=', \ ['\%(^\|[^`]\)\@<=`\%($\|[^`]\)\@=',
\ '\%(^\|[^`]\)\@<=`\%($\|[^`]\)\@='], \ '\%(^\|[^`]\)\@<=`\%($\|[^`]\)\@='],
@@ -736,7 +737,6 @@ function! s:get_markdown_syntaxlocal() abort
\ 'list_markers': {'type': type([]), 'default': ['-', '*', '+', '1.']}, \ 'list_markers': {'type': type([]), 'default': ['-', '*', '+', '1.']},
\ 'number_types': {'type': type([]), 'default': ['1.']}, \ 'number_types': {'type': type([]), 'default': ['1.']},
\ 'recurring_bullets': {'type': type(0), 'default': 0}, \ 'recurring_bullets': {'type': type(0), 'default': 0},
\ 'comment_regex': {'type': type(''), 'default': '^\s*%%.*$\|<!--[^>]*-->'},
\ 'header_symbol': {'type': type(''), 'default': '#'}, \ 'header_symbol': {'type': type(''), 'default': '#'},
\ 'rxHR': {'type': type(''), 'default': '\(^---*$\|^___*$\|^\*\*\**$\)'}, \ 'rxHR': {'type': type(''), 'default': '\(^---*$\|^___*$\|^\*\*\**$\)'},
\ 'rxListDefine': {'type': type(''), 'default': '::\%(\s\|$\)'}, \ 'rxListDefine': {'type': type(''), 'default': '::\%(\s\|$\)'},
@@ -751,10 +751,21 @@ function! s:get_markdown_syntaxlocal() abort
\ 'post_mark': '\%(`\{3,}\|\~\{3,}\)'}}, \ 'post_mark': '\%(`\{3,}\|\~\{3,}\)'}},
\ 'symH': {'type': type(0), 'default': 0}, \ 'symH': {'type': type(0), 'default': 0},
\ 'typeface': {'type': type({}), 'default': { \ 'typeface': {'type': type({}), 'default': {
\ 'bold': vimwiki#u#hi_expand_regex([['__', '__'], ['\*\*', '\*\*']]), \ 'bold': vimwiki#u#hi_expand_regex([
\ 'italic': vimwiki#u#hi_expand_regex([['\*', '\*'], ['_', '_']]), \ ['__', '__', '[_*]', 1],
\ ['\*\*', '\*\*', '[_*]', 1],
\ ]),
\ 'italic': vimwiki#u#hi_expand_regex([
\ ['_', '_', '[_*]', 0],
\ ['\*', '\*', '[_*]', 0],
\ ['\*_', '_\*', '[_*]', 1],
\ ['_\*', '\*_', '[_*]', 1],
\ ]),
\ 'underline': vimwiki#u#hi_expand_regex([]), \ 'underline': vimwiki#u#hi_expand_regex([]),
\ 'bold_italic': vimwiki#u#hi_expand_regex([['\*_', '_\*'], ['_\*', '\*_'], ['\*\*\*', '\*\*\*'], ['___', '___']]), \ 'bold_italic': vimwiki#u#hi_expand_regex([
\ ['___', '___', '[_*]', 1],
\ ['\*\*\*', '\*\*\*', '[_*]', 1],
\ ]),
\ 'code': [ \ 'code': [
\ ['\%(^\|[^`\\]\)\@<=`\%($\|[^`]\)\@=', \ ['\%(^\|[^`\\]\)\@<=`\%($\|[^`]\)\@=',
\ '\%(^\|[^`]\)\@<=`\%($\|[^`]\)\@='], \ '\%(^\|[^`]\)\@<=`\%($\|[^`]\)\@='],
@@ -780,7 +791,6 @@ function! s:get_media_syntaxlocal() abort
\ 'list_markers': {'type': type([]), 'default': ['*', '#']}, \ 'list_markers': {'type': type([]), 'default': ['*', '#']},
\ 'number_types': {'type': type([]), 'default': []}, \ 'number_types': {'type': type([]), 'default': []},
\ 'recurring_bullets': {'type': type(1), 'default': 1}, \ 'recurring_bullets': {'type': type(1), 'default': 1},
\ 'comment_regex': {'type': type(''), 'default': '^\s*%%.*$'},
\ 'header_symbol': {'type': type(''), 'default': '='}, \ 'header_symbol': {'type': type(''), 'default': '='},
\ 'rxHR': {'type': type(''), 'default': '^-----*$'}, \ 'rxHR': {'type': type(''), 'default': '^-----*$'},
\ 'rxListDefine': {'type': type(''), 'default': '^\%(;\|:\)\s'}, \ 'rxListDefine': {'type': type(''), 'default': '^\%(;\|:\)\s'},
@@ -821,19 +831,30 @@ function! s:get_common_syntaxlocal() abort
let rx_yaml_start_pre = '\%(^\%(\%1l\|^$\n\)\@<=\)' let rx_yaml_start_pre = '\%(^\%(\%1l\|^$\n\)\@<=\)'
let rx_yaml_start_post = '\%(\%(\n^$\)\@!$\)' let rx_yaml_start_post = '\%(\%(\n^$\)\@!$\)'
let rx_yaml_start = rx_yaml_start_pre . '---' . rx_yaml_start_post let rx_yaml_start = rx_yaml_start_pre . '---' . rx_yaml_start_post
let rx_yaml_stop = '^' . '\%(---\|\.\.\.\)' . '$' let rx_yaml_end = '^\%(---\|\.\.\.\)\s*$'
let res.nested_extended = {'type': type(''), 'default': 'VimwikiError,VimwikiPre,VimwikiCode,VimwikiEqIn,VimwikiSuperScript,VimwikiSubScript,textSnipTEX'} let res.nested_extended = {'type': type(''), 'default': 'VimwikiError,VimwikiPre,VimwikiCode,VimwikiEqIn,VimwikiSuperScript,VimwikiSubScript,textSnipTEX'}
let res.nested_typeface = {'type': type(''), 'default': 'VimwikiBold,VimwikiItalic,VimwikiUnderline,VimwikiDelText'} let res.nested_typeface = {'type': type(''), 'default': 'VimwikiBold,VimwikiItalic,VimwikiUnderline,VimwikiDelText'}
let res.nested = {'type': type(''), 'default': res.nested_extended.default . ',' . res.nested_typeface.default} let res.nested = {'type': type(''), 'default': res.nested_extended.default . ',' . res.nested_typeface.default}
let res.rxTableSep = {'type': type(''), 'default': '|'} let res.rxTableSep = {'type': type(''), 'default': '|'}
" See issue #1287 " See issue #1287
let res.yaml_metadata_block = {'type': type([]), 'default': [[rx_yaml_start, rx_yaml_stop]]} let res.yaml_metadata_block = {'type': type([]), 'default': [[rx_yaml_start, rx_yaml_end]]}
" Declare helper for inline math nested variable " Declare helper for inline math nested variable
let s:rx_inline_math_start = '\%(^\|[^$\\]\)\@<=\$\%($\|[^$[:space:]]\)\@=' let s:rx_inline_math_start = '\%(^\|[^$\\]\)\@<=\$\%($\|[^$[:space:]]\)\@='
let s:rx_inline_math_end = '\%(^\|[^$\\[:space:]]\)\@<=\$\%($\|[^$0-9]\)\@=' let s:rx_inline_math_end = '\%(^\|[^$\\[:space:]]\)\@<=\$\%($\|[^$0-9]\)\@='
" Blockquote marker (#1274)
" -- it should not be changed but let's avoid hardcoding
let res.blockquote_markers = {'type': type([]), 'default': ['>']}
" HTML comment
let res.comment_regex = {'type': type(''), 'default': '\%(^\s*%%.*$\|<!--\%([^>]\|\n\)*-->\)'}
" Opening link with dot in the ref, see #1271 and ref and Brennen comment:
" -- https://github.com/vimwiki/vimwiki/issues/1271#issuecomment-1482207680
let res.open_link_add_ext = {'type': type(1), 'default': 1}
return res return res
endfunction endfunction
@@ -1121,6 +1142,22 @@ function! s:populate_list_vars(wiki) abort
endfunction endfunction
function! s:populate_blockquote_vars(wiki) abort
" Populate blockquote variable
" Start being more intelligent on blockquote line continuation
" See: issue #1274
" Start of line and spaces
let a:wiki.rxBlockquoteItem = '^\s*\('
" Content
let blockquote_markers = vimwiki#vars#get_syntaxlocal('blockquote_markers')
let a:wiki.rxBlockquoteItem .= join(blockquote_markers, '\|')
let a:wiki.rxBlockquoteItem .= '\)'
endfunction
function! s:populate_extra_markdown_vars() abort function! s:populate_extra_markdown_vars() abort
" Populate markdown specific syntax variables " Populate markdown specific syntax variables
let mkd_syntax = g:vimwiki_syntaxlocal_vars['markdown'] let mkd_syntax = g:vimwiki_syntaxlocal_vars['markdown']
@@ -1197,7 +1234,7 @@ function! s:populate_extra_markdown_vars() abort
let mkd_syntax.rxWeblink1Prefix = '[' let mkd_syntax.rxWeblink1Prefix = '['
let mkd_syntax.rxWeblink1Suffix = ')' let mkd_syntax.rxWeblink1Suffix = ')'
let mkd_syntax.rxWeblink1EscapeCharsSuffix = '\(\\\)\@<!\()\)' let mkd_syntax.rxWeblink1EscapeCharsSuffix = '\(\\\)\@<!\(>\=)\)'
let mkd_syntax.rxWeblink1Separator = '](' let mkd_syntax.rxWeblink1Separator = ']('
let rxWeblink1Ext = '' let rxWeblink1Ext = ''
@@ -1222,7 +1259,7 @@ function! s:populate_extra_markdown_vars() abort
let valid_chars_url = '[^[:cntrl:]]' let valid_chars_url = '[^[:cntrl:]]'
let mkd_syntax.rxWeblink1Prefix = vimwiki#u#escape(mkd_syntax.rxWeblink1Prefix) let mkd_syntax.rxWeblink1Prefix = vimwiki#u#escape(mkd_syntax.rxWeblink1Prefix)
let mkd_syntax.rxWeblink1Separator = vimwiki#u#escape(mkd_syntax.rxWeblink1Separator) let mkd_syntax.rxWeblink1Separator = '\](<\='
let mkd_syntax.rxWeblink1Url = valid_chars_url.'\{-}' let mkd_syntax.rxWeblink1Url = valid_chars_url.'\{-}'
let mkd_syntax.rxWeblink1Descr = valid_chars.'\{-}' let mkd_syntax.rxWeblink1Descr = valid_chars.'\{-}'
let mkd_syntax.WikiLinkMatchUrlTemplate = let mkd_syntax.WikiLinkMatchUrlTemplate =
@@ -1555,7 +1592,7 @@ endfunction
function! vimwiki#vars#get_syntaxlocal(key, ...) abort function! vimwiki#vars#get_syntaxlocal(key, ...) abort
" Get syntax variable " Get syntax variable
" Param: 1: key (<string>) " Param: 1: key (<string>)
" Param: (2): syntax name (<string> ex:'markdown') " Param: (2): syntax name (<string> ex:'markdown')
" Retrieve desired syntax name " Retrieve desired syntax name
if a:0 if a:0
@@ -1574,6 +1611,28 @@ function! vimwiki#vars#get_syntaxlocal(key, ...) abort
endfunction endfunction
function! vimwiki#vars#set_syntaxlocal(key, value, ...) abort
" Set syntax variable
" Param: 1: key (<string>)
" Param: 2: value (<any type>)
" Param: (3): syntax name (<string> ex:'markdown')
" Set desired syntax variable to value
if a:0
let syntax = a:1
else
let syntax = vimwiki#vars#get_wikilocal('syntax')
endif
" Create syntax variable dict if not exists (lazy)
if !exists('g:vimwiki_syntaxlocal_vars') || !has_key(g:vimwiki_syntaxlocal_vars, syntax)
call vimwiki#vars#populate_syntax_vars(syntax)
endif
" Set d_syntax[a:key]
let g:vimwiki_syntaxlocal_vars[syntax][a:key] = a:value
endfunction
function! vimwiki#vars#get_bufferlocal(key, ...) abort function! vimwiki#vars#get_bufferlocal(key, ...) abort
" Return: buffer local variable " Return: buffer local variable
" for the buffer we are currently in or for the given buffer (number or name). " for the buffer we are currently in or for the given buffer (number or name).
@@ -1681,3 +1740,4 @@ function! vimwiki#vars#number_of_wikis() abort
" Return: number of registered wikis + temporary " Return: number of registered wikis + temporary
return len(g:vimwiki_wikilocal_vars) - 1 return len(g:vimwiki_wikilocal_vars) - 1
endfunction endfunction
" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
+16 -1
View File
@@ -245,9 +245,24 @@ reasons for such a complex system is:
TODO currently the typeface delimiters are customized that way: TODO currently the typeface delimiters are customized that way:
```vim ```vim
" Typeface: -> u.vim
" 1/ Redraw: Typeface: -> u.vim
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let s:typeface_dic = vimwiki#vars#get_syntaxlocal('typeface') let s:typeface_dic = vimwiki#vars#get_syntaxlocal('typeface')
call vimwiki#u#hi_typeface(s:typeface_dic) call vimwiki#u#hi_typeface(s:typeface_dic)
" 2/ Clear typeface highlighting (see #1346)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Create a dic with no highlight but yes with all keys
" -- So that they are effectivemly overwritten
let typeface_dic = {'bold': [], 'italic': [], 'underline': [], 'bold_italic': [], 'code': [], 'del': [], 'sup': [], 'sub': [], 'eq': []}
" Just for consistency, this is an internal variable
echo vimwiki#vars#set_syntaxlocal('typeface', typeface_dic)
" Here is a Vim aware syntax highlighting big command
verbose call vimwiki#u#hi_typeface(typeface_dic)
``` ```
+119 -23
View File
@@ -479,13 +479,13 @@ glp Decrease the "done" status.
gll n Increase the level of a list item. gll n Increase the level of a list item.
Remap command: `<Plug>VimwikiIncreaseLvlSingleItem` Remap command: `<Plug>VimwikiIncreaseLvlSingleItem`
gLl Increase the level of a list item and all child items. gLl Increase the level of a list item and all child items.
Remap command: `<Plug>VimwikiIncreaseLvlWholeItem` or gLL Remap command: `<Plug>VimwikiIncreaseLvlWholeItem`
*vimwiki_glh* *vimwiki_gLh* *vimwiki_glh* *vimwiki_gLh*
glh n Decrease the level of a list item. glh n Decrease the level of a list item.
Remap command: `<Plug>VimwikiDecreaseLvlSingleItem` Remap command: `<Plug>VimwikiDecreaseLvlSingleItem`
gLh Decrease the level of a list item and all child items. gLh Decrease the level of a list item and all child items.
Remap command: `<Plug>VimwikiDecreaseLvlWholeItem` or gLH Remap command: `<Plug>VimwikiDecreaseLvlWholeItem`
*vimwiki_glr* *vimwiki_gLr* *vimwiki_glr* *vimwiki_gLr*
glr n Renumber list items if the cursor is on a numbered glr n Renumber list items if the cursor is on a numbered
@@ -516,6 +516,13 @@ gl- n Make a list item out of a normal line or change the
gL- Change the symbol of the current list to -. gL- Change the symbol of the current list to -.
Remap command: `:VimwikiChangeSymbolInListTo -<CR>` Remap command: `:VimwikiChangeSymbolInListTo -<CR>`
*vimwiki_gl+* *vimwiki_gL+*
gl+ n Make a list item out of a normal line or change the
symbol of the current item to +.
Remap command: `:VimwikiChangeSymbolTo +<CR>`
gL+ Change the symbol of the current list to +.
Remap command: `:VimwikiChangeSymbolInListTo +<CR>`
*vimwiki_gl1* *vimwiki_gL1* *vimwiki_gl1* *vimwiki_gL1*
gl1 n Make a list item out of a normal line or change the gl1 n Make a list item out of a normal line or change the
symbol of the current item to 1., the numbering is symbol of the current item to 1., the numbering is
@@ -964,9 +971,9 @@ Vimwiki file.
and links to external files actually exist. Check also if all wiki files and links to external files actually exist. Check also if all wiki files
are reachable from the index file. The results are shown in the quickfix are reachable from the index file. The results are shown in the quickfix
window. window.
This can be used to find "Orphaned" wiki files/pages. This can be used to find "Orphaned" wiki files/pages.
With range: the wiki number, by default current wiki With range: the wiki number, by default current wiki
@@ -1190,13 +1197,13 @@ in HTML: >
alt="Vimwiki"/> alt="Vimwiki"/>
Transclude image with alternate text and some style: > Transclude image with alternate text and some style: >
{{http://.../vimwiki_logo.png|cool stuff|style="width:150px;height:120px;"}} {{https://.../vimwiki_logo.png|cool stuff|style="width:150px;height:120px;"}}
in HTML: > in HTML: >
<img src="https://raw.githubusercontent.com/vimwiki/vimwiki/master/doc/splash.png" <img src="https://raw.githubusercontent.com/vimwiki/vimwiki/master/doc/splash.png"
alt="cool stuff" style="width:150px; height:120px"/> alt="cool stuff" style="width:150px; height:120px"/>
Transclude image _without_ alternate text and with a CSS class: > Transclude image _without_ alternate text and with a CSS class: >
{{http://.../vimwiki_logo.png||class="center flow blabla"}} {{https://.../vimwiki_logo.png||class="center flow blabla"}}
in HTML: > in HTML: >
<img src="https://raw.githubusercontent.com/vimwiki/vimwiki/master/doc/splash.png" <img src="https://raw.githubusercontent.com/vimwiki/vimwiki/master/doc/splash.png"
alt="" class="center flow blabla"/> alt="" class="center flow blabla"/>
@@ -1207,16 +1214,16 @@ See |VimwikiWikiIncludeHandler|.
Thumbnail links~ Thumbnail links~
> >
Thumbnail links are constructed like this: > Thumbnail links are constructed like this: >
[[http://someaddr.com/bigpicture.jpg|{{http://someaddr.com/thumbnail.jpg}}]] [[https://someaddr.com/bigpicture.jpg|{{https://someaddr.com/thumbnail.jpg}}]]
in HTML: > in HTML: >
<a href="http://someaddr.com/ ... /.jpg"> <a href="https://someaddr.com/ ... /.jpg">
<img src="http://../thumbnail.jpg /></a> <img src="https://../thumbnail.jpg /></a>
Markdown Links~ Markdown Links~
These links are only available for Markdown syntax. See These links are only available for Markdown syntax. See
http://daringfireball.net/projects/markdown/syntax#link. https://daringfireball.net/projects/markdown/syntax#link.
Inline link: > Inline link: >
[Looks like this](URL) [Looks like this](URL)
@@ -1456,7 +1463,7 @@ See |vimwiki-option-nested_syntaxes| and
5.8. Mathematical formulae *vimwiki-syntax-math* 5.8. Mathematical formulae *vimwiki-syntax-math*
Mathematical formulae are highlighted, and can be rendered in HTML using the Mathematical formulae are highlighted, and can be rendered in HTML using the
powerful open source display engine MathJax (http://www.mathjax.org/). powerful open source display engine MathJax (https://www.mathjax.org/).
There are three supported syntaxes, which are inline, block display and There are three supported syntaxes, which are inline, block display and
block environment. block environment.
@@ -1514,7 +1521,7 @@ In this case, <mathjax_folder> would be "../mathjax" (without quotes).
2. Loading MathJax from a CDN-server (needs internet connection). 2. Loading MathJax from a CDN-server (needs internet connection).
Add to your HTML template the following lines: Add to your HTML template the following lines:
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script> <script src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?features=es6"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
@@ -2029,7 +2036,7 @@ If you have Calendar.vim installed you can use it to create diary notes.
Just open calendar with :Calendar and tap <Enter> on the date. A wiki file Just open calendar with :Calendar and tap <Enter> on the date. A wiki file
will be created in the default wiki's diary. will be created in the default wiki's diary.
Get it from http://www.vim.org/scripts/script.php?script_id=52 Get it from https://www.vim.org/scripts/script.php?script_id=52
See |g:vimwiki_use_calendar| option to turn it off/on. See |g:vimwiki_use_calendar| option to turn it off/on.
@@ -2724,7 +2731,7 @@ The last is for 100% done items.
You can set it to some more fancy symbols like this: You can set it to some more fancy symbols like this:
> >
let g:vimwiki_list = [{'path': '~/path/', 'listsyms' = '✗○◐●✓'}] let g:vimwiki_list = [{'path': '~/path/', 'listsyms': '✗○◐●✓'}]
*vimwiki-option-listsym_rejected* *vimwiki-option-listsym_rejected*
@@ -2948,6 +2955,14 @@ Where:
- `['*', '-', '+']` is the option value - `['*', '-', '+']` is the option value
------------------------------------------------------------------------------
*blockquote_markers*
List of markers to define the blockquote regrion
Default: ['>']
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
*yaml_metadata_block* *yaml_metadata_block*
@@ -3267,7 +3282,7 @@ cannot otherwise convert the link. A customized handler might look like this: >
let str = a:value let str = a:value
" complete URL " complete URL
let url_0 = matchstr(str, g:vimwiki_rxWikiInclMatchUrl) let url_0 = matchstr(str, g:vimwiki_global_vars.rxWikiInclMatchUrl)
" URL parts " URL parts
let link_infos = vimwiki#base#resolve_link(url_0) let link_infos = vimwiki#base#resolve_link(url_0)
let arg1 = matchstr(str, VimwikiWikiInclMatchArg(1)) let arg1 = matchstr(str, VimwikiWikiInclMatchArg(1))
@@ -3817,7 +3832,7 @@ generate and follow_link
----------------------------------------------------- ReGeX ----------------------------------------------------- ReGeX
| pre | '^\|\s' | Limitations to tag precedence | pre | '^\|\s' | Limitations to tag precedence
| pre_mark | ':' | Tag list opener | pre_mark | ':' | Tag list opener
| in | '[:space:]]\+' | Tag permitted characters | in | '[[:space:]]\+' | Tag permitted characters
| sep | ':' | Tag separators in a tag list | sep | ':' | Tag separators in a tag list
| post_mark | ':' | Tag list closer | post_mark | ':' | Tag list closer
| post | '\s\|$' | Limitations to tag following | post | '\s\|$' | Limitations to tag following
@@ -3861,15 +3876,15 @@ See CONTRIBUTING.md for info about how to file bugs etc.
============================================================================== ==============================================================================
15. Development *vimwiki-development* 15. Development *vimwiki-development*
Homepage: http://vimwiki.github.io/ Homepage: https://vimwiki.github.io/
Github: https://github.com/vimwiki/vimwiki/ Github: https://github.com/vimwiki/vimwiki/
Vim plugins: http://www.vim.org/scripts/script.php?script_id=2226 Vim plugins: https://www.vim.org/scripts/script.php?script_id=2226
Old homepage: http://code.google.com/p/vimwiki/ Old homepage: https://code.google.com/p/vimwiki/
Contributors and their Github usernames in roughly chronological order: Contributors and their Github usernames in roughly chronological order:
- Maxim Kim (@habamax) <habamax@gmail.com> as original author - Maxim Kim (@habamax) <habamax@gmail.com> as original author
- the people here: http://code.google.com/p/vimwiki/people/list - the people here: https://code.google.com/p/vimwiki/people/list
- Stuart Andrews (@tub78) - Stuart Andrews (@tub78)
- Tomas Pospichal - Tomas Pospichal
- Daniel Schemala (@EinfachToll) as current maintainer - Daniel Schemala (@EinfachToll) as current maintainer
@@ -3992,8 +4007,19 @@ Contributors and their Github usernames in roughly chronological order:
- Jean-Luc Bastarache (@jlbas) - Jean-Luc Bastarache (@jlbas)
- Youssof Taha (@ysftaha) - Youssof Taha (@ysftaha)
- Thomas Leyh (@leyhline) - Thomas Leyh (@leyhline)
- Charles Schimmelpfennig (@charlesschimmel)
- nebulaeandstars (@nebulaeandstars) - nebulaeandstars (@nebulaeandstars)
- dmitry kim (@jsn) - dmitry kim (@jsn)
- Julian Prein (@druckdev)
- Luke Atkinson (@LukeDAtkinson)
- Joe Planisky (@jplanisky)
- Bence Ferdinandy (@ferdinandyb)
- R. David Dunphy (@rdunphy)
- Aarón Fas (@aaronfc)
- @jiamingc
- Alex Claman (@claman)
- @qadzek
============================================================================== ==============================================================================
16. Changelog *vimwiki-changelog* 16. Changelog *vimwiki-changelog*
@@ -4001,7 +4027,7 @@ Contributors and their Github usernames in roughly chronological order:
Issue numbers starting with '#' are issues from Issue numbers starting with '#' are issues from
https://github.com/vimwiki/vimwiki/issues/, all others from https://github.com/vimwiki/vimwiki/issues/, all others from
http://code.google.com/p/vimwiki/issues/list. They may be accessible from https://code.google.com/p/vimwiki/issues/list. They may be accessible from
https://github.com/vimwiki-backup/vimwiki/issues. https://github.com/vimwiki-backup/vimwiki/issues.
From version 2022.12.02, what would have been 2.6.0 under the prior versioning From version 2022.12.02, what would have been 2.6.0 under the prior versioning
@@ -4011,7 +4037,76 @@ master is retained as a legacy mirror of the dev branch.
This is somewhat experimental, and will probably be refined over time. This is somewhat experimental, and will probably be refined over time.
2024.01.24~
New:~ New:~
* PR #1389: Document gLH, gl+, and gL+ mappings
* Tidy some aspects of README.md, remove pointers to defunct Matrix
channel and Google Group, add wikis.world Mastodon account.
2024.01.22~
New:~
* Issue #1279: Fix/Improvement: When re-wrap a long line in a definition
by 'gq' it should insert ':: ' at the new line
* Issue #1211: Support angle bracket escaped markdown urls
* Make auto_tags preserve existing tag section structure
* Issue #1315: GTD-style token highlighting
* Issue #1279: gqq autowrap leading :: definition as &l:comments
* Issue #1332: message URLs on Mac
* Util: add vimwiki#vars#set_syntaxlocal function for consistency
Fixed:~
* Issue #1365: Fix: count ignored when looking up diary frequency Issue
* Issue #1323: Folding code blocks using markdown syntax folds the entire rest of
the file
* Issue #1365: Jumping to nested anchor with markdown
* Issue #1297: Handle multibyte chars properly in table separators
* Issue #1311: Newlines in HTML conversion of codeblocks
* Issue #1326: Duplicate tag generation
* Issue #1324: File name prompt fixes
* Fix vimwiki#diary#calendar_sign when g:vimwiki_list is not set
* Use fnameescape() instead of escape() in edit_file()
* Admit trailing spaces for YAML delimiters
* Minor documentation fixes and CI improvements
2023.04.04~
Fixed:~
* Issue #1229: VimwikiGoto completion with file with space
Must complete file unescaped as argument is then quoted
* PR #1324: Fix pressing escape in VimwikiGoto prompt (rddunphy)
* Issue #1336: vimwiki#diary#calendar_sign throws an error
when g:vimwiki_list is not set
2023.04.04~
New:~
* Issue #1261: Feature: Support for <mark> in Markdown
highlighting with yellow background and back foreground
* Issue #1274: Feature: Continue blockquote when <CR>
is pressed in insert mode
Also add the |blockquote_markers| variable
Fixed:~
* Issue #1267: Improve performance on link creation by speeding up
is_diary_file()
* Issue #1229: Bug: VimwikiGoto without argument creates empty page
* Issue #1316: Permit tags in heading
and improve |VimwikiSearchTags| and |VimwikiRebuildTags|
* Issue #1270: |VimwikiAddHeaderLevel| map (3=) was broken by a previous
refactoring commit
2023.03.15~
New:~
* Issue #150 Fix Math border cases
according to https://pandoc.org/MANUAL.html#math
* Issue #1287 Highlight YAML header with |yaml_metadata_block| * Issue #1287 Highlight YAML header with |yaml_metadata_block|
configuration variable holding region delimiters configuration variable holding region delimiters
@@ -4071,6 +4166,7 @@ New:~
current file current file
* Feature: Add |VimwikiBaddLink| to add links to the buffer list, without * Feature: Add |VimwikiBaddLink| to add links to the buffer list, without
loading, if they weren't listed yet loading, if they weren't listed yet
* PR 1211: Enable parsing Markdown links escaped with angle brackets
Changed:~ Changed:~
* PR #1047: Allow to replace default mapping of VimwikiToggleListItem * PR #1047: Allow to replace default mapping of VimwikiToggleListItem
@@ -4474,7 +4570,7 @@ Summary ~
* Option to disable table mappings. See |g:vimwiki_table_mappings|. * Option to disable table mappings. See |g:vimwiki_table_mappings|.
For detailed information see issues list on For detailed information see issues list on
http://code.google.com/p/vimwiki/issues/list https://code.google.com/p/vimwiki/issues/list
1.2~ 1.2~
@@ -4553,7 +4649,7 @@ http://code.google.com/p/vimwiki/issues/list
17. License *vimwiki-license* 17. License *vimwiki-license*
The MIT License The MIT License
http://www.opensource.org/licenses/mit-license.php https://www.opensource.org/licenses/mit-license.php
Copyright (c) 2008-2010 Maxim Kim Copyright (c) 2008-2010 Maxim Kim
2013-2017 Daniel Schemala 2013-2017 Daniel Schemala
+22 -10
View File
@@ -149,6 +149,10 @@ for bullet in vimwiki#vars#get_syntaxlocal('bullet_types')
" list " list
let comments .= ',fb:' . bullet let comments .= ',fb:' . bullet
endfor endfor
" Add :: for vimwiki default syntax (#1279)
if 'default' ==# vimwiki#vars#get_wikilocal('syntax')
let comments .= ',b:::'
endif
let &l:comments = comments let &l:comments = comments
" Set Format Options: (:h fo-table) " Set Format Options: (:h fo-table)
@@ -189,14 +193,22 @@ function! VimwikiFoldLevel(lnum) abort
" Header/section folding... " Header/section folding...
if line =~# vimwiki#vars#get_syntaxlocal('rxHeader') && !vimwiki#u#is_codeblock(a:lnum) if line =~# vimwiki#vars#get_syntaxlocal('rxHeader') && !vimwiki#u#is_codeblock(a:lnum)
return '>'.vimwiki#u#count_first_sym(line) return '>'.vimwiki#u#count_first_sym(line)
" Code block folding...
elseif line =~# vimwiki#vars#get_syntaxlocal('rxPreStart')
return 'a1'
elseif line =~# vimwiki#vars#get_syntaxlocal('rxPreEnd')
return 's1'
else
return '='
endif endif
" Code block folding...
" -- previously it would always increment when it saw a ```, so we never left the code block. (See #1323)
let prevline = getline(v:lnum - 1)
let nextline = getline(v:lnum + 1)
" -- Start: assumes empty line before
if line =~# vimwiki#vars#get_syntaxlocal('rxPreStart') && prevline =~# '^\s*$'
return 'a1'
" -- End: assumes empty line after
elseif line =~# vimwiki#vars#get_syntaxlocal('rxPreEnd') && nextline =~# '^\s*$'
return 's1'
endif
return '='
endfunction endfunction
@@ -322,7 +334,7 @@ command! -buffer -nargs=0 VWB call vimwiki#base#backlinks()
command! -buffer -nargs=* VimwikiSearch call vimwiki#base#search(<q-args>) command! -buffer -nargs=* VimwikiSearch call vimwiki#base#search(<q-args>)
command! -buffer -nargs=* VWS call vimwiki#base#search(<q-args>) command! -buffer -nargs=* VWS call vimwiki#base#search(<q-args>)
command! -buffer -nargs=* -complete=customlist,vimwiki#base#complete_links_escaped command! -buffer -nargs=* -complete=customlist,vimwiki#base#complete_links_raw
\ VimwikiGoto call vimwiki#base#goto(<q-args>) \ VimwikiGoto call vimwiki#base#goto(<q-args>)
command! -buffer -range VimwikiCheckLinks call vimwiki#base#check_links(<range>, <line1>, <line2>) command! -buffer -range VimwikiCheckLinks call vimwiki#base#check_links(<range>, <line1>, <line2>)
@@ -363,7 +375,7 @@ command! -buffer VimwikiDiaryPrevDay call vimwiki#diary#goto_prev_day()
" tags commands " tags commands
command! -buffer -bang VimwikiRebuildTags call vimwiki#tags#update_tags(1, '<bang>') command! -buffer -bang VimwikiRebuildTags call vimwiki#tags#update_tags(1, '<bang>')
command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags
\ VimwikiSearchTags VimwikiSearch /:<args>:/ \ VimwikiSearchTags call vimwiki#tags#search_tags(<q-args>)
command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags
\ VimwikiGenerateTagLinks call vimwiki#tags#generate_tags(1, <f-args>) \ VimwikiGenerateTagLinks call vimwiki#tags#generate_tags(1, <f-args>)
command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags
@@ -568,7 +580,7 @@ if str2nr(vimwiki#vars#get_global('key_mappings').lists)
inoremap <expr><silent><buffer> <S-CR> pumvisible() ? '<CR>' : '<Esc>:VimwikiReturn 2 2<CR>' inoremap <expr><silent><buffer> <S-CR> pumvisible() ? '<CR>' : '<Esc>:VimwikiReturn 2 2<CR>'
endif endif
endif endif
" change symbol for bulleted lists " change symbol for bulleted lists
for s:char in vimwiki#vars#get_syntaxlocal('bullet_types') for s:char in vimwiki#vars#get_syntaxlocal('bullet_types')
if !hasmapto(':VimwikiChangeSymbolTo '.s:char.'<CR>') if !hasmapto(':VimwikiChangeSymbolTo '.s:char.'<CR>')
+5 -5
View File
@@ -11,7 +11,7 @@ endif
let g:loaded_vimwiki = 1 let g:loaded_vimwiki = 1
" Set to version number for release: " Set to version number for release:
let g:vimwiki_version = '2022.12.02' let g:vimwiki_version = '2024.01.24'
" Get the directory the script is installed in " Get the directory the script is installed in
let s:plugin_dir = expand('<sfile>:p:h:h') let s:plugin_dir = expand('<sfile>:p:h:h')
@@ -366,11 +366,11 @@ command! -count=0 VimwikiTabMakeDiaryNote
command! -count=0 VimwikiMakeYesterdayDiaryNote command! -count=0 VimwikiMakeYesterdayDiaryNote
\ call vimwiki#diary#make_note(<count>, 0, \ call vimwiki#diary#make_note(<count>, 0,
\ vimwiki#diary#diary_date_link(localtime(), -1)) \ vimwiki#diary#diary_date_link(localtime(), -1, <count>))
command! -count=0 VimwikiMakeTomorrowDiaryNote command! -count=0 VimwikiMakeTomorrowDiaryNote
\ call vimwiki#diary#make_note(<count>, 0, \ call vimwiki#diary#make_note(<count>, 0,
\ vimwiki#diary#diary_date_link(localtime(), 1)) \ vimwiki#diary#diary_date_link(localtime(), 1, <count>))
command! VimwikiDiaryGenerateLinks command! VimwikiDiaryGenerateLinks
\ call vimwiki#diary#generate_diary_section() \ call vimwiki#diary#generate_diary_section()
@@ -399,10 +399,10 @@ nnoremap <silent><script> <Plug>VimwikiTabMakeDiaryNote
\ :<C-U>call vimwiki#diary#make_note(v:count, 1)<CR> \ :<C-U>call vimwiki#diary#make_note(v:count, 1)<CR>
nnoremap <silent><script> <Plug>VimwikiMakeYesterdayDiaryNote nnoremap <silent><script> <Plug>VimwikiMakeYesterdayDiaryNote
\ :<C-U>call vimwiki#diary#make_note(v:count, 0, \ :<C-U>call vimwiki#diary#make_note(v:count, 0,
\ vimwiki#diary#diary_date_link(localtime(), -1))<CR> \ vimwiki#diary#diary_date_link(localtime(), -1, v:count))<CR>
nnoremap <silent><script> <Plug>VimwikiMakeTomorrowDiaryNote nnoremap <silent><script> <Plug>VimwikiMakeTomorrowDiaryNote
\ :<C-U>call vimwiki#diary#make_note(v:count, 0, \ :<C-U>call vimwiki#diary#make_note(v:count, 0,
\ vimwiki#diary#diary_date_link(localtime(), 1))<CR> \ vimwiki#diary#diary_date_link(localtime(), 1, v:count))<CR>
" Set default global key mappings " Set default global key mappings
+40 -18
View File
@@ -150,6 +150,31 @@ let s:target = vimwiki#base#apply_template(
call s:add_target_syntax_ON(s:target, 'VimwikiLink') call s:add_target_syntax_ON(s:target, 'VimwikiLink')
" List:
execute 'syntax match VimwikiList /'.vimwiki#vars#get_wikilocal('rxListItemWithoutCB').'/'
execute 'syntax match VimwikiList /'.vimwiki#vars#get_syntaxlocal('rxListDefine').'/'
execute 'syntax match VimwikiListTodo /'.vimwiki#vars#get_wikilocal('rxListItem').'/'
" Task List Done:
if vimwiki#vars#get_global('hl_cb_checked') == 1
execute 'syntax match VimwikiCheckBoxDone /'.vimwiki#vars#get_wikilocal('rxListItemWithoutCB')
\ . '\s*\[['.vimwiki#vars#get_wikilocal('listsyms_list')[-1]
\ . vimwiki#vars#get_global('listsym_rejected')
\ . ']\]\s\(.*\)$/ '
\ . 'contains=' . syntax_dic.nested . ',VimwikiNoExistsLink,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
elseif vimwiki#vars#get_global('hl_cb_checked') == 2
execute 'syntax match VimwikiCheckBoxDone /'
\ . vimwiki#vars#get_wikilocal('rxListItemAndChildren')
\ .'/ contains=VimwikiNoExistsLink,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
endif
" GTD-style token highlighting
syntax match TodoDate '\d\{2,4\}-\d\{2\}-\d\{2\}' contains=VimwikiTodo
syntax match TodoDueDate 'due:\d\{2,4\}-\d\{2\}-\d\{2\}' contains=VimwikiTodo
syntax match TodoProject '\(^\|\W\)+[^[:blank:]]\+' contains=VimwikiTodo
syntax match TodoContext '\(^\|\W\)@[^[:blank:]]\+' contains=VimwikiTodo
" Header Level: 1..6 " Header Level: 1..6
for s:i in range(1,6) for s:i in range(1,6)
" WebLink are for markdown but putting them here avoidcode duplication " WebLink are for markdown but putting them here avoidcode duplication
@@ -236,24 +261,6 @@ syntax match VimwikiTableRow /^\s*|.\+|\s*$/
syntax match VimwikiCellSeparator /\%(|\)\|\%(-\@<=+\-\@=\)\|\%([|+]\@<=-\+\)/ contained syntax match VimwikiCellSeparator /\%(|\)\|\%(-\@<=+\-\@=\)\|\%([|+]\@<=-\+\)/ contained
" List:
execute 'syntax match VimwikiList /'.vimwiki#vars#get_wikilocal('rxListItemWithoutCB').'/'
execute 'syntax match VimwikiList /'.vimwiki#vars#get_syntaxlocal('rxListDefine').'/'
execute 'syntax match VimwikiListTodo /'.vimwiki#vars#get_wikilocal('rxListItem').'/'
" Task List Done:
if vimwiki#vars#get_global('hl_cb_checked') == 1
execute 'syntax match VimwikiCheckBoxDone /'.vimwiki#vars#get_wikilocal('rxListItemWithoutCB')
\ . '\s*\[['.vimwiki#vars#get_wikilocal('listsyms_list')[-1]
\ . vimwiki#vars#get_global('listsym_rejected')
\ . ']\]\s\(.*\)$/ '
\ . 'contains=' . syntax_dic.nested . ',VimwikiNoExistsLink,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
elseif vimwiki#vars#get_global('hl_cb_checked') == 2
execute 'syntax match VimwikiCheckBoxDone /'
\ . vimwiki#vars#get_wikilocal('rxListItemAndChildren')
\ .'/ contains=VimwikiNoExistsLink,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
endif
" Horizontal Rule: <hr> " Horizontal Rule: <hr>
execute 'syntax match VimwikiHR /'.vimwiki#vars#get_syntaxlocal('rxHR').'/' execute 'syntax match VimwikiHR /'.vimwiki#vars#get_syntaxlocal('rxHR').'/'
@@ -327,6 +334,13 @@ for [color_key, color_value] in items(color_dic)
execute cmd execute cmd
endfor endfor
" Html mark tag, feature request in issue #1261
let cmd = 'syntax region VimwikiMarkTag matchgroup=VimwikiDelimiterColor'
\ . ' start=/<mark>/'
\ . ' end=+</mark>+'
\ . ' ' . b:vimwiki_syntax_concealends
execute cmd
" Comment: home made " Comment: home made
execute 'syntax match VimwikiComment /'.vimwiki#vars#get_syntaxlocal('comment_regex'). execute 'syntax match VimwikiComment /'.vimwiki#vars#get_syntaxlocal('comment_regex').
@@ -416,6 +430,8 @@ hi def link VimwikiUnderlineItalicBold VimwikiBoldItalicUnderline
hi def link VimwikiCode PreProc hi def link VimwikiCode PreProc
hi def link VimwikiCodeT VimwikiCode hi def link VimwikiCodeT VimwikiCode
" Mark
hi def VimwikiMarkTag term=bold ctermbg=yellow ctermfg=black guibg=yellow guifg=black
hi def link VimwikiPre PreProc hi def link VimwikiPre PreProc
hi def link VimwikiPreT VimwikiPre hi def link VimwikiPreT VimwikiPre
hi def link VimwikiPreDelim VimwikiPre hi def link VimwikiPreDelim VimwikiPre
@@ -485,6 +501,12 @@ hi def link VimwikiHeaderCharT VimwikiMarkers
hi def link VimwikiLinkCharT VimwikiLinkT hi def link VimwikiLinkCharT VimwikiLinkT
hi def link VimwikiNoExistsLinkCharT VimwikiNoExistsLinkT hi def link VimwikiNoExistsLinkCharT VimwikiNoExistsLinkT
" GTD-style token highlighting
hi def link TodoDate PreProc
hi def link TodoDueDate VimWikiBold
hi def link TodoProject Constant
hi def link TodoContext Statement
" Load syntax-specific functionality " Load syntax-specific functionality
call vimwiki#u#reload_regexes_custom() call vimwiki#u#reload_regexes_custom()
+25
View File
@@ -0,0 +1,25 @@
# Test vimwiki#base#is_diary_file() for various inputs.
Execute (Check known good diary file):
VimwikiIndex 1
let link_infos = vimwiki#base#resolve_link('diary:2020-07-22')
Assert vimwiki#base#is_diary_file(link_infos.filename)
Execute (Check known good diary file using is_diary_file, with list of all diary files - legacy interface):
VimwikiIndex 1
let link_infos = vimwiki#base#resolve_link('diary:2020-07-22')
let diary_file_paths = vimwiki#diary#get_diary_files()
Assert vimwiki#base#is_diary_file(link_infos.filename, diary_file_paths)
Execute (Check known good diary file use is_among_diary_files, with list of all diary files):
VimwikiIndex 1
let link_infos = vimwiki#base#resolve_link('diary:2020-07-22')
let diary_file_paths = vimwiki#diary#get_diary_files()
Assert vimwiki#base#is_among_diary_files(link_infos.filename, diary_file_paths)
Execute (Check for nonexistent diary file):
VimwikiIndex 1
Assert !vimwiki#base#is_diary_file('not-a-diary-file')
Execute (Clean):
call ReloadVimwiki()
+6 -6
View File
@@ -40,7 +40,7 @@ Do (,wn buzz_bo + Completion(input()) && Assert):
Execute (:VimwikiGoto + Completion (API)): Execute (:VimwikiGoto + Completion (API)):
VimwikiIndex 2 VimwikiIndex 2
AssertEqual $HOME . '/testmarkdown/index.md', expand('%') AssertEqual $HOME . '/testmarkdown/index.md', expand('%')
let s_complete=string(vimwiki#base#get_globlinks_escaped()) let s_complete=string(vimwiki#base#get_globlinks_raw())
Assert -1 != stridx(s_complete, 'buzz_bozz') Assert -1 != stridx(s_complete, 'buzz_bozz')
Execute (Create dir1/dir2/test_goto_file.md): Execute (Create dir1/dir2/test_goto_file.md):
@@ -55,23 +55,23 @@ Execute (:VimwikiGoto + Completion in directory):
AssertEqual $HOME . '/testmarkdown/index.md', expand('%') AssertEqual $HOME . '/testmarkdown/index.md', expand('%')
" Complete without argment " Complete without argment
let s_complete1=string(vimwiki#base#get_globlinks_escaped()) let s_complete1=string(vimwiki#base#get_globlinks_raw())
Assert -1 != stridx(s_complete1, 'test_goto_file') Assert -1 != stridx(s_complete1, 'test_goto_file')
" Complete with file argument " Complete with file argument
let s_complete2=string(vimwiki#base#get_globlinks_escaped('test_goto_file')) let s_complete2=string(vimwiki#base#get_globlinks_raw('test_goto_file'))
Assert -1 != stridx(s_complete2, 'test_goto_file') Assert -1 != stridx(s_complete2, 'test_goto_file')
" Complete with start of file argument " Complete with start of file argument
let s_complete3=string(vimwiki#base#get_globlinks_escaped('test_got')) let s_complete3=string(vimwiki#base#get_globlinks_raw('test_got'))
Assert -1 != stridx(s_complete3, 'test_goto_file') Assert -1 != stridx(s_complete3, 'test_goto_file')
" Complete with (nested) dir2 argument " Complete with (nested) dir2 argument
let s_complete4=string(vimwiki#base#get_globlinks_escaped('dir2')) let s_complete4=string(vimwiki#base#get_globlinks_raw('dir2'))
Assert -1 != stridx(s_complete4, 'test_goto_file') Assert -1 != stridx(s_complete4, 'test_goto_file')
" Complete with bad argument " Complete with bad argument
let l_complete5=vimwiki#base#get_globlinks_escaped('this_string_is_nowhere') let l_complete5=vimwiki#base#get_globlinks_raw('this_string_is_nowhere')
let s_complete5=string(l_complete5) let s_complete5=string(l_complete5)
Assert -1 == stridx(s_complete5, 'test_goto_file') Assert -1 == stridx(s_complete5, 'test_goto_file')
AssertEqual 0, len(l_complete5) AssertEqual 0, len(l_complete5)
+35
View File
@@ -0,0 +1,35 @@
# Issue: #1261: Feature: Support for <mark> in Markdown
Given vimwiki (Single line mark):
<mark>Single line</mark>
01234567890
Execute (Set syntax markdown):
call SetSyntax('markdown')
Execute (Assert all is yaml except after the closing ---):
AssertEqual 'VimwikiMarkTag1', GetSyntaxStack(1, 7)[0] . 1
AssertEqual '02', len(GetSyntaxStack(2, 7)) . 2
Given vimwiki (Multiple line mark):
<mark>Start
Multiple
Line
end</mark>
01234567890
Execute (Set syntax markdown):
call SetSyntax('markdown')
Execute (Assert all is yaml except after the closing ---):
AssertEqual 'VimwikiMarkTag1', GetSyntaxStack(1, 7)[0] . 1
AssertEqual 'VimwikiMarkTag2', GetSyntaxStack(2, 2)[0] . 2
AssertEqual 'VimwikiMarkTag3', GetSyntaxStack(3, 2)[0] . 3
AssertEqual 'VimwikiMarkTag4', GetSyntaxStack(4, 2)[0] . 4
AssertEqual '05', len(GetSyntaxStack(5, 7)) . 5
+41
View File
@@ -0,0 +1,41 @@
# Non regression tests for issue: #1270
Given vimwiki (Dummy heading):
# Test
Execute (Set syntax markdown):
call SetSyntax('markdown')
Execute (call add header 1):
call vimwiki#base#AddHeaderLevel(1)
Expect (Heading 2):
## Test
Execute (call add header 2):
call vimwiki#base#AddHeaderLevel(2)
Expect (Heading 3):
### Test
Execute (call add header 5):
call vimwiki#base#AddHeaderLevel(5)
Expect (Heading6):
###### Test
Do (5=):
5=
Expect (Heading6):
###### Test
Given vimwiki (Dummy heading 6):
###### Test
Do (5-):
5-
Expect (Heading decreased by 5):
# Test
+75
View File
@@ -0,0 +1,75 @@
# Issue: #1274
# Feature: Markdown -- Continue blockquote when <CR> is pressed in insert mode.
Given vimwiki (Blockquote with test {{{1):
> Dummy text 1
Execute (Set syntax markdown):
call SetSyntax('markdown')
Do (Press insert, enter and type):
A
\<Cr>
Dummy text 2
Expect(Marker added 1):
> Dummy text 1
> Dummy text 2
Do (Press o and type):
o
Dummy text 2
Expect(Marker added 2):
> Dummy text 1
> Dummy text 2
Do (Press O and type):
O
Dummy text 2
Expect(Marker added 3, above):
> Dummy text 2
> Dummy text 1
Given vimwiki (Blockquote without test {{{1):
>
Do (Press insert, enter and type):
A
\<Cr>
Dummy text 2
Expect(Marker removed):
Dummy text 2
Do (Press o):
o
Dummy text 2
Expect(Marker appended, below):
>
> Dummy text 2
Do (Press O):
O
Dummy text 2
Expect(Marker appended, above):
> Dummy text 2
>
+32
View File
@@ -0,0 +1,32 @@
# Non regression tests for issue: #1279
# Fix/Improvement: When re-wrap a long line in a definition by 'gq' it should insert ':: ' at the new line
Given vimwiki (Dummy heading):
:: aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa
Do (gqq):
gqq
Expect (Wrapped with the :: prefix prepended):
:: aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa
:: aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa
:: aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa
:: aaa aaa aaa
Given vimwiki (Small heading):
:: aaa
Execute (Log):
call SetSyntax("default")
Log 'Comments: ' . &comments
Log 'Formatoptions: ' . &formatoptions
Log 'Blockquote_markers: ' . string(vimwiki#vars#get_syntaxlocal('blockquote_markers'))
Log 'Syntax: ' . vimwiki#vars#get_wikilocal('syntax')
Do (A <CR>):
A\<CR>
Expect (Bloquote prefix :: inserted):
:: aaa
::
+7
View File
@@ -5,13 +5,20 @@ Before(Define function for yaml inspection):
function! Issue1287Yaml(line) function! Issue1287Yaml(line)
" The line where the yaml delimiter is: 1 if at top " The line where the yaml delimiter is: 1 if at top
let l = a:line let l = a:line
Log "1: " . string(GetSyntaxStack(l + 0, 2))
AssertEqual 'textSnipYAML', GetSyntaxStack(l + 0, 2)[0] AssertEqual 'textSnipYAML', GetSyntaxStack(l + 0, 2)[0]
Log '2: ' . string(GetSyntaxStack(l + 0, 2))
AssertEqual 'VimwikiPre', GetSyntaxStack(l + 0, 2)[1] AssertEqual 'VimwikiPre', GetSyntaxStack(l + 0, 2)[1]
Log '3: ' . string(GetSyntaxStack(l + 1, 2))
AssertEqual 'textSnipYAML', GetSyntaxStack(l + 1, 2)[0] AssertEqual 'textSnipYAML', GetSyntaxStack(l + 1, 2)[0]
Log '4: ' . string(GetSyntaxStack(l + 2, 2))
AssertEqual 'textSnipYAML', GetSyntaxStack(l + 2, 2)[0] AssertEqual 'textSnipYAML', GetSyntaxStack(l + 2, 2)[0]
Log '5: ' . string(GetSyntaxStack(l + 2, 20))
AssertEqual 'textSnipYAML', GetSyntaxStack(l + 2, 20)[0] AssertEqual 'textSnipYAML', GetSyntaxStack(l + 2, 20)[0]
Log '6: ' . string(GetSyntaxStack(l + 3, 2))
AssertEqual 'VimwikiPre', GetSyntaxStack(l + 3, 2)[-1] AssertEqual 'VimwikiPre', GetSyntaxStack(l + 3, 2)[-1]
endfunction endfunction
+45
View File
@@ -0,0 +1,45 @@
# Non regression tests for issue TODO
# -- TODO copy-paste issue description
#
# Syntax: https://github.com/junegunn/vader.vim#syntax-of-vader-file
# Run: bash run_tests.sh -v -t vader -n vim_7.3.429 -f issue_example.vader
Given vimwiki (Empty file):
Execute (Set vimwiki property rxTableSep):
call SetSyntax('markdown')
call vimwiki#vars#set_syntaxlocal('rxTableSep', '│' )
AssertEqual '│', vimwiki#vars#get_syntaxlocal('rxTableSep'), "Conf has been changed"
Execute(VimwikiTable):
VimwikiTable
Expect (Unicode table created):
│ │ │ │ │ │
│---│---│---│---│---│
│ │ │ │ │ │
Given vimwiki (Unicode table):
│ bla bla bla │ │ │ │ │
│---│---│---│---│---│
│ │ │ │ │ │
Execute (Rename file wiki_test.md for table expand):
file wiki_test.md
call SetSyntax('markdown')
call vimwiki#vars#set_syntaxlocal('rxTableSep', '│' )
Do (Expand table):
:AssertEqual '│', vimwiki#vars#get_syntaxlocal('rxTableSep'), "Conf has been changed"\<Cr>
A
Expect (Unicode table expanded):
│ bla bla bla │ │ │ │ │
│-------------│---│---│---│---│
│ │ │ │ │ │
@@ -0,0 +1,36 @@
# Non regression tests for issue #1311
# -- Can't enable syntax highlighting for codes in HTML files when converting wiki to HTML
#
# Syntax: https://github.com/junegunn/vader.vim#syntax-of-vader-file
# Run: bash run_tests.sh -v -t vader -n vim_7.3.429 -f issue_example.vader
Given vimwiki (Input file with python code):
{{{type=py
if (a == 2):
print("2")
else:
print("other")
}}}
Execute (Convert to HTML):
Log "HTML path: " . vimwiki#vars#get_wikilocal('path_html')
let g:bck_command = g:vimwiki_global_vars['listing_hl_command']
let g:vimwiki_global_vars['listing_hl_command'] = 'cat'
call ConvertWiki2Body()
g/^\s*$/d
Expect (Output with good newlines):
<pre type=py>
if (a == 2):
print("2")
else:
print("other")
</pre>
Execute (restore):
let g:vimwiki_global_vars['listing_hl_command'] = g:bck_command
+36
View File
@@ -0,0 +1,36 @@
# Non regression tests for issue:
# -- How to turn off inline math highlights?
Given vimwiki (All math inline possible):
12345678901234567890123456789
2023-06-22
23-06-22
due:2023-06-22
+ProjectName project description
@ContextName context description
Other +ProjectName and desc
Other @ContectName and desc
Execute (Assert all lines):
# Math
AssertEqual 'normal', GetSyntaxVimwiki(1, 1)
AssertEqual 'TodoDate', GetSyntaxVimwiki(2, 1)
AssertEqual 'TodoDate', GetSyntaxVimwiki(3, 1)
AssertEqual 'TodoDueDate', GetSyntaxVimwiki(4, 1)
AssertEqual 'TodoProject', GetSyntaxVimwiki(6, 1)
AssertEqual 'normal', GetSyntaxVimwiki(6, 15)
AssertEqual 'TodoContext', GetSyntaxVimwiki(7, 1)
AssertEqual 'normal', GetSyntaxVimwiki(7, 15)
AssertEqual 'normal', GetSyntaxVimwiki(9, 1)
AssertEqual 'TodoProject', GetSyntaxVimwiki(9, 10)
AssertEqual 'normal', GetSyntaxVimwiki(9, 20)
AssertEqual 'normal', GetSyntaxVimwiki(10, 1)
AssertEqual 'TodoContext', GetSyntaxVimwiki(10, 10)
AssertEqual 'normal', GetSyntaxVimwiki(10, 20)
+46
View File
@@ -0,0 +1,46 @@
# Non regression tests for issue 1323
# -- Folding code blocks using markdown syntax folds the entire rest of the file #1323
#
# Syntax: https://github.com/junegunn/vader.vim#syntax-of-vader-file
# Run: bash run_tests.sh -v -t vader -n vim_7.3.429 -f issue_example.vader
Given vimwiki (Input file):
# Header
```sql
SELECT blah FROM bleh;
```
More text in session one
# Header two
More text in session two
Execute (Cheat vars):
call SetSyntax('markdown')
let old_foldexpr = &foldexpr
let old_foldmethod = &foldmethod
set foldexpr=VimwikiFoldLevel(v:lnum)
set foldmethod=expr
Execute (Call function to verify):
AssertEqual 'line 1 => 1', 'line 1 => ' . foldlevel(1)
AssertEqual 'line 2 => 1', 'line 2 => ' . foldlevel(2)
AssertEqual 'line 3 => 2', 'line 3 => ' . foldlevel(3)
AssertEqual 'line 4 => 2', 'line 4 => ' . foldlevel(4)
AssertEqual 'line 5 => 2', 'line 5 => ' . foldlevel(5)
AssertEqual 'line 6 => 1', 'line 6 => ' . foldlevel(6)
AssertEqual 'line 7 => 1', 'line 7 => ' . foldlevel(7)
AssertEqual 'line 8 => 1', 'line 8 => ' . foldlevel(8)
AssertEqual 'line 9 => 0', 'line 9 => ' . foldlevel(9)
# AssertEqual 'line 10 => 1', 'line 10 => ' . foldlevel(10)
# AssertEqual 'line 11 => 1', 'line 11 => ' . foldlevel(11)
Execute (Restore vars):
# call SetSyntax('default')
let &foldexpr = old_foldexpr
let &foldmethod = old_foldmethod
+29
View File
@@ -0,0 +1,29 @@
# Non regression tests for issue: #1325
# -- Bold syntax highlighting broken for default syntax since 72d0220 (tk Brennen)
Given vimwiki (All math inline possible):
*foo:* bar #1: Bold
<!-- exec-raw zsh -c 'grep --exclude-dir="*logscratch" -rino -- "- \[ \].*$" ~/notes/vimwiki' | perl -pe 's{^/home/brennen/notes/vimwiki/(.*?)\.wiki:(\d+):- \[ \] (.*?)$}{ - [[$1|$1]] - ($2) $3}' -->
# 2: Online comment # 3
<!--
multiple line # 5
comment # 6
-->
123456789
Execute (Set syntax wiki):
call SetSyntax('default')
Log &foldexpr
Log &foldmethod
Execute (Assert syntax):
# Bold
# AssertEqual 'VimwikiBold1', GetSyntaxStack(1, 2)[0] . 1
AssertEqual '02', len(GetSyntaxStack(1, 8)) . 2
# HTML Comment
AssertEqual 'VimwikiComment3', GetSyntaxStack(2, 6)[0] . 3
# Multiline HTML Comment
AssertEqual 'VimwikiComment4', GetSyntaxStack(5, 2)[0] . 4
@@ -0,0 +1,65 @@
# Tests for issue: 1326
# Multiple discrete tags on one line
# cause duplicate entries in .vimwiki_tags
# For example, this line:
# :tag1:tag2:
# gives correct results in .vimwiki_tags when VimwikiRebuildTags is called.
# This line
# :tag3: :tag4:
# gives duplicate entries for tag4.
Execute (Start with no content or .vimwiki_tags files - Start issue 1326 test):
call system("rm $HOME/testwiki/.vimwiki_tags")
call system("rm $HOME/testwiki/Test-Tag-issue-1326.wiki")
Do (Create file with tags and rebuild all tags):
:edit! $HOME/testwiki/Test-Tag-issue-1326.wiki\<CR>
I
:discrete1: :discrete2:\<CR>
:concat1:concat2:\<CR>
:mixed1:mixed2: :mixed3: :mixed4:\<CR>
\<Esc>
:write\<CR>
:VimwikiRebuildTags!\<CR>
Execute (Examine .vimwiki_tags file for generated tag entries.):
edit $HOME/testwiki/.vimwiki_tags
AssertEqual $HOME . '/testwiki/.vimwiki_tags', expand('%')
AssertEqual 'default', vimwiki#vars#get_wikilocal('syntax')
AssertEqual 0, vimwiki#vars#get_bufferlocal('wiki_nr')
# For each tag, make sure it is found # once and ONLY once in
# the .vimwiki_tags file.
# The "AssertNotEqual" tests that the tag is present at least once.
# The "AssertEqual" searches for the tag 2 times and checks that the
# line number where it was found is the same both times.
# The 'w' flag tells search to wrap around at the end of the file.
# The 'e' flag makes search position the cursor at the end of the match.
AssertNotEqual 0, search('concat1', 'we'), 'Expected tag "concat1" was not found.'
AssertEqual search('concat1', 'we'), search('concat1', 'we'), 'More than 1 instance of tag "concat1" found'
AssertNotEqual 0, search('concat2', 'we'), 'Expected tag "concat2" was not found.'
AssertEqual search('concat2', 'we'), search('concat2', 'we'), 'More than 1 instance of tag "concat2" found'
AssertNotEqual 0, search('discrete1', 'we'), 'Expected tag "discrete1" was not found.'
AssertEqual search('discrete1', 'we'), search('discrete1', 'we'), 'More than 1 instance of tag "discrete1" found'
AssertNotEqual 0, search('discrete2', 'we'), 'Expected tag "discrete2" was not found.'
AssertEqual search('discrete2', 'we'), search('discrete2', 'we'), 'More than 1 instance of tag "discrete2" found'
AssertNotEqual 0, search('mixed1', 'we'), 'Expected tag "mixed1" was not found.'
AssertEqual search('mixed1', 'we'), search('mixed1', 'we'), 'More than 1 instance of tag "mixed1" found'
AssertNotEqual 0, search('mixed2', 'we'), 'Expected tag "mixed2" was not found.'
AssertEqual search('mixed2', 'we'), search('mixed2', 'we'), 'More than 1 instance of tag "mixed2" found'
AssertNotEqual 0, search('mixed3', 'we'), 'Expected tag "mixed3" was not found.'
AssertEqual search('mixed3', 'we'), search('mixed3', 'we'), 'More than 1 instance of tag "mixed3" found'
AssertNotEqual 0, search('mixed4', 'we'), 'Expected tag "mixed4" was not found.'
AssertEqual search('mixed4', 'we'), search('mixed4', 'we'), 'More than 1 instance of tag "mixed4" found'
Execute (Remove content and tags files - End issue 1326 test):
call system("rm $HOME/testwiki/.vimwiki_tags")
call system("rm $HOME/testwiki/Test-Tag-issue-1326.wiki")
+148
View File
@@ -0,0 +1,148 @@
# Non regression tests for issue TODO
# -- TODO copy-paste issue description
#
# Syntax: https://github.com/junegunn/vader.vim#syntax-of-vader-file
# Run: bash run_tests.sh -v -t vader -n vim_7.3.429 -f issue_example.vader
Given vimwiki (Input file):
[this](#TopCategoryOne)
[that](#TopCategoryTwo)
[Here, we correctly jump to T1-S2](#TopCategoryOne#SubCategoryTwo)
[Here, however, we incorrectly land at T1-S2](#TopCategoryTwo#SubCategoryTwo)
[T2-S3 works, likely because T1-S3 doesn't exist](#TopCategoryTwo#SubCategoryThree)
# TopCategoryOne
## SubCategoryOne
## SubCategoryTwo
# TopCategoryTwo
## SubCategoryOne
## SubCategoryTwo
## SubCategoryThree
Execute (Set syntax markdown):
call SetSyntax('markdown')
file issue1356.md
Log 'Initial file:' . resolve(expand('%:p'))
Do (Jump1):
1G
\<Cr>
A--Link1\<Esc>
Expect(Link1):
[this](#TopCategoryOne)
[that](#TopCategoryTwo)
[Here, we correctly jump to T1-S2](#TopCategoryOne#SubCategoryTwo)
[Here, however, we incorrectly land at T1-S2](#TopCategoryTwo#SubCategoryTwo)
[T2-S3 works, likely because T1-S3 doesn't exist](#TopCategoryTwo#SubCategoryThree)
# TopCategoryOne--Link1
## SubCategoryOne
## SubCategoryTwo
# TopCategoryTwo
## SubCategoryOne
## SubCategoryTwo
## SubCategoryThree
Do (Jump2):
2G
\<Cr>
A--Link2\<Esc>
Expect (Link2):
[this](#TopCategoryOne)
[that](#TopCategoryTwo)
[Here, we correctly jump to T1-S2](#TopCategoryOne#SubCategoryTwo)
[Here, however, we incorrectly land at T1-S2](#TopCategoryTwo#SubCategoryTwo)
[T2-S3 works, likely because T1-S3 doesn't exist](#TopCategoryTwo#SubCategoryThree)
# TopCategoryOne
## SubCategoryOne
## SubCategoryTwo
# TopCategoryTwo--Link2
## SubCategoryOne
## SubCategoryTwo
## SubCategoryThree
Do (Jump3):
3G
\<Cr>
A--Link3\<Esc>
Expect (Link3):
[this](#TopCategoryOne)
[that](#TopCategoryTwo)
[Here, we correctly jump to T1-S2](#TopCategoryOne#SubCategoryTwo)
[Here, however, we incorrectly land at T1-S2](#TopCategoryTwo#SubCategoryTwo)
[T2-S3 works, likely because T1-S3 doesn't exist](#TopCategoryTwo#SubCategoryThree)
# TopCategoryOne
## SubCategoryOne
## SubCategoryTwo--Link3
# TopCategoryTwo
## SubCategoryOne
## SubCategoryTwo
## SubCategoryThree
Do (Jump4):
4G
\<Cr>
A--Link4\<Esc>
Expect (Link4):
[this](#TopCategoryOne)
[that](#TopCategoryTwo)
[Here, we correctly jump to T1-S2](#TopCategoryOne#SubCategoryTwo)
[Here, however, we incorrectly land at T1-S2](#TopCategoryTwo#SubCategoryTwo)
[T2-S3 works, likely because T1-S3 doesn't exist](#TopCategoryTwo#SubCategoryThree)
# TopCategoryOne
## SubCategoryOne
## SubCategoryTwo
# TopCategoryTwo
## SubCategoryOne
## SubCategoryTwo--Link4
## SubCategoryThree
Do (Jump5):
5G
\<Cr>
A--Link5\<Esc>
Expect (Link5):
[this](#TopCategoryOne)
[that](#TopCategoryTwo)
[Here, we correctly jump to T1-S2](#TopCategoryOne#SubCategoryTwo)
[Here, however, we incorrectly land at T1-S2](#TopCategoryTwo#SubCategoryTwo)
[T2-S3 works, likely because T1-S3 doesn't exist](#TopCategoryTwo#SubCategoryThree)
# TopCategoryOne
## SubCategoryOne
## SubCategoryTwo
# TopCategoryTwo
## SubCategoryOne
## SubCategoryTwo
## SubCategoryThree--Link5
+16
View File
@@ -0,0 +1,16 @@
# Non regression tests for issue TODO
# -- TODO copy-paste issue description
#
# Syntax: https://github.com/junegunn/vader.vim#syntax-of-vader-file
# Run: bash run_tests.sh -v -t vader -n vim_7.3.429 -f issue_example.vader
Given vimwiki (Input file):
test
Execute (Call function to verify):
echo 'Dummy command, not displayed'
Log 'Debug message displayed in Vader output'
AssertEqual 'test', getline(1), 'Dummy assertion'
Expect (Output file):
test
+235 -192
View File
@@ -1,24 +1,18 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# shellcheck disable=SC2155 # Declare and assign separately to avoid masking return values
# credit to https://github.com/w0rp/ale for script ideas and the color vader : '
# output function. Vimwiki vader test script
# Say Hi Credit: https://github.com/w0rp/ale for script ideas and the color vader output function.
echo -en "Starting $(basename "$0") for VimWiki\n" '
start_time=$(date +%s)
red='\033[0;31m' # Capture start time now
green='\033[0;32m' declare -g start_time=$(date +%s)
nc='\033[0m'
# For windows: Cmder bash is appending busybox to the path and
# and a smlll vim is included, so that override the windows path vim
if [[ -v OLD_PATH ]]; then
echo "Setting path from OLD_PATH : $OLD_PATH"
export PATH="$OLD_PATH"
fi
printHelp() { printHelp() {
: 'Print usage to stdout'
cat << ' EOF' | sed -e 's/^ //' cat << ' EOF' | sed -e 's/^ //'
Usage: bash run_tests.sh [OPTIONS] Usage: bash run_tests.sh [OPTIONS]
@@ -56,8 +50,144 @@ printHelp() {
} }
run_test(){
: 'Main function'
local -i res=0
# Hi
echo -en "Starting $(basename "$0") for VimWiki\n"
# Hook ctrl-c or ctrl-z to stop tests
trap exit 1 SIGINT SIGTERM
# For windows: Cmder bash is appending busybox to the path and
# and a smlll vim is included, so that override the windows path vim
if [[ -v OLD_PATH ]]; then
echo "Setting path from OLD_PATH : $OLD_PATH"
export PATH="$OLD_PATH"
fi
# WORK
parse_argument "$@"; ((res |= $?))
execute_test_argument; ((res |= $?))
# Print ellapsed time (after calculate it)
end_time=$(date +%s)
sec_time=$((end_time - start_time))
printf -v script_time '%dh:%dm:%ds' $((sec_time/3600)) $((sec_time%3600/60)) $((sec_time%60))
echo -ne "Script $(basename "$0"), in $script_time, Returned -> $res\n\n"
return "$res"
}
parse_argument(){
: 'Parse user argument'
# Declare color helper
declare -g red='\033[0;31m'
declare -g green='\033[0;32m'
declare -g nc='\033[0m'
# Declare: Path of the script, supposing no spaces
declare -g g_script_file=$(dirname "$0")
declare -g g_script_path=$(realpath "$g_script_file")
declare -g g_wiki_path=$(realpath "$g_script_path/..")
declare -g g_tmp_dir=$(dirname "$(mktemp -u)")
# Declare: list of vim/nvim versions
declare -g g_vers="$(print_versions)"
# Declare: type of tests to run - vader/vint/all
declare -g g_type="all"
# Declare: verbose output flag
declare -g g_verbose=0
# Declare: only run these tests
declare -g g_file_test=""
# Declare: docker flags
declare -g flags=(--rm -v "$PWD/../:/testplugin" -v "$PWD/../test:/home" -w /testplugin vimwiki)
# Parse all argument options
while getopts ":hvn:lt:f:" opt; do
case ${opt} in
h)
printHelp
;;
n)
g_vers="$OPTARG"
;;
v)
g_verbose=1
;;
l)
print_versions
;;
t)
g_type="$OPTARG"
;;
f)
g_file_test="$OPTARG"
;;
\?)
echo "Invalid option: $OPTARG" 1>&2
exit 1
;;
:)
echo "Invalid option: $OPTARG requires an argument" 1>&2
exit 1
;;
esac
done
# Shift out parameters already processed
shift $((OPTIND -1))
# Handle error for non-option arguments
if [[ $# -ne 0 ]]; then
echo "Error: Got $# non-option arguments." 1>&2
exit 1
fi
}
execute_test_argument(){
: 'Execute test according to global variable'
# Global error return of the script
local -i res=0 ret=0
# Select and run tests
case $g_type in
vader)
run_vader; ret=$?
echo "Main Vader: returned $ret"
((res |= ret))
;;
vint)
run_vint; ret=$?
echo "Main Vint: returned $ret"
((res |= ret))
;;
all)
run_vint; ret=$?
echo "Main Vint: returned $ret"
((res |= ret))
run_vader; ret=$?
echo "Main Vader: returned $ret"
((res |= ret))
;;
*)
echo "Error: invalid type - '$g_type'" 1>&2
exit 1
esac
return "$res"
}
print_versions() { print_versions() {
# Print the names of all vim/nvim versions : 'Print the names of all vim/nvim versions'
# Get all possible version <- Dockerfile # Get all possible version <- Dockerfile
sed -n 's/.* -name \([^ ]*\) .*/\1/p' ../Dockerfile sed -n 's/.* -name \([^ ]*\) .*/\1/p' ../Dockerfile
exit 0 exit 0
@@ -65,33 +195,36 @@ print_versions() {
run_vader() { run_vader() {
# Run Vader tests : 'Run Vader tests'
echo -e "\nStarting Vader tests." echo -e "\nStarting Vader tests."
local err=0 local -i res=0
local opt='' current_test=''
echo "Tin 1 $g_file_test"
# Parse tests files to execute # Parse tests files to execute
if [[ -z $file_test ]]; then if [[ -z "$g_file_test" ]]; then
res="test/*" opt="test/*"
else else
read -ra TEST <<< "$file_test" read -ra TEST <<< "$g_file_test"
for i in "${TEST[@]}"; do for current_test in "${TEST[@]}"; do
# Remove quotes # Remove quotes
i=${i#\'} current_test=${current_test#\'}
i=${i%\'} current_test=${current_test%\'}
if [[ "$i" == *"*"* ]]; then if [[ "$current_test" == *"*"* ]]; then
res="$res test/${i}" opt+=" test/${current_test}"
elif [[ -f "$i" ]]; then elif [[ -f "$current_test" ]]; then
res="$res test/${i}" opt+=" test/${current_test}"
elif [[ -f "${i}.vader" ]]; then elif [[ -f "${current_test}.vader" ]]; then
res="$res test/${i}.vader" opt+=" test/${current_test}.vader"
else else
printf "WARNING: Test \"%s\" not found.\n", "$i" printf "WARNING: Test \"%s\" not found.\n", "$current_test"
fi fi
done done
fi fi
echo "Tin 2 $opt"
# Run tests for each specified version # Run tests for each specified version
for v in $vers; do for v in $g_vers; do
echo -e "\n\nRunning version: $v" echo -e "\n\nRunning version: $v"
echo -e "=============================" echo -e "============================="
@@ -101,14 +234,14 @@ run_vader() {
home_save="$HOME" home_save="$HOME"
# Create temporary root # Create temporary root
mkdir -p "$tmp_dir/vader_wiki" mkdir -p "$g_tmp_dir/vader_wiki"
mkdir -p "$tmp_dir/vader_wiki/home" mkdir -p "$g_tmp_dir/vader_wiki/home"
mkdir -p "$tmp_dir/vader_wiki/home/test" mkdir -p "$g_tmp_dir/vader_wiki/home/test"
mkdir -p "$tmp_dir/vader_wiki/testplugin" mkdir -p "$g_tmp_dir/vader_wiki/testplugin"
# Set vars # Set vars
export ROOT="$tmp_dir/vader_wiki/" export ROOT="$g_tmp_dir/vader_wiki/"
export HOME="$tmp_dir/vader_wiki/home" export HOME="$g_tmp_dir/vader_wiki/home"
vim="vim" vim="vim"
vim_opt="-u ~/test/vimrc" vim_opt="-u ~/test/vimrc"
else else
@@ -134,11 +267,11 @@ run_vader() {
# flags=(--rm -v "$PWD/../:/testplugin" -v "$PWD/../test:/home" -w /testplugin vimwiki) # flags=(--rm -v "$PWD/../:/testplugin" -v "$PWD/../test:/home" -w /testplugin vimwiki)
echo -e "\nCopying resources to $ROOT" echo -e "\nCopying resources to $ROOT"
# Copy testplugin # Copy testplugin
cp -rf "$wiki_path/"* "$ROOT/testplugin/" cp -rf "$g_wiki_path/"* "$ROOT/testplugin/"
# Copy home # Copy home
cp -rf "$script_path/"* "$HOME/test/" cp -rf "$g_script_path/"* "$HOME/test/"
# Copy rtp.vim # Copy rtp.vim
cp -rf "$script_path/resources/rtp_local.vim" "$ROOT/rtp.vim" cp -rf "$g_script_path/resources/rtp_local.vim" "$ROOT/rtp.vim"
# Copy vader <- internet # Copy vader <- internet
echo 'Cloning Vader (git, do not care the fatal)' echo 'Cloning Vader (git, do not care the fatal)'
git clone --depth 10 https://github.com/junegunn/vader.vim /tmp/vader_wiki/vader 2>&1 git clone --depth 10 https://github.com/junegunn/vader.vim /tmp/vader_wiki/vader 2>&1
@@ -146,113 +279,119 @@ run_vader() {
# Run batch of tests # Run batch of tests
# shellcheck disable=SC2086,SC2206 # shellcheck disable=SC2086,SC2206
if [[ "$res" != "" ]]; then if [[ "$opt" != "" ]]; then
if [[ "$v" == "local" ]]; then if [[ "$v" == "local" ]]; then
pushd "$tmp_dir/vader_wiki/testplugin" \ pushd "$g_tmp_dir/vader_wiki/testplugin" \
|| echo 'Warning pushd testplugin failed' || echo 'Warning pushd testplugin failed'
# Run the tests # Run the tests
fcmd(){ fcmd(){
$vim $vim_opt "+Vader! ${res}" 2>&1 \ $vim $vim_opt "+Vader! ${opt}" 2>&1 \
| vader_filter | vader_color | vader_filter | vader_color
return ${PIPESTATUS[1]} return ${PIPESTATUS[1]}
} }
echo -e "\nStarting Batch Vim/Vader:\n<- $res\n" echo -e "\nStarting Batch Vim/Vader:\n<- $opt\n"
type fcmd | sed -n '/^ /{s/^ //p}' | sed '$s/.*/&;/' ; shift ; type fcmd | sed -n '/^ /{s/^ //p}' | sed '$s/.*/&;/' ; shift ;
fcmd; ret=$? fcmd; ret=$?
err=$(( err + ret ))
echo -e "\nReturned Batch Vim/Vader -> $ret" echo -e "\nReturned Batch Vim/Vader -> $ret"
(( res |= ret ))
popd \ popd || echo 'Warning popd failed'
|| echo 'Warning popd also failed'
else else
# In docker # In docker
fcmd() { fcmd() {
docker run -a stderr -e "VADER_OUTPUT_FILE=/dev/stderr" \ docker run -a stderr -e "VADER_OUTPUT_FILE=/dev/stderr" \
"${flags[@]}" "$v" $vim_opt "+Vader! ${res}" 2>&1 \ "${flags[@]}" "$v" $vim_opt "+Vader! ${opt}" 2>&1 \
| vader_filter | vader_color | vader_filter | vader_color
return ${PIPESTATUS[1]} return ${PIPESTATUS[1]}
} }
echo -e "\nStarting Batch Vim/Vader:\n<- $res\n" echo -e "\nStarting Batch Vim/Vader with: $opt\n"
type fcmd | sed -n '/^ /{s/^ //p}' | sed '$s/.*/&;/' ; shift ; type fcmd | sed -n '/^ /{s/^ //p}' | sed '$s/.*/&;/' ; shift ;
fcmd; ret=$? fcmd; ret=$?
err=$(( err + ret ))
echo -e "\nReturned Batch Docker/Vim/Vader -> $ret : ${PIPESTATUS[*]}" echo -e "\nReturned Batch Docker/Vim/Vader -> $ret : ${PIPESTATUS[*]}"
(( res |= ret ))
fi fi
fi fi
#set +o pipefail #set +o pipefail
# Restore what must (I know it should be refactored in a while) # Restore what must (I know it should be refactored in a while)
if [[ "$v" == "local" ]]; then if [[ "$v" == local ]]; then
export HOME=$home_save export HOME=$home_save
fi fi
done done
return $err return "$res"
} }
run_vint() { run_vint() {
local err=0 : 'Run Vint test'
cmd="vint -s . && vint -s test/vimrc" local -i res=0
if echo "$vers" | grep "local" > /dev/null; then
echo -e "\nRunning Vint: $cmd : in $wiki_path" local cmd="vint -s . && vint -s test/vimrc"
pushd "$wiki_path" > /dev/null \
if echo "$g_vers" | grep "local" > /dev/null; then
echo -e "\nRunning Vint: $cmd : in $g_wiki_path"
pushd "$g_wiki_path" > /dev/null \
|| echo 'Warning pushd wiki_path failed' || echo 'Warning pushd wiki_path failed'
$cmd $cmd
err=$(( err | $? )) res=$(( res | $? ))
popd > /dev/null \ popd > /dev/null \
|| echo 'Warning popd also failed' || echo 'Warning popd also failed'
else else
echo -e "\nStarting Docker container and running Vint: $cmd" echo -e "\nStarting Docker container and running Vint: $cmd"
docker run -a stdout "${flags[@]}" bash -c "$cmd" docker run -a stdout "${flags[@]}" bash -c "$cmd"
err=$(( err | $? )) res=$(( res | $? ))
fi fi
return $err
return "$res"
} }
vader_filter() { vader_filter() {
# Filter Vader Stdout : 'Pipe Helper: Filter Vader Stdout'
local err=0 local -i res=0
# Keep indentation # Keep indentation
local IFS='' local IFS=''
while read -r REPLY; do
# Print only possible error cases
if [[ "$REPLY" = *'docker:'* ]] || \
[[ "$REPLY" = *'Starting Vader:'* ]] || \
[[ "$REPLY" = *'Vader error:'* ]] || \
[[ "$REPLY" = *'Vim: Error '* ]]; then
echo "$REPLY"
elif [[ "$REPLY" = *'[EXECUTE] (X)'* ]] || \
[[ "$REPLY" = *'[ DO] (X)'* ]] || \
[[ "$REPLY" = *'[ EXPECT] (X)'* ]]; then
echo -e "$red$REPLY$nc"
err=1
elif [[ "$REPLY" = *'Success/Total:'* ]]; then
success="$(echo -n "$REPLY" | grep -o '[0-9]\+/' | head -n1 | cut -d/ -f1)"
total="$(echo -n "$REPLY" | grep -o '/[0-9]\+' | head -n1 | cut -d/ -f2)"
if [ "$success" -lt "$total" ]; then
err=1
fi
echo "$REPLY"
elif [[ "$verbose" != 0 ]]; then
# just print everything
echo "$REPLY"
fi
done
if [[ "$err" == 1 ]]; then while read -r REPLY; do
echo -e "\033[0;31m" # Print only possible error cases
echo -e "!---------Failed tests detected---------!" if [[ "$REPLY" = *'docker:'* ]] || \
echo -e "Run with the '-v' flag for verbose output" [[ "$REPLY" = *'Starting Vader:'* ]] || \
echo -e "\033[0m" [[ "$REPLY" = *'Vader error:'* ]] || \
[[ "$REPLY" = *'Vim: Error '* ]]; then
echo "$REPLY"
elif [[ "$REPLY" = *'[EXECUTE] (X)'* ]] || \
[[ "$REPLY" = *'[ DO] (X)'* ]] || \
[[ "$REPLY" = *'[ EXPECT] (X)'* ]]; then
echo -e "$red$REPLY$nc"
res=1
elif [[ "$REPLY" = *'Success/Total:'* ]]; then
success="$(echo -n "$REPLY" | grep -o '[0-9]\+/' | head -n1 | cut -d/ -f1)"
total="$(echo -n "$REPLY" | grep -o '/[0-9]\+' | head -n1 | cut -d/ -f2)"
if [ "$success" -lt "$total" ]; then
res=1
fi
echo "$REPLY"
elif [[ "$g_verbose" != 0 ]]; then
# just print everything
echo "$REPLY"
fi fi
return $err done
if (( res == 1 )); then
echo -e "\033[0;31m"
echo -e "!---------Failed tests detected---------!"
echo -e "Run with the '-v' flag for verbose output"
echo -e "\033[0m"
fi
return "$res"
} }
vader_color() { vader_color() {
: 'Pipe Helper: Filter to add color to Vader'
while read -r; do while read -r; do
if [[ "$REPLY" = *'[EXECUTE] (X)'* ]] || \ if [[ "$REPLY" = *'[EXECUTE] (X)'* ]] || \
[[ "$REPLY" = *'[ EXPECT] (X)'* ]] || \ [[ "$REPLY" = *'[ EXPECT] (X)'* ]] || \
@@ -283,103 +422,7 @@ vader_color() {
echo -en "$nc" echo -en "$nc"
} }
# path of the script, supposing no spaces
script_file="$(dirname "$0")"
script_path="$( realpath "$script_file" )"
wiki_path="$( realpath "$script_path/.." )"
tmp_dir="$(dirname "$(mktemp -u)")"
# list of vim/nvim versions if ! (return 0 2>/dev/null); then
vers="$(print_versions)" run_test "$@"; exit $?
# type of tests to run - vader/vint/all
type="all"
# verbose output flag
verbose=0
# only run these tests
file_test=""
# docker flags
flags=(--rm -v "$PWD/../:/testplugin" -v "$PWD/../test:/home" -w /testplugin vimwiki)
while getopts ":hvn:lt:f:" opt; do
case ${opt} in
h)
printHelp
;;
n)
vers="$OPTARG"
;;
v)
verbose=1
;;
l)
print_versions
;;
t)
type="$OPTARG"
;;
f)
file_test="$OPTARG"
;;
\?)
echo "Invalid option: $OPTARG" 1>&2
exit 1
;;
:)
echo "Invalid option: $OPTARG requires an argument" 1>&2
exit 1
;;
esac
done
# shift out processed parameters
shift $((OPTIND -1))
# error handling for non-option arguments
if [[ $# -ne 0 ]]; then
echo "Error: Got $# non-option arguments." 1>&2
exit 1
fi fi
# stop tests on ctrl-c or ctrl-z
trap exit 1 SIGINT SIGTERM
# Global error return of the script
o_error=0
# Select which tests should run
case $type in
vader)
run_vader ; err=$?
echo "Main Vader: returned $err"
o_error=$(( err | o_error ))
;;
vint)
run_vint ; err=$?
echo "Main Vint: returned $err"
o_error=$(( err | o_error ))
;;
all)
run_vint ; err=$?
echo "Main Vint: returned $err"
o_error=$(( err | o_error ))
run_vader ; err=$?
echo "Main Vader: returned $err"
o_error=$(( err | o_error ))
;;
*)
echo "Error: invalid type - '$type'" 1>&2
exit 1
esac
# Calcultate time
end_time=$(date +%s)
sec_time=$((end_time - start_time))
printf -v script_time '%dh:%dm:%ds' $((sec_time/3600)) $((sec_time%3600/60)) $((sec_time%60))
# Exit
echo -ne "Script $(basename "$0"), in $script_time, Returned -> $o_error\n\n"
exit $o_error
+6 -1
View File
@@ -7,10 +7,16 @@ Execute (Setup search testing wrapper):
Log 'Cheating for old vim version, do not want to reverse bug' Log 'Cheating for old vim version, do not want to reverse bug'
return return
endif endif
" Execute command and grab output
redir => output redir => output
silent execute a:search_command silent execute a:search_command
redir END redir END
" The location list should not be empty
Assert !empty(getloclist(0)), a:test_name.": no location list result" Assert !empty(getloclist(0)), a:test_name.": no location list result"
" The location list should contains entries
Assert match(output, '\d of \d') > -1, a:test_name.": no result message" Assert match(output, '\d of \d') > -1, a:test_name.": no result message"
" Tests that VimwikiSearch is quoting the pattern correctly. " Tests that VimwikiSearch is quoting the pattern correctly.
@@ -30,7 +36,6 @@ Execute (Search test wiki):
AssertEqual "= Test Wiki =", getline(1) AssertEqual "= Test Wiki =", getline(1)
AssertEqual "vimwiki", &filetype AssertEqual "vimwiki", &filetype
call TestSearch('VimwikiSearch foo', 'pattern with no spaces') call TestSearch('VimwikiSearch foo', 'pattern with no spaces')
call TestSearch('VimwikiSearch foo bar', 'pattern with spaces') call TestSearch('VimwikiSearch foo bar', 'pattern with spaces')
call TestSearch('VimwikiSearch foo\bar', 'pattern with ''\''') call TestSearch('VimwikiSearch foo\bar', 'pattern with ''\''')
+29 -5
View File
@@ -4,18 +4,40 @@
# 0 Escape {{{1 # 0 Escape {{{1
################# #################
Given vimwiki (Most easy typeface):
1. 567890123
2. __bold__
3. *Italic*
4. ***Bold Italic***
5. ~~Strikethrough~~
6. <sub>Subscript</sub>
7. <sup>Superscript</sup>
Execute (Set syntax markdown):
call SetSyntax('markdown')
Execute (Assert Syntax basic typeface):
AssertEqual '1' , SyntaxAt(1, 9) . 1
AssertEqual 'VimwikiBold2' , SyntaxAt(2, 9) . 2
AssertEqual 'VimwikiItalic3' , SyntaxAt(3, 9) . 3
AssertEqual 'VimwikiBoldItalic4' , SyntaxAt(4, 9) . 4
AssertEqual 'VimwikiDelText5' , SyntaxAt(5, 9) . 5
AssertEqual 'VimwikiSubScript6' , SyntaxAt(6, 9) . 6
AssertEqual 'VimwikiSuperScript7', SyntaxAt(7, 9) . 7
Given vimwiki (Markdown typeface with escape sequence #1044: _ __ * ** {{{2): Given vimwiki (Markdown typeface with escape sequence #1044: _ __ * ** {{{2):
This is 14 | 1 This is 14 | 1
__bold from begining__ 2 __bold from begining__ 2
\__not bold even from begin \__ 3 \__not bold even from begin \__ 3
and __t \__ is still bold__ Bold 4 and __t __isss still bold__ Bold 4
and _ita\_ alic continues and end_ Italic 5 and _itaaa_licccontinues and end_ Italic 5
*this\* \* is italic also* Italic 6 *this aa is italic also* Italic 6
a ^taa is supperscrit^ Sup 7 a ^taa is supperscrit^ Sup 7
,,subaaa subscript end,, Sub 8 ,,subaaa subscript end,, Sub 8
a ~~staaill deleted~~ Del 9 a ~~staaill deleted~~ Del 9
$$Eq\$$ uation follows$ Math 10 $$Eq\$$ uation follows$ Math 10
`code \` not finished inline` Code 11 `code \` not finished inline` Code 11
012345678901234567890
Execute (Set syntax markdown): Execute (Set syntax markdown):
call SetSyntax('markdown') call SetSyntax('markdown')
@@ -25,9 +47,11 @@ Execute (Assert Syntax of escape typeface):
AssertEqual 'VimwikiBold2' , SyntaxAt(2, 14) . 2 AssertEqual 'VimwikiBold2' , SyntaxAt(2, 14) . 2
AssertEqual '3' , SyntaxAt(3, 14) . 3 AssertEqual '3' , SyntaxAt(3, 14) . 3
AssertEqual 'VimwikiBold4' , SyntaxAt(4, 14) . 4 AssertEqual 'VimwikiBold4' , SyntaxAt(4, 14) . 4
AssertEqual 'VimwikiItalic5' , SyntaxAt(5, 14) . 5 " TODO
" AssertEqual 'VimwikiItalic5' , SyntaxAt(5, 14) . 5
" See: #1303 where an escape start can close the region " See: #1303 where an escape start can close the region
AssertEqual '6' , SyntaxAt(6, 14) . 6 " Fixed removing vars.vim::expand_delimiter
AssertEqual 'VimwikiItalic6' , SyntaxAt(6, 14) . 6
AssertEqual 'VimwikiSuperScript7', SyntaxAt(7, 14) . 7 AssertEqual 'VimwikiSuperScript7', SyntaxAt(7, 14) . 7
AssertEqual 'VimwikiSubScript8' , SyntaxAt(8, 14) . 8 AssertEqual 'VimwikiSubScript8' , SyntaxAt(8, 14) . 8
AssertEqual 'VimwikiDelText9' , SyntaxAt(9, 14) . 9 AssertEqual 'VimwikiDelText9' , SyntaxAt(9, 14) . 9
+713 -1
View File
@@ -166,6 +166,718 @@ Execute (Assert Syntax):
# Rule 3 {{{1 # Rule 3 {{{1
# TODO Test 3 # A single * character can close emphasis iff it is part of a right-flanking delimiter run.
Given vimwiki (Typeface: https://github.github.com/gfm/#example-374):
_foo*
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'This is not emphasis, in theory (1), IDEA change that'
Log 'But Vim reion implementation is highlitghing it anyway, it would be nice to change that'
Log 'Note: The decision to start a region is only based on a matching start pattern. There is no check for a matching end pattern.'
AssertEqual 'VimwikiItalic', SyntaxAt(1, 3)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-375):
*foo bar *
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'This is not emphasis, in theory (2), IDEA change that'
AssertEqual 'VimwikiItalic', SyntaxAt(1, 3)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-376):
*foo bar
*
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'This is not emphasis, in theory (2), IDEA change that'
AssertEqual 'VimwikiItalic', SyntaxAt(1, 3)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-377):
*(*foo)
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'This is not emphasis, because the second * is preceded by punctuation and followed by an alphanumeric (hence it is not part of a right-flanking delimiter, in theory, IDEA Change that'
AssertEqual 'VimwikiItalic', SyntaxAt(1, 2)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-378):
*(*foo*)*
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'The point of this restriction is more easily appreciated with this example, IDEA Change that'
AssertEqual 'VimwikiItalic', SyntaxAt(1, 2)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-379):
*foo*bar
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Intraword emphasis with * is allowed'
AssertEqual 'VimwikiItalic', SyntaxAt(1, 3)
# Rule 4 {{{1
# A single _ character can close emphasis iff it is part of a right-flanking delimiter run and either (a) not part of a left-flanking delimiter run or (b) part of a left-flanking delimiter run followed by punctuation.
# Rule 5 {{{1
# A double ** can open strong emphasis iff it is part of a left-flanking delimiter run.
Given vimwiki (Typeface: https://github.github.com/gfm/#example-387):
**foo bar**
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Easy bold'
AssertEqual 'VimwikiBold', SyntaxAt(1, 3)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-388):
** foo bar**
12345
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'This is not strong emphasis, because the opening delimiter is followed by whitespace'
AssertEqual '', SyntaxAt(1, 5)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-389):
a**"foo"**
123456
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'This is not strong emphasis, because the opening ** is preceded by an alphanumeric and followed by punctuation, and hence not part of a left-flanking delimiter'
AssertEqual '', SyntaxAt(1, 5)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-390):
foo**bar**
1234567890
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Intraword strong emphasis with ** is permitted'
AssertEqual 'VimwikiBold', SyntaxAt(1, 7)
AssertEqual '', SyntaxAt(2, 7)
# Rule 6 {{{1
# A double __ can open strong emphasis iff it is part of a left-flanking delimiter run and either (a) not part of a right-flanking delimiter run or (b) part of a right-flanking delimiter run preceded by punctuation.
Given vimwiki (Typeface: https://github.github.com/gfm/#example-391):
__foo bar__
1234567890
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Bold with __'
AssertEqual 'VimwikiBold', SyntaxAt(1, 4)
AssertEqual '', SyntaxAt(2, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-392):
__ foo bar__
1234567890
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'This is not strong emphasis, because the opening delimiter is followed by whitespace'
AssertEqual '', SyntaxAt(1, 4)
AssertEqual '', SyntaxAt(2, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-393):
__
foo bar__
1234567890
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'A newline counts as whitespace'
AssertEqual '', SyntaxAt(2, 4)
AssertEqual '', SyntaxAt(3, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-394):
a__"foo"__
1234567890
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'This is not strong emphasis, because the opening __ is preceded by an alphanumeric and followed by punctuation'
AssertEqual '', SyntaxAt(1, 6)
AssertEqual '', SyntaxAt(2, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-395):
foo__bar__
1234567890
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Intraword strong emphasis is forbidden with __'
AssertEqual '', SyntaxAt(1, 7)
AssertEqual '', SyntaxAt(2, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-395):
5__6__78
1234567890
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Intraword strong emphasis is forbidden with __ (2)'
AssertEqual '', SyntaxAt(1, 4)
AssertEqual '', SyntaxAt(2, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-397):
пристаням__стремятся__
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Intraword strong emphasis is forbidden with __ (3)'
AssertEqual '', SyntaxAt(1, 13)
AssertEqual '', SyntaxAt(2, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-398):
__foo, __bar__, baz__
1234567890
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
AssertEqual 'VimwikiBold', SyntaxAt(1, 4)
AssertEqual '', SyntaxAt(2, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-399):
foo-__(bar)__
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'This is strong emphasis, even though the opening delimiter is both left- and right-flanking, because it is preceded by punctuation'
AssertEqual 'VimwikiBold', SyntaxAt(1, 9)
AssertEqual '', SyntaxAt(2, 7)
# Rule 7 {{{1
# A double ** can close strong emphasis iff it is part of a right-flanking delimiter run.
Given vimwiki (Typeface: https://github.github.com/gfm/#example-400):
**foo bar **
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Rule 7: Passed: IDEA improve that'
AssertEqual 0, 0
# Rule 8 {{{1
# A double __ can close strong emphasis iff it is part of a right-flanking delimiter run and either (a) not part of a left-flanking delimiter run or (b) part of a left-flanking delimiter run followed by punctuation.
Given vimwiki (Typeface: https://github.github.com/gfm/#example-406):
__foo bar __
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Rule 8: Passed: IDEA improve that'
AssertEqual 0, 0
# Rule 9 {{{1
# Emphasis begins with a delimiter that can open emphasis and ends with a delimiter that can close emphasis, and that uses the same character (_ or *) as the opening delimiter. The opening and closing delimiters must belong to separate delimiter runs. If one of the delimiters can both open and close emphasis, then the sum of the lengths of the delimiter runs containing the opening and closing delimiters must not be a multiple of 3 unless both lengths are multiples of 3.
Given vimwiki (Typeface: https://github.github.com/gfm/#example-413):
*foo [bar](/url)*
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Any nonempty sequence of inline elements can be the contents of an emphasized span'
AssertEqual 'VimwikiItalic', SyntaxAt(1, 9)
AssertEqual '', SyntaxAt(2, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-414):
*foo
bar*
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Any nonempty sequence of inline elements can be the contents of an emphasized span (2)'
AssertEqual 'VimwikiItalic', SyntaxAt(1, 3)
AssertEqual 'VimwikiItalic', SyntaxAt(2, 3)
AssertEqual '', SyntaxAt(3, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-415):
_foo __bar__ baz_
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'In particular, emphasis and strong emphasis can be nested inside emphasis'
AssertEqual 'VimwikiItalic', SyntaxAt(1, 3)
AssertEqual 'VimwikiItalicBold', SyntaxAt(1, 9)
AssertEqual 'VimwikiItalic', SyntaxAt(1, 14)
AssertEqual '', SyntaxAt(2, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-416):
_foo _bar_ baz_
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'TODO not implemented nested Italic, as the close of one region closes the other'
AssertEqual 0, 0
Given vimwiki (Typeface: https://github.github.com/gfm/#example-425):
foo***bar***baz
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Italic Bold'
AssertEqual 'VimwikiBoldItalic', SyntaxAt(1, 8)
AssertEqual '', SyntaxAt(2, 7)
# Rule 10 {{{1
# Strong emphasis begins with a delimiter that can open strong emphasis and ends with a delimiter that can close strong emphasis, and that uses the same character (_ or *) as the opening delimiter. The opening and closing delimiters must belong to separate delimiter runs. If one of the delimiters can both open and close strong emphasis, then the sum of the lengths of the delimiter runs containing the opening and closing delimiters must not be a multiple of 3 unless both lengths are multiples of 3.
Given vimwiki (Typeface: https://github.github.com/gfm/#example-431):
**foo [bar](/url)**
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Any nonempty sequence of inline elements can be the contents of an strongly emphasized span'
AssertEqual 'VimwikiBold', SyntaxAt(1, 8)
AssertEqual '', SyntaxAt(2, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-432):
**foo
bar**
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
AssertEqual 'VimwikiBold', SyntaxAt(1, 3)
AssertEqual 'VimwikiBold', SyntaxAt(2, 3)
AssertEqual '', SyntaxAt(3, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-433):
__foo _bar_ baz__
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'In particular, emphasis and strong emphasis can be nested inside strong emphasis'
AssertEqual 'VimwikiBold', SyntaxAt(1, 4)
AssertEqual 'VimwikiBoldItalic', SyntaxAt(1, 9)
AssertEqual 'VimwikiBold', SyntaxAt(1, 14)
AssertEqual '', SyntaxAt(2, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-434):
__foo __bar__ baz__
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'TODO passed as nested bold is hard'
AssertEqual 0, 0
Given vimwiki (Typeface: https://github.github.com/gfm/#example-437):
**foo *bar* baz**
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Same as 433 but with *'
AssertEqual 'VimwikiBold', SyntaxAt(1, 4)
AssertEqual 'VimwikiBoldItalic', SyntaxAt(1, 9)
AssertEqual 'VimwikiBold', SyntaxAt(1, 14)
AssertEqual '', SyntaxAt(2, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-443):
__ is not an empty emphasis
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'There can be no empty emphasis or strong emphasis:'
AssertEqual '', SyntaxAt(1, 4)
AssertEqual '', SyntaxAt(2, 7)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-444):
____ is not an empty strong emphasis
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'TODO: There can be no empty emphasis or strong emphasis (2)'
AssertEqual 0, 0
# Rule 11 {{{1
# A literal * character cannot occur at the beginning or end of *-delimited emphasis or **-delimited strong emphasis, unless it is backslash-escaped.
Given vimwiki (Typeface: https://github.github.com/gfm/#example-445):
foo ***
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Empty emphasis'
AssertEqual '1', SyntaxAt(1, 1) . 1
AssertEqual '2', SyntaxAt(2, 1) . 2
Given vimwiki (Typeface: https://github.github.com/gfm/#example-446):
foo *\**
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Emphasis an escaped *'
AssertEqual '', SyntaxAt(1, 1)
AssertEqual 'VimwikiItalic', SyntaxAt(1, 7)
AssertEqual '', SyntaxAt(2, 1)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-447):
foo *_*
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Emphasis a lonely _'
Log 'TODO, this is bold italic for now as we got it as special case'
AssertEqual 0, 0
# AssertEqual 'VimwikiItalic', SyntaxAt(1, 6)
# AssertEqual '', SyntaxAt(2, 1)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-448):
foo *****
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Nothing happen'
let var = SyntaxAt(1, 7)
AssertEqual 1, var == '' || var == 'VimwikiDelimiter'
AssertEqual '', SyntaxAt(2, 1)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-449):
foo **\***
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Emphasis a lonely *'
AssertEqual 'VimwikiBold', SyntaxAt(1, 8)
AssertEqual '', SyntaxAt(2, 1)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-450):
foo **_**
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'TODO'
AssertEqual 0, 0
# CommentLine 'Bold a single _ between **'
# AssertEqual 'VimwikiBold', SyntaxAt(1, 7)
# AssertEqual '', SyntaxAt(2, 1)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-451):
**foo*
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'IDEA: the rest is for haskell or yacc more than vim'
AssertEqual 0, 0
# AssertEqual '', SyntaxAt(2, 1)
# Rule 12 {{{1
# A literal _ character cannot occur at the beginning or end of _-delimited emphasis or __-delimited strong emphasis, unless it is backslash-escaped.
# Rule 13 {{{1
# The number of nestings should be minimized. Thus, for example, an interpretation <strong>...</strong> is always preferred to <em><em>...</em></em>.
Given vimwiki (Typeface: https://github.github.com/gfm/#example-469):
**foo**
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Basic bold'
AssertEqual 'VimwikiBold', SyntaxAt(1, 4)
AssertEqual '', SyntaxAt(2, 1)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-470):
*_foo_*
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'TODO Change that'
AssertEqual 0, 0
# CommentLine 'Double italic'
# AssertEqual 'VimwikiItalic', SyntaxAt(1, 4)
# AssertEqual '', SyntaxAt(2, 1)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-471):
__foo__
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Basic bold (2)'
AssertEqual 'VimwikiBold', SyntaxAt(1, 4)
AssertEqual '', SyntaxAt(2, 1)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-472):
_*foo*_
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Double italic (2)'
AssertEqual 'VimwikiItalic', SyntaxAt(1, 4)
AssertEqual '', SyntaxAt(2, 4)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-473):
****foo****
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Double bold with ****'
AssertEqual 'VimwikiBold', SyntaxAt(1, 6)
AssertEqual '', SyntaxAt(2, 1)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-474):
____foo____
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Double bold with ____'
AssertEqual 'VimwikiBold', SyntaxAt(1, 6)
AssertEqual '', SyntaxAt(2, 1)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-475):
******foo******
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Triple bold with ******'
AssertEqual 'VimwikiBold', SyntaxAt(1, 8)
AssertEqual '', SyntaxAt(2, 1)
# Rule 14 {{{1
# An interpretation <em><strong>...</strong></em> is always preferred to <strong><em>...</em></strong>.
Given vimwiki (Typeface: https://github.github.com/gfm/#example-476):
***foo***
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Bold Italic normal, with 3 *'
AssertEqual 'VimwikiBoldItalic', SyntaxAt(1, 5)
AssertEqual '', SyntaxAt(2, 1)
Given vimwiki (Typeface: https://github.github.com/gfm/#example-477):
_____foo_____
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'Bold Italic with 5 _'
CommentLine 'TODO Passed'
# AssertEqual 'VimwikiBoldItalic', SyntaxAt(1, 7)
# AssertEqual '', SyntaxAt(2, 1)
# Rule 15 {{{1
# When two potential emphasis or strong emphasis spans overlap, so that the second begins before the first ends and ends after the first ends, the first takes precedence. Thus, for example, *foo _bar* baz_ is parsed as <em>foo _bar</em> baz_ rather than *foo <em>bar* baz</em>.
# Rule 16 {{{1
# When there are two potential emphasis or strong emphasis spans with the same closing delimiter, the shorter one (the one that opens later) takes precedence. Thus, for example, **foo **bar baz** is parsed as **foo <strong>bar baz</strong> rather than <strong>foo **bar baz</strong>.
Given vimwiki (Typeface: https://github.github.com/gfm/#example-480):
**foo **bar baz**
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'All bold as the ** inside is not closing, Passed as vimwiki do not follow the spec'
AssertEqual 0, 0
# CommentLine 'Double bold (2)'
# AssertEqual 'VimwikiBold', SyntaxAt(1, 6)
# AssertEqual '', SyntaxAt(2, 1)
# Rule 17 {{{1
# Inline code spans, links, images, and HTML tags group more tightly than emphasis. So, when there is a choice between an interpretation that contains one of these elements and one that does not, the former always wins. Thus, for example, *[foo*](bar) is parsed as *<a href="bar">foo*</a> rather than as <em>[foo</em>](bar).
Given vimwiki (Typeface: https://github.github.com/gfm/#example-485):
*a `*` b*
*a `a a*a a` b*
12345678901234
Execute (Set Markdown):
call SetSyntax('markdown')
Execute (Assert Syntax):
CommentLine 'TODO with a * as unique code, a nice trap'
AssertEqual 0, 0
# vim: foldmethod=marker foldlevel=30 sw=2 # vim: foldmethod=marker foldlevel=30 sw=2
+329 -1
View File
@@ -4,6 +4,95 @@
Execute (Setup): Execute (Setup):
set sw=4 set sw=4
AssertEqual 4, &sw AssertEqual 4, &sw
call system("rm $HOME/testmarkdown/.vimwiki_tags")
######################################################################
Do (Create File Content with default tags {{{1):
:edit $HOME/testmarkdown/Test-Tag-default.md\<CR>
I
:tag1:tag2:\<CR>
\<Esc>
:write\<CR>
:VimwikiRebuildTags!\<CR>
:VimwikiGenerateTagLinks\<CR>
gg
Execute (Generate tags for default):
edit $HOME/testmarkdown/Test-Tag-default.md
AssertEqual 'VimwikiTag', SyntaxAt(1, 2)
1
VimwikiGenerateTagLinks
write
Expect (Tags default):
:tag1:tag2:
# Generated Tags
## tag1
- [Test-Tag-default](Test-Tag-default)
## tag2
- [Test-Tag-default](Test-Tag-default)
Execute (Clean tag file for default):
call system("rm $HOME/testmarkdown/.vimwiki_tags")
Do (Create File Content with default tags):
:edit $HOME/testmarkdown/Test-Tag-default.md\<CR>
ggdG
I
# Generated Tags\<Cr>
\<Cr>
# Heading with my tags\<Cr>
\<Cr>
:tag1:tag2:\<CR>
\<Cr>
Dummy content 1
\<Cr>
# Another heading\<Cr>
\<Cr>
Dummy content 2
\<Esc>
:write\<CR>
:VimwikiRebuildTags!\<CR>
:VimwikiGenerateTagLinks\<CR>
gg
Expect (Tags default with Generated Tags heading):
# Generated Tags
## tag1
- [Heading with my tags](Test-Tag-default#heading-with-my-tags)
## tag2
- [Heading with my tags](Test-Tag-default#heading-with-my-tags)
# Heading with my tags
:tag1:tag2:
Dummy content 1
# Another heading
Dummy content 2
Execute (Clean file for tag default):
call system("rm $HOME/testmarkdown/.vimwiki_tags")
call system("rm $HOME/testmarkdown/Test-Tag-default.md")
###################################################################### ######################################################################
@@ -16,6 +105,7 @@ Execute (Change delimiter <tag1|tag2> {{{1):
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax') AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr') AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
Do (Create File Content with <>): Do (Create File Content with <>):
:edit $HOME/testmarkdown/Test-Tag.md\<CR> :edit $HOME/testmarkdown/Test-Tag.md\<CR>
I I
@@ -40,6 +130,7 @@ Execute (Generate tags):
VimwikiGenerateTagLinks VimwikiGenerateTagLinks
set tw=200 set tw=200
Expect (Correctly generated tags section {{{3): Expect (Correctly generated tags section {{{3):
<tag-bar-1> <tag-bar-1>
@@ -77,12 +168,14 @@ Do (Write a quick tag for a quick jump):
ggl\<Cr>A __HERE1__\<Esc> ggl\<Cr>A __HERE1__\<Esc>
ggjl\<Cr>A __HERE2__\<Esc> ggjl\<Cr>A __HERE2__\<Esc>
Expect (Good jump {{{3): Expect (Good jump {{{3):
[go1](Test-Tag#tag-bar-1) [go1](Test-Tag#tag-bar-1)
[go2](#tag-bar-1) [go2](#tag-bar-1)
bla bla
<tag-bar-1> __HERE1__ __HERE2__ <tag-bar-1> __HERE1__ __HERE2__
Execute (Clean Test-Tag and .vimwiki_tags -2): Execute (Clean Test-Tag and .vimwiki_tags -2):
let g:vimwiki_tag_format = {} let g:vimwiki_tag_format = {}
unlet g:vimwiki_syntaxlocal_vars unlet g:vimwiki_syntaxlocal_vars
@@ -101,6 +194,7 @@ Execute (Default tag generation {{{1):
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr') AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
set tw=200 set tw=200
Do (Single file Part1): Do (Single file Part1):
:edit $HOME/testmarkdown/Test-Tag.md\<Cr> :edit $HOME/testmarkdown/Test-Tag.md\<Cr>
ggdGO ggdGO
@@ -108,12 +202,14 @@ Do (Single file Part1):
:write\<Cr> :write\<Cr>
:VimwikiRebuildTags!\<Cr> :VimwikiRebuildTags!\<Cr>
Execute (Generate tags): Execute (Generate tags):
edit $HOME/testmarkdown/Test-Tag.md edit $HOME/testmarkdown/Test-Tag.md
AssertEqual 'VimwikiTag', SyntaxAt(1, 1) AssertEqual 'VimwikiTag', SyntaxAt(1, 1)
VimwikiGenerateTagLinks VimwikiGenerateTagLinks
write write
Expect (Single tags toc): Expect (Single tags toc):
:single-tag: :single-tag:
@@ -145,12 +241,14 @@ Do (Create File Content):
:write\<CR> :write\<CR>
:VimwikiRebuildTags\<CR> :VimwikiRebuildTags\<CR>
Execute (Edit tags file): Execute (Edit tags file):
edit $HOME/testmarkdown/.vimwiki_tags edit $HOME/testmarkdown/.vimwiki_tags
AssertEqual $HOME . '/testmarkdown/.vimwiki_tags', expand('%') AssertEqual $HOME . '/testmarkdown/.vimwiki_tags', expand('%')
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax') AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr') AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
# Note: tags file uses tabs # Note: tags file uses tabs
Expect (Correctly formatted tags file): Expect (Correctly formatted tags file):
!_TAG_FILE_FORMAT 2 !_TAG_FILE_FORMAT 2
@@ -159,15 +257,17 @@ Expect (Correctly formatted tags file):
!_TAG_PROGRAM_AUTHOR Vimwiki !_TAG_PROGRAM_AUTHOR Vimwiki
!_TAG_PROGRAM_NAME Vimwiki Tags !_TAG_PROGRAM_NAME Vimwiki Tags
!_TAG_PROGRAM_URL https://github.com/vimwiki/vimwiki !_TAG_PROGRAM_URL https://github.com/vimwiki/vimwiki
!_TAG_PROGRAM_VERSION 2022.12.02 !_TAG_PROGRAM_VERSION 2024.01.24
second-tag Test-Tag.md 13;" vimwiki:Test-Tag\tTest-Tag#second-tag\tTest-Tag#second-tag second-tag Test-Tag.md 13;" vimwiki:Test-Tag\tTest-Tag#second-tag\tTest-Tag#second-tag
test-tag Test-Tag.md 5;" vimwiki:Test-Tag\tTest-Tag#a-header\tA header test-tag Test-Tag.md 5;" vimwiki:Test-Tag\tTest-Tag#a-header\tA header
top-tag Test-Tag.md 1;" vimwiki:Test-Tag\tTest-Tag\tTest-Tag top-tag Test-Tag.md 1;" vimwiki:Test-Tag\tTest-Tag\tTest-Tag
Execute (Generate tags): Execute (Generate tags):
edit $HOME/testmarkdown/Test-Tag.md edit $HOME/testmarkdown/Test-Tag.md
VimwikiGenerateTagLinks VimwikiGenerateTagLinks
Expect (Correctly generated tags section): Expect (Correctly generated tags section):
:top-tag: :top-tag:
@@ -198,6 +298,7 @@ Expect (Correctly generated tags section):
- [Test-Tag](Test-Tag) - [Test-Tag](Test-Tag)
Execute (Clean Test-Tag and .vimwiki_tags -1 ): Execute (Clean Test-Tag and .vimwiki_tags -1 ):
call system("rm $HOME/testmarkdown/Test.md") call system("rm $HOME/testmarkdown/Test.md")
call system("rm $HOME/testmarkdown/.vimwiki_tags") call system("rm $HOME/testmarkdown/.vimwiki_tags")
@@ -214,6 +315,7 @@ Execute (Check first tags file):
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax') AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr') AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
Do (Build first tags file): Do (Build first tags file):
:edit $HOME/testmarkdown/Test-Tag-1.md\<Cr> :edit $HOME/testmarkdown/Test-Tag-1.md\<Cr>
ggI ggI
@@ -228,12 +330,14 @@ Do (Build first tags file):
:write\<Cr> :write\<Cr>
:VimwikiRebuildTags!\<CR> :VimwikiRebuildTags!\<CR>
Execute (Check second tags file): Execute (Check second tags file):
edit $HOME/testmarkdown/subdir1/Test-Tag-2.md edit $HOME/testmarkdown/subdir1/Test-Tag-2.md
AssertEqual $HOME . '/testmarkdown/subdir1/Test-Tag-2.md', expand('%') AssertEqual $HOME . '/testmarkdown/subdir1/Test-Tag-2.md', expand('%')
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax') AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr') AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
Do (Build second tags file): Do (Build second tags file):
:edit $HOME/testmarkdown/subdir1/Test-Tag-2.md\<Cr> :edit $HOME/testmarkdown/subdir1/Test-Tag-2.md\<Cr>
ggI ggI
@@ -248,6 +352,7 @@ Do (Build second tags file):
:write\<Cr> :write\<Cr>
:VimwikiRebuildTags!\<CR> :VimwikiRebuildTags!\<CR>
Execute (Build tag links in third file): Execute (Build tag links in third file):
edit $HOME/testmarkdown/subdir1/subdir11/Test-Tag-Links.md edit $HOME/testmarkdown/subdir1/subdir11/Test-Tag-Links.md
AssertEqual $HOME . '/testmarkdown/subdir1/subdir11/Test-Tag-Links.md', expand('%') AssertEqual $HOME . '/testmarkdown/subdir1/subdir11/Test-Tag-Links.md', expand('%')
@@ -256,6 +361,7 @@ Execute (Build tag links in third file):
VimwikiGenerateTagLinks VimwikiGenerateTagLinks
write write
Expect (Tag links relative to current file): Expect (Tag links relative to current file):
@@ -276,6 +382,7 @@ Expect (Tag links relative to current file):
- [standalone-tag-1](../../Test-Tag-1#standalone-tag-1) - [standalone-tag-1](../../Test-Tag-1#standalone-tag-1)
- [standalone-tag-1](../Test-Tag-2#standalone-tag-1) - [standalone-tag-1](../Test-Tag-2#standalone-tag-1)
Do (Delete some existing links to test updating generated tag links): Do (Delete some existing links to test updating generated tag links):
:edit $HOME/testmarkdown/subdir1/subdir11/Test-Tag-Links.md\<Cr> :edit $HOME/testmarkdown/subdir1/subdir11/Test-Tag-Links.md\<Cr>
7G 7G
@@ -285,6 +392,7 @@ Do (Delete some existing links to test updating generated tag links):
:write\<Cr> :write\<Cr>
:call vimwiki#tags#generate_tags(0)\<Cr> :call vimwiki#tags#generate_tags(0)\<Cr>
Expect (Only update generated tag links for tags already existing in the file): Expect (Only update generated tag links for tags already existing in the file):
@@ -300,6 +408,226 @@ Expect (Only update generated tag links for tags already existing in the file):
- [Another Header](../../Test-Tag-1#another-header) - [Another Header](../../Test-Tag-1#another-header)
- [Another Header](../Test-Tag-2#another-header) - [Another Header](../Test-Tag-2#another-header)
Execute (Clean relative tag setup): Execute (Clean relative tag setup):
call system("rm $HOME/testmarkdown/.vimwiki_tags")
call system("rm -rf $HOME/testmarkdown/subdir1") call system("rm -rf $HOME/testmarkdown/subdir1")
call system("rm $HOME/testmarkdown/Test-Tag-1.md") call system("rm $HOME/testmarkdown/Test-Tag-1.md")
######################################################################
Execute (Change delimiter #tag1content1|content2#tag2 as for issue #1316 {{{1):
let g:vimwiki_tag_format = {'pre_mark': '#tag1', 'post_mark': '#tag2', 'sep': '|'}
unlet g:vimwiki_syntaxlocal_vars
call vimwiki#vars#init()
edit $HOME/testmarkdown/Test-Tag-1316.md
AssertEqual $HOME . '/testmarkdown/Test-Tag-1316.md', expand('%')
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
Do (Create File Content with #tag1 #tag2 as for issue #1316):
:edit $HOME/testmarkdown/Test-Tag-issue-1316.md\<CR>
I
# Line1: Heading
# A header\<CR>
# Line2: Tag not in header
bla #tag1content01|content02#tag2\<CR>
# Line3: Tag in header
#tag1content11|content12#tag2\<CR>
# Line4: empty
\<CR>
# Line5: dummy content
Words here.
\<Esc>
:write\<CR>
:VimwikiRebuildTags!\<CR>
gg
Execute (Generate tags for issue #1316):
edit $HOME/testmarkdown/Test-Tag-issue-1316.md
AssertEqual 'VimwikiTag', SyntaxAt(2, 5)
1
VimwikiGenerateTagLinks
write
Expect (Single tags toc):
# A header
bla #tag1content01|content02#tag2
#tag1content11|content12#tag2
Words here.
# Generated Tags
## content01
- [A header](Test-Tag-issue-1316#a-header)
## content02
- [A header](Test-Tag-issue-1316#a-header)
## content11
- [tag2](Test-Tag-issue-1316#tag1content11content12tag2)
## content12
- [tag2](Test-Tag-issue-1316#tag1content11content12tag2)
Execute (Clean file for tag #1316):
call system("rm $HOME/testmarkdown/.vimwiki_tags")
call system("rm $HOME/testmarkdown/Test-Tag-issue-1316.md")
Execute (Change delimiter #first_tag #vim #mo as for issue #1316 (2) {{{1):
let g:vimwiki_tag_format = {'pre_mark': '#\w\@=', 'post_mark': '', 'sep': '[#[:space:]]\+', 'in': '[^#:[:space:]]\+' }
unlet g:vimwiki_syntaxlocal_vars
call vimwiki#vars#init()
edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md
AssertEqual $HOME . '/testmarkdown/Test-Tag-issue-1316-bis.md', expand('%')
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
Do (Create File Content with #tag1 #tag2 as for issue #1316):
:edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md\<CR>
I
# Line1: Heading
# A header\<CR>
# Line2: Tag not in header
bla #first_tag\<Cr>
# Line3: Tag in header
#vim #mono\<Cr>
# Line4: empty
\<CR>
# Line5: dummy content
Words here.
\<Esc>
:write\<CR>
:VimwikiRebuildTags!\<CR>
gg
Execute (Assert some file info for #1316):
edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md
AssertEqual $HOME . '/testmarkdown/Test-Tag-issue-1316-bis.md', expand('%')
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
AssertEqual 'VimwikiTag', SyntaxAt(2, 6)
Do (Append something at first_tag):
:edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md\<CR>
# Some bug with loclist for vim7.3 and vim8.0
:if v:version > 810\<Cr>
VimwikiSearchTags first_tag\<Cr>
else\<Cr>
2\<Cr>
endif\<Cr>
A Content1\<Esc>
Do (Append something at mono tag):
:edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md\<CR>
:if v:version > 810\<Cr>
VimwikiSearchTags mono\<Cr>
else\<Cr>
3\<Cr>
endif\<Cr>
A Content2\<Esc>
Expect (Content appended at tags):
# A header
bla #first_tag Content1
#vim #mono Content2
Words here.
Execute (Clean file for tag #1316):
call system("rm $HOME/testmarkdown/.vimwiki_tags")
call system("rm $HOME/testmarkdown/Test-Tag-issue-1316-bis.md")
Execute (Clean):
call system("rm $HOME/testmarkdown/.vimwiki_tags")
unlet g:vimwiki_tag_format
unlet g:vimwiki_syntaxlocal_vars
call vimwiki#vars#init()
Do (Md: #1034: Create File with tag in code for issue #1034):
:edit $HOME/testmarkdown/Test-Tag-issue-1034.md\<CR>
I
# Line1: Heading
Some line\<Cr>
# Line2: Tag not in header
```bash\<Cr>
# Line3: Tag in header
this is bash code with :tag1:\<Cr>
# Line4: empty
```\<Cr>
# Line5: tag2
and :tag2:\<Cr>
\<Esc>
:write\<CR>
:VimwikiRebuildTags!\<CR>
Do (Md: #1034: Append something at mono tag):
:edit $HOME/testmarkdown/Test-Tag-issue-1034.md\<CR>
ggdG
:read $HOME/testmarkdown/.vimwiki_tags\<CR>
G
:g/^!/d\<CR>
oContent\<Esc>
Expect (Md: #1034: Can see tag2 but not tag1 as in code):
tag2 Test-Tag-issue-1034.md 5;" vimwiki:Test-Tag-issue-1034\tTest-Tag-issue-1034#tag2\tTest-Tag-issue-1034#tag2
Content
Do (Wiki: #1034: Create File with tag in code for issue #1034):
:edit $HOME/testwiki/Test-Tag-issue-1034.wiki\<CR>
I
# Line1: Heading
Some line\<Cr>
# Line2: Tag not in header
{{{bash\<Cr>
# Line3: Tag in header
this is bash code with :tag1:\<Cr>
# Line4: empty
}}}\<Cr>
# Line5: tag2
and :tag2:\<Cr>
\<Esc>
:write\<CR>
:VimwikiRebuildTags!\<CR>
Do (Wiki: #1034: Append something at mono tag):
:edit $HOME/testwiki/Test-Tag-issue-1034.wiki\<CR>
ggdG
:read $HOME/testwiki/.vimwiki_tags\<CR>
G
:g/^!/d\<CR>
oContent\<Esc>
Expect (Wiki: #1034: Can see tag2 but not tag1 as in code):
tag2 Test-Tag-issue-1034.wiki 5;" vimwiki:Test-Tag-issue-1034\tTest-Tag-issue-1034#tag2\tTest-Tag-issue-1034#tag2
Content
Execute (#1034: Clean file for tag #1034):
call system("rm $HOME/testmarkdown/.vimwiki_tags")
call system("rm $HOME/testwiki/.vimwiki_tags")
call system("rm $HOME/testmarkdown/Test-Tag-issue-1013.md")
call system("rm $HOME/testwiki/Test-Tag-issue-1013.wiki")
+63
View File
@@ -0,0 +1,63 @@
# Test how vimwiki#tags#generate_tags behaves when updating existing tag link sections
Before (Setup test wiki files):
call writefile([":usedtag:", ":othertag:"], expand("~/testmarkdown/Test-Tag-tagged.md"))
edit ~/testmarkdown/Test-Tag-links.md
After (Cleanup files):
%delete
call system("rm $HOME/testmarkdown/.vimwiki_tags")
call system("rm $HOME/testmarkdown/Test-Tag-tagged.md")
call system("rm $HOME/testmarkdown/Test-Tag-links.md")
Do (Create preexisting tag links with unused tag):
I
# Generated Tags\<CR>
\<CR>
## unusedtag\<CR>
\<CR>
## usedtag\<CR>
\<ESC>
:VimwikiRebuildTags!\<CR>
:call vimwiki#tags#generate_tags(0)\<CR>
Expect (Keeps unused tag header):
# Generated Tags
## unusedtag
## usedtag
- [Test-Tag-tagged](Test-Tag-tagged)
Do (Create preexisting tag subheadings out of alphabetical order):
I
# Generated Tags\<CR>
\<CR>
## z\<CR>
\<CR>
## usedtag\<CR>
\<CR>
## a\<CR>
\<CR>
# Other Stuff
\<ESC>
:VimwikiRebuildTags!\<CR>
:call vimwiki#tags#generate_tags(0)\<CR>
Expect (Existing tag subheading order is preserved):
# Generated Tags
## z
## usedtag
- [Test-Tag-tagged](Test-Tag-tagged)
## a
# Other Stuff
+8
View File
@@ -343,6 +343,14 @@
0d 0d
endfunction endfunction
function! GetSyntaxVimwiki(line, col)
let res = GetSyntaxStack(a:line, a:col)
if empty(res)
return 'normal'
endif
return res[0]
endfunction
function! GetSyntaxGroup(...) function! GetSyntaxGroup(...)
" Get normalized syntax group: usefull for boldItalic Vs italicBold " Get normalized syntax group: usefull for boldItalic Vs italicBold
" Arg1: line " Arg1: line