Feature: permit blockquote automatic continuation (issue #1274) (fixed)

This commit is contained in:
Tinmarino
2023-03-17 02:27:08 -03:00
parent 6993610585
commit cde5dbc92a
6 changed files with 189 additions and 20 deletions
+21 -5
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,7 +62,7 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
opt: [ opt: [
#"vint", # "vint",
"-n vim_7.3.429", "-n vim_7.3.429",
"-n vim_8.1.0519", "-n vim_8.1.0519",
+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
+25 -3
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/
" ------------------------------------------------------------------------------------------------ " ------------------------------------------------------------------------------------------------
@@ -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('') ||
@@ -834,6 +835,10 @@ function! s:get_common_syntaxlocal() abort
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': ['>']}
return res return res
endfunction endfunction
@@ -1121,6 +1126,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']
@@ -1681,3 +1702,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
+13 -2
View File
@@ -964,9 +964,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
@@ -2948,6 +2948,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*
@@ -4012,6 +4020,9 @@ 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.
Fixed:~ Fixed:~
* Issue #1274: Feature: Continue blockquote when <CR>
is pressed in insert mode
Also add the |blockquote_markers| variable
* Issue #1316: Permit tags in heading * Issue #1316: Permit tags in heading
* Issue #1270: VimwikiAddHeaderLevel map (3=) was broken by a previous * Issue #1270: VimwikiAddHeaderLevel map (3=) was broken by a previous
refactoring commit refactoring commit
+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
>
+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