dyndoc-ruby-core 1.2.6 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/dyndoc/Tools/julia/Fig.dyn +28 -0
- data/lib/dyndoc-core.rb +5 -1
- data/lib/dyndoc/base/filter/filter_mngr.rb +3 -3
- data/lib/dyndoc/base/filter/server.rb +59 -23
- data/lib/dyndoc/base/scanner.rb +12 -10
- data/lib/dyndoc/base/tmpl/eval.rb +9 -7
- data/lib/dyndoc/base/tmpl/manager.rb +9 -6
- data/lib/dyndoc/base/tmpl/parse_do.rb +62 -33
- data/lib/dyndoc/base/utils.rb +1 -1
- data/share/julia/dynArray.jl +10 -8
- 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 +5 -5
- metadata +68 -67
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 37c974a007f31e6b20f6b08a58059b0bc9fa3985f0c1942d827cc9790e562186
|
4
|
+
data.tar.gz: d1dd34fd772846afa17963341fcb13d54fc66452a1370efe5c146b707cb361b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 50a41020a4dd69fe0d261b416f80e6a8d3a78728599564850f65542fd64f5f1e8f8459d3e567edb3c6306789e70d587674fa822e09a4a55cc1ba73d17c6852c5
|
7
|
+
data.tar.gz: 9f0f7cf7f5f39015606e2c2c14bbfea6fb24b118b9a8222414e1e17bffc9eb1d5ba1b9213658e9055f07a1fb7d80e4ef4084f0756fed008684bfacdeaac9f3b2
|
@@ -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,9 @@ 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.parse_rescue', :type => :boolean, :default => true
|
34
|
+
Settings.define 'cfg_dyn.parse_rescue_mode', :type => Symbol, :default => :simple
|
35
|
+
Settings.define 'cfg_dyn.ruby_only', :type => :boolean, :default => false
|
33
36
|
|
34
37
|
Settings.define 'cfg_dyn.dyndoc_session', :type => Symbol, :default => :normal #or :interactive
|
35
38
|
|
@@ -44,6 +47,7 @@ Settings.define 'cfg_dyn.devel_mode', :type=> Symbol, :default=> :none
|
|
44
47
|
Settings.define 'cfg_dyn.ruby_debug', :type=> Symbol, :default=> :none
|
45
48
|
|
46
49
|
Settings.define 'cfg_dyn.model_doc', :default => "default"
|
50
|
+
Settings.define 'cfg_dyn.exec_mode', :default => "no"
|
47
51
|
Settings.define 'cfg_dyn.format_doc', :default => :tex
|
48
52
|
Settings.define 'cfg_dyn.pandoc_filter', :default => ""
|
49
53
|
|
@@ -61,7 +65,7 @@ require 'dyndoc/init/config'
|
|
61
65
|
Dyndoc.init_dyndoc_library_path
|
62
66
|
Dyndoc.init_rootDoc
|
63
67
|
Dyndoc.add_logger
|
64
|
-
Dyndoc.logger.info("dyndoc-core loaded!")
|
68
|
+
## Dyndoc.logger.info("dyndoc-core loaded!")
|
65
69
|
## Dyndoc.logger.info(".dyndoc.yml: "+File.join(ENV["HOME"],".dyndoc.yml"))
|
66
70
|
|
67
71
|
CqlsDoc=Dyndoc #for compatibity
|
@@ -395,7 +395,7 @@ module Dyndoc
|
|
395
395
|
when "@"
|
396
396
|
return txt if @mode==:pre
|
397
397
|
res=CallFilter.output(txt,self)
|
398
|
-
when "#","##"
|
398
|
+
when "#","##","%"
|
399
399
|
#p @envir
|
400
400
|
#p @envir.output(txt,@mode,@escape)
|
401
401
|
#p @envir.output(in_type+"{"+txt2+"}",@mode,@escape)
|
@@ -575,7 +575,7 @@ module Dyndoc
|
|
575
575
|
else
|
576
576
|
res.to_s
|
577
577
|
end
|
578
|
-
when "=","@=","#=","##=" ,"none="
|
578
|
+
when "=","@=","#=","%=","##=" ,"none="
|
579
579
|
#puts "convert [=]";p res
|
580
580
|
if res.is_a? Array
|
581
581
|
res.join(",")
|
@@ -587,7 +587,7 @@ module Dyndoc
|
|
587
587
|
"%Q{"+res2+"}"
|
588
588
|
end
|
589
589
|
end
|
590
|
-
when "","@","#","##","none","#F"
|
590
|
+
when "","@","#","%","##","none","#F"
|
591
591
|
if res.is_a? Array
|
592
592
|
res.join(",")
|
593
593
|
else
|
@@ -93,7 +93,9 @@ module Dyndoc
|
|
93
93
|
end
|
94
94
|
|
95
95
|
rescue SyntaxError
|
96
|
-
|
96
|
+
|
97
|
+
$outRbError="RbServer syntax error in: "+code
|
98
|
+
puts $outRbError
|
97
99
|
raise SystemError if Dyndoc.cfg_dyn[:dyndoc_mode]==:normal and Dyndoc.cfg_dyn[:ruby_debug]!=:none
|
98
100
|
if Dyndoc.cfg_dyn[:dyndoc_mode]!=:normal
|
99
101
|
$dyn_logger.write("\nERROR Ruby Syntax:\n"+code+"\n")
|
@@ -104,10 +106,30 @@ module Dyndoc
|
|
104
106
|
out
|
105
107
|
end
|
106
108
|
|
109
|
+
def RbServer.redirect
|
110
|
+
if block_given?
|
111
|
+
require 'stringio'
|
112
|
+
begin
|
113
|
+
# redirect output to StringIO objects
|
114
|
+
oldstdout,oldstderr=$stdout, $stderr
|
115
|
+
stdout, stderr = StringIO.new, StringIO.new
|
116
|
+
$stdout, $stderr = stdout, stderr
|
117
|
+
yield
|
118
|
+
ensure
|
119
|
+
# restore normal output
|
120
|
+
$stdout, $stderr = oldstdout,oldstderr
|
121
|
+
end
|
122
|
+
return {stdout: stdout.string, stderr: stderr.string}
|
123
|
+
else
|
124
|
+
return {stdout: "", stderr: ""}
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
107
129
|
def RbServer.capture(code,rbEnvir=nil)
|
108
130
|
|
109
131
|
require 'stringio'
|
110
|
-
|
132
|
+
require 'ostruct'
|
111
133
|
|
112
134
|
begin
|
113
135
|
# redirect output to StringIO objects
|
@@ -273,10 +295,10 @@ module Dyndoc
|
|
273
295
|
short[0]=short[0].to_i
|
274
296
|
short[2]=short[2].to_i
|
275
297
|
## Dyndoc.warn "short",[short,txt]
|
276
|
-
(0...short[0]).each{|i| txtout << txt[i].force_encoding("utf-8") << "\n"}
|
298
|
+
(0...short[0]).each{|i| txtout << (txt[i] ? txt[i].force_encoding("utf-8") : "") << "\n"}
|
277
299
|
txtout << short[1] << "\n"
|
278
300
|
le = txt.length
|
279
|
-
((le-short[2])...le).each{|i| txtout << txt[i].force_encoding("utf-8") << "\n"}
|
301
|
+
((le-short[2])...le).each{|i| txtout << (txt[i] ? txt[i].force_encoding("utf-8") : "") << "\n"}
|
280
302
|
else
|
281
303
|
txt=txt.map{|e| e.force_encoding("utf-8")}
|
282
304
|
txtout << txt.join("\n")
|
@@ -808,59 +830,73 @@ module Dyndoc
|
|
808
830
|
@@initVerb=nil
|
809
831
|
|
810
832
|
def JLServer.initVerb
|
811
|
-
Julia << "include(
|
833
|
+
Julia << "Base.include(@__MODULE__,\""+File.join(Dyndoc.cfg_dir[:gem_path],"share","julia","dyndoc.jl")+"\")"
|
834
|
+
Julia << "push!(Libdl.DL_LOAD_PATH,\"/usr/lib\");push!(Libdl.DL_LOAD_PATH,\"/usr/local/lib\")"
|
812
835
|
@@initVerb=true
|
813
836
|
end
|
814
837
|
|
815
838
|
def JLServer.inputsAndOutputs(code,hash=true)
|
816
839
|
JLServer.initVerb unless @@initVerb
|
817
|
-
|
818
|
-
|
819
|
-
|
840
|
+
Dyndoc.logger.info("JLServer.inputsAndOutputs: "+code.strip)
|
841
|
+
res=(Julia << 'capture_output_julia('+code.strip.inspect.gsub("$","\\$")+')')
|
842
|
+
Dyndoc.logger.info("JLServer.inputsAndOutputs:"+res.inspect)
|
843
|
+
res.map!{|input,output,output2,error,error2|
|
820
844
|
{:input=>input,:output=>output,:output2=>output2,:error=>error,:error2=>error2}
|
821
845
|
} if res and hash
|
822
846
|
res
|
823
847
|
end
|
824
848
|
|
825
849
|
def JLServer.eval(code)
|
826
|
-
Julia.eval(code)
|
850
|
+
Julia.eval("capture_output_julia("+code.strip.inspect.gsub("$","\\$")+")")
|
827
851
|
end
|
828
852
|
|
829
853
|
def JLServer.output(code,opts={})
|
830
|
-
opts={:print=>true}.merge(opts)
|
854
|
+
#opts={:print=>true}.merge(opts)
|
831
855
|
## Dyndoc.warn "jlserv",code+"|"+Julia.eval(code,:print=>opts[:print]).to_s
|
832
|
-
Julia.eval(code,:print=>opts[:print]).to_s
|
856
|
+
#Julia.eval(code,:print=>opts[:print]).to_s
|
857
|
+
|
858
|
+
res=JLServer.inputsAndOutputs(code,false)
|
859
|
+
Dyndoc.warn "jlserv.output",[code,res]
|
860
|
+
return "" unless res
|
861
|
+
res=res.map{|input,output,output2,error,error2|
|
862
|
+
#Dyndoc.warn "output",output
|
863
|
+
output
|
864
|
+
}
|
865
|
+
res.length==0 ? "" : res[-1]
|
833
866
|
end
|
834
867
|
|
835
868
|
def JLServer.outputs(code,opts={}) #may have more than one lines in code
|
836
869
|
## Dyndoc.warn "JLServer.outputs opts",opts
|
837
|
-
##
|
870
|
+
##
|
871
|
+
Dyndoc.warn "JLServer code",code
|
872
|
+
res=JLServer.inputsAndOutputs(code,false)
|
838
873
|
if opts[:block]
|
839
|
-
res=JLServer.inputsAndOutputs(code,false)
|
840
874
|
return "" unless res
|
841
875
|
res.map{|input,output,output2,error,error2|
|
842
876
|
## Dyndoc.warn "output2",output2
|
843
|
-
|
877
|
+
output
|
844
878
|
}.join("\n")
|
845
|
-
else
|
846
|
-
JLServer.eval(code)
|
847
879
|
end
|
848
880
|
end
|
849
881
|
|
850
882
|
def JLServer.echo(code,prompt="julia> ",tab=2)
|
851
883
|
out=""
|
852
884
|
res=JLServer.inputsAndOutputs(code)
|
853
|
-
##
|
885
|
+
##
|
886
|
+
Dyndoc.warn "JLServer",res
|
887
|
+
return "Error when executing: "+code unless res
|
854
888
|
res.each do |cmd|
|
855
889
|
## Dyndoc.warn "input",cmd
|
856
890
|
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"
|
891
|
+
out << "\n" unless cmd[:input].strip[-1]==";"
|
858
892
|
## Dyndoc.warn "output1",out
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
893
|
+
if cmd[:error]==""
|
894
|
+
out << ((cmd[:output]=="nothing" or (cmd[:input].strip)[-1]==";") ? "" : cmd[:output])
|
895
|
+
out << ((cmd[:output2]=="nothing" or (cmd[:input].strip)[-1]==";") ? "" : cmd[:output2]) #cmd[:output2]
|
896
|
+
else
|
897
|
+
out << cmd[:error]
|
898
|
+
end
|
899
|
+
out << (cmd[:output]=="nothing" ? "" : "\n")
|
864
900
|
## Dyndoc.warn "output3",out
|
865
901
|
end
|
866
902
|
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
|
@@ -232,7 +232,7 @@ module Dyndoc
|
|
232
232
|
class CallScanner < Scanner
|
233
233
|
|
234
234
|
@@type[:call]={
|
235
|
-
:start=>/\\?(
|
235
|
+
:start=>/\\?(?:\#|\%|\#\#|@|#F|#R|#r|\:R|\:r|#Rb|#rb|\:|\:Rb|\:rb|\:jl|#jl)?\{/,
|
236
236
|
:stop=> /\\?\}/,
|
237
237
|
:mode=>{:start=>-1,:stop=>0,:length=>1},
|
238
238
|
:escape_start=>['\{'], #doivent être parsable dans start
|
@@ -257,11 +257,11 @@ module Dyndoc
|
|
257
257
|
}
|
258
258
|
=end
|
259
259
|
@@type[:dtag] = {
|
260
|
-
:start=>'\{[
|
261
|
-
:stop=> '\[[
|
262
|
-
:atom=>{:match=>/(\{[
|
260
|
+
:start=>'\{[\#\@\%]([\w\:\|-]*[<>]?[=?!><]?(\.\w*)?)\]',
|
261
|
+
:stop=> '\[[\#\@\%]([\w\:\|-]*[<>]?[=?!><]?)\}',
|
262
|
+
:atom=>{:match=>/(\{[\#\@\%][\w\:\|]*)([\#\@\%]\})/,:replace=>{2=>"][#}"}},
|
263
263
|
:block=> '\]', #no longer |
|
264
|
-
:keyword=>['\[[
|
264
|
+
:keyword=>['\[[\#\%\@]','\]'],
|
265
265
|
:mode=>{:start=>0,:stop=>-1,:length=>1}
|
266
266
|
}
|
267
267
|
|
@@ -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,:"=",:"-",:+,:"%",:"tex=",:"tex+",:"md=",:"md+",:"adoc=",:"adoc+",:"html=",:"html+",:"rb=",:"rb+",:"R=",:"R+",:"jl=",:"jl+",:"txtl=",:"txtl+"]
|
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=>{
|
@@ -620,11 +621,12 @@ module Dyndoc
|
|
620
621
|
end
|
621
622
|
##Dyndoc.warn "to scan", @scan.string[@scan.pos..-1]
|
622
623
|
##Dyndoc.warn "tag_reg",[blocktag_reg,tag_reg]
|
624
|
+
##p ["tag_reg",[blocktag_reg,tag_reg]]
|
623
625
|
end
|
624
626
|
if (tag_keyword and (@scan.check_until(blocktag_reg))) #or (!@named_tags.empty? and check_until_for_named_tags)
|
625
627
|
check_until_for_named_tags unless @named_tags.empty?
|
626
628
|
key=@scan[2]
|
627
|
-
##Dyndoc.warn "keyword",[key,@scan[0],@scan[1],@scan[2]]
|
629
|
+
##Dyndoc.warn p ["keyword",[key.scan(tag_reg),key.scan(tag_reg)[-1],key,@scan[0],@scan[1],@scan[2]]]
|
628
630
|
##Dyndoc.warn "pre_math,tag_selected",[@scan.pre_match,@tag_selected] if key=="[#tag]"
|
629
631
|
res << find_text(from,key,inside)
|
630
632
|
@is_arg=false if @is_arg
|
@@ -634,7 +636,7 @@ module Dyndoc
|
|
634
636
|
res << (key=@tag_selected)
|
635
637
|
else
|
636
638
|
#key=tag_reg.match(key)[0]
|
637
|
-
key= key.scan(tag_reg)[
|
639
|
+
key= key.scan(tag_reg)[-1]
|
638
640
|
##Dyndoc.warn "key(AP)",key if key=="tag"
|
639
641
|
res << (key=key.to_sym) if key and !key.empty?
|
640
642
|
end
|
@@ -201,13 +201,15 @@ module Dyndoc
|
|
201
201
|
#p input
|
202
202
|
=end
|
203
203
|
# REPLACEMENT of ABOVE!
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
204
|
+
unless @libs.keys.include? tmpl
|
205
|
+
if tmpl and File.exists? tmpl
|
206
|
+
input=Dyndoc.read_content_file(tmpl)
|
207
|
+
@libs[tmpl]=input
|
208
|
+
filter.envir["_FILENAME_"]=tmpl.dup #register name of template!!!
|
209
|
+
filter.envir["_FILENAME_ORIG_"]=tmpl_orig.dup #register name of template!!!
|
210
|
+
filter.envir["_PWD_"]=File.dirname(tmpl) #register name of template!!!
|
211
|
+
txt=parse(@libs[tmpl],filter,tags)
|
212
|
+
end
|
211
213
|
end
|
212
214
|
}
|
213
215
|
end
|
@@ -89,16 +89,17 @@ module Dyndoc
|
|
89
89
|
# init rb4jl stuff
|
90
90
|
# since inside ruby, no need Ruby.start and Ruby.stop like in rb4R.
|
91
91
|
# sort of equivalent of JLServer.init_filter (but not yet defined)!
|
92
|
-
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")+ "\")"
|
93
94
|
Dyndoc.logger.info "initJulia: ruby.jl"
|
94
|
-
Julia << "include(
|
95
|
+
Julia << "Base.include(@__MODULE__,\""+File.join(Dyndoc.cfg_dir[:gem_path],"share","julia","dynArray.jl")+ "\")"
|
95
96
|
Dyndoc.logger.info "initJulia: dynArray.jl"
|
96
97
|
#-| To debug ruby.jl and dynArray.jl => uncomment below and commnt above
|
97
98
|
# Julia << "include(\""+File.expand_path("~/Github/dyndoc/share/julia/ruby.jl")+"\")"
|
98
99
|
# Julia << "include(\""+File.expand_path("~/Github/dyndoc/share/julia/dynArray.jl")+"\")"
|
99
|
-
Julia << "using Dyndoc"
|
100
|
+
Julia << "using Main.Dyndoc"
|
100
101
|
Dyndoc.logger.info "initJulia: using Dyndoc"
|
101
|
-
Julia << "Ruby.alive(true)"
|
102
|
+
Julia << "Dyndoc.Ruby.alive(true)"
|
102
103
|
#Julia << "global const _dynArray=DynArray()"
|
103
104
|
Dyndoc.logger.info "Julia initialized inside dyndoc!"
|
104
105
|
|
@@ -120,8 +121,10 @@ module Dyndoc
|
|
120
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]=="+"))
|
121
122
|
=end
|
122
123
|
## default system root appended
|
123
|
-
|
124
|
-
|
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
|
125
128
|
rbenvir_init(binding)
|
126
129
|
@rEnvir=["Global"]
|
127
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
|
|
@@ -26,10 +28,11 @@ module Dyndoc
|
|
26
28
|
class TemplateManager
|
27
29
|
|
28
30
|
@@depth=0
|
31
|
+
@@outError=""
|
29
32
|
|
30
33
|
@@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
34
|
## 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"}
|
35
|
+
@@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
36
|
@@cmd += @@cmdAlias.keys
|
34
37
|
|
35
38
|
def add_dtag(dtag,cmdAlias=nil)
|
@@ -87,7 +90,7 @@ module Dyndoc
|
|
87
90
|
@vars,varsOld=filterLoc.envir,@vars
|
88
91
|
Dyndoc.vars=@vars
|
89
92
|
@filter=filterLoc unless @filter ##root filter
|
90
|
-
out=""
|
93
|
+
out,$outError ="",""
|
91
94
|
#p texblock
|
92
95
|
texblock.map{|b|
|
93
96
|
#p b
|
@@ -96,33 +99,49 @@ module Dyndoc
|
|
96
99
|
cmd=@@cmdAlias[cmd] if @@cmdAlias.keys.include? cmd
|
97
100
|
#Dyndoc.warn "parse:cmd,b",[cmd,b]
|
98
101
|
@@depth+=1
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
102
|
+
## To deactivate, put it inside ~/.dyndoc.yml
|
103
|
+
if Dyndoc.cfg_dyn[:parse_rescue]
|
104
|
+
begin
|
105
|
+
## Dyndoc.warn "cmd",[cmd,b]
|
106
|
+
method("do_"+cmd).call(out,b,filterLoc)
|
107
|
+
## Dyndoc.warn [:out,out] if cmd=="eval"
|
108
|
+
rescue
|
109
|
+
$outError << "=> Leaving block depth #{@@depth}: " << "\n"
|
110
|
+
codeText = b.inspect
|
111
|
+
##Dyndoc.warn "codeText",codeText
|
112
|
+
nbChar=(Dyndoc.cfg_dyn[:nbChar_error]) ? Dyndoc.cfg_dyn[:nbChar_error] : 80
|
113
|
+
if codeText.length > nbChar
|
114
|
+
codeText=codeText[0..((nbChar*2/3).to_int)]+" ...... "+codeText[(-(nbChar/3).to_int)..-1]
|
115
|
+
end
|
116
|
+
$outError << codeText << "\n"
|
117
|
+
if $outRbError && !$outRbError.empty?
|
118
|
+
$outError << $outRbError << "\n"
|
119
|
+
$outRbError = ""
|
120
|
+
end
|
121
|
+
if @@depth==1
|
122
|
+
$outError << "=> Exiting abnormally!</code>" << "\n"
|
123
|
+
@@outError << "<pre style='background-color: #EBECE4;'><code>"+$outError+"</code></pre>" << "\n"
|
124
|
+
puts "@@outError: \n"+@@outError
|
125
|
+
#raise SystemExit
|
126
|
+
out << @@outError
|
127
|
+
@@outError=""
|
128
|
+
else
|
129
|
+
@@outError << "<pre style='background-color: #EBECE4;'><code>Dyn Runtime Error\n"+$outError+"</code></pre>"
|
130
|
+
$outError=""
|
131
|
+
if Dyndoc.cfg_dyn[:parse_rescue_mode]==:simple
|
132
|
+
out << @@outError
|
133
|
+
@@outError=""
|
134
|
+
else
|
135
|
+
raise RuntimeError, "Dyn Runtime Error"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
Dyndoc.warn "out #{@@depth} :",$outError
|
139
|
+
|
140
|
+
ensure
|
141
|
+
@@depth -= 1
|
120
142
|
end
|
121
|
-
|
122
|
-
|
123
|
-
end
|
124
|
-
###TO temporarily AVOID RESCUE MODE:
|
125
|
-
###
|
143
|
+
else
|
144
|
+
method("do_"+cmd).call(out,b,filterLoc)
|
126
145
|
end
|
127
146
|
}
|
128
147
|
##restore old partTag and vars
|
@@ -404,7 +423,7 @@ p [vars,b2]
|
|
404
423
|
if @@newBlcks.keys.include? @blckDepth[-1]
|
405
424
|
@blckName ||= []
|
406
425
|
tmp=blck[1][1].strip
|
407
|
-
@blckName << (tmp.empty? ?
|
426
|
+
@blckName << (tmp.empty? ? SecureRandom.uuid.strip : tmp)
|
408
427
|
#puts "blckNAME";p @blckName
|
409
428
|
end
|
410
429
|
|
@@ -482,7 +501,7 @@ p [vars,b2]
|
|
482
501
|
when :do,:<
|
483
502
|
i,*b2=next_block(blck,i)
|
484
503
|
parse(b2,filter) if cond_tag and cond
|
485
|
-
when :"r<",:"rb<",:"R<",:"m<",:"M<",:"jl<"
|
504
|
+
when :"r<",:"rb<",:"R<",:"m<",:"M<",:"jl<",:"sh<"
|
486
505
|
# if current_block_tag==:"jl<"
|
487
506
|
# ##p "iciiiii"
|
488
507
|
# end
|
@@ -498,7 +517,7 @@ p [vars,b2]
|
|
498
517
|
b2=[code.unshift(newblck)]
|
499
518
|
##puts "r<;rb<";p b2
|
500
519
|
filter.outType=":"+(blck[i].to_s)[0...-1]
|
501
|
-
#
|
520
|
+
#Dyndoc.warn "rb,jl,R block",filter.outType
|
502
521
|
parse(b2,filter)
|
503
522
|
filter.outType=nil
|
504
523
|
end
|
@@ -1056,7 +1075,7 @@ p [vars,b2]
|
|
1056
1075
|
when :binding
|
1057
1076
|
i,*b2=next_block(blck,i)
|
1058
1077
|
rbEnvir=b2[0][1].strip
|
1059
|
-
when :do,:<,:out,:>,:"r<",:"rb<",:"r>",:"R>",:"R<",:"r>>",:rverb,:"rb>>",:rbverb,:"jl>>",:jlverb,:"rb>",:"?",:tag,:"??",:yield,:>>,:"=",:"+",:<<,:"txtl>",:"md>",:"adoc>",:"ttm>",:"html>",:"tex>",:"_>"
|
1078
|
+
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>",:"_>"
|
1060
1079
|
code = blck[i..-1].unshift(:blck)
|
1061
1080
|
when :","
|
1062
1081
|
i,*b2=next_block(blck,i)
|
@@ -2138,6 +2157,7 @@ p call
|
|
2138
2157
|
def do_jl(tex,blck,filter)
|
2139
2158
|
return unless Dyndoc.cfg_dyn[:langs].include? :jl
|
2140
2159
|
## jlBlock stuff
|
2160
|
+
## Dyndoc.warn "do_jl",blck
|
2141
2161
|
as_default_tmpl_mngr! if
|
2142
2162
|
dynBlock=dynBlock_in_doLangBlock?(blck)
|
2143
2163
|
if dynBlock
|
@@ -2161,7 +2181,7 @@ p call
|
|
2161
2181
|
as_default_tmpl_mngr!
|
2162
2182
|
tex << JLServer.outputs(code,:block => true)
|
2163
2183
|
else
|
2164
|
-
JLServer.
|
2184
|
+
JLServer.outputs(code)
|
2165
2185
|
end
|
2166
2186
|
## revert all the stuff
|
2167
2187
|
if dynBlock
|
@@ -2171,6 +2191,15 @@ p call
|
|
2171
2191
|
filter.outType=nil
|
2172
2192
|
end
|
2173
2193
|
|
2194
|
+
def do_sh(tex,blck,filter)
|
2195
|
+
#Dyndoc.warn "do_sh: blck ";p blck[1..-1]
|
2196
|
+
filter.outType="none"
|
2197
|
+
code=parse(blck[1..-1],filter)
|
2198
|
+
%x[ #{code} ]
|
2199
|
+
#Dyndoc.warn "do_sh: code ";p code
|
2200
|
+
filter.outType=nil
|
2201
|
+
end
|
2202
|
+
|
2174
2203
|
def do_m(tex,blck,filter)
|
2175
2204
|
newblck=blck[0]
|
2176
2205
|
# Dyndoc.warn "do_m";p blck
|