Adds email style quotes to signal blockquotes

This commit is contained in:
Rafael Castillo 2020-06-02 21:29:04 -07:00 committed by Tinmarino
parent e3e841f335
commit 12327c6f90
2 changed files with 94 additions and 4 deletions

View File

@ -664,6 +664,13 @@ function! s:close_tag_quote(quote, ldest) abort
return a:quote return a:quote
endfunction 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 function! s:close_tag_para(para, ldest) abort
if a:para if a:para
@ -915,9 +922,33 @@ function! s:process_tag_quote(line, quote) abort
return [processed, lines, quote] return [processed, lines, quote]
endfunction 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:process_tag_list(line, lists) abort
function! s:add_checkbox(line, rx_list) abort function! s:add_checkbox(line, rx_list) abort
let st_tag = '<li>' let st_tag = '<li>'
let chk = matchlist(a:line, a:rx_list) let chk = matchlist(a:line, a:rx_list)
@ -1209,6 +1240,7 @@ function! s:parse_line(line, state) abort
let state = {} let state = {}
let state.para = a:state.para let state.para = a:state.para
let state.quote = a:state.quote let state.quote = a:state.quote
let state.arrow_quote = a:state.arrow_quote
let state.pre = a:state.pre[:] let state.pre = a:state.pre[:]
let state.math = a:state.math[:] let state.math = a:state.math[:]
let state.table = a:state.table[:] let state.table = a:state.table[:]
@ -1245,6 +1277,9 @@ function! s:parse_line(line, state) abort
if processed && state.quote if processed && state.quote
let state.quote = s:close_tag_quote(state.quote, lines) let state.quote = s:close_tag_quote(state.quote, lines)
endif endif
if processed && state.arrow_quote
let state.arrow_quote = s:close_tag_arrow_quote(state.arrow_quote, lines)
endif
if processed && state.para if processed && state.para
let state.para = s:close_tag_para(state.para, lines) let state.para = s:close_tag_para(state.para, lines)
endif endif
@ -1278,6 +1313,9 @@ function! s:parse_line(line, state) abort
if processed && state.quote if processed && state.quote
let state.quote = s:close_tag_quote(state.quote, lines) let state.quote = s:close_tag_quote(state.quote, lines)
endif endif
if processed && state.arrow_quote
let state.arrow_quote = s:close_tag_arrow_quote(state.arrow_quote, lines)
endif
if processed && state.para if processed && state.para
let state.para = s:close_tag_para(state.para, lines) let state.para = s:close_tag_para(state.para, lines)
endif endif
@ -1340,6 +1378,9 @@ function! s:parse_line(line, state) abort
if processed && state.quote if processed && state.quote
let state.quote = s:close_tag_quote(state.quote, lines) let state.quote = s:close_tag_quote(state.quote, lines)
endif 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] if processed && state.pre[0]
let state.pre = s:close_tag_pre(state.pre, lines) let state.pre = s:close_tag_pre(state.pre, lines)
endif 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.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.pre = s:close_tag_pre(state.pre, res_lines)
let state.math = s:close_tag_math(state.math, 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) let state.para = s:close_tag_para(state.para, res_lines)
call add(res_lines, line) call add(res_lines, line)
@ -1387,6 +1429,39 @@ function! s:parse_line(line, state) abort
if processed && state.deflist if processed && state.deflist
let state.deflist = s:close_tag_def_list(state.deflist, lines) let state.deflist = s:close_tag_def_list(state.deflist, lines)
endif 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) if processed && len(state.table)
let state.table = s:close_tag_table(state.table, lines, state.header_ids) let state.table = s:close_tag_table(state.table, lines, state.header_ids)
endif endif
@ -1435,8 +1510,11 @@ function! s:parse_line(line, state) abort
if processed && len(state.lists) if processed && len(state.lists)
call s:close_tag_list(state.lists, lines) call s:close_tag_list(state.lists, lines)
endif endif
if processed && state.quote if processed && (state.quote || state.arrow_quote)
let state.quote = s:close_tag_quote(state.quote, res_lines) 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 endif
if processed && state.pre[0] if processed && state.pre[0]
let state.pre = s:close_tag_pre(state.pre, res_lines) 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 = {}
let state.para = 0 let state.para = 0
let state.quote = 0 let state.quote = 0
let state.arrow_quote = 0
let state.pre = [0, 0] " [in_pre, indent_pre] let state.pre = [0, 0] " [in_pre, indent_pre]
let state.math = [0, 0] " [in_math, indent_math] let state.math = [0, 0] " [in_math, indent_math]
let state.table = [] let state.table = []
@ -1595,6 +1674,7 @@ function! s:convert_file(path_html, wikifile) abort
" close opened tags if any " close opened tags if any
let lines = [] let lines = []
call s:close_tag_quote(state.quote, 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_para(state.para, lines)
call s:close_tag_pre(state.pre, lines) call s:close_tag_pre(state.pre, lines)
call s:close_tag_math(state.math, lines) call s:close_tag_math(state.math, lines)

View File

@ -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 could be styled by CSS in HTML. Blockquotes are usually used to quote a
long piece of text from another source. 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* 5.10. Comments *vimwiki-syntax-comments*
@ -3633,6 +3641,7 @@ Contributors and their Github usernames in roughly chronological order:
- flex (@bratekarate) - flex (@bratekarate)
- Marius Lopez (@PtitCaius) - Marius Lopez (@PtitCaius)
- Edward Bassett (@ebassett) - Edward Bassett (@ebassett)
- Rafael Castillo (@eltrufas)
============================================================================== ==============================================================================
16. Changelog *vimwiki-changelog* 16. Changelog *vimwiki-changelog*
@ -3648,6 +3657,7 @@ New:~
* PR #919: Fix duplicate helptag * PR #919: Fix duplicate helptag
* PR #907: Cycle bullets * PR #907: Cycle bullets
* PR #900: conceallevel is now setted locally for vimwiki buffers * PR #900: conceallevel is now setted locally for vimwiki buffers
* PR #901: adds multiparagraph blockquotes using email style syntax
2.5 (2020-05-26)~ 2.5 (2020-05-26)~