soywiki 0.2.2 → 0.2.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.
data/.gitignore CHANGED
@@ -9,3 +9,4 @@ notes.txt
9
9
  *buffer
10
10
  wiki/
11
11
  soywiki.html
12
+ wiki2/
data/Gemfile CHANGED
@@ -1,4 +1,2 @@
1
1
  source :rubygems
2
- gem "couchrest"
3
- gem "sinatra"
4
2
  gem "haml"
data/Gemfile.lock CHANGED
@@ -1,25 +1,10 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- couchrest (1.0.1)
5
- json (>= 1.4.6)
6
- mime-types (>= 1.15)
7
- rest-client (>= 1.5.1)
8
4
  haml (3.0.25)
9
- json (1.5.1)
10
- mime-types (1.16)
11
- rack (1.2.1)
12
- rest-client (1.6.1)
13
- mime-types (>= 1.16)
14
- sinatra (1.1.2)
15
- rack (~> 1.1)
16
- tilt (~> 1.2)
17
- tilt (1.2.2)
18
5
 
19
6
  PLATFORMS
20
7
  ruby
21
8
 
22
9
  DEPENDENCIES
23
- couchrest
24
10
  haml
25
- sinatra
data/README.markdown CHANGED
@@ -1,7 +1,8 @@
1
1
  # SoyWiki
2
2
 
3
- SoyWiki is lightweight application that turns Vim into a fast and
4
- powerful wiki.
3
+ SoyWiki turns Vim into a powerful, lean, and fast wiki. It's got all
4
+ the protein of a more conventional wiki, but a lot less of the fat and
5
+ cholesterol.
5
6
 
6
7
  A quick overview of its characteristics and features:
7
8
 
@@ -124,7 +125,7 @@ You can get very far with SoyWiki using normal CamelCase WikiWords.
124
125
 
125
126
  But if you want, you can also namespace your WikiWords, like so:
126
127
 
127
- namespaced.WikiWord
128
+ namespace.WikiWord
128
129
 
129
130
  A namespaced WikiWord is a WikiWord prefixed by a namespace and a
130
131
  period. The namespace word must start with a lower-case letter and
@@ -145,8 +146,8 @@ namespace called `recipes.SoyRaspberrySmoothie` you can type the link as
145
146
  just `SoyRaspberrySmoothie`. SoyWiki will know that this is a link to
146
147
  another page in the same namespace.
147
148
 
148
- When you first start SoyWiki, the active namespace the is the default
149
- namespace `main`.
149
+ When you start SoyWiki for the first time, the active namespace is the
150
+ default namespace `main`.
150
151
 
151
152
 
152
153
  ## Wiki navigation
@@ -157,7 +158,7 @@ commands:
157
158
  * `CTRL-k` and `CTRL-j` move the cursor directly to the next or previous WikiLink on the page
158
159
  * `ENTER` follows the WikiLink under the cursor
159
160
  * `,f` follows the first WikiLink after the cursor
160
- * `CTRL-l` opens a WikiLink in a vertical split window; press again
161
+ * `CTRL-l` opens a WikiLink in a vertical split window; press `CTRL-l` again
161
162
  while the cursor is on the top line to close the new window
162
163
  * `CTRL-h` does the same, but in a regular split window
163
164
  * `q` closes a split window
@@ -260,21 +261,24 @@ same wiki page.
260
261
  ## Search
261
262
 
262
263
  * `:SWSearch` [term]
263
- * `:SWNamespacedSearch` [term]
264
+ * `:SWNamespaceSearch` [term]
264
265
 
265
- These commands search your SoyWiki wiki. Vim will load any matches in
266
- the quickfix list window. If there are matches, you can use `:cn` and
267
- `:cp` to go from match to match, `:cl` to list the matches, and `:cc
268
- [item number]` to see a particular match ln the list. See `:help
269
- quickfix` to see the list of matches. for more QuickFix commands.
266
+ These commands search your SoyWiki wiki. `:SWNamespaceSearch` confines
267
+ your search to the current namespace.
268
+
269
+ Vim will load any matches in the quickfix list window. If there are
270
+ matches, you can use `:cn` and `:cp` to go from match to match, `:cl` to
271
+ list the matches, and `:cc [item number]` to see a particular match ln
272
+ the list. See `:help quickfix` to see the list of matches. for more
273
+ QuickFix commands.
270
274
 
271
275
  Examples:
272
276
 
273
277
  :SWSearch Gnu
274
- :SWNamespacedSearch Gnu
278
+ :SWNamespaceSearch Gnu
275
279
 
276
280
  You can use `:SWS` as a shortcut for `:SWSearch`. You can also
277
- tab-complete `:SWNS` to `:SWSNamespacedSearch`.
281
+ tab-complete `:SWNS` to `:SWSNamespaceSearch`.
278
282
 
279
283
  Searches are case-insensitve.
280
284
 
@@ -354,6 +358,12 @@ recursive, you can effectively nest outlines within outlines, like
354
358
  dreams within dreams.
355
359
 
356
360
 
361
+ ## Exporting to HTML
362
+
363
+ Want to share your wiki with non-Vim-users? Export your wiki into a directory
364
+ of html pages, type `soywiki --html` from the root directory of your wiki.
365
+
366
+
357
367
  ## Extra macros
358
368
 
359
369
  SoyWiki adds a few convenient Vim macros that you can use anytime.
@@ -387,13 +397,6 @@ file names without any awkward character escaping.
387
397
  [ward]:http://c2.com/cgi/wiki?WikiCase
388
398
 
389
399
 
390
- ## Why name a wiki engine after a legume?
391
-
392
- I am a fan of food made of [soy][soylink]: soy ice cream, soy milk, soy
393
- burgers, soy butter, you name it. The word "soy" has come to signify a
394
- newer, lighter, healthier alternative to the same old same old. SoyWiki
395
- may not be an actual soy product, but it tries to be a wiki engine with
396
- soy-like benefits.
397
400
 
398
401
  [soylink]:http://www.mayoclinic.com/health/soy/NS_patient-soy
399
402
 
data/Rakefile CHANGED
@@ -32,10 +32,11 @@ desc "build and push website"
32
32
  task :web => :build_webpage do
33
33
  puts "Building and pushing website"
34
34
  `scp website/soywiki.html zoe2@instantwatcher.com:~/danielchoi.com/public/software/`
35
+ `open http://danielchoi.com/software/soywiki.html`
35
36
  end
36
37
 
37
38
  desc "build website locally"
38
- task :weblocal => :build_webpage do
39
+ task :build_web_locally => :build_webpage do
39
40
  Dir.chdir("website") do
40
41
  `open soywiki.html`
41
42
  end
@@ -51,6 +52,7 @@ task :build_webpage do
51
52
  end
52
53
  end
53
54
 
55
+
54
56
  desc "Run tests"
55
57
  task :test do
56
58
  $:.unshift File.expand_path("test")
data/bin/soywiki-expand CHANGED
@@ -13,10 +13,14 @@ PROCESSED_FILES = []
13
13
  def indent(text, level, mode)
14
14
  return text if mode == 'seamless'
15
15
  return text if level == 0
16
- (':' * level) + ' ' + text
16
+ ('|' * level) + ' ' + text
17
17
 
18
18
  end
19
19
 
20
+ def divider
21
+ puts '+' + '-' * 78 + '+'
22
+ end
23
+
20
24
  def expand(file, mode, level=0)
21
25
  PROCESSED_FILES << file
22
26
  lines = File.readlines(file)
@@ -34,11 +38,11 @@ def expand(file, mode, level=0)
34
38
  end
35
39
  if File.file?(link.to_file_path) && !PROCESSED_FILES.include?(link.to_file_path)
36
40
  if mode == 'seamful'
37
- puts '.' * 10
41
+ divider
38
42
  end
39
43
  expand(link.to_file_path, mode, level + 1) # recursive call
40
44
  if mode == 'seamful'
41
- puts '.' * 10
45
+ divider
42
46
  end
43
47
  elsif PROCESSED_FILES.include?(link)
44
48
  puts indent("#{link} [[already expanded]]", level, mode)
@@ -0,0 +1,28 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ :css
5
+ h3 { margin-top: 0 }
6
+ .sidebar { float:left; width: 20%; font-size: small }
7
+ .main { margin-left: 22%; width: 70% }
8
+ ul { list-style-type: none; margin-left: 0; padding-left: 0 }
9
+ .page-count { font-size: smaller; color: #CCC }
10
+ %body
11
+ .sidebar
12
+ %h3 Namespaces
13
+ %ul
14
+ - namespaces.each do |namespace, count|
15
+ %li
16
+ - if root
17
+ %a{:href => "#{namespace}/index.html"}= namespace
18
+ - else
19
+ %a{:href => "../#{namespace}/index.html"}= namespace
20
+ %span.page-count
21
+ = count
22
+ - if ! root
23
+ %h3= namespace
24
+ %ul
25
+ - pages.each do |page|
26
+ %li
27
+ %a{:href => "#{page}.html"}= page
28
+
@@ -0,0 +1,27 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ :css
5
+ h3 { margin-top: 0 }
6
+ .sidebar { float:left; width: 20%; font-size: small }
7
+ .main { margin-left: 22%; width: 70% }
8
+ ul { list-style-type: none; margin-left: 0; padding-left: 0 }
9
+ .page-count { font-size: smaller; color: #CCC }
10
+
11
+ %body
12
+ .sidebar
13
+ %h3 Namespaces
14
+ %ul
15
+ - namespaces.each do |namespace, count|
16
+ %li
17
+ %a{:href => "../#{namespace}/index.html"}= namespace
18
+ %span.page-count
19
+ = count
20
+ %h3= namespace
21
+ %ul
22
+ - pages.each do |page|
23
+ %li
24
+ %a{:href => "#{page}.html"}= page
25
+ .main
26
+ %h2= title
27
+ %pre= body
@@ -0,0 +1,104 @@
1
+ require 'haml'
2
+ module Soywiki
3
+ module Html
4
+
5
+ def self.href_wiki_links(text)
6
+ text = text.gsub(WIKI_WORD) {|match|
7
+ href = if match =~ /\w\./ # namespace
8
+ "../#{match.gsub(".", "/")}.html"
9
+ else
10
+ match + '.html'
11
+ end
12
+ %{<a href="#{href}">#{match}</a>}
13
+ }
14
+ return text
15
+ end
16
+
17
+ def self.href_hyperlinks(text)
18
+ text = text.gsub(HYPERLINK) {|match|
19
+ %{<a href="#{match}">#{match}</a>}
20
+ }
21
+ return text
22
+ end
23
+
24
+ def self.process(t)
25
+ href_hyperlinks(href_wiki_links(t))
26
+ end
27
+
28
+ PAGE_TEMPLATE = File.read(File.join(File.dirname(__FILE__), '..', 'page_template.html.haml'))
29
+
30
+ def self.generate_page(text, namespace, pages, namespaces)
31
+ title = text.split("\n")[0]
32
+ body = process(text.split("\n")[1..-1].join("\n").strip)
33
+ Haml::Engine.new(PAGE_TEMPLATE).render(nil, :body => body,
34
+ :title => title,
35
+ :namespace => namespace,
36
+ :namespaces => namespaces, :pages => pages)
37
+ end
38
+
39
+
40
+ HTML_DIR = 'soywiki-html-export'
41
+ INDEX_PAGE_TEMPLATE = File.read(File.join(File.dirname(__FILE__), '..', 'index_template.html.haml'))
42
+
43
+ def self.wiki_page?(file)
44
+ file.gsub("/", '.') =~ WIKI_WORD
45
+ end
46
+
47
+ def self.make_index_page(dir, pages, namespaces)
48
+ outfile = File.join(HTML_DIR, dir, 'index.html')
49
+ html = Haml::Engine.new(INDEX_PAGE_TEMPLATE).render(nil,
50
+ :namespace => dir,
51
+ :root => false,
52
+ :pages => pages.map {|p| p.split('/')[1]}.sort,
53
+ :namespaces => namespaces)
54
+ File.open(outfile, 'w') {|f| f.write html}
55
+ # puts "=> Writing #{outfile}"
56
+ end
57
+
58
+ def self.make_pages(dir, namespaces)
59
+ `mkdir -p #{HTML_DIR}/#{dir}`
60
+ pages = Dir["#{dir}/*"].select {|file| wiki_page? file}
61
+ # make pages
62
+ pages.each do |file|
63
+ outfile = File.join(HTML_DIR, file + '.html')
64
+ html = Soywiki::Html.generate_page(File.read(file),
65
+ dir,
66
+ pages.map {|p| p.split('/')[1]}.sort,
67
+ namespaces)
68
+ File.open(outfile, 'w') {|f| f.write html}
69
+ # puts "Writing #{outfile}"
70
+ end
71
+ make_index_page(dir, pages, namespaces)
72
+ end
73
+
74
+ def self.make_root_index_page(namespaces)
75
+ outfile = File.join(HTML_DIR, 'index.html')
76
+ html = Haml::Engine.new(INDEX_PAGE_TEMPLATE).render(nil,
77
+ :namespace => nil,
78
+ :pages => [],
79
+ :root => true,
80
+ :namespaces => namespaces)
81
+ File.open(outfile, 'w') {|f| f.write html}
82
+ # puts "=> Writing #{outfile}"
83
+ end
84
+
85
+ def self.export
86
+ `rm -rf #{HTML_DIR}/*`
87
+ namespaces = Dir["*"].select {|f|
88
+ File.directory?(f) && f != HTML_DIR
89
+ }.map {|namespace|
90
+ count = Dir["#{namespace}/*"].select {|f| wiki_page?(f)}.size
91
+ [namespace, count]
92
+ }
93
+ namespaces.each do |namespace_dir, count|
94
+ make_pages namespace_dir, namespaces
95
+ end
96
+ # make root index page
97
+ make_root_index_page namespaces
98
+ puts "HTML files written to #{HTML_DIR}/"
99
+ end
100
+
101
+
102
+ end
103
+ end
104
+
data/lib/soywiki.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  require 'string_ext'
2
2
 
3
3
  module Soywiki
4
- VERSION = '0.2.2'
4
+ VERSION = '0.2.3'
5
5
  WIKI_WORD = /\b([a-z][\w_]+\.)?[A-Z][a-z]+[A-Z]\w*\b/
6
+ HYPERLINK = %r|\bhttps?://[^ >)\n\]]+|
6
7
 
7
8
  def self.run
8
9
  if %W( -v --version -h --help).include?(ARGV.first)
@@ -20,12 +21,23 @@ open the most recently modified wiki file.
20
21
  ---
21
22
  END
22
23
  exit
24
+ elsif ARGV.first == '--html'
25
+ self.html_export
26
+ exit
27
+ else
28
+ vim = ENV['SOYWIKI_VIM'] || 'vim'
29
+ vimscript = File.expand_path("../soywiki.vim", __FILE__)
30
+ vim_command = "#{vim} -S #{vimscript} #{ARGV.first}"
31
+ exec vim_command
23
32
  end
33
+ end
24
34
 
25
- vim = ENV['SOYWIKI_VIM'] || 'vim'
26
- vimscript = File.expand_path("../soywiki.vim", __FILE__)
27
- vim_command = "#{vim} -S #{vimscript} #{ARGV.first}"
28
- exec vim_command
35
+ def self.html_export
36
+ require 'soywiki/html'
37
+ Html.export
29
38
  end
30
39
  end
31
40
 
41
+ if __FILE__ == $0
42
+ Soywiki.run
43
+ end
data/lib/soywiki.vim CHANGED
@@ -4,8 +4,6 @@
4
4
 
5
5
  " This regex matches namedspaced WikiWords and unqualified WikiWords
6
6
  let s:wiki_link_pattern = '\C\m\<\([a-z][[:alnum:]_]\+\.\)\?[A-Z][a-z]\+[A-Z]\w*\>'
7
-
8
-
9
7
  let s:http_link_pattern = 'https\?:[^ >)\]]\+'
10
8
  let s:rename_links_command = 'soywiki-rename '
11
9
  let s:find_pages_linking_in_command = 'soywiki-pages-linking-in '
data/soywiki.gemspec CHANGED
@@ -19,5 +19,5 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
- s.add_dependency 'couchrest'
22
+ s.add_dependency 'haml'
23
23
  end
@@ -47,7 +47,7 @@
47
47
  <div class="also-by">
48
48
  <h4>also by this developer</h4>
49
49
  <ul class="cross-promo">
50
- <li><a href="http://vmail.com">vmail<a/></li>
50
+ <li><a href="http://danielchoi.com/software/vmail.html">vmail<a/></li>
51
51
  <li><a href="http://instantwatcher.com">instantwatcher.com<a/></li>
52
52
  <li><a href="http://openmbta.org">OpenMBTA<a/></li>
53
53
  <li><a href="http://kindlefeeder.com">kindlefeeder.com<a/></li>
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 2
9
- version: 0.2.2
8
+ - 3
9
+ version: 0.2.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Daniel Choi
@@ -14,11 +14,11 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-02-12 00:00:00 -05:00
17
+ date: 2011-02-13 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: couchrest
21
+ name: haml
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
@@ -55,8 +55,11 @@ files:
55
55
  - bin/soywiki-ls-t
56
56
  - bin/soywiki-pages-linking-in
57
57
  - bin/soywiki-rename
58
+ - lib/index_template.html.haml
59
+ - lib/page_template.html.haml
58
60
  - lib/soywiki.rb
59
61
  - lib/soywiki.vim
62
+ - lib/soywiki/html.rb
60
63
  - lib/string_ext.rb
61
64
  - soywiki.gemspec
62
65
  - website/.gitignore