soywiki 0.9.8.2 → 0.9.8.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.markdown +48 -0
- data/lib/soywiki.rb +13 -4
- data/lib/soywiki.vim +100 -24
- data/lib/soywiki/html.rb +156 -118
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d965f86a41dd8a0199176756ffce69430353f8d
|
4
|
+
data.tar.gz: 93be1425214fc3a89d46d4e4099246646ede174c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1158b3f573514e5a267929ad0934e040d7c5b73a3cef8e4b03e6ee79a3457c1512b47dad6c7748c740402f8984df3d270ec57c387344243d409a55f53a15ad27
|
7
|
+
data.tar.gz: 485916bcb2c38e3678000d87c23e39ed661f1a8370e2f9c72865563176f30aa443375eb0b55189385b777273152e2fdba93e9a1ad292a4234327a090706a5607
|
data/README.markdown
CHANGED
@@ -143,6 +143,46 @@ you traverse WikiLinks that don't yet reference any content.
|
|
143
143
|
|
144
144
|
That's all you need to know to get started.
|
145
145
|
|
146
|
+
### Configuring further
|
147
|
+
|
148
|
+
You can configure soywiki's vim-handling by setting certain variables
|
149
|
+
inside of your `~/.vimrc`. This is a list of the supported settings:
|
150
|
+
|
151
|
+
- `let g:soywiki_autosave = 1`
|
152
|
+
activates autosaving (the default), deactivate by setting `0`.
|
153
|
+
|
154
|
+
#### Mappings
|
155
|
+
|
156
|
+
Default mappings can be overridden by providing a custom mapping in your vimrc,
|
157
|
+
e.g. like this:
|
158
|
+
|
159
|
+
```vim
|
160
|
+
let g:soywiki_mapping_follow_link_under_cursor_here = '<c-f>'
|
161
|
+
```
|
162
|
+
|
163
|
+
This is a list of the standard mappings with their default values:
|
164
|
+
|
165
|
+
- `g:soywiki_mapping_follow_link_under_cursor_here` *defaults* to `<cr>`
|
166
|
+
- `g:soywiki_mapping_follow_link_under_cursor_vertical` *defaults* to `<c-l>`
|
167
|
+
- `g:soywiki_mapping_follow_link_under_cursor_horizontal` *defaults* to `<c-h>`
|
168
|
+
- `g:soywiki_mapping_fuzzy_follow` *defaults* to `<leader>f`
|
169
|
+
- `g:soywiki_mapping_next_link` *defaults* to `<c-j>`
|
170
|
+
- `g:soywiki_mapping_next_link` *defaults* to `<c-k>`
|
171
|
+
- `g:soywiki_mapping_show_history` *defaults* to `<leader>lp`
|
172
|
+
- `g:soywiki_mapping_show_files_history` *defaults* to `<leader>ls`
|
173
|
+
- `g:soywiki_mapping_show_blame` *defaults* to `<leader>b`
|
174
|
+
- `g:soywiki_mapping_expand_seamless_vertical` *defaults* to `<leader>x`
|
175
|
+
- `g:soywiki_mapping_expand_seamful_vertical` *defaults* to `<leader>X`
|
176
|
+
- `g:soywiki_mapping_expand_seamless_horizontal` *defaults* to `<leader>xx`
|
177
|
+
- `g:soywiki_mapping_expand_seamful_horizontal` *defaults* to `<leader>XX`
|
178
|
+
- `g:soywiki_mapping_goto_homepage` *defaults* to `<leader>h`
|
179
|
+
- `g:soywiki_mapping_goto_main_homepage` *defaults* to `<leader>H`
|
180
|
+
- `g:soywiki_mapping_show_help` *defaults* to `<leader>?`
|
181
|
+
- `g:soywiki_mapping_format` *defaults* to `\`
|
182
|
+
- `g:soywiki_mapping_add_delimiter_line` *defaults* to `<leader>-`
|
183
|
+
- `g:soywiki_mapping_add_date` *defaults* to `<leader>d`
|
184
|
+
- `g:soywiki_mapping_add_date_and_delimiter_line` *defaults* to `<leader>D`
|
185
|
+
|
146
186
|
## Namespaced WikiWords
|
147
187
|
|
148
188
|
Every WikiWord in SoyWiki is implicitly or explicitly namespaced.
|
@@ -518,6 +558,14 @@ this problem we have added support for our own schema:
|
|
518
558
|
to the wiki root or, if you use vim's
|
519
559
|
*autochdir* option, relative to the current namespace.
|
520
560
|
|
561
|
+
If you want to generate html output in order to upload it
|
562
|
+
to a webpage you need to generate relative links if you are using
|
563
|
+
`soyfile://` (the default is to generate absolute `file://` links).
|
564
|
+
You can achieve this by calling:
|
565
|
+
|
566
|
+
- `soywiki --html --relative`
|
567
|
+
- `soywiki --html --markdown --relative`
|
568
|
+
|
521
569
|
|
522
570
|
## Bug reports and feature requests
|
523
571
|
|
data/lib/soywiki.rb
CHANGED
@@ -2,7 +2,7 @@ require 'string_ext'
|
|
2
2
|
require 'path_helper'
|
3
3
|
module Template_Substitution; end
|
4
4
|
module Soywiki
|
5
|
-
VERSION = '0.9.8.
|
5
|
+
VERSION = '0.9.8.3'
|
6
6
|
WIKI_WORD = /\b([a-z0-9][\w_]+\.)?[A-Z][a-z]+[A-Z0-9]\w*\b/
|
7
7
|
SCHEMES = %w{https http file soyfile}
|
8
8
|
HYPERLINK = %r|\b(?:#{SCHEMES.join('|')})://[^ >)\n\]]+|
|
@@ -15,6 +15,8 @@ module Soywiki
|
|
15
15
|
[ '--version', '-v', GetoptLong::NO_ARGUMENT],
|
16
16
|
[ '--html', GetoptLong::NO_ARGUMENT],
|
17
17
|
[ '--markdown', GetoptLong::NO_ARGUMENT],
|
18
|
+
[ '--absolute', GetoptLong::NO_ARGUMENT],
|
19
|
+
[ '--relative', GetoptLong::NO_ARGUMENT],
|
18
20
|
[ '--install-plugin', GetoptLong::NO_ARGUMENT],
|
19
21
|
[ '--page', GetoptLong::REQUIRED_ARGUMENT],
|
20
22
|
[ '--index', GetoptLong::REQUIRED_ARGUMENT],
|
@@ -42,6 +44,10 @@ Parse to html:
|
|
42
44
|
--page template-file
|
43
45
|
replace default haml-index-template with the one supplied:
|
44
46
|
--index template-file
|
47
|
+
--absolute
|
48
|
+
generate absolute file://-style links
|
49
|
+
--relative
|
50
|
+
generate relative ../-style links
|
45
51
|
Install the soywiki vim plugin:
|
46
52
|
--install-plugin
|
47
53
|
Show this help:
|
@@ -56,6 +62,7 @@ Show version info:
|
|
56
62
|
html = false
|
57
63
|
md = false
|
58
64
|
index = page = nil
|
65
|
+
relative_soyfile = false
|
59
66
|
opts.each do |opt, arg|
|
60
67
|
case opt
|
61
68
|
when '--help' then usage[]
|
@@ -65,11 +72,13 @@ Show version info:
|
|
65
72
|
when '--install-plugin' then install_plugin = true
|
66
73
|
when '--page' then page = arg
|
67
74
|
when '--index' then index = arg
|
75
|
+
when '--absolute' then relative_soyfile = false
|
76
|
+
when '--relative' then relative_soyfile = true
|
68
77
|
end
|
69
78
|
end
|
70
79
|
self.set_substitute %{INDEX_PAGE_TEMPLATE_SUB}.to_sym, index if index
|
71
80
|
self.set_substitute %{PAGE_TEMPLATE_SUB}.to_sym, page if page
|
72
|
-
self.html_export
|
81
|
+
self.html_export(md, relative_soyfile) if html
|
73
82
|
if install_plugin
|
74
83
|
require 'erb'
|
75
84
|
plugin_template = File.read(File.join(File.dirname(__FILE__), 'plugin.erb'))
|
@@ -85,9 +94,9 @@ Show version info:
|
|
85
94
|
end unless html
|
86
95
|
end
|
87
96
|
|
88
|
-
def self.html_export(markdown
|
97
|
+
def self.html_export(markdown, relative_soyfile)
|
89
98
|
require 'soywiki/html'
|
90
|
-
Html.export(markdown)
|
99
|
+
Html.export(markdown, relative_soyfile)
|
91
100
|
end
|
92
101
|
|
93
102
|
def self.set_substitute const, substitute_path
|
data/lib/soywiki.vim
CHANGED
@@ -697,51 +697,127 @@ func! s:global_mappings()
|
|
697
697
|
" autocmd BufEnter * call s:prep_buffer()
|
698
698
|
endfunc
|
699
699
|
|
700
|
+
func! s:prep_mapping_default()
|
701
|
+
if !exists('g:soywiki_mapping_follow_link_under_cursor_here')
|
702
|
+
let g:soywiki_mapping_follow_link_under_cursor_here = '<cr>'
|
703
|
+
endif
|
704
|
+
if !exists('g:soywiki_mapping_follow_link_under_cursor_vertical')
|
705
|
+
let g:soywiki_mapping_follow_link_under_cursor_vertical = '<c-l>'
|
706
|
+
endif
|
707
|
+
if !exists('g:soywiki_mapping_follow_link_under_cursor_horizontal')
|
708
|
+
let g:soywiki_mapping_follow_link_under_cursor_horizontal = '<c-h>'
|
709
|
+
endif
|
710
|
+
if !exists('g:soywiki_mapping_fuzzy_follow')
|
711
|
+
let g:soywiki_mapping_fuzzy_follow = '<leader>f'
|
712
|
+
endif
|
713
|
+
if !exists('g:soywiki_mapping_next_link')
|
714
|
+
let g:soywiki_mapping_next_link = '<c-j>'
|
715
|
+
endif
|
716
|
+
if !exists('g:soywiki_mapping_previous_link')
|
717
|
+
let g:soywiki_mapping_previous_link = '<c-k>'
|
718
|
+
endif
|
719
|
+
|
720
|
+
if !exists('g:soywiki_mapping_show_history')
|
721
|
+
let g:soywiki_mapping_show_history = '<leader>lp'
|
722
|
+
endif
|
723
|
+
if !exists('g:soywiki_mapping_show_files_history')
|
724
|
+
let g:soywiki_mapping_show_files_history = '<leader>ls'
|
725
|
+
endif
|
726
|
+
if !exists('g:soywiki_mapping_show_blame')
|
727
|
+
let g:soywiki_mapping_show_blame = '<leader>b'
|
728
|
+
endif
|
729
|
+
|
730
|
+
if !exists('g:soywiki_mapping_expand_seamless_vertical')
|
731
|
+
let g:soywiki_mapping_expand_seamless_vertical = '<leader>x'
|
732
|
+
endif
|
733
|
+
if !exists('g:soywiki_mapping_expand_seamful_vertical')
|
734
|
+
let g:soywiki_mapping_expand_seamful_vertical = '<leader>X'
|
735
|
+
endif
|
736
|
+
if !exists('g:soywiki_mapping_expand_seamless_horizontal')
|
737
|
+
let g:soywiki_mapping_expand_seamless_horizontal = '<leader>xx'
|
738
|
+
endif
|
739
|
+
if !exists('g:soywiki_mapping_expand_seamful_horizontal')
|
740
|
+
let g:soywiki_mapping_expand_seamful_horizontal = '<leader>XX'
|
741
|
+
endif
|
742
|
+
|
743
|
+
if !exists('g:soywiki_mapping_goto_homepage')
|
744
|
+
let g:soywiki_mapping_goto_homepage = '<leader>h'
|
745
|
+
endif
|
746
|
+
if !exists('g:soywiki_mapping_goto_main_homepage')
|
747
|
+
let g:soywiki_mapping_goto_main_homepage = '<leader>H'
|
748
|
+
endif
|
749
|
+
|
750
|
+
if !exists('g:soywiki_mapping_show_help')
|
751
|
+
let g:soywiki_mapping_show_help = '<leader>?'
|
752
|
+
endif
|
753
|
+
|
754
|
+
if !exists('g:soywiki_mapping_format')
|
755
|
+
let g:soywiki_mapping_format = '\'
|
756
|
+
endif
|
757
|
+
if !exists('g:soywiki_mapping_add_delimiter_line')
|
758
|
+
let g:soywiki_mapping_add_delimiter_line = '<leader>-'
|
759
|
+
endif
|
760
|
+
if !exists('g:soywiki_mapping_add_date')
|
761
|
+
let g:soywiki_mapping_add_date = '<leader>d'
|
762
|
+
endif
|
763
|
+
if !exists('g:soywiki_mapping_add_date_and_delimiter_line')
|
764
|
+
let g:soywiki_mapping_add_date_and_delimiter_line = '<leader>D'
|
765
|
+
endif
|
766
|
+
endfunc
|
767
|
+
|
700
768
|
" this checks if the buffer is a SoyWiki file (from firstline)
|
701
769
|
" and then turns on syntax coloring and mappings as necessary
|
702
770
|
func! s:prep_buffer()
|
703
771
|
if (s:is_wiki_page() && !exists("b:mappings_loaded"))
|
772
|
+
call s:prep_mapping_default()
|
704
773
|
" let user decide on the textwidth
|
705
774
|
let &filetype=g:soywiki_filetype
|
706
|
-
nnoremap <buffer>
|
707
|
-
nnoremap <buffer>
|
708
|
-
nnoremap <buffer>
|
709
|
-
noremap <buffer>
|
710
|
-
noremap <buffer>
|
711
|
-
noremap <buffer>
|
775
|
+
execute 'nnoremap <buffer> '.g:soywiki_mapping_follow_link_under_cursor_here.' :call <SID>follow_link_under_cursor(0)<cr>'
|
776
|
+
execute 'nnoremap <buffer> '.g:soywiki_mapping_follow_link_under_cursor_vertical.' :call <SID>follow_link_under_cursor(2)<cr>'
|
777
|
+
execute 'nnoremap <buffer> '.g:soywiki_mapping_follow_link_under_cursor_horizontal.' :call <SID>follow_link_under_cursor(1)<cr>'
|
778
|
+
execute 'noremap <buffer> '.g:soywiki_mapping_fuzzy_follow.' :call <SID>fuzzy_follow_link(0)<CR>'
|
779
|
+
execute 'noremap <buffer> '.g:soywiki_mapping_next_link.' :call <SID>find_next_wiki_link(0)<CR>'
|
780
|
+
execute 'noremap <buffer> '.g:soywiki_mapping_previous_link.' :call <SID>find_next_wiki_link(1)<CR>'
|
712
781
|
|
713
782
|
command! -bar -nargs=1 -range -complete=file SWCreate :call <SID>create_page(<f-args>)
|
714
783
|
command! -bar -nargs=1 -range -complete=file SWRenameTo :call <SID>rename_page(<f-args>)
|
715
784
|
command! -buffer SWDelete :call s:delete_page()
|
716
785
|
|
717
786
|
command! -buffer SWLog :call s:show_revision_history(0)
|
718
|
-
noremap <buffer>
|
787
|
+
execute 'noremap <buffer> '.g:soywiki_mapping_show_history.' :call <SID>show_revision_history(0)<CR>'
|
719
788
|
command! -buffer SWLogStat :call s:show_revision_history(1)
|
720
|
-
noremap <buffer>
|
789
|
+
execute 'noremap <buffer> '.g:soywiki_mapping_show_files_history.' :call <SID>show_revision_history(1)<CR>'
|
721
790
|
command! -buffer SWBlame :call s:show_blame()
|
722
|
-
noremap <buffer>
|
791
|
+
execute 'noremap <buffer> '.g:soywiki_mapping_show_blame.' :call <SID>show_blame()<CR>'
|
723
792
|
|
724
|
-
noremap <buffer>
|
725
|
-
noremap <buffer>
|
726
|
-
noremap <buffer>
|
727
|
-
noremap <buffer>
|
793
|
+
execute 'noremap <buffer> '.g:soywiki_mapping_expand_seamless_vertical.' :call <SID>expand(0,1)<CR>'
|
794
|
+
execute 'noremap <buffer> '.g:soywiki_mapping_expand_seamful_vertical.' :call <SID>expand(1,1)<CR>'
|
795
|
+
execute 'noremap <buffer> '.g:soywiki_mapping_expand_seamless_horizontal.' :call <SID>expand(0,0)<CR>'
|
796
|
+
execute 'noremap <buffer> '.g:soywiki_mapping_expand_seamful_horizontal.' :call <SID>expand(1,0)<CR>'
|
728
797
|
|
729
|
-
noremap <buffer>
|
730
|
-
noremap <buffer>
|
798
|
+
execute 'noremap <buffer> '.g:soywiki_mapping_goto_homepage.' :call <SID>goto_homepage(0)<CR>'
|
799
|
+
execute 'noremap <buffer> '.g:soywiki_mapping_goto_main_homepage.' :call <SID>goto_homepage(1)<CR>'
|
731
800
|
|
732
|
-
noremap <silent>
|
801
|
+
execute 'noremap <silent> '.g:soywiki_mapping_show_help.' :call <SID>show_help()<cr>'
|
733
802
|
|
734
|
-
nnoremap <buffer>
|
735
|
-
nnoremap <buffer>
|
736
|
-
nnoremap <buffer>
|
737
|
-
nnoremap
|
803
|
+
execute 'nnoremap <buffer> '.g:soywiki_mapping_format.' gqap '
|
804
|
+
execute 'nnoremap <buffer> '.'.g:soywiki_mapping_add_delimiter_line o<Esc>k72i-<Esc><CR>'
|
805
|
+
execute 'nnoremap <buffer> '.g:soywiki_mapping_add_date.' :r !date<CR>o<Esc>'
|
806
|
+
execute 'nnoremap '.g:soywiki_mapping_add_date_and_delimiter_line.' :r !date<CR><Esc>k72i-<Esc>jo<Esc>'
|
738
807
|
|
739
808
|
" set nu
|
740
809
|
setlocal completefunc=CompletePageTitle
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
810
|
+
|
811
|
+
if !exists('g:soywiki_autosave')
|
812
|
+
let g:soywiki_autosave = 1
|
813
|
+
endif
|
814
|
+
|
815
|
+
if g:soywiki_autosave
|
816
|
+
augroup save_revision
|
817
|
+
au!
|
818
|
+
autocmd FileWritePost,BufWritePost,BufUnload <buffer> call s:save_revision()
|
819
|
+
augroup END
|
820
|
+
endif
|
745
821
|
let b:mappings_loaded = 1
|
746
822
|
endif
|
747
823
|
endfunc
|
data/lib/soywiki/html.rb
CHANGED
@@ -1,161 +1,199 @@
|
|
1
1
|
require 'haml'
|
2
2
|
require 'rdiscount'
|
3
3
|
module Soywiki
|
4
|
-
|
5
|
-
include Template_Substitution
|
6
|
-
|
4
|
+
class Html
|
7
5
|
HTML_DIR = 'html-export'
|
8
6
|
INDEX_PAGE_TEMPLATE = File.read(File.join(File.dirname(__FILE__), '..', 'index_template.html.haml'))
|
9
7
|
BROKEN_MARKDOWN_HYPERLINK = %r|\[([^\]]+)\]\(\[(#{HYPERLINK})\]\(\2\)\)|
|
10
|
-
|
8
|
+
PAGE_TEMPLATE = File.read(File.join(File.dirname(__FILE__), '..', 'page_template.html.haml'))
|
11
9
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
end
|
19
|
-
%{<a href="#{href}">#{match}</a>}
|
20
|
-
}
|
21
|
-
return text
|
10
|
+
include Template_Substitution
|
11
|
+
|
12
|
+
attr_reader :markdown, :relative_soyfile, :current_namespace
|
13
|
+
|
14
|
+
def self.export(markdown, relative_soyfile)
|
15
|
+
new(markdown, relative_soyfile).export
|
22
16
|
end
|
23
17
|
|
24
|
-
def
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
18
|
+
def initialize(markdown, relative_soyfile)
|
19
|
+
@markdown = markdown
|
20
|
+
@relative_soyfile = relative_soyfile
|
21
|
+
end
|
22
|
+
|
23
|
+
def export
|
24
|
+
clear_html_dir
|
25
|
+
@current_namespace = nil
|
26
|
+
namespaces.each do |namespace, _count|
|
27
|
+
make_pages(namespace)
|
29
28
|
end
|
30
|
-
|
31
|
-
|
29
|
+
make_root_index_page(namespaces)
|
30
|
+
@current_namespace = nil
|
31
|
+
puts "HTML files written to #{HTML_DIR}/"
|
32
32
|
end
|
33
33
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
def clear_html_dir
|
35
|
+
`rm -rf #{HTML_DIR}/*`
|
36
|
+
end
|
37
|
+
|
38
|
+
def namespaces
|
39
|
+
@namespaces ||= Dir["*"].select do |file|
|
40
|
+
File.directory?(file) && file != HTML_DIR
|
41
|
+
end.sort.map do |namespace|
|
42
|
+
count = Dir["#{namespace}/*"].select { |f| wiki_page?(f) }.size
|
43
|
+
[namespace, count]
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
44
|
-
def
|
45
|
-
|
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
|
47
|
+
def wiki_page?(file)
|
48
|
+
file.gsub("/", '.') =~ WIKI_WORD
|
51
49
|
end
|
52
50
|
|
53
|
-
def
|
54
|
-
|
51
|
+
def make_pages(namespace)
|
52
|
+
`mkdir -p #{HTML_DIR}/#{namespace}`
|
53
|
+
pages = wiki_pages(namespace)
|
54
|
+
inner_pages = pages.map { |p| p.split('/')[1] }.sort
|
55
|
+
pages.each do |file|
|
56
|
+
outfile = File.join(HTML_DIR, file + '.html')
|
57
|
+
html = generate_page(File.read(file), namespace, inner_pages)
|
58
|
+
File.open(outfile, 'w') { |f| f.write(html) }
|
59
|
+
end
|
60
|
+
make_index_page(namespace, inner_pages)
|
55
61
|
end
|
56
62
|
|
57
|
-
|
58
|
-
|
63
|
+
def wiki_pages(namespace)
|
64
|
+
Dir["#{namespace}/*"].select { |file| wiki_page?(file) }
|
65
|
+
end
|
66
|
+
|
67
|
+
def generate_page(text, namespace, pages)
|
59
68
|
@current_namespace = namespace
|
60
69
|
text = text.split("\n")
|
61
70
|
|
62
71
|
title = text.shift || ''
|
63
72
|
body = ''
|
64
|
-
|
65
|
-
body =
|
66
|
-
if
|
67
|
-
body = RDiscount.new(body).to_html.gsub("<pre><code>","<pre><code>\n")
|
68
|
-
end
|
73
|
+
unless text.empty?
|
74
|
+
body = process(text.join("\n").strip)
|
75
|
+
body = markdownify(body) if markdown
|
69
76
|
end
|
70
77
|
|
71
|
-
page_template
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
:namespace => namespace,
|
79
|
-
:namespaces => namespaces,
|
80
|
-
:pages => pages,
|
81
|
-
:markdown => @markdown)
|
78
|
+
Haml::Engine.new(page_template).
|
79
|
+
render(nil, :body => body,
|
80
|
+
:title => title,
|
81
|
+
:namespace => namespace,
|
82
|
+
:namespaces => namespaces,
|
83
|
+
:pages => pages,
|
84
|
+
:markdown => markdown)
|
82
85
|
end
|
83
86
|
|
87
|
+
def process(text)
|
88
|
+
href_hyperlinks(href_wiki_links(text))
|
89
|
+
end
|
84
90
|
|
91
|
+
def href_wiki_links(text)
|
92
|
+
text.gsub(WIKI_WORD) do |match|
|
93
|
+
href =
|
94
|
+
if match =~ /\w\./ # namespace
|
95
|
+
"../#{match.gsub(".", "/")}.html"
|
96
|
+
else
|
97
|
+
match + '.html'
|
98
|
+
end
|
99
|
+
%{<a href="#{href}">#{match}</a>}
|
100
|
+
end
|
101
|
+
end
|
85
102
|
|
86
|
-
def
|
87
|
-
|
103
|
+
def href_hyperlinks(text)
|
104
|
+
substitute =
|
105
|
+
if markdown
|
106
|
+
'[\\0](\\0)'
|
107
|
+
else
|
108
|
+
'<a href="\\0">\\0</a>'
|
109
|
+
end
|
110
|
+
text = text.gsub(HYPERLINK, substitute)
|
111
|
+
if markdown
|
112
|
+
text = text.gsub(BROKEN_MARKDOWN_HYPERLINK, '[\\1](\\2)')
|
113
|
+
end
|
114
|
+
text.gsub(HYPERLINK) { |uri| soyfile_to_href(uri) }
|
88
115
|
end
|
89
116
|
|
90
|
-
def
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
html = Haml::Engine.new(index_page_template).render(nil,
|
98
|
-
:namespace => dir,
|
99
|
-
:root => false,
|
100
|
-
:pages => pages.map {|p| p.split('/')[1]}.sort,
|
101
|
-
:namespaces => namespaces)
|
102
|
-
File.open(outfile, 'w') {|f| f.write html}
|
103
|
-
# puts "=> Writing #{outfile}"
|
104
|
-
end
|
105
|
-
|
106
|
-
def self.make_pages(dir, namespaces)
|
107
|
-
`mkdir -p #{HTML_DIR}/#{dir}`
|
108
|
-
pages = Dir["#{dir}/*"].select {|file| wiki_page? file}
|
109
|
-
# make pages
|
110
|
-
pages.each do |file|
|
111
|
-
outfile = File.join(HTML_DIR, file + '.html')
|
112
|
-
html = Soywiki::Html.generate_page(File.read(file),
|
113
|
-
dir,
|
114
|
-
pages.map {|p| p.split('/')[1]}.sort,
|
115
|
-
namespaces)
|
116
|
-
File.open(outfile, 'w') {|f| f.write html}
|
117
|
-
# puts "Writing #{outfile}"
|
117
|
+
def soyfile_to_href(uri)
|
118
|
+
match = soyfile_match(uri)
|
119
|
+
if match
|
120
|
+
path = choose_soyfile_path(match[1])
|
121
|
+
path[0] == '/' ? "file://#{path}" : path
|
122
|
+
else
|
123
|
+
uri
|
118
124
|
end
|
119
|
-
make_index_page(dir, pages, namespaces)
|
120
125
|
end
|
121
126
|
|
122
|
-
def
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
INDEX_PAGE_TEMPLATE
|
128
|
-
end
|
129
|
-
html = Haml::Engine.new(index_page_template).render(nil,
|
130
|
-
:namespace => nil,
|
131
|
-
:pages => [],
|
132
|
-
:root => true,
|
133
|
-
:namespaces => namespaces)
|
134
|
-
File.open(outfile, 'w') {|f| f.write html}
|
135
|
-
# puts "=> Writing #{outfile}"
|
136
|
-
end
|
137
|
-
|
138
|
-
def self.export(markdown)
|
139
|
-
@markdown = markdown
|
127
|
+
def soyfile_match(uri)
|
128
|
+
uri_after_scheme = %r{[^ >)\n\]]+}
|
129
|
+
regex = %r{^soyfile://(#{uri_after_scheme})}
|
130
|
+
uri.match(regex)
|
131
|
+
end
|
140
132
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
@current_namespace = nil
|
149
|
-
namespaces.each do |namespace_dir, count|
|
150
|
-
make_pages namespace_dir, namespaces
|
133
|
+
def choose_soyfile_path(path)
|
134
|
+
absolute_path = absolute_soyfile_path(path)
|
135
|
+
if relative_soyfile
|
136
|
+
Pathname.new(absolute_path).
|
137
|
+
relative_path_from(Pathname.new(wiki_root)).to_s
|
138
|
+
else
|
139
|
+
absolute_path
|
151
140
|
end
|
152
|
-
# make root index page
|
153
|
-
make_root_index_page namespaces
|
154
|
-
@current_namespace = nil
|
155
|
-
puts "HTML files written to #{HTML_DIR}/"
|
156
141
|
end
|
157
142
|
|
143
|
+
def absolute_soyfile_path(path)
|
144
|
+
return path if path[0] == '/'
|
145
|
+
autochdir_path = absolutify("#{current_namespace}/#{path}")
|
146
|
+
wiki_path = absolutify(path)
|
147
|
+
File.exists?(autochdir_path) ? autochdir_path : wiki_path
|
148
|
+
end
|
149
|
+
|
150
|
+
def absolutify(path)
|
151
|
+
File.absolute_path(File.join(wiki_root, path))
|
152
|
+
end
|
153
|
+
|
154
|
+
def wiki_root
|
155
|
+
Dir.getwd
|
156
|
+
end
|
157
|
+
|
158
|
+
def markdownify(text)
|
159
|
+
RDiscount.new(text).to_html.gsub("<pre><code>", "<pre><code>\n")
|
160
|
+
end
|
158
161
|
|
162
|
+
def page_template
|
163
|
+
if defined?(PAGE_TEMPLATE_SUB)
|
164
|
+
PAGE_TEMPLATE_SUB
|
165
|
+
else
|
166
|
+
PAGE_TEMPLATE
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
def make_index_page(namespace, inner_pages)
|
171
|
+
outfile = File.join(HTML_DIR, namespace, 'index.html')
|
172
|
+
html = Haml::Engine.new(index_page_template).
|
173
|
+
render(nil, :namespace => namespace,
|
174
|
+
:root => false,
|
175
|
+
:pages => inner_pages,
|
176
|
+
:namespaces => namespaces)
|
177
|
+
File.open(outfile, 'w') { |f| f.write(html) }
|
178
|
+
end
|
179
|
+
|
180
|
+
def index_page_template
|
181
|
+
if defined?(INDEX_PAGE_TEMPLATE_SUB)
|
182
|
+
INDEX_PAGE_TEMPLATE_SUB
|
183
|
+
else
|
184
|
+
INDEX_PAGE_TEMPLATE
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
def make_root_index_page(namespaces)
|
189
|
+
outfile = File.join(HTML_DIR, 'index.html')
|
190
|
+
html = Haml::Engine.new(index_page_template).
|
191
|
+
render(nil, :namespace => nil,
|
192
|
+
:pages => [],
|
193
|
+
:root => true,
|
194
|
+
:namespaces => namespaces)
|
195
|
+
File.open(outfile, 'w') { |f| f.write(html) }
|
196
|
+
end
|
159
197
|
end
|
160
198
|
end
|
161
199
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soywiki
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.8.
|
4
|
+
version: 0.9.8.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Choi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A personal and collaborative wiki for Vim users
|
14
14
|
email:
|
@@ -74,7 +74,7 @@ requirements:
|
|
74
74
|
and for markdown support:
|
75
75
|
- rdiscount
|
76
76
|
rubyforge_project: soywiki
|
77
|
-
rubygems_version: 2.2.
|
77
|
+
rubygems_version: 2.2.2
|
78
78
|
signing_key:
|
79
79
|
specification_version: 4
|
80
80
|
summary: Wiki with Vim interface and Git repo
|