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
+20 -4
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 -8
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
@@ -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
+11
View File
@@ -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