m2m 0.2.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.
@@ -0,0 +1,20 @@
1
+ <div class="posts">
2
+ {{#articles}}
3
+ <div class="post">
4
+ <h1><a href="{{root/relative_path}}{{relative_url}}">{{meta.title}}</a></h1>
5
+ <span class="post-date">{{meta.publish_date}}</span>
6
+ <p>{{excerpt}}&hellip;</p>
7
+ </div>
8
+ {{/articles}}
9
+ </div>
10
+
11
+ <!-- Pagination links -->
12
+ <div class="pagination">
13
+ {{#nav.previous}}
14
+ <a class="previous" href="{{nav.previous}}">&larr; 上一页</a>
15
+ {{/nav.previous}}
16
+
17
+ {{#nav.next}}
18
+ <a class="next" href="{{nav.next}}">下一页 &rarr;</a>
19
+ {{/nav.next}}
20
+ </div>
@@ -0,0 +1,55 @@
1
+ #读取文件内容
2
+
3
+ require 'kramdown'
4
+
5
+ class TOC
6
+ DISPATCHER = Hash.new {|h,k| h[k] = "convert_#{k}"}
7
+
8
+ include ::Kramdown::Utils::Html
9
+ include ::Kramdown::Parser::Html::Constants
10
+
11
+ def convert_children(element, index)
12
+ result = ""
13
+ index += 2
14
+ element.children.each do |inner_element|
15
+ result += send(DISPATCHER[inner_element.type], inner_element, index)
16
+ end
17
+ result
18
+ end
19
+
20
+ def convert_text(element, index)
21
+ escape_html(element.value, :text)
22
+ end
23
+
24
+ def convert_toc(element, index)
25
+ # result = Hash.new
26
+ # result['href'] = element.attr[:id]
27
+ # result['title'] = element.value.children.first.value
28
+ #
29
+ # if (element.children.length > 1)
30
+ # result['items'] = self.inner(element, ind)
31
+ # end
32
+
33
+ # return result
34
+
35
+ title = element.value.children.first.value
36
+ result = (" " * index) + "<li><a href=\"##{element.attr[:id]}\">#{title}</a>"
37
+ if (element.children.length > 1)
38
+ result += "\n<ul>\n"
39
+ result += "#{self.convert_children(element, index)}"
40
+ result += (" " * index) + "</ul>"
41
+ end
42
+
43
+ result += "</li>\n"
44
+ result
45
+ end
46
+
47
+ #转换文件
48
+ def to_html(element)
49
+ return nil if element.children.length == 0
50
+ result = "<ul class='toc'>"
51
+ result += self.convert_children(element, 0)
52
+ result += "</ul>"
53
+ result
54
+ end
55
+ end
@@ -0,0 +1,119 @@
1
+ require 'yaml'
2
+ require 'fileutils'
3
+ require 'singleton'
4
+ require 'aescrypt'
5
+ require 'base64'
6
+
7
+ require_relative './product'
8
+
9
+ class Util
10
+ include Singleton
11
+
12
+ attr :config_file
13
+ attr :local_theme_dir
14
+ attr :project_name
15
+ attr :workbench
16
+ attr :encrypt_key
17
+
18
+ def initialize
19
+ #本地主题的目录
20
+ @local_theme_dir = 'm2m-theme'
21
+ #当前的工作目录
22
+ @workbench = nil
23
+
24
+ #配置文件的文件名
25
+ @config_file = 'm2m.config'
26
+ @encrypt_key = 'm2m'
27
+ end
28
+
29
+ #################### 属性 ####################
30
+
31
+ #获取产品相关的信息
32
+ def get_product
33
+ {
34
+ 'name' => M2M::NAME,
35
+ 'version' => M2M::VERSION,
36
+ 'homepage' => M2M::HOMEPAGE,
37
+ 'repos' => M2M::REPOS
38
+ }
39
+ end
40
+
41
+ #设置workbench
42
+ def workbench=(dir)
43
+ #工作目录
44
+ @workbench = dir
45
+ #项目名称
46
+ @project_name = File::basename dir
47
+ end
48
+
49
+ #################### 获取 ####################
50
+ #临时目录
51
+ def get_temp_dir
52
+ dir = File.join(Dir.home, ".m2m")
53
+ #如果不存在则创建一个
54
+ Dir::mkdir(dir) if(!File::exists?(dir))
55
+ dir
56
+ end
57
+
58
+ #获取一个相对路径离root有几个..
59
+ def get_relative_dot(relative_url)
60
+ depth = relative_url.split('/').length - 1
61
+ return './' if depth == 0
62
+ return '../' * (relative_url.split('/').length - 1)
63
+ end
64
+
65
+ #合并两个路径
66
+ def get_merge_path(relative_path, base_path = Dir::pwd)
67
+ base_path = Pathname.new base_path
68
+ return base_path if not relative_path
69
+ base_path + Pathname.new(relative_path)
70
+ end
71
+
72
+ #获取相对路径,如果没有设定source,则使用当前的工作目录
73
+ def get_relative_path(target, source = Dir::pwd)
74
+ target = Pathname.new(target) if target.class == String
75
+ source = Pathname.new(source) if source.class == String
76
+ target.relative_path_from(source).to_s
77
+ end
78
+
79
+ #################### 操作 ####################
80
+
81
+ def write_file(file, content)
82
+ dir = File::dirname file
83
+ #如果不在存文件夹, 则先创建
84
+ # puts dir
85
+ FileUtils.mkpath(dir) if not File::exists?(dir)
86
+ #写入文件
87
+ IO.write(file, content)
88
+ end
89
+
90
+ def error(log, level = 1)
91
+ puts log
92
+ exit level
93
+ end
94
+
95
+ #################### 判断 ####################
96
+ #判断一个文件是否为配置文件
97
+ def is_config_file?(file)
98
+ filename = self.get_relative_path file, @workbench
99
+ filename == @config_file
100
+ end
101
+ #检查一个文件是否为markdown
102
+ def is_markdown_file?(file)
103
+ (/\.(md)|(markdown)$/i =~ file) != nil
104
+ end
105
+
106
+ #检查文件是否为.开头的文件
107
+ def is_shadow_file?(file)
108
+ (/^\./ =~ file) != nil
109
+ end
110
+
111
+ #################### 加解密 ####################
112
+ def encrypt(str, encrypt_key = @encrypt_key)
113
+ AESCrypt.encrypt(str, encrypt_key)
114
+ end
115
+
116
+ def decrypt(str, encrypt_key = @encrypt_key)
117
+ AESCrypt.decrypt(str, encrypt_key)
118
+ end
119
+ end
@@ -0,0 +1,40 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('./lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require './lib/product'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.executables = [M2M::NAME]
8
+ spec.name = M2M::NAME
9
+ spec.version = M2M::VERSION
10
+ spec.authors = ["wvv8oo"]
11
+ spec.email = ["wvv8oo@gmail.com"]
12
+
13
+ spec.summary = %q{Markdown to More}
14
+ spec.description = %q{将Markdown转换为Blog,邮件或者PDF}
15
+ spec.homepage = M2M::HOMEPAGE
16
+
17
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
18
+ # delete this section to allow pushing this gem to any host.
19
+ # if spec.respond_to?(:metadata)
20
+ # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
21
+ # else
22
+ # raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
23
+ # end
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
+ spec.bindir = "exe"
27
+ spec.executables = 'm2m'
28
+ spec.require_paths = ["lib"]
29
+
30
+ spec.add_development_dependency "bundler", "~> 1.11"
31
+ spec.add_development_dependency "rake", "~> 10.0"
32
+
33
+ spec.add_runtime_dependency('commander', '4.4.0')
34
+ spec.add_runtime_dependency('nokogiri', '1.6.7')
35
+ spec.add_runtime_dependency('mustache', '1.0.3')
36
+ spec.add_runtime_dependency('kramdown', '1.10.0')
37
+ spec.add_runtime_dependency('mail', '2.6.4')
38
+ spec.add_runtime_dependency('aescrypt', '1.0.0')
39
+ spec.add_runtime_dependency('webrick', '1.3.1')
40
+ end
metadata ADDED
@@ -0,0 +1,204 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: m2m
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - wvv8oo
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-06-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: commander
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 4.4.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 4.4.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: nokogiri
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.6.7
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.6.7
69
+ - !ruby/object:Gem::Dependency
70
+ name: mustache
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.0.3
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 1.0.3
83
+ - !ruby/object:Gem::Dependency
84
+ name: kramdown
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 1.10.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 1.10.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: mail
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 2.6.4
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 2.6.4
111
+ - !ruby/object:Gem::Dependency
112
+ name: aescrypt
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 1.0.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 1.0.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: webrick
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 1.3.1
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 1.3.1
139
+ description: 将Markdown转换为Blog,邮件或者PDF
140
+ email:
141
+ - wvv8oo@gmail.com
142
+ executables:
143
+ - m2m
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - .gitignore
148
+ - Gemfile
149
+ - Gemfile.lock
150
+ - LICENSE
151
+ - README.md
152
+ - bin/console
153
+ - exe/m2m
154
+ - exe/mailer.rb
155
+ - exe/server.rb
156
+ - exe/setup.rb
157
+ - exe/site.rb
158
+ - lib/article.rb
159
+ - lib/compiler.rb
160
+ - lib/generator.rb
161
+ - lib/mailer.rb
162
+ - lib/meta.rb
163
+ - lib/product.rb
164
+ - lib/scan.rb
165
+ - lib/server.rb
166
+ - lib/setup.rb
167
+ - lib/store.rb
168
+ - lib/themes/hyde/static/hyde.css
169
+ - lib/themes/hyde/template/article.mustache
170
+ - lib/themes/hyde/template/home.mustache
171
+ - lib/themes/hyde/template/index.mustache
172
+ - lib/themes/hyde/template/mail.mustache
173
+ - lib/themes/hyde/template/page.mustache
174
+ - lib/themes/hyde/template/partials/footer.mustache
175
+ - lib/themes/hyde/template/partials/head.mustache
176
+ - lib/themes/hyde/template/partials/header.mustache
177
+ - lib/themes/hyde/template/partials/list.mustache
178
+ - lib/toc.rb
179
+ - lib/util.rb
180
+ - m2m.gemspec
181
+ homepage: http://m2m.wvv8oo.com/
182
+ licenses: []
183
+ metadata: {}
184
+ post_install_message:
185
+ rdoc_options: []
186
+ require_paths:
187
+ - lib
188
+ required_ruby_version: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - '>='
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ required_rubygems_version: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ requirements: []
199
+ rubyforge_project:
200
+ rubygems_version: 2.4.2
201
+ signing_key:
202
+ specification_version: 4
203
+ summary: Markdown to More
204
+ test_files: []