dyndoc-ruby-core 1.2.3 → 1.4.2
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 +5 -5
- data/dyndoc/Tools/julia/Fig.dyn +28 -0
- data/lib/dyndoc-core.rb +5 -0
- data/lib/dyndoc/base/filter/server.rb +58 -24
- data/lib/dyndoc/base/scanner.rb +5 -4
- data/lib/dyndoc/base/tmpl/manager.rb +17 -7
- data/lib/dyndoc/base/tmpl/parse_do.rb +26 -11
- data/lib/dyndoc/init/config.rb +9 -1
- data/share/julia/dynArray.jl +20 -19
- data/share/julia/dyndoc.jl +51 -82
- data/share/julia/dyndocOLD.jl +192 -0
- data/share/julia/dynreport.jl +127 -0
- data/share/julia/ruby.jl +6 -6
- metadata +65 -67
- data/dyndoc/.DS_Store +0 -0
- data/dyndoc/Tools/.DS_Store +0 -0
- data/dyndoc/Tools/Web/.DS_Store +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 43743c1ff1beb4c4f53a80874dda62d41be396be2358a723805a6137895a8519
|
4
|
+
data.tar.gz: a9b1266ed703968a8ffad14deff056e9ed8de134355b73b47aa21fa3718e52a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 557f72a70d51e5d0d533f2ccc5f9047f5e07659ecb744e642a95c7cc518c6f9db674f8be84746230437fc32829cfc910f398b1b0b18072f8174b847e0bd6010e
|
7
|
+
data.tar.gz: 601fe0897cdeb6a832c0eb1f5d19d70e7e361cd3917917ebdeb31501f229266168203119b2dbaed705cc9201f2055d99d6dbb800de55e0474e5c8b7b984313b2
|
@@ -0,0 +1,28 @@
|
|
1
|
+
[#rb<]
|
2
|
+
$jlfig=0
|
3
|
+
$jlfig_exts={:png=>".png",:jpeg =>".jpg",:pdf=>".pdf"}
|
4
|
+
[#<]
|
5
|
+
|
6
|
+
{#def]imgJL[#,] jlcode[] [#,] img[]
|
7
|
+
[#,] widthR[15] [#,] heightR[15][#,] unitR[cm][#,] resR[72][#,] optR[]
|
8
|
+
[#,] optTex[scale=0.75]
|
9
|
+
[#,] newR[TRUE]
|
10
|
+
[#=]delete[FALSE]
|
11
|
+
[#?]Dyndoc.tmpl_mngr.fmtOutput == "tex"[#<]
|
12
|
+
{#if]#{0?img}[#=]img[:{File.join($dyn_rsrc,"img","jlfig_:{$jlfig+=1}:{$jlfig_exts[:png]}")}]
|
13
|
+
[#else][#<]
|
14
|
+
{#if]File.dirname(#{=img})=="."[#>]img[:{File.join($dyn_rsrc,"img",#{=img})}][#if}
|
15
|
+
[#if}
|
16
|
+
[#?]Dyndoc.tmpl_mngr.fmtOutput == "html"[#<]
|
17
|
+
{#if]#{0?img}[#=]img[#r{gsub("\\\\","/",tempfile(fileext=".png"))}][#=]delete[TRUE][#if}
|
18
|
+
[#?]#{+?jlcode}[#<]#{jlcode}[#?]end
|
19
|
+
[#R<]require(base64)
|
20
|
+
#print(#{=img})
|
21
|
+
codeimg<-img(#{=img})
|
22
|
+
#print(codeimg)
|
23
|
+
if(#{delete}) unlink(#{=img})
|
24
|
+
[#?]Dyndoc.tmpl_mngr.fmtOutput == "html"
|
25
|
+
[#>][#r{codeimg}]
|
26
|
+
[#?]Dyndoc.tmpl_mngr.fmtOutput == "tex"
|
27
|
+
[#>][\includegraphics[#{optTex}]{#{img}}]
|
28
|
+
[#}
|
data/lib/dyndoc-core.rb
CHANGED
@@ -30,6 +30,7 @@ Settings.define 'cfg_dyn.cmd_pandoc_options', :type => Array, :default => []
|
|
30
30
|
Settings.define 'cfg_dyn.options.pdflatex_nb_pass', :type => Integer, :default => 1
|
31
31
|
Settings.define 'cfg_dyn.options.pdflatex_echo', :type => :boolean, :default => false
|
32
32
|
Settings.define 'cfg_dyn.debug', :type => :boolean, :default => false
|
33
|
+
Settings.define 'cfg_dyn.ruby_only', :type => :boolean, :default => false
|
33
34
|
|
34
35
|
Settings.define 'cfg_dyn.dyndoc_session', :type => Symbol, :default => :normal #or :interactive
|
35
36
|
|
@@ -44,6 +45,7 @@ Settings.define 'cfg_dyn.devel_mode', :type=> Symbol, :default=> :none
|
|
44
45
|
Settings.define 'cfg_dyn.ruby_debug', :type=> Symbol, :default=> :none
|
45
46
|
|
46
47
|
Settings.define 'cfg_dyn.model_doc', :default => "default"
|
48
|
+
Settings.define 'cfg_dyn.exec_mode', :default => "no"
|
47
49
|
Settings.define 'cfg_dyn.format_doc', :default => :tex
|
48
50
|
Settings.define 'cfg_dyn.pandoc_filter', :default => ""
|
49
51
|
|
@@ -60,5 +62,8 @@ Settings.resolve!
|
|
60
62
|
require 'dyndoc/init/config'
|
61
63
|
Dyndoc.init_dyndoc_library_path
|
62
64
|
Dyndoc.init_rootDoc
|
65
|
+
Dyndoc.add_logger
|
66
|
+
## Dyndoc.logger.info("dyndoc-core loaded!")
|
67
|
+
## Dyndoc.logger.info(".dyndoc.yml: "+File.join(ENV["HOME"],".dyndoc.yml"))
|
63
68
|
|
64
69
|
CqlsDoc=Dyndoc #for compatibity
|
@@ -104,10 +104,30 @@ module Dyndoc
|
|
104
104
|
out
|
105
105
|
end
|
106
106
|
|
107
|
+
def RbServer.redirect
|
108
|
+
if block_given?
|
109
|
+
require 'stringio'
|
110
|
+
begin
|
111
|
+
# redirect output to StringIO objects
|
112
|
+
oldstdout,oldstderr=$stdout, $stderr
|
113
|
+
stdout, stderr = StringIO.new, StringIO.new
|
114
|
+
$stdout, $stderr = stdout, stderr
|
115
|
+
yield
|
116
|
+
ensure
|
117
|
+
# restore normal output
|
118
|
+
$stdout, $stderr = oldstdout,oldstderr
|
119
|
+
end
|
120
|
+
return {stdout: stdout.string, stderr: stderr.string}
|
121
|
+
else
|
122
|
+
return {stdout: "", stderr: ""}
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
107
127
|
def RbServer.capture(code,rbEnvir=nil)
|
108
128
|
|
109
129
|
require 'stringio'
|
110
|
-
|
130
|
+
require 'ostruct'
|
111
131
|
|
112
132
|
begin
|
113
133
|
# redirect output to StringIO objects
|
@@ -273,10 +293,10 @@ module Dyndoc
|
|
273
293
|
short[0]=short[0].to_i
|
274
294
|
short[2]=short[2].to_i
|
275
295
|
## Dyndoc.warn "short",[short,txt]
|
276
|
-
(0...short[0]).each{|i| txtout << txt[i].force_encoding("utf-8") << "\n"}
|
296
|
+
(0...short[0]).each{|i| txtout << (txt[i] ? txt[i].force_encoding("utf-8") : "") << "\n"}
|
277
297
|
txtout << short[1] << "\n"
|
278
298
|
le = txt.length
|
279
|
-
((le-short[2])...le).each{|i| txtout << txt[i].force_encoding("utf-8") << "\n"}
|
299
|
+
((le-short[2])...le).each{|i| txtout << (txt[i] ? txt[i].force_encoding("utf-8") : "") << "\n"}
|
280
300
|
else
|
281
301
|
txt=txt.map{|e| e.force_encoding("utf-8")}
|
282
302
|
txtout << txt.join("\n")
|
@@ -808,59 +828,73 @@ module Dyndoc
|
|
808
828
|
@@initVerb=nil
|
809
829
|
|
810
830
|
def JLServer.initVerb
|
811
|
-
Julia << "include(
|
812
|
-
|
831
|
+
Julia << "Base.include(@__MODULE__,\""+File.join(Dyndoc.cfg_dir[:gem_path],"share","julia","dyndoc.jl")+"\")"
|
832
|
+
Julia << "push!(Libdl.DL_LOAD_PATH,\"/usr/lib\");push!(Libdl.DL_LOAD_PATH,\"/usr/local/lib\")"
|
833
|
+
@@initVerb=true
|
813
834
|
end
|
814
835
|
|
815
836
|
def JLServer.inputsAndOutputs(code,hash=true)
|
816
837
|
JLServer.initVerb unless @@initVerb
|
817
|
-
|
818
|
-
|
819
|
-
|
838
|
+
Dyndoc.logger.info("JLServer.inputsAndOutputs: "+code.strip)
|
839
|
+
res=(Julia << 'capture_output_julia('+code.strip.inspect.gsub("$","\\$")+')')
|
840
|
+
Dyndoc.logger.info("JLServer.inputsAndOutputs:"+res.inspect)
|
841
|
+
res.map!{|input,output,output2,error,error2|
|
820
842
|
{:input=>input,:output=>output,:output2=>output2,:error=>error,:error2=>error2}
|
821
|
-
} if hash
|
843
|
+
} if res and hash
|
822
844
|
res
|
823
845
|
end
|
824
846
|
|
825
847
|
def JLServer.eval(code)
|
826
|
-
Julia.eval(code)
|
848
|
+
Julia.eval("capture_output_julia("+code.strip.inspect.gsub("$","\\$")+")")
|
827
849
|
end
|
828
850
|
|
829
851
|
def JLServer.output(code,opts={})
|
830
|
-
opts={:print=>true}.merge(opts)
|
852
|
+
#opts={:print=>true}.merge(opts)
|
831
853
|
## Dyndoc.warn "jlserv",code+"|"+Julia.eval(code,:print=>opts[:print]).to_s
|
832
|
-
Julia.eval(code,:print=>opts[:print]).to_s
|
854
|
+
#Julia.eval(code,:print=>opts[:print]).to_s
|
855
|
+
|
856
|
+
res=JLServer.inputsAndOutputs(code,false)
|
857
|
+
Dyndoc.warn "jlserv.output",[code,res]
|
858
|
+
return "" unless res
|
859
|
+
res=res.map{|input,output,output2,error,error2|
|
860
|
+
#Dyndoc.warn "output",output
|
861
|
+
output
|
862
|
+
}
|
863
|
+
res.length==0 ? "" : res[-1]
|
833
864
|
end
|
834
865
|
|
835
866
|
def JLServer.outputs(code,opts={}) #may have more than one lines in code
|
836
867
|
## Dyndoc.warn "JLServer.outputs opts",opts
|
837
|
-
##
|
868
|
+
##
|
869
|
+
Dyndoc.warn "JLServer code",code
|
870
|
+
res=JLServer.inputsAndOutputs(code,false)
|
838
871
|
if opts[:block]
|
839
|
-
res=JLServer.inputsAndOutputs(code,false)
|
840
872
|
return "" unless res
|
841
873
|
res.map{|input,output,output2,error,error2|
|
842
874
|
## Dyndoc.warn "output2",output2
|
843
|
-
|
875
|
+
output
|
844
876
|
}.join("\n")
|
845
|
-
else
|
846
|
-
JLServer.eval(code)
|
847
877
|
end
|
848
878
|
end
|
849
879
|
|
850
880
|
def JLServer.echo(code,prompt="julia> ",tab=2)
|
851
881
|
out=""
|
852
882
|
res=JLServer.inputsAndOutputs(code)
|
853
|
-
##
|
883
|
+
##
|
884
|
+
Dyndoc.warn "JLServer",res
|
885
|
+
return "Error when executing: "+code unless res
|
854
886
|
res.each do |cmd|
|
855
887
|
## Dyndoc.warn "input",cmd
|
856
888
|
out << prompt+ cmd[:input].split("\n").each_with_index.map{|e,i| i==0 ? e : " "*(prompt.length)+e}.join("\n").gsub(/\t/," "*tab)
|
857
|
-
out << "\n"
|
889
|
+
out << "\n" unless cmd[:input].strip[-1]==";"
|
858
890
|
## Dyndoc.warn "output1",out
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
891
|
+
if cmd[:error]==""
|
892
|
+
out << ((cmd[:output]=="nothing" or (cmd[:input].strip)[-1]==";") ? "" : cmd[:output])
|
893
|
+
out << ((cmd[:output2]=="nothing" or (cmd[:input].strip)[-1]==";") ? "" : cmd[:output2]) #cmd[:output2]
|
894
|
+
else
|
895
|
+
out << cmd[:error]
|
896
|
+
end
|
897
|
+
out << (cmd[:output]=="nothing" ? "" : "\n")
|
864
898
|
## Dyndoc.warn "output3",out
|
865
899
|
end
|
866
900
|
out
|
data/lib/dyndoc/base/scanner.rb
CHANGED
@@ -219,7 +219,7 @@ module Dyndoc
|
|
219
219
|
#IMPORTANT: process has to have as the second argument e[:type] corresponding to the inside_type and as the third argument res[:type] corresponding to the out_type
|
220
220
|
##Dyndoc.warn "scan",txt2,e[:type],res[:type],(filter ? filter.process(txt2,e[:type],res[:type]) : txt2)
|
221
221
|
txt2=((filter and !(txt2=~/\[HTML\]/)) ? filter.process(txt2,e[:type],res[:type]) : txt2)
|
222
|
-
##p txt2
|
222
|
+
##p [:txt2,txt2]
|
223
223
|
txt << txt2
|
224
224
|
end
|
225
225
|
#puts "txt";p txt
|
@@ -275,7 +275,7 @@ module Dyndoc
|
|
275
275
|
init_tag(@tag_type) if [:dtag].include? @tag_type
|
276
276
|
end
|
277
277
|
|
278
|
-
@@tagblck_set=[:<<,:<,:do,:>>,:>,:">!",:out,:nl,:"\\n",:"r<",:"R<",:"rb<",:"m<",:"M<",:"jl<",:"r>>",:"R>>",:rverb,:"rb>>",:rbverb,:"jl>>",:jlverb,:rout,:"r>",:"R>",:"rb>",:"m>",:"M>",:"jl>",:"_<",:"_>",:"__>",:"html>",:"tex>",:"txtl>",:"ttm>",:"md>",:"adoc>",:tag,:"??",:"?",:yield,:"=",:"-",:+,:"%"]
|
278
|
+
@@tagblck_set=[:<<,:<,:do,:>>,:>,:">!",:out,:nl,:"\\n",:"r<",:"R<",:"rb<",:"m<",:"M<",:"jl<",:"sh<",:"r>>",:"R>>",:rverb,:"rb>>",:rbverb,:"jl>>",:jlverb,:rout,:"r>",:"R>",:"rb>",:"m>",:"M>",:"jl>",:"_<",:"_>",:"__>",:"html>",:"tex>",:"txtl>",:"ttm>",:"md>",:"adoc>",:tag,:"??",:"?",:yield,:"=",:"-",:+,:"%",:"tex=",:"tex+",:"md=",:"md+",:"adoc=",:"adoc+",:"html=",:"html+",:"rb=",:"rb+",:"R=",:"R+",:"jl=",:"jl+",:"txtl=",:"txtl+"]
|
279
279
|
#Rmk: when a symbol is included in another one, you have to place it before! Ex: :>> before :> and also :<< before :<
|
280
280
|
|
281
281
|
@@tagblck_dyndoc_set = [:main,:content,:before,:after,:require,:helpers,:preamble,:postamble,:style,:title,:path,:first,:last,:default,:cfg]
|
@@ -302,6 +302,7 @@ module Dyndoc
|
|
302
302
|
:"rb<" => [:blck, :"rb<"],
|
303
303
|
:"R<" => [:blck, :"R<"],
|
304
304
|
:"jl<" => [:blck, :"jl<"],
|
305
|
+
:"sh<" => [:blck, :"sh<"],
|
305
306
|
:"r>>" => [:blck, :"r>>"],
|
306
307
|
:"R>>" => [:blck, :"r>>"],
|
307
308
|
:"*<" => [:blck, :"*<"],
|
@@ -366,7 +367,7 @@ module Dyndoc
|
|
366
367
|
},
|
367
368
|
:mode_arg=>:next_block,
|
368
369
|
:tag_code=>[:code,:<,:>,:<<,:txt], #used for arg mode!
|
369
|
-
:arg=>[:if,:unless,:elsif,:for,:case,:def,:func,:meth,:new,:super,:call,:input,:when,:break,:set,:style,:keys,:"?",:"rb<",:"r<",:"R<",:"m<",:"M<",:"jl<"],
|
370
|
+
:arg=>[:if,:unless,:elsif,:for,:case,:def,:func,:meth,:new,:super,:call,:input,:when,:break,:set,:style,:keys,:"?",:"rb<",:"r<",:"R<",:"m<",:"M<",:"jl<",:"sh<"],
|
370
371
|
:blck=>{
|
371
372
|
:instr=>[:document,:if,:unless,:case,:loop,:set,:tag,:keys,:rverb,:rbverb,:jlverb,:for],
|
372
373
|
:keyword=>{
|
@@ -512,7 +513,7 @@ module Dyndoc
|
|
512
513
|
else
|
513
514
|
@dtag[:named_tag][key][:tag].sub("_TAG_",Regexp.escape( key.to_s ))
|
514
515
|
end
|
515
|
-
|
516
|
+
else
|
516
517
|
return Regexp.escape(key.to_s)
|
517
518
|
end
|
518
519
|
end
|
@@ -77,23 +77,31 @@ module Dyndoc
|
|
77
77
|
if RUBY_PLATFORM =~ /mingw/
|
78
78
|
require File.join(ENV["DYNDOC_HOME"],"bin","msys2","file_tools.rb") if ENV["DYNDOC_HOME"]
|
79
79
|
end
|
80
|
+
Dyndoc.logger.info "R initialized inside dyndoc!"
|
80
81
|
end
|
81
82
|
|
82
83
|
def TemplateManager.initJulia
|
84
|
+
Dyndoc.logger.info "initJulia: first"
|
83
85
|
first=require "jl4rb" #save if it the first initialization!
|
86
|
+
Dyndoc.logger.info "initJulia: require"
|
84
87
|
Julia.init
|
88
|
+
Dyndoc.logger.info "initJulia: init"
|
85
89
|
# init rb4jl stuff
|
86
90
|
# since inside ruby, no need Ruby.start and Ruby.stop like in rb4R.
|
87
91
|
# sort of equivalent of JLServer.init_filter (but not yet defined)!
|
88
|
-
Julia << "include(
|
89
|
-
Julia << "include(
|
92
|
+
#Julia << "Base.include(@__MODULE__,\"ruby.jl\")"
|
93
|
+
Julia << "Base.include(@__MODULE__,\""+File.join(Dyndoc.cfg_dir[:gem_path],"share","julia","ruby.jl")+ "\")"
|
94
|
+
Dyndoc.logger.info "initJulia: ruby.jl"
|
95
|
+
Julia << "Base.include(@__MODULE__,\""+File.join(Dyndoc.cfg_dir[:gem_path],"share","julia","dynArray.jl")+ "\")"
|
96
|
+
Dyndoc.logger.info "initJulia: dynArray.jl"
|
90
97
|
#-| To debug ruby.jl and dynArray.jl => uncomment below and commnt above
|
91
98
|
# Julia << "include(\""+File.expand_path("~/Github/dyndoc/share/julia/ruby.jl")+"\")"
|
92
99
|
# Julia << "include(\""+File.expand_path("~/Github/dyndoc/share/julia/dynArray.jl")+"\")"
|
93
|
-
Julia << "using Dyndoc"
|
94
|
-
|
100
|
+
Julia << "using Main.Dyndoc"
|
101
|
+
Dyndoc.logger.info "initJulia: using Dyndoc"
|
102
|
+
Julia << "Dyndoc.Ruby.alive(true)"
|
95
103
|
#Julia << "global const _dynArray=DynArray()"
|
96
|
-
Dyndoc.
|
104
|
+
Dyndoc.logger.info "Julia initialized inside dyndoc!"
|
97
105
|
|
98
106
|
end
|
99
107
|
|
@@ -113,8 +121,10 @@ module Dyndoc
|
|
113
121
|
@cfg[:part_tag][0]=@cfg[:part_tag][0][1..-1] if !(@cfg[:part_tag].empty?) and (@partTag_add= (@cfg[:part_tag][0][0,1]=="+"))
|
114
122
|
=end
|
115
123
|
## default system root appended
|
116
|
-
|
117
|
-
|
124
|
+
unless Dyndoc.cfg_dyn[:ruby_only]
|
125
|
+
TemplateManager.initR if Dyndoc.cfg_dyn[:langs].include? :R
|
126
|
+
TemplateManager.initJulia if Dyndoc.cfg_dyn[:langs].include? :jl
|
127
|
+
end
|
118
128
|
rbenvir_init(binding)
|
119
129
|
@rEnvir=["Global"]
|
120
130
|
@envirs={}
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
|
+
require 'securerandom'
|
4
|
+
|
3
5
|
## TODO: .force_encoding("utf-8") needs to be added (see server.rb)
|
4
6
|
module Dyndoc
|
5
7
|
|
@@ -29,7 +31,7 @@ module Dyndoc
|
|
29
31
|
|
30
32
|
@@cmd=["newBlck","input","require","def","func","meth","new","super","blck","do","if","for","case", "loop","r","renv","rverb","rbverb","jlverb","rout","rb","var","set","hide","format","txt","code","<","<<",">","eval","ifndef","tags","keys","opt","document","yield","get","part","style"]
|
31
33
|
## Alias
|
32
|
-
@@cmdAlias={"unless"=>"if","out"=>"do","r<"=>"r","R<"=>"R","rb<"=>"rb","r>"=>"r","R>"=>"R","rb>"=>"rb","m<"=>"m","M<"=>"m","m>"=>"m","M>"=>"m","jl>"=>"jl","jl<"=>"jl","<"=>"txt","<<"=>"txt",">"=>"txt","code"=>"txt","dyn"=>"eval","r>>"=>"rverb","R>>"=>"rverb","rout"=>"rverb","rb>>" => "rbverb","jl>>" => "jlverb","saved"=>"blck","blckAnyTag"=>"blck"}
|
34
|
+
@@cmdAlias={"unless"=>"if","out"=>"do","r<"=>"r","R<"=>"R","rb<"=>"rb","r>"=>"r","R>"=>"R","rb>"=>"rb","m<"=>"m","M<"=>"m","m>"=>"m","M>"=>"m","jl>"=>"jl","jl<"=>"jl","sh<"=>"sh","<"=>"txt","<<"=>"txt",">"=>"txt","code"=>"txt","dyn"=>"eval","r>>"=>"rverb","R>>"=>"rverb","rout"=>"rverb","rb>>" => "rbverb","jl>>" => "jlverb","saved"=>"blck","blckAnyTag"=>"blck"}
|
33
35
|
@@cmd += @@cmdAlias.keys
|
34
36
|
|
35
37
|
def add_dtag(dtag,cmdAlias=nil)
|
@@ -65,9 +67,9 @@ module Dyndoc
|
|
65
67
|
Utils.escape!(texblock,CHARS_SET_FIRST)
|
66
68
|
Utils.clean_bom_utf8!(texblock)
|
67
69
|
Utils.silence_warnings do
|
68
|
-
texblock=@scan.process("{#document][#content]" + texblock + "[#}")
|
70
|
+
texblock=@scan.process("{#document][#content]" + texblock + "[#document}")
|
69
71
|
end
|
70
|
-
##
|
72
|
+
##Dyndoc.warn "parsed",texblock
|
71
73
|
end
|
72
74
|
#p "texblock";p texblock
|
73
75
|
unless filterLoc
|
@@ -404,7 +406,7 @@ p [vars,b2]
|
|
404
406
|
if @@newBlcks.keys.include? @blckDepth[-1]
|
405
407
|
@blckName ||= []
|
406
408
|
tmp=blck[1][1].strip
|
407
|
-
@blckName << (tmp.empty? ?
|
409
|
+
@blckName << (tmp.empty? ? SecureRandom.uuid.strip : tmp)
|
408
410
|
#puts "blckNAME";p @blckName
|
409
411
|
end
|
410
412
|
|
@@ -482,7 +484,7 @@ p [vars,b2]
|
|
482
484
|
when :do,:<
|
483
485
|
i,*b2=next_block(blck,i)
|
484
486
|
parse(b2,filter) if cond_tag and cond
|
485
|
-
when :"r<",:"rb<",:"R<",:"m<",:"M<",:"jl<"
|
487
|
+
when :"r<",:"rb<",:"R<",:"m<",:"M<",:"jl<",:"sh<"
|
486
488
|
# if current_block_tag==:"jl<"
|
487
489
|
# ##p "iciiiii"
|
488
490
|
# end
|
@@ -498,11 +500,12 @@ p [vars,b2]
|
|
498
500
|
b2=[code.unshift(newblck)]
|
499
501
|
##puts "r<;rb<";p b2
|
500
502
|
filter.outType=":"+(blck[i].to_s)[0...-1]
|
501
|
-
#
|
503
|
+
#Dyndoc.warn "rb,jl,R block",filter.outType
|
502
504
|
parse(b2,filter)
|
503
505
|
filter.outType=nil
|
504
506
|
end
|
505
|
-
|
507
|
+
#equivalent of :var but DO NOT USE :var
|
508
|
+
when :"=",:"tex=",:"md=",:"adoc=",:"txtl=",:"html=",:"rb=",:"R=",:"jl="
|
506
509
|
i,*b2=next_block(blck,i)
|
507
510
|
if cond_tag and cond
|
508
511
|
#puts "=:b2";p b2
|
@@ -516,7 +519,7 @@ p [vars,b2]
|
|
516
519
|
#puts "-:b2"
|
517
520
|
parse(b2,filter).strip.split(",").each{|key| @vars.remove(key)}
|
518
521
|
end
|
519
|
-
when
|
522
|
+
when :+,:"tex+",:"md+",:"adoc+",:"txtl+",:"html+",:"rb+",:"R+",:"jl+"
|
520
523
|
##Dyndoc.warn "+:-1:block",[i,blck]
|
521
524
|
i,*b2=next_block(blck,i)
|
522
525
|
##Dyndoc.warn "+:0:i,b2",[i,b2]
|
@@ -569,7 +572,7 @@ p [vars,b2]
|
|
569
572
|
#puts "varNew:#{var}";p @vars.extract_raw(var)
|
570
573
|
end
|
571
574
|
end
|
572
|
-
|
575
|
+
when :out,:>,:">!" # :>! is in some sense equivalent of :set
|
573
576
|
i,*b2=next_block(blck,i)
|
574
577
|
#puts "block >, cond_tag, cond";p cond_tag ;p cond
|
575
578
|
if cond_tag and cond and !b2.empty?
|
@@ -1055,7 +1058,7 @@ p [vars,b2]
|
|
1055
1058
|
when :binding
|
1056
1059
|
i,*b2=next_block(blck,i)
|
1057
1060
|
rbEnvir=b2[0][1].strip
|
1058
|
-
when :do,:<,:out,:>,:"r<",:"rb<",:"r>",:"R>",:"R<",:"r>>",:rverb,:"rb>>",:rbverb,:"jl>>",:jlverb,:"rb>",:"?",:tag,:"??",:yield,:>>,:"=",:"+",:<<,:"txtl>",:"md>",:"adoc>",:"ttm>",:"html>",:"tex>",:"_>"
|
1061
|
+
when :do,:<,:out,:>,:"r<",:"rb<",:"r>",:"R>",:"R<",:"r>>",:rverb,:"rb>>",:rbverb,:"jl>>",:jlverb,:"jl>",:"jl<",:"sh<",:"rb>",:"?",:tag,:"??",:yield,:>>,:"=",:"+",:<<,:"txtl>",:"md>",:"adoc>",:"ttm>",:"html>",:"tex>",:"_>"
|
1059
1062
|
code = blck[i..-1].unshift(:blck)
|
1060
1063
|
when :","
|
1061
1064
|
i,*b2=next_block(blck,i)
|
@@ -1231,6 +1234,8 @@ p call
|
|
1231
1234
|
#p var
|
1232
1235
|
end
|
1233
1236
|
end while i<blck.length-1
|
1237
|
+
## IMPORTANT: special treatment for default empty block to avoid infinit loop
|
1238
|
+
code["default"] << :out << [:main,""] if code["default"].length==1
|
1234
1239
|
code.each_key{|k| code.delete(k) if code[k].length==1 }
|
1235
1240
|
return [var,code]
|
1236
1241
|
end
|
@@ -2135,6 +2140,7 @@ p call
|
|
2135
2140
|
def do_jl(tex,blck,filter)
|
2136
2141
|
return unless Dyndoc.cfg_dyn[:langs].include? :jl
|
2137
2142
|
## jlBlock stuff
|
2143
|
+
## Dyndoc.warn "do_jl",blck
|
2138
2144
|
as_default_tmpl_mngr! if
|
2139
2145
|
dynBlock=dynBlock_in_doLangBlock?(blck)
|
2140
2146
|
if dynBlock
|
@@ -2158,7 +2164,7 @@ p call
|
|
2158
2164
|
as_default_tmpl_mngr!
|
2159
2165
|
tex << JLServer.outputs(code,:block => true)
|
2160
2166
|
else
|
2161
|
-
JLServer.
|
2167
|
+
JLServer.outputs(code)
|
2162
2168
|
end
|
2163
2169
|
## revert all the stuff
|
2164
2170
|
if dynBlock
|
@@ -2168,6 +2174,15 @@ p call
|
|
2168
2174
|
filter.outType=nil
|
2169
2175
|
end
|
2170
2176
|
|
2177
|
+
def do_sh(tex,blck,filter)
|
2178
|
+
#Dyndoc.warn "do_sh: blck ";p blck[1..-1]
|
2179
|
+
filter.outType="none"
|
2180
|
+
code=parse(blck[1..-1],filter)
|
2181
|
+
%x[ #{code} ]
|
2182
|
+
#Dyndoc.warn "do_sh: code ";p code
|
2183
|
+
filter.outType=nil
|
2184
|
+
end
|
2185
|
+
|
2171
2186
|
def do_m(tex,blck,filter)
|
2172
2187
|
newblck=blck[0]
|
2173
2188
|
# Dyndoc.warn "do_m";p blck
|
data/lib/dyndoc/init/config.rb
CHANGED
@@ -19,7 +19,7 @@ module Dyndoc
|
|
19
19
|
}
|
20
20
|
|
21
21
|
require 'logger'
|
22
|
-
@@dyn_logger =
|
22
|
+
@@dyn_logger = nil
|
23
23
|
|
24
24
|
def Dyndoc.cfg_dir
|
25
25
|
@@cfg_dir
|
@@ -29,10 +29,18 @@ module Dyndoc
|
|
29
29
|
Settings[:cfg_dyn]
|
30
30
|
end
|
31
31
|
|
32
|
+
def Dyndoc.add_logger
|
33
|
+
@@dyn_logger = Logger.new(@@cfg_dir[:log_file], 7, 1048576)
|
34
|
+
end
|
35
|
+
|
32
36
|
def Dyndoc.logger
|
33
37
|
@@dyn_logger
|
34
38
|
end
|
35
39
|
|
40
|
+
def Dyndoc.logger_info(txt)
|
41
|
+
@@dyn_logger.info(txt)
|
42
|
+
end
|
43
|
+
|
36
44
|
@@dyn_block={}
|
37
45
|
|
38
46
|
def Dyndoc.dyn_block
|
data/share/julia/dynArray.jl
CHANGED
@@ -1,21 +1,24 @@
|
|
1
|
-
|
1
|
+
|
2
2
|
|
3
3
|
module Dyndoc
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
|
6
|
+
using Main.Ruby
|
7
|
+
|
8
|
+
import Base.setindex!,Base.getindex,Base.IO,Base.show #,Base.showarray
|
9
|
+
import Main.Ruby.start,Main.Ruby.stop,Main.Ruby.run,Main.Ruby.alive
|
7
10
|
|
8
11
|
export DynVector,DynArray,getindex,setindex!,show,Vector,sync,getkey
|
9
12
|
|
10
13
|
# this is just a wrapper of Vector type with update of all connected vectors
|
11
|
-
# when change on the vector occurs
|
14
|
+
# when change on the vector occurs
|
12
15
|
|
13
16
|
|
14
|
-
|
17
|
+
mutable struct DynVector
|
15
18
|
ary::Vector
|
16
|
-
key::
|
19
|
+
key::String
|
17
20
|
|
18
|
-
DynVector(a::Vector,k::
|
21
|
+
#DynVector(a::Vector,k::String)=(x=new();x.ary=a;x.key=k;x)
|
19
22
|
end
|
20
23
|
|
21
24
|
function getindex(dynvect::DynVector,i::Integer)
|
@@ -26,35 +29,34 @@ end
|
|
26
29
|
function setindex!(dynvect::DynVector,value,i::Integer)
|
27
30
|
dynvect.ary[i]=value
|
28
31
|
## println("inisde vect:",Ruby.alive())
|
29
|
-
if Ruby.alive()
|
30
|
-
Ruby.run("Dyndoc::Vector[\""*dynvect.key*"\"].sync(:jl)")
|
32
|
+
if Ruby.alive()
|
33
|
+
Ruby.run("Dyndoc::Vector[\""*dynvect.key*"\"].sync(:jl)")
|
31
34
|
end
|
32
35
|
end
|
33
36
|
|
34
|
-
show(io::IO,dynvect::DynVector)=
|
37
|
+
show(io::IO,dynvect::DynVector)=show(io,dynvect.ary)
|
35
38
|
|
36
39
|
# gather all the julia vectors connected to dyndoc.
|
37
40
|
|
38
|
-
|
41
|
+
mutable struct DynArray
|
39
42
|
vars::Dict
|
40
|
-
|
41
43
|
DynArray()=(x=new();x.vars=Dict();x)
|
42
44
|
end
|
43
45
|
|
44
46
|
global const Vec=DynArray()
|
45
47
|
|
46
|
-
function getindex(dynary::DynArray,key::
|
48
|
+
function getindex(dynary::DynArray,key::String)
|
47
49
|
#println("getindex(" * key * ")->todo")
|
48
50
|
#if Ruby.alive()
|
49
51
|
#println("getindex(" * key * ")->to sync")
|
50
|
-
#Ruby.run("Dyndoc::Vector[\""*key*"\"].sync_to(:jl)")
|
52
|
+
#Ruby.run("Dyndoc::Vector[\""*key*"\"].sync_to(:jl)")
|
51
53
|
#end
|
52
54
|
#println("getindex(" * key * ")->done")
|
53
55
|
dynary.vars[key]
|
54
56
|
end
|
55
57
|
getindex(dynary::DynArray,key::Symbol)=getindex(dynary,string(key))
|
56
58
|
|
57
|
-
function setindex!(dynary::DynArray,value,key::
|
59
|
+
function setindex!(dynary::DynArray,value,key::String)
|
58
60
|
#println("key:" * key)
|
59
61
|
#println(keys(dynary.vars))
|
60
62
|
if(haskey(dynary.vars,key))
|
@@ -65,7 +67,7 @@ function setindex!(dynary::DynArray,value,key::ASCIIString)
|
|
65
67
|
end
|
66
68
|
|
67
69
|
## println("inside array:",Ruby.alive())
|
68
|
-
|
70
|
+
|
69
71
|
if Ruby.alive()
|
70
72
|
Ruby.run("Dyndoc::Vector[\""*key*"\"].sync(:jl)")
|
71
73
|
end
|
@@ -73,13 +75,13 @@ end
|
|
73
75
|
setindex!(dynary::DynArray,value,key::Symbol)=setindex!(dynary,value,string(key))
|
74
76
|
|
75
77
|
|
76
|
-
sync(dynary::DynArray,key::
|
78
|
+
sync(dynary::DynArray,key::String)= if Ruby.alive() Ruby.run("Dyndoc::Vector[\""*key*"\"].sync(:jl)") end
|
77
79
|
|
78
80
|
show(io::IO,dynary::DynArray)=show(io,dynary.vars)
|
79
81
|
|
80
82
|
# NO MORE KEY WITH THE FORM "<name>@<ruby id object>"
|
81
83
|
# function getkey(dynary::DynArray,k::Symbol)
|
82
|
-
# for k2 in keys(dynary.vars)
|
84
|
+
# for k2 in keys(dynary.vars)
|
83
85
|
# if split(k2,"@")[1] == string(k)
|
84
86
|
# return k2
|
85
87
|
# end
|
@@ -90,4 +92,3 @@ show(io::IO,dynary::DynArray)=show(io,dynary.vars)
|
|
90
92
|
# setindex!(dynary::DynArray,value,key::Symbol)=setindex!(dynary,value,getkey(dynary,key))
|
91
93
|
|
92
94
|
end
|
93
|
-
|
data/share/julia/dyndoc.jl
CHANGED
@@ -1,87 +1,55 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
# res=Any[] #Dict{AbstractString,Any}()
|
7
|
-
# for l=split(cmd,"\n")
|
8
|
-
# #println("l => ",l)
|
9
|
-
# push!(cmd0,l)
|
10
|
-
# pcmd0=Base.parse_input_line(join(cmd0,"\n"))
|
11
|
-
# #print(join(cmd0,"\n")*":");println(pcmd0)
|
12
|
-
# add = typeof(pcmd0)==Expr && pcmd0.head == :continue
|
13
|
-
# if !add
|
14
|
-
# #print("ici:")
|
15
|
-
# #println(Base.eval(pcmd0))
|
16
|
-
# push!(res,(join(cmd0,"\n"),eval(pcmd0)))
|
17
|
-
# cmd0=AbstractString[]
|
18
|
-
# end
|
19
|
-
# #println(res)
|
20
|
-
# end
|
21
|
-
# res
|
22
|
-
# end
|
23
|
-
|
24
|
-
module DyndocSandbox
|
25
|
-
importall Ruby
|
26
|
-
importall Dyndoc
|
1
|
+
module Dyndoc2Sandbox
|
2
|
+
import Main.Ruby.run,Main.Ruby.alive
|
3
|
+
import Main.Dyndoc.DynVector,Main.Dyndoc.DynArray,Main.Dyndoc.getindex,Main.Dyndoc.setindex!,Main.Dyndoc.show,Main.Dyndoc.Vector,Main.Dyndoc.sync,Main.Dyndoc.getkey
|
4
|
+
using InteractiveUtils
|
5
|
+
end
|
27
6
|
|
28
|
-
# Replace OUTPUT_STREAM references so we can capture output.
|
29
|
-
OUTPUT_STREAM = IOBuffer()
|
30
|
-
print(x) = Base.print(OUTPUT_STREAM, x)
|
31
|
-
println(x) = Base.println(OUTPUT_STREAM, x)
|
32
7
|
|
33
|
-
|
34
|
-
|
35
|
-
emit(mime, data) = push!(MIME_OUTPUT, (mime, data))
|
8
|
+
function replace_dyndoc2sandbox(txt)
|
9
|
+
replace(replace(txt,"Main.Dyndoc2Sandbox." => ""),"Main.Dyndoc2Sandbox" => "Main")
|
36
10
|
end
|
37
11
|
|
38
|
-
function
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
12
|
+
function echo_repl_julia(res)
|
13
|
+
# buf = IOBuffer();
|
14
|
+
# td = TextDisplay(buf);
|
15
|
+
# display(td, res);
|
16
|
+
# takebuf_string(buf)
|
17
|
+
#println(typeof(res))
|
18
|
+
replace_dyndoc2sandbox(repr("text/plain",res))
|
44
19
|
end
|
45
20
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
21
|
+
## Rmk: The process is based on what is done in weave.jl (src/run.jl)
|
22
|
+
getstdout() = stdout #Base.STDOUT
|
23
|
+
function capture_output_expr(expr)
|
24
|
+
#oldSTDOUT = STDOUT
|
25
|
+
oldSTDOUT = getstdout()
|
26
|
+
out = nothing
|
27
|
+
obj = nothing
|
28
|
+
rw, wr = redirect_stdout()
|
29
|
+
reader = @async read(rw, String) # @async readstring(rw)
|
30
|
+
try
|
31
|
+
obj = Core.eval(Dyndoc2Sandbox, expr)
|
32
|
+
obj != nothing && display(obj)
|
33
|
+
#catch E
|
34
|
+
# throw_errors && throw(E)
|
35
|
+
# display(E)
|
36
|
+
# @warn("ERROR: $(typeof(E)) occurred, including output in Weaved document")
|
37
|
+
|
38
|
+
finally
|
39
|
+
redirect_stdout(oldSTDOUT)
|
40
|
+
close(wr)
|
41
|
+
out = fetch(reader) #wait(reader)
|
42
|
+
close(rw)
|
43
|
+
end
|
44
|
+
return (obj, out)
|
52
45
|
end
|
53
46
|
|
54
|
-
|
55
|
-
# module DyndocSandbox
|
56
|
-
# # Copied from Gadfly.jl/src/weave.jl
|
57
|
-
# # Replace OUTPUT_STREAM references so we can capture output.
|
58
|
-
# OUTPUT_STREAM = IOString()
|
59
|
-
# print(x) = Base.print(OUTPUT_STREAM, x)
|
60
|
-
# println(x) = Base.println(OUTPUT_STREAM, x)
|
61
|
-
|
62
|
-
# function eval(expr)
|
63
|
-
# result = try
|
64
|
-
# Base.eval(DyndocSandbox, expr)
|
65
|
-
# seek(DyndocSandbox.OUTPUT_STREAM, 0)
|
66
|
-
# output = takebuf_string(DyndocSandbox.OUTPUT_STREAM)
|
67
|
-
# truncate(DyndocSandbox.OUTPUT_STREAM, 0)
|
68
|
-
# output
|
69
|
-
# catch e
|
70
|
-
# io = IOBuffer()
|
71
|
-
# print(io, "ERROR: ")
|
72
|
-
# Base.error_show(io, e)
|
73
|
-
# tmp = bytestring(io)
|
74
|
-
# close(io)
|
75
|
-
# tmp
|
76
|
-
# end
|
77
|
-
# result
|
78
|
-
# end
|
79
|
-
# end
|
80
|
-
|
81
|
-
function capture_julia(cmd::AbstractString)
|
47
|
+
function capture_output_julia(cmd::AbstractString)
|
82
48
|
add,cmd0=true,AbstractString[]
|
83
49
|
res=Any[] #Dict{AbstractString,Any}()
|
84
50
|
#println(cmd)
|
51
|
+
#cmd=replace(cmd,r"\$","\$")
|
52
|
+
|
85
53
|
for l=split(cmd,"\n")
|
86
54
|
#println("l => ",l)
|
87
55
|
push!(cmd0,l)
|
@@ -91,17 +59,18 @@ function capture_julia(cmd::AbstractString)
|
|
91
59
|
if !add
|
92
60
|
#print("ici:")
|
93
61
|
#println(Base.eval(pcmd0))
|
94
|
-
result,error = "",""
|
62
|
+
result,error,out = "","",""
|
95
63
|
try
|
96
|
-
result=
|
64
|
+
result,out=capture_output_expr(pcmd0)
|
97
65
|
catch e
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
66
|
+
#io = IOBuffer()
|
67
|
+
#print(io, "ERROR: ")
|
68
|
+
#Base.error_show(io, e)
|
69
|
+
error = "ERROR: $(sprint(showerror,e))"
|
70
|
+
#close(io)
|
71
|
+
end
|
72
|
+
println(l)
|
73
|
+
push!(res,(join(cmd0,"\n"), echo_repl_julia(result),replace_dyndoc2sandbox(out),replace_dyndoc2sandbox(error),""))
|
105
74
|
cmd0=AbstractString[]
|
106
75
|
end
|
107
76
|
#println(res)
|
@@ -0,0 +1,192 @@
|
|
1
|
+
#cmd="a=1\n(a)\nfor i in 1:3\nprintln(i)\nend"
|
2
|
+
|
3
|
+
# # Unused! See capture_julia
|
4
|
+
# function capture_cmd(cmd::AbstractString)
|
5
|
+
# add,cmd0=true,AbstractString[]
|
6
|
+
# res=Any[] #Dict{AbstractString,Any}()
|
7
|
+
# for l=split(cmd,"\n")
|
8
|
+
# #println("l => ",l)
|
9
|
+
# push!(cmd0,l)
|
10
|
+
# pcmd0=Base.parse_input_line(join(cmd0,"\n"))
|
11
|
+
# #print(join(cmd0,"\n")*":");println(pcmd0)
|
12
|
+
# add = typeof(pcmd0)==Expr && pcmd0.head == :continue
|
13
|
+
# if !add
|
14
|
+
# #print("ici:")
|
15
|
+
# #println(Base.eval(pcmd0))
|
16
|
+
# push!(res,(join(cmd0,"\n"),eval(pcmd0)))
|
17
|
+
# cmd0=AbstractString[]
|
18
|
+
# end
|
19
|
+
# #println(res)
|
20
|
+
# end
|
21
|
+
# res
|
22
|
+
# end
|
23
|
+
|
24
|
+
module DyndocSandbox
|
25
|
+
import Main.Ruby.start,Main.Ruby.stop,Main.Ruby.run,Main.Ruby.alive
|
26
|
+
import Main.Dyndoc.DynVector,Main.Dyndoc.DynArray,Main.Dyndoc.getindex,Main.Dyndoc.setindex!,Main.Dyndoc.show,Main.Dyndoc.Vector,Main.Dyndoc.sync,Main.Dyndoc.getkey
|
27
|
+
|
28
|
+
# Replace OUTPUT_STREAM references so we can capture output.
|
29
|
+
OUTPUT_STREAM = IOBuffer()
|
30
|
+
print(x) = Base.print(OUTPUT_STREAM, x)
|
31
|
+
println(x) = Base.println(OUTPUT_STREAM, x)
|
32
|
+
|
33
|
+
# Output
|
34
|
+
MIME_OUTPUT = Array(Tuple, 0)
|
35
|
+
emit(mime, data) = push!(MIME_OUTPUT, (mime, data))
|
36
|
+
end
|
37
|
+
|
38
|
+
function get_stdout_iobuffer()
|
39
|
+
#seek(DyndocSandbox.OUTPUT_STREAM, 0)
|
40
|
+
#jl4rb_out =
|
41
|
+
takebuf_string(DyndocSandbox.OUTPUT_STREAM)
|
42
|
+
#truncate(DyndocSandbox.OUTPUT_STREAM, 0)
|
43
|
+
#jl4rb_out
|
44
|
+
end
|
45
|
+
|
46
|
+
function get_stderr_iobuffer()
|
47
|
+
#jl4rb_out = takebuf_string(STDERR.buffer)
|
48
|
+
#jl4rb_out
|
49
|
+
## THIS FAILS WHEN DYNDOC DAEMONIZED SO AUTOMATIC EMPTY RESULT for now
|
50
|
+
## MAYBE TO DELETE SOON!
|
51
|
+
""
|
52
|
+
end
|
53
|
+
|
54
|
+
# export weave
|
55
|
+
# module DyndocSandbox
|
56
|
+
# # Copied from Gadfly.jl/src/weave.jl
|
57
|
+
# # Replace OUTPUT_STREAM references so we can capture output.
|
58
|
+
# OUTPUT_STREAM = IOString()
|
59
|
+
# print(x) = Base.print(OUTPUT_STREAM, x)
|
60
|
+
# println(x) = Base.println(OUTPUT_STREAM, x)
|
61
|
+
|
62
|
+
# function eval(expr)
|
63
|
+
# result = try
|
64
|
+
# Base.eval(DyndocSandbox, expr)
|
65
|
+
# seek(DyndocSandbox.OUTPUT_STREAM, 0)
|
66
|
+
# output = takebuf_string(DyndocSandbox.OUTPUT_STREAM)
|
67
|
+
# truncate(DyndocSandbox.OUTPUT_STREAM, 0)
|
68
|
+
# output
|
69
|
+
# catch e
|
70
|
+
# io = IOBuffer()
|
71
|
+
# print(io, "ERROR: ")
|
72
|
+
# Base.error_show(io, e)
|
73
|
+
# tmp = bytestring(io)
|
74
|
+
# close(io)
|
75
|
+
# tmp
|
76
|
+
# end
|
77
|
+
# result
|
78
|
+
# end
|
79
|
+
# end
|
80
|
+
|
81
|
+
|
82
|
+
function capture_julia(cmd::AbstractString)
|
83
|
+
add,cmd0=true,AbstractString[]
|
84
|
+
res=Any[] #Dict{AbstractString,Any}()
|
85
|
+
#println(cmd)
|
86
|
+
#cmd=replace(cmd,r"\$","\$")
|
87
|
+
# for standard redirection
|
88
|
+
##OUT: (outRead, outWrite) = redirect_stdout()
|
89
|
+
for l=split(cmd,"\n")
|
90
|
+
#println("l => ",l)
|
91
|
+
push!(cmd0,l)
|
92
|
+
pcmd0=Base.parse_input_line(join(cmd0,"\n"))
|
93
|
+
#print(join(cmd0,"\n")*":");println(pcmd0)
|
94
|
+
add = typeof(pcmd0)==Expr && pcmd0.head == :incomplete
|
95
|
+
if !add
|
96
|
+
#print("ici:")
|
97
|
+
#println(Base.eval(pcmd0))
|
98
|
+
result,error = "",""
|
99
|
+
try
|
100
|
+
result=eval(DyndocSandbox, pcmd0)
|
101
|
+
catch e
|
102
|
+
#io = IOBuffer()
|
103
|
+
#print(io, "ERROR: ")
|
104
|
+
#Base.error_show(io, e)
|
105
|
+
error = "Error: $(string(e))"
|
106
|
+
#close(io)
|
107
|
+
end
|
108
|
+
|
109
|
+
##OUT: data_out = readavailable(outRead)
|
110
|
+
|
111
|
+
##OUT: push!(res,(join(cmd0,"\n"),echo_repl_julia(result),get_stdout_iobuffer(),data_out,error,get_stderr_iobuffer()))
|
112
|
+
push!(res,(join(cmd0,"\n"),echo_repl_julia(result),get_stdout_iobuffer(),error,get_stderr_iobuffer()))
|
113
|
+
cmd0=AbstractString[]
|
114
|
+
end
|
115
|
+
#println(res)
|
116
|
+
end
|
117
|
+
##OUT: close(outWrite);close(outRead)
|
118
|
+
res
|
119
|
+
end
|
120
|
+
|
121
|
+
|
122
|
+
module Dyndoc2Sandbox
|
123
|
+
import Main.Ruby.run,Main.Ruby.alive
|
124
|
+
import Main.Dyndoc.DynVector,Main.Dyndoc.DynArray,Main.Dyndoc.getindex,Main.Dyndoc.setindex!,Main.Dyndoc.show,Main.Dyndoc.Vector,Main.Dyndoc.sync,Main.Dyndoc.getkey
|
125
|
+
end
|
126
|
+
|
127
|
+
function echo_repl_julia(res)
|
128
|
+
buf = IOBuffer();
|
129
|
+
td = TextDisplay(buf);
|
130
|
+
display(td, res);
|
131
|
+
takebuf_string(buf)
|
132
|
+
end
|
133
|
+
|
134
|
+
## Rmk: The process is based on what is done in weave.jl (src/run.jl)
|
135
|
+
getstdout() = stdout #Base.STDOUT
|
136
|
+
function capture_output_expr(expr)
|
137
|
+
#oldSTDOUT = STDOUT
|
138
|
+
oldSTDOUT = getstdout()
|
139
|
+
out = nothing
|
140
|
+
obj = nothing
|
141
|
+
rw, wr = redirect_stdout()
|
142
|
+
reader = @async read(rw, String) # @async readstring(rw)
|
143
|
+
try
|
144
|
+
obj = eval(Dyndoc2Sandbox, expr)
|
145
|
+
obj != nothing && display(obj)
|
146
|
+
catch E
|
147
|
+
throw_errors && throw(E)
|
148
|
+
display(E)
|
149
|
+
@warn("ERROR: $(typeof(E)) occurred, including output in Weaved document")
|
150
|
+
|
151
|
+
finally
|
152
|
+
redirect_stdout(oldSTDOUT)
|
153
|
+
close(wr)
|
154
|
+
out = wait(reader)
|
155
|
+
close(rw)
|
156
|
+
end
|
157
|
+
return (obj, out)
|
158
|
+
end
|
159
|
+
|
160
|
+
function capture_output_julia(cmd::AbstractString)
|
161
|
+
add,cmd0=true,AbstractString[]
|
162
|
+
res=Any[] #Dict{AbstractString,Any}()
|
163
|
+
#println(cmd)
|
164
|
+
#cmd=replace(cmd,r"\$","\$")
|
165
|
+
|
166
|
+
for l=split(cmd,"\n")
|
167
|
+
#println("l => ",l)
|
168
|
+
push!(cmd0,l)
|
169
|
+
pcmd0=Base.parse_input_line(join(cmd0,"\n"))
|
170
|
+
#print(join(cmd0,"\n")*":");println(pcmd0)
|
171
|
+
add = typeof(pcmd0)==Expr && pcmd0.head == :incomplete
|
172
|
+
if !add
|
173
|
+
#print("ici:")
|
174
|
+
#println(Base.eval(pcmd0))
|
175
|
+
result,error,out = "","",""
|
176
|
+
try
|
177
|
+
result,out=capture_output_expr(pcmd0)
|
178
|
+
catch e
|
179
|
+
#io = IOBuffer()
|
180
|
+
#print(io, "ERROR: ")
|
181
|
+
#Base.error_show(io, e)
|
182
|
+
error = "Error: $(string(e))"
|
183
|
+
#close(io)
|
184
|
+
end
|
185
|
+
|
186
|
+
push!(res,(join(cmd0,"\n"),echo_repl_julia(result),out,error,""))
|
187
|
+
cmd0=AbstractString[]
|
188
|
+
end
|
189
|
+
#println(res)
|
190
|
+
end
|
191
|
+
res
|
192
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
|
2
|
+
## Inspired from the excellent weave.jl
|
3
|
+
|
4
|
+
using Compat
|
5
|
+
|
6
|
+
#Contains report global properties
|
7
|
+
mutable struct DyndocReport <: AbstractDisplay
|
8
|
+
#cwd::AbstractString
|
9
|
+
#basename::AbstractString
|
10
|
+
#formatdict::Dict{Symbol,Any}
|
11
|
+
#pending_code::AbstractString
|
12
|
+
#cur_result::AbstractString
|
13
|
+
#rich_output::AbstractString
|
14
|
+
fignum::Int
|
15
|
+
figures::Array{AbstractString}
|
16
|
+
#term_state::Symbol
|
17
|
+
#cur_chunk
|
18
|
+
mimetypes::Array{AbstractString}
|
19
|
+
# first_plot::Bool
|
20
|
+
#header_script::String
|
21
|
+
#throw_errors::Bool
|
22
|
+
end
|
23
|
+
|
24
|
+
#function Report(cwd, basename, formatdict, mimetypes, throw_errors)
|
25
|
+
# Report(cwd, basename, formatdict, "", "", "", 1, AbstractString[], :text, nothing,
|
26
|
+
# mimetypes, true, "", throw_errors)
|
27
|
+
#end
|
28
|
+
|
29
|
+
|
30
|
+
#Default mimetypes in order, can be overridden for some inside `run method` formats
|
31
|
+
const default_mime_types = ["image/svg+xml", "image/png", "text/html", "text/plain"]
|
32
|
+
#const default_mime_types = ["image/png", "image/svg+xml", "text/html", "text/plain"]
|
33
|
+
#From IJulia as a reminder
|
34
|
+
#const supported_mime_types = [ "text/html", "text/latex", "image/svg+xml", "image/png", "image/jpeg", "text/plain", "text/markdown" ]
|
35
|
+
|
36
|
+
function Base.display(report::DyndocReport, data)
|
37
|
+
#Set preferred mimetypes for report based on format
|
38
|
+
for m in report.mimetypes
|
39
|
+
if showable(m, data)
|
40
|
+
try
|
41
|
+
if !istextmime(m)
|
42
|
+
Compat.invokelatest(display, report, m, data)
|
43
|
+
elseif report.cur_chunk.options[:term]
|
44
|
+
Compat.invokelatest(display, report, "text/plain", data)
|
45
|
+
else
|
46
|
+
Compat.invokelatest(display, report, m, data)
|
47
|
+
end
|
48
|
+
catch e
|
49
|
+
throw(e)
|
50
|
+
@warn("Failed to display data in \"$m\" format")
|
51
|
+
continue
|
52
|
+
end
|
53
|
+
break
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
function Base.display(report::DyndocReport, m::MIME"image/png", data)
|
59
|
+
figname = add_figure(report, data, m, ".png")
|
60
|
+
end
|
61
|
+
|
62
|
+
function Base.display(report::DyndocReport, m::MIME"image/svg+xml", data)
|
63
|
+
figname = add_figure(report, data, m, ".svg")
|
64
|
+
end
|
65
|
+
|
66
|
+
function Base.display(report::DyndocReport, m::MIME"application/pdf", data)
|
67
|
+
figname = add_figure(report, data, m, ".pdf")
|
68
|
+
end
|
69
|
+
|
70
|
+
#Text is written to stdout, called from "term" mode chunks
|
71
|
+
function Base.display(report::DyndocReport, m::MIME"text/plain", data)
|
72
|
+
io = PipeBuffer()
|
73
|
+
show(IOContext(io, :limit => true), m, data)
|
74
|
+
flush(io)
|
75
|
+
s = read(io, String)
|
76
|
+
close(io)
|
77
|
+
println(s)
|
78
|
+
end
|
79
|
+
|
80
|
+
function Base.display(report::DyndocReport, m::MIME"text/plain", data::Exception)
|
81
|
+
println("Error: " * sprint(showerror, data))
|
82
|
+
end
|
83
|
+
|
84
|
+
function Base.display(report::DyndocReport, m::MIME"text/html", data::Exception)
|
85
|
+
report.rich_output = sprint(show, m, data)
|
86
|
+
end
|
87
|
+
|
88
|
+
function Base.show(io, m::MIME"text/html", data::Exception)
|
89
|
+
println(io ,"<pre class=\"julia-error\">")
|
90
|
+
println(io, Markdown.htmlesc("ERROR: " * sprint(showerror, data)))
|
91
|
+
println(io ,"</pre>")
|
92
|
+
end
|
93
|
+
|
94
|
+
#Catch "rich_output"
|
95
|
+
function Base.display(report::DyndocReport, m::MIME"text/html", data)
|
96
|
+
s = repr(m, data)
|
97
|
+
report.rich_output *= "\n" * s
|
98
|
+
end
|
99
|
+
|
100
|
+
#Catch "rich_output"
|
101
|
+
function Base.display(report::DyndocReport, m::MIME"text/markdown", data)
|
102
|
+
s = repr(m, data)
|
103
|
+
report.rich_output *= "\n" * s
|
104
|
+
end
|
105
|
+
|
106
|
+
function Base.display(report::DyndocReport, m::MIME"text/latex", data)
|
107
|
+
s = repr(m, data)
|
108
|
+
report.rich_output *= "\n" * s
|
109
|
+
end
|
110
|
+
|
111
|
+
"""Add saved figure name to results and return the name"""
|
112
|
+
function add_figure(report::DyndocReport, data, m, ext)
|
113
|
+
chunk = report.cur_chunk
|
114
|
+
full_name, rel_name = get_figname(report, chunk, ext = ext)
|
115
|
+
|
116
|
+
open(full_name, "w") do io
|
117
|
+
if ext == ".pdf"
|
118
|
+
write(io, repr(m, data))
|
119
|
+
else
|
120
|
+
show(io, m, data)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
push!(report.figures, rel_name)
|
125
|
+
report.fignum += 1
|
126
|
+
return full_name
|
127
|
+
end
|
data/share/julia/ruby.jl
CHANGED
@@ -1,28 +1,28 @@
|
|
1
1
|
|
2
2
|
|
3
3
|
module Ruby
|
4
|
-
|
5
|
-
librb=Libdl.dlopen(("JULIA_RUBYLIB_PATH" in keys(ENV)) ? ENV["JULIA_RUBYLIB_PATH"] : "libruby")
|
4
|
+
using Libdl
|
5
|
+
librb=Libdl.dlopen(("JULIA_RUBYLIB_PATH" in keys(ENV)) ? ENV["JULIA_RUBYLIB_PATH"] : "/usr/lib/libruby")
|
6
6
|
|
7
7
|
export start,stop,run,alive
|
8
8
|
|
9
9
|
global ruby_alive=false
|
10
10
|
|
11
11
|
function start()
|
12
|
-
ccall(Libdl.dlsym(librb,:ruby_init),
|
13
|
-
ccall(Libdl.dlsym(librb,:ruby_init_loadpath),
|
12
|
+
ccall(Libdl.dlsym(librb,:ruby_init),Cvoid,())
|
13
|
+
ccall(Libdl.dlsym(librb,:ruby_init_loadpath),Cvoid,())
|
14
14
|
ruby_alive=true
|
15
15
|
end
|
16
16
|
|
17
17
|
function stop()
|
18
|
-
ccall(Libdl.dlsym(librb,:ruby_finalize),
|
18
|
+
ccall(Libdl.dlsym(librb,:ruby_finalize),Cvoid,())
|
19
19
|
ruby_alive=false
|
20
20
|
end
|
21
21
|
|
22
22
|
function run(code::AbstractString)
|
23
23
|
state=1 #not modified then
|
24
24
|
##println(code)
|
25
|
-
res=ccall(Libdl.dlsym(librb,:rb_eval_string_protect),Ptr{UInt64},(Ptr{UInt8},
|
25
|
+
res=ccall(Libdl.dlsym(librb,:rb_eval_string_protect),Ptr{UInt64},(Ptr{UInt8},Ref{UInt32}),string(code),state)
|
26
26
|
return nothing
|
27
27
|
end
|
28
28
|
|
metadata
CHANGED
@@ -1,98 +1,63 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dyndoc-ruby-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2
|
4
|
+
version: 1.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CQLS
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: configliere
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0.4'
|
20
|
-
- -
|
20
|
+
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 0.4.18
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- - ~>
|
27
|
+
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0.4'
|
30
|
-
- -
|
30
|
+
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 0.4.18
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: ultraviolet
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- -
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '1.0'
|
40
|
-
- - '>='
|
37
|
+
- - ">="
|
41
38
|
- !ruby/object:Gem::Version
|
42
39
|
version: 1.0.0
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '1.0'
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- -
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '1.0'
|
50
|
-
- - '>='
|
47
|
+
- - ">="
|
51
48
|
- !ruby/object:Gem::Version
|
52
49
|
version: 1.0.0
|
53
|
-
|
54
|
-
|
50
|
+
- - "~>"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '1.0'
|
53
|
+
description: " Provide templating in text document.\n"
|
55
54
|
email: rdrouilh@gmail.com
|
56
55
|
executables: []
|
57
56
|
extensions: []
|
58
57
|
extra_rdoc_files: []
|
59
58
|
files:
|
60
|
-
-
|
61
|
-
-
|
62
|
-
- lib/dyndoc/base/filter/call.rb
|
63
|
-
- lib/dyndoc/base/filter/filter_mngr.rb
|
64
|
-
- lib/dyndoc/base/filter/server.rb
|
65
|
-
- lib/dyndoc/base/filters.rb
|
66
|
-
- lib/dyndoc/base/helpers.rb
|
67
|
-
- lib/dyndoc/base/helpers/core.rb
|
68
|
-
- lib/dyndoc/base/helpers/parser.rb
|
69
|
-
- lib/dyndoc/base/scanner.rb
|
70
|
-
- lib/dyndoc/base/tags.rb
|
71
|
-
- lib/dyndoc/base/tags/keys_mngr.rb
|
72
|
-
- lib/dyndoc/base/tags/part_tag.rb
|
73
|
-
- lib/dyndoc/base/tags/tag_mngr.rb
|
74
|
-
- lib/dyndoc/base/tags/user_tag.rb
|
75
|
-
- lib/dyndoc/base/tmpl.rb
|
76
|
-
- lib/dyndoc/base/tmpl/eval.rb
|
77
|
-
- lib/dyndoc/base/tmpl/extension.rb
|
78
|
-
- lib/dyndoc/base/tmpl/manager.rb
|
79
|
-
- lib/dyndoc/base/tmpl/oop.rb
|
80
|
-
- lib/dyndoc/base/tmpl/parse_do.rb
|
81
|
-
- lib/dyndoc/base/tmpl/rbenvir.rb
|
82
|
-
- lib/dyndoc/base/utils.rb
|
83
|
-
- lib/dyndoc/common/dynArray.rb
|
84
|
-
- lib/dyndoc/common/file.rb
|
85
|
-
- lib/dyndoc/common/init.rb
|
86
|
-
- lib/dyndoc/common/tilt.rb
|
87
|
-
- lib/dyndoc/common/utils.rb
|
88
|
-
- lib/dyndoc/common/uv.rb
|
89
|
-
- lib/dyndoc/init/config.rb
|
90
|
-
- lib/dyndoc/init/home.rb
|
91
|
-
- lib/dyndoc/plugins/tex.rb
|
92
|
-
- lib/dyndoc/plugins/tex/beamer.rb
|
93
|
-
- lib/dyndoc/plugins/tex/tex_eval.rb
|
94
|
-
- lib/dyndoc/plugins/tex/tex_parse_do.rb
|
95
|
-
- lib/dyndoc/plugins/tex/tex_user_tag.rb
|
59
|
+
- dyndoc/Dyn/.postload
|
60
|
+
- dyndoc/Dyn/.preload
|
96
61
|
- dyndoc/Dyn/After.dyn
|
97
62
|
- dyndoc/Dyn/Base.dyn
|
98
63
|
- dyndoc/Dyn/Minimum.dyn
|
@@ -130,6 +95,8 @@ files:
|
|
130
95
|
- dyndoc/Style/Text/StdAlias.dyn
|
131
96
|
- dyndoc/Style/Text/StdTex.dyn
|
132
97
|
- dyndoc/Style/Text/Txt.dyn
|
98
|
+
- dyndoc/Tex/.postload
|
99
|
+
- dyndoc/Tex/.preload
|
133
100
|
- dyndoc/Tex/10pt_tmpl.tex
|
134
101
|
- dyndoc/Tex/11pt_tmpl.tex
|
135
102
|
- dyndoc/Tex/12pt_tmpl.tex
|
@@ -178,26 +145,58 @@ files:
|
|
178
145
|
- dyndoc/Tools/Web/TabBar.dyn
|
179
146
|
- dyndoc/Tools/Web/Ttm.dyn
|
180
147
|
- dyndoc/Tools/Web/Txtl.dyn
|
181
|
-
-
|
182
|
-
-
|
183
|
-
-
|
148
|
+
- dyndoc/Tools/julia/Fig.dyn
|
149
|
+
- lib/dyndoc-core.rb
|
150
|
+
- lib/dyndoc/base/envir.rb
|
151
|
+
- lib/dyndoc/base/filter/call.rb
|
152
|
+
- lib/dyndoc/base/filter/filter_mngr.rb
|
153
|
+
- lib/dyndoc/base/filter/server.rb
|
154
|
+
- lib/dyndoc/base/filters.rb
|
155
|
+
- lib/dyndoc/base/helpers.rb
|
156
|
+
- lib/dyndoc/base/helpers/core.rb
|
157
|
+
- lib/dyndoc/base/helpers/parser.rb
|
158
|
+
- lib/dyndoc/base/scanner.rb
|
159
|
+
- lib/dyndoc/base/tags.rb
|
160
|
+
- lib/dyndoc/base/tags/keys_mngr.rb
|
161
|
+
- lib/dyndoc/base/tags/part_tag.rb
|
162
|
+
- lib/dyndoc/base/tags/tag_mngr.rb
|
163
|
+
- lib/dyndoc/base/tags/user_tag.rb
|
164
|
+
- lib/dyndoc/base/tmpl.rb
|
165
|
+
- lib/dyndoc/base/tmpl/eval.rb
|
166
|
+
- lib/dyndoc/base/tmpl/extension.rb
|
167
|
+
- lib/dyndoc/base/tmpl/manager.rb
|
168
|
+
- lib/dyndoc/base/tmpl/oop.rb
|
169
|
+
- lib/dyndoc/base/tmpl/parse_do.rb
|
170
|
+
- lib/dyndoc/base/tmpl/rbenvir.rb
|
171
|
+
- lib/dyndoc/base/utils.rb
|
172
|
+
- lib/dyndoc/common/dynArray.rb
|
173
|
+
- lib/dyndoc/common/file.rb
|
174
|
+
- lib/dyndoc/common/init.rb
|
175
|
+
- lib/dyndoc/common/tilt.rb
|
176
|
+
- lib/dyndoc/common/utils.rb
|
177
|
+
- lib/dyndoc/common/uv.rb
|
178
|
+
- lib/dyndoc/init/config.rb
|
179
|
+
- lib/dyndoc/init/home.rb
|
180
|
+
- lib/dyndoc/plugins/tex.rb
|
181
|
+
- lib/dyndoc/plugins/tex/beamer.rb
|
182
|
+
- lib/dyndoc/plugins/tex/tex_eval.rb
|
183
|
+
- lib/dyndoc/plugins/tex/tex_parse_do.rb
|
184
|
+
- lib/dyndoc/plugins/tex/tex_user_tag.rb
|
184
185
|
- share/R/dyndocMsys2.R
|
185
186
|
- share/R/dyndocTools.R
|
186
187
|
- share/R/test.R
|
187
188
|
- share/R/tools/dynArray.R
|
188
189
|
- share/R/tools/dynCapture.R
|
189
190
|
- share/R/tools/dynMsys2.R
|
190
|
-
-
|
191
|
-
- dyndoc
|
192
|
-
-
|
193
|
-
-
|
194
|
-
-
|
195
|
-
- dyndoc/Tools/.DS_Store
|
196
|
-
- dyndoc/Tools/Web/.DS_Store
|
191
|
+
- share/julia/dynArray.jl
|
192
|
+
- share/julia/dyndoc.jl
|
193
|
+
- share/julia/dyndocOLD.jl
|
194
|
+
- share/julia/dynreport.jl
|
195
|
+
- share/julia/ruby.jl
|
197
196
|
homepage: http://cqls.upmf-grenoble.fr
|
198
197
|
licenses:
|
199
198
|
- MIT
|
200
|
-
- GPL-2
|
199
|
+
- GPL-2.0
|
201
200
|
metadata: {}
|
202
201
|
post_install_message:
|
203
202
|
rdoc_options: []
|
@@ -205,18 +204,17 @@ require_paths:
|
|
205
204
|
- lib
|
206
205
|
required_ruby_version: !ruby/object:Gem::Requirement
|
207
206
|
requirements:
|
208
|
-
- -
|
207
|
+
- - ">="
|
209
208
|
- !ruby/object:Gem::Version
|
210
209
|
version: '0'
|
211
210
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
212
211
|
requirements:
|
213
|
-
- -
|
212
|
+
- - ">="
|
214
213
|
- !ruby/object:Gem::Version
|
215
214
|
version: '0'
|
216
215
|
requirements:
|
217
216
|
- none
|
218
|
-
|
219
|
-
rubygems_version: 2.0.14.1
|
217
|
+
rubygems_version: 3.0.6
|
220
218
|
signing_key:
|
221
219
|
specification_version: 4
|
222
220
|
summary: R and Ruby in text document
|
data/dyndoc/.DS_Store
DELETED
Binary file
|
data/dyndoc/Tools/.DS_Store
DELETED
Binary file
|
data/dyndoc/Tools/Web/.DS_Store
DELETED
Binary file
|