mamemose 0.2.1 → 0.3.0

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.md CHANGED
@@ -9,19 +9,25 @@ mamemose: Markdown memo server
9
9
  - Markdown など軽量マークアップ言語で書かれたドキュメントを
10
10
  コマンド操作無しで勝手に HTML に変換してくれる
11
11
  - Sphinx などをそのまま使うのはコマンドを打つ手間があるので嫌だった
12
+ - ローカルに余計なファイルができてほしくない
13
+ - Markdown から静的な HTML ファイルを生成するのは嬉しくない。
14
+ 邪魔なファイルが増えるし、変換が自動化されていたとしても
15
+ 何かの拍子に Markdown ファイルと HTML ファイルの同期が取れなくなりそうな気もする。
12
16
  - 複数マシンで内容を共有できる (Dropbox 等を使ってもよい)
17
+ - マルチプラットフォーム (少なくとも Mac, Linux は必須)
13
18
  - 使い慣れたエディタを使える
14
19
  - 検索できる
15
- - できれば GitHub Flavored Markdown でシンタックスハイライトもしてほしい
16
- - できれば LaTeX で数式も書きたい
20
+ - GitHub Flavored Markdown でシンタックスハイライトもしてほしい
21
+ - LaTeX で数式も書きたい
17
22
 
18
23
  環境
19
24
  ----
20
25
 
26
+ - Ruby 製
21
27
  - おもに Mac OS X 10.8 上の Ruby 1.9.3 でテスト
22
28
  - Ruby 1.8.7 でも動くようにした
23
- - Linux はおそらく大丈夫
24
- - Windows も、こないだ Cygwin 上で試したら動いたのでたぶん動くと思う
29
+ - Linux は大丈夫
30
+ - Windows Cygwin 上でなら動くことは確認した
25
31
 
26
32
  インストール方法
27
33
  ----
@@ -39,13 +45,15 @@ $ gem install mamemose
39
45
  使い方
40
46
  ----
41
47
 
42
- 設定ファイル (後述) を書いたら以下で起動
48
+ 設定ファイル (後述) を書いたら以下で起動。
49
+ もしかしたら `~/.gem/*/bin` とか `/Library/Ruby/Gems/1.8/*/bin` あたりに
50
+ パスを通す必要があるかも。
43
51
 
44
52
  ```bash
45
53
  $ mamemose &> /dev/null &
46
54
  ```
47
55
 
48
- ブラウザから
56
+ するとローカルで HTTP サーバが立ち上がります。その後ブラウザから
49
57
 
50
58
  ```
51
59
  http://localhost:PORT/
@@ -54,12 +62,28 @@ http://localhost:PORT/
54
62
  にアクセスすればおk
55
63
 
56
64
  `DOCUMENT_ROOT` 以下の Markdown で書かれたテキストを勝手にHTMLに変換して表示します。
57
- 一覧ページでは Markdown ドキュメントの1行目をタイトルとして読み込みます。
58
-
59
65
  `DOCUMENT_ROOT` を Dropbox 以下のディレクトリに指定しておけば、どのマシンからでも
60
66
  メモにアクセスできるようになります。
61
67
 
62
- 文字コードは UTF-8 で書くようにしてください。
68
+ - 一覧ページでは Markdown ドキュメントの1行目をタイトルとして読み込みます。
69
+ - 文字コードは UTF-8 で書くようにしてください。
70
+ - コマンドラインオプションは `mamemose help` で出ます。一応。
71
+
72
+ ### 一時ファイル閲覧
73
+
74
+ 一時的に `DOCUMENT_ROOT` で指定したディレクトリ以外にあるファイルを
75
+ ブラウザで Markdown プレビューする機能があります。
76
+
77
+ ```bash
78
+ $ mamemose s /path/to/file 8000
79
+ ```
80
+
81
+ などとして `localhost:8000` にアクセスすると、
82
+ `/path/to/file` を Mamemose サーバでレンダリングした HTML をブラウザから
83
+ 見ることができます。
84
+ これによって GitHub などに置く Markdown ファイルを push する前に
85
+ 試しにブラウザから見ることができ、
86
+ レンダリングの崩れなどがないかチェックできます。
63
87
 
64
88
  ### シンタックスハイライト
65
89
 
@@ -245,5 +269,12 @@ Jim | 47
245
269
  Harry | 32
246
270
  ```
247
271
 
248
- - 定義リストを書きたいんだけど
272
+ - 定義リスト、 definition list, dl を書きたいんだけど
249
273
  - 無理らしいです。 HTML 直接書いてください。
274
+
275
+ その他
276
+ ----
277
+
278
+ ブログ的なエントリ
279
+
280
+ - <http://daimatz.hateblo.jp/entry/2012/12/01/152725>
data/bin/mamemose CHANGED
@@ -4,4 +4,31 @@ $:.unshift File.expand_path("../../lib", __FILE__)
4
4
 
5
5
  load 'mamemose.rb'
6
6
 
7
- Mamemose::Server.new.start
7
+ require 'rubygems'
8
+ require 'thor'
9
+
10
+ class Mamemose::CLI < Thor
11
+ desc "server", "run the mamemose server"
12
+ desc "server filename port", "run the mamemose server for specified file"
13
+ def server(filename=nil, port=nil)
14
+ mamemose = Mamemose::Server.new(port)
15
+ if !filename && !port
16
+ mamemose.start
17
+ elsif filename && port
18
+ mamemose.file(filename)
19
+ else
20
+ puts "please specify filename and port"
21
+ end
22
+ end
23
+
24
+ desc "s", "alias of server"
25
+ alias :s :server
26
+
27
+ desc "version", "print version"
28
+ def version
29
+ puts Mamemose::VERSION
30
+ end
31
+ end
32
+
33
+ args = ARGV == [] ? ["s"] : ARGV
34
+ Mamemose::CLI.start(args)
@@ -1,3 +1,3 @@
1
1
  module Mamemose
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/mamemose.rb CHANGED
@@ -35,8 +35,13 @@ class HTMLwithSyntaxHighlighter < Redcarpet::Render::XHTML
35
35
  end
36
36
 
37
37
  class Mamemose::Server
38
- def initialize
39
- @server = WEBrick::HTTPServer.new({ :Port => PORT })
38
+ def initialize(port)
39
+ @server = WEBrick::HTTPServer.new({ :Port => port ? port.to_i : PORT })
40
+ trap(:INT){@server.shutdown}
41
+ trap(:TERM){@server.shutdown}
42
+ end
43
+
44
+ def start
40
45
  @server.mount_proc('/') do |req, res|
41
46
  res['Cache-Control'] = 'no-cache, no-store, must-revalidate'
42
47
  res['Pragma'] = 'no-cache'
@@ -47,23 +52,30 @@ class Mamemose::Server
47
52
  elsif File.directory?(fullpath(req.path)) then
48
53
  res = req_index(req, res)
49
54
  elsif File.exists?(fullpath(req.path))
50
- res = req_file(req, res)
55
+ res = req_file(fullpath(req.path), res, false)
51
56
  else
52
57
  res.status = WEBrick::HTTPStatus::RC_NOT_FOUND
53
58
  end
54
59
  end
55
60
 
56
- trap(:INT){@server.shutdown}
57
- trap(:TERM){@server.shutdown}
61
+ @server.start
58
62
  end
59
63
 
60
- def start
64
+ def file(filename)
65
+ @server.mount_proc('/') do |req, res|
66
+ res['Cache-Control'] = 'no-cache, no-store, must-revalidate'
67
+ res['Pragma'] = 'no-cache'
68
+ res['Expires'] = '0'
69
+ res = req_file(File.absolute_path(filename), res, true)
70
+ res.content_type = CONTENT_TYPE
71
+ end
72
+
61
73
  @server.start
62
74
  end
63
75
 
64
76
  private
65
77
 
66
- def header_html(title, path, q="")
78
+ def header_html(title, path)
67
79
  html = <<HTML
68
80
  <!DOCTYPE HTML>
69
81
  <html>
@@ -214,6 +226,10 @@ function copy(text) {
214
226
  <body>
215
227
  #{CUSTOM_BODY}
216
228
  HTML
229
+ return html
230
+ end
231
+
232
+ def search_form(path, q="")
217
233
  link_str = ""
218
234
  uri = ""
219
235
  path.split('/').each do |s|
@@ -231,7 +247,7 @@ HTML
231
247
  <input type="submit" value="search" />
232
248
  </form>
233
249
  HTML
234
- return html + "<div id=\"header\">#{link_str}#{search_form}</div>"
250
+ return "<div id=\"header\">#{link_str}#{search_form}</div>"
235
251
  end
236
252
 
237
253
  def footer_html(filepath=nil)
@@ -272,7 +288,10 @@ HTML
272
288
  value.each {|v| body += link_list(v[0], v[1])}
273
289
  end
274
290
 
275
- res.body = header_html(title, uri(path), q) + markdown(body) + footer_html
291
+ res.body = header_html(title, uri(path))\
292
+ + search_form(uri(path), q)\
293
+ + markdown(body)\
294
+ + footer_html
276
295
  res.content_type = CONTENT_TYPE
277
296
  return res
278
297
  end
@@ -302,22 +321,27 @@ HTML
302
321
  body += File.read(index)
303
322
  end
304
323
 
305
- res.body = header_html(title, req.path) + markdown(body) + footer_html(index)
324
+ res.body = header_html(title, req.path)\
325
+ + search_form(uri(req.path))\
326
+ + markdown(body)\
327
+ + footer_html(index)
306
328
  res.content_type = CONTENT_TYPE
307
329
  return res
308
330
  end
309
331
 
310
- def req_file(req, res)
311
- filename = fullpath(req.path)
332
+ def req_file(filename, res, fileonly)
312
333
  open(filename) do |file|
313
- if markdown?(req.path)
334
+ if markdown?(filename)
314
335
  str = file.read
315
336
  title = get_title(filename, str)
316
- res.body = header_html(title, req.path) + markdown(str) + footer_html(fullpath(req.path))
337
+ body = header_html(title, filename)
338
+ body += search_form(uri(filename)) if !fileonly
339
+ body += markdown(str) + footer_html(filename)
340
+ res.body = body
317
341
  res.content_type = CONTENT_TYPE
318
342
  else
319
343
  res.body = file.read
320
- res.content_type = WEBrick::HTTPUtils.mime_type(req.path, WEBrick::HTTPUtils::DefaultMimeTypes)
344
+ res.content_type = WEBrick::HTTPUtils.mime_type(filename, WEBrick::HTTPUtils::DefaultMimeTypes)
321
345
  res.content_length = File.stat(filename).size
322
346
  end
323
347
  end
data/mamemose.gemspec CHANGED
@@ -17,4 +17,5 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_dependency "redcarpet", ">= 2.2.0"
19
19
  gem.add_dependency "htmlentities", ">= 4.3.0"
20
+ gem.add_dependency "thor"
20
21
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mamemose
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
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: 2012-12-24 00:00:00.000000000 Z
12
+ date: 2013-03-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redcarpet
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: 4.3.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: thor
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
46
62
  description: Markdown memo server
47
63
  email:
48
64
  - dai@daimatz.net
@@ -82,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
98
  version: '0'
83
99
  requirements: []
84
100
  rubyforge_project:
85
- rubygems_version: 1.8.24
101
+ rubygems_version: 1.8.23
86
102
  signing_key:
87
103
  specification_version: 3
88
104
  summary: Markdown memo server