diff options
author | Felipe Morales <hel.sheep@gmail.com> | 2017-07-13 19:04:15 -0400 |
---|---|---|
committer | Felipe Morales <hel.sheep@gmail.com> | 2017-07-15 11:01:45 -0400 |
commit | ec67d0706524a23768c8a964a7940a34f057edb8 (patch) | |
tree | 1c37de3092496f3212c07a8dd494a2dc64486fcb /runtime/autoload | |
parent | 2dc5b141dab679784b6bde3e15baffa135a56019 (diff) | |
download | rneovim-ec67d0706524a23768c8a964a7940a34f057edb8.tar.gz rneovim-ec67d0706524a23768c8a964a7940a34f057edb8.tar.bz2 rneovim-ec67d0706524a23768c8a964a7940a34f057edb8.zip |
tutor: allow metadata to exist outside of the documents.
this makes 'expect' regions simpler to handle.
Diffstat (limited to 'runtime/autoload')
-rw-r--r-- | runtime/autoload/tutor.vim | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/runtime/autoload/tutor.vim b/runtime/autoload/tutor.vim index 43d8a87886..1f0668c1b3 100644 --- a/runtime/autoload/tutor.vim +++ b/runtime/autoload/tutor.vim @@ -209,7 +209,15 @@ function! tutor#InfoText() return join(l:info_parts, " ") endfunction -" Marks {{{1 +function! tutor#LoadMetadata() + try + let b:tutor_metadata = json_decode(join(readfile(expand('%').'.json'), "\n")) + catch + endtry +endfunction + +" Marks: {{{1 +" Internal: {{{2 function! tutor#PlaceXMarks() call cursor(1, 1) let b:tutor_sign_id = 1 @@ -241,13 +249,47 @@ function! tutor#CheckText(text) endif endfunction -function! tutor#OnTextChanged() +function! tutor#XmarksOnTextChanged() let l:text = getline('.') if match(l:text, '^--->') > -1 call tutor#CheckText(l:text) endif endfunction +" External: {{{2 +function! tutor#ApplyMarks() + if exists('b:tutor_metadata') && has_key(b:tutor_metadata, 'expect') + let b:tutor_sign_id = 1 + for expct in keys(b:tutor_metadata['expect']) + let lnum = eval(expct) + call matchaddpos('tutorSampleText', [lnum]) + call tutor#CheckLine(lnum) + endfor + endif +endfunction + +function! tutor#ApplyMarksOnChanged() + if exists('b:tutor_metadata') && has_key(b:tutor_metadata, 'expect') + let lnum = line('.') + if index(keys(b:tutor_metadata['expect']), string(lnum)) > -1 + call tutor#CheckLine(lnum) + endif + endif +endfunction + +function! tutor#CheckLine(line) + if exists('b:tutor_metadata') && has_key(b:tutor_metadata, 'expect') + let bufn = bufnr('%') + let ctext = getline(a:line) + if b:tutor_metadata['expect'][string(a:line)] == -1 || ctext ==# b:tutor_metadata['expect'][string(a:line)] + exe "sign place ".b:tutor_sign_id." line=".a:line." name=tutorok buffer=".bufn + else + exe "sign place ".b:tutor_sign_id." line=".a:line." name=tutorbad buffer=".bufn + endif + let b:tutor_sign_id+=1 + endif +endfunction + " Tutor Cmd: {{{1 function! s:Locale() |