trans 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/bin/trans +85 -0
  3. data/lib/tocmd.rb +20 -0
  4. data/lib/tocmd/translator_trans.rb +370 -0
  5. data/lib/tocmd/version.rb +3 -0
  6. data/test/mdptest.rb +100 -0
  7. data/vendor/meta.js +1 -0
  8. data/vendor/template.html +0 -0
  9. data/vendor/toc/css/bootstrap.icons.css +487 -0
  10. data/vendor/toc/css/component.css +297 -0
  11. data/vendor/toc/css/demo.css +33 -0
  12. data/vendor/toc/css/glyphicons-halflings-white.png +0 -0
  13. data/vendor/toc/css/glyphicons-halflings.png +0 -0
  14. data/vendor/toc/css/icons.css +198 -0
  15. data/vendor/toc/css/normalize.css +1 -0
  16. data/vendor/toc/css/zTreeStyle/img/diy/1_close.png +0 -0
  17. data/vendor/toc/css/zTreeStyle/img/diy/1_open.png +0 -0
  18. data/vendor/toc/css/zTreeStyle/img/diy/2.png +0 -0
  19. data/vendor/toc/css/zTreeStyle/img/diy/3.png +0 -0
  20. data/vendor/toc/css/zTreeStyle/img/diy/4.png +0 -0
  21. data/vendor/toc/css/zTreeStyle/img/diy/5.png +0 -0
  22. data/vendor/toc/css/zTreeStyle/img/diy/6.png +0 -0
  23. data/vendor/toc/css/zTreeStyle/img/diy/7.png +0 -0
  24. data/vendor/toc/css/zTreeStyle/img/diy/8.png +0 -0
  25. data/vendor/toc/css/zTreeStyle/img/diy/9.png +0 -0
  26. data/vendor/toc/css/zTreeStyle/img/line_conn.gif +0 -0
  27. data/vendor/toc/css/zTreeStyle/img/loading.gif +0 -0
  28. data/vendor/toc/css/zTreeStyle/img/zTreeStandard.gif +0 -0
  29. data/vendor/toc/css/zTreeStyle/img/zTreeStandard.png +0 -0
  30. data/vendor/toc/css/zTreeStyle/zTreeStyle.css +97 -0
  31. data/vendor/toc/fonts/codropsicons/codropsicons.eot +0 -0
  32. data/vendor/toc/fonts/codropsicons/codropsicons.svg +24 -0
  33. data/vendor/toc/fonts/codropsicons/codropsicons.ttf +0 -0
  34. data/vendor/toc/fonts/codropsicons/codropsicons.woff +0 -0
  35. data/vendor/toc/fonts/codropsicons/license.txt +6 -0
  36. data/vendor/toc/fonts/linecons/Read Me.txt +3 -0
  37. data/vendor/toc/fonts/linecons/license.txt +10 -0
  38. data/vendor/toc/fonts/linecons/linecons.dev.svg +488 -0
  39. data/vendor/toc/fonts/linecons/linecons.eot +0 -0
  40. data/vendor/toc/fonts/linecons/linecons.svg +488 -0
  41. data/vendor/toc/fonts/linecons/linecons.ttf +0 -0
  42. data/vendor/toc/fonts/linecons/linecons.woff +0 -0
  43. data/vendor/toc/fonts/linecons/lte-ie7.js +85 -0
  44. data/vendor/toc/img/glyphicons-halflings-white.png +0 -0
  45. data/vendor/toc/img/glyphicons-halflings.png +0 -0
  46. data/vendor/toc/img/icon-cog-shadow.png +0 -0
  47. data/vendor/toc/img/icon-cog-small.png +0 -0
  48. data/vendor/toc/img/icon-cog.png +0 -0
  49. data/vendor/toc/img/pattern-2.png +0 -0
  50. data/vendor/toc/js/classie.js +80 -0
  51. data/vendor/toc/js/jquery-1.4.4.min.js +167 -0
  52. data/vendor/toc/js/jquery.js +9555 -0
  53. data/vendor/toc/js/jquery.ztree.all-3.5.min.js +157 -0
  54. data/vendor/toc/js/mlpushmenu.js +243 -0
  55. data/vendor/toc/js/modernizr.custom.js +4 -0
  56. data/vendor/toc/js/ztree_toc.js +282 -0
  57. data/vendor/toc/js/ztree_toc.min.js +4 -0
  58. data/vendor/toc/style/Clearness Dark.css +146 -0
  59. data/vendor/toc/style/Clearness.css +147 -0
  60. data/vendor/toc/style/GitHub.css +90 -0
  61. data/vendor/toc/style/GitHub2.css +297 -0
  62. data/vendor/toc/style/github-bf51422f4bb36427d391e4b75a1daa083c2d840e.css +1 -0
  63. data/vendor/toc/style/github2-d731afd4f624c99a4b19ad69f3083cd6d02b81d5.css +1 -0
  64. data/vendor/toc/style/makedownpad.css +285 -0
  65. data/vendor/toc/toc_conf.js +20 -0
  66. metadata +137 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 78246b58b88d2f7956ebac7886438ff507431ce5
4
+ data.tar.gz: f636f38190dde01168eb5e7b6cd7a75ebdfceb71
5
+ SHA512:
6
+ metadata.gz: a651a82f6b0c0f67d4840afc8be228e5ec3fe9dff9fd1197281069a2394cdd230a7e61f675b5164556bc4347b3027f6edad12473b870211fe27bce111b0c41bc
7
+ data.tar.gz: 0cba19664a8fa29b2afa085def13aa9d7cf54802ad3450eb88290b220b04be08baa196b0ddffbcf84d962caba61f9e2d686278d685ff3cb3b1444515b33728af
data/bin/trans ADDED
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require 'tocmd'
5
+ require 'pathname'
6
+ # p ARGV
7
+ # puts Mdpreview.hi(ARGV)
8
+ #
9
+ # puts __FILE__
10
+ # puts File.dirname(__FILE__)
11
+
12
+
13
+ # File.join(File.dirname(__FILE__), '..', 'lib')
14
+ path = Pathname.new(File.join(File.dirname(__FILE__), '..')).realpath.to_s
15
+
16
+ # p "开始#{Dir.pwd}"
17
+ # p "path = #{path}"
18
+
19
+ require 'optparse'
20
+
21
+ options = {}
22
+ option_parser = OptionParser.new do |opts|
23
+ # 这里是这个命令行工具的帮助信息
24
+ opts.banner = 'preview markdown file with toc of the command line tool.'
25
+
26
+ # # Option 作为switch,不带argument,用于将switch设置成true或false
27
+ # options[:switch] = false
28
+ # # 下面第一项是Short option(没有可以直接在引号间留空),第二项是Long option,第三项是对Option的描述
29
+ # opts.on('-s', '--switch', 'Set options as switch') do
30
+ # # 这个部分就是使用这个Option后执行的代码
31
+ # options[:switch] = true
32
+ # end
33
+ vendor_path = Pathname.new(File.expand_path('../../template/', __FILE__)).realpath.to_s
34
+
35
+ src_p = Dir.pwd
36
+
37
+ begin
38
+ Dir.delelte(File.join(src_p ,"preview"))
39
+ Dir.mkdir(File.join(src_p ,"preview"), 0700) #=> 0
40
+ rescue
41
+ ensure
42
+ end
43
+
44
+ begin
45
+ Dir.mkdir(File.join(src_p ,"preview"), 0700) #=> 0
46
+ rescue
47
+ ensure
48
+ end
49
+
50
+ # begin
51
+ # Dir.mkdir(File.join(src_p ,".toc"), 0700) #=> 0
52
+ # rescue
53
+ # ensure
54
+ # f = File.new(File.join(vendor_path ,"template.html"), "w+").path
55
+ # FileUtils.cp(f ,File.join(src_p ,".toc"))
56
+ # end
57
+ #
58
+
59
+ # Option 作为flag,带argument,用于将argument作为数值解析,比如"name"信息
60
+ #下面的“value”就是用户使用时输入的argument
61
+ opts.on('-f sourceFileNAME', '--name sourceFileNAME', 'Pass-in source file name') do |value|
62
+ # options[:fname] = value
63
+
64
+ Tocmd.hi_trans_local(src_p + '/' + value)
65
+ end
66
+
67
+ opts.on('-d dirNAME', '--name sourceFileNAME', 'Pass-in source file name') do |value|
68
+ # options[:fname] = value
69
+ p value
70
+
71
+ if value == '.'
72
+ Tocmd.hi_trans_dir_local(src_p + '/' )
73
+ else
74
+ Tocmd.hi_trans_dir_local(src_p + '/' + value)
75
+ end
76
+
77
+ end
78
+
79
+ # Option 作为flag,带一组用逗号分割的arguments,用于将arguments作为数组解析
80
+ # opts.on('-a A,B', '--array A,B', Array, 'List of arguments') do |value|
81
+ # options[:array] = value
82
+ # end
83
+ end.parse!
84
+
85
+ # puts options.inspect
data/lib/tocmd.rb ADDED
@@ -0,0 +1,20 @@
1
+ require "tocmd/version"
2
+ require "tocmd/translator_trans"
3
+
4
+ module Tocmd
5
+ # ---------------- tocmd_trans command -----------------
6
+ def self.hi_trans_local(a)
7
+ translator = TranslatorTrans.new(a)
8
+ translator.hi
9
+ # puts version info
10
+ p VERSION
11
+ end
12
+
13
+ def self.hi_trans_dir_local(a)
14
+ translator = TranslatorTrans.new(a)
15
+ translator.hi_dir
16
+ # puts version info
17
+ p VERSION
18
+ end
19
+
20
+ end
@@ -0,0 +1,370 @@
1
+ require 'pathname'
2
+ # require 'FileUtils'
3
+ require 'fileutils'
4
+
5
+ class Tocmd::TranslatorTrans
6
+ def initialize(source_file_path)
7
+ #源文件路径
8
+ @source_file_path = source_file_path
9
+ #gem跟目录
10
+ @gem_root_path = File.expand_path('../', @source_file_path)
11
+ #editor path
12
+ @editor_path = Pathname.new(File.expand_path('../../../template', __FILE__)).realpath.to_s
13
+
14
+ end
15
+
16
+ def hi
17
+ generate_meta_js
18
+ # cp_source_file_to_cur_file
19
+
20
+ ar = @source_file_path.split('/')
21
+ ar.pop()
22
+
23
+ puts "src path = #{ar.join('/').to_s}"
24
+ src_path = ar.join('/').to_s
25
+
26
+ ar.push('preview');
27
+ dest_dir = ar.join('/').to_s
28
+
29
+ puts "desc path = #{ar.join('/').to_s}"
30
+
31
+ # copy vendor/toc to dest directory
32
+ `cp -rf #{@editor_path}/ #{dest_dir}`
33
+
34
+ # _toc_config(dest_dir)
35
+
36
+ # build now
37
+ build_with_dir(@source_file_path ,dest_dir)
38
+
39
+ # if mac open in browser
40
+ open_in_browser
41
+ end
42
+
43
+ def hi_dir
44
+ generate_meta_js
45
+ # cp_source_file_to_cur_file
46
+
47
+ ar = @source_file_path.split('/')
48
+ # ar.pop()
49
+
50
+ puts "hi_dir src path = #{ar.join('/').to_s}"
51
+ src_path = ar.join('/').to_s
52
+
53
+ ar.push('preview');
54
+ dest_dir = ar.join('/').to_s
55
+
56
+ puts "hi_dir desc path = #{ar.join('/').to_s}"
57
+
58
+ # copy vendor/toc to dest directory
59
+ `cp -rf #{@editor_path}/toc #{dest_dir}/toc`
60
+
61
+ # _toc_config(dest_dir)
62
+
63
+ build_with_dir(src_path ,dest_dir)
64
+
65
+ open_in_browser
66
+ end
67
+
68
+ def _toc_config(dest_dir)
69
+ if File.exist?("#{dest_dir}/toc_conf.js")
70
+ puts 'toc_conf file exist'
71
+ else
72
+ # if file not exit,create toc_conf
73
+ `touch #{dest_dir}/toc_conf.js`
74
+
75
+ # fill data to toc_conf.js
76
+ `echo 'var jquery_ztree_toc_opts = {'>#{dest_dir}/toc_conf.js`
77
+ `echo 'is_auto_number:true,' >> #{dest_dir}/toc_conf.js`
78
+ `echo "documment_selector:'.markdown-body'" >> #{dest_dir}/toc_conf.js`
79
+
80
+ `echo '};' >> #{dest_dir}/toc_conf.js`
81
+
82
+ `echo "var markdown_panel_style = {'width':'70%','margin-left':'20%'};">> #{dest_dir}/toc_conf.js`
83
+ end
84
+ end
85
+
86
+ def open_in_browser
87
+ ar = @source_file_path.split('/')
88
+
89
+ if File.directory?(@source_file_path) == false #普通文件
90
+ file_name = ar.pop().split('.')[0]
91
+ src_path = ar.join('/').to_s
92
+
93
+ ar.push('preview');
94
+ dest_dir = ar.join('/').to_s
95
+
96
+ `open #{ar.join('/').to_s}/#{file_name}.html`
97
+
98
+ else
99
+ # 目录
100
+ src_path = ar.join('/').to_s
101
+
102
+ Dir.foreach(src_path) do |ff|
103
+ file_name = ff.split('.')[0]
104
+ end
105
+
106
+ ar.push('preview');
107
+ dest_dir = ar.join('/').to_s
108
+ `open #{ar.join('/').to_s}/#{file_name}.html`
109
+ end
110
+ end
111
+
112
+ def generate_meta_js
113
+ f = File.new(File.join(@editor_path,"meta.js"), "w+")
114
+ f.puts("#{@source_file_path}")
115
+ end
116
+
117
+ def cp_source_file_to_cur_file
118
+ # cp param must be string
119
+ f = File.new(File.join(@editor_path,"cur.file"), "w+").path
120
+ FileUtils.cp(@source_file_path,f)
121
+ end
122
+
123
+ def build_with_dir(destiny_dir,dest_dir)
124
+ p "start building......"
125
+
126
+ if File.directory?(destiny_dir) == false
127
+ p 'process_with_one'
128
+ ar = @source_file_path.split('/')
129
+ file_name = ar.pop().split('.')[0]
130
+
131
+ src_path = ar.join('/').to_s
132
+
133
+ ar.push('preview');
134
+ dest_dir = ar.join('/').to_s
135
+
136
+ # return;
137
+ process_with_one(src_path,dest_dir,destiny_dir.split('/').pop().to_s)
138
+
139
+ return;
140
+ end
141
+
142
+ p "src_dir = #{destiny_dir}"
143
+ p "dest_dir = #{dest_dir}"
144
+ Dir.foreach(destiny_dir) do |ff|
145
+ # puts ff
146
+ unless /^\./ =~ ff ||/^images/ =~ ff ||/^css/ =~ ff || File.directory?(ff) || File.extname(ff) != '.md'
147
+
148
+ process_with_one(destiny_dir,dest_dir,ff)
149
+
150
+ end
151
+ end
152
+ end
153
+
154
+ def process_with_one(destiny_dir ,dest_dir ,ff)
155
+ # get markdown text
156
+ text = IO.read(destiny_dir + '/' + ff)
157
+
158
+ # options = [:fenced_code,:generate_toc,:hard_wrap,:no_intraemphasis,:strikethrough,:gh_blockcode,:autolink,:xhtml,:tables]
159
+
160
+ # convert to html
161
+ markdown = Redcarpet::Markdown.new(HTMLwithPygments,:gh_blockcode=>true,:no_intra_emphasis=>true,:filter_html => true,:hard_wrap => true,:autolink => false, :space_after_headers => true,:fenced_code_blocks => true,:tables => true,:filter_html=>false)
162
+ parse_markdown = markdown.render(text)
163
+ # parse_markdown = syntax_highlighter(parse_markdown)
164
+
165
+ css_link = ''
166
+ if destiny_dir.to_s.index('/')
167
+ css_link = %Q{
168
+ <link href="toc/style/github-bf51422f4bb36427d391e4b75a1daa083c2d840e.css" media="all" rel="stylesheet" type="text/css"/>
169
+ <link href="toc/style/github2-d731afd4f624c99a4b19ad69f3083cd6d02b81d5.css" media="all" rel="stylesheet" type="text/css"/>
170
+ <link href="toc/css/zTreeStyle/zTreeStyle.css" media="all" rel="stylesheet" type="text/css"/>
171
+ <link rel="stylesheet" type="text/css" href="toc/css/normalize.css" />
172
+ <link rel="stylesheet" type="text/css" href="toc/css/demo.css" />
173
+ <link rel="stylesheet" type="text/css" href="toc/css/icons.css" />
174
+ <link rel="stylesheet" type="text/css" href="toc/css/component.css" />
175
+ }
176
+ else
177
+ css_link = %Q{
178
+ <link href="toc/style/github-bf51422f4bb36427d391e4b75a1daa083c2d840e.css" media="all" rel="stylesheet" type="text/css"/>
179
+ <link href="toc/style/github2-d731afd4f624c99a4b19ad69f3083cd6d02b81d5.css" media="all" rel="stylesheet" type="text/css"/>
180
+ <link href="toc/css/zTreeStyle/zTreeStyle.css" media="all" rel="stylesheet" type="text/css"/>
181
+ <link rel="stylesheet" type="text/css" href="toc/css/normalize.css" />
182
+ <link rel="stylesheet" type="text/css" href="toc/css/demo.css" />
183
+ <link rel="stylesheet" type="text/css" href="toc/css/icons.css" />
184
+ <link rel="stylesheet" type="text/css" href="toc/css/component.css" />
185
+ }
186
+ end
187
+
188
+ t = %Q{
189
+ <html>
190
+ <head>
191
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
192
+ <title>#{ff.gsub('.md','')}</title>
193
+ #{css_link}
194
+ </head>
195
+ <body>
196
+ <div class="container">
197
+ <!-- Push Wrapper -->
198
+ <div class="mp-pusher" id="mp-pusher">
199
+
200
+ <!-- mp-menu -->
201
+ <nav id="mp-menu" class="mp-menu">
202
+ <div class="mp-level">
203
+ <h2 class="icon icon-world" style='font-size: 34;color:white;'>泰然译品</h2>
204
+ <ul>
205
+ </ul>
206
+
207
+ </div>
208
+ </nav>
209
+ <!-- /mp-menu -->
210
+
211
+ <div class="scroller"><!-- this is for emulating position fixed of the nav -->
212
+ <div class="scroller-inner">
213
+ <!-- Top Navigation -->
214
+
215
+ <div>
216
+ <div style='width:25%;'>
217
+ <ul id="tree" class="ztree" style='width:100%'>
218
+
219
+ </ul>
220
+ </div>
221
+ <div id='readme' style='width:70%;margin-left:20%;'>
222
+ <article class='markdown-body'>
223
+ #{parse_markdown}
224
+ </article>
225
+ </div>
226
+ </div>
227
+ <div id="normal-button" class="settings-button">
228
+ <img src="toc/img/icon-cog-small.png" />
229
+ </div>
230
+
231
+
232
+ </div><!-- /scroller-inner -->
233
+ </div><!-- /scroller -->
234
+
235
+ </div><!-- /pusher -->
236
+ </div><!-- /container -->
237
+
238
+
239
+ </body>
240
+ </html>
241
+ <script type="text/javascript" src="toc/js/jquery.js"></script>
242
+ <script type="text/javascript" src="toc/js/jquery.ztree.all-3.5.min.js"></script>
243
+ <script type="text/javascript" src="toc/js/ztree_toc.js"></script>
244
+ <script type="text/javascript" src="toc/toc_conf.js"></script>
245
+ <script src="toc/js/classie.js"></script>
246
+ <script src="toc/js/mlpushmenu.js"></script>
247
+ <script src="toc/js/modernizr.custom.js"></script>
248
+ <script src="toc/js/jquery.transtool.js"></script>
249
+
250
+ <SCRIPT type="text/javascript" >
251
+ <!--
252
+ $(document).ready(function(){
253
+ var css_conf = eval(markdown_panel_style);
254
+ $('#readme').css(css_conf)
255
+
256
+ var conf = eval(jquery_ztree_toc_opts);
257
+ $('#tree').ztree_toc(conf);
258
+
259
+ new mlPushMenu( document.getElementById( 'mp-menu' ), document.getElementById( 'normal-button' ), {
260
+ type : 'cover'
261
+ } );
262
+
263
+
264
+
265
+ // <li id='todo'><a class="icon icon-shop" href="#">todo</a></li>
266
+ // <li id='review'><a class="icon icon-cloud" href="#">review</a></li>
267
+ // <li id='ok'><a class="icon icon-diamond" href="#">ok</a></li>
268
+ // <li id='zh'><a class="icon icon-photo" href="#">中文</a></li>
269
+ // <li id='en'><a class="icon icon-wallet" href="#">英文</a></li>
270
+ //<li id='all'><a class="icon icon-shop" href="#">show all</a></li>
271
+ $.transtool({
272
+ toolbarselector:"#mp-menu",
273
+ default_state:'zh',
274
+ states:[
275
+ {
276
+ 'all':{
277
+ 'icon':'icon-shop',
278
+ 'display':"全部",
279
+ click:function(){
280
+ alert('zh111');
281
+ }
282
+ },
283
+ 'zh':{
284
+ 'icon':'icon-world',
285
+ 'display':"中文",
286
+ click:function(){
287
+ alert('zh111');
288
+ }
289
+ },
290
+ 'en':{
291
+ 'icon':'icon-cloud',
292
+ 'display':"英文",
293
+ click:function(){
294
+ alert('en');
295
+ }
296
+ }
297
+ }
298
+ ]
299
+ });
300
+
301
+ // $('#tree').hide()
302
+
303
+ });
304
+ //-->
305
+ </SCRIPT>
306
+
307
+ }
308
+
309
+ if destiny_dir.to_s.index('/')
310
+ # p '1build src/' + destiny_dir.to_s.split('/')[1] + '/' + ff.gsub('.md','') + '.html'
311
+ build_dir = 'preview/'
312
+
313
+ p 'build = ' + dest_dir + '/' + ff.gsub('.md','') + '.html'
314
+ IO.write(dest_dir + '/' + ff.gsub('.md','') + '.html',t) # => 10
315
+ else
316
+ # p '2build src/' + ff.gsub('.md','') + '.html'
317
+ build_dir = 'preview/'
318
+ # write to html file
319
+ IO.write(build_dir + '/' + ff.gsub('.md','') + '.html',t) # => 10
320
+ end
321
+ end
322
+
323
+ end
324
+
325
+
326
+ require 'redcarpet'
327
+ require 'pygments'
328
+
329
+ require 'redcarpet'
330
+ require 'rexml/document'
331
+ module Redcarpet::Render
332
+ class Custom < Base
333
+ def header(title, level)
334
+ @headers ||= []
335
+
336
+ title_elements = REXML::Document.new(title)
337
+ flattened_title = title_elements.inject('') do |flattened, element|
338
+ flattened += if element.respond_to?(:text)
339
+ element.text
340
+ else
341
+ element.to_s
342
+ end
343
+ end
344
+ permalink = flattened_title.downcase.gsub(/[^a-z\s]/, '').gsub(/\W+/, "-")
345
+
346
+ # for extra credit: implement this as its own method
347
+ if @headers.include?(permalink)
348
+ permalink += "_1"
349
+ # my brain hurts
350
+ loop do
351
+ break if !@headers.include?(permalink)
352
+ # generate titles like foo-bar_1, foo-bar_2
353
+ permalink.gsub!(/\_(\d+)$/, "_#{$1.to_i + 1}")
354
+ end
355
+ end
356
+ @headers << permalink
357
+ %(\n<h#{level}><a name="#{permalink}" class="anchor" href="##{permalink}"><span class="anchor-icon"></span></a>#{title}</h#{level}>\n)
358
+ end
359
+ end
360
+ end
361
+
362
+ class HTMLwithPygments < Redcarpet::Render::HTML
363
+ def doc_header()
364
+ '<style>' + Pygments.css('.highlight',:style => 'friendly') + '</style>'
365
+ end
366
+
367
+ def block_code(code, language)
368
+ Pygments.highlight(code, :lexer => language, :options => {:encoding => 'utf-8'})
369
+ end
370
+ end