dyntask-ruby 0.1.2 → 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.
- checksums.yaml +4 -4
- data/bin/dyntask-init +84 -31
- data/bin/dyntask-server +49 -52
- data/bin/dyntask-writer +6 -6
- data/lib/dyntask/task_mngr.rb +109 -51
- data/share/pandoc/README.INSTALL +6 -0
- data/share/pandoc/config.rb +12 -0
- data/share/plugins/README +1 -0
- data/share/tasks/task_dyn2html-cli.rb +8 -0
- data/share/tasks/task_dyn2html.rb +8 -0
- data/share/tasks/task_dyn2tex2pdf.rb +8 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7945c071a49caf43f626c7200795e6a4da3d65f
|
4
|
+
data.tar.gz: bbad192aa401193a9a815c1c0b6950b0d526a059
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d04058801c4fcc97b86e65a95acbdaa58280975fad07a243f6c5ab7c2b20a56a15fc1bd0d9ea1e74cabc9cb4d824592ce520cc3be29c2ef82f272bb46593b65
|
7
|
+
data.tar.gz: 6df4f27a53b959ec0fcbe52167723fbcaba8be145b70e463ebc7bf340f9dfee5818f101d10d64a9d9b1c69fd5d3cf9e47499e1fbe4d3b2a9870bec30c0983104
|
data/bin/dyntask-init
CHANGED
@@ -23,7 +23,11 @@ end
|
|
23
23
|
|
24
24
|
Trollop::die Trollop::educate if(ARGV.size == 0)
|
25
25
|
|
26
|
-
|
26
|
+
case ARGV[0] || "first"
|
27
|
+
when "first"
|
28
|
+
FileUtils.mkdir_p DynTask.cfg_dir[:root] unless File.directory? DynTask.cfg_dir[:root]
|
29
|
+
FileUtils.cp_r File.expand_path('../../share',__FILE__),DynTask.cfg_dir[:share] unless File.directory? File.join(DynTask.cfg_dir[:share])
|
30
|
+
when "pandoc-extra"
|
27
31
|
case ARGV[1]
|
28
32
|
when "ls"
|
29
33
|
if File.directory? DynTask.cfg_pandoc[:extra_dir]
|
@@ -55,36 +59,85 @@ if ARGV[0] == "pandoc-extra"
|
|
55
59
|
|
56
60
|
end
|
57
61
|
exit
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
62
|
+
when "srv" #MacOSX user only
|
63
|
+
if RUBY_PLATFORM =~ /darwin/
|
64
|
+
dyntask_srv_plist=File.expand_path("~/Library/LaunchAgents/dyntask-srv.plist")
|
65
|
+
case ARGV[1] || "help"
|
66
|
+
when "help"
|
67
|
+
puts <<-DOC
|
68
|
+
launchctl helpers to launch dyntask-srv service.
|
69
|
+
Usage:
|
70
|
+
dyntask-init srv new|load => create when not existing the dyntask-srv service
|
71
|
+
dyntask-init srv unload => unload existing service
|
72
|
+
dyntask-init srv start/stop => start/stop the dyntask-srv service
|
73
|
+
dyntask-init srv list => list dyntask-srv service
|
74
|
+
DOC
|
75
|
+
when "load","new"
|
76
|
+
unless File.exists? dyntask_srv_plist
|
77
|
+
plist= <<-END.sub(/DYNTASKSRV/,`which dynask-srv`.strip)
|
78
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
79
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
80
|
+
<plist version="1.0">
|
81
|
+
<dict>
|
82
|
+
<key>Label</key>
|
83
|
+
<string>dyntask-srv</string>
|
84
|
+
<key>ProgramArguments</key>
|
85
|
+
<array>
|
86
|
+
<string>DYNTASKSRV</string>
|
87
|
+
</array>
|
88
|
+
<key>RunAtLoad</key>
|
89
|
+
<true/>
|
90
|
+
<key>KeepAlive</key>
|
91
|
+
<dict>
|
92
|
+
<key>Crashed</key>
|
93
|
+
<true/>
|
94
|
+
</dict>
|
95
|
+
<key>StandardErrorPath</key>
|
96
|
+
<string>/tmp/dyntask-srv.err</string>
|
97
|
+
<key>StandardOutPath</key>
|
98
|
+
<string>/tmp/dyntask-srv.out</string>
|
99
|
+
</dict>
|
100
|
+
</plist>
|
101
|
+
END
|
102
|
+
File.open(dyntask_srv_plist,"w") do |f|
|
103
|
+
f << plist
|
104
|
+
end
|
105
|
+
end
|
106
|
+
`launchctl load #{dyn_srv_plist}`
|
107
|
+
when "unload"
|
108
|
+
if File.exists? dyntask_srv_plist
|
109
|
+
`launchctl unload #{dyntask_srv_plist}`
|
110
|
+
else
|
111
|
+
puts "Service dyntask-srv not available. Create it first: dyntask-init srv new"
|
112
|
+
end
|
113
|
+
when "start", "stop"
|
114
|
+
`launchctl #{mode} dyntask-srv`
|
115
|
+
when "list"
|
116
|
+
puts `launchctl list | grep dyn`
|
86
117
|
end
|
87
|
-
|
118
|
+
end
|
88
119
|
end
|
89
120
|
|
90
|
-
|
121
|
+
|
122
|
+
# etc_tasks=File.join(DynTask.cfg_dir[:etc],"tasks",ARGV[0])
|
123
|
+
#
|
124
|
+
# if ARGV.size==1
|
125
|
+
# if options[:rm] and options[:force]
|
126
|
+
# require 'fileutils'
|
127
|
+
# FileUtils.rm etc_tasks
|
128
|
+
# end
|
129
|
+
# else
|
130
|
+
# if File.exists? etc_tasks and !options[:force]
|
131
|
+
# puts "Error: file #{etc_tasks} already exist. Use --force or -f to modify this file!"
|
132
|
+
# exit
|
133
|
+
# else
|
134
|
+
# require 'fileutils'
|
135
|
+
# FileUtils.mkdir_p File.dirname(etc_tasks)
|
136
|
+
# dyntask_tasks=ARGV[1..-1].join(" ")
|
137
|
+
# File.open(etc_tasks,"w") do |f|
|
138
|
+
# f << dyntask_tasks
|
139
|
+
# end
|
140
|
+
# end
|
141
|
+
# end
|
142
|
+
#
|
143
|
+
# puts "#{etc_tasks} contains: #{File.read(etc_tasks)}" if File.exists? etc_tasks
|
data/bin/dyntask-server
CHANGED
@@ -11,28 +11,27 @@ options = Trollop::options do
|
|
11
11
|
banner <<-EOS
|
12
12
|
dyntask-server scans the filesystem and executes shell commands when files changes.
|
13
13
|
Usage:
|
14
|
-
|
15
|
-
Comment:
|
16
|
-
when file ~/.dyntask_workdir exists and contains a valid directory name, this becomes the working directory to watch unless -w option is provided at command line.
|
14
|
+
dyntask-server
|
17
15
|
Options:
|
18
16
|
EOS
|
19
17
|
opt :dontwait, "Do not wait for filesystem updates before running", :short => 'd', :type => :boolean, :default => false
|
20
|
-
opt :restart, "Restart process when filesystem is updated", :short => 'r', :type => :boolean, :default => false
|
18
|
+
#opt :restart, "Restart process when filesystem is updated", :short => 'r', :type => :boolean, :default => false
|
21
19
|
opt :list, "Print name of files being watched"
|
22
20
|
opt :interval, "Interval to scan filesystem.", :short => 'i', :type => :float, :default => 0.5
|
23
21
|
opt :spinner, "Show an ascii spinner", :short => 's', :type => :boolean, :default => false
|
24
22
|
end
|
25
23
|
|
26
|
-
Trollop::die Trollop::educate if(ARGV.size == 0)
|
24
|
+
##Trollop::die Trollop::educate if(ARGV.size == 0)
|
27
25
|
|
28
|
-
tasks_to_watch =
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
end
|
26
|
+
tasks_to_watch = DynTask::TaskMngr::TASKS
|
27
|
+
|
28
|
+
# ARGV[0..-1].each do |a|
|
29
|
+
# if !(a.include? ",") and File.exists? (etc_tasks=File.join(DynTask.cfg_dir[:etc],"tasks",a))
|
30
|
+
# tasks_to_watch += File.read(etc_tasks).strip.split(/\s+/)
|
31
|
+
# else
|
32
|
+
# tasks_to_watch << a
|
33
|
+
# end
|
34
|
+
# end
|
36
35
|
|
37
36
|
|
38
37
|
# root working directory
|
@@ -55,63 +54,61 @@ end
|
|
55
54
|
|
56
55
|
#puts "Root directory is #{dyntask_root}"
|
57
56
|
|
58
|
-
if tasks_to_watch.empty?
|
59
|
-
|
60
|
-
|
61
|
-
end
|
57
|
+
# if tasks_to_watch.empty?
|
58
|
+
# puts "Stop: no tasks to serve!\n Launch: dyntask-init <NAME> <WORKDIR>:<LIST OF COMMA SEPARATED TASKS> to set of tasks to be called by <NAME>!"
|
59
|
+
# exit
|
60
|
+
# end
|
62
61
|
|
63
62
|
files_to_watch=[]
|
63
|
+
rundir=DynTask.cfg_dir[:run]
|
64
64
|
tasks_to_watch.each do |e|
|
65
|
-
|
66
|
-
workdir=workdir.sub("~",ENV["HOME"])
|
67
|
-
tasks.split(",").each do |t|
|
68
|
-
files_to_watch << File.join(workdir,"**/*" +DynTask::TaskMngr::TASK_EXT+t) #if DynTask::TaskMngr::TASKS.include? file
|
69
|
-
end
|
65
|
+
files_to_watch << File.join(rundir,"*" +DynTask::TaskMngr::TASK_EXT+e) #if DynTask::TaskMngr::TASKS.include? file
|
70
66
|
end
|
71
67
|
|
72
68
|
files_to_watch.uniq!
|
73
69
|
|
74
70
|
puts "Tasks watched: #{files_to_watch}"
|
75
71
|
|
76
|
-
def restart(child_pid, env, cmd)
|
77
|
-
|
78
|
-
|
79
|
-
rescue Errno::ESRCH
|
80
|
-
|
81
|
-
ensure
|
82
|
-
|
83
|
-
end
|
72
|
+
# def restart(child_pid, env, cmd)
|
73
|
+
# Process.kill(9,child_pid)
|
74
|
+
# Process.wait(child_pid)
|
75
|
+
# rescue Errno::ESRCH
|
76
|
+
# # already killed
|
77
|
+
# ensure
|
78
|
+
# child_pid = Process.spawn({}, cmd)
|
79
|
+
# end
|
84
80
|
|
85
|
-
if(options[:restart])
|
86
|
-
|
87
|
-
|
88
|
-
end
|
81
|
+
# if(options[:restart])
|
82
|
+
# rd, wr = IO.pipe
|
83
|
+
# child_pid = nil
|
84
|
+
# end
|
89
85
|
|
90
86
|
begin
|
91
87
|
##p files
|
92
88
|
fw = FileWatcher.new(files_to_watch, options[:list], options[:dontwait], options[:spinner])
|
93
|
-
|
89
|
+
|
94
90
|
fw.watch(options[:interval]) do |filename, event|
|
95
91
|
cmd=nil
|
96
92
|
if([:changed,:new].include? event)
|
97
93
|
path = Pathname.new(filename).realpath.to_s
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
end
|
94
|
+
DynTask.read_tasks path
|
95
|
+
|
96
|
+
# cmd = "dyntask-reader "+path
|
97
|
+
# if(options[:restart])
|
98
|
+
# if(child_pid == nil)
|
99
|
+
# child_pid = Process.spawn({}, cmd)
|
100
|
+
# else
|
101
|
+
# child_id = restart(child_pid, {}, cmd)
|
102
|
+
# end
|
103
|
+
# else
|
104
|
+
# begin
|
105
|
+
# p "cmd: <#{cmd}>"
|
106
|
+
# pid = Process.spawn({}, cmd)
|
107
|
+
# Process.wait()
|
108
|
+
# rescue SystemExit, Interrupt
|
109
|
+
# exit(0)
|
110
|
+
# end
|
111
|
+
# end
|
115
112
|
end
|
116
113
|
end
|
117
114
|
rescue SystemExit, Interrupt
|
data/bin/dyntask-writer
CHANGED
@@ -26,18 +26,18 @@ ARGV[1..-1].each do |task|
|
|
26
26
|
key,*value=o.split("=")
|
27
27
|
value=value.join("=")
|
28
28
|
#p [:value,value]
|
29
|
-
|
29
|
+
|
30
30
|
begin
|
31
31
|
task2[key.to_sym]=Object.class_eval(value)
|
32
32
|
rescue Exception
|
33
33
|
task2[key.to_sym]=value
|
34
34
|
end
|
35
35
|
}
|
36
|
-
[:source,:target].each {|t|
|
37
|
-
task2[t]=Pathname.new(task2[t]).expand_path.to_s if task2[t] and !(task2[t] =~ /^\%/)
|
36
|
+
[:source,:target].each {|t|
|
37
|
+
task2[t]=Pathname.new(task2[t]).expand_path.to_s if task2[t] and !(task2[t] =~ /^\%/)
|
38
38
|
}
|
39
39
|
p [:added,task2]
|
40
|
-
DynTask.add_task(task2)
|
40
|
+
id=DynTask.add_task(task2)
|
41
41
|
end
|
42
|
-
|
43
|
-
DynTask.save_tasks(task_basename)
|
42
|
+
|
43
|
+
DynTask.save_tasks(task_basename)
|
data/lib/dyntask/task_mngr.rb
CHANGED
@@ -2,19 +2,25 @@
|
|
2
2
|
require 'dyndoc-software'
|
3
3
|
require 'dyndoc-converter'
|
4
4
|
require "fileutils"
|
5
|
+
require 'pathname'
|
5
6
|
|
6
7
|
module DynTask
|
7
8
|
|
8
9
|
@@task_mngr=nil
|
10
|
+
@@task_cpt=-1
|
9
11
|
|
10
|
-
def self.
|
12
|
+
def self.inc_task_cpt
|
13
|
+
((@@task_cpt += 1) == 9999 ? (@@task_cpt = 0) : @@task_cpt)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.add_task(task,id=nil) #id.nil? => new task
|
11
17
|
@@task_mngr ||= DynTask::TaskMngr.new
|
12
|
-
@@task_mngr.add_task(task)
|
18
|
+
@@task_mngr.add_task(task,id)
|
13
19
|
end
|
14
20
|
|
15
|
-
def self.save_tasks(task_basename)
|
21
|
+
def self.save_tasks(task_basename,task_dirname=nil)
|
16
22
|
return unless @@task_mngr
|
17
|
-
@@task_mngr.save_tasks(task_basename)
|
23
|
+
@@task_mngr.save_tasks(task_basename,task_dirname)
|
18
24
|
end
|
19
25
|
|
20
26
|
def self.read_tasks(task_filename)
|
@@ -28,16 +34,48 @@ module DynTask
|
|
28
34
|
def self.cfg_dir
|
29
35
|
return @@cfg_dir if @@cfg_dir
|
30
36
|
root=File.join(ENV["HOME"],".dyntask")
|
37
|
+
## the idea is that any path has to be relative to some system root
|
38
|
+
sys_root=(ENV["HOMEDRIVE"]||"")+"/" # local mode
|
31
39
|
@@cfg_dir={
|
32
40
|
:root => root,
|
33
41
|
:etc => File.join(root,"etc"),
|
34
42
|
:share => File.join(root,"share"),
|
35
43
|
:tasks => File.join(root,"share","tasks"),
|
36
|
-
:plugins => File.join(root,"share","plugins")
|
44
|
+
:plugins => File.join(root,"share","plugins"),
|
45
|
+
:run => File.join(root,"run") # default folder to watch. In a perfect world (this is my goal), only this folder to watch!
|
37
46
|
}
|
47
|
+
## File containing the sys_root_path (used in atom package)
|
48
|
+
@@cfg_dir[:sys_root_path_cfg]=File.join(@@cfg_dir[:etc],"sys_root_path")
|
49
|
+
self.update_sys_root(sys_root)
|
38
50
|
@@cfg_dir
|
39
51
|
end
|
40
52
|
|
53
|
+
## to be able to change sys_root path depending on local or remote mode
|
54
|
+
def self.update_sys_root(path)
|
55
|
+
@@cfg_dir[:sys_root]=path
|
56
|
+
## save sys_root_path to some config file (used in atom package)
|
57
|
+
FileUtils.mkdir_p File.dirname(@@cfg_dir[:sys_root_path_cfg])
|
58
|
+
File.open(@@cfg_dir[:sys_root_path_cfg],"w") do |f|
|
59
|
+
f << @@cfg_dir[:sys_root]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.sys_root_path(rel_path)
|
64
|
+
File.expand_path File.join(self.cfg_dir[:sys_root],rel_path)
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.relative_path_from_sys_root(abs_path)
|
68
|
+
begin
|
69
|
+
#p abs_path
|
70
|
+
#p self.cfg_dir[:sys_root]
|
71
|
+
ap=Pathname.new(abs_path).realpath
|
72
|
+
#p ap
|
73
|
+
ap.relative_path_from(Pathname.new(self.cfg_dir[:sys_root])).to_s
|
74
|
+
rescue
|
75
|
+
nil
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
41
79
|
@@cfg_pandoc=nil
|
42
80
|
|
43
81
|
def self.cfg_pandoc(renew=false)
|
@@ -64,7 +102,7 @@ module DynTask
|
|
64
102
|
class TaskMngr
|
65
103
|
|
66
104
|
# TODO: to put outside to be extended by users!
|
67
|
-
TASKS=["pdflatex","pandoc","png","dyn","sh"]
|
105
|
+
TASKS=["pdflatex","pandoc","png","dyn","sh","dyn_cli"]
|
68
106
|
TASK_EXT=".task_"
|
69
107
|
|
70
108
|
def initialize
|
@@ -72,7 +110,7 @@ module DynTask
|
|
72
110
|
end
|
73
111
|
|
74
112
|
def init_tasks
|
75
|
-
@tasks=
|
113
|
+
@tasks={}
|
76
114
|
end
|
77
115
|
|
78
116
|
## Comment on writing task:
|
@@ -81,60 +119,80 @@ module DynTask
|
|
81
119
|
## However, :source and :target are recommanded keynames for describing source and target filename
|
82
120
|
|
83
121
|
## possibly add condition to check before applying command+options
|
84
|
-
def add_task(task)
|
85
|
-
|
122
|
+
def add_task(task,id=nil)
|
123
|
+
task_cpt=id || DynTask.inc_task_cpt
|
124
|
+
@tasks[task_cpt] = [] unless @tasks[task_cpt]
|
125
|
+
@tasks[task_cpt] << task
|
126
|
+
task_cpt #id of the task
|
86
127
|
end
|
87
128
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
129
|
+
##
|
130
|
+
def save_tasks(id,task_basename,task_dirname=nil)
|
131
|
+
task_dirname=DynTask.cfg_dir[:run] unless task_dirname
|
132
|
+
task_dirname=File.expand_path task_dirname
|
133
|
+
FileUtils.mkdir_p task_dirname unless File.directory? task_dirname
|
134
|
+
if (tasks_to_save=@tasks[id])
|
135
|
+
tasks_to_save[0][:id]=id
|
136
|
+
task_filename=File.join(task_dirname,("%04d" % id)+"_"+task_basename+TASK_EXT+tasks_to_save[0][:cmd].to_s)
|
137
|
+
File.open(task_filename,"w") do |f|
|
138
|
+
f << tasks_to_save.inspect
|
139
|
+
end
|
140
|
+
else
|
141
|
+
puts "DynTask WARNING: Nothing to save!"
|
142
|
+
end
|
93
143
|
end
|
94
144
|
|
95
145
|
def write_tasks(task_basename,tasks)
|
96
146
|
@tasks=tasks
|
97
|
-
|
147
|
+
id=DynTask.inc_task_cpt
|
148
|
+
save_tasks(id,task_basename)
|
98
149
|
end
|
99
150
|
|
100
151
|
## maybe to maintain only one task, remove current task when the new one is created
|
101
152
|
def read_tasks(task_filename)
|
102
153
|
@task_filename=task_filename
|
103
|
-
@workdir=File.dirname(@task_filename)
|
104
154
|
@tasks=Object.class_eval(File.read(@task_filename))
|
105
155
|
##p @tasks
|
106
156
|
if @tasks.length>=1
|
107
157
|
@task=@tasks.shift #first task to deal with
|
108
158
|
##p @task
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
159
|
+
if @task[:workdir]
|
160
|
+
# if workdir is specified inside the first task (almost required now)
|
161
|
+
@workdir = @task[:workdir]
|
162
|
+
# workdir is always relative from sys_root which could differ depending on the computer (or vm)
|
163
|
+
@workdir = DynTask.sys_root_path(@workdir)
|
164
|
+
if File.exist? @workdir
|
165
|
+
|
166
|
+
make_task
|
167
|
+
if @tasks.length>=1
|
168
|
+
dirname=File.dirname(task_filename)
|
169
|
+
basename=File.basename(task_filename,".*")
|
170
|
+
task_basename=File.join(dirname,basename)
|
171
|
+
save_tasks(@task[:id],task_basename) # same id since it is a chaining (TO CHECK: when remote action maybe prefer uuid instead of counter to gnerate id)
|
172
|
+
end
|
173
|
+
# remove since it is executed!
|
174
|
+
FileUtils.rm(task_filename)
|
175
|
+
end
|
115
176
|
end
|
116
|
-
# remove since it is executed!
|
117
|
-
FileUtils.rm(task_filename)
|
118
177
|
end
|
119
178
|
end
|
120
179
|
|
121
180
|
## if option to not remove taskfiles, this is a clean!
|
122
|
-
def task_clean_taskfiles(task_filename)
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
end
|
181
|
+
# def task_clean_taskfiles(task_filename)
|
182
|
+
# dirname=File.dirname(task_filename)
|
183
|
+
# basename=File.basename(task_filename,TASK_EXT+"*")
|
184
|
+
#
|
185
|
+
# Dir[File.join(dirname,basename+TASK_EXT+"*")].each do |f|
|
186
|
+
# FileUtils.rm(f)
|
187
|
+
# end
|
188
|
+
# end
|
130
189
|
|
131
190
|
def load_user_task_plugins
|
132
|
-
Dir[File.join(DynTask.cfg_dir[:plugins],"*.rb")].each {|lib| require lib} if File.exists? DynTask.cfg_dir[:plugins]
|
191
|
+
Dir[File.join(DynTask.cfg_dir[:plugins],"*.rb")].each {|lib| require lib} if File.exists? DynTask.cfg_dir[:plugins]
|
133
192
|
end
|
134
193
|
|
135
194
|
def info_file(filename)
|
136
195
|
return {} unless filename
|
137
|
-
filename=File.join(@workdir,filename[1..-1]) if filename =~ /^\%/
|
138
196
|
|
139
197
|
##p [:info_file,filename]
|
140
198
|
|
@@ -150,10 +208,10 @@ module DynTask
|
|
150
208
|
|
151
209
|
def make_task
|
152
210
|
|
153
|
-
##
|
154
|
-
@source
|
211
|
+
##
|
212
|
+
@source=info_file(DynTask.sys_root_path(@task[:source]))
|
155
213
|
#p [:info,@task[:source]]
|
156
|
-
|
214
|
+
|
157
215
|
#p [:source,@source]
|
158
216
|
@basename=@source[:basename]
|
159
217
|
@extname=@source[:extname]
|
@@ -161,7 +219,7 @@ module DynTask
|
|
161
219
|
@filename=@source[:filename]
|
162
220
|
|
163
221
|
@target=info_file(@task[:target]) if @task[:target]
|
164
|
-
|
222
|
+
|
165
223
|
cd_new
|
166
224
|
|
167
225
|
## This is a rule, if a @task contains both :source and :content
|
@@ -190,7 +248,7 @@ module DynTask
|
|
190
248
|
# end
|
191
249
|
|
192
250
|
cd_old
|
193
|
-
|
251
|
+
|
194
252
|
end
|
195
253
|
|
196
254
|
def cd_new
|
@@ -248,28 +306,28 @@ module DynTask
|
|
248
306
|
|
249
307
|
def make_pdflatex_pass(echo_mode=false)
|
250
308
|
unless File.exists? @basename+".tex"
|
251
|
-
msg="No pdflatex #{@basename} in #{@
|
309
|
+
msg="No pdflatex #{@basename} in #{@workdir} since file does not exist!"
|
252
310
|
print "\n==> "+msg
|
253
311
|
end
|
254
312
|
if File.read(@basename+".tex").empty?
|
255
|
-
msg="No pdflatex #{@basename} in #{@
|
313
|
+
msg="No pdflatex #{@basename} in #{@workdir} since empty file!"
|
256
314
|
print "\n==> "+msg
|
257
315
|
###$dyn_logger.write("ERROR pdflatex: "+msg+"\n") unless Dyndoc.cfg_dyn[:dyndoc_mode]==:normal
|
258
316
|
return ""
|
259
317
|
end
|
260
|
-
print "\n==> #{Dyndoc.pdflatex} #{@basename} in #{@
|
318
|
+
print "\n==> #{Dyndoc.pdflatex} #{@basename} in #{@workdir}"
|
261
319
|
|
262
320
|
out=`#{Dyndoc.pdflatex} -halt-on-error -file-line-error -interaction=nonstopmode #{@basename}`
|
263
|
-
out=out.b if RUBY_VERSION >= "1.9" #because out is not necessarily utf8 encoded
|
321
|
+
out=out.b if RUBY_VERSION >= "1.9" #because out is not necessarily utf8 encoded
|
264
322
|
out=out.split("\n")
|
265
323
|
puts out if echo_mode
|
266
324
|
if out[-2].include? "Fatal error"
|
267
325
|
#if Dyndoc.cfg_dyn[:dyndoc_mode]==:normal
|
268
326
|
# print " -> NOT OKAY!!!\n==> "
|
269
327
|
# puts out[-4...-1]
|
270
|
-
# raise SystemExit
|
328
|
+
# raise SystemExit
|
271
329
|
#end
|
272
|
-
else
|
330
|
+
else
|
273
331
|
print " -> OKAY!!!\n"
|
274
332
|
###@cfg[:created_docs] << @basename+".pdf" #( @dirname.empty? ? "" : @dirname+"/" ) + @basename+".pdf"
|
275
333
|
end
|
@@ -305,7 +363,7 @@ module DynTask
|
|
305
363
|
pandoc_file_output=@basename+append_doc+".html"
|
306
364
|
when "md2slidy"
|
307
365
|
cmd_pandoc_options= cfg_pandoc["md2slidy"] || ["-s","--webtex","-i","-t","slidy"]
|
308
|
-
pandoc_file_output=@basename+append_doc+".html"
|
366
|
+
pandoc_file_output=@basename+append_doc+".html"
|
309
367
|
when "md2s5"
|
310
368
|
cmd_pandoc_options= cfg_pandoc["md2s5"] || ["-s","--self-contained","--webtex","-i","-t","s5"]
|
311
369
|
pandoc_file_output=@basename+append_doc+".html"
|
@@ -316,9 +374,9 @@ module DynTask
|
|
316
374
|
cmd_pandoc_options=["-s","--mathjax","-i","-t","slideous"]
|
317
375
|
pandoc_file_output=@basename+append_doc+".html"
|
318
376
|
end
|
319
|
-
|
377
|
+
|
320
378
|
opts=cmd_pandoc_options #OBSOLETE NOW!: +["-o",pandoc_file_output]
|
321
|
-
|
379
|
+
|
322
380
|
output=if pandoc_file_input
|
323
381
|
opts << pandoc_file_input
|
324
382
|
Dyndoc::Converter.pandoc(nil,opts.join(" "))
|
@@ -334,7 +392,7 @@ module DynTask
|
|
334
392
|
f << output
|
335
393
|
end
|
336
394
|
end
|
337
|
-
|
395
|
+
|
338
396
|
end
|
339
397
|
|
340
398
|
|
@@ -345,7 +403,7 @@ module DynTask
|
|
345
403
|
make_dvipng
|
346
404
|
end
|
347
405
|
|
348
|
-
# make latex and dvipng
|
406
|
+
# make latex and dvipng
|
349
407
|
|
350
408
|
def make_dvipng
|
351
409
|
system "latex #{@basename}.tex"
|
@@ -355,7 +413,7 @@ module DynTask
|
|
355
413
|
end
|
356
414
|
|
357
415
|
# make ttm
|
358
|
-
|
416
|
+
|
359
417
|
def make_ttm
|
360
418
|
#puts "make_ttm:begin"
|
361
419
|
Dyndoc::Converter.ttm(File.read(@task[:filename]))
|
@@ -0,0 +1,6 @@
|
|
1
|
+
pandoc-extra management
|
2
|
+
=======================
|
3
|
+
|
4
|
+
1) Location of pandoc-extra directory containing extra installations of reveal-js, s5, ..., is read in ~/.dyntask/etc/pandoc_extra_dir file and accessed in dyntask-ruby gem via DynTask.cfg_dir[:pandoc_extra] (used, for example, inside ~/.dyntask/share/pandoc/config.rb)
|
5
|
+
2) config.rb is located inside ~/.dyntask/share/pandoc directory to be easily saved in Github. The pandoc-extra contents is not at the same place to avoid to be located in Github. The command "dyndocker pandoc-extra" (for docker setting) and "dyntask-init --pandoc-extra" (nomal setting) is used to offer a scriptable way to get these extra installations of reveal-js and s5.
|
6
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
## This file is in share/pandoc since it is saved in Github.
|
2
|
+
## How the different file works:
|
3
|
+
## 1) ~/.dyntask/etc/pandoc_extra_dir contains the location of DynTask.cfg_dir[:pandoc_extra]
|
4
|
+
## 2) DynTask.cfg_dir[:pandoc_extra] can be located:
|
5
|
+
## a) outside a docker machine (example: /dyndoc-library/pandoc-extra)
|
6
|
+
## is located outside share/pandoc folder to be
|
7
|
+
## updated by the user.
|
8
|
+
{
|
9
|
+
"md2s5" => ["-t","s5","--webtex","-s","-V","s5-url=#{DynTask.cfg_pandoc[:extra_dir]}/s5-ui/default", "--self-contained"],
|
10
|
+
"md2revealjs" => ["-t","revealjs","--webtex","-s","-V","theme=sky","-V","revealjs-url=#{DynTask.cfg_pandoc[:extra_dir]}/reveal.js-3.1.0", "--self-contained"]
|
11
|
+
}
|
12
|
+
# --mathjax='https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'
|
@@ -0,0 +1 @@
|
|
1
|
+
Plugins folder for user-defined task
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dyntask-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CQLS
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: trollop
|
@@ -63,6 +63,12 @@ extra_rdoc_files: []
|
|
63
63
|
files:
|
64
64
|
- lib/dyntask.rb
|
65
65
|
- lib/dyntask/task_mngr.rb
|
66
|
+
- share/pandoc/README.INSTALL
|
67
|
+
- share/pandoc/config.rb
|
68
|
+
- share/plugins/README
|
69
|
+
- share/tasks/task_dyn2html-cli.rb
|
70
|
+
- share/tasks/task_dyn2html.rb
|
71
|
+
- share/tasks/task_dyn2tex2pdf.rb
|
66
72
|
- bin/dyntask-server
|
67
73
|
- bin/dyntask-reader
|
68
74
|
- bin/dyntask-writer
|