Project

General

Profile

« Previous | Next » 

Revision 6871

Added by Matt Jones over 12 years ago

Moving Metacat Sphinx RST documentation from docs/dev to docs/user directory.

View differences:

docs/dev/metacat/Makefile
1
# Makefile for Sphinx documentation
2
#
3

  
4
# You can set these variables from the command line.
5
SPHINXOPTS    =
6
SPHINXBUILD   = sphinx-build
7
PAPER         =
8
BUILDDIR      = build
9
GRAPHVIZ      = /opt/local/bin/dot
10

  
11
# Internal variables.
12
PAPEROPT_a4     = -D latex_paper_size=a4
13
PAPEROPT_letter = -D latex_paper_size=letter
14
ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
15

  
16
.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest pdf
17

  
18
help:
19
	@echo "Please use \`make <target>' where <target> is one of"
20
	@echo "  html      to make standalone HTML files"
21
	@echo "  dirhtml   to make HTML files named index.html in directories"
22
	@echo "  pickle    to make pickle files"
23
	@echo "  json      to make JSON files"
24
	@echo "  htmlhelp  to make HTML files and a HTML help project"
25
	@echo "  qthelp    to make HTML files and a qthelp project"
26
	@echo "  latex     to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
27
	@echo "  changes   to make an overview of all changed/added/deprecated items"
28
	@echo "  linkcheck to check all external links for integrity"
29
	@echo "  doctest   to run all doctests embedded in the documentation (if enabled)"
30
	@echo "  pdf       to make PDF files"
31

  
32
clean:
33
	-rm -rf $(BUILDDIR)/*
34

  
35
plantuml:
36
	GRAPHVIZ_DOT=$(GRAPHVIZ) plantuml source 
37

  
38
html: 
39
	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
40
	@echo
41
	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
42

  
43
dirhtml:
44
	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
45
	@echo
46
	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
47

  
48
pickle:
49
	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
50
	@echo
51
	@echo "Build finished; now you can process the pickle files."
52

  
53
json:
54
	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
55
	@echo
56
	@echo "Build finished; now you can process the JSON files."
57

  
58
pdf:
59
	$(SPHINXBUILD) -b pdf $(ALLSPHINXOPTS) $(BUILDDIR)/pdf
60
	@echo
61
	@echo "Build finished. The PDF files are in $(BUILDDIR)/pdf."
62

  
63
htmlhelp:
64
	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
65
	@echo
66
	@echo "Build finished; now you can run HTML Help Workshop with the" \
67
	      ".hhp project file in $(BUILDDIR)/htmlhelp."
68

  
69
qthelp:
70
	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
71
	@echo
72
	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
73
	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
74
	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/DataONEArchitecture.qhcp"
75
	@echo "To view the help file:"
76
	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/DataONEArchitecture.qhc"
77

  
78
latex:
79
	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
80
	@echo
81
	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
82
	@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
83
	      "run these through (pdf)latex."
84

  
85
changes:
86
	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
87
	@echo
88
	@echo "The overview file is in $(BUILDDIR)/changes."
89

  
90
linkcheck:
91
	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
92
	@echo
93
	@echo "Link check complete; look for any errors in the above output " \
94
	      "or in $(BUILDDIR)/linkcheck/output.txt."
95

  
96
doctest:
97
	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
98
	@echo "Testing of doctests in the sources finished, look at the " \
99
	      "results in $(BUILDDIR)/doctest/output.txt."
docs/dev/metacat/source/plantuml.conf
1
skinparam activityFontColor black
2
skinparam activityFontSize 10
3
skinparam activityFontName arial
4
skinparam activityArrowFontColor black
5
skinparam activityArrowFontSize 10
6
skinparam activityArrowFontName arial
7
skinparam classArrowFontColor black
8
skinparam classArrowFontSize 10
9
skinparam classArrowFontName arial
10
skinparam classAttributeFontColor black
11
skinparam classAttributeFontSize 10
12
skinparam classAttributeFontName arial
13
skinparam classFontColor black
14
skinparam classFontSize 10
15
skinparam classFontName arial
16
skinparam componentFontColor black
17
skinparam componentFontSize 10
18
skinparam componentFontName arial
19
skinparam componentArrowFontColor black
20
skinparam componentArrowFontSize 10
21
skinparam componentArrowFontName arial
22
skinparam noteFontColor black
23
skinparam noteFontSize 10
24
skinparam noteFontName arial
25
skinparam packageFontColor black
26
skinparam packageFontSize 10
27
skinparam packageFontName arial
28
skinparam sequenceActorFontColor black
29
skinparam sequenceActorFontSize 10
30
skinparam sequenceActorFontName arial
31
skinparam sequenceArrowFontColor black
32
skinparam sequenceArrowFontSize 10
33
skinparam sequenceArrowFontName arial
34
skinparam sequenceGroupingFontColor black
35
skinparam sequenceGroupingFontSize 10
36
skinparam sequenceGroupingFontName arial
37
skinparam sequenceGroupingHeaderFontColor black
38
skinparam sequenceGroupingHeaderFontSize 10
39
skinparam sequenceGroupingHeaderFontName arial
40
skinparam sequenceParticipantFontColor black
41
skinparam sequenceParticipantFontSize 10
42
skinparam sequenceParticipantFontName arial
43
skinparam sequenceTitleFontColor black
44
skinparam sequenceTitleFontSize 10
45
skinparam sequenceTitleFontName arial
46
skinparam titleFontColor black
47
skinparam titleFontSize 10
48
skinparam titleFontName arial
49
skinparam usecaseFontColor black
50
skinparam usecaseFontSize 10
51
skinparam usecaseFontName arial
52
skinparam usecaseActorFontColor black
53
skinparam usecaseActorFontSize 10
54
skinparam usecaseActorFontName arial
55
skinparam usecaseArrowFontColor black
56
skinparam usecaseArrowFontSize 10
57
skinparam usecaseArrowFontName arial
docs/dev/metacat/source/replication.rst
1
Replication
2
===========
3
Metacat has a built-in replication feature that allows different Metacat servers 
4
to share data (both XML documents and data files) between each other. Metacat 
5
can replicate not only its home server's original documents, but also those 
6
that were replicated from partner Metacat servers. When changes are made to 
7
one server in a replication network, the changes are automatically propogated 
8
to the network, even if the network is down.
9

  
10
Replication allows users to manage their data locally and (by replicating them 
11
to a shared Metacat repository) to make those data available to the greater 
12
scientific community via a centralized search. In other words, your Metacat can 
13
be part of a broader network, but you retain control over the local repository 
14
and how it is managed.
15

  
16
For example, the KNB Network (Figure 6.1), which currently consists of ten 
17
different Metacat servers from around the world, uses replication to "join" 
18
the disperate servers to form a single robust and searchable data 
19
repository--facilitating data discovery, while leaving the data ownership and 
20
management with the local administrators.
21

  
22
.. figure:: images/screenshots/image059.jpg
23
   :align: center
24
   
25
   A map of the KNB Metacat network.
26

  
27
When properly configured, Metacat's replication mechanism can be triggered by 
28
several types of events that occur on either the home or partner server: a 
29
document insertion, an update, or an automatic replication (i.e., Delta-T 
30
monitoring), which is set at a user-specified time interval.
31

  
32
+----------------------+----------------------------------------------------------+
33
| Replication Triggers | Description                                              |
34
+======================+==========================================================+
35
| Insert               | Whenever a document is inserted into Metacat, the server |
36
|                      | notifies each server in its replication list             |
37
|                      | that it has a new file available.                        |
38
+----------------------+----------------------------------------------------------+
39
| Update               | Whenever a document is updated, the server notifies      |
40
|                      | each server in its replication list of the update.       |
41
+----------------------+----------------------------------------------------------+
42
| Delta-T monitoring   | At a user-specified time interval, Metacat checks each   |
43
|                      | of the servers in its replication list                   |
44
|                      | for updated documents.                                   |
45
+----------------------+----------------------------------------------------------+
46

  
47
Configuring Replication
48
-----------------------
49
To configure replication, you must configure both the home and partner servers:
50

  
51
1. Create a list of partner servers on your home server using the Replication Control Panel
52
2. Create certificate files for the home server
53
3. Create certificate files for the partner server
54
4. Import partner certificate files to the home server
55
5. Import home certificate to the partner server
56
6. Update your Metacat database 
57

  
58
Each step is discussed in more detail in the following sections.
59

  
60
Using the Replication Control Panel
61
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62
To add, remove, or alter servers on your home server's Replication list, or to 
63
activate and customize the Delta-T handler, use the Replication control panel, 
64
which is accessed via the Metacat Administration interface at the following URL::
65
 
66
   http://somehost.somelocation.edu/context/admin
67
   
68
"http://somehost.somelocation.edu/context" should be replaced with the name 
69
of your Metacat server and context (e.g., http://knb.ecoinformatics.org/knb/). 
70
You must be logged in to Metacat as an administrator.
71

  
72
.. figure:: images/screenshots/image061.jpg
73
   :align: center
74
   
75
   Replication control panel.
76

  
77
Note that currently, you cannot use the Replication Control Panel to remove a 
78
server after a replication has occurred. At this point in time, the only way to 
79
remove a replication server after replication has occurred is to remove the 
80
certificates. 
81

  
82
Generating and Exchanging Security Certificates
83
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
84
Before you can take advantage of Metacat's replication feature, you must 
85
generate security certificates on both the replication partner and home servers. 
86
Depending on how the certificates are generated, the certificates may need to be
87
exchanged so that each machine "trusts" that the other has replication access.
88
Certificates that are purchased from a commercial and well-recognized 
89
Certificate Authority do not need to be exchanged with the other replication
90
partner before replication takes place.  Metacat replication relies on SSL with
91
client certificate authentication enabled.  When a replication partner server 
92
communicates with another replication partner, it presents a certificate that
93
serves to verify and authenticate that the server is trusted.
94

  
95
If you must generate a self-signed certificate, the partner replication server 
96
will need the public certificate added to its existing Certificate Authorities. 
97

  
98
Generate Certificates for Metacat running under Apache/Tomcat
99
.............................................................
100
Note: Instructions are for Ubuntu/Debian systems.
101

  
102
1. Generate a private key using openssl. The key will be named 
103
   ``<hostname>-apache.key``, where ``<hostname>`` is the name of your Metacat 
104
   server. Example values for the individual key fields are included in the
105
   table below.
106

  
107
   ::
108
   
109
     openssl req -new -out REQ.pem -keyout <hostname>-apache.key
110

  
111
   +--------------------------+-------------------------------------------------------------------------+
112
   | Key Field                | Description and Example Value                                           |
113
   +==========================+=========================================================================+
114
   | Country Name             | Two letter country code  (e.g., US)                                     |
115
   +--------------------------+-------------------------------------------------------------------------+
116
   | State or Province Name   | The name of your state or province spelled in full (e.g., California)   |
117
   +--------------------------+-------------------------------------------------------------------------+
118
   | Locality Name            | The name of your city (e.g., Santa Barbara)                             |
119
   +--------------------------+-------------------------------------------------------------------------+
120
   | Organization Name        | The company or organization name (e.g., UCSB)                           |
121
   +--------------------------+-------------------------------------------------------------------------+
122
   | Organizational Unit Name | The department or section name (e.g., NCEAS)                            |
123
   +--------------------------+-------------------------------------------------------------------------+
124
   | Common Name              | The host server name without port numbers (e.g., myserver.mydomain.edu) |
125
   +--------------------------+-------------------------------------------------------------------------+
126
   | Email Address            | Administrator's contact email (e.g., administrator@mydomain.edu)        |
127
   +--------------------------+-------------------------------------------------------------------------+
128
   | A challenge password     | --leave this field blank--                                              |
129
   +--------------------------+-------------------------------------------------------------------------+
130
   | An optional company name | --leave this field blank--                                              |
131
   +--------------------------+-------------------------------------------------------------------------+
132

  
133
2. Create the local certificate file by running the command:
134

  
135
   ::
136
   
137
     openssl req -x509 -days 800 -in REQ.pem -key <hostname>-apache.key -out <hostname>-apache.crt
138

  
139
   Use the same ``<hostname>`` you used when you generated the key. A file named 
140
   ``<hostname>-apache.crt`` will be created in the directory from which you 
141
   ran the openssl command. Note: You can name the certificate file anything 
142
   you'd like, but keep in mind that the file will be sent to the partner 
143
   machine used for replication. The certificate name should have enough 
144
   meaning that someone who sees it on that machine can figure out where it 
145
   came from and for what purpose it should be used. 
146

  
147
3. Enter the certificate into Apache's security configuration. This will
148
   be used to identify your server to a replication partner. You must 
149
   register the certificate in the local Apache instance. Note that the 
150
   security files may be in a different directory from the one used in the 
151
   instructions depending on how you installed Apache. Copy the certificate and 
152
   key file using the following commands:
153
   
154
   ::
155
   
156
     sudo cp <hostname>-apache.crt /etc/ssl/certs 
157
     sudo cp <hostname>-apache.key /etc/ssl/private 
158

  
159
4. Apache needs to be configured to request a “client certificate” when the 
160
   replication API is utilized. The helper file named "knb-ssl" has default 
161
   rules that configure Apache for SSL and client certificate authentication. 
162
   Set up these SSL settings by copying the knb-ssl file into the ``sites-available`` 
163
   directory, editing pertinent values to match your system and running 
164
   ``a2ensite`` to enable the site. (Note: some settings in knb-ssl need to be 
165
   changed to match the specifics of your system.) 
166

  
167
   ::
168
   
169
     sudo cp <metacat_helper_dir>/knb-ssl <apache_install_dir>/sites-available
170
     sudo a2ensite knb-ssl
171

  
172
5. Restart Apache to bring in changes by typing: 
173

  
174
   ::
175
   
176
     sudo /etc/init.d/apache2 restart
177

  
178
6. If using a self-signed certificate, SCP ``<hostname>-apache.crt`` to the 
179
   replication partner machine where it will be added as an additional 
180
   Certificate Authority.
181

  
182
If using self-signed certificates, after you have created and SCP'd a 
183
certificate file to each replication partner, and received a certificate file 
184
from each partner in return, both home and partner servers must add the 
185
respective partner certificates as Certificate Authorities.
186

  
187

  
188
To import a certificate
189
.......................
190
1. Copy it into the Apache directory
191
   
192
   ::
193
   
194
     sudo cp <remotehostfilename> /etc/ssl/certs/
195

  
196
2. Rehash the certificates for Apache by running: 
197

  
198
   ::
199
   
200
     cd /etc/ssl/certs
201
     sudo c_rehash
202

  
203

  
204
   where the ``<remotehostfilename>`` is the name of the certificate file 
205
   created on the remote partner machine and SCP'd to the home machine. 
206

  
207
Update your Metacat database
208
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
209
The simplest way to update the Metacat database to use replication is to use 
210
the Replication Control Panel. You can also update the database u
211
sing SQL. Instructions for both options are included in this section.
212

  
213
.. figure:: images/screenshots/image063.jpg
214
   :align: center
215
   
216
   Using the Replication Control Panel to update the Metacat database.
217

  
218
To update your Metacat database to use replication, select the "Add this server" 
219
radio button from the Replication Control Panel, enter the partner server name, 
220
and specify how the replication should occur (whether to replicate xml, data, 
221
or use the local machine as a hub).
222

  
223
To update the database using SQL
224
................................
225

  
226
1. Log in to the database
227

  
228
   ::
229
   
230
     psql -U metacat -W -h localhost metacat
231

  
232
2. Select all rows from the replication table
233

  
234
   ::
235

  
236
     select * from xml_replication;  
237

  
238
3. Insert the partner server. 
239

  
240
   ::
241
   
242
     INSERT INTO xml_replication (server,last_checked,replicate,datareplicate,hub) VALUES ('<partner.server/context>/servlet/replication',NULL,1,1,0);
243

  
244
   Where ``<partner.server/context>`` is the name of the partner server and 
245
   context. The values 'NULL, 1,1,0' indicate (respectively) the last time 
246
   replication occurred, that XML docs should be replicated to the partner 
247
   server, that data files should be replicated to the partner server, and 
248
   that the local server should not act as a hub. Set a value of 'NULL,0,0,0' 
249
   if your Metacat is only receiving documents from the partner site and not 
250
   replicating to that site.
251

  
252
4. Exit the database 
253
5. Restart Apache and Tomcat on both home and partner replication machines 
docs/dev/metacat/source/dataone.rst
1
DataONE Member Nodes
2
====================
3

  
4
Chapter to be written.
5

  
docs/dev/metacat/source/oaipmh.rst
1
OAI Protocol for Metadata Harvesting
2
====================================
3

  
4
Chapter to be written.
5

  
docs/dev/metacat/source/themes/readable/theme.conf
1
[theme]
2
inherit = sphinxdoc
3
stylesheet = readable.css
4
pygments_style = sphinx
5

  
6
[options]
7
bgcolor = #FFFFFF
docs/dev/metacat/source/themes/readable/static/readable.css
1
/**
2
 * Sphinx theme based on sphinxdoc and arc90 readability.css
3
 * Dave Vieglais
4
 */
5

  
6
body {
7
    font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif;
8
    /*font-family:"Palatino Linotype", "Book Antiqua", Palatino, serif;*/
9
    font-size: 14px;
10
    letter-spacing: -0.01em;
11
    line-height: 150%;
12
    text-align: center;
13
    /*background-color: #BFD1D4;*/
14
    /*background: #F4F3DB;*/
15
    background: white;
16
    color: black;
17
    /*color: #222;*/
18
    padding: 0;
19
    /*border: 1px solid #aaa;*/
20

  
21
    margin: 0px 80px 0px 80px;
22
    min-width: 740px;
23
}
24

  
25
a {
26
    /*color: #CA7900;*/
27
    color: #003399;
28
    text-decoration: none;
29
}
30

  
31
a:hover {
32
    /*color: #2491CF;*/
33
    text-decoration:underline;
34
}
35

  
36
pre {
37
    font-family: 'Consolas', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
38
    font-size: 0.95em;
39
    font-weight: bold;
40
    letter-spacing: 0.015em;
41
    padding: 0.5em;
42
    border: 1px solid darkGray;
43
    background-color: white;
44
    color: #203030;
45
    margin-left: 1em;
46
}
47

  
48
td.linenos pre {
49
    padding: 0.5em 0;
50
    border: 0;
51
    background-color: transparent;
52
    color: #aaa;
53
}
54

  
55
table.highlighttable {
56
    margin-left: 0.5em;
57
}
58

  
59
table.highlighttable td {
60
    padding: 0 0.5em 0 0.5em;
61
}
62

  
63
cite, code, tt {
64
    font-family: 'Consolas', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
65
    font-size: 0.95em;
66
    letter-spacing: 0.01em;
67
}
68

  
69
hr {
70
    border: 1px solid #abc;
71
    margin: 2em;
72
}
73

  
74
tt {
75
    background-color: #f2f2f2;
76
    border-bottom: 1px solid #ddd;
77
    color: #333;
78
}
79

  
80
tt.descname {
81
    background-color: transparent;
82
    font-weight: bold;
83
    font-size: 1.2em;
84
    border: 0;
85
}
86

  
87
tt.descclassname {
88
    background-color: transparent;
89
    border: 0;
90
}
91

  
92
tt.xref {
93
    background-color: transparent;
94
    font-weight: bold;
95
    border: 0;
96
}
97

  
98
a tt {
99
    background-color: transparent;
100
    font-weight: bold;
101
    border: 0;
102
    /*color: #CA7900;*/
103
    color: inherit;
104
}
105

  
106
/*a tt:hover {
107
    color: #2491CF;
108
}*/
109

  
110
.field-list ul {
111
    margin: 0;
112
    padding-left: 1em;
113
}
114

  
115
.field-list p {
116
    margin: 0;
117
}
118

  
119
dl {
120
    margin-bottom: 15px;
121
}
122

  
123
dd p {
124
    margin-top: 0px;
125
}
126

  
127
dd ul, dd table {
128
    margin-bottom: 10px;
129
}
130

  
131
dd {
132
    margin-top: 3px;
133
    margin-bottom: 10px;
134
    margin-left: 30px;
135
}
136

  
137
.refcount {
138
    color: #060;
139
}
140

  
141
dt:target,
142
.highlight {
143
    background-color: #fbe54e;
144
}
145

  
146
dl.glossary dt {
147
    font-weight: bold;
148
    font-size: 1.1em;
149
}
150

  
151
pre {
152
    line-height: 120%;
153
}
154

  
155
pre a {
156
    color: inherit;
157
    /*text-decoration: underline;*/
158
}
159

  
160
.first {
161
    margin-top: 0 !important;
162
}
163

  
164
div.document {
165
    background-color: white;
166
    text-align: left;
167
    background-image: url(contents.png);
168
    background-repeat: repeat-x;
169
}
170

  
171
/*
172
div.documentwrapper {
173
    width: 100%;
174
}
175
*/
176
div.banner {
177
    height: 5.5em;
178
}
179

  
180
div.banner img {
181
    height: 5em;
182
    float: left;
183
}
184

  
185
div.banner p.title {
186
    font-weight: bold;
187
    font-size: 2em;
188
    text-align: left;
189
    margin-left: 2em;
190
}
191

  
192
div.clearer {
193
    clear: both;
194
}
195

  
196
div.related h3 {
197
    display: none;
198
}
199

  
200
div.related ul {
201
    background-image: url(navigation.png);
202
    height: 2em;
203
    list-style: none;
204
    border-top: 1px solid #ddd;
205
    border-bottom: 1px solid #ddd;
206
    margin: 0;
207
    padding-left: 10px;
208
}
209

  
210
div.related ul li {
211
    margin: 0;
212
    padding: 0;
213
    height: 2em;
214
    float: left;
215
}
216

  
217
div.related ul li.right {
218
    float: right;
219
    margin-right: 5px;
220
}
221

  
222
div.related ul li a {
223
    margin: 0;
224
    padding: 0 5px 0 5px;
225
    line-height: 1.75em;
226
    /*color: #EE9816;*/
227
    color: #555;
228
}
229

  
230
div.related ul li a:hover {
231
    /*color: #3CA8E7;*/
232
}
233

  
234
div.body {
235
    margin: 0;
236
    padding: 0.5em 20px 20px 20px;
237
}
238

  
239
div.bodywrapper {
240
    /*margin: 0 240px 0 0;*/
241
    /*border-right: 1px solid #ccc;*/
242
}
243

  
244
div.body a {
245
    /*text-decoration: underline;*/
246
    text-decoration:inherit;
247
}
248

  
249
div.body a:hover {
250
  text-decoration: underline;
251
}
252

  
253
div.sphinxsidebar {
254
    margin: 0;
255
    padding: 0.5em 15px 15px 0;
256
    width: 210px;
257
    float: right;
258
    text-align: left;
259
/*    margin-left: -100%; */
260
}
261

  
262
div.sphinxsidebarwrapper {
263
  position: fixed;
264
  width: 210px;
265
}
266

  
267
div.sphinxsidebar h4, div.sphinxsidebar h3 {
268
    font-size: 0.9em;
269
    /*margin: 1em 0 0.5em 0;
270
    padding: 0.1em 0 0.1em 0.5em;
271
    color: white;
272
    border: 1px solid #86989B;
273
    background-color: #AFC1C4; */
274
}
275

  
276
div.sphinxsidebar h3 a {
277
    color: white;
278
}
279

  
280
div.sphinxsidebar a {
281
  color: #555;
282
}
283

  
284
div.sphinxsidebar ul {
285
    padding-left: 1.5em;
286
    margin-top: 7px;
287
    list-style: none;
288
    padding: 0;
289
    line-height: 130%;
290
}
291

  
292
div.sphinxsidebar ul ul {
293
    list-style: square;
294
    margin-left: 20px;
295
}
296

  
297
p {
298
    margin: 0.8em 0 0.5em 0;
299
}
300

  
301
p.rubric {
302
    font-weight: bold;
303
}
304

  
305
div.sidebar {
306
    margin: 0 0 0.5em 1em;
307
    border: 1px solid #ddb;
308
    padding: 7px 7px 0 7px;
309
    background-color: #B3B4C9;
310
    width: 40%;
311
    float: right;
312
}
313

  
314
div.quotebar {
315
    background-color: #f8f8f8;
316
    max-width: 250px;
317
    float: right;
318
    padding: 2px 7px;
319
    border: 1px solid #ccc;
320
}
321

  
322
p.sidebar-title {
323
    font-weight: bold;
324
}
325

  
326
div.topic {
327
    background-color: #f8f8f8;
328
    border: 1px solid #ccc;
329
    padding: 7px 7px 0 7px;
330
    margin: 10px 0 10px 0;
331
}
332

  
333
p.topic-title {
334
    font-size: 1.1em;
335
    font-weight: bold;
336
}
337

  
338
h1 {
339
    margin: 0;
340
    padding: 0.7em 0 0.3em 0;
341
    /*font-size: 1.5em;*/
342
    /*color: #11557C;*/
343
    display: block;
344
    border-bottom: 1px solid #333;
345
    font-size: 1.4em;
346
}
347

  
348
h2 {
349
    margin: 1.3em 0 0.2em 0;
350
    font-size: 1.35em;
351
    padding: 0;
352
}
353

  
354
h3 {
355
    margin: 1em 0 -0.3em 0;
356
    font-size: 1.2em;
357
}
358

  
359
div.body h1 a, div.body h2 a, div.body h3 a, div.body h4 a, div.body h5 a, div.body h6 a {
360
    color: black!important;
361
}
362

  
363
h1 a.anchor, h2 a.anchor, h3 a.anchor, h4 a.anchor, h5 a.anchor, h6 a.anchor {
364
    display: none;
365
    margin: 0 0 0 0.3em;
366
    padding: 0 0.2em 0 0.2em;
367
    color: #aaa!important;
368
}
369

  
370
h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor,
371
h5:hover a.anchor, h6:hover a.anchor {
372
    display: inline;
373
}
374

  
375
h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover,
376
h5 a.anchor:hover, h6 a.anchor:hover {
377
    color: #777;
378
    background-color: #eee;
379
}
380

  
381
table {
382
    border-collapse: collapse;
383
    margin: 0 -0.5em 0 -0.5em;
384
}
385

  
386
table td, table th {
387
    padding: 0.2em 0.5em 0.2em 0.5em;
388
}
389

  
390
div.footer {
391
    /*background-color: #E3EFF1;*/
392
    color: #86989B;
393
    padding: 3px 8px 3px 0;
394
    clear: both;
395
    font-size: 0.8em;
396
    text-align: right;
397
}
398

  
399
div.footer a {
400
    color: #86989B;
401
    text-decoration: underline;
402
}
403

  
404
div.pagination {
405
    margin-top: 2em;
406
    padding-top: 0.5em;
407
    border-top: 1px solid black;
408
    text-align: center;
409
}
410

  
411
div.sphinxsidebar ul.toc {
412
    margin: 1em 0 1em 0;
413
    padding: 0 0 0 0.5em;
414
    list-style: none;
415
}
416

  
417
div.sphinxsidebar ul.toc li {
418
    margin: 0.5em 0 0.5em 0;
419
    font-size: 0.9em;
420
    line-height: 130%;
421
}
422

  
423
div.sphinxsidebar ul.toc li p {
424
    margin: 0;
425
    padding: 0;
426
}
427

  
428
div.sphinxsidebar ul.toc ul {
429
    margin: 0.2em 0 0.2em 0;
430
    padding: 0 0 0 1.8em;
431
}
432

  
433
div.sphinxsidebar ul.toc ul li {
434
    padding: 0;
435
}
436

  
437
div.admonition, div.warning {
438
    font-size: 0.9em;
439
    margin: 1em 0 0 0;
440
    border: 1px solid #86989B;
441
    background-color: #f7f7f7;
442
}
443

  
444
div.admonition p, div.warning p {
445
    margin: 0.5em 1em 0.5em 1em;
446
    padding: 0;
447
}
448

  
449
div.admonition pre, div.warning pre {
450
    margin: 0.4em 1em 0.4em 1em;
451
}
452

  
453
div.admonition p.admonition-title,
454
div.warning p.admonition-title {
455
    margin: 0;
456
    padding: 0.1em 0 0.1em 0.5em;
457
    color: white;
458
    border-bottom: 1px solid #86989B;
459
    font-weight: bold;
460
    background-color: #AFC1C4;
461
}
462

  
463
div.warning {
464
    border: 1px solid #940000;
465
}
466

  
467
div.warning p.admonition-title {
468
    background-color: #CF0000;
469
    border-bottom-color: #940000;
470
}
471

  
472
div.admonition ul, div.admonition ol,
473
div.warning ul, div.warning ol {
474
    margin: 0.1em 0.5em 0.5em 3em;
475
    padding: 0;
476
}
477

  
478
div.versioninfo {
479
    margin: 1em 0 0 0;
480
    border: 1px solid #ccc;
481
    background-color: #DDEAF0;
482
    padding: 8px;
483
    line-height: 1.3em;
484
    font-size: 0.9em;
485
}
486

  
487

  
488
a.headerlink {
489
    color: #c60f0f!important;
490
    font-size: 1em;
491
    margin-left: 6px;
492
    padding: 0 4px 0 4px;
493
    text-decoration: none!important;
494
    visibility: hidden;
495
}
496

  
497
h1:hover > a.headerlink,
498
h2:hover > a.headerlink,
499
h3:hover > a.headerlink,
500
h4:hover > a.headerlink,
501
h5:hover > a.headerlink,
502
h6:hover > a.headerlink,
503
dt:hover > a.headerlink {
504
    visibility: visible;
505
}
506

  
507
a.headerlink:hover {
508
    background-color: #ccc;
509
    color: white!important;
510
}
511

  
512
table.indextable td {
513
    text-align: left;
514
    vertical-align: top;
515
}
516

  
517
table.indextable dl, table.indextable dd {
518
    margin-top: 0;
519
    margin-bottom: 0;
520
}
521

  
522
table.indextable tr.pcap {
523
    height: 10px;
524
}
525

  
526
table.indextable tr.cap {
527
    margin-top: 10px;
528
    background-color: #f2f2f2;
529
}
530

  
531
img.toggler {
532
    margin-right: 3px;
533
    margin-top: 3px;
534
    cursor: pointer;
535
}
536

  
537
form.pfform {
538
    margin: 10px 0 20px 0;
539
}
540

  
541
table.contentstable {
542
    width: 90%;
543
}
544

  
545
table.contentstable p.biglink {
546
    line-height: 150%;
547
}
548

  
549
a.biglink {
550
    font-size: 1.3em;
551
}
552

  
553
span.linkdescr {
554
    font-style: italic;
555
    padding-top: 5px;
556
    font-size: 90%;
557
}
558

  
559
ul.search {
560
    margin: 10px 0 0 20px;
561
    padding: 0;
562
}
563

  
564
ul.search li {
565
    padding: 5px 0 5px 20px;
566
    background-image: url(file.png);
567
    background-repeat: no-repeat;
568
    background-position: 0 7px;
569
}
570

  
571
ul.search li a {
572
    font-weight: bold;
573
}
574

  
575
ul.search li div.context {
576
    color: #888;
577
    margin: 2px 0 0 30px;
578
    text-align: left;
579
}
580

  
581
ul.keywordmatches li.goodmatch a {
582
    font-weight: bold;
583
}
584

  
585
img.math {
586
    vertical-align: center;
587
}
588

  
589
div.math {
590
    text-align: center;
591
}
592

  
593
span.eqno {
594
    float: right;
595
}
596

  
597
img.logo {
598
    border: 0;
599
}
600

  
601
div.banner img.logo-right {
602
    border: 0;
603
    float: right;
604
}
docs/dev/metacat/source/themes/readable/layout.html
1
{%- block doctype -%}
2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
{%- endblock %}
5
{%- set reldelim1 = reldelim1 is not defined and ' &raquo;' or reldelim1 %}
6
{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}
7

  
8
{%- macro relbar() %}
9
    <div class="related">
10
      <h3>{{ _('Navigation') }}</h3>
11
      <ul>
12

  
13
        {%- if pagename != "search" %}
14
        <li class="right">
15
        <span id="searchbox" style="display: none; margin-right: 10px">
16
            <form class="search" action="{{ pathto('search') }}" method="get">
17
              <input type="text" name="q" size="18" />
18
              <input type="submit" value="{{ _('Go') }}" />
19
              <input type="hidden" name="check_keywords" value="yes" />
20
              <input type="hidden" name="area" value="default" />
21
            </form>
22
        </span>
23
        </li>
24
        <script type="text/javascript">$('#searchbox').show(0);</script>
25
        {%- endif %}
26

  
27

  
28
        {%- for rellink in rellinks %}
29
        <li class="right">
30
          <a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags }}"
31
             {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a>
32
          {{ reldelim2 }}</li>
33
        {%- endfor %}
34

  
35

  
36

  
37
        {%- block rootrellink %}
38
        <li><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a>{{ reldelim1 }}</li>
39
        {%- endblock %}
40
        {%- for parent in parents %}
41
          <li><a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a>{{ reldelim1 }}</li>
42
        {%- endfor %}
43
        {%- block relbaritems %} {% endblock %}
44
      </ul>
45
      
46
    </div>
47
{%- endmacro %}
48

  
49
{%- macro sidebar() %}
50
      {%- if not embedded %}{% if not theme_nosidebar|tobool %}
51
      <div class="sphinxsidebar">
52
        <div class="sphinxsidebarwrapper">
53
          {%- block sidebarlogo %}
54
          {%- if logo %}
55
            <p class="logo"><a href="{{ pathto(master_doc) }}">
56
              <img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/>
57
            </a></p>
58
          {%- endif %}
59
          {%- endblock %}
60
          {%- block sidebartoc %}
61
          {%- if display_toc %}
62
            <h3><a href="{{ pathto(master_doc) }}">{{ _('Table Of Contents') }}</a></h3>
63
            {{ toc }}
64
          {%- endif %}
65
          {%- endblock %}
66
          {%- block sidebarrel %}
67
          {%- if prev %}
68
            <h4>{{ _('Previous topic') }}</h4>
69
            <p class="topless"><a href="{{ prev.link|e }}"
70
                                  title="{{ _('previous chapter') }}">{{ prev.title }}</a></p>
71
          {%- endif %}
72
          {%- if next %}
73
            <h4>{{ _('Next topic') }}</h4>
74
            <p class="topless"><a href="{{ next.link|e }}"
75
                                  title="{{ _('next chapter') }}">{{ next.title }}</a></p>
76
          {%- endif %}
77
          {%- endblock %}
78
          {%- block sidebarsourcelink %}
79
          {%- if show_source and has_source and sourcename %}
80
            <h3>{{ _('This Page') }}</h3>
81
            <ul class="this-page-menu">
82
              <li><a href="{{ pathto('_sources/' + sourcename, true)|e }}"
83
                     rel="nofollow">{{ _('Show Source') }}</a></li>
84
            </ul>
85
          {%- endif %}
86
          {%- endblock %}
87
          {%- if customsidebar %}
88
          {% include customsidebar %}
89
          {%- endif %}
90
          {%- block sidebarsearch %}
91
          {%- if pagename != "search" %}
92
          <div id="searchbox" style="display: none">
93
            <h3>{{ _('Quick search') }}</h3>
94
              <form class="search" action="{{ pathto('search') }}" method="get">
95
                <input type="text" name="q" size="18" />
96
                <input type="submit" value="{{ _('Go') }}" />
97
                <input type="hidden" name="check_keywords" value="yes" />
98
                <input type="hidden" name="area" value="default" />
99
              </form>
100
              <p class="searchtip" style="font-size: 90%">
101
              {{ _('Enter search terms or a module, class or function name.') }}
102
              </p>
103
          </div>
104
          <script type="text/javascript">$('#searchbox').show(0);</script>
105
          {%- endif %}
106
          {%- endblock %}
107
        </div>
108
      </div>
109
      {%- endif %}{% endif %}
110
{%- endmacro %}
111

  
112
<html xmlns="http://www.w3.org/1999/xhtml">
113
  <head>
114
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
115
    {{ metatags }}
116
    {%- if not embedded %}
117
      {%- set titlesuffix = " &mdash; "|safe + docstitle|e %}
118
    {%- else %}
119
      {%- set titlesuffix = "" %}
120
    {%- endif %}
121
    <title>{{ title|striptags }}{{ titlesuffix }}</title>
122
    <link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
123
    <link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
124
    {%- if not embedded %}
125
    <script type="text/javascript">
126
      var DOCUMENTATION_OPTIONS = {
127
        URL_ROOT:    '{{ pathto("", 1) }}',
128
        VERSION:     '{{ release|e }}',
129
        COLLAPSE_MODINDEX: false,
130
        FILE_SUFFIX: '{{ file_suffix }}',
131
        HAS_SOURCE:  {{ has_source|lower }}
132
      };
133
    </script>
134
    {%- for scriptfile in script_files %}
135
    <script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
136
    {%- endfor %}
137
    {%- if use_opensearch %}
138
    <link rel="search" type="application/opensearchdescription+xml"
139
          title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
140
          href="{{ pathto('_static/opensearch.xml', 1) }}"/>
141
    {%- endif %}
142
    {%- if favicon %}
143
    <link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
144
    {%- endif %}
145
    {%- endif %}
146
{%- block linktags %}
147
    {%- if hasdoc('about') %}
148
    <link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
149
    {%- endif %}
150
    {%- if hasdoc('genindex') %}
151
    <link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
152
    {%- endif %}
153
    {%- if hasdoc('search') %}
154
    <link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
155
    {%- endif %}
156
    {%- if hasdoc('copyright') %}
157
    <link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
158
    {%- endif %}
159
    <link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" />
160
    {%- if parents %}
161
    <link rel="up" title="{{ parents[-1].title|striptags }}" href="{{ parents[-1].link|e }}" />
162
    {%- endif %}
163
    {%- if next %}
164
    <link rel="next" title="{{ next.title|striptags }}" href="{{ next.link|e }}" />
165
    {%- endif %}
166
    {%- if prev %}
167
    <link rel="prev" title="{{ prev.title|striptags }}" href="{{ prev.link|e }}" />
168
    {%- endif %}
169
{%- endblock %}
170
{%- block extrahead %} {% endblock %}
171
  </head>
172
  <body>
173
  <div class="banner">
174
      <img class="logo" src="_static/metacat-logo.png" />
175
      <img class="logo-right" src="_static/nceas-logo.png" />
176
      <p class="title">Metacat: Metadata and Data Management Server</p>
177
  </div>
178

  
179
{%- block header %}{% endblock %}
180

  
181
{%- block relbar1 %}{{ relbar() }}{% endblock %}
182

  
183
{# Comment out the sidebar
184
  {%- block sidebar1 %} {# possible location for sidebar  {% endblock %}
185
#}
186
    <div class="document">
187
{%- block document %}
188
      <div class="documentwrapper">
189
      {%- if not embedded %}{% if not theme_nosidebar|tobool %}
190
        <div class="bodywrapper">
191
      {%- endif %}{% endif %}
192
          <div class="body">
193
            {% block body %} {% endblock %}
194
          </div>
195
      {%- if not embedded %}{% if not theme_nosidebar|tobool %}
196
        </div>
197
      {%- endif %}{% endif %}
198
      </div>
199
{%- endblock %}
200

  
201
{# {%- block sidebar2 %}{{ sidebar() }}{% endblock %} #}
202
      <div class="clearer"></div>
203
    </div>
204

  
205
{%- block relbar2 %}{{ relbar() }}{% endblock %}
206

  
207
{%- block footer %}
208
    <div class="footer">
209
    {%- if hasdoc('copyright') %}
210
      {% trans path=pathto('copyright'), copyright=copyright|e %}&copy; <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
211
    {%- else %}
212
      {% trans copyright=copyright|e %}&copy; Copyright {{ copyright }}.{% endtrans %}
213
    {%- endif %}
214
    {%- if last_updated %}
215
      {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
216
    {%- endif %}
217
    {%- if show_sphinx %}
218
      {% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %}
219
    {%- endif %}
220
    </div>
221
{%- endblock %}
222
  </body>
223
</html>
docs/dev/metacat/source/license.rst
1
License
2
=======
3
  
4
::
5
  
6
                      GNU GENERAL PUBLIC LICENSE
7
                         Version 2, June 1991
8
  
9
   Copyright (C) 1989, 1991 Free Software Foundation, Inc.
10
                         59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
11
   Everyone is permitted to copy and distribute verbatim copies
12
   of this license document, but changing it is not allowed.
13
  
14
                              Preamble
15
  
16
    The licenses for most software are designed to take away your
17
  freedom to share and change it.  By contrast, the GNU General Public
18
  License is intended to guarantee your freedom to share and change free
19
  software--to make sure the software is free for all its users.  This
20
  General Public License applies to most of the Free Software
21
  Foundation's software and to any other program whose authors commit to
22
  using it.  (Some other Free Software Foundation software is covered by
23
  the GNU Library General Public License instead.)  You can apply it to
24
  your programs, too.
25
  
26
    When we speak of free software, we are referring to freedom, not
27
  price.  Our General Public Licenses are designed to make sure that you
28
  have the freedom to distribute copies of free software (and charge for
29
  this service if you wish), that you receive source code or can get it
30
  if you want it, that you can change the software or use pieces of it
31
  in new free programs; and that you know you can do these things.
32
  
33
    To protect your rights, we need to make restrictions that forbid
34
  anyone to deny you these rights or to ask you to surrender the rights.
35
  These restrictions translate to certain responsibilities for you if you
36
  distribute copies of the software, or if you modify it.
37
  
38
    For example, if you distribute copies of such a program, whether
39
  gratis or for a fee, you must give the recipients all the rights that
40
  you have.  You must make sure that they, too, receive or can get the
41
  source code.  And you must show them these terms so they know their
42
  rights.
43
  
44
    We protect your rights with two steps: (1) copyright the software, and
45
  (2) offer you this license which gives you legal permission to copy,
46
  distribute and/or modify the software.
47
  
48
    Also, for each author's protection and ours, we want to make certain
49
  that everyone understands that there is no warranty for this free
50
  software.  If the software is modified by someone else and passed on, we
51
  want its recipients to know that what they have is not the original, so
52
  that any problems introduced by others will not reflect on the original
53
  authors' reputations.
54
  
55
    Finally, any free program is threatened constantly by software
56
  patents.  We wish to avoid the danger that redistributors of a free
57
  program will individually obtain patent licenses, in effect making the
58
  program proprietary.  To prevent this, we have made it clear that any
59
  patent must be licensed for everyone's free use or not licensed at all.
60
  
61
    The precise terms and conditions for copying, distribution and
62
  modification follow.
63
  
64
                      GNU GENERAL PUBLIC LICENSE
65
     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
66
  
67
    0. This License applies to any program or other work which contains
68
  a notice placed by the copyright holder saying it may be distributed
69
  under the terms of this General Public License.  The "Program", below,
70
  refers to any such program or work, and a "work based on the Program"
71
  means either the Program or any derivative work under copyright law:
72
  that is to say, a work containing the Program or a portion of it,
73
  either verbatim or with modifications and/or translated into another
74
  language.  (Hereinafter, translation is included without limitation in
75
  the term "modification".)  Each licensee is addressed as "you".
76
  
77
  Activities other than copying, distribution and modification are not
78
  covered by this License; they are outside its scope.  The act of
79
  running the Program is not restricted, and the output from the Program
80
  is covered only if its contents constitute a work based on the
81
  Program (independent of having been made by running the Program).
82
  Whether that is true depends on what the Program does.
83
  
84
    1. You may copy and distribute verbatim copies of the Program's
85
  source code as you receive it, in any medium, provided that you
86
  conspicuously and appropriately publish on each copy an appropriate
87
  copyright notice and disclaimer of warranty; keep intact all the
88
  notices that refer to this License and to the absence of any warranty;
89
  and give any other recipients of the Program a copy of this License
90
  along with the Program.
91
  
92
  You may charge a fee for the physical act of transferring a copy, and
93
  you may at your option offer warranty protection in exchange for a fee.
94
  
95
    2. You may modify your copy or copies of the Program or any portion
96
  of it, thus forming a work based on the Program, and copy and
97
  distribute such modifications or work under the terms of Section 1
98
  above, provided that you also meet all of these conditions:
99
  
100
      a) You must cause the modified files to carry prominent notices
101
      stating that you changed the files and the date of any change.
102
  
103
      b) You must cause any work that you distribute or publish, that in
104
      whole or in part contains or is derived from the Program or any
105
      part thereof, to be licensed as a whole at no charge to all third
106
      parties under the terms of this License.
107
  
108
      c) If the modified program normally reads commands interactively
109
      when run, you must cause it, when started running for such
110
      interactive use in the most ordinary way, to print or display an
111
      announcement including an appropriate copyright notice and a
112
      notice that there is no warranty (or else, saying that you provide
113
      a warranty) and that users may redistribute the program under
114
      these conditions, and telling the user how to view a copy of this
115
      License.  (Exception: if the Program itself is interactive but
116
      does not normally print such an announcement, your work based on
117
      the Program is not required to print an announcement.)
118
  
119
  These requirements apply to the modified work as a whole.  If
120
  identifiable sections of that work are not derived from the Program,
121
  and can be reasonably considered independent and separate works in
122
  themselves, then this License, and its terms, do not apply to those
123
  sections when you distribute them as separate works.  But when you
124
  distribute the same sections as part of a whole which is a work based
125
  on the Program, the distribution of the whole must be on the terms of
126
  this License, whose permissions for other licensees extend to the
127
  entire whole, and thus to each and every part regardless of who wrote it.
128
  
129
  Thus, it is not the intent of this section to claim rights or contest
130
  your rights to work written entirely by you; rather, the intent is to
131
  exercise the right to control the distribution of derivative or
132
  collective works based on the Program.
133
  
134
  In addition, mere aggregation of another work not based on the Program
135
  with the Program (or with a work based on the Program) on a volume of
136
  a storage or distribution medium does not bring the other work under
137
  the scope of this License.
138
  
139
    3. You may copy and distribute the Program (or a work based on it,
140
  under Section 2) in object code or executable form under the terms of
141
  Sections 1 and 2 above provided that you also do one of the following:
142
  
143
      a) Accompany it with the complete corresponding machine-readable
144
      source code, which must be distributed under the terms of Sections
145
      1 and 2 above on a medium customarily used for software interchange; or,
146
  
147
      b) Accompany it with a written offer, valid for at least three
148
      years, to give any third party, for a charge no more than your
149
      cost of physically performing source distribution, a complete
150
      machine-readable copy of the corresponding source code, to be
151
      distributed under the terms of Sections 1 and 2 above on a medium
152
      customarily used for software interchange; or,
153
  
154
      c) Accompany it with the information you received as to the offer
155
      to distribute corresponding source code.  (This alternative is
156
      allowed only for noncommercial distribution and only if you
157
      received the program in object code or executable form with such
158
      an offer, in accord with Subsection b above.)
159
  
160
  The source code for a work means the preferred form of the work for
161
  making modifications to it.  For an executable work, complete source
162
  code means all the source code for all modules it contains, plus any
163
  associated interface definition files, plus the scripts used to
164
  control compilation and installation of the executable.  However, as a
165
  special exception, the source code distributed need not include
166
  anything that is normally distributed (in either source or binary
167
  form) with the major components (compiler, kernel, and so on) of the
168
  operating system on which the executable runs, unless that component
169
  itself accompanies the executable.
170
  
171
  If distribution of executable or object code is made by offering
172
  access to copy from a designated place, then offering equivalent
173
  access to copy the source code from the same place counts as
174
  distribution of the source code, even though third parties are not
175
  compelled to copy the source along with the object code.
176
  
177
    4. You may not copy, modify, sublicense, or distribute the Program
178
  except as expressly provided under this License.  Any attempt
179
  otherwise to copy, modify, sublicense or distribute the Program is
180
  void, and will automatically terminate your rights under this License.
181
  However, parties who have received copies, or rights, from you under
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff