everything in src for packaging purposes
|
@ -1,26 +0,0 @@
|
||||||
SRC=$(wildcard *.txt)
|
|
||||||
HTMLFRAGMENT=$(addsuffix .html, $(basename $(SRC)))
|
|
||||||
|
|
||||||
.SUFFIXES:
|
|
||||||
|
|
||||||
.PHONY: all clean
|
|
||||||
|
|
||||||
all: html code epydoc
|
|
||||||
# make -C ./build/code all
|
|
||||||
# make -C ./build/test all
|
|
||||||
# make -C ./build all
|
|
||||||
|
|
||||||
html: $(HTMLFRAGMENT)
|
|
||||||
|
|
||||||
%.html: %.txt
|
|
||||||
./rst2html.py --stylesheet ./build/style.css $< > ./build/$@
|
|
||||||
|
|
||||||
code:
|
|
||||||
./code2html
|
|
||||||
|
|
||||||
epydoc:
|
|
||||||
./epydoc.sh
|
|
||||||
|
|
||||||
clean:
|
|
||||||
make -C ./build clean
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
.PHONY: clean
|
|
||||||
.SUFFIXES:
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f *.html
|
|
||||||
rm -f api/*.html
|
|
||||||
make -C ./pydoc/ clean
|
|
|
@ -1 +0,0 @@
|
||||||
API's directory
|
|
Before Width: | Height: | Size: 8.3 KiB |
|
@ -1,1080 +0,0 @@
|
||||||
body,body.editor,body.body {
|
|
||||||
font: 110% "Times New Roman", Arial, Verdana, Helvetica, serif;
|
|
||||||
background: White;
|
|
||||||
color: Black;
|
|
||||||
}
|
|
||||||
|
|
||||||
a, a.reference {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
a[href]:hover { text-decoration: underline; }
|
|
||||||
|
|
||||||
img {
|
|
||||||
border: none;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
p, div.text {
|
|
||||||
text-align: left;
|
|
||||||
line-height: 1.5em;
|
|
||||||
margin: 0.5em 0em 0em 0em;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
p a:active {
|
|
||||||
color: Red;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
p img {
|
|
||||||
border: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.inlinephoto {
|
|
||||||
padding: 0;
|
|
||||||
padding-right: 1em;
|
|
||||||
padding-top: 0.7em;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr {
|
|
||||||
clear: both;
|
|
||||||
height: 1px;
|
|
||||||
color: #8CACBB;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ul {
|
|
||||||
line-height: 1.5em;
|
|
||||||
/*list-style-image: url("bullet.gif"); */
|
|
||||||
margin-left: 1.5em;
|
|
||||||
padding:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol {
|
|
||||||
line-height: 1.5em;
|
|
||||||
margin-left: 1.5em;
|
|
||||||
padding:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul a, ol a {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
dl {
|
|
||||||
}
|
|
||||||
|
|
||||||
dt {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
dd {
|
|
||||||
line-height: 1.5em;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
font-family: Times, "Times New Roman", serif;
|
|
||||||
font-style: italic;
|
|
||||||
font-size: 120%;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
color: Black;
|
|
||||||
/*background-color: #dee7ec;*/
|
|
||||||
background-color: #cccccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
padding: 1em;
|
|
||||||
border: 1px solid #8cacbb;
|
|
||||||
color: Black;
|
|
||||||
background-color: #dee7ec;
|
|
||||||
background-color: #cccccc;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.netscape4 {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* main page styles */
|
|
||||||
|
|
||||||
/*a[href]:hover { color: black; text-decoration: underline; }
|
|
||||||
a[href]:link { color: black; text-decoration: underline; }
|
|
||||||
a[href] { color: black; text-decoration: underline; }
|
|
||||||
*/
|
|
||||||
|
|
||||||
span.menu_selected {
|
|
||||||
color: black;
|
|
||||||
font: 140% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
text-decoration: none;
|
|
||||||
padding-right: 0.3em;
|
|
||||||
background-color: #cccccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
a.menu {
|
|
||||||
/*color: #3ba6ec; */
|
|
||||||
font: 140% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
text-decoration: none;
|
|
||||||
padding-right: 0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.menu[href]:visited, a.menu[href]:link{
|
|
||||||
/*color: #3ba6ec; */
|
|
||||||
font: 140% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.menu[href]:hover {
|
|
||||||
/*color: black;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
div.project_title{
|
|
||||||
/*border-spacing: 20px;*/
|
|
||||||
font: 160% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
color: #3ba6ec;
|
|
||||||
vertical-align: middle;
|
|
||||||
padding-bottom: 0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.wikicurrent {
|
|
||||||
font: 100% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
color: #3ba6ec;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
table.body {
|
|
||||||
border: 0;
|
|
||||||
/*padding: 0;
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
td.page-header-left {
|
|
||||||
padding: 5px;
|
|
||||||
/*border-bottom: 1px solid #444444;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
td.page-header-top {
|
|
||||||
padding: 0;
|
|
||||||
|
|
||||||
/*border-bottom: 1px solid #444444;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
td.sidebar {
|
|
||||||
padding: 1 0 0 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.sidebar p.classblock {
|
|
||||||
padding: 0 5 0 5;
|
|
||||||
margin: 1 1 1 1;
|
|
||||||
border: 1px solid #444444;
|
|
||||||
background-color: #eeeeee;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.sidebar p.userblock {
|
|
||||||
padding: 0 5 0 5;
|
|
||||||
margin: 1 1 1 1;
|
|
||||||
border: 1px solid #444444;
|
|
||||||
background-color: #eeeeff;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.content {
|
|
||||||
padding: 1 5 1 5;
|
|
||||||
vertical-align: top;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.ok-message {
|
|
||||||
background-color: #22bb22;
|
|
||||||
padding: 5 5 5 5;
|
|
||||||
color: white;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
p.error-message {
|
|
||||||
background-color: #bb2222;
|
|
||||||
padding: 5 5 5 5;
|
|
||||||
color: white;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
p:first-child {
|
|
||||||
margin: 0 ;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* style for forms */
|
|
||||||
table.form {
|
|
||||||
padding: 2;
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.form th {
|
|
||||||
color: #333388;
|
|
||||||
text-align: right;
|
|
||||||
vertical-align: top;
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
table.form th.header {
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: #eeeeff;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.form th.required {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.form td {
|
|
||||||
color: #333333;
|
|
||||||
empty-cells: show;
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.form td.optional {
|
|
||||||
font-weight: bold;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.form td.html {
|
|
||||||
color: #777777;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* style for lists */
|
|
||||||
table.list {
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
vertical-align: top;
|
|
||||||
padding-top: 0;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.list th {
|
|
||||||
padding: 0 4 0 4;
|
|
||||||
color: #404070;
|
|
||||||
background-color: #eeeeff;
|
|
||||||
border-right: 1px solid #404070;
|
|
||||||
border-top: 1px solid #404070;
|
|
||||||
border-bottom: 1px solid #404070;
|
|
||||||
vertical-align: top;
|
|
||||||
empty-cells: show;
|
|
||||||
}
|
|
||||||
table.list th a[href]:hover { color: #404070 }
|
|
||||||
table.list th a[href]:link { color: #404070 }
|
|
||||||
table.list th a[href] { color: #404070 }
|
|
||||||
table.list th.group {
|
|
||||||
background-color: #f4f4ff;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 120%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.list td {
|
|
||||||
padding: 0 4 0 4;
|
|
||||||
border: 0 2 0 2;
|
|
||||||
border-right: 1px solid #404070;
|
|
||||||
color: #404070;
|
|
||||||
background-color: white;
|
|
||||||
vertical-align: top;
|
|
||||||
empty-cells: show;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.list tr.normal td {
|
|
||||||
background-color: white;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.list tr.alt td {
|
|
||||||
background-color: #efefef;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.list td:first-child {
|
|
||||||
border-left: 1px solid #404070;
|
|
||||||
border-right: 1px solid #404070;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.list th:first-child {
|
|
||||||
border-left: 1px solid #404070;
|
|
||||||
border-right: 1px solid #404070;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.list tr.navigation th {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
table.list tr.navigation th:first-child {
|
|
||||||
border-right: none;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* style for message displays */
|
|
||||||
table.messages {
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.messages th.header{
|
|
||||||
padding-top: 10px;
|
|
||||||
border-bottom: 1px solid gray;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: white;
|
|
||||||
color: #707040;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.messages th {
|
|
||||||
font-weight: bold;
|
|
||||||
color: black;
|
|
||||||
text-align: left;
|
|
||||||
border-bottom: 1px solid #afafaf;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.messages td {
|
|
||||||
font-family: monospace;
|
|
||||||
background-color: #efefef;
|
|
||||||
border-bottom: 1px solid #afafaf;
|
|
||||||
color: black;
|
|
||||||
empty-cells: show;
|
|
||||||
border-right: 1px solid #afafaf;
|
|
||||||
vertical-align: top;
|
|
||||||
padding: 2 5 2 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.messages td:first-child {
|
|
||||||
border-left: 1px solid #afafaf;
|
|
||||||
border-right: 1px solid #afafaf;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* style for file displays */
|
|
||||||
table.files {
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.files th.header{
|
|
||||||
padding-top: 10px;
|
|
||||||
border-bottom: 1px solid gray;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: white;
|
|
||||||
color: #707040;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.files th {
|
|
||||||
border-bottom: 1px solid #afafaf;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.files td {
|
|
||||||
font-family: monospace;
|
|
||||||
empty-cells: show;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* style for history displays */
|
|
||||||
table.history {
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.history th.header{
|
|
||||||
padding-top: 10px;
|
|
||||||
border-bottom: 1px solid gray;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: white;
|
|
||||||
color: #707040;
|
|
||||||
font-size: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.history th {
|
|
||||||
border-bottom: 1px solid #afafaf;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: left;
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.history td {
|
|
||||||
font-size: 90%;
|
|
||||||
vertical-align: top;
|
|
||||||
empty-cells: show;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* style for class list */
|
|
||||||
table.classlist {
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.classlist th.header{
|
|
||||||
padding-top: 10px;
|
|
||||||
border-bottom: 1px solid gray;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: white;
|
|
||||||
color: #707040;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.classlist th {
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* style for class help display */
|
|
||||||
table.classhelp {
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.classhelp th {
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: left;
|
|
||||||
color: #707040;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.classhelp td {
|
|
||||||
padding: 2 2 2 2;
|
|
||||||
border: 1px solid black;
|
|
||||||
text-align: left;
|
|
||||||
vertical-align: top;
|
|
||||||
empty-cells: show;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* style for "other" displays */
|
|
||||||
table.otherinfo {
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.otherinfo th.header{
|
|
||||||
padding-top: 10px;
|
|
||||||
border-bottom: 1px solid gray;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: white;
|
|
||||||
color: #707040;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.otherinfo th {
|
|
||||||
border-bottom: 1px solid #afafaf;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
input {
|
|
||||||
border: 1px solid #8cacbb;
|
|
||||||
color: Black;
|
|
||||||
background-color: white;
|
|
||||||
vertical-align: middle;
|
|
||||||
margin-bottom: 1px; /* IE bug fix */
|
|
||||||
padding: 0.1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
select {
|
|
||||||
border: 1px solid #8cacbb;
|
|
||||||
color: Black;
|
|
||||||
background-color: white;
|
|
||||||
vertical-align: middle;
|
|
||||||
margin-bottom: 1px; /* IE bug fix */
|
|
||||||
padding: 0.1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
a.nonexistent {
|
|
||||||
color: #FF2222;
|
|
||||||
}
|
|
||||||
a.nonexistent:visited {
|
|
||||||
color: #FF2222;
|
|
||||||
}
|
|
||||||
a.external {
|
|
||||||
color: #AA6600;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
dl,ul,ol {
|
|
||||||
margin-top: 1pt;
|
|
||||||
}
|
|
||||||
tt,pre {
|
|
||||||
font-family: Lucida Console,Courier New,Courier,monotype;
|
|
||||||
font-size: 12pt;
|
|
||||||
}
|
|
||||||
pre.code {
|
|
||||||
margin-top: 8pt;
|
|
||||||
margin-bottom: 8pt;
|
|
||||||
background-color: #FFFFEE;
|
|
||||||
white-space:pre;
|
|
||||||
border-style:solid;
|
|
||||||
border-width:1pt;
|
|
||||||
border-color:#999999;
|
|
||||||
color:#111111;
|
|
||||||
padding:5px;
|
|
||||||
width:100%;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
div.diffold {
|
|
||||||
background-color: #FFFF80;
|
|
||||||
border-style:none;
|
|
||||||
border-width:thin;
|
|
||||||
width:100%;
|
|
||||||
}
|
|
||||||
div.diffnew {
|
|
||||||
background-color: #80FF80;
|
|
||||||
border-style:none;
|
|
||||||
border-width:thin;
|
|
||||||
width:100%;
|
|
||||||
}
|
|
||||||
div.message {
|
|
||||||
margin-top: 6pt;
|
|
||||||
background-color: #E8FFE8;
|
|
||||||
border-style:solid;
|
|
||||||
border-width:1pt;
|
|
||||||
border-color:#999999;
|
|
||||||
color:#440000;
|
|
||||||
padding:5px;
|
|
||||||
width:100%;
|
|
||||||
}
|
|
||||||
strong.highlight {
|
|
||||||
background-color: #FFBBBB;
|
|
||||||
/* as usual, NetScape fucks up with innocent CSS
|
|
||||||
border-color: #FFAAAA;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 1pt;
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
table.navibar {
|
|
||||||
background-color: #C8C8C8;
|
|
||||||
border-spacing: 3px;
|
|
||||||
}
|
|
||||||
td.navibar {
|
|
||||||
background-color: #E8E8E8;
|
|
||||||
vertical-align: top;
|
|
||||||
text-align: right;
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.pagename {
|
|
||||||
font-size: 140%;
|
|
||||||
color: blue;
|
|
||||||
text-align: center;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: white;
|
|
||||||
padding: 0 ;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.wikiaction, input.wikiaction {
|
|
||||||
color: black;
|
|
||||||
text-decoration: None;
|
|
||||||
text-align: center;
|
|
||||||
color: black;
|
|
||||||
/*border: 1px solid #3ba6ec; */
|
|
||||||
margin: 4px;
|
|
||||||
padding: 5;
|
|
||||||
padding-bottom: 0;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.wikiaction[href]:hover {
|
|
||||||
color: black;
|
|
||||||
text-decoration: none;
|
|
||||||
/*background-color: #dddddd; */
|
|
||||||
}
|
|
||||||
|
|
||||||
span.wikiuserpref {
|
|
||||||
padding-top: 1em;
|
|
||||||
font-size: 120%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.wikitrail {
|
|
||||||
vertical-align: bottom;
|
|
||||||
/*font-size: -1;*/
|
|
||||||
padding-top: 1em;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.wikiaction {
|
|
||||||
vertical-align: middle;
|
|
||||||
/*border-bottom: 1px solid #8cacbb;*/
|
|
||||||
padding-bottom:1em;
|
|
||||||
text-align: left;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.wikieditmenu {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
form.wikiedit {
|
|
||||||
border: 1px solid #8cacbb;
|
|
||||||
background-color: #f0f0f0;
|
|
||||||
background-color: #fabf00;
|
|
||||||
padding: 1em;
|
|
||||||
padding-right: 0em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.legenditem {
|
|
||||||
padding-top: 0.5em;
|
|
||||||
padding-left: 0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.wikitoken {
|
|
||||||
background-color: #eeeeee;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
div#contentspace h1:first-child, div.heading:first-child {
|
|
||||||
padding-top: 0;
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
div#contentspace h2:first-child {
|
|
||||||
padding-top: 0;
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* heading and paragraph text */
|
|
||||||
|
|
||||||
div.heading, h1 {
|
|
||||||
font-family: Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
background-color: #58b3ef;
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
/*color: #4893cf;*/
|
|
||||||
color: black;
|
|
||||||
padding-top: 1.0em;
|
|
||||||
padding-bottom:0.2em;
|
|
||||||
text-align: left;
|
|
||||||
margin-top: 0em;
|
|
||||||
/*margin-bottom:8pt;*/
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 115%;
|
|
||||||
border-bottom: 1px solid #8CACBB;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
h1, h2, h3, h4, h5, h6 {
|
|
||||||
color: orange;
|
|
||||||
clear: left;
|
|
||||||
font: 100% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
margin: 0;
|
|
||||||
padding-left: 0em;
|
|
||||||
padding-top: 1em;
|
|
||||||
padding-bottom: 0.2em;
|
|
||||||
/*border-bottom: 1px solid #8CACBB;*/
|
|
||||||
}
|
|
||||||
/* h1,h2 { padding-top: 0; }*/
|
|
||||||
|
|
||||||
|
|
||||||
h1 { font-size: 145%; }
|
|
||||||
h2 { font-size: 135%; }
|
|
||||||
h3 { font-size: 125%; }
|
|
||||||
h4 { font-size: 120%; }
|
|
||||||
h5 { font-size: 110%; }
|
|
||||||
h6 { font-size: 80%; }
|
|
||||||
|
|
||||||
h1 a { text-decoration: None;}
|
|
||||||
|
|
||||||
div.exception {
|
|
||||||
background-color: #bb2222;
|
|
||||||
padding: 5 5 5 5;
|
|
||||||
color: white;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
pre.exception {
|
|
||||||
font-size: 110%;
|
|
||||||
padding: 1em;
|
|
||||||
border: 1px solid #8cacbb;
|
|
||||||
color: Black;
|
|
||||||
background-color: #dee7ec;
|
|
||||||
background-color: #cccccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* defines for navgiation bar (documentation) */
|
|
||||||
|
|
||||||
|
|
||||||
div.direntry {
|
|
||||||
padding-top: 0.3em;
|
|
||||||
padding-bottom: 0.3em;
|
|
||||||
margin-right: 1em;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: #dee7ec;
|
|
||||||
font-size: 110%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.fileentry {
|
|
||||||
font-family: Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
padding-bottom: 0.3em;
|
|
||||||
white-space: nowrap;
|
|
||||||
line-height: 150%;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.fileentry {
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
span.left {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
span.right {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.navbar {
|
|
||||||
/*margin: 0;*/
|
|
||||||
font-size: 80% /*smaller*/;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: left;
|
|
||||||
/* position: fixed; */
|
|
||||||
top: 100pt;
|
|
||||||
left: 0pt; /* auto; */
|
|
||||||
width: 120pt;
|
|
||||||
/* right: auto;
|
|
||||||
right: 0pt; 2em; */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
div.history a {
|
|
||||||
/* font-size: 70%; */
|
|
||||||
}
|
|
||||||
|
|
||||||
div.wikiactiontitle {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* REST defines */
|
|
||||||
|
|
||||||
div.document {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
margin: 0;
|
|
||||||
margin-bottom: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.toplist {
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
img#pyimg {
|
|
||||||
position: absolute;
|
|
||||||
top: 4px;
|
|
||||||
left: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#navspace {
|
|
||||||
position: absolute;
|
|
||||||
top: 130px;
|
|
||||||
left: 11px;
|
|
||||||
font-size: 100%;
|
|
||||||
width: 150px;
|
|
||||||
overflow: hidden; /* scroll; */
|
|
||||||
}
|
|
||||||
|
|
||||||
div#metaspace {
|
|
||||||
position: absolute;
|
|
||||||
top: 40px;
|
|
||||||
left: 170px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#errorline {
|
|
||||||
position: relative;
|
|
||||||
top: 5px;
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#contentspace {
|
|
||||||
position: absolute;
|
|
||||||
/* font: 120% "Times New Roman", serif;*/
|
|
||||||
font: 110% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
top: 130px;
|
|
||||||
left: 170px;
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#menubar {
|
|
||||||
/* width: 400px; */
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* for the documentation page */
|
|
||||||
div#docinfoline {
|
|
||||||
position: relative;
|
|
||||||
top: 5px;
|
|
||||||
left: 0px;
|
|
||||||
|
|
||||||
/*background-color: #dee7ec; */
|
|
||||||
padding: 5pt;
|
|
||||||
padding-bottom: 1em;
|
|
||||||
color: black;
|
|
||||||
/*border-width: 1pt;
|
|
||||||
border-style: solid;*/
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
div#docnavlist {
|
|
||||||
/*background-color: #dee7ec; */
|
|
||||||
padding: 5pt;
|
|
||||||
padding-bottom: 2em;
|
|
||||||
color: black;
|
|
||||||
border-width: 1pt;
|
|
||||||
/*border-style: solid;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* text markup */
|
|
||||||
|
|
||||||
div.listtitle {
|
|
||||||
color: Black;
|
|
||||||
clear: left;
|
|
||||||
font: 120% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
margin: 0;
|
|
||||||
padding-left: 0em;
|
|
||||||
padding-top: 0em;
|
|
||||||
padding-bottom: 0.2em;
|
|
||||||
margin-right: 0.5em;
|
|
||||||
border-bottom: 1px solid #8CACBB;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.actionbox h3 {
|
|
||||||
padding-top: 0;
|
|
||||||
padding-right: 0.5em;
|
|
||||||
padding-left: 0.5em;
|
|
||||||
background-color: #fabf00;
|
|
||||||
text-align: center;
|
|
||||||
border: 1px solid black; /* 8cacbb; */
|
|
||||||
}
|
|
||||||
|
|
||||||
div.actionbox a {
|
|
||||||
display: block;
|
|
||||||
padding-bottom: 0.5em;
|
|
||||||
padding-top: 0.5em;
|
|
||||||
margin-left: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.actionbox a.history {
|
|
||||||
display: block;
|
|
||||||
padding-bottom: 0.5em;
|
|
||||||
padding-top: 0.5em;
|
|
||||||
margin-left: 0.5em;
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.actionbox {
|
|
||||||
margin-bottom: 2em;
|
|
||||||
padding-bottom: 1em;
|
|
||||||
overflow: hidden; /* scroll; */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* taken from docutils (oh dear, a bit senseless) */
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:date: $Date: 2003/01/22 22:26:48 $
|
|
||||||
:version: $Revision: 1.29 $
|
|
||||||
:copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
.first {
|
|
||||||
margin-top: 0 }
|
|
||||||
|
|
||||||
.last {
|
|
||||||
margin-bottom: 0 }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.attention, div.caution, div.danger, div.error, div.hint,
|
|
||||||
div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.hint p.admonition-title, div.important p.admonition-title,
|
|
||||||
div.note p.admonition-title, div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center ;
|
|
||||||
color: orange}
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
color: orange;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.line-block {
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.option-argument {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
table {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid thin gray ;
|
|
||||||
padding-left: 0.5ex }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid thin black ;
|
|
||||||
padding-left: 0.5ex }
|
|
||||||
|
|
||||||
td, th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
th.docinfo-name, th.field-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.section {
|
|
||||||
margin-top: 1.0em ;
|
|
||||||
}
|
|
|
@ -1,255 +0,0 @@
|
||||||
.first {
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: inherit }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
dl dt { line-height: 150% }
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.document {
|
|
||||||
width: 600px ;
|
|
||||||
margin-left: 5em ;
|
|
||||||
margin-right: 5em }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1, h2, h3, h4, h5 {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
line-height: 150% ;
|
|
||||||
color: orange} /* #666 } */
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center
|
|
||||||
}
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.line-block {
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
font-size: small ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.option-argument {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid thin gray }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
/* float: right ; */
|
|
||||||
margin: 2em 4em ;
|
|
||||||
color: #666 }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid thin black }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
th.docinfo-name, th.field-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: right ;
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
.PHONY: clean
|
|
||||||
.SUFFIXES:
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f *.html
|
|
|
@ -1,377 +0,0 @@
|
||||||
tiramisu tiramisu-module.html
|
|
||||||
tiramisu.__package__ tiramisu-module.html#__package__
|
|
||||||
tiramisu.autolib tiramisu.autolib-module.html
|
|
||||||
tiramisu.autolib.calculate tiramisu.autolib-module.html#calculate
|
|
||||||
tiramisu.autolib.special_owners tiramisu.autolib-module.html#special_owners
|
|
||||||
tiramisu.autolib.__package__ tiramisu.autolib-module.html#__package__
|
|
||||||
tiramisu.autolib.calc_factory tiramisu.autolib-module.html#calc_factory
|
|
||||||
tiramisu.autolib.special_owner_factory tiramisu.autolib-module.html#special_owner_factory
|
|
||||||
tiramisu.basetype tiramisu.basetype-module.html
|
|
||||||
tiramisu.basetype.modes tiramisu.basetype-module.html#modes
|
|
||||||
tiramisu.basetype.__package__ tiramisu.basetype-module.html#__package__
|
|
||||||
tiramisu.config tiramisu.config-module.html
|
|
||||||
tiramisu.config.__package__ tiramisu.config-module.html#__package__
|
|
||||||
tiramisu.config.special_owner_factory tiramisu.autolib-module.html#special_owner_factory
|
|
||||||
tiramisu.config.make_dict tiramisu.config-module.html#make_dict
|
|
||||||
tiramisu.config.apply_requires tiramisu.option-module.html#apply_requires
|
|
||||||
tiramisu.error tiramisu.error-module.html
|
|
||||||
tiramisu.error.__package__ tiramisu.error-module.html#__package__
|
|
||||||
tiramisu.option tiramisu.option-module.html
|
|
||||||
tiramisu.option.__package__ tiramisu.option-module.html#__package__
|
|
||||||
tiramisu.option.reverse_actions tiramisu.option-module.html#reverse_actions
|
|
||||||
tiramisu.option.group_types tiramisu.option-module.html#group_types
|
|
||||||
tiramisu.option.apply_requires tiramisu.option-module.html#apply_requires
|
|
||||||
tiramisu.option.available_actions tiramisu.option-module.html#available_actions
|
|
||||||
tiramisu.tool tiramisu.tool-module.html
|
|
||||||
tiramisu.tool.apply_requires tiramisu.option-module.html#apply_requires
|
|
||||||
tiramisu.tool.__package__ tiramisu.tool-module.html#__package__
|
|
||||||
tiramisu.tool.reverse_from_paths tiramisu.tool-module.html#reverse_from_paths
|
|
||||||
tiramisu.basetype.DisabledBaseType tiramisu.basetype.DisabledBaseType-class.html
|
|
||||||
tiramisu.basetype.DisabledBaseType.enable tiramisu.basetype.DisabledBaseType-class.html#enable
|
|
||||||
tiramisu.basetype.DisabledBaseType.disable tiramisu.basetype.DisabledBaseType-class.html#disable
|
|
||||||
tiramisu.basetype.DisabledBaseType.disabled tiramisu.basetype.DisabledBaseType-class.html#disabled
|
|
||||||
tiramisu.basetype.DisabledBaseType._is_disabled tiramisu.basetype.DisabledBaseType-class.html#_is_disabled
|
|
||||||
tiramisu.basetype.HiddenBaseType tiramisu.basetype.HiddenBaseType-class.html
|
|
||||||
tiramisu.basetype.HiddenBaseType.hide tiramisu.basetype.HiddenBaseType-class.html#hide
|
|
||||||
tiramisu.basetype.HiddenBaseType.show tiramisu.basetype.HiddenBaseType-class.html#show
|
|
||||||
tiramisu.basetype.HiddenBaseType._is_hidden tiramisu.basetype.HiddenBaseType-class.html#_is_hidden
|
|
||||||
tiramisu.basetype.HiddenBaseType.hidden tiramisu.basetype.HiddenBaseType-class.html#hidden
|
|
||||||
tiramisu.basetype.ModeBaseType tiramisu.basetype.ModeBaseType-class.html
|
|
||||||
tiramisu.basetype.ModeBaseType.set_mode tiramisu.basetype.ModeBaseType-class.html#set_mode
|
|
||||||
tiramisu.basetype.ModeBaseType.mode tiramisu.basetype.ModeBaseType-class.html#mode
|
|
||||||
tiramisu.basetype.ModeBaseType.get_mode tiramisu.basetype.ModeBaseType-class.html#get_mode
|
|
||||||
tiramisu.config.Config tiramisu.config.Config-class.html
|
|
||||||
tiramisu.config.Config.set tiramisu.config.Config-class.html#set
|
|
||||||
tiramisu.config.Config.unwrap_from_name tiramisu.config.Config-class.html#unwrap_from_name
|
|
||||||
tiramisu.config.Config.cfgimpl_unfreeze tiramisu.config.Config-class.html#cfgimpl_unfreeze
|
|
||||||
tiramisu.config.Config._validate tiramisu.config.Config-class.html#_validate
|
|
||||||
tiramisu.config.Config.__str__ tiramisu.config.Config-class.html#__str__
|
|
||||||
tiramisu.config.Config.cfgimpl_set_owner tiramisu.config.Config-class.html#cfgimpl_set_owner
|
|
||||||
tiramisu.config.Config.getkey tiramisu.config.Config-class.html#getkey
|
|
||||||
tiramisu.config.Config._cfgimpl_mandatory tiramisu.config.Config-class.html#_cfgimpl_mandatory
|
|
||||||
tiramisu.config.Config.unwrap_from_path tiramisu.config.Config-class.html#unwrap_from_path
|
|
||||||
tiramisu.config.Config.__init__ tiramisu.config.Config-class.html#__init__
|
|
||||||
tiramisu.config.Config._validate_duplicates tiramisu.config.Config-class.html#_validate_duplicates
|
|
||||||
tiramisu.config.Config._cfgimpl_owner tiramisu.config.Config-class.html#_cfgimpl_owner
|
|
||||||
tiramisu.config.Config.__getattr__ tiramisu.config.Config-class.html#__getattr__
|
|
||||||
tiramisu.config.Config._cfgimpl_hidden tiramisu.config.Config-class.html#_cfgimpl_hidden
|
|
||||||
tiramisu.config.Config.iter_groups tiramisu.config.Config-class.html#iter_groups
|
|
||||||
tiramisu.config.Config.get_warnings tiramisu.config.Config-class.html#get_warnings
|
|
||||||
tiramisu.config.Config.cfgimpl_update tiramisu.config.Config-class.html#cfgimpl_update
|
|
||||||
tiramisu.config.Config.override tiramisu.config.Config-class.html#override
|
|
||||||
tiramisu.config.Config.setoption tiramisu.config.Config-class.html#setoption
|
|
||||||
tiramisu.config.Config.__ne__ tiramisu.config.Config-class.html#__ne__
|
|
||||||
tiramisu.config.Config.cfgimpl_disable tiramisu.config.Config-class.html#cfgimpl_disable
|
|
||||||
tiramisu.config.Config.__hash__ tiramisu.config.Config-class.html#__hash__
|
|
||||||
tiramisu.config.Config.get tiramisu.config.Config-class.html#get
|
|
||||||
tiramisu.config.Config._cfgimpl_get_toplevel tiramisu.config.Config-class.html#_cfgimpl_get_toplevel
|
|
||||||
tiramisu.config.Config._cfgimpl_build tiramisu.config.Config-class.html#_cfgimpl_build
|
|
||||||
tiramisu.config.Config.__setattr__ tiramisu.config.Config-class.html#__setattr__
|
|
||||||
tiramisu.config.Config.is_frozen tiramisu.config.Config-class.html#is_frozen
|
|
||||||
tiramisu.config.Config.__iter__ tiramisu.config.Config-class.html#__iter__
|
|
||||||
tiramisu.config.Config._cfgimpl_toplevel tiramisu.config.Config-class.html#_cfgimpl_toplevel
|
|
||||||
tiramisu.config.Config._cfgimpl_get_home_by_path tiramisu.config.Config-class.html#_cfgimpl_get_home_by_path
|
|
||||||
tiramisu.config.Config._cfgimpl_mode tiramisu.config.Config-class.html#_cfgimpl_mode
|
|
||||||
tiramisu.config.Config.cfgimpl_read_write tiramisu.config.Config-class.html#cfgimpl_read_write
|
|
||||||
tiramisu.config.Config.__eq__ tiramisu.config.Config-class.html#__eq__
|
|
||||||
tiramisu.config.Config.__dir__ tiramisu.config.Config-class.html#__dir__
|
|
||||||
tiramisu.config.Config.getpaths tiramisu.config.Config-class.html#getpaths
|
|
||||||
tiramisu.config.Config.cfgimpl_set_mode tiramisu.config.Config-class.html#cfgimpl_set_mode
|
|
||||||
tiramisu.config.Config.cfgimpl_hide tiramisu.config.Config-class.html#cfgimpl_hide
|
|
||||||
tiramisu.config.Config.cfgimpl_show tiramisu.config.Config-class.html#cfgimpl_show
|
|
||||||
tiramisu.config.Config._cfgimpl_frozen tiramisu.config.Config-class.html#_cfgimpl_frozen
|
|
||||||
tiramisu.config.Config._cfgimpl_disabled tiramisu.config.Config-class.html#_cfgimpl_disabled
|
|
||||||
tiramisu.config.Config.__delattr__ tiramisu.config.Config-class.html#__delattr__
|
|
||||||
tiramisu.config.Config.add_warning tiramisu.config.Config-class.html#add_warning
|
|
||||||
tiramisu.config.Config.cfgimpl_enable tiramisu.config.Config-class.html#cfgimpl_enable
|
|
||||||
tiramisu.config.Config.cfgimpl_freeze tiramisu.config.Config-class.html#cfgimpl_freeze
|
|
||||||
tiramisu.config.Config.cfgimpl_read_only tiramisu.config.Config-class.html#cfgimpl_read_only
|
|
||||||
tiramisu.error.AmbigousOptionError tiramisu.error.AmbigousOptionError-class.html
|
|
||||||
tiramisu.error.ConfigError tiramisu.error.ConfigError-class.html
|
|
||||||
tiramisu.error.ConflictConfigError tiramisu.error.ConflictConfigError-class.html
|
|
||||||
tiramisu.error.DisabledOptionError tiramisu.error.DisabledOptionError-class.html
|
|
||||||
tiramisu.error.HiddenOptionError tiramisu.error.HiddenOptionError-class.html
|
|
||||||
tiramisu.error.MandatoryError tiramisu.error.MandatoryError-class.html
|
|
||||||
tiramisu.error.MethodCallError tiramisu.error.MethodCallError-class.html
|
|
||||||
tiramisu.error.ModeOptionError tiramisu.error.ModeOptionError-class.html
|
|
||||||
tiramisu.error.NoMatchingOptionFound tiramisu.error.NoMatchingOptionFound-class.html
|
|
||||||
tiramisu.error.NotFoundError tiramisu.error.NotFoundError-class.html
|
|
||||||
tiramisu.error.RequiresError tiramisu.error.RequiresError-class.html
|
|
||||||
tiramisu.error.SpecialOwnersError tiramisu.error.SpecialOwnersError-class.html
|
|
||||||
tiramisu.option.ArbitraryOption tiramisu.option.ArbitraryOption-class.html
|
|
||||||
tiramisu.basetype.HiddenBaseType.show tiramisu.basetype.HiddenBaseType-class.html#show
|
|
||||||
tiramisu.option.ArbitraryOption._validate tiramisu.option.ArbitraryOption-class.html#_validate
|
|
||||||
tiramisu.option.Option.getkey tiramisu.option.Option-class.html#getkey
|
|
||||||
tiramisu.basetype.DisabledBaseType.disabled tiramisu.basetype.DisabledBaseType-class.html#disabled
|
|
||||||
tiramisu.option.Option.setowner tiramisu.option.Option-class.html#setowner
|
|
||||||
tiramisu.basetype.DisabledBaseType._is_disabled tiramisu.basetype.DisabledBaseType-class.html#_is_disabled
|
|
||||||
tiramisu.option.ArbitraryOption.__init__ tiramisu.option.ArbitraryOption-class.html#__init__
|
|
||||||
tiramisu.option.Option.is_mandatory tiramisu.option.Option-class.html#is_mandatory
|
|
||||||
tiramisu.basetype.ModeBaseType.set_mode tiramisu.basetype.ModeBaseType-class.html#set_mode
|
|
||||||
tiramisu.basetype.HiddenBaseType._is_hidden tiramisu.basetype.HiddenBaseType-class.html#_is_hidden
|
|
||||||
tiramisu.basetype.HiddenBaseType.hidden tiramisu.basetype.HiddenBaseType-class.html#hidden
|
|
||||||
tiramisu.basetype.DisabledBaseType.enable tiramisu.basetype.DisabledBaseType-class.html#enable
|
|
||||||
tiramisu.option.Option.setoption tiramisu.option.Option-class.html#setoption
|
|
||||||
tiramisu.basetype.DisabledBaseType.disable tiramisu.basetype.DisabledBaseType-class.html#disable
|
|
||||||
tiramisu.option.Option.getcallback tiramisu.option.Option-class.html#getcallback
|
|
||||||
tiramisu.basetype.HiddenBaseType.hide tiramisu.basetype.HiddenBaseType-class.html#hide
|
|
||||||
tiramisu.option.Option.validate tiramisu.option.Option-class.html#validate
|
|
||||||
tiramisu.option.Option.freeze tiramisu.option.Option-class.html#freeze
|
|
||||||
tiramisu.basetype.ModeBaseType.get_mode tiramisu.basetype.ModeBaseType-class.html#get_mode
|
|
||||||
tiramisu.option.Option._frozen tiramisu.option.Option-class.html#_frozen
|
|
||||||
tiramisu.option.Option.getdoc tiramisu.option.Option-class.html#getdoc
|
|
||||||
tiramisu.option.Option.is_multi tiramisu.option.Option-class.html#is_multi
|
|
||||||
tiramisu.option.ArbitraryOption.getdefault tiramisu.option.ArbitraryOption-class.html#getdefault
|
|
||||||
tiramisu.option.Option.unfreeze tiramisu.option.Option-class.html#unfreeze
|
|
||||||
tiramisu.basetype.ModeBaseType.mode tiramisu.basetype.ModeBaseType-class.html#mode
|
|
||||||
tiramisu.option.Option.getcallback_params tiramisu.option.Option-class.html#getcallback_params
|
|
||||||
tiramisu.option.BoolOption tiramisu.option.BoolOption-class.html
|
|
||||||
tiramisu.basetype.HiddenBaseType.show tiramisu.basetype.HiddenBaseType-class.html#show
|
|
||||||
tiramisu.option.BoolOption._validate tiramisu.option.BoolOption-class.html#_validate
|
|
||||||
tiramisu.option.BoolOption.opt_type tiramisu.option.BoolOption-class.html#opt_type
|
|
||||||
tiramisu.option.Option.getkey tiramisu.option.Option-class.html#getkey
|
|
||||||
tiramisu.basetype.DisabledBaseType.disabled tiramisu.basetype.DisabledBaseType-class.html#disabled
|
|
||||||
tiramisu.option.Option.setowner tiramisu.option.Option-class.html#setowner
|
|
||||||
tiramisu.basetype.DisabledBaseType._is_disabled tiramisu.basetype.DisabledBaseType-class.html#_is_disabled
|
|
||||||
tiramisu.option.Option.__init__ tiramisu.option.Option-class.html#__init__
|
|
||||||
tiramisu.option.Option.is_mandatory tiramisu.option.Option-class.html#is_mandatory
|
|
||||||
tiramisu.basetype.ModeBaseType.set_mode tiramisu.basetype.ModeBaseType-class.html#set_mode
|
|
||||||
tiramisu.basetype.HiddenBaseType._is_hidden tiramisu.basetype.HiddenBaseType-class.html#_is_hidden
|
|
||||||
tiramisu.basetype.HiddenBaseType.hidden tiramisu.basetype.HiddenBaseType-class.html#hidden
|
|
||||||
tiramisu.basetype.DisabledBaseType.enable tiramisu.basetype.DisabledBaseType-class.html#enable
|
|
||||||
tiramisu.option.Option.setoption tiramisu.option.Option-class.html#setoption
|
|
||||||
tiramisu.basetype.DisabledBaseType.disable tiramisu.basetype.DisabledBaseType-class.html#disable
|
|
||||||
tiramisu.option.Option.getcallback tiramisu.option.Option-class.html#getcallback
|
|
||||||
tiramisu.basetype.HiddenBaseType.hide tiramisu.basetype.HiddenBaseType-class.html#hide
|
|
||||||
tiramisu.option.Option.validate tiramisu.option.Option-class.html#validate
|
|
||||||
tiramisu.option.Option.freeze tiramisu.option.Option-class.html#freeze
|
|
||||||
tiramisu.basetype.ModeBaseType.get_mode tiramisu.basetype.ModeBaseType-class.html#get_mode
|
|
||||||
tiramisu.option.Option._frozen tiramisu.option.Option-class.html#_frozen
|
|
||||||
tiramisu.option.Option.getdoc tiramisu.option.Option-class.html#getdoc
|
|
||||||
tiramisu.option.Option.is_multi tiramisu.option.Option-class.html#is_multi
|
|
||||||
tiramisu.option.Option.getdefault tiramisu.option.Option-class.html#getdefault
|
|
||||||
tiramisu.option.Option.unfreeze tiramisu.option.Option-class.html#unfreeze
|
|
||||||
tiramisu.basetype.ModeBaseType.mode tiramisu.basetype.ModeBaseType-class.html#mode
|
|
||||||
tiramisu.option.Option.getcallback_params tiramisu.option.Option-class.html#getcallback_params
|
|
||||||
tiramisu.option.ChoiceOption tiramisu.option.ChoiceOption-class.html
|
|
||||||
tiramisu.basetype.HiddenBaseType.show tiramisu.basetype.HiddenBaseType-class.html#show
|
|
||||||
tiramisu.option.ChoiceOption._validate tiramisu.option.ChoiceOption-class.html#_validate
|
|
||||||
tiramisu.option.ChoiceOption.opt_type tiramisu.option.ChoiceOption-class.html#opt_type
|
|
||||||
tiramisu.option.Option.getkey tiramisu.option.Option-class.html#getkey
|
|
||||||
tiramisu.basetype.DisabledBaseType.disabled tiramisu.basetype.DisabledBaseType-class.html#disabled
|
|
||||||
tiramisu.option.Option.setowner tiramisu.option.Option-class.html#setowner
|
|
||||||
tiramisu.basetype.DisabledBaseType._is_disabled tiramisu.basetype.DisabledBaseType-class.html#_is_disabled
|
|
||||||
tiramisu.option.ChoiceOption.__init__ tiramisu.option.ChoiceOption-class.html#__init__
|
|
||||||
tiramisu.option.Option.is_mandatory tiramisu.option.Option-class.html#is_mandatory
|
|
||||||
tiramisu.basetype.ModeBaseType.set_mode tiramisu.basetype.ModeBaseType-class.html#set_mode
|
|
||||||
tiramisu.basetype.HiddenBaseType._is_hidden tiramisu.basetype.HiddenBaseType-class.html#_is_hidden
|
|
||||||
tiramisu.basetype.HiddenBaseType.hidden tiramisu.basetype.HiddenBaseType-class.html#hidden
|
|
||||||
tiramisu.basetype.DisabledBaseType.enable tiramisu.basetype.DisabledBaseType-class.html#enable
|
|
||||||
tiramisu.option.ChoiceOption.setoption tiramisu.option.ChoiceOption-class.html#setoption
|
|
||||||
tiramisu.basetype.DisabledBaseType.disable tiramisu.basetype.DisabledBaseType-class.html#disable
|
|
||||||
tiramisu.option.Option.getcallback tiramisu.option.Option-class.html#getcallback
|
|
||||||
tiramisu.basetype.HiddenBaseType.hide tiramisu.basetype.HiddenBaseType-class.html#hide
|
|
||||||
tiramisu.option.Option.validate tiramisu.option.Option-class.html#validate
|
|
||||||
tiramisu.option.Option.freeze tiramisu.option.Option-class.html#freeze
|
|
||||||
tiramisu.basetype.ModeBaseType.get_mode tiramisu.basetype.ModeBaseType-class.html#get_mode
|
|
||||||
tiramisu.option.Option._frozen tiramisu.option.Option-class.html#_frozen
|
|
||||||
tiramisu.option.Option.getdoc tiramisu.option.Option-class.html#getdoc
|
|
||||||
tiramisu.option.Option.is_multi tiramisu.option.Option-class.html#is_multi
|
|
||||||
tiramisu.option.Option.getdefault tiramisu.option.Option-class.html#getdefault
|
|
||||||
tiramisu.option.Option.unfreeze tiramisu.option.Option-class.html#unfreeze
|
|
||||||
tiramisu.basetype.ModeBaseType.mode tiramisu.basetype.ModeBaseType-class.html#mode
|
|
||||||
tiramisu.option.Option.getcallback_params tiramisu.option.Option-class.html#getcallback_params
|
|
||||||
tiramisu.option.FloatOption tiramisu.option.FloatOption-class.html
|
|
||||||
tiramisu.basetype.HiddenBaseType.show tiramisu.basetype.HiddenBaseType-class.html#show
|
|
||||||
tiramisu.option.FloatOption._validate tiramisu.option.FloatOption-class.html#_validate
|
|
||||||
tiramisu.option.FloatOption.opt_type tiramisu.option.FloatOption-class.html#opt_type
|
|
||||||
tiramisu.option.Option.getkey tiramisu.option.Option-class.html#getkey
|
|
||||||
tiramisu.basetype.DisabledBaseType.disabled tiramisu.basetype.DisabledBaseType-class.html#disabled
|
|
||||||
tiramisu.option.Option.setowner tiramisu.option.Option-class.html#setowner
|
|
||||||
tiramisu.basetype.DisabledBaseType._is_disabled tiramisu.basetype.DisabledBaseType-class.html#_is_disabled
|
|
||||||
tiramisu.option.Option.__init__ tiramisu.option.Option-class.html#__init__
|
|
||||||
tiramisu.option.Option.is_mandatory tiramisu.option.Option-class.html#is_mandatory
|
|
||||||
tiramisu.basetype.ModeBaseType.set_mode tiramisu.basetype.ModeBaseType-class.html#set_mode
|
|
||||||
tiramisu.basetype.HiddenBaseType._is_hidden tiramisu.basetype.HiddenBaseType-class.html#_is_hidden
|
|
||||||
tiramisu.basetype.HiddenBaseType.hidden tiramisu.basetype.HiddenBaseType-class.html#hidden
|
|
||||||
tiramisu.basetype.DisabledBaseType.enable tiramisu.basetype.DisabledBaseType-class.html#enable
|
|
||||||
tiramisu.option.FloatOption.setoption tiramisu.option.FloatOption-class.html#setoption
|
|
||||||
tiramisu.basetype.DisabledBaseType.disable tiramisu.basetype.DisabledBaseType-class.html#disable
|
|
||||||
tiramisu.option.Option.getcallback tiramisu.option.Option-class.html#getcallback
|
|
||||||
tiramisu.basetype.HiddenBaseType.hide tiramisu.basetype.HiddenBaseType-class.html#hide
|
|
||||||
tiramisu.option.Option.validate tiramisu.option.Option-class.html#validate
|
|
||||||
tiramisu.option.Option.freeze tiramisu.option.Option-class.html#freeze
|
|
||||||
tiramisu.basetype.ModeBaseType.get_mode tiramisu.basetype.ModeBaseType-class.html#get_mode
|
|
||||||
tiramisu.option.Option._frozen tiramisu.option.Option-class.html#_frozen
|
|
||||||
tiramisu.option.Option.getdoc tiramisu.option.Option-class.html#getdoc
|
|
||||||
tiramisu.option.Option.is_multi tiramisu.option.Option-class.html#is_multi
|
|
||||||
tiramisu.option.Option.getdefault tiramisu.option.Option-class.html#getdefault
|
|
||||||
tiramisu.option.Option.unfreeze tiramisu.option.Option-class.html#unfreeze
|
|
||||||
tiramisu.basetype.ModeBaseType.mode tiramisu.basetype.ModeBaseType-class.html#mode
|
|
||||||
tiramisu.option.Option.getcallback_params tiramisu.option.Option-class.html#getcallback_params
|
|
||||||
tiramisu.option.IPOption tiramisu.option.IPOption-class.html
|
|
||||||
tiramisu.basetype.HiddenBaseType.show tiramisu.basetype.HiddenBaseType-class.html#show
|
|
||||||
tiramisu.option.IPOption._validate tiramisu.option.IPOption-class.html#_validate
|
|
||||||
tiramisu.option.IPOption.opt_type tiramisu.option.IPOption-class.html#opt_type
|
|
||||||
tiramisu.option.Option.getkey tiramisu.option.Option-class.html#getkey
|
|
||||||
tiramisu.basetype.DisabledBaseType.disabled tiramisu.basetype.DisabledBaseType-class.html#disabled
|
|
||||||
tiramisu.option.Option.setowner tiramisu.option.Option-class.html#setowner
|
|
||||||
tiramisu.basetype.DisabledBaseType._is_disabled tiramisu.basetype.DisabledBaseType-class.html#_is_disabled
|
|
||||||
tiramisu.option.Option.__init__ tiramisu.option.Option-class.html#__init__
|
|
||||||
tiramisu.option.Option.is_mandatory tiramisu.option.Option-class.html#is_mandatory
|
|
||||||
tiramisu.basetype.ModeBaseType.set_mode tiramisu.basetype.ModeBaseType-class.html#set_mode
|
|
||||||
tiramisu.basetype.HiddenBaseType._is_hidden tiramisu.basetype.HiddenBaseType-class.html#_is_hidden
|
|
||||||
tiramisu.basetype.HiddenBaseType.hidden tiramisu.basetype.HiddenBaseType-class.html#hidden
|
|
||||||
tiramisu.basetype.DisabledBaseType.enable tiramisu.basetype.DisabledBaseType-class.html#enable
|
|
||||||
tiramisu.option.IPOption.setoption tiramisu.option.IPOption-class.html#setoption
|
|
||||||
tiramisu.basetype.DisabledBaseType.disable tiramisu.basetype.DisabledBaseType-class.html#disable
|
|
||||||
tiramisu.option.Option.getcallback tiramisu.option.Option-class.html#getcallback
|
|
||||||
tiramisu.basetype.HiddenBaseType.hide tiramisu.basetype.HiddenBaseType-class.html#hide
|
|
||||||
tiramisu.option.Option.validate tiramisu.option.Option-class.html#validate
|
|
||||||
tiramisu.option.Option.freeze tiramisu.option.Option-class.html#freeze
|
|
||||||
tiramisu.basetype.ModeBaseType.get_mode tiramisu.basetype.ModeBaseType-class.html#get_mode
|
|
||||||
tiramisu.option.Option._frozen tiramisu.option.Option-class.html#_frozen
|
|
||||||
tiramisu.option.Option.getdoc tiramisu.option.Option-class.html#getdoc
|
|
||||||
tiramisu.option.Option.is_multi tiramisu.option.Option-class.html#is_multi
|
|
||||||
tiramisu.option.Option.getdefault tiramisu.option.Option-class.html#getdefault
|
|
||||||
tiramisu.option.Option.unfreeze tiramisu.option.Option-class.html#unfreeze
|
|
||||||
tiramisu.basetype.ModeBaseType.mode tiramisu.basetype.ModeBaseType-class.html#mode
|
|
||||||
tiramisu.option.Option.getcallback_params tiramisu.option.Option-class.html#getcallback_params
|
|
||||||
tiramisu.option.IntOption tiramisu.option.IntOption-class.html
|
|
||||||
tiramisu.basetype.HiddenBaseType.show tiramisu.basetype.HiddenBaseType-class.html#show
|
|
||||||
tiramisu.option.IntOption._validate tiramisu.option.IntOption-class.html#_validate
|
|
||||||
tiramisu.option.IntOption.opt_type tiramisu.option.IntOption-class.html#opt_type
|
|
||||||
tiramisu.option.Option.getkey tiramisu.option.Option-class.html#getkey
|
|
||||||
tiramisu.basetype.DisabledBaseType.disabled tiramisu.basetype.DisabledBaseType-class.html#disabled
|
|
||||||
tiramisu.option.Option.setowner tiramisu.option.Option-class.html#setowner
|
|
||||||
tiramisu.basetype.DisabledBaseType._is_disabled tiramisu.basetype.DisabledBaseType-class.html#_is_disabled
|
|
||||||
tiramisu.option.Option.__init__ tiramisu.option.Option-class.html#__init__
|
|
||||||
tiramisu.option.Option.is_mandatory tiramisu.option.Option-class.html#is_mandatory
|
|
||||||
tiramisu.basetype.ModeBaseType.set_mode tiramisu.basetype.ModeBaseType-class.html#set_mode
|
|
||||||
tiramisu.basetype.HiddenBaseType._is_hidden tiramisu.basetype.HiddenBaseType-class.html#_is_hidden
|
|
||||||
tiramisu.basetype.HiddenBaseType.hidden tiramisu.basetype.HiddenBaseType-class.html#hidden
|
|
||||||
tiramisu.basetype.DisabledBaseType.enable tiramisu.basetype.DisabledBaseType-class.html#enable
|
|
||||||
tiramisu.option.IntOption.setoption tiramisu.option.IntOption-class.html#setoption
|
|
||||||
tiramisu.basetype.DisabledBaseType.disable tiramisu.basetype.DisabledBaseType-class.html#disable
|
|
||||||
tiramisu.option.Option.getcallback tiramisu.option.Option-class.html#getcallback
|
|
||||||
tiramisu.basetype.HiddenBaseType.hide tiramisu.basetype.HiddenBaseType-class.html#hide
|
|
||||||
tiramisu.option.Option.validate tiramisu.option.Option-class.html#validate
|
|
||||||
tiramisu.option.Option.freeze tiramisu.option.Option-class.html#freeze
|
|
||||||
tiramisu.basetype.ModeBaseType.get_mode tiramisu.basetype.ModeBaseType-class.html#get_mode
|
|
||||||
tiramisu.option.Option._frozen tiramisu.option.Option-class.html#_frozen
|
|
||||||
tiramisu.option.Option.getdoc tiramisu.option.Option-class.html#getdoc
|
|
||||||
tiramisu.option.Option.is_multi tiramisu.option.Option-class.html#is_multi
|
|
||||||
tiramisu.option.Option.getdefault tiramisu.option.Option-class.html#getdefault
|
|
||||||
tiramisu.option.Option.unfreeze tiramisu.option.Option-class.html#unfreeze
|
|
||||||
tiramisu.basetype.ModeBaseType.mode tiramisu.basetype.ModeBaseType-class.html#mode
|
|
||||||
tiramisu.option.Option.getcallback_params tiramisu.option.Option-class.html#getcallback_params
|
|
||||||
tiramisu.option.NetmaskOption tiramisu.option.NetmaskOption-class.html
|
|
||||||
tiramisu.basetype.HiddenBaseType.show tiramisu.basetype.HiddenBaseType-class.html#show
|
|
||||||
tiramisu.option.NetmaskOption._validate tiramisu.option.NetmaskOption-class.html#_validate
|
|
||||||
tiramisu.option.NetmaskOption.opt_type tiramisu.option.NetmaskOption-class.html#opt_type
|
|
||||||
tiramisu.option.Option.getkey tiramisu.option.Option-class.html#getkey
|
|
||||||
tiramisu.basetype.DisabledBaseType.disabled tiramisu.basetype.DisabledBaseType-class.html#disabled
|
|
||||||
tiramisu.option.Option.setowner tiramisu.option.Option-class.html#setowner
|
|
||||||
tiramisu.basetype.DisabledBaseType._is_disabled tiramisu.basetype.DisabledBaseType-class.html#_is_disabled
|
|
||||||
tiramisu.option.Option.__init__ tiramisu.option.Option-class.html#__init__
|
|
||||||
tiramisu.option.Option.is_mandatory tiramisu.option.Option-class.html#is_mandatory
|
|
||||||
tiramisu.basetype.ModeBaseType.set_mode tiramisu.basetype.ModeBaseType-class.html#set_mode
|
|
||||||
tiramisu.basetype.HiddenBaseType._is_hidden tiramisu.basetype.HiddenBaseType-class.html#_is_hidden
|
|
||||||
tiramisu.basetype.HiddenBaseType.hidden tiramisu.basetype.HiddenBaseType-class.html#hidden
|
|
||||||
tiramisu.basetype.DisabledBaseType.enable tiramisu.basetype.DisabledBaseType-class.html#enable
|
|
||||||
tiramisu.option.NetmaskOption.setoption tiramisu.option.NetmaskOption-class.html#setoption
|
|
||||||
tiramisu.basetype.DisabledBaseType.disable tiramisu.basetype.DisabledBaseType-class.html#disable
|
|
||||||
tiramisu.option.Option.getcallback tiramisu.option.Option-class.html#getcallback
|
|
||||||
tiramisu.basetype.HiddenBaseType.hide tiramisu.basetype.HiddenBaseType-class.html#hide
|
|
||||||
tiramisu.option.Option.validate tiramisu.option.Option-class.html#validate
|
|
||||||
tiramisu.option.Option.freeze tiramisu.option.Option-class.html#freeze
|
|
||||||
tiramisu.basetype.ModeBaseType.get_mode tiramisu.basetype.ModeBaseType-class.html#get_mode
|
|
||||||
tiramisu.option.Option._frozen tiramisu.option.Option-class.html#_frozen
|
|
||||||
tiramisu.option.Option.getdoc tiramisu.option.Option-class.html#getdoc
|
|
||||||
tiramisu.option.Option.is_multi tiramisu.option.Option-class.html#is_multi
|
|
||||||
tiramisu.option.Option.getdefault tiramisu.option.Option-class.html#getdefault
|
|
||||||
tiramisu.option.Option.unfreeze tiramisu.option.Option-class.html#unfreeze
|
|
||||||
tiramisu.basetype.ModeBaseType.mode tiramisu.basetype.ModeBaseType-class.html#mode
|
|
||||||
tiramisu.option.Option.getcallback_params tiramisu.option.Option-class.html#getcallback_params
|
|
||||||
tiramisu.option.Option tiramisu.option.Option-class.html
|
|
||||||
tiramisu.basetype.HiddenBaseType.show tiramisu.basetype.HiddenBaseType-class.html#show
|
|
||||||
tiramisu.option.Option.getkey tiramisu.option.Option-class.html#getkey
|
|
||||||
tiramisu.basetype.DisabledBaseType.disabled tiramisu.basetype.DisabledBaseType-class.html#disabled
|
|
||||||
tiramisu.option.Option.setowner tiramisu.option.Option-class.html#setowner
|
|
||||||
tiramisu.basetype.DisabledBaseType._is_disabled tiramisu.basetype.DisabledBaseType-class.html#_is_disabled
|
|
||||||
tiramisu.option.Option.__init__ tiramisu.option.Option-class.html#__init__
|
|
||||||
tiramisu.option.Option.is_mandatory tiramisu.option.Option-class.html#is_mandatory
|
|
||||||
tiramisu.basetype.ModeBaseType.set_mode tiramisu.basetype.ModeBaseType-class.html#set_mode
|
|
||||||
tiramisu.basetype.HiddenBaseType._is_hidden tiramisu.basetype.HiddenBaseType-class.html#_is_hidden
|
|
||||||
tiramisu.basetype.HiddenBaseType.hidden tiramisu.basetype.HiddenBaseType-class.html#hidden
|
|
||||||
tiramisu.basetype.DisabledBaseType.enable tiramisu.basetype.DisabledBaseType-class.html#enable
|
|
||||||
tiramisu.option.Option.setoption tiramisu.option.Option-class.html#setoption
|
|
||||||
tiramisu.basetype.DisabledBaseType.disable tiramisu.basetype.DisabledBaseType-class.html#disable
|
|
||||||
tiramisu.option.Option.getcallback tiramisu.option.Option-class.html#getcallback
|
|
||||||
tiramisu.basetype.HiddenBaseType.hide tiramisu.basetype.HiddenBaseType-class.html#hide
|
|
||||||
tiramisu.option.Option.validate tiramisu.option.Option-class.html#validate
|
|
||||||
tiramisu.option.Option.freeze tiramisu.option.Option-class.html#freeze
|
|
||||||
tiramisu.basetype.ModeBaseType.get_mode tiramisu.basetype.ModeBaseType-class.html#get_mode
|
|
||||||
tiramisu.option.Option._frozen tiramisu.option.Option-class.html#_frozen
|
|
||||||
tiramisu.option.Option.getdoc tiramisu.option.Option-class.html#getdoc
|
|
||||||
tiramisu.option.Option.is_multi tiramisu.option.Option-class.html#is_multi
|
|
||||||
tiramisu.option.Option.getdefault tiramisu.option.Option-class.html#getdefault
|
|
||||||
tiramisu.option.Option.unfreeze tiramisu.option.Option-class.html#unfreeze
|
|
||||||
tiramisu.basetype.ModeBaseType.mode tiramisu.basetype.ModeBaseType-class.html#mode
|
|
||||||
tiramisu.option.Option.getcallback_params tiramisu.option.Option-class.html#getcallback_params
|
|
||||||
tiramisu.option.OptionDescription tiramisu.option.OptionDescription-class.html
|
|
||||||
tiramisu.option.OptionDescription.show tiramisu.option.OptionDescription-class.html#show
|
|
||||||
tiramisu.option.OptionDescription.add_child tiramisu.option.OptionDescription-class.html#add_child
|
|
||||||
tiramisu.basetype.DisabledBaseType.disabled tiramisu.basetype.DisabledBaseType-class.html#disabled
|
|
||||||
tiramisu.basetype.DisabledBaseType._is_disabled tiramisu.basetype.DisabledBaseType-class.html#_is_disabled
|
|
||||||
tiramisu.option.OptionDescription.__init__ tiramisu.option.OptionDescription-class.html#__init__
|
|
||||||
tiramisu.option.OptionDescription.hide tiramisu.option.OptionDescription-class.html#hide
|
|
||||||
tiramisu.basetype.ModeBaseType.set_mode tiramisu.basetype.ModeBaseType-class.html#set_mode
|
|
||||||
tiramisu.option.OptionDescription.get_group_type tiramisu.option.OptionDescription-class.html#get_group_type
|
|
||||||
tiramisu.option.OptionDescription.update_child tiramisu.option.OptionDescription-class.html#update_child
|
|
||||||
tiramisu.option.OptionDescription.set_group_type tiramisu.option.OptionDescription-class.html#set_group_type
|
|
||||||
tiramisu.basetype.HiddenBaseType._is_hidden tiramisu.basetype.HiddenBaseType-class.html#_is_hidden
|
|
||||||
tiramisu.basetype.HiddenBaseType.hidden tiramisu.basetype.HiddenBaseType-class.html#hidden
|
|
||||||
tiramisu.option.OptionDescription.group_type tiramisu.option.OptionDescription-class.html#group_type
|
|
||||||
tiramisu.option.OptionDescription.getpaths tiramisu.option.OptionDescription-class.html#getpaths
|
|
||||||
tiramisu.option.OptionDescription.enable tiramisu.option.OptionDescription-class.html#enable
|
|
||||||
tiramisu.option.OptionDescription.disable tiramisu.option.OptionDescription-class.html#disable
|
|
||||||
tiramisu.option.OptionDescription.getkey tiramisu.option.OptionDescription-class.html#getkey
|
|
||||||
tiramisu.basetype.ModeBaseType.get_mode tiramisu.basetype.ModeBaseType-class.html#get_mode
|
|
||||||
tiramisu.option.OptionDescription._build tiramisu.option.OptionDescription-class.html#_build
|
|
||||||
tiramisu.option.OptionDescription.getdoc tiramisu.option.OptionDescription-class.html#getdoc
|
|
||||||
tiramisu.basetype.ModeBaseType.mode tiramisu.basetype.ModeBaseType-class.html#mode
|
|
||||||
tiramisu.option.StrOption tiramisu.option.StrOption-class.html
|
|
||||||
tiramisu.basetype.HiddenBaseType.show tiramisu.basetype.HiddenBaseType-class.html#show
|
|
||||||
tiramisu.option.StrOption._validate tiramisu.option.StrOption-class.html#_validate
|
|
||||||
tiramisu.option.StrOption.opt_type tiramisu.option.StrOption-class.html#opt_type
|
|
||||||
tiramisu.option.Option.getkey tiramisu.option.Option-class.html#getkey
|
|
||||||
tiramisu.basetype.DisabledBaseType.disabled tiramisu.basetype.DisabledBaseType-class.html#disabled
|
|
||||||
tiramisu.option.Option.setowner tiramisu.option.Option-class.html#setowner
|
|
||||||
tiramisu.basetype.DisabledBaseType._is_disabled tiramisu.basetype.DisabledBaseType-class.html#_is_disabled
|
|
||||||
tiramisu.option.Option.__init__ tiramisu.option.Option-class.html#__init__
|
|
||||||
tiramisu.option.Option.is_mandatory tiramisu.option.Option-class.html#is_mandatory
|
|
||||||
tiramisu.basetype.ModeBaseType.set_mode tiramisu.basetype.ModeBaseType-class.html#set_mode
|
|
||||||
tiramisu.basetype.HiddenBaseType._is_hidden tiramisu.basetype.HiddenBaseType-class.html#_is_hidden
|
|
||||||
tiramisu.basetype.HiddenBaseType.hidden tiramisu.basetype.HiddenBaseType-class.html#hidden
|
|
||||||
tiramisu.basetype.DisabledBaseType.enable tiramisu.basetype.DisabledBaseType-class.html#enable
|
|
||||||
tiramisu.option.StrOption.setoption tiramisu.option.StrOption-class.html#setoption
|
|
||||||
tiramisu.basetype.DisabledBaseType.disable tiramisu.basetype.DisabledBaseType-class.html#disable
|
|
||||||
tiramisu.option.Option.getcallback tiramisu.option.Option-class.html#getcallback
|
|
||||||
tiramisu.basetype.HiddenBaseType.hide tiramisu.basetype.HiddenBaseType-class.html#hide
|
|
||||||
tiramisu.option.Option.validate tiramisu.option.Option-class.html#validate
|
|
||||||
tiramisu.option.Option.freeze tiramisu.option.Option-class.html#freeze
|
|
||||||
tiramisu.basetype.ModeBaseType.get_mode tiramisu.basetype.ModeBaseType-class.html#get_mode
|
|
||||||
tiramisu.option.Option._frozen tiramisu.option.Option-class.html#_frozen
|
|
||||||
tiramisu.option.Option.getdoc tiramisu.option.Option-class.html#getdoc
|
|
||||||
tiramisu.option.Option.is_multi tiramisu.option.Option-class.html#is_multi
|
|
||||||
tiramisu.option.Option.getdefault tiramisu.option.Option-class.html#getdefault
|
|
||||||
tiramisu.option.Option.unfreeze tiramisu.option.Option-class.html#unfreeze
|
|
||||||
tiramisu.basetype.ModeBaseType.mode tiramisu.basetype.ModeBaseType-class.html#mode
|
|
||||||
tiramisu.option.Option.getcallback_params tiramisu.option.Option-class.html#getcallback_params
|
|
||||||
tiramisu.option.SymLinkOption tiramisu.option.SymLinkOption-class.html
|
|
||||||
tiramisu.option.SymLinkOption.setoption tiramisu.option.SymLinkOption-class.html#setoption
|
|
||||||
tiramisu.option.SymLinkOption.opt_type tiramisu.option.SymLinkOption-class.html#opt_type
|
|
||||||
tiramisu.option.SymLinkOption.__init__ tiramisu.option.SymLinkOption-class.html#__init__
|
|
||||||
tiramisu.tool.extend tiramisu.tool.extend-class.html
|
|
||||||
tiramisu.tool.extend.extend tiramisu.tool.extend-class.html#extend
|
|
Before Width: | Height: | Size: 340 B |
|
@ -1,322 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
/* Epydoc CSS Stylesheet
|
|
||||||
*
|
|
||||||
* This stylesheet can be used to customize the appearance of epydoc's
|
|
||||||
* HTML output.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Default Colors & Styles
|
|
||||||
* - Set the default foreground & background color with 'body'; and
|
|
||||||
* link colors with 'a:link' and 'a:visited'.
|
|
||||||
* - Use bold for decision list terms.
|
|
||||||
* - The heading styles defined here are used for headings *within*
|
|
||||||
* docstring descriptions. All headings used by epydoc itself use
|
|
||||||
* either class='epydoc' or class='toc' (CSS styles for both
|
|
||||||
* defined below).
|
|
||||||
*/
|
|
||||||
body { background: #ffffff; color: #000000; }
|
|
||||||
p { margin-top: 0.5em; margin-bottom: 0.5em; }
|
|
||||||
a:link { color: #000000; }
|
|
||||||
a:visited { color: #404040; }
|
|
||||||
dt { font-weight: bold; }
|
|
||||||
h1 { font-size: +140%; font-style: italic;
|
|
||||||
font-weight: bold; }
|
|
||||||
h2 { font-size: +125%; font-style: italic;
|
|
||||||
font-weight: bold; }
|
|
||||||
h3 { font-size: +110%; font-style: italic;
|
|
||||||
font-weight: normal; }
|
|
||||||
code { font-size: 100%; }
|
|
||||||
/* N.B.: class, not pseudoclass */
|
|
||||||
a.link { font-family: monospace; }
|
|
||||||
|
|
||||||
/* Page Header & Footer
|
|
||||||
* - The standard page header consists of a navigation bar (with
|
|
||||||
* pointers to standard pages such as 'home' and 'trees'); a
|
|
||||||
* breadcrumbs list, which can be used to navigate to containing
|
|
||||||
* classes or modules; options links, to show/hide private
|
|
||||||
* variables and to show/hide frames; and a page title (using
|
|
||||||
* <h1>). The page title may be followed by a link to the
|
|
||||||
* corresponding source code (using 'span.codelink').
|
|
||||||
* - The footer consists of a navigation bar, a timestamp, and a
|
|
||||||
* pointer to epydoc's homepage.
|
|
||||||
*/
|
|
||||||
h1.epydoc { margin: 0; font-size: +140%; font-weight: bold; }
|
|
||||||
h2.epydoc { font-size: +130%; font-weight: bold; }
|
|
||||||
h3.epydoc { font-size: +115%; font-weight: bold;
|
|
||||||
margin-top: 0.2em; }
|
|
||||||
td h3.epydoc { font-size: +115%; font-weight: bold;
|
|
||||||
margin-bottom: 0; }
|
|
||||||
table.navbar { background: #c0c0c0; color: #000000;
|
|
||||||
border: 2px groove #d0d0d0; }
|
|
||||||
table.navbar table { color: #000000; }
|
|
||||||
th.navbar-select { background: #b0b0b0;
|
|
||||||
color: #000000; }
|
|
||||||
table.navbar a { text-decoration: none; }
|
|
||||||
table.navbar a:link { color: #000000; }
|
|
||||||
table.navbar a:visited { color: #404040; }
|
|
||||||
span.breadcrumbs { font-size: 85%; font-weight: bold; }
|
|
||||||
span.options { font-size: 70%; }
|
|
||||||
span.codelink { font-size: 85%; }
|
|
||||||
td.footer { font-size: 85%; }
|
|
||||||
|
|
||||||
/* Table Headers
|
|
||||||
* - Each summary table and details section begins with a 'header'
|
|
||||||
* row. This row contains a section title (marked by
|
|
||||||
* 'span.table-header') as well as a show/hide private link
|
|
||||||
* (marked by 'span.options', defined above).
|
|
||||||
* - Summary tables that contain user-defined groups mark those
|
|
||||||
* groups using 'group header' rows.
|
|
||||||
*/
|
|
||||||
td.table-header { background: #b0b0b0; color: #000000;
|
|
||||||
border: 1px solid #808080; }
|
|
||||||
td.table-header table { color: #000000; }
|
|
||||||
td.table-header table a:link { color: #000000; }
|
|
||||||
td.table-header table a:visited { color: #404040; }
|
|
||||||
span.table-header { font-size: 120%; font-weight: bold; }
|
|
||||||
th.group-header { background: #e0e0e0; color: #000000;
|
|
||||||
text-align: left; font-style: italic;
|
|
||||||
font-size: 115%;
|
|
||||||
border: 1px solid #808080; }
|
|
||||||
|
|
||||||
/* Summary Tables (functions, variables, etc)
|
|
||||||
* - Each object is described by a single row of the table with
|
|
||||||
* two cells. The left cell gives the object's type, and is
|
|
||||||
* marked with 'code.summary-type'. The right cell gives the
|
|
||||||
* object's name and a summary description.
|
|
||||||
* - CSS styles for the table's header and group headers are
|
|
||||||
* defined above, under 'Table Headers'
|
|
||||||
*/
|
|
||||||
table.summary { border-collapse: collapse;
|
|
||||||
background: #f0f0f0; color: #000000;
|
|
||||||
border: 1px solid #808080;
|
|
||||||
margin-bottom: 0.5em; }
|
|
||||||
td.summary { border: 1px solid #808080; }
|
|
||||||
code.summary-type { font-size: 85%; }
|
|
||||||
table.summary a:link { color: #000000; }
|
|
||||||
table.summary a:visited { color: #404040; }
|
|
||||||
|
|
||||||
|
|
||||||
/* Details Tables (functions, variables, etc)
|
|
||||||
* - Each object is described in its own div.
|
|
||||||
* - A single-row summary table w/ table-header is used as
|
|
||||||
* a header for each details section (CSS style for table-header
|
|
||||||
* is defined above, under 'Table Headers').
|
|
||||||
*/
|
|
||||||
table.details { border-collapse: collapse;
|
|
||||||
background: #f0f0f0; color: #000000;
|
|
||||||
border: 1px solid #808080;
|
|
||||||
margin: .2em 0 0 0; }
|
|
||||||
table.details table { color: #000000; }
|
|
||||||
table.details a:link { color: #000000; }
|
|
||||||
table.details a:visited { color: #404040; }
|
|
||||||
|
|
||||||
/* Fields */
|
|
||||||
dl.fields { margin-left: 2em; margin-top: 1em;
|
|
||||||
margin-bottom: 1em; }
|
|
||||||
dl.fields dd ul { margin-left: 0em; padding-left: 0em; }
|
|
||||||
dl.fields dd ul li ul { margin-left: 2em; padding-left: 0em; }
|
|
||||||
div.fields { margin-left: 2em; }
|
|
||||||
div.fields p { margin-bottom: 0.5em; }
|
|
||||||
|
|
||||||
/* Index tables (identifier index, term index, etc)
|
|
||||||
* - link-index is used for indices containing lists of links
|
|
||||||
* (namely, the identifier index & term index).
|
|
||||||
* - index-where is used in link indices for the text indicating
|
|
||||||
* the container/source for each link.
|
|
||||||
* - metadata-index is used for indices containing metadata
|
|
||||||
* extracted from fields (namely, the bug index & todo index).
|
|
||||||
*/
|
|
||||||
table.link-index { border-collapse: collapse;
|
|
||||||
background: #f0f0f0; color: #000000;
|
|
||||||
border: 1px solid #808080; }
|
|
||||||
td.link-index { border-width: 0px; }
|
|
||||||
table.link-index a:link { color: #000000; }
|
|
||||||
table.link-index a:visited { color: #404040; }
|
|
||||||
span.index-where { font-size: 70%; }
|
|
||||||
table.metadata-index { border-collapse: collapse;
|
|
||||||
background: #f0f0f0; color: #000000;
|
|
||||||
border: 1px solid #808080;
|
|
||||||
margin: .2em 0 0 0; }
|
|
||||||
td.metadata-index { border-width: 1px; border-style: solid; }
|
|
||||||
table.metadata-index a:link { color: #000000; }
|
|
||||||
table.metadata-index a:visited { color: #404040; }
|
|
||||||
|
|
||||||
/* Function signatures
|
|
||||||
* - sig* is used for the signature in the details section.
|
|
||||||
* - .summary-sig* is used for the signature in the summary
|
|
||||||
* table, and when listing property accessor functions.
|
|
||||||
* */
|
|
||||||
.sig-name { color: #606060; }
|
|
||||||
.sig-arg { color: #808080; }
|
|
||||||
.sig-default { color: #202020; }
|
|
||||||
.summary-sig { font-family: monospace; }
|
|
||||||
.summary-sig-name { color: #606060; font-weight: bold; }
|
|
||||||
table.summary a.summary-sig-name:link
|
|
||||||
{ color: #606060; font-weight: bold; }
|
|
||||||
table.summary a.summary-sig-name:visited
|
|
||||||
{ color: #606060; font-weight: bold; }
|
|
||||||
.summary-sig-arg { color: #606060; }
|
|
||||||
.summary-sig-default { color: #181818; }
|
|
||||||
|
|
||||||
/* Subclass list
|
|
||||||
*/
|
|
||||||
ul.subclass-list { display: inline; }
|
|
||||||
ul.subclass-list li { display: inline; }
|
|
||||||
|
|
||||||
/* To render variables, classes etc. like functions */
|
|
||||||
table.summary .summary-name { color: #606060; font-weight: bold;
|
|
||||||
font-family: monospace; }
|
|
||||||
table.summary
|
|
||||||
a.summary-name:link { color: #606060; font-weight: bold;
|
|
||||||
font-family: monospace; }
|
|
||||||
table.summary
|
|
||||||
a.summary-name:visited { color: #606060; font-weight: bold;
|
|
||||||
font-family: monospace; }
|
|
||||||
|
|
||||||
/* Variable values
|
|
||||||
* - In the 'variable details' sections, each varaible's value is
|
|
||||||
* listed in a 'pre.variable' box. The width of this box is
|
|
||||||
* restricted to 80 chars; if the value's repr is longer than
|
|
||||||
* this it will be wrapped, using a backslash marked with
|
|
||||||
* class 'variable-linewrap'. If the value's repr is longer
|
|
||||||
* than 3 lines, the rest will be ellided; and an ellipsis
|
|
||||||
* marker ('...' marked with 'variable-ellipsis') will be used.
|
|
||||||
* - If the value is a string, its quote marks will be marked
|
|
||||||
* with 'variable-quote'.
|
|
||||||
* - If the variable is a regexp, it is syntax-highlighted using
|
|
||||||
* the re* CSS classes.
|
|
||||||
*/
|
|
||||||
pre.variable { padding: .5em; margin: 0;
|
|
||||||
background: #e4e4e4; color: #000000;
|
|
||||||
border: 1px solid #888888; }
|
|
||||||
.variable-linewrap { color: #404040; font-weight: bold; }
|
|
||||||
.variable-ellipsis { color: #404040; font-weight: bold; }
|
|
||||||
.variable-quote { color: #404040; font-weight: bold; }
|
|
||||||
.variable-group { color: #808080; font-weight: bold; }
|
|
||||||
.variable-op { color: #404040; font-weight: bold; }
|
|
||||||
.variable-string { color: #606060; }
|
|
||||||
.variable-unknown { color: #000000; font-weight: bold; }
|
|
||||||
.re { color: #000000; }
|
|
||||||
.re-char { color: #606060; }
|
|
||||||
.re-op { color: #000000; }
|
|
||||||
.re-group { color: #303030; }
|
|
||||||
.re-ref { color: #404040; }
|
|
||||||
|
|
||||||
/* Base tree
|
|
||||||
* - Used by class pages to display the base class hierarchy.
|
|
||||||
*/
|
|
||||||
pre.base-tree { font-size: 80%; margin: 0; }
|
|
||||||
|
|
||||||
/* Frames-based table of contents headers
|
|
||||||
* - Consists of two frames: one for selecting modules; and
|
|
||||||
* the other listing the contents of the selected module.
|
|
||||||
* - h1.toc is used for each frame's heading
|
|
||||||
* - h2.toc is used for subheadings within each frame.
|
|
||||||
*/
|
|
||||||
h1.toc { text-align: center; font-size: 105%;
|
|
||||||
margin: 0; font-weight: bold;
|
|
||||||
padding: 0; }
|
|
||||||
h2.toc { font-size: 100%; font-weight: bold;
|
|
||||||
margin: 0.5em 0 0 -0.3em; }
|
|
||||||
|
|
||||||
/* Syntax Highlighting for Source Code
|
|
||||||
* - doctest examples are displayed in a 'pre.py-doctest' block.
|
|
||||||
* If the example is in a details table entry, then it will use
|
|
||||||
* the colors specified by the 'table pre.py-doctest' line.
|
|
||||||
* - Source code listings are displayed in a 'pre.py-src' block.
|
|
||||||
* Each line is marked with 'span.py-line' (used to draw a line
|
|
||||||
* down the left margin, separating the code from the line
|
|
||||||
* numbers). Line numbers are displayed with 'span.py-lineno'.
|
|
||||||
* The expand/collapse block toggle button is displayed with
|
|
||||||
* 'a.py-toggle' (Note: the CSS style for 'a.py-toggle' should not
|
|
||||||
* modify the font size of the text.)
|
|
||||||
* - If a source code page is opened with an anchor, then the
|
|
||||||
* corresponding code block will be highlighted. The code
|
|
||||||
* block's header is highlighted with 'py-highlight-hdr'; and
|
|
||||||
* the code block's body is highlighted with 'py-highlight'.
|
|
||||||
* - The remaining py-* classes are used to perform syntax
|
|
||||||
* highlighting (py-string for string literals, py-name for names,
|
|
||||||
* etc.)
|
|
||||||
*/
|
|
||||||
pre.py-doctest { padding: .5em; margin: 1em;
|
|
||||||
background: #f0f0f0; color: #000000;
|
|
||||||
border: 1px solid #888888; }
|
|
||||||
table pre.py-doctest { background: #e4e4e4;
|
|
||||||
color: #000000; }
|
|
||||||
pre.py-src { border: 2px solid #000000;
|
|
||||||
background: #f0f0f0; color: #000000; }
|
|
||||||
.py-line { border-left: 2px solid #000000;
|
|
||||||
margin-left: .2em; padding-left: .4em; }
|
|
||||||
.py-lineno { font-style: italic; font-size: 90%;
|
|
||||||
padding-left: .5em; }
|
|
||||||
a.py-toggle { text-decoration: none; }
|
|
||||||
div.py-highlight-hdr { border-top: 2px solid #000000;
|
|
||||||
border-bottom: 2px solid #000000;
|
|
||||||
background: #e8e8e8; }
|
|
||||||
div.py-highlight { border-bottom: 2px solid #000000;
|
|
||||||
background: #e0e0e0; }
|
|
||||||
.py-prompt { color: #505050; font-weight: bold;}
|
|
||||||
.py-more { color: #505050; font-weight: bold;}
|
|
||||||
.py-string { color: #606060; }
|
|
||||||
.py-comment { color: #303030; }
|
|
||||||
.py-keyword { color: #000000; }
|
|
||||||
.py-output { color: #404040; }
|
|
||||||
.py-name { color: #000000; }
|
|
||||||
.py-name:link { color: #000000 !important; }
|
|
||||||
.py-name:visited { color: #000000 !important; }
|
|
||||||
.py-number { color: #505050; }
|
|
||||||
.py-defname { color: #000000; font-weight: bold; }
|
|
||||||
.py-def-name { color: #000000; font-weight: bold; }
|
|
||||||
.py-base-class { color: #000000; }
|
|
||||||
.py-param { color: #000000; }
|
|
||||||
.py-docstring { color: #606060; }
|
|
||||||
.py-decorator { color: #404040; }
|
|
||||||
/* Use this if you don't want links to names underlined: */
|
|
||||||
/*a.py-name { text-decoration: none; }*/
|
|
||||||
|
|
||||||
/* Graphs & Diagrams
|
|
||||||
* - These CSS styles are used for graphs & diagrams generated using
|
|
||||||
* Graphviz dot. 'img.graph-without-title' is used for bare
|
|
||||||
* diagrams (to remove the border created by making the image
|
|
||||||
* clickable).
|
|
||||||
*/
|
|
||||||
img.graph-without-title { border: none; }
|
|
||||||
img.graph-with-title { border: 1px solid #000000; }
|
|
||||||
span.graph-title { font-weight: bold; }
|
|
||||||
span.graph-caption { }
|
|
||||||
|
|
||||||
/* General-purpose classes
|
|
||||||
* - 'p.indent-wrapped-lines' defines a paragraph whose first line
|
|
||||||
* is not indented, but whose subsequent lines are.
|
|
||||||
* - The 'nomargin-top' class is used to remove the top margin (e.g.
|
|
||||||
* from lists). The 'nomargin' class is used to remove both the
|
|
||||||
* top and bottom margin (but not the left or right margin --
|
|
||||||
* for lists, that would cause the bullets to disappear.)
|
|
||||||
*/
|
|
||||||
p.indent-wrapped-lines { padding: 0 0 0 7em; text-indent: -7em;
|
|
||||||
margin: 0; }
|
|
||||||
.nomargin-top { margin-top: 0; }
|
|
||||||
.nomargin { margin-top: 0; margin-bottom: 0; }
|
|
||||||
|
|
||||||
/* HTML Log */
|
|
||||||
div.log-block { padding: 0; margin: .5em 0 .5em 0;
|
|
||||||
background: #f0f0f0; color: #000000;
|
|
||||||
border: 1px solid #000000; }
|
|
||||||
div.log-error { padding: .1em .3em .1em .3em; margin: 4px;
|
|
||||||
background: #b0b0b0; color: #000000;
|
|
||||||
border: 1px solid #000000; }
|
|
||||||
div.log-warning { padding: .1em .3em .1em .3em; margin: 4px;
|
|
||||||
background: #ffffff; color: #000000;
|
|
||||||
border: 1px solid #000000; }
|
|
||||||
div.log-info { padding: .1em .3em .1em .3em; margin: 4px;
|
|
||||||
background: #ffffff; color: #000000;
|
|
||||||
border: 1px solid #000000; }
|
|
||||||
h2.log-hdr { background: #b0b0b0; color: #000000;
|
|
||||||
margin: 0; padding: 0em 0.5em 0em 0.5em;
|
|
||||||
border-bottom: 1px solid #000000; font-size: 110%; }
|
|
||||||
p.log { font-weight: bold; margin: .5em 0 .5em 0; }
|
|
||||||
tr.opt-changed { color: #000000; font-weight: bold; }
|
|
||||||
tr.opt-default { color: #606060; }
|
|
||||||
pre.log { margin: 0; padding: 0; padding-left: 1em; }
|
|
|
@ -1,293 +0,0 @@
|
||||||
function toggle_private() {
|
|
||||||
// Search for any private/public links on this page. Store
|
|
||||||
// their old text in "cmd," so we will know what action to
|
|
||||||
// take; and change their text to the opposite action.
|
|
||||||
var cmd = "?";
|
|
||||||
var elts = document.getElementsByTagName("a");
|
|
||||||
for(var i=0; i<elts.length; i++) {
|
|
||||||
if (elts[i].className == "privatelink") {
|
|
||||||
cmd = elts[i].innerHTML;
|
|
||||||
elts[i].innerHTML = ((cmd && cmd.substr(0,4)=="show")?
|
|
||||||
"hide private":"show private");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Update all DIVs containing private objects.
|
|
||||||
var elts = document.getElementsByTagName("div");
|
|
||||||
for(var i=0; i<elts.length; i++) {
|
|
||||||
if (elts[i].className == "private") {
|
|
||||||
elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
|
|
||||||
}
|
|
||||||
else if (elts[i].className == "public") {
|
|
||||||
elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"block":"none");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Update all table rows containing private objects. Note, we
|
|
||||||
// use "" instead of "block" becaue IE & firefox disagree on what
|
|
||||||
// this should be (block vs table-row), and "" just gives the
|
|
||||||
// default for both browsers.
|
|
||||||
var elts = document.getElementsByTagName("tr");
|
|
||||||
for(var i=0; i<elts.length; i++) {
|
|
||||||
if (elts[i].className == "private") {
|
|
||||||
elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Update all list items containing private objects.
|
|
||||||
var elts = document.getElementsByTagName("li");
|
|
||||||
for(var i=0; i<elts.length; i++) {
|
|
||||||
if (elts[i].className == "private") {
|
|
||||||
elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?
|
|
||||||
"none":"");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Update all list items containing private objects.
|
|
||||||
var elts = document.getElementsByTagName("ul");
|
|
||||||
for(var i=0; i<elts.length; i++) {
|
|
||||||
if (elts[i].className == "private") {
|
|
||||||
elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Set a cookie to remember the current option.
|
|
||||||
document.cookie = "EpydocPrivate="+cmd;
|
|
||||||
}
|
|
||||||
function show_private() {
|
|
||||||
var elts = document.getElementsByTagName("a");
|
|
||||||
for(var i=0; i<elts.length; i++) {
|
|
||||||
if (elts[i].className == "privatelink") {
|
|
||||||
cmd = elts[i].innerHTML;
|
|
||||||
if (cmd && cmd.substr(0,4)=="show")
|
|
||||||
toggle_private();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function getCookie(name) {
|
|
||||||
var dc = document.cookie;
|
|
||||||
var prefix = name + "=";
|
|
||||||
var begin = dc.indexOf("; " + prefix);
|
|
||||||
if (begin == -1) {
|
|
||||||
begin = dc.indexOf(prefix);
|
|
||||||
if (begin != 0) return null;
|
|
||||||
} else
|
|
||||||
{ begin += 2; }
|
|
||||||
var end = document.cookie.indexOf(";", begin);
|
|
||||||
if (end == -1)
|
|
||||||
{ end = dc.length; }
|
|
||||||
return unescape(dc.substring(begin + prefix.length, end));
|
|
||||||
}
|
|
||||||
function setFrame(url1, url2) {
|
|
||||||
parent.frames[1].location.href = url1;
|
|
||||||
parent.frames[2].location.href = url2;
|
|
||||||
}
|
|
||||||
function checkCookie() {
|
|
||||||
var cmd=getCookie("EpydocPrivate");
|
|
||||||
if (cmd && cmd.substr(0,4)!="show" && location.href.indexOf("#_") < 0)
|
|
||||||
toggle_private();
|
|
||||||
}
|
|
||||||
function toggleCallGraph(id) {
|
|
||||||
var elt = document.getElementById(id);
|
|
||||||
if (elt.style.display == "none")
|
|
||||||
elt.style.display = "block";
|
|
||||||
else
|
|
||||||
elt.style.display = "none";
|
|
||||||
}
|
|
||||||
function expand(id) {
|
|
||||||
var elt = document.getElementById(id+"-expanded");
|
|
||||||
if (elt) elt.style.display = "block";
|
|
||||||
var elt = document.getElementById(id+"-expanded-linenums");
|
|
||||||
if (elt) elt.style.display = "block";
|
|
||||||
var elt = document.getElementById(id+"-collapsed");
|
|
||||||
if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
|
|
||||||
var elt = document.getElementById(id+"-collapsed-linenums");
|
|
||||||
if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
|
|
||||||
var elt = document.getElementById(id+"-toggle");
|
|
||||||
if (elt) { elt.innerHTML = "-"; }
|
|
||||||
}
|
|
||||||
|
|
||||||
function collapse(id) {
|
|
||||||
var elt = document.getElementById(id+"-expanded");
|
|
||||||
if (elt) elt.style.display = "none";
|
|
||||||
var elt = document.getElementById(id+"-expanded-linenums");
|
|
||||||
if (elt) elt.style.display = "none";
|
|
||||||
var elt = document.getElementById(id+"-collapsed-linenums");
|
|
||||||
if (elt) { elt.innerHTML = "<br />"; elt.style.display="block"; }
|
|
||||||
var elt = document.getElementById(id+"-toggle");
|
|
||||||
if (elt) { elt.innerHTML = "+"; }
|
|
||||||
var elt = document.getElementById(id+"-collapsed");
|
|
||||||
if (elt) {
|
|
||||||
elt.style.display = "block";
|
|
||||||
|
|
||||||
var indent = elt.getAttribute("indent");
|
|
||||||
var pad = elt.getAttribute("pad");
|
|
||||||
var s = "<tt class='py-lineno'>";
|
|
||||||
for (var i=0; i<pad.length; i++) { s += " " }
|
|
||||||
s += "</tt>";
|
|
||||||
s += " <tt class='py-line'>";
|
|
||||||
for (var i=0; i<indent.length; i++) { s += " " }
|
|
||||||
s += "<a href='#' onclick='expand(\"" + id;
|
|
||||||
s += "\");return false'>...</a></tt><br />";
|
|
||||||
elt.innerHTML = s;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggle(id) {
|
|
||||||
elt = document.getElementById(id+"-toggle");
|
|
||||||
if (elt.innerHTML == "-")
|
|
||||||
collapse(id);
|
|
||||||
else
|
|
||||||
expand(id);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function highlight(id) {
|
|
||||||
var elt = document.getElementById(id+"-def");
|
|
||||||
if (elt) elt.className = "py-highlight-hdr";
|
|
||||||
var elt = document.getElementById(id+"-expanded");
|
|
||||||
if (elt) elt.className = "py-highlight";
|
|
||||||
var elt = document.getElementById(id+"-collapsed");
|
|
||||||
if (elt) elt.className = "py-highlight";
|
|
||||||
}
|
|
||||||
|
|
||||||
function num_lines(s) {
|
|
||||||
var n = 1;
|
|
||||||
var pos = s.indexOf("\n");
|
|
||||||
while ( pos > 0) {
|
|
||||||
n += 1;
|
|
||||||
pos = s.indexOf("\n", pos+1);
|
|
||||||
}
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Collapse all blocks that mave more than `min_lines` lines.
|
|
||||||
function collapse_all(min_lines) {
|
|
||||||
var elts = document.getElementsByTagName("div");
|
|
||||||
for (var i=0; i<elts.length; i++) {
|
|
||||||
var elt = elts[i];
|
|
||||||
var split = elt.id.indexOf("-");
|
|
||||||
if (split > 0)
|
|
||||||
if (elt.id.substring(split, elt.id.length) == "-expanded")
|
|
||||||
if (num_lines(elt.innerHTML) > min_lines)
|
|
||||||
collapse(elt.id.substring(0, split));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function expandto(href) {
|
|
||||||
var start = href.indexOf("#")+1;
|
|
||||||
if (start != 0 && start != href.length) {
|
|
||||||
if (href.substring(start, href.length) != "-") {
|
|
||||||
collapse_all(4);
|
|
||||||
pos = href.indexOf(".", start);
|
|
||||||
while (pos != -1) {
|
|
||||||
var id = href.substring(start, pos);
|
|
||||||
expand(id);
|
|
||||||
pos = href.indexOf(".", pos+1);
|
|
||||||
}
|
|
||||||
var id = href.substring(start, href.length);
|
|
||||||
expand(id);
|
|
||||||
highlight(id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function kill_doclink(id) {
|
|
||||||
var parent = document.getElementById(id);
|
|
||||||
parent.removeChild(parent.childNodes.item(0));
|
|
||||||
}
|
|
||||||
function auto_kill_doclink(ev) {
|
|
||||||
if (!ev) var ev = window.event;
|
|
||||||
if (!this.contains(ev.toElement)) {
|
|
||||||
var parent = document.getElementById(this.parentID);
|
|
||||||
parent.removeChild(parent.childNodes.item(0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function doclink(id, name, targets_id) {
|
|
||||||
var elt = document.getElementById(id);
|
|
||||||
|
|
||||||
// If we already opened the box, then destroy it.
|
|
||||||
// (This case should never occur, but leave it in just in case.)
|
|
||||||
if (elt.childNodes.length > 1) {
|
|
||||||
elt.removeChild(elt.childNodes.item(0));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// The outer box: relative + inline positioning.
|
|
||||||
var box1 = document.createElement("div");
|
|
||||||
box1.style.position = "relative";
|
|
||||||
box1.style.display = "inline";
|
|
||||||
box1.style.top = 0;
|
|
||||||
box1.style.left = 0;
|
|
||||||
|
|
||||||
// A shadow for fun
|
|
||||||
var shadow = document.createElement("div");
|
|
||||||
shadow.style.position = "absolute";
|
|
||||||
shadow.style.left = "-1.3em";
|
|
||||||
shadow.style.top = "-1.3em";
|
|
||||||
shadow.style.background = "#404040";
|
|
||||||
|
|
||||||
// The inner box: absolute positioning.
|
|
||||||
var box2 = document.createElement("div");
|
|
||||||
box2.style.position = "relative";
|
|
||||||
box2.style.border = "1px solid #a0a0a0";
|
|
||||||
box2.style.left = "-.2em";
|
|
||||||
box2.style.top = "-.2em";
|
|
||||||
box2.style.background = "white";
|
|
||||||
box2.style.padding = ".3em .4em .3em .4em";
|
|
||||||
box2.style.fontStyle = "normal";
|
|
||||||
box2.onmouseout=auto_kill_doclink;
|
|
||||||
box2.parentID = id;
|
|
||||||
|
|
||||||
// Get the targets
|
|
||||||
var targets_elt = document.getElementById(targets_id);
|
|
||||||
var targets = targets_elt.getAttribute("targets");
|
|
||||||
var links = "";
|
|
||||||
target_list = targets.split(",");
|
|
||||||
for (var i=0; i<target_list.length; i++) {
|
|
||||||
var target = target_list[i].split("=");
|
|
||||||
links += "<li><a href='" + target[1] +
|
|
||||||
"' style='text-decoration:none'>" +
|
|
||||||
target[0] + "</a></li>";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Put it all together.
|
|
||||||
elt.insertBefore(box1, elt.childNodes.item(0));
|
|
||||||
//box1.appendChild(box2);
|
|
||||||
box1.appendChild(shadow);
|
|
||||||
shadow.appendChild(box2);
|
|
||||||
box2.innerHTML =
|
|
||||||
"Which <b>"+name+"</b> do you want to see documentation for?" +
|
|
||||||
"<ul style='margin-bottom: 0;'>" +
|
|
||||||
links +
|
|
||||||
"<li><a href='#' style='text-decoration:none' " +
|
|
||||||
"onclick='kill_doclink(\""+id+"\");return false;'>"+
|
|
||||||
"<i>None of the above</i></a></li></ul>";
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_anchor() {
|
|
||||||
var href = location.href;
|
|
||||||
var start = href.indexOf("#")+1;
|
|
||||||
if ((start != 0) && (start != href.length))
|
|
||||||
return href.substring(start, href.length);
|
|
||||||
}
|
|
||||||
function redirect_url(dottedName) {
|
|
||||||
// Scan through each element of the "pages" list, and check
|
|
||||||
// if "name" matches with any of them.
|
|
||||||
for (var i=0; i<pages.length; i++) {
|
|
||||||
|
|
||||||
// Each page has the form "<pagename>-m" or "<pagename>-c";
|
|
||||||
// extract the <pagename> portion & compare it to dottedName.
|
|
||||||
var pagename = pages[i].substring(0, pages[i].length-2);
|
|
||||||
if (pagename == dottedName.substring(0,pagename.length)) {
|
|
||||||
|
|
||||||
// We've found a page that matches `dottedName`;
|
|
||||||
// construct its URL, using leftover `dottedName`
|
|
||||||
// content to form an anchor.
|
|
||||||
var pagetype = pages[i].charAt(pages[i].length-1);
|
|
||||||
var url = pagename + ((pagetype=="m")?"-module.html":
|
|
||||||
"-class.html");
|
|
||||||
if (dottedName.length > pagename.length)
|
|
||||||
url += "#" + dottedName.substring(pagename.length+1,
|
|
||||||
dottedName.length);
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
@import url(docutils.css);
|
|
||||||
@import url(default.css);
|
|
||||||
a:link {
|
|
||||||
color: orange;
|
|
||||||
font-weight: bold;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
text-decoration: none;
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
a:active {
|
|
||||||
text-decoration: none;
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header {
|
|
||||||
color: orange;
|
|
||||||
background-color: white;
|
|
||||||
padding: 1em;
|
|
||||||
}
|
|
||||||
.footer {
|
|
||||||
color: #666;
|
|
||||||
background-color: inherit;
|
|
||||||
font-size: 75%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 27 KiB |
|
@ -1,82 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
import types
|
|
||||||
from os.path import join
|
|
||||||
from inspect import getsource, getmembers, isclass, isfunction, ismethod, ismodule
|
|
||||||
from importlib import import_module
|
|
||||||
|
|
||||||
root="./build/api"
|
|
||||||
|
|
||||||
# autopath
|
|
||||||
|
|
||||||
from os.path import dirname, abspath, join, normpath
|
|
||||||
import sys
|
|
||||||
|
|
||||||
HERE = dirname(abspath(__file__))
|
|
||||||
PATH = normpath(join(HERE, '..', '..'))
|
|
||||||
if PATH not in sys.path:
|
|
||||||
sys.path.insert(1, PATH)
|
|
||||||
|
|
||||||
htmltmpl = """
|
|
||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>{title}</title>
|
|
||||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
|
||||||
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8">
|
|
||||||
<meta http-equiv="content-style-type" content="text/css">
|
|
||||||
<meta http-equiv="expires" content="0">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre>
|
|
||||||
{content}
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
"""
|
|
||||||
|
|
||||||
def write_source(name, content):
|
|
||||||
fh = file(join(root, name)+'.html', 'w')
|
|
||||||
fh.write(format_html(name, content))
|
|
||||||
fh.close()
|
|
||||||
|
|
||||||
def format_html(title, content):
|
|
||||||
return htmltmpl.format(title=title, content=content)
|
|
||||||
|
|
||||||
def parse_module(module):
|
|
||||||
module = import_module(module)
|
|
||||||
write_source(module.__name__, getsource(module))
|
|
||||||
# classes = [(cls, value) for cls, value in getattr(module, '__dict__').items() if value == types.ClassType]
|
|
||||||
classes = getmembers(module, isclass)
|
|
||||||
for name, obj in classes:
|
|
||||||
write_source(module.__name__ + '.' + name, getsource(obj))
|
|
||||||
# methods = [(meth, value) for meth, value in getattr(obj, '__dict__').items() if type(value) == types.MethodType]
|
|
||||||
methods = getmembers(obj, ismethod)
|
|
||||||
for meth, value in methods:
|
|
||||||
write_source(module.__name__ + '.' + name + '.' + meth, getsource(value))
|
|
||||||
|
|
||||||
#functions = [(func, value) for func, value in getattr(module, '__dict__').items() if type(value) == types.FunctionType]
|
|
||||||
functions = getmembers(module, isfunction)
|
|
||||||
for name, obj in functions:
|
|
||||||
write_source(module.__name__ + '.' + name, getsource(obj))
|
|
||||||
|
|
||||||
def process_modules():
|
|
||||||
from glob import glob
|
|
||||||
from os.path import abspath, dirname, normpath, splitext, basename
|
|
||||||
here = abspath(__file__)
|
|
||||||
directory = dirname(here)
|
|
||||||
pyfiles = glob(normpath(join(directory, '..', '*.py')))
|
|
||||||
for pyf in pyfiles:
|
|
||||||
pyf = splitext(basename(pyf))[0]
|
|
||||||
modname = 'tiramisu.' + pyf
|
|
||||||
if not '__init__' in modname:
|
|
||||||
parse_module(modname)
|
|
||||||
|
|
||||||
pyfiles = glob(normpath(join(directory, '..', 'test', '*.py')))
|
|
||||||
for pyf in pyfiles:
|
|
||||||
pyf = splitext(basename(pyf))[0]
|
|
||||||
modname = 'tiramisu.test.' + pyf
|
|
||||||
if not '__init__' in modname:
|
|
||||||
parse_module(modname)
|
|
||||||
|
|
||||||
process_modules()
|
|
||||||
|
|
|
@ -1,158 +0,0 @@
|
||||||
.. default-role:: literal
|
|
||||||
|
|
||||||
=======================
|
|
||||||
Configuration Handling
|
|
||||||
=======================
|
|
||||||
|
|
||||||
:module: :api:`config.py`
|
|
||||||
:tests: - :api:`test_config.py`
|
|
||||||
- :api:`test_option_setting.py`
|
|
||||||
|
|
||||||
Main Assumption
|
|
||||||
===============
|
|
||||||
|
|
||||||
Configuration option objects :api:`config.Config()` are produced at the
|
|
||||||
entry points and handed down to where they are actually used. This keeps
|
|
||||||
configuration local but available everywhere and consistent.
|
|
||||||
|
|
||||||
`Config` and `Option` objects
|
|
||||||
==============================
|
|
||||||
|
|
||||||
Configuration option objects can be created in different ways. Let's perform
|
|
||||||
very basic `Config` object manipulations:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
>>> from tiramisu.config import Config
|
|
||||||
>>> from tiramisu.option import OptionDescription, BoolOption
|
|
||||||
>>> descr = OptionDescription("optgroup", "", [
|
|
||||||
... BoolOption("bool", "", default=False)])
|
|
||||||
>>>
|
|
||||||
>>> config = Config(descr)
|
|
||||||
>>> config.bool
|
|
||||||
False
|
|
||||||
>>> config.bool = True
|
|
||||||
>>> config.bool
|
|
||||||
True
|
|
||||||
|
|
||||||
Take a look at :api:`test_config.test_base_config()` or
|
|
||||||
:api:`test_config.test_base_config_and_groups()`.
|
|
||||||
|
|
||||||
|
|
||||||
Accessing the configuration `Option`'s
|
|
||||||
-----------------------------------------
|
|
||||||
|
|
||||||
The `Config` object attribute access notation stands for the value of the
|
|
||||||
configuration's `Option`. That is, the `Config`'s object attribute is the name
|
|
||||||
of the `Option`, and the value is the value accessed by the `__getattr__`
|
|
||||||
attribute access mechanism.
|
|
||||||
|
|
||||||
If the attribute of the `Config` called by `__getattr__` has not been set before
|
|
||||||
(by the classic `__setattr__` mechanism), the default value of the `Option`
|
|
||||||
object is returned, and if no `Option` has been declared in the
|
|
||||||
`OptionDescription` (that is the schema of the configuration), an
|
|
||||||
`AttributeError` is raised.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
>>> gcdummy = BoolOption('dummy', 'dummy', default=False)
|
|
||||||
>>> gcdummy._name
|
|
||||||
'dummy'
|
|
||||||
>>> gcdummy.getdefault()
|
|
||||||
False
|
|
||||||
>>> descr = OptionDescription('tiramisu', '', [gcdummy])
|
|
||||||
>>> cfg = Config(descr)
|
|
||||||
>>> cfg.dummy
|
|
||||||
False
|
|
||||||
>>> cfg.dummy = True
|
|
||||||
>>> cfg.dummy
|
|
||||||
True
|
|
||||||
>>> cfg.idontexist
|
|
||||||
AttributeError: 'OptionDescription' object has no attribute 'idontexist'
|
|
||||||
|
|
||||||
The configuration `Option` objects (in this case the `BoolOption`), are
|
|
||||||
organized into a tree into nested `OptionDescription` objects. Every
|
|
||||||
option has a name, as does every option group. The parts of the full
|
|
||||||
name of the option are separated by dots: e.g.
|
|
||||||
``config.optgroup.optname``.
|
|
||||||
|
|
||||||
**Can you repeat it, what is the protocol of accessing a config's attribute ?**
|
|
||||||
|
|
||||||
1. If the option has not been declared, an `AttributeError` is raised,
|
|
||||||
|
|
||||||
2. If an option is declared, but neither a value nor a default value has
|
|
||||||
been set, the returned value is `None`,
|
|
||||||
|
|
||||||
3. If an option is declared and a default value has been set, but no value
|
|
||||||
has been set, the returned value is the default value of the option,
|
|
||||||
|
|
||||||
4. If an option is declared, and a value has been set, the returned value is
|
|
||||||
the value of the option.
|
|
||||||
|
|
||||||
If you do not want to use the pythonic way, that is the attribute access
|
|
||||||
way to obtain the value of the configuration option, you can also search
|
|
||||||
for it recursively in the whole config namespaces with the ``get()``
|
|
||||||
method :
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
>>> config.get('bool')
|
|
||||||
True
|
|
||||||
|
|
||||||
|
|
||||||
To find the right option, `get()` searches recursively into the whole
|
|
||||||
tree. For example, to find an option which is in the `gc` namespace
|
|
||||||
there are two possibilites.
|
|
||||||
|
|
||||||
If you know the path:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
>>> config.gc.dummy
|
|
||||||
False
|
|
||||||
|
|
||||||
If you don't remember the path:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
>>> config.get('dummy')
|
|
||||||
False
|
|
||||||
|
|
||||||
Setting the values of the options
|
|
||||||
----------------------------------------
|
|
||||||
|
|
||||||
An important part of the setting of the configuration consists of setting the
|
|
||||||
values of the configuration options. There are different ways of setting values,
|
|
||||||
the first one is of course the `__setattr__` method
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
cfg.name = value
|
|
||||||
|
|
||||||
wich has the same effect that the "global" `set()` method : it expects that
|
|
||||||
the value owner is the default :ref:`glossary#valueowner`
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
cfg.set(name=value)
|
|
||||||
|
|
||||||
The global `setoption()` method of the config objects can set a value with a specific owner
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
cfg.setoption('name', value, 'owner')
|
|
||||||
|
|
||||||
|
|
||||||
Finally, the local `setoption()` method directly in the `Option` object can be
|
|
||||||
used. While the `Option` object refers to his parent, the config knows that the
|
|
||||||
value has been changed and no bad side effect won't occur
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
>>> booloption = BoolOption('bool', 'Test boolean option', default=True)
|
|
||||||
>>> descr = OptionDescription('descr', '', [booloption])
|
|
||||||
>>> cfg = Config(descr)
|
|
||||||
>>> booloption.setoption(cfg, False, 'owner')
|
|
||||||
>>> cfg.bool
|
|
||||||
>>> False
|
|
||||||
|
|
|
@ -1,103 +0,0 @@
|
||||||
.. default-role:: literal
|
|
||||||
|
|
||||||
Config API Details
|
|
||||||
==================
|
|
||||||
|
|
||||||
:module: :api:`config.py`
|
|
||||||
:test cases: - :api:`test_config_api.py`
|
|
||||||
- :api:`test_config_big_example.py`
|
|
||||||
|
|
||||||
|
|
||||||
The handling of options is split into two parts: the description of
|
|
||||||
which options are available, what their possible values and defaults are
|
|
||||||
and how they are organized into a tree. A specific choice of options is
|
|
||||||
bundled into a configuration object which has a reference to its option
|
|
||||||
description (and therefore makes sure that the configuration values
|
|
||||||
adhere to the option description).
|
|
||||||
|
|
||||||
The configuration object
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
:api:`config.Config()` object that lives in :api:`config.py` hold the
|
|
||||||
choosen values for the options (or the default value for the
|
|
||||||
:api:`option.Option()` object, if no choice was made).
|
|
||||||
|
|
||||||
A `Config` object is informed by an :api:`option.OptionDescription`
|
|
||||||
instance. The attributes of the ``Config`` objects are the names of the
|
|
||||||
children of the ``OptionDescription``.
|
|
||||||
|
|
||||||
Here are the (useful) methods on ``Config``:
|
|
||||||
|
|
||||||
:api:`config.Config.__init__(self, descr, **overrides)`:
|
|
||||||
``descr`` is an instance of :api:`option.OptionDescription` that
|
|
||||||
describes the configuration object. ``override`` can be used to
|
|
||||||
set different default values (see method ``override``).
|
|
||||||
|
|
||||||
:api:`config.Config.override(self, overrides)`:
|
|
||||||
override default values. This marks the overridden values as defaults.
|
|
||||||
``overrides`` is a dictionary of path strings to values.
|
|
||||||
|
|
||||||
:api:`config.Config.set(self, **kwargs)`:
|
|
||||||
"do what I mean"-interface to option setting. Searches all paths
|
|
||||||
starting from that config for matches of the optional arguments
|
|
||||||
and sets the found option if the match is not ambiguous.
|
|
||||||
|
|
||||||
:api:`config.Config.get(self, name)`:
|
|
||||||
the behavior is much like the attribute access way, except that
|
|
||||||
the search for the option is performed recursively in the whole
|
|
||||||
configuration tree.
|
|
||||||
|
|
||||||
:api:`config.Config.cfgimpl_read_write()`:
|
|
||||||
configuration level `read_write` status, see :doc:`status`
|
|
||||||
|
|
||||||
:api:`config.Config.cfgimpl_read_only()`:
|
|
||||||
configuration level `read_only` status, see :doc:`status`
|
|
||||||
|
|
||||||
Here are some private attributes of a `Config()` object, for a
|
|
||||||
comprehension of the internal merchanism:
|
|
||||||
|
|
||||||
- `_cfgimpl_descr =` :api:`option.OptionDescription()`,
|
|
||||||
e.g. the :ref:`optionapi#schema`
|
|
||||||
|
|
||||||
- `_cfgimpl_values` contains the :api:`option.Option()`'s values.
|
|
||||||
Yes, the values of the options: remember that the values are stored **inside**
|
|
||||||
the :api:`config.Config()` and not in the `Option()`
|
|
||||||
|
|
||||||
`_cfgimpl_values` contains something like that
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
{'int': 0, 'wantframework': False, 'objspace': 'std', 'bool': False,
|
|
||||||
'str': 'abc', 'gc': <config.Config object at 0xa33f8ec>, 'wantref': False}
|
|
||||||
|
|
||||||
We can see that values can also be config objects, it's the
|
|
||||||
sub-namespaces that are stored in the values as `Config()` objects.
|
|
||||||
|
|
||||||
convenience utilities (iteration, exports...)
|
|
||||||
-----------------------------------------------
|
|
||||||
|
|
||||||
With this :api:`config.Config()` configuration management entry point,
|
|
||||||
it is possible to
|
|
||||||
|
|
||||||
- `iter` on config, notice that there is an iteration order wich is
|
|
||||||
the order of the :ref:`optionapi#schema` specification entries,
|
|
||||||
- compare two configs (equality),
|
|
||||||
- export the whole config into a `dict` with :api:`config.make_dict()`,
|
|
||||||
- `validate()` an option value into a config, see :doc:`consistency`.
|
|
||||||
|
|
||||||
:api:`option.Option()` objects in a config are iterable in the pythonic
|
|
||||||
way, that is something like `[(name, value) for name, value in config]`.
|
|
||||||
|
|
||||||
To iter on groups in the same manner, use the
|
|
||||||
:api:`config.Config.iter_groups()` method wich yields generators too.
|
|
||||||
|
|
||||||
**iteration utilities**
|
|
||||||
|
|
||||||
:api:`config.Config.__iter__()`
|
|
||||||
Pythonesque way of parsing group's ordered options.
|
|
||||||
|
|
||||||
:api:`config.Config.iter_groups(group_type=None)`:
|
|
||||||
To iter on groups objects only.
|
|
||||||
All groups are returned if `group_type` is `None`, otherwise the groups
|
|
||||||
can be filtered by categories (families, or whatever).
|
|
||||||
|
|
|
@ -1,104 +0,0 @@
|
||||||
.. default-role:: literal
|
|
||||||
|
|
||||||
The global configuration's consistency
|
|
||||||
========================================
|
|
||||||
|
|
||||||
:module: :api:`config.py`
|
|
||||||
:tests: :api:`test_option_consistency.py`
|
|
||||||
|
|
||||||
Option's values type validation
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
When a value is set to the option, the value is validated by the
|
|
||||||
option's :api:`option.Option()` validator's type.
|
|
||||||
|
|
||||||
Notice that if the option is `multi`, that is the `multi` attribute is set to
|
|
||||||
`True`, then the validation of the option value accepts a list of values
|
|
||||||
of the same type.
|
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
|
|
||||||
Configuration options can specify requirements as parameters at the init
|
|
||||||
time, the specification of some links between options or groups allows
|
|
||||||
to carry out a dependencies calculation. For example, an option can ben
|
|
||||||
hidden if another option has been set with some expected value. This is
|
|
||||||
just an example, because the possibilities are hudge.
|
|
||||||
|
|
||||||
A requirement is specified using a list of triplets. The first element
|
|
||||||
of the triplet gives the path of the option that is required, the second
|
|
||||||
element is the value wich is expected to trigger the callback, and the
|
|
||||||
third one is the callback's action name (`hide`, `show`...)::
|
|
||||||
|
|
||||||
stroption = StrOption('str', 'Test string option', default="abc",
|
|
||||||
requires=[('int', 1, 'hide')])
|
|
||||||
|
|
||||||
Take a look at an example here
|
|
||||||
:api:`test_option_consistency.test_hidden_if_in()`
|
|
||||||
|
|
||||||
Config updates
|
|
||||||
---------------
|
|
||||||
|
|
||||||
New configuration options and groups can be dynamically added.
|
|
||||||
|
|
||||||
The configuration has to be *updated* after that the description has been
|
|
||||||
passed to the Config objet, see:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
>>> config = Config(descr)
|
|
||||||
>>> newoption = BoolOption('newoption', 'dummy twoo', default=False)
|
|
||||||
>>> descr.add_child(newoption)
|
|
||||||
>>> config.update()
|
|
||||||
>>> config.newoption
|
|
||||||
False
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
- :api:`test_option_consistency.test_newoption_add_in_descr()`
|
|
||||||
- :api:`test_option_consistency.test_newoption_add_in_subdescr()`
|
|
||||||
- :api:`test_option_consistency.test_newoption_add_in_config()`
|
|
||||||
|
|
||||||
|
|
||||||
Validation upon a whole configuration object
|
|
||||||
----------------------------------------------
|
|
||||||
|
|
||||||
An option's integrity can be validated towards a whole configuration.
|
|
||||||
|
|
||||||
This type of validation is very open. Let's take a use case : an option
|
|
||||||
has a certain value, and the value of this option can change the owner
|
|
||||||
of another option or option group... Everything is possible.
|
|
||||||
|
|
||||||
For example, the configuration paths have to be unique in the
|
|
||||||
:ref:`glossary#schema`, the validation is carried out at the
|
|
||||||
:api:`config.Config._cfgimpl_build()` time in the
|
|
||||||
:api:`config.Config._validate_duplicates()` method.
|
|
||||||
|
|
||||||
Other hook are availables to validate upon a whole configuration at any
|
|
||||||
time.
|
|
||||||
|
|
||||||
.. FIXME : get the validates hooks from the original config pypy's code
|
|
||||||
|
|
||||||
Identical option names
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
If an :api:`option.Option()` happens to be defined twice in the
|
|
||||||
:ref:`glossary#schema` (e.g. the :api:`option.OptionDescription()`),
|
|
||||||
:that is the two options actually have the same name, an exception is raised.
|
|
||||||
|
|
||||||
The calculation is currently carried out in the samespace, for example
|
|
||||||
if `config.gc.name` is defined, another option in `gc` with the name
|
|
||||||
`name` is **not** allowed, whereas `config.whateverelse.name` is still
|
|
||||||
allowed.
|
|
||||||
|
|
||||||
.. the calculation was carried out by the requires, wich is not a goog idead
|
|
||||||
|
|
||||||
Type constraints with the `multi` type
|
|
||||||
----------------------------------------
|
|
||||||
|
|
||||||
By convention, if a multi option has somme requires, the constraints on
|
|
||||||
the multi type is in all the OptionGroup (a group has to be `multi`, and
|
|
||||||
a multi of the same length).
|
|
||||||
|
|
||||||
See :api:`test_option_consistency.test_multi_constraints()`
|
|
||||||
|
|
|
@ -1,82 +0,0 @@
|
||||||
.. default-role:: literal
|
|
||||||
|
|
||||||
.. include:: inc/preambule.txt
|
|
||||||
|
|
||||||
Accès aux variables
|
|
||||||
====================
|
|
||||||
|
|
||||||
Protocole d'accès aux valeurs
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
**Créole**
|
|
||||||
|
|
||||||
- Si la variable n'a pas été déclarée, une erreur est levée
|
|
||||||
- Si la variable a été déclarée, mais qu'aucune valeur n'a été définie, (ni valeur affectée, ni valeur par défaut) la valeur retournée est `[]` ou `""` ou `[""]` ou `["",""]`,
|
|
||||||
- Si la variable a été déclarée et qu'une valeur par défaut a été définie, la valeur retournée et la valeur par défaut,
|
|
||||||
- Si la variable a été déclarée et qu'une valeur a été définie, la valeur retournée est la valeur de la variable.
|
|
||||||
|
|
||||||
**tiramisu**
|
|
||||||
|
|
||||||
- Si la variable n'a pas été déclarée, une erreur est levée
|
|
||||||
- Si la variable a été déclarée, mais qu'aucune valeur n'a été définie, (ni valeur affectée, ni valeur par défaut) la valeur retournée est `None`,
|
|
||||||
- Si la variable a été déclarée et qu'une valeur par défaut a été définie, la valeur retournée et la valeur par défaut,
|
|
||||||
- Si la variable a été déclarée et qu'une valeur a été définie, la valeur retournée est la valeur de la variable.
|
|
||||||
|
|
||||||
la différence tient au fait de la valeur nulle (`None`) qui a été mal définie
|
|
||||||
dès le début dans `Créole`.
|
|
||||||
|
|
||||||
Accès Créole par "dictionnaire"
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
La définition est dans le `XML`
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
<family name="general">
|
|
||||||
|
|
||||||
<variable name="adresse_ip_eth0">
|
|
||||||
|
|
||||||
Le dictionnaire est chargé dans un `EoleDict()`
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
from creole.cfgparser import EoleDict
|
|
||||||
eoldict = EoleDict(...)
|
|
||||||
|
|
||||||
Un export dans un dictionnaire est necessaire pour manipuler les données
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
from creole.parsedico import parse_dico
|
|
||||||
|
|
||||||
flatdict = parse_dico(eoldict)
|
|
||||||
|
|
||||||
assert dico['ip'] == '10.10.1.11'
|
|
||||||
|
|
||||||
|
|
||||||
le resultat de l'accès aux données vient de `typeole.EoleVar('ip').get_value()`
|
|
||||||
|
|
||||||
|
|
||||||
Accès `tiramisu` par espace de nommage
|
|
||||||
----------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
- espaces de nommages ;
|
|
||||||
- c'est la configuration qui est responsable de l'accès aux valeurs ;
|
|
||||||
- une configuration par accès direct (pas d'export) ;
|
|
||||||
- un point d'entrée unique aisément manipulable grâce aux espaces de nommage.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
from tiramisu.config import Config
|
|
||||||
from tiramisu.option import OptionDescription
|
|
||||||
subdescr = OptionDescription("creole", [IPOption('ip')])
|
|
||||||
descr = OptionDescription("creole", [subdescr])
|
|
||||||
config = Config(descr)
|
|
||||||
assert config.creole.general.ip == '10.10.1.11'
|
|
||||||
|
|
||||||
Les valeurs sont dépendantes **de la configuration** et donc la responsabilité
|
|
||||||
des valeurs dépend de la configuration et pas de la variable elle-même.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,109 +0,0 @@
|
||||||
.. default-role:: literal
|
|
||||||
|
|
||||||
.. include:: inc/preambule.txt
|
|
||||||
|
|
||||||
Cohérence des valeurs des variables
|
|
||||||
====================================
|
|
||||||
|
|
||||||
type des variables
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
**Créole**
|
|
||||||
|
|
||||||
pas d'unicité du type abstrait : `Multivar`, `CreoleVar` et `TypedVar`
|
|
||||||
|
|
||||||
- `String`
|
|
||||||
- `Ip`
|
|
||||||
- `Netmask`
|
|
||||||
- `Number`
|
|
||||||
- `Boolean`
|
|
||||||
- `OuiNon`
|
|
||||||
|
|
||||||
**tiramisu**
|
|
||||||
|
|
||||||
unicité du type abstrait : `Option()`
|
|
||||||
|
|
||||||
pas de nouveau type multivalué, mais un attribut des types existants::
|
|
||||||
|
|
||||||
>>> from option import BoolOption
|
|
||||||
>>> boolopt = BoolOption('bool', 'description de bool', multi=True)
|
|
||||||
|
|
||||||
tous les types Créole, plus
|
|
||||||
|
|
||||||
- `SymlinkOption`
|
|
||||||
- `CheckOption` qui permet de définir les "oui/non", "On/Off"
|
|
||||||
|
|
||||||
Validations suivant l'organisation en familles
|
|
||||||
-----------------------------------------------
|
|
||||||
|
|
||||||
**Créole**
|
|
||||||
|
|
||||||
**Organisation par accumulation de références sur des dictionnaires (`EoleDict`)**
|
|
||||||
|
|
||||||
On peut charger un EoleDict avec des variables qui pointent vers des families
|
|
||||||
qui n'existent pas, aucune validation n'est faite (confiance absolument faite au
|
|
||||||
moment du chargemzent du XML)
|
|
||||||
|
|
||||||
exemple, dans l'espace de nommage racine::
|
|
||||||
|
|
||||||
<variables>
|
|
||||||
<variable name="adresse_ip_eth0">
|
|
||||||
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
from creole.parsedico import parse_dico
|
|
||||||
flatdict = parse_dico(eoldict)
|
|
||||||
dico['adresse_ip_eth0']
|
|
||||||
KeyError: 'adresse_ip_eth0'
|
|
||||||
|
|
||||||
**Tiramisu**
|
|
||||||
|
|
||||||
**Organisation par arborescence.**
|
|
||||||
|
|
||||||
Un espace de nommage doit systématiquement être défini, la variable n'est
|
|
||||||
accessible **que** par un path.
|
|
||||||
|
|
||||||
|
|
||||||
Variables présentes deux fois
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
- Créole : pas de validation possible
|
|
||||||
- tiramisu : comportement règlable (on autorise l'unicité ou pas)
|
|
||||||
|
|
||||||
- dans Créole les valeurs sont **fausses** (c'est la dernière variable qui qui gagne)
|
|
||||||
|
|
||||||
Il faut faire confiance au XML
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
<family name="general">
|
|
||||||
<variable name="adresse_ip_eth0">
|
|
||||||
<valeur>toto
|
|
||||||
|
|
||||||
|
|
||||||
<family name="services">
|
|
||||||
<variable name="adresse_ip_eth0">
|
|
||||||
<valeur>tutu
|
|
||||||
|
|
||||||
|
|
||||||
dans `gen_config` la valeur retenue est::
|
|
||||||
|
|
||||||
general/adresse_ip_eth0 -> tutu
|
|
||||||
services/adresse_ip_eth0 -> tutu
|
|
||||||
|
|
||||||
dans `parsedico`, la variable est écrasée::
|
|
||||||
|
|
||||||
>>> from creole.parsedico import parse_dico
|
|
||||||
>>> d = parse_dico()
|
|
||||||
>>> d['adresse_ip_eth0']
|
|
||||||
tutu
|
|
||||||
|
|
||||||
dans tiramisu::
|
|
||||||
|
|
||||||
>>> config.general.adresse_ip_eth0
|
|
||||||
toto
|
|
||||||
>>> config.services.adresse_ip_eth0
|
|
||||||
tutu
|
|
||||||
|
|
||||||
|
|
|
@ -1,113 +0,0 @@
|
||||||
.. default-role:: literal
|
|
||||||
|
|
||||||
.. include:: inc/preambule.txt
|
|
||||||
|
|
||||||
Etats et statuts des options de configuration
|
|
||||||
================================================
|
|
||||||
|
|
||||||
état des variables et lisibilité de l'API
|
|
||||||
-------------------------------------------
|
|
||||||
|
|
||||||
**Creole**
|
|
||||||
|
|
||||||
`EoleVar()`
|
|
||||||
|
|
||||||
- `get_value()`
|
|
||||||
- `get_final_value()`
|
|
||||||
- `get_final_value_at_index()`
|
|
||||||
- `check_value()`
|
|
||||||
- `get_prec_value()`
|
|
||||||
- `get_calculated_value()` -> automatique
|
|
||||||
|
|
||||||
**tiramisu**
|
|
||||||
|
|
||||||
`Option()`
|
|
||||||
|
|
||||||
- **aucune API** d'accès à la valeur d'une option au niveau de l'option de configuration
|
|
||||||
- `option.getdefault()`
|
|
||||||
- `option.setoption(config, value, owner)`
|
|
||||||
|
|
||||||
variables "automatiques"
|
|
||||||
------------------------------
|
|
||||||
|
|
||||||
si `owner` == 'auto', la variable est automatique et la configuration le sait,
|
|
||||||
elle lance alors les fonctions de calcul à chaque évaluation
|
|
||||||
|
|
||||||
dans Créole, c'est validé aux niveau de la variable par un appel à `eval_func()`
|
|
||||||
|
|
||||||
Accès suivant les états de la configuration
|
|
||||||
--------------------------------------------
|
|
||||||
|
|
||||||
- disabled
|
|
||||||
- hidden
|
|
||||||
- mode (normal/expert)
|
|
||||||
- obligatoire (mandatory)
|
|
||||||
- ...
|
|
||||||
|
|
||||||
- `EoleVar.hidden`
|
|
||||||
- `EoleVar.disabled`
|
|
||||||
|
|
||||||
pas d'objet `Family` dans Créole donc l'organisation des hiérarchie de
|
|
||||||
hidden est opaque
|
|
||||||
|
|
||||||
- `EoleDict.families['hidden']` pour avoir accès à l'état d'une famille
|
|
||||||
|
|
||||||
dans Tiramisu
|
|
||||||
|
|
||||||
- `hidden` au niveau `Option`, `OptionDescription` et **aussi** au niveau de
|
|
||||||
la configuration ce qui permet d'avoir des états (inexistant dans `Créole`)
|
|
||||||
|
|
||||||
.. maitres/esclaves avec Créole : `mavar.get_slaves()`
|
|
||||||
|
|
||||||
|
|
||||||
`hidden_if_in`, `hidden_if_not_in`
|
|
||||||
-------------------------------------
|
|
||||||
|
|
||||||
La notion est généralisée dans tiramisu avec les `requires`.
|
|
||||||
|
|
||||||
Dans Créole : très difficile de conserver une cohérence des `hidden_if_in`
|
|
||||||
quand il y en a plusieurs.
|
|
||||||
|
|
||||||
Dans Tiramisu : validation et levée d'exception si les **requirements** sont
|
|
||||||
incohérents, action inverse si aucun requires n'est matché.
|
|
||||||
|
|
||||||
exemple de requires
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
<family name="clamav">
|
|
||||||
<variable name="activer_clam">
|
|
||||||
|
|
||||||
<variable name="activer_clam_exim">
|
|
||||||
<valeur>non
|
|
||||||
|
|
||||||
<variable name="activer_clam_samba">
|
|
||||||
<valeur>oui
|
|
||||||
|
|
||||||
<condition name='hidden_if_in' source='activer_clam_exim'>
|
|
||||||
<param>non
|
|
||||||
<target type='variable'>activer_clam
|
|
||||||
<!-- ça hide (momentanément)-->
|
|
||||||
|
|
||||||
<condition name='hidden_if_in' source='activer_clam_samba'>
|
|
||||||
<param>non
|
|
||||||
<target type='variable'>activer_clam
|
|
||||||
<!-- ça show (et c'est le dernier qui a raison) -->
|
|
||||||
|
|
||||||
:résultat: `activer_clam` est visible, c'est la dernière condition qui a raison
|
|
||||||
|
|
||||||
avec tiramisu, `activer_clam` **dans les même conditions**, est cachée.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
>>> activer_clam = StrOption('activer_clam', 'activer clamav',
|
|
||||||
requires=[('activer_clam_exim', 'non', 'hide'),
|
|
||||||
('activer_clam_samba', 'non', 'hide'),])
|
|
||||||
>>> config.clamav.activer_clam_exim = 'non'
|
|
||||||
>>> config.clamav.activer_clam_samba = 'oui'
|
|
||||||
>>> config.clamav.activer_clam
|
|
||||||
>>> Traceback (most recent call last):
|
|
||||||
File "<stdin>", line 1, in <module>
|
|
||||||
HiddenOptionError("trying to access to a hidden option:activer_clam")
|
|
||||||
>>>
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
|
|
||||||
%.odt: %.txt
|
|
||||||
rst2odt --create-links --custom-odt-footer="Page %p% de %P%" --endnotes-end-doc --no-generator --stylesheet=styles.odt $< $@
|
|
||||||
|
|
||||||
%.html: %.txt
|
|
||||||
rst2html --stylesheet ./build/style.css $< > ./build/$@
|
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
.PHONY: clean
|
|
||||||
.SUFFIXES:
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f *.html
|
|
||||||
rm -f api/*.html
|
|
|
@ -1,1080 +0,0 @@
|
||||||
body,body.editor,body.body {
|
|
||||||
font: 110% "Times New Roman", Arial, Verdana, Helvetica, serif;
|
|
||||||
background: White;
|
|
||||||
color: Black;
|
|
||||||
}
|
|
||||||
|
|
||||||
a, a.reference {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
a[href]:hover { text-decoration: underline; }
|
|
||||||
|
|
||||||
img {
|
|
||||||
border: none;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
p, div.text {
|
|
||||||
text-align: left;
|
|
||||||
line-height: 1.5em;
|
|
||||||
margin: 0.5em 0em 0em 0em;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
p a:active {
|
|
||||||
color: Red;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
p img {
|
|
||||||
border: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.inlinephoto {
|
|
||||||
padding: 0;
|
|
||||||
padding-right: 1em;
|
|
||||||
padding-top: 0.7em;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr {
|
|
||||||
clear: both;
|
|
||||||
height: 1px;
|
|
||||||
color: #8CACBB;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ul {
|
|
||||||
line-height: 1.5em;
|
|
||||||
/*list-style-image: url("bullet.gif"); */
|
|
||||||
margin-left: 1.5em;
|
|
||||||
padding:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol {
|
|
||||||
line-height: 1.5em;
|
|
||||||
margin-left: 1.5em;
|
|
||||||
padding:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul a, ol a {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
dl {
|
|
||||||
}
|
|
||||||
|
|
||||||
dt {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
dd {
|
|
||||||
line-height: 1.5em;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
font-family: Times, "Times New Roman", serif;
|
|
||||||
font-style: italic;
|
|
||||||
font-size: 120%;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
color: Black;
|
|
||||||
/*background-color: #dee7ec;*/
|
|
||||||
background-color: #cccccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
padding: 1em;
|
|
||||||
border: 1px solid #8cacbb;
|
|
||||||
color: Black;
|
|
||||||
background-color: #dee7ec;
|
|
||||||
background-color: #cccccc;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.netscape4 {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* main page styles */
|
|
||||||
|
|
||||||
/*a[href]:hover { color: black; text-decoration: underline; }
|
|
||||||
a[href]:link { color: black; text-decoration: underline; }
|
|
||||||
a[href] { color: black; text-decoration: underline; }
|
|
||||||
*/
|
|
||||||
|
|
||||||
span.menu_selected {
|
|
||||||
color: black;
|
|
||||||
font: 140% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
text-decoration: none;
|
|
||||||
padding-right: 0.3em;
|
|
||||||
background-color: #cccccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
a.menu {
|
|
||||||
/*color: #3ba6ec; */
|
|
||||||
font: 140% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
text-decoration: none;
|
|
||||||
padding-right: 0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.menu[href]:visited, a.menu[href]:link{
|
|
||||||
/*color: #3ba6ec; */
|
|
||||||
font: 140% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.menu[href]:hover {
|
|
||||||
/*color: black;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
div.project_title{
|
|
||||||
/*border-spacing: 20px;*/
|
|
||||||
font: 160% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
color: #3ba6ec;
|
|
||||||
vertical-align: middle;
|
|
||||||
padding-bottom: 0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.wikicurrent {
|
|
||||||
font: 100% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
color: #3ba6ec;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
table.body {
|
|
||||||
border: 0;
|
|
||||||
/*padding: 0;
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
td.page-header-left {
|
|
||||||
padding: 5px;
|
|
||||||
/*border-bottom: 1px solid #444444;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
td.page-header-top {
|
|
||||||
padding: 0;
|
|
||||||
|
|
||||||
/*border-bottom: 1px solid #444444;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
td.sidebar {
|
|
||||||
padding: 1 0 0 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.sidebar p.classblock {
|
|
||||||
padding: 0 5 0 5;
|
|
||||||
margin: 1 1 1 1;
|
|
||||||
border: 1px solid #444444;
|
|
||||||
background-color: #eeeeee;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.sidebar p.userblock {
|
|
||||||
padding: 0 5 0 5;
|
|
||||||
margin: 1 1 1 1;
|
|
||||||
border: 1px solid #444444;
|
|
||||||
background-color: #eeeeff;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.content {
|
|
||||||
padding: 1 5 1 5;
|
|
||||||
vertical-align: top;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.ok-message {
|
|
||||||
background-color: #22bb22;
|
|
||||||
padding: 5 5 5 5;
|
|
||||||
color: white;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
p.error-message {
|
|
||||||
background-color: #bb2222;
|
|
||||||
padding: 5 5 5 5;
|
|
||||||
color: white;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
p:first-child {
|
|
||||||
margin: 0 ;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* style for forms */
|
|
||||||
table.form {
|
|
||||||
padding: 2;
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.form th {
|
|
||||||
color: #333388;
|
|
||||||
text-align: right;
|
|
||||||
vertical-align: top;
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
table.form th.header {
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: #eeeeff;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.form th.required {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.form td {
|
|
||||||
color: #333333;
|
|
||||||
empty-cells: show;
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.form td.optional {
|
|
||||||
font-weight: bold;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.form td.html {
|
|
||||||
color: #777777;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* style for lists */
|
|
||||||
table.list {
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
vertical-align: top;
|
|
||||||
padding-top: 0;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.list th {
|
|
||||||
padding: 0 4 0 4;
|
|
||||||
color: #404070;
|
|
||||||
background-color: #eeeeff;
|
|
||||||
border-right: 1px solid #404070;
|
|
||||||
border-top: 1px solid #404070;
|
|
||||||
border-bottom: 1px solid #404070;
|
|
||||||
vertical-align: top;
|
|
||||||
empty-cells: show;
|
|
||||||
}
|
|
||||||
table.list th a[href]:hover { color: #404070 }
|
|
||||||
table.list th a[href]:link { color: #404070 }
|
|
||||||
table.list th a[href] { color: #404070 }
|
|
||||||
table.list th.group {
|
|
||||||
background-color: #f4f4ff;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 120%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.list td {
|
|
||||||
padding: 0 4 0 4;
|
|
||||||
border: 0 2 0 2;
|
|
||||||
border-right: 1px solid #404070;
|
|
||||||
color: #404070;
|
|
||||||
background-color: white;
|
|
||||||
vertical-align: top;
|
|
||||||
empty-cells: show;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.list tr.normal td {
|
|
||||||
background-color: white;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.list tr.alt td {
|
|
||||||
background-color: #efefef;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.list td:first-child {
|
|
||||||
border-left: 1px solid #404070;
|
|
||||||
border-right: 1px solid #404070;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.list th:first-child {
|
|
||||||
border-left: 1px solid #404070;
|
|
||||||
border-right: 1px solid #404070;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.list tr.navigation th {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
table.list tr.navigation th:first-child {
|
|
||||||
border-right: none;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* style for message displays */
|
|
||||||
table.messages {
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.messages th.header{
|
|
||||||
padding-top: 10px;
|
|
||||||
border-bottom: 1px solid gray;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: white;
|
|
||||||
color: #707040;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.messages th {
|
|
||||||
font-weight: bold;
|
|
||||||
color: black;
|
|
||||||
text-align: left;
|
|
||||||
border-bottom: 1px solid #afafaf;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.messages td {
|
|
||||||
font-family: monospace;
|
|
||||||
background-color: #efefef;
|
|
||||||
border-bottom: 1px solid #afafaf;
|
|
||||||
color: black;
|
|
||||||
empty-cells: show;
|
|
||||||
border-right: 1px solid #afafaf;
|
|
||||||
vertical-align: top;
|
|
||||||
padding: 2 5 2 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.messages td:first-child {
|
|
||||||
border-left: 1px solid #afafaf;
|
|
||||||
border-right: 1px solid #afafaf;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* style for file displays */
|
|
||||||
table.files {
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.files th.header{
|
|
||||||
padding-top: 10px;
|
|
||||||
border-bottom: 1px solid gray;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: white;
|
|
||||||
color: #707040;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.files th {
|
|
||||||
border-bottom: 1px solid #afafaf;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.files td {
|
|
||||||
font-family: monospace;
|
|
||||||
empty-cells: show;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* style for history displays */
|
|
||||||
table.history {
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.history th.header{
|
|
||||||
padding-top: 10px;
|
|
||||||
border-bottom: 1px solid gray;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: white;
|
|
||||||
color: #707040;
|
|
||||||
font-size: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.history th {
|
|
||||||
border-bottom: 1px solid #afafaf;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: left;
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.history td {
|
|
||||||
font-size: 90%;
|
|
||||||
vertical-align: top;
|
|
||||||
empty-cells: show;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* style for class list */
|
|
||||||
table.classlist {
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.classlist th.header{
|
|
||||||
padding-top: 10px;
|
|
||||||
border-bottom: 1px solid gray;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: white;
|
|
||||||
color: #707040;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.classlist th {
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* style for class help display */
|
|
||||||
table.classhelp {
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.classhelp th {
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: left;
|
|
||||||
color: #707040;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.classhelp td {
|
|
||||||
padding: 2 2 2 2;
|
|
||||||
border: 1px solid black;
|
|
||||||
text-align: left;
|
|
||||||
vertical-align: top;
|
|
||||||
empty-cells: show;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* style for "other" displays */
|
|
||||||
table.otherinfo {
|
|
||||||
border-spacing: 0px;
|
|
||||||
border-collapse: separate;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.otherinfo th.header{
|
|
||||||
padding-top: 10px;
|
|
||||||
border-bottom: 1px solid gray;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: white;
|
|
||||||
color: #707040;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.otherinfo th {
|
|
||||||
border-bottom: 1px solid #afafaf;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
input {
|
|
||||||
border: 1px solid #8cacbb;
|
|
||||||
color: Black;
|
|
||||||
background-color: white;
|
|
||||||
vertical-align: middle;
|
|
||||||
margin-bottom: 1px; /* IE bug fix */
|
|
||||||
padding: 0.1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
select {
|
|
||||||
border: 1px solid #8cacbb;
|
|
||||||
color: Black;
|
|
||||||
background-color: white;
|
|
||||||
vertical-align: middle;
|
|
||||||
margin-bottom: 1px; /* IE bug fix */
|
|
||||||
padding: 0.1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
a.nonexistent {
|
|
||||||
color: #FF2222;
|
|
||||||
}
|
|
||||||
a.nonexistent:visited {
|
|
||||||
color: #FF2222;
|
|
||||||
}
|
|
||||||
a.external {
|
|
||||||
color: #AA6600;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
dl,ul,ol {
|
|
||||||
margin-top: 1pt;
|
|
||||||
}
|
|
||||||
tt,pre {
|
|
||||||
font-family: Lucida Console,Courier New,Courier,monotype;
|
|
||||||
font-size: 12pt;
|
|
||||||
}
|
|
||||||
pre.code {
|
|
||||||
margin-top: 8pt;
|
|
||||||
margin-bottom: 8pt;
|
|
||||||
background-color: #FFFFEE;
|
|
||||||
white-space:pre;
|
|
||||||
border-style:solid;
|
|
||||||
border-width:1pt;
|
|
||||||
border-color:#999999;
|
|
||||||
color:#111111;
|
|
||||||
padding:5px;
|
|
||||||
width:100%;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
div.diffold {
|
|
||||||
background-color: #FFFF80;
|
|
||||||
border-style:none;
|
|
||||||
border-width:thin;
|
|
||||||
width:100%;
|
|
||||||
}
|
|
||||||
div.diffnew {
|
|
||||||
background-color: #80FF80;
|
|
||||||
border-style:none;
|
|
||||||
border-width:thin;
|
|
||||||
width:100%;
|
|
||||||
}
|
|
||||||
div.message {
|
|
||||||
margin-top: 6pt;
|
|
||||||
background-color: #E8FFE8;
|
|
||||||
border-style:solid;
|
|
||||||
border-width:1pt;
|
|
||||||
border-color:#999999;
|
|
||||||
color:#440000;
|
|
||||||
padding:5px;
|
|
||||||
width:100%;
|
|
||||||
}
|
|
||||||
strong.highlight {
|
|
||||||
background-color: #FFBBBB;
|
|
||||||
/* as usual, NetScape fucks up with innocent CSS
|
|
||||||
border-color: #FFAAAA;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 1pt;
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
table.navibar {
|
|
||||||
background-color: #C8C8C8;
|
|
||||||
border-spacing: 3px;
|
|
||||||
}
|
|
||||||
td.navibar {
|
|
||||||
background-color: #E8E8E8;
|
|
||||||
vertical-align: top;
|
|
||||||
text-align: right;
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.pagename {
|
|
||||||
font-size: 140%;
|
|
||||||
color: blue;
|
|
||||||
text-align: center;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: white;
|
|
||||||
padding: 0 ;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.wikiaction, input.wikiaction {
|
|
||||||
color: black;
|
|
||||||
text-decoration: None;
|
|
||||||
text-align: center;
|
|
||||||
color: black;
|
|
||||||
/*border: 1px solid #3ba6ec; */
|
|
||||||
margin: 4px;
|
|
||||||
padding: 5;
|
|
||||||
padding-bottom: 0;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.wikiaction[href]:hover {
|
|
||||||
color: black;
|
|
||||||
text-decoration: none;
|
|
||||||
/*background-color: #dddddd; */
|
|
||||||
}
|
|
||||||
|
|
||||||
span.wikiuserpref {
|
|
||||||
padding-top: 1em;
|
|
||||||
font-size: 120%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.wikitrail {
|
|
||||||
vertical-align: bottom;
|
|
||||||
/*font-size: -1;*/
|
|
||||||
padding-top: 1em;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.wikiaction {
|
|
||||||
vertical-align: middle;
|
|
||||||
/*border-bottom: 1px solid #8cacbb;*/
|
|
||||||
padding-bottom:1em;
|
|
||||||
text-align: left;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.wikieditmenu {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
form.wikiedit {
|
|
||||||
border: 1px solid #8cacbb;
|
|
||||||
background-color: #f0f0f0;
|
|
||||||
background-color: #fabf00;
|
|
||||||
padding: 1em;
|
|
||||||
padding-right: 0em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.legenditem {
|
|
||||||
padding-top: 0.5em;
|
|
||||||
padding-left: 0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.wikitoken {
|
|
||||||
background-color: #eeeeee;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
div#contentspace h1:first-child, div.heading:first-child {
|
|
||||||
padding-top: 0;
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
div#contentspace h2:first-child {
|
|
||||||
padding-top: 0;
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* heading and paragraph text */
|
|
||||||
|
|
||||||
div.heading, h1 {
|
|
||||||
font-family: Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
background-color: #58b3ef;
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
/*color: #4893cf;*/
|
|
||||||
color: black;
|
|
||||||
padding-top: 1.0em;
|
|
||||||
padding-bottom:0.2em;
|
|
||||||
text-align: left;
|
|
||||||
margin-top: 0em;
|
|
||||||
/*margin-bottom:8pt;*/
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 115%;
|
|
||||||
border-bottom: 1px solid #8CACBB;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
h1, h2, h3, h4, h5, h6 {
|
|
||||||
color: orange;
|
|
||||||
clear: left;
|
|
||||||
font: 100% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
margin: 0;
|
|
||||||
padding-left: 0em;
|
|
||||||
padding-top: 1em;
|
|
||||||
padding-bottom: 0.2em;
|
|
||||||
/*border-bottom: 1px solid #8CACBB;*/
|
|
||||||
}
|
|
||||||
/* h1,h2 { padding-top: 0; }*/
|
|
||||||
|
|
||||||
|
|
||||||
h1 { font-size: 145%; }
|
|
||||||
h2 { font-size: 135%; }
|
|
||||||
h3 { font-size: 125%; }
|
|
||||||
h4 { font-size: 120%; }
|
|
||||||
h5 { font-size: 110%; }
|
|
||||||
h6 { font-size: 80%; }
|
|
||||||
|
|
||||||
h1 a { text-decoration: None;}
|
|
||||||
|
|
||||||
div.exception {
|
|
||||||
background-color: #bb2222;
|
|
||||||
padding: 5 5 5 5;
|
|
||||||
color: white;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
pre.exception {
|
|
||||||
font-size: 110%;
|
|
||||||
padding: 1em;
|
|
||||||
border: 1px solid #8cacbb;
|
|
||||||
color: Black;
|
|
||||||
background-color: #dee7ec;
|
|
||||||
background-color: #cccccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* defines for navgiation bar (documentation) */
|
|
||||||
|
|
||||||
|
|
||||||
div.direntry {
|
|
||||||
padding-top: 0.3em;
|
|
||||||
padding-bottom: 0.3em;
|
|
||||||
margin-right: 1em;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: #dee7ec;
|
|
||||||
font-size: 110%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.fileentry {
|
|
||||||
font-family: Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
padding-bottom: 0.3em;
|
|
||||||
white-space: nowrap;
|
|
||||||
line-height: 150%;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.fileentry {
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
span.left {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
span.right {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.navbar {
|
|
||||||
/*margin: 0;*/
|
|
||||||
font-size: 80% /*smaller*/;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: left;
|
|
||||||
/* position: fixed; */
|
|
||||||
top: 100pt;
|
|
||||||
left: 0pt; /* auto; */
|
|
||||||
width: 120pt;
|
|
||||||
/* right: auto;
|
|
||||||
right: 0pt; 2em; */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
div.history a {
|
|
||||||
/* font-size: 70%; */
|
|
||||||
}
|
|
||||||
|
|
||||||
div.wikiactiontitle {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* REST defines */
|
|
||||||
|
|
||||||
div.document {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
margin: 0;
|
|
||||||
margin-bottom: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.toplist {
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
img#pyimg {
|
|
||||||
position: absolute;
|
|
||||||
top: 4px;
|
|
||||||
left: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#navspace {
|
|
||||||
position: absolute;
|
|
||||||
top: 130px;
|
|
||||||
left: 11px;
|
|
||||||
font-size: 100%;
|
|
||||||
width: 150px;
|
|
||||||
overflow: hidden; /* scroll; */
|
|
||||||
}
|
|
||||||
|
|
||||||
div#metaspace {
|
|
||||||
position: absolute;
|
|
||||||
top: 40px;
|
|
||||||
left: 170px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#errorline {
|
|
||||||
position: relative;
|
|
||||||
top: 5px;
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#contentspace {
|
|
||||||
position: absolute;
|
|
||||||
/* font: 120% "Times New Roman", serif;*/
|
|
||||||
font: 110% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
top: 130px;
|
|
||||||
left: 170px;
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#menubar {
|
|
||||||
/* width: 400px; */
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* for the documentation page */
|
|
||||||
div#docinfoline {
|
|
||||||
position: relative;
|
|
||||||
top: 5px;
|
|
||||||
left: 0px;
|
|
||||||
|
|
||||||
/*background-color: #dee7ec; */
|
|
||||||
padding: 5pt;
|
|
||||||
padding-bottom: 1em;
|
|
||||||
color: black;
|
|
||||||
/*border-width: 1pt;
|
|
||||||
border-style: solid;*/
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
div#docnavlist {
|
|
||||||
/*background-color: #dee7ec; */
|
|
||||||
padding: 5pt;
|
|
||||||
padding-bottom: 2em;
|
|
||||||
color: black;
|
|
||||||
border-width: 1pt;
|
|
||||||
/*border-style: solid;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* text markup */
|
|
||||||
|
|
||||||
div.listtitle {
|
|
||||||
color: Black;
|
|
||||||
clear: left;
|
|
||||||
font: 120% Verdana, Helvetica, Arial, sans-serif;
|
|
||||||
margin: 0;
|
|
||||||
padding-left: 0em;
|
|
||||||
padding-top: 0em;
|
|
||||||
padding-bottom: 0.2em;
|
|
||||||
margin-right: 0.5em;
|
|
||||||
border-bottom: 1px solid #8CACBB;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.actionbox h3 {
|
|
||||||
padding-top: 0;
|
|
||||||
padding-right: 0.5em;
|
|
||||||
padding-left: 0.5em;
|
|
||||||
background-color: #fabf00;
|
|
||||||
text-align: center;
|
|
||||||
border: 1px solid black; /* 8cacbb; */
|
|
||||||
}
|
|
||||||
|
|
||||||
div.actionbox a {
|
|
||||||
display: block;
|
|
||||||
padding-bottom: 0.5em;
|
|
||||||
padding-top: 0.5em;
|
|
||||||
margin-left: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.actionbox a.history {
|
|
||||||
display: block;
|
|
||||||
padding-bottom: 0.5em;
|
|
||||||
padding-top: 0.5em;
|
|
||||||
margin-left: 0.5em;
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.actionbox {
|
|
||||||
margin-bottom: 2em;
|
|
||||||
padding-bottom: 1em;
|
|
||||||
overflow: hidden; /* scroll; */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* taken from docutils (oh dear, a bit senseless) */
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:date: $Date: 2003/01/22 22:26:48 $
|
|
||||||
:version: $Revision: 1.29 $
|
|
||||||
:copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
.first {
|
|
||||||
margin-top: 0 }
|
|
||||||
|
|
||||||
.last {
|
|
||||||
margin-bottom: 0 }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.attention, div.caution, div.danger, div.error, div.hint,
|
|
||||||
div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.hint p.admonition-title, div.important p.admonition-title,
|
|
||||||
div.note p.admonition-title, div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center ;
|
|
||||||
color: orange}
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
color: orange;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.line-block {
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.option-argument {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
table {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid thin gray ;
|
|
||||||
padding-left: 0.5ex }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid thin black ;
|
|
||||||
padding-left: 0.5ex }
|
|
||||||
|
|
||||||
td, th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
th.docinfo-name, th.field-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.section {
|
|
||||||
margin-top: 1.0em ;
|
|
||||||
}
|
|
|
@ -1,255 +0,0 @@
|
||||||
.first {
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: inherit }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
dl dt { line-height: 150% }
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.document {
|
|
||||||
width: 600px ;
|
|
||||||
margin-left: 5em ;
|
|
||||||
margin-right: 5em }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1, h2, h3, h4, h5 {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
line-height: 150% ;
|
|
||||||
color: orange} /* #666 } */
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center
|
|
||||||
}
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.line-block {
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
font-size: small ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.option-argument {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid thin gray }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
/* float: right ; */
|
|
||||||
margin: 2em 4em ;
|
|
||||||
color: #666 }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid thin black }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
th.docinfo-name, th.field-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: right ;
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 37 KiB |
|
@ -1,76 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
|
|
||||||
<title>rapports eole</title>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
@import url(docutils.css);
|
|
||||||
@import url(default.css);
|
|
||||||
a:link {
|
|
||||||
color: orange;
|
|
||||||
font-weight: bold;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
text-decoration: none;
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
a:active {
|
|
||||||
text-decoration: none;
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header {
|
|
||||||
color: orange;
|
|
||||||
background-color: white;
|
|
||||||
padding: 1em;
|
|
||||||
}
|
|
||||||
.footer {
|
|
||||||
color: #666;
|
|
||||||
background-color: inherit;
|
|
||||||
font-size: 75%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="document">
|
|
||||||
|
|
||||||
|
|
||||||
<img alt="imgs/eol.png" class="align-right" src="imgs/eol.png" />
|
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">date:</th><td class="field-body">mai 2012</td>
|
|
||||||
</tr>
|
|
||||||
<tr class="field"><th class="field-name">description:</th><td class="field-body">rapports <tt class="docutils literal">Créole</tt>, compatibilités <tt class="docutils literal">Creole</tt> et <tt class="docutils literal">tiramisu</tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<div class="section" id="vue-d-ensemble-des-rapports">
|
|
||||||
<h1>Vue d'ensemble des rapports</h1>
|
|
||||||
<p>Les rapports ci-dessous résument et permettent de donner des points d'appui à
|
|
||||||
des discussions de recherche et développement concernant l'évolution du
|
|
||||||
projet <tt class="docutils literal">Creole</tt> (comprenant <tt class="docutils literal">Creole_Serv</tt>). Il y a aussi le support de
|
|
||||||
documentation développeur <tt class="docutils literal">tiramisu</tt> (en anglais) qui constitue une bonne
|
|
||||||
base pour connaître et comprendre plus en détails les motivations de
|
|
||||||
la nouvelle implementation.</p>
|
|
||||||
<ul class="simple">
|
|
||||||
<li><a class="reference external" href="pdfreport/D01AccesVariables.pdf">D01AccesVariables.pdf</a></li>
|
|
||||||
<li><a class="reference external" href="pdfreport/D02CoherenceVariables.pdf">D02CoherenceVariables.pdf</a></li>
|
|
||||||
<li><a class="reference external" href="pdfreport/D03ReglesEtats.pdf">D03ReglesEtats.pdf</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,22 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
import sys
|
|
||||||
from glob import glob
|
|
||||||
from os.path import isfile, dirname, abspath, join, basename, splitext
|
|
||||||
from rst import Rest, Paragraph, Strong, ListItem, Link
|
|
||||||
|
|
||||||
|
|
||||||
here = abspath(dirname(__file__))
|
|
||||||
html = glob(join(here, '*.pdf'))
|
|
||||||
|
|
||||||
basehtml = [basename(htm) for htm in html]
|
|
||||||
basehtml.sort()
|
|
||||||
|
|
||||||
content = Rest()
|
|
||||||
|
|
||||||
for htm in basehtml:
|
|
||||||
link = Link( htm , "pdfreport/" +htm)
|
|
||||||
content.add(ListItem(link))
|
|
||||||
|
|
||||||
sys.stdout.write(content.text())
|
|
||||||
|
|
||||||
|
|
|
@ -1,410 +0,0 @@
|
||||||
# unproudly borrowed from pypy :
|
|
||||||
# http://codespeak.net/svn/pypy/trunk/pypy/tool/rest/rst.py
|
|
||||||
""" reStructuredText generation tools
|
|
||||||
|
|
||||||
provides an api to build a tree from nodes, which can be converted to
|
|
||||||
ReStructuredText on demand
|
|
||||||
|
|
||||||
note that not all of ReST is supported, a usable subset is offered, but
|
|
||||||
certain features aren't supported, and also certain details (like how links
|
|
||||||
are generated, or how escaping is done) can not be controlled
|
|
||||||
"""
|
|
||||||
|
|
||||||
import re
|
|
||||||
|
|
||||||
def escape(txt):
|
|
||||||
"""escape ReST markup"""
|
|
||||||
if not isinstance(txt, str) and not isinstance(txt, unicode):
|
|
||||||
txt = str(txt)
|
|
||||||
# XXX this takes a very naive approach to escaping, but it seems to be
|
|
||||||
# sufficient...
|
|
||||||
for c in '\\*`|:_':
|
|
||||||
txt = txt.replace(c, '\\%s' % (c,))
|
|
||||||
return txt
|
|
||||||
|
|
||||||
class RestError(Exception):
|
|
||||||
""" raised on containment errors (wrong parent) """
|
|
||||||
|
|
||||||
class AbstractMetaclass(type):
|
|
||||||
def __new__(cls, *args):
|
|
||||||
obj = super(AbstractMetaclass, cls).__new__(cls, *args)
|
|
||||||
parent_cls = obj.parentclass
|
|
||||||
if parent_cls is None:
|
|
||||||
return obj
|
|
||||||
if not isinstance(parent_cls, list):
|
|
||||||
class_list = [parent_cls]
|
|
||||||
else:
|
|
||||||
class_list = parent_cls
|
|
||||||
if obj.allow_nesting:
|
|
||||||
class_list.append(obj)
|
|
||||||
|
|
||||||
for _class in class_list:
|
|
||||||
if not _class.allowed_child:
|
|
||||||
_class.allowed_child = {obj:True}
|
|
||||||
else:
|
|
||||||
_class.allowed_child[obj] = True
|
|
||||||
return obj
|
|
||||||
|
|
||||||
class AbstractNode(object):
|
|
||||||
""" Base class implementing rest generation
|
|
||||||
"""
|
|
||||||
sep = ''
|
|
||||||
__metaclass__ = AbstractMetaclass
|
|
||||||
parentclass = None # this exists to allow parent to know what
|
|
||||||
# children can exist
|
|
||||||
allow_nesting = False
|
|
||||||
allowed_child = {}
|
|
||||||
defaults = {}
|
|
||||||
|
|
||||||
_reg_whitespace = re.compile('\s+')
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
self.parent = None
|
|
||||||
self.children = []
|
|
||||||
for child in args:
|
|
||||||
self._add(child)
|
|
||||||
for arg in kwargs:
|
|
||||||
setattr(self, arg, kwargs[arg])
|
|
||||||
|
|
||||||
def join(self, *children):
|
|
||||||
""" add child nodes
|
|
||||||
|
|
||||||
returns a reference to self
|
|
||||||
"""
|
|
||||||
for child in children:
|
|
||||||
self._add(child)
|
|
||||||
return self
|
|
||||||
|
|
||||||
def add(self, child):
|
|
||||||
""" adds a child node
|
|
||||||
|
|
||||||
returns a reference to the child
|
|
||||||
"""
|
|
||||||
self._add(child)
|
|
||||||
return child
|
|
||||||
|
|
||||||
def _add(self, child):
|
|
||||||
if child.__class__ not in self.allowed_child:
|
|
||||||
raise RestError("%r cannot be child of %r" % \
|
|
||||||
(child.__class__, self.__class__))
|
|
||||||
self.children.append(child)
|
|
||||||
child.parent = self
|
|
||||||
|
|
||||||
def __getitem__(self, item):
|
|
||||||
return self.children[item]
|
|
||||||
|
|
||||||
def __setitem__(self, item, value):
|
|
||||||
self.children[item] = value
|
|
||||||
|
|
||||||
def text(self):
|
|
||||||
""" return a ReST string representation of the node """
|
|
||||||
return self.sep.join([child.text() for child in self.children])
|
|
||||||
|
|
||||||
def wordlist(self):
|
|
||||||
""" return a list of ReST strings for this node and its children """
|
|
||||||
return [self.text()]
|
|
||||||
|
|
||||||
class Rest(AbstractNode):
|
|
||||||
""" Root node of a document """
|
|
||||||
|
|
||||||
sep = "\n\n"
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
AbstractNode.__init__(self, *args, **kwargs)
|
|
||||||
self.links = {}
|
|
||||||
|
|
||||||
def render_links(self, check=False):
|
|
||||||
"""render the link attachments of the document"""
|
|
||||||
assert not check, "Link checking not implemented"
|
|
||||||
if not self.links:
|
|
||||||
return ""
|
|
||||||
link_texts = []
|
|
||||||
# XXX this could check for duplicates and remove them...
|
|
||||||
for link, target in self.links.iteritems():
|
|
||||||
link_texts.append(".. _`%s`: %s" % (escape(link), target))
|
|
||||||
return "\n" + "\n".join(link_texts) + "\n\n"
|
|
||||||
|
|
||||||
def text(self):
|
|
||||||
outcome = []
|
|
||||||
if (isinstance(self.children[0], Transition) or
|
|
||||||
isinstance(self.children[-1], Transition)):
|
|
||||||
raise ValueError, ('document must not begin or end with a '
|
|
||||||
'transition')
|
|
||||||
for child in self.children:
|
|
||||||
outcome.append(child.text())
|
|
||||||
|
|
||||||
# always a trailing newline
|
|
||||||
text = self.sep.join([i for i in outcome if i]) + "\n"
|
|
||||||
return text + self.render_links()
|
|
||||||
|
|
||||||
class Transition(AbstractNode):
|
|
||||||
""" a horizontal line """
|
|
||||||
parentclass = Rest
|
|
||||||
|
|
||||||
def __init__(self, char='-', width=80, *args, **kwargs):
|
|
||||||
self.char = char
|
|
||||||
self.width = width
|
|
||||||
super(Transition, self).__init__(*args, **kwargs)
|
|
||||||
|
|
||||||
def text(self):
|
|
||||||
return (self.width - 1) * self.char
|
|
||||||
|
|
||||||
class Paragraph(AbstractNode):
|
|
||||||
""" simple paragraph """
|
|
||||||
|
|
||||||
parentclass = Rest
|
|
||||||
sep = " "
|
|
||||||
indent = ""
|
|
||||||
# FIXME
|
|
||||||
width = 880
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
# make shortcut
|
|
||||||
args = list(args)
|
|
||||||
for num, arg in enumerate(args):
|
|
||||||
if isinstance(arg, str):
|
|
||||||
args[num] = Text(arg)
|
|
||||||
super(Paragraph, self).__init__(*args, **kwargs)
|
|
||||||
|
|
||||||
def text(self):
|
|
||||||
texts = []
|
|
||||||
for child in self.children:
|
|
||||||
texts += child.wordlist()
|
|
||||||
|
|
||||||
buf = []
|
|
||||||
outcome = []
|
|
||||||
lgt = len(self.indent)
|
|
||||||
|
|
||||||
def grab(buf):
|
|
||||||
outcome.append(self.indent + self.sep.join(buf))
|
|
||||||
|
|
||||||
texts.reverse()
|
|
||||||
while texts:
|
|
||||||
next = texts[-1]
|
|
||||||
if not next:
|
|
||||||
texts.pop()
|
|
||||||
continue
|
|
||||||
if lgt + len(self.sep) + len(next) <= self.width or not buf:
|
|
||||||
buf.append(next)
|
|
||||||
lgt += len(next) + len(self.sep)
|
|
||||||
texts.pop()
|
|
||||||
else:
|
|
||||||
grab(buf)
|
|
||||||
lgt = len(self.indent)
|
|
||||||
buf = []
|
|
||||||
grab(buf)
|
|
||||||
return "\n".join(outcome)
|
|
||||||
|
|
||||||
class SubParagraph(Paragraph):
|
|
||||||
""" indented sub paragraph """
|
|
||||||
|
|
||||||
indent = " "
|
|
||||||
|
|
||||||
class Title(Paragraph):
|
|
||||||
""" title element """
|
|
||||||
|
|
||||||
parentclass = Rest
|
|
||||||
belowchar = "="
|
|
||||||
abovechar = ""
|
|
||||||
|
|
||||||
def text(self):
|
|
||||||
txt = self._get_text()
|
|
||||||
lines = []
|
|
||||||
if self.abovechar:
|
|
||||||
lines.append(self.abovechar * len(txt))
|
|
||||||
lines.append(txt)
|
|
||||||
if self.belowchar:
|
|
||||||
lines.append(self.belowchar * len(txt))
|
|
||||||
return "\n".join(lines)
|
|
||||||
|
|
||||||
def _get_text(self):
|
|
||||||
txt = []
|
|
||||||
for node in self.children:
|
|
||||||
txt += node.wordlist()
|
|
||||||
return ' '.join(txt)
|
|
||||||
|
|
||||||
class AbstractText(AbstractNode):
|
|
||||||
parentclass = [Paragraph, Title]
|
|
||||||
start = ""
|
|
||||||
end = ""
|
|
||||||
def __init__(self, _text):
|
|
||||||
self._text = _text
|
|
||||||
|
|
||||||
def text(self):
|
|
||||||
text = self.escape(self._text)
|
|
||||||
return self.start + text + self.end
|
|
||||||
|
|
||||||
def escape(self, text):
|
|
||||||
if not isinstance(text, str) and not isinstance(text, unicode):
|
|
||||||
text = str(text)
|
|
||||||
if self.start:
|
|
||||||
text = text.replace(self.start, '\\%s' % (self.start,))
|
|
||||||
if self.end and self.end != self.start:
|
|
||||||
text = text.replace(self.end, '\\%s' % (self.end,))
|
|
||||||
return text
|
|
||||||
|
|
||||||
class Text(AbstractText):
|
|
||||||
def wordlist(self):
|
|
||||||
text = escape(self._text)
|
|
||||||
return self._reg_whitespace.split(text)
|
|
||||||
|
|
||||||
class LiteralBlock(AbstractText):
|
|
||||||
parentclass = Rest
|
|
||||||
start = '::\n\n'
|
|
||||||
|
|
||||||
def text(self):
|
|
||||||
if not self._text.strip():
|
|
||||||
return ''
|
|
||||||
text = self.escape(self._text).split('\n')
|
|
||||||
for i, line in enumerate(text):
|
|
||||||
if line.strip():
|
|
||||||
text[i] = ' %s' % (line,)
|
|
||||||
return self.start + '\n'.join(text)
|
|
||||||
|
|
||||||
class Em(AbstractText):
|
|
||||||
start = "*"
|
|
||||||
end = "*"
|
|
||||||
|
|
||||||
class Strong(AbstractText):
|
|
||||||
start = "**"
|
|
||||||
end = "**"
|
|
||||||
|
|
||||||
class Quote(AbstractText):
|
|
||||||
start = '``'
|
|
||||||
end = '``'
|
|
||||||
|
|
||||||
class Anchor(AbstractText):
|
|
||||||
start = '_`'
|
|
||||||
end = '`'
|
|
||||||
|
|
||||||
class Footnote(AbstractText):
|
|
||||||
def __init__(self, note, symbol=False):
|
|
||||||
raise NotImplemented('XXX')
|
|
||||||
|
|
||||||
class Citation(AbstractText):
|
|
||||||
def __init__(self, text, cite):
|
|
||||||
raise NotImplemented('XXX')
|
|
||||||
|
|
||||||
class ListItem(Paragraph):
|
|
||||||
allow_nesting = True
|
|
||||||
item_chars = '*+-'
|
|
||||||
|
|
||||||
def text(self):
|
|
||||||
idepth = self.get_indent_depth()
|
|
||||||
indent = self.indent + (idepth + 1) * ' '
|
|
||||||
txt = '\n\n'.join(self.render_children(indent))
|
|
||||||
ret = []
|
|
||||||
item_char = self.item_chars[idepth]
|
|
||||||
ret += [indent[len(item_char)+1:], item_char, ' ', txt[len(indent):]]
|
|
||||||
return ''.join(ret)
|
|
||||||
|
|
||||||
def render_children(self, indent):
|
|
||||||
txt = []
|
|
||||||
buffer = []
|
|
||||||
def render_buffer(fro, to):
|
|
||||||
if not fro:
|
|
||||||
return
|
|
||||||
p = Paragraph(indent=indent, *fro)
|
|
||||||
p.parent = self.parent
|
|
||||||
to.append(p.text())
|
|
||||||
for child in self.children:
|
|
||||||
if isinstance(child, AbstractText):
|
|
||||||
buffer.append(child)
|
|
||||||
else:
|
|
||||||
if buffer:
|
|
||||||
render_buffer(buffer, txt)
|
|
||||||
buffer = []
|
|
||||||
txt.append(child.text())
|
|
||||||
|
|
||||||
render_buffer(buffer, txt)
|
|
||||||
return txt
|
|
||||||
|
|
||||||
def get_indent_depth(self):
|
|
||||||
depth = 0
|
|
||||||
current = self
|
|
||||||
while (current.parent is not None and
|
|
||||||
isinstance(current.parent, ListItem)):
|
|
||||||
depth += 1
|
|
||||||
current = current.parent
|
|
||||||
return depth
|
|
||||||
|
|
||||||
class OrderedListItem(ListItem):
|
|
||||||
item_chars = ["#."] * 5
|
|
||||||
|
|
||||||
class DListItem(ListItem):
|
|
||||||
item_chars = None
|
|
||||||
def __init__(self, term, definition, *args, **kwargs):
|
|
||||||
self.term = term
|
|
||||||
super(DListItem, self).__init__(definition, *args, **kwargs)
|
|
||||||
|
|
||||||
def text(self):
|
|
||||||
idepth = self.get_indent_depth()
|
|
||||||
indent = self.indent + (idepth + 1) * ' '
|
|
||||||
txt = '\n\n'.join(self.render_children(indent))
|
|
||||||
ret = []
|
|
||||||
ret += [indent[2:], self.term, '\n', txt]
|
|
||||||
return ''.join(ret)
|
|
||||||
|
|
||||||
class Link(AbstractText):
|
|
||||||
start = '`'
|
|
||||||
end = '`_'
|
|
||||||
|
|
||||||
def __init__(self, _text, target):
|
|
||||||
self._text = _text
|
|
||||||
self.target = target
|
|
||||||
self.rest = None
|
|
||||||
|
|
||||||
def text(self):
|
|
||||||
if self.rest is None:
|
|
||||||
self.rest = self.find_rest()
|
|
||||||
if self.rest.links.get(self._text, self.target) != self.target:
|
|
||||||
raise ValueError('link name %r already in use for a different '
|
|
||||||
'target' % (self.target,))
|
|
||||||
self.rest.links[self._text] = self.target
|
|
||||||
return AbstractText.text(self)
|
|
||||||
|
|
||||||
def find_rest(self):
|
|
||||||
# XXX little overkill, but who cares...
|
|
||||||
next = self
|
|
||||||
while next.parent is not None:
|
|
||||||
next = next.parent
|
|
||||||
return next
|
|
||||||
|
|
||||||
class InternalLink(AbstractText):
|
|
||||||
start = '`'
|
|
||||||
end = '`_'
|
|
||||||
|
|
||||||
class LinkTarget(Paragraph):
|
|
||||||
def __init__(self, name, target):
|
|
||||||
self.name = name
|
|
||||||
self.target = target
|
|
||||||
|
|
||||||
def text(self):
|
|
||||||
return ".. _`%s`:%s\n" % (self.name, self.target)
|
|
||||||
|
|
||||||
class Substitution(AbstractText):
|
|
||||||
def __init__(self, text, **kwargs):
|
|
||||||
raise NotImplemented('XXX')
|
|
||||||
|
|
||||||
class Directive(Paragraph):
|
|
||||||
indent = ' '
|
|
||||||
def __init__(self, name, *args, **options):
|
|
||||||
self.name = name
|
|
||||||
self.content = args
|
|
||||||
super(Directive, self).__init__()
|
|
||||||
self.options = options
|
|
||||||
|
|
||||||
def text(self):
|
|
||||||
# XXX not very pretty...
|
|
||||||
txt = '.. %s::' % (self.name,)
|
|
||||||
options = '\n'.join([' :%s: %s' % (k, v) for (k, v) in
|
|
||||||
self.options.iteritems()])
|
|
||||||
if options:
|
|
||||||
txt += '\n%s' % (options,)
|
|
||||||
|
|
||||||
if self.content:
|
|
||||||
txt += '\n'
|
|
||||||
for item in self.content:
|
|
||||||
txt += '\n ' + item
|
|
||||||
|
|
||||||
return txt
|
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
@import url(docutils.css);
|
|
||||||
@import url(default.css);
|
|
||||||
a:link {
|
|
||||||
color: orange;
|
|
||||||
font-weight: bold;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
text-decoration: none;
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
a:active {
|
|
||||||
text-decoration: none;
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header {
|
|
||||||
color: orange;
|
|
||||||
background-color: white;
|
|
||||||
padding: 1em;
|
|
||||||
}
|
|
||||||
.footer {
|
|
||||||
color: #666;
|
|
||||||
background-color: inherit;
|
|
||||||
font-size: 75%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
.. container:: rubric
|
|
||||||
|
|
||||||
**Rédacteurs**
|
|
||||||
|
|
||||||
| Gwenaël Rémond (gremond@cadoles.com)
|
|
||||||
| Emmanuel Garette (egarette@cadoles.com)
|
|
||||||
|
|
||||||
**Référence**
|
|
||||||
|
|
||||||
| ``tiramisu/doc/eole-reports``
|
|
||||||
| ``git clone ssh://gitosis@git.cadol.es:2222/tiramisu.git``
|
|
||||||
|
|
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 11 KiB |
|
@ -1,18 +0,0 @@
|
||||||
.. csv-table::
|
|
||||||
|
|
||||||
.. image:: inc/logo.png, .. image:: inc/eol.png
|
|
||||||
|
|
||||||
.. container:: title
|
|
||||||
|
|
||||||
Rapports de discussions de recherche et développements
|
|
||||||
|
|
||||||
------------
|
|
||||||
|
|
||||||
.. container:: subtitle
|
|
||||||
|
|
||||||
Comparaison ``tiramisu`` et ``Créole``
|
|
||||||
|
|
||||||
.. include:: 00-Redacteur.txt
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
.. default-role:: literal
|
|
||||||
|
|
||||||
.. title:: rapports eole
|
|
||||||
|
|
||||||
|
|
||||||
.. image:: imgs/eol.png
|
|
||||||
:align: right
|
|
||||||
|
|
||||||
:date: mai 2012
|
|
||||||
:description: rapports `Créole`, compatibilités `Creole` et `tiramisu`
|
|
||||||
|
|
||||||
|
|
||||||
Vue d'ensemble des rapports
|
|
||||||
===================================
|
|
||||||
|
|
||||||
Les rapports ci-dessous résument et permettent de donner des points d'appui à
|
|
||||||
des discussions de recherche et développement concernant l'évolution du
|
|
||||||
projet `Creole` (comprenant `Creole_Serv`). Il y a aussi le support de
|
|
||||||
documentation développeur `tiramisu` (en anglais) qui constitue une bonne
|
|
||||||
base pour connaître et comprendre plus en détails les motivations de
|
|
||||||
la nouvelle implementation.
|
|
||||||
|
|
||||||
|
|
||||||
* `D01AccesVariables.pdf`_
|
|
||||||
|
|
||||||
* `D02CoherenceVariables.pdf`_
|
|
||||||
|
|
||||||
* `D03ReglesEtats.pdf`_
|
|
||||||
|
|
||||||
.. _`D03ReglesEtats.pdf`: pdfreport/D03ReglesEtats.pdf
|
|
||||||
.. _`D02CoherenceVariables.pdf`: pdfreport/D02CoherenceVariables.pdf
|
|
||||||
.. _`D01AccesVariables.pdf`: pdfreport/D01AccesVariables.pdf
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
SRC=$(wildcard *.tex)
|
|
||||||
OBJ=$(subst .tex,.pdf,$(SRC))
|
|
||||||
|
|
||||||
pdf: $(OBJ)
|
|
||||||
|
|
||||||
%.pdf: %.tex
|
|
||||||
pdflatex $<
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f $(OBJ)
|
|
||||||
rm -f *.aux *.log *.toc *.snm *.out *.nav
|
|
||||||
|
|
|
@ -1,69 +0,0 @@
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Comparaison entre le noyau de Créole et Tiramisu}
|
|
||||||
\begin{itemize}
|
|
||||||
\item \emph{Tiramisu} a pour objectif de
|
|
||||||
\begin{itemize}
|
|
||||||
\item remplacer le noyau \emph{Creole} (\texttt{EoleDict}) de manière transparente ;
|
|
||||||
\item résoudre les problèmes inhérents à \texttt{CreoleServ} ;
|
|
||||||
\end{itemize}
|
|
||||||
\item au niveau du code, il y a enfin une vraie séparation du c\oe ur et du fonctionnel ;
|
|
||||||
\item valide le type \emph{et la structure}, l'ajout de types est aisé.
|
|
||||||
\item \emph{Creole} : \texttt{EoleDict, EoleVars} $ \Leftrightarrow $ \texttt{Config, Option}\\
|
|
||||||
cf \texttt{tiramisu/doc/build/pydoc/index.html}
|
|
||||||
\item intégré à \texttt{gen\_config}, \texttt{cheetah}, \texttt{DTD Creole}, syntaxe \texttt{Creole} \dots
|
|
||||||
\item \texttt{eole-report/D02CoherenceVariables.pdf}
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Gestionnaire de configuration existants}
|
|
||||||
\begin{itemize}
|
|
||||||
\item Le gestionnaire de conf de Victor Stinner $\Rightarrow$ \emph{NuFw};
|
|
||||||
\item puppet, cfgengine... $\Rightarrow$ intéressant, de nombreux comportements peuvent être repris, mais tel quel difficilement compatible avec \emph{Creole};
|
|
||||||
\item \emph{Creole} $\Leftrightarrow$ \texttt{tiramisu/doc/build/glossary.html}
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Un "vrai" serveur de config}
|
|
||||||
\begin{itemize}
|
|
||||||
\item un serveur de données de configuration ;
|
|
||||||
\item $1^{ere}$ méthode : exportation (snapshot) d'un état de la config $ \Rightarrow $ Créole ;
|
|
||||||
\item $2^{eme}$ méthode : JIT (just in time) calculation, une modification
|
|
||||||
de l'état de la configuration est possible \emph{pendant} la manipulation et l'utilisation de la conf $ \Rightarrow $ Tiramisu.
|
|
||||||
\item \texttt{doc/getting-started.html}
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Qu'est-ce qu'un gestionnaire de conf moderne ?}
|
|
||||||
\begin{itemize}
|
|
||||||
\item c'est une organisation arborescente des données (les données sont imbriquées) ;
|
|
||||||
\item c'est un accès facile aux données (typiquement une interface de type \emph{dictionnaire}) ;
|
|
||||||
\item clefs-valeurs, mais quelles valeurs exactement ? $ \Rightarrow $ calcul JIT (just in time) ;
|
|
||||||
\item \texttt{eole-report/D01AccesVariables.pdf}
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Définition d'un gestionnaire de configuration}
|
|
||||||
\begin{itemize}
|
|
||||||
\item les families, groups, master \dots~ ce sont des \emph{schémas} de données (\texttt{OptionDescription}) ;
|
|
||||||
\item c'est la configuration (\texttt{Config}) qui est responsable de l'accès aux valeurs ;
|
|
||||||
\item la configuration est aisément manipulable, et a un point d'entrée unique ;
|
|
||||||
\item l'accès aux valeurs des \texttt{Options} de configuration ne peut se faire \emph{que} depuis la conf racine.
|
|
||||||
\item \texttt{eole-report/D01AccesVariables.pdf}
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Organisation en espace de nommage}
|
|
||||||
\begin{itemize}
|
|
||||||
\item dans \emph{tiramisu} l'accent est mis sur l'organisation arborescente des données ;
|
|
||||||
\item la validation des options de configuration se fait par l'appartenance aux groupes (families, master/slaves \dots) ;
|
|
||||||
\item l'organisation en groupes est unifiée par l'espace de nommage ;
|
|
||||||
\item \texttt{eole-report/D03ReglesEtats.pdf}
|
|
||||||
\item lisibilité d'une config : \texttt{tiramisu/report/build/index.html} rapport html d'une config
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
|
@ -1,61 +0,0 @@
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Etats ("status") de la configuration}
|
|
||||||
\begin{itemize}
|
|
||||||
\item système d'états de la configuration par \emph{droits d'accès} ;
|
|
||||||
\item \texttt{read write}, \texttt{read only} ;
|
|
||||||
\item correspond à \texttt{freeze}, \texttt{hidden}, \texttt{disabled} \dots ;
|
|
||||||
\item \texttt{doc/status.html} ;
|
|
||||||
\item \texttt{eole-report/D03ReglesEtats.pdf} ;
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{hidden if in, hidden if not in}
|
|
||||||
\begin{itemize}
|
|
||||||
\item les hidden if in, disabled if, \dots sont généralisés
|
|
||||||
\item dans tiramisu, ce sont des pré-requis sur une (des) variables
|
|
||||||
\item \texttt{eole-report/D03ReglesEtats.pdf}
|
|
||||||
\item \texttt{doc/consistency.html}
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{un peu de mathématiques : prévenir les deadlocks}
|
|
||||||
\begin{itemize}
|
|
||||||
\item sûreté : prévention des deadlocks ;
|
|
||||||
\item dans tiramisu, le modèle est suffisamment abstrait pour que son exploitation mathématique soit
|
|
||||||
réalisable par les techniques de \emph{Model Checking} ;
|
|
||||||
\item soit on a besoin de ne connaître que l'ensemble des états, pas leurs liens $\Rightarrow$ espace d'états ;
|
|
||||||
\item soit on a besoin de connaître toutes les relations $\Rightarrow$ graphe d'accessibilité ;
|
|
||||||
\item la configuration est modélisable en une structure de \emph{Kripe} ;
|
|
||||||
\item déjà le parsing de la conf est facile, la preuve : \texttt{tiramisu/report/build/index.html}
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{un peu de mathématiques (suite) CreoleLint}
|
|
||||||
\begin{itemize}
|
|
||||||
\item exemple : $ P = 3 \wedge Q = 1 \triangleleft \langle P = 1 \hookleftarrow Q = 0 \rangle$
|
|
||||||
\item la propriété \og dans aucun état on a $P = 3$ et $Q = 1$ \fg~ est-elle vraie ?
|
|
||||||
Pour vérifier cette propriété, on a besoin de connaître l'espace d'états ;
|
|
||||||
\item la propriété \og chaque chemin débutant dans un état accessible $P=1$ passe par un état où $Q=3$ et $P=2$ \fg~
|
|
||||||
est-elle vraie ? Cela demande de connaître le graphe d'accessibilité ;
|
|
||||||
\item les structures de \emph{Kripe} sont des machines à états étiquetées par les valuations de toutes les variables propositionnelles ;
|
|
||||||
\item une compliation statique devient possible dans \emph{CreoleLint} \dots
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{compatibilité Créole : ce qui reste à faire}
|
|
||||||
\begin{itemize}
|
|
||||||
\item les options spéciales sont implémentées (auto, fill, obligatoire, \dots) reste la librairie des fonctions pour les variables automatiques \texttt{eosfunc} ;
|
|
||||||
\item tous les états sont implémentés (hidden, disabled, mode (normal/expert), \dots), il faut fixer les comportement \texttt{read write} ;
|
|
||||||
\item les "valprec" (valeur précédentes) et une mémoire de \emph{tous} les états antérieurs ;
|
|
||||||
\item fixer les comportement des hides (sous-groupes récursifs, \dots) ;
|
|
||||||
\item validations master/slaves, validations globales au regard de la configuration entière puisque c'est possible maintenant.
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
%%presentation
|
|
||||||
\documentclass{beamer}
|
|
||||||
\usepackage{beamerthemetree}
|
|
||||||
%%impression
|
|
||||||
%\documentclass[a4paper,9pt]{extarticle}
|
|
||||||
%\usepackage{beamerarticle}
|
|
||||||
%%
|
|
||||||
|
|
||||||
% class FR
|
|
||||||
\usepackage[T1]{fontenc}
|
|
||||||
\usepackage[utf8]{inputenc}
|
|
||||||
\usepackage[frenchb]{babel}
|
|
||||||
|
|
||||||
% image
|
|
||||||
%% \usepackage{graphicx}
|
|
||||||
\usepackage{alltt}
|
|
||||||
\usecolortheme{crane}
|
|
||||||
\beamertemplatetransparentcovered
|
|
||||||
%\logo{\includegraphics[height=1cm]{ban.png}}
|
|
||||||
|
|
||||||
\title{Tiramisu}
|
|
||||||
\subtitle{gestionnaire de configuration}
|
|
||||||
\author{Gwen}
|
|
||||||
\institute{\texttt{git clone git://git.labs.libre-entreprise.org/tiramisu.git} \\
|
|
||||||
\texttt{firefox tiramisu/doc/build/index.html}}
|
|
||||||
|
|
||||||
\date{\today}
|
|
||||||
|
|
||||||
\begin{document}
|
|
||||||
\frame{\titlepage}
|
|
||||||
|
|
||||||
\include{definition}
|
|
||||||
\include{statut}
|
|
||||||
|
|
||||||
\end{document}
|
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
epydoc --css grayscale -o ./build/pydoc ../*.py #config.py ../option.py
|
|
||||||
#apirst2html.py --stylesheet=docutils.css --external-api=epydoc --external-api-root=epydoc:./api/ --external-api-file=epydoc:./api/api-objects.txt doc.txt > doc.htm
|
|
||||||
|
|
|
@ -1,70 +0,0 @@
|
||||||
- abstract values from `gaspacho`
|
|
||||||
|
|
||||||
Les types possibles :
|
|
||||||
|
|
||||||
- sans valeur : `boolean`
|
|
||||||
- avec valeur : `unicode` (un texte libre), `integer` (un chiffre), `enum` (une liste de choix prédéfinies) et `list` (une liste de choix libres).
|
|
||||||
|
|
||||||
Les types sans valeurs sont les plus simples. Par exemple cette règle n’attend
|
|
||||||
aucune valeur particulière Vérifier que Firefox est le navigateur par défaut.
|
|
||||||
|
|
||||||
Alors que celle-ci attend une adresse IP Configuration du serveur proxy manuelle.
|
|
||||||
|
|
||||||
Il existe un autre type (multi) qui permet de mêler plusieurs types.
|
|
||||||
|
|
||||||
Il s’agit bien de définir ici le type de la règle (et uniquement de la règle).
|
|
||||||
|
|
||||||
- configuration levels in `creole`
|
|
||||||
|
|
||||||
*thu, 28 april 2011*
|
|
||||||
|
|
||||||
Exemple de niveau de configuration (dans l'ordre) :
|
|
||||||
|
|
||||||
1. - Coeur
|
|
||||||
|
|
||||||
2.
|
|
||||||
- Coeur
|
|
||||||
- gen_config
|
|
||||||
|
|
||||||
3.
|
|
||||||
- Coeur
|
|
||||||
- gen_config
|
|
||||||
- EAD
|
|
||||||
|
|
||||||
4.
|
|
||||||
- Coeur
|
|
||||||
- EAD
|
|
||||||
|
|
||||||
5.
|
|
||||||
- Coeur
|
|
||||||
- baculaconfig.py
|
|
||||||
|
|
||||||
(`fill` : calcule une valeur jusqu'à ce que l'utilisateur change la
|
|
||||||
valeur)
|
|
||||||
|
|
||||||
Gestion des ACL en écriture :
|
|
||||||
|
|
||||||
Le coeur charge les variables
|
|
||||||
|
|
||||||
- si auto : seul le coeur peut la modifier (cas 1) ;
|
|
||||||
|
|
||||||
- si fill : le coeur calcule une valeur tant que pas configuré par
|
|
||||||
l'utilisateur. L'utilisateur peut modifier (cas 2 ou 3) ;
|
|
||||||
|
|
||||||
- des variables modifiables que par gen_config (cas 2) ;
|
|
||||||
|
|
||||||
- des variables modifiables par gen_config ou l'EAD (cas 3) ;
|
|
||||||
|
|
||||||
- des variables d'autres applications (cas 4 et 5).
|
|
||||||
|
|
||||||
Gestion des ACLs en lecture :
|
|
||||||
|
|
||||||
- seule une application peut lire certaines variables (exemple un mot de
|
|
||||||
passe).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,67 +0,0 @@
|
||||||
==================================
|
|
||||||
`Tiramisu` - Getting Started
|
|
||||||
==================================
|
|
||||||
|
|
||||||
What is Configuration handling ?
|
|
||||||
=================================
|
|
||||||
|
|
||||||
Due to more and more available configuration options required to set up
|
|
||||||
an operating system, it became quite annoying to hand the necessary
|
|
||||||
options to where they are actually used and even more annoying to add
|
|
||||||
new options. To circumvent these problems the configuration management
|
|
||||||
was introduced.
|
|
||||||
|
|
||||||
What is Tiramisu ?
|
|
||||||
===================
|
|
||||||
|
|
||||||
Tiramisu is yet another configuration handler, wich aims at producing
|
|
||||||
flexible and fast configuration options access. The main advantages are
|
|
||||||
its access :ref:`glossary#rules` and the fact that the configuration 's
|
|
||||||
consistency is preserved at any time, see :ref:`glossary#consistency`.
|
|
||||||
|
|
||||||
There are type and structures's validations for configuration options,
|
|
||||||
and validations towards the whole configuration.
|
|
||||||
|
|
||||||
Last but not least, configuration options can be reached and changed
|
|
||||||
according to the access rules from nearly everywhere in the OS boxes,
|
|
||||||
e.g. the containers via the `http/json` server.
|
|
||||||
|
|
||||||
Just the facts
|
|
||||||
==============
|
|
||||||
|
|
||||||
.. _gettingtiramisu:
|
|
||||||
|
|
||||||
Download
|
|
||||||
---------
|
|
||||||
|
|
||||||
To obtain a copy of the sources, check it out from the repository using
|
|
||||||
`git`. We suggest using `git` if one wants to access the current development.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
git clone git://git.labs.libre-entreprise.org/tiramisu.git
|
|
||||||
|
|
||||||
This will get you a fresh checkout of the code repository in a local
|
|
||||||
directory named ``tiramisu``.
|
|
||||||
|
|
||||||
Understanding Tiramisu's architecture
|
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
The :ref:`glossary#schema` is loaded from an XML file, and the values of
|
|
||||||
the configuration options are recovered from a `.ini` like file.
|
|
||||||
|
|
||||||
By now, all the in-depth informations about the configuration are stored
|
|
||||||
in a **single** object, the :api:`config.Config()` object, wich is
|
|
||||||
responsible of nearly everything. All the necessary options are stored
|
|
||||||
into a configuration object, which is available nearly everywhere, so
|
|
||||||
that adding new options becomes trivial.
|
|
||||||
|
|
||||||
This `Config()` is available from everywhere with the help of an http server
|
|
||||||
that serves configuration datas as `json` strings.
|
|
||||||
|
|
||||||
.. figure:: architecture.png
|
|
||||||
|
|
||||||
The basics of Tiramisu's architecture.
|
|
||||||
Once loaded, http server serves the :api:`config.Config()` object, that is,
|
|
||||||
the configuration options and the configuration groups.
|
|
||||||
|
|
|
@ -1,97 +0,0 @@
|
||||||
.. default-role:: literal
|
|
||||||
|
|
||||||
glossary
|
|
||||||
==========
|
|
||||||
|
|
||||||
.. _configuration:
|
|
||||||
|
|
||||||
**configuration**
|
|
||||||
|
|
||||||
Global configuration object, wich contains the whole configuration
|
|
||||||
options *and* their descriptions (option types and group)
|
|
||||||
|
|
||||||
.. _`option description`:
|
|
||||||
.. _`schema`:
|
|
||||||
|
|
||||||
**schema**:
|
|
||||||
**option description**
|
|
||||||
|
|
||||||
see :api:`option.OptionDescription`, see :ref:`optionapi#schema`
|
|
||||||
|
|
||||||
The schema of a configuration :
|
|
||||||
|
|
||||||
- the option types
|
|
||||||
|
|
||||||
- how they are organised in groups or even subgroups, that's why we
|
|
||||||
call them **groups** too.
|
|
||||||
|
|
||||||
.. _`configoption`:
|
|
||||||
|
|
||||||
**configuration option**
|
|
||||||
|
|
||||||
An option object wich has a name and a value and can be accessed
|
|
||||||
from the configuration object
|
|
||||||
|
|
||||||
.. _`defaultvalue`:
|
|
||||||
|
|
||||||
**default value**
|
|
||||||
|
|
||||||
Default value of a configuration option. The default value can be
|
|
||||||
set at instanciation time, or even at any moment. Remember that if
|
|
||||||
you reset the default value, the owner reset to `default`
|
|
||||||
|
|
||||||
.. _`rules`:
|
|
||||||
|
|
||||||
**acces rules**
|
|
||||||
|
|
||||||
Access rules are : :api:`config.Config.cfgimpl_read_write()` or
|
|
||||||
:api:`config.Config.cfgimpl_read_only()`, see :doc:`status`
|
|
||||||
|
|
||||||
**freeze**
|
|
||||||
|
|
||||||
A whole configuration can be frozen (used in read only access). See
|
|
||||||
:doc:`status` for details.
|
|
||||||
|
|
||||||
.. _`valueowner`:
|
|
||||||
|
|
||||||
**value owner**
|
|
||||||
|
|
||||||
When an option is modified, including at the instanciation, we
|
|
||||||
always know who has modified it. It's the owner of the option, see
|
|
||||||
:doc:`status` for more details.
|
|
||||||
|
|
||||||
**hidden option**
|
|
||||||
|
|
||||||
a hidden option has a different behaviour on regards to the access
|
|
||||||
of the value in the configuration, see :doc:`status` for more details.
|
|
||||||
|
|
||||||
**disabled option**
|
|
||||||
|
|
||||||
a disabled option has a different behaviour on regards to the access
|
|
||||||
of the value in the configuration, see :doc:`status` for more details.
|
|
||||||
|
|
||||||
**fill option**
|
|
||||||
|
|
||||||
a fill option is like an automatic option except that it is
|
|
||||||
calculated only if a value hasn't been set.
|
|
||||||
|
|
||||||
**auto option**
|
|
||||||
|
|
||||||
an automatic option is an option thas is carried out by an external
|
|
||||||
calculation
|
|
||||||
|
|
||||||
.. _mandatory:
|
|
||||||
|
|
||||||
**mandatory option**
|
|
||||||
|
|
||||||
A mandatory option is a configuration option wich value has to be
|
|
||||||
set, that is the default value cannot be `None`, see
|
|
||||||
:ref:`optionapi#optioninit`
|
|
||||||
|
|
||||||
|
|
||||||
.. _consistency:
|
|
||||||
|
|
||||||
**consistency**
|
|
||||||
|
|
||||||
Preserve the consistency in a whole configuration is a tricky thing,
|
|
||||||
tiramisu takes care of it for you, see :doc:`consistency` for details.
|
|
|
@ -1,40 +0,0 @@
|
||||||
.. default-role:: literal
|
|
||||||
|
|
||||||
.. meta::
|
|
||||||
|
|
||||||
:description: configuration management
|
|
||||||
:keywords: config, configuration
|
|
||||||
|
|
||||||
.. title:: tiramisu
|
|
||||||
|
|
||||||
.. |version| replace:: 0.1
|
|
||||||
|
|
||||||
The tasting of `Tiramisu`
|
|
||||||
=========================
|
|
||||||
|
|
||||||
.. image:: tiramisu.jpeg
|
|
||||||
:height: 150px
|
|
||||||
|
|
||||||
`Tiramisu`
|
|
||||||
|
|
||||||
is a cool, refreshing Italian dessert,
|
|
||||||
|
|
||||||
it is also a configuration management tool.
|
|
||||||
|
|
||||||
|
|
||||||
It's a pretty small, local (that is, straight on the operating system)
|
|
||||||
configuration handler.
|
|
||||||
|
|
||||||
- :doc:`getting-started`: where to go from here,
|
|
||||||
- :doc:`config` explains the good praticies of configuration handling,
|
|
||||||
- :doc:`configapi` and :doc:`optionapi` describe the API's details,
|
|
||||||
- :doc:`status` for a summary of the `Option`'s and `Config`'s statuses,
|
|
||||||
- :doc:`consistency` for the local and global integrity constraints,
|
|
||||||
|
|
||||||
|
|
||||||
- :doc:`glossary` describes the specific terms used in Tiramisu.
|
|
||||||
- :doc:`pydoc/index` for the developer's API
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,127 +0,0 @@
|
||||||
.. default-role:: literal
|
|
||||||
|
|
||||||
Options API Details
|
|
||||||
=====================
|
|
||||||
|
|
||||||
:module: :api:`option.py`
|
|
||||||
|
|
||||||
.. _schema:
|
|
||||||
|
|
||||||
Description of Options
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
All the constructors take a ``name`` and a ``doc`` argument as first
|
|
||||||
arguments to give the option or option group a name and to document it.
|
|
||||||
Most constructors take a ``default`` argument that specifies the default
|
|
||||||
value of the option. If this argument is not supplied the default value
|
|
||||||
is assumed to be ``None``.
|
|
||||||
|
|
||||||
Appart from that, the `Option` object is not supposed to contain any
|
|
||||||
other value than the `tainted` attribute, which is explained later. The
|
|
||||||
container of the value is in the `Config` object.
|
|
||||||
|
|
||||||
``OptionDescription``
|
|
||||||
+++++++++++++++++++++
|
|
||||||
|
|
||||||
This class is used to group suboptions.
|
|
||||||
|
|
||||||
``__init__(self, name, doc, children)``
|
|
||||||
``children`` is a list of option descriptions (including
|
|
||||||
``OptionDescription`` instances for nested namespaces).
|
|
||||||
|
|
||||||
``set_group_type(self, group_name)``
|
|
||||||
Three available group_types : `default`, `family`, `group` and
|
|
||||||
`master` (for master~slave group type). Notice that for a
|
|
||||||
master~slave group, the name of the group and the name of the
|
|
||||||
master option are identical.
|
|
||||||
|
|
||||||
`Options description` objects lives in the `_cfgimpl_descr` config attribute.
|
|
||||||
|
|
||||||
If you need to access an option object, you can do it with the OptionDescription
|
|
||||||
object. Not only the value of the option by attribute access, but the option
|
|
||||||
object itself that lives behind the scene. It can always be accessed internally
|
|
||||||
with the `_cfgimpl_descr` attribute of the `config` objects. For example, with a
|
|
||||||
option named `name` in a `gc` group the `name` object can be accessed like
|
|
||||||
this::
|
|
||||||
|
|
||||||
conf._cfgimpl_descr.name
|
|
||||||
|
|
||||||
of sub configs with ::
|
|
||||||
|
|
||||||
conf.gc._cfgimpl_descr.name
|
|
||||||
|
|
||||||
This is a binding. The option objects are in the `_children` config's attribute.
|
|
||||||
|
|
||||||
Why accessing an option object ? It is possible for example freeze the
|
|
||||||
configuration option
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
conf.gc._cfgimpl_descr.dummy.freeze()
|
|
||||||
|
|
||||||
or to hide it, or disable it, or... anything.
|
|
||||||
|
|
||||||
.. _optioninit:
|
|
||||||
|
|
||||||
generic option ``__init__`` method:
|
|
||||||
|
|
||||||
``__init__(name, doc, default=None, requires=None, multi=False, mandatory=False)``
|
|
||||||
|
|
||||||
:``default``: specifies the default value of the option.
|
|
||||||
:``requires``: is a list of names of options located anywhere in the configuration.
|
|
||||||
:``multi``: means the value can be a list.
|
|
||||||
:``mandatory``: see :ref:`glossary#mandatory`.
|
|
||||||
|
|
||||||
.. _optiontype:
|
|
||||||
|
|
||||||
``BoolOption``
|
|
||||||
++++++++++++++
|
|
||||||
|
|
||||||
Represents a choice between ``True`` and ``False``.
|
|
||||||
|
|
||||||
``IntOption``
|
|
||||||
+++++++++++++
|
|
||||||
|
|
||||||
Represents a choice of an integer.
|
|
||||||
|
|
||||||
``FloatOption``
|
|
||||||
+++++++++++++++
|
|
||||||
|
|
||||||
Represents a choice of a floating point number.
|
|
||||||
|
|
||||||
``StrOption``
|
|
||||||
+++++++++++++
|
|
||||||
|
|
||||||
Represents the choice of a string.
|
|
||||||
|
|
||||||
``SymLinkOption``
|
|
||||||
++++++++++++++++++
|
|
||||||
|
|
||||||
Redirects to another configuration option in the configuration, that is :
|
|
||||||
|
|
||||||
- retrieves the value of the tagert,
|
|
||||||
- can set the value of the target too.
|
|
||||||
|
|
||||||
``__init__(self, name, path)``
|
|
||||||
|
|
||||||
`path` is the path to the target, the option
|
|
||||||
|
|
||||||
``IPOption``
|
|
||||||
+++++++++++++
|
|
||||||
|
|
||||||
Represents the choice of an ip.
|
|
||||||
|
|
||||||
``NetmaskOption``
|
|
||||||
+++++++++++++++++++
|
|
||||||
|
|
||||||
Represents the choice of a netmask.
|
|
||||||
|
|
||||||
``ChoiceOption``
|
|
||||||
++++++++++++++++
|
|
||||||
|
|
||||||
Represents a choice out of several objects. The option can also have the value
|
|
||||||
``None``.
|
|
||||||
|
|
||||||
``__init__(self, name, doc, values, default=None, requires=None)``
|
|
||||||
``values`` is a list of values the option can possibly take.
|
|
||||||
|
|
|
@ -1,82 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# unproudly borrowed from David Goodger's rst2html.py
|
|
||||||
|
|
||||||
"""
|
|
||||||
A minimal front end to the Docutils Publisher, producing HTML.
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
import locale
|
|
||||||
locale.setlocale(locale.LC_ALL, '')
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
from docutils.core import publish_cmdline, default_description
|
|
||||||
# ____________________________________________________________
|
|
||||||
from docutils import nodes, utils
|
|
||||||
from docutils.parsers.rst import roles
|
|
||||||
|
|
||||||
"""
|
|
||||||
description of the new roles:
|
|
||||||
|
|
||||||
`:api:` : link to the code
|
|
||||||
|
|
||||||
- code.py becomes api/code.html
|
|
||||||
- code.Code.code_test becomes api/code.Code.code_test.html
|
|
||||||
- code.Code() becomes api/code.Code.html
|
|
||||||
|
|
||||||
`:doc:`a link to an internal file
|
|
||||||
example become example.html
|
|
||||||
|
|
||||||
ref: link with anchor as in an external file
|
|
||||||
|
|
||||||
:ref:`toto#titi` becomes toto.html#titi
|
|
||||||
"""
|
|
||||||
from os.path import splitext
|
|
||||||
|
|
||||||
def api_reference_role(role, rawtext, text, lineno, inliner,
|
|
||||||
options={}, content=[]):
|
|
||||||
basename = text
|
|
||||||
if "(" in text:
|
|
||||||
basename = text.split("(")[0]
|
|
||||||
if ".py" in text:
|
|
||||||
basename = splitext(text)[0]
|
|
||||||
if "test_" in text:
|
|
||||||
refuri = "api/" + "tiramisu.test." + basename + '.html'
|
|
||||||
else:
|
|
||||||
refuri = "api/" + "tiramisu." + basename + '.html'
|
|
||||||
roles.set_classes(options)
|
|
||||||
node = nodes.reference(rawtext, utils.unescape(text), refuri=refuri,
|
|
||||||
**options)
|
|
||||||
return [node], []
|
|
||||||
|
|
||||||
roles.register_local_role('api', api_reference_role)
|
|
||||||
|
|
||||||
def doc_reference_role(role, rawtext, text, lineno, inliner,
|
|
||||||
options={}, content=[]):
|
|
||||||
refuri = text + '.html'
|
|
||||||
roles.set_classes(options)
|
|
||||||
node = nodes.reference(rawtext, utils.unescape(text), refuri=refuri,
|
|
||||||
**options)
|
|
||||||
return [node], []
|
|
||||||
|
|
||||||
roles.register_local_role('doc', doc_reference_role)
|
|
||||||
|
|
||||||
def ref_reference_role(role, rawtext, text, lineno, inliner,
|
|
||||||
options={}, content=[]):
|
|
||||||
fname, anchor = text.split('#')
|
|
||||||
refuri = fname + '.html#' + anchor
|
|
||||||
roles.set_classes(options)
|
|
||||||
node = nodes.reference(rawtext, utils.unescape(anchor), refuri=refuri,
|
|
||||||
**options)
|
|
||||||
return [node], []
|
|
||||||
|
|
||||||
roles.register_local_role('ref', ref_reference_role)
|
|
||||||
|
|
||||||
# ____________________________________________________________
|
|
||||||
|
|
||||||
description = ('Generates (X)HTML documents from standalone reStructuredText '
|
|
||||||
'sources. ' + default_description)
|
|
||||||
|
|
||||||
publish_cmdline(writer_name='html', description=description)
|
|
||||||
|
|
|
@ -1,181 +0,0 @@
|
||||||
.. default-role:: literal
|
|
||||||
|
|
||||||
Configuration status
|
|
||||||
======================
|
|
||||||
|
|
||||||
:module: :api:`config.py`
|
|
||||||
:tests: - :api:`test_option_owner.py`
|
|
||||||
- :api:`test_option_type.py`
|
|
||||||
- :api:`test_option_default.py`
|
|
||||||
|
|
||||||
Available configuration statuses
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
These configuration statuses corresponds to specific global attributes :
|
|
||||||
|
|
||||||
**read write status**
|
|
||||||
|
|
||||||
The configuration can be accessed by `__get__` and `__set__`
|
|
||||||
properties, except for the `hidden` configuration options but, yes, it is
|
|
||||||
possible to modify a disabled option.
|
|
||||||
|
|
||||||
To enable read-write status, call
|
|
||||||
:api:`config.Config.cfgimpl_read_write()`
|
|
||||||
|
|
||||||
**read only status**
|
|
||||||
|
|
||||||
The whole configuration is `frozen`, that is modifiying a value is
|
|
||||||
forbidden. We can access to a configuration option only with the
|
|
||||||
`__getattr__` property.
|
|
||||||
|
|
||||||
The configuration has not an access to the hidden options
|
|
||||||
but can read the disabled options.
|
|
||||||
|
|
||||||
To enable read only status, call :api:`config.Config.cfgimpl_read_only()`
|
|
||||||
|
|
||||||
.. csv-table:: **Configuration's statuses summary**
|
|
||||||
:header: " ", "Hidden", "Disabled", "Mandatory"
|
|
||||||
|
|
||||||
"read only status", `False`, `True`, `True`
|
|
||||||
"read-write status", `True`, `False`, `False`
|
|
||||||
|
|
||||||
Freezing a configuration
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
It is possible to *freeze* a single `Option` object with
|
|
||||||
:api:`option.Option.freeze()`. If you try to modify a frozen option, it
|
|
||||||
raises a `TypeError: trying to change a frozen option object`.
|
|
||||||
|
|
||||||
At the configuration level, :api:`config.Config.cfgimpl_freeze()` freeze
|
|
||||||
the whole configuration options.
|
|
||||||
|
|
||||||
- :api:`test_option_type.test_freeze_one_option()`
|
|
||||||
- :api:`test_option_type.test_frozen_value()`
|
|
||||||
- :api:`test_option_type.test_freeze()`
|
|
||||||
|
|
||||||
|
|
||||||
Restricted access to an `Option()`
|
|
||||||
-----------------------------------
|
|
||||||
|
|
||||||
Configuration options access statuses are defined at configuration level
|
|
||||||
that corresponds to theses :api:`option.Option()`'s attribute:
|
|
||||||
|
|
||||||
**hidden**
|
|
||||||
|
|
||||||
This means that an option raises an `HiddenOptionError` if we try to access
|
|
||||||
the value of the option.
|
|
||||||
|
|
||||||
See `hide()` or `show()` in `Option()` that comes from
|
|
||||||
:api:`option.HiddenBaseType`
|
|
||||||
|
|
||||||
corresponding convenience API provided:
|
|
||||||
|
|
||||||
`hide()`:
|
|
||||||
set the `hidden` attribute to `True`
|
|
||||||
|
|
||||||
`show()`:
|
|
||||||
set the `hidden` attribute to `False`
|
|
||||||
|
|
||||||
**disabled**
|
|
||||||
|
|
||||||
This means that an option *doesn't exists* (doesn't say anything
|
|
||||||
much more thant an `AttibuteAccess` error)
|
|
||||||
|
|
||||||
See in :api:`option.DisabledBaseType` the origins of
|
|
||||||
`Option.enable()` or `Option.disable()`
|
|
||||||
|
|
||||||
corresponding convenience API provided:
|
|
||||||
|
|
||||||
`disable()`:
|
|
||||||
set the `disabled` attribute to `True`
|
|
||||||
|
|
||||||
`enable()`:
|
|
||||||
set the `disabled` attribute to `False`
|
|
||||||
|
|
||||||
mode
|
|
||||||
|
|
||||||
a mode is `normal` or `expert`, just a category of `Option()` or
|
|
||||||
group wich determines if an option is easy to choose or not,
|
|
||||||
available methods are:
|
|
||||||
|
|
||||||
`get_mode()`:
|
|
||||||
returns the current mode
|
|
||||||
|
|
||||||
`set_mode(mode)`:
|
|
||||||
sets a new mode
|
|
||||||
|
|
||||||
see it in :api:`option.ModeBaseType`
|
|
||||||
|
|
||||||
Value owners
|
|
||||||
-------------
|
|
||||||
|
|
||||||
Every configuration option has a **owner**. When the option is
|
|
||||||
instanciated, the owner is `default` because a default value has been
|
|
||||||
set (including `None`, take a look at the tests).
|
|
||||||
|
|
||||||
The `value_owner` is the man who did it. Yes, the man who changed the value of the
|
|
||||||
configuration option.
|
|
||||||
|
|
||||||
- At the instance of the `Config` object, the value owner is `default` because
|
|
||||||
the default values are set at the instance of the configuration option object,
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
# let's expect there is an option named 'name'
|
|
||||||
config = Config(descr, bool=False)
|
|
||||||
# the override method has been called
|
|
||||||
config._cfgimpl_value_owners['name'] == 'default'
|
|
||||||
|
|
||||||
- at the modification of an option, the owner is `default_owner`, (which is `user`)
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
# modification of the value by attribute access
|
|
||||||
config.gc.dummy = True
|
|
||||||
assert config.gc._cfgimpl_value_owners['dummy'] == 'user'
|
|
||||||
assert config._cfgimpl_values['gc']._cfgimpl_value_owners['dummy'] == 'user'
|
|
||||||
|
|
||||||
- the default owner can be set with the `set_owner()` method
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
config.set_owner('spam')
|
|
||||||
config.set(dummy=True)
|
|
||||||
assert config.gc._cfgimpl_value_owners['dummy'] == 'spam'
|
|
||||||
assert config._cfgimpl_values['gc']._cfgimpl_value_owners['dummy'] == 'spam'
|
|
||||||
|
|
||||||
Special owners
|
|
||||||
---------------
|
|
||||||
|
|
||||||
If the owner of a configuration option is `auto` or `fill` the behavior of the
|
|
||||||
access of the value changes. In fact, there is nothing in the value.
|
|
||||||
The value comes from somewhere else (typically, it is calculated by the
|
|
||||||
operation system).
|
|
||||||
|
|
||||||
**auto**
|
|
||||||
|
|
||||||
This means that it is a calculated value and therefore automatically
|
|
||||||
protected it cannot be modified by attribute access once the owner
|
|
||||||
is `auto`.
|
|
||||||
|
|
||||||
The configuration option is hidden and a fonction in a specific
|
|
||||||
library is called for the computation of the value.
|
|
||||||
|
|
||||||
**fill**
|
|
||||||
|
|
||||||
if the configuration option has a default value, the default is
|
|
||||||
returned, otherwise the value is calculated
|
|
||||||
|
|
||||||
The default values behavior
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
Configuration options have default values that are stored in the
|
|
||||||
`Option()` object itself. Default values, the `default`, can be set in
|
|
||||||
various ways.
|
|
||||||
|
|
||||||
.. FIXME : ADD DETAILS HERE
|
|
||||||
|
|
||||||
If a default value is modified by overriding it, not only the value of
|
|
||||||
the option resets to the default that is proposed, but the owner is
|
|
||||||
modified too, it is reseted to `default`.
|
|
||||||
|
|
126
src/doc/todo.txt
|
@ -1,126 +0,0 @@
|
||||||
:date: 20 janvier 2012
|
|
||||||
|
|
||||||
créer une variable implicite cachée
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
<variable name="toto"
|
|
||||||
|
|
||||||
exists='False' hidden='True'>
|
|
||||||
<value>non<value>
|
|
||||||
|
|
||||||
si la variable n'existe pas, elle est crée avec une valeur par défaut
|
|
||||||
|
|
||||||
cela permet une alternative aux dépendances (pour ne pas installer un
|
|
||||||
paquet inutilement)
|
|
||||||
|
|
||||||
coder ça exactement comme les hidden ou les disabled, avec une levée
|
|
||||||
d'exception supplémentaire comme filtre.
|
|
||||||
|
|
||||||
:date: 20 janvier 2012
|
|
||||||
|
|
||||||
coder un cache pour les options dont le propriétaire est "auto" ou "fill"
|
|
||||||
mettre ça dans un attribut `_cache` de l'option
|
|
||||||
|
|
||||||
mettre une contrainte de temps dans le cache
|
|
||||||
|
|
||||||
- pouvoir forcer le recalcul de toutes les variables (vider le cache)
|
|
||||||
globalement dans toute la config
|
|
||||||
|
|
||||||
- mettre une contrainte de temps donnée
|
|
||||||
expires = timestamp + deltatime
|
|
||||||
|
|
||||||
:date: 17 avril
|
|
||||||
|
|
||||||
- lever une exception parlante (pour l'instant, c'est une "KeyError")
|
|
||||||
lorsqu'on essaye d'affecter quelque chose
|
|
||||||
à un groupe, genre
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
cfg = Config(descr)
|
|
||||||
cfg.gc = "uvw"
|
|
||||||
|
|
||||||
alors que gc est un groupe
|
|
||||||
|
|
||||||
:date: 12 avril
|
|
||||||
|
|
||||||
- faire un mode dégradé avec des warnings
|
|
||||||
- validations de longueur des maitres/esclaves ailleurs à sortir des requires
|
|
||||||
et à mettre dans des validators
|
|
||||||
|
|
||||||
:date: 3 avril 2012
|
|
||||||
|
|
||||||
- hide sur les sous-sous groupe : il faut que ça hide **tout** les sous-groupe
|
|
||||||
récursivement
|
|
||||||
|
|
||||||
groupes `master/slaves`:
|
|
||||||
|
|
||||||
faut-il coder les multi avec des requires, ou bien simplement
|
|
||||||
un groupe avec comme variable le nom du groupe ?
|
|
||||||
|
|
||||||
auto, fill, obligatoire
|
|
||||||
|
|
||||||
2012-03-22
|
|
||||||
|
|
||||||
**groupe master**
|
|
||||||
|
|
||||||
faire une api du genre : `Option().is_master()`
|
|
||||||
pour cela, tester `if self.parent._name == self._name: return True`
|
|
||||||
|
|
||||||
- mettre un attribut `auto` aux options de configuration, de manière à
|
|
||||||
ce qu'elles sachent quelle fonction eos appeler (que ça soit une info
|
|
||||||
dans l'option ou bien au niveau de la config ?)
|
|
||||||
le fait de détecter un "auto" vient du owner, mais il faut savoir
|
|
||||||
quelle fonction appeler
|
|
||||||
|
|
||||||
A documenter
|
|
||||||
-------------
|
|
||||||
|
|
||||||
- les variables multiples
|
|
||||||
- expliquer les urls du json dans la doc
|
|
||||||
- documenter le typage des options descriptions descr_type
|
|
||||||
|
|
||||||
A ajouter
|
|
||||||
---------
|
|
||||||
|
|
||||||
Option -> attribut help (en plus de doc)
|
|
||||||
get_help() (à mettre en class Type avec Doc aussi)
|
|
||||||
|
|
||||||
separator -> pas pour l'instant
|
|
||||||
|
|
||||||
fill, auto, obligatoire
|
|
||||||
|
|
||||||
nouveau type :
|
|
||||||
|
|
||||||
type option (dérivé de ChoiceOPtion) dans lequel il y a des nouvelles valeurs
|
|
||||||
possibles (pas de validations) ou plutôt une StringOption qui propose un choix
|
|
||||||
de valeurs par défault de type liste.
|
|
||||||
|
|
||||||
:date: 24 mars
|
|
||||||
|
|
||||||
- hide pour les sous-sous config (récursivement) et pas seulement une
|
|
||||||
seule sous-config (ou bien, quelque chose de réglable)
|
|
||||||
|
|
||||||
- validate global : vérifier à l'init de la conf qu'une variable
|
|
||||||
n'existe pas déjà, etc
|
|
||||||
|
|
||||||
:date: 26 janvier
|
|
||||||
|
|
||||||
- un attribut eosfunc pour auto + les paramètres à donner à la fonction
|
|
||||||
pareil pour le fill (function et paramètres)
|
|
||||||
|
|
||||||
reset
|
|
||||||
-------
|
|
||||||
|
|
||||||
**à discuter** : ça correspond exactement au override,
|
|
||||||
ou bien au opt.setoption(None, 'default')
|
|
||||||
|
|
||||||
**si la valeur par défaut est définie, un __get__ ne pourra jamais
|
|
||||||
renvoyer None.** ce qui est bloquant. Il faut pouvoir revenir à None.
|
|
||||||
|
|
||||||
pour supprimer la valeur d'une options (et revenir à la valeur par défault)
|
|
||||||
cfg.reset() (supprime _cfgimpl_value[name]) et _cfgimpl_value_owner[name])
|
|
||||||
|
|
||||||
reset()
|
|
||||||
|
|