diff --git a/autoload/vimwiki/html.vim b/autoload/vimwiki/html.vim
index c1d2f0f..ff06a7d 100644
--- a/autoload/vimwiki/html.vim
+++ b/autoload/vimwiki/html.vim
@@ -9,6 +9,36 @@ if exists('g:loaded_vimwiki_html_auto') || &compatible
endif
let g:loaded_vimwiki_html_auto = 1
+" FIXME: Magics: Why not use the current syntax highlight
+" This is due to historical copy paste and lazyness of markdown user
+" text: **strong** or __strong__
+let s:rxBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
+ \'\(\*\|_\)\{2\}'.
+ \'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'.
+ \'\1\{2\}'.
+ \'\%([[:punct:]]\|\s\|$\)\@='
+
+" text: _emphasis_ or *emphasis*
+let s:rxItalic = '\%(^\|\s\|[[:punct:]]\)\@<='.
+ \'\(\*\|_\)'.
+ \'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'.
+ \'\1'.
+ \'\%([[:punct:]]\|\s\|$\)\@='
+
+" Fixme: and those ? are they converted ?
+" text: *_bold italic_* or _*italic bold*_
+let rxBoldItalic = '\%(^\|\s\|[[:punct:]]\)\@<='.
+ \'\(\*\)\{3\}'.
+ \'\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)'.
+ \'\1\{3\}'.
+ \'\%([[:punct:]]\|\s\|$\)\@='
+
+let rxItalicBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
+ \'\(_\)\{3\}'.
+ \'\%([^_`[:space:]][^_`]*[^_`[:space:]]\|[^_`[:space:]]\)'.
+ \'\1\{3\}'.
+ \'\%([[:punct:]]\|\s\|$\)\@='
+
function! s:root_path(subdir) abort
return repeat('../', len(split(a:subdir, '[/\\]')))
@@ -609,8 +639,9 @@ endfunction
function! s:process_tags_typefaces(line, header_ids) abort
let line = a:line
- let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxItalic'), 's:tag_em')
- let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxBold'), 's:tag_strong', a:header_ids)
+ " Convert line tag by tag
+ let line = s:make_tag(line, s:rxItalic, 's:tag_em')
+ let line = s:make_tag(line, s:rxBold, 's:tag_strong', a:header_ids)
let line = s:make_tag(line, vimwiki#vars#get_global('rxTodo'), 's:tag_todo')
let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxDelText'), 's:tag_strike')
let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxSuperScript'), 's:tag_super')
@@ -978,7 +1009,7 @@ function! s:process_tag_list(line, lists) abort
" text.
" XXX necessary? in *bold* text, no space must follow the first *
if !in_list
- let pos = match(a:line, '^\s*'.vimwiki#vars#get_syntaxlocal('rxBold'))
+ let pos = match(a:line, '^\s*' . s:rxBold)
if pos != -1
return [0, []]
endif
diff --git a/autoload/vimwiki/u.vim b/autoload/vimwiki/u.vim
index 588d96b..cd13819 100644
--- a/autoload/vimwiki/u.vim
+++ b/autoload/vimwiki/u.vim
@@ -215,3 +215,79 @@ function! vimwiki#u#ft_is_vw() abort
return 0
endif
endfunction
+
+" Helper: Create highlight region between two tags
+" :param: tag example ''
+" :param: syntax_group example: VimwikiBold
+" :param: contains coma separated and prefixed, default VimwikiHTMLTag
+" :param: (1) is contained
+function! vimwiki#u#hi_tag(tag_pre, tag_post, syntax_group, contains, ...) abort
+ let opt_is_contained = a:0 > 0 ? 'contained ' : ''
+ let opt_contains = ''
+ if a:contains !=# ''
+ let opt_contains = 'contains=' . a:contains . ' '
+ endif
+ let cmd = 'syn region ' . a:syntax_group . ' matchgroup=VimwikiHTMLDelimiter ' .
+ \ opt_is_contained .
+ \ 'start="' . a:tag_pre . '" ' .
+ \ 'end="' . a:tag_post . '" ' .
+ \ 'keepend ' .
+ \ opt_contains .
+ \ b:vimwiki_syntax_concealends
+ "echom cmd
+ exe cmd
+endfunction
+
+
+" Highight typeface: see $VIMRUNTIME/syntax/html.vim
+" -- Basically allow nesting with multiple definition contained
+" :param: dic must contain: bold, italic and underline, even if underline is often void,
+" -- see here for underline not defined: https://stackoverflow.com/questions/3003476
+function! vimwiki#u#hi_typeface(dic) abort
+ " Italic must go before, otherwise single * takes precedence over ** and ** is considered as
+ " a void italic.
+ " Note that the last syntax defined take precedence so that user can change at runtime
+ " (:h :syn-define)
+ for i in a:dic['italic']
+ " -- Italic 1
+ call vimwiki#u#hi_tag(i[0], i[1], 'VimwikiItalic ', 'VimwikiItalicBold,VimwikiItalicUnderline')
+ " -- Bold 2
+ call vimwiki#u#hi_tag(i[0], i[1], 'VimwikiBoldItalic', 'VimwikiBoldItalicUnderline', 1)
+ " -- Bold 3
+ call vimwiki#u#hi_tag(i[0], i[1], 'VimwikiBoldUnderlineItalic', '', 2)
+ " -- Underline 2
+ call vimwiki#u#hi_tag(i[0], i[1], 'VimwikiUnderlineItalic', 'VimwikiUnderlineItalicBold', 1)
+ " -- Underline 3
+ call vimwiki#u#hi_tag(i[0], i[1], 'VimwikiUnderlineBoldItalic', '', 2)
+ endfor
+ for b in a:dic['bold']
+ " -- Bold 1
+ call vimwiki#u#hi_tag(b[0],b[1], 'VimwikiBold', 'VimwikiBoldUnderline,VimwikiBoldItalic')
+ " -- Italic 2
+ call vimwiki#u#hi_tag(b[0], b[1], 'VimwikiItalicBold', 'VimwikiItalicBoldUnderline', 1)
+ " -- Italic 3
+ call vimwiki#u#hi_tag(b[0], b[1], 'VimwikiItalicUnderlineBold', '', 2)
+ " -- Underline 2
+ call vimwiki#u#hi_tag(b[0], b[1], 'VimwikiUnderlineBold', 'VimwikiUnderlineBoldItalic', 1)
+ " -- Underline 3
+ call vimwiki#u#hi_tag(b[0], b[1], 'VimwikiUnderlineItalicBold', '', 2)
+ endfor
+ " markdown
+ if has_key(a:dic, 'bold_italic')
+ for bi in a:dic['bold_italic']
+ call vimwiki#u#hi_tag(bi[0], bi[1], 'VimwikiBoldItalic', 'VimwikiBoldItalicUnderline')
+ endfor
+ endif
+ for u in a:dic['underline']
+ " -- Underline 1
+ call vimwiki#u#hi_tag(u[0], u[1], 'VimwikiUnderline', 'VimwikiUnderlineBold,VimwikiUnderlineItalic')
+ " -- Bold 2
+ call vimwiki#u#hi_tag(u[0], u[1], 'VimwikiBoldUnderline', 'VimwikiBoldUnderlineItalic', 1)
+ " -- Bold 3
+ call vimwiki#u#hi_tag(u[0], u[1], 'VimwikiBoldItalicUnderline', '', 2)
+ " -- Italic 2
+ call vimwiki#u#hi_tag(u[0], u[1], 'VimwikiItalicUnderline', 'VimwikiItalicUnderlineBold', 1)
+ " -- Italic 3
+ call vimwiki#u#hi_tag(u[0], u[1], 'VimwikiItalicBoldUnderline', '', 2)
+ endfor
+endfunction
diff --git a/doc/vimwiki.txt b/doc/vimwiki.txt
index a9ef944..5cb209e 100644
--- a/doc/vimwiki.txt
+++ b/doc/vimwiki.txt
@@ -2061,6 +2061,8 @@ conditionally, make sure the settings are set before Vimwiki loads (that is,
before plugin/vimwiki.vim is sourced). If this is not possible, try this
command after the Vimwiki settings are (re-) set: >
:call vimwiki#vars#init()
+If you also want to reload syntax variables, prefix the last command by: >
+ :unlet g:vimwiki_syntax_variables
------------------------------------------------------------------------------
12.1 Registered Wiki *g:vimwiki_list* *vimwiki-register-wiki*
diff --git a/syntax/vimwiki.vim b/syntax/vimwiki.vim
index 513ba23..2396b5b 100644
--- a/syntax/vimwiki.vim
+++ b/syntax/vimwiki.vim
@@ -162,14 +162,6 @@ endfor
if vimwiki#vars#get_global('conceal_onechar_markers')
execute 'syn match VimwikiEqInChar contained /'.
\ vimwiki#vars#get_syntaxlocal('char_eqin').'/'.b:vimwiki_syntax_conceal
- execute 'syn match VimwikiBoldChar contained /'.
- \ vimwiki#vars#get_syntaxlocal('char_bold').'/'.b:vimwiki_syntax_conceal
- execute 'syn match VimwikiItalicChar contained /'.
- \ vimwiki#vars#get_syntaxlocal('char_italic').'/'.b:vimwiki_syntax_conceal
- execute 'syn match VimwikiBoldItalicChar contained /'.
- \ vimwiki#vars#get_syntaxlocal('char_bolditalic').'/'.b:vimwiki_syntax_conceal
- execute 'syn match VimwikiItalicBoldChar contained /'.
- \ vimwiki#vars#get_syntaxlocal('char_italicbold').'/'.b:vimwiki_syntax_conceal
execute 'syn match VimwikiCodeChar contained /'.
\ vimwiki#vars#get_syntaxlocal('char_code').'/'.b:vimwiki_syntax_conceal
execute 'syn match VimwikiDelTextChar contained /'.
@@ -215,14 +207,6 @@ execute 'syn match VimwikiHeaderChar contained /\%(^\s*'.
\ '\+\s*$\)/'
execute 'syn match VimwikiEqInCharT contained /'
\ .vimwiki#vars#get_syntaxlocal('char_eqin').'/'
-execute 'syn match VimwikiBoldCharT contained /'
- \ .vimwiki#vars#get_syntaxlocal('char_bold').'/'
-execute 'syn match VimwikiItalicCharT contained /'
- \ .vimwiki#vars#get_syntaxlocal('char_italic').'/'
-execute 'syn match VimwikiBoldItalicCharT contained /'
- \ .vimwiki#vars#get_syntaxlocal('char_bolditalic').'/'
-execute 'syn match VimwikiItalicBoldCharT contained /'
- \ .vimwiki#vars#get_syntaxlocal('char_italicbold').'/'
execute 'syn match VimwikiCodeCharT contained /'
\ .vimwiki#vars#get_syntaxlocal('char_code').'/'
execute 'syn match VimwikiDelTextCharT contained /'
@@ -274,31 +258,11 @@ elseif vimwiki#vars#get_global('hl_cb_checked') == 2
endif
-execute 'syntax match VimwikiBold /'.vimwiki#vars#get_syntaxlocal('rxBold').
- \ '/ contains=VimwikiBoldChar,@Spell'
-execute 'syntax match VimwikiBoldT /'.vimwiki#vars#get_syntaxlocal('rxBold').
- \ '/ contained contains=VimwikiBoldCharT,@Spell'
-
execute 'syntax match VimwikiEqIn /'.vimwiki#vars#get_syntaxlocal('rxEqIn').
\ '/ contains=VimwikiEqInChar,@NoSpell'
execute 'syntax match VimwikiEqInT /'.vimwiki#vars#get_syntaxlocal('rxEqIn').
\ '/ contained contains=VimwikiEqInCharT,@NoSpell'
-execute 'syntax match VimwikiItalic /'.vimwiki#vars#get_syntaxlocal('rxItalic').
- \ '/ contains=VimwikiItalicChar,@Spell'
-execute 'syntax match VimwikiItalicT /'.vimwiki#vars#get_syntaxlocal('rxItalic').
- \ '/ contained contains=VimwikiItalicCharT,@Spell'
-
-execute 'syntax match VimwikiBoldItalic /'.vimwiki#vars#get_syntaxlocal('rxBoldItalic').
- \ '/ contains=VimwikiBoldItalicChar,VimwikiItalicBoldChar,@Spell'
-execute 'syntax match VimwikiBoldItalicT /'.vimwiki#vars#get_syntaxlocal('rxBoldItalic').
- \ '/ contained contains=VimwikiBoldItalicChatT,VimwikiItalicBoldCharT,@Spell'
-
-execute 'syntax match VimwikiItalicBold /'.vimwiki#vars#get_syntaxlocal('rxItalicBold').
- \ '/ contains=VimwikiBoldItalicChar,VimwikiItalicBoldChar,@Spell'
-execute 'syntax match VimwikiItalicBoldT /'.vimwiki#vars#get_syntaxlocal('rxItalicBold').
- \ '/ contained contains=VimwikiBoldItalicCharT,VimsikiItalicBoldCharT,@Spell'
-
execute 'syntax match VimwikiDelText /'.vimwiki#vars#get_syntaxlocal('rxDelText').
\ '/ contains=VimwikiDelTextChar,@Spell'
execute 'syntax match VimwikiDelTextT /'.vimwiki#vars#get_syntaxlocal('rxDelText').
@@ -343,91 +307,16 @@ syntax match VimwikiPlaceholderParam /.*/ contained
" html tags
-" Copied from $VIMRUNTIME
-" Note: The me=s-1 was omited from the region definition
-" See: `syn region VimwikiBoldUnderlineItalic contained start="" end=""me=s-1 contains=VimwikiHTMLTag...`
-" Note: Not configurable
if vimwiki#vars#get_global('valid_html_tags') !=? ''
- let s:html_tags = join(split(vimwiki#vars#get_global('valid_html_tags'), '\s*,\s*'), '\|')
- exe 'syntax match VimwikiHTMLtag #\c\?\%('.s:html_tags.'\)\%(\s\{-1}\S\{-}\)\{-}\s*/\?>#'
-
- " Helper: Create highlight region between html tags
- " :param: tag example 'b'
- " :param: syntax_group example: VimwikiBold
- " :param: contains coma separated and prefixed, default VimwikiHTMLTag
- " :param: (1) is contained
- function! s:highlight_html(tag, syntax_group, contains, ...)
- let opt_is_contained = a:0 > 0 ? 'contained ' : ''
- let opt_contains = ''
- if a:contains !=# ''
- let opt_contains = 'contains=' . a:contains . ' '
- endif
- exe 'syn region ' a:syntax_group . ' matchgroup=VimwikiHTMLDelimiter ' .
- \ opt_is_contained .
- \ 'start="<' . a:tag . '>" end="' . a:tag . '\_s*>" '.
- \ opt_contains .
- \ b:vimwiki_syntax_concealends
- endfunction
-
- " Bold
- " -- Bold 1
- call s:highlight_html('b', 'VimwikiBold', 'VimwikiBoldUnderline,VimwikiBoldItalic')
- call s:highlight_html('strong', 'VimwikiBold', 'VimwikiBoldUnderline,VimwikiBoldItalic')
- " -- Bold 2
- call s:highlight_html('u', 'VimwikiBoldUnderline', 'VimwikiBoldUnderlineItalic', 1)
- call s:highlight_html('i', 'VimwikiBoldItalic', 'VimwikiBoldItalicUnderline', 1)
- call s:highlight_html('em', 'VimwikiBoldItalic', 'VimwikiBoldItalicUnderline', 1)
- " -- Bold 3
- call s:highlight_html('i', 'VimwikiBoldUnderlineItalic', '', 2)
- call s:highlight_html('em', 'VimwikiBoldUnderlineItalic', '', 2)
- call s:highlight_html('u', 'VimwikiBoldItalicUnderline', '', 2)
-
- " Italic
- " -- Italic 1
- call s:highlight_html('i', 'VimwikiItalic ', 'VimwikiItalicBold,VimwikiItalicUnderline')
- call s:highlight_html('em', 'VimwikiItalic ', 'VimwikiItalicBold,VimwikiItalicUnderline')
- " -- Italic 2
- call s:highlight_html('b', 'VimwikiItalicBold', 'VimwikiItalicBoldUnderline', 1)
- call s:highlight_html('strong', 'VimwikiItalicBold', 'VimwikiItalicBoldUnderline', 1)
- call s:highlight_html('u', 'VimwikiItalicUnderline', 'VimwikiItalicUnderlineBold', 1)
- " -- Italic 3
- call s:highlight_html('u', 'VimwikiItalicBoldUnderline', '', 2)
- call s:highlight_html('b', 'VimwikiItalicUnderlineBold', '', 2)
- call s:highlight_html('strong', 'VimwikiItalicUnderlineBold', '', 2)
-
- " Underline
- " -- Underline 1
- call s:highlight_html('u', 'VimwikiUnderline', 'VimwikiUnderlineBold,VimwikiUnderlineItalic')
- " -- Underline 2
- call s:highlight_html('b', 'VimwikiUnderlineBold', 'VimwikiUnderlineBoldItalic', 1)
- call s:highlight_html('b','VimwikiUnderlineBold', 'VimwikiUnderlineBoldItalic', 1)
- call s:highlight_html('strong', 'VimwikiUnderlineBold', 'VimwikiUnderlineBoldItalic', 1)
- call s:highlight_html('i', 'VimwikiUnderlineItalic', 'VimwikiUnderlineItalicBold', 1)
- call s:highlight_html('em', 'VimwikiUnderlineItalic', 'VimwikiUnderlineItalicBold', 1)
- " -- Underline 3
- call s:highlight_html('b', 'VimwikiUnderlineItalicBold', '', 2)
- call s:highlight_html('strong', 'VimwikiUnderlineItalicBold', '', 2)
- call s:highlight_html('i', 'VimwikiUnderlineBoldItalic', '', 2)
- call s:highlight_html('em', 'VimwikiUnderlineBoldItalic', '', 2)
-
- " Comment: home made
- execute 'syntax match VimwikiComment /'.vimwiki#vars#get_syntaxlocal('rxComment').
- \ '/ contains=@Spell,VimwikiTodo'
-
- " Only do syntax highlighting for multiline comments if they exist
- let s:mc_start = vimwiki#vars#get_syntaxlocal('rxMultilineCommentStart')
- let s:mc_end = vimwiki#vars#get_syntaxlocal('rxMultilineCommentEnd')
- if !empty(s:mc_start) && !empty(s:mc_end)
- execute 'syntax region VimwikiMultilineComment start=/'.s:mc_start.
- \ '/ end=/'.s:mc_end.'/ contains=@NoSpell,VimwikiTodo'
- endif
+ " Source html file here
+ execute 'source ' . expand(':h') . '/vimwiki_html.vim'
endif
+
" tags
execute 'syntax match VimwikiTag /'.vimwiki#vars#get_syntaxlocal('rxTags').'/'
-
" header groups highlighting
if vimwiki#vars#get_global('hl_headers') == 0
" Strangely in default colorscheme Title group is not set to bold for cterm...
@@ -445,7 +334,9 @@ else
endfor
endif
-
+" Highlight typefaces -> u.vim
+let s:syntax_dic = vimwiki#vars#get_syntaxlocal('dTypeface')
+call vimwiki#u#hi_typeface(s:syntax_dic)
hi def link VimwikiMarkers Normal
@@ -558,7 +449,7 @@ call vimwiki#u#reload_regexes_custom()
let b:current_syntax='vimwiki'
-" EMBEDDED syntax setup
+" Code: EMBEDDED syntax setup
let s:nested = vimwiki#vars#get_wikilocal('nested_syntaxes')
if vimwiki#vars#get_wikilocal('automatic_nested_syntaxes')
let s:nested = extend(s:nested, vimwiki#base#detect_nested_syntax(), 'keep')
diff --git a/syntax/vimwiki_default.vim b/syntax/vimwiki_default.vim
index 237ebe0..786d87c 100644
--- a/syntax/vimwiki_default.vim
+++ b/syntax/vimwiki_default.vim
@@ -10,44 +10,38 @@
let s:default_syntax = g:vimwiki_syntax_variables['default']
+" TODO mutualise
+" Get config: possibly concealed chars
+let b:vimwiki_syntax_conceal = exists('+conceallevel') ? ' conceal' : ''
+let b:vimwiki_syntax_concealends = has('conceal') ? ' concealends' : ''
+
+" Typeface:
+let s:default_syntax.dTypeface = {}
+
+" text: *strong*
+let s:default_syntax.dTypeface['bold'] = [
+ \ ['\S\@<=\*\|\*\S\@=', '\S\@<=\*\|\*\S\@='],
+ \ ]
+
+" text: _italic_
+let s:default_syntax.dTypeface['italic'] = [
+ \ ['\S\@<=_\|_\S\@=', '\S\@<=_\|_\S\@='],
+ \ ]
+
+" text: no underline defined
+let s:default_syntax.dTypeface['underline'] = []
+
+" text: *_bold italic_* or _*italic bold*_
+let s:default_syntax.dTypeface['bold_italic'] = [
+ \ ['\S\@<=\*_\|\*_\S\@=', '\S\@<=_\*\|_\*\S\@='],
+ \ ['\S\@<=_\*\|_\*\S\@=', '\S\@<=\*_\|\*_\S\@='],
+ \ ]
+
" text: $ equation_inline $
let s:default_syntax.rxEqIn = '\$[^$`]\+\$'
let s:default_syntax.char_eqin = '\$'
-" text: *strong*
-" let s:default_syntax.rxBold = '\*[^*]\+\*'
-let s:default_syntax.rxBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
- \'\*'.
- \'\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)'.
- \'\*'.
- \'\%([[:punct:]]\|\s\|$\)\@='
-let s:default_syntax.char_bold = '*'
-
-" text: _emphasis_
-" let s:default_syntax.rxItalic = '_[^_]\+_'
-let s:default_syntax.rxItalic = '\%(^\|\s\|[[:punct:]]\)\@<='.
- \'_'.
- \'\%([^_`[:space:]][^_`]*[^_`[:space:]]\|[^_`[:space:]]\)'.
- \'_'.
- \'\%([[:punct:]]\|\s\|$\)\@='
-let s:default_syntax.char_italic = '_'
-
-" text: *_bold italic_* or _*italic bold*_
-let s:default_syntax.rxBoldItalic = '\%(^\|\s\|[[:punct:]]\)\@<='.
- \'\*_'.
- \'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'.
- \'_\*'.
- \'\%([[:punct:]]\|\s\|$\)\@='
-let s:default_syntax.char_bolditalic = '\*_'
-
-let s:default_syntax.rxItalicBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
- \'_\*'.
- \'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'.
- \'\*_'.
- \'\%([[:punct:]]\|\s\|$\)\@='
-let s:default_syntax.char_italicbold = '_\*'
-
" text: `code`
let s:default_syntax.rxCode = '`[^`]\+`'
let s:default_syntax.char_code = '`'
diff --git a/syntax/vimwiki_html.vim b/syntax/vimwiki_html.vim
new file mode 100644
index 0000000..4420be6
--- /dev/null
+++ b/syntax/vimwiki_html.vim
@@ -0,0 +1,34 @@
+" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
+" Vimwiki syntax file
+" Home: https://github.com/vimwiki/vimwiki/
+" Description: Defines html syntax
+" Loaded: conditionaly by syntax/vimwiki.vim
+" Copied from $VIMRUNTIME
+" Note: The me=s-1 was omited from the region definition
+" See: `syn region VimwikiBoldUnderlineItalic contained start="" end=""me=s-1 contains=VimwikiHTMLTag...`
+" Note: Not configurable
+
+let s:html_tags = join(split(vimwiki#vars#get_global('valid_html_tags'), '\s*,\s*'), '\|')
+exe 'syntax match VimwikiHTMLtag #\c\?\%('.s:html_tags.'\)\%(\s\{-1}\S\{-}\)\{-}\s*/\?>#'
+
+
+" Typeface:
+let html_typeface = {
+ \ 'bold': [['', ''], ['', '']],
+ \ 'italic': [['', ''], ['', '']],
+ \ 'underline': [['', '']],
+ \ }
+call vimwiki#u#hi_typeface(html_typeface)
+
+
+" Comment: home made
+execute 'syntax match VimwikiComment /'.vimwiki#vars#get_syntaxlocal('rxComment').
+ \ '/ contains=@Spell,VimwikiTodo'
+
+" Only do syntax highlighting for multiline comments if they exist
+let s:mc_start = vimwiki#vars#get_syntaxlocal('rxMultilineCommentStart')
+let s:mc_end = vimwiki#vars#get_syntaxlocal('rxMultilineCommentEnd')
+if !empty(s:mc_start) && !empty(s:mc_end)
+execute 'syntax region VimwikiMultilineComment start=/'.s:mc_start.
+ \ '/ end=/'.s:mc_end.'/ contains=@NoSpell,VimwikiTodo'
+endif
diff --git a/syntax/vimwiki_markdown.vim b/syntax/vimwiki_markdown.vim
index 9240d77..4a928e9 100644
--- a/syntax/vimwiki_markdown.vim
+++ b/syntax/vimwiki_markdown.vim
@@ -9,41 +9,44 @@
let s:markdown_syntax = g:vimwiki_syntax_variables['markdown']
+
+" TODO mutualise
+" Get config: possibly concealed chars
+let b:vimwiki_syntax_conceal = exists('+conceallevel') ? ' conceal' : ''
+let b:vimwiki_syntax_concealends = has('conceal') ? ' concealends' : ''
+
+
+" Typeface:
+let s:markdown_syntax.dTypeface = {}
+
+" text: **bold** or __bold__
+let s:markdown_syntax.dTypeface['bold'] = [
+ \ ['\S\@<=__\|__\S\@=', '\S\@<=__\|__\S\@='],
+ \ ['\S\@<=\*\*\|\*\*\S\@=', '\S\@<=\*\*\|\*\*\S\@='],
+ \ ]
+
+" text: *italic* or _italic_
+let s:markdown_syntax.dTypeface['italic'] = [
+ \ ['\S\@<=\*\|\*\S\@=', '\S\@<=\*\|\*\S\@='],
+ \ ['\S\@<=_\|_\S\@=', '\S\@<=_\|_\S\@='],
+ \ ]
+
+" text: no underline defined
+let s:markdown_syntax.dTypeface['underline'] = []
+
+" text: *_bold italic_* or _*italic bold*_ or ___bi___ or ***bi***
+let s:markdown_syntax.dTypeface['bold_italic'] = [
+ \ ['\S\@<=\*_\|\*_\S\@=', '\S\@<=_\*\|_\*\S\@='],
+ \ ['\S\@<=_\*\|_\*\S\@=', '\S\@<=\*_\|\*_\S\@='],
+ \ ['\S\@<=\*\*\*\|\*\*\*\S\@=', '\S\@<=\*\*\*\|\*\*\*\S\@='],
+ \ ['\S\@<=___\|___\S\@=', '\S\@<=___\|___\S\@='],
+ \ ]
+
+
" text: $ equation_inline $
let s:markdown_syntax.rxEqIn = '\$[^$`]\+\$'
let s:markdown_syntax.char_eqin = '\$'
-" text: **strong** or __strong__
-let s:markdown_syntax.rxBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
- \'\(\*\|_\)\{2\}'.
- \'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'.
- \'\1\{2\}'.
- \'\%([[:punct:]]\|\s\|$\)\@='
-let s:markdown_syntax.char_bold = '\*\*\|__'
-
-" text: _emphasis_ or *emphasis*
-let s:markdown_syntax.rxItalic = '\%(^\|\s\|[[:punct:]]\)\@<='.
- \'\(\*\|_\)'.
- \'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'.
- \'\1'.
- \'\%([[:punct:]]\|\s\|$\)\@='
-let s:markdown_syntax.char_italic = '\*\|_'
-
-" text: *_bold italic_* or _*italic bold*_
-let s:markdown_syntax.rxBoldItalic = '\%(^\|\s\|[[:punct:]]\)\@<='.
- \'\(\*\)\{3\}'.
- \'\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)'.
- \'\1\{3\}'.
- \'\%([[:punct:]]\|\s\|$\)\@='
-let s:markdown_syntax.char_bolditalic = '\*\*\*'
-
-let s:markdown_syntax.rxItalicBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
- \'\(_\)\{3\}'.
- \'\%([^_`[:space:]][^_`]*[^_`[:space:]]\|[^_`[:space:]]\)'.
- \'\1\{3\}'.
- \'\%([[:punct:]]\|\s\|$\)\@='
-let s:markdown_syntax.char_italicbold = '___'
-
" text: `code`
let s:markdown_syntax.rxCode = '`[^`]\+`'
let s:markdown_syntax.char_code = '`'
diff --git a/syntax/vimwiki_media.vim b/syntax/vimwiki_media.vim
index 8c3de45..f55b68f 100644
--- a/syntax/vimwiki_media.vim
+++ b/syntax/vimwiki_media.vim
@@ -9,24 +9,31 @@
let s:media_syntax = g:vimwiki_syntax_variables['media']
+let s:media_syntax.dTypeface = {}
+
+" text: '''strong'''
+let s:media_syntax.dTypeface['bold'] = [
+ \ ['\S\@<=''''''\|''''''\S\@=', '\S\@<=''''''\|''''''\S\@='],
+ \ ]
+
+" text: ''italic''
+let s:media_syntax.dTypeface['italic'] = [
+ \ ['\S\@<=''''\|''''\S\@=', '\S\@<=''''\|''''\S\@='],
+ \ ]
+
+" text: no underline defined
+let s:media_syntax.dTypeface['underline'] = []
+
+" text: '''''strong italic'''''
+let s:media_syntax.dTypeface['bold_italic'] = [
+ \ ['\S\@<=''''''''''\|''''''''''\S\@=', '\S\@<=''''''''''\|''''''''''\S\@='],
+ \ ]
+
+
" text: $ equation_inline $
let s:media_syntax.rxEqIn = '\$[^$`]\+\$'
let s:media_syntax.char_eqin = '\$'
-" text: '''strong'''
-let s:media_syntax.rxBold = "'''[^']\\+'''"
-let s:media_syntax.char_bold = "'''"
-
-" text: ''emphasis''
-let s:media_syntax.rxItalic = "''[^']\\+''"
-let s:media_syntax.char_italic = "''"
-
-" text: '''''strong italic'''''
-let s:media_syntax.rxBoldItalic = "'''''[^']\\+'''''"
-let s:media_syntax.rxItalicBold = s:media_syntax.rxBoldItalic
-let s:media_syntax.char_bolditalic = "'''''"
-let s:media_syntax.char_italicbold = s:media_syntax.char_bolditalic
-
" text: `code`
let s:media_syntax.rxCode = '`[^`]\+`'
let s:media_syntax.char_code = '`'
diff --git a/test/syntax.vader b/test/syntax.vader
index 01917bc..d07412c 100644
--- a/test/syntax.vader
+++ b/test/syntax.vader
@@ -17,7 +17,7 @@ Given vimwiki (Typeface for html 1 like italic):
Execute (Set syntax markdown):
call SetSyntax('markdown')
-Execute (Assert Syntax for typeface):
+Execute (Assert Syntax for typeface 1):
AssertEqual 'VimwikiBold' , SyntaxAt(1, 15)
AssertEqual 'VimwikiBold' , SyntaxAt(2, 15)
AssertEqual 'VimwikiItalic' , SyntaxAt(3, 15)
@@ -32,7 +32,7 @@ Given vimwiki (Typeface for html 2 like italicUnderline):
Underline -cacacabold underline-------asacc acaca-
Underline -cacacaitalic underline-----asdacacc acaca-
-Execute (Assert Syntax for typeface):
+Execute (Assert Syntax for typeface 2):
AssertEqual 'VimwikiBoldItalic' , GetSyntaxGroup(1, 30)
AssertEqual 'VimwikiBoldUnderline' , GetSyntaxGroup(2, 30)
AssertEqual 'VimwikiBoldItalic' , GetSyntaxGroup(3, 30)
@@ -48,7 +48,7 @@ Given vimwiki (Typeface for html 3 like boldItalicUnderline):
bold italic underline
bold italic underline
-Execute (Assert Syntax for typeface):
+Execute (Assert Syntax for typeface 3):
AssertEqual 'VimwikiBoldItalicUnderline1', GetSyntaxGroup(1, 22).1
AssertEqual 'VimwikiBoldItalicUnderline2', GetSyntaxGroup(2, 22).2
AssertEqual 'VimwikiBoldItalicUnderline3', GetSyntaxGroup(3, 22).3
@@ -92,16 +92,16 @@ Execute (Set syntax markdown):
call SetSyntax('markdown')
Execute (Assert Syntax for typeface):
- AssertEqual SyntaxAt(1, 4), 'VimwikiBold'
- AssertEqual SyntaxAt(2, 4), 'VimwikiBold'
- AssertEqual SyntaxAt(3, 4), 'VimwikiItalic'
- AssertEqual SyntaxAt(4, 4), 'VimwikiItalic'
- AssertEqual SyntaxAt(5, 4), 'VimwikiBoldItalic'
- AssertEqual SyntaxAt(6, 4), 'VimwikiItalicBold'
- AssertEqual SyntaxAt(7, 4), 'VimwikiDelText'
- AssertEqual SyntaxAt(8, 4), 'VimwikiCode'
- AssertEqual SyntaxAt(9, 4), 'VimwikiSuperScript'
- AssertEqual SyntaxAt(10, 4), 'VimwikiSubScript'
+ AssertEqual 'VimwikiBold' , SyntaxAt(1, 4)
+ AssertEqual 'VimwikiBold' , SyntaxAt(2, 4)
+ AssertEqual 'VimwikiItalic' , SyntaxAt(3, 4)
+ AssertEqual 'VimwikiItalic' , SyntaxAt(4, 4)
+ AssertEqual 'VimwikiBoldItalic' , SyntaxAt(5, 4)
+ AssertEqual 'VimwikiBoldItalic' , SyntaxAt(6, 4)
+ AssertEqual 'VimwikiDelText' , SyntaxAt(7, 4)
+ AssertEqual 'VimwikiCode' , SyntaxAt(8, 4)
+ AssertEqual 'VimwikiSuperScript' , SyntaxAt(9, 4)
+ AssertEqual 'VimwikiSubScript' , SyntaxAt(10, 4)
# 2 Links {{{1