vimwiki

Personal wiki for vim
git clone https://github.com/vimwiki/vimwiki.git
Log | Files | Refs | README | LICENSE

commit 12327c6f90bccc5315b94a97707dc85054e3357a
parent e3e841f335f48f7565acce0cfda78ae7f4cb2eb6
Author: Rafael Castillo <rafael@trfs.me>
Date:   Tue,  2 Jun 2020 21:29:04 -0700

Adds email style quotes to signal blockquotes

Diffstat:
Mautoload/vimwiki/html.vim | 88+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
Mdoc/vimwiki.txt | 10++++++++++
2 files changed, 94 insertions(+), 4 deletions(-)

diff --git a/autoload/vimwiki/html.vim b/autoload/vimwiki/html.vim @@ -664,6 +664,13 @@ function! s:close_tag_quote(quote, ldest) abort return a:quote endfunction +function! s:close_tag_arrow_quote(arrow_quote, ldest) abort + if a:arrow_quote + call insert(a:ldest, '</p></blockquote>') + return 0 + endif + return a:arrow_quote +endfunction function! s:close_tag_para(para, ldest) abort if a:para @@ -915,9 +922,33 @@ function! s:process_tag_quote(line, quote) abort return [processed, lines, quote] endfunction +function! s:process_tag_arrow_quote(line, arrow_quote) abort + let lines = [] + let arrow_quote = a:arrow_quote + let processed = 0 + if a:line =~# '^&gt;' + if !arrow_quote + call add(lines, '<blockquote>') + call add(lines, '<p>') + let arrow_quote = 1 + endif + let processed = 1 + let stripped_line = substitute(a:line, '^&gt;\s*', '', '') + if stripped_line =~# '^\s*$' + call add(lines, '</p>') + call add(lines, '<p>') + endif + call add(lines, stripped_line) + elseif arrow_quote + call add(lines, '</p>') + call add(lines, '</blockquote>') + let arrow_quote = 0 + endif + return [processed, lines, arrow_quote] +endfunction + function! s:process_tag_list(line, lists) abort - function! s:add_checkbox(line, rx_list) abort let st_tag = '<li>' let chk = matchlist(a:line, a:rx_list) @@ -1209,6 +1240,7 @@ function! s:parse_line(line, state) abort let state = {} let state.para = a:state.para let state.quote = a:state.quote + let state.arrow_quote = a:state.arrow_quote let state.pre = a:state.pre[:] let state.math = a:state.math[:] let state.table = a:state.table[:] @@ -1245,6 +1277,9 @@ function! s:parse_line(line, state) abort if processed && state.quote let state.quote = s:close_tag_quote(state.quote, lines) endif + if processed && state.arrow_quote + let state.arrow_quote = s:close_tag_arrow_quote(state.arrow_quote, lines) + endif if processed && state.para let state.para = s:close_tag_para(state.para, lines) endif @@ -1278,6 +1313,9 @@ function! s:parse_line(line, state) abort if processed && state.quote let state.quote = s:close_tag_quote(state.quote, lines) endif + if processed && state.arrow_quote + let state.arrow_quote = s:close_tag_arrow_quote(state.arrow_quote, lines) + endif if processed && state.para let state.para = s:close_tag_para(state.para, lines) endif @@ -1340,6 +1378,9 @@ function! s:parse_line(line, state) abort if processed && state.quote let state.quote = s:close_tag_quote(state.quote, lines) endif + if processed && state.arrow_quote + let state.arrow_quote = s:close_tag_arrow_quote(state.arrow_quote, lines) + endif if processed && state.pre[0] let state.pre = s:close_tag_pre(state.pre, lines) endif @@ -1370,7 +1411,8 @@ function! s:parse_line(line, state) abort let state.table = s:close_tag_table(state.table, res_lines, state.header_ids) let state.pre = s:close_tag_pre(state.pre, res_lines) let state.math = s:close_tag_math(state.math, res_lines) - let state.quote = s:close_tag_quote(state.quote, res_lines) + let state.quote = s:close_tag_quote(state.quote || state.arrow_quote, res_lines) + let state.arrow_quote = s:close_tag_arrow_quote(state.arrow_quote, lines) let state.para = s:close_tag_para(state.para, res_lines) call add(res_lines, line) @@ -1387,6 +1429,39 @@ function! s:parse_line(line, state) abort if processed && state.deflist let state.deflist = s:close_tag_def_list(state.deflist, lines) endif + if processed && state.arrow_quote + let state.quote = s:close_tag_arrow_quote(state.arrow_quote, lines) + endif + if processed && len(state.table) + let state.table = s:close_tag_table(state.table, lines, state.header_ids) + endif + if processed && state.pre[0] + let state.pre = s:close_tag_pre(state.pre, lines) + endif + if processed && state.math[0] + let state.math = s:close_tag_math(state.math, lines) + endif + if processed && state.para + let state.para = s:close_tag_para(state.para, lines) + endif + + call map(lines, 's:process_inline_tags(v:val, state.header_ids)') + + call extend(res_lines, lines) + endif + + " arrow quotes + if !processed + let [processed, lines, state.arrow_quote] = s:process_tag_arrow_quote(line, state.arrow_quote) + if processed && state.quote + let state.quote = s:close_tag_quote(state.quote, lines) + endif + if processed && len(state.lists) + call s:close_tag_list(state.lists, lines) + endif + if processed && state.deflist + let state.deflist = s:close_tag_def_list(state.deflist, lines) + endif if processed && len(state.table) let state.table = s:close_tag_table(state.table, lines, state.header_ids) endif @@ -1435,8 +1510,11 @@ function! s:parse_line(line, state) abort if processed && len(state.lists) call s:close_tag_list(state.lists, lines) endif - if processed && state.quote - let state.quote = s:close_tag_quote(state.quote, res_lines) + if processed && (state.quote || state.arrow_quote) + let state.quote = s:close_tag_quote(state.quote || state.arrow_quote, lines) + endif + if processed && state.arrow_quote + let state.arrow_quote = s:close_tag_arrow_quote(state.arrow_quote, lines) endif if processed && state.pre[0] let state.pre = s:close_tag_pre(state.pre, res_lines) @@ -1535,6 +1613,7 @@ function! s:convert_file(path_html, wikifile) abort let state = {} let state.para = 0 let state.quote = 0 + let state.arrow_quote = 0 let state.pre = [0, 0] " [in_pre, indent_pre] let state.math = [0, 0] " [in_math, indent_math] let state.table = [] @@ -1595,6 +1674,7 @@ function! s:convert_file(path_html, wikifile) abort " close opened tags if any let lines = [] call s:close_tag_quote(state.quote, lines) + call s:close_tag_arrow_quote(state.arrow_quote, lines) call s:close_tag_para(state.para, lines) call s:close_tag_pre(state.pre, lines) call s:close_tag_math(state.math, lines) diff --git a/doc/vimwiki.txt b/doc/vimwiki.txt @@ -1449,6 +1449,14 @@ Text which starts with 4 or more spaces is a blockquote. could be styled by CSS in HTML. Blockquotes are usually used to quote a long piece of text from another source. +A group of lines prefixed with > also specifies a blockquote, with the caveat +that the > syntax allow empty lines to signal multiple parragraphs. + +> This also signals a block quote. +> +> You can use empty lines to signal multiple paragraphs kept inside the same +> blockquote. + ------------------------------------------------------------------------------ 5.10. Comments *vimwiki-syntax-comments* @@ -3633,6 +3641,7 @@ Contributors and their Github usernames in roughly chronological order: - flex (@bratekarate) - Marius Lopez (@PtitCaius) - Edward Bassett (@ebassett) + - Rafael Castillo (@eltrufas) ============================================================================== 16. Changelog *vimwiki-changelog* @@ -3648,6 +3657,7 @@ New:~ * PR #919: Fix duplicate helptag * PR #907: Cycle bullets * PR #900: conceallevel is now setted locally for vimwiki buffers + * PR #901: adds multiparagraph blockquotes using email style syntax 2.5 (2020-05-26)~