From cf8a451cf9ef4def25fe3105fb46e6fe44631ca7 Mon Sep 17 00:00:00 2001 From: Sidney Liebrand Date: Mon, 28 Sep 2020 17:52:34 +0200 Subject: [PATCH] split chinese character range into smaller ones that dont exceed Vim's limit (#130) :| --- autoload/mkdx.vim | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/autoload/mkdx.vim b/autoload/mkdx.vim index 141d6e2..c0fcfa2 100644 --- a/autoload/mkdx.vim +++ b/autoload/mkdx.vim @@ -872,6 +872,27 @@ fun! s:util.ToggleLineType(line, type) return substitute(a:line, repl[0], repl[1], repl[2]) endfun +" work around vim limitation of max char range size of 256 for chinese: +" http://vim.1045645.n5.nabble.com/how-to-match-all-Chinese-chars-td5708582.html +" solution by Christian Brabandt, modified by me for use in a single character +" group +function! s:util.split_into_ranges(start, end) + let start = '0x'. a:start + let end = '0x'. a:end + let patt = '' + while (end - start) > 256 + let temp = start + 256 + let patt .= printf('\u%X-\u%X', start, temp) + let start = temp + 1 + endwhile + + if (end - start) > 0 + let patt .= printf('\u%X-\u%X', start, end) + endif + + return patt +endfunction + let s:util.transformations = { \ 'trailing-space': [[' \+$', '', 'g']], \ 'escape-tags': [['>', '\>', 'g'], ['<', '\<', 'g']], @@ -881,7 +902,7 @@ let s:util.transformations = { \ 'clean-header': [['^[ {{tokens.header}}]\+\| \+$', '', 'g'], ['\[!\[\([^\]]\+\)\](\([^\)]\+\))\](\([^\)]\+\))', '', 'g'], \ ['\(.*\)', '\1', 'g'], ['!\?\[\([^\]]\+\)]([^)]\+)', '\1', 'g']], \ 'header-to-hash': [['`\(.*\)<\/kbd>`', 'kbd\1kbd', 'g'], ['\(.*\)<\/kbd>', '\1', 'g'], - \ ['\%#=2[^0-9[:lower:]\u4e00-\u9fff_\- ]\+', '', 'g'], ['[.,!@#$%^&*()=+"]', '', 'g'], [' ', '-', 'g']], + \ ['\%#=2[^0-9[:lower:]' . s:util.split_into_ranges('4e00', '9fbb') . '_\- ]\+', '', 'g'], ['[.,!@#$%^&*()=+"]', '', 'g'], [' ', '-', 'g']], \ 'toggle-quote': [['^\(> \)\?', '\=(submatch(1) == "> " ? "" : "> ")', '']] \ }