summaryrefslogtreecommitdiffstats
path: root/ftplugin/textile.vim
diff options
context:
space:
mode:
Diffstat (limited to 'ftplugin/textile.vim')
-rw-r--r--ftplugin/textile.vim59
1 files changed, 59 insertions, 0 deletions
diff --git a/ftplugin/textile.vim b/ftplugin/textile.vim
new file mode 100644
index 00000000..a840e600
--- /dev/null
+++ b/ftplugin/textile.vim
@@ -0,0 +1,59 @@
+" textile.vim
+"
+" Tim Harper (tim.theenchanter.com)
+
+command! -nargs=0 TextileRenderFile call TextileRenderBufferToFile()
+command! -nargs=0 TextileRenderTab call TextileRenderBufferToTab()
+command! -nargs=0 TextilePreview call TextileRenderBufferToPreview()
+noremap <buffer> <Leader>rp :TextilePreview<CR>
+noremap <buffer> <Leader>rf :TextileRenderFile<CR>
+noremap <buffer> <Leader>rt :TextileRenderTab<CR>
+setlocal ignorecase
+setlocal wrap
+setlocal lbr
+
+function! TextileRender(lines)
+ if (system('which ruby') == "")
+ throw "Could not find ruby!"
+ end
+
+ let text = join(a:lines, "\n")
+ let html = system("ruby -e \"def e(msg); puts msg; exit 1; end; begin; require 'rubygems'; rescue LoadError; e('rubygems not found'); end; begin; require 'redcloth'; rescue LoadError; e('RedCloth gem not installed. Run this from the terminal: sudo gem install RedCloth'); end; puts(RedCloth.new(\\$stdin.read).to_html(:textile))\"", text)
+ return html
+endfunction
+
+function! TextileRenderFile(lines, filename)
+ let html = TextileRender(getbufline(bufname("%"), 1, '$'))
+ let html = "<html><head><title>" . bufname("%") . "</title></head><body>\n" . html . "\n</body></html>"
+ return writefile(split(html, "\n"), a:filename)
+endfunction
+
+function! TextileRenderBufferToPreview()
+ let filename = "/tmp/textile-preview.html"
+ call TextileRenderFile(getbufline(bufname("%"), 1, '$'), filename)
+ " Verify if browser was set
+ if !exists("g:TextileBrowser")
+ let g:TextileBrowser='Safari'
+ endif
+ " call configured browser according OS
+ if !exists("g:TextileOS") || g:TextileOS == 'mac'
+ call system("open -a \"".g:TextileBrowser."\" ".filename)
+ else
+ echo g:TextileBrowser." ".filename
+ call system(g:TextileBrowser." ".filename)
+ endif
+endfunction
+
+function! TextileRenderBufferToFile()
+ let filename = input("Filename:", substitute(bufname("%"), "textile$", "html", ""), "file")
+ call TextileRenderFile(getbufline(bufname("%"), 1, '$'), filename)
+ echo "Rendered to '" . filename . "'"
+endfunction
+
+function! TextileRenderBufferToTab()
+ let html = TextileRender(getbufline(bufname("%"), 1, '$'))
+ tabnew
+ call append("^", split(html, "\n"))
+ set syntax=html
+endfunction
+