diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim deleted file mode 100644 index 5733021..0000000 --- a/ftplugin/vimwiki.vim +++ /dev/null @@ -1,86 +0,0 @@ -" Vim filetype plugin file -" Language: Wiki -" Author: Maxim Kim (habamax at gmail dot com) -" Home: http://code.google.com/p/vimwiki/ -" Filenames: *.wiki -" Last Change: (02.06.2008 12:58) -" Version: 0.4 - -if exists("b:did_ftplugin") - finish -endif - -let b:did_ftplugin = 1 " Don't load another plugin for this buffer - - -"" Defaults -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -" Reset the following options to undo this plugin. -let b:undo_ftplugin = "setl tw< wrap< lbr< fenc< ff< sua< isf< awa< com< fo<" - -setlocal textwidth=0 -setlocal wrap -setlocal linebreak -setlocal fileencoding=utf-8 -setlocal fileformat=unix -setlocal autowriteall -" for gf -execute 'setlocal suffixesadd='.g:vimwiki_ext -setlocal isfname-=[,] - -if g:vimwiki_smartCR>=2 - setlocal comments=b:*,b:# - setlocal formatoptions=ctnqro -endif - -"" keybindings {{{ -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -nmap gk -nmap k gk -vmap gk -vmap k gk - -nmap gj -nmap j gj -vmap gj -vmap j gj - -imap gj -imap gk - -nmap :call vimwiki#WikiFollowWord('nosplit') -nmap :call vimwiki#WikiFollowWord('split') -nmap :call vimwiki#WikiFollowWord('vsplit') - -nmap -nmap -noremap <2-LeftMouse> :call vimwiki#WikiFollowWord('nosplit') -noremap :call vimwiki#WikiFollowWord('split') -noremap :call vimwiki#WikiFollowWord('vsplit') - -nmap :call vimwiki#WikiGoBackWord() -" mapping doesn't work in vim console -nmap :call vimwiki#WikiGoBackWord() -nmap :call vimwiki#WikiGoBackWord() - -nmap :call vimwiki#WikiNextWord() -nmap :call vimwiki#WikiPrevWord() - -nmap wd :call vimwiki#WikiDeleteWord() -nmap wr :call vimwiki#WikiRenameWord() - -if g:vimwiki_smartCR==1 - inoremap :call vimwiki#WikiNewLine('checkup') - noremap o o:call vimwiki#WikiNewLine('checkup') - noremap O O:call vimwiki#WikiNewLine('checkdown') -endif -" keybindings }}} - -"" commands {{{2 -" command! -nargs=1 Wiki2HTML call WikiExportHTML(expand()) -command! Wiki2HTML call vimwiki#Wiki2HTML(g:vimwiki_home_html, expand('%')) -command! WikiAll2HTML call vimwiki#WikiAll2HTML(g:vimwiki_home_html) - -"" commands 2}}} - diff --git a/plugin/vimwiki.vim b/plugin/vimwiki.vim deleted file mode 100644 index 7cc7000..0000000 --- a/plugin/vimwiki.vim +++ /dev/null @@ -1,59 +0,0 @@ -" VimWiki plugin file -" Language: Wiki -" Author: Maxim Kim (habamax at gmail dot com) -" Home: http://code.google.com/p/vimwiki/ -" Filenames: *.wiki -" Last Change: (02.06.2008 12:57) -" Version: 0.4 - - -if exists("loaded_vimwiki") || &cp - finish -endif -let loaded_vimwiki = 1 - -let s:save_cpo = &cpo -set cpo&vim - - -function! s:default(varname,value) - if !exists('g:vimwiki_'.a:varname) - let g:vimwiki_{a:varname} = a:value - endif -endfunction - -"" Could be redefined by users -call s:default('home',"") -call s:default('index',"index") -call s:default('ext','.wiki') -call s:default('upper','A-ZА-Я') -call s:default('lower','a-zа-я') -call s:default('maxhi','1') -call s:default('other','0-9_') -call s:default('smartCR',1) -call s:default('stripsym','_') -call s:default('home_html',g:vimwiki_home."html/") -" call s:default('addheading','1') - -call s:default('history',[]) - -let upp = g:vimwiki_upper -let low = g:vimwiki_lower -let oth = g:vimwiki_other -let nup = low.oth -let nlo = upp.oth -let any = upp.nup - -let g:vimwiki_word1 = '\C\<['.upp.']['.nlo.']*['.low.']['.nup.']*['.upp.']['.any.']*\>' -let g:vimwiki_word2 = '\[\[['.upp.low.oth.'[:punct:][:space:]]\{-}\]\]' - -"" TODO: common regexps for syntax hiliting -"" regexps -call s:default('rxWeblink', '\("[^"(]\+\((\([^)]\+\))\)\?":\)\?\(https\?\|ftp\|gopher\|telnet\|file\|notes\|ms-help\):\(\(\(//\)\|\(\\\\\)\)\+[A-Za-z0-9:#@%/;$~_?+-=.&\-\\\\]*\)') -call s:default('rxWikiWord', g:vimwiki_word1.'\|'.g:vimwiki_word2) -call s:default('rxCode', '`.\{-}`') - -execute 'autocmd! BufNewFile,BufReadPost,BufEnter *'.g:vimwiki_ext.' set ft=vimwiki' - -nmap ww :call vimwiki#WikiGoHome() -nmap wh :execute "edit ".g:vimwiki_home."." diff --git a/syntax/vimwiki.vim b/syntax/vimwiki.vim deleted file mode 100644 index d0ad0fd..0000000 --- a/syntax/vimwiki.vim +++ /dev/null @@ -1,121 +0,0 @@ -" Vim syntax file -" Language: Wiki -" Author: Maxim Kim (habamax at gmail dot com) -" Home: http://code.google.com/p/vimwiki/ -" Filenames: *.wiki -" Last Change: (02.06.2008 12:58) -" Version: 0.4 - -" Quit if syntax file is already loaded -if version < 600 - syntax clear -elseif exists("b:current_syntax") - finish -endif - -"" use max highlighting - could be quite slow if there are too many wikifiles -if g:vimwiki_maxhi - " Every WikiWord is nonexistent - execute 'syntax match wikiNoExistsWord /'.g:vimwiki_word1.'/' - execute 'syntax match wikiNoExistsWord /'.g:vimwiki_word2.'/' - " till we find them in g:vimwiki_home - call vimwiki#WikiHighlightWords() -else - " A WikiWord (unqualifiedWikiName) - execute 'syntax match wikiWord /'.g:vimwiki_word1.'/' - " A [[bracketed wiki word]] - execute 'syntax match wikiWord /'.g:vimwiki_word2.'/' -endif - - -" text: "this is a link (optional tooltip)":http://www.microsoft.com -" TODO: check URL syntax against RFC -syntax match wikiLink `\("[^"(]\+\((\([^)]\+\))\)\?":\)\?\(https\?\|ftp\|gopher\|telnet\|file\|notes\|ms-help\):\(\(\(//\)\|\(\\\\\)\)\+[A-Za-z0-9:#@%/;$~_?+-=.&\-\\\\]*\)` - -" text: *strong* -" syntax match wikiBold /\(^\|\W\)\zs\*\([^ ].\{-}\)\*/ -" syntax match wikiBold /\(^\|\W\)\zs\*.\{-}\*/ -syntax match wikiBold /\*.\{-}\*/ - -" text: _emphasis_ -syntax match wikiItalic /_.\{-}_/ - -" text: `code` -syntax match wikiCode /`.\{-}`/ - -" text: ~~deleted text~~ -syntax match wikiDelText /\~\{2}.\{-}\~\{2}/ - -" text: ^superscript^ -syntax match wikiSuperScript /\^.\{-}\^/ - -" text: ,,subscript,, -syntax match wikiSubScript /,,.\{-},,/ - -" Emoticons: must come after the Textilisms, as later rules take precedence -" over earlier ones. This match is an approximation for the ~70 distinct -" patterns that FlexWiki knows. -syntax match wikiEmoticons /\((.)\|:[()|$@]\|:-[DOPS()\]|$@]\|;)\|:'(\)/ - -" Aggregate all the regular text highlighting into wikiText -syntax cluster wikiText contains=wikiItalic,wikiBold,wikiCode,wikiDelText,wikiSuperScript,wikiSubScript,wikiLink,wikiWord,wikiEmoticons - -" Header levels, 1-6 -syntax match wikiH1 /\(^!\{1}.*$\|^\s*=\{1}.*=\{1}\s*$\)/ -syntax match wikiH2 /\(^!\{2}.*$\|^\s*=\{2}.*=\{2}\s*$\)/ -syntax match wikiH3 /\(^!\{3}.*$\|^\s*=\{3}.*=\{3}\s*$\)/ -syntax match wikiH4 /\(^!\{4}.*$\|^\s*=\{4}.*=\{4}\s*$\)/ -syntax match wikiH5 /\(^!\{5}.*$\|^\s*=\{5}.*=\{5}\s*$\)/ -syntax match wikiH6 /\(^!\{6}.*$\|^\s*=\{6}.*=\{6}\s*$\)/ - -"
, horizontal rule -syntax match wikiHR /^----.*$/ - -" Tables. Each line starts and ends with '||'; each cell is separated by '||' -syntax match wikiTable /||/ - -" Bulleted list items start with whitespace(s), then '*' -" syntax match wikiList /^\s\+\(\*\|[1-9]\+0*\.\).*$/ contains=@wikiText -" highlight only bullets and digits. -syntax match wikiList /^\s\+\(\*\|[1-9]\+0*\.\|#\)/ - -syntax match wikiTodo /\(TODO:\|DONE:\|FIXME:\|FIXED:\)/ - -" Treat all other lines that start with spaces as PRE-formatted text. -syntax match wikiPre /^\s\+[^[:blank:]*#].*$/ - -syntax region wikiPre start=/^{{{\s*$/ end=/^}}}\s*$/ -syntax sync match wikiPreSync grouphere wikiPre /^{{{\s*$/ - -" Link FlexWiki syntax items to colors -hi def link wikiH1 Title -hi def link wikiH2 wikiH1 -hi def link wikiH3 wikiH2 -hi def link wikiH4 wikiH3 -hi def link wikiH5 wikiH4 -hi def link wikiH6 wikiH5 -hi def link wikiHR wikiH6 - -hi def wikiBold term=bold cterm=bold gui=bold -hi def wikiItalic term=italic cterm=italic gui=italic - -hi def link wikiCode PreProc -hi def link wikiWord Underlined -hi def link wikiNoExistsWord Error - -hi def link wikiEscape Todo -hi def link wikiPre PreProc -hi def link wikiLink Underlined -hi def link wikiList Type -hi def link wikiTable Type -hi def link wikiEmoticons Constant -hi def link wikiDelText Comment -hi def link wikiInsText Constant -hi def link wikiSuperScript Constant -hi def link wikiSubScript Constant -hi def link wikiCitation Constant -hi def link wikiTodo Todo - -let b:current_syntax="vimwiki" - -" vim:tw=0: diff --git a/autoload/vimwiki.vim b/vimwiki_0_5.vba similarity index 50% rename from autoload/vimwiki.vim rename to vimwiki_0_5.vba index fa2a544..4ac0e60 100644 --- a/autoload/vimwiki.vim +++ b/vimwiki_0_5.vba @@ -1,10 +1,200 @@ +" Vimball Archiver by Charles E. Campbell, Jr., Ph.D. +UseVimball +finish +plugin\vimwiki.vim [[[1 +55 " VimWiki plugin file +" Language: Wiki +" Author: Maxim Kim (habamax at gmail dot com) +" Home: http://code.google.com/p/vimwiki/ +" Filenames: *.wiki +" Last Change: [15.09.2008 - 12:07] +" Version: 0.5 + + +if exists("loaded_vimwiki") || &cp + finish +endif +let loaded_vimwiki = 1 + +let s:save_cpo = &cpo +set cpo&vim + + +function! s:default(varname,value) + if !exists('g:vimwiki_'.a:varname) + let g:vimwiki_{a:varname} = a:value + endif +endfunction + +"" Could be redefined by users +call s:default('home',"") +call s:default('index',"index") +call s:default('ext','.wiki') +call s:default('upper','A-ZА-Я') +call s:default('lower','a-zа-я') +call s:default('maxhi','1') +call s:default('other','0-9_') +call s:default('smartCR',1) +call s:default('stripsym','_') +call s:default('home_html',g:vimwiki_home."html/") +call s:default('syntax','default') + +call s:default('history',[]) + +let upp = g:vimwiki_upper +let low = g:vimwiki_lower +let oth = g:vimwiki_other +let nup = low.oth +let nlo = upp.oth +let any = upp.nup + +let g:vimwiki_word1 = '\C\<['.upp.']['.nlo.']*['.low.']['.nup.']*['.upp.']['.any.']*\>' +" let g:vimwiki_word2 = '\[\[['.upp.low.oth.'[:punct:][:space:]]\{-}\]\]' +let g:vimwiki_word2 = '\[\[[^\]]\+\]\]' +let g:vimwiki_rxWikiWord = g:vimwiki_word1.'\|'.g:vimwiki_word2 + +execute 'autocmd! BufNewFile,BufReadPost,BufEnter *'.g:vimwiki_ext.' set ft=vimwiki' + +nmap ww :call vimwiki#WikiGoHome() +nmap wh :execute "edit ".g:vimwiki_home +ftplugin\vimwiki.vim [[[1 +126 +" Vim filetype plugin file " Language: Wiki " Author: Maxim Kim (habamax at gmail dot com) " Home: http://code.google.com/p/vimwiki/ " Filenames: *.wiki -" Last Change: (02.06.2008 12:57) -" Version: 0.4 +" Last Change: [15.09.2008 - 12:09] +" Version: 0.5 + +if exists("b:did_ftplugin") + finish +endif + +let b:did_ftplugin = 1 " Don't load another plugin for this buffer + + +"" Defaults +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +" Reset the following options to undo this plugin. +let b:undo_ftplugin = "setl tw< wrap< lbr< fenc< ff< sua< isf< awa< com< fo< fdt< fdm< fde<" + +setlocal textwidth=0 +setlocal wrap +setlocal linebreak +setlocal fileencoding=utf-8 +setlocal fileformat=unix +setlocal autowriteall +" for gf +execute 'setlocal suffixesadd='.g:vimwiki_ext +setlocal isfname-=[,] + +if g:vimwiki_smartCR>=2 + setlocal comments=b:*,b:# + setlocal formatoptions=ctnqro +endif + +"" TODO: folding for Headers using syntax fold method. + +" setlocal foldmethod=expr +" setlocal foldexpr=VimWikiFoldLevel(v:lnum) + +" function! s:wikiHeaderLevel(header) + " let c = 0 + " while a:header[c]=='!' + " let c += 1 + " endwhile + " return c +" endfunction + +" function! VimWikiFoldLevel(lnum) + " let str = getline(a:lnum) + " let strnext = getline(a:lnum+1) + " if str =~ '^!' + " if strnext =~ '^!' + " return '<1' + " else + " return '1' + " endif + " elseif strnext =~ '^!' + " return '<1' + " else + " return '1' + " endif +" endfunction + + +" setlocal foldtext=VimWikiFoldText() +" function! VimWikiFoldText() + " let line = getline(v:foldstart) + " let sub = substitute(line, '!', '', '') + " let sub = substitute(sub, '!', v:folddashes.v:folddashes, 'g') + " let lines_nr = v:foldend-v:foldstart + " return '+'.v:folddashes.v:folddashes.sub.' ('.lines_nr.')' +" endfunction + + +"" keybindings {{{ +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +nmap gk +nmap k gk +vmap gk +vmap k gk + +nmap gj +nmap j gj +vmap gj +vmap j gj + +imap gj +imap gk + +nmap :call vimwiki#WikiFollowWord('nosplit') +nmap :call vimwiki#WikiFollowWord('split') +nmap :call vimwiki#WikiFollowWord('vsplit') + +nmap +nmap +noremap <2-LeftMouse> :call vimwiki#WikiFollowWord('nosplit') +noremap :call vimwiki#WikiFollowWord('split') +noremap :call vimwiki#WikiFollowWord('vsplit') + +nmap :call vimwiki#WikiGoBackWord() +" mapping doesn't work in vim console +nmap :call vimwiki#WikiGoBackWord() +nmap :call vimwiki#WikiGoBackWord() + +nmap :call vimwiki#WikiNextWord() +nmap :call vimwiki#WikiPrevWord() + +nmap wd :call vimwiki#WikiDeleteWord() +nmap wr :call vimwiki#WikiRenameWord() + +if g:vimwiki_smartCR==1 + inoremap :call vimwiki#WikiNewLine('checkup') + noremap o o:call vimwiki#WikiNewLine('checkup') + noremap O O:call vimwiki#WikiNewLine('checkdown') +endif +" keybindings }}} + +"" commands {{{2 +" command! -nargs=1 Wiki2HTML call WikiExportHTML(expand()) +command! Wiki2HTML call vimwiki#Wiki2HTML(g:vimwiki_home_html, expand('%')) +command! WikiAll2HTML call vimwiki#WikiAll2HTML(g:vimwiki_home_html) + +"" commands 2}}} + +autoload\vimwiki.vim [[[1 +901 +" VimWiki plugin file +" Language: Wiki +" Author: Maxim Kim (habamax at gmail dot com) +" Home: http://code.google.com/p/vimwiki/ +" Filenames: *.wiki +" Last Change: [15.09.2008 - 12:23] +" Version: 0.5 if exists("g:loaded_vimwiki_auto") || &cp finish @@ -97,7 +287,7 @@ endfunction "}}} "" WikiWord history helper functions {{{ " history is [['WikiWord.wiki', 11], ['AnotherWikiWord', 3] ... etc] -" where numbers are column positions we should return when coming back. +" where numbers are column positions we should return to when coming back. function! s:GetHistoryWord(historyItem) return get(a:historyItem, 0) endfunction @@ -336,14 +526,17 @@ endfunction "}}} """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" function! s:WikiCreateDefaultCSS(path) " {{{ if glob(a:path.'style.css') == "" - let lines = ['body { margin: 1em 5em 1em 5em; font-size: 100%; }'] + let lines = ['body { margin: 1em 5em 1em 5em; font-size: 100%;}'] + call add(lines, 'p, ul {line-height: 1.5;}') + call add(lines, '.todo {font-weight: bold; text-decoration: underline; color: #FF0000; }') + call add(lines, '.strike {text-decoration: line-through; }') call add(lines, 'h1 {font-size: 2.0em;}') call add(lines, 'h2 {font-size: 1.4em;}') call add(lines, 'h3 {font-size: 1.0em;}') call add(lines, 'h4 {font-size: 0.8em;}') call add(lines, 'h5 {font-size: 0.7em;}') call add(lines, 'h6 {font-size: 0.6em;}') - call add(lines, 'h1 { border-bottom: 1px solid #3366cc; text-align: right; padding: 0.3em 1em 0.3em 1em; }') + call add(lines, 'h1 { border-bottom: 1px solid #3366cc; text-align: left; padding: 0em 1em 0.3em 0em; }') call add(lines, 'h3 { background: #e5ecf9; border-top: 1px solid #3366cc; padding: 0.1em 0.3em 0.1em 0.5em; }') call add(lines, 'ul { margin-left: 2em; padding-left: 0.5em; }') call add(lines, 'pre { border-left: 0.2em solid #ccc; margin-left: 2em; padding-left: 0.5em; }') @@ -351,18 +544,27 @@ function! s:WikiCreateDefaultCSS(path) " {{{ call add(lines, 'hr { border: none; border-top: 1px solid #ccc; }') call writefile(lines, a:path.'style.css') - echomsg "Default style.css created." + echomsg "Default style.css is created." endif endfunction "}}} +function! s:syntax_supported() + return g:vimwiki_syntax == "default" +endfunction + function! vimwiki#WikiAll2HTML(path) "{{{ + if !s:syntax_supported() + call s:msg('Wiki2Html: Only vimwiki_default syntax supported!!!') + return + endif + if !isdirectory(a:path) call s:msg('Please create '.a:path.' directory first!') return endif let wikifiles = split(glob(g:vimwiki_home.'*'.g:vimwiki_ext), '\n') for wikifile in wikifiles - echo 'Processing '.wikifile + echomsg 'Processing '.wikifile call vimwiki#Wiki2HTML(a:path, wikifile) endfor call s:WikiCreateDefaultCSS(g:vimwiki_home_html) @@ -370,13 +572,24 @@ function! vimwiki#WikiAll2HTML(path) "{{{ endfunction "}}} function! vimwiki#Wiki2HTML(path, wikifile) "{{{ + if !s:syntax_supported() + call s:msg('Wiki2Html: Only vimwiki_default syntax supported!!!') + return + endif + if !isdirectory(a:path) call s:msg('Please create '.a:path.' directory first!') return endif "" helper funcs - function! s:isLinkToPic(lnk) "{{{ + function! s:isWebLink(lnk) "{{{ + if a:lnk =~ '^\(http://\|www.\|ftp://\)' + return 1 + endif + return 0 + endfunction "}}} + function! s:isImgLink(lnk) "{{{ if a:lnk =~ '.\(png\|jpg\|gif\|jpeg\)$' return 1 endif @@ -529,72 +742,25 @@ function! vimwiki#Wiki2HTML(path, wikifile) "{{{ function! s:processHeading(line) "{{{ let line = a:line let processed = 0 - if a:line =~ '^!!!!!!.*$' + if a:line =~ g:vimwiki_rxH6 let line = '
'.strpart(a:line, 6).'
' let processed = 1 - elseif a:line =~ '^!!!!!.*$' + elseif a:line =~ g:vimwiki_rxH5 let line = '
'.strpart(a:line, 5).'
' let processed = 1 - elseif a:line =~ '^!!!!.*$' + elseif a:line =~ g:vimwiki_rxH4 let line = '

'.strpart(a:line, 4).'

' let processed = 1 - elseif a:line =~ '^!!!.*$' + elseif a:line =~ g:vimwiki_rxH3 let line = '

'.strpart(a:line, 3).'

' let processed = 1 - elseif a:line =~ '^!!.*$' + elseif a:line =~ g:vimwiki_rxH2 let line = '

'.strpart(a:line, 2).'

' let processed = 1 - elseif a:line =~ '^!.*$' + elseif a:line =~ g:vimwiki_rxH1 let line = '

'.strpart(a:line, 1).'

' let processed = 1 endif - if processed - return [processed, line] - endif - - "" dumb test if Tagit has made changes to line - let lenbefore = len(line) - let line = s:Tagit(a:line, '^=\{6}.*=\{6}\s*$', '
', '
', 6) - if len(line)!=lenbefore - let processed = 1 - endif - - if !processed - let lenbefore = len(line) - let line = s:Tagit(a:line, '^=\{5}.*=\{5}\s*$', '
', '
', 5) - if len(line)!=lenbefore - let processed = 1 - endif - endif - if !processed - let lenbefore = len(line) - let line = s:Tagit(a:line, '^=\{4}.*=\{4}\s*$', '

', '

', 4) - if len(line)!=lenbefore - let processed = 1 - endif - endif - if !processed - let lenbefore = len(line) - let line = s:Tagit(a:line, '^=\{3}.*=\{3}\s*$', '

', '

', 3) - if len(line)!=lenbefore - let processed = 1 - endif - endif - if !processed - let lenbefore = len(line) - let line = s:Tagit(a:line, '^=\{2}.*=\{2}\s*$', '

', '

', 2) - if len(line)!=lenbefore - let processed = 1 - endif - endif - if !processed - let lenbefore = len(line) - let line = s:Tagit(a:line, '^=\{1}.*=\{1}\s*$', '

', '

', 1) - if len(line)!=lenbefore - let processed = 1 - endif - endif - return [processed, line] endfunction "}}} @@ -644,83 +810,6 @@ function! vimwiki#Wiki2HTML(path, wikifile) "{{{ return [processed, lines, table] endfunction "}}} - "" yes I know it is dumb to name variables like that ;) - function! s:Linkit(line, regexp, regexp2) "{{{ - let line = a:line - let done = 0 - let posend = -1 - let posbeg = 0 - let posbeg2 = 0 - while !done - let posbeg = match(a:line, a:regexp, posend+1) - let posbeg2 = match(a:line, a:regexp2, posend+1) - if (posbeg < posbeg2 && posbeg!=-1) || (posbeg2==-1 && posbeg!=-1) - let str = matchstr(a:line, a:regexp, posbeg) - if str != '' - let word = s:WikiStripWord(str, g:vimwiki_stripsym) - - let ext = '.html' - let path = '' - if s:WikiIsLinkToNonWikiFile(word) - let ext = '' - " let path = g:vimwiki_home - endif - - if s:isLinkToPic(word) - let strrep = '' - else - let strrep = ''.word.'' - endif - let line = substitute(line, escape(str,'[]*?\'), strrep, "") - let posend = posbeg+len(str) - else - let done = 1 - endif - elseif posbeg2 != -1 - let str = matchstr(a:line, a:regexp2, posbeg2) - if str != '' - if s:isLinkToPic(str) - let strrep = '' - else - let strrep = ''.str.'' - endif - let line = substitute(line, str, strrep, "") - let posend = posbeg2+len(str) - else - let done = 1 - endif - else - let done = 1 - endif - endwhile - return line - endfunction "}}} - - function! s:processLink(line) "{{{ - let line = '' - let done = 0 - - let pos0 = 0 - let pos1 = 0 - let pos2 = 0 - while !done - let pos1 = match(a:line, g:vimwiki_rxCode, pos2) - let pos2 = matchend(a:line, g:vimwiki_rxCode, pos1) - if pos1!=-1 && pos2!=-1 - let line = line.s:Linkit(strpart(a:line, pos0, pos1-pos0), g:vimwiki_rxWikiWord, g:vimwiki_rxWeblink) - let line = line.strpart(a:line, pos1, pos2-pos1) - let pos0 = pos2 - else - let line = line.s:Linkit(strpart(a:line, pos0, len(a:line)-pos0), g:vimwiki_rxWikiWord, g:vimwiki_rxWeblink) - let done = 1 - endif - endwhile - - return line - endfunction "}}} - - "" TODO: processTODO(line) - "" change dangerous html symbols - < > & (line) function! s:safeHTML(line) "{{{ let line = substitute(a:line, '&', '\&', 'g') @@ -729,58 +818,117 @@ function! vimwiki#Wiki2HTML(path, wikifile) "{{{ return line endfunction "}}} - function! s:Tagit(line, regexp, tagOpen, tagClose, cSymRemove) "{{{ - let line = a:line - let done = 0 - while !done - let str = matchstr(line, a:regexp) - if str != '' - let strrep = a:tagOpen.strpart(str, a:cSymRemove, len(str)-2*a:cSymRemove).a:tagClose - let line = substitute(line, a:regexp, escape(strrep, '[]*.?&\'), "") - else - let done = 1 + "" Substitute text found by regexp_match with tagOpen.regexp_subst.tagClose + function! s:MakeTagHelper(line, regexp_match, tagOpen, tagClose, cSymRemove, func) " {{{ + let pos = 0 + let lines = split(a:line, a:regexp_match, 1) + let res_line = "" + for line in lines + let res_line = res_line.line + let matched = matchstr(a:line, a:regexp_match, pos) + if matched != "" + let toReplace = strpart(matched, a:cSymRemove, len(matched)-2*a:cSymRemove) + if a:func!="" + let toReplace = {a:func}(escape(toReplace, '\&*[]?%')) + else + " let toReplace = a:tagOpen.escape(toReplace, '\&*[]?%').a:tagClose + let toReplace = a:tagOpen.toReplace.a:tagClose + endif + let res_line = res_line.toReplace endif - endwhile + let pos = matchend(a:line, a:regexp_match, pos) + endfor + return res_line + + endfunction " }}} + + "" Make tags only if not in ` ... ` + "" ... should be function that process regexp_match deeper. + function! s:MakeTag(line, regexp_match, tagOpen, tagClose, ...) " {{{ + "check if additional function exists + let func = "" + let cSym = 1 + if a:0 == 2 + let cSym = a:1 + let func = a:2 + elseif a:0 == 1 + let cSym = a:1 + endif + + let patt_splitter = g:vimwiki_rxCode + let patt_splitter = '\('.g:vimwiki_rxCode.'\)\|\(\)\|\(\)' + if g:vimwiki_rxCode == a:regexp_match + let res_line = s:MakeTagHelper(a:line, a:regexp_match, a:tagOpen, a:tagClose, cSym, func) + else + let pos = 0 + let lines = split(a:line, patt_splitter, 1) + let res_line = "" + for line in lines + let res_line = res_line.s:MakeTagHelper(line, a:regexp_match, a:tagOpen, a:tagClose, cSym, func) + let res_line = res_line.matchstr(a:line, patt_splitter, pos) + let pos = matchend(a:line, patt_splitter, pos) + endfor + endif + return res_line + endfunction " }}} + + "" Make link desc + "" from [link link desc] + function! s:MakeExternalLink(entag) "{{{ + let line = '' + if s:isWebLink(a:entag) + let lnkElements = split(a:entag) + let head = lnkElements[0] + let rest = join(lnkElements[1:]) + if rest=="" + let rest=head + endif + if s:isImgLink(rest) + if rest!=head + let line = '' + else + let line = '' + endif + else + let line = ''.rest.'' + endif + else + if s:isImgLink(a:entag) + let line = '' + else + let line = ''.a:entag.'' + endif + endif return line endfunction "}}} - function! s:replacePairs(line, regexp, tagOpen, tagClose) "{{{ + "" Make This is a link + "" from [[This is a link]] + function! s:MakeInternalLink(entag) "{{{ let line = '' - let done = 0 - - if a:regexp == g:vimwiki_rxCode - let line = s:Tagit(a:line, a:regexp, a:tagOpen, a:tagClose, 1) + if s:isImgLink(a:entag) + let line = '' else - let pos0 = 0 - let pos1 = 0 - let pos2 = 0 - while !done - "" TODO: improve it, improve it, improve it... - let pos1 = match(a:line, g:vimwiki_rxCode, pos2) - let tpos1 = match(a:line, g:vimwiki_rxWeblink, pos2) - let ttpos1 = match(a:line, g:vimwiki_rxWikiWord, pos2) - let pos2 = matchend(a:line, g:vimwiki_rxCode, pos1) - let tpos2 = matchend(a:line, g:vimwiki_rxWeblink, tpos1) - let ttpos2 = matchend(a:line, g:vimwiki_rxWikiWord, ttpos1) - if (pos1 < tpos1) - let pos1 = tpos1 - endif - if (pos1 < ttpos1) - let pos1 = ttpos1 - endif - let pos2 = max([pos2, tpos2, ttpos2]) - - if pos1!=-1 && pos2!=-1 - let line = line.s:Tagit(strpart(a:line, pos0, pos1-pos0), a:regexp, a:tagOpen, a:tagClose, 1) - let line = line.strpart(a:line, pos1, pos2-pos1) - let pos0 = pos2 - else - let line = line.s:Tagit(strpart(a:line, pos0, len(a:line)-pos0), a:regexp, a:tagOpen, a:tagClose, 1) - let done = 1 - endif - endwhile + let line = ''.a:entag.'' endif + return line + endfunction "}}} + "" Make WikiWord + "" from WikiWord + function! s:MakeWikiWordLink(entag) "{{{ + let line = ''.a:entag.'' + return line + endfunction "}}} + + "" Make http://habamax.ru + "" from http://habamax.ru + function! s:MakeBareBoneLink(entag) "{{{ + if s:isImgLink(a:entag) + let line = '' + else + let line = ''.a:entag.'' + endif return line endfunction "}}} @@ -829,7 +977,6 @@ function! vimwiki#Wiki2HTML(path, wikifile) "{{{ endif - "" TODO: `code` do not emphasize or bold it. "" list if !processed let [processed, lines] = s:processList(line, lists) @@ -842,20 +989,34 @@ function! vimwiki#Wiki2HTML(path, wikifile) "{{{ if processed && table let table = s:closeTable(table, ldest) endif - call map(lines, 's:replacePairs(v:val, ''_.\{-}_'', '''', '''')') - call map(lines, 's:replacePairs(v:val, ''\*.\{-}\*'', '''', '''')') - call map(lines, 's:processLink(v:val)') - call map(lines, 's:replacePairs(v:val, ''`.\{-}`'', '''', '''')') + call map(lines, 's:MakeTag(v:val, ''\[\[.\{-}\]\]'', '''', '''', 2, ''s:MakeInternalLink'')') + call map(lines, 's:MakeTag(v:val, ''\[.\{-}\]'', '''', '''', 1, ''s:MakeExternalLink'')') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxWeblink, '''', '''', 0, ''s:MakeBareBoneLink'')') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxWikiWord, '''', '''', 0, ''s:MakeWikiWordLink'')') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxItalic, '''', '''')') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxBold, '''', '''')') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxTodo, '''', '''', 0)') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxDelText, '''', '''', 2)') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxSuperScript, '''', '''', 1)') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxSubScript, '''', '''', 2)') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxCode, '''', '''')') call extend(ldest, lines) endif "" table if !processed let [processed, lines, table] = s:processTable(line, table) - call map(lines, 's:replacePairs(v:val, ''_.\{-}_'', '''', '''')') - call map(lines, 's:replacePairs(v:val, ''\*.\{-}\*'', '''', '''')') - call map(lines, 's:processLink(v:val)') - call map(lines, 's:replacePairs(v:val, ''`.\{-}`'', '''', '''')') + call map(lines, 's:MakeTag(v:val, ''\[\[.\{-}\]\]'', '''', '''', 2, ''s:MakeInternalLink'')') + call map(lines, 's:MakeTag(v:val, ''\[.\{-}\]'', '''', '''', 1, ''s:MakeExternalLink'')') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxWeblink, '''', '''', 0, ''s:MakeBareBoneLink'')') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxWikiWord, '''', '''', 0, ''s:MakeWikiWordLink'')') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxItalic, '''', '''')') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxBold, '''', '''')') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxTodo, '''', '''', 0)') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxDelText, '''', '''', 2)') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxSuperScript, '''', '''', 1)') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxSubScript, '''', '''', 2)') + call map(lines, 's:MakeTag(v:val, g:vimwiki_rxCode, '''', '''')') call extend(ldest, lines) endif @@ -881,10 +1042,17 @@ function! vimwiki#Wiki2HTML(path, wikifile) "{{{ "" P if !processed - let line = s:replacePairs(line, '_.\{-}_', '', '') - let line = s:replacePairs(line, '\*.\{-}\*', '', '') - let line = s:processLink(line) - let line = s:replacePairs(line, '`.\{-}`', '', '') + let line = s:MakeTag(line, '\[\[.\{-}\]\]', '', '', 2, 's:MakeInternalLink') + let line = s:MakeTag(line, '\[.\{-}\]', '', '', 1, 's:MakeExternalLink') + let line = s:MakeTag(line, g:vimwiki_rxWeblink, '', '', 0, 's:MakeBareBoneLink') + let line = s:MakeTag(line, g:vimwiki_rxWikiWord, '', '', 0, 's:MakeWikiWordLink') + let line = s:MakeTag(line, g:vimwiki_rxItalic, '', '') + let line = s:MakeTag(line, g:vimwiki_rxBold, '', '') + let line = s:MakeTag(line, g:vimwiki_rxTodo, '', '', 0) + let line = s:MakeTag(line, g:vimwiki_rxDelText, '', '', 2) + let line = s:MakeTag(line, g:vimwiki_rxSuperScript, '', '', 1) + let line = s:MakeTag(line, g:vimwiki_rxSubScript, '', '', 2) + let line = s:MakeTag(line, g:vimwiki_rxCode, '', '') let [processed, lines] = s:processP(line) if processed && pre let pre = s:closePre(pre, ldest) @@ -921,3 +1089,284 @@ function! vimwiki#Wiki2HTML(path, wikifile) "{{{ endfunction "}}} " 2}}} +syntax\vimwiki.vim [[[1 +114 +" Vim syntax file +" Language: Wiki +" Author: Maxim Kim (habamax at gmail dot com) +" Home: http://code.google.com/p/vimwiki/ +" Filenames: *.wiki +" Last Change: [15.09.2008 - 12:07] +" Version: 0.5 + +" Quit if syntax file is already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +"" use max highlighting - could be quite slow if there are too many wikifiles +if g:vimwiki_maxhi + " Every WikiWord is nonexistent + execute 'syntax match wikiNoExistsWord /'.g:vimwiki_word1.'/' + execute 'syntax match wikiNoExistsWord /'.g:vimwiki_word2.'/' + " till we find them in g:vimwiki_home + call vimwiki#WikiHighlightWords() +else + " A WikiWord (unqualifiedWikiName) + execute 'syntax match wikiWord /'.g:vimwiki_word1.'/' + " A [[bracketed wiki word]] + execute 'syntax match wikiWord /'.g:vimwiki_word2.'/' +endif + + +" text: "this is a link (optional tooltip)":http://www.microsoft.com +" TODO: check URL syntax against RFC +let g:vimwiki_rxWeblink = '\("[^"(]\+\((\([^)]\+\))\)\?":\)\?\(https\?\|ftp\|gopher\|telnet\|file\|notes\|ms-help\):\(\(\(//\)\|\(\\\\\)\)\+[A-Za-z0-9:#@%/;$~_?+-=.&\-\\\\]*\)' +execute 'syntax match wikiLink `'.g:vimwiki_rxWeblink.'`' + +" Emoticons: must come after the Textilisms, as later rules take precedence +" over earlier ones. This match is an approximation for the ~70 distinct +syntax match wikiEmoticons /\((.)\|:[()|$@]\|:-[DOPS()\]|$@]\|;)\|:'(\)/ + +let g:vimwiki_rxTodo = '\(TODO:\|DONE:\|FIXME:\|FIXED:\)' +execute 'syntax match wikiTodo /'. g:vimwiki_rxTodo .'/' + +" Load concrete Wiki syntax +execute 'runtime! syntax/vimwiki_'.g:vimwiki_syntax.'.vim' + +execute 'syntax match wikiBold /'.g:vimwiki_rxBold.'/' + +execute 'syntax match wikiItalic /'.g:vimwiki_rxItalic.'/' + +execute 'syntax match wikiCode /'.g:vimwiki_rxCode.'/' + +execute 'syntax match wikiDelText /'.g:vimwiki_rxDelText.'/' + +execute 'syntax match wikiSuperScript /'.g:vimwiki_rxSuperScript.'/' + +execute 'syntax match wikiSubScript /'.g:vimwiki_rxSubScript.'/' + +" Aggregate all the regular text highlighting into wikiText +syntax cluster wikiText contains=wikiItalic,wikiBold,wikiCode,wikiDelText,wikiSuperScript,wikiSubScript,wikiWord,wikiEmoticons + +" Header levels, 1-6 +execute 'syntax match wikiH1 /'.g:vimwiki_rxH1.'/' +execute 'syntax match wikiH2 /'.g:vimwiki_rxH2.'/' +execute 'syntax match wikiH3 /'.g:vimwiki_rxH3.'/' +execute 'syntax match wikiH4 /'.g:vimwiki_rxH4.'/' +execute 'syntax match wikiH5 /'.g:vimwiki_rxH5.'/' +execute 'syntax match wikiH6 /'.g:vimwiki_rxH6.'/' + +"
, horizontal rule +execute 'syntax match wikiHR /'.g:vimwiki_rxHR.'/' + +" Tables. Each line starts and ends with '||'; each cell is separated by '||' +execute 'syntax match wikiTable /'.g:vimwiki_rxTable.'/' + +" Bulleted list items start with whitespace(s), then '*' +" syntax match wikiList /^\s\+\(\*\|[1-9]\+0*\.\).*$/ contains=@wikiText +" highlight only bullets and digits. +execute 'syntax match wikiList /'.g:vimwiki_rxListBullet.'/' +execute 'syntax match wikiList /'.g:vimwiki_rxListNumber.'/' + +" Treat all other lines that start with spaces as PRE-formatted text. +execute 'syntax match wikiPre /'.g:vimwiki_rxPre1.'/' + + + + +hi def link wikiH1 Title +hi def link wikiH2 wikiH1 +hi def link wikiH3 wikiH2 +hi def link wikiH4 wikiH3 +hi def link wikiH5 wikiH4 +hi def link wikiH6 wikiH5 +hi def link wikiHR wikiH6 + +hi def wikiBold term=bold cterm=bold gui=bold +hi def wikiItalic term=italic cterm=italic gui=italic + +hi def link wikiCode PreProc +hi def link wikiWord Underlined +hi def link wikiNoExistsWord Error + +hi def link wikiPre PreProc +hi def link wikiLink Underlined +hi def link wikiList Type +hi def link wikiTable PreProc +hi def link wikiEmoticons Constant +hi def link wikiDelText Comment +hi def link wikiInsText Constant +hi def link wikiSuperScript Constant +hi def link wikiSubScript Constant +hi def link wikiTodo Todo + +let b:current_syntax="vimwiki" + +syntax\vimwiki_default.vim [[[1 +54 +" Vim syntax file +" Language: Wiki (vimwiki default) +" Author: Maxim Kim (habamax at gmail dot com) +" Home: http://code.google.com/p/vimwiki/ +" Filenames: *.wiki +" Last Change: [15.09.2008 - 12:07] +" Version: 0.5 + +" text: *strong* +let g:vimwiki_rxBold = '\*[^*]\+\*' + +" text: _emphasis_ +let g:vimwiki_rxItalic = '_[^_]\+_' + +" text: `code` +let g:vimwiki_rxCode = '`[^`]\+`' + +" text: ~~deleted text~~ +let g:vimwiki_rxDelText = '\~\~[^~]\+\~\~' + +" text: ^superscript^ +let g:vimwiki_rxSuperScript = '\^[^^]\+\^' + +" text: ,,subscript,, +let g:vimwiki_rxSubScript = ',,[^,]\+,,' + +" Header levels, 1-6 +let g:vimwiki_rxH1 = '^!\{1}.*$' +let g:vimwiki_rxH2 = '^!\{2}.*$' +let g:vimwiki_rxH3 = '^!\{3}.*$' +let g:vimwiki_rxH4 = '^!\{4}.*$' +let g:vimwiki_rxH5 = '^!\{5}.*$' +let g:vimwiki_rxH6 = '^!\{6}.*$' + +"
, horizontal rule +let g:vimwiki_rxHR = '^----.*$' + +" Tables. Each line starts and ends with '||'; each cell is separated by '||' +let g:vimwiki_rxTable = '||' + +" Bulleted list items start with whitespace(s), then '*' +" syntax match wikiList /^\s\+\(\*\|[1-9]\+0*\.\).*$/ contains=@wikiText +" highlight only bullets and digits. +" let g:vimwiki_rxList = '^\s\+\(\*\|#\)' +let g:vimwiki_rxListBullet = '^\s\+\*' +let g:vimwiki_rxListNumber = '^\s\+#' + +" Treat all other lines that start with spaces as PRE-formatted text. +let g:vimwiki_rxPre1 = '^\s\+[^[:blank:]*#].*$' + +syntax region wikiPre start=/^{{{\s*$/ end=/^}}}\s*$/ +syntax sync match wikiPreSync grouphere wikiPre /^{{{\s*$/ + +" vim:tw=0: +syntax\vimwiki_google.vim [[[1 +53 +" Vim syntax file +" Language: Wiki +" Author: Maxim Kim (habamax at gmail dot com) +" Home: http://code.google.com/p/vimwiki/ +" Filenames: *.wiki +" Last Change: [15.09.2008 - 12:07] +" Version: 0.5 + +" text: *strong* +let g:vimwiki_rxBold = '\*[^*]\+\*' + +" text: _emphasis_ +let g:vimwiki_rxItalic = '_[^_]\+_' + +" text: `code` +let g:vimwiki_rxCode = '`[^`]\+`' + +" text: ~~deleted text~~ +let g:vimwiki_rxDelText = '\~\~[^~]\+\~\~' + +" text: ^superscript^ +let g:vimwiki_rxSuperScript = '\^[^^]\+\^' + +" text: ,,subscript,, +let g:vimwiki_rxSubScript = ',,[^,]\+,,' + +" Header levels, 1-6 +let g:vimwiki_rxH1 = '^\s*=\{1}.*=\{1}\s*$' +let g:vimwiki_rxH2 = '^\s*=\{2}.*=\{2}\s*$' +let g:vimwiki_rxH3 = '^\s*=\{3}.*=\{3}\s*$' +let g:vimwiki_rxH4 = '^\s*=\{4}.*=\{4}\s*$' +let g:vimwiki_rxH5 = '^\s*=\{5}.*=\{5}\s*$' +let g:vimwiki_rxH6 = '^\s*=\{6}.*=\{6}\s*$' + +"
, horizontal rule +let g:vimwiki_rxHR = '^----.*$' + +" Tables. Each line starts and ends with '||'; each cell is separated by '||' +let g:vimwiki_rxTable = '||' + +" Bulleted list items start with whitespace(s), then '*' +" syntax match wikiList /^\s\+\(\*\|[1-9]\+0*\.\).*$/ contains=@wikiText +" highlight only bullets and digits. +let g:vimwiki_rxListBullet = '^\s\+\*' +let g:vimwiki_rxListNumber = '^\s\+#' + +" Treat all other lines that start with spaces as PRE-formatted text. +let g:vimwiki_rxPre1 = '^\s\+[^[:blank:]*#].*$' + +syntax region wikiPre start=/^{{{\s*$/ end=/^}}}\s*$/ +syntax sync match wikiPreSync grouphere wikiPre /^{{{\s*$/ + +" vim:tw=0: +syntax\vimwiki_media.vim [[[1 +52 +" Vim syntax file +" Language: Wiki (MediaWiki) +" Author: Maxim Kim (habamax at gmail dot com) +" Home: http://code.google.com/p/vimwiki/ +" Filenames: *.wiki +" Last Change: [15.09.2008 - 12:07] +" Version: 0.5 + +" text: '''strong''' +let g:vimwiki_rxBold = "'''[^']\\+'''" + +" text: ''emphasis'' +let g:vimwiki_rxItalic = "''[^']\\+''" + +" text: `code` +let g:vimwiki_rxCode = '`[^`]\+`' + +" text: ~~deleted text~~ +let g:vimwiki_rxDelText = '\~\~[^~]\+\~\~' + +" text: ^superscript^ +let g:vimwiki_rxSuperScript = '\^[^^]\+\^' + +" text: ,,subscript,, +let g:vimwiki_rxSubScript = ',,[^,]\+,,' + +" Header levels, 1-6 +let g:vimwiki_rxH1 = '^\s*=\{1}.\+=\{1}\s*$' +let g:vimwiki_rxH2 = '^\s*=\{2}.\+=\{2}\s*$' +let g:vimwiki_rxH3 = '^\s*=\{3}.\+=\{3}\s*$' +let g:vimwiki_rxH4 = '^\s*=\{4}.\+=\{4}\s*$' +let g:vimwiki_rxH5 = '^\s*=\{5}.\+=\{5}\s*$' +let g:vimwiki_rxH6 = '^\s*=\{6}.\+=\{6}\s*$' + +"
, horizontal rule +let g:vimwiki_rxHR = '^----.*$' + +" Tables. Each line starts and ends with '||'; each cell is separated by '||' +let g:vimwiki_rxTable = '||' + +" Bulleted list items start with whitespace(s), then '*' +" highlight only bullets and digits. +let g:vimwiki_rxListBullet = '^\s*\*\+\([^*]*$\)\@=' +let g:vimwiki_rxListNumber = '^\s*#\+' + +" Treat all other lines that start with spaces as PRE-formatted text. +let g:vimwiki_rxPre1 = '^\s\+[^[:blank:]*#].*$' + +syntax region wikiPre start=/^{{{\s*$/ end=/^}}}\s*$/ +syntax sync match wikiPreSync grouphere wikiPre /^{{{\s*$/ + +" vim:tw=0: