soywiki 0.9.6 → 0.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +13 -0
- data/lib/soywiki.rb +3 -2
- data/lib/soywiki.vim +43 -6
- data/lib/soywiki/html.rb +25 -1
- metadata +2 -2
data/README.markdown
CHANGED
@@ -490,6 +490,19 @@ pattern. But SoyWiki stands with CamelCase.
|
|
490
490
|
No wiki link pattern is perfect! All involve trade-offs. The CamelCase
|
491
491
|
pattern gives you a lot in return for its particular compromises.
|
492
492
|
|
493
|
+
## Hyperlinks
|
494
|
+
|
495
|
+
There may come the time when you want to link to content, that
|
496
|
+
isn't part of your wiki. The common link-syntax will allow
|
497
|
+
you to refer to websites. But if you want to link
|
498
|
+
to something in your own filesystem you can
|
499
|
+
also use the `file://` schema. This schema
|
500
|
+
actually only allows absolute file paths. To circumvent
|
501
|
+
this problem we have added support for our own schema:
|
502
|
+
`soyfile://` which allows to link to files relative
|
503
|
+
to the wiki root or, if you use vim's
|
504
|
+
*autochdir* option, relative to the current namespace.
|
505
|
+
|
493
506
|
|
494
507
|
## Bug reports and feature requests
|
495
508
|
|
data/lib/soywiki.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
require 'string_ext'
|
2
2
|
module Template_Substitution; end
|
3
3
|
module Soywiki
|
4
|
-
VERSION = '0.9.
|
4
|
+
VERSION = '0.9.7'
|
5
5
|
WIKI_WORD = /\b([a-z0-9][\w_]+\.)?[A-Z][a-z]+[A-Z0-9]\w*\b/
|
6
|
-
|
6
|
+
SCHEMES = %w{https http file soyfile}
|
7
|
+
HYPERLINK = %r|\b(?:#{SCHEMES.join('|')})://[^ >)\n\]]+|
|
7
8
|
|
8
9
|
def self.run
|
9
10
|
require 'getoptlong'
|
data/lib/soywiki.vim
CHANGED
@@ -12,7 +12,8 @@ let mapleader = ','
|
|
12
12
|
|
13
13
|
" This regex matches namedspaced WikiWords and unqualified WikiWords
|
14
14
|
let s:wiki_link_pattern = '\C\m\<\([a-z0-9][[:alnum:]_]\+\.\)\?[A-Z][a-z]\+[A-Z0-9]\w*\>'
|
15
|
-
let s:
|
15
|
+
let s:uri_link_pattern = '\v(https|http|file|soyfile):[^ >)\]]+\V'
|
16
|
+
let s:soyfile_pattern = '\v^soyfile:[^ >)\]]+\V'
|
16
17
|
let s:wiki_or_web_link_pattern = '\C\<\([a-z0-9][[:alnum:]_]\+\.\)\?[A-Z][a-z]\+[A-Z0-9]\w*\>\|https\?:[^ >)\]]\+'
|
17
18
|
|
18
19
|
let s:rename_links_command = 'soywiki-rename '
|
@@ -33,6 +34,12 @@ func! s:page_title()
|
|
33
34
|
return page_title
|
34
35
|
endfunc
|
35
36
|
|
37
|
+
func! s:current_namespace_path()
|
38
|
+
let absolutepath = expand('%:p')
|
39
|
+
let dir_path = fnamemodify(absolutepath, ':h')
|
40
|
+
return dir_path
|
41
|
+
endfunc
|
42
|
+
|
36
43
|
func! s:wiki_root()
|
37
44
|
let root_path = split(system("git rev-parse --show-toplevel"), "\n")[0] . '/'
|
38
45
|
return root_path
|
@@ -167,7 +174,7 @@ endfunc
|
|
167
174
|
|
168
175
|
func! s:follow_link_under_cursor(split)
|
169
176
|
let word = expand("<cWORD>")
|
170
|
-
if match(word, s:
|
177
|
+
if match(word, s:uri_link_pattern) != -1
|
171
178
|
call s:open_href_under_cursor()
|
172
179
|
return
|
173
180
|
endif
|
@@ -595,19 +602,49 @@ endfunc
|
|
595
602
|
"------------------------------------------------------------------------
|
596
603
|
func! s:open_href_under_cursor()
|
597
604
|
let word = expand("<cWORD>")
|
598
|
-
let
|
599
|
-
let
|
605
|
+
let soyuri = matchstr(word, s:uri_link_pattern)
|
606
|
+
let uri = s:expand_iana_uri(soyuri)
|
607
|
+
let command = g:SoyWiki#browser_command . " '" . uri . "' "
|
600
608
|
call system(command)
|
601
609
|
echom command
|
602
610
|
endfunc
|
603
611
|
|
604
612
|
func! s:find_next_href_and_open()
|
605
|
-
let res = search(s:
|
613
|
+
let res = search(s:uri_link_pattern, 'cw')
|
606
614
|
if res != 0
|
607
615
|
call s:open_href_under_cursor()
|
608
616
|
endif
|
609
617
|
endfunc
|
610
618
|
|
619
|
+
func! s:expand_iana_uri(soyuri)
|
620
|
+
if match(a:soyuri, s:soyfile_pattern) != -1
|
621
|
+
let autochdir_rel_path = s:current_namespace_path()
|
622
|
+
let wiki_rel_path = s:wiki_root()
|
623
|
+
|
624
|
+
let filepath = substitute(a:soyuri, 'soyfile://', '', '')
|
625
|
+
|
626
|
+
" the case that the soyfile is actually an absolute path
|
627
|
+
if match(filepath, '\v^/') != -1
|
628
|
+
return "file://" . filepath
|
629
|
+
endif
|
630
|
+
|
631
|
+
let autochdir_path = fnamemodify(autochdir_rel_path . '/' . filepath, ':p')
|
632
|
+
let wiki_path = fnamemodify(wiki_rel_path . '/' . filepath, ':p')
|
633
|
+
let uri_path_part = wiki_path
|
634
|
+
|
635
|
+
" the case that the path supplied was relative to
|
636
|
+
" the current namespace directory (autochdir-option)
|
637
|
+
if filereadable(autochdir_path)
|
638
|
+
let uri_path_part = autochdir_path
|
639
|
+
endif
|
640
|
+
|
641
|
+
return 'file://' . uri_path_part
|
642
|
+
else
|
643
|
+
" return non-soyfile uris unchanged
|
644
|
+
return a:soyuri
|
645
|
+
end
|
646
|
+
endfunc
|
647
|
+
|
611
648
|
func! s:goto_homepage(main)
|
612
649
|
if a:main
|
613
650
|
call s:load_page("main.HomePage", 0)
|
@@ -701,7 +738,7 @@ func! s:highlight_wikiwords()
|
|
701
738
|
if (s:is_wiki_page())
|
702
739
|
"syntax clear
|
703
740
|
exe "syn match Comment /". s:wiki_link_pattern. "/"
|
704
|
-
exe "syn match Constant /". s:
|
741
|
+
exe "syn match Constant /". s:uri_link_pattern . "/"
|
705
742
|
endif
|
706
743
|
endfunc
|
707
744
|
|
data/lib/soywiki/html.rb
CHANGED
@@ -7,6 +7,7 @@ module Soywiki
|
|
7
7
|
HTML_DIR = 'html-export'
|
8
8
|
INDEX_PAGE_TEMPLATE = File.read(File.join(File.dirname(__FILE__), '..', 'index_template.html.haml'))
|
9
9
|
BROKEN_MARKDOWN_HYPERLINK = %r|\[([^\]]+)\]\(\[(#{HYPERLINK})\]\(\2\)\)|
|
10
|
+
@current_namespace = nil
|
10
11
|
|
11
12
|
def self.href_wiki_links(text)
|
12
13
|
text = text.gsub(WIKI_WORD) {|match|
|
@@ -24,17 +25,38 @@ module Soywiki
|
|
24
25
|
substitute = if @markdown then '[\\0](\\0)' else '<a href="\\0">\\0</a>' end
|
25
26
|
text = text.gsub(HYPERLINK, substitute)
|
26
27
|
if @markdown
|
27
|
-
|
28
|
+
text = text.gsub(BROKEN_MARKDOWN_HYPERLINK, '[\\1](\\2)')
|
28
29
|
end
|
30
|
+
text = text.gsub(HYPERLINK) { |uri| soyfile_to_uri(uri) }
|
29
31
|
return text
|
30
32
|
end
|
31
33
|
|
34
|
+
def self.soyfile_to_uri(uri)
|
35
|
+
uri_after_scheme = %r{[^ >)\n\]]+}
|
36
|
+
if uri =~ %r{^soyfile://(#{uri_after_scheme})}
|
37
|
+
path = choose_soyfile_path($1)
|
38
|
+
return "file://#{path}" if path[0] == '/'
|
39
|
+
else
|
40
|
+
return uri
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.choose_soyfile_path(path)
|
45
|
+
return path if path[0] == '/'
|
46
|
+
wiki_root = Dir.getwd
|
47
|
+
autochdir_path = File.absolute_path(
|
48
|
+
File.join(wiki_root, @current_namespace, path))
|
49
|
+
wiki_path = File.absolute_path(File.join(wiki_root, path))
|
50
|
+
File.exists?(autochdir_path) ? autochdir_path : wiki_path
|
51
|
+
end
|
52
|
+
|
32
53
|
def self.process(t)
|
33
54
|
href_hyperlinks(href_wiki_links(t))
|
34
55
|
end
|
35
56
|
|
36
57
|
PAGE_TEMPLATE = File.read(File.join(File.dirname(__FILE__), '..', 'page_template.html.haml'))
|
37
58
|
def self.generate_page(text, namespace, pages, namespaces)
|
59
|
+
@current_namespace = namespace
|
38
60
|
text = text.split("\n")
|
39
61
|
|
40
62
|
title = text.shift || ''
|
@@ -123,11 +145,13 @@ module Soywiki
|
|
123
145
|
count = Dir["#{namespace}/*"].select {|f| wiki_page?(f)}.size
|
124
146
|
[namespace, count]
|
125
147
|
}
|
148
|
+
@current_namespace = nil
|
126
149
|
namespaces.each do |namespace_dir, count|
|
127
150
|
make_pages namespace_dir, namespaces
|
128
151
|
end
|
129
152
|
# make root index page
|
130
153
|
make_root_index_page namespaces
|
154
|
+
@current_namespace = nil
|
131
155
|
puts "HTML files written to #{HTML_DIR}/"
|
132
156
|
end
|
133
157
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soywiki
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-09-21 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: A personal and collaborative wiki for Vim users
|
15
15
|
email:
|