soywiki 0.9.8.2 → 0.9.8.3
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.
- 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
|