Add multiline comment support via %%+ and +%%

This commit is contained in:
Chip Senkbeil
2020-08-01 00:12:21 -05:00
committed by Tinmarino
parent 321e518fdb
commit 6dff2c60a5
8 changed files with 154 additions and 7 deletions

View File

@ -1245,6 +1245,7 @@ function! s:parse_line(line, state) abort
let state.para = a:state.para
let state.quote = a:state.quote
let state.arrow_quote = a:state.arrow_quote
let state.active_multiline_comment = a:state.active_multiline_comment
let state.pre = a:state.pre[:]
let state.math = a:state.math[:]
let state.table = a:state.table[:]
@ -1257,6 +1258,40 @@ function! s:parse_line(line, state) abort
let processed = 0
let line = a:line
" Handle multiline comments, keeping in mind that they can mutate the
" current line while not marking as processed in the scenario where some
" text remains that needs to go through additional processing
if !processed
let mc_start = vimwiki#vars#get_syntaxlocal('rxMultilineCommentStart')
let mc_end = vimwiki#vars#get_syntaxlocal('rxMultilineCommentEnd')
" If either start or end is empty, we want to skip multiline handling
if !empty(mc_start) && !empty(mc_end)
" If we have an active multiline comment, we prepend the start of the
" multiline to our current line to make searching easier, knowing that
" it will be removed using substitute in all scenarios
if state.active_multiline_comment
let line = mc_start.line
endif
" Remove all instances of multiline comment pairs (start + end), using
" a lazy match so that we stop at the first ending multiline comment
" rather than potentially absorbing multiple
let line = substitute(line, mc_start.'.\{-\}'.mc_end, '', 'g')
" Check for a dangling multiline comment (comprised only of start) and
" remove all characters beyond it, also indicating that we are dangling
let mc_start_pos = match(line, mc_start)
if mc_start_pos >= 0
" NOTE: mc_start_pos is the byte offset, so should be fine with strpart
let line = strpart(line, 0, mc_start_pos)
endif
" If we had a dangling multiline comment, we want to flag as such
let state.active_multiline_comment = mc_start_pos >= 0
endif
endif
if !processed
" allows insertion of plain text to the final html conversion
" for example:
@ -1296,7 +1331,7 @@ function! s:parse_line(line, state) abort
endif
endif
let line = s:safe_html_line(a:line)
let line = s:safe_html_line(line)
" pres
if !processed
@ -1326,7 +1361,6 @@ function! s:parse_line(line, state) abort
call extend(res_lines, lines)
endif
if !processed
if line =~# vimwiki#vars#get_syntaxlocal('rxComment')
let processed = 1
@ -1603,6 +1637,7 @@ function! s:convert_file_to_lines(wikifile, current_html_file) abort
let state.para = 0
let state.quote = 0
let state.arrow_quote = 0
let state.active_multiline_comment = 0
let state.pre = [0, 0] " [in_pre, indent_pre]
let state.math = [0, 0] " [in_math, indent_math]
let state.table = []