dyndoc-ruby-core 1.0.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 +7 -0
- data/dyndoc/.DS_Store +0 -0
- data/dyndoc/Dyn/.postload +1 -0
- data/dyndoc/Dyn/.preload +1 -0
- data/dyndoc/Dyn/After.dyn +3 -0
- data/dyndoc/Dyn/Base.dyn +18 -0
- data/dyndoc/Dyn/Minimum.dyn +20 -0
- data/dyndoc/Model/Html/DefaultPost_html.dyn +5 -0
- data/dyndoc/Model/Html/DefaultPre_html.dyn +15 -0
- data/dyndoc/Model/Odt/DefaultPost_content.xml +3 -0
- data/dyndoc/Model/Odt/DefaultPost_tmpl_content.xml +3 -0
- data/dyndoc/Model/Odt/DefaultPre_content.xml +8 -0
- data/dyndoc/Model/Odt/DefaultPre_tmpl_content.xml +8 -0
- data/dyndoc/Model/Tex/ContentPost_tmpl.tex +1 -0
- data/dyndoc/Model/Tex/ContentPre_tmpl.tex +6 -0
- data/dyndoc/Model/Tex/DefaultPost_tmpl.tex +73 -0
- data/dyndoc/Model/Tex/DefaultPre_tmpl.tex +16 -0
- data/dyndoc/Model/Ttm/DefaultPost_tmpl.ttm +3 -0
- data/dyndoc/Model/Ttm/DefaultPre_tmpl.ttm +16 -0
- data/dyndoc/Std/Array.dyn +96 -0
- data/dyndoc/Std/Composer.dyn +38 -0
- data/dyndoc/Std/DevTag.dyn +101 -0
- data/dyndoc/Std/DynVar.dyn +23 -0
- data/dyndoc/Std/File.dyn +55 -0
- data/dyndoc/Std/Git.dyn +34 -0
- data/dyndoc/Std/List.dyn +46 -0
- data/dyndoc/Std/OOP.dyn +32 -0
- data/dyndoc/Std/Signal.dyn +18 -0
- data/dyndoc/Std/String.dyn +22 -0
- data/dyndoc/Std/Styles.dyn +1 -0
- data/dyndoc/Std/Test.dyn +282 -0
- data/dyndoc/Std/Utils.dyn +42 -0
- data/dyndoc/Std/Verb.dyn +5 -0
- data/dyndoc/Style/Notation/Math.dyn +7 -0
- data/dyndoc/Style/Notation/Stat/Classic.dyn +8 -0
- data/dyndoc/Style/Notation/Stat/Cqls.dyn +44 -0
- data/dyndoc/Style/Text/Std.dyn +5 -0
- data/dyndoc/Style/Text/StdAlias.dyn +3 -0
- data/dyndoc/Style/Text/StdTex.dyn +17 -0
- data/dyndoc/Style/Text/Txt.dyn +1 -0
- data/dyndoc/Tex/.postload +1 -0
- data/dyndoc/Tex/.preload +1 -0
- data/dyndoc/Tex/10pt_tmpl.tex +1 -0
- data/dyndoc/Tex/11pt_tmpl.tex +1 -0
- data/dyndoc/Tex/12pt_tmpl.tex +1 -0
- data/dyndoc/Tex/Article_tmpl.tex +1 -0
- data/dyndoc/Tex/Beamer.dyn_tex +35 -0
- data/dyndoc/Tex/BeamerHandout_tmpl.tex +2 -0
- data/dyndoc/Tex/Book_tmpl.tex +1 -0
- data/dyndoc/Tex/DefaultFirst_tmpl.tex +1 -0
- data/dyndoc/Tex/DefaultLast_tmpl.tex +8 -0
- data/dyndoc/Tex/Default_tmpl.tex +9 -0
- data/dyndoc/Tex/First_tmpl.tex +8 -0
- data/dyndoc/Tex/Fr_tmpl.tex +17 -0
- data/dyndoc/Tex/Header_tmpl.tex +3 -0
- data/dyndoc/Tex/InclGraph_tmpl.tex +19 -0
- data/dyndoc/Tex/InclSpatProc_tmpl.tex +70 -0
- data/dyndoc/Tex/InclSumMI_tmpl.tex +4 -0
- data/dyndoc/Tex/LargeA4_tmpl.tex +5 -0
- data/dyndoc/Tex/Last_tmpl.tex +1 -0
- data/dyndoc/Tex/Option_tmpl.tex +8 -0
- data/dyndoc/Tex/Png_tmpl.tex +1 -0
- data/dyndoc/Tex/RefCite2_tmpl.tex +16 -0
- data/dyndoc/Tex/RefCite_tmpl.tex +16 -0
- data/dyndoc/Tex/Report_tmpl.tex +1 -0
- data/dyndoc/Tex/Theorem_tmpl.tex +14 -0
- data/dyndoc/Tools/.DS_Store +0 -0
- data/dyndoc/Tools/Atom.dyn/index.dyn +42 -0
- data/dyndoc/Tools/AtomDyndocker.dyn/index.dyn +43 -0
- data/dyndoc/Tools/R/Fig.dyn +144 -0
- data/dyndoc/Tools/R/Tools.dyn +344 -0
- data/dyndoc/Tools/Tex/Beamer.dyn +204 -0
- data/dyndoc/Tools/Tex/BeamerSlide.dyn_tex +199 -0
- data/dyndoc/Tools/Tex/Pgf.dyn +115 -0
- data/dyndoc/Tools/Tex/Table.dyn +278 -0
- data/dyndoc/Tools/Tex/Tools.dyn +37 -0
- data/dyndoc/Tools/Tex/Verb.dyn +77 -0
- data/dyndoc/Tools/Web/.DS_Store +0 -0
- data/dyndoc/Tools/Web/Ace.dyn +54 -0
- data/dyndoc/Tools/Web/Code.dyn +129 -0
- data/dyndoc/Tools/Web/DHtmlX.dyn +39 -0
- data/dyndoc/Tools/Web/DataTable.dyn_html +354 -0
- data/dyndoc/Tools/Web/Html.dyn +286 -0
- data/dyndoc/Tools/Web/Html/JQuery.dyn +123 -0
- data/dyndoc/Tools/Web/Html/Styles.dyn +4 -0
- data/dyndoc/Tools/Web/JQueryTools.dyn +87 -0
- data/dyndoc/Tools/Web/Layout.dyn +86 -0
- data/dyndoc/Tools/Web/Layout/CQLS.dyn +6 -0
- data/dyndoc/Tools/Web/Layout/LJK.dyn +41 -0
- data/dyndoc/Tools/Web/TabBar.dyn +37 -0
- data/dyndoc/Tools/Web/Ttm.dyn +20 -0
- data/dyndoc/Tools/Web/Txtl.dyn +14 -0
- data/lib/dyndoc-core.rb +59 -0
- data/lib/dyndoc/base/envir.rb +541 -0
- data/lib/dyndoc/base/filter/call.rb +127 -0
- data/lib/dyndoc/base/filter/filter_mngr.rb +637 -0
- data/lib/dyndoc/base/filter/server.rb +882 -0
- data/lib/dyndoc/base/filters.rb +3 -0
- data/lib/dyndoc/base/helpers.rb +9 -0
- data/lib/dyndoc/base/helpers/core.rb +32 -0
- data/lib/dyndoc/base/helpers/parser.rb +188 -0
- data/lib/dyndoc/base/scanner.rb +886 -0
- data/lib/dyndoc/base/tags.rb +4 -0
- data/lib/dyndoc/base/tags/keys_mngr.rb +401 -0
- data/lib/dyndoc/base/tags/part_tag.rb +194 -0
- data/lib/dyndoc/base/tags/tag_mngr.rb +125 -0
- data/lib/dyndoc/base/tags/user_tag.rb +216 -0
- data/lib/dyndoc/base/tmpl.rb +6 -0
- data/lib/dyndoc/base/tmpl/eval.rb +581 -0
- data/lib/dyndoc/base/tmpl/extension.rb +337 -0
- data/lib/dyndoc/base/tmpl/manager.rb +450 -0
- data/lib/dyndoc/base/tmpl/oop.rb +57 -0
- data/lib/dyndoc/base/tmpl/parse_do.rb +2446 -0
- data/lib/dyndoc/base/tmpl/rbenvir.rb +54 -0
- data/lib/dyndoc/base/utils.rb +367 -0
- data/lib/dyndoc/common/dynArray.rb +234 -0
- data/lib/dyndoc/common/file.rb +52 -0
- data/lib/dyndoc/common/init.rb +2 -0
- data/lib/dyndoc/common/tilt.rb +149 -0
- data/lib/dyndoc/common/utils.rb +61 -0
- data/lib/dyndoc/common/uv.rb +163 -0
- data/lib/dyndoc/init/config.rb +296 -0
- data/lib/dyndoc/init/home.rb +9 -0
- data/lib/dyndoc/plugins/tex.rb +4 -0
- data/lib/dyndoc/plugins/tex/beamer.rb +208 -0
- data/lib/dyndoc/plugins/tex/tex_eval.rb +69 -0
- data/lib/dyndoc/plugins/tex/tex_parse_do.rb +25 -0
- data/lib/dyndoc/plugins/tex/tex_user_tag.rb +32 -0
- data/share/R/dyndocMsys2.R +5 -0
- data/share/R/dyndocTools.R +9 -0
- data/share/R/test.R +14 -0
- data/share/R/tools/dynArray.R +34 -0
- data/share/R/tools/dynCapture.R +84 -0
- data/share/R/tools/dynMsys2.R +54 -0
- data/share/julia/dynArray.jl +93 -0
- data/share/julia/dyndoc.jl +110 -0
- data/share/julia/ruby.jl +37 -0
- metadata +202 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
{#def]layout[#,]style[cqls][#,]code[][#rb<]p "LAYOUT!!!"[#>]{#call]layout.#{style}[#,]#{code}[#}[#def}
|
|
2
|
+
|
|
3
|
+
{#def]layout.cqls[#,]code[][#rb<]p "LAYOUT.CQLS";
|
|
4
|
+
[#=]::document.team?[Cqls]
|
|
5
|
+
[#=]::document.activity?[Statistics]
|
|
6
|
+
[#=]::document.body.header[
|
|
7
|
+
<!-- HEADER: Holds title, subtitle and header images -->
|
|
8
|
+
<div id="header">
|
|
9
|
+
<!-- top rounded corner -->
|
|
10
|
+
<img src="/images/reflection/corner_tl.gif" alt="corner" style="float:left;" />
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<!-- Site title and subTitle -->
|
|
14
|
+
<span class="title">#{document.logo?}
|
|
15
|
+
<span class="white">#{document.team?}</span> team
|
|
16
|
+
<span class="subTitle">
|
|
17
|
+
#{document.activity?}
|
|
18
|
+
</span>
|
|
19
|
+
<span>#{document.header.lang?}</span>
|
|
20
|
+
</span>
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
#{document.mainMenu?}
|
|
24
|
+
</div>
|
|
25
|
+
]
|
|
26
|
+
[#=]::document.body.footer[<div id="footer">
|
|
27
|
+
<div id="footerLeft">
|
|
28
|
+
<a href="http://fullahead.org" title="based on a design by fullahead.org" class="fullAhead"></a>{#lastmodified#}
|
|
29
|
+
</div></div>]
|
|
30
|
+
[#rb<]#p #{=document.body.header}
|
|
31
|
+
[#>]
|
|
32
|
+
#{document.body.header}
|
|
33
|
+
<div id="content">
|
|
34
|
+
#{code}
|
|
35
|
+
</div>
|
|
36
|
+
#{document.body.footer}
|
|
37
|
+
[#def}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
{#def]layout.ljk[#,]code[][#rb<]p "LAYOUT.LJK";
|
|
41
|
+
[#>]
|
|
42
|
+
<div id="container">
|
|
43
|
+
<div id="header" lang="fr">
|
|
44
|
+
<h1><a href="http://www-ljk.imag.fr/ljk.html"></a></h1>
|
|
45
|
+
</div>
|
|
46
|
+
<div id="header_en" lang="en">
|
|
47
|
+
<h1><a href="http://www-ljk.imag.fr/ljk.html"></a></h1>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<table margin="0" cellpading="0" border="0" cellspacing="0" height="100%" width="740">
|
|
51
|
+
<tbody>
|
|
52
|
+
<tr>
|
|
53
|
+
<td colspan="2" rowspan="1" align="right">
|
|
54
|
+
<div id="primary"> {#new]lang[#of]LangSwitcher[#}</div>
|
|
55
|
+
</td>
|
|
56
|
+
</tr>
|
|
57
|
+
<tr>
|
|
58
|
+
<td halign="right" style="border-right: 1px solid rgb(102, 102, 102);" valign="top" width="145">
|
|
59
|
+
<div id="nav">
|
|
60
|
+
#{document.mainMenu}
|
|
61
|
+
<b> <b> <img src="http://www-ljk.imag.fr/Images/logos.jpg" usemap="#logosOnModel" border="0">
|
|
62
|
+
<map name="logosOnModel">
|
|
63
|
+
<area shape="rect" coords="42,10,112,20" href="http://ljk.imag.fr/">
|
|
64
|
+
<area shape="rect" coords="0,26,72,69" href="http://www.cnrs.fr/">
|
|
65
|
+
<area shape="rect" coords="72,26,139,69" href="http://www.inpg.fr/">
|
|
66
|
+
<area shape="rect" coords="0,69,72,117" href="http://www.inria.fr/">
|
|
67
|
+
<area shape="rect" coords="72,69,139,117" href="http://www.ujf-grenoble.fr/">
|
|
68
|
+
<area shape="rect" coords="43,117,100,150" href="http://www.upmf-grenoble.fr/">
|
|
69
|
+
</map>
|
|
70
|
+
</b></b>
|
|
71
|
+
</div>
|
|
72
|
+
<b> <b> </b></b>
|
|
73
|
+
</td>
|
|
74
|
+
<td halign="left" valign="top">
|
|
75
|
+
<div style="text-align: center;"> </div>
|
|
76
|
+
<div id="primary" style="text-align: justify;">
|
|
77
|
+
#{code}
|
|
78
|
+
</div>
|
|
79
|
+
</td>
|
|
80
|
+
</tr>
|
|
81
|
+
</tbody>
|
|
82
|
+
</table>
|
|
83
|
+
</div>
|
|
84
|
+
[#def}
|
|
85
|
+
|
|
86
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
[#%] Initialization for LJK layout
|
|
2
|
+
[#=]::document.rsrcSrvUrl[http://sagag6.upmf-grenoble.fr]
|
|
3
|
+
[#=]::document.style[ljk]
|
|
4
|
+
[#=]::document.charset[utf-8]
|
|
5
|
+
[#=]::document.head.css_pre[nothing]
|
|
6
|
+
[#=]::document.head.css_post[JQuerySag6]
|
|
7
|
+
[#=]::document.head.css[
|
|
8
|
+
<link rel="stylesheet" type="text/css" media="all" href="http://www-ljk.imag.fr/css/ljk-V3.css">
|
|
9
|
+
<link rel="stylesheet" type="text/css" media="all"
|
|
10
|
+
href="http://www-ljk.imag.fr/Publications/Basilic/css/listpubli.css">
|
|
11
|
+
<link rel="stylesheet" type="text/css" media="all"
|
|
12
|
+
href="http://www-ljk.imag.fr/Publications/Basilic/css/publi.css">
|
|
13
|
+
<link rel="icon" href="/icones/ljk-icon.gif" type="image/x-icon">
|
|
14
|
+
<link rel="shortcut icon" href="http://www-ljk.imag.fr/icones/ljk-icon.gif"
|
|
15
|
+
type="image/x-icon">
|
|
16
|
+
<script type="text/javascript" src="http://www-ljk.imag.fr/js/EventHandler.js"></script>
|
|
17
|
+
<script type="text/javascript" src="http://www-ljk.imag.fr/js/ClearSearch.js"></script>
|
|
18
|
+
<style type="text/css">
|
|
19
|
+
.thumb {background-image: url('http://www-ljk.imag.fr/Publications/Basilic/Images/thumbImg.png');}
|
|
20
|
+
.movie {background-image: url('http://www-ljk.imag.fr/Publications/Basilic/Images/thumbMovie.png');}
|
|
21
|
+
.thumb:hover {background-image: url('http://www-ljk.imag.fr/Publications/Basilic/Images/thumbImgHover.png');}
|
|
22
|
+
</style>
|
|
23
|
+
<script src="http://www.google-analytics.com/urchin.js"
|
|
24
|
+
type="text/javascript">
|
|
25
|
+
</script>
|
|
26
|
+
<script type="text/javascript">
|
|
27
|
+
_uacct = "UA-1475170-1";
|
|
28
|
+
urchinTracker();
|
|
29
|
+
</script>
|
|
30
|
+
<style type="text/css">
|
|
31
|
+
#header_en h1, #header_en a{
|
|
32
|
+
display: block;
|
|
33
|
+
height: 156px;
|
|
34
|
+
margin: 0;
|
|
35
|
+
padding: 0;
|
|
36
|
+
background-image: url(http://www-ljk.imag.fr/icones/band-web_en.gif);
|
|
37
|
+
background-repeat: no-repeat;
|
|
38
|
+
background-color: transparent;
|
|
39
|
+
}
|
|
40
|
+
</style>
|
|
41
|
+
]
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
To initialize!!!
|
|
2
|
+
|
|
3
|
+
{#new]TabBar[#of]HtmlLoader[#code]
|
|
4
|
+
[<link rel="stylesheet" type="text/css" href="/dHtmlX/dhtmlx.css">
|
|
5
|
+
<script src="/dHtmlX/dhtmlx.js"></script>
|
|
6
|
+
<!-- link rel="stylesheet" type="text/css" href="/dhtmlx/TabBar/codebase/dhtmlxtabbar.css">
|
|
7
|
+
<script src="/dhtmlx/dhtmlxcommon.js"></script>
|
|
8
|
+
<script src="/dhtmlx/TabBar/codebase/dhtmlxtabbar.js"></script -->]
|
|
9
|
+
[#}
|
|
10
|
+
|
|
11
|
+
TabBar defined as a block!!!
|
|
12
|
+
|
|
13
|
+
{#newBlck]tabbar
|
|
14
|
+
[#blck]:pre[#=]tabbar[:{blckName[-1]}]
|
|
15
|
+
[#rb<]page_cpt=0[#>]
|
|
16
|
+
[<div id="tabbar_#{tabbar}" style="width:#{style.width}; height:#{style.height};">
|
|
17
|
+
|
|
18
|
+
<script>
|
|
19
|
+
tabbar_#{tabbar}=new dhtmlXTabBar("tabbar_#{tabbar}","top");
|
|
20
|
+
tabbar_#{tabbar}.setImagePath("/dhtmlx/TabBar/codebase/imgs/");
|
|
21
|
+
tabbar_#{tabbar}.setHrefMode("iframes-on-demand");
|
|
22
|
+
tabbar_#{tabbar}.setSkinColors("#FCFBFC","#F4F3EE");]
|
|
23
|
+
[#blck]bar
|
|
24
|
+
[#post][#>]
|
|
25
|
+
|tabbar_#{tabbar}.addTab("#{tabbar}:{page_cpt+=1}","#{page.title}","#{style.title}");
|
|
26
|
+
|tabbar_#{tabbar}.setContentHref("#{tabbar}:{page_cpt}","http://docs.google.com/gview?url=#{url}/#{page.pdf}&embedded=true");
|
|
27
|
+
[#do_code][blckMngr.next_tag;puts "ICI BAR!"]
|
|
28
|
+
[#blck]bar2
|
|
29
|
+
[#post][#>]
|
|
30
|
+
[tabbar_#{tabbar}.addTab("#{tabbar}:{page_cpt+=1}","#{page.title}","#{style.title}");
|
|
31
|
+
|tabbar_#{tabbar}.setContentHref("#{tabbar}:{page_cpt}","http://docs.google.com/gview?url=#{url}/#{page.pdf}&embedded=true");]
|
|
32
|
+
[#do_code][blckMngr.next_tag;puts "ICI"]
|
|
33
|
+
[#blck]:post[#>]
|
|
34
|
+
tabbar_#{tabbar}.setTabActive("#{tabbar}1");
|
|
35
|
+
</script>
|
|
36
|
+
</div>
|
|
37
|
+
[#}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{#def]txtl[#,]code[]
|
|
2
|
+
[#>]\begin{rawhtml}<\n>
|
|
3
|
+
[#rb>]RedCloth.new(#{=code}).to_html
|
|
4
|
+
[#>]\end{rawhtml}
|
|
5
|
+
[#def}
|
|
6
|
+
|
|
7
|
+
{#def]uvTtm[#,]code[][#,]syntax[dyndoc][#,]render[amy]
|
|
8
|
+
[#>]\begin{rawhtml}<\n>
|
|
9
|
+
[#rb>]require "uv"
|
|
10
|
+
uv_code= #{=code}.strip
|
|
11
|
+
#puts "uv code:";p uv_code;p #{=syntax}
|
|
12
|
+
Uv.parse(uv_code, "xhtml", #{=syntax}.downcase, true, #{=render})
|
|
13
|
+
[#>]<\n>\end{rawhtml}<\n>
|
|
14
|
+
[#=]::header.css_uv?[amy]
|
|
15
|
+
[#=]::header.css_uv[{#rb>](#{=header.css_uv}.split(",")+[#{=render}]).join(",")[#}]
|
|
16
|
+
[#def}
|
|
17
|
+
|
|
18
|
+
{#def]rverbUVTtm[#,]code[][#,]render[amy]
|
|
19
|
+
[#>]{#uvTtm]{#rverb]#{code}[#mode]raw[#rverb}
|
|
20
|
+
[#syntax]r[#}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{#def]uvTxtl[#,]code[][#,]syntax[dyndoc][#,]render[amy]
|
|
2
|
+
[#rb>]require "uv"
|
|
3
|
+
uv_code= #{=code}.strip
|
|
4
|
+
#puts "uv code:";p uv_code;p #{=syntax}
|
|
5
|
+
Uv.parse(uv_code, "xhtml", #{=syntax}.downcase, true, #{=render})
|
|
6
|
+
[#>]<\n>
|
|
7
|
+
[#=]::header.css_uv?[amy]
|
|
8
|
+
[#=]::header.css_uv[{#rb>](#{=header.css_uv}.split(",")+[#{=render}]).join(",")[#}]
|
|
9
|
+
[#def}
|
|
10
|
+
|
|
11
|
+
{#def]rverbUVTxtl[#,]code[][#,]render[amy]
|
|
12
|
+
[#>]<notextile>{#uvTxtl]{#rverb]#{code}[#mode]raw[#rverb}
|
|
13
|
+
[#syntax]r[#}</notextile>
|
|
14
|
+
|
data/lib/dyndoc-core.rb
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require "dyndoc/common/utils"
|
|
2
|
+
require "dyndoc/base/utils"
|
|
3
|
+
require "dyndoc/base/tmpl"
|
|
4
|
+
require "dyndoc/base/tags"
|
|
5
|
+
require "dyndoc/base/filters"
|
|
6
|
+
require "dyndoc/base/envir"
|
|
7
|
+
require "dyndoc/base/scanner"
|
|
8
|
+
require "dyndoc/plugins/tex"
|
|
9
|
+
require "dyndoc-converter"
|
|
10
|
+
require "dyndoc/base/helpers"
|
|
11
|
+
require "configliere"
|
|
12
|
+
|
|
13
|
+
Settings.use :env_var, :config_block
|
|
14
|
+
|
|
15
|
+
require 'dyndoc/init/home'
|
|
16
|
+
Settings.define 'path.dyn_home', :env_var => 'DYN_HOME', :description => "dyndoc home path", :default => Dyndoc.home
|
|
17
|
+
|
|
18
|
+
Settings.define 'cfg_dyn.etc_path_subdir', :type => Array, :default => ["path","core"]
|
|
19
|
+
|
|
20
|
+
Settings.define 'cfg_dyn.pre_tmpl', :type => Array, :default => []
|
|
21
|
+
Settings.define 'cfg_dyn.post_tmpl', :type => Array, :default => []
|
|
22
|
+
Settings.define 'cfg_dyn.part_tag', :type => Array, :default => []
|
|
23
|
+
Settings.define 'cfg_dyn.out_tag', :type => Array, :default => []
|
|
24
|
+
Settings.define 'cfg_dyn.doc_list', :type => Array, :default => []
|
|
25
|
+
Settings.define 'cfg_dyn.tag_tmpl', :type => Array, :default => []
|
|
26
|
+
Settings.define 'cfg_dyn.keys_tmpl', :type => Array, :default => []
|
|
27
|
+
Settings.define 'cfg_dyn.user_input', :type => Array, :default => []
|
|
28
|
+
Settings.define 'cfg_dyn.cmd_doc', :type => Array, :default => [:make_content,:save]
|
|
29
|
+
Settings.define 'cfg_dyn.cmd_pandoc_options', :type => Array, :default => []
|
|
30
|
+
Settings.define 'cfg_dyn.options.pdflatex_nb_pass', :type => Integer, :default => 1
|
|
31
|
+
Settings.define 'cfg_dyn.options.pdflatex_echo', :type => :boolean, :default => false
|
|
32
|
+
Settings.define 'cfg_dyn.debug', :type => :boolean, :default => false
|
|
33
|
+
|
|
34
|
+
Settings.define 'cfg_dyn.dyndoc_session', :type => Symbol, :default => :normal #or :interactive
|
|
35
|
+
|
|
36
|
+
Settings.define 'cfg_dyn.dyndoc_mode', :type => Symbol, :default => :normal
|
|
37
|
+
#Settings.define 'cfg_dyn.docker_mode', :type => :boolean, :default => false
|
|
38
|
+
Settings.define 'cfg_dyn.working_dir', :type => String, :default => ""
|
|
39
|
+
Settings.define 'cfg_dyn.root_doc', :type => String, :default => ""
|
|
40
|
+
Settings.define 'cfg_dyn.nbChar_error', :type => Integer, :default => 300
|
|
41
|
+
Settings.define 'cfg_dyn.langs', :type => Array, :default => ["R"]
|
|
42
|
+
|
|
43
|
+
Settings.define 'cfg_dyn.devel_mode', :type=> Symbol, :default=> :none
|
|
44
|
+
Settings.define 'cfg_dyn.ruby_debug', :type=> Symbol, :default=> :none
|
|
45
|
+
|
|
46
|
+
Settings.define 'cfg_dyn.model_doc', :default => "default"
|
|
47
|
+
Settings.define 'cfg_dyn.format_doc', :default => :tex
|
|
48
|
+
Settings.define 'cfg_dyn.pandoc_filter', :default => ""
|
|
49
|
+
|
|
50
|
+
Settings.finally do |c|
|
|
51
|
+
c['cfg_dyn.langs'].map!{|e| e.to_sym}
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
Settings.resolve!
|
|
55
|
+
require 'dyndoc/init/config'
|
|
56
|
+
Dyndoc.init_dyndoc_library_path
|
|
57
|
+
Dyndoc.init_rootDoc
|
|
58
|
+
|
|
59
|
+
CqlsDoc=Dyndoc #for compatibity
|
|
@@ -0,0 +1,541 @@
|
|
|
1
|
+
module Dyndoc
|
|
2
|
+
|
|
3
|
+
class Envir
|
|
4
|
+
|
|
5
|
+
attr_accessor :local, :global
|
|
6
|
+
attr_reader :curenv
|
|
7
|
+
|
|
8
|
+
def initialize(envir)
|
|
9
|
+
@local,@global=envir[:local],envir[:global]
|
|
10
|
+
@local={} unless @local
|
|
11
|
+
@global={} unless @global
|
|
12
|
+
@curenv=nil
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
@@start,@@stop=FilterManager.delim
|
|
16
|
+
|
|
17
|
+
# VarElement methods ###########################
|
|
18
|
+
def Envir.is_textElt?(e)
|
|
19
|
+
(!e.nil?) and ((e.is_a? Hash) and e[:val])
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
#same as below but including Array of textElt
|
|
23
|
+
def Envir.is_textValElt?(e)
|
|
24
|
+
(!e.nil?) and (((e.is_a? Hash) and e[:val]) or ((e.is_a? Array) and e.all?{|ee| Envir.is_textValElt?(ee)}))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def Envir.typeElt(e)
|
|
28
|
+
return :nil if e.nil?
|
|
29
|
+
return :text if (e.is_a? Hash) and e[:val]
|
|
30
|
+
return :list
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def Envir.is_listElt?(e)
|
|
34
|
+
!e.nil? and !Envir.is_textElt?(e)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def Envir.to_textElt(ary)
|
|
38
|
+
return ary if Envir.is_textElt?(ary)
|
|
39
|
+
ary=[[ary]] if ary.is_a? String
|
|
40
|
+
res={:val=>((ary[0].is_a? Array) ? ary[0] : [ary[0]] ) }
|
|
41
|
+
res[:attr]=ary[1] if ary[1]
|
|
42
|
+
return res
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def Envir.to_textVal(e)
|
|
46
|
+
if Envir.is_textElt?(e)
|
|
47
|
+
return e[:val][0]
|
|
48
|
+
else
|
|
49
|
+
out=nil
|
|
50
|
+
if e.is_a? Array
|
|
51
|
+
out=[]
|
|
52
|
+
e.map{|ee| out << Envir.to_val(ee)}
|
|
53
|
+
end
|
|
54
|
+
return out.join
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# here Hash is considered!
|
|
59
|
+
def Envir.to_val(e)
|
|
60
|
+
if Envir.is_textElt?(e)
|
|
61
|
+
return e[:val][0]
|
|
62
|
+
else
|
|
63
|
+
out=nil
|
|
64
|
+
if e.is_a? Array
|
|
65
|
+
out=[]
|
|
66
|
+
e.map{|ee| out << Envir.to_val(ee)}
|
|
67
|
+
end
|
|
68
|
+
if e.is_a? Hash
|
|
69
|
+
out={}
|
|
70
|
+
e.map{|k,ee| out[k]=Envir.to_val(ee)}
|
|
71
|
+
end
|
|
72
|
+
return out
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def Envir.to_keys(key)
|
|
77
|
+
keys=key.strip.split(".")
|
|
78
|
+
## keys=["1","ta"] -> keys=[1,"ta"]
|
|
79
|
+
keys.map!{|e| (e.to_i.to_s==e ? e.to_i : e)}
|
|
80
|
+
return keys
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def Envir.update_textElt(elt,ary)
|
|
84
|
+
tmp=Envir.to_textElt(ary)
|
|
85
|
+
elt[:val].replace(tmp[:val])
|
|
86
|
+
if tmp[:attr]
|
|
87
|
+
elt[:attr]=[] unless elt[:attr]
|
|
88
|
+
elt[:attr].replace(tmp[:attr])
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
#cur responds is Array or Hash and ary is Array
|
|
93
|
+
def Envir.update_elt(cur,key,ary)
|
|
94
|
+
#puts "in update_elt";p cur; p key; p ary
|
|
95
|
+
if Envir.is_textElt?(cur[key])
|
|
96
|
+
Envir.update_textElt(cur[key],ary)
|
|
97
|
+
else
|
|
98
|
+
cur[key]=Envir.to_textElt(ary)
|
|
99
|
+
end
|
|
100
|
+
#p cur
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# ACCESS Envir ###############################
|
|
104
|
+
|
|
105
|
+
##########################
|
|
106
|
+
# return curElt if exists? and text
|
|
107
|
+
# return curEnv if exists? and !text
|
|
108
|
+
# if text then check if the element is textElt
|
|
109
|
+
##########################
|
|
110
|
+
def Envir.elt_defined?(envir,keys,text=nil)
|
|
111
|
+
#puts "Envir.elt_defined?"; p envir; p keys; p text
|
|
112
|
+
return nil if keys.empty?
|
|
113
|
+
if keys.length==1
|
|
114
|
+
ok=envir.include?(keys[0])
|
|
115
|
+
ok &= Envir.is_textValElt?(envir[keys[0]]) if text
|
|
116
|
+
return (ok ? (text ? envir[keys[0]] : envir) : nil)
|
|
117
|
+
end
|
|
118
|
+
curEnv=envir
|
|
119
|
+
#puts "envir";p envir
|
|
120
|
+
i=0
|
|
121
|
+
curElt=nil
|
|
122
|
+
while (curElt !="ERR:[]?" and i<keys.length-1)
|
|
123
|
+
curEnv=curEnv[keys[i]]
|
|
124
|
+
i+=1
|
|
125
|
+
curElt=begin curEnv[keys[i]] rescue "ERR:[]?" end
|
|
126
|
+
#puts "curElt";p curElt
|
|
127
|
+
end
|
|
128
|
+
ok=(curElt!="ERR:[]?")
|
|
129
|
+
ok &= Envir.is_textValElt?(curElt) if text
|
|
130
|
+
#puts "envir2";p envir
|
|
131
|
+
return ((ok and curElt) ? (text ? curElt : curEnv) : nil)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def elt_defined?(keys,text=nil)
|
|
135
|
+
return ( keys_defined?(keys) ? Envir.elt_defined?(@curenv,keys,text) : nil)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def elt_and_envir(keys,text=nil)
|
|
139
|
+
return ( keys_defined?(keys) ? [Envir.elt_defined?(@curenv,keys,text),@curenv] : nil )
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# Added: 5/9/08 for use in eval_CALL!
|
|
143
|
+
# this is a replacement of Envir.get_elt! only used in eval_CALL
|
|
144
|
+
#TODO: check if it is necessary to get global variable! TO TEST!
|
|
145
|
+
def Envir.keys_defined?(envir,k)
|
|
146
|
+
return envir if Envir.elt_defined?(envir,k)
|
|
147
|
+
local,curenv=envir,nil
|
|
148
|
+
if local.include? :prev
|
|
149
|
+
begin
|
|
150
|
+
local=local[:prev]
|
|
151
|
+
curenv=local if Envir.elt_defined?(local,k)
|
|
152
|
+
end until curenv or !(local[:prev])
|
|
153
|
+
end
|
|
154
|
+
return(curenv)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
#################
|
|
158
|
+
## return the hash if the keys is defined!!!
|
|
159
|
+
## @curenv is then set
|
|
160
|
+
##################
|
|
161
|
+
def keys_defined?(k,locally=false) ##old name defined? already existing -> bug in export
|
|
162
|
+
@curenv=nil
|
|
163
|
+
@curenv=@local if Envir.elt_defined?(@local,k)
|
|
164
|
+
return(@curenv) if @curenv and locally!=:out
|
|
165
|
+
if @local.include? :prev
|
|
166
|
+
local=@local
|
|
167
|
+
begin
|
|
168
|
+
local=local[:prev]
|
|
169
|
+
@curenv=local if Envir.elt_defined?(local,k)
|
|
170
|
+
end until @curenv or !(local[:prev])
|
|
171
|
+
end
|
|
172
|
+
return(@curenv) if @curenv
|
|
173
|
+
@curenv=@global if Envir.elt_defined?(@global,k)
|
|
174
|
+
##print 'before-> ';p @curenv
|
|
175
|
+
return(@curenv) if @curenv
|
|
176
|
+
## special treatment for export in mode :out
|
|
177
|
+
if locally==:out
|
|
178
|
+
@curenv=@global
|
|
179
|
+
return nil #no element found but @curenv is fixed
|
|
180
|
+
end
|
|
181
|
+
@curenv=(locally ? @local : @global)
|
|
182
|
+
##print "key_defined?"+k+"\n";p @curenv
|
|
183
|
+
return nil
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# for debug ##############################################
|
|
187
|
+
def test_keys(keys)
|
|
188
|
+
puts "keys_defined?(#{keys.join('.')})"
|
|
189
|
+
p keys_defined?(keys)
|
|
190
|
+
puts "keys_defined?(#{keys.join('.')},true)"
|
|
191
|
+
p keys_defined?(keys,true)
|
|
192
|
+
puts "elt_defined?(#{keys.join('.')})"
|
|
193
|
+
p elt_defined?(keys)
|
|
194
|
+
puts "elt_defined?(#{keys.join('.')},true)"
|
|
195
|
+
p elt_defined?(keys,true)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
############################################
|
|
200
|
+
# curEnv[key1] exists! and curEnv[key1][key2] ???
|
|
201
|
+
# return curEnv
|
|
202
|
+
############################################
|
|
203
|
+
def Envir.get_next_elt!(res,keys,i)
|
|
204
|
+
curEnv=res[keys[i]]
|
|
205
|
+
#p i;p res;p keys[i];p keys[i+1]
|
|
206
|
+
test=begin curEnv[keys[i+1]] rescue "ERR:[]?" end
|
|
207
|
+
#p test;p curEnv
|
|
208
|
+
if test=="ERR:[]?"
|
|
209
|
+
#create it
|
|
210
|
+
if keys[i+1].is_a? Integer
|
|
211
|
+
res[keys[i]]=curEnv=[] unless res[keys[i]].is_a? Array
|
|
212
|
+
curEnv[keys[i+1]]=nil
|
|
213
|
+
elsif keys[i+1].is_a? String
|
|
214
|
+
res[keys[i]]=curEnv={} unless res[keys[i]].is_a? Hash
|
|
215
|
+
#curEnv[keys[i+1]]=nil #useless with respect to Array
|
|
216
|
+
end
|
|
217
|
+
elsif test.nil? and keys[i+1].is_a?(Integer) and !res[keys[i]].is_a?(Array)
|
|
218
|
+
## check that res[keys[i]] is of the expected type because res[1] is ok when res is a Hash!!!!
|
|
219
|
+
res[keys[i]]=curEnv=[]
|
|
220
|
+
curEnv[keys[i+1]]=nil
|
|
221
|
+
end
|
|
222
|
+
#p test;p res;p cur
|
|
223
|
+
# now cur responds to cur[keys[i+1]]
|
|
224
|
+
i += 1
|
|
225
|
+
if keys[i+1]
|
|
226
|
+
Envir.get_next_elt!(curEnv,keys,i)
|
|
227
|
+
else
|
|
228
|
+
return curEnv
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
#return curEnv and not directly curElt because of dynamic tricks! curElt is then obtained by curEnv[keys[-1]]
|
|
234
|
+
def Envir.get_elt!(envir,keys)
|
|
235
|
+
return nil if keys.empty?
|
|
236
|
+
if keys.length==1
|
|
237
|
+
return envir
|
|
238
|
+
end
|
|
239
|
+
return Envir.get_next_elt!(envir,keys,0)
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
def Envir.set_elt!(envir,keys,v)
|
|
244
|
+
curEnv=Envir.get_elt!(envir,keys)
|
|
245
|
+
#puts "in set_elt!";
|
|
246
|
+
#p envir
|
|
247
|
+
#puts "curEnv";p curEnv;p curEnv[keys[-1]];p keys;p v
|
|
248
|
+
#=begin
|
|
249
|
+
if curEnv
|
|
250
|
+
#if curEnv.respond_to? "[]" and curEnv[keys[-1]]
|
|
251
|
+
Envir.update_elt(curEnv,keys[-1],v)
|
|
252
|
+
#else
|
|
253
|
+
#create it! ADD: 06/03/08! Surtout pour les affectations par variable!
|
|
254
|
+
#curEnv[keys[-1]]=v
|
|
255
|
+
#puts "created";p keys[-1];p curEnv
|
|
256
|
+
#end
|
|
257
|
+
end
|
|
258
|
+
#puts "modif";p curEnv
|
|
259
|
+
#=end
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
def Envir.set_textElt!(envir,keys,v)
|
|
263
|
+
#only textElt since update_elt have to the curEnv!!!
|
|
264
|
+
curElt=Envir.elt_defined?(envir,keys,true)
|
|
265
|
+
if curElt
|
|
266
|
+
Envir.update_textElt(curElt,v)
|
|
267
|
+
else #otherwise create it!
|
|
268
|
+
Envir.set_elt!(envir,keys,v)
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
def set_textElt!(keys,v,envir=nil)
|
|
273
|
+
#only textElt since update_elt have to the curEnv!!!
|
|
274
|
+
curElt,envir=elt_and_envir(keys,true) unless envir
|
|
275
|
+
if curElt
|
|
276
|
+
Envir.update_textElt(curElt,v)
|
|
277
|
+
else #otherwise create it in local environment!
|
|
278
|
+
Envir.set_elt!(envir,keys,v)
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
##RMK: seems to be unused: FALSE in @vars[:key]
|
|
285
|
+
def [](key,global=nil)
|
|
286
|
+
key=key.to_s.strip
|
|
287
|
+
global,key="global",key[2..-1] if key[0,2]=="::"
|
|
288
|
+
key=key[1..-1] if key[0,1]==":"
|
|
289
|
+
keys=Envir.to_keys(key)
|
|
290
|
+
#puts "Envir:[]:keys,filter";p keys;p self
|
|
291
|
+
curElt=nil
|
|
292
|
+
if global and ((tmp=global.to_s.downcase)=="global"[0,tmp.length])
|
|
293
|
+
return curElt[:val][0] if (curElt=Envir.elt_defined?(@global,keys,true))
|
|
294
|
+
else
|
|
295
|
+
return curElt[:val][0] if (curElt=elt_defined?(keys,true))
|
|
296
|
+
end
|
|
297
|
+
return nil
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
# same as [] except that result is not necessarily a textElt
|
|
301
|
+
def extract(key)
|
|
302
|
+
key=key.to_s.strip
|
|
303
|
+
global=nil
|
|
304
|
+
global,key="global",key[2..-1] if key[0,2]=="::"
|
|
305
|
+
key=key[1..-1] if key[0,1]==":"
|
|
306
|
+
key=keyMeth(key)
|
|
307
|
+
keys=Envir.to_keys(key)
|
|
308
|
+
#puts "Envir:[]:keys,filter";p keys;p self
|
|
309
|
+
#puts "keys";p keys
|
|
310
|
+
cur=nil
|
|
311
|
+
if global
|
|
312
|
+
return Envir.to_val(cur[keys[-1]]) if (cur=Envir.elt_defined?(@global,keys))
|
|
313
|
+
else
|
|
314
|
+
return Envir.to_val(cur[keys[-1]]) if (cur=elt_defined?(keys))
|
|
315
|
+
end
|
|
316
|
+
return nil
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
def remove(key)
|
|
321
|
+
key=key.to_s.strip
|
|
322
|
+
global=nil
|
|
323
|
+
global,key="global",key[2..-1] if key[0,2]=="::"
|
|
324
|
+
key=key[1..-1] if key[0,1]==":"
|
|
325
|
+
key=keyMeth(key)
|
|
326
|
+
keys=Envir.to_keys(key)
|
|
327
|
+
#puts "Envir:[]:keys,filter";p keys;p self
|
|
328
|
+
cur=nil
|
|
329
|
+
#puts "keys";p keys
|
|
330
|
+
if global
|
|
331
|
+
#p Envir.elt_defined?(@global,keys)
|
|
332
|
+
cur.delete(keys[-1]) if (cur=Envir.elt_defined?(@global,keys))
|
|
333
|
+
else
|
|
334
|
+
#p elt_defined?(keys)
|
|
335
|
+
cur.delete(keys[-1]) if (cur=elt_defined?(keys))
|
|
336
|
+
end
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
def extract_raw(key)
|
|
340
|
+
key=key.to_s.strip
|
|
341
|
+
global=nil
|
|
342
|
+
global,key="global",key[2..-1] if key[0,2]=="::"
|
|
343
|
+
key=key[1..-1] if key[0,1]==":"
|
|
344
|
+
key=keyMeth(key)
|
|
345
|
+
keys=Envir.to_keys(key)
|
|
346
|
+
#puts "Envir:[]:keys,filter";p keys;p self
|
|
347
|
+
cur=nil
|
|
348
|
+
#puts "keys";p keys
|
|
349
|
+
if global
|
|
350
|
+
#p Envir.elt_defined?(@global,keys)
|
|
351
|
+
return cur[keys[-1]] if (cur=Envir.elt_defined?(@global,keys))
|
|
352
|
+
else
|
|
353
|
+
#p elt_defined?(keys)
|
|
354
|
+
return cur[keys[-1]] if (cur=elt_defined?(keys))
|
|
355
|
+
end
|
|
356
|
+
return nil
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
def extract_list(key,elt=nil)
|
|
360
|
+
last_return = !elt
|
|
361
|
+
elt=extract_raw(key) unless elt
|
|
362
|
+
res=[]
|
|
363
|
+
if elt
|
|
364
|
+
if Envir.is_listElt?(elt)
|
|
365
|
+
if elt.is_a? Hash
|
|
366
|
+
elt.keys.each{|k|
|
|
367
|
+
res += extract_list(key+"."+k,elt[k])
|
|
368
|
+
}
|
|
369
|
+
else #is_a? Array
|
|
370
|
+
elt.each_index{|k|
|
|
371
|
+
res += extract_list(key+"."+k.to_s,elt[k])
|
|
372
|
+
}
|
|
373
|
+
end
|
|
374
|
+
return res unless last_return
|
|
375
|
+
else
|
|
376
|
+
return [key+": ["+Envir.to_val(elt)+"]"]
|
|
377
|
+
end
|
|
378
|
+
end
|
|
379
|
+
if last_return
|
|
380
|
+
res.sort.join("\n")
|
|
381
|
+
end
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
# IMPORTANT: key may have 3 forms
|
|
385
|
+
# 1) :key or "key" -> key="key" and envir=@curenv
|
|
386
|
+
# 2) ":key" -> key="key" but envir=@local
|
|
387
|
+
# 3) "::key" -> key="key" but envir=@global
|
|
388
|
+
# TODO: extend to val a general element and not only a textElt!
|
|
389
|
+
def []=(key,val)
|
|
390
|
+
envir=nil
|
|
391
|
+
default=nil
|
|
392
|
+
key=key.to_s.strip
|
|
393
|
+
#puts "key";p key
|
|
394
|
+
default,key=true,key[1..-1] if key[0,2]=="?:" or key[0,3]=="?::"
|
|
395
|
+
envir,key=@global,key[2..-1] if key[0,2]=="::"
|
|
396
|
+
envir,key=@local,key[1..-1] if key[0,1]==":"
|
|
397
|
+
keys=Envir.to_keys(key)
|
|
398
|
+
=begin
|
|
399
|
+
puts "[]="
|
|
400
|
+
p keys
|
|
401
|
+
p envir
|
|
402
|
+
p "ici"
|
|
403
|
+
p Envir.elt_defined?(envir,keys,true) if envir
|
|
404
|
+
=end
|
|
405
|
+
if envir
|
|
406
|
+
if (curElt=Envir.elt_defined?(envir,keys,true))
|
|
407
|
+
#puts "ici";p curElt
|
|
408
|
+
Envir.update_textElt(curElt,val) unless default
|
|
409
|
+
else
|
|
410
|
+
Envir.set_textElt!(envir,keys,[val])
|
|
411
|
+
end
|
|
412
|
+
else
|
|
413
|
+
if (curElt=elt_defined?(keys,true))
|
|
414
|
+
Envir.update_textElt(curElt,val) unless default
|
|
415
|
+
else
|
|
416
|
+
#create it only locally!
|
|
417
|
+
Envir.set_textElt!(@local,keys,[val])
|
|
418
|
+
#p keys; p val
|
|
419
|
+
#p @local
|
|
420
|
+
end
|
|
421
|
+
end
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
##################
|
|
425
|
+
# get_by_mode: trick with mode consideration!
|
|
426
|
+
#################
|
|
427
|
+
def Envir.get_by_mode(mode,envirType,key,elt)
|
|
428
|
+
#puts "get_by_mode:key,elt";p key;p elt
|
|
429
|
+
case mode
|
|
430
|
+
when :pre
|
|
431
|
+
## comment : not return "#{"+key+"}" which fails --> "+key+"
|
|
432
|
+
return '#'+(envirType==:global ? '#' : '' )+'{'+key+'}' unless elt[:attr] and (elt[:attr].include? :pre)
|
|
433
|
+
when :post
|
|
434
|
+
if Envir.is_textElt?(elt) and elt[:attr] and (elt[:attr].include? :post)
|
|
435
|
+
return Envir.to_textVal(elt) #elt[:val][0]
|
|
436
|
+
end
|
|
437
|
+
end
|
|
438
|
+
return '#'+(envirType==:global ? '#' : '' )+'{'+key+'}' if Envir.is_textElt?(elt) and elt[:attr] and (elt[:attr].include? :post)
|
|
439
|
+
return Envir.to_textVal(elt) #elt[:val][0]
|
|
440
|
+
end
|
|
441
|
+
|
|
442
|
+
def Envir.extraction_make(keys)
|
|
443
|
+
key_extract=nil
|
|
444
|
+
keys,key_extract=keys[0...-1],keys[-1][1...-1] if keys[-1]=~/^\(.*\)$/
|
|
445
|
+
return [keys,key_extract]
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
def Envir.extraction_apply(val,key_extract)
|
|
449
|
+
if key_extract
|
|
450
|
+
if val.is_a? Hash
|
|
451
|
+
if key_extract[0,1]=="-"
|
|
452
|
+
key_extract=key_extract[1..-1].split(",")
|
|
453
|
+
else
|
|
454
|
+
key_extract=val.keys - key_extract.split(",")
|
|
455
|
+
end
|
|
456
|
+
#p key_extract
|
|
457
|
+
return val.reject{|k,v| key_extract.include? k}
|
|
458
|
+
elsif val.is_a? Array
|
|
459
|
+
if key_extract[0,1]=="-"
|
|
460
|
+
key_extract=(0...(val.length)).to_a-key_extract[1..-1].split(",").map{|e| e.to_i}
|
|
461
|
+
else
|
|
462
|
+
key_extract= key_extract.split(",").map{|e| e.to_i}
|
|
463
|
+
end
|
|
464
|
+
#p key_extract
|
|
465
|
+
val2=[]
|
|
466
|
+
val.each_index{|i|
|
|
467
|
+
val2 << val[i] if key_extract.include? i
|
|
468
|
+
}
|
|
469
|
+
return val2
|
|
470
|
+
end
|
|
471
|
+
else
|
|
472
|
+
return val
|
|
473
|
+
end
|
|
474
|
+
end
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
def keyMeth(key)
|
|
479
|
+
return ((@local["self"] and key[0,1]==".") ? "self"+key : key)
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
def output(w,mode=nil,escape=false)
|
|
483
|
+
curElt=nil
|
|
484
|
+
emptyElt=nil
|
|
485
|
+
## GLOBAL variable!!!
|
|
486
|
+
if w[0,2]=="##"
|
|
487
|
+
k=w[3..-2] #the key
|
|
488
|
+
k=k[1..-1] if (emptyElt=(k[0,1]=="?"))
|
|
489
|
+
keys=Envir.to_keys(k)
|
|
490
|
+
piece=nil
|
|
491
|
+
piece=Envir.get_by_mode(mode,:global,k,curElt) if (curElt=Envir.elt_defined?(@global,keys,true))
|
|
492
|
+
if piece.nil?
|
|
493
|
+
return "" if emptyElt
|
|
494
|
+
## The following added in order that if a local variable exists
|
|
495
|
+
## but not the corresponding global variable, the local variable is interpreted!
|
|
496
|
+
return "#"+Envir.get_by_mode(mode,:local,keyMeth(k),curElt) if (curElt=Envir.elt_defined?(@local,Envir.to_keys(keyMeth(k)),true))
|
|
497
|
+
return (escape ? "\\#\\#"+@@start+k+@@stop : w)
|
|
498
|
+
else
|
|
499
|
+
return piece ##(escape ? Dyndoc.escape(piece) : piece)
|
|
500
|
+
end
|
|
501
|
+
else
|
|
502
|
+
## LOCAL variable!!!
|
|
503
|
+
k=w[2..-2] #the key
|
|
504
|
+
k=k[1..-1] if (emptyElt=(k[0,1]=="?"))
|
|
505
|
+
#p k; p emptyElt
|
|
506
|
+
k=keyMeth(k)
|
|
507
|
+
keys=Envir.to_keys(k)
|
|
508
|
+
#puts "keys";p keys
|
|
509
|
+
piece=nil
|
|
510
|
+
if (curElt=Envir.elt_defined?(@local,keys,true))
|
|
511
|
+
piece=Envir.get_by_mode(mode,:local,k,curElt)
|
|
512
|
+
end
|
|
513
|
+
#puts "curElt";p curElt
|
|
514
|
+
#p self
|
|
515
|
+
#p @local
|
|
516
|
+
## except if @mode== :post !!!
|
|
517
|
+
if mode!=:post and !piece and (@local.include? :prev)
|
|
518
|
+
local=@local
|
|
519
|
+
begin
|
|
520
|
+
local=local[:prev]
|
|
521
|
+
piece=Envir.get_by_mode(mode,:local,k,curElt) if (curElt=Envir.elt_defined?(local,keys,true))
|
|
522
|
+
end until piece or !(local[:prev])
|
|
523
|
+
end
|
|
524
|
+
## special case : @mode==:post and @envir.local is the root
|
|
525
|
+
unless (mode==:post and (@local.include? :prev))
|
|
526
|
+
## if piece is nil look in the global environment
|
|
527
|
+
piece=Envir.get_by_mode(mode,:global,k,curElt) if !piece and (curElt=Envir.elt_defined?(@global, keys,true))
|
|
528
|
+
end
|
|
529
|
+
## if piece is nil the result is converted in latex in escape mode!!!
|
|
530
|
+
if piece.nil?
|
|
531
|
+
return "" if emptyElt
|
|
532
|
+
return (escape ? '\\#'+@@start+k.gsub("_",'\_')+@@stop : w)
|
|
533
|
+
else
|
|
534
|
+
return piece
|
|
535
|
+
end
|
|
536
|
+
end
|
|
537
|
+
end
|
|
538
|
+
|
|
539
|
+
end
|
|
540
|
+
|
|
541
|
+
end
|