aboutsummaryrefslogtreecommitdiff
path: root/runtime/autoload/tutor.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/autoload/tutor.vim')
-rw-r--r--runtime/autoload/tutor.vim46
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()