11" vim:tabstop = 2 :shiftwidth = 2 :expandtab :foldmethod = marker:textwidth = 79
22" Vimwiki autoload plugin file
33" Desc: Link functions for markdown syntax
4- " Author: Maxim Kim <habamax @gmail.com>
4+ " Author: Stuart Andrews <stu.andrews @gmail.com> (.. i.e. don't blame Maxim!)
55" Home: http://code.google.com/p/vimwiki/
66
77
8+ " MISC helper functions {{{
9+
10+ " vimwiki#markdown_base#reset_mkd_refs
11+ function ! vimwiki#markdown_base#reset_mkd_refs () " {{{
12+ call VimwikiClear (' markdown_refs' )
13+ endfunction " }}}
14+
15+ " vimwiki#markdown_base#scan_reflinks
16+ function ! vimwiki#markdown_base#scan_reflinks () " {{{
17+ let mkd_refs = {}
18+ " construct list of references using vimgrep
19+ try
20+ execute ' vimgrep #' .g: vimwiki_rxMkdRef .' #j %'
21+ catch /^Vim\%((\a\+)\)\=:E480/ " No Match
22+ " Ignore it, and move on to the next file
23+ endtry
24+ "
25+ for d in getqflist ()
26+ let matchline = join (getline (d .lnum, min ([d .lnum+ 1 , line (' $' )])), ' ' )
27+ let descr = matchstr (matchline, g: vimwiki_rxMkdRefMatchDescr )
28+ let url = matchstr (matchline, g: vimwiki_rxMkdRefMatchUrl )
29+ if descr != ' ' && url != ' '
30+ let mkd_refs[descr] = url
31+ endif
32+ endfor
33+ call VimwikiSet (' markdown_refs' , mkd_refs)
34+ return mkd_refs
35+ endfunction " }}}
36+
37+
38+ " vimwiki#markdown_base#get_reflinks
39+ function ! vimwiki#markdown_base#get_reflinks () " {{{
40+ let done = 1
41+ try
42+ let mkd_refs = VimwikiGet (' markdown_refs' )
43+ catch
44+ " work-around hack
45+ let done = 0
46+ " ... the following command does not work inside catch block !?
47+ " > let mkd_refs = vimwiki#markdown_base#scan_reflinks()
48+ endtry
49+ if ! done
50+ let mkd_refs = vimwiki#markdown_base#scan_reflinks ()
51+ endif
52+ return mkd_refs
53+ endfunction " }}}
54+
55+ " vimwiki#markdown_base#open_reflink
56+ " try markdown reference links
57+ function ! vimwiki#markdown_base#open_reflink (link) " {{{
58+ " echom "vimwiki#markdown_base#open_reflink"
59+ let link = a: link
60+ let mkd_refs = vimwiki#markdown_base#get_reflinks ()
61+ if has_key (mkd_refs, link)
62+ let url = mkd_refs[link]
63+ call vimwiki#base#system_open_link (url)
64+ return 1
65+ else
66+ return 0
67+ endif
68+ endfunction " }}}
69+
70+ " s:normalize_path
71+ " s:path_html
72+ " vimwiki#base#apply_wiki_options
73+ " vimwiki#base#read_wiki_options
74+ " vimwiki#base#validate_wiki_options
75+ " vimwiki#base#setup_buffer_state
76+ " vimwiki#base#cache_buffer_state
77+ " vimwiki#base#recall_buffer_state
78+ " vimwiki#base#print_wiki_state
79+ " vimwiki#base#mkdir
80+ " vimwiki#base#file_pattern
81+ " vimwiki#base#branched_pattern
82+ " vimwiki#base#subdir
83+ " vimwiki#base#current_subdir
84+ " vimwiki#base#invsubdir
85+ " vimwiki#base#resolve_scheme
86+ " vimwiki#base#system_open_link
87+ " vimwiki#base#open_link
88+ " vimwiki#base#generate_links
89+ " vimwiki#base#goto
90+ " vimwiki#base#backlinks
91+ " vimwiki#base#get_links
92+ " vimwiki#base#edit_file
93+ " vimwiki#base#search_word
94+ " vimwiki#base#matchstr_at_cursor
95+ " vimwiki#base#replacestr_at_cursor
96+ " s:print_wiki_list
97+ " s:update_wiki_link
98+ " s:update_wiki_links_dir
99+ " s:tail_name
100+ " s:update_wiki_links
101+ " s:get_wiki_buffers
102+ " s:open_wiki_buffer
103+ " vimwiki#base#nested_syntax
104+ " }}}
105+
106+ " WIKI link following functions {{{
107+ " vimwiki#base#find_next_link
108+ " vimwiki#base#find_prev_link
109+
110+ " vimwiki#base#follow_link
111+ function ! vimwiki#markdown_base#follow_link (split , ... ) " {{{ Parse link at cursor and pass
112+ " to VimwikiLinkHandler, or failing that, the default open_link handler
113+ " echom "markdown_base#follow_link"
114+
115+ if 0
116+ " Syntax-specific links
117+ " XXX: @Stuart: do we still need it?
118+ " XXX: @Maxim: most likely! I am still working on a seemless way to
119+ " integrate regexp's without complicating syntax/vimwiki.vim
120+ else
121+ if a: split == " split"
122+ let cmd = " :split "
123+ elseif a: split == " vsplit"
124+ let cmd = " :vsplit "
125+ elseif a: split == " tabnew"
126+ let cmd = " :tabnew "
127+ else
128+ let cmd = " :e "
129+ endif
130+
131+ " try WikiLink
132+ let lnk = matchstr (vimwiki#base#matchstr_at_cursor (g: vimwiki_rxWikiLink ),
133+ \ g: vimwiki_rxWikiLinkMatchUrl )
134+ " try WikiIncl
135+ if lnk == " "
136+ let lnk = matchstr (vimwiki#base#matchstr_at_cursor (g: vimwiki_rxWikiIncl ),
137+ \ g: vimwiki_rxWikiInclMatchUrl )
138+ endif
139+ " try Weblink
140+ if lnk == " "
141+ let lnk = matchstr (vimwiki#base#matchstr_at_cursor (g: vimwiki_rxWeblink ),
142+ \ g: vimwiki_rxWeblinkMatchUrl )
143+ endif
144+
145+ if lnk != " "
146+ if ! VimwikiLinkHandler (lnk)
147+ if ! vimwiki#markdown_base#open_reflink (lnk)
148+ call vimwiki#base#open_link (cmd, lnk)
149+ endif
150+ endif
151+ return
152+ endif
153+
154+ if a: 0 > 0
155+ execute " normal! " .a: 1
156+ else
157+ call vimwiki#base#normalize_link (0 )
158+ endif
159+ endif
160+
161+ endfunction " }}}
162+
163+ " vimwiki#base#go_back_link
164+ " vimwiki#base#goto_index
165+ " vimwiki#base#delete_link
166+ " vimwiki#base#rename_link
167+ " vimwiki#base#ui_select
168+
169+ " TEXT OBJECTS functions {{{
170+ " vimwiki#base#TO_header
171+ " vimwiki#base#TO_table_cell
172+ " vimwiki#base#TO_table_col
173+ " }}}
174+
175+ " HEADER functions {{{
176+ " vimwiki#base#AddHeaderLevel
177+ " vimwiki#base#RemoveHeaderLevel
178+ " }}}
179+
180+ " LINK functions {{{
181+ " vimwiki#base#apply_template
182+
183+ " s:clean_url
184+ " vimwiki#base#normalize_link_helper
185+ " vimwiki#base#normalize_imagelink_helper
186+
187+ " s:normalize_link_syntax_n
8188function ! s: normalize_link_syntax_n () " {{{
9189 let lnum = line (' .' )
10190
@@ -74,6 +254,7 @@ function! s:normalize_link_syntax_n() " {{{
74254
75255endfunction " }}}
76256
257+ " s:normalize_link_syntax_v
77258function ! s: normalize_link_syntax_v () " {{{
78259 let lnum = line (' .' )
79260 let sel_save = &selection
@@ -99,13 +280,23 @@ function! s:normalize_link_syntax_v() " {{{
99280
100281endfunction " }}}
101282
102- " normalize_link
283+ " vimwiki#base# normalize_link
103284function ! vimwiki#markdown_base#normalize_link (is_visual_mode) " {{{
104- if ! a: is_visual_mode
105- call s: normalize_link_syntax_n ()
106- elseif visualmode () == # ' v' && line (" '<" ) == line (" '>" )
107- " action undefined for 'line-wise' or 'multi-line' visual mode selections
108- call s: normalize_link_syntax_v ()
285+ if 0
286+ " Syntax-specific links
287+ else
288+ if ! a: is_visual_mode
289+ call s: normalize_link_syntax_n ()
290+ elseif visualmode () == # ' v' && line (" '<" ) == line (" '>" )
291+ " action undefined for 'line-wise' or 'multi-line' visual mode selections
292+ call s: normalize_link_syntax_v ()
293+ endif
109294 endif
110295endfunction " }}}
111296
297+ " }}}
298+
299+ " -------------------------------------------------------------------------
300+ " Load syntax-specific Wiki functionality
301+ " -------------------------------------------------------------------------
302+
0 commit comments